[
  {
    "path": ".github/ISSUE_TEMPLATE/issue-with-the-sample-code.md",
    "content": "---\nname: Issue with the sample code\nabout: Are you having issues when running the code in this repo?\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Description**\nDescription of what the issue is about\n\n**Expected behavior**\nWhat you expected to happen？\n\n**Current behavior**\nWhat actually happened？\n\n**Screenshots**\nIf applicable, add screenshots to help explain your issue\n\n**Logs**\nPost logs here or paste them to [Ghostbin](https://ghostbin.co) and insert the link here.\n\n**Environment**\n - Platform: [e.g. React-Native/Cordova/Flutter/Xamarin]\n - Kit: [e.g. Push/Map/Ads/Account/IAP]\n - Kit Version [e.g. 5.0.3]\n - OS Version [e.g. Android 11]\n - Android Studio version (if applicable) [e.g. 4.1]\n - Platform version (if applicable)\n - Node Version (if applicable)\n - Your Location/Region (if applicable) \n\n**Other**\nAdd any other context about the problem here\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS\n"
  },
  {
    "path": "README.md",
    "content": "# HMS React-Native Plugins\n\n[![license](https://img.shields.io/badge/license-Apache--2.0-green)](./LICENSE)\n\nThis repo contains the source code for HMS React-Native first-party plugins, which are developed by the HMS Core team.\n\nThese plugins enable access to using kit-specific APIs. For more information\nabout plugins, and how to use them, see\n[Official Documentations](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1).\n\n## Plugins\n\nThese are the available plugins in this repository.\n\n| Plugin | Version | Downloads | Documentation | Demo Project |\n| --- | --- | --- | --- | --- |\n| [**Account**](./react-native-hms-account) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-account?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-account) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-account?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-account) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparing-the-development-environment-0000001050766307?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051087380?ha_source=hms1) | [example](./react-native-hms-account/example) |\n| [**Ads**](./react-native-hms-ads) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-ads?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ads) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-ads?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ads) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/dev-env-0000001050442053?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/ads-0000001050311042?ha_source=hms1) | [example](./react-native-hms-ads/example) |\n| [**Ads-Prime**](./react-native-hms-adsprime) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-adsprime?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ads) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-adsprime?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-adsprime) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/dev-env-0000001050442053?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/ads-0000001050311042?ha_source=hms1) | [example](./react-native-hms-adsprime/example) |\n| [**Analytics**](./react-native-hms-analytics) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-analytics?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-analytics) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-analytics?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-analytics)         | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051387084?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001053026463?ha_source=hms1) | [example](./react-native-hms-analytics/example) |\n| [**AR**](./react-native-hms-ar) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-ar?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ar) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-ar?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ar) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001058623563?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001058415717?ha_source=hms1) | [example](./react-native-hms-ar/example) |\n| [**Availability**](./react-native-hms-availability) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-availability?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-availability) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-availability?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-availability) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparing-the-development-environment-0000001091092010?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001092614672?ha_source=hms1) | [example](./react-native-hms-availability/example) |\n| [**Awareness**](./react-native-hms-awareness) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-awareness?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-awareness) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-awareness?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-awareness) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparing-the-development-environment-0000001073515903?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001074268798?ha_source=hms1) | [example](./react-native-hms-awareness/example) |\n| [**Contact Shield**](./react-native-hms-contactshield) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-contactshield?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-contactshield) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-contactshield?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-contactshield) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001062519333?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001062825598?ha_source=hms1) | [example](./react-native-hms-contactshield/example) |\n| [**DTM**](./react-native-hms-dtm) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-dtm?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-dtm) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-dtm?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-dtm) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-development-environment-0000001056858057?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001057153998?ha_source=hms1) | [example](./react-native-hms-health/example) |\n| [**Health**](./react-native-hms-health) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-health?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-health) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-health?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-health) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050157757?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001074141482?ha_source=hms1) | [example](./react-native-hms-dtm/example) |\n| [**IAP**](./react-native-hms-iap) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-iap?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-iap) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-iap?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-iap) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050766241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051087324?ha_source=hms1) | [example](./react-native-hms-iap/example) |\n| [**Location**](./react-native-hms-location) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-location?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-location) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-location?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-location) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050041326?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001050041352?ha_source=hms1) | [example](./react-native-hms-location/example) |\n| [**Map**](./react-native-hms-map) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-map?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-map) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-map?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-map) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050032222?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/mapview-0000001051150160?ha_source=hms1) | [example](./react-native-hms-map/example) |\n| [**ML**](./react-native-hms-ml) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-ml?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ml) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-ml?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-ml) | [Getting Started](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-References/introduction-0000001665009017-V1?ha_source=hms1) | [example](./react-native-hms-ml/example) |\n| [**ML Body**](./react-native-hms-mlbody) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-mlbody?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mlbody) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-mlbody?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mlbody) | [Getting Started](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-References/modules-overview-0000001693740344-V1?ha_source=hms1) | [example](./react-native-hms-mlbody/example) |\n| [**ML Image**](./react-native-hms-mlimage) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-mlimage?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mlimage) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-mlimage?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mlimage) | [Getting Started](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-References/modules-overview-0000001668659234-V1?ha_source=hms1) | [example](./react-native-hms-mlimage/example) |\n| [**ML Language**](./react-native-hms-mllanguage) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-mllanguage?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mllanguage) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-mllanguage?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mllanguage) | [Getting Started](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-References/overview-0000001664689457-V1?ha_source=hms1) | [example](./react-native-hms-mllanguage/example) |\n| [**ML Text**](./react-native-hms-mltext) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-mltext?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mltext) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-mltext?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-mltext) | [Getting Started](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/HMS-Plugin-References/modules-overview-0000001713816349-V1?ha_source=hms1) | [example](./react-native-hms-mltext/example) |\n| [**Nearby**](./react-native-hms-nearby) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-nearby?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-nearby) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-nearby?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-nearby) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-development-environment-0000001054260430?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001053958778?ha_source=hms1) | [example](./react-native-hms-nearby/example) |\n| [**Push**](./react-native-hms-push) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-push?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-push) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-push?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-push) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050155838?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/push-overview-0000001193655312?ha_source=hms1) | [example](./react-native-hms-push/example) |\n| [**Push-Fcm**](./react-native-hms-push-fcm) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-push-fcm?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-push-fcm) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-push-fcm?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-push-fcm) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050155838?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/push-fcm-overview-0000001238655297?ha_source=hms1) | [example](./react-native-hms-push-fcm/example) |\n| [**Safety Detect**](./react-native-hms-safetydetect) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-safetydetect?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-safetydetect) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-safetydetect?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-safetydetect) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-dev-env-0000001052646231?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001052765437?ha_source=hms1) | [example](./react-native-hms-scan/example) |\n| [**Scan**](./react-native-hms-scan) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-scan?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-scan) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-scan?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-scan) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-dev-env-0000001056166177?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001057541182?ha_source=hms1) | [example](./react-native-hms-scan/example) |\n| [**Site**](./react-native-hms-site) | [![version](https://img.shields.io/npm/v/@hmscore/react-native-hms-site?color=%23ed2a1c&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-site) | [![download-npm](https://img.shields.io/npm/dm/@hmscore/react-native-hms-site?color=%23007EC6&style=for-the-badge)](https://www.npmjs.com/package/@hmscore/react-native-hms-site) | [Getting Started](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/dev-env-0000001050442053?ha_source=hms1) <br/> [API Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051070802?ha_source=hms1) | [example](./react-native-hms-site/example) |\n\n## Question or issues\n\nIf you want to evaluate more about HMS Core, [r/HMSCore on Reddit](https://www.reddit.com/r/HuaweiDevelopers/) is for you to keep up with latest news about HMS Core, and to exchange insights with other developers.\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with `huawei-mobile-services`.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001?ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n\nIf you run into a bug in our samples, please submit an [issue](https://github.com/HMS-Core/hms-react-native-plugin/issues) to the Repository. Even better you can submit a [Pull Request](https://github.com/HMS-Core/hms-react-native-plugin/pulls) with a fix.\n"
  },
  {
    "path": "react-native-hms-account/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-account/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Account</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-account\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-account?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-account\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-account?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-account.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI Account Kit enables communication between Huawei Account SDK and React Native platform. \n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001051086206?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-account\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparing-the-development-environment-0000001050766307?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051087380?ha_source=hms1)\n\n### Additional Topics\n\n- [HMSAuthButton](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/huawei-id-auth-button-0000001051087180?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native Plugin is licenced under [Apache 2.0 licence](LICENSE)\n"
  },
  {
    "path": "react-native-hms-account/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        mavenCentral()\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility = 1.8\n        targetCompatibility = 1.8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    jcenter()\n    mavenCentral()\n    google()\n}\n\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:hwid:6.12.0.300'\n}\n"
  },
  {
    "path": "react-native-hms-account/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-account/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4608m"
  },
  {
    "path": "react-native-hms-account/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-account/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.account\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/HMSAccountPackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.account.modules.HMSAccount;\nimport com.huawei.hms.rn.account.modules.HMSAccountAuthManager;\nimport com.huawei.hms.rn.account.modules.HMSAccountAuthService;\nimport com.huawei.hms.rn.account.modules.HMSHuaweiIdAuthManager;\nimport com.huawei.hms.rn.account.modules.HMSHuaweiIdAuthTool;\nimport com.huawei.hms.rn.account.modules.HMSNetworkTool;\nimport com.huawei.hms.rn.account.modules.HMSReadSMSManager;\nimport com.huawei.hms.rn.account.views.HMSHuaweiIdAuthButton;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSAccountPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.<NativeModule>asList(new HMSAccount(reactContext), new HMSAccountAuthService(reactContext),\n            new HMSAccountAuthManager(reactContext), new HMSReadSMSManager(reactContext),\n            new HMSHuaweiIdAuthManager(reactContext), new HMSHuaweiIdAuthTool(reactContext),\n            new HMSNetworkTool(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Collections.<ViewManager>singletonList(new HMSHuaweiIdAuthButton(reactContext));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/constants/ClassConstants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.constants;\n\nimport com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;\nimport com.huawei.hms.support.sms.common.ReadSmsConstant;\n\npublic enum ClassConstants {\n    READ_SMS_CONSTANT_EXTRA_SMS_MESSAGE(ReadSmsConstant.EXTRA_SMS_MESSAGE),\n    READ_SMS_CONSTANT_EXTRA_STATUS(ReadSmsConstant.EXTRA_STATUS),\n    READ_SMS_BROADCAST_ACTION(ReadSmsConstant.READ_SMS_BROADCAST_ACTION),\n    HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_RED(HuaweiIdAuthButton.COLOR_POLICY_RED),\n    HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_WHITE(HuaweiIdAuthButton.COLOR_POLICY_WHITE),\n    HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_WHITE_WITH_BORDER(HuaweiIdAuthButton.COLOR_POLICY_WHITE_WITH_BORDER),\n    HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_BLACK(HuaweiIdAuthButton.COLOR_POLICY_BLACK),\n    HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_GRAY(HuaweiIdAuthButton.COLOR_POLICY_GRAY),\n    HUAWEI_ID_AUTH_BUTTON_THEME_FULL_TITLE(HuaweiIdAuthButton.THEME_FULL_TITLE),\n    HUAWEI_ID_AUTH_BUTTON_THEME_NO_TITLE(HuaweiIdAuthButton.THEME_NO_TITLE),\n    HUAWEI_ID_AUTH_BUTTON_CORNER_RADIUS_LARGE(HuaweiIdAuthButton.CORNER_RADIUS_LARGE),\n    HUAWEI_ID_AUTH_BUTTON_CORNER_RADIUS_MEDIUM(HuaweiIdAuthButton.CORNER_RADIUS_MEDIUM),\n    HUAWEI_ID_AUTH_BUTTON_CORNER_RADIUS_SMALL(HuaweiIdAuthButton.CORNER_RADIUS_SMALL);\n\n    private String stringValue;\n\n    private Integer intValue;\n\n    ClassConstants(String stringValue) {\n        this.stringValue = stringValue;\n    }\n\n    ClassConstants(Integer intValue) {\n        this.intValue = intValue;\n    }\n\n    public Integer getIntValue() {\n        return intValue;\n    }\n\n    public String getStringValue() {\n        return stringValue;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Account\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"6.12.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSAccount.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.rn.account.constants.ClassConstants;\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.hwid.HuaweiIdAuthManager;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParams;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParamsHelper;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\nimport com.huawei.hms.support.hwid.service.HuaweiIdAuthService;\nimport com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.uimanager.UIManagerModule;\n\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.Objects;\n\npublic class HMSAccount extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private static final int REQUEST_CODE_LOG_IN = 0;\n\n    private static final String FIELD_HUAWEI_ID_AUTH_PARAMS = \"huaweiIdAuthParams\";\n\n    private static final String FIELD_REQUEST_OPTION = \"authRequestOption\";\n\n    private static final String FIELD_AUTH_SCOPES_LIST = \"authScopeList\";\n\n    private HuaweiIdAuthService huaweiIdService;\n\n    private Promise mSignInPromise;\n\n    private HMSLogger logger;\n\n    public HMSAccount(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n        reactContext.addActivityEventListener(this);\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAccount\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        final Map<String, Object> constantsToBeExposed = new HashMap<>();\n        for (ClassConstants constant : ClassConstants.values()) {\n            constantsToBeExposed.put(constant.name(),\n                constant.getIntValue() == null ? constant.getStringValue() : constant.getIntValue());\n        }\n        return constantsToBeExposed;\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n        if (requestCode == REQUEST_CODE_LOG_IN && mSignInPromise != null) {\n            Task<AuthHuaweiId> authHuaweiIdTask = HuaweiIdAuthManager.parseAuthResultFromIntent(intent);\n            logger.sendSingleEvent(\"signIn\");\n            authHuaweiIdTask.addOnSuccessListener(authHuaweiId -> mSignInPromise.resolve(\n                Utils.parseAuthHuaweiId(authHuaweiId, getReactApplicationContext())))\n                .addOnFailureListener(e -> Utils.handleError(mSignInPromise, e));\n        }\n    }\n\n    @ReactMethod\n    public void signIn(ReadableMap arguments, final Promise promise) {\n        String fieldName = (String) Utils.argumentNullCheck(arguments, FIELD_HUAWEI_ID_AUTH_PARAMS);\n        ReadableArray requestOption = (ReadableArray) Utils.argumentNullCheck(arguments, FIELD_REQUEST_OPTION);\n        ReadableArray authScopeList = (ReadableArray) Utils.argumentNullCheck(arguments, FIELD_AUTH_SCOPES_LIST);\n        if (fieldName == null) {\n            promise.reject(\"3000\", \"Null huaweiIdAuthParams Parameter\");\n        } else {\n            logger.startMethodExecutionTimer(\"signIn\");\n            huaweiIdService = HuaweiIdAuthManager.getService(Objects.requireNonNull(getCurrentActivity()),\n                Utils.toHuaweiIdAuthParams(requestOption, fieldName, authScopeList, promise));\n            getCurrentActivity().startActivityForResult(huaweiIdService.getSignInIntent(), REQUEST_CODE_LOG_IN);\n            this.mSignInPromise = promise;\n        }\n    }\n\n    @ReactMethod\n    public void signOut(final Promise promise) {\n        if (huaweiIdService != null) {\n            logger.startMethodExecutionTimer(\"signOut\");\n            Task<Void> signOutTask = huaweiIdService.signOut();\n            logger.sendSingleEvent(\"signOut\");\n            signOutTask.addOnSuccessListener(task -> promise.resolve(true))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3001\", \"Null service\");\n        }\n    }\n\n    @ReactMethod\n    public void silentSignIn(ReadableMap arguments, final Promise promise) {\n        String fieldName = (String) Utils.argumentNullCheck(arguments, FIELD_HUAWEI_ID_AUTH_PARAMS);\n        HuaweiIdAuthParams authParams = null;\n        if (fieldName != null) {\n            logger.startMethodExecutionTimer(\"silentSignIn\");\n            if (fieldName.equals(\"DEFAULT_AUTH_REQUEST_PARAM\")) {\n                authParams = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();\n            } else if (fieldName.equals(\"DEFAULT_AUTH_REQUEST_PARAM_GAME\")) {\n                authParams = new HuaweiIdAuthParamsHelper(\n                    HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME).createParams();\n            } else {\n                promise.reject(\"3003\", \"Invalid huaweiIdAuthParams Parameter\");\n            }\n            huaweiIdService = HuaweiIdAuthManager.getService(Objects.requireNonNull(getCurrentActivity()), authParams);\n            Task<AuthHuaweiId> silentSignInTask = huaweiIdService.silentSignIn();\n            logger.sendSingleEvent(\"silentSignIn\");\n            silentSignInTask.addOnSuccessListener(\n                authHuaweiId -> promise.resolve(Utils.parseAuthHuaweiId(authHuaweiId, getReactApplicationContext())))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3000\", \"Null huaweiIdAuthParams Parameter\");\n        }\n    }\n\n    @ReactMethod\n    public void cancelAuthorization(final Promise promise) {\n        if (huaweiIdService != null) {\n            logger.startMethodExecutionTimer(\"cancelAuthorization\");\n            Task<Void> cancelAuthorizationTask = huaweiIdService.cancelAuthorization();\n            logger.sendSingleEvent(\"cancelAuthorization\");\n            cancelAuthorizationTask.addOnSuccessListener(task -> promise.resolve(true))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3001\", \"Null service\");\n        }\n    }\n\n    @ReactMethod\n    public void getButtonInfo(final int viewId, final Promise promise) {\n        UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n        uiManager.addUIBlock(nativeViewHierarchyManager -> {\n            View view = nativeViewHierarchyManager.resolveView(viewId);\n            if (view instanceof HuaweiIdAuthButton) {\n                HuaweiIdAuthButton button = (HuaweiIdAuthButton) view;\n                promise.resolve(Utils.parseButton(button));\n                return;\n            }\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void enableLogger() {\n        logger.enableLogger();\n    }\n\n    @ReactMethod\n    public void disableLogger() {\n        logger.disableLogger();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSAccountAuthManager.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.account.AccountAuthManager;\nimport com.huawei.hms.support.account.common.AccountAuthException;\nimport com.huawei.hms.support.account.result.AuthAccount;\nimport com.huawei.hms.support.api.entity.auth.Scope;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.List;\nimport java.util.Objects;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSAccountAuthManager extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private static final String FIELD_AUTH_ACCOUNT = \"authAccount\";\n\n    private static final int REQUEST_ADD_AUTH_SCOPES = 999;\n\n    private Promise mAddAuthScopesPromiseT;\n\n    private HMSLogger logger;\n\n    public HMSAccountAuthManager(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n        reactContext.addActivityEventListener(this);\n    }\n\n    @Nonnull\n    @Override\n    public String getName() {\n        return \"HMSAccountAuthManager\";\n    }\n\n    @ReactMethod\n    public void getAuthResult(Promise promise) {\n        logger.startMethodExecutionTimer(\"getAuthResult\");\n        ReadableMap parsedAuthAccount = Utils.parseAuthAccount(AccountAuthManager.getAuthResult(),\n            getReactApplicationContext());\n        logger.sendSingleEvent(\"getAuthResult\");\n        promise.resolve(parsedAuthAccount);\n    }\n\n    @ReactMethod\n    public void getAuthResultWithScopes(ReadableMap arguments, Promise promise) {\n        ReadableArray scope = Utils.getScopeArray(arguments);\n        if (scope != null) {\n            List<Scope> scopeList = Utils.toScopeList(scope);\n            try {\n                logger.startMethodExecutionTimer(\"getAuthResultWithScopes\");\n                ReadableMap parsedAuthAccount = Utils.parseAuthAccount(\n                    AccountAuthManager.getAuthResultWithScopes(scopeList), getReactApplicationContext());\n                logger.sendSingleEvent(\"getAuthResultWithScopes\");\n                promise.resolve(parsedAuthAccount);\n            } catch (AccountAuthException e) {\n                Utils.handleError(promise, e);\n            }\n        } else {\n            promise.reject(\"3004\", \"Null authScopeList\");\n        }\n    }\n\n    @ReactMethod\n    public void containScopes(ReadableMap readableMap, Promise promise) {\n        ReadableMap fieldAuthAccount = (ReadableMap) Utils.argumentNullCheck(readableMap, FIELD_AUTH_ACCOUNT);\n        ReadableArray array = Utils.getScopeArray(readableMap);\n\n        if (fieldAuthAccount != null && array != null) {\n            AuthAccount authAccount = Utils.toAuthResult(fieldAuthAccount, FIELD_AUTH_ACCOUNT);\n            List<Scope> scopeList = Utils.toScopeList(array);\n            logger.startMethodExecutionTimer(\"containScopes\");\n            boolean isContainScope = AccountAuthManager.containScopes(authAccount, scopeList);\n            logger.sendSingleEvent(\"containScopes\");\n            promise.resolve(isContainScope);\n        } else {\n            promise.reject(\"3016\", \"Null authAccount or authScopeList\");\n        }\n    }\n\n    @ReactMethod\n    public void addAuthScopes(ReadableMap readableMap, Promise promise) {\n        logger.startMethodExecutionTimer(\"addAuthScopes\");\n        mAddAuthScopesPromiseT = promise;\n        AccountAuthManager.addAuthScopes(Objects.requireNonNull(getCurrentActivity()), REQUEST_ADD_AUTH_SCOPES,\n            Utils.toScopeList(Utils.getScopeArray(readableMap)));\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n        if (requestCode == REQUEST_ADD_AUTH_SCOPES && mAddAuthScopesPromiseT != null) {\n            logger.sendSingleEvent(\"addAuthScopes\");\n            mAddAuthScopesPromiseT.resolve(true);\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSAccountAuthService.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.account.AccountAuthManager;\nimport com.huawei.hms.support.account.request.AccountAuthParams;\nimport com.huawei.hms.support.account.request.AccountAuthParamsHelper;\nimport com.huawei.hms.support.account.result.AccountIcon;\nimport com.huawei.hms.support.account.result.AuthAccount;\nimport com.huawei.hms.support.account.service.AccountAuthService;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.Objects;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSAccountAuthService extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private static final int REQUEST_CODE_LOG_IN = 0;\n\n    private static final String FIELD_ACCOUNT_AUTH_PARAMS = \"accountAuthParams\";\n\n    private static final String FIELD_REQUEST_OPTION = \"authRequestOption\";\n\n    private static final String FIELD_AUTH_SCOPES_LIST = \"authScopeList\";\n\n    private AccountAuthService accountAuthService;\n\n    private Promise mSignInAccountPromise;\n\n    private HMSLogger logger;\n\n    public HMSAccountAuthService(@Nonnull ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n        reactContext.addActivityEventListener(this);\n    }\n\n    @Nonnull\n    @Override\n    public String getName() {\n        return \"HMSAccountAuthService\";\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n        if (requestCode == REQUEST_CODE_LOG_IN && mSignInAccountPromise != null) {\n            Task<AuthAccount> accountAuthTask = AccountAuthManager.parseAuthResultFromIntent(intent);\n            accountAuthTask.addOnSuccessListener(authAccount -> mSignInAccountPromise.resolve(\n                Utils.parseAuthAccount(authAccount, getReactApplicationContext())))\n                .addOnFailureListener(e -> Utils.handleError(mSignInAccountPromise, e));\n        }\n    }\n\n    @ReactMethod\n    public void signIn(ReadableMap arguments, final Promise promise) {\n        String fieldName = (String) Utils.argumentNullCheck(arguments, FIELD_ACCOUNT_AUTH_PARAMS);\n        ReadableArray requestOption = (ReadableArray) Utils.argumentNullCheck(arguments, FIELD_REQUEST_OPTION);\n        ReadableArray authScopeList = (ReadableArray) Utils.argumentNullCheck(arguments, FIELD_AUTH_SCOPES_LIST);\n\n        if (fieldName == null) {\n            promise.reject(\"3014\", \"Null accountAuthParams Parameter\");\n        } else {\n            logger.startMethodExecutionTimer(\"signIn\");\n            accountAuthService = AccountAuthManager.getService(Objects.requireNonNull(getCurrentActivity()),\n                Utils.toAccountAuthParams(requestOption, fieldName, authScopeList, promise));\n            getCurrentActivity().startActivityForResult(accountAuthService.getSignInIntent(), REQUEST_CODE_LOG_IN);\n            logger.sendSingleEvent(\"signIn\");\n            this.mSignInAccountPromise = promise;\n        }\n    }\n\n    @ReactMethod\n    public void signOut(final Promise promise) {\n        if (accountAuthService != null) {\n            logger.startMethodExecutionTimer(\"signOut\");\n            Task<Void> signOutTask = accountAuthService.signOut();\n            logger.sendSingleEvent(\"signOut\");\n            signOutTask.addOnSuccessListener(task -> promise.resolve(true))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3001\", \"Null service\");\n        }\n    }\n\n    @ReactMethod\n    public void getChannel(final Promise promise) {\n        if (accountAuthService != null) {\n            logger.startMethodExecutionTimer(\"getChannel\");\n            Task<AccountIcon> task = accountAuthService.getChannel();\n            logger.sendSingleEvent(\"getChannel\");\n            task.addOnSuccessListener(accountIcon -> promise.resolve(Utils.parseAccountIcon(accountIcon)))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3001\", \"Null service\");\n        }\n    }\n\n    @ReactMethod\n    public void silentSignIn(ReadableMap arguments, final Promise promise) {\n        String fieldName = (String) Utils.argumentNullCheck(arguments, FIELD_ACCOUNT_AUTH_PARAMS);\n        AccountAuthParams authParams = null;\n        if (fieldName != null) {\n            logger.startMethodExecutionTimer(\"silentSignIn\");\n            if (fieldName.equals(\"DEFAULT_AUTH_REQUEST_PARAM\")) {\n                authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).createParams();\n            } else if (fieldName.equals(\"DEFAULT_AUTH_REQUEST_PARAM_GAME\")) {\n                authParams = new AccountAuthParamsHelper(\n                    AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME).createParams();\n            } else {\n                promise.reject(\"3015\", \"Invalid accountAuthParams Parameter\");\n            }\n            accountAuthService = AccountAuthManager.getService(Objects.requireNonNull(getCurrentActivity()),\n                authParams);\n            Task<AuthAccount> silentSignInTask = accountAuthService.silentSignIn();\n            logger.sendSingleEvent(\"silentSignIn\");\n            silentSignInTask.addOnSuccessListener(\n                authAccount -> promise.resolve(Utils.parseAuthAccount(authAccount, getReactApplicationContext())))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3014\", \"Null accountAuthParams Parameter\");\n        }\n    }\n\n    @ReactMethod\n    public void cancelAuthorization(final Promise promise) {\n        if (accountAuthService != null) {\n            logger.startMethodExecutionTimer(\"cancelAuthorization\");\n            Task<Void> cancelAuthorizationTask = accountAuthService.cancelAuthorization();\n            logger.sendSingleEvent(\"cancelAuthorization\");\n            cancelAuthorizationTask.addOnSuccessListener(task -> promise.resolve(true))\n                .addOnFailureListener(e -> Utils.handleError(promise, e));\n        } else {\n            promise.reject(\"3001\", \"Null service\");\n        }\n    }\n\n    @ReactMethod\n    public void getIndependentSignInIntent(String accessToken, final Promise promise) {\n        if (accessToken != null) {\n            logger.startMethodExecutionTimer(\"getIndependentSignInIntent\");\n            AccountAuthParams authParams = new AccountAuthParamsHelper().setProfile().createParams();\n            accountAuthService = AccountAuthManager.getService(Objects.requireNonNull(getCurrentActivity()),\n                authParams);\n            this.mSignInAccountPromise = promise;\n            getCurrentActivity().startActivityForResult(accountAuthService.getIndependentSignInIntent(accessToken),\n                REQUEST_CODE_LOG_IN);\n            logger.sendSingleEvent(\"getIndependentSignInIntent\");\n        } else {\n            promise.reject(\"3017\", \"Null accessToken\");\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSHuaweiIdAuthManager.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.hwid.HuaweiIdAuthManager;\nimport com.huawei.hms.support.hwid.common.HuaweiIdAuthException;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.List;\nimport java.util.Objects;\n\npublic class HMSHuaweiIdAuthManager extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private static final String FIELD_AUTH_HUAWEI_ID = \"authHuaweiId\";\n\n    private static final int REQUEST_ADD_AUTH_SCOPES = 999;\n\n    private Promise mAddAuthScopesPromise;\n\n    private HMSLogger logger;\n\n    public HMSHuaweiIdAuthManager(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n        reactContext.addActivityEventListener(this);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSHuaweiIdAuthManager\";\n    }\n\n    @ReactMethod\n    public void getAuthResult(Promise promise) {\n        logger.startMethodExecutionTimer(\"getAuthResult\");\n        ReadableMap parsedAuthHuaweiId = Utils.parseAuthHuaweiId(HuaweiIdAuthManager.getAuthResult(),\n            getReactApplicationContext());\n        logger.sendSingleEvent(\"getAuthResult\");\n        promise.resolve(parsedAuthHuaweiId);\n    }\n\n    @ReactMethod\n    public void getAuthResultWithScopes(ReadableMap arguments, Promise promise) {\n        ReadableArray scope = Utils.getScopeArray(arguments);\n        if (scope != null) {\n            List<Scope> scopeList = Utils.toScopeList(scope);\n            try {\n                logger.startMethodExecutionTimer(\"getAuthResultWithScopes\");\n                ReadableMap parsedAuthHuaweiId = Utils.parseAuthHuaweiId(\n                    HuaweiIdAuthManager.getAuthResultWithScopes(scopeList), getReactApplicationContext());\n                logger.sendSingleEvent(\"getAuthResultWithScopes\");\n                promise.resolve(parsedAuthHuaweiId);\n            } catch (HuaweiIdAuthException e) {\n                Utils.handleError(promise, e);\n            }\n        } else {\n            promise.reject(\"3004\", \"Null authScopeList\");\n        }\n    }\n\n    @ReactMethod\n    public void addAuthScopes(ReadableMap readableMap, Promise promise) {\n        logger.startMethodExecutionTimer(\"addAuthScopes\");\n        mAddAuthScopesPromise = promise;\n        HuaweiIdAuthManager.addAuthScopes(Objects.requireNonNull(getCurrentActivity()), REQUEST_ADD_AUTH_SCOPES,\n            Utils.toScopeList(Utils.getScopeArray(readableMap)));\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n        if (requestCode == REQUEST_ADD_AUTH_SCOPES && mAddAuthScopesPromise != null) {\n            logger.sendSingleEvent(\"addAuthScopes\");\n            mAddAuthScopesPromise.resolve(true);\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n        // ignored\n    }\n\n    @ReactMethod\n    public void containScopes(ReadableMap readableMap, Promise promise) {\n        ReadableMap fieldAuthHuaweiId = (ReadableMap) Utils.argumentNullCheck(readableMap, FIELD_AUTH_HUAWEI_ID);\n        ReadableArray array = Utils.getScopeArray(readableMap);\n\n        if (fieldAuthHuaweiId != null && array != null) {\n            AuthHuaweiId authHuaweiId = Utils.toAuthResult(fieldAuthHuaweiId, FIELD_AUTH_HUAWEI_ID);\n            List<Scope> scopeList = Utils.toScopeList(array);\n            logger.startMethodExecutionTimer(\"containScopes\");\n            boolean isContainScope = HuaweiIdAuthManager.containScopes(authHuaweiId, scopeList);\n            logger.sendSingleEvent(\"containScopes\");\n            promise.resolve(isContainScope);\n        } else {\n            promise.reject(\"3005\", \"Null authHuaweiId or authScopeList\");\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSHuaweiIdAuthTool.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.accounts.Account;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.hwid.common.HuaweiIdAuthException;\nimport com.huawei.hms.support.hwid.tools.HuaweiIdAuthTool;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.List;\nimport java.util.Objects;\n\npublic class HMSHuaweiIdAuthTool extends ReactContextBaseJavaModule {\n    private static final String FIELD_ACCESS_TOKEN = \"accessToken\";\n\n    private static final String FIELD_HUAWEI_ACCOUNT_NAME = \"huaweiAccountName\";\n\n    private static final String FIELD_HUAWEI_ACCOUNT = \"huaweiAccount\";\n\n    private static final String FIELD_NAME = \"name\";\n\n    private static final String FIELD_TYPE = \"type\";\n\n    private HMSLogger logger;\n\n    public HMSHuaweiIdAuthTool(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSHuaweiIdAuthTool\";\n    }\n\n    @ReactMethod\n    public void deleteAuthInfo(ReadableMap arguments, Promise promise) {\n        String fieldAccessToken = (String) Utils.argumentNullCheck(arguments, FIELD_ACCESS_TOKEN);\n        if (fieldAccessToken != null) {\n            logger.startMethodExecutionTimer(\"deleteAuthInfo\");\n            try {\n                HuaweiIdAuthTool.deleteAuthInfo(Objects.requireNonNull(getCurrentActivity()), fieldAccessToken);\n                logger.sendSingleEvent(\"deleteAuthInfo\");\n                promise.resolve(true);\n            } catch (HuaweiIdAuthException e) {\n                logger.sendSingleEvent(\"deleteAuthInfo\", e.getLocalizedMessage());\n                Utils.handleError(promise, e);\n            }\n        } else {\n            promise.reject(\"3006\", \"Null accessToken\");\n        }\n    }\n\n    @ReactMethod\n    public void requestUnionId(ReadableMap arguments, Promise promise) {\n        String fieldAccountName = (String) Utils.argumentNullCheck(arguments, FIELD_HUAWEI_ACCOUNT_NAME);\n        if (fieldAccountName != null) {\n            logger.startMethodExecutionTimer(\"requestUnionId\");\n            try {\n                String requestedUnionId = HuaweiIdAuthTool.requestUnionId(Objects.requireNonNull(getCurrentActivity()),\n                    fieldAccountName);\n                logger.sendSingleEvent(\"requestUnionId\");\n                promise.resolve(requestedUnionId);\n            } catch (HuaweiIdAuthException e) {\n                logger.sendSingleEvent(\"requestUnionId\", e.getLocalizedMessage());\n                Utils.handleError(promise, e);\n            }\n        } else {\n            promise.reject(\"3007\", \"Null huaweiAccountName\");\n        }\n    }\n\n    @ReactMethod\n    public void requestAccessToken(ReadableMap arguments, Promise promise) {\n        ReadableMap fieldAccount = (ReadableMap) Utils.argumentNullCheck(arguments, FIELD_HUAWEI_ACCOUNT);\n        List<Scope> scopeList = Utils.toScopeList(Utils.getScopeArray(arguments));\n        if (fieldAccount != null) {\n            String fieldAccountName = (String) Utils.argumentNullCheck(fieldAccount, FIELD_NAME);\n            String fieldAccountType = (String) Utils.argumentNullCheck(fieldAccount, FIELD_TYPE);\n            if (fieldAccountName != null && fieldAccountType != null) {\n                Account account = new Account(fieldAccountName, fieldAccountType);\n                logger.startMethodExecutionTimer(\"requestAccessToken\");\n                try {\n                    String requestedAccessToken = HuaweiIdAuthTool.requestAccessToken(\n                        Objects.requireNonNull(getCurrentActivity()), account, scopeList);\n                    logger.sendSingleEvent(\"requestAccessToken\");\n                    promise.resolve(requestedAccessToken);\n                } catch (HuaweiIdAuthException e) {\n                    logger.sendSingleEvent(\"requestAccessToken\", e.getLocalizedMessage());\n                    Utils.handleError(promise, e);\n                }\n            } else {\n                promise.reject(\"3009\", \"Null huaweiAccount name or type parameter\");\n            }\n        } else {\n            promise.reject(\"3008\", \"Null huaweiAccount\");\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSNetworkTool.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.hwid.tools.NetworkTool;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSNetworkTool extends ReactContextBaseJavaModule {\n    private static final String FIELD_COOKIE_NAME = \"cookieName\";\n\n    private static final String FIELD_COOKIE_VALUE = \"cookieValue\";\n\n    private static final String FIELD_DOMAIN = \"domain\";\n\n    private static final String FIELD_PATH = \"path\";\n\n    private static final String FIELD_IS_HTTP_ONLY = \"isHttpOnly\";\n\n    private static final String FIELD_IS_SECURE = \"isSecure\";\n\n    private static final String FIELD_MAX_AGE = \"maxAge\";\n\n    private static final String FIELD_IS_USE_HTTPS = \"isUseHttps\";\n\n    private HMSLogger logger;\n\n    public HMSNetworkTool(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    public String getName() {\n        return \"HMSNetworkTool\";\n    }\n\n    @ReactMethod\n    public void buildNetworkCookie(ReadableMap arguments, Promise promise) {\n\n        String fieldCookieName = (String) Utils.argumentNullCheck(arguments, FIELD_COOKIE_NAME);\n        String fieldCookieValue = (String) Utils.argumentNullCheck(arguments, FIELD_COOKIE_VALUE);\n        String fieldDomain = (String) Utils.argumentNullCheck(arguments, FIELD_DOMAIN);\n        String fieldPath = (String) Utils.argumentNullCheck(arguments, FIELD_PATH);\n        Boolean fieldIsHttpOnly = arguments.hasKey(FIELD_IS_HTTP_ONLY) && arguments.getBoolean(FIELD_IS_HTTP_ONLY);\n        Boolean fieldIsSecure = arguments.hasKey(FIELD_IS_SECURE) && arguments.getBoolean(FIELD_IS_SECURE);\n        Long fieldMaxAge = Utils.argumentNullCheckAndConvert(arguments, FIELD_MAX_AGE);\n\n        if (fieldCookieName != null) {\n            logger.startMethodExecutionTimer(\"buildNetworkCookie\");\n            String networkCookieData = NetworkTool.buildNetworkCookie(fieldCookieName, fieldCookieValue, fieldDomain,\n                fieldPath, fieldIsHttpOnly, fieldIsSecure, fieldMaxAge);\n            logger.sendSingleEvent(\"buildNetworkCookie\");\n            promise.resolve(networkCookieData);\n        } else {\n            promise.reject(\"3010\", \"Null cookieName\");\n        }\n\n    }\n\n    @ReactMethod\n    public void buildNetworkUrl(ReadableMap arguments, Promise promise) {\n        String fieldDomain = (String) Utils.argumentNullCheck(arguments, FIELD_DOMAIN);\n        Boolean fieldIsHttpOnly = arguments.hasKey(FIELD_IS_USE_HTTPS) && arguments.getBoolean(FIELD_IS_USE_HTTPS);\n\n        if (fieldDomain != null) {\n            logger.startMethodExecutionTimer(\"buildNetworkUrl\");\n            String networkUrl = NetworkTool.buildNetworkUrl(fieldDomain, fieldIsHttpOnly);\n            logger.sendSingleEvent(\"buildNetworkUrl\");\n            promise.resolve(networkUrl);\n        } else {\n            promise.reject(\"3011\", \"Null domain\");\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/modules/HMSReadSMSManager.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.modules;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.pm.PackageManager;\nimport android.content.pm.Signature;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.common.api.CommonStatusCodes;\nimport com.huawei.hms.rn.account.logger.HMSLogger;\nimport com.huawei.hms.rn.account.utils.Utils;\nimport com.huawei.hms.support.api.client.Status;\nimport com.huawei.hms.support.sms.ReadSmsManager;\nimport com.huawei.hms.support.sms.common.ReadSmsConstant;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.nio.charset.StandardCharsets;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Arrays;\nimport java.util.Objects;\n\n/**\n * @deprecated\n * It's not advised to use this module\n */\n@Deprecated\npublic class HMSReadSMSManager extends ReactContextBaseJavaModule {\n    private static final String MODULE_NAME = \"HMSReadSMSManager\";\n\n    private static final String HASHING_ALGORITHM_SHA_256 = \"SHA-256\";\n\n    private static final String FIELD_BASE_64_HASH = \"base64Hash\";\n\n    private static final String FIELD_ERROR = \"Error: \";\n\n    private static final String FIELD_STATUS = \"Status\";\n\n    private static final String FIELD_MESSAGE = \"Message\";\n\n    private SMSBroadcastReceiver smsReceiver;\n\n    private HMSLogger logger;\n\n    public HMSReadSMSManager(ReactApplicationContext reactContext) {\n        super(reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    public String getName() {\n        return MODULE_NAME;\n    }\n\n    @ReactMethod\n    @Deprecated\n    public void smsVerificationCode(final Promise promise) {\n        Task<Void> smsTask = ReadSmsManager.start(Objects.requireNonNull(getCurrentActivity()));\n        startRegisterReceiver(smsTask, \"smsVerificationCode\", promise);\n    }\n\n    @ReactMethod\n    @Deprecated\n    public void startConsent(String phoneNumber, final Promise promise) {\n        if (phoneNumber != null) {\n            Task<Void> phoneNumberTask = ReadSmsManager.startConsent(Objects.requireNonNull(getCurrentActivity()),\n                phoneNumber);\n            startRegisterReceiver(phoneNumberTask, \"startConsent\", promise);\n        } else {\n            Task<Void> phoneNumberTask = ReadSmsManager.startConsent(Objects.requireNonNull(getCurrentActivity()), \"\");\n            startRegisterReceiver(phoneNumberTask, \"startConsent\", promise);\n        }\n    }\n\n    private void startRegisterReceiver(Task<Void> taskRegisterReceiver, String methodName, final Promise promise) {\n        taskRegisterReceiver.addOnCompleteListener(task -> {\n            if (task.isSuccessful()) {\n                if (smsReceiver != null) {\n                    Objects.requireNonNull(getCurrentActivity()).unregisterReceiver(smsReceiver);\n                }\n                IntentFilter intentPhoneFilter = new IntentFilter(ReadSmsConstant.READ_SMS_BROADCAST_ACTION);\n                smsReceiver = new SMSBroadcastReceiver(promise, methodName);\n                Objects.requireNonNull(getCurrentActivity()).registerReceiver(smsReceiver, intentPhoneFilter);\n            }\n        }).addOnFailureListener(e -> Utils.handleError(promise, e));\n    }\n\n    @ReactMethod\n    @Deprecated\n    public void getHashCode(Promise promise) {\n        logger.startMethodExecutionTimer(\"getHashCode\");\n        MessageDigest messageDigest = getMessageDigest();\n        if (messageDigest == null) {\n            logger.sendSingleEvent(\"getHashCode\", \"-1\");\n            promise.reject(\"3012\", \"Null MessageDigest\");\n        } else {\n            String packageName = Objects.requireNonNull(getCurrentActivity()).getPackageName();\n            String signature = getSignature(getCurrentActivity(), packageName);\n            String appInfo = packageName + \" \" + signature;\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n                messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));\n            }\n            byte[] hashSignature = messageDigest.digest();\n            hashSignature = Arrays.copyOfRange(hashSignature, 0, 9);\n            String base64Hash = Base64.encodeToString(hashSignature, Base64.NO_PADDING | Base64.NO_WRAP);\n            if (base64Hash.length() > 0) {\n                base64Hash = base64Hash.substring(0, 11);\n                WritableMap base64HashMap = Arguments.createMap();\n                base64HashMap.putString(FIELD_BASE_64_HASH, base64Hash);\n                Log.i(MODULE_NAME, String.valueOf(base64HashMap));\n                logger.sendSingleEvent(\"getHashCode\");\n                promise.resolve(base64HashMap);\n            } else {\n                logger.sendSingleEvent(\"getHashCode\", \"-1\");\n                promise.reject(\"3013\", \"Invalid hashCode\");\n            }\n        }\n    }\n\n    private MessageDigest getMessageDigest() {\n        MessageDigest messageDigest = null;\n        try {\n            messageDigest = MessageDigest.getInstance(HASHING_ALGORITHM_SHA_256);\n        } catch (NoSuchAlgorithmException ex) {\n            Log.e(MODULE_NAME, ex.getMessage());\n        }\n        return messageDigest;\n    }\n\n    private String getSignature(Context context, String packageName) {\n        PackageManager packageManager = context.getPackageManager();\n        Signature[] signatureArray;\n        try {\n            signatureArray = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;\n        } catch (PackageManager.NameNotFoundException e) {\n            return \"\";\n        }\n        return Objects.requireNonNull(signatureArray)[0].toCharsString();\n    }\n\n    private static class SMSBroadcastReceiver extends BroadcastReceiver {\n        private final Promise promise;\n\n        private final String methodName;\n\n        public SMSBroadcastReceiver(Promise promise, String methodName) {\n            this.promise = promise;\n            this.methodName = methodName;\n        }\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            Bundle bundle = intent.getExtras();\n            if (bundle != null) {\n                Status status = bundle.getParcelable(ReadSmsConstant.EXTRA_STATUS);\n                if (Objects.requireNonNull(status).getStatusCode() != CommonStatusCodes.SUCCESS) {\n                    HMSLogger.getInstance(context).sendPeriodicEvent(methodName, \"-1\");\n                    promise.reject(FIELD_ERROR + Objects.requireNonNull(status).getStatusCode());\n                } else {\n                    WritableMap map = Arguments.createMap();\n                    map.putMap(FIELD_STATUS, Utils.parseStatus(Objects.requireNonNull(status)));\n                    map.putString(FIELD_MESSAGE, bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE));\n                    HMSLogger.getInstance(context).sendPeriodicEvent(methodName);\n                    promise.resolve(map);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/utils/Utils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.utils;\n\nimport android.accounts.Account;\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.util.Base64;\n\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.support.account.request.AccountAuthParams;\nimport com.huawei.hms.support.account.request.AccountAuthParamsHelper;\nimport com.huawei.hms.support.account.result.AccountIcon;\nimport com.huawei.hms.support.account.result.AuthAccount;\nimport com.huawei.hms.support.api.client.Status;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.feature.result.AbstractAuthAccount;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParams;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParamsHelper;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\nimport com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.ByteArrayOutputStream;\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\npublic class Utils {\n    private static final String FIELD_AUTH_HUAWEI_ID = \"authHuaweiId\";\n\n    private static final String FIELD_AUTH_ACCOUNT = \"authAccount\";\n\n    private static final String FIELD_ACCESS_TOKEN = \"accessToken\";\n\n    private static final String FIELD_DISPLAY_NAME = \"displayName\";\n\n    private static final String FIELD_EMAIL = \"email\";\n\n    private static final String FIELD_ID_TOKEN = \"idToken\";\n\n    private static final String FIELD_AUTHORIZATION_CODE = \"authorizationCode\";\n\n    private static final String FIELD_UNION_ID = \"unionId\";\n\n    private static final String FIELD_AGE_RANGE = \"ageRange\";\n\n    private static final String FIELD_COUNTRY_CODE = \"countryCode\";\n\n    private static final String FIELD_AVATAR_URI_STRING = \"avatarUriString\";\n\n    private static final String FIELD_EXPRESSION_TIME_SECS = \"expressionTimeSecs\";\n\n    private static final String FIELD_SERVICE_COUNTRY_CODE = \"serviceCountryCode\";\n\n    private static final String FIELD_UID = \"uid\";\n\n    private static final String FIELD_OPEN_ID = \"openId\";\n\n    private static final String FIELD_GENDER = \"gender\";\n\n    private static final String FIELD_DESCRIBE_CONTENTS = \"describeContentsInAuthHuaweiId\";\n\n    private static final String FIELD_NAME = \"name\";\n\n    private static final String FIELD_TYPE = \"type\";\n\n    private static final String FIELD_STATUS = \"status\";\n\n    private static final String FIELD_AUTHORIZED_SCOPES = \"authorizedScopes\";\n\n    private static final String FIELD_EXTENSION_SCOPE = \"extensionScopes\";\n\n    private static final String FIELD_SCOPE_ARRAY = \"authScopeList\";\n\n    private static final String FIELD_SERVER_AUTH_CODE = \"serverAuthCode\";\n\n    private static final String FIELD_ACCOUNT = \"account\";\n\n    private static final String FIELD_ERROR_STRING = \"errorCode\";\n\n    private static final String FIELD_STATUS_MESSAGE = \"statusMessage\";\n\n    private static final String FIELD_STATUS_CODE = \"statusCode\";\n\n    private static final String FIELD_COLOR_POLICY = \"colorPolicy\";\n\n    private static final String FIELD_CORNER_RADIUS = \"cornerRadius\";\n\n    private static final String FIELD_THEME = \"theme\";\n\n    private static final String FIELD_ACCOUNT_FLAG = \"accountFlag\";\n\n    private static final String FIELD_CARRIERID = \"carrierId\";\n\n    private static final String ICON = \"icon\";\n\n    private static final String ICON_DESCRIPTION = \"description\";\n\n    public static ReadableMap parseAuthHuaweiId(AuthHuaweiId authHuaweiId, Context context) {\n        if (authHuaweiId == null) {\n            return null;\n        }\n        WritableMap arguments = Arguments.createMap();\n        arguments.putString(FIELD_ACCESS_TOKEN, authHuaweiId.getAccessToken());\n        arguments.putString(FIELD_DISPLAY_NAME, authHuaweiId.getDisplayName());\n        arguments.putString(FIELD_EMAIL, authHuaweiId.getEmail());\n        arguments.putString(FIELD_ID_TOKEN, authHuaweiId.getIdToken());\n        arguments.putString(FIELD_AUTHORIZATION_CODE, authHuaweiId.getAuthorizationCode());\n        arguments.putString(FIELD_UNION_ID, authHuaweiId.getUnionId());\n        arguments.putString(FIELD_AGE_RANGE, authHuaweiId.getAgeRange());\n        arguments.putString(FIELD_COUNTRY_CODE, authHuaweiId.getCountryCode());\n        arguments.putString(FIELD_AVATAR_URI_STRING, authHuaweiId.getAvatarUriString());\n        arguments.putString(FIELD_SERVICE_COUNTRY_CODE, authHuaweiId.getServiceCountryCode());\n        arguments.putString(FIELD_UID, authHuaweiId.getUid());\n        arguments.putString(FIELD_OPEN_ID, authHuaweiId.getOpenId());\n        arguments.putInt(FIELD_GENDER, authHuaweiId.getGender());\n        arguments.putInt(FIELD_STATUS, authHuaweiId.getStatus());\n        arguments.putArray(FIELD_AUTHORIZED_SCOPES, parseScopeSet(authHuaweiId.getAuthorizedScopes()));\n        arguments.putArray(FIELD_EXTENSION_SCOPE, parseScopeSet(authHuaweiId.getExtensionScopes()));\n        arguments.putMap(FIELD_ACCOUNT, parseAccount(authHuaweiId.getHuaweiAccount(context)));\n\n        return arguments;\n    }\n\n    public static ReadableMap parseAuthAccount(AuthAccount authAccount, Context context) {\n        if (authAccount == null) {\n            return null;\n        }\n        WritableMap arguments = Arguments.createMap();\n        arguments.putString(FIELD_ACCESS_TOKEN, authAccount.getAccessToken());\n        arguments.putString(FIELD_DISPLAY_NAME, authAccount.getDisplayName());\n        arguments.putString(FIELD_EMAIL, authAccount.getEmail());\n        arguments.putString(FIELD_ID_TOKEN, authAccount.getIdToken());\n        arguments.putString(FIELD_AUTHORIZATION_CODE, authAccount.getAuthorizationCode());\n        arguments.putString(FIELD_UNION_ID, authAccount.getUnionId());\n        arguments.putString(FIELD_AGE_RANGE, authAccount.getAgeRange());\n        arguments.putString(FIELD_COUNTRY_CODE, authAccount.getCountryCode());\n        arguments.putString(FIELD_AVATAR_URI_STRING, authAccount.getAvatarUriString());\n        arguments.putString(FIELD_SERVICE_COUNTRY_CODE, authAccount.getServiceCountryCode());\n        arguments.putString(FIELD_UID, authAccount.getUid());\n        arguments.putString(FIELD_OPEN_ID, authAccount.getOpenId());\n        arguments.putInt(FIELD_GENDER, authAccount.getGender());\n        arguments.putInt(FIELD_STATUS, authAccount.getStatus());\n        arguments.putArray(FIELD_AUTHORIZED_SCOPES, parseScopeSet(authAccount.getAuthorizedScopes()));\n        arguments.putArray(FIELD_EXTENSION_SCOPE, parseScopeSet(authAccount.getExtensionScopes()));\n        arguments.putMap(FIELD_ACCOUNT, parseAccount(authAccount.getAccount(context)));\n        arguments.putInt(FIELD_ACCOUNT_FLAG, authAccount.getAccountFlag());\n        arguments.putInt(FIELD_CARRIERID, authAccount.getCarrierId());\n        return arguments;\n    }\n\n    public static WritableArray parseScopeSet(Set<Scope> scopeSet) {\n        WritableArray array = Arguments.createArray();\n        Iterator<Scope> scopeIterator = scopeSet.iterator();\n        while (scopeIterator.hasNext()) {\n            Scope scope = scopeIterator.next();\n            array.pushString(scope.getScopeUri());\n        }\n        return array;\n    }\n\n    public static WritableMap parseButton(HuaweiIdAuthButton button) {\n        if (button == null) {\n            return null;\n        }\n        WritableMap arguments = Arguments.createMap();\n        arguments.putInt(FIELD_COLOR_POLICY, button.getColorPolicy());\n        arguments.putInt(FIELD_CORNER_RADIUS, button.getCornerRadius());\n        arguments.putInt(FIELD_THEME, button.getTheme());\n        return arguments;\n    }\n\n    private static WritableMap parseAccount(Account account) {\n        if (account == null) {\n            return null;\n        }\n        WritableMap arguments = Arguments.createMap();\n        arguments.putString(FIELD_NAME, account.name);\n        arguments.putString(FIELD_TYPE, account.type);\n        return arguments;\n    }\n\n    public static HuaweiIdAuthParams toHuaweiIdAuthParams(ReadableArray requestOption, String huaweiIdAuthParams,\n        ReadableArray scopeList, Promise promise) {\n        HuaweiIdAuthParamsHelper huaweiIdBuilder;\n\n        if (huaweiIdAuthParams.equals(\"DEFAULT_AUTH_REQUEST_PARAM\")) {\n            huaweiIdBuilder = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM);\n        } else if (huaweiIdAuthParams.equals(\"DEFAULT_AUTH_REQUEST_PARAM_GAME\")) {\n            huaweiIdBuilder = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME);\n        } else {\n            promise.reject(\"3003\", \"Invalid Parameter\");\n            return null;\n        }\n\n        ArrayList<String> huaweiIdListData = new ArrayList<>();\n        List<Scope> scopeListData = toScopeList(scopeList);\n        if (requestOption != null) {\n            for (int i = 0; i < requestOption.size(); i++) {\n                huaweiIdListData.add(requestOption.getString(i));\n            }\n        }\n\n        if (huaweiIdListData.contains(\"profile\")) {\n            huaweiIdBuilder.setProfile();\n        }\n\n        if (huaweiIdListData.contains(\"idToken\")) {\n            huaweiIdBuilder.setIdToken();\n        }\n\n        if (huaweiIdListData.contains(\"accessToken\")) {\n            huaweiIdBuilder.setAccessToken();\n        }\n\n        if (huaweiIdListData.contains(\"mobileNumber\")) {\n            huaweiIdBuilder.setMobileNumber();\n        }\n\n        if (huaweiIdListData.contains(\"email\")) {\n            huaweiIdBuilder.setEmail();\n        }\n\n        if (huaweiIdListData.contains(\"shippingAddress\")) {\n            huaweiIdBuilder.setShippingAddress();\n        }\n\n        if (huaweiIdListData.contains(\"uid\")) {\n            huaweiIdBuilder.setUid();\n        }\n\n        if (huaweiIdListData.contains(\"id\")) {\n            huaweiIdBuilder.setId();\n        }\n\n        if (huaweiIdListData.contains(\"authorizationCode\")) {\n            huaweiIdBuilder.setAuthorizationCode();\n        }\n\n        if (scopeList != null) {\n            huaweiIdBuilder.setScopeList(scopeListData);\n        }\n\n        return huaweiIdBuilder.createParams();\n    }\n\n    public static AccountAuthParams toAccountAuthParams(ReadableArray requestOption, String accountdAuthParams,\n        ReadableArray scopeList, Promise promise) {\n        AccountAuthParamsHelper accountAuthBuilder;\n\n        if (accountdAuthParams.equals(\"DEFAULT_AUTH_REQUEST_PARAM\")) {\n            accountAuthBuilder = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM);\n        } else if (accountdAuthParams.equals(\"DEFAULT_AUTH_REQUEST_PARAM_GAME\")) {\n            accountAuthBuilder = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME);\n        } else {\n            promise.reject(\"3003\", \"Invalid AccountAuthParams Parameter\");\n            return null;\n        }\n\n        ArrayList<String> accountListData = new ArrayList<>();\n        List<Scope> scopeListData = toScopeList(scopeList);\n        if (requestOption != null) {\n            for (int i = 0; i < requestOption.size(); i++) {\n                if (requestOption.getType(i).name().equals(\"String\")) {\n                    accountListData.add(requestOption.getString(i));\n                } else if (requestOption.getType(i).name().equals(\"Map\")) {\n                    ReadableMap rm = requestOption.getMap(i);\n                    if (rm.hasKey(\"idTokenSignAlg\")) {\n                        accountAuthBuilder.setIdTokenSignAlg(rm.getInt(\"idTokenSignAlg\"));\n                    }\n                }\n\n            }\n        }\n\n        if (accountListData.contains(\"profile\")) {\n            accountAuthBuilder.setProfile();\n        }\n\n        if (accountListData.contains(\"idToken\")) {\n            accountAuthBuilder.setIdToken();\n        }\n\n        if (accountListData.contains(\"accessToken\")) {\n            accountAuthBuilder.setAccessToken();\n        }\n\n        if (accountListData.contains(\"mobileNumber\")) {\n            accountAuthBuilder.setMobileNumber();\n        }\n\n        if (accountListData.contains(\"email\")) {\n            accountAuthBuilder.setEmail();\n        }\n\n        if (accountListData.contains(\"uid\")) {\n            accountAuthBuilder.setUid();\n        }\n\n        if (accountListData.contains(\"id\")) {\n            accountAuthBuilder.setId();\n        }\n\n        if (accountListData.contains(\"authorizationCode\")) {\n            accountAuthBuilder.setAuthorizationCode();\n        }\n\n        if (accountListData.contains(\"carrierId\")) {\n            accountAuthBuilder.setCarrierId();\n        }\n\n        if (scopeList != null) {\n            accountAuthBuilder.setScopeList(scopeListData);\n        }\n\n        return accountAuthBuilder.createParams();\n    }\n\n    public static <T extends AbstractAuthAccount> T toAuthResult(ReadableMap readableMap, String authType) {\n        T buildAuth = null;\n\n        String openId = (String) Utils.argumentNullCheck(readableMap, FIELD_OPEN_ID);\n        String unionId = (String) Utils.argumentNullCheck(readableMap, FIELD_UNION_ID);\n        String uid = (String) Utils.argumentNullCheck(readableMap, FIELD_UID);\n        Set<Scope> scopeList = readableMap.hasKey(FIELD_SCOPE_ARRAY) ? (Set<Scope>) (Object) toSet(\n            readableMap.getArray(FIELD_SCOPE_ARRAY)) : new HashSet();\n        String displayName = (String) Utils.argumentNullCheck(readableMap, FIELD_DISPLAY_NAME);\n        String photoUrl = (String) Utils.argumentNullCheck(readableMap, FIELD_AVATAR_URI_STRING);\n        int gender = readableMap.hasKey(FIELD_GENDER) ? readableMap.getInt(FIELD_GENDER) : -1;\n        String accessToken = (String) Utils.argumentNullCheck(readableMap, FIELD_ACCESS_TOKEN);\n        String serviceCountryCode = (String) Utils.argumentNullCheck(readableMap, FIELD_SERVICE_COUNTRY_CODE);\n        int status = readableMap.hasKey(FIELD_STATUS) ? readableMap.getInt(FIELD_STATUS) : 0;\n        String serverAuthCode = (String) Utils.argumentNullCheck(readableMap, FIELD_SERVER_AUTH_CODE);\n        String countryCode = (String) Utils.argumentNullCheck(readableMap, FIELD_COUNTRY_CODE);\n        int carrierId = readableMap.hasKey(FIELD_CARRIERID) ? readableMap.getInt(FIELD_CARRIERID) : -1;\n\n        if (authType.equals(FIELD_AUTH_HUAWEI_ID)) {\n            buildAuth = (T) AuthHuaweiId.build(openId, uid, displayName, photoUrl, accessToken, serviceCountryCode,\n                status, gender, scopeList, serverAuthCode, unionId, countryCode);\n        } else if (authType.equals(FIELD_AUTH_ACCOUNT)) {\n            buildAuth = (T) AuthAccount.build(openId, uid, displayName, photoUrl, accessToken, serviceCountryCode,\n                status, gender, scopeList, serverAuthCode, unionId, countryCode, carrierId);\n        }\n\n        return buildAuth;\n    }\n\n    private static Set<Object> toSet(ReadableArray readableArray) {\n\n        Set<Object> mySet = new HashSet<>();\n        for (int index = 0; index < readableArray.size(); index++) {\n            String scopeUri = readableArray.getString(index);\n            mySet.add(scopeUri == null ? new Scope() : new Scope(scopeUri));\n        }\n        return mySet;\n    }\n\n    public static List<Scope> toScopeList(ReadableArray scopeArray) {\n        List<Scope> scopeList = new ArrayList<>();\n        if (scopeArray != null) {\n            for (int index = 0; index < scopeArray.size(); index++) {\n                String scopeUri = scopeArray.getString(index);\n                scopeList.add(scopeUri == null ? new Scope() : new Scope(scopeUri));\n            }\n        }\n        return scopeList;\n    }\n\n    public static ReadableArray getScopeArray(ReadableMap readableMap) {\n        return (ReadableArray) Utils.argumentNullCheck(readableMap, FIELD_SCOPE_ARRAY);\n    }\n\n    public static WritableMap parseStatus(Status status) {\n        WritableMap map = Arguments.createMap();\n        map.putString(FIELD_ERROR_STRING, status.getErrorString());\n        map.putString(FIELD_STATUS_MESSAGE, status.getStatusMessage());\n        map.putInt(FIELD_STATUS_CODE, status.getStatusCode());\n        return map;\n    }\n\n    public static WritableMap parseAccountIcon(AccountIcon accountIcon) {\n        if (accountIcon == null) {\n            return null;\n        }\n        WritableMap arguments = Arguments.createMap();\n        arguments.putString(ICON, String.valueOf(bitmapToByteArray(accountIcon.getIcon())));\n        arguments.putString(ICON_DESCRIPTION, accountIcon.getDescription());\n        return arguments;\n    }\n\n    public static String bitmapToByteArray(Bitmap bitmap) {\n        ByteArrayOutputStream baos = new ByteArrayOutputStream();\n        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);\n        byte[] b = baos.toByteArray();\n        return Base64.encodeToString(b, Base64.DEFAULT);\n    }\n\n    public static void handleError(final Promise promise, Exception e) {\n        String errCode = \"GENERIC_ERR\";\n        if (e instanceof ApiException) {\n            errCode = String.valueOf(((ApiException) e).getStatusCode());\n        }\n        promise.reject(errCode, e.getMessage());\n    }\n\n    public static Object argumentNullCheck(final ReadableMap readableMap, final String key) {\n        if (readableMap.hasKey(key)) {\n            switch (readableMap.getType(key)) {\n                case String:\n                    return readableMap.getString(key);\n                case Number:\n                    return readableMap.getInt(key);\n                case Map:\n                    return readableMap.getMap(key);\n                case Array:\n                    return readableMap.getArray(key);\n            }\n        }\n        return null;\n    }\n\n    public static Long argumentNullCheckAndConvert(final ReadableMap readableMap, final String key) {\n        if (readableMap.hasKey(key)) {\n            return ((Double) readableMap.getDouble(key)).longValue();\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-account/android/src/main/java/com/huawei/hms/rn/account/views/HMSHuaweiIdAuthButton.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.views;\n\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\n\npublic class HMSHuaweiIdAuthButton extends SimpleViewManager<HuaweiIdAuthButton> {\n\n    private static final String NAME_AUTH_BUTTON = \"HMSHuaweiIdAuthButton\";\n\n    private static final String ARGUMENT_COLOR_POLICY = \"colorPolicy\";\n\n    private static final String ARGUMENT_ENABLED = \"enabled\";\n\n    private static final String ARGUMENT_THEME = \"theme\";\n\n    private static final String ARGUMENT_CORNER_RADIUS = \"cornerRadius\";\n\n    public HMSHuaweiIdAuthButton(ReactApplicationContext reactContext) {\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return NAME_AUTH_BUTTON;\n    }\n\n    @NonNull\n    @Override\n    public HuaweiIdAuthButton createViewInstance(@NonNull ThemedReactContext reactContext) {\n        HuaweiIdAuthButton button = new HuaweiIdAuthButton(reactContext);\n        button.setVisibility(View.VISIBLE);\n        button.setColorPolicy(HuaweiIdAuthButton.COLOR_POLICY_BLACK);\n        return button;\n    }\n\n    @ReactProp(name = ARGUMENT_COLOR_POLICY)\n    public void setColorPolicy(HuaweiIdAuthButton huaweiIdAuthButton, int colorPolicy) {\n        huaweiIdAuthButton.setColorPolicy(colorPolicy);\n    }\n\n    @ReactProp(name = ARGUMENT_ENABLED)\n    public void setEnabled(HuaweiIdAuthButton huaweiIdAuthButton, boolean isEnabled) {\n        huaweiIdAuthButton.setEnabled(isEnabled);\n    }\n\n    @ReactProp(name = ARGUMENT_THEME)\n    public void setTheme(HuaweiIdAuthButton huaweiIdAuthButton, int theme) {\n        huaweiIdAuthButton.setTheme(theme);\n    }\n\n    @ReactProp(name = ARGUMENT_CORNER_RADIUS)\n    public void setCornerRadius(HuaweiIdAuthButton huaweiIdAuthButton, int cornerRadius) {\n        huaweiIdAuthButton.setCornerRadius(cornerRadius);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\ngradle-wrapper.jar\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\npackage-lock.json\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\nagconnect-services.json\n*.jks\n*.keystore"
  },
  {
    "path": "react-native-hms-account/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { View, Text, StyleSheet, ScrollView, TouchableOpacity, Image } from \"react-native\";\n\nimport HMSAccount, {\n  HMSAccountAuthService,\n  HMSAccountAuthManager,\n  HMSHuaweiIdAuthTool,\n  HMSNetworkTool,\n  HMSAuthButton,\n  HMSAuthRequestOptionConstants,\n  HMSAuthScopeListConstants,\n  HMSAuthParamConstants\n} from \"@hmscore/react-native-hms-account\";\n\nconst styles = StyleSheet.create({\n  main: {\n    marginBottom: 100,\n  },\n  logText: {\n    margin: 20,\n  },\n  viewcontainer: {\n    marginTop: 20,\n    height: 38,\n  },\n  header: {\n    backgroundColor: \"red\",\n    height: 100,\n    width: \"100%\",\n    flexDirection: \"row\",\n  },\n  headerTitle: {\n    flex: 1,\n    fontSize: 25,\n    color: \"white\",\n    fontWeight: \"bold\",\n    alignSelf: \"center\",\n    textAlign: \"center\",\n  },\n  subTitle: {\n    flex: 1,\n    fontSize: 15,\n    marginTop: 15,\n    fontWeight: \"bold\",\n    color: \"black\",\n    alignSelf: \"center\",\n    textAlign: \"center\",\n  },\n  row: {\n    flex: 1, \n    height: 1, \n    backgroundColor: 'black'\n  },\n  customButton: {\n    marginTop: 15,\n    width: 200,\n    height: 45,\n    justifyContent: \"center\",\n    alignSelf: \"center\",\n    borderRadius: 10,\n    marginLeft: 5,\n    marginRight: 5,\n    borderColor: \"red\",\n    borderWidth: 1,\n  },\n  buttonText: {\n    fontSize: 14,\n    color: \"red\",\n    textAlign: \"center\",\n  },\n});\nconst Button = (props) => (\n  <TouchableOpacity style={styles.customButton} onPress={props.func}>\n    <Text style={styles.buttonText}>{props.text}</Text>\n  </TouchableOpacity>\n);\n\nclass App extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      icon: \"\",\n      log: \"\",\n    };\n  }\n\n  logger = (method, response) => {\n    this.setState({ log: method + JSON.stringify(response) + '\\n' + this.state.log });\n  };\n\n  errorLogger = (method, response) => {\n    this.setState({ log: method + response + '\\n' + this.state.log });\n  }\n\n  signInWithIdToken = () => {\n    let signInData = {\n      accountAuthParams: HMSAuthParamConstants.DEFAULT_AUTH_REQUEST_PARAM,\n      authRequestOption: [HMSAuthRequestOptionConstants.ID_TOKEN, HMSAuthRequestOptionConstants.ACCESS_TOKEN, HMSAuthRequestOptionConstants.CARRIERID],\n      authScopeList: [HMSAuthScopeListConstants.EMAIL]\n    };\n    HMSAccountAuthService.signIn(signInData)\n      .then((response) => { this.logger(\"Sign In With IdToken -> \", response) })\n      .catch((err) => { this.errorLogger(\"Sign In With IdToken -> \", err) });\n  };\n\n  signInWithAuthorizationCode = () => {\n    let signInData = {\n      accountAuthParams: HMSAuthParamConstants.DEFAULT_AUTH_REQUEST_PARAM,\n      authRequestOption: [HMSAuthRequestOptionConstants.AUTHORIZATION_CODE, HMSAuthRequestOptionConstants.ACCESS_TOKEN],\n    };\n    HMSAccountAuthService.signIn(signInData)\n      .then((response) => { this.logger(\"Sign In With AuthorizaionCode -> \", response) })\n      .catch((err) => { this.errorLogger(\"Sign In With AuthorizaionCode -> \", err) });\n  };\n\n  signOut = () =>\n    HMSAccountAuthService.signOut()\n      .then((response) => { this.logger(\"signOut -> \", response) })\n      .catch((err) => { this.errorLogger(\"signOut -> \", err) });\n\n  silentSignIn = () => {\n    let silentSignInData = {\n      accountAuthParams: HMSAuthParamConstants.DEFAULT_AUTH_REQUEST_PARAM,\n    };\n    HMSAccountAuthService.silentSignIn(silentSignInData)\n      .then((response) => { this.logger(\"silentSignIn -> \", response) })\n      .catch((err) => { this.errorLogger(\"silentSignIn -> \", err) });\n  };\n\n  cancelAuthorization = () => {\n    HMSAccountAuthService.cancelAuthorization()\n      .then((response) => { this.logger(\"cancelAuthorization -> \", response) })\n      .catch((err) => { this.errorLogger(\"cancelAuthorization -> \", err) });\n  };\n\n  getIndependentSignIn = () => {\n    HMSAccountAuthService.getIndependentSignInIntent(\"CwHLQFU9k3D4f...\")\n      .then((response) => { this.logger(\"getIndependentSignIn -> \", response) })\n      .catch((err) => { this.errorLogger(\"getIndependentSignIn -> \", err) });\n  };\n\n  getChannel = () =>\n    HMSAccountAuthService.getChannel()\n      .then((response) => {\n        this.logger(\"getChannel -> \", response)\n        this.setState({\n          icon: response.icon\n        })\n      })\n      .catch((err) => { this.errorLogger(\"getChannel ->  \", err) });\n\n\n  getAuthResult = () => {\n    HMSAccountAuthManager.getAuthResult()\n      .then((response) => { this.logger(\"getAuthResult -> \", response) })\n      .catch((err) => { this.errorLogger(\"getAuthResult ->  \", err) });\n  };\n\n  containScopes = () => {\n    let containScopesData = {\n      authAccount: {\n        openId: \"myopenid\",\n        uid: \"myuid\",\n        displayName: \"mydisplayname\",\n        photoUrl: \"myphotourl\",\n        accessToken: \"myaccesstoken\",\n        serviceCountryCode: \"myservicecountrycode\",\n        status: 0,\n        gender: 0,\n        authScopeList: [HMSAuthScopeListConstants.OPENID, HMSAuthScopeListConstants.PROFILE, HMSAuthScopeListConstants.EMAIL],\n        serverAuthCode: \"myserverAuthCode\",\n        unionId: \"myunionId\",\n        countryCode: \"myCountryCode\",\n      },\n      authScopeList: [HMSAuthScopeListConstants.OPENID, HMSAuthScopeListConstants.PROFILE],\n    };\n    HMSAccountAuthManager.containScopes(containScopesData)\n      .then((response) => { this.logger(\"containScopes -> \", response) })\n      .catch((err) => { this.errorLogger(\"containScopes -> \", err) });\n  };\n\n  addAuthScopes = () => {\n    let authScopeData = {\n      authScopeList: [HMSAuthScopeListConstants.EMAIL],\n    };\n    HMSAccountAuthManager.addAuthScopes(authScopeData)\n      .then((response) => { this.logger(\"addAuthScopes ->\", response) })\n      .catch((err) => { this.errorLogger(\"addAuthScopes -> \", err) });\n  };\n\n  getAuthResultWithScopes = () => {\n    let authScopeData = {\n      authScopeList: [HMSAuthScopeListConstants.OPENID, HMSAuthScopeListConstants.PROFILE],\n    };\n    HMSAccountAuthManager.getAuthResultWithScopes(authScopeData)\n      .then((response) => { this.logger(\"getAuthResultWithScopes -> \", response) })\n      .catch((err) => { this.errorLogger(\"getAuthResultWithScopes -> \", err) });\n  };\n\n  deleteAuthInfo = () => {\n    let accesTokenData = {\n      accessToken: \"myAccessToken\",\n    };\n    HMSHuaweiIdAuthTool.deleteAuthInfo(accesTokenData)\n      .then((response) => { this.logger(\"deleteAuthInfo -> \", response) })\n      .catch((err) => { this.errorLogger(\"deleteAuthInfo -> \", err) });\n  };\n\n  requestUnionId = () => {\n    let accountData = {\n      huaweiAccountName: \"test@test.com\",\n    };\n    HMSHuaweiIdAuthTool.requestUnionId(accountData)\n      .then((response) => { this.logger(\"requestUnionId -> \", response) })\n      .catch((err) => { this.errorLogger(\"requestUnionId -> \", err) });\n  };\n\n  requestAccessToken = () => {\n    let requestAccessTokenData = {\n      authScopeList: [HMSAuthScopeListConstants.OPENID, HMSAuthScopeListConstants.PROFILE],\n      huaweiAccount: {\n        name: \"test@test.com\",\n        type: \"com.huawei.hwid\",\n      },\n    };\n    HMSHuaweiIdAuthTool.requestAccessToken(requestAccessTokenData)\n      .then((response) => { console.log(\"requestAccessToken -> \", JSON.stringify(response)) })\n      .catch((err) => { this.errorLogger(\"requestAccessToken -> \", err) });\n  };\n\n\n  buildNetworkCookie = () => {\n    let cookieData = {\n      cookieName: \"mycookiename\",\n      cookieValue: \"mycookievalue\",\n      domain: \"mydomain\",\n      path: \"mypath\",\n      isHttpOnly: true,\n      isSecure: true,\n      maxAge: 130,\n    };\n    HMSNetworkTool.buildNetworkCookie(cookieData)\n      .then((response) => { this.logger(\"buildNetworkCookie -> \", response) })\n      .catch((err) => { this.errorLogger(\"buildNetworkCookie -> \", err) });\n  };\n\n  buildNetworkUrl = () => {\n    let urlData = {\n      isUseHttps: true,\n      domain: \"mydomain\",\n    };\n    HMSNetworkTool.buildNetworkUrl(urlData)\n      .then((response) => { this.logger(\"buildNetworkUrl -> \", response) })\n      .catch((err) => { this.errorLogger(\"buildNetworkUrl -> \", err) });\n  };\n\n  enableLogger = () => {\n    HMSAccount.enableLogger()\n  };\n\n  disableLogger = () => {\n    HMSAccount.disableLogger()\n  };\n\n  getButtonInfo = () => {\n    if (buttonView) {\n      buttonView.getInfo().then((response) => this.logger(\"getButtonInfo -> \", response));\n    }\n  };\n\n  render() {\n    return (\n      <View style={styles.main}>\n        <View style={styles.header}>\n          <Text style={styles.headerTitle}>HMS Account Plugin</Text>\n        </View>\n\n        <ScrollView>\n          <Text style={styles.subTitle}>HMSAccountAuthService</Text>\n          <Button func={this.signInWithIdToken} text=\"Sign In With IdToken\" />\n          <Button func={this.signInWithAuthorizationCode} text=\"Sign In With AuthorizationCode\" />\n          <Button func={this.signOut} text=\"Sign Out\" />\n          <Button func={this.silentSignIn} text=\"Silent Sign In\" />\n          <Button func={this.cancelAuthorization} text=\"Cancel Authorization\" />\n          <Button func={this.getIndependentSignIn} text=\" Get Independent SignIn\" />\n          <Button func={this.getChannel} text=\"Get Channel\" />\n          <Button func={this.enableLogger} text=\"Enable logger\" />\n          <Button func={this.disableLogger} text=\"Disable logger\" />\n\n          <Image style={{ height: 50, width: 50, position: \"absolute\", top: 10, right: 20 }}\n          resizeMode={'contain'} source={{ uri: `data:image/gif;base64,${this.state.icon}` }} />\n\n          <Text style={styles.subTitle}>HMSAccountAuthManager</Text>\n          <Button func={this.getAuthResult} text=\"Get Auth Result\" />\n          <Button func={this.addAuthScopes} text=\"Add Auth Scopes\" />\n          <Button func={this.getAuthResultWithScopes} text=\"Get Auth Result With Scopes\" />\n          <Button func={this.containScopes} text=\"Contain Scopes\" />\n\n          <Text style={styles.subTitle}>HMSNetworkTool</Text>\n          <Button func={this.buildNetworkCookie} text=\"Build Network Cookie\" />\n          <Button func={this.buildNetworkUrl} text=\"Build Network Url\" />\n\n          <Text style={styles.subTitle}>HMSHuaweiIdAuthTool</Text>\n          <Button func={this.deleteAuthInfo} text=\"Delete Auth Info\" />\n          <Button func={this.requestUnionId} text=\"Request Union Id\" />\n          <Button func={this.requestAccessToken} text=\"Request Access Token\" />\n\n          <Text style={styles.subTitle}>HMSAuthButton</Text>\n          <Button func={this.getButtonInfo} text=\"Button Info\" />\n\n          <HMSAuthButton\n            style={styles.viewcontainer}\n            colorPolicy={HMSAccount.HUAWEI_ID_AUTH_BUTTON_COLOR_POLICY_RED}\n            enabled={true}\n            theme={HMSAccount.HUAWEI_ID_AUTH_BUTTON_THEME_FULL_TITLE}\n            cornerRadius={HMSAccount.HUAWEI_ID_AUTH_BUTTON_CORNER_RADIUS_MEDIUM}\n            onPress={this.signInWithIdToken}\n            ref={(el) => (buttonView = el)}\n          />\n\n          <Text style={styles.logText}>{this.state.log}</Text>\n        </ScrollView>\n      </View>\n    );\n  }\n}\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-account/example/README.md",
    "content": "# React-Native HMS Account - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Account Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Account - Demo is licensed under [Apache 2.0 license](../LICENSE)\n"
  },
  {
    "path": "react-native-hms-account/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.hms.rn.account.demo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.hms.rn.account.demo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-account/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: 'com.facebook.react'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n      }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:\"  // From node_modules\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n    //noinspection GradleDependency\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n      exclude group:'com.facebook.fbjni'\n    }\n    //noinspection GradleDependency\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n    //noinspection GradleDependency\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-account/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-account/example/android/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.account.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <application\n            android:name=\"com.huawei.hms.rn.account.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/ic_launcher\"\n            android:label=\"RNHmsAccountDemo\"\n            android:roundIcon=\"@mipmap/ic_launcher_round\"\n            android:theme=\"@style/AppTheme\"\n            android:usesCleartextTraffic=\"true\">\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.account.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RNHmsAccountDemo\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>"
  },
  {
    "path": "react-native-hms-account/example/android/app/src/main/java/com/huawei/hms/rn/account/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"huawei.hms.rn.account.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/example/android/app/src/main/java/com/huawei/hms/rn/account/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.account.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-account/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.3')\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        classpath('com.facebook.react:react-native-gradle-plugin')\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n       mavenCentral()\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-account/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-account/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-account/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-account/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-account/example/android/settings.gradle",
    "content": "rootProject.name = 'huawei.hms.rn.account.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-account/example/app.json",
    "content": "{\n  \"name\": \"huawei.hms.rn.account.demo\",\n  \"displayName\": \"RN Account Demo\"\n}"
  },
  {
    "path": "react-native-hms-account/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-account/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry } from \"react-native\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-account/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-account/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-account-demo\",\n  \"version\": \"6.12.0-301\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"@hmscore/react-native-hms-account\": \"6.12.0-301\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@react-native-community/eslint-config\": \"^1.1.0\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"babel-jest\": \"^29.5.0\",\n    \"eslint\": \"^8.31.0\",\n    \"jest\": \"^29.7.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-account/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-account\",\n  \"title\": \"React Native Hms Account\",\n  \"description\": \"React Native Hms Account Kit\",\n  \"version\": \"6.12.0-301\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-account\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"hms-account\",\n    \"huawei-account\",\n    \"account-kit\",\n    \"react-native-hms-account\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src/index.js\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"app_define.json\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-account/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-account\" {\n\n    export const HMSAccount = {\n        signIn(request: SignInData): Promise<AuthHuaweiId>;,\n        signOut(): Promise<boolean>;,\n        cancelAuthorization(): Promise<boolean>;,\n        silentSignIn(request: SilentSignInData): Promise<AuthHuaweiId>;,\n        enableLogger(): Promise<void>;,\n        disableLogger(): Promise<void>;,\n    }\n\n    export const HMSHuaweiIdAuthManager = {\n        getAuthResult(): Promise<AuthHuaweiId>;,\n        getAuthResultWithScopes(request: AuthScopeData): Promise<AuthHuaweiId>;,\n        addAuthScopes(request: AuthScopeData): Promise<boolean>;,\n        containScopes(request: ContainScopesData): Promise<boolean>;,\n    }\n\n    export const HMSAccountAuthService = {\n        signIn(request: SignInData): Promise<AuthAccount>;,\n        signOut(): Promise<boolean>;,\n        silentSignIn(request: SilentSignInData): Promise<AuthAccount>;,\n        cancelAuthorization(): Promise<boolean>;,\n        getChannel(): Promise<AccountIcon>;,\n        getIndependentSignInIntent(accessToken: string): Promise<AuthAccount>;,\n    }\n\n    export const HMSAccountAuthManager = {\n        getAuthResult(): Promise<AuthAccount>;,\n        getAuthResultWithScopes(request: AuthScopeData): Promise<AuthAccount>;,\n        addAuthScopes(request: AuthScopeData): Promise<boolean>;,\n        containScopes(request: ContainScopesData): Promise<boolean>;,\n    }\n\n    export const HMSHuaweiIdAuthTool = {\n        deleteAuthInfo(request: AccessTokenData): Promise<boolean>;,\n        requestUnionId(request: AccountData): Promise<string>;,\n        requestAccessToken(request: RequestAccessTokenData): Promise<string>;,\n    }\n\n    export const HMSNetworkTool = {\n        buildNetworkCookie(request: CookieData): Promise<string>;,\n        buildNetworkUrl(request: UrlData): Promise<string>;,\n    }\n\n\n    export interface SignInData {\n        huaweiIdAuthParams: HMSAuthParamConstants[];\n        authRequestOption?: HMSAuthRequestOptionConstants[];\n        authScopeList?: HMSAuthScopeListConstants[];\n    }\n\n    export interface SilentSignInData {\n        huaweiIdAuthParams: HMSAuthParamConstants[];\n    }\n\n    export interface AuthScopeData {\n        authScopeList: HMSAuthParamConstants[];\n    }\n\n    export interface ContainScopesData {\n        authAccount: AuthBuilder;\n        authScopeList: HMSAuthScopeListConstants[];\n    }\n\n    export interface AuthBuilder {\n        openId?: string;\n        uid?: string;\n        displayName?: string;\n        photoUrl?: string;\n        accessToken?: string;\n        serviceCountryCode?: string;\n        status?: number;\n        gender?: number;\n        authScopeList: HMSAuthScopeListConstants[];\n        serverAuthCode?: string;\n        unionId?: string;\n        countryCode?: string;\n    }\n\n    export interface AuthHuaweiId {\n        /** @deprecated accessToken*/\n        accessToken: string;\n        account: HuaweiAccount; \n        displayName: string;\n        email: string;\n        familyName: string;\n        givenName: string;\n        authorizedScopes: HMSAuthScopeListConstants[];\n        idToken: string;\n        avatarUriString: string;\n        authorizationCode: string;\n        unionId: string;\n        openId: string;\n        carrierId: number;\n    }\n\n    export interface AuthAccount {\n        /** @deprecated accessToken*/\n        accessToken: string;\n        account: HuaweiAccount; \n        displayName: string;\n        serviceCountryCode: string;\n        gender: number;\n        email: string;\n        familyName: string;\n        givenName: string;\n        authorizedScopes: HMSAuthScopeListConstants[];\n        idToken: string;\n        avatarUriString: string;\n        authorizationCode: string;\n        unionId: string;\n        openId: string;\n        accountFlag: number;\n        carrierId: number;\n    }\n\n    export interface HuaweiAccount {\n        name: string;\n        type: string;\n    }\n\n    export interface AccountIcon {\n        icon: string;\n        description: string;\n    }\n    \n    export interface AccessTokenData {\n        accessToken: string;\n    }\n\n    export interface AccountData {\n        huaweiAccountName: string;\n    }\n\n    export interface RequestAccessTokenData {\n        authScopeList: HMSAuthScopeListConstants[];\n        huaweiAccount: HuaweiAccount;\n    }\n\n    export interface CookieData {\n        cookieName: string;\n        cookieValue?: string;\n        domain?: string;\n        path?: string;\n        isHttpOnly?: boolean;\n        isSecure?: boolean;\n        maxAge?: number;\n    }\n\n    export interface UrlData {\n        isUseHttps?: boolean;\n        domain: string;\n    }\n\n    export enum HMSAuthParamConstants  {\n        DEFAULT_AUTH_REQUEST_PARAM = \"DEFAULT_AUTH_REQUEST_PARAM\",\n        DEFAULT_AUTH_REQUEST_PARAM_GAME = \"DEFAULT_AUTH_REQUEST_PARAM_GAME\",\n    }\n\n    export enum HMSAuthRequestOptionConstants {\n      ID_TOKEN = \"idToken\",\n      ID = \"id\",\n      ACCESS_TOKEN = \"accessToken\",\n      AUTHORIZATION_CODE = \"authorizationCode\",\n      EMAIL = \"email\",\n      PROFILE = \"profile\",\n      MOBILENUMBER = \"mobileNumber\",\n      UID = \"uid\",\n      CARRIERID = \"carrierId\",\n    }\n\n    export  enum HMSAuthScopeListConstants  {\n        OPENID = \"openid\",\n        EMAIL = \"email\",\n        PROFILE = \"profile\",\n        GAME = \"https://www.huawei.com/auth/games\",\n    }\n\n} "
  },
  {
    "path": "react-native-hms-account/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  findNodeHandle,\n  NativeModules,\n  requireNativeComponent,\n  TouchableOpacity,\n} from \"react-native\";\n\nconst { HMSAccount } = NativeModules;\n\nexport const HMSAuthParamConstants = {\n  DEFAULT_AUTH_REQUEST_PARAM: \"DEFAULT_AUTH_REQUEST_PARAM\",\n  DEFAULT_AUTH_REQUEST_PARAM_GAME: \"DEFAULT_AUTH_REQUEST_PARAM_GAME\",\n}\n\nexport const HMSAuthRequestOptionConstants = {\n  ID_TOKEN: \"idToken\",\n  ID: \"id\",\n  ACCESS_TOKEN: \"accessToken\",\n  AUTHORIZATION_CODE: \"authorizationCode\",\n  EMAIL: \"email\",\n  PROFILE: \"profile\",\n  MOBILENUMBER: \"mobileNumber\",\n  UID: \"uid\",\n  CARRIERID: \"carrierId\",\n}\n\nexport const HMSAuthScopeListConstants = {\n  OPENID: \"openid\",\n  EMAIL: \"email\",\n  PROFILE: \"profile\",\n  GAME: \"https://www.huawei.com/auth/games\",\n}\n\nexport const {\n  HMSHuaweiIdAuthManager,\n  HMSHuaweiIdAuthTool,\n  HMSNetworkTool,\n  HMSReadSMSManager,\n  HMSAccountAuthService,\n  HMSAccountAuthManager,\n} = NativeModules;\n\nconst AuthButton = requireNativeComponent(\"HMSHuaweiIdAuthButton\");\n\nexport class HMSAuthButton extends React.Component {\n  getInfo = () => HMSAccount.getButtonInfo(findNodeHandle(this.buttonView));\n  render() {\n    const { onPress, ...restProps } = this.props;\n    restProps.enabled =\n      typeof restProps.enabled == \"undefined\" ? true : restProps.enabled;\n    return (\n      <TouchableOpacity onPress={onPress} disabled={!restProps.enabled}>\n        <AuthButton {...restProps} ref={(el) => (this.buttonView = el)} />\n      </TouchableOpacity>\n    );\n  }\n}\n\nexport default HMSAccount;\n"
  },
  {
    "path": "react-native-hms-ads/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-ads/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software:&nbsp; @react-native-picker/picker 2.5.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">MIT License&nbsp;</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), 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 &quot;AS IS&quot;, 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.</p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-ads/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Ads</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ads\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-ads?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ads\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-ads?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-ads.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nThis module enables communication between Huawei Ads SDK and React Native platform. It exposes all functionality provided by Huawei Ads SDK.\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050196714?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-ads\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/publisher-service-reporting-0000001074651726?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001073228987-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Banner Ads](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/banner-0000001050439147?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-ads/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    mavenCentral()\n    jcenter()\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:ads-lite:13.4.73.300'\n    implementation 'com.huawei.hms:ads-consent:3.4.73.300'\n    implementation 'com.huawei.hms:ads-identifier:3.4.62.300'\n    implementation 'com.huawei.hms:ads-installreferrer:3.4.62.300'\n    implementation 'com.huawei.hms:ads-vast:3.4.44.303'\n    implementation 'com.huawei.hms:ads-vast-player:3.4.44.303'\n    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301'\n    implementation 'com.huawei.hms:stats:6.12.0.300'\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ads/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-ads/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ads/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.ads\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application android:usesCleartextTraffic=\"true\">\n        <activity\n            android:name=\"com.huawei.hms.rn.ads.HMSAdsSplashActivity\"\n            android:exported=\"false\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsBannerView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.banner.BannerView;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsBannerView extends BannerView {\n    private static final String TAG = HMSAdsBannerView.class.getSimpleName();\n    private ReactContext mReactContext;\n    protected ReadableMap mAdParamReadableMap;\n\n    public enum BannerMediaType {\n        IMAGE(\"image\");\n\n        private String value;\n\n        BannerMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum BannerSize {\n        B_300_250(\"300_250\"),\n        B_320_50(\"320_50\"),\n        B_320_100(\"320_100\"),\n        B_360_57(\"360_57\"),\n        B_360_144(\"360_144\"),\n        B_SMART(\"smart\"),\n        B_DYNAMIC(\"dynamic\"),\n        B_ADVANCED(\"advanced\"),\n        B_INVALID(\"invalid\");\n\n        private String value;\n\n        BannerSize(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static BannerSize forValue(String s) {\n            switch (s) {\n                case \"300_250\":\n                    return B_300_250;\n                case \"320_50\":\n                    return B_320_50;\n                case \"320_100\":\n                    return B_320_100;\n                case \"360_57\":\n                    return B_360_57;\n                case \"360_144\":\n                    return B_360_144;\n                case \"dynamic\":\n                    return B_DYNAMIC;\n                case \"invalid\":\n                    return B_INVALID;\n                case \"advanced\":\n                    return B_ADVANCED;\n                default:\n                    return B_SMART;\n            }\n        }\n    }\n\n    public HMSAdsBannerView(final Context context) {\n        super(context);\n    }\n\n    public HMSAdsBannerView(final ThemedReactContext context) {\n        super(context);\n        mReactContext = context;\n        setAdListener(new AdListener() {\n            @Override\n            public void onAdLoaded() {\n                sendEvent(Manager.Event.AD_LOADED, null);\n            }\n\n            @Override\n            public void onAdFailed(int errorCode) {\n                sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onAdOpened() {\n                sendEvent(Manager.Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Manager.Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdClosed() {\n                sendEvent(Manager.Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Manager.Event.AD_IMPRESSION, null);\n            }\n\n            @Override\n            public void onAdLeave() {\n                sendEvent(Manager.Event.AD_LEAVE, null);\n            }\n        });\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(() -> {\n            measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n            layout(getLeft(), getTop(), getRight(), getBottom());\n        });\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    void loadAd() {\n        loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mAdParamReadableMap = adParamReadableMap;\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsBannerView> {\n        private HMSLogger hmsLogger;\n        private ReactApplicationContext mReactContext;\n\n        public Manager(ReactApplicationContext reactContext) {\n            mReactContext = reactContext;\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            AD_LOADED(\"onAdLoaded\"),\n            AD_FAILED(\"onAdFailed\"),\n            AD_OPENED(\"onAdOpened\"),\n            AD_CLICKED(\"onAdClicked\"),\n            AD_CLOSED(\"onAdClosed\"),\n            AD_IMPRESSION(\"onAdImpression\"),\n            AD_LEAVE(\"onAdLeave\");\n\n            private String bannerEventName;\n\n            Event(String bannerEventName) {\n                this.bannerEventName = bannerEventName;\n            }\n\n            public String getName() {\n                return bannerEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            SET_REFRESH(\"setRefresh\"),\n            PAUSE(\"pause\"),\n            RESUME(\"resume\"),\n            DESTROY(\"destroy\");\n\n            private String bannerCommandName;\n\n            Command(String bannerCommandName) {\n                this.bannerCommandName = bannerCommandName;\n            }\n\n            public String getName() {\n                return bannerCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsBannerView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsBannerView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"bannerView.create\");\n            return new HMSAdsBannerView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsBannerView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"bannerView.loadAd\");\n                        break;\n                    case SET_REFRESH:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.setBannerRefresh\");\n                        root.setBannerRefresh(args.getInt(0));\n                        hmsLogger.sendSingleEvent(\"bannerView.setBannerRefresh\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.pause\");\n                        root.pause();\n                        hmsLogger.sendSingleEvent(\"bannerView.pause\");\n                        break;\n                    case RESUME:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.resume\");\n                        root.resume();\n                        hmsLogger.sendSingleEvent(\"bannerView.resume\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"bannerView.destroy\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsBannerView view, final ReadableMap rm) {\n            hmsLogger.sendSingleEvent(\"bannerView.setAdParam\");\n            view.setAdParam(rm);\n        }\n\n        @ReactProp(name = \"bannerAdSize\")\n        public void setBannerAdSize(final HMSAdsBannerView view, final String adSize) {\n            hmsLogger.sendSingleEvent(\"bannerView.setBannerAdSize\");\n            view.setBannerAdSize(ReactUtils.getBannerAdSizeFromReadableMap(mReactContext, adSize));\n        }\n\n        @ReactProp(name = \"adId\")\n        public void setAdId(final HMSAdsBannerView view, final String adId) {\n            hmsLogger.sendSingleEvent(\"bannerView.setAdId\");\n            view.setAdId(adId);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsInstallReferrerModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.RemoteException;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.ads.installreferrer.api.InstallReferrerClient;\nimport com.huawei.hms.ads.installreferrer.api.InstallReferrerStateListener;\nimport com.huawei.hms.ads.installreferrer.api.ReferrerDetails;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.io.IOException;\n\nimport static com.huawei.hms.rn.ads.HMSAdsModule.CallMode;\n\npublic class HMSAdsInstallReferrerModule extends ReactContextBaseJavaModule implements InstallReferrerStateListener {\n    private static final String TAG = HMSAdsInstallReferrerModule.class.getSimpleName();\n\n    private final ReactApplicationContext reactContext;\n    private HMSLogger hmsLogger;\n    private InstallReferrerClient mReferrerClient;\n\n    public enum Event {\n        SERVICE_CONNECTED(\"serviceConnected\"),\n        SERVICE_DISCONNECTED(\"serviceDisconnected\");\n\n        private String name;\n\n        Event(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n    }\n\n    HMSAdsInstallReferrerModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsInstallReferrer\";\n    }\n\n    @Override\n    public void onInstallReferrerSetupFinished(int responseCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"responseCode\", responseCode);\n        wm.putString(\"responseMessage\", getResponseMessage(responseCode));\n        sendEvent(Event.SERVICE_CONNECTED, wm);\n    }\n\n    @Override\n    public void onInstallReferrerServiceDisconnected() {\n        sendEvent(Event.SERVICE_DISCONNECTED, null);\n    }\n\n    void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void startConnection(final String callMode, final boolean isTest, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (CallMode.forValue(callMode) == CallMode.AIDL) {\n                promise.reject(\"AIDL_SERVICE_INVALID\", \"Aidl service is disabled\");\n                return;\n            }\n            if (mReferrerClient != null) {\n                promise.reject(\"REFERRER_CANNOT_CONNECT\", \"Referrer already connected\");\n                return;\n            }\n            mReferrerClient = InstallReferrerClient.newBuilder(reactContext).setTest(isTest).build();\n            hmsLogger.startMethodExecutionTimer(\"startConnection\");\n            mReferrerClient.startConnection(this);\n            hmsLogger.sendSingleEvent(\"startConnection\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void endConnection(final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mReferrerClient == null) {\n                promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n                return;\n            }\n            hmsLogger.startMethodExecutionTimer(\"endConnection\");\n            mReferrerClient.endConnection();\n            hmsLogger.sendSingleEvent(\"endConnection\");\n            mReferrerClient = null;\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void getReferrerDetails(final String installChannel, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mReferrerClient == null) {\n                promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n                return;\n            }\n            try {\n                hmsLogger.startMethodExecutionTimer(\"getInstallReferrer\");\n                ReferrerDetails referrerDetails = mReferrerClient.getInstallReferrer();\n                referrerDetails.setInstallChannel(installChannel);\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\");\n                promise.resolve(ReactUtils.getWritableMapFromReferrerDetails(referrerDetails));\n            } catch (RemoteException e) {\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\", \"-1\");\n                promise.reject(\"REMOTE_EXCEPTION\", e.getMessage());\n            } catch (IOException e) {\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\", \"-1\");\n                promise.reject(\"IO_EXCEPTION\", e.getMessage());\n            }\n        });\n    }\n\n    @ReactMethod\n    public void isReady(final Promise promise) {\n        if (mReferrerClient == null) {\n            promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n            return;\n        }\n        hmsLogger.startMethodExecutionTimer(\"isReady\");\n        promise.resolve(mReferrerClient.isReady());\n        hmsLogger.sendSingleEvent(\"isReady\");\n    }\n\n    private String getResponseMessage(int responseCode) {\n        String responseMessage = \"Unknown response\";\n        switch (responseCode) {\n            case InstallReferrerClient.InstallReferrerResponse.OK:\n                responseMessage = \"Connected to the service successfully\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:\n                // Service not supported. Please download and install the latest version of Huawei Mobile\n                // Services(APK).\n                responseMessage = \"The service is not supported\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:\n                // Service unavailable. Please update the version of Huawei Mobile Services(APK) to 2.6.5 or later.\n                responseMessage = \"The service does not exist\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED:\n                responseMessage = \"Failed to connect to the service\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR:\n                responseMessage = \"A call error occurred\";\n                break;\n            default:\n                break;\n        }\n        return responseMessage;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsInstreamView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\n\nimport com.huawei.hms.ads.MediaMuteListener;\nimport com.huawei.hms.ads.instreamad.InstreamAd;\nimport com.huawei.hms.ads.instreamad.InstreamAdLoadListener;\nimport com.huawei.hms.ads.instreamad.InstreamAdLoader;\nimport com.huawei.hms.ads.instreamad.InstreamMediaChangeListener;\nimport com.huawei.hms.ads.instreamad.InstreamMediaStateListener;\nimport com.huawei.hms.ads.instreamad.InstreamView;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSAdsInstreamView extends InstreamView\n    implements InstreamMediaChangeListener, InstreamMediaStateListener, MediaMuteListener, InstreamAdLoadListener,\n    InstreamView.OnInstreamAdClickListener {\n    private static final String TAG = HMSAdsInstreamView.class.getSimpleName();\n\n    private ReactContext mReactContext;\n\n    protected List<InstreamAd> mInstreamAds = new ArrayList<>();\n\n    protected InstreamAdLoader mInstreamAdLoader;\n\n    protected String mAdId;\n\n    protected ReadableMap mAdParamReadableMap;\n\n    protected int mMaxCount;\n\n    protected int mTotalDuration;\n\n    public HMSAdsInstreamView(final Context context) {\n        super(context);\n    }\n\n    public HMSAdsInstreamView(final ThemedReactContext context) {\n        super(context);\n        mReactContext = context;\n        setInstreamMediaChangeListener(this);\n        setInstreamMediaStateListener(this);\n        setMediaMuteListener(this);\n        setOnInstreamAdClickListener(this);\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(() -> {\n            measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n            layout(getLeft(), getTop(), getRight(), getBottom());\n        });\n    }\n\n    @Override\n    public void onClick() {\n        sendEvent(Manager.Event.CLICK, null);\n    }\n\n    @Override\n    public void onMute() {\n        sendEvent(Manager.Event.MUTE, null);\n    }\n\n    @Override\n    public void onUnmute() {\n        sendEvent(Manager.Event.UNMUTE, null);\n    }\n\n    @Override\n    public void onAdLoaded(List<InstreamAd> ads) {\n        if (null == ads || ads.size() == 0) {\n            return;\n        }\n        Iterator<InstreamAd> it = ads.iterator();\n        while (it.hasNext()) {\n            InstreamAd ad = it.next();\n            if (ad.isExpired()) {\n                it.remove();\n            }\n        }\n        if (ads.size() == 0) {\n            return;\n        }\n\n        mInstreamAds = ads;\n        sendEvent(Manager.Event.AD_LOADED, null);\n    }\n\n    @Override\n    public void onAdFailed(int errorCode) {\n        sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n    }\n\n    @Override\n    public void onSegmentMediaChange(InstreamAd instreamAd) {\n        sendEvent(Manager.Event.SEGMENT_MEDIA_CHANGE, ReactUtils.getWritableMapFromInstreamAd(instreamAd));\n    }\n\n    @Override\n    public void onMediaProgress(int percent, int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"percent\", percent);\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_PROGRESS, wm);\n    }\n\n    @Override\n    public void onMediaStart(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_START, wm);\n    }\n\n    @Override\n    public void onMediaPause(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_PAUSE, wm);\n    }\n\n    @Override\n    public void onMediaStop(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_STOP, wm);\n    }\n\n    @Override\n    public void onMediaCompletion(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_COMPLETION, wm);\n    }\n\n    @Override\n    public void onMediaError(int playTime, int errorCode, int extra) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        wm.putInt(\"extra\", extra);\n        wm.putMap(\"error\", ReactUtils.getWritableMapFromErrorCode(errorCode));\n        sendEvent(Manager.Event.MEDIA_ERROR, wm);\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    public void loadAd() {\n        mInstreamAdLoader = new InstreamAdLoader.Builder(mReactContext, mAdId).setTotalDuration(mTotalDuration)\n            .setMaxCount(mMaxCount)\n            .setInstreamAdLoadListener(this)\n            .build();\n        mInstreamAdLoader.loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    public void register() {\n        setInstreamAds(mInstreamAds);\n    }\n\n    public void setAdParam(ReadableMap rm) {\n        mAdParamReadableMap = rm;\n    }\n\n    public void setAdId(String adId) {\n        mAdId = adId;\n    }\n\n    public void setTotalDuration(int totalDuration) {\n        mTotalDuration = totalDuration;\n    }\n\n    public void setMaxCount(int maxCount) {\n        mMaxCount = maxCount;\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsInstreamView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            MUTE(\"onMute\"),\n            UNMUTE(\"onUnmute\"),\n            AD_LOADED(\"onAdLoaded\"),\n            AD_FAILED(\"onAdFailed\"),\n            SEGMENT_MEDIA_CHANGE(\"onSegmentMediaChange\"),\n            MEDIA_PROGRESS(\"onMediaProgress\"),\n            MEDIA_START(\"onMediaStart\"),\n            MEDIA_PAUSE(\"onMediaPause\"),\n            MEDIA_STOP(\"onMediaStop\"),\n            MEDIA_COMPLETION(\"onMediaCompletion\"),\n            MEDIA_ERROR(\"onMediaError\"),\n            CLICK(\"onClick\");\n\n            private String instreamEventName;\n\n            Event(String instreamEventName) {\n                this.instreamEventName = instreamEventName;\n            }\n\n            public String getName() {\n                return instreamEventName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            REGISTER(\"register\"),\n            MUTE(\"mute\"),\n            UNMUTE(\"unmute\"),\n            STOP(\"stop\"),\n            PAUSE(\"pause\"),\n            PLAY(\"play\"),\n            DESTROY(\"destroy\"),\n            SHOW_ADVERTISER_INFO_DIALOG(\"showAdvertiserInfoDialog\"),\n            HIDE_ADVERTISER_INFO_DIALOG(\"hideAdvertiserInfoDialog\"),\n            SHOW_TRANSPARENCY_DIALOG(\"showTransparencyDialog\"),\n            HIDE_TRANSPARENCY_DIALOG(\"hideTransparencyDialog\");\n\n            private String instreamCommandName;\n\n            Command(String instreamCommandName) {\n                this.instreamCommandName = instreamCommandName;\n            }\n\n            public String getName() {\n                return instreamCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsInstreamView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsInstreamView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"instreamView.create\");\n            return new HMSAdsInstreamView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsInstreamView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"instreamView.loadAd\");\n                        break;\n                    case REGISTER:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.register\");\n                        root.register();\n                        hmsLogger.sendSingleEvent(\"instreamView.register\");\n                        break;\n                    case MUTE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.mute\");\n                        root.mute();\n                        hmsLogger.sendSingleEvent(\"instreamView.mute\");\n                        break;\n                    case UNMUTE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.unmute\");\n                        root.unmute();\n                        hmsLogger.sendSingleEvent(\"instreamView.unmute\");\n                        break;\n                    case STOP:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.stop\");\n                        root.stop();\n                        hmsLogger.sendSingleEvent(\"instreamView.stop\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.pause\");\n                        root.pause();\n                        hmsLogger.sendSingleEvent(\"instreamView.pause\");\n                        break;\n                    case PLAY:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.play\");\n                        root.play();\n                        hmsLogger.sendSingleEvent(\"instreamView.play\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"instreamView.destroy\");\n                        break;\n                    case SHOW_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.showAdvertiserInfoDialog\");\n                        root.showAdvertiserInfoDialog(root, args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"instreamView.showAdvertiserInfoDialog\");\n                        break;\n                    case HIDE_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.hideAdvertiserInfoDialog\");\n                        root.hideAdvertiserInfoDialog();\n                        hmsLogger.sendSingleEvent(\"instreamView.hideAdvertiserInfoDialog\");\n                        break;\n                    case SHOW_TRANSPARENCY_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.showTransparencyDialog\");\n                        if (args != null) {\n                            ReadableArray list = args.getArray(0);\n                            int[] location = new int[list.size()];\n                            if (list != null) {\n                                for (int i = 0; i < list.size(); i++) {\n                                    location[i] = (list.getInt(i));\n                                }\n                            }\n                            root.showTransparencyDialog(root, location);\n                        } else {\n                            root.showTransparencyDialog(root);\n                        }\n                        hmsLogger.sendSingleEvent(\"instreamView.showTransparencyDialog\");\n                        break;\n                    case HIDE_TRANSPARENCY_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instremView.hideTransparencyDialog\");\n                        root.hideTransparencyDialog();\n                        hmsLogger.sendSingleEvent(\"instremView.hideTransparencyDialog\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsInstreamView view, final ReadableMap rm) {\n            hmsLogger.sendSingleEvent(\"instreamView.setAdParam\");\n            view.setAdParam(rm);\n        }\n\n        @ReactProp(name = \"adId\")\n        public void setAdId(final HMSAdsInstreamView view, final String adId) {\n            hmsLogger.sendSingleEvent(\"instreamView.setAdId\");\n            view.setAdId(adId);\n        }\n\n        @ReactProp(name = \"maxCount\")\n        public void setMaxCount(final HMSAdsInstreamView view, final int maxCount) {\n            hmsLogger.sendSingleEvent(\"instreamView.setMaxCount\");\n            view.setMaxCount(maxCount);\n        }\n\n        @ReactProp(name = \"totalDuration\")\n        public void setTotalDuration(final HMSAdsInstreamView view, final int totalDuration) {\n            hmsLogger.sendSingleEvent(\"instreamView.setTotalDuration\");\n            view.setTotalDuration(totalDuration);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsInterstitialAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.InterstitialAd;\n\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAdListener;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\npublic class HMSAdsInterstitialAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsInterstitialAdModule.class.getSimpleName();\n    private ReactApplicationContext mReactContext;\n    private HMSLogger hmsLogger;\n    private InterstitialAd interstitialAd;\n\n    private ReadableMap mAdParamReadableMap;\n    private String mAdId;\n    private AdListener mAdListener;\n    private final RewardAdListener mRewardAdListener;\n    private VideoConfiguration mVideoConfiguration;\n\n\n    public enum InterstitialMediaType {\n        IMAGE(\"image\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        InterstitialMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_CLOSED(\"adClosed\"),\n        AD_FAILED(\"adFailed\"),\n        AD_LEAVE(\"adLeave\"),\n        AD_OPENED(\"adOpened\"),\n        AD_LOADED(\"adLoaded\"),\n        AD_CLICKED(\"adClicked\"),\n        AD_IMPRESSION(\"adImpression\"),\n        AD_COMPLETED(\"adCompleted\"),\n        AD_STARTED(\"adStarted\");\n\n        private String interstitialEventName;\n\n        Event(String interstitialEventName) {\n            this.interstitialEventName = interstitialEventName;\n        }\n\n        public String getName() {\n            return interstitialEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsInterstitial\";\n    }\n\n    HMSAdsInterstitialAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mAdListener = new AdListener() {\n            @Override\n            public void onAdClosed() {\n            }\n\n            @Override\n            public void onAdFailed(int errorCode) {\n            }\n\n            @Override\n            public void onAdLeave() {\n                sendEvent(Event.AD_LEAVE, null);\n            }\n\n            @Override\n            public void onAdOpened() {\n            }\n\n            @Override\n            public void onAdLoaded() {\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Event.AD_IMPRESSION, null);\n            }\n        };\n        mRewardAdListener = new RewardAdListener() {\n            @Override\n            public void onRewarded(Reward reward) {\n            }\n\n            @Override\n            public void onRewardAdClosed() {\n                sendEvent(Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onRewardAdFailedToLoad(int errorCode) {\n                sendEvent(Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardAdLeftApp() {\n            }\n\n            @Override\n            public void onRewardAdLoaded() {\n                sendEvent(Event.AD_LOADED, ReactUtils.getWritableMapFromInterstitialAd(interstitialAd));\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                sendEvent(Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onRewardAdCompleted() {\n                sendEvent(Event.AD_COMPLETED, null);\n            }\n\n            @Override\n            public void onRewardAdStarted() {\n                sendEvent(Event.AD_STARTED, null);\n            }\n        };\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    private void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void setAdId(final String adId, final Promise promise) {\n        mAdId = adId;\n        hmsLogger.sendSingleEvent(\"interstitialAd.setAdId\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdParam(final ReadableMap rm, final Promise promise) {\n        mAdParamReadableMap = rm;\n        hmsLogger.sendSingleEvent(\"interstitialAd.setAdParam\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadAd(final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            interstitialAd = new InterstitialAd(mReactContext);\n            interstitialAd.setAdListener(mAdListener);\n            interstitialAd.setRewardAdListener(mRewardAdListener);\n            interstitialAd.setAdId(mAdId);\n            interstitialAd.setVideoConfiguration(mVideoConfiguration);\n            AdParam adParam = ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap);\n            hmsLogger.startMethodExecutionTimer(\"interstitialAd.loadAd\");\n            interstitialAd.loadAd(adParam);\n            hmsLogger.sendSingleEvent(\"interstitialAd.loadAd\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.show\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (interstitialAd == null) {\n                promise.reject(\"AD_NOT_CREATED\", \"Interstitial ad is not created\");\n                hmsLogger.sendSingleEvent(\"interstitialAd.show\", \"-1\");\n                return;\n            }\n            interstitialAd.show(mReactContext.getCurrentActivity());\n            hmsLogger.sendSingleEvent(\"interstitialAd.show\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void setVideoConfiguration(final ReadableMap rm, final Promise promise) {\n        VideoConfiguration.Builder mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        if (rm == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(rm, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(rm.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                rm.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                rm.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(rm.getBoolean(\"startMuted\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.isLoaded\");\n        promise.resolve(interstitialAd != null && interstitialAd.isLoaded());\n        hmsLogger.sendSingleEvent(\"interstitialAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void isLoading(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.isLoading\");\n        promise.resolve(interstitialAd != null && interstitialAd.isLoading());\n        hmsLogger.sendSingleEvent(\"interstitialAd.isLoading\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.util.ArrayMap;\nimport android.util.Log;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.UIManagerModule;\nimport com.huawei.hms.ads.ActivateStyle;\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.AudioFocusType;\nimport com.huawei.hms.ads.ContentClassification;\nimport com.huawei.hms.ads.Gender;\nimport com.huawei.hms.ads.HwAds;\n\nimport com.huawei.hms.ads.NonPersonalizedAd;\nimport com.huawei.hms.ads.RequestOptions;\nimport com.huawei.hms.ads.TagForChild;\nimport com.huawei.hms.ads.UnderAge;\nimport com.huawei.hms.ads.consent.bean.AdProvider;\nimport com.huawei.hms.ads.consent.constant.ConsentStatus;\nimport com.huawei.hms.ads.consent.constant.DebugNeedConsent;\nimport com.huawei.hms.ads.consent.inter.Consent;\nimport com.huawei.hms.ads.consent.inter.ConsentUpdateListener;\nimport com.huawei.hms.ads.nativead.DetailedCreativeType;\nimport com.huawei.hms.ads.nativead.NativeAdAssetNames;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSAdsModule extends ReactContextBaseJavaModule implements ConsentUpdateListener {\n    private static final String TAG = HMSAdsModule.class.getSimpleName();\n    private final ReactApplicationContext reactContext;\n    private HMSLogger hmsLogger;\n    private RequestOptions mRequestOptions;\n    private Promise mPromise;\n\n    HMSAdsModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    public enum CallMode {\n        AIDL(\"aidl\"),\n        SDK(\"sdk\");\n\n        private String value;\n\n        CallMode(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static CallMode forValue(String s) {\n            if (\"aidl\".equals(s)) {\n                return AIDL;\n            }\n            return SDK;\n        }\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n\n        Map<String, Object> consentStatus = new ArrayMap<>();\n        consentStatus.put(\"PERSONALIZED\", ConsentStatus.PERSONALIZED.getValue());\n        consentStatus.put(\"NON_PERSONALIZED\", ConsentStatus.NON_PERSONALIZED.getValue());\n        consentStatus.put(\"UNKNOWN\", ConsentStatus.UNKNOWN.getValue());\n        constants.put(\"ConsentStatus\", consentStatus);\n\n        Map<String, Object> debugNeedConsent = new ArrayMap<>();\n        debugNeedConsent.put(\"DEBUG_DISABLED\", DebugNeedConsent.DEBUG_DISABLED.getValue());\n        debugNeedConsent.put(\"DEBUG_NEED_CONSENT\", DebugNeedConsent.DEBUG_NEED_CONSENT.getValue());\n        debugNeedConsent.put(\"DEBUG_NOT_NEED_CONSENT\", DebugNeedConsent.DEBUG_NOT_NEED_CONSENT.getValue());\n        constants.put(\"DebugNeedConsent\", debugNeedConsent);\n\n        Map<String, Object> audioFocusType = new ArrayMap<>();\n        audioFocusType.put(\"GAIN_AUDIO_FOCUS_ALL\", AudioFocusType.GAIN_AUDIO_FOCUS_ALL);\n        audioFocusType.put(\"NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE);\n        audioFocusType.put(\"NOT_GAIN_AUDIO_FOCUS_ALL\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_ALL);\n        constants.put(\"AudioFocusType\", audioFocusType);\n\n        Map<String, Object> contentClassification = new ArrayMap<>();\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_W\", ContentClassification.AD_CONTENT_CLASSIFICATION_W);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_PI\", ContentClassification.AD_CONTENT_CLASSIFICATION_PI);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_J\", ContentClassification.AD_CONTENT_CLASSIFICATION_J);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_A\", ContentClassification.AD_CONTENT_CLASSIFICATION_A);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_UNKNOWN\",\n                ContentClassification.AD_CONTENT_CLASSIFICATION_UNKOWN);\n        constants.put(\"ContentClassification\", contentClassification);\n\n        Map<String, Object> gender = new ArrayMap<>();\n        gender.put(\"UNKNOWN\", Gender.UNKNOWN);\n        gender.put(\"MALE\", Gender.MALE);\n        gender.put(\"FEMALE\", Gender.FEMALE);\n        constants.put(\"Gender\", gender);\n\n        Map<String, Object> nonPersonalizedAd = new ArrayMap<>();\n        nonPersonalizedAd.put(\"ALLOW_ALL\", NonPersonalizedAd.ALLOW_ALL);\n        nonPersonalizedAd.put(\"ALLOW_NON_PERSONALIZED\", NonPersonalizedAd.ALLOW_NON_PERSONALIZED);\n        constants.put(\"NonPersonalizedAd\", nonPersonalizedAd);\n\n        Map<String, Object> tagForChild = new ArrayMap<>();\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_FALSE\", TagForChild.TAG_FOR_CHILD_PROTECTION_FALSE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_TRUE\", TagForChild.TAG_FOR_CHILD_PROTECTION_TRUE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_UNSPECIFIED\", TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED);\n        constants.put(\"TagForChild\", tagForChild);\n\n        Map<String, Object> underAge = new ArrayMap<>();\n        underAge.put(\"PROMISE_FALSE\", UnderAge.PROMISE_FALSE);\n        underAge.put(\"PROMISE_TRUE\", UnderAge.PROMISE_TRUE);\n        underAge.put(\"PROMISE_UNSPECIFIED\", UnderAge.PROMISE_UNSPECIFIED);\n        constants.put(\"UnderAge\", underAge);\n\n        Map<String, Object> nativeAdAssetNames = new ArrayMap<>();\n        nativeAdAssetNames.put(\"TITLE\", NativeAdAssetNames.TITLE);\n        nativeAdAssetNames.put(\"CALL_TO_ACTION\", NativeAdAssetNames.CALL_TO_ACTION);\n        nativeAdAssetNames.put(\"ICON\", NativeAdAssetNames.ICON);\n        nativeAdAssetNames.put(\"DESC\", NativeAdAssetNames.DESC);\n        nativeAdAssetNames.put(\"AD_SOURCE\", NativeAdAssetNames.AD_SOURCE);\n        nativeAdAssetNames.put(\"MARKET\", NativeAdAssetNames.MARKET);\n        nativeAdAssetNames.put(\"PRICE\", NativeAdAssetNames.PRICE);\n        nativeAdAssetNames.put(\"IMAGE\", NativeAdAssetNames.IMAGE);\n        nativeAdAssetNames.put(\"RATING\", NativeAdAssetNames.RATING);\n        nativeAdAssetNames.put(\"MEDIA_VIDEO\", NativeAdAssetNames.MEDIA_VIDEO);\n        nativeAdAssetNames.put(\"CHOICES_CONTAINER\", NativeAdAssetNames.CHOICES_CONTAINER);\n        constants.put(\"NativeAdAssetNames\", nativeAdAssetNames);\n\n        Map<String, Object> choicesPosition = new ArrayMap<>();\n        choicesPosition.put(\"TOP_LEFT\", NativeAdConfiguration.ChoicesPosition.TOP_LEFT);\n        choicesPosition.put(\"TOP_RIGHT\", NativeAdConfiguration.ChoicesPosition.TOP_RIGHT);\n        choicesPosition.put(\"BOTTOM_RIGHT\", NativeAdConfiguration.ChoicesPosition.BOTTOM_RIGHT);\n        choicesPosition.put(\"BOTTOM_LEFT\", NativeAdConfiguration.ChoicesPosition.BOTTOM_LEFT);\n        choicesPosition.put(\"INVISIBLE\", NativeAdConfiguration.ChoicesPosition.INVISIBLE);\n        constants.put(\"ChoicesPosition\", choicesPosition);\n\n        Map<String, Object> direction = new ArrayMap<>();\n        direction.put(\"ANY\", NativeAdConfiguration.Direction.ANY);\n        direction.put(\"PORTRAIT\", NativeAdConfiguration.Direction.PORTRAIT);\n        direction.put(\"LANDSCAPE\", NativeAdConfiguration.Direction.LANDSCAPE);\n        constants.put(\"Direction\", direction);\n\n        Map<String, Object> scaleType = new ArrayMap<>();\n        scaleType.put(\"MATRIX\", ImageView.ScaleType.MATRIX.name());\n        scaleType.put(\"FIT_XY\", ImageView.ScaleType.FIT_XY.name());\n        scaleType.put(\"FIT_START\", ImageView.ScaleType.FIT_START.name());\n        scaleType.put(\"FIT_CENTER\", ImageView.ScaleType.FIT_CENTER.name());\n        scaleType.put(\"FIT_END\", ImageView.ScaleType.FIT_END.name());\n        scaleType.put(\"CENTER\", ImageView.ScaleType.CENTER.name());\n        scaleType.put(\"CENTER_CROP\", ImageView.ScaleType.CENTER_CROP.name());\n        scaleType.put(\"CENTER_INSIDE\", ImageView.ScaleType.CENTER_INSIDE.name());\n        constants.put(\"ScaleType\", scaleType);\n\n        Map<String, Object> bannerAdSizes = new ArrayMap<>();\n        bannerAdSizes.put(\"B_300_250\", HMSAdsBannerView.BannerSize.B_300_250.getValue());\n        bannerAdSizes.put(\"B_320_50\", HMSAdsBannerView.BannerSize.B_320_50.getValue());\n        bannerAdSizes.put(\"B_320_100\", HMSAdsBannerView.BannerSize.B_320_100.getValue());\n        bannerAdSizes.put(\"B_360_57\", HMSAdsBannerView.BannerSize.B_360_57.getValue());\n        bannerAdSizes.put(\"B_360_144\", HMSAdsBannerView.BannerSize.B_360_144.getValue());\n        bannerAdSizes.put(\"B_SMART\", HMSAdsBannerView.BannerSize.B_SMART.getValue());\n        bannerAdSizes.put(\"B_DYNAMIC\", HMSAdsBannerView.BannerSize.B_DYNAMIC.getValue());\n        bannerAdSizes.put(\"B_ADVANCED\", HMSAdsBannerView.BannerSize.B_ADVANCED.getValue());\n        bannerAdSizes.put(\"B_INVALID\", HMSAdsBannerView.BannerSize.B_INVALID.getValue());\n        constants.put(\"BannerAdSizes\", bannerAdSizes);\n\n        Map<String, Object> bannerMediaTypes = new ArrayMap<>();\n        bannerMediaTypes.put(\"IMAGE\", HMSAdsBannerView.BannerMediaType.IMAGE.getValue());\n        constants.put(\"BannerMediaTypes\", bannerMediaTypes);\n\n        Map<String, Object> nativeMediaTypes = new ArrayMap<>();\n        nativeMediaTypes.put(\"IMAGE_LARGE\", HMSAdsNativeView.NativeMediaType.IMAGE_LARGE.getValue());\n        nativeMediaTypes.put(\"IMAGE_SMALL\", HMSAdsNativeView.NativeMediaType.IMAGE_SMALL.getValue());\n        nativeMediaTypes.put(\"VIDEO\", HMSAdsNativeView.NativeMediaType.VIDEO.getValue());\n        constants.put(\"NativeMediaTypes\", nativeMediaTypes);\n\n        Map<String, Object> interstitialMediaTypes = new ArrayMap<>();\n        interstitialMediaTypes.put(\"IMAGE\", HMSAdsInterstitialAdModule.InterstitialMediaType.IMAGE.getValue());\n        interstitialMediaTypes.put(\"VIDEO\", HMSAdsInterstitialAdModule.InterstitialMediaType.VIDEO.getValue());\n        constants.put(\"InterstitialMediaTypes\", interstitialMediaTypes);\n\n        Map<String, Object> rewardMediaTypes = new ArrayMap<>();\n        rewardMediaTypes.put(\"VIDEO\", HMSAdsRewardAdModule.RewardMediaType.VIDEO.getValue());\n        constants.put(\"RewardMediaTypes\", rewardMediaTypes);\n\n        Map<String, Object> splashMediaTypes = new ArrayMap<>();\n        splashMediaTypes.put(\"IMAGE\", HMSAdsSplashAdModule.SplashMediaType.IMAGE.getValue());\n        splashMediaTypes.put(\"VIDEO\", HMSAdsSplashAdModule.SplashMediaType.VIDEO.getValue());\n        constants.put(\"SplashMediaTypes\", splashMediaTypes);\n\n        Map<String, Object> callModes = new ArrayMap<>();\n        callModes.put(\"AIDL\", CallMode.AIDL.getValue());\n        callModes.put(\"SDK\", CallMode.SDK.getValue());\n        constants.put(\"CallMode\", callModes);\n\n        Map<String, Object> detailedCreativeTypes = new ArrayMap<>();\n        detailedCreativeTypes.put(\"BIG_IMG\", DetailedCreativeType.BIG_IMG);\n        detailedCreativeTypes.put(\"LONG_TEXT\", DetailedCreativeType.LONG_TEXT);\n        detailedCreativeTypes.put(\"SHORT_TEXT\", DetailedCreativeType.SHORT_TEXT);\n        detailedCreativeTypes.put(\"SINGLE_IMG\", DetailedCreativeType.SINGLE_IMG);\n        detailedCreativeTypes.put(\"SMALL_IMG\", DetailedCreativeType.SMALL_IMG);\n        detailedCreativeTypes.put(\"THREE_IMG\", DetailedCreativeType.THREE_IMG);\n        detailedCreativeTypes.put(\"VIDEO\", DetailedCreativeType.VIDEO);\n        constants.put(\"DetailedCreativeTypes\", detailedCreativeTypes);\n\n        Map<String, Integer> activateStyle = new ArrayMap<>();\n        activateStyle.put(\"BOTTOM_BANNER\", ActivateStyle.BOTTOM_BANNER);\n        activateStyle.put(\"CONFIRM_DIALOG\", ActivateStyle.CONFIRM_DIALOG);\n        constants.put(\"ActivateStyle\", activateStyle);\n\n        return constants;\n    }\n\n    @Override\n    public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviderList) {\n        hmsLogger.sendSingleEvent(\"requestConsentUpdate\");\n        WritableMap result = new WritableNativeMap();\n        if (consentStatus != null) {\n            result.putInt(\"consentStatus\", consentStatus.getValue());\n        }\n        if (adProviderList != null) {\n            result.putArray(\"adProviders\", ReactUtils.mapList(adProviderList,\n                    ReactUtils::getWritableMapFromAdProvider));\n        }\n        result.putBoolean(\"isNeedConsent\", isNeedConsent);\n        mPromise.resolve(result);\n    }\n\n    @Override\n    public void onFail(String errorDescription) {\n        hmsLogger.sendSingleEvent(\"requestConsentUpdate\", \"-1\");\n        Log.e(TAG, \"User's consent failed to update: \" + errorDescription);\n        mPromise.reject(\"USER_CONSENT_FAILED\", \"Error: \" + errorDescription);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAds\";\n    }\n\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        hmsLogger.disableLogger();\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        hmsLogger.enableLogger();\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void init(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"init\");\n        HwAds.init(reactContext);\n        hmsLogger.sendSingleEvent(\"init\");\n        mRequestOptions = HwAds.getRequestOptions();\n        promise.resolve(\"Hw Ads initialized\");\n    }\n\n    @ReactMethod\n    public void getSDKVersion(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getSDKVersion\");\n        String sdkVersion = HwAds.getSDKVersion();\n        hmsLogger.sendSingleEvent(\"getSDKVersion\");\n        promise.resolve(sdkVersion);\n    }\n\n    @ReactMethod\n    public void appInstalledNotify(Boolean notifyVal, int styleVal, Promise promise) {\n        HwAds.setAppInstalledNotify(notifyVal);\n        HwAds.setAppActivateStyle(styleVal);\n\n        boolean resNotify = HwAds.isAppInstalledNotify();\n        int resStyle = HwAds.getAppActivateStyle();\n        WritableMap obj = new WritableNativeMap();\n        obj.putInt(\"style\", resStyle);\n        obj.putBoolean(\"notify\", resNotify);\n        promise.resolve(obj);\n    }\n\n    @ReactMethod\n    public void getRequestOptions(final Promise promise) {\n        if (mRequestOptions == null) {\n            hmsLogger.startMethodExecutionTimer(\"getRequestOptions\");\n            mRequestOptions = HwAds.getRequestOptions();\n            hmsLogger.sendSingleEvent(\"getRequestOptions\");\n        }\n        promise.resolve(ReactUtils.getWritableMapFromRequestOptions(mRequestOptions));\n    }\n\n    @ReactMethod\n    public void setRequestOptions(final ReadableMap rm, final Promise promise) {\n        RequestOptions requestOptions = ReactUtils.getRequestOptionsFromReadableMap(rm);\n        hmsLogger.startMethodExecutionTimer(\"setRequestOptions\");\n        HwAds.setRequestOptions(requestOptions);\n        hmsLogger.sendSingleEvent(\"setRequestOptions\");\n        mRequestOptions = HwAds.getRequestOptions();\n        promise.resolve(ReactUtils.getWritableMapFromRequestOptions(mRequestOptions));\n    }\n\n    @ReactMethod\n    public void setConsent(final ReadableMap rm, final Promise promise) {\n        Consent consentInfo = Consent.getInstance(reactContext);\n        mPromise = promise;\n        if (ReactUtils.hasValidKey(rm, \"consentStatus\", ReadableType.Number)) {\n            consentInfo.setConsentStatus(ConsentStatus.forValue(rm.getInt(\"consentStatus\")));\n        }\n        if (ReactUtils.hasValidKey(rm, \"debugNeedConsent\", ReadableType.Number)) {\n            consentInfo.setDebugNeedConsent(DebugNeedConsent.forValue(rm.getInt(\"debugNeedConsent\")));\n        }\n        if (ReactUtils.hasValidKey(rm, \"underAgeOfPromise\", ReadableType.Number)\n                && rm.getInt(\"underAgeOfPromise\") != UnderAge.PROMISE_UNSPECIFIED) {\n            consentInfo.setUnderAgeOfPromise(rm.getInt(\"underAgeOfPromise\") == UnderAge.PROMISE_TRUE);\n        }\n        if (ReactUtils.hasValidKey(rm, \"testDeviceId\", ReadableType.String)) {\n            consentInfo.addTestDeviceId(rm.getString(\"testDeviceId\"));\n        }\n        hmsLogger.startMethodExecutionTimer(\"requestConsentUpdate\");\n        consentInfo.requestConsentUpdate(this);\n    }\n\n    @ReactMethod\n    public void setConsentString(final String consent, final Promise promise) {\n        HwAds.setConsent(consent);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void checkConsent(final Promise promise) {\n        Consent consentInfo = Consent.getInstance(reactContext);\n        mPromise = promise;\n        hmsLogger.startMethodExecutionTimer(\"requestConsentUpdate\");\n        consentInfo.requestConsentUpdate(this);\n    }\n\n    @ReactMethod\n    public void getViewInfo(final int viewId, final Promise promise) {\n        UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n        uiManager.addUIBlock(nativeViewHierarchyManager -> {\n            View view = nativeViewHierarchyManager.resolveView(viewId);\n            if (view instanceof HMSAdsBannerView) {\n                HMSAdsBannerView myView = (HMSAdsBannerView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putString(\"adId\", myView.getAdId());\n                wm.putBoolean(\"isLoading\", myView.isLoading());\n                wm.putMap(\"bannerAdSize\",\n                        ReactUtils.getWritableMapFromBannerAdSizeWithContext(myView.getBannerAdSize(), reactContext));\n                if(myView.getBiddingInfo() != null) {\n                    wm.putDouble(\"price\", (double) myView.getBiddingInfo().getPrice());\n                    wm.putString(\"cur\", myView.getBiddingInfo().getCur());\n                    wm.putString(\"nurl\", myView.getBiddingInfo().getNurl());\n                    wm.putString(\"lurl\", myView.getBiddingInfo().getNurl());\n                }\n                promise.resolve(wm);\n            } else if (view instanceof HMSAdsNativeView) {\n                HMSAdsNativeView myView = (HMSAdsNativeView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putMap(\"nativeAd\", ReactUtils.getWritableMapFromNativeAd(myView.mNativeAd));\n                wm.putMap(\"nativeAdConfiguration\",\n                        ReactUtils.getWritableMapFromNativeAdConfiguration(myView.mNativeAdConfiguration));\n                wm.putMap(\"nativeAdLoader\", ReactUtils.getWritableMapFromNativeAdLoader(myView.mNativeAdLoader));\n                promise.resolve(wm);\n            } else if (view instanceof HMSAdsInstreamView) {\n                HMSAdsInstreamView myView = (HMSAdsInstreamView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putString(\"adId\", myView.mAdId);\n                wm.putInt(\"maxCount\", myView.mMaxCount);\n                wm.putInt(\"totalDuration\", myView.mTotalDuration);\n                wm.putBoolean(\"isPlaying\", myView.isPlaying());\n                wm.putBoolean(\"isLoading\", myView.mInstreamAdLoader != null && myView.mInstreamAdLoader.isLoading());\n                wm.putArray(\"instreamAds\", ReactUtils.mapList(myView.mInstreamAds,\n                        ReactUtils::getWritableMapFromInstreamAd));\n                promise.resolve(wm);\n            } else {\n                promise.reject(\"NOT_AD_VIEW\", \"Unexpected view type\");\n            }\n        });\n    }\n\n    public static String getErrorMessage(int errorCode) {\n        switch (errorCode) {\n            case AdParam.ErrorCode.INNER:\n                return \"Internal error, an invalid response was received from the ad server.\";\n            case AdParam.ErrorCode.INVALID_REQUEST:\n                return \"Invalid ad request due to unspecified ad slot ID or invalid banner ad size.\";\n            case AdParam.ErrorCode.NETWORK_ERROR:\n                return \"The ad request was unsuccessful due to a network connection error.\";\n            case AdParam.ErrorCode.NO_AD:\n                return \"The ad request was successful, but no ad is returned due to a lack of ad resources.\";\n            case AdParam.ErrorCode.AD_LOADING:\n                return \"The ad request was successful, and ad was loading.\";\n            case AdParam.ErrorCode.LOW_API:\n                return \"The ad request was successful, but api version is not supported by the HUAWEI Ads SDK.\";\n            case AdParam.ErrorCode.BANNER_AD_EXPIRE:\n                return \"The ad request was successful, but banner ad was expired.\";\n            case AdParam.ErrorCode.BANNER_AD_CANCEL:\n                return \"The ad request was successful, but banner ad task removed.\";\n        }\n        return \"Unknown error\";\n    }\n\n\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsNativeView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.GradientDrawable;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\n\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.VideoOperator;\nimport com.huawei.hms.ads.nativead.MediaView;\nimport com.huawei.hms.ads.nativead.NativeAd;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.ads.nativead.NativeAdLoader;\nimport com.huawei.hms.ads.nativead.NativeView;\n\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.rn.ads.utils.ResourceUtils;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HMSAdsNativeView extends LinearLayout {\n    private static final String TAG = HMSAdsNativeView.class.getSimpleName();\n\n    protected NativeAd mNativeAd;\n\n    protected NativeAdConfiguration mNativeAdConfiguration;\n\n    protected NativeAdLoader mNativeAdLoader;\n    \n    private ReactContext mReactContext;\n\n    private NativeView mNativeView;\n\n    private MediaView mMediaView;\n\n    private TextView mTitleView;\n\n    private TextView mDescriptionView;\n\n    private TextView mAdSourceView;\n\n    private TextView mFlagView;\n\n    private Button mCallToActionView;\n\n    private NativeAdConfiguration.Builder mNativeAdConfigurationBuilder;\n\n    private VideoConfiguration.Builder mVideoConfigurationBuilder;\n\n    private VideoConfiguration mVideoConfiguration;\n\n    private NativeAd.NativeAdLoadedListener mNativeAdLoadedListener;\n\n    private AdListener mAdListener;\n\n    private ReadableMap mAdParamReadableMap;\n\n    private String mAdId;\n\n    private NativeMediaType mMediaType = NativeMediaType.VIDEO;\n\n    private int mLayoutId = R.layout.native_video_template;\n\n    private NativeAdViewOptions mNativeAdViewOptions = new NativeAdViewOptions().build(null);\n\n    private final Runnable measureAndLayout = () -> {\n        measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n        layout(getLeft(), getTop(), getRight(), getBottom());\n    };\n\n    public enum NativeMediaType {\n        IMAGE_LARGE(\"image_large\"),\n        IMAGE_SMALL(\"image_small\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        NativeMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static NativeMediaType forValue(String s) {\n            switch (s) {\n                case \"image_large\":\n                    return IMAGE_LARGE;\n                case \"image_small\":\n                    return IMAGE_SMALL;\n                default:\n                    return VIDEO;\n            }\n        }\n    }\n\n    public HMSAdsNativeView(Context context) {\n        super(context);\n        if (context instanceof ReactContext) {\n            mReactContext = (ReactContext) context;\n        }\n        setupInitialConfigurations();\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(measureAndLayout);\n    }\n\n    private void setupInitialConfigurations() {\n        mAdListener = new AdListener() {\n            @Override\n            public void onAdFailed(int errorCode) {\n                sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Manager.Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Manager.Event.AD_IMPRESSION, null);\n            }\n        };\n\n        mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        mNativeAdConfigurationBuilder = new NativeAdConfiguration.Builder().setVideoConfiguration(mVideoConfiguration);\n        mNativeAdConfiguration = mNativeAdConfigurationBuilder.build();\n\n        mNativeAdLoadedListener = nativeAd -> {\n            // Call this method when an ad is successfully loaded.\n            sendEvent(Manager.Event.NATIVE_AD_LOADED, null);\n            nativeAd.setVideoConfiguration(mVideoConfiguration);\n            // Display native ad.\n            showNativeAd(nativeAd);\n            nativeAd.setDislikeAdListener(() -> {\n                // Call this method when an ad is closed.\n                sendEvent(Manager.Event.AD_DISLIKED, null);\n            });\n        };\n\n\n    }\n\n    void loadAd() {\n        mNativeAdLoader = new NativeAdLoader.Builder(mReactContext, mAdId).setNativeAdLoadedListener(\n            mNativeAdLoadedListener).setAdListener(mAdListener).setNativeAdOptions(mNativeAdConfiguration).build();\n        mNativeAdLoader.loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    void setVideoConfiguration(ReadableMap videoConfiguration) {\n        if (videoConfiguration == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(videoConfiguration.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                videoConfiguration.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                videoConfiguration.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(videoConfiguration.getBoolean(\"startMuted\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"autoPlayNetWork\", ReadableType.Number)){\n            mVideoConfigurationBuilder.setAutoPlayNetwork(videoConfiguration.getInt(\"autoPlayNetWork\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n    }\n\n    void setNativeAdConfiguration(ReadableMap nativeAdConfiguration) {\n        if (nativeAdConfiguration != null) {\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"choicesPosition\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setChoicesPosition(nativeAdConfiguration.getInt(\"choicesPosition\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"mediaDirection\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setMediaDirection(nativeAdConfiguration.getInt(\"mediaDirection\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"mediaAspect\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setMediaAspect(nativeAdConfiguration.getInt(\"mediaAspect\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"requestCustomDislikeThisAd\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setRequestCustomDislikeThisAd(\n                        nativeAdConfiguration.getBoolean(\"requestCustomDislikeThisAd\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"requestMultiImages\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setRequestMultiImages(\n                        nativeAdConfiguration.getBoolean(\"requestMultiImages\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"returnUrlsForImages\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setReturnUrlsForImages(\n                        nativeAdConfiguration.getBoolean(\"returnUrlsForImages\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"adSize\", ReadableType.Map)) {\n                mNativeAdConfigurationBuilder.setAdSize(\n                    ReactUtils.getAdSizeFromReadableMap(nativeAdConfiguration.getMap(\"adSize\")));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"videoConfiguration\", ReadableType.Map)) {\n                setVideoConfiguration(nativeAdConfiguration.getMap(\"videoConfiguration\"));\n                mNativeAdConfigurationBuilder.setVideoConfiguration(mVideoConfiguration);\n            }\n        }\n        mNativeAdConfiguration = mNativeAdConfigurationBuilder.build();\n    }\n\n    private VideoOperator.VideoLifecycleListener videoLifecycleListener = new VideoOperator.VideoLifecycleListener() {\n        @Override\n        public void onVideoStart() {\n            sendEvent(Manager.Event.AD_VIDEO_START, null);\n        }\n\n        @Override\n        public void onVideoPlay() {\n            sendEvent(Manager.Event.AD_VIDEO_PLAY, null);\n        }\n\n        @Override\n        public void onVideoEnd() {\n            sendEvent(Manager.Event.AD_VIDEO_END, null);\n        }\n\n        @Override\n        public void onVideoPause() {\n            sendEvent(Manager.Event.AD_VIDEO_PAUSE, null);\n        }\n\n        @Override\n        public void onVideoMute(boolean isMuted) {\n            WritableNativeMap wm = new WritableNativeMap();\n            wm.putBoolean(\"isMuted\", isMuted);\n            sendEvent(Manager.Event.AD_VIDEO_MUTE, wm);\n        }\n    };\n\n    public static String getCreativeType(int code) {\n        switch (code) {\n            case 1:\n                return \"Text\";\n            case 3:\n                return \"Large image with text\";\n            case 6:\n                return \"Video with text\";\n            case 7:\n                return \"Small image with text\";\n            case 8:\n                return \"Three small images with text\";\n            default:\n                return \"Large image\";\n        }\n    }\n\n    private void showNativeAd(NativeAd nativeAd) {\n        // Destroy the original native ad.\n        if (null != mNativeAd) {\n            mNativeAd.destroy();\n        }\n        mNativeAd = nativeAd;\n\n        LayoutInflater layoutInflater = LayoutInflater.from(mReactContext);\n\n        View inflated = layoutInflater.inflate(mLayoutId, this, false);\n        if (inflated instanceof NativeView) {\n            // Obtain NativeView.\n            mNativeView = (NativeView) inflated;\n            // Register and populate a native ad material view.\n            initNativeAdView();\n\n            this.removeAllViews();\n            this.addView(mNativeView);\n            this.requestLayout();\n        }\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    private void initNativeAdView() {\n        mMediaView = mNativeView.findViewById(R.id.ad_media);\n        mNativeView.setMediaView(mMediaView);\n\n        mTitleView = mNativeView.findViewById(R.id.ad_title);\n        mNativeView.setTitleView(mTitleView);\n\n        mAdSourceView = mNativeView.findViewById(R.id.ad_source);\n        mNativeView.setAdSourceView(mAdSourceView);\n\n        mCallToActionView = mNativeView.findViewById(R.id.ad_call_to_action);\n        mNativeView.setCallToActionView(mCallToActionView);\n\n        mDescriptionView = mNativeView.findViewById(R.id.ad_description);\n        mNativeView.setDescriptionView(mDescriptionView);\n\n        mFlagView = mNativeView.findViewById(R.id.ad_flag);\n\n        if (mNativeAd.getTitle() != null) {\n            mTitleView.setText(mNativeAd.getTitle());\n        }\n        if (mNativeAd.getMediaContent() != null) {\n            mMediaView.setMediaContent(mNativeAd.getMediaContent());\n        }\n\n        if (null != mNativeAd.getAdSource()) {\n            mAdSourceView.setText(mNativeAd.getAdSource());\n            mAdSourceView.setVisibility(View.VISIBLE);\n        } else {\n            mAdSourceView.setVisibility(View.INVISIBLE);\n        }\n\n        if (null != mNativeAd.getDescription()) {\n            mDescriptionView.setText(mNativeAd.getDescription());\n            mDescriptionView.setVisibility(View.VISIBLE);\n        } else {\n            mDescriptionView.setVisibility(View.INVISIBLE);\n        }\n\n        if (null != mNativeAd.getCallToAction()) {\n            mCallToActionView.setText(mNativeAd.getCallToAction());\n            mCallToActionView.setVisibility(View.VISIBLE);\n        } else {\n            mCallToActionView.setVisibility(View.INVISIBLE);\n        }\n\n        // Obtain a video controller.\n        VideoOperator videoOperator = mNativeAd.getVideoOperator();\n\n        // Check whether a native ad contains video materials.\n        if (videoOperator.hasVideo()) {\n            // Add a video lifecycle event listener.\n            videoOperator.setVideoLifecycleListener(videoLifecycleListener);\n        }\n\n        updateViewOptions();\n        // Register a native ad object.\n        mNativeView.setNativeAd(mNativeAd);\n    }\n\n    void setViewOptions(ReadableMap rm) {\n        if (rm != null) {\n            mNativeAdViewOptions = new NativeAdViewOptions().build(rm);\n            updateViewOptions();\n        }\n    }\n\n    Drawable toRoundedColor(int color, Float radius) {\n        GradientDrawable drawable = new GradientDrawable();\n        drawable.setShape(GradientDrawable.RECTANGLE);\n        drawable.setCornerRadius(radius * Resources.getSystem().getDisplayMetrics().density);\n        drawable.setColor(color);\n        return drawable;\n    }\n\n    void updateViewOptions() {\n        if (mMediaView != null) {\n            mMediaView.setVisibility(mNativeAdViewOptions.showMediaContent ? View.VISIBLE : View.GONE);\n            mMediaView.setImageScaleType(mNativeAdViewOptions.mediaImageScaleType);\n        }\n\n        if (mFlagView != null) {\n            int flagBackgroundColor = (int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.BACKGROUND_COLOR);\n            if (flagBackgroundColor != 0) {\n                mFlagView.setBackground(toRoundedColor(flagBackgroundColor, 20f));\n            }\n            mFlagView.setTextSize((float) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.FONT_SIZE));\n            mFlagView.setTextColor((int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.COLOR));\n            mFlagView.setVisibility((int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mTitleView != null) {\n            mTitleView.setTextSize((float) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.FONT_SIZE));\n            mTitleView.setTextColor((int) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.COLOR));\n            mTitleView.setVisibility((int) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mAdSourceView != null) {\n            mAdSourceView.setTextSize((float) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.FONT_SIZE));\n            mAdSourceView.setTextColor((int) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.COLOR));\n            mAdSourceView.setVisibility((int) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mDescriptionView != null) {\n            mDescriptionView.setTextSize((float) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.FONT_SIZE));\n            mDescriptionView.setTextColor((int) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.COLOR));\n            mDescriptionView.setVisibility((int) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mCallToActionView != null) {\n            int callBackgroundColor = (int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.BACKGROUND_COLOR);\n            if (callBackgroundColor != 0) {\n                mCallToActionView.setBackground(toRoundedColor(callBackgroundColor, 20f));\n            }\n            mCallToActionView.setTextSize((float) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.FONT_SIZE));\n            mCallToActionView.setTextColor((int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.COLOR));\n            mCallToActionView.setVisibility((int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.VISIBILITY));\n        }\n    }\n\n    private int getLayoutIdFromMediaType(NativeMediaType mediaType) {\n        if (NativeMediaType.IMAGE_SMALL == mediaType) {\n            return ResourceUtils.getLayoutResourceIdFromContext(mReactContext, \"native_small_template\");\n        }\n        return ResourceUtils.getLayoutResourceIdFromContext(mReactContext, \"native_video_template\");\n    }\n\n    public void setDisplayForm(ReadableMap displayForm) {\n        if (ReactUtils.hasValidKey(displayForm, \"adId\", ReadableType.String)) {\n            mAdId = displayForm.getString(\"adId\");\n        }\n        if (ReactUtils.hasValidKey(displayForm, \"mediaType\", ReadableType.String)) {\n            mMediaType = NativeMediaType.forValue(displayForm.getString(\"mediaType\"));\n            mLayoutId = getLayoutIdFromMediaType(mMediaType);\n        }\n    }\n\n    public void dislikeAd(String description) {\n        if (mNativeAd != null) {\n            mNativeAd.dislikeAd(() -> description);\n        }\n    }\n\n    public void destroy() {\n        mNativeView.destroy();\n    }\n\n    public void gotoWhyThisAdPage() {\n        mNativeView.gotoWhyThisAdPage();\n    }\n    \n    public void setAllowCustomClick() {\n        if (mNativeAd != null) {\n            mNativeAd.setAllowCustomClick();\n        }\n    }\n\n    public void showAdvertiserInfoDialog(boolean showWhyThisAd) {\n        mNativeView.showAdvertiserInfoDialog(mNativeView, showWhyThisAd);\n    }\n\n    public void hideAdvertiserInfoDialog() {\n        mNativeView.hideAdvertiserInfoDialog();\n    }\n    public void showPrivacyPolicy() {\n        if(mNativeAd!=null) {\n            mNativeAd.getAppInfo().showPrivacyPolicy(mReactContext);\n        }\n    }\n    public void showPermissionPage() {\n        if(mNativeAd!=null) {\n            mNativeAd.getAppInfo().showPermissionPage(mReactContext);\n        }\n    }\n    public void showAppDetailPage() {\n        if(mNativeAd!=null) {\n            mNativeAd.showAppDetailPage(mReactContext);\n        }\n    }\n\n    public void recordClickEvent() {\n        if (mNativeAd != null) {\n            mNativeAd.recordClickEvent();\n        }\n    }\n\n    public void recordImpressionEvent(ReadableMap impressionEvent) {\n        if (mNativeAd != null) {\n            mNativeAd.recordImpressionEvent(ReactUtils.getBundleFromReadableMap(impressionEvent));\n        }\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mAdParamReadableMap = adParamReadableMap;\n    }\n\n    interface AdTextStyle {\n        String VISIBILITY = \"visibility\";\n        String FONT_SIZE = \"fontSize\";\n        String COLOR = \"color\";\n        String BACKGROUND_COLOR = \"backgroundColor\";\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsNativeView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            NATIVE_AD_LOADED(\"onNativeAdLoaded\"),\n            AD_DISLIKED(\"onAdDisliked\"),\n            AD_FAILED(\"onAdFailed\"),\n            AD_CLICKED(\"onAdClicked\"),\n            AD_IMPRESSION(\"onAdImpression\"),\n            AD_VIDEO_START(\"onVideoStart\"),\n            AD_VIDEO_PLAY(\"onVideoPlay\"),\n            AD_VIDEO_END(\"onVideoEnd\"),\n            AD_VIDEO_PAUSE(\"onVideoPause\"),\n            AD_VIDEO_MUTE(\"onVideoMute\");\n\n            private String nativeEventName;\n\n            Event(String nativeEventName) {\n                this.nativeEventName = nativeEventName;\n            }\n\n            public String getName() {\n                return nativeEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            DISLIKE_AD(\"dislikeAd\"),\n            DESTROY(\"destroy\"),\n            GO_TO_WHY(\"gotoWhyThisAdPage\"),\n            ALLOW_CUSTOM_CLICK(\"setAllowCustomClick\"),\n            RECORD_CLICK(\"recordClickEvent\"),\n            RECORD_IMPRESSION(\"recordImpressionEvent\"),\n            SHOW_ADVERTISER_INFO_DIALOG(\"showAdvertiserInfoDialog\"),\n            HIDE_ADVERTISER_INFO_DIALOG(\"hideAdvertiserInfoDialog\"),\n            SHOW_PRIVACY_POLICY(\"showPrivacyPolicy\"),\n            SHOW_PERMISSION_PAGE(\"showPermissionPage\"),\n            SHOW_APP_DETAIL_PAGE(\"showAppDetailPage\");\n\n            private String nativeCommandName;\n\n            Command(String nativeCommandName) {\n                this.nativeCommandName = nativeCommandName;\n            }\n\n            public String getName() {\n                return nativeCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsNativeView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsNativeView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"nativeView.create\");\n            return new HMSAdsNativeView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsNativeView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"nativeView.loadAd\");\n                        break;\n                    case DISLIKE_AD:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.dislikeAd\");\n                        root.dislikeAd(args.getString(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.dislikeAd\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"nativeView.destroy\");\n                        break;\n                    case GO_TO_WHY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.gotoWhyThisAdPage\");\n                        root.gotoWhyThisAdPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.gotoWhyThisAdPage\");\n                                                break;            \n                    case ALLOW_CUSTOM_CLICK:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.setAllowCustomClick\");\n                        root.setAllowCustomClick();\n                        hmsLogger.sendSingleEvent(\"nativeView.setAllowCustomClick\");\n                        break;\n                    case RECORD_CLICK:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.recordClickEvent\");\n                        root.recordClickEvent();\n                        hmsLogger.sendSingleEvent(\"nativeView.recordClickEvent\");\n                        break;\n                    case RECORD_IMPRESSION:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.recordImpressionEvent\");\n                        root.recordImpressionEvent(args.getMap(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.recordImpressionEvent\");\n                        break;\n                    case SHOW_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showAdvertiserInfoDialog\");\n                        root.showAdvertiserInfoDialog(args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.showAdvertiserInfoDialog\");\n                        break;\n                    case HIDE_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.hideAdvertiserInfoDialog\");\n                        root.hideAdvertiserInfoDialog();\n                        hmsLogger.sendSingleEvent(\"nativeView.hideAdvertiserInfoDialog\");\n                        break;\n                    case SHOW_PRIVACY_POLICY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showPrivacyPolicy\");\n                        root.showPrivacyPolicy();\n                        hmsLogger.sendSingleEvent(\"nativeView.showPrivacyPolicy\");\n                        break;\n                    case SHOW_PERMISSION_PAGE:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showPermissionPage\");\n                        root.showPermissionPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.showPermissionPage\");\n                        break;\n                    case SHOW_APP_DETAIL_PAGE:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showAppDetailPage\");\n                        root.showAppDetailPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.showAppDetailPage\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsNativeView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"nativeView.setAdParam\");\n            view.setAdParam(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"displayForm\")\n        public void setDisplayForm(final HMSAdsNativeView view, final ReadableMap displayForm) {\n            hmsLogger.sendSingleEvent(\"nativeView.setDisplayForm\");\n            view.setDisplayForm(displayForm);\n        }\n\n        @ReactProp(name = \"nativeConfig\")\n        public void setNativeConfig(final HMSAdsNativeView view, final ReadableMap nativeAdConfiguration) {\n            hmsLogger.sendSingleEvent(\"nativeView.setNativeConfig\");\n            view.setNativeAdConfiguration(nativeAdConfiguration);\n        }\n\n        @ReactProp(name = \"viewOptions\")\n        public void setViewOptions(final HMSAdsNativeView view, final ReadableMap viewOptions) {\n            hmsLogger.sendSingleEvent(\"nativeView.setViewOptions\");\n            view.setViewOptions(viewOptions);\n        }\n    }\n\n    public static class NativeAdViewOptions {\n        boolean showMediaContent = true;\n\n        ImageView.ScaleType mediaImageScaleType = ImageView.ScaleType.FIT_CENTER;\n\n        Map<String, Object> adSourceTextStyle = createAdTextStyle(View.VISIBLE, 14f, Color.BLACK);\n\n        Map<String, Object> adFlagTextStyle = createAdTextStyle(View.VISIBLE, 12f, Color.WHITE,\n            Color.parseColor(\"#FFCC66\"));\n\n        Map<String, Object> titleTextStyle = createAdTextStyle(View.VISIBLE, 16f, Color.BLACK);\n\n        Map<String, Object> descriptionTextStyle = createAdTextStyle(View.INVISIBLE, 12f, Color.GRAY);\n\n        Map<String, Object> callToActionStyle = createAdTextStyle(View.VISIBLE, 15f, Color.WHITE,\n            Color.parseColor(\"#4CBE99\"));\n\n        public NativeAdViewOptions build(ReadableMap rm) {\n            NativeAdViewOptions options = new NativeAdViewOptions();\n            if (rm != null) {\n                if (ReactUtils.hasValidKey(rm, \"showMediaContent\", ReadableType.Boolean)) {\n                    showMediaContent = rm.getBoolean(\"showMediaContent\");\n                }\n                if (ReactUtils.hasValidKey(rm, \"mediaImageScaleType\", ReadableType.String)) {\n                    mediaImageScaleType = ImageView.ScaleType.valueOf(rm.getString(\"mediaImageScaleType\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"adFlagTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.adFlagTextStyle, rm.getMap(\"adFlagTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"adSourceTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.adSourceTextStyle, rm.getMap(\"adSourceTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"titleTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.titleTextStyle, rm.getMap(\"titleTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"descriptionTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.descriptionTextStyle, rm.getMap(\"descriptionTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"callToActionStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.callToActionStyle, rm.getMap(\"callToActionStyle\"));\n                }\n            }\n            return options;\n        }\n\n        Map<String, Object> createAdTextStyle(int visibility, float fontSize, int color) {\n            Map<String, Object> textStyle = new HashMap<>();\n            textStyle.put(AdTextStyle.VISIBILITY, visibility);\n            textStyle.put(AdTextStyle.FONT_SIZE, fontSize);\n            textStyle.put(AdTextStyle.COLOR, color);\n            return textStyle;\n        }\n\n        Map<String, Object> createAdTextStyle(int visibility, float fontSize, int color, int backgroundColor) {\n            Map<String, Object> textStyle = new HashMap<>();\n            textStyle.put(AdTextStyle.VISIBILITY, visibility);\n            textStyle.put(AdTextStyle.FONT_SIZE, fontSize);\n            textStyle.put(AdTextStyle.COLOR, color);\n            textStyle.put(AdTextStyle.BACKGROUND_COLOR, backgroundColor);\n            return textStyle;\n        }\n\n        void buildAdTextStyle(Map<String, Object> adTextStyle, ReadableMap rm) {\n            if (rm != null) {\n                if (ReactUtils.hasValidKey(rm, \"fontSize\", ReadableType.Number)) {\n                    adTextStyle.put(AdTextStyle.FONT_SIZE, (float) rm.getDouble(\"fontSize\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"color\", ReadableType.String)) {\n                    adTextStyle.put(AdTextStyle.COLOR, Color.parseColor(rm.getString(\"color\")));\n                }\n                if (ReactUtils.hasValidKey(rm, \"backgroundColor\", ReadableType.String)) {\n                    adTextStyle.put(AdTextStyle.BACKGROUND_COLOR, Color.parseColor(rm.getString(\"backgroundColor\")));\n                }\n                if (ReactUtils.hasValidKey(rm, \"visibility\", ReadableType.Boolean)) {\n                    adTextStyle.put(AdTextStyle.VISIBILITY, rm.getBoolean(\"visibility\") ? View.VISIBLE : View.GONE);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsOaidModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport com.huawei.hms.ads.identifier.AdIdVerifyException;\nimport com.huawei.hms.ads.identifier.AdvertisingIdClient;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.io.IOException;\n\nimport static com.huawei.hms.rn.ads.HMSAdsModule.CallMode;\n\npublic class HMSAdsOaidModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsOaidModule.class.getSimpleName();\n\n    private final ReactApplicationContext reactContext;\n\n    private HMSLogger hmsLogger;\n\n    HMSAdsOaidModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsOaid\";\n    }\n\n    @ReactMethod\n    public void getAdvertisingIdInfo(final String callMode, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (CallMode.forValue(callMode) == CallMode.AIDL) {\n                promise.reject(\"AIDL_SERVICE_INVALID\", \"Aidl service is disabled for HMSOaid module.\");\n                return;\n            }\n            try {\n                hmsLogger.startMethodExecutionTimer(\"getAdvertisingIdInfo\");\n                AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(reactContext);\n                hmsLogger.sendSingleEvent(\"getAdvertisingIdInfo\");\n                promise.resolve(ReactUtils.getWritableMapFromAdvertisingIdClientInfo(info));\n            } catch (IOException e) {\n                hmsLogger.sendSingleEvent(\"getAdvertisingIdInfo\", \"-1\");\n                Log.e(TAG, \"getAdvertisingIdInfo IOException\");\n                promise.reject(\"GET_AD_ID_INFO_FAILED\", \"getAdvertisingIdInfo IOException\");\n            }\n        });\n    }\n\n    @ReactMethod\n    public void verifyAdvertisingId(final ReadableMap advertisingInfo, final Promise promise) {\n        try {\n            String id = advertisingInfo.getString(\"id\");\n            boolean isLimitAdTrackingEnabled = advertisingInfo.getBoolean(\"isLimitAdTrackingEnabled\");\n            hmsLogger.startMethodExecutionTimer(\"verifyAdvertisingId\");\n            boolean isVerified = AdvertisingIdClient.verifyAdId(reactContext, id, isLimitAdTrackingEnabled);\n            hmsLogger.sendSingleEvent(\"verifyAdvertisingId\");\n            promise.resolve(isVerified);\n        } catch (AdIdVerifyException e) {\n            Log.e(TAG, \"verifyAdvertisingId Exception: \" + e.getMessage());\n            promise.reject(\"VERIFY_AD_ID_FAILED\", \"Exception: \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPackage.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\npublic class HMSAdsPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSAdsModule(reactContext),\n                new HMSAdsInstallReferrerModule(reactContext),\n                new HMSAdsOaidModule(reactContext),\n                new HMSAdsInterstitialAdModule(reactContext),\n                new HMSAdsSplashAdModule(reactContext),\n                new HMSAdsRewardAdModule(reactContext),\n                new HMSAdsVastModule(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSAdsBannerView.Manager(reactContext),\n                new HMSAdsInstreamView.Manager(reactContext),\n                new HMSAdsNativeView.Manager(reactContext),\n                new HMSAdsVastView.Manager(reactContext));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsRewardAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.util.Log;\nimport android.os.Handler;\nimport android.os.Looper;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAdListener;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.ads.reward.RewardAd;\nimport com.huawei.hms.ads.reward.RewardAdLoadListener;\nimport com.huawei.hms.ads.reward.RewardAdStatusListener;\nimport com.huawei.hms.ads.reward.RewardVerifyConfig;\n\nimport static com.huawei.hms.rn.ads.utils.ReactUtils.hasValidKey;\n\npublic class HMSAdsRewardAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsRewardAdModule.class.getSimpleName();\n\n    private ReactApplicationContext mReactContext;\n\n    private HMSLogger hmsLogger;\n\n    private RewardAd mRewardAd;\n\n    private ReadableMap mAdParamReadableMap;\n\n    private RewardVerifyConfig mRewardVerifyConfig;\n\n    private boolean mLoadWithAdId;\n\n    private String mAdId;\n\n    private String mUserId;\n\n    private String mData;\n\n    private RewardAdLoadListener mAdLoadListener;\n\n    private RewardAdStatusListener mAdStatusListener;\n\n    private RewardAdListener mAdListener;\n    \n    private VideoConfiguration mVideoConfiguration;\n\n    public enum RewardMediaType {\n        VIDEO(\"video\");\n\n        private String value;\n\n        RewardMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_LOADED(\"adLoaded\"),\n        AD_FAILED_TO_LOAD(\"adFailedToLoad\"),\n        AD_FAILED_TO_SHOW(\"adFailedToShow\"),\n        AD_OPENED(\"adOpened\"),\n        AD_CLOSED(\"adClosed\"),\n        AD_REWARDED(\"adRewarded\");\n\n        private String rewardEventName;\n\n        Event(String rewardEventName) {\n            this.rewardEventName = rewardEventName;\n        }\n\n        public String getName() {\n            return rewardEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsRewardAd\";\n    }\n\n    private void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    HMSAdsRewardAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mAdLoadListener = new RewardAdLoadListener() {\n            @Override\n            public void onRewardAdFailedToLoad(int errorCode) {\n                hmsLogger.sendSingleEvent(\"rewardAd.loadAd\", String.valueOf(errorCode));\n                sendEvent(Event.AD_FAILED_TO_LOAD, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardedLoaded() {\n                hmsLogger.sendSingleEvent(\"rewardAd.loadAd\");\n                sendEvent(Event.AD_LOADED, ReactUtils.getWritableMapFromRewardAd(mRewardAd));\n            }\n        };\n        mAdStatusListener = new RewardAdStatusListener() {\n            @Override\n            public void onRewardAdClosed() {\n                sendEvent(Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onRewardAdFailedToShow(int errorCode) {\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", String.valueOf(errorCode));\n                sendEvent(Event.AD_FAILED_TO_SHOW, getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                hmsLogger.sendSingleEvent(\"rewardAd.show\");\n                sendEvent(Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onRewarded(Reward reward) {\n                sendEvent(Event.AD_REWARDED, ReactUtils.getWritableMapFromReward(reward));\n            }\n        };\n        mAdListener = new RewardAdListener() {\n            @Override\n            public void onRewardAdFailedToLoad(int i) {\n                mAdLoadListener.onRewardAdFailedToLoad(i);\n            }\n\n            @Override\n            public void onRewardAdLoaded() {\n                mAdLoadListener.onRewardedLoaded();\n            }\n\n            @Override\n            public void onRewardAdClosed() {\n                mAdStatusListener.onRewardAdClosed();\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                mAdStatusListener.onRewardAdOpened();\n            }\n\n            @Override\n            public void onRewarded(Reward reward) {\n                mAdStatusListener.onRewarded(reward);\n            }\n\n            @Override\n            public void onRewardAdStarted() {\n            }\n\n            @Override\n            public void onRewardAdLeftApp() {\n            }\n\n            @Override\n            public void onRewardAdCompleted() {\n            }\n        };\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    private WritableMap getWritableMapFromErrorCode(int errorCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"errorCode\", errorCode);\n        wm.putString(\"errorMessage\", getErrorMessage(errorCode));\n        return wm;\n    }\n\n    @ReactMethod\n    public void setAdParam(ReadableMap rm, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setAdParam\");\n        mAdParamReadableMap = rm;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadWithAdId(boolean loadWithAdId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.loadWithAdId\");\n        mLoadWithAdId = loadWithAdId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdId(String adId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setAdId\");\n        mAdId = adId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setData(String data, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setData\");\n        mData = data;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setUserId(String userId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setUserId\");\n        mUserId = userId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void pause(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.pause\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.pause\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.pause();\n        hmsLogger.sendSingleEvent(\"rewardAd.pause\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void resume(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.resume\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.resume\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.resume();\n        hmsLogger.sendSingleEvent(\"rewardAd.resume\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.destroy\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.destroy\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.destroy();\n        hmsLogger.sendSingleEvent(\"rewardAd.destroy\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setVerifyConfig(final ReadableMap config, final Promise promise) {\n        RewardVerifyConfig.Builder builder = new RewardVerifyConfig.Builder();\n        if (hasValidKey(config, \"userId\", ReadableType.String)) {\n            builder.setUserId(config.getString(\"userId\"));\n        }\n        if (hasValidKey(config, \"data\", ReadableType.String)) {\n            builder.setData(config.getString(\"data\"));\n        }\n        mRewardVerifyConfig = builder.build();\n        hmsLogger.sendSingleEvent(\"rewardAd.setVerifyConfig\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadAd(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.loadAd\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mRewardAd != null) {\n                mRewardAd.destroy();\n            }\n            mRewardAd = new RewardAd(mReactContext, mAdId);\n\n            if (mUserId != null) {\n                mRewardAd.setUserId(mUserId);\n            }\n            if (mData != null) {\n                mRewardAd.setData(mData);\n            }\n            if (mRewardVerifyConfig != null) {\n                mRewardAd.setRewardVerifyConfig(mRewardVerifyConfig);\n            }\n            if(mVideoConfiguration != null) {\n                mRewardAd.setVideoConfiguration(mVideoConfiguration);\n            }\n\n            AdParam adParam = ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap);\n            if (mLoadWithAdId) {\n                mRewardAd.setRewardAdListener(mAdListener);\n                mRewardAd.loadAd(mAdId, adParam);\n            } else {\n                mRewardAd.loadAd(adParam, mAdLoadListener);\n            }\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.show\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mRewardAd == null) {\n                promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", \"-1\");\n                return;\n            }\n            if (!mRewardAd.isLoaded()) {\n                promise.reject(\"AD_NOT_LOADED\", \"Reward ad is not loaded\");\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", \"-1\");\n                return;\n            }\n            if (mLoadWithAdId) {\n                mRewardAd.show(mReactContext.getCurrentActivity());\n            } else {\n                mRewardAd.show(mReactContext.getCurrentActivity(), mAdStatusListener);\n            }\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.isLoaded\");\n        promise.resolve(mRewardAd != null && mRewardAd.isLoaded());\n        hmsLogger.sendSingleEvent(\"rewardAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void setVideoConfiguration(final ReadableMap rm, final Promise promise) {\n        VideoConfiguration.Builder mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        if (rm == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(rm, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(rm.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                rm.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                rm.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(rm.getBoolean(\"startMuted\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        promise.resolve(null);\n    }\n\n    static String getErrorMessage(int errorCode) {\n        switch (errorCode) {\n            case RewardAdStatusListener.ErrorCode.INTERNAL:\n                return \"Internal error.\";\n            case RewardAdStatusListener.ErrorCode.REUSED:\n                return \"The rewarded ad has been displayed.\";\n            case RewardAdStatusListener.ErrorCode.NOT_LOADED:\n                return \"The ad has not been loaded.\";\n            case RewardAdStatusListener.ErrorCode.BACKGROUND:\n                return \"An activity of playing a rewarded ad is performed in the background.\";\n        }\n        return \"Unknown error\";\n    }\n}"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsSplashActivity.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport android.annotation.SuppressLint;\n\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Message;\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport com.huawei.hms.ads.AudioFocusType;\nimport com.huawei.hms.ads.splash.SplashAdDisplayListener;\nimport com.huawei.hms.ads.splash.SplashView;\n\nimport com.huawei.hms.rn.ads.utils.CommonUtils;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport static com.huawei.hms.rn.ads.HMSAdsSplashAdModule.Event;\nimport static com.huawei.hms.rn.ads.HMSAdsSplashAdModule.sendEvent;\n\npublic class HMSAdsSplashActivity extends ReactActivity {\n    private static final String TAG = HMSAdsSplashActivity.class.getSimpleName();\n\n    private static final int AD_TIMEOUT = 5000;\n\n    private static final int MSG_AD_TIMEOUT = 1001;\n\n    @SuppressLint(\"StaticFieldLeak\")\n    private static SplashView splashView;\n\n    private String mAdId;\n\n    private String mLogoText;\n\n    private String mCopyrightText;\n\n    private int mOrientation;\n\n    private int mSloganResId;\n\n    private int mWideSloganResId;\n\n    private int mLogoResId;\n\n    private int mMediaNameResId;\n\n    private int mAudioFocusType;\n\n    private Bundle mAdParamBundle;\n\n    private SplashView.SplashAdLoadListener splashAdLoadListener = new SplashAdLoadListener();\n\n    private SplashAdDisplayListenerInner adDisplayListener = new SplashAdDisplayListenerInner();\n\n    static void pause(final Promise promise) {\n        if (splashView != null) {\n            splashView.pauseView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void resume(final Promise promise) {\n        if (splashView != null) {\n            splashView.resumeView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void destroy(final Promise promise) {\n        if (splashView != null) {\n            splashView.destroyView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void isLoading(final Promise promise) {\n        if (splashView != null) {\n            promise.resolve(splashView.isLoading());\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void isLoaded(final Promise promise) {\n        if (splashView != null) {\n            promise.resolve(splashView.isLoaded());\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void getBiddingInfo(final Promise promise){\n        WritableMap wm = new WritableNativeMap();\n        if(splashView.getBiddingInfo() != null) {\n            wm.putDouble(\"price\", (double) splashView.getBiddingInfo().getPrice());\n            wm.putString(\"cur\", splashView.getBiddingInfo().getCur());\n            wm.putString(\"nurl\", splashView.getBiddingInfo().getNurl());\n            wm.putString(\"lurl\", splashView.getBiddingInfo().getNurl());\n            promise.resolve(wm);\n        } else {\n            promise.reject(\"BIDDING_INFO_ERROR\", \"getBiddingInfo response error\");\n        }\n    }\n\n    /**\n     * Pause flag.\n     * On the splash ad screen:\n     * Set this parameter to true when exiting the app to ensure that the app home screen is not displayed.\n     * Set this parameter to false when returning to the splash ad screen from another screen to ensure that\n     * the app home screen can be displayed properly.\n     */\n    private boolean hasPaused = false;\n\n    // Callback handler used when the ad display timeout message is received.\n    private Handler timeoutHandler = new Handler(new Handler.Callback() {\n        @Override\n        public boolean handleMessage(@NonNull Message msg) {\n            if (HMSAdsSplashActivity.this.hasWindowFocus()) {\n                jump();\n            }\n            return false;\n        }\n    });\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_splash);\n        Intent intent = getIntent();\n        mOrientation = CommonUtils.getIntegerExtra(intent,\"orientation\", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        mSloganResId = CommonUtils.getIntegerExtra(intent, \"sloganResId\", R.drawable.default_slogan);\n        mLogoResId = CommonUtils.getIntegerExtra(intent, \"logoResId\", R.drawable.ic_launcher);\n        mWideSloganResId = CommonUtils.getIntegerExtra(intent, \"wideSloganResId\", R.drawable.default_slogan);\n        mMediaNameResId = CommonUtils.getIntegerExtra(intent, \"mediaNameResId\", 2131493009);\n        mAudioFocusType = CommonUtils.getIntegerExtra(intent, \"audioFocusType\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE);\n        mLogoText = CommonUtils.getStringExtra(intent, \"logoText\");\n        mCopyrightText = CommonUtils.getStringExtra(intent,\"copyrightText\");\n        mAdId = CommonUtils.getStringExtra(intent,\"adId\");\n        mAdParamBundle = CommonUtils.getBundleExtra(intent,\"adParam\");\n        loadAd();\n    }\n\n    private void loadAd() {\n        View mLogoTextView = findViewById(R.id.text_logo);\n        if (mLogoTextView instanceof TextView) {\n            ((TextView) mLogoTextView).setText(mLogoText);\n        }\n\n        View mCopyrightTextView = findViewById(R.id.text_copyright);\n        if (mCopyrightTextView instanceof TextView) {\n            ((TextView) mCopyrightTextView).setText(mCopyrightText);\n        }\n\n        View mLogoImageView = findViewById(R.id.image_logo);\n        if (mLogoImageView instanceof ImageView) {\n            ((ImageView) mLogoImageView).setImageResource(mLogoResId);\n        }\n\n        splashView = findViewById(R.id.splash_ad_view);\n        splashView.setAdDisplayListener(adDisplayListener);\n\n        // Set a default app launch image.\n        splashView.setSloganResId(mSloganResId);\n        // Set a default app launch image.\n        splashView.setWideSloganResId(mWideSloganResId);\n        // Set a logo image.\n        splashView.setLogoResId(mLogoResId);\n        // Set logo description.\n        splashView.setMediaNameResId(mMediaNameResId);\n        // Set the audio focus type for a video splash ad.\n        splashView.setAudioFocusType(mAudioFocusType);\n\n        splashView.load(mAdId, mOrientation,\n            ReactUtils.getAdParamFromReadableMap(ReactUtils.getWritableMapFromAdParamBundle(mAdParamBundle)),\n            splashAdLoadListener);\n\n        // Remove the timeout message from the message queue.\n        timeoutHandler.removeMessages(MSG_AD_TIMEOUT);\n        // Send a delay message to ensure that the app home screen can be displayed when the ad display times out.\n        timeoutHandler.sendEmptyMessageDelayed(MSG_AD_TIMEOUT, AD_TIMEOUT);\n    }\n\n    /**\n     * Switch from the splash ad screen to the app home screen when the ad display is complete.\n     */\n    private void jump() {\n        if (!hasPaused) {\n            hasPaused = true;\n            Handler mainHandler = new Handler();\n            mainHandler.postDelayed(this::finish, 1000);\n        }\n    }\n\n    /**\n     * Set this parameter to true when exiting the app to ensure that the app home screen is not displayed.\n     */\n    @Override\n    protected void onStop() {\n        // Remove the timeout message from the message queue.\n        timeoutHandler.removeMessages(MSG_AD_TIMEOUT);\n        hasPaused = true;\n        super.onStop();\n    }\n\n    /**\n     * Call this method when returning to the splash ad screen from another screen to access the app home screen.\n     */\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        hasPaused = false;\n        jump();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (splashView != null) {\n            splashView.destroyView();\n        }\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (splashView != null) {\n            splashView.pauseView();\n        }\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (splashView != null) {\n            splashView.resumeView();\n        }\n    }\n\n    private static class SplashAdDisplayListenerInner extends SplashAdDisplayListener {\n        @Override\n        public void onAdClick() {\n            sendEvent(Event.AD_CLICK, null);\n        }\n\n        @Override\n        public void onAdShowed() {\n            sendEvent(Event.AD_SHOWED, null);\n        }\n    }\n\n    private class SplashAdLoadListener extends SplashView.SplashAdLoadListener {\n        @Override\n        public void onAdLoaded() {\n            sendEvent(Event.AD_LOADED, null);\n        }\n\n        @Override\n        public void onAdFailedToLoad(int errorCode) {\n            sendEvent(Event.AD_FAILED_TO_LOAD, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            jump();\n        }\n\n        @Override\n        public void onAdDismissed() {\n            sendEvent(Event.AD_DISMISSED, null);\n            jump();\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsSplashAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.annotation.SuppressLint;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.ads.AudioFocusType;\n\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.rn.ads.utils.ResourceUtils;\n\npublic class HMSAdsSplashAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsSplashAdModule.class.getSimpleName();\n    @SuppressLint(\"StaticFieldLeak\")\n    private static ReactApplicationContext mReactContext;\n    private HMSLogger hmsLogger;\n\n    private ReadableMap mAdParamReadableMap;\n    private int mOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;\n    private int mSloganResId = R.drawable.default_slogan;\n    private int mWideSloganResId = R.drawable.default_slogan;\n    private int mLogoResId = R.drawable.ic_launcher;\n    private int mMediaNameResId;\n    private int mAudioFocusType = AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE;\n    private String mAdId;\n    private String mLogoText = \"Huawei Developer\";\n    private String mCopyrightText = \"Copyright 2020. Huawei Technologies Co., Ltd\";\n\n    public enum SplashMediaType {\n        IMAGE(\"image\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        SplashMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_LOADED(\"adLoaded\"),\n        AD_FAILED_TO_LOAD(\"adFailedToLoad\"),\n        AD_DISMISSED(\"adDismissed\"),\n        AD_SHOWED(\"adShowed\"),\n        AD_CLICK(\"adClick\");\n\n        private String splashEventName;\n\n        Event(String splashEventName) {\n            this.splashEventName = splashEventName;\n        }\n\n        public String getName() {\n            return splashEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsSplash\";\n    }\n\n    HMSAdsSplashAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        hmsLogger = HMSLogger.getInstance(reactContext);\n        initContext(reactContext);\n    }\n\n    private static void initContext(final ReactApplicationContext reactContext) {\n        synchronized (HMSAdsSplashAdModule.class) {\n            mReactContext = reactContext;\n        }\n    }\n\n    static void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void setAdId(final String adId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAdId\");\n        mAdId = adId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdParam(final ReadableMap rm, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAdParam\");\n        mAdParamReadableMap = rm;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setOrientation(final int orientation, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setOrientation\");\n        mOrientation = orientation;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setSloganResource(final String sloganResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setSloganResource\");\n        mSloganResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, sloganResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setWideSloganResource(final String wideSloganResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setWideSloganResource\");\n        mWideSloganResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, wideSloganResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setLogoResource(final String logoResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setLogoResource\");\n        mLogoResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, logoResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setLogoText(final String logoText, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setLogoText\");\n        mLogoText = logoText;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setCopyrightText(final String copyrightText, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setCopyrightText\");\n        mCopyrightText = copyrightText;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setMediaNameResource(final String mediaNameResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setMediaNameResource\");\n        mMediaNameResId = ResourceUtils.getStringResourceIdFromContext(mReactContext, mediaNameResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAudioFocusType(int audioFocusType, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAudioFocusType\");\n        mAudioFocusType = audioFocusType;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void pause(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.pause\");\n        HMSAdsSplashActivity.pause(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.pause\");\n    }\n\n    @ReactMethod\n    public void resume(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.resume\");\n        HMSAdsSplashActivity.resume(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.resume\");\n    }\n\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.destroy\");\n        HMSAdsSplashActivity.destroy(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.destroy\");\n    }\n\n    @ReactMethod\n    public void isLoading(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.isLoading\");\n        HMSAdsSplashActivity.isLoading(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.isLoading\");\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.isLoaded\");\n        HMSAdsSplashActivity.isLoaded(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void getBiddingInfo(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.getBiddingInfo\");\n        HMSAdsSplashActivity.getBiddingInfo(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.getBiddingInfo\");\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        Activity mActivity = getCurrentActivity();\n        if (mActivity == null) {\n            promise.reject(\"NO_CURRENT_ACTIVITY\", \"Cannot get current activity\");\n            return;\n        }\n        Intent intent = new Intent(mActivity, HMSAdsSplashActivity.class);\n        intent.putExtra(\"logoText\", mLogoText);\n        intent.putExtra(\"copyrightText\", mCopyrightText);\n        intent.putExtra(\"orientation\", mOrientation);\n        intent.putExtra(\"sloganResId\", mSloganResId);\n        intent.putExtra(\"logoResId\", mLogoResId);\n        intent.putExtra(\"wideSloganResId\", mWideSloganResId);\n        intent.putExtra(\"mediaNameResId\", mMediaNameResId);\n        intent.putExtra(\"audioFocusType\", mAudioFocusType);\n        intent.putExtra(\"adId\", mAdId);\n        intent.putExtra(\"adParam\", ReactUtils.getBundleFromReadableMap(mAdParamReadableMap));\n        hmsLogger.startMethodExecutionTimer(\"splashAd.show\");\n        mActivity.startActivity(intent);\n        hmsLogger.sendSingleEvent(\"splashAd.show\");\n        Log.i(TAG, \"startActivity() is called, starting new splash activity...\");\n        promise.resolve(null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsVastModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.pm.ActivityInfo;\nimport android.util.ArrayMap;\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.UIManagerModule;\nimport com.huawei.hms.ads.vast.adapter.SdkFactory;\nimport com.huawei.hms.ads.vast.adapter.VastSdkConfiguration;\nimport com.huawei.hms.ads.vast.domain.event.AdContent;\nimport com.huawei.hms.ads.vast.domain.event.VastAdContent;\nimport com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions;\nimport com.huawei.hms.ads.vast.openalliance.ad.constant.NonPersonalizedAd;\nimport com.huawei.hms.ads.vast.player.api.AdsRequestListener;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.model.CreativeResource;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsVastModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsVastModule.class.getSimpleName();\n    private final ReactContext reactContext;\n    private HMSLogger hmsLogger;\n\n    HMSAdsVastModule(ReactContext reactContext) {\n        super((ReactApplicationContext) reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSVast\";\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n\n        Map<String, Object> nonPersonalizedAd = new ArrayMap<>();\n        nonPersonalizedAd.put(\"PERSONALIZED\", NonPersonalizedAd.PERSONALIZED);\n        nonPersonalizedAd.put(\"NON_PERSONALIZED\", NonPersonalizedAd.NON_PERSONALIZED);\n        constants.put(\"NonPersonalizedAd\", nonPersonalizedAd);\n\n        Map<String, Object> contentClassification = new ArrayMap<>();\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_W\",  RequestOptions.AD_CONTENT_CLASSIFICATION_W);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_PI\", RequestOptions.AD_CONTENT_CLASSIFICATION_PI);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_J\", RequestOptions.AD_CONTENT_CLASSIFICATION_J);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_A\", RequestOptions.AD_CONTENT_CLASSIFICATION_A);\n        constants.put(\"ContentClassification\", contentClassification);\n\n        Map<String, Object> tagForChild = new ArrayMap<>();\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_FALSE\", RequestOptions.TAG_FOR_CHILD_PROTECTION_FALSE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_TRUE\", RequestOptions.TAG_FOR_CHILD_PROTECTION_TRUE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_UNSPECIFIED\", RequestOptions.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED);\n        constants.put(\"TagForChild\", tagForChild);\n\n        Map<String, Object> underAge = new ArrayMap<>();\n        underAge.put(\"PROMISE_FALSE\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_FALSE);\n        underAge.put(\"PROMISE_TRUE\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_TRUE);\n        underAge.put(\"PROMISE_UNSPECIFIED\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_UNSPECIFIED);\n        constants.put(\"UnderAge\", underAge);\n\n        Map<String, Object> creativeMatchType = new ArrayMap<>();\n        creativeMatchType.put(\"EXACT\", HMSAdsVastView.CreativeMatchType.EXACT.getValue());\n        creativeMatchType.put(\"SMART\", HMSAdsVastView.CreativeMatchType.SMART.getValue());\n        creativeMatchType.put(\"UNKNOWN\", HMSAdsVastView.CreativeMatchType.UNKNOWN.getValue());\n        creativeMatchType.put(\"ANY\", HMSAdsVastView.CreativeMatchType.ANY.getValue());\n        creativeMatchType.put(\"LANDSCAPE\", HMSAdsVastView.CreativeMatchType.LANDSCAPE.getValue());\n        creativeMatchType.put(\"PORTRAIT\", HMSAdsVastView.CreativeMatchType.PORTRAIT.getValue());\n        constants.put(\"CreativeMatchType\", creativeMatchType);\n\n        Map<String, Object> orientation = new ArrayMap<>();\n        orientation.put(\"PORTRAIT\", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        orientation.put(\"LANDSCAPE\", ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);\n        constants.put(\"Orientation\", orientation);\n\n        return constants;\n    }\n\n    @ReactMethod\n    public void init(ReadableMap rm, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"VasInit\");\n        SdkFactory.init(reactContext, ReactUtils.getVastSdkConfigurationFromReadableMap(rm));\n        hmsLogger.sendSingleEvent(\"VasInit\");\n        promise.resolve(\"Vast Ad SDK Factory initialized\");\n    }\n\n    @ReactMethod\n    public void getVastSdkConfiguration(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getVastSdkConfiguration\");\n        VastSdkConfiguration vastSdkConfiguration = SdkFactory.getConfiguration();\n        hmsLogger.sendSingleEvent(\"getVastSdkConfiguration\");\n        promise.resolve(ReactUtils.getWritableMapFromVastSdkConfiguration(vastSdkConfiguration));\n    }\n\n    @ReactMethod\n    public void getEventProcessor(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getEventProcessor\");\n        CreativeResource currentPlayerCreative = VastAdPlayer.getInstance().getCurrentLinearCreative();\n        if (SdkFactory.getEventProcessor() == null) {\n            return;\n        }\n        SdkFactory.getEventProcessor()\n                .onAcceptInvitationLinear(currentPlayerCreative.getTrackingEvents(),\n                        getAdContentByCreative(currentPlayerCreative));\n\n        SdkFactory.getEventProcessor()\n                .onRewind(currentPlayerCreative.getTrackingEvents(),\n                        getAdContentByCreative(currentPlayerCreative), 5000,\n                        currentPlayerCreative.getDuration());\n\n        hmsLogger.sendSingleEvent(\"getEventProcessor\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void updateSdkServerConfig(String slotId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"updateSdkServerConfig\");\n        SdkFactory.updateSdkServerConfig(slotId);\n        hmsLogger.sendSingleEvent(\"updateSdkServerConfig\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void userAcceptAdLicense(boolean isAcceptLicense, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"userAcceptAdLicense\");\n        SdkFactory.userAcceptAdLicense(isAcceptLicense);\n        hmsLogger.sendSingleEvent(\"userAcceptAdLicense\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void getViewInfo(final int viewId, final Promise promise) {\n        UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n        uiManager.addUIBlock(nativeViewHierarchyManager -> {\n            View view = nativeViewHierarchyManager.resolveView(viewId);\n            if (view instanceof HMSAdsVastView) {\n                HMSAdsVastView myView = (HMSAdsVastView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putMap(\"AdPlayerConfigs\", ReactUtils.getWritableMapFromVastAdPlayerConfigs(reactContext));\n                wm.putMap(\"LinearAdSlot\", ReactUtils.getWritableMapFromLinearAdSlot(myView.mLinearAdSlot));\n                wm.putMap(\"AdsData\", ReactUtils.getWritableMapFromAdsData(myView.mAdsData));\n                wm.putMap(\"VideoControllerInfo\", myView.getVideoControllerInfo());\n                promise.resolve(wm);\n            } else {\n                promise.reject(\"NOT_AD_VIEW\", \"Unexpected view type\");\n            }\n        });\n    }\n\n    private AdContent getAdContentByCreative(CreativeResource playerResource) {\n        return VastAdContent.createByRequestId(playerResource.getRequestId())\n                .setSlotId(playerResource.getSlotId())\n                .setAssetUri(playerResource.getUrl())\n                .setCreativeType(playerResource.getType())\n                .setShowId(playerResource.getShowId())\n                .setCreativeId(playerResource.getContentId())\n                .setCreativeExtensionMap(playerResource.getTypeToCreativeExtension())\n                .setAdExtensionMap(playerResource.getAdExtensionMap());\n    }\n\n    public static String getVastErrorMessages(int errorCode) {\n        switch (errorCode) {\n            case AdsRequestListener.LOAD_AD_FAILED:\n                return \"The XML content fails to be parsed.\";\n            case AdsRequestListener.MAIN_AD_LOAD_FAILED:\n                return \"The ad cannot be played or fails to be loaded.\";\n            case AdsRequestListener.CREATIVE_TYPE_ERROR:\n                return \"Incorrect type of the asset to be parsed.\";\n            case AdsRequestListener.ADSLOT_MORE_THAN_CREATIVE:\n                return \"The number of returned assets is less than that of ad units.\";\n            default:\n                return \"Unknown error\";\n        }\n    }\n\n    public static String getVastPlayStateChangedMessage(int playState) {\n        switch (playState) {\n            case 2001:\n                return \"An ad whose creative type is not specified is being played.\";\n            case 2002:\n                return \"Playback pauses.\";\n            case 2006:\n                return \"A video ad is being played.\";\n            case 2007:\n                return \"An image ad is being played.\";\n            default:\n                return \"Unknown Play State\";\n        }\n    }\n\n    public static String getVastScreenStateChangedMessage(int screenState) {\n        switch (screenState) {\n            case 1001:\n                return \"normal screen mode\";\n            case 1002:\n                return \"full screen mode\";\n            default:\n                return \"Unknown Screen State\";\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsVastView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\nimport android.widget.ProgressBar;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.LifecycleEventListener;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\nimport com.huawei.hms.ads.vast.player.VastApplication;\nimport com.huawei.hms.ads.vast.player.api.AdsRequestListener;\nimport com.huawei.hms.ads.vast.player.api.DefaultVideoController;\nimport com.huawei.hms.ads.vast.player.api.PlayerConfig;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.api.VastPlayerListener;\nimport com.huawei.hms.ads.vast.player.model.adslot.AdsData;\nimport com.huawei.hms.ads.vast.player.model.adslot.LinearAdSlot;\nimport com.huawei.hms.ads.vast.player.model.remote.RequestCallback;\nimport com.huawei.hms.rn.ads.custome.CustomVideoController;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsVastView extends LinearLayout implements LifecycleEventListener, VastPlayerListener {\n    private static final String TAG = HMSAdsVastView.class.getSimpleName();\n\n    public ReactContext mReactContext;\n\n    private FrameLayout mLinearAdView;\n\n    private ProgressBar mProgressBar;\n\n    protected PlayerConfig playerConfig;\n    protected AdsData mAdsData;\n    protected LinearAdSlot mLinearAdSlot;\n    protected CustomVideoController customVideoController;\n    protected DefaultVideoController defaultVideoController;\n    private HMSAdsVastView mHMSAdsVastView;\n    private boolean isCustomVideoPlayer = false;\n    private boolean isAdLoadWithAdsData = false;\n    private boolean isTestAd = false;\n\n    private final Runnable measureAndLayout = () -> {\n        measure(\n                MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n        layout(getLeft(), getTop(), getRight(), getBottom());\n    };\n\n    public HMSAdsVastView(Context context) {\n        super(context);\n        if (context instanceof ReactContext) {\n            mReactContext = (ReactContext) context;\n        }\n        mReactContext.addLifecycleEventListener(this);\n    }\n\n    public HMSAdsVastView(Context context, AttributeSet attrs, int defStyle) {\n        super(context);\n    }\n\n    public HMSAdsVastView(Context context, AttributeSet attrs) {\n        super(context);\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(measureAndLayout);\n    }\n\n    private void sendEvent(HMSAdsVastView.Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    void loadAd() {\n        VastApplication.init(mReactContext, isTestAd);\n\n        VastAdPlayer.getInstance().setAdViewStrategy((expectedHeight, expectedWidth, height, width) -> true);\n\n        LayoutInflater layoutInflater = LayoutInflater.from(mReactContext);\n\n        if (mHMSAdsVastView != null) {\n            releaseAd();\n        }\n\n        mHMSAdsVastView = (HMSAdsVastView) layoutInflater.inflate(R.layout.vast_template, null);\n        mLinearAdView = mHMSAdsVastView.findViewById(R.id.fl_linear_ad);\n        mProgressBar = mHMSAdsVastView.findViewById(R.id.progress);\n\n        if (isCustomVideoPlayer) {\n            customVideoController = new CustomVideoController(mReactContext);\n            customVideoController.setPlayerListener(this);\n\n            VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, customVideoController);\n        } else {\n            defaultVideoController = new DefaultVideoController(mReactContext);\n\n            VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, defaultVideoController);\n        }\n\n        VastAdPlayer.getInstance().setConfig(playerConfig);\n\n        if (isAdLoadWithAdsData) {\n            VastAdPlayer.getInstance().loadLinearAd(mLinearAdSlot, new RequestCallback() {\n                @Override\n                public void onAdsLoadedSuccess(AdsData adsData) {\n                    Log.d(TAG, \"onAdsLoadedSuccess :\");\n                    mAdsData = adsData;\n                    showAd();\n                    sendEvent(Manager.Event.AD_LOAD_SUCCESS, ReactUtils.getWritableMapFromAdsData(adsData));\n                }\n\n                @Override\n                public void onAdsLoadFailed() {\n                    Log.d(TAG, \"onAdsLoadFailed :\");\n                    mAdsData = null;\n                    sendEvent(Manager.Event.AD_LOAD_FAILED, null);\n                }\n            });\n        }else{\n            showAd();\n        }\n\n    }\n\n    void showAd() {\n        if (mLinearAdSlot == null) {\n            return;\n        }\n\n        if (mAdsData != null) {\n            VastAdPlayer.getInstance().playLinearAds(mLinearAdSlot, mAdsData, adsRequestListener);\n        } else {\n            if (mLinearAdSlot.getMaxAdPods() != 0) {\n                VastAdPlayer.getInstance().startAdPods(mLinearAdSlot, adsRequestListener);\n            } else {\n                VastAdPlayer.getInstance().startLinearAd(mLinearAdSlot, adsRequestListener);\n            }\n        }\n\n        this.removeAllViews();\n        this.addView(mHMSAdsVastView);\n        this.requestLayout();\n    }\n\n    @Override\n    public void onPlayStateChanged(int playState) {\n        Log.d(TAG, \"onPlayStateChanged :\" + playState);\n        sendEvent(Manager.Event.AD_PLAY_STATE_CHANGED, ReactUtils.getWritableMapFromVastPlayState(playState));\n    }\n\n    @Override\n    public void onVolumeChanged(float volume) {\n        Log.d(TAG, \"onVolumeChanged :\" + volume);\n        WritableMap wm = new WritableNativeMap();\n        wm.putDouble(\"volume\", volume);\n        sendEvent(Manager.Event.AD_VOLUME_CHANGED, wm);\n    }\n\n    @Override\n    public void onScreenViewChanged(int screenState) {\n        Log.d(TAG, \"onScreenViewChanged :\" + screenState);\n        sendEvent(Manager.Event.AD_SCREEN_VIEW_CHANGED, ReactUtils.getWritableMapFromVastScreenState(screenState));\n    }\n\n    @Override\n    public void onProgressChanged(long duration, long currentPosition, long skipDuration) {\n        Log.d(TAG, \"onProgressChanged :\" + duration + \" -- \" + \" -- \" + currentPosition + \" -- \" + skipDuration);\n        sendEvent(Manager.Event.AD_PROGRESS_CHANGED, ReactUtils.getWritableMapFromVastProgressListener(duration, currentPosition, skipDuration));\n    }\n\n    private AdsRequestListener adsRequestListener = new AdsRequestListener() {\n        @Override\n        public void onSuccess(View view, int responseCode) {\n            Log.d(TAG, \"onSuccess :\" + responseCode);\n            sendEvent(Manager.Event.AD_ON_SUCCESS, null);\n        }\n\n        @Override\n        public void onFailed(View view, int responseCode) {\n            Log.d(TAG, \"onFailed :\" + responseCode);\n            sendEvent(Manager.Event.AD_ON_FAILED, ReactUtils.getWritableMapFromVastErrorCode(responseCode));\n        }\n\n        @Override\n        public void playAdReady() {\n            Log.d(TAG, \"playAdReady :\");\n            mLinearAdView.setVisibility(View.VISIBLE);\n            sendEvent(Manager.Event.AD_READY, null);\n        }\n\n        @Override\n        public void playAdFinish() {\n            Log.d(TAG, \"playAdFinish :\");\n            mLinearAdView.setVisibility(View.INVISIBLE);\n            sendEvent(Manager.Event.AD_FINISH, null);\n        }\n\n        @Override\n        public void onBufferStart() {\n            Log.d(TAG, \"onBufferStart :\");\n            mProgressBar.setVisibility(View.VISIBLE);\n            sendEvent(Manager.Event.AD_BUFFER_START, null);\n        }\n\n        @Override\n        public void onBufferEnd() {\n            Log.d(TAG, \"onBufferEnd :\");\n            mProgressBar.setVisibility(View.INVISIBLE);\n            sendEvent(Manager.Event.AD_BUFFER_END, null);\n        }\n    };\n\n    public enum CreativeMatchType {\n        EXACT(0),\n        SMART(1),\n        UNKNOWN(2),\n        ANY(3),\n        LANDSCAPE(4),\n        PORTRAIT(5);\n\n        private int value;\n\n        CreativeMatchType(int value) {\n            this.value = value;\n        }\n\n        public int getValue() {\n            return value;\n        }\n\n        public static HMSAdsVastView.CreativeMatchType forValue(int s) {\n            switch (s) {\n                case 0:\n                    return EXACT;\n                case 1:\n                    return SMART;\n                case 2:\n                    return UNKNOWN;\n                case 4:\n                    return LANDSCAPE;\n                case 5:\n                    return PORTRAIT;\n                default:\n                    return ANY;\n            }\n        }\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mLinearAdSlot = ReactUtils.getLinearAdSlotFromReadableMap(adParamReadableMap);\n    }\n\n    public void setIsCustomVideoPlayer(boolean isCustomVideoPlayer) {\n        this.isCustomVideoPlayer = isCustomVideoPlayer;\n    }\n\n    public void setIsAdLoadWithAdsData(boolean isAdLoadWithAdsData) {\n        this.isAdLoadWithAdsData = isAdLoadWithAdsData;\n    }\n\n    public void setIsTestAd(boolean isTestAd) {\n        this.isTestAd = isTestAd;\n    }\n\n    public void setPlayerConfig(ReadableMap adPlayerConfigsReadableMap) {\n        playerConfig = ReactUtils.getPlayerConfigsFromReadableMap(adPlayerConfigsReadableMap);\n    }\n\n    public void toggleMuteState(boolean isMute) {\n        if (isCustomVideoPlayer) {\n            customVideoController.toggleMuteState(isMute);\n        } else {\n            defaultVideoController.toggleMuteState(isMute);\n        }\n    }\n\n    public void startOrPause() {\n        if (isCustomVideoPlayer) {\n            customVideoController.startOrPause();\n        } else {\n            defaultVideoController.startOrPause();\n        }\n    }\n\n    public WritableMap getVideoControllerInfo() {\n        WritableMap wm = new WritableNativeMap();\n        if (isCustomVideoPlayer) {\n            wm.putBoolean(\"isMute\", customVideoController.isMute());\n            wm.putInt(\"layoutId\", customVideoController.getLayoutId());\n        } else {\n            wm.putBoolean(\"isMute\", defaultVideoController.isMute());\n            wm.putInt(\"layoutId\", defaultVideoController.getLayoutId());\n        }\n        return wm;\n    }\n\n    private void resumeAd() {\n        VastAdPlayer.getInstance().resume();\n    }\n\n    private void pauseAd() {\n        VastAdPlayer.getInstance().pause();\n    }\n\n    private void releaseAd() {\n        if (mLinearAdView != null) {\n            VastAdPlayer.getInstance().unregisterLinearAdView(mLinearAdView);\n        }\n        VastAdPlayer.getInstance().release();\n        this.removeAllViews();\n    }\n\n    @Override\n    public void onHostResume() {\n        Log.d(TAG, \"onHostResume\");\n        resumeAd();\n    }\n\n    @Override\n    public void onHostPause() {\n        Log.d(TAG, \"onHostPause\");\n        pauseAd();\n    }\n\n    @Override\n    public void onHostDestroy() {\n        Log.d(TAG, \"onHostDestroy\");\n        releaseAd();\n    }\n\n    public static class Manager extends SimpleViewManager<HMSAdsVastView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            AD_LOAD_SUCCESS(\"onLoadSuccess\"),\n            AD_LOAD_FAILED(\"onLoadFailed\"),\n            AD_ON_SUCCESS(\"onSuccess\"),\n            AD_ON_FAILED(\"onFailed\"),\n            AD_READY(\"onPlayAdReady\"),\n            AD_FINISH(\"onPlayAdFinish\"),\n            AD_BUFFER_START(\"onBufferStart\"),\n            AD_BUFFER_END(\"onBufferEnd\"),\n            AD_PLAY_STATE_CHANGED(\"onPlayStateChanged\"),\n            AD_VOLUME_CHANGED(\"onVolumeChanged\"),\n            AD_SCREEN_VIEW_CHANGED(\"onScreenViewChanged\"),\n            AD_PROGRESS_CHANGED(\"onProgressChanged\");\n\n            private String nativeVastEventName;\n\n            Event(String nativeEventName) {\n                this.nativeVastEventName = nativeEventName;\n            }\n\n            public String getName() {\n                return nativeVastEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            SHOW_AD(\"showAd\"),\n            PAUSE(\"pause\"),\n            RESUME(\"resume\"),\n            RELEASE(\"release\"),\n            TOGGLE_MUTE_STATE(\"toggleMuteState\"),\n            START_OR_PAUSE(\"startOrPause\");\n\n            private String nativeVastCommandName;\n\n            Command(String nativeCommandName) {\n                this.nativeVastCommandName = nativeCommandName;\n            }\n\n            public String getName() {\n                return nativeVastCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsVastView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsVastView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"vastView.create\");\n            return new HMSAdsVastView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(HMSAdsVastView.Manager.Event.values());\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(HMSAdsVastView.Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsVastView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < HMSAdsVastView.Manager.Command.values().length) {\n                switch (HMSAdsVastView.Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"vastView.loadAd\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.pause\");\n                        root.pauseAd();\n                        hmsLogger.sendSingleEvent(\"vastView.pause\");\n                        break;\n                    case RESUME:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.resume\");\n                        root.resumeAd();\n                        hmsLogger.sendSingleEvent(\"vastView.resume\");\n                        break;\n                    case RELEASE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.release\");\n                        root.releaseAd();\n                        hmsLogger.sendSingleEvent(\"vastView.release\");\n                        break;\n                    case TOGGLE_MUTE_STATE:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"vastView.toggleMuteState\");\n                        root.toggleMuteState(args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"vastView.toggleMuteState\");\n                        break;\n                    case START_OR_PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.startOrPause\");\n                        root.startOrPause();\n                        hmsLogger.sendSingleEvent(\"vastView.startOrPause\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsVastView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"vastView.setAdParam\");\n            view.setAdParam(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"isCustomVideoPlayer\")\n        public void setIsCustomVideoPlayer(final HMSAdsVastView view, boolean isCustomVideoPlayer) {\n            hmsLogger.sendSingleEvent(\"vastView.setIsCustomVideoPlayer\");\n            view.setIsCustomVideoPlayer(isCustomVideoPlayer);\n        }\n\n        @ReactProp(name = \"isAdLoadWithAdsData\")\n        public void setIsAdLoadWithAdsData(final HMSAdsVastView view, boolean isAdLoadWithAdsData) {\n            hmsLogger.sendSingleEvent(\"vastView.setIsAdLoadWithAdsData\");\n            view.setIsAdLoadWithAdsData(isAdLoadWithAdsData);\n        }\n\n        @ReactProp(name = \"playerConfigs\")\n        public void setPlayerConfigs(final HMSAdsVastView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"vastView.setAdParam\");\n            view.setPlayerConfig(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"isTestAd\")\n        public void setIsTestAd(final HMSAdsVastView view, boolean isTest) {\n            hmsLogger.sendSingleEvent(\"vastView.isTestAd\");\n            view.setIsTestAd(isTest);\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/custome/CustomVideoController.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.custome;\n\nimport android.util.AttributeSet;\nimport android.view.ViewGroup;\nimport android.widget.Button;\nimport android.widget.CheckBox;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.huawei.hms.ads.vast.player.base.BaseVideoController;\nimport com.huawei.hms.ads.vast.player.misc.utils.AudioUtil;\nimport com.huawei.hms.rn.ads.R;\n\npublic class CustomVideoController extends BaseVideoController{\n    private CheckBox btnMute;\n\n    private ViewGroup clContent;\n\n    private Button btnDetailView;\n\n    private Button btnScreen;\n\n    private Button btnPlay;\n\n    public CustomVideoController(ReactContext context) {\n        this(context, null);\n    }\n\n    public CustomVideoController(ReactContext context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public CustomVideoController(ReactContext context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        initView(context);\n        initMuteState();\n    }\n\n    private void initView(ReactContext context) {\n        clContent = findViewById(R.id.cl_content);\n        btnDetailView = findViewById(R.id.demo_bt_detail);\n        btnScreen = findViewById(R.id.demo_bt_full_screen);\n        btnPlay = findViewById(R.id.demo_bt_play);\n        btnMute = findViewById(R.id.demo_bt_voice);\n\n        btnScreen.setOnClickListener(v -> toggleScreen(context.getCurrentActivity()));\n        btnDetailView.setOnClickListener(v -> launchAdDetailView(context.getCurrentActivity()));\n        btnPlay.setOnClickListener(v -> startOrPause());\n        clContent.setOnClickListener(v -> launchAdDetailView(context.getCurrentActivity()));\n    }\n\n    private void initMuteState() {\n        btnMute.setChecked(isMute());\n        btnMute.setOnCheckedChangeListener((button, checked) -> toggleMuteState(checked));\n    }\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_video_player;\n    }\n\n    @Override\n    public boolean isMute() {\n        if (mIsForceMute) {\n            return btnMute.isChecked();\n        } else {\n            return AudioUtil.isSystemVolumeZero(mActivity);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/logger/HMSLogger.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ADS\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"13.4.73.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode, final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/utils/CommonUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\n\npublic class CommonUtils {\n    private static final String TAG = CommonUtils.class.getSimpleName();\n\n    public static int getIntegerExtra(Intent intent, String name, int defaultValue) {\n        try {\n            return intent.getIntExtra(name, defaultValue);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return defaultValue;\n        }\n    }\n\n    public static String getStringExtra(Intent intent, String name) {\n        try {\n            return intent.getStringExtra(name);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return \"\";\n        }\n    }\n\n    public static Bundle getBundleExtra(Intent intent, String name) {\n        try {\n            return intent.getBundleExtra(name);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/utils/Constants.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\npublic interface Constants {\n    String INSTALL_REFERRER_FILE = \"install_referrer\";\n    String SERVICE_PACKAGE_NAME = \"com.huawei.hwid\";\n    String SERVICE_ACTION = \"com.huawei.android.hms.CHANNEL_SERVICE\";\n}\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/utils/ReactUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport android.content.Context;\nimport android.location.Location;\nimport android.os.Bundle;\nimport android.util.ArrayMap;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.common.MapBuilder;\n\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.AdSize;\nimport com.huawei.hms.ads.AdvertiserInfo;\nimport com.huawei.hms.ads.BannerAdSize;\nimport com.huawei.hms.ads.BiddingParam;\nimport com.huawei.hms.ads.RequestOptions;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.VideoOperator;\nimport com.huawei.hms.ads.InterstitialAd;\nimport com.huawei.hms.ads.consent.bean.AdProvider;\nimport com.huawei.hms.ads.identifier.AdvertisingIdClient;\nimport com.huawei.hms.ads.installreferrer.api.ReferrerDetails;\nimport com.huawei.hms.ads.instreamad.InstreamAd;\nimport com.huawei.hms.ads.nativead.DislikeAdReason;\nimport com.huawei.hms.ads.nativead.NativeAd;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.ads.nativead.NativeAdLoader;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAd;\nimport com.huawei.hms.ads.vast.adapter.SdkFactory;\nimport com.huawei.hms.ads.vast.adapter.VastSdkConfiguration;\nimport com.huawei.hms.ads.vast.application.requestinfo.CreativeMatchStrategy;\nimport com.huawei.hms.ads.vast.domain.advertisement.CreativeExtension;\nimport com.huawei.hms.ads.vast.player.api.PlayerConfig;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.model.LinearCreative;\nimport com.huawei.hms.ads.vast.player.model.adslot.AdsData;\nimport com.huawei.hms.ads.vast.player.model.adslot.LinearAdSlot;\nimport com.huawei.hms.rn.ads.HMSAdsBannerView;\nimport com.huawei.hms.rn.ads.HMSAdsModule;\nimport com.huawei.hms.rn.ads.HMSAdsVastModule;\nimport com.huawei.hms.rn.ads.HMSAdsVastView;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\n\nimport static com.huawei.hms.rn.ads.HMSAdsNativeView.getCreativeType;\n\npublic class ReactUtils {\n    public interface Mapper<T, R> {\n        /**\n         * Used to map classes\n         *\n         * @param in mapped from\n         * @return mapped to\n         */\n        R map(T in);\n    }\n\n    public interface NamedEvent {\n        /**\n         * Gets name of the event\n         *\n         * @return String of name of the event\n         */\n        String getName();\n    }\n\n    public interface NamedCommand {\n        /**\n         * Gets name of the command\n         *\n         * @return String of name of the command\n         */\n        String getName();\n    }\n\n    public static <R> List<R> mapReadableArray(ReadableArray array, Mapper<ReadableMap, R> mapper) {\n        List<R> list = new ArrayList<>();\n        for (int i = 0; i < array.size(); i++) {\n            list.add(mapper.map(array.getMap(i)));\n        }\n        return list;\n    }\n\n    public static <T> WritableArray mapList(List<T> list, Mapper<T, WritableMap> mapper) {\n        if (list == null || list.isEmpty()) {\n            return null;\n        }\n        WritableArray array = new WritableNativeArray();\n        for (T item : list) {\n            array.pushMap(mapper.map(item));\n        }\n        return array;\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static WritableMap getWritableMapFromErrorCode(int errorCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"errorCode\", errorCode);\n        wm.putString(\"errorMessage\", HMSAdsModule.getErrorMessage(errorCode));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastErrorCode(int responseCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"responseCode\", responseCode);\n        wm.putString(\"errorMessage\", HMSAdsVastModule.getVastErrorMessages(responseCode));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastPlayState(int playState) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"playStateCode\", playState);\n        wm.putString(\"playStateMessage\", HMSAdsVastModule.getVastPlayStateChangedMessage(playState));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastScreenState(int screenState) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"screenStateCode\", screenState);\n        wm.putString(\"screenStateMessage\", HMSAdsVastModule.getVastScreenStateChangedMessage(screenState));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastProgressListener(long duration, long currentPosition,\n        long skipDuration) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putDouble(\"duration\", duration);\n        wm.putDouble(\"currentPosition\", currentPosition);\n        wm.putDouble(\"skipDuration\", skipDuration);\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromReward(Reward obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putString(\"name\", obj.getName());\n        wm.putInt(\"amount\", obj.getAmount());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromRewardAd(RewardAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putString(\"userId\", obj.getUserId());\n        wm.putString(\"data\", obj.getData());\n        wm.putMap(\"reward\", getWritableMapFromReward(obj.getReward()));\n        wm.putBoolean(\"isLoaded\", obj.isLoaded());\n        if(obj.getBiddingInfo() != null) {\n            wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n            wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n            wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n            wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromInterstitialAd(InterstitialAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adId\", obj.getAdId());\n            wm.putBoolean(\"isLoaded\", obj.isLoaded());\n            wm.putBoolean(\"isLoading\", obj.isLoading());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromInstreamAd(InstreamAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adSource\", obj.getAdSource());\n            wm.putString(\"adSign\", obj.getAdSign());\n            wm.putString(\"callToAction\", obj.getCallToAction());\n            wm.putString(\"whyThisAd\", obj.getWhyThisAd());\n            wm.putDouble(\"duration\", obj.getDuration());\n            wm.putBoolean(\"isClicked\", obj.isClicked());\n            wm.putBoolean(\"isExpired\", obj.isExpired());\n            wm.putBoolean(\"isImageAd\", obj.isImageAd());\n            wm.putBoolean(\"isShown\", obj.isShown());\n            wm.putBoolean(\"isVideoAd\", obj.isVideoAd());\n            wm.putBoolean(\"hasAdvertiserInfo\", obj.hasAdvertiserInfo());\n            if (obj.hasAdvertiserInfo()) {\n                wm.putArray(\"advertiserInfo\", getWritableArrayAdvertiserInfo(obj.getAdvertiserInfo()));\n            }\n            wm.putBoolean(\"isTransparencyOpen\", obj.isTransparencyOpen());\n            wm.putString(\"transparencyTplUrl\", obj.getTransparencyTplUrl());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAd(NativeAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adSign\", obj.getAdSign());\n            wm.putString(\"adSource\", obj.getAdSource());\n            wm.putString(\"description\", obj.getDescription());\n            wm.putString(\"callToAction\", obj.getCallToAction());\n            wm.putString(\"whyThisAd\", obj.getWhyThisAd());\n            wm.putString(\"uniqueId\", obj.getUniqueId());\n            wm.putString(\"creativeType\", getCreativeType(obj.getCreativeType()));\n            wm.putArray(\"dislikeAdReasons\",\n                mapList(obj.getDislikeAdReasons(), ReactUtils::getWritableMapFromDislikeAdReason));\n            wm.putString(\"title\", obj.getTitle());\n            wm.putMap(\"videoOperator\", getWritableMapFromVideoOperator(obj.getVideoOperator()));\n            wm.putBoolean(\"isCustomClickAllowed\", obj.isCustomClickAllowed());\n            wm.putBoolean(\"isCustomDislikeThisAdEnabled\", obj.isCustomDislikeThisAdEnabled());\n            wm.putBoolean(\"hasAdvertiserInfo\", obj.hasAdvertiserInfo());\n            wm.putInt(\"interactionType\", obj.getInteractionType());\n            if (obj.hasAdvertiserInfo()) {\n                wm.putArray(\"advertiserInfo\", getWritableArrayAdvertiserInfo(obj.getAdvertiserInfo()));\n            }\n            if (obj.getAppInfo() != null) {\n                wm.putString(\"appName\", obj.getAppInfo().getAppName());\n                wm.putString(\"developerName\", obj.getAppInfo().getDeveloperName());\n                wm.putString(\"versionName\", obj.getAppInfo().getVersionName());\n            }\n            if (obj.getPromoteInfo() != null) {\n                wm.putInt(\"promoteType\", obj.getPromoteInfo().getType());\n                wm.putString(\"promoteName\", obj.getPromoteInfo().getName());\n            }\n            wm.putBoolean(\"isTransparencyOpen\", obj.isTransparencyOpen());\n            wm.putString(\"transparencyTplUrl\", obj.getTransparencyTplUrl());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromDislikeAdReason(DislikeAdReason obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"description\", obj.getDescription());\n        }\n        return wm;\n    }\n\n    public static WritableArray getWritableArrayAdvertiserInfo(List<AdvertiserInfo> arry) {\n        WritableArray wa = new WritableNativeArray();\n        if (arry != null && arry.size() > 0) {\n            for (AdvertiserInfo item : arry) {\n                WritableMap wm = new WritableNativeMap();\n                wm.putInt(\"seq\", item.getSeq());\n                wm.putString(\"key\", item.getKey());\n                wm.putString(\"value\", item.getValue());\n                wa.pushMap(wm);\n            }\n        }\n        return wa;\n    }\n\n    public static WritableMap getWritableMapFromVideoOperator(VideoOperator obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putDouble(\"aspectRatio\", obj.getAspectRatio());\n            wm.putBoolean(\"hasVideo\", obj.hasVideo());\n            wm.putBoolean(\"isCustomizeOperateEnabled\", obj.isCustomizeOperateEnabled());\n            wm.putBoolean(\"isClickToFullScreenEnabled\", obj.isClickToFullScreenEnabled());\n            wm.putBoolean(\"isMuted\", obj.isMuted());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdProvider(AdProvider obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"id\", obj.getId());\n            wm.putString(\"name\", obj.getName());\n            wm.putString(\"privacyPolicyUrl\", obj.getPrivacyPolicyUrl());\n            wm.putString(\"serviceArea\", obj.getServiceArea());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdSize(AdSize obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromBannerAdSizeWithContext(BannerAdSize obj, Context context) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n            wm.putInt(\"heightPx\", obj.getHeightPx(context));\n            wm.putInt(\"widthPx\", obj.getWidthPx(context));\n            wm.putBoolean(\"isAutoHeightSize\", obj.isAutoHeightSize());\n            wm.putBoolean(\"isDynamicSize\", obj.isDynamicSize());\n            wm.putBoolean(\"isFullWidthSize\", obj.isFullWidthSize());\n        }\n        return wm;\n    }\n\n    public static BannerAdSize getBannerAdSizeFromReadableMap(Context context, String bannerAdSize) {\n        if (bannerAdSize == null || context == null) {\n            return BannerAdSize.BANNER_SIZE_SMART;\n        }\n\n        switch (HMSAdsBannerView.BannerSize.forValue(bannerAdSize)) {\n            case B_DYNAMIC:\n                return BannerAdSize.BANNER_SIZE_DYNAMIC;\n            case B_INVALID:\n                return BannerAdSize.BANNER_SIZE_INVALID;\n            case B_300_250:\n                return BannerAdSize.BANNER_SIZE_300_250;\n            case B_320_50:\n                return BannerAdSize.BANNER_SIZE_320_50;\n            case B_320_100:\n                return BannerAdSize.BANNER_SIZE_320_100;\n            case B_360_57:\n                return BannerAdSize.BANNER_SIZE_360_57;\n            case B_360_144:\n                return BannerAdSize.BANNER_SIZE_360_144;\n            default:\n                break;\n        }\n\n        return BannerAdSize.BANNER_SIZE_SMART;\n    }\n\n    public static AdSize getAdSizeFromReadableMap(ReadableMap rm) {\n        if (rm != null && ReactUtils.hasValidKey(rm, \"height\", ReadableType.Number) && ReactUtils.hasValidKey(rm,\n            \"width\", ReadableType.Number)) {\n            return new AdSize(rm.getInt(\"height\"), rm.getInt(\"width\"));\n        }\n        return new AdSize(0, 0);\n    }\n\n    public static WritableMap getWritableMapFromVideoConfiguration(VideoConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"audioFocusType\", obj.getAudioFocusType());\n            wm.putBoolean(\"isCustomizeOperateRequested\", obj.isCustomizeOperateRequested());\n            wm.putBoolean(\"isClickToFullScreenRequested\", obj.isClickToFullScreenRequested());\n            wm.putBoolean(\"isStartMuted\", obj.isStartMuted());\n            wm.putInt(\"autoPlayNetWork\", obj.getAutoPlayNetwork());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAdConfiguration(NativeAdConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"adSize\", getWritableMapFromAdSize(obj.getAdSize()));\n            wm.putInt(\"choicesPosition\", obj.getChoicesPosition());\n            wm.putInt(\"mediaDirection\", obj.getMediaDirection());\n            wm.putInt(\"mediaAspect\", obj.getMediaAspect());\n            wm.putMap(\"videoConfiguration\", getWritableMapFromVideoConfiguration(obj.getVideoConfiguration()));\n            wm.putBoolean(\"isRequestMultiImages\", obj.isRequestMultiImages());\n            wm.putBoolean(\"isReturnUrlsForImages\", obj.isReturnUrlsForImages());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAdLoader(NativeAdLoader obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putBoolean(\"isLoading\", obj.isLoading());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdvertisingIdClientInfo(AdvertisingIdClient.Info obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"id\", obj.getId());\n            wm.putBoolean(\"isLimitAdTrackingEnabled\", obj.isLimitAdTrackingEnabled());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromReferrerDetails(ReferrerDetails obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"installReferrer\", obj.getInstallReferrer());\n            wm.putString(\"installChannel\", obj.getInstallChannel());\n            wm.putDouble(\"installBeginTimestampMillisecond\", obj.getInstallBeginTimestampMillisecond());\n            wm.putDouble(\"installBeginTimestampSeconds\", obj.getInstallBeginTimestampSeconds());\n            wm.putDouble(\"referrerClickTimestampMillisecond\", obj.getReferrerClickTimestampMillisecond());\n            wm.putDouble(\"referrerClickTimestampSeconds\", obj.getReferrerClickTimestampSeconds());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromRequestOptions(RequestOptions requestOptions) {\n        WritableMap wm = new WritableNativeMap();\n        if (requestOptions != null) {\n            if (requestOptions.getAdContentClassification() != null) {\n                wm.putString(\"adContentClassification\", requestOptions.getAdContentClassification());\n            }\n            if (requestOptions.getAppCountry() != null) {\n                wm.putString(\"appCountry\", requestOptions.getAppCountry());\n            }\n            if (requestOptions.getAppLang() != null) {\n                wm.putString(\"appLang\", requestOptions.getAppLang());\n            }\n            if (requestOptions.getNonPersonalizedAd() != null) {\n                wm.putInt(\"nonPersonalizedAd\", requestOptions.getNonPersonalizedAd());\n            }\n            if (requestOptions.getTagForChildProtection() != null) {\n                wm.putInt(\"tagForChildProtection\", requestOptions.getTagForChildProtection());\n            }\n            if (requestOptions.getTagForUnderAgeOfPromise() != null) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", requestOptions.getTagForUnderAgeOfPromise());\n            }\n        }\n        return wm;\n    }\n\n    public static RequestOptions getRequestOptionsFromReadableMap(ReadableMap rm) {\n        RequestOptions.Builder requestOptions = new RequestOptions.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                requestOptions.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                requestOptions.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                requestOptions.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                requestOptions.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                requestOptions.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                requestOptions.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                requestOptions.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if(hasValidKey(rm,\"tMax\", ReadableType.Number)) {\n                requestOptions.setTMax(rm.getInt(\"tMax\"));\n            }\n            if(hasValidKey(rm, \"biddingParam\", ReadableType.Map) && hasValidKey(rm, \"slotId\", ReadableType.String)) {\n                requestOptions.addBiddingParamMap(rm.getString(\"slotId\"), fromReadableMapToBiddingParam(rm.getMap(\"biddingParam\")));\n            }\n            if(hasValidKey(rm, \"biddingParamMap\", ReadableType.Map)){\n                requestOptions.setBiddingParamMap(fromReadableMapToBiddingParamMap(rm.getMap(\"biddingParamMap\")));\n            }\n        }\n        return requestOptions.build();\n    }\n\n    public static AdParam getAdParamFromReadableMap(ReadableMap rm) {\n        AdParam.Builder obj = new AdParam.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                obj.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"belongCountryCode\", ReadableType.String)) {\n                obj.setBelongCountryCode(rm.getString(\"belongCountryCode\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                obj.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"gender\", ReadableType.Number)) {\n                obj.setGender(rm.getInt(\"gender\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                obj.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                obj.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"requestOrigin\", ReadableType.String)) {\n                obj.setRequestOrigin(rm.getString(\"requestOrigin\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                obj.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                obj.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"targetingContentUrl\", ReadableType.String)) {\n                obj.setTargetingContentUrl(rm.getString(\"targetingContentUrl\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                obj.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if (hasValidKey(rm, \"detailedCreativeTypes\", ReadableType.Array)) {\n                obj.setDetailedCreativeTypeList(fromReadableArrayToListInteger(rm.getArray(\"detailedCreativeTypes\")));\n            }\n            if (hasValidKey(rm, \"contentBundle\", ReadableType.String)) {\n                obj.setContentBundle(rm.getString(\"contentBundle\"));\n            }\n            if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n                obj.setLocation(fromReadableMapToLocation(rm.getMap(\"location\")));\n            }\n            if(hasValidKey(rm,\"tMax\", ReadableType.Number)) {\n                obj.setTMax(rm.getInt(\"tMax\"));\n            }\n            if(hasValidKey(rm, \"biddingParam\", ReadableType.Map) && hasValidKey(rm, \"slotId\", ReadableType.String)) {\n                obj.addBiddingParamMap(rm.getString(\"slotId\"), fromReadableMapToBiddingParam(rm.getMap(\"biddingParam\")));\n            }\n            if(hasValidKey(rm, \"biddingParamMap\", ReadableType.Map)){\n                obj.setBiddingParamMap(fromReadableMapToBiddingParamMap(rm.getMap(\"biddingParamMap\")));\n            }\n        }\n        return obj.build();\n    }\n\n    public static WritableMap getWritableMapFromAdParamBundle(Bundle obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            if (obj.containsKey(\"adContentClassification\")) {\n                wm.putString(\"adContentClassification\", obj.getString(\"adContentClassification\"));\n            }\n            if (obj.containsKey(\"appCountry\")) {\n                wm.putString(\"appCountry\", obj.getString(\"appCountry\"));\n            }\n            if (obj.containsKey(\"appLang\")) {\n                wm.putString(\"appLang\", obj.getString(\"appLang\"));\n            }\n            if (obj.containsKey(\"belongCountryCode\")) {\n                wm.putString(\"belongCountryCode\", obj.getString(\"belongCountryCode\"));\n            }\n            if (obj.containsKey(\"gender\")) {\n                wm.putInt(\"gender\", obj.getInt(\"gender\"));\n            }\n            if (obj.containsKey(\"nonPersonalizedAd\")) {\n                wm.putInt(\"nonPersonalizedAd\", obj.getInt(\"nonPersonalizedAd\"));\n            }\n            if (obj.containsKey(\"requestOrigin\")) {\n                wm.putString(\"requestOrigin\", obj.getString(\"requestOrigin\"));\n            }\n            if (obj.containsKey(\"tagForChildProtection\")) {\n                wm.putInt(\"tagForChildProtection\", obj.getInt(\"tagForChildProtection\"));\n            }\n            if (obj.containsKey(\"tagForUnderAgeOfPromise\")) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", obj.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (obj.containsKey(\"targetingContentUrl\")) {\n                wm.putString(\"targetingContentUrl\", obj.getString(\"targetingContentUrl\"));\n            }\n        }\n        return wm;\n    }\n\n    public static VastSdkConfiguration getVastSdkConfigurationFromReadableMap(ReadableMap rm) {\n        VastSdkConfiguration vastSdkConfiguration = SdkFactory.getConfiguration();\n        if (rm != null) {\n            if (hasValidKey(rm, \"httpCallTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpCallTimeoutMs(rm.getInt(\"httpCallTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"httpConnectTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpConnectTimeoutMs(rm.getInt(\"httpConnectTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"httpKeepAliveDurationMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpKeepAliveDurationMs(rm.getInt(\"httpKeepAliveDurationMs\"));\n            }\n            if (hasValidKey(rm, \"httpReadTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpReadTimeoutMs(rm.getInt(\"httpReadTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"maxHttpConnections\", ReadableType.Number)) {\n                vastSdkConfiguration.setMaxHttpConnections(rm.getInt(\"maxHttpConnections\"));\n            }\n            if (hasValidKey(rm, \"maxRedirectWrapperLimit\", ReadableType.Number)) {\n                vastSdkConfiguration.setMaxRedirectWrapperLimit(rm.getInt(\"maxRedirectWrapperLimit\"));\n            }\n            if (hasValidKey(rm, \"isTest\", ReadableType.Boolean)) {\n                vastSdkConfiguration.setTest(rm.getBoolean(\"isTest\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryBatchSize\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryBatchSize(rm.getInt(\"vastEventRetryBatchSize\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryIntervalSeconds\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryIntervalSeconds(rm.getInt(\"vastEventRetryIntervalSeconds\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryUploadTimes\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryUploadTimes(rm.getInt(\"vastEventRetryUploadTimes\"));\n            }\n        }\n        return vastSdkConfiguration;\n    }\n\n    public static WritableMap getWritableMapFromVastSdkConfiguration(VastSdkConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"httpCallTimeoutMs\", obj.getHttpCallTimeoutMs());\n            wm.putInt(\"httpConnectTimeoutMs\", obj.getHttpConnectTimeoutMs());\n            wm.putInt(\"httpKeepAliveDurationMs\", obj.getHttpKeepAliveDurationMs());\n            wm.putInt(\"httpReadTimeoutMs\", obj.getHttpReadTimeoutMs());\n            wm.putInt(\"maxHttpConnections\", obj.getMaxHttpConnections());\n            wm.putInt(\"maxRedirectWrapperLimit\", obj.getMaxRedirectWrapperLimit());\n            wm.putInt(\"vastEventRetryBatchSize\", obj.getVastEventRetryBatchSize());\n            wm.putInt(\"vastEventRetryIntervalSeconds\", obj.getVastEventRetryIntervalSeconds());\n            wm.putInt(\"vastEventRetryUploadTimes\", obj.getVastEventRetryUploadTimes());\n            wm.putBoolean(\"isTest\", obj.isTest());\n        }\n        return wm;\n    }\n\n    public static Location fromReadableMapToLocation(ReadableMap rm) {\n        Location location = new Location(\"\");\n\n        if (hasValidKey(rm, \"lat\", ReadableType.Number)) {\n            location.setLatitude(rm.getInt(\"lat\"));\n        }\n        if (hasValidKey(rm, \"lng\", ReadableType.Number)) {\n            location.setLatitude(rm.getInt(\"lng\"));\n        }\n\n        return location;\n    }\n\n    public static BiddingParam fromReadableMapToBiddingParam(ReadableMap rm) {\n        BiddingParam.Builder builder = new BiddingParam.Builder();\n        BiddingParam biddingParam;\n\n        if(hasValidKey(rm,\"bidFloor\", ReadableType.Number)){\n            builder.setBidFloor((float) rm.getDouble(\"bidFloor\"));\n        }\n        if(hasValidKey(rm, \"bidFloorCur\", ReadableType.String)){\n            builder.setBidFloorCur(rm.getString(\"bidFloorCur\"));\n        }\n        if(hasValidKey(rm, \"bpkgName\", ReadableType.Array)){\n            List<String> bpkgNameList = new ArrayList<>();\n\n            for(int i=0; i< Objects.requireNonNull(rm.getArray(\"bpkgName\")).size(); i++){\n                bpkgNameList.add(Objects.requireNonNull(rm.getArray(\"bpkgName\")).getString(i));\n            }\n\n            builder.setBpkgName(bpkgNameList);\n        }\n\n        biddingParam = builder.build();\n\n        return biddingParam;\n    }\n\n    public static Map<String, BiddingParam> fromReadableMapToBiddingParamMap(ReadableMap rm){\n        Map<String, BiddingParam> biddingParamMap = new HashMap<>();\n\n        ReadableMapKeySetIterator iterator = rm.keySetIterator();\n        while(iterator.hasNextKey()){\n            String key = iterator.nextKey();\n            ReadableMap paramMap = rm.getMap(key);\n\n            BiddingParam.Builder builder = new BiddingParam.Builder();\n\n            if(hasValidKey(rm,\"bidFloor\", ReadableType.Number)){\n                builder.setBidFloor((float) rm.getDouble(\"bidFloor\"));\n            }\n            if(hasValidKey(rm, \"bidFloorCur\", ReadableType.String)){\n                builder.setBidFloorCur(rm.getString(\"bidFloorCur\"));\n            }\n            if(hasValidKey(rm, \"bpkgName\", ReadableType.Array)){\n                List<String> bpkgNameList = new ArrayList<>();\n\n                for(int i=0; i< Objects.requireNonNull(rm.getArray(\"bpkgName\")).size(); i++){\n                    bpkgNameList.add(Objects.requireNonNull(rm.getArray(\"bpkgName\")).getString(i));\n                }\n\n                builder.setBpkgName(bpkgNameList);\n            }\n\n            BiddingParam biddingParam = builder.build();\n            biddingParamMap.put(key,biddingParam);\n        }\n        return biddingParamMap;\n    }\n\n    public static List<Integer> fromReadableArrayToListInteger(ReadableArray arr) {\n        List<Integer> detailedCreativeTypeList = new ArrayList<>();\n\n        if (arr != null) {\n            for (int i = 0; i < arr.size(); i++) {\n                detailedCreativeTypeList.add(arr.getInt(i));\n            }\n        }\n        return detailedCreativeTypeList;\n    }\n\n    public static Map<String, Object> getExportedCustomDirectEventTypeConstantsFromEvents(NamedEvent[] eventList) {\n        Map<String, Object> obj = new ArrayMap<>();\n        for (NamedEvent event : eventList) {\n            obj.put(event.getName(), MapBuilder.of(\"registrationName\", event.getName()));\n        }\n        return obj;\n    }\n\n    public static Map<String, Integer> getCommandsMap(NamedCommand[] commandList) {\n        Map<String, Integer> obj = new ArrayMap<>();\n        for (int i = 0; i < commandList.length; i++) {\n            obj.put(commandList[i].getName(), i);\n        }\n        return obj;\n    }\n\n    public static Bundle getBundleFromReadableMap(ReadableMap rm) {\n        Bundle obj = new Bundle();\n        if (rm != null) {\n            obj.putSerializable(\"data\", rm.toHashMap());\n        }\n        return obj;\n    }\n\n    public static com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions getVastRequestOptionsFromReadableMap(\n        ReadableMap rm) {\n        com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions.Builder vastRequestOptions\n            = new com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                vastRequestOptions.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                vastRequestOptions.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                vastRequestOptions.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                vastRequestOptions.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                vastRequestOptions.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                vastRequestOptions.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                vastRequestOptions.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if (hasValidKey(rm, \"consent\", ReadableType.String)) {\n                vastRequestOptions.setConsent(rm.getString(\"consent\"));\n            }\n        }\n        return vastRequestOptions.build();\n    }\n\n    public static PlayerConfig getPlayerConfigsFromReadableMap(ReadableMap rm) {\n        PlayerConfig.Builder obj = PlayerConfig.newBuilder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"enableRotation\", ReadableType.Boolean)) {\n                obj.setEnableRotation(rm.getBoolean(\"enableRotation\"));\n            }\n            if (hasValidKey(rm, \"isEnableCutout\", ReadableType.Boolean)) {\n                obj.setIsEnableCutout(rm.getBoolean(\"isEnableCutout\"));\n            }\n            if (hasValidKey(rm, \"skipLinearAd\", ReadableType.Boolean)) {\n                obj.setSkipLinearAd(rm.getBoolean(\"skipLinearAd\"));\n            }\n            if (hasValidKey(rm, \"isEnablePortrait\", ReadableType.Boolean)) {\n                obj.setIsEnablePortrait(rm.getBoolean(\"isEnablePortrait\"));\n            }\n        }\n        return obj.build();\n    }\n\n    public static CreativeMatchStrategy.CreativeMatchType toCreativeMatchType(int creativeMatchType) {\n        switch (HMSAdsVastView.CreativeMatchType.forValue(creativeMatchType)) {\n            case EXACT:\n                return CreativeMatchStrategy.CreativeMatchType.EXACT;\n            case SMART:\n                return CreativeMatchStrategy.CreativeMatchType.SMART;\n            case UNKNOWN:\n                return CreativeMatchStrategy.CreativeMatchType.UNKNOWN;\n            case LANDSCAPE:\n                return CreativeMatchStrategy.CreativeMatchType.LANDSCAPE;\n            case PORTRAIT:\n                return CreativeMatchStrategy.CreativeMatchType.PORTRAIT;\n            default:\n                break;\n        }\n        return CreativeMatchStrategy.CreativeMatchType.ANY;\n    }\n\n    public static LinearAdSlot getLinearAdSlotFromReadableMap(ReadableMap rm) {\n        LinearAdSlot linearAdSlot = new LinearAdSlot();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adId\", ReadableType.String)) {\n                linearAdSlot.setSlotId(rm.getString(\"adId\"));\n            }\n            if (hasValidKey(rm, \"totalDuration\", ReadableType.Number)) {\n                linearAdSlot.setTotalDuration(rm.getInt(\"totalDuration\"));\n            }\n            if (hasValidKey(rm, \"allowMobileTraffic\", ReadableType.Boolean)) {\n                linearAdSlot.setAllowMobileTraffic(rm.getBoolean(\"allowMobileTraffic\"));\n            }\n            if (hasValidKey(rm, \"adOrientation\", ReadableType.Number)) {\n                linearAdSlot.setOrientation(rm.getInt(\"adOrientation\"));\n            }\n            if (hasValidKey(rm, \"creativeMatchStrategy\", ReadableType.Number)) {\n                CreativeMatchStrategy creativeMatchStrategy = new CreativeMatchStrategy(\n                    toCreativeMatchType(rm.getInt(\"creativeMatchStrategy\")));\n                linearAdSlot.setCreativeMatchStrategy(creativeMatchStrategy);\n            }\n            if (hasValidKey(rm, \"requestOption\", ReadableType.Map)) {\n                linearAdSlot.setRequestOptions(getVastRequestOptionsFromReadableMap(rm.getMap(\"requestOption\")));\n            }\n            if (hasValidKey(rm, \"size\", ReadableType.Map)) {\n                linearAdSlot.setSize(Objects.requireNonNull(rm.getMap(\"size\")).getInt(\"width\"),\n                    Objects.requireNonNull(rm.getMap(\"size\")).getInt(\"height\"));\n            }\n            if (hasValidKey(rm, \"maxAdPods\", ReadableType.Number)) {\n                linearAdSlot.setMaxAdPods(rm.getInt(\"maxAdPods\"));\n            }\n        }\n        return linearAdSlot;\n    }\n\n    public static WritableMap getWritableMapFromPlayerConfig(PlayerConfig obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putBoolean(\"isEnableRotation\", obj.isEnableRotation());\n            wm.putBoolean(\"isSkipLinearAd\", obj.isSkipLinearAd());\n            wm.putBoolean(\"isEnableCutout\", obj.isEnableCutout());\n            wm.putBoolean(\"isEnablePortrait\", obj.isEnablePortrait());\n            wm.putBoolean(\"isForceMute\", obj.isForceMute());\n            wm.putBoolean(\"isIndustryIconShow\", obj.isIndustryIconShow());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastAdPlayerConfigs(ReactContext mReactContext) {\n        VastAdPlayer vastAdPlayer = VastAdPlayer.getInstance();\n        WritableMap wm = new WritableNativeMap();\n        if (mReactContext != null) {\n            wm.putMap(\"playerConfigs\", getWritableMapFromPlayerConfig(vastAdPlayer.getConfig()));\n            wm.putBoolean(\"isLinearAdShown\", vastAdPlayer.isLinearAdShown());\n            wm.putBoolean(\"isLinearPlaying\", vastAdPlayer.isLinearPlaying());\n            wm.putBoolean(\"isNonlinearPlaying\", vastAdPlayer.isNonlinearPlaying());\n            wm.putBoolean(\"onBackPressed\", vastAdPlayer.onBackPressed(mReactContext.getCurrentActivity()));\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCreativeMatchTStrategy(CreativeMatchStrategy obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"creativeMatchType\", obj.getCreativeMatchType().getCode());\n\n            if (obj.expectedCreativeHeight != null) {\n                wm.putInt(\"height\", obj.expectedCreativeHeight);\n            }\n            if (obj.expectedCreativeWidth != null) {\n                wm.putInt(\"height\", obj.expectedCreativeWidth);\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromLinearAdSlot(LinearAdSlot obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"creativeMatchStrategy\",\n                getWritableMapFromCreativeMatchTStrategy(obj.getCreativeMatchStrategy()));\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n            wm.putInt(\"maxAdPods\", obj.getMaxAdPods());\n            wm.putInt(\"orientation\", obj.getOrientation());\n            wm.putMap(\"requestOptions\", getWritableMapFromVastRequestOptions(obj.getRequestOptions()));\n            wm.putInt(\"totalDuration\", obj.getTotalDuration());\n            wm.putBoolean(\"isAllowMobileTraffic\", obj.isAllowMobileTraffic());\n            if (obj.getSlotId() != null) {\n                wm.putString(\"slotId\", obj.getSlotId());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastRequestOptions(\n        com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions vastRequestOptions) {\n        WritableMap wm = new WritableNativeMap();\n        if (vastRequestOptions != null) {\n            if (vastRequestOptions.getAdContentClassification() != null) {\n                wm.putString(\"adContentClassification\", vastRequestOptions.getAdContentClassification());\n            }\n            if (vastRequestOptions.getAppCountry() != null) {\n                wm.putString(\"appCountry\", vastRequestOptions.getAppCountry());\n            }\n            if (vastRequestOptions.getAppLang() != null) {\n                wm.putString(\"appLang\", vastRequestOptions.getAppLang());\n            }\n            if (vastRequestOptions.getConsent() != null) {\n                wm.putString(\"consent\", vastRequestOptions.getConsent());\n            }\n            if (vastRequestOptions.getNonPersonalizedAd() != null) {\n                wm.putInt(\"nonPersonalizedAd\", vastRequestOptions.getNonPersonalizedAd());\n            }\n            if (vastRequestOptions.getTagForChildProtection() != null) {\n                wm.putInt(\"tagForChildProtection\", vastRequestOptions.getTagForChildProtection());\n            }\n            if (vastRequestOptions.getTagForUnderAgeOfPromise() != null) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", vastRequestOptions.getTagForUnderAgeOfPromise());\n            }\n            wm.putBoolean(\"isRequestLocation\", vastRequestOptions.isRequestLocation());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdsData(AdsData obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putArray(\"linearAdCreatives\",\n                mapList(obj.getLinearCreations(), ReactUtils::getWritableMapFromLinearCreative));\n            wm.putArray(\"backupAdCreatives\",\n                mapList(obj.getBackUpCreation(), ReactUtils::getWritableMapFromLinearCreative));\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromLinearCreative(LinearCreative obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"adExtensions\", getWritableMapFromCreativeExtensionMap(obj.getAdExtensionMap()));\n            wm.putMap(\"typeToCreativeExtensions\",\n                getWritableMapFromCreativeExtensionMap(obj.getTypeToCreativeExtension()));\n            wm.putString(\"contentId\", obj.getContentId());\n            wm.putString(\"requestId\", obj.getRequestId());\n            wm.putString(\"showId\", obj.getShowId());\n            wm.putString(\"slotId\", obj.getSlotId());\n            wm.putString(\"type\", obj.getType());\n            wm.putString(\"url\", obj.getUrl());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCreativeExtensionMap(Map<String, CreativeExtension> map) {\n        WritableMap wm = new WritableNativeMap();\n        Iterator<Map.Entry<String, CreativeExtension>> it = map.entrySet().iterator();\n        while (it.hasNext()) {\n            Map.Entry<String, CreativeExtension> pair = it.next();\n            wm.putString(pair.getKey(), pair.getValue().getValue());\n        }\n        return wm;\n    }\n}"
  },
  {
    "path": "react-native-hms-ads/android/src/main/java/com/huawei/hms/rn/ads/utils/ResourceUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport androidx.annotation.NonNull;\n\nimport android.content.Context;\nimport android.util.Log;\n\npublic class ResourceUtils {\n    private static final String TAG = ResourceUtils.class.getSimpleName();\n\n    public static int getStringResourceIdFromContext(@NonNull Context context, String resName) {\n        final int stringRes = context.getResources().getIdentifier(resName, \"string\", context.getPackageName());\n        if (stringRes == 0) {\n            Log.e(TAG, \"The 'R.string.\" + resName + \" value it's not defined in your project's resources file.\");\n        }\n        return stringRes;\n    }\n\n    public static int getLogoResourceIdFromContext(@NonNull Context context, String resName) {\n        final int mipmapResId = context.getResources().getIdentifier(resName, \"mipmap\", context.getPackageName());\n        final int drawableResId = context.getResources().getIdentifier(resName, \"drawable\", context.getPackageName());\n        if (mipmapResId == 0 && drawableResId == 0) {\n            Log.e(TAG, \"The 'R.mipmap.\" + resName + \" or 'R.drawable.\" + resName + \" it's not defined in your \" +\n                    \"project's resources file.\");\n        }\n        return mipmapResId != 0 ? mipmapResId : drawableResId;\n    }\n\n    public static int getLayoutResourceIdFromContext(@NonNull Context context, String resName) {\n        final int layoutResId = context.getResources().getIdentifier(resName, \"layout\", context.getPackageName());\n        if (layoutResId == 0) {\n            Log.e(TAG, \"The 'R.layout.\" + resName + \" value it's not defined in your project's resources file.\");\n        }\n        return layoutResId;\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/drawable/native_button_rounded_corners_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#CCCCCC\" />\n\n    <padding\n        android:bottom=\"1dp\"\n        android:left=\"1dp\"\n        android:right=\"1dp\"\n        android:top=\"1dp\" />\n\n    <corners\n        android:bottomLeftRadius=\"20dp\"\n        android:bottomRightRadius=\"20dp\"\n        android:topLeftRadius=\"20dp\"\n        android:topRightRadius=\"20dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/drawable/native_flag_rounded_corners_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#CCCCCC\" />\n\n    <padding\n        android:bottom=\"1dp\"\n        android:left=\"1dp\"\n        android:right=\"1dp\"\n        android:top=\"1dp\" />\n\n    <corners\n        android:bottomLeftRadius=\"2dp\"\n        android:bottomRightRadius=\"2dp\"\n        android:topLeftRadius=\"2dp\"\n        android:topRightRadius=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/activity_splash.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <RelativeLayout\n        android:id=\"@+id/logo\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"100dp\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/white\"\n        android:visibility=\"visible\">\n\n        <LinearLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentBottom=\"true\"\n            android:layout_centerHorizontal=\"true\"\n            android:layout_marginBottom=\"39dp\"\n            android:orientation=\"vertical\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:layout_marginBottom=\"6dp\"\n                android:gravity=\"center\"\n                android:orientation=\"horizontal\">\n\n                <ImageView\n                    android:id=\"@+id/image_logo\"\n                    android:layout_width=\"28dp\"\n                    android:layout_height=\"28dp\"\n                    android:background=\"@drawable/ic_launcher\" />\n\n                <View\n                    android:layout_width=\"0.5dp\"\n                    android:layout_height=\"18dp\"\n                    android:layout_marginLeft=\"12dp\"\n                    android:layout_marginRight=\"12dp\"\n                    android:alpha=\"0.1\"\n                    android:background=\"#000000\" />\n\n                <TextView\n                    android:id=\"@+id/text_logo\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:alpha=\"1\"\n                    android:textColor=\"#000000\"\n                    android:textSize=\"16sp\" />\n            </LinearLayout>\n\n            <TextView\n                android:id=\"@+id/text_copyright\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:alpha=\"0.5\"\n                android:textColor=\"#000000\"\n                android:textSize=\"8sp\" />\n        </LinearLayout>\n    </RelativeLayout>\n\n    <com.huawei.hms.ads.splash.SplashView\n        android:id=\"@+id/splash_ad_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_above=\"@id/logo\" />\n\n</RelativeLayout>\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/activity_video_player.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/cl_content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <Button\n        android:id=\"@+id/demo_bt_play\"\n        android:layout_width=\"60dp\"\n        android:layout_height=\"60dp\"\n        android:background=\"@android:color/holo_red_dark\"\n        android:text=\"@string/demo_bt_play_video\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_alignParentBottom=\"true\" />\n\n    <CheckBox\n        android:id=\"@+id/demo_bt_voice\"\n        android:layout_width=\"60dp\"\n        android:layout_height=\"60dp\"\n        android:background=\"@android:color/holo_green_dark\"\n        android:layout_marginStart=\"20dp\"\n        android:text=\"@string/demo_custom_view_voice\"\n        android:gravity=\"center\"\n        android:button=\"@null\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_toEndOf=\"@id/demo_bt_play\" />\n\n    <Button\n        android:id=\"@+id/demo_bt_detail\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"40dp\"\n        android:text=\"@string/demo_custom_ad_detail\"\n        android:background=\"@android:color/holo_blue_dark\"\n        android:layout_marginEnd=\"20dp\"\n        android:layout_alignBottom=\"@id/demo_bt_full_screen\"\n        android:layout_alignTop=\"@id/demo_bt_full_screen\"\n        android:layout_alignEnd=\"@id/demo_bt_full_screen\" />\n\n    <Button\n        android:id=\"@+id/demo_bt_full_screen\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"60dp\"\n        android:text=\"@string/demo_custom_full_screen\"\n        android:background=\"@android:color/darker_gray\"\n        android:layout_alignParentTop=\"true\"\n        android:layout_alignParentEnd=\"true\" />\n</RelativeLayout>"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/button_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <Button\n        android:id=\"@+id/ad_call_to_actionx\"\n        android:layout_width=\"72dp\"\n        android:layout_height=\"26dp\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_marginTop=\"23dp\"\n        android:layout_marginEnd=\"52dp\"\n        android:layout_marginBottom=\"23dp\"\n        android:background=\"@drawable/native_button_rounded_corners_shape\"\n        android:textColor=\"#FFFFFF\"\n        android:textSize=\"10sp\" />\n</LinearLayout>\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/media_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:id=\"@+id/media_view_container\">\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center_vertical\">\n\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/media_view_id\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_gravity=\"center_horizontal\"\n            android:layout_marginStart=\"0dp\"\n            android:layout_marginTop=\"0dp\"\n            android:layout_marginEnd=\"0dp\"\n            android:layout_marginBottom=\"0dp\" />\n\n    </RelativeLayout>\n</LinearLayout>\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/native_small_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.ads.nativead.NativeView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/native_small_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_centerInParent=\"true\"\n    android:background=\"#FFFFFF\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:id=\"@+id/background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentTop=\"true\"\n        android:orientation=\"vertical\">\n\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/ad_media\"\n            android:layout_width=\"89dp\"\n            android:layout_height=\"60dp\"\n            android:layout_marginStart=\"8dp\"\n            android:layout_marginTop=\"12dp\"\n            android:layout_marginBottom=\"12dp\"\n            android:background=\"#8BC34A\" />\n\n        <RelativeLayout\n            android:id=\"@+id/center_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"107dp\"\n            android:layout_marginTop=\"8dp\"\n            android:layout_marginEnd=\"16dp\"\n            android:layout_marginBottom=\"8dp\"\n            android:background=\"#FFFFFF\">\n\n            <TextView\n                android:id=\"@+id/ad_title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"28dp\"\n                android:layout_marginBottom=\"16dp\"\n                android:alpha=\"1\"\n                android:textColor=\"#000000\"\n                android:textSize=\"@dimen/hiad_text_13_sp\" />\n\n            <TextView\n                android:id=\"@+id/ad_source\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"14dp\"\n                android:layout_marginTop=\"36dp\"\n                android:alpha=\"0.6\"\n                android:maxWidth=\"132dp\"\n                android:textColor=\"#666666\"\n                android:textSize=\"@dimen/hiad_text_9_sp\" />\n\n            <TextView\n                android:id=\"@+id/ad_flag\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"14dp\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"36dp\"\n                android:layout_toEndOf=\"@+id/ad_source\"\n                android:background=\"@drawable/native_flag_rounded_corners_shape\"\n                android:gravity=\"center\"\n                android:text=\"Ad\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"8sp\"\n                android:textStyle=\"bold\" />\n\n\n            <TextView\n                android:id=\"@+id/ad_description\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:ellipsize=\"end\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"30dp\"\n                android:layout_toEndOf=\"@+id/ad_flag\"\n                android:lines=\"2\"\n                android:text=\"Huawei Ad Description\"\n                android:textSize=\"10sp\"/>\n\n            <Button\n                android:id=\"@+id/ad_call_to_action\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_marginTop=\"20dp\"\n                android:paddingLeft=\"2dp\"\n                android:paddingRight=\"2dp\"\n                android:background=\"@drawable/native_button_rounded_corners_shape\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"6sp\" />\n        </RelativeLayout>\n    </RelativeLayout>\n</com.huawei.hms.ads.nativead.NativeView>\n\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/native_video_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.ads.nativead.NativeView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/native_video_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_centerInParent=\"true\"\n    android:background=\"#FFFFFF\"\n    android:orientation=\"vertical\">\n    <RelativeLayout\n        android:id=\"@+id/background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/ad_media\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n        <RelativeLayout\n            android:id=\"@+id/left_bottom_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/ad_media\">\n            <TextView\n                android:id=\"@+id/ad_title\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginStart=\"24dp\"\n                android:layout_marginTop=\"16dp\"\n                android:alpha=\"1\"\n                android:textColor=\"#000000\"\n                android:textSize=\"@dimen/hiad_text_13_sp\" />\n            <TextView\n                android:id=\"@+id/ad_source\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"19dp\"\n                android:layout_below=\"@id/ad_title\"\n                android:layout_marginStart=\"24dp\"\n                android:layout_marginTop=\"2dp\"\n                android:alpha=\"0.6\"\n                android:maxWidth=\"158dp\"\n                android:textColor=\"#666666\"\n                android:textSize=\"@dimen/hiad_text_12_sp\" />\n            <TextView\n                android:id=\"@+id/ad_flag\"\n                android:layout_width=\"20dp\"\n                android:layout_height=\"14dp\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"40dp\"\n                android:layout_toEndOf=\"@+id/ad_source\"\n                android:background=\"@drawable/native_flag_rounded_corners_shape\"\n                android:gravity=\"center\"\n                android:text=\"Ad\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"8sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:id=\"@+id/ad_description\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:ellipsize=\"end\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"40dp\"\n                android:layout_toEndOf=\"@+id/ad_flag\"\n                android:lines=\"2\"\n                android:text=\"Huawei Ad Description\"\n                android:textSize=\"10sp\"/>\n        </RelativeLayout>\n        <RelativeLayout\n            android:id=\"@+id/right_bottom_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/ad_media\"\n            android:layout_alignParentEnd=\"true\">\n            <Button\n                android:id=\"@+id/ad_call_to_action\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_marginTop=\"23dp\"\n                android:layout_marginEnd=\"16dp\"\n                android:layout_marginBottom=\"23dp\"\n                android:background=\"@drawable/native_button_rounded_corners_shape\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"10sp\" />\n        </RelativeLayout>\n    </RelativeLayout>\n</com.huawei.hms.ads.nativead.NativeView>\n"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/layout/vast_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.rn.ads.HMSAdsVastView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <FrameLayout\n        android:id=\"@+id/fl_linear_ad\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"250dp\"\n        android:background=\"@android:color/black\"\n        android:visibility=\"gone\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_alignParentTop=\"true\" />\n\n    <ProgressBar\n        android:id=\"@+id/progress\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"gone\" />\n</com.huawei.hms.rn.ads.HMSAdsVastView>"
  },
  {
    "path": "react-native-hms-ads/android/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"demo_bt_play_video\">Play a video.</string>\n    <string name=\"demo_custom_view_voice\">Voice</string>\n    <string name=\"demo_custom_full_screen\">Full-screen</string>\n    <string name=\"demo_custom_ad_detail\">Ad details</string>\n</resources>"
  },
  {
    "path": "react-native-hms-ads/example/App.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport {\n  SafeAreaView,\n  StyleSheet,\n  ScrollView,\n  View,\n  Text,\n  StatusBar,\n  Button,\n  Modal,\n  BackHandler,\n  ToastAndroid,\n  LogBox,\n} from \"react-native\";\nimport {Picker} from \"@react-native-picker/picker\";\n\nimport { Colors } from \"react-native/Libraries/NewAppScreen\";\nimport HMSAds, {\n  HMSBanner,\n  HMSInstream,\n  HMSNative,\n  HMSVastView,\n  HMSVast,\n  HMSInterstitial,\n  HMSOaid,\n  HMSInstallReferrer,\n  HMSSplash,\n  HMSReward,\n} from \"@hmscore/react-native-hms-ads\";\n\nLogBox.ignoreLogs(['EventEmitter']);\n\nconst toast = (tag, message) => {\n  ToastAndroid.show(tag, ToastAndroid.SHORT);\n  message ? console.log(tag, message) : console.log(tag);\n};\n\nlet adBannerElement;\nlet adInstreamElement;\nlet adNativeElement;\nlet adVastElement;\n\nclass Banner extends React.Component {\n  constructor(props) {\n    super(props);\n    bannerAdIds = {};\n    bannerAdIds[HMSAds.BannerMediaTypes.IMAGE] = \"testw6vs28auh3\";\n    this.state = {\n      bannerAdSize: HMSAds.BannerAdSizes.B_320_100,\n      adId: bannerAdIds[HMSAds.BannerMediaTypes.IMAGE],\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select ad size\"\n            selectedValue={this.state.bannerAdSize}\n            onValueChange={(itemValue) => {\n              this.setState({\n                bannerAdSize: itemValue,\n              });\n            }}\n          >\n            {Object.values(HMSAds.BannerAdSizes).map((adSize) => (\n              <Picker.Item label={adSize} value={adSize} key={adSize} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement\n                  .getInfo()\n                  .then((res) => toast(\"HMSBanner, ref.getInfo\", res))\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Set Refresh\"\n            color=\"green\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.setRefresh(60);\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Resume\"\n            color=\"green\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.resume();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.destroy();\n              }\n            }}\n          />\n          <HMSBanner\n            style={{ height: 100 }}\n            bannerAdSize={this.state.bannerAdSize}\n            adId={this.state.adId}\n            adParam={{\n              adContentClassification:\n                HMSAds.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n              gender: HMSAds.Gender.UNKNOWN,\n              nonPersonalizedAd: HMSAds.NonPersonalizedAd.ALLOW_ALL,\n              tagForChildProtection:\n                HMSAds.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n              tagForUnderAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,\n              location: {\n                lat: 15,\n                lng: 12\n              }\n            }}\n            onAdLoaded={(_) => toast(\"HMSBanner onAdLoaded\")}\n            onAdFailed={(e) => {\n              toast(\"HMSBanner onAdFailed\", e.nativeEvent);\n            }}\n            onAdOpened={(_) => toast(\"HMSBanner onAdOpened\")}\n            onAdClicked={(_) => toast(\"HMSBanner onAdClicked\")}\n            onAdClosed={(_) => toast(\"HMSBanner onAdClosed\")}\n            onAdImpression={(_) => toast(\"HMSBanner onAdImpression\")}\n            onAdLeave={(_) => toast(\"HMSBanner onAdLeave\")}\n            ref={(el) => {\n              adBannerElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Instream extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement\n                  .getInfo()\n                  .then((res) => {\n                    alert(JSON.stringify(res))\n                    toast(\"HMSInstream, ref.getInfo\", res)\n                  })\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            color=\"green\"\n            title=\"Register\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.register();\n              }\n            }}\n          />\n          <Button\n            title=\"Mute\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.mute();\n              }\n            }}\n          />\n          <Button\n            title=\"Unmute\"\n            color=\"purple\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.unmute();\n              }\n            }}\n          />\n          <Button\n            title=\"Stop\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.stop();\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Play\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.play();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.destroy();\n              }\n            }}\n          />\n          <Button\n            title=\"showAdvertiserInfoDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.showAdvertiserInfoDialog(true);\n              }\n            }}\n          />\n          <Button\n            title=\"hideAdvertiserInfoDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.hideAdvertiserInfoDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"showTransparencyDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.showTransparencyDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"hideTransParencyDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.hideTransparencyDialog();\n              }\n            }}\n          />\n          <HMSInstream\n            style={{ height: 189, width: 328 }}\n            adId=\"testy3cglm3pj0\"\n            maxCount={4}\n            totalDuration={60}\n            onClick={(_) => toast(\"HMSInstream onClick\")}\n            onMute={(_) => toast(\"HMSInstream onMute\")}\n            onUnmute={(_) => toast(\"HMSInstream onUnmute\")}\n            onAdLoaded={(_) => toast(\"HMSInstream onAdLoaded\")}\n            onAdFailed={(e) => toast(\"HMSInstream onAdFailed\", e.nativeEvent)}\n            onSegmentMediaChange={(e) =>\n              toast(\"HMSInstream onSegmentMediaChange\", e.nativeEvent)\n            }\n            onMediaProgress={(e) =>\n              console.log(\"HMSInstream onMediaProgress\", e.nativeEvent)\n            }\n            onMediaStart={(e) =>\n              toast(\"HMSInstream onMediaStart\", e.nativeEvent)\n            }\n            onMediaPause={(e) =>\n              toast(\"HMSInstream onMediaPause\", e.nativeEvent)\n            }\n            onMediaStop={(e) => toast(\"HMSInstream onMediaStop\", e.nativeEvent)}\n            onMediaCompletion={(e) =>\n              toast(\"HMSInstream onMediaCompletion\", e.nativeEvent)\n            }\n            onMediaError={(e) =>\n              toast(\"HMSInstream onMediaError\", e.nativeEvent)\n            }\n            ref={(el) => {\n              adInstreamElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Native extends React.Component {\n  constructor(props) {\n    super(props);\n    nativeAdIds = {};\n    nativeAdIds[HMSAds.NativeMediaTypes.VIDEO] = \"testy63txaom86\";\n    nativeAdIds[HMSAds.NativeMediaTypes.IMAGE_SMALL] = \"testb65czjivt9\";\n    nativeAdIds[HMSAds.NativeMediaTypes.IMAGE_LARGE] = \"testu7m3hc4gvm\";\n    this.state = {\n      displayForm: {\n        mediaType: HMSAds.NativeMediaTypes.VIDEO,\n        adId: nativeAdIds.video,\n      },\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select display form\"\n            selectedValue={this.state.displayForm.mediaType}\n            onValueChange={(itemValue) => {\n              this.setState({\n                displayForm: {\n                  mediaType: itemValue,\n                  adId: nativeAdIds[itemValue],\n                },\n              });\n            }}\n          >\n            {Object.values(HMSAds.NativeMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement\n                  .getInfo()\n                  .then((res) => {\n                    alert(JSON.stringify(res))\n                    toast(\"HMSNative, ref.getInfo\", res)\n                  })\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Dislike\"\n            color=\"orange\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.dislikeAd(\"Because I dont like it\");\n              }\n            }}\n          />\n          <Button\n            title=\"Go to Why Page\"\n            color=\"purple\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.gotoWhyThisAdPage();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.destroy();\n              }\n            }}\n          />\n          <Button\n            title=\"Allow custom click\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.setAllowCustomClick();\n              }\n            }}\n          />\n          <Button\n            title=\"Record click event\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.recordClickEvent();\n              }\n            }}\n          />\n          <Button\n            title=\"Record impression\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.recordImpressionEvent({\n                  impressed: true,\n                  isUseful: \"nope\",\n                });\n              }\n            }}\n          />\n          <Button\n            title=\"showAdvertiserInfoDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showAdvertiserInfoDialog(true);\n              }\n            }}\n          />\n          <Button\n            title=\"hideAdvertiserInfoDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.hideAdvertiserInfoDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"showPrivacyPolicy\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showPrivacyPolicy();\n              }\n            }}\n          />\n          <Button\n            title=\"showPermissionPage\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showPermissionPage();\n              }\n            }}\n          />\n           <Button\n            title=\"showAppDetailPage\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showAppDetailPage();\n              }\n            }}\n          />\n        </View>\n        <View>\n          <HMSNative\n            style={{ height: 322 }}\n            displayForm={this.state.displayForm}\n            adParam={{\n              adContentClassification:\n                HMSAds.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n              gender: HMSAds.Gender.UNKNOWN,\n              nonPersonalizedAd: HMSAds.NonPersonalizedAd.ALLOW_ALL,\n              tagForChildProtection:\n                HMSAds.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n              tagForUnderAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,\n              detailedCreativeTypes: [\n                HMSAds.DetailedCreativeTypes.BIG_IMG,\n                HMSAds.DetailedCreativeTypes.VIDEO,\n                HMSAds.DetailedCreativeTypes.SMALL_IMG,\n              ],\n            }}\n            nativeConfig={{\n              choicesPosition: HMSAds.ChoicesPosition.TOP_RIGHT,\n              mediaDirection: HMSAds.Direction.ANY,\n              videoConfiguration: {\n                audioFocusType: HMSAds.AudioFocusType.NOT_GAIN_AUDIO_FOCUS_ALL,\n                isStartMuted: true,\n                autoPlayNetWork: 0,\n              },\n            }}\n            viewOptions={{\n              showMediaContent: false,\n              mediaImageScaleType: HMSAds.ScaleType.FIT_CENTER,\n              descriptionTextStyle: { visibility: false },\n              callToActionStyle: { color: \"black\", fontSize: 12 },\n            }}\n            onNativeAdLoaded={(_) => toast(\"HMSNative onNativeAdLoaded\")}\n            onAdDisliked={(_) => toast(\"HMSNative onAdDisliked\")}\n            onAdFailed={(e) => toast(\"HMSNative onAdFailed\", e.nativeEvent)}\n            onAdClicked={(_) => toast(\"HMSNative onAdClicked\")}\n            onAdImpression={(_) => toast(\"HMSNative onAdImpression\")}\n            onVideoStart={(_) => toast(\"HMSNative onVideoStart\")}\n            onVideoPlay={(_) => toast(\"HMSNative onVideoPlay\")}\n            onVideoEnd={(_) => toast(\"HMSNative onVideoEnd\")}\n            onVideoPause={(_) => toast(\"HMSNative onVideoPause\")}\n            onVideoMute={(e) => toast(\"HMSNative onVideoMute\", e.nativeEvent)}\n            ref={(el) => {\n              adNativeElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Vast extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n  render() {\n    return (\n      <SafeAreaView>\n        <View style={styles.sectionContainer}>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement\n                  .getInfo()\n                  .then((res) => toast(\"Hms, ref.getInfo\", JSON.stringify(res)))\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.release();\n              }\n            }}\n          />\n          <Button\n            title=\"Resume\"\n            color=\"green\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.resume();\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Start Or Pause\"\n            color=\"blue\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.startOrPause();\n              }\n            }}\n          />\n          <Button\n            title=\"Toggle Mute State\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.toggleMuteState(true);\n              }\n            }}\n          />\n\n        </View>\n        <View style={{ marginTop: 50, height: 500 }}>\n          <HMSVastView style={{ flex: 1 }}\n            isTestAd={false}\n            isCustomVideoPlayer={false}\n            isAdLoadWithAdsData={true}\n            adParam={{\n              adId: \"testy3cglm3pj0\",\n              totalDuration: 99,\n              creativeMatchStrategy: HMSVast.CreativeMatchType.ANY,\n              allowMobileTraffic: false,\n              adOrientation: HMSVast.Orientation.LANDSCAPE,\n              maxAdPods: 1,\n              requestOption: {\n                adContentClassification: HMSVast.ContentClassification.AD_CONTENT_CLASSIFICATION_A,\n                nonPersonalizedAd: HMSVast.NonPersonalizedAd.PERSONALIZED,\n                tagForChildProtection: HMSVast.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                tagForUnderAgeOfPromise: HMSVast.UnderAge.PROMISE_UNSPECIFIED,\n              }\n            }}\n            playerConfigs={{\n              enableRotation: false,\n              isEnableCutout: false,\n              skipLinearAd: false,\n              isEnablePortrait: true\n            }}\n            onLoadSuccess={(e) => toast(\"HMSVast onLoadSuccess\", JSON.stringify(e.nativeEvent))}\n            onLoadFailed={(_) => toast(\"HMSVast onLoadFailed\")}\n            onSuccess={(_) => toast(\"HMSVast onSuccess\")}\n            onFailed={(e) => toast(\"HMSVast onFailed\", e.nativeEvent)}\n            onPlayAdReady={(_) => toast(\"HMSVast onPlayAdReady\")}\n            onPlayAdFinish={(_) => toast(\"HMSVast onPlayAdFinish\")}\n            onBufferStart={(_) => toast(\"HMSVast onBufferStart\")}\n            onBufferEnd={(_) => toast(\"HMSVast onBufferEnd\")}\n            onPlayStateChanged={(e) => toast(\"HMSVast onPlayStateChanged\", JSON.stringify(e.nativeEvent))}\n            onVolumeChanged={(e) => toast(\"HMSVast onVolumeChanged\", JSON.stringify(e.nativeEvent))}\n            onScreenViewChanged={(e) => toast(\"HMSVast onScreenViewChanged\", JSON.stringify(e.nativeEvent))}\n            onProgressChanged={(e) => console.log(e.nativeEvent)}\n            ref={(el) => {\n              adVastElement = el;\n            }}\n          />\n        </View>\n      </SafeAreaView>\n    );\n  }\n}\n\nclass Interstitial extends React.Component {\n  constructor(props) {\n    super(props);\n    interstitialAdIds = {};\n    interstitialAdIds[HMSAds.InterstitialMediaTypes.IMAGE] = \"teste9ih9j0rc3\";\n    interstitialAdIds[HMSAds.InterstitialMediaTypes.VIDEO] = \"testb4znbuh3n2\";\n    this.state = {\n      isLoaded: false,\n      displayForm: {\n        mediaType: HMSAds.InterstitialMediaTypes.VIDEO,\n        adId: interstitialAdIds.video,\n      },\n    };\n  }\n  componentDidMount() {\n    HMSInterstitial.setAdId(this.state.displayForm.adId)\n      .then((res) => toast(\"HMSInterstitial.setAdId\", res))\n      .catch((err) => alert(err));\n\n    HMSInterstitial.adClosedListenerAdd(() =>\n      toast(\"HMSInterstitial adClosed\")\n    ); \n\n    HMSInterstitial.adFailedListenerAdd((error) =>\n      toast(\"HMSInterstitial adFailed\", error)\n    ); \n\n    HMSInterstitial.adLeaveListenerAdd(() => toast(\"HMSInterstitial adLeave\"));\n\n    HMSInterstitial.adOpenedListenerAdd(() =>\n      toast(\"HMSInterstitial adOpened\")\n    ); \n\n    HMSInterstitial.adLoadedListenerAdd((res) =>\n      toast(\"HMSInterstitial adLoaded, result: \", res)\n    ); \n\n    HMSInterstitial.adClickedListenerAdd(() =>\n      toast(\"HMSInterstitial adClicked\")\n    );\n\n    HMSInterstitial.adImpressionListenerAdd(() =>\n      toast(\"HMSInterstitial adImpression\")\n    );\n\n    HMSInterstitial.adCompletedListenerAdd(() =>\n      toast(\"HMSInterstitial adCompleted\")\n    );\n\n    HMSInterstitial.adStartedListenerAdd(() =>\n      toast(\"HMSInterstitial adStarted\")\n    );\n  }\n\n  componentWillUnmount() {\n    HMSInterstitial.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Picker\n              prompt=\"Media Type\"\n              selectedValue={this.state.displayForm.mediaType}\n              style={styles.picker}\n              onValueChange={(itemValue) => {\n                this.setState({\n                  displayForm: {\n                    mediaType: itemValue,\n                    adId: interstitialAdIds[itemValue],\n                  },\n                });\n                HMSInterstitial.setAdId(interstitialAdIds[itemValue])\n                  .then((res) => toast(\"HMSInterstitial.setAdId\", res))\n                  .catch((err) => alert(err));\n              }}\n            >\n              {Object.values(HMSAds.InterstitialMediaTypes).map((mType) => (\n                <Picker.Item label={mType} value={mType} key={mType} />\n              ))}\n            </Picker>\n            <Button\n              title=\"Load\"\n              onPress={() => {\n                HMSInterstitial.loadAd()\n                  .then((res) => toast(\"HMSInterstitial.loadAd\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              title=\"Set Ad Parameter\"\n              onPress={() => {\n                HMSInterstitial.setAdParam({\n                  adContentClassification:\n                    HMSAds.ContentClassification\n                      .AD_CONTENT_CLASSIFICATION_UNKNOWN,\n                  gender: HMSAds.Gender.UNKNOWN,\n                  nonPersonalizedAd: HMSAds.NonPersonalizedAd.ALLOW_ALL,\n                  tagForChildProtection:\n                    HMSAds.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                  tagForUnderAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,\n                })\n                  .then((res) => toast(\"HMSInterstitial.setAdParam\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              color=\"green\"\n              title=\"Check\"\n              onPress={() => {\n                HMSInterstitial.isLoaded()\n                  .then((res) => {\n                    toast(\"HMSInterstitial.isLoaded\", res);\n                    this.setState({ isLoaded: res });\n                  })\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              title=\"Show\"\n              color=\"purple\"\n              disabled={!this.state.isLoaded}\n              onPress={() => {\n                this.setState({ isLoaded: false });\n                HMSInterstitial.show()\n                  .then((res) => toast(\"HMSInterstitial.show\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Reward extends React.Component {\n  constructor(props) {\n    super(props);\n    rewardAdIds = {};\n    rewardAdIds[HMSAds.RewardMediaTypes.VIDEO] = \"testx9dtjwj8hp\";\n    this.state = {\n      isLoaded: false,\n      displayForm: {\n        mediaType: HMSAds.RewardMediaTypes.VIDEO,\n        adId: rewardAdIds[HMSAds.RewardMediaTypes.VIDEO],\n      },\n    };\n  }\n  componentDidMount() {\n    HMSReward.setAdId(this.state.displayForm.adId)\n      .then((res) => toast(\"HMSReward.setAdId\", res))\n      .catch((err) => alert(err));\n    HMSReward.loadWithAdId(true)\n      .then((res) => toast(\"HMSReward.loadWithAdId\", res))\n      .catch((err) => alert(err));\n    HMSReward.setVerifyConfig({ userId: \"HMS_User\", data: \"HMS data\" })\n      .then((res) => toast(\"HMSReward.setVerifyConfig\", res))\n      .catch((err) => alert(err));\n\n    HMSReward.adLoadedListenerAdd((res) =>\n      toast(\"HMSReward adLoaded, result: \", res)\n    ); \n\n    HMSReward.adFailedToLoadListenerAdd((error) =>\n      console.warn(\"HMSReward adFailedToLoad, error: \", error)\n    ); \n\n    HMSReward.adFailedToShowListenerAdd((error) =>\n      toast(\"HMSReward adFailedToShow, error: \", error)\n    ); \n\n    HMSReward.adOpenedListenerAdd(() => toast(\"HMSReward adOpened\")); \n\n    HMSReward.adClosedListenerAdd(() => toast(\"HMSReward adClosed\")); \n\n    HMSReward.adRewardedListenerAdd((reward) =>\n      toast(\"HMSReward adRewarded, reward: \", reward)\n    ); \n  }\n\n  componentWillUnmount() {\n    HMSReward.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Media Type\"\n            selectedValue={this.state.displayForm.mediaType}\n            style={styles.picker}\n            onValueChange={(itemValue) => {\n              this.setState({\n                displayForm: {\n                  mediaType: itemValue,\n                  adId: rewardAdIds[itemValue],\n                },\n              });\n              HMSReward.setAdId(rewardAdIds[itemValue])\n                .then((res) => toast(\"HMSReward.setAdId\", res))\n                .catch((err) => alert(err));\n            }}\n          >\n            {Object.values(HMSAds.RewardMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              HMSReward.loadAd()\n                .then((res) => toast(\"HMSReward.loadAd\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n          <Button\n            color=\"green\"\n            title=\"Check\"\n            onPress={() => {\n              HMSReward.isLoaded()\n                .then((res) => {\n                  toast(\"HMSReward.isLoaded\", res);\n                  this.setState({ isLoaded: res });\n                })\n                .catch((err) => alert(err));\n            }}\n          />\n          <Button\n            title=\"Show\"\n            disabled={!this.state.isLoaded}\n            onPress={() => {\n              this.setState({ isLoaded: false });\n              HMSReward.show()\n                .then((res) => toast(\"HMSReward.show\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Splash extends React.Component {\n  constructor(props) {\n    super(props);\n    splashAdIds = {};\n    splashAdIds[HMSAds.SplashMediaTypes.VIDEO] = \"testd7c5cewoj6\";\n    splashAdIds[HMSAds.SplashMediaTypes.IMAGE] = \"testq6zq98hecj\";\n    this.state = {\n      mediaType: HMSAds.SplashMediaTypes.IMAGE,\n    };\n  }\n\n  componentDidMount() {\n    HMSSplash.setAdId(splashAdIds[this.state.mediaType])\n      .then((res) => toast(\"HMSSplash.setAdId\", res))\n      .catch((err) => alert(err));\n    HMSSplash.setLogoText(\"HMS App\")\n      .then((res) => toast(\"HMSSplash.setLogoText\", res))\n      .catch((err) => alert(err));\n    HMSSplash.setCopyrightText(\"Copyright HMS\")\n      .then((res) => toast(\"HMSSplash.setCopyrightText\", res))\n      .catch((err) => console.log(err));\n\n    HMSSplash.adLoadedListenerAdd(() => toast(\"HMSSplash adLoaded\")); \n    HMSSplash.adFailedToLoadListenerAdd((e) =>\n      toast(\"HMSSplash adFailedToLoad\", e)\n    ); \n    HMSSplash.adDismissedListenerAdd(() => toast(\"HMSSplash adDismissed\")); \n    HMSSplash.adShowedListenerAdd(() => toast(\"HMSSplash adShowed\")); \n    HMSSplash.adClickListenerAdd(() => toast(\"HMSSplash adClick\")); \n  }\n\n  componentWillUnmount() {\n    HMSSplash.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Media Type\"\n            selectedValue={this.state.mediaType}\n            style={styles.picker}\n            onValueChange={(itemValue) => {\n              this.setState({ mediaType: itemValue });\n              HMSSplash.setAdId(splashAdIds[itemValue])\n                .then((res) => toast(\"HMSSplash.setAdId\", res))\n                .catch((err) => alert(err));\n            }}\n          >\n            {Object.values(HMSAds.SplashMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Splash\"\n            color=\"green\"\n            onPress={() =>\n              HMSSplash.show()\n                .then((res) => toast(\"HMSSplash.show\", res))\n                .catch((err) => alert(err))\n            }\n          />\n          <Button\n            title=\"Set Ad Parameter\"\n            onPress={() => {\n              HMSSplash.setAdParam({\n                adContentClassification:\n                  HMSAds.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n                gender: HMSAds.Gender.UNKNOWN,\n                nonPersonalizedAd: HMSAds.NonPersonalizedAd.ALLOW_ALL,\n                tagForChildProtection:\n                  HMSAds.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                tagForUnderAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,\n              })\n                .then((res) => toast(\"HMSSplash.setAdParam\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass AdvertisingId extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isLoaded: false,\n      advertisingInfo: {\n        id: \"-\",\n        isLimitAdTrackingEnabled: false,\n      },\n      callMode: HMSAds.CallMode.SDK,\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select Call Mode\"\n            selectedValue={this.state.callMode}\n            onValueChange={(itemValue) => {\n              this.setState({ callMode: itemValue });\n            }}\n          >\n            {Object.values(HMSAds.CallMode).map((callMode) => (\n              <Picker.Item label={callMode} value={callMode} key={callMode} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Get Advertising Id Info\"\n            onPress={() =>\n              HMSOaid.getAdvertisingIdInfo(this.state.callMode)\n                .then((res) => {\n                  toast(\"HMSOaid.getAdvertisingIdInfo, result:\", res);\n                  this.setState({ advertisingInfo: res });\n                })\n                .catch((e) => toast(\"HMSOaid.getAdvertisingIdInfo, error:\", e))\n            }\n          />\n          <Button\n            title=\"Clear\"\n            color=\"red\"\n            onPress={() =>\n              this.setState({\n                advertisingInfo: {\n                  id: \"-\",\n                  isLimitAdTrackingEnabled: false,\n                },\n              })\n            }\n          />\n          <Text title=\"Advertising Id\">\n            Advertising Id : {this.state.advertisingInfo.id}\n          </Text>\n          <Text title=\"Limit Ad Tracking Enabled\">\n            Limit Ad Tracking Enabled :\n            {this.state.advertisingInfo.isLimitAdTrackingEnabled\n              ? \"True\"\n              : \"False\"}\n          </Text>\n\n          <Button\n            color=\"green\"\n            title=\"Verify Advertising Id\"\n            onPress={() =>\n              HMSOaid.verifyAdvertisingId(this.state.advertisingInfo)\n                .then((res) =>\n                  alert(\"HMSOaid.verifyAdvertisingId, result:\", res)\n                )\n                .catch((err) => alert(err))\n            }\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass InstallReferrer extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isTest: true,\n      callMode: HMSAds.CallMode.SDK,\n    };\n  }\n\n  componentDidMount() {\n    HMSInstallReferrer.serviceConnectedListenerAdd((response) =>\n      toast(\"HMSInstallReferrer serviceConnected, response:\", response)\n    ); \n    HMSInstallReferrer.serviceDisconnectedListenerAdd(() =>\n      toast(\"HMSInstallReferrer serviceDisconnected\")\n    );\n  }\n\n  componentWillUnmount() {\n    HMSInstallReferrer.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Picker\n              prompt=\"Select Call Mode\"\n              selectedValue={this.state.callMode}\n              onValueChange={(itemValue) => {\n                this.setState({ callMode: itemValue });\n              }}\n            >\n              {Object.values(HMSAds.CallMode).map((cMode) => (\n                <Picker.Item label={cMode} value={cMode} key={cMode} />\n              ))}\n            </Picker>\n            <Button\n              title=\"Start Install Referer with given call mode\"\n              onPress={() =>\n                HMSInstallReferrer.startConnection(\n                  this.state.callMode,\n                  this.state.isTest\n                )\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.startConnection, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSInstallReferrer.startConnection, error:\", err)\n                  )\n              }\n            />\n            <Button\n              color=\"green\"\n              title=\"Ready?\"\n              onPress={() =>\n                HMSInstallReferrer.isReady()\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.isReady, result:\", res)\n                  )\n                  .catch((e) => toast(\"HMSInstallReferrer.isReady, error:\", e))\n              }\n            />\n            <Button\n              color=\"purple\"\n              title=\"Get Referrer Details\"\n              onPress={() =>\n                HMSInstallReferrer.getReferrerDetails(\"test channel\")\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.getReferrerDetails, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSInstallReferrer.getReferrerDetails, error:\", err)\n                  )\n              }\n            />\n            <Button\n              color=\"red\"\n              title=\"End Install Referer connection\"\n              onPress={() =>\n                HMSInstallReferrer.endConnection()\n                  .then(() => toast(\"HMSInstallReferrer.endConnection\"))\n                  .catch((e) =>\n                    toast(\"HMSInstallReferrer.endConnection, error:\", e)\n                  )\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Consent extends React.Component {\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Button\n              title=\"Set Consent\"\n              onPress={() =>\n                HMSAds.setConsent({\n                  consentStatus: HMSAds.ConsentStatus.NON_PERSONALIZED,\n                  debugNeedConsent: HMSAds.DebugNeedConsent.DEBUG_NEED_CONSENT,\n                  underAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,\n                })\n                  .then((res) => toast(\"HMSAds.setConsent, result:\", res))\n                  .catch((e) => toast(\"HMSAds.setConsent, error:\", e))\n              }\n            />\n            <Button\n              color=\"green\"\n              title=\"Check Consent\"\n              onPress={() =>\n                HMSAds.checkConsent()\n                  .then((res) => toast(\"HMSAds.checkConsent, result:\", res))\n                  .catch((e) => toast(\"HMSAds.checkConsent, error:\", e))\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass RequestOptions extends React.Component {\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Button\n              title=\"Set Request\"\n              onPress={() =>\n                HMSAds.setRequestOptions({\n                  adContentClassification:\n                    HMSAds.ContentClassification.AD_CONTENT_CLASSIFICATION_A,\n                  nonPersonalizedAd: HMSAds.NonPersonalizedAd.ALLOW_ALL,\n                  tagForChildProtection:\n                    HMSAds.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                  tagForUnderAgeOfPromise: HMSAds.UnderAge.PROMISE_UNSPECIFIED,           \n                })\n                  .then((res) => toast(\"HMSAds.setRequestOptions, res:\", res))\n                  .catch((err) =>\n                    toast(\"HMSAds.setRequestOptions, error:\", err)\n                  )\n              }\n            />\n            <Button\n              title=\"Get Request\"\n              color=\"green\"\n              onPress={() =>\n                HMSAds.getRequestOptions()\n                  .then((res) =>\n                    toast(\"HMSAds.getRequestOptions, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSAds.getRequestOptions, error:\", err)\n                  )\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nconst pages = [\n  { name: \"Splash Ad\", id: \"splash\", component: <Splash key=\"splash\" /> },\n  { name: \"Reward Ad\", id: \"reward\", component: <Reward key=\"reward\" /> },\n  {\n    name: \"Interstitial Ad\",\n    id: \"interstitial\",\n    component: <Interstitial key=\"interstitial\" />,\n  },\n  { name: \"Native Ad\", id: \"native\", component: <Native key=\"native\" /> },\n  { name: \"Banner\", id: \"banner\", component: <Banner key=\"banner\" /> },\n  { name: \"Instream\", id: \"instream\", component: <Instream key=\"instream\" /> },\n  {\n    name: \"Advertising Id\",\n    id: \"advertisingInfo\",\n    component: <AdvertisingId key=\"advertisingInfo\" />,\n  },\n\n  {\n    name: \"Install Referrer\",\n    id: \"installReferrer\",\n    component: <InstallReferrer key=\"installReferrer\" />,\n  },\n  { name: \"VAST\", id: \"vast\", component: <Vast key=\"vast\" /> },\n  { name: \"Consent\", id: \"consent\", component: <Consent key=\"consent\" /> },\n  {\n    name: \"Request Options\",\n    id: \"requestOptions\",\n    component: <RequestOptions key=\"requestOptions\" />,\n  },\n];\n\nconst initAppState = {\n  privacyEnabled: true,\n  consentEnabled: true,\n  consentIgnored: false,\n  showNotifyButton: false,\n  pageId: pages[0].id,\n};\n\nconst ModalText = () => (\n  <>\n    <Text style={styles.sectionDescription}>Privacy Example of HUAWEI X</Text>\n    <Text style={styles.sectionContainer}>\n      1.Privacy description {\"\\n\"}\n      {\"\\n\"} The RNHmsAdsDemois software providing a code demo for the HUAWEI\n      Ads SDK. Connecting to the network, the software collects and processes\n      information to identify devices, providing customized services or ads. If\n      you do not agree to collect the preceding information or do not agree to\n      call related permissions or functions of your mobile phones, the software\n      cannot run properly. You can stop data collection and uploading by\n      uninstalling or exiting this software. {\"\\n\"}\n      {\"\\n\"} 2.Demo description\n      {\"\\n\"}\n      {\"\\n\"} This demo is for reference only. Modify the content based on the\n      user protocol specifications. {\"\\n\"}\n      {\"\\n\"} 3.Advertising and marketing {\"\\n\"}\n      {\"\\n\"} We will create a user group based on your personal information,\n      collect your device information, usage information, and ad interaction\n      information in this app, and display more relevant personalized ads and\n      other promotion content. In this process, we will strictly protect your\n      privacy. You can learn more about how we collect and use your personal\n      information in personalized ads based on Ads and Privacy. If you want to\n      restrict personalized ads, you can tap here to open the ad setting page\n      and enable the function of restricting personalized ads. After the\n      function is enabled, you will still receive equivalent number of ads.\n      However, the ad relevance will be reduced.\n    </Text>\n  </>\n);\n\nconst ModalText2 = () => (\n  <>\n    <Text style={styles.sectionDescription}>Content Example of HUAWEI X</Text>\n    <Text style={styles.sectionContainer}>\n      The Ads in HUAWEI X is provided in collaboration with our partners. You\n      can find a full list of our partners for each country/region here.{\"\\n\"}\n      {\"\\n\"} In order to provide you with personalized advertisements, we need\n      to share the following information with our partners:{\"\\n\"}\n      {\"\\n\"} • User information, including advertising ID, city of residence,\n      country, and language.{\"\\n\"}\n      {\"\\n\"} • Device information, including device name and model, operating\n      system version, screen size, and network type.{\"\\n\"}\n      {\"\\n\"} • Service usage information, including news ID and records of\n      views, clicks, dislikes, shares, and comments for news content and\n      advertisements.{\"\\n\"}\n      {\"\\n\"} With your consent, the above information will be shared with our\n      partners so that they can provide you with personalized advertisements on\n      behalf of their customers, based on interests and preferences identified\n      or predicted through analysis of your personal information.{\"\\n\"}\n      {\"\\n\"} You can withdraw your consent at any time by going to app settings.\n      {\"\\n\"}\n      {\"\\n\"} Without your consent, no data will be shared with our partners\n    </Text>\n  </>\n);\nclass App extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = initAppState;\n  }\n\n  componentDidMount() {\n    console.log(\"componentDidMount initAppState\", initAppState.pageId);\n  }\n  render() {\n    const usingHermes =\n      typeof global.HermesInternal === \"object\" &&\n      global.HermesInternal !== null;\n\n    const {\n      privacyEnabled,\n      consentEnabled,\n      consentIgnored,\n      pageId\n    } = this.state;\n\n    return (\n      <>\n        <Modal\n          animationType=\"slide\"\n          transparent={false}\n          visible={!privacyEnabled}\n          onRequestClose={() => {\n            BackHandler.exitApp();\n          }}\n        >\n          <ModalText />\n          <Button title=\"Close\" onPress={() => BackHandler.exitApp()} />\n          <Button\n            title=\"Ok\"\n            onPress={() => {\n              this.setState({ privacyEnabled: true });\n            }}\n          />\n        </Modal>\n        <Modal\n          animationType=\"slide\"\n          transparent={false}\n          visible={privacyEnabled && !consentIgnored && !consentEnabled}\n          onRequestClose={() => {\n            this.setState({ consentIgnored: true });\n          }}\n        >\n          <ModalText2 />\n          <Button\n            title=\"Ignore\"\n            onPress={() => {\n              this.setState({ consentIgnored: true });\n            }}\n          />\n          <Button\n            title=\"Ok\"\n            onPress={() => {\n              this.setState({ consentEnabled: true });\n            }}\n          />\n        </Modal>\n        <StatusBar barStyle=\"dark-content\" />\n        <SafeAreaView>\n          <ScrollView\n            contentInsetAdjustmentBehavior=\"automatic\"\n            style={styles.scrollView}\n          >\n            {!usingHermes ? null : (\n              <View style={styles.engine}>\n                <Text style={styles.footer}>Engine: Hermes</Text>\n              </View>\n            )}\n            <View style={styles.sectionContainer}>\n              <Text style={styles.sectionHeader} title=\"General\">\n                Huawei Ads Kit\n              </Text>\n              <Button\n                title=\"Ask Permissions\"\n                color=\"red\"\n                onPress={() => {\n                  if (pageId == 'vast') {\n                    HMSVast.userAcceptAdLicense(true)\n                      .then((res) => toast(\"userAcceptAdLicense, result:\", res))\n                      .catch((err) => alert(err));\n                  }\n                  else {\n                    this.setState({\n                      privacyEnabled: false,\n                      consentEnabled: false,\n                    });\n                  }\n                }}\n              />\n              {pageId == 'vast' ? (<Button\n                title=\"Init Vast\"\n                color=\"green\"\n                onPress={() =>\n                  HMSVast.init(null)\n                    .then((res) => {\n                      toast(\"HMS init, result: \" + res, res);\n                      this.setState({ showNotifyButton: true });\n                    })\n                    .catch((err) => alert(err))\n                }\n              />) : (\n                <Button\n                  title=\"Init\"\n                  color=\"green\"\n                  onPress={() =>\n                    HMSAds.init()\n                      .then((res) => {\n                        toast(\"HMS init, result: \" + res, res);\n                        this.setState({ showNotifyButton: true });\n                      })\n                      .catch((err) => alert(err))\n                  }\n                />\n              )}\n              {this.state.showNotifyButton && (\n                <Button\n                  title=\"App Installed Notify\"\n                  color=\"blue\"\n                  onPress={() => {\n                    HMSAds.appInstalledNotify(true, HMSAds.ActivateStyle.BOTTOM_BANNER)\n                      .then((res) => toast(\"App Installed Notify, result: \" + JSON.stringify(res), res))\n                      .catch((err) => alert(err))\n                  }}\n                />\n              )}\n            </View>\n            {!privacyEnabled ? null : (\n              <View style={styles.sectionContainer}>\n                <Text style={styles.sectionHeader} title=\"Functions\">\n                  Functions:\n                </Text>\n                <Picker\n                  prompt=\"Select Function\"\n                  selectedValue={pageId}\n                  onValueChange={(itemValue) =>\n                    this.setState({ pageId: itemValue })\n                  }\n                >\n                  {pages.map((page) => (\n                    <Picker.Item\n                      label={page.name}\n                      value={page.id}\n                      key={page.id}\n                    />\n                  ))}\n                </Picker>\n                {pages\n                  .filter((page) => page.id === pageId)\n                  .map((page) => page.component)}\n              </View>\n            )}\n          </ScrollView>\n        </SafeAreaView>\n      </>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scrollView: {\n    backgroundColor: Colors.lighter,\n    paddingBottom: 20,\n  },\n  engine: {\n    position: \"absolute\",\n    right: 0,\n  },\n  body: {\n    backgroundColor: Colors.white,\n  },\n  sectionContainer: {\n    marginTop: 32,\n    paddingHorizontal: 24,\n  },\n  sectionTitle: {\n    fontSize: 24,\n    fontWeight: \"600\",\n    color: Colors.black,\n  },\n  sectionDescription: {\n    marginTop: 8,\n    fontSize: 18,\n    fontWeight: \"400\",\n    color: Colors.dark,\n  },\n  highlight: {\n    fontWeight: \"700\",\n  },\n  footer: {\n    color: Colors.dark,\n    fontSize: 12,\n    fontWeight: \"600\",\n    padding: 4,\n    paddingRight: 12,\n    textAlign: \"right\",\n  },\n  buttons: {\n    flex: 1,\n    flexDirection: \"row\",\n    justifyContent: \"center\",\n    alignItems: \"stretch\",\n  },\n  picker: { height: 50, width: 130 },\n  sectionHeader: {\n    fontSize: 20,\n    fontWeight: \"600\",\n    color: Colors.black,\n    paddingVertical: 12,\n    paddingHorizontal: 0,\n  },\n  yellowText: { backgroundColor: \"yellow\" },\n});\n\nexport default App;"
  },
  {
    "path": "react-native-hms-ads/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-ads/example/README.md",
    "content": "# React-Native HMS Ads - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Ads Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Ads - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\t\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-ads/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:ignore=\"GoogleAppIndexingWarning\"\n        tools:targetApi=\"28\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.ads.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHmsAdsDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:usesCleartextTraffic=\"true\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHmsAdsDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:exported=\"true\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/src/main/java/com/huawei/hms/rn/ads/demo/MainActivity.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsAdsDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/src/main/java/com/huawei/hms/rn/ads/demo/MainApplication.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                // Packages that cannot be autolinked yet can be added manually here, for example:\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-ads/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        mavenCentral()\n        jcenter()\n        google()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ads/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ads/example/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m"
  },
  {
    "path": "react-native-hms-ads/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ads/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ads/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsAdsDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-ads/example/app.json",
    "content": "{\n  \"name\": \"RNHmsAdsDemo\",\n  \"displayName\": \"RNHmsAdsDemo\"\n}"
  },
  {
    "path": "react-native-hms-ads/example/babel.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-ads/example/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport { AppRegistry } from \"react-native\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-ads/example/jest.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  preset: \"react-native\",\n  moduleFileExtensions: [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"node\"],\n};\n"
  },
  {
    "path": "react-native-hms-ads/example/metro.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-ads/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ads-demo\",\n  \"version\": \"13.4.73-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"@react-native-picker/picker\": \"2.5.0\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-ads\": \"13.4.73-300\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-ads/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ads\",\n  \"title\": \"React Native HMS Ads Kit\",\n  \"description\": \"React Native HMS Ads Kit\",\n  \"version\": \"13.4.73-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-ads\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ads\",\n    \"huawei-ads\",\n    \"hms-ads\",\n    \"ads\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-ads/src/Ads.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSAds } = NativeModules;\n\nexport default HMSAds;\n"
  },
  {
    "path": "react-native-hms-ads/src/Banner.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\nconst { HMSAds } = NativeModules;\n\nclass HMSAdsBanner extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAds.getViewInfo(findNodeHandle(this.bannerView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsBannerView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  setRefresh = (refreshTime) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsBannerView\").Commands.setRefresh,\n      [refreshTime],\n    );\n  };\n\n  pause = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsBannerView\").Commands.pause,\n      null,\n    );\n  };\n\n  resume = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsBannerView\").Commands.resume,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsBannerView\").Commands.destroy,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <HMSAdsBannerView\n        {...this.props}\n        ref={(el) => (this.bannerView = el)}\n      />\n    );\n  }\n}\n\nconst HMSAdsBannerView = requireNativeComponent(\n  \"HMSAdsBannerView\",\n  HMSAdsBanner,\n);\n\nexport default HMSAdsBanner;\n"
  },
  {
    "path": "react-native-hms-ads/src/InstallReferrer.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsInstallReferrer } = NativeModules;\n\nif (Platform.OS == \"android\") {\n    const events = [\"serviceConnected\", \"serviceDisconnected\"];\n    addListenerToModule(HMSAdsInstallReferrer, events);\n}\n\n\nexport default HMSAdsInstallReferrer;\n"
  },
  {
    "path": "react-native-hms-ads/src/Instream.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\n\nconst { HMSAds } = NativeModules;\n\nclass HMSAdsInstream extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAds.getViewInfo(findNodeHandle(this.instreamView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  register = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.register,\n      null,\n    );\n  };\n\n  mute = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.mute,\n      null,\n    );\n  };\n\n  unmute = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.unmute,\n      null,\n    );\n  };\n\n  stop = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.stop,\n      null,\n    );\n  };\n\n  pause = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.pause,\n      null,\n    );\n  };\n\n  play = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.play,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.destroy,\n      null,\n    );\n  };\n\n  showAdvertiserInfoDialog = (showWhyThisAd) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.showAdvertiserInfoDialog,\n      [showWhyThisAd],\n    );\n  };\n\n  hideAdvertiserInfoDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.hideAdvertiserInfoDialog,\n      null,\n    );\n  };\n\n  showTransparencyDialog = (location) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.showTransparencyDialog,\n      location ? [location] : null,\n    )\n  }\n\n  hideTransparencyDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsInstreamView\").Commands.hideTransparencyDialog,\n      null,\n    )\n  }\n\n  render() {\n    return (\n      <HMSAdsInstreamView\n        {...this.props}\n        ref={(el) => (this.instreamView = el)}\n      />\n    );\n  }\n}\n\nconst HMSAdsInstreamView = requireNativeComponent(\n  \"HMSAdsInstreamView\",\n  HMSAdsInstream,\n);\n\nexport default HMSAdsInstream;\n"
  },
  {
    "path": "react-native-hms-ads/src/Interstitial.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsInterstitial } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adClosed\",\n    \"adFailed\",\n    \"adLeave\",\n    \"adOpened\",\n    \"adLoaded\",\n    \"adClicked\",\n    \"adImpression\",\n    \"adCompleted\",\n    \"adStarted\",\n  ];\n  addListenerToModule(HMSAdsInterstitial, events);\n}\n\n\nexport default HMSAdsInterstitial;\n"
  },
  {
    "path": "react-native-hms-ads/src/Native.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\n\nconst { HMSAds } = NativeModules;\n\nclass HMSAdsNative extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAds.getViewInfo(findNodeHandle(this.nativeView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  dislikeAd = (desc) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands.dislikeAd,\n      [desc],\n    );\n  };\n\n  gotoWhyThisAdPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .gotoWhyThisAdPage,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands.destroy,\n      null,\n    );\n  };\n\n  setAllowCustomClick = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .setAllowCustomClick,\n      null,\n    );\n  };\n  \n  showPrivacyPolicy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .showPrivacyPolicy,\n      null,\n    );\n  };\n  showPermissionPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .showPermissionPage,\n      null,\n    );\n  };\n  showAppDetailPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .showAppDetailPage,\n      null,\n    );\n  };\n\n  recordClickEvent = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .recordClickEvent,\n      null,\n    );\n  };\n\n  recordImpressionEvent = (data) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .recordImpressionEvent,\n      [data],\n    );\n  };\n\n  showAdvertiserInfoDialog = (showWhyThisAd) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .showAdvertiserInfoDialog,\n      [showWhyThisAd],\n    );\n  };\n\n  hideAdvertiserInfoDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsNativeView\").Commands\n        .hideAdvertiserInfoDialog,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <HMSAdsNativeView {...this.props} ref={(el) => (this.nativeView = el)}>\n        {this.props.children}\n      </HMSAdsNativeView>\n    );\n  }\n}\n\nconst HMSAdsNativeView = requireNativeComponent(\n  \"HMSAdsNativeView\",\n  HMSAdsNative,\n);\n\nexport default HMSAdsNative;\n"
  },
  {
    "path": "react-native-hms-ads/src/Oaid.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSAdsOaid } = NativeModules;\n\nexport default HMSAdsOaid;\n"
  },
  {
    "path": "react-native-hms-ads/src/Reward.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsRewardAd } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adFailedToLoad\",\n    \"adLoaded\",\n    \"adClosed\",\n    \"adFailedToShow\",\n    \"adOpened\",\n    \"adRewarded\",\n  ];\n  addListenerToModule(HMSAdsRewardAd, events);\n}\n\nexport default HMSAdsRewardAd;\n"
  },
  {
    "path": "react-native-hms-ads/src/Splash.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsSplash } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adLoaded\",\n    \"adFailedToLoad\",\n    \"adDismissed\",\n    \"adShowed\",\n    \"adClick\",\n  ];\n  addListenerToModule(HMSAdsSplash, events);\n}\n\n\nexport default HMSAdsSplash;\n"
  },
  {
    "path": "react-native-hms-ads/src/Vast.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSVast } = NativeModules;\n\nexport default HMSVast;\n"
  },
  {
    "path": "react-native-hms-ads/src/VastView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n    findNodeHandle,\n    requireNativeComponent,\n    UIManager,\n    NativeModules,\n} from \"react-native\";\n\nconst { HMSVast } = NativeModules;\n\nclass HMSVastView extends Component {\n    constructor() {\n        super();\n    }\n\n    componentDidMount() {\n        this.loadAd();\n    }\n\n    getInfo = () => {\n        return HMSVast.getViewInfo(findNodeHandle(this.vastView));\n    };\n\n    componentWillUnmount() {\n        this.release();\n    }\n\n    loadAd = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.loadAd,\n            null,\n        );\n    };\n\n    pause = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.pause,\n            null,\n        );\n    };\n\n    resume = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.resume,\n            null,\n        );\n    };\n\n    toggleMuteState = (data) => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.toggleMuteState,\n            [data],\n        );\n    };\n\n    startOrPause = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.startOrPause,\n            null,\n        );\n    };\n\n    release = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsVastView\").Commands.release,\n            null,\n        );\n    };\n\n    render() {\n        return (\n            <HMSAdsVastView {...this.props} ref={(el) => (this.vastView = el)}>\n                {this.props.children}\n            </HMSAdsVastView>\n        );\n    }\n}\n\nconst HMSAdsVastView = requireNativeComponent(\n    \"HMSAdsVastView\",\n    HMSVastView,\n);\n\nexport default HMSVastView;\n"
  },
  {
    "path": "react-native-hms-ads/src/index.d.ts",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-ads\" {\n  import * as React from \"react\";\n  import { NativeSyntheticEvent, ViewProps } from \"react-native\";\n\n  export enum RewardMediaTypes {\n    VIDEO = \"video\"\n  }\n\n  export enum InterstitialMediaTypes {\n    IMAGE = \"image\",\n    VIDEO = \"video\"\n  }\n\n  export enum SplashMediaTypes {\n    IMAGE = \"image\",\n    VIDEO = \"video\"\n  }\n\n  export enum BannerMediaTypes {\n    IMAGE = \"image\"\n  }\n\n  export enum NativeAdAssetNames {\n    TITLE = \"1\",\n    CALL_TO_ACTION = \"2\",\n    ICON = \"3\",\n    DESC = \"4\",\n    AD_SOURCE = \"5\",\n    MARKET = \"6\",\n    PRICE = \"7\",\n    IMAGE = \"8\",\n    RATING = \"9\",\n    MEDIA_VIDEO = \"10\",\n    CHOICES_CONTAINER = \"11\"\n  }\n\n  /**\n   *  Ad content rating.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-contentcassification\n   */\n  export enum ContentClassification {\n    AD_CONTENT_CLASSIFICATION_W = \"W\",\n    AD_CONTENT_CLASSIFICATION_PI = \"PI\",\n    AD_CONTENT_CLASSIFICATION_J = \"J\",\n    AD_CONTENT_CLASSIFICATION_A = \"A\",\n    AD_CONTENT_CLASSIFICATION_UNKNOWN = \"\",\n  }\n\n  /**\n   *  Whether to request only non-personalized ads.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nonpersonalizedad\n   */\n  export enum NonPersonalizedAd {\n    ALLOW_ALL = 0,\n    ALLOW_NON_PERSONALIZED = 1,\n  }\n\n  /**\n   *  Child-directed setting.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-tagforchild\n   */\n  export enum TagForChild {\n    TAG_FOR_CHILD_PROTECTION_FALSE = 0,\n    TAG_FOR_CHILD_PROTECTION_TRUE = 1,\n    TAG_FOR_CHILD_PROTECTION_UNSPECIFIED = -1,\n  }\n\n  /**\n   *  Setting directed to users under the age of consent.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-underage\n   */\n  export enum UnderAge {\n    PROMISE_FALSE = 0,\n    PROMISE_TRUE = 1,\n    PROMISE_UNSPECIFIED = -1,\n  }\n\n  /**\n   *  Gender type\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-gender\n   */\n  export enum Gender {\n    UNKNOWN = 0,\n    MALE = 1,\n    FEMALE = 2,\n  }\n\n  /**\n   *  Whether to obtain the audio focus during video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-banneradSize\n   */\n  export enum BannerAdSizes {\n    B_300_250 = \"300_250\",\n    B_320_50 = \"320_50\",\n    B_320_100 = \"320_100\",\n    B_360_57 = \"360_57\",\n    B_360_144 = \"360_144\",\n    B_SMART = \"smart\",\n    B_DYNAMIC = \"dynamic\",\n    B_ADVANCED = \"advanced\",\n    B_INVALID = \"invalid\",\n  }\n\n  /**\n   *  Option for functions that can use Huawei SDK or\n   *  [Aidl](https://developer.android.com/guide/components/aidl) service.\n   */\n  export enum CallMode {\n    SDK = \"sdk\",\n    AIDL = \"aidl\", // Will not be used anymore\n  }\n\n  /**\n   *  Debug consent setting.\n   */\n  export enum DebugNeedConsent {\n    DEBUG_DISABLED = 0,\n    DEBUG_NEED_CONSENT = 1,\n    DEBUG_NOT_NEED_CONSENT = 2,\n  }\n\n  /**\n   *  Consent status.\n   */\n  export enum ConsentStatus {\n    PERSONALIZED = 0,\n    NON_PERSONALIZED = 1,\n    UNKNOWN = 2,\n  }\n\n  /**\n   *  Choice icon position constants\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nativeadconfiguration-choicesposition\n   */\n  export enum ChoicesPosition {\n    TOP_LEFT = 0,\n    TOP_RIGHT = 1,\n    BOTTOM_RIGHT = 2,\n    BOTTOM_LEFT = 3,\n    INVISIBLE = 4,\n  }\n\n  /**\n   *  Orientation constant\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nativeadconfiguration-direction\n   */\n  export enum Direction {\n    ANY = 0,\n    PORTRAIT = 1,\n    LANDSCAPE = 2,\n  }\n\n  /**\n   *  Whether to obtain the audio focus during video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-audiofocustype\n   */\n  export enum AudioFocusType {\n    GAIN_AUDIO_FOCUS_ALL = 0,\n    NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE = 1,\n    NOT_GAIN_AUDIO_FOCUS_ALL = 2,\n  }\n\n  /**\n   *  Native ad media types\n   */\n  export enum NativeMediaTypes {\n    VIDEO = \"video\",\n    IMAGE_SMALL = \"image_small\",\n    IMAGE_LARGE = \"image_large\",\n  }\n\n  /**\n   *  Options for scaling the bounds of an image\n   *  Refer this page https://developer.android.com/reference/android/widget/ImageView.ScaleType\n   */\n  export enum ScaleType {\n    MATRIX = \"MATRIX\",\n    FIT_XY = \"FIT_XY\",\n    FIT_START = \"FIT_START\",\n    FIT_CENTER = \"FIT_CENTER\",\n    FIT_END = \"FIT_END\",\n    CENTER = \"CENTER\",\n    CENTER_CROP = \"CENTER_CROP\",\n    CENTER_INSIDE = \"CENTER_INSIDE\",\n  }\n\n  /**\n   *  Options for scaling the bounds of an image\n   *  Refer this page https://developer.android.com/reference/android/widget/ImageView.ScaleType\n   */\n  export enum DetailedCreativeTypes {\n    BIG_IMG = 901,\n    VIDEO = 903,\n    THREE_IMG = 904,\n    SMALL_IMG = 905,\n    SINGLE_IMG = 909,\n    SHORT_TEXT = 913,\n    LONG_TEXT = 914,\n  }\n\n  /**\n   *  App installed notify style\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/activatestyle-0000001210045468\n   */\n  export enum ActivateStyle {\n    BOTTOM_BANNER = 1,\n    CONFIRM_DIALOG = 2\n  }\n\n  /**\n   *  Type of the network allowed for automatic video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/HMSCore-References/autoplaynettype-0000001876216905\n   */\n  export enum AutoPlayNetType {\n    WIFI_ONLY = 0,\n    BOTH_WIFI_AND_DATA = 1,\n    FORBID_AUTO_PLAY = 2\n  }\n\n  /**\n   *  Ad creative matching strategy\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/creativematchtype-0000001150370058\n   */\n  export enum CreativeMatchType {\n    EXACT = 0,\n    SMART = 1,\n    UNKNOWN = 2,\n    ANY = 3,\n    LANDSCAPE = 4,\n    PORTRAIT = 5,\n  }\n\n  /**\n   *  Vast Orientation\n   */\n  export enum Orientation {\n    PORTRAIT = 1,\n    LANDSCAPE = 0,\n  }\n\n  /**\n   *  Ad request options.\n   */\n  interface RequestOptions {\n    /**\n     *  The OAID.\n     */\n    adContentClassification?: ContentClassification;\n\n    /**\n     *  The OAID.\n     */\n    appCountry?: string;\n\n    /**\n     *  The OAID.\n     */\n    appLang?: string;\n\n    /**\n     *  The OAID.\n     */\n    nonPersonalizedAd?: NonPersonalizedAd;\n\n    /**\n     *  The OAID.\n     */\n    tagForChildProtection?: TagForChild;\n\n    /**\n     *  The OAID.\n     */\n    tagForUnderAgeOfPromise?: UnderAge;\n\n    /**\n     *  Whether the location information is carried in an ad request.\n     */\n    requestLocation?: boolean;\n\n    /**\n     *  Sets the maximum transaction timeout interval (including the network delay), in milliseconds.\n     */\n    tMax?: number;\n\n    /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n    biddingParam?: BiddingParam;\n\n     /**\n     *  Ad unit ID. The real-time bidding parameters are set on a per ad unit basis.\n     */\n     slotId?: string;\n\n     /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n     biddingParamMap?: object;\n  }\n\n  /**\n   *  Builds a BiddingParam object with specified attributes.\n   */\n  interface BiddingParam {\n    /**\n     *  Sets the floor bid for a real-time bidding ad unit.\n     */\n    bidFloor?: number;\n\n    /**\n     *  Sets the currency of the floor bid for a real-time bidding ad unit.\n     */\n    bidFloorCur?: string;\n\n    /**\n     *  Sets the app packages that are prohibited from delivering ads through real-time bidding ad units.\n     */\n    bpkgName?: [];\n  }\n\n  /**\n   *  Builds a BiddingParam object with specified attributes.\n   */\n  interface BiddingInfo {\n    /**\n     *  Obtains the creative bid amount. If the bid type CPM, the creative will be charged by every thousand impressions.\n     */\n    price?: number;\n\n    /**\n     *  Obtains the currency of a creative bid.\n     */\n    cur?: string;\n\n    /**\n     *  Obtains the bidding success notification URL.\n     */\n    nurl?: string;\n\n    /**\n     *  Obtains the URL used to notify Huawei of its bidding failure and the success of another vendor.\n     */\n    lurl?: string;\n  }\n\n  /**\n   *  Ad provider.\n   */\n  interface AdProvider {\n    /**\n     *  Id of ad provider.\n     */\n    id: ContentClassification;\n\n    /**\n     *  Name of ad provider.\n     */\n    name: string;\n\n    /**\n     *  The url for privacy policy.\n     */\n    privacyPolicyUrl: string;\n\n    /**\n     *  The service area for ad (ex: 'Global' or 'Asia').\n     */\n    serviceArea: string;\n  }\n\n  /**\n   *  Consent information from api result.\n   */\n  interface ConsentResult {\n    /**\n     *  Status of consent.\n     */\n    consentStatus: ConsentStatus;\n\n    /**\n     *  Shows whether consent is needed.\n     */\n    isNeedConsent: boolean;\n\n    /**\n     *  Ad provider list\n     */\n    adProviders: AdProvider[];\n  }\n\n  /**\n   *  Ad consent object to be submitted.\n   */\n  interface Consent {\n    /**\n     *  Consent option.\n     */\n    consentStatus?: ConsentStatus;\n\n    /**\n     *  DebugNeedConsent option.\n     */\n    debugNeedConsent?: DebugNeedConsent;\n\n    /**\n     *  UnderAge option.\n     */\n    underAgeOfPromise?: UnderAge;\n\n    /**\n     *  Device Id\n     */\n    testDeviceId?: string;\n  }\n\n  /**\n   *  Information about advertised clients.\n   */\n  interface AdvertisingIdClientInfo {\n    /**\n     *  The OAID.\n     */\n    id: string;\n\n    /**\n     *  'Limit ad tracking' setting.\n     */\n    isLimitAdTrackingEnabled: boolean;\n  }\n\n  /**\n   *  HMSOaid module.\n   */\n   export const HMSOaid = {\n    /**\n     *  Obtains the OAID and 'Limit ad tracking' setting.\n     */\n    getAdvertisingIdInfo(callMode: CallMode): Promise<AdvertisingIdClientInfo>;,\n \n    /**\n     *  Verifies the OAID and 'Limit ad tracking' setting\n     */\n    verifyAdvertisingId(advertisingInfo: AdvertisingIdClientInfo): Promise<boolean>;,\n  };\n\n  /**\n   *  Server-side verification parameter.\n   */\n  interface VerifyConfig {\n    /**\n     *  User Id.\n     */\n    userId: number;\n\n    /**\n     *  'Custom data.\n     */\n    data: boolean;\n  }\n\n  interface Location {\n\n    /**\n     * Latitude.\n     */\n    lat?: number;\n\n    /**\n     * Longitude.\n     */\n    lng?: number;\n  }\n\n  /**\n   *  Ad request parameters.\n   */\n  interface AdParam {\n    /**\n     *  Ad content rating. Check ContentClassification for possible values.\n     */\n    adContentClassification?: ContentClassification;\n\n    /**\n     *  Country code corresponding to the language in which an ad needs to be\n     *  returned for an app.\n     */\n    appCountry?: string;\n\n    /**\n     * Location.\n     */\n    location?: Location;\n\n    /**\n     *  Language in which an ad needs to be returned for an app.\n     */\n    appLang?: string;\n\n    /**\n     *  Home country code.\n     */\n    belongCountryCode?: string;\n\n    /**\n     *  Gender. Check Gender for possible values.\n     */\n    gender?: Gender;\n\n    /**\n     *  The setting of requesting personalized ads. Check NonPersonalizedAd\n     *  for possible values.\n     */\n    nonPersonalizedAd?: NonPersonalizedAd;\n\n    /**\n     *  Origin of request.\n     */\n    requestOrigin?: string;\n\n    /**\n     *  The setting of processing ad requests according to the COPPA.\n     *  Check TagForChild for possible values.\n     */\n    tagForChildProtection?: TagForChild;\n\n    /**\n     *  The setting of processing ad requests as directed to users under\n     *  the age of consent. Check UnderAge for possible values.\n     */\n    tagForUnderAgeOfPromise?: UnderAge;\n\n    /**\n     *  Targeting content url.\n     */\n    targetingContentUrl?: string;\n\n    /**\n     *  Whether the location information is carried in an ad request.\n     */\n    requestLocation?: boolean;\n\n    /**\n     *  Requested creative type of a native ad. \n     */\n    detailedCreativeTypes?: number[];\n\n    /**\n     *  Sets the maximum transaction timeout interval (including the network delay), in milliseconds.\n     */\n    tMax?: number;\n\n    /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n    biddingParam?: BiddingParam;\n\n     /**\n     *  Ad unit ID. The real-time bidding parameters are set on a per ad unit basis.\n     */\n     slotId?: string;\n\n     /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n     biddingParamMap?: BiddingParam;\n  }\n\n  /**\n   *  Information about the reward item in a rewarded ad.\n   */\n  interface Reward {\n    /**\n     *  The name of a reward item.\n     */\n    name: string;\n\n    /**\n     *  The number of reward items.\n     */\n    amount: number;\n  }\n\n  /**\n   *  Information about the reward item in a rewarded ad.\n   */\n  interface RewardAd {\n    /**\n     *  User id.\n     */\n    userId: string;\n\n    /**\n     *  Custom data.\n     */\n    data: string;\n\n    /**\n     *  Reward item.\n     */\n    reward: Reward;\n\n    /**\n     *  Shows whether a rewarded ad is successfully loaded.\n     */\n    isLoaded: boolean;\n  }\n\n  /**\n   *  HMSReward module for reward ads.\n   */\n   export const HMSReward = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n \n    /**\n     *  Sets to display ad on HMS Core app\n     */\n    loadWithAdId(loadWithAdId: boolean): Promise<null>;,\n \n    /**\n     *  Sets user id\n     */\n    setUserId(userID: string): Promise<null>;,\n \n    /**\n     *  Sets custom data in string\n     */\n    setData(data: string): Promise<null>;,\n \n    /**\n     *  Sets custom data in string\n     */\n    setVerifyConfig(verifyConfig: VerifyConfig): Promise<null>;,\n \n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n    /**\n     *  Video configuration that controls video playback.\n     */\n    setVideoConfiguration(videoConfiguration: VideoConfiguration): Promise<null>;,\n \n    /**\n     *  Sets custom data in string\n     */\n    pause(): Promise<null>;,\n \n    /**\n     *  Resumes the ad.\n     */\n    resume(): Promise<null>;,\n \n    /**\n     *  Destroys the ad.\n     */\n    destroy(): Promise<null>;,\n \n    /**\n     *  Shows the ad.\n     */\n    show(): Promise<null>;,\n \n    /**\n     *  Requests ad.\n     */\n    loadAd(): Promise<null>;,\n \n    /**\n     *  Checks whether ad is successfully loaded\n     */\n    isLoaded(): Promise<boolean>;,\n \n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: (response: RewardAd) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when fails to load.\n     */\n    adFailedToLoadListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when fails to load.\n     */\n    adFailedToLoadListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad fails to be displayed.\n     */\n    adFailedToShowListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad fails to be displayed.\n     */\n    adFailedToShowListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is opened.\n     */\n    adOpenedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is opened.\n     */\n    adOpenedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is closed.\n     */\n    adClosedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is closed.\n     */\n    adClosedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when a reward is provided.\n     */\n    adRewardedListenerAdd(listenerFn: (response: Reward) => void): void;,\n \n    /**\n     *  Remove the listener for the event when a reward is provided.\n     */\n    adRewardedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when user leaves the app.\n     */\n    adLeftAppListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when user leaves the app.\n     */\n    adLeftAppListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is completed.\n     */\n    adCompletedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is completed.\n     */\n    adCompletedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is started.\n     */\n    adStartedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is started.\n     */\n    adStartedListenerRemove(): void;,\n \n    /**\n     *  Remove all listeners for events of HMSReward\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  HMSSplash module for splash ads\n   */\n   export const HMSSplash = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n \n    /**\n     *  Sets logo text.\n     */\n    setLogoText(logoText: string): Promise<null>;,\n \n    /**\n     *  Sets copyright text.\n     */\n    setCopyrightText(cpyrightText: string): Promise<null>;,\n \n    /**\n     *  Sets screen orientation\n     */\n    setOrientation(orientation: number): Promise<null>;,\n \n    /**\n     *  Sets default app launch image in portrait mode,\n     *  which is displayed before a splash ad is displayed\n     */\n    setSloganResource(sloganResource: string): Promise<null>;,\n \n    /**\n     *  Sets default app launch image in landscape mode,\n     *  which is displayed before a splash ad is displayed.\n     */\n    setWideSloganResource(wideSloganResource: string): Promise<null>;,\n \n    /**\n     *  Sets app logo.\n     */\n    setLogoResource(logoResource: string): Promise<null>;,\n \n    /**\n     *  Sets app text resource.\n     */\n    setMediaNameResource(mediaNameResource: string): Promise<null>;,\n \n    /**\n     *  Sets the audio focus preemption policy for a video splash ad.\n     */\n    setAudioFocusType(audioFocusType: AudioFocusType): Promise<null>;,\n \n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n     /**\n     *  Obtains the real-time bidding data returned to a publisher app.\n     */\n     getBiddingInfo(): Promise<BiddingInfo>;,\n \n    /**\n     *  Pauses ad.\n     */\n    pause(): Promise<null>;,\n \n    /**\n     *  Resumes the ad.\n     */\n    resume(): Promise<null>;,\n \n    /**\n     *  Destroys the ad.\n     */\n    destroy(): Promise<null>;,\n \n    /**\n     *  Shows the ad.\n     */\n    show(): Promise<null>;,\n \n    /**\n     *  Checks whether ad is successfully loaded.\n     */\n    isLoaded(): Promise<boolean>;,\n \n    /**\n     *  Checks whether a splash ad is being loaded.\n     */\n    isLoading(): Promise<boolean>;,\n \n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad fails to load.\n     */\n    adFailedToLoadListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad fails to load.\n     */\n    adFailedToLoadListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is dismissed.\n     */\n    adDismissedListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is dismissed.\n     */\n    adDismissedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is shown.\n     */\n    adShowedListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is shown.\n     */\n    adShowedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is clicked.\n     */\n    adClickListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is clicked.\n     */\n    adClickListenerRemove(): void;,\n \n    /**\n     *  Remove all listeners for events of HMSSplash\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  Interstitial ad.\n   */\n  interface InterstitialAd {\n    /**\n     *  The ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Shows whether ad loading is complete.\n     */\n    isLoaded: boolean;\n\n    /**\n     *  Shows whether ads are being loaded.\n     */\n    isLoading: boolean;\n  }\n\n  /**\n   *  HMSInterstitial module for Interstitial ads\n   */\n   export const HMSInterstitial = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n \n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n    /**\n     *  Video configuration that controls video playback.\n     */\n    setVideoConfiguration(videoConfiguration: VideoConfiguration): Promise<null>;,\n \n    /**\n     *  Initiates a request to load an ad.\n     */\n    loadAd(): Promise<null>;,\n \n    /**\n     *  Displays an interstitial ad.\n     */\n    show(): Promise<null>;,\n \n    /**\n     *  Checks whether ad loading is complete.\n     */\n    isLoaded(): Promise<boolean>;,\n \n    /**\n     *  Checks whether ad is loading.\n     */\n    isLoading(): Promise<boolean>;,\n \n    /**\n     *  Add listener for the event when ad fails to load.\n     */\n    adFailedListenerAdd(listenerFn: (response: Error) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad fails to load.\n     */\n    adFailedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is closed.\n     */\n    adClosedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is closed.\n     */\n    adClosedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when the user leaves the app.\n     */\n    adLeaveListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event the user leaves the app.\n     */\n    adLeaveListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is displayed.\n     */\n    adOpenedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is displayed.\n     */\n    adOpenedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: (response: InterstitialAd) => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is clicked.\n     */\n    adClickedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is clicked.\n     */\n    adClickedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad impression is detected.\n     */\n    adImpressionListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad impression is detected.\n     */\n    adImpressionListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad is completed.\n     */\n    adCompletedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad is completed.\n     */\n    adCompletedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when ad starts.\n     */\n    adStartedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when ad starts.\n     */\n    adStartedListenerRemove(): void;,\n \n    /**\n     *  Remove all listeners for events of HMSInterstitial\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  Describes the install referrer information.\n   */\n  interface ReferrerDetails {\n    /**\n     *  Install referrer information.\n     */\n    installReferrer: string;\n\n    /**\n     *  Obtains channel information.\n     */\n    installChannel: string;\n\n    /**\n     *  The app installation timestamp, in milliseconds.\n     */\n    installBeginTimestampMillisecond: number;\n\n    /**\n     *  The app installation timestamp, in seconds.\n     */\n    installBeginTimestampSeconds: number;\n\n    /**\n     *  The ad click timestamp, in milliseconds.\n     */\n    referrerClickTimestampMillisecond: number;\n\n    /**\n     *  The ad click timestamp, in seconds.\n     */\n    referrerClickTimestampSeconds: number;\n  }\n\n  /**\n   *  Install referrer connection response.\n   */\n  interface InstallReferrerResponse {\n    /**\n     *  Response code.\n     */\n    responseCode: number;\n\n    /**\n     *  Response message.\n     */\n    responseMessage: string;\n  }\n\n  /**\n   *  HMSInstallReferrer module for install referrer functions\n   */\n   export const HMSInstallReferrer = {\n    /**\n     *  Starts to connect to the install referrer service. The first string\n     *  argument should be one of values of [CallMode](#callmode). And the\n     *  boolean argument indicates test mode. The last string argument is the\n     *  name of the package that the service receives information about.\n     */\n    startConnection(callMode: CallMode, isTest: boolean): Promise<null>;,\n \n    /**\n     *  Ends the service connection and releases all occupied resources.\n     */\n    endConnection(): Promise<null>;,\n \n    /**\n     *  Obtains install referrer information.\n     */\n    getReferrerDetails(installChannel: string): Promise<ReferrerDetails>;,\n \n    /**\n     *  Indicates whether the service connection is ready.\n     */\n    isReady(): Promise<boolean>;,\n \n    /**\n     *  Add listener for the event when service connection is complete\n     */\n    serviceConnectedListenerAdd(listenerFn: (response: InstallReferrerResponse) => void): void;,\n \n    /**\n     *  Remove the listener for the event when service connection is complete\n     */\n    serviceConnectedListenerRemove(): void;,\n \n    /**\n     *  Add listener for the event when service is crashed or killed.\n     */\n    serviceDisconnectedListenerAdd(listenerFn: () => void): void;,\n \n    /**\n     *  Remove the listener for the event when service is crashed or killed.\n     */\n    serviceDisconnectedListenerRemove(): void;,\n \n    /**\n     *  Remove all listeners for events of HMSInstallReferrer\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  React prop defining banner ad sizes.\n   */\n  interface BannerAdSizeProp {\n    /**\n     *  Banner ad sizes. `BannerAdSizes` for possible values.\n     */\n    bannerAdSize: BannerAdSizes;\n  }\n\n  /**\n   *  Banner information from banner load event.\n   */\n  interface BannerInfo {\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Shows whether banner is loading.\n     */\n    isLoading: boolean;\n\n    /**\n     *  BannerAdSize information.\n     */\n    bannerAdSize: BannerAdSizes;\n  }\n\n  /**\n   *  Ad error.\n   */\n  interface Error {\n    /**\n     *  Error code.\n     */\n    errorCode: number;\n\n    /**\n     *  Error message.\n     */\n    errorMessage: string;\n  }\n\n  /**\n   *  Events triggered by the map.\n   */\n  interface AdEvent<T = {}> extends NativeSyntheticEvent<T> { }\n\n  /**\n   *  Props for <HMSBanner> component.\n   */\n  interface HMSBannerProps extends ViewProps {\n    /**\n     *  The banner ad size.\n     */\n    bannerAdSize: BannerAdSizeProp;\n\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad fails to load.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when ad is opened.\n     */\n    onAdOpened?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is clicked.\n     */\n    onAdClicked?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is closed.\n     */\n    onAdClosed?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad impression is detected.\n     */\n    onAdImpression?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when user leaves the app.\n     */\n    onAdLeave?: (event: AdEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows banner ads.\n   */\n  export class HMSBanner extends React.Component<HMSBannerProps, any> {\n    /**\n     *  Gets information related to HMSBanner component.\n     */\n    getInfo(): Promise<BannerInfo>;\n\n    /**\n     *  Loads banner.\n     */\n    loadAd(): void;\n\n    /**\n     *  Sets a rotation interval for banner ads. Input is rotation\n     *  interval, in seconds. It should range from 30 to 120.\n     */\n    setRefresh(interval: number): void;\n\n    /**\n     *  Pauses any additional processing related to ad.\n     */\n    pause(): void;\n\n    /**\n     *  Resumes ad after the pause() method is called last time.\n     */\n    resume(): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n  }\n\n  interface PlayTime {\n    /**\n     *  Played duration, in milliseconds.\n     */\n    playTime: number;\n  }\n\n  interface WithPercentage {\n    /**\n     *  Playback progress, in percentage.\n     */\n    percentage: number;\n  }\n\n  interface WithExtra {\n    /**\n     *  Additional information.\n     */\n    extra: number;\n  }\n\n  interface WithError {\n    /**\n     *  Error information.\n     */\n    error: Error;\n  }\n\n  /**\n   *  Instream ad information.\n   */\n  interface InstreamAd {\n    /**\n     *  Indicates whether ad has been clicked.\n     */\n    isClicked: boolean;\n\n    /**\n     *  Indicates whether an ad has expired.\n     */\n    isExpired: boolean;\n\n    /**\n     *  Indicates whether ad is an image ad\n     */\n    isImageAd: boolean;\n\n    /**\n     *  Indicates whether ad has been displayed.\n     */\n    isShown: boolean;\n\n    /**\n     *  Indicates whether ad is a video ad\n     */\n    isVideoAd: boolean;\n\n    /**\n     *  Duration of a roll ad, in milliseconds.\n     */\n    duration: number;\n\n    /**\n     *  Redirection link to `Why this ad`.\n     */\n    whyThisAd: string;\n\n    /**\n     *  Text to be displayed on a button.\n     */\n    callToAction: string;\n\n    /**\n     *  Indicates whether a task is an ad task.\n     */\n    adSign: string;\n\n    /**\n     *  Ad source.\n     */\n    adSource: string;\n\n    /**\n     * Checks whether advertiser information is delivered for the current ad.\n     */\n    hasAdvertiserInfo: boolean;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    advertiserInfo?: AdvertiserInfo[];\n\n    /**\n     * Indicates whether ad transparency information is displayed\n     */\n    isTransparencyOpen: boolean;\n\n    /**\n     * Obtains the redirection URL of the ad transparency information.\n     */\n    transparencyTplUrl: string;\n  }\n\n  interface AdvertiserInfo {\n\n    /**\n     * Obtains the advertiser information sequence.\n     */\n    seq: number;\n\n    /**\n     * Obtains the advertiser information type.\n     */\n    key: string;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    value: string;\n  }\n\n  interface InstreamInfo {\n    /**\n     *  Indicates whether ad is being played.\n     */\n    isPlaying: boolean;\n\n    /**\n     *  Indicates whether ad is loading.\n     */\n    isLoading: boolean;\n\n    /**\n     *  Ad slot id\n     */\n    adId: string;\n\n    /**\n     *  Maximum total duration of roll ads, in seconds\n     */\n    totalDuration: number;\n\n    /**\n     *  Maximum number of roll ads.\n     */\n    maxCount: number;\n\n    /**\n     *  List of roll ads.\n     */\n    instreamAds: InstreamAd[];\n  }\n\n  /**\n   *  Props for <HMSInstream> component.\n   */\n  interface HMSInstreamProps extends ViewProps {\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Maximum number of roll ads.\n     */\n    maxCount: number;\n\n    /**\n     *  Maximum total duration of roll ads, in seconds\n     */\n    totalDuration: number;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Listener for the event called when ad is muted\n     */\n    onMute?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is unmuted\n     */\n    onUnmute?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when roll ads are successfully loaded.\n     */\n    onAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when roll ads fail to be loaded.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when a roll ad is switched to another.\n     */\n    onSegmentMediaChange?: (event: AdEvent<InstreamAd>) => void;\n\n    /**\n     *  Listener for the event called during the playback of a roll ad.\n     */\n    onMediaProgress?: (event: AdEvent<PlayTime | WithPercentage>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad starts.\n     */\n    onMediaStart?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad is paused.\n     */\n    onMediaPause?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad stops.\n     */\n    onMediaStop?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad\n     *  is complete.\n     */\n    onMediaCompletion?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when a roll ad fails to be played.\n     */\n    onMediaError?: (event: AdEvent<PlayTime | WithExtra | WithError>) => void;\n\n    /**\n     *  Listener for the event called when ad is clicked.\n     */\n    onClick?: (event: AdEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows instream ads.\n   */\n  export class HMSInstream extends React.Component<HMSInstreamProps, any> {\n    /**\n     *  Gets information related to HMSInstream component.\n     */\n    getInfo(): Promise<InstreamInfo>;\n\n    /**\n     *  Loads instream ad.\n     */\n    loadAd(): void;\n\n    /**\n     *  Sets loaded ads to view in order to show them\n     */\n    register(): void;\n\n    /**\n     *  Mutes ad.\n     */\n    mute(): void;\n\n    /**\n     *  Unmutes ad.\n     */\n    unmute(): void;\n\n    /**\n     *  Stops ad.\n     */\n    stop(): void;\n\n    /**\n     *  Pauses ad.\n     */\n    pause(): void;\n\n    /**\n     *  Plays ad.\n     */\n    play(): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n\n    /**\n     * Displays the advertiser information dialog box.\n     */\n    showAdvertiserInfoDialog(showWhyThisAd: boolean): void;\n\n    /**\n     * Hides the advertiser information dialog box.\n     */\n    hideAdvertiserInfoDialog(): void;\n\n    /**\n     * Shows the ad transparency dialog box.\n     */\n    showTransparencyDialog(location?: number[]): void;\n\n    /**\n     * Hides the ad transparency dialog box.\n     */\n    hideTransparencyDialog(): void;\n  }\n\n  /**\n   *  React prop defining media type of the ad.\n   */\n  interface DisplayFormProp {\n    /**\n     *  Error code.\n     */\n    mediaType: NativeMediaTypes;\n\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n  }\n\n  /**\n   *  Ad size.\n   */\n  interface AdSize {\n    /**\n     *  Ad height, in dp.\n     */\n    height: number;\n\n    /**\n     *  Ad width, in dp.\n     */\n    width: number;\n  }\n\n  /**\n   *  Video configuration used to control video playback.\n   */\n  interface VideoConfiguration {\n    /**\n     *  The video playback scenario where the audio focus needs to be obtained.\n     */\n    audioFocusType?: AudioFocusType;\n\n    /**\n     *  The setting for using custom video control.\n     */\n    isCustomizeOperateRequested?: boolean;\n\n    /**\n     *  Setting indicating whether a video ad can be displayed\n     *  in full-screen mode upon a click.\n     */\n    isClickToFullScreenRequested?: boolean;\n\n    /**\n     *  The setting for muting video when it starts.\n     */\n    isStartMuted?: boolean;\n\n    /**\n     *  Obtains the type of the network allowed for automatic video playback.\n     */\n    autoPlayNetWork?: AutoPlayNetType;\n  }\n\n  /**\n   *  Native ad configuration.\n   */\n  interface NativeAdConfiguration {\n    /**\n     *  Ad size.\n     */\n    adSize?: AdSize;\n\n    /**\n     *  Position of an ad choice icon.\n     */\n    choicesPosition?: ChoicesPosition;\n\n    /**\n     *  Direction of an ad image.\n     */\n    mediaDirection?: Direction;\n\n    /**\n     *  Aspect ratio of an ad image.\n     */\n    mediaAspect?: number;\n\n    /**\n     *  Video Configuration.\n     */\n    videoConfiguration?: VideoConfiguration;\n\n    /**\n     *  The setting for requesting multiple ad images.\n     */\n    isRequestMultiImages?: boolean;\n\n    /**\n     *  The setting for enabling the SDK to download native ad images.\n     */\n    isReturnUrlsForImages?: boolean;\n  }\n\n  /**\n   *  Styles of the components in native ads.\n   */\n  interface AdTextStyle {\n    /**\n     *  Font size.\n     */\n    fontSize?: number;\n\n    /**\n     *  Color.\n     */\n    color?: string;\n\n    /**\n     *  Background color.\n     */\n    backgroundColor?: string;\n\n    /**\n     *  Visibility.\n     */\n    visibility?: boolean;\n  }\n\n  /**\n   *  View options for components in Native ads.\n   */\n  interface ViewOptionsProp {\n    /**\n     *  The option for showing media content.\n     */\n    showMediaContent?: boolean;\n\n    /**\n     *  The image scale type.\n     */\n    mediaImageScaleType?: ScaleType;\n\n    /**\n     *  The style of ad source.\n     */\n    adSourceTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad flag.\n     */\n    adFlagTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad title.\n     */\n    titleTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad description.\n     */\n    descriptionTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad call-to-action button.\n     */\n    callToActionStyle?: AdTextStyle;\n  }\n\n  interface DislikeAdReason {\n    /**\n     *  The reason why a user dislikes an ad.\n     */\n    description: string;\n  }\n\n  /**\n   *  Video controller, which implements video control such as\n   *  playing, pausing, and muting a video.\n   */\n  interface VideoOperator {\n    /**\n     *  The video aspect ratio.\n     */\n    aspectRatio: number;\n\n    /**\n     *  Shows whether ad content contains a video.\n     */\n    hasVideo: boolean;\n\n    /**\n     *  Shows whether a custom video control is used for a video ad.\n     */\n    isCustomizeOperateEnabled: boolean;\n\n    /**\n     *  Shows whether click to full screen option enabled for a video ad.\n     */\n    isClickToFullScreenEnabled: boolean;\n  }\n\n  /**\n   *  Native ad information.\n   */\n  interface NativeAd {\n    /**\n     *  Indicates whether a task is an ad task.\n     */\n    adSign: string;\n\n    /**\n     *  Ad source.\n     */\n    adSource: string;\n\n    /**\n     *  Ad description.\n     */\n    description: string;\n\n    /**\n     *  The text to be displayed on a button, for example,\n     *  View Details or Install.\n     */\n    callToAction: string;\n\n    /**\n     *  Ad title.\n     */\n    title: string;\n\n    /**\n     *  The choices of not displaying the current ad.\n     */\n    dislikeAdReasons: DislikeAdReason[];\n\n    /**\n     *  Redirection link to Why this ad.\n     */\n    whyThisAd: string;\n\n    /**\n     *  Unique ID of an ad.\n     */\n    uniqueId: string;\n\n    /**\n     *  Ad creative type.\n     */\n    creativeType: string;\n\n    /**\n     *  Video operator used for the ad.\n     */\n    videoOperator: VideoOperator | Muted;\n\n    /**\n     *  Shows whether custom tap gestures are enabled.\n     */\n    isCustomClickAllowed: boolean;\n\n    /**\n     *  Shows whether custom ad closing is enabled.\n     */\n    isCustomDislikeThisAdEnabled: boolean;\n\n    /**\n     * Checks whether advertiser information is delivered for the current ad.\n     */\n    hasAdvertiserInfo: boolean;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    advertiserInfo?: AdvertiserInfo[];\n\n    /**\n     * Indicates whether ad transparency information is displayed\n     */\n    isTransparencyOpen: boolean;\n\n    /**\n     * Obtains the redirection URL of the ad transparency information.\n     */\n    transparencyTplUrl: string;\n\n    /**\n     * Obtains the app name.\n     */\n    appName: string;\n\n    /**\n     * Obtains the app operator information.\n     */\n    developerName: string;\n\n    /**\n     * Obtains the app version number.\n     */\n    versionName: string;\n\n    /**\n     * Obtains the ad purpose.\n     */\n    interactionType: number;\n\n    /**\n     * Obtains the name of the promoted entity.\n     */\n    promoteName: string;\n\n    /**\n     * Obtains the promotion subtype.\n     */\n    promoteType: number;\n  }\n\n  interface NativeAdLoader {\n    /**\n     *  Shows whether ads are being loaded.\n     */\n    isLoading: boolean;\n  }\n\n  /**\n   *  Information related to native ad returned when ad is loaded.\n   */\n  interface NativeInfo {\n    /**\n     *  Native ad information.\n     */\n    nativeAd: NativeAd;\n\n    /**\n     *  Native ad configuration information.\n     */\n    nativeAdConfiguration: NativeAdConfiguration;\n\n    /**\n     *  Native ad loader information.\n     */\n    nativeAdLoader: NativeAdLoader;\n  }\n\n  interface Muted {\n    /**\n     *  Shows whether a video is muted.\n     */\n    isMuted: boolean;\n  }\n\n  /**\n   *  Props for <HMSNative> component.\n   */\n  interface HMSNativeProps extends ViewProps {\n    /**\n     *  The object parameter that has ad slot id and media type information.\n     */\n    displayForm: DisplayFormProp;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Native ad configuration parameter.\n     */\n    nativeConfig?: NativeAdConfiguration;\n\n    /**\n     *  View options parameter.\n     */\n    viewOptions?: ViewOptionsProp;\n\n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onNativeAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is disliked.\n     */\n    onAdDisliked?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad fails to load.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when ad impression is detected.\n     */\n    onAdImpression?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video starts playing.\n     */\n    onVideoStart?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video plays.\n     */\n    onVideoPlay?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video ends.\n     */\n    onVideoEnd?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video pauses.\n     */\n    onVideoPause?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when the mute status of a video changes.\n     */\n    onVideoMute?: (event: AdEvent<Muted>) => void;\n  }\n\n  /**\n   *  React component that shows native ads.\n   */\n  export class HMSNative extends React.Component<HMSNativeProps, any> {\n    /**\n     *  Gets information related to HMSNative component.\n     */\n    getInfo(): Promise<NativeInfo>;\n\n    /**\n     *  Loads native ad.\n     */\n    loadAd(): void;\n\n    /**\n     *  Dislikes ad with description.\n     */\n    dislikeAd(reason: string): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n\n    /**\n     *  Goes to the page explaining why an ad is displayed.\n     */\n    gotoWhyThisAdPage(): void;\n\n    /**\n     *  Enables custom tap gestures.\n     */\n    setAllowCustomClick(): void;\n\n    /**\n     *  Reports a custom tap gesture.\n     */\n    recordClickEvent(): void;\n\n    /**\n     *  Reports an ad impression.\n     */\n    recordImpressionEvent(data: object): void;\n\n    /**\n     * Displays the advertiser information dialog box.\n     */\n    showAdvertiserInfoDialog(showWhyThisAd: boolean): void;\n\n    /**\n     * Hides the advertiser information dialog box.\n     */\n    hideAdvertiserInfoDialog(): void;\n\n    /**\n     * Shows the privacy policy of the app.\n     */\n    showPrivacyPolicy(): void;\n\n    /**\n     * Shows the app permission list.\n     */\n    showPermissionPage(): void;\n\n    /**\n     * Shows the introduction page of the promoted app.\n     */\n    showAppDetailPage(): void;\n  }\n\n  interface VASTInfo {\n    /**\n     *  VAST ad player informations.\n     */\n    adPlayerConfigs: AdPlayerConfigs;\n\n    /**\n     *  VAST ad Slot informations.\n     */\n    linearAdSlot: LinearAdSlot;\n\n    /**\n     *  VAST ad data informations.\n     */\n    adsData: AdsData;\n\n    /**\n     *  VAST ad video controller informations.\n     */\n    videoControllerInfo: VideoControllerInfo;\n  }\n\n  interface AdPlayerConfigs {\n    /**\n     *  Obtains player configurations.\n     */\n    playerConfigs: PlayerConfig;\n\n    /**\n     *  Checks whether a linear ad is shown.\n     */\n    isLinearAdShown: boolean;\n\n    /**\n     *  Checks whether a linear ad is being played.\n     */\n    isLinearPlaying: boolean;\n\n    /**\n     *  Checks whether a Nonlinear ad is being played.\n     */\n    isNonlinearPlaying: boolean;\n\n    /**\n     *  Called when a user clicks the return button.\n     */\n    onBackPressed: boolean;\n  }\n\n  interface PlayerConfig {\n    /**\n     *  Checks whether the landscape mode is enabled.\n     */\n    enableRotation?: boolean;\n\n    /**\n     *  Checks whether a linear ad is skippable.\n     */\n    skipLinearAd?: boolean;\n\n    /**\n     *  Checks whether the player adapts to a notched screen.\n     */\n    isEnableCutout?: boolean;\n\n    /**\n     *  Checks whether the portrait mode is enabled.\n     */\n    isEnablePortrait?: boolean;\n\n    /**\n     *  Checks whether the player is forcibly muted.\n     */\n    isForceMute?: boolean;\n\n    /**\n     *  Checks whether the industry icon is displayed.\n     */\n    isIndustryIconShow?: boolean;\n  }\n\n  interface LinearAdSlot {\n    /**\n     *  Obtains the ad creative matching strategy.\n     */\n    creativeMatchStrategy: CreativeMatchStrategy;\n\n    /**\n     *  Obtains the ad unit height.\n     */\n    height: number;\n\n    /**\n     *  Obtains the ad unit width.\n     */\n    width: number;\n\n    /**\n     *  Obtains the maximum number of ads in a pod.\n     */\n    maxAdPods: number;\n\n    /**\n     *  Obtains the screen orientation.\n     */\n    orientation: number;\n\n    /**\n     *  Obtains ad request configurations.\n     */\n    requestOptions: VASTRequestOptions;\n\n    /**\n     *  Obtains the total ad duration.\n     */\n    totalDuration: number;\n\n    /**\n     *  Mobile data can be used to preload ad content.\n     */\n    isAllowMobileTraffic: boolean;\n\n    /**\n     *  Obtains the ad unit ID.\n     */\n    slotId: string;\n  }\n\n  interface VASTRequestOptions {\n    /**\n     *  Ad content rating. Check ContentClassification for possible values.\n     */\n    adContentClassification?: string;\n\n    /**\n     *  Country/Region for an app.\n     */\n    appCountry?: string;\n\n    /**\n     *  Language for an app.\n     */\n    appLang?: string;\n\n    /**\n     *  Obtains the user consent string that complies with TCF v2.0.\n     */\n    consent?: string;\n\n    /**\n     *  Indicates whether to request only non-personalized ads. Check NonPersonalizedAd for possible values.\n     */\n    nonPersonalizedAd?: number;\n\n    /**\n     *  Child-directed setting. Check TagForChild for possible values.\n     */\n    tagForChildProtection?: number;\n\n    /**\n     *  Setting directed to users under the age of consent. Check UnderAge for possible values.\n     */\n    tagForUnderAgeOfPromise?: number;\n\n    /**\n     *  Checks whether location information is requested.\n     */\n    isRequestLocation?: boolean;\n  }\n\n  interface CreativeMatchStrategy {\n    /**\n     *  Obtains the ad creative matching strategy.\n     */\n    creativeMatchType: CreativeMatchType;\n    /**\n     *  Obtains the expected ad creative height.\n     */\n    height: number;\n    /**\n     *  Obtains the expected ad creative width.\n     */\n    width: number;\n  }\n\n  interface AdsData {\n    /**\n     *  Obtains the list of linear ad creatives.\n     */\n    linearAdCreatives: LinearCreatives[];\n\n    /**\n     *  Obtains the list of backup ad creatives.\n     */\n    backupAdCreatives: LinearCreatives[];\n  }\n\n  interface LinearCreatives {\n    /**\n     *  Obtains an ad extended field.\n     */\n    adExtensions: CreativeExtension;\n\n    /**\n     *  Obtains an ad asset extended field.\n     */\n    typeToCreativeExtensions: CreativeExtension;\n\n    /**\n     *  Obtains the ad asset ID.\n     */\n    contentId: string;\n\n    /**\n     *  Obtains the ad request ID.\n     */\n    requestId: string;\n\n    /**\n     *  Obtains the impression ID.\n     */\n    showId: string;\n\n    /**\n     *  Obtains the ad unit ID.\n     */\n    slotId: string;\n\n    /**\n     *  Obtains the ad asset type.\n     */\n    type: string;\n\n    /**\n     *  Obtains the ad asset URL.\n     */\n    url: string;\n  }\n\n  interface CreativeExtension {\n    /**\n     *  Obtains the type of an extended field.\n     */\n    type: string;\n\n    /**\n     *  Obtains the value of an extended field.\n     */\n    value: string;\n  }\n\n  interface VideoControllerInfo {\n    /**\n     *  Checks whether the player is muted.\n     */\n    isMute: boolean;\n\n    /**\n     *  Obtains the ID of the ad player layout file.\n     */\n    layoutId: number;\n  }\n\n  interface PlayState {\n    /**\n     *  Play state code.\n     */\n    playStateCode: number;\n\n    /**\n     *  Player status.\n     */\n    playStateMessage: string;\n  }\n\n  interface Volume {\n    /**\n     *  System media volume.\n     */\n    volume: number;\n  }\n\n  interface ScreenState {\n    /**\n     *  Screen Status Code.\n     */\n    screenStateCode: number;\n\n    /**\n     *  Screen viewing mode.\n     */\n    screenStateMessage: string;\n  }\n\n  interface Progress {\n    /**\n     *  Total duration of all assets to be played, in milliseconds.\n     */\n    duration: number;\n\n    /**\n     *  Played duration, in milliseconds.\n     */\n    currentPosition: number;\n\n    /**\n     *  Duration before which an ad can be skipped, in milliseconds.\n     */\n    skipDuration: number;\n  }\n\n  interface VASTAdParam {\n    /**\n     *  Ad unit ID.\n     */\n    adId: string;\n\n    /**\n     *  Total ad duration.\n     */\n    totalDuration: number;\n\n    /**\n     *  Ad creative matching strategy. Check CreativeMatchType for possible values.\n     */\n    creativeMatchStrategy: number;\n\n    /**\n     *  Whether mobile data can be used to preload ad content.\n     */\n    allowMobileTraffic: boolean;\n\n    /**\n     *  Ad Orientation. Check Orientation for possible values.\n     */\n    adOrientation: number;\n\n    /**\n     *  Maximum number of ads in a pod that can be requested each time.\n     */\n    maxAdPods: number;\n\n    /**\n     *  Ad request configurations.\n     */\n    requestOption: VASTRequestOptions;\n  }\n\n  interface AppInstalledNotifyCheck {\n    /**\n     *  Obtains the style of an app activation reminder pop-up.\n     */\n    style: number;\n \n    /**\n     *  Checks whether an app activation reminder pop-up is enabled.\n     */\n    notify: boolean;\n  }\n\n  interface HMSVastProps extends ViewProps {\n    /**\n     *  Indicates whether an ad is a test ad.\n     *   true: yes\n     *   false: no\n     */\n    isTestAd?: boolean;\n\n    /**\n     *  Indicates whether ad video player is custom or default.\n     */\n    isCustomVideoPlayer?: boolean;\n\n    /**\n     *  Indicates whether ad is load with AdsData.\n     */\n    isAdLoadWithAdsData?: boolean;\n\n    /**\n     *  Ad request parameters.\n     */\n    adParam?: VASTAdParam;\n\n    /**\n     *  Ad player attributes.\n     */\n    playerConfigs?: PlayerConfig;\n\n    /**\n     *  Function to handle the event when an ad load successfuly and isAdLoadWithAdsData value is true.\n     */\n    onLoadSuccess?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when ad loading is failed and isAdLoadWithAdsData value is true.\n     */\n    onLoadFailed?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when an ad is loaded.\n     */\n    onSuccess?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Function to handle the event when ad ad is ready for playback.\n     */\n    onPlayAdReady?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when an ad playback ends.\n     */\n    onPlayAdFinish?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when video starts buffering.\n     */\n    onBufferStart?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when video buffering is complete.\n     */\n    onBufferEnd?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Function to handle the event when the player status of ad changes.It obtains an event information object as the parameter which has nativeEvent as the key and a PlayState object as the value.\n     */\n    onPlayStateChanged?: (event: AdEvent<PlayState>) => void;\n\n    /**\n     *  Function to handle the event when the system media volume is adjusted.It obtains an event information object as the parameter which has nativeEvent as the key and a Volume object as the value.\n     */\n    onVolumeChanged?: (event: AdEvent<Volume>) => void;\n\n    /**\n     *  Function to handle the event when the screen viewing mode changes.It obtains an event information object as the parameter which has nativeEvent as the key and a ScreenState object as the value.\n     */\n    onScreenViewChanged?: (event: AdEvent<ScreenState>) => void;\n\n    /**\n     *  Function to handle the event when the playback progress changes.It obtains an event information object as the parameter which has nativeEvent as the key and a Progress object as the value.\n     */\n    onProgressChanged?: (event: AdEvent<Progress>) => void;\n  }\n\n  export class HMSVastView extends React.Component<HMSVastProps, any> {\n\n    /**\n     *  Loads vast ad.\n     */\n    loadAd(): void;\n\n    /**\n     *  Obtains information about a component.\n     */\n    getInfo(): Promise<VASTInfo>;\n\n    /**\n     *  Removes an ad asset from the player.\n     */\n    release(): void;\n\n    /**\n     *  Pauses ad playback.\n     */\n    pause(): void;\n\n    /**\n     *  Pauses or resumes playback.\n     */\n    startOrPause(): void;\n\n    /**\n     *  Reports a custom tap gesture.\n     */\n    toggleMuteState(isMute: boolean): void;\n  }\n\n  export enum NonPersonalizedAdEnum {\n    PERSONALIZED = 0,\n    NON_PERSONALIZED = 1,\n  }\n\n  export abstract class HMSVastEnum {\n    static readonly NonPersonalizedAd = NonPersonalizedAdEnum;\n    static readonly ContentClassification = ContentClassification;\n    static readonly TagForChild = TagForChild;\n    static readonly UnderAge = UnderAge;\n    static readonly CreativeMatchType = CreativeMatchType;\n    static readonly Orientation = Orientation; \n  }\n\n  export interface VastSdkConfiguration {\n\n    /**\n     * Obtains the network request timeout.\n     */\n    httpCallTimeoutMs?: number;\n\n    /**\n     * Obtains the network connection timeout.\n     */\n    httpConnectTimeoutMs?: number;\n\n    /**\n     * Obtains the keepalive time for connections between asset download and VAST ad event reporting.\n     */\n    httpKeepAliveDurationMs?: number;\n\n    /**\n     * Obtains the network response read timeout.\n     */\n    httpReadTimeoutMs?: number;\n\n    /**\n     * Obtains the maximum number of connections allowed between asset download and VAST ad event reporting.\n     */\n    maxHttpConnections?: number;\n\n    /**\n     * Obtains the maximum number of redirections allowed for a VAST wrapper.\n     */\n    maxRedirectWrapperLimit?: number;\n\n    /**\n     * Checks whether an ad is a test ad.\n     */\n    isTest?: boolean;\n\n    /**\n     * Obtains the number of tracking URLs that have used for each attempt made to report a VAST ad event.\n     */\n    vastEventRetryBatchSize?: number;\n\n    /**\n     * Obtains the interval between two attempts made to report a VAST ad event.\n     */\n    vastEventRetryIntervalSeconds?: number;\n\n    /**\n     * Obtains the maximum number of attempts allowed for reporting a VAST ad event.\n     */\n    vastEventRetryUploadTimes?: number;\n  } \n\n  export const HMSVast = {\n    ...HMSVastEnum,\n\n    /**\n     * Initializes the HUAWEI VAST SDK.\n     */\n    init(vastSdkConfiguration?: VastSdkConfiguration): Promise<string>;,\n\n    /**\n     * Sets whether consent is obtained from users to use their device data and personal data specified in user agreements.\n     */\n    userAcceptAdLicense(isAcceptOrNot: boolean): Promise<string>;,\n\n    /**\n     * Obtains the configuration object for initializing the SDK.\n     */\n    getVastSdkConfiguration(): Promise<VastSdkConfiguration>;,\n\n    /**\n     * Immediately synchronizes the local cache configuration file to the cloud. Once synchronized, the validity period of the file will be recalculated.\n     */\n    updateSdkServerConfig(slotId: string): Promise<string>;\n  }\n\n  export abstract class HMSAdsEnum {\n    static readonly ConsentStatus = ConsentStatus;\n    static readonly DebugNeedConsent = DebugNeedConsent;\n    static readonly AudioFocusType = AudioFocusType;\n    static readonly ContentClassification = ContentClassification;\n    static readonly Gender = Gender;\n    static readonly NonPersonalizedAd = NonPersonalizedAd;\n    static readonly TagForChild = TagForChild;\n    static readonly UnderAge = UnderAge;\n    static readonly NativeAdAssetNames = NativeAdAssetNames;\n    static readonly ChoicesPosition = ChoicesPosition;\n    static readonly Direction = Direction;\n    static readonly ScaleType = ScaleType;\n    static readonly BannerAdSizes = BannerAdSizes;\n    static readonly BannerMediaTypes = BannerMediaTypes;\n    static readonly NativeMediaTypes = NativeMediaTypes;\n    static readonly InterstitialMediaTypes = InterstitialMediaTypes;\n    static readonly RewardMediaTypes = RewardMediaTypes;\n    static readonly SplashMediaTypes = SplashMediaTypes;\n    static readonly CallMode = CallMode;\n    static readonly DetailedCreativeTypes = DetailedCreativeTypes;\n    static readonly ActivateStyle = ActivateStyle;\n    static readonly AutoPlayNetType = AutoPlayNetType;\n  }\n\n  /**\n   *  HMSAds module\n   */\n  export default {\n    ...HMSAdsEnum,\n\n    /**\n     *  Initializes the HUAWEI Ads SDK. The function returns\n     *  a promise that resolves a string 'Hw Ads Initialized'.\n     */\n    init(): Promise<string>;,\n\n    /**\n     *  Enables HMSLogger capability which is used for sending usage\n     *  analytics of Ads SDK's methods to improve the service quality.\n     */\n    enableLogger(): Promise<null>;,\n\n    /**\n     *  Disables HMSLogger capability which is used for sending usage\n     *  analytics of Ads SDK's methods to improve the service quality.\n     */\n    disableLogger(): Promise<null>;,\n\n    /**\n     *  Obtains the version number of the HUAWEI Ads SDK. The function\n     *  returns a promise that resolves a string of the version number.\n     */\n    getSDKVersion(): Promise<string>;,\n\n    /**\n     *  App activation reminder pop-up configuration\n     */\n    appInstalledNotify(notifyVal: boolean, styleVal: number): Promise<AppInstalledNotifyCheck>;,\n\n    /**\n     *  Provides the global ad request configuration.\n     */\n    setRequestOptions(requestOptions: RequestOptions): Promise<RequestOptions>;,\n\n    /**\n     *  Obtains the global request configuration.\n     */\n    getRequestOptions(): Promise<RequestOptions>;,\n\n    /**\n     *  Provides ad consent configuration.\n     */\n    setConsent(consent: Consent): Promise<ConsentResult>;,\n\n    /**\n     *  Sets the user consent string that complies with [TCF 2.0](https://iabeurope.eu/tcf-2-0/)\n     */\n    setConsentString(consent: string): Promise<null>;,\n\n    /**\n     *  Obtains ad consent configuration.\n     */\n    checkConsent(): Promise<ConsentResult>;,\n  };\n}"
  },
  {
    "path": "react-native-hms-ads/src/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSAds from \"./Ads\";\nimport HMSOaid from \"./Oaid\";\nimport HMSBanner from \"./Banner\";\nimport HMSVastView from './VastView';\nimport HMSVast from './Vast';\nimport HMSInstream from \"./Instream\";\nimport HMSNative from \"./Native\";\nimport HMSInstallReferrer from \"./InstallReferrer\";\nimport HMSInterstitial from \"./Interstitial\";\nimport HMSSplash from \"./Splash\";\nimport HMSReward from \"./Reward\";\n\nexport {\n  HMSBanner,\n  HMSInstream,\n  HMSNative,\n  HMSVastView,\n  HMSVast,\n  HMSOaid,\n  HMSInterstitial,\n  HMSInstallReferrer,\n  HMSSplash,\n  HMSReward,\n};\nexport default HMSAds;\n"
  },
  {
    "path": "react-native-hms-ads/src/utils.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeEventEmitter } from \"react-native\";\n\nexport const addListenerToModule = function (module, events) {\n  const emitter = new NativeEventEmitter(module);\n  const subscriptions = new Map();\n\n  events.map((event) => {\n    module[event + \"ListenerAdd\"] = (handler) =>\n      subscriptions.set(event, emitter.addListener(event, handler));\n    module[event + \"ListenerRemove\"] = () => subscriptions.get(event).remove();\n  });\n\n  module.allListenersRemove = () => subscriptions.forEach((a) => a.remove());\n};\n"
  },
  {
    "path": "react-native-hms-adsprime/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-adsprime/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software:&nbsp; @react-native-picker/picker 2.5.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">MIT License&nbsp;</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &quot;Software&quot;), 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 &quot;AS IS&quot;, 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.</p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-adsprime/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Ads Prime</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-adsprime\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-adsprime?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-adsprime\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-adsprime?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-adsprime.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nThis module enables communication between Huawei Ads Prime SDK and React Native platform. It exposes all functionality provided by Huawei Ads Prime SDK.\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050196714?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-adsprime\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/publisher-service-reporting-0000001074651726?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001073228987-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Banner Ads](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/banner-0000001050439147?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-adsprime/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n    mavenCentral()\n}\n\ndependencies {\n    implementation 'com.facebook.react:react-native:+'  \n    implementation 'com.huawei.hms:ads-prime:3.4.73.300'\n    implementation 'com.huawei.hms:ads-consent:3.4.73.300'\n    implementation 'com.huawei.hms:ads-identifier:3.4.62.300'\n    implementation 'com.huawei.hms:ads-installreferrer:3.4.62.300'\n    implementation 'com.huawei.hms:ads-vast:3.4.44.303'\n    implementation 'com.huawei.hms:ads-vast-player:3.4.44.303'\n    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301'\n    implementation 'com.huawei.hms:stats:6.12.0.300'\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-adsprime/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-adsprime/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-adsprime/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.ads\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application android:usesCleartextTraffic=\"true\">\n        <activity\n            android:name=\"com.huawei.hms.rn.ads.HMSAdsPrimeSplashActivity\"\n            android:exported=\"false\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeBannerView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.banner.BannerView;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsPrimeBannerView extends BannerView {\n    private static final String TAG = HMSAdsPrimeBannerView.class.getSimpleName();\n    private ReactContext mReactContext;\n    protected ReadableMap mAdParamReadableMap;\n\n    public enum BannerMediaType {\n        IMAGE(\"image\");\n\n        private String value;\n\n        BannerMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum BannerSize {\n        B_300_250(\"300_250\"),\n        B_320_50(\"320_50\"),\n        B_320_100(\"320_100\"),\n        B_360_57(\"360_57\"),\n        B_360_144(\"360_144\"),\n        B_SMART(\"smart\"),\n        B_DYNAMIC(\"dynamic\"),\n        B_ADVANCED(\"advanced\"),\n        B_INVALID(\"invalid\");\n\n        private String value;\n\n        BannerSize(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static BannerSize forValue(String s) {\n            switch (s) {\n                case \"300_250\":\n                    return B_300_250;\n                case \"320_50\":\n                    return B_320_50;\n                case \"320_100\":\n                    return B_320_100;\n                case \"360_57\":\n                    return B_360_57;\n                case \"360_144\":\n                    return B_360_144;\n                case \"dynamic\":\n                    return B_DYNAMIC;\n                case \"invalid\":\n                    return B_INVALID;\n                case \"advanced\":\n                    return B_ADVANCED;\n                default:\n                    return B_SMART;\n            }\n        }\n    }\n\n    public HMSAdsPrimeBannerView(final Context context) {\n        super(context);\n    }\n\n    public HMSAdsPrimeBannerView(final ThemedReactContext context) {\n        super(context);\n        mReactContext = context;\n        setAdListener(new AdListener() {\n            @Override\n            public void onAdLoaded() {\n                sendEvent(Manager.Event.AD_LOADED, null);\n            }\n\n            @Override\n            public void onAdFailed(int errorCode) {\n                sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onAdOpened() {\n                sendEvent(Manager.Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Manager.Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdClosed() {\n                sendEvent(Manager.Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Manager.Event.AD_IMPRESSION, null);\n            }\n\n            @Override\n            public void onAdLeave() {\n                sendEvent(Manager.Event.AD_LEAVE, null);\n            }\n        });\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(() -> {\n            measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n            layout(getLeft(), getTop(), getRight(), getBottom());\n        });\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    void loadAd() {\n        loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mAdParamReadableMap = adParamReadableMap;\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsPrimeBannerView> {\n        private HMSLogger hmsLogger;\n        private ReactApplicationContext mReactContext;\n\n        public Manager(ReactApplicationContext reactContext) {\n            mReactContext = reactContext;\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            AD_LOADED(\"onAdLoaded\"),\n            AD_FAILED(\"onAdFailed\"),\n            AD_OPENED(\"onAdOpened\"),\n            AD_CLICKED(\"onAdClicked\"),\n            AD_CLOSED(\"onAdClosed\"),\n            AD_IMPRESSION(\"onAdImpression\"),\n            AD_LEAVE(\"onAdLeave\");\n\n            private String bannerEventName;\n\n            Event(String bannerEventName) {\n                this.bannerEventName = bannerEventName;\n            }\n\n            public String getName() {\n                return bannerEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            SET_REFRESH(\"setRefresh\"),\n            PAUSE(\"pause\"),\n            RESUME(\"resume\"),\n            DESTROY(\"destroy\");\n\n            private String bannerCommandName;\n\n            Command(String bannerCommandName) {\n                this.bannerCommandName = bannerCommandName;\n            }\n\n            public String getName() {\n                return bannerCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsPrimeBannerView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsPrimeBannerView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"bannerView.create\");\n            return new HMSAdsPrimeBannerView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsPrimeBannerView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"bannerView.loadAd\");\n                        break;\n                    case SET_REFRESH:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.setBannerRefresh\");\n                        root.setBannerRefresh(args.getInt(0));\n                        hmsLogger.sendSingleEvent(\"bannerView.setBannerRefresh\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.pause\");\n                        root.pause();\n                        hmsLogger.sendSingleEvent(\"bannerView.pause\");\n                        break;\n                    case RESUME:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.resume\");\n                        root.resume();\n                        hmsLogger.sendSingleEvent(\"bannerView.resume\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"bannerView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"bannerView.destroy\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsPrimeBannerView view, final ReadableMap rm) {\n            hmsLogger.sendSingleEvent(\"bannerView.setAdParam\");\n            view.setAdParam(rm);\n        }\n\n        @ReactProp(name = \"bannerAdSize\")\n        public void setBannerAdSize(final HMSAdsPrimeBannerView view, final String adSize) {\n            hmsLogger.sendSingleEvent(\"bannerView.setBannerAdSize\");\n            view.setBannerAdSize(ReactUtils.getBannerAdSizeFromReadableMap(mReactContext, adSize));\n        }\n\n        @ReactProp(name = \"adId\")\n        public void setAdId(final HMSAdsPrimeBannerView view, final String adId) {\n            hmsLogger.sendSingleEvent(\"bannerView.setAdId\");\n            view.setAdId(adId);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeInstallReferrerModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.RemoteException;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.ads.installreferrer.api.InstallReferrerClient;\nimport com.huawei.hms.ads.installreferrer.api.InstallReferrerStateListener;\nimport com.huawei.hms.ads.installreferrer.api.ReferrerDetails;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.io.IOException;\n\nimport static com.huawei.hms.rn.ads.HMSAdsPrimeModule.CallMode;\n\npublic class HMSAdsPrimeInstallReferrerModule extends ReactContextBaseJavaModule implements InstallReferrerStateListener {\n    private static final String TAG = HMSAdsPrimeInstallReferrerModule.class.getSimpleName();\n\n    private final ReactApplicationContext reactContext;\n    private HMSLogger hmsLogger;\n    private InstallReferrerClient mReferrerClient;\n\n    public enum Event {\n        SERVICE_CONNECTED(\"serviceConnected\"),\n        SERVICE_DISCONNECTED(\"serviceDisconnected\");\n\n        private String name;\n\n        Event(String name) {\n            this.name = name;\n        }\n\n        public String getName() {\n            return name;\n        }\n    }\n\n    HMSAdsPrimeInstallReferrerModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrimeInstallReferrer\";\n    }\n\n    @Override\n    public void onInstallReferrerSetupFinished(int responseCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"responseCode\", responseCode);\n        wm.putString(\"responseMessage\", getResponseMessage(responseCode));\n        sendEvent(Event.SERVICE_CONNECTED, wm);\n    }\n\n    @Override\n    public void onInstallReferrerServiceDisconnected() {\n        sendEvent(Event.SERVICE_DISCONNECTED, null);\n    }\n\n    void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void startConnection(final String callMode, final boolean isTest, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (CallMode.forValue(callMode) == CallMode.AIDL) {\n                promise.reject(\"AIDL_SERVICE_INVALID\", \"Aidl service is disabled\");\n                return;\n            }\n            if (mReferrerClient != null) {\n                promise.reject(\"REFERRER_CANNOT_CONNECT\", \"Referrer already connected\");\n                return;\n            }\n            mReferrerClient = InstallReferrerClient.newBuilder(reactContext).setTest(isTest).build();\n            hmsLogger.startMethodExecutionTimer(\"startConnection\");\n            mReferrerClient.startConnection(this);\n            hmsLogger.sendSingleEvent(\"startConnection\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void endConnection(final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mReferrerClient == null) {\n                promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n                return;\n            }\n            hmsLogger.startMethodExecutionTimer(\"endConnection\");\n            mReferrerClient.endConnection();\n            hmsLogger.sendSingleEvent(\"endConnection\");\n            mReferrerClient = null;\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void getReferrerDetails(final String installChannel, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mReferrerClient == null) {\n                promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n                return;\n            }\n            try {\n                hmsLogger.startMethodExecutionTimer(\"getInstallReferrer\");\n                ReferrerDetails referrerDetails = mReferrerClient.getInstallReferrer();\n                referrerDetails.setInstallChannel(installChannel);\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\");\n                promise.resolve(ReactUtils.getWritableMapFromReferrerDetails(referrerDetails));\n            } catch (RemoteException e) {\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\", \"-1\");\n                promise.reject(\"REMOTE_EXCEPTION\", e.getMessage());\n            } catch (IOException e) {\n                hmsLogger.sendSingleEvent(\"getInstallReferrer\", \"-1\");\n                promise.reject(\"IO_EXCEPTION\", e.getMessage());\n            }\n        });\n    }\n\n    @ReactMethod\n    public void isReady(final Promise promise) {\n        if (mReferrerClient == null) {\n            promise.reject(\"REFERRER_NOT_AVAILABLE\", \"Referrer is not available\");\n            return;\n        }\n        hmsLogger.startMethodExecutionTimer(\"isReady\");\n        promise.resolve(mReferrerClient.isReady());\n        hmsLogger.sendSingleEvent(\"isReady\");\n    }\n\n    private String getResponseMessage(int responseCode) {\n        String responseMessage = \"Unknown response\";\n        switch (responseCode) {\n            case InstallReferrerClient.InstallReferrerResponse.OK:\n                responseMessage = \"Connected to the service successfully\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:\n                // Service not supported. Please download and install the latest version of Huawei Mobile\n                // Services(APK).\n                responseMessage = \"The service is not supported\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:\n                // Service unavailable. Please update the version of Huawei Mobile Services(APK) to 2.6.5 or later.\n                responseMessage = \"The service does not exist\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED:\n                responseMessage = \"Failed to connect to the service\";\n                break;\n            case InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR:\n                responseMessage = \"A call error occurred\";\n                break;\n            default:\n                break;\n        }\n        return responseMessage;\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeInstreamView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\n\nimport com.huawei.hms.ads.MediaMuteListener;\nimport com.huawei.hms.ads.instreamad.InstreamAd;\nimport com.huawei.hms.ads.instreamad.InstreamAdLoadListener;\nimport com.huawei.hms.ads.instreamad.InstreamAdLoader;\nimport com.huawei.hms.ads.instreamad.InstreamMediaChangeListener;\nimport com.huawei.hms.ads.instreamad.InstreamMediaStateListener;\nimport com.huawei.hms.ads.instreamad.InstreamView;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.ArrayList;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSAdsPrimeInstreamView extends InstreamView\n    implements InstreamMediaChangeListener, InstreamMediaStateListener, MediaMuteListener, InstreamAdLoadListener,\n    InstreamView.OnInstreamAdClickListener {\n    private static final String TAG = HMSAdsPrimeInstreamView.class.getSimpleName();\n\n    private ReactContext mReactContext;\n\n    protected List<InstreamAd> mInstreamAds = new ArrayList<>();\n\n    protected InstreamAdLoader mInstreamAdLoader;\n\n    protected String mAdId;\n\n    protected ReadableMap mAdParamReadableMap;\n\n    protected int mMaxCount;\n\n    protected int mTotalDuration;\n\n    public HMSAdsPrimeInstreamView(final Context context) {\n        super(context);\n    }\n\n    public HMSAdsPrimeInstreamView(final ThemedReactContext context) {\n        super(context);\n        mReactContext = context;\n        setInstreamMediaChangeListener(this);\n        setInstreamMediaStateListener(this);\n        setMediaMuteListener(this);\n        setOnInstreamAdClickListener(this);\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(() -> {\n            measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n            layout(getLeft(), getTop(), getRight(), getBottom());\n        });\n    }\n\n    @Override\n    public void onClick() {\n        sendEvent(Manager.Event.CLICK, null);\n    }\n\n    @Override\n    public void onMute() {\n        sendEvent(Manager.Event.MUTE, null);\n    }\n\n    @Override\n    public void onUnmute() {\n        sendEvent(Manager.Event.UNMUTE, null);\n    }\n\n    @Override\n    public void onAdLoaded(List<InstreamAd> ads) {\n        if (null == ads || ads.size() == 0) {\n            return;\n        }\n        Iterator<InstreamAd> it = ads.iterator();\n        while (it.hasNext()) {\n            InstreamAd ad = it.next();\n            if (ad.isExpired()) {\n                it.remove();\n            }\n        }\n        if (ads.size() == 0) {\n            return;\n        }\n\n        mInstreamAds = ads;\n        sendEvent(Manager.Event.AD_LOADED, null);\n    }\n\n    @Override\n    public void onAdFailed(int errorCode) {\n        sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n    }\n\n    @Override\n    public void onSegmentMediaChange(InstreamAd instreamAd) {\n        sendEvent(Manager.Event.SEGMENT_MEDIA_CHANGE, ReactUtils.getWritableMapFromInstreamAd(instreamAd));\n    }\n\n    @Override\n    public void onMediaProgress(int percent, int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"percent\", percent);\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_PROGRESS, wm);\n    }\n\n    @Override\n    public void onMediaStart(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_START, wm);\n    }\n\n    @Override\n    public void onMediaPause(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_PAUSE, wm);\n    }\n\n    @Override\n    public void onMediaStop(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_STOP, wm);\n    }\n\n    @Override\n    public void onMediaCompletion(int playTime) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        sendEvent(Manager.Event.MEDIA_COMPLETION, wm);\n    }\n\n    @Override\n    public void onMediaError(int playTime, int errorCode, int extra) {\n        WritableNativeMap wm = new WritableNativeMap();\n        wm.putInt(\"playTime\", playTime);\n        wm.putInt(\"extra\", extra);\n        wm.putMap(\"error\", ReactUtils.getWritableMapFromErrorCode(errorCode));\n        sendEvent(Manager.Event.MEDIA_ERROR, wm);\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    public void loadAd() {\n        mInstreamAdLoader = new InstreamAdLoader.Builder(mReactContext, mAdId).setTotalDuration(mTotalDuration)\n            .setMaxCount(mMaxCount)\n            .setInstreamAdLoadListener(this)\n            .build();\n        mInstreamAdLoader.loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    public void register() {\n        setInstreamAds(mInstreamAds);\n    }\n\n    public void setAdParam(ReadableMap rm) {\n        mAdParamReadableMap = rm;\n    }\n\n    public void setAdId(String adId) {\n        mAdId = adId;\n    }\n\n    public void setTotalDuration(int totalDuration) {\n        mTotalDuration = totalDuration;\n    }\n\n    public void setMaxCount(int maxCount) {\n        mMaxCount = maxCount;\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsPrimeInstreamView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            MUTE(\"onMute\"),\n            UNMUTE(\"onUnmute\"),\n            AD_LOADED(\"onAdLoaded\"),\n            AD_FAILED(\"onAdFailed\"),\n            SEGMENT_MEDIA_CHANGE(\"onSegmentMediaChange\"),\n            MEDIA_PROGRESS(\"onMediaProgress\"),\n            MEDIA_START(\"onMediaStart\"),\n            MEDIA_PAUSE(\"onMediaPause\"),\n            MEDIA_STOP(\"onMediaStop\"),\n            MEDIA_COMPLETION(\"onMediaCompletion\"),\n            MEDIA_ERROR(\"onMediaError\"),\n            CLICK(\"onClick\");\n\n            private String instreamEventName;\n\n            Event(String instreamEventName) {\n                this.instreamEventName = instreamEventName;\n            }\n\n            public String getName() {\n                return instreamEventName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            REGISTER(\"register\"),\n            MUTE(\"mute\"),\n            UNMUTE(\"unmute\"),\n            STOP(\"stop\"),\n            PAUSE(\"pause\"),\n            PLAY(\"play\"),\n            DESTROY(\"destroy\"),\n            SHOW_ADVERTISER_INFO_DIALOG(\"showAdvertiserInfoDialog\"),\n            HIDE_ADVERTISER_INFO_DIALOG(\"hideAdvertiserInfoDialog\"),\n            SHOW_TRANSPARENCY_DIALOG(\"showTransparencyDialog\"),\n            HIDE_TRANSPARENCY_DIALOG(\"hideTransparencyDialog\");\n\n            private String instreamCommandName;\n\n            Command(String instreamCommandName) {\n                this.instreamCommandName = instreamCommandName;\n            }\n\n            public String getName() {\n                return instreamCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsPrimeInstreamView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsPrimeInstreamView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"instreamView.create\");\n            return new HMSAdsPrimeInstreamView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsPrimeInstreamView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"instreamView.loadAd\");\n                        break;\n                    case REGISTER:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.register\");\n                        root.register();\n                        hmsLogger.sendSingleEvent(\"instreamView.register\");\n                        break;\n                    case MUTE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.mute\");\n                        root.mute();\n                        hmsLogger.sendSingleEvent(\"instreamView.mute\");\n                        break;\n                    case UNMUTE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.unmute\");\n                        root.unmute();\n                        hmsLogger.sendSingleEvent(\"instreamView.unmute\");\n                        break;\n                    case STOP:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.stop\");\n                        root.stop();\n                        hmsLogger.sendSingleEvent(\"instreamView.stop\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.pause\");\n                        root.pause();\n                        hmsLogger.sendSingleEvent(\"instreamView.pause\");\n                        break;\n                    case PLAY:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.play\");\n                        root.play();\n                        hmsLogger.sendSingleEvent(\"instreamView.play\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"instreamView.destroy\");\n                        break;\n                    case SHOW_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.showAdvertiserInfoDialog\");\n                        root.showAdvertiserInfoDialog(root, args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"instreamView.showAdvertiserInfoDialog\");\n                        break;\n                    case HIDE_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.hideAdvertiserInfoDialog\");\n                        root.hideAdvertiserInfoDialog();\n                        hmsLogger.sendSingleEvent(\"instreamView.hideAdvertiserInfoDialog\");\n                        break;\n                    case SHOW_TRANSPARENCY_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instreamView.showTransparencyDialog\");\n                        if (args != null) {\n                            ReadableArray list = args.getArray(0);\n                            int[] location = new int[list.size()];\n                            if (list != null) {\n                                for (int i = 0; i < list.size(); i++) {\n                                    location[i] = (list.getInt(i));\n                                }\n                            }\n                            root.showTransparencyDialog(root, location);\n                        } else {\n                            root.showTransparencyDialog(root);\n                        }\n                        hmsLogger.sendSingleEvent(\"instreamView.showTransparencyDialog\");\n                        break;\n                    case HIDE_TRANSPARENCY_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"instremView.hideTransparencyDialog\");\n                        root.hideTransparencyDialog();\n                        hmsLogger.sendSingleEvent(\"instremView.hideTransparencyDialog\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsPrimeInstreamView view, final ReadableMap rm) {\n            hmsLogger.sendSingleEvent(\"instreamView.setAdParam\");\n            view.setAdParam(rm);\n        }\n\n        @ReactProp(name = \"adId\")\n        public void setAdId(final HMSAdsPrimeInstreamView view, final String adId) {\n            hmsLogger.sendSingleEvent(\"instreamView.setAdId\");\n            view.setAdId(adId);\n        }\n\n        @ReactProp(name = \"maxCount\")\n        public void setMaxCount(final HMSAdsPrimeInstreamView view, final int maxCount) {\n            hmsLogger.sendSingleEvent(\"instreamView.setMaxCount\");\n            view.setMaxCount(maxCount);\n        }\n\n        @ReactProp(name = \"totalDuration\")\n        public void setTotalDuration(final HMSAdsPrimeInstreamView view, final int totalDuration) {\n            hmsLogger.sendSingleEvent(\"instreamView.setTotalDuration\");\n            view.setTotalDuration(totalDuration);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeInterstitialAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.InterstitialAd;\n\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAdListener;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\npublic class HMSAdsPrimeInterstitialAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsPrimeInterstitialAdModule.class.getSimpleName();\n    private ReactApplicationContext mReactContext;\n    private HMSLogger hmsLogger;\n    private InterstitialAd interstitialAd;\n\n    private ReadableMap mAdParamReadableMap;\n    private String mAdId;\n    private AdListener mAdListener;\n    private final RewardAdListener mRewardAdListener;\n    private VideoConfiguration mVideoConfiguration;\n\n\n    public enum InterstitialMediaType {\n        IMAGE(\"image\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        InterstitialMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_CLOSED(\"adClosed\"),\n        AD_FAILED(\"adFailed\"),\n        AD_LEAVE(\"adLeave\"),\n        AD_OPENED(\"adOpened\"),\n        AD_LOADED(\"adLoaded\"),\n        AD_CLICKED(\"adClicked\"),\n        AD_IMPRESSION(\"adImpression\"),\n        AD_COMPLETED(\"adCompleted\"),\n        AD_STARTED(\"adStarted\");\n\n        private String interstitialEventName;\n\n        Event(String interstitialEventName) {\n            this.interstitialEventName = interstitialEventName;\n        }\n\n        public String getName() {\n            return interstitialEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrimeInterstitial\";\n    }\n\n    HMSAdsPrimeInterstitialAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mAdListener = new AdListener() {\n            @Override\n            public void onAdClosed() {\n            }\n\n            @Override\n            public void onAdFailed(int errorCode) {\n            }\n\n            @Override\n            public void onAdLeave() {\n                sendEvent(Event.AD_LEAVE, null);\n            }\n\n            @Override\n            public void onAdOpened() {\n            }\n\n            @Override\n            public void onAdLoaded() {\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Event.AD_IMPRESSION, null);\n            }\n        };\n        mRewardAdListener = new RewardAdListener() {\n            @Override\n            public void onRewarded(Reward reward) {\n            }\n\n            @Override\n            public void onRewardAdClosed() {\n                sendEvent(Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onRewardAdFailedToLoad(int errorCode) {\n                sendEvent(Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardAdLeftApp() {\n            }\n\n            @Override\n            public void onRewardAdLoaded() {\n                sendEvent(Event.AD_LOADED, ReactUtils.getWritableMapFromInterstitialAd(interstitialAd));\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                sendEvent(Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onRewardAdCompleted() {\n                sendEvent(Event.AD_COMPLETED, null);\n            }\n\n            @Override\n            public void onRewardAdStarted() {\n                sendEvent(Event.AD_STARTED, null);\n            }\n        };\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    private void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void setAdId(final String adId, final Promise promise) {\n        mAdId = adId;\n        hmsLogger.sendSingleEvent(\"interstitialAd.setAdId\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdParam(final ReadableMap rm, final Promise promise) {\n        mAdParamReadableMap = rm;\n        hmsLogger.sendSingleEvent(\"interstitialAd.setAdParam\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadAd(final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            interstitialAd = new InterstitialAd(mReactContext);\n            interstitialAd.setAdListener(mAdListener);\n            interstitialAd.setRewardAdListener(mRewardAdListener);\n            interstitialAd.setAdId(mAdId);\n            AdParam adParam = ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap);\n            interstitialAd.setVideoConfiguration(mVideoConfiguration);\n            hmsLogger.startMethodExecutionTimer(\"interstitialAd.loadAd\");\n            interstitialAd.loadAd(adParam);\n            hmsLogger.sendSingleEvent(\"interstitialAd.loadAd\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.show\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (interstitialAd == null) {\n                promise.reject(\"AD_NOT_CREATED\", \"Interstitial ad is not created\");\n                hmsLogger.sendSingleEvent(\"interstitialAd.show\", \"-1\");\n                return;\n            }\n            interstitialAd.show(mReactContext.getCurrentActivity());\n            hmsLogger.sendSingleEvent(\"interstitialAd.show\");\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void setVideoConfiguration(final ReadableMap rm, final Promise promise) {\n        VideoConfiguration.Builder mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        if (rm == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(rm, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(rm.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                rm.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                rm.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(rm.getBoolean(\"startMuted\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.isLoaded\");\n        promise.resolve(interstitialAd != null && interstitialAd.isLoaded());\n        hmsLogger.sendSingleEvent(\"interstitialAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void isLoading(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"interstitialAd.isLoading\");\n        promise.resolve(interstitialAd != null && interstitialAd.isLoading());\n        hmsLogger.sendSingleEvent(\"interstitialAd.isLoading\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.util.ArrayMap;\nimport android.util.Log;\nimport android.view.View;\nimport android.widget.ImageView;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.UIManagerModule;\nimport com.huawei.hms.ads.ActivateStyle;\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.AudioFocusType;\nimport com.huawei.hms.ads.ContentClassification;\nimport com.huawei.hms.ads.Gender;\nimport com.huawei.hms.ads.HwAds;\n\nimport com.huawei.hms.ads.NonPersonalizedAd;\nimport com.huawei.hms.ads.RequestOptions;\nimport com.huawei.hms.ads.TagForChild;\nimport com.huawei.hms.ads.UnderAge;\nimport com.huawei.hms.ads.consent.bean.AdProvider;\nimport com.huawei.hms.ads.consent.constant.ConsentStatus;\nimport com.huawei.hms.ads.consent.constant.DebugNeedConsent;\nimport com.huawei.hms.ads.consent.inter.Consent;\nimport com.huawei.hms.ads.consent.inter.ConsentUpdateListener;\nimport com.huawei.hms.ads.nativead.DetailedCreativeType;\nimport com.huawei.hms.ads.nativead.NativeAdAssetNames;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSAdsPrimeModule extends ReactContextBaseJavaModule implements ConsentUpdateListener {\n    private static final String TAG = HMSAdsPrimeModule.class.getSimpleName();\n    private final ReactApplicationContext reactContext;\n    private HMSLogger hmsLogger;\n    private RequestOptions mRequestOptions;\n    private Promise mPromise;\n\n    HMSAdsPrimeModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    public enum CallMode {\n        AIDL(\"aidl\"),\n        SDK(\"sdk\");\n\n        private String value;\n\n        CallMode(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static CallMode forValue(String s) {\n            if (\"aidl\".equals(s)) {\n                return AIDL;\n            }\n            return SDK;\n        }\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n\n        Map<String, Object> consentStatus = new ArrayMap<>();\n        consentStatus.put(\"PERSONALIZED\", ConsentStatus.PERSONALIZED.getValue());\n        consentStatus.put(\"NON_PERSONALIZED\", ConsentStatus.NON_PERSONALIZED.getValue());\n        consentStatus.put(\"UNKNOWN\", ConsentStatus.UNKNOWN.getValue());\n        constants.put(\"ConsentStatus\", consentStatus);\n\n        Map<String, Object> debugNeedConsent = new ArrayMap<>();\n        debugNeedConsent.put(\"DEBUG_DISABLED\", DebugNeedConsent.DEBUG_DISABLED.getValue());\n        debugNeedConsent.put(\"DEBUG_NEED_CONSENT\", DebugNeedConsent.DEBUG_NEED_CONSENT.getValue());\n        debugNeedConsent.put(\"DEBUG_NOT_NEED_CONSENT\", DebugNeedConsent.DEBUG_NOT_NEED_CONSENT.getValue());\n        constants.put(\"DebugNeedConsent\", debugNeedConsent);\n\n        Map<String, Object> audioFocusType = new ArrayMap<>();\n        audioFocusType.put(\"GAIN_AUDIO_FOCUS_ALL\", AudioFocusType.GAIN_AUDIO_FOCUS_ALL);\n        audioFocusType.put(\"NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE);\n        audioFocusType.put(\"NOT_GAIN_AUDIO_FOCUS_ALL\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_ALL);\n        constants.put(\"AudioFocusType\", audioFocusType);\n\n        Map<String, Object> contentClassification = new ArrayMap<>();\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_W\", ContentClassification.AD_CONTENT_CLASSIFICATION_W);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_PI\", ContentClassification.AD_CONTENT_CLASSIFICATION_PI);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_J\", ContentClassification.AD_CONTENT_CLASSIFICATION_J);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_A\", ContentClassification.AD_CONTENT_CLASSIFICATION_A);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_UNKNOWN\",\n                ContentClassification.AD_CONTENT_CLASSIFICATION_UNKOWN);\n        constants.put(\"ContentClassification\", contentClassification);\n\n        Map<String, Object> gender = new ArrayMap<>();\n        gender.put(\"UNKNOWN\", Gender.UNKNOWN);\n        gender.put(\"MALE\", Gender.MALE);\n        gender.put(\"FEMALE\", Gender.FEMALE);\n        constants.put(\"Gender\", gender);\n\n        Map<String, Object> nonPersonalizedAd = new ArrayMap<>();\n        nonPersonalizedAd.put(\"ALLOW_ALL\", NonPersonalizedAd.ALLOW_ALL);\n        nonPersonalizedAd.put(\"ALLOW_NON_PERSONALIZED\", NonPersonalizedAd.ALLOW_NON_PERSONALIZED);\n        constants.put(\"NonPersonalizedAd\", nonPersonalizedAd);\n\n        Map<String, Object> tagForChild = new ArrayMap<>();\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_FALSE\", TagForChild.TAG_FOR_CHILD_PROTECTION_FALSE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_TRUE\", TagForChild.TAG_FOR_CHILD_PROTECTION_TRUE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_UNSPECIFIED\", TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED);\n        constants.put(\"TagForChild\", tagForChild);\n\n        Map<String, Object> underAge = new ArrayMap<>();\n        underAge.put(\"PROMISE_FALSE\", UnderAge.PROMISE_FALSE);\n        underAge.put(\"PROMISE_TRUE\", UnderAge.PROMISE_TRUE);\n        underAge.put(\"PROMISE_UNSPECIFIED\", UnderAge.PROMISE_UNSPECIFIED);\n        constants.put(\"UnderAge\", underAge);\n\n        Map<String, Object> nativeAdAssetNames = new ArrayMap<>();\n        nativeAdAssetNames.put(\"TITLE\", NativeAdAssetNames.TITLE);\n        nativeAdAssetNames.put(\"CALL_TO_ACTION\", NativeAdAssetNames.CALL_TO_ACTION);\n        nativeAdAssetNames.put(\"ICON\", NativeAdAssetNames.ICON);\n        nativeAdAssetNames.put(\"DESC\", NativeAdAssetNames.DESC);\n        nativeAdAssetNames.put(\"AD_SOURCE\", NativeAdAssetNames.AD_SOURCE);\n        nativeAdAssetNames.put(\"MARKET\", NativeAdAssetNames.MARKET);\n        nativeAdAssetNames.put(\"PRICE\", NativeAdAssetNames.PRICE);\n        nativeAdAssetNames.put(\"IMAGE\", NativeAdAssetNames.IMAGE);\n        nativeAdAssetNames.put(\"RATING\", NativeAdAssetNames.RATING);\n        nativeAdAssetNames.put(\"MEDIA_VIDEO\", NativeAdAssetNames.MEDIA_VIDEO);\n        nativeAdAssetNames.put(\"CHOICES_CONTAINER\", NativeAdAssetNames.CHOICES_CONTAINER);\n        constants.put(\"NativeAdAssetNames\", nativeAdAssetNames);\n\n        Map<String, Object> choicesPosition = new ArrayMap<>();\n        choicesPosition.put(\"TOP_LEFT\", NativeAdConfiguration.ChoicesPosition.TOP_LEFT);\n        choicesPosition.put(\"TOP_RIGHT\", NativeAdConfiguration.ChoicesPosition.TOP_RIGHT);\n        choicesPosition.put(\"BOTTOM_RIGHT\", NativeAdConfiguration.ChoicesPosition.BOTTOM_RIGHT);\n        choicesPosition.put(\"BOTTOM_LEFT\", NativeAdConfiguration.ChoicesPosition.BOTTOM_LEFT);\n        choicesPosition.put(\"INVISIBLE\", NativeAdConfiguration.ChoicesPosition.INVISIBLE);\n        constants.put(\"ChoicesPosition\", choicesPosition);\n\n        Map<String, Object> direction = new ArrayMap<>();\n        direction.put(\"ANY\", NativeAdConfiguration.Direction.ANY);\n        direction.put(\"PORTRAIT\", NativeAdConfiguration.Direction.PORTRAIT);\n        direction.put(\"LANDSCAPE\", NativeAdConfiguration.Direction.LANDSCAPE);\n        constants.put(\"Direction\", direction);\n\n        Map<String, Object> scaleType = new ArrayMap<>();\n        scaleType.put(\"MATRIX\", ImageView.ScaleType.MATRIX.name());\n        scaleType.put(\"FIT_XY\", ImageView.ScaleType.FIT_XY.name());\n        scaleType.put(\"FIT_START\", ImageView.ScaleType.FIT_START.name());\n        scaleType.put(\"FIT_CENTER\", ImageView.ScaleType.FIT_CENTER.name());\n        scaleType.put(\"FIT_END\", ImageView.ScaleType.FIT_END.name());\n        scaleType.put(\"CENTER\", ImageView.ScaleType.CENTER.name());\n        scaleType.put(\"CENTER_CROP\", ImageView.ScaleType.CENTER_CROP.name());\n        scaleType.put(\"CENTER_INSIDE\", ImageView.ScaleType.CENTER_INSIDE.name());\n        constants.put(\"ScaleType\", scaleType);\n\n        Map<String, Object> bannerAdSizes = new ArrayMap<>();\n        bannerAdSizes.put(\"B_300_250\", HMSAdsPrimeBannerView.BannerSize.B_300_250.getValue());\n        bannerAdSizes.put(\"B_320_50\", HMSAdsPrimeBannerView.BannerSize.B_320_50.getValue());\n        bannerAdSizes.put(\"B_320_100\", HMSAdsPrimeBannerView.BannerSize.B_320_100.getValue());\n        bannerAdSizes.put(\"B_360_57\", HMSAdsPrimeBannerView.BannerSize.B_360_57.getValue());\n        bannerAdSizes.put(\"B_360_144\", HMSAdsPrimeBannerView.BannerSize.B_360_144.getValue());\n        bannerAdSizes.put(\"B_SMART\", HMSAdsPrimeBannerView.BannerSize.B_SMART.getValue());\n        bannerAdSizes.put(\"B_DYNAMIC\", HMSAdsPrimeBannerView.BannerSize.B_DYNAMIC.getValue());\n        bannerAdSizes.put(\"B_ADVANCED\", HMSAdsPrimeBannerView.BannerSize.B_ADVANCED.getValue());\n        bannerAdSizes.put(\"B_INVALID\", HMSAdsPrimeBannerView.BannerSize.B_INVALID.getValue());\n        constants.put(\"BannerAdSizes\", bannerAdSizes);\n\n        Map<String, Object> bannerMediaTypes = new ArrayMap<>();\n        bannerMediaTypes.put(\"IMAGE\", HMSAdsPrimeBannerView.BannerMediaType.IMAGE.getValue());\n        constants.put(\"BannerMediaTypes\", bannerMediaTypes);\n\n        Map<String, Object> nativeMediaTypes = new ArrayMap<>();\n        nativeMediaTypes.put(\"IMAGE_LARGE\", HMSAdsPrimeNativeView.NativeMediaType.IMAGE_LARGE.getValue());\n        nativeMediaTypes.put(\"IMAGE_SMALL\", HMSAdsPrimeNativeView.NativeMediaType.IMAGE_SMALL.getValue());\n        nativeMediaTypes.put(\"VIDEO\", HMSAdsPrimeNativeView.NativeMediaType.VIDEO.getValue());\n        constants.put(\"NativeMediaTypes\", nativeMediaTypes);\n\n        Map<String, Object> interstitialMediaTypes = new ArrayMap<>();\n        interstitialMediaTypes.put(\"IMAGE\", HMSAdsPrimeInterstitialAdModule.InterstitialMediaType.IMAGE.getValue());\n        interstitialMediaTypes.put(\"VIDEO\", HMSAdsPrimeInterstitialAdModule.InterstitialMediaType.VIDEO.getValue());\n        constants.put(\"InterstitialMediaTypes\", interstitialMediaTypes);\n\n        Map<String, Object> rewardMediaTypes = new ArrayMap<>();\n        rewardMediaTypes.put(\"VIDEO\", HMSAdsPrimeRewardAdModule.RewardMediaType.VIDEO.getValue());\n        constants.put(\"RewardMediaTypes\", rewardMediaTypes);\n\n        Map<String, Object> splashMediaTypes = new ArrayMap<>();\n        splashMediaTypes.put(\"IMAGE\", HMSAdsPrimeSplashAdModule.SplashMediaType.IMAGE.getValue());\n        splashMediaTypes.put(\"VIDEO\", HMSAdsPrimeSplashAdModule.SplashMediaType.VIDEO.getValue());\n        constants.put(\"SplashMediaTypes\", splashMediaTypes);\n\n        Map<String, Object> callModes = new ArrayMap<>();\n        callModes.put(\"AIDL\", CallMode.AIDL.getValue());\n        callModes.put(\"SDK\", CallMode.SDK.getValue());\n        constants.put(\"CallMode\", callModes);\n\n        Map<String, Object> detailedCreativeTypes = new ArrayMap<>();\n        detailedCreativeTypes.put(\"BIG_IMG\", DetailedCreativeType.BIG_IMG);\n        detailedCreativeTypes.put(\"LONG_TEXT\", DetailedCreativeType.LONG_TEXT);\n        detailedCreativeTypes.put(\"SHORT_TEXT\", DetailedCreativeType.SHORT_TEXT);\n        detailedCreativeTypes.put(\"SINGLE_IMG\", DetailedCreativeType.SINGLE_IMG);\n        detailedCreativeTypes.put(\"SMALL_IMG\", DetailedCreativeType.SMALL_IMG);\n        detailedCreativeTypes.put(\"THREE_IMG\", DetailedCreativeType.THREE_IMG);\n        detailedCreativeTypes.put(\"VIDEO\", DetailedCreativeType.VIDEO);\n        constants.put(\"DetailedCreativeTypes\", detailedCreativeTypes);\n\n        Map<String, Integer> activateStyle = new ArrayMap<>();\n        activateStyle.put(\"BOTTOM_BANNER\", ActivateStyle.BOTTOM_BANNER);\n        activateStyle.put(\"CONFIRM_DIALOG\", ActivateStyle.CONFIRM_DIALOG);\n        constants.put(\"ActivateStyle\", activateStyle);\n\n        return constants;\n    }\n\n    @Override\n    public void onSuccess(ConsentStatus consentStatus, boolean isNeedConsent, List<AdProvider> adProviderList) {\n        hmsLogger.sendSingleEvent(\"requestConsentUpdate\");\n        WritableMap result = new WritableNativeMap();\n        if (consentStatus != null) {\n            result.putInt(\"consentStatus\", consentStatus.getValue());\n        }\n        if (adProviderList != null) {\n            result.putArray(\"adProviders\", ReactUtils.mapList(adProviderList,\n                    ReactUtils::getWritableMapFromAdProvider));\n        }\n        result.putBoolean(\"isNeedConsent\", isNeedConsent);\n        mPromise.resolve(result);\n    }\n\n    @Override\n    public void onFail(String errorDescription) {\n        hmsLogger.sendSingleEvent(\"requestConsentUpdate\", \"-1\");\n        Log.e(TAG, \"User's consent failed to update: \" + errorDescription);\n        mPromise.reject(\"USER_CONSENT_FAILED\", \"Error: \" + errorDescription);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrime\";\n    }\n\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        hmsLogger.disableLogger();\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        hmsLogger.enableLogger();\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void init(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"init\");\n        HwAds.init(reactContext);\n        hmsLogger.sendSingleEvent(\"init\");\n        mRequestOptions = HwAds.getRequestOptions();\n        promise.resolve(\"Hw Ads initialized\");\n    }\n\n    @ReactMethod\n    public void getSDKVersion(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getSDKVersion\");\n        String sdkVersion = HwAds.getSDKVersion();\n        hmsLogger.sendSingleEvent(\"getSDKVersion\");\n        promise.resolve(sdkVersion);\n    }\n\n    @ReactMethod\n    public void appInstalledNotify(Boolean notifyVal, int styleVal, Promise promise) {\n        HwAds.setAppInstalledNotify(notifyVal);\n        HwAds.setAppActivateStyle(styleVal);\n \n        boolean resNotify = HwAds.isAppInstalledNotify();\n        int resStyle = HwAds.getAppActivateStyle();\n        WritableMap obj = new WritableNativeMap();\n        obj.putInt(\"style\", resStyle);\n        obj.putBoolean(\"notify\", resNotify);\n        promise.resolve(obj);\n    }\n\n    @ReactMethod\n    public void getRequestOptions(final Promise promise) {\n        if (mRequestOptions == null) {\n            hmsLogger.startMethodExecutionTimer(\"getRequestOptions\");\n            mRequestOptions = HwAds.getRequestOptions();\n            hmsLogger.sendSingleEvent(\"getRequestOptions\");\n        }\n        promise.resolve(ReactUtils.getWritableMapFromRequestOptions(mRequestOptions));\n    }\n\n    @ReactMethod\n    public void setRequestOptions(final ReadableMap rm, final Promise promise) {\n        RequestOptions requestOptions = ReactUtils.getRequestOptionsFromReadableMap(rm);\n        hmsLogger.startMethodExecutionTimer(\"setRequestOptions\");\n        HwAds.setRequestOptions(requestOptions);\n        hmsLogger.sendSingleEvent(\"setRequestOptions\");\n        mRequestOptions = HwAds.getRequestOptions();\n        promise.resolve(ReactUtils.getWritableMapFromRequestOptions(mRequestOptions));\n    }\n\n    @ReactMethod\n    public void setConsent(final ReadableMap rm, final Promise promise) {\n        Consent consentInfo = Consent.getInstance(reactContext);\n        mPromise = promise;\n        if (ReactUtils.hasValidKey(rm, \"consentStatus\", ReadableType.Number)) {\n            consentInfo.setConsentStatus(ConsentStatus.forValue(rm.getInt(\"consentStatus\")));\n        }\n        if (ReactUtils.hasValidKey(rm, \"debugNeedConsent\", ReadableType.Number)) {\n            consentInfo.setDebugNeedConsent(DebugNeedConsent.forValue(rm.getInt(\"debugNeedConsent\")));\n        }\n        if (ReactUtils.hasValidKey(rm, \"underAgeOfPromise\", ReadableType.Number)\n                && rm.getInt(\"underAgeOfPromise\") != UnderAge.PROMISE_UNSPECIFIED) {\n            consentInfo.setUnderAgeOfPromise(rm.getInt(\"underAgeOfPromise\") == UnderAge.PROMISE_TRUE);\n        }\n        if (ReactUtils.hasValidKey(rm, \"testDeviceId\", ReadableType.String)) {\n            consentInfo.addTestDeviceId(rm.getString(\"testDeviceId\"));\n        }\n        hmsLogger.startMethodExecutionTimer(\"requestConsentUpdate\");\n        consentInfo.requestConsentUpdate(this);\n    }\n\n    @ReactMethod\n    public void setConsentString(final String consent, final Promise promise) {\n        HwAds.setConsent(consent);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void checkConsent(final Promise promise) {\n        Consent consentInfo = Consent.getInstance(reactContext);\n        mPromise = promise;\n        hmsLogger.startMethodExecutionTimer(\"requestConsentUpdate\");\n        consentInfo.requestConsentUpdate(this);\n    }\n\n    @ReactMethod\n    public void getViewInfo(final int viewId, final Promise promise) {\n        UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n        uiManager.addUIBlock(nativeViewHierarchyManager -> {\n            View view = nativeViewHierarchyManager.resolveView(viewId);\n            if (view instanceof HMSAdsPrimeBannerView) {\n                HMSAdsPrimeBannerView myView = (HMSAdsPrimeBannerView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putString(\"adId\", myView.getAdId());\n                wm.putBoolean(\"isLoading\", myView.isLoading());\n                wm.putMap(\"bannerAdSize\",\n                        ReactUtils.getWritableMapFromBannerAdSizeWithContext(myView.getBannerAdSize(), reactContext));\n                if(myView.getBiddingInfo() != null) {\n                    wm.putDouble(\"price\", (double) myView.getBiddingInfo().getPrice());\n                    wm.putString(\"cur\", myView.getBiddingInfo().getCur());\n                    wm.putString(\"nurl\", myView.getBiddingInfo().getNurl());\n                    wm.putString(\"lurl\", myView.getBiddingInfo().getNurl());\n                }\n                promise.resolve(wm);\n            } else if (view instanceof HMSAdsPrimeNativeView) {\n                HMSAdsPrimeNativeView myView = (HMSAdsPrimeNativeView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putMap(\"nativeAd\", ReactUtils.getWritableMapFromNativeAd(myView.mNativeAd));\n                wm.putMap(\"nativeAdConfiguration\",\n                        ReactUtils.getWritableMapFromNativeAdConfiguration(myView.mNativeAdConfiguration));\n                wm.putMap(\"nativeAdLoader\", ReactUtils.getWritableMapFromNativeAdLoader(myView.mNativeAdLoader));\n                promise.resolve(wm);\n            } else if (view instanceof HMSAdsPrimeInstreamView) {\n                HMSAdsPrimeInstreamView myView = (HMSAdsPrimeInstreamView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putString(\"adId\", myView.mAdId);\n                wm.putInt(\"maxCount\", myView.mMaxCount);\n                wm.putInt(\"totalDuration\", myView.mTotalDuration);\n                wm.putBoolean(\"isPlaying\", myView.isPlaying());\n                wm.putBoolean(\"isLoading\", myView.mInstreamAdLoader != null && myView.mInstreamAdLoader.isLoading());\n                wm.putArray(\"instreamAds\", ReactUtils.mapList(myView.mInstreamAds,\n                        ReactUtils::getWritableMapFromInstreamAd));\n                promise.resolve(wm);\n            } else {\n                promise.reject(\"NOT_AD_VIEW\", \"Unexpected view type\");\n            }\n        });\n    }\n\n    public static String getErrorMessage(int errorCode) {\n        switch (errorCode) {\n            case AdParam.ErrorCode.INNER:\n                return \"Internal error, an invalid response was received from the ad server.\";\n            case AdParam.ErrorCode.INVALID_REQUEST:\n                return \"Invalid ad request due to unspecified ad slot ID or invalid banner ad size.\";\n            case AdParam.ErrorCode.NETWORK_ERROR:\n                return \"The ad request was unsuccessful due to a network connection error.\";\n            case AdParam.ErrorCode.NO_AD:\n                return \"The ad request was successful, but no ad is returned due to a lack of ad resources.\";\n            case AdParam.ErrorCode.AD_LOADING:\n                return \"The ad request was successful, and ad was loading.\";\n            case AdParam.ErrorCode.LOW_API:\n                return \"The ad request was successful, but api version is not supported by the HUAWEI Ads SDK.\";\n            case AdParam.ErrorCode.BANNER_AD_EXPIRE:\n                return \"The ad request was successful, but banner ad was expired.\";\n            case AdParam.ErrorCode.BANNER_AD_CANCEL:\n                return \"The ad request was successful, but banner ad task removed.\";\n        }\n        return \"Unknown error\";\n    }\n\n\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeNativeView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.GradientDrawable;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\n\nimport com.huawei.hms.ads.AdListener;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.VideoOperator;\nimport com.huawei.hms.ads.nativead.MediaView;\nimport com.huawei.hms.ads.nativead.NativeAd;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.ads.nativead.NativeAdLoader;\nimport com.huawei.hms.ads.nativead.NativeView;\n\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.rn.ads.utils.ResourceUtils;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HMSAdsPrimeNativeView extends LinearLayout {\n    private static final String TAG = HMSAdsPrimeNativeView.class.getSimpleName();\n\n    protected NativeAd mNativeAd;\n\n    protected NativeAdConfiguration mNativeAdConfiguration;\n\n    protected NativeAdLoader mNativeAdLoader;\n    \n    private ReactContext mReactContext;\n\n    private NativeView mNativeView;\n\n    private MediaView mMediaView;\n\n    private TextView mTitleView;\n\n    private TextView mDescriptionView;\n\n    private TextView mAdSourceView;\n\n    private TextView mFlagView;\n\n    private Button mCallToActionView;\n\n    private NativeAdConfiguration.Builder mNativeAdConfigurationBuilder;\n\n    private VideoConfiguration.Builder mVideoConfigurationBuilder;\n\n    private VideoConfiguration mVideoConfiguration;\n\n    private NativeAd.NativeAdLoadedListener mNativeAdLoadedListener;\n\n    private AdListener mAdListener;\n\n    private ReadableMap mAdParamReadableMap;\n\n    private String mAdId;\n\n    private NativeMediaType mMediaType = NativeMediaType.VIDEO;\n\n    private int mLayoutId = R.layout.native_video_template;\n\n    private NativeAdViewOptions mNativeAdViewOptions = new NativeAdViewOptions().build(null);\n\n    private final Runnable measureAndLayout = () -> {\n        measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n        layout(getLeft(), getTop(), getRight(), getBottom());\n    };\n\n    public enum NativeMediaType {\n        IMAGE_LARGE(\"image_large\"),\n        IMAGE_SMALL(\"image_small\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        NativeMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public static NativeMediaType forValue(String s) {\n            switch (s) {\n                case \"image_large\":\n                    return IMAGE_LARGE;\n                case \"image_small\":\n                    return IMAGE_SMALL;\n                default:\n                    return VIDEO;\n            }\n        }\n    }\n\n    public HMSAdsPrimeNativeView(Context context) {\n        super(context);\n        if (context instanceof ReactContext) {\n            mReactContext = (ReactContext) context;\n        }\n        setupInitialConfigurations();\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(measureAndLayout);\n    }\n\n    private void setupInitialConfigurations() {\n        mAdListener = new AdListener() {\n            @Override\n            public void onAdFailed(int errorCode) {\n                sendEvent(Manager.Event.AD_FAILED, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onAdClicked() {\n                sendEvent(Manager.Event.AD_CLICKED, null);\n            }\n\n            @Override\n            public void onAdImpression() {\n                sendEvent(Manager.Event.AD_IMPRESSION, null);\n            }\n        };\n\n        mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        mNativeAdConfigurationBuilder = new NativeAdConfiguration.Builder().setVideoConfiguration(mVideoConfiguration);\n        mNativeAdConfiguration = mNativeAdConfigurationBuilder.build();\n\n        mNativeAdLoadedListener = nativeAd -> {\n            // Call this method when an ad is successfully loaded.\n            sendEvent(Manager.Event.NATIVE_AD_LOADED, null);\n            nativeAd.setVideoConfiguration(mVideoConfiguration);\n            // Display native ad.\n            showNativeAd(nativeAd);\n            nativeAd.setDislikeAdListener(() -> {\n                // Call this method when an ad is closed.\n                sendEvent(Manager.Event.AD_DISLIKED, null);\n            });\n        };\n\n    }\n\n    void loadAd() {\n        mNativeAdLoader = new NativeAdLoader.Builder(mReactContext, mAdId).setNativeAdLoadedListener(\n            mNativeAdLoadedListener).setAdListener(mAdListener).setNativeAdOptions(mNativeAdConfiguration).build();\n        mNativeAdLoader.loadAd(ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap));\n    }\n\n    void setVideoConfiguration(ReadableMap videoConfiguration) {\n        if (videoConfiguration == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(videoConfiguration.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                videoConfiguration.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                videoConfiguration.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(videoConfiguration.getBoolean(\"startMuted\"));\n        }\n        if (ReactUtils.hasValidKey(videoConfiguration, \"autoPlayNetWork\", ReadableType.Number)){\n            mVideoConfigurationBuilder.setAutoPlayNetwork(videoConfiguration.getInt(\"autoPlayNetWork\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n    }\n\n    void setNativeAdConfiguration(ReadableMap nativeAdConfiguration) {\n        if (nativeAdConfiguration != null) {\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"choicesPosition\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setChoicesPosition(nativeAdConfiguration.getInt(\"choicesPosition\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"mediaDirection\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setMediaDirection(nativeAdConfiguration.getInt(\"mediaDirection\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"mediaAspect\", ReadableType.Number)) {\n                mNativeAdConfigurationBuilder.setMediaAspect(nativeAdConfiguration.getInt(\"mediaAspect\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"requestCustomDislikeThisAd\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setRequestCustomDislikeThisAd(\n                        nativeAdConfiguration.getBoolean(\"requestCustomDislikeThisAd\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"requestMultiImages\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setRequestMultiImages(\n                        nativeAdConfiguration.getBoolean(\"requestMultiImages\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"returnUrlsForImages\", ReadableType.Boolean)) {\n                mNativeAdConfigurationBuilder.setReturnUrlsForImages(\n                        nativeAdConfiguration.getBoolean(\"returnUrlsForImages\"));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"adSize\", ReadableType.Map)) {\n                mNativeAdConfigurationBuilder.setAdSize(\n                    ReactUtils.getAdSizeFromReadableMap(nativeAdConfiguration.getMap(\"adSize\")));\n            }\n            if (ReactUtils.hasValidKey(nativeAdConfiguration, \"videoConfiguration\", ReadableType.Map)) {\n                setVideoConfiguration(nativeAdConfiguration.getMap(\"videoConfiguration\"));\n                mNativeAdConfigurationBuilder.setVideoConfiguration(mVideoConfiguration);\n            }\n        }\n        mNativeAdConfiguration = mNativeAdConfigurationBuilder.build();\n    }\n\n    private VideoOperator.VideoLifecycleListener videoLifecycleListener = new VideoOperator.VideoLifecycleListener() {\n        @Override\n        public void onVideoStart() {\n            sendEvent(Manager.Event.AD_VIDEO_START, null);\n        }\n\n        @Override\n        public void onVideoPlay() {\n            sendEvent(Manager.Event.AD_VIDEO_PLAY, null);\n        }\n\n        @Override\n        public void onVideoEnd() {\n            sendEvent(Manager.Event.AD_VIDEO_END, null);\n        }\n\n        @Override\n        public void onVideoPause() {\n            sendEvent(Manager.Event.AD_VIDEO_PAUSE, null);\n        }\n\n        @Override\n        public void onVideoMute(boolean isMuted) {\n            WritableNativeMap wm = new WritableNativeMap();\n            wm.putBoolean(\"isMuted\", isMuted);\n            sendEvent(Manager.Event.AD_VIDEO_MUTE, wm);\n        }\n    };\n\n    public static String getCreativeType(int code) {\n        switch (code) {\n            case 1:\n                return \"Text\";\n            case 3:\n                return \"Large image with text\";\n            case 6:\n                return \"Video with text\";\n            case 7:\n                return \"Small image with text\";\n            case 8:\n                return \"Three small images with text\";\n            default:\n                return \"Large image\";\n        }\n    }\n\n    private void showNativeAd(NativeAd nativeAd) {\n        // Destroy the original native ad.\n        if (null != mNativeAd) {\n            mNativeAd.destroy();\n        }\n        mNativeAd = nativeAd;\n\n        LayoutInflater layoutInflater = LayoutInflater.from(mReactContext);\n\n        View inflated = layoutInflater.inflate(mLayoutId, this, false);\n        if (inflated instanceof NativeView) {\n            // Obtain NativeView.\n            mNativeView = (NativeView) inflated;\n            // Register and populate a native ad material view.\n            initNativeAdView();\n\n            this.removeAllViews();\n            this.addView(mNativeView);\n            this.requestLayout();\n        }\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    private void initNativeAdView() {\n        mMediaView = mNativeView.findViewById(R.id.ad_media);\n        mNativeView.setMediaView(mMediaView);\n\n        mTitleView = mNativeView.findViewById(R.id.ad_title);\n        mNativeView.setTitleView(mTitleView);\n\n        mAdSourceView = mNativeView.findViewById(R.id.ad_source);\n        mNativeView.setAdSourceView(mAdSourceView);\n\n        mCallToActionView = mNativeView.findViewById(R.id.ad_call_to_action);\n        mNativeView.setCallToActionView(mCallToActionView);\n\n        mDescriptionView = mNativeView.findViewById(R.id.ad_description);\n        mNativeView.setDescriptionView(mDescriptionView);\n\n        mFlagView = mNativeView.findViewById(R.id.ad_flag);\n\n        if (mNativeAd.getTitle() != null) {\n            mTitleView.setText(mNativeAd.getTitle());\n        }\n        if (mNativeAd.getMediaContent() != null) {\n            mMediaView.setMediaContent(mNativeAd.getMediaContent());\n        }\n\n        if (null != mNativeAd.getAdSource()) {\n            mAdSourceView.setText(mNativeAd.getAdSource());\n            mAdSourceView.setVisibility(View.VISIBLE);\n        } else {\n            mAdSourceView.setVisibility(View.INVISIBLE);\n        }\n\n        if (null != mNativeAd.getDescription()) {\n            mDescriptionView.setText(mNativeAd.getDescription());\n            mDescriptionView.setVisibility(View.VISIBLE);\n        } else {\n            mDescriptionView.setVisibility(View.INVISIBLE);\n        }\n\n        if (null != mNativeAd.getCallToAction()) {\n            mCallToActionView.setText(mNativeAd.getCallToAction());\n            mCallToActionView.setVisibility(View.VISIBLE);\n        } else {\n            mCallToActionView.setVisibility(View.INVISIBLE);\n        }\n\n        // Obtain a video controller.\n        VideoOperator videoOperator = mNativeAd.getVideoOperator();\n\n        // Check whether a native ad contains video materials.\n        if (videoOperator.hasVideo()) {\n            // Add a video lifecycle event listener.\n            videoOperator.setVideoLifecycleListener(videoLifecycleListener);\n        }\n\n        updateViewOptions();\n        // Register a native ad object.\n        mNativeView.setNativeAd(mNativeAd);\n    }\n\n    void setViewOptions(ReadableMap rm) {\n        if (rm != null) {\n            mNativeAdViewOptions = new NativeAdViewOptions().build(rm);\n            updateViewOptions();\n        }\n    }\n\n    Drawable toRoundedColor(int color, Float radius) {\n        GradientDrawable drawable = new GradientDrawable();\n        drawable.setShape(GradientDrawable.RECTANGLE);\n        drawable.setCornerRadius(radius * Resources.getSystem().getDisplayMetrics().density);\n        drawable.setColor(color);\n        return drawable;\n    }\n\n    void updateViewOptions() {\n        if (mMediaView != null) {\n            mMediaView.setVisibility(mNativeAdViewOptions.showMediaContent ? View.VISIBLE : View.GONE);\n            mMediaView.setImageScaleType(mNativeAdViewOptions.mediaImageScaleType);\n        }\n\n        if (mFlagView != null) {\n            int flagBackgroundColor = (int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.BACKGROUND_COLOR);\n            if (flagBackgroundColor != 0) {\n                mFlagView.setBackground(toRoundedColor(flagBackgroundColor, 20f));\n            }\n            mFlagView.setTextSize((float) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.FONT_SIZE));\n            mFlagView.setTextColor((int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.COLOR));\n            mFlagView.setVisibility((int) mNativeAdViewOptions.adFlagTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mTitleView != null) {\n            mTitleView.setTextSize((float) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.FONT_SIZE));\n            mTitleView.setTextColor((int) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.COLOR));\n            mTitleView.setVisibility((int) mNativeAdViewOptions.titleTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mAdSourceView != null) {\n            mAdSourceView.setTextSize((float) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.FONT_SIZE));\n            mAdSourceView.setTextColor((int) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.COLOR));\n            mAdSourceView.setVisibility((int) mNativeAdViewOptions.adSourceTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mDescriptionView != null) {\n            mDescriptionView.setTextSize((float) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.FONT_SIZE));\n            mDescriptionView.setTextColor((int) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.COLOR));\n            mDescriptionView.setVisibility((int) mNativeAdViewOptions.descriptionTextStyle.get(AdTextStyle.VISIBILITY));\n        }\n\n        if (mCallToActionView != null) {\n            int callBackgroundColor = (int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.BACKGROUND_COLOR);\n            if (callBackgroundColor != 0) {\n                mCallToActionView.setBackground(toRoundedColor(callBackgroundColor, 20f));\n            }\n            mCallToActionView.setTextSize((float) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.FONT_SIZE));\n            mCallToActionView.setTextColor((int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.COLOR));\n            mCallToActionView.setVisibility((int) mNativeAdViewOptions.callToActionStyle.get(AdTextStyle.VISIBILITY));\n        }\n    }\n\n    private int getLayoutIdFromMediaType(NativeMediaType mediaType) {\n        if (NativeMediaType.IMAGE_SMALL == mediaType) {\n            return ResourceUtils.getLayoutResourceIdFromContext(mReactContext, \"native_small_template\");\n        }\n        return ResourceUtils.getLayoutResourceIdFromContext(mReactContext, \"native_video_template\");\n    }\n\n    public void setDisplayForm(ReadableMap displayForm) {\n        if (ReactUtils.hasValidKey(displayForm, \"adId\", ReadableType.String)) {\n            mAdId = displayForm.getString(\"adId\");\n        }\n        if (ReactUtils.hasValidKey(displayForm, \"mediaType\", ReadableType.String)) {\n            mMediaType = NativeMediaType.forValue(displayForm.getString(\"mediaType\"));\n            mLayoutId = getLayoutIdFromMediaType(mMediaType);\n        }\n    }\n\n    public void dislikeAd(String description) {\n        if (mNativeAd != null) {\n            mNativeAd.dislikeAd(() -> description);\n        }\n    }\n\n    public void destroy() {\n        mNativeView.destroy();\n    }\n\n    public void gotoWhyThisAdPage() {\n        mNativeView.gotoWhyThisAdPage();\n    }\n\n    public void setAllowCustomClick() {\n        if (mNativeAd != null) {\n            mNativeAd.setAllowCustomClick();\n        }\n    }\n\n    public void showAdvertiserInfoDialog(boolean showWhyThisAd) {\n        mNativeView.showAdvertiserInfoDialog(mNativeView, showWhyThisAd);\n    }\n\n    public void hideAdvertiserInfoDialog() {\n        mNativeView.hideAdvertiserInfoDialog();\n    }\n\n    public void showPrivacyPolicy() {\n        if(mNativeAd!=null) {\n            mNativeAd.getAppInfo().showPrivacyPolicy(mReactContext);\n        }\n    }\n    public void showPermissionPage() {\n        if(mNativeAd!=null) {\n            mNativeAd.getAppInfo().showPermissionPage(mReactContext);\n        }\n    }\n    public void showAppDetailPage() {\n        if(mNativeAd!=null) {\n            mNativeAd.showAppDetailPage(mReactContext);\n        }\n    }\n\n    public void recordClickEvent() {\n        if (mNativeAd != null) {\n            mNativeAd.recordClickEvent();\n        }\n    }\n\n    public void recordImpressionEvent(ReadableMap impressionEvent) {\n        if (mNativeAd != null) {\n            mNativeAd.recordImpressionEvent(ReactUtils.getBundleFromReadableMap(impressionEvent));\n        }\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mAdParamReadableMap = adParamReadableMap;\n    }\n\n    interface AdTextStyle {\n        String VISIBILITY = \"visibility\";\n        String FONT_SIZE = \"fontSize\";\n        String COLOR = \"color\";\n        String BACKGROUND_COLOR = \"backgroundColor\";\n    }\n\n    public static class Manager extends ViewGroupManager<HMSAdsPrimeNativeView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            NATIVE_AD_LOADED(\"onNativeAdLoaded\"),\n            AD_DISLIKED(\"onAdDisliked\"),\n            AD_FAILED(\"onAdFailed\"),\n            AD_CLICKED(\"onAdClicked\"),\n            AD_IMPRESSION(\"onAdImpression\"),\n            AD_VIDEO_START(\"onVideoStart\"),\n            AD_VIDEO_PLAY(\"onVideoPlay\"),\n            AD_VIDEO_END(\"onVideoEnd\"),\n            AD_VIDEO_PAUSE(\"onVideoPause\"),\n            AD_VIDEO_MUTE(\"onVideoMute\");\n\n            private String nativeEventName;\n\n            Event(String nativeEventName) {\n                this.nativeEventName = nativeEventName;\n            }\n\n            public String getName() {\n                return nativeEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            DISLIKE_AD(\"dislikeAd\"),\n            DESTROY(\"destroy\"),\n            GO_TO_WHY(\"gotoWhyThisAdPage\"),\n            ALLOW_CUSTOM_CLICK(\"setAllowCustomClick\"),\n            RECORD_CLICK(\"recordClickEvent\"),\n            RECORD_IMPRESSION(\"recordImpressionEvent\"),\n            SHOW_ADVERTISER_INFO_DIALOG(\"showAdvertiserInfoDialog\"),\n            HIDE_ADVERTISER_INFO_DIALOG(\"hideAdvertiserInfoDialog\"),\n            SHOW_PRIVACY_POLICY(\"showPrivacyPolicy\"),\n            SHOW_PERMISSION_PAGE(\"showPermissionPage\"),\n            SHOW_APP_DETAIL_PAGE(\"showAppDetailPage\");\n\n            private String nativeCommandName;\n\n            Command(String nativeCommandName) {\n                this.nativeCommandName = nativeCommandName;\n            }\n\n            public String getName() {\n                return nativeCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsPrimeNativeView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsPrimeNativeView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"nativeView.create\");\n            return new HMSAdsPrimeNativeView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Manager.Event.values());\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsPrimeNativeView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Manager.Command.values().length) {\n                switch (Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"nativeView.loadAd\");\n                        break;\n                    case DISLIKE_AD:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.dislikeAd\");\n                        root.dislikeAd(args.getString(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.dislikeAd\");\n                        break;\n                    case DESTROY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.destroy\");\n                        root.destroy();\n                        hmsLogger.sendSingleEvent(\"nativeView.destroy\");\n                        break;\n                    case GO_TO_WHY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.gotoWhyThisAdPage\");\n                        root.gotoWhyThisAdPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.gotoWhyThisAdPage\");\n                        break;\n                    case ALLOW_CUSTOM_CLICK:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.setAllowCustomClick\");\n                        root.setAllowCustomClick();\n                        hmsLogger.sendSingleEvent(\"nativeView.setAllowCustomClick\");\n                        break;\n                    case RECORD_CLICK:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.recordClickEvent\");\n                        root.recordClickEvent();\n                        hmsLogger.sendSingleEvent(\"nativeView.recordClickEvent\");\n                        break;\n                    case RECORD_IMPRESSION:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.recordImpressionEvent\");\n                        root.recordImpressionEvent(args.getMap(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.recordImpressionEvent\");\n                        break;\n                    case SHOW_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showAdvertiserInfoDialog\");\n                        root.showAdvertiserInfoDialog(args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"nativeView.showAdvertiserInfoDialog\");\n                        break;\n                    case HIDE_ADVERTISER_INFO_DIALOG:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.hideAdvertiserInfoDialog\");\n                        root.hideAdvertiserInfoDialog();\n                        hmsLogger.sendSingleEvent(\"nativeView.hideAdvertiserInfoDialog\");\n                        break;\n                    case SHOW_PRIVACY_POLICY:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showPrivacyPolicy\");\n                        root.showPrivacyPolicy();\n                        hmsLogger.sendSingleEvent(\"nativeView.showPrivacyPolicy\");\n                        break;\n                    case SHOW_PERMISSION_PAGE:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showPermissionPage\");\n                        root.showPermissionPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.showPermissionPage\");\n                        break;\n                    case SHOW_APP_DETAIL_PAGE:\n                        hmsLogger.startMethodExecutionTimer(\"nativeView.showAppDetailPage\");\n                        root.showAppDetailPage();\n                        hmsLogger.sendSingleEvent(\"nativeView.showAppDetailPage\");\n                        break;        \n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsPrimeNativeView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"nativeView.setAdParam\");\n            view.setAdParam(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"displayForm\")\n        public void setDisplayForm(final HMSAdsPrimeNativeView view, final ReadableMap displayForm) {\n            hmsLogger.sendSingleEvent(\"nativeView.setDisplayForm\");\n            view.setDisplayForm(displayForm);\n        }\n\n        @ReactProp(name = \"nativeConfig\")\n        public void setNativeConfig(final HMSAdsPrimeNativeView view, final ReadableMap nativeAdConfiguration) {\n            hmsLogger.sendSingleEvent(\"nativeView.setNativeConfig\");\n            view.setNativeAdConfiguration(nativeAdConfiguration);\n        }\n\n        @ReactProp(name = \"viewOptions\")\n        public void setViewOptions(final HMSAdsPrimeNativeView view, final ReadableMap viewOptions) {\n            hmsLogger.sendSingleEvent(\"nativeView.setViewOptions\");\n            view.setViewOptions(viewOptions);\n        }\n    }\n\n    public static class NativeAdViewOptions {\n        boolean showMediaContent = true;\n\n        ImageView.ScaleType mediaImageScaleType = ImageView.ScaleType.FIT_CENTER;\n\n        Map<String, Object> adSourceTextStyle = createAdTextStyle(View.VISIBLE, 14f, Color.BLACK);\n\n        Map<String, Object> adFlagTextStyle = createAdTextStyle(View.VISIBLE, 12f, Color.WHITE,\n            Color.parseColor(\"#FFCC66\"));\n\n        Map<String, Object> titleTextStyle = createAdTextStyle(View.VISIBLE, 16f, Color.BLACK);\n\n        Map<String, Object> descriptionTextStyle = createAdTextStyle(View.INVISIBLE, 12f, Color.GRAY);\n\n        Map<String, Object> callToActionStyle = createAdTextStyle(View.VISIBLE, 15f, Color.WHITE,\n            Color.parseColor(\"#4CBE99\"));\n\n        public NativeAdViewOptions build(ReadableMap rm) {\n            NativeAdViewOptions options = new NativeAdViewOptions();\n            if (rm != null) {\n                if (ReactUtils.hasValidKey(rm, \"showMediaContent\", ReadableType.Boolean)) {\n                    showMediaContent = rm.getBoolean(\"showMediaContent\");\n                }\n                if (ReactUtils.hasValidKey(rm, \"mediaImageScaleType\", ReadableType.String)) {\n                    mediaImageScaleType = ImageView.ScaleType.valueOf(rm.getString(\"mediaImageScaleType\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"adFlagTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.adFlagTextStyle, rm.getMap(\"adFlagTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"adSourceTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.adSourceTextStyle, rm.getMap(\"adSourceTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"titleTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.titleTextStyle, rm.getMap(\"titleTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"descriptionTextStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.descriptionTextStyle, rm.getMap(\"descriptionTextStyle\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"callToActionStyle\", ReadableType.Map)) {\n                    buildAdTextStyle(options.callToActionStyle, rm.getMap(\"callToActionStyle\"));\n                }\n            }\n            return options;\n        }\n\n        Map<String, Object> createAdTextStyle(int visibility, float fontSize, int color) {\n            Map<String, Object> textStyle = new HashMap<>();\n            textStyle.put(AdTextStyle.VISIBILITY, visibility);\n            textStyle.put(AdTextStyle.FONT_SIZE, fontSize);\n            textStyle.put(AdTextStyle.COLOR, color);\n            return textStyle;\n        }\n\n        Map<String, Object> createAdTextStyle(int visibility, float fontSize, int color, int backgroundColor) {\n            Map<String, Object> textStyle = new HashMap<>();\n            textStyle.put(AdTextStyle.VISIBILITY, visibility);\n            textStyle.put(AdTextStyle.FONT_SIZE, fontSize);\n            textStyle.put(AdTextStyle.COLOR, color);\n            textStyle.put(AdTextStyle.BACKGROUND_COLOR, backgroundColor);\n            return textStyle;\n        }\n\n        void buildAdTextStyle(Map<String, Object> adTextStyle, ReadableMap rm) {\n            if (rm != null) {\n                if (ReactUtils.hasValidKey(rm, \"fontSize\", ReadableType.Number)) {\n                    adTextStyle.put(AdTextStyle.FONT_SIZE, (float) rm.getDouble(\"fontSize\"));\n                }\n                if (ReactUtils.hasValidKey(rm, \"color\", ReadableType.String)) {\n                    adTextStyle.put(AdTextStyle.COLOR, Color.parseColor(rm.getString(\"color\")));\n                }\n                if (ReactUtils.hasValidKey(rm, \"backgroundColor\", ReadableType.String)) {\n                    adTextStyle.put(AdTextStyle.BACKGROUND_COLOR, Color.parseColor(rm.getString(\"backgroundColor\")));\n                }\n                if (ReactUtils.hasValidKey(rm, \"visibility\", ReadableType.Boolean)) {\n                    adTextStyle.put(AdTextStyle.VISIBILITY, rm.getBoolean(\"visibility\") ? View.VISIBLE : View.GONE);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeOaidModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport com.huawei.hms.ads.identifier.AdIdVerifyException;\nimport com.huawei.hms.ads.identifier.AdvertisingIdClient;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.io.IOException;\n\nimport static com.huawei.hms.rn.ads.HMSAdsPrimeModule.CallMode;\n\npublic class HMSAdsPrimeOaidModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsPrimeOaidModule.class.getSimpleName();\n\n    private final ReactApplicationContext reactContext;\n\n    private HMSLogger hmsLogger;\n\n    HMSAdsPrimeOaidModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrimeOaid\";\n    }\n\n    @ReactMethod\n    public void getAdvertisingIdInfo(final String callMode, final Promise promise) {\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (CallMode.forValue(callMode) == CallMode.AIDL) {\n                promise.reject(\"AIDL_SERVICE_INVALID\", \"Aidl service is disabled for HMSOaid module.\");\n                return;\n            }\n            try {\n                hmsLogger.startMethodExecutionTimer(\"getAdvertisingIdInfo\");\n                AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(reactContext);\n                hmsLogger.sendSingleEvent(\"getAdvertisingIdInfo\");\n                promise.resolve(ReactUtils.getWritableMapFromAdvertisingIdClientInfo(info));\n            } catch (IOException e) {\n                hmsLogger.sendSingleEvent(\"getAdvertisingIdInfo\", \"-1\");\n                Log.e(TAG, \"getAdvertisingIdInfo IOException\");\n                promise.reject(\"GET_AD_ID_INFO_FAILED\", \"getAdvertisingIdInfo IOException\");\n            }\n        });\n    }\n\n    @ReactMethod\n    public void verifyAdvertisingId(final ReadableMap advertisingInfo, final Promise promise) {\n        try {\n            String id = advertisingInfo.getString(\"id\");\n            boolean isLimitAdTrackingEnabled = advertisingInfo.getBoolean(\"isLimitAdTrackingEnabled\");\n            hmsLogger.startMethodExecutionTimer(\"verifyAdvertisingId\");\n            boolean isVerified = AdvertisingIdClient.verifyAdId(reactContext, id, isLimitAdTrackingEnabled);\n            hmsLogger.sendSingleEvent(\"verifyAdvertisingId\");\n            promise.resolve(isVerified);\n        } catch (AdIdVerifyException e) {\n            Log.e(TAG, \"verifyAdvertisingId Exception: \" + e.getMessage());\n            promise.reject(\"VERIFY_AD_ID_FAILED\", \"Exception: \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimePackage.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\npublic class HMSAdsPrimePackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSAdsPrimeModule(reactContext),\n                new HMSAdsPrimeInstallReferrerModule(reactContext),\n                new HMSAdsPrimeOaidModule(reactContext),\n                new HMSAdsPrimeInterstitialAdModule(reactContext),\n                new HMSAdsPrimeSplashAdModule(reactContext),\n                new HMSAdsPrimeRewardAdModule(reactContext),\n                new HMSAdsPrimeVastModule(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSAdsPrimeBannerView.Manager(reactContext),\n                new HMSAdsPrimeInstreamView.Manager(reactContext),\n                new HMSAdsPrimeNativeView.Manager(reactContext),\n                new HMSAdsPrimeVastView.Manager(reactContext));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeRewardAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.util.Log;\nimport android.os.Handler;\nimport android.os.Looper;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAdListener;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.ads.reward.RewardAd;\nimport com.huawei.hms.ads.reward.RewardAdLoadListener;\nimport com.huawei.hms.ads.reward.RewardAdStatusListener;\nimport com.huawei.hms.ads.reward.RewardVerifyConfig;\n\nimport static com.huawei.hms.rn.ads.utils.ReactUtils.hasValidKey;\n\npublic class HMSAdsPrimeRewardAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsPrimeRewardAdModule.class.getSimpleName();\n\n    private ReactApplicationContext mReactContext;\n\n    private HMSLogger hmsLogger;\n\n    private RewardAd mRewardAd;\n\n    private ReadableMap mAdParamReadableMap;\n\n    private RewardVerifyConfig mRewardVerifyConfig;\n\n    private boolean mLoadWithAdId;\n\n    private String mAdId;\n\n    private String mUserId;\n\n    private String mData;\n\n    private RewardAdLoadListener mAdLoadListener;\n\n    private RewardAdStatusListener mAdStatusListener;\n\n    private RewardAdListener mAdListener;\n\n    private VideoConfiguration mVideoConfiguration;\n\n    public enum RewardMediaType {\n        VIDEO(\"video\");\n\n        private String value;\n\n        RewardMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_LOADED(\"adLoaded\"),\n        AD_FAILED_TO_LOAD(\"adFailedToLoad\"),\n        AD_FAILED_TO_SHOW(\"adFailedToShow\"),\n        AD_OPENED(\"adOpened\"),\n        AD_CLOSED(\"adClosed\"),\n        AD_REWARDED(\"adRewarded\");\n\n        private String rewardEventName;\n\n        Event(String rewardEventName) {\n            this.rewardEventName = rewardEventName;\n        }\n\n        public String getName() {\n            return rewardEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrimeRewardAd\";\n    }\n\n    private void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    HMSAdsPrimeRewardAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mAdLoadListener = new RewardAdLoadListener() {\n            @Override\n            public void onRewardAdFailedToLoad(int errorCode) {\n                hmsLogger.sendSingleEvent(\"rewardAd.loadAd\", String.valueOf(errorCode));\n                sendEvent(Event.AD_FAILED_TO_LOAD, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardedLoaded() {\n                hmsLogger.sendSingleEvent(\"rewardAd.loadAd\");\n                sendEvent(Event.AD_LOADED, ReactUtils.getWritableMapFromRewardAd(mRewardAd));\n            }\n        };\n        mAdStatusListener = new RewardAdStatusListener() {\n            @Override\n            public void onRewardAdClosed() {\n                sendEvent(Event.AD_CLOSED, null);\n            }\n\n            @Override\n            public void onRewardAdFailedToShow(int errorCode) {\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", String.valueOf(errorCode));\n                sendEvent(Event.AD_FAILED_TO_SHOW, getWritableMapFromErrorCode(errorCode));\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                hmsLogger.sendSingleEvent(\"rewardAd.show\");\n                sendEvent(Event.AD_OPENED, null);\n            }\n\n            @Override\n            public void onRewarded(Reward reward) {\n                sendEvent(Event.AD_REWARDED, ReactUtils.getWritableMapFromReward(reward));\n            }\n        };\n        mAdListener = new RewardAdListener() {\n            @Override\n            public void onRewardAdFailedToLoad(int i) {\n                mAdLoadListener.onRewardAdFailedToLoad(i);\n            }\n\n            @Override\n            public void onRewardAdLoaded() {\n                mAdLoadListener.onRewardedLoaded();\n            }\n\n            @Override\n            public void onRewardAdClosed() {\n                mAdStatusListener.onRewardAdClosed();\n            }\n\n            @Override\n            public void onRewardAdOpened() {\n                mAdStatusListener.onRewardAdOpened();\n            }\n\n            @Override\n            public void onRewarded(Reward reward) {\n                mAdStatusListener.onRewarded(reward);\n            }\n\n            @Override\n            public void onRewardAdStarted() {\n            }\n\n            @Override\n            public void onRewardAdLeftApp() {\n            }\n\n            @Override\n            public void onRewardAdCompleted() {\n            }\n        };\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    private WritableMap getWritableMapFromErrorCode(int errorCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"errorCode\", errorCode);\n        wm.putString(\"errorMessage\", getErrorMessage(errorCode));\n        return wm;\n    }\n\n    @ReactMethod\n    public void setAdParam(ReadableMap rm, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setAdParam\");\n        mAdParamReadableMap = rm;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadWithAdId(boolean loadWithAdId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.loadWithAdId\");\n        mLoadWithAdId = loadWithAdId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdId(String adId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setAdId\");\n        mAdId = adId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setData(String data, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setData\");\n        mData = data;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setUserId(String userId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"rewardAd.setUserId\");\n        mUserId = userId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void pause(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.pause\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.pause\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.pause();\n        hmsLogger.sendSingleEvent(\"rewardAd.pause\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void resume(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.resume\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.resume\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.resume();\n        hmsLogger.sendSingleEvent(\"rewardAd.resume\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.destroy\");\n        if (mRewardAd == null) {\n            hmsLogger.sendSingleEvent(\"rewardAd.destroy\", \"-1\");\n            promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n            return;\n        }\n        mRewardAd.destroy();\n        hmsLogger.sendSingleEvent(\"rewardAd.destroy\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setVerifyConfig(final ReadableMap config, final Promise promise) {\n        RewardVerifyConfig.Builder builder = new RewardVerifyConfig.Builder();\n        if (hasValidKey(config, \"userId\", ReadableType.String)) {\n            builder.setUserId(config.getString(\"userId\"));\n        }\n        if (hasValidKey(config, \"data\", ReadableType.String)) {\n            builder.setData(config.getString(\"data\"));\n        }\n        mRewardVerifyConfig = builder.build();\n        hmsLogger.sendSingleEvent(\"rewardAd.setVerifyConfig\");\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void loadAd(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.loadAd\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mRewardAd != null) {\n                mRewardAd.destroy();\n            }\n            mRewardAd = new RewardAd(mReactContext, mAdId);\n\n            if (mUserId != null) {\n                mRewardAd.setUserId(mUserId);\n            }\n            if (mData != null) {\n                mRewardAd.setData(mData);\n            }\n            if (mRewardVerifyConfig != null) {\n                mRewardAd.setRewardVerifyConfig(mRewardVerifyConfig);\n            }\n            if(mVideoConfiguration != null) {\n                mRewardAd.setVideoConfiguration(mVideoConfiguration);\n            }\n\n            AdParam adParam = ReactUtils.getAdParamFromReadableMap(mAdParamReadableMap);\n            if (mLoadWithAdId) {\n                mRewardAd.setRewardAdListener(mAdListener);\n                mRewardAd.loadAd(mAdId, adParam);\n            } else {\n                mRewardAd.loadAd(adParam, mAdLoadListener);\n            }\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.show\");\n        new Handler(Looper.getMainLooper()).post(() -> {\n            if (mRewardAd == null) {\n                promise.reject(\"AD_NOT_CREATED\", \"Reward ad is not created\");\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", \"-1\");\n                return;\n            }\n            if (!mRewardAd.isLoaded()) {\n                promise.reject(\"AD_NOT_LOADED\", \"Reward ad is not loaded\");\n                hmsLogger.sendSingleEvent(\"rewardAd.show\", \"-1\");\n                return;\n            }\n            if (mLoadWithAdId) {\n                mRewardAd.show(mReactContext.getCurrentActivity());\n            } else {\n                mRewardAd.show(mReactContext.getCurrentActivity(), mAdStatusListener);\n            }\n            promise.resolve(null);\n        });\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"rewardAd.isLoaded\");\n        promise.resolve(mRewardAd != null && mRewardAd.isLoaded());\n        hmsLogger.sendSingleEvent(\"rewardAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void setVideoConfiguration(final ReadableMap rm, final Promise promise) {\n        VideoConfiguration.Builder mVideoConfigurationBuilder = new VideoConfiguration.Builder();\n        if (rm == null) {\n            return;\n        }\n        if (ReactUtils.hasValidKey(rm, \"audioFocusType\", ReadableType.Number)) {\n            mVideoConfigurationBuilder.setAudioFocusType(rm.getInt(\"audioFocusType\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"clickToFullScreenRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setClickToFullScreenRequested(\n                rm.getBoolean(\"clickToFullScreenRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"customizeOperateRequested\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setCustomizeOperateRequested(\n                rm.getBoolean(\"customizeOperateRequested\"));\n        }\n        if (ReactUtils.hasValidKey(rm, \"startMuted\", ReadableType.Boolean)) {\n            mVideoConfigurationBuilder.setStartMuted(rm.getBoolean(\"startMuted\"));\n        }\n        mVideoConfiguration = mVideoConfigurationBuilder.build();\n\n        promise.resolve(null);\n    }\n\n    static String getErrorMessage(int errorCode) {\n        switch (errorCode) {\n            case RewardAdStatusListener.ErrorCode.INTERNAL:\n                return \"Internal error.\";\n            case RewardAdStatusListener.ErrorCode.REUSED:\n                return \"The rewarded ad has been displayed.\";\n            case RewardAdStatusListener.ErrorCode.NOT_LOADED:\n                return \"The ad has not been loaded.\";\n            case RewardAdStatusListener.ErrorCode.BACKGROUND:\n                return \"An activity of playing a rewarded ad is performed in the background.\";\n        }\n        return \"Unknown error\";\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeSplashActivity.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport androidx.annotation.NonNull;\n\nimport android.annotation.SuppressLint;\n\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Message;\nimport android.view.View;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport com.huawei.hms.ads.AudioFocusType;\nimport com.huawei.hms.ads.splash.SplashAdDisplayListener;\nimport com.huawei.hms.ads.splash.SplashView;\n\nimport com.huawei.hms.rn.ads.utils.CommonUtils;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport static com.huawei.hms.rn.ads.HMSAdsPrimeSplashAdModule.Event;\nimport static com.huawei.hms.rn.ads.HMSAdsPrimeSplashAdModule.sendEvent;\n\npublic class HMSAdsPrimeSplashActivity extends ReactActivity {\n    private static final String TAG = HMSAdsPrimeSplashActivity.class.getSimpleName();\n\n    private static final int AD_TIMEOUT = 5000;\n\n    private static final int MSG_AD_TIMEOUT = 1001;\n\n    @SuppressLint(\"StaticFieldLeak\")\n    private static SplashView splashView;\n\n    private String mAdId;\n\n    private String mLogoText;\n\n    private String mCopyrightText;\n\n    private int mOrientation;\n\n    private int mSloganResId;\n\n    private int mWideSloganResId;\n\n    private int mLogoResId;\n\n    private int mMediaNameResId;\n\n    private int mAudioFocusType;\n\n    private Bundle mAdParamBundle;\n\n    private SplashView.SplashAdLoadListener splashAdLoadListener = new SplashAdLoadListener();\n\n    private SplashAdDisplayListenerInner adDisplayListener = new SplashAdDisplayListenerInner();\n\n    static void pause(final Promise promise) {\n        if (splashView != null) {\n            splashView.pauseView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void resume(final Promise promise) {\n        if (splashView != null) {\n            splashView.resumeView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void destroy(final Promise promise) {\n        if (splashView != null) {\n            splashView.destroyView();\n            promise.resolve(null);\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void isLoading(final Promise promise) {\n        if (splashView != null) {\n            promise.resolve(splashView.isLoading());\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void isLoaded(final Promise promise) {\n        if (splashView != null) {\n            promise.resolve(splashView.isLoaded());\n        } else {\n            promise.reject(\"AD_NOT_LOADED\", \"Splash is not loaded\");\n        }\n    }\n\n    static void getBiddingInfo(final Promise promise){\n        WritableMap wm = new WritableNativeMap();\n        if(splashView.getBiddingInfo() != null) {\n            wm.putDouble(\"price\", (double) splashView.getBiddingInfo().getPrice());\n            wm.putString(\"cur\", splashView.getBiddingInfo().getCur());\n            wm.putString(\"nurl\", splashView.getBiddingInfo().getNurl());\n            wm.putString(\"lurl\", splashView.getBiddingInfo().getNurl());\n            promise.resolve(wm);\n        } else {\n            promise.reject(\"BIDDING_INFO_ERROR\", \"getBiddingInfo response error\");\n        }\n    }\n\n    /**\n     * Pause flag.\n     * On the splash ad screen:\n     * Set this parameter to true when exiting the app to ensure that the app home screen is not displayed.\n     * Set this parameter to false when returning to the splash ad screen from another screen to ensure that\n     * the app home screen can be displayed properly.\n     */\n    private boolean hasPaused = false;\n\n    // Callback handler used when the ad display timeout message is received.\n    private Handler timeoutHandler = new Handler(new Handler.Callback() {\n        @Override\n        public boolean handleMessage(@NonNull Message msg) {\n            if (HMSAdsPrimeSplashActivity.this.hasWindowFocus()) {\n                jump();\n            }\n            return false;\n        }\n    });\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_splash);\n        Intent intent = getIntent();\n        mOrientation = CommonUtils.GetIntegerExtra(intent,\"orientation\", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        mSloganResId = CommonUtils.GetIntegerExtra(intent, \"sloganResId\", R.drawable.default_slogan);\n        mLogoResId = CommonUtils.GetIntegerExtra(intent, \"logoResId\", R.drawable.ic_launcher);\n        mWideSloganResId = CommonUtils.GetIntegerExtra(intent, \"wideSloganResId\", R.drawable.default_slogan);\n        mMediaNameResId = CommonUtils.GetIntegerExtra(intent, \"mediaNameResId\", 2131493009);\n        mAudioFocusType = CommonUtils.GetIntegerExtra(intent, \"audioFocusType\", AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE);\n        mLogoText = CommonUtils.GetStringExtra(intent, \"logoText\");\n        mCopyrightText = CommonUtils.GetStringExtra(intent,\"copyrightText\");\n        mAdId = CommonUtils.GetStringExtra(intent,\"adId\");\n        mAdParamBundle = CommonUtils.GetBundleExtra(intent,\"adParam\");\n        loadAd();\n    }\n\n    private void loadAd() {\n        View mLogoTextView = findViewById(R.id.text_logo);\n        if (mLogoTextView instanceof TextView) {\n            ((TextView) mLogoTextView).setText(mLogoText);\n        }\n\n        View mCopyrightTextView = findViewById(R.id.text_copyright);\n        if (mCopyrightTextView instanceof TextView) {\n            ((TextView) mCopyrightTextView).setText(mCopyrightText);\n        }\n\n        View mLogoImageView = findViewById(R.id.image_logo);\n        if (mLogoImageView instanceof ImageView) {\n            ((ImageView) mLogoImageView).setImageResource(mLogoResId);\n        }\n\n        splashView = findViewById(R.id.splash_ad_view);\n        splashView.setAdDisplayListener(adDisplayListener);\n\n        // Set a default app launch image.\n        splashView.setSloganResId(mSloganResId);\n        // Set a default app launch image.\n        splashView.setWideSloganResId(mWideSloganResId);\n        // Set a logo image.\n        splashView.setLogoResId(mLogoResId);\n        // Set logo description.\n        splashView.setMediaNameResId(mMediaNameResId);\n        // Set the audio focus type for a video splash ad.\n        splashView.setAudioFocusType(mAudioFocusType);\n\n        splashView.load(mAdId, mOrientation,\n            ReactUtils.getAdParamFromReadableMap(ReactUtils.getWritableMapFromAdParamBundle(mAdParamBundle)),\n            splashAdLoadListener);\n\n        // Remove the timeout message from the message queue.\n        timeoutHandler.removeMessages(MSG_AD_TIMEOUT);\n        // Send a delay message to ensure that the app home screen can be displayed when the ad display times out.\n        timeoutHandler.sendEmptyMessageDelayed(MSG_AD_TIMEOUT, AD_TIMEOUT);\n    }\n\n    /**\n     * Switch from the splash ad screen to the app home screen when the ad display is complete.\n     */\n    private void jump() {\n        if (!hasPaused) {\n            hasPaused = true;\n            Handler mainHandler = new Handler();\n            mainHandler.postDelayed(this::finish, 1000);\n        }\n    }\n\n    /**\n     * Set this parameter to true when exiting the app to ensure that the app home screen is not displayed.\n     */\n    @Override\n    protected void onStop() {\n        // Remove the timeout message from the message queue.\n        timeoutHandler.removeMessages(MSG_AD_TIMEOUT);\n        hasPaused = true;\n        super.onStop();\n    }\n\n    /**\n     * Call this method when returning to the splash ad screen from another screen to access the app home screen.\n     */\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        hasPaused = false;\n        jump();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (splashView != null) {\n            splashView.destroyView();\n        }\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (splashView != null) {\n            splashView.pauseView();\n        }\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (splashView != null) {\n            splashView.resumeView();\n        }\n    }\n\n    private static class SplashAdDisplayListenerInner extends SplashAdDisplayListener {\n        @Override\n        public void onAdClick() {\n            sendEvent(Event.AD_CLICK, null);\n        }\n\n        @Override\n        public void onAdShowed() {\n            sendEvent(Event.AD_SHOWED, null);\n        }\n    }\n\n    private class SplashAdLoadListener extends SplashView.SplashAdLoadListener {\n        @Override\n        public void onAdLoaded() {\n            sendEvent(Event.AD_LOADED, null);\n        }\n\n        @Override\n        public void onAdFailedToLoad(int errorCode) {\n            sendEvent(Event.AD_FAILED_TO_LOAD, ReactUtils.getWritableMapFromErrorCode(errorCode));\n            jump();\n        }\n\n        @Override\n        public void onAdDismissed() {\n            sendEvent(Event.AD_DISMISSED, null);\n            jump();\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeSplashAdModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.annotation.SuppressLint;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.content.pm.ActivityInfo;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.ads.AudioFocusType;\n\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\nimport com.huawei.hms.rn.ads.utils.ResourceUtils;\n\npublic class HMSAdsPrimeSplashAdModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsPrimeSplashAdModule.class.getSimpleName();\n    @SuppressLint(\"StaticFieldLeak\")\n    private static ReactApplicationContext mReactContext;\n    private HMSLogger hmsLogger;\n\n    private ReadableMap mAdParamReadableMap;\n    private int mOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;\n    private int mSloganResId = R.drawable.default_slogan;\n    private int mWideSloganResId = R.drawable.default_slogan;\n    private int mLogoResId = R.drawable.ic_launcher;\n    private int mMediaNameResId;\n    private int mAudioFocusType = AudioFocusType.NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE;\n    private String mAdId;\n    private String mLogoText = \"Huawei Developer\";\n    private String mCopyrightText = \"Copyright 2020. Huawei Technologies Co., Ltd\";\n\n    public enum SplashMediaType {\n        IMAGE(\"image\"),\n        VIDEO(\"video\");\n\n        private String value;\n\n        SplashMediaType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    public enum Event {\n        AD_LOADED(\"adLoaded\"),\n        AD_FAILED_TO_LOAD(\"adFailedToLoad\"),\n        AD_DISMISSED(\"adDismissed\"),\n        AD_SHOWED(\"adShowed\"),\n        AD_CLICK(\"adClick\");\n\n        private String splashEventName;\n\n        Event(String splashEventName) {\n            this.splashEventName = splashEventName;\n        }\n\n        public String getName() {\n            return splashEventName;\n        }\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAdsPrimeSplash\";\n    }\n\n    HMSAdsPrimeSplashAdModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        hmsLogger = HMSLogger.getInstance(reactContext);\n        initContext(reactContext);\n    }\n\n    private static void initContext(final ReactApplicationContext reactContext) {\n        synchronized (HMSAdsPrimeSplashAdModule.class) {\n            mReactContext = reactContext;\n        }\n    }\n\n    static void sendEvent(Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @ReactMethod\n    public void setAdId(final String adId, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAdId\");\n        mAdId = adId;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAdParam(final ReadableMap rm, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAdParam\");\n        mAdParamReadableMap = rm;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setOrientation(final int orientation, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setOrientation\");\n        mOrientation = orientation;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setSloganResource(final String sloganResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setSloganResource\");\n        mSloganResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, sloganResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setWideSloganResource(final String wideSloganResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setWideSloganResource\");\n        mWideSloganResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, wideSloganResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setLogoResource(final String logoResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setLogoResource\");\n        mLogoResId = ResourceUtils.getLogoResourceIdFromContext(mReactContext, logoResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setLogoText(final String logoText, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setLogoText\");\n        mLogoText = logoText;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setCopyrightText(final String copyrightText, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setCopyrightText\");\n        mCopyrightText = copyrightText;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setMediaNameResource(final String mediaNameResName, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setMediaNameResource\");\n        mMediaNameResId = ResourceUtils.getStringResourceIdFromContext(mReactContext, mediaNameResName);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setAudioFocusType(int audioFocusType, final Promise promise) {\n        hmsLogger.sendSingleEvent(\"splashAd.setAudioFocusType\");\n        mAudioFocusType = audioFocusType;\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void pause(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.pause\");\n        HMSAdsPrimeSplashActivity.pause(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.pause\");\n    }\n\n    @ReactMethod\n    public void resume(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.resume\");\n        HMSAdsPrimeSplashActivity.resume(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.resume\");\n    }\n\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.destroy\");\n        HMSAdsPrimeSplashActivity.destroy(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.destroy\");\n    }\n\n    @ReactMethod\n    public void isLoading(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.isLoading\");\n        HMSAdsPrimeSplashActivity.isLoading(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.isLoading\");\n    }\n\n    @ReactMethod\n    public void isLoaded(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.isLoaded\");\n        HMSAdsPrimeSplashActivity.isLoaded(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.isLoaded\");\n    }\n\n    @ReactMethod\n    public void getBiddingInfo(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"splashAd.getBiddingInfo\");\n        HMSAdsPrimeSplashActivity.getBiddingInfo(promise);\n        hmsLogger.sendSingleEvent(\"splashAd.getBiddingInfo\");\n    }\n\n    @ReactMethod\n    public void show(final Promise promise) {\n        Activity mActivity = getCurrentActivity();\n        if (mActivity == null) {\n            promise.reject(\"NO_CURRENT_ACTIVITY\", \"Cannot get current activity\");\n            return;\n        }\n        Intent intent = new Intent(mActivity, HMSAdsPrimeSplashActivity.class);\n        intent.putExtra(\"logoText\", mLogoText);\n        intent.putExtra(\"copyrightText\", mCopyrightText);\n        intent.putExtra(\"orientation\", mOrientation);\n        intent.putExtra(\"sloganResId\", mSloganResId);\n        intent.putExtra(\"logoResId\", mLogoResId);\n        intent.putExtra(\"wideSloganResId\", mWideSloganResId);\n        intent.putExtra(\"mediaNameResId\", mMediaNameResId);\n        intent.putExtra(\"audioFocusType\", mAudioFocusType);\n        intent.putExtra(\"adId\", mAdId);\n        intent.putExtra(\"adParam\", ReactUtils.getBundleFromReadableMap(mAdParamReadableMap));\n        hmsLogger.startMethodExecutionTimer(\"splashAd.show\");\n        mActivity.startActivity(intent);\n        hmsLogger.sendSingleEvent(\"splashAd.show\");\n        Log.i(TAG, \"startActivity() is called, starting new splash activity...\");\n        promise.resolve(null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeVastModule.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.pm.ActivityInfo;\nimport android.util.ArrayMap;\nimport android.view.View;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.UIManagerModule;\nimport com.huawei.hms.ads.vast.adapter.SdkFactory;\nimport com.huawei.hms.ads.vast.adapter.VastSdkConfiguration;\nimport com.huawei.hms.ads.vast.domain.event.AdContent;\nimport com.huawei.hms.ads.vast.domain.event.VastAdContent;\nimport com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions;\nimport com.huawei.hms.ads.vast.openalliance.ad.constant.NonPersonalizedAd;\nimport com.huawei.hms.ads.vast.player.api.AdsRequestListener;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.model.CreativeResource;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsPrimeVastModule extends ReactContextBaseJavaModule {\n    private static final String TAG = HMSAdsPrimeVastModule.class.getSimpleName();\n    private final ReactContext reactContext;\n    private HMSLogger hmsLogger;\n\n    HMSAdsPrimeVastModule(ReactContext reactContext) {\n        super((ReactApplicationContext) reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSVast\";\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n\n        Map<String, Object> nonPersonalizedAd = new ArrayMap<>();\n        nonPersonalizedAd.put(\"PERSONALIZED\", NonPersonalizedAd.PERSONALIZED);\n        nonPersonalizedAd.put(\"NON_PERSONALIZED\", NonPersonalizedAd.NON_PERSONALIZED);\n        constants.put(\"NonPersonalizedAd\", nonPersonalizedAd);\n\n        Map<String, Object> contentClassification = new ArrayMap<>();\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_W\",  RequestOptions.AD_CONTENT_CLASSIFICATION_W);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_PI\", RequestOptions.AD_CONTENT_CLASSIFICATION_PI);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_J\", RequestOptions.AD_CONTENT_CLASSIFICATION_J);\n        contentClassification.put(\"AD_CONTENT_CLASSIFICATION_A\", RequestOptions.AD_CONTENT_CLASSIFICATION_A);\n        constants.put(\"ContentClassification\", contentClassification);\n\n        Map<String, Object> tagForChild = new ArrayMap<>();\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_FALSE\", RequestOptions.TAG_FOR_CHILD_PROTECTION_FALSE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_TRUE\", RequestOptions.TAG_FOR_CHILD_PROTECTION_TRUE);\n        tagForChild.put(\"TAG_FOR_CHILD_PROTECTION_UNSPECIFIED\", RequestOptions.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED);\n        constants.put(\"TagForChild\", tagForChild);\n\n        Map<String, Object> underAge = new ArrayMap<>();\n        underAge.put(\"PROMISE_FALSE\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_FALSE);\n        underAge.put(\"PROMISE_TRUE\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_TRUE);\n        underAge.put(\"PROMISE_UNSPECIFIED\", RequestOptions.TAG_FOR_UNDER_AGE_OF_PROMISE_UNSPECIFIED);\n        constants.put(\"UnderAge\", underAge);\n\n        Map<String, Object> creativeMatchType = new ArrayMap<>();\n        creativeMatchType.put(\"EXACT\", HMSAdsPrimeVastView.CreativeMatchType.EXACT.getValue());\n        creativeMatchType.put(\"SMART\", HMSAdsPrimeVastView.CreativeMatchType.SMART.getValue());\n        creativeMatchType.put(\"UNKNOWN\", HMSAdsPrimeVastView.CreativeMatchType.UNKNOWN.getValue());\n        creativeMatchType.put(\"ANY\", HMSAdsPrimeVastView.CreativeMatchType.ANY.getValue());\n        creativeMatchType.put(\"LANDSCAPE\", HMSAdsPrimeVastView.CreativeMatchType.LANDSCAPE.getValue());\n        creativeMatchType.put(\"PORTRAIT\", HMSAdsPrimeVastView.CreativeMatchType.PORTRAIT.getValue());\n        constants.put(\"CreativeMatchType\", creativeMatchType);\n\n        Map<String, Object> orientation = new ArrayMap<>();\n        orientation.put(\"PORTRAIT\", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\n        orientation.put(\"LANDSCAPE\", ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);\n        constants.put(\"Orientation\", orientation);\n\n        return constants;\n    }\n\n    @ReactMethod\n    public void init(ReadableMap rm, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"VasInit\");\n        SdkFactory.init(reactContext, ReactUtils.getVastSdkConfigurationFromReadableMap(rm));\n        hmsLogger.sendSingleEvent(\"VasInit\");\n        promise.resolve(\"Vast Ad SDK Factory initialized\");\n    }\n\n    @ReactMethod\n    public void getVastSdkConfiguration(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getVastSdkConfiguration\");\n        VastSdkConfiguration vastSdkConfiguration = SdkFactory.getConfiguration();\n        hmsLogger.sendSingleEvent(\"getVastSdkConfiguration\");\n        promise.resolve(ReactUtils.getWritableMapFromVastSdkConfiguration(vastSdkConfiguration));\n    }\n\n    @ReactMethod\n    public void getEventProcessor(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getEventProcessor\");\n        CreativeResource currentPlayerCreative = VastAdPlayer.getInstance().getCurrentLinearCreative();\n        if (SdkFactory.getEventProcessor() == null) {\n            return;\n        }\n        SdkFactory.getEventProcessor()\n                .onAcceptInvitationLinear(currentPlayerCreative.getTrackingEvents(),\n                        getAdContentByCreative(currentPlayerCreative));\n\n        SdkFactory.getEventProcessor()\n                .onRewind(currentPlayerCreative.getTrackingEvents(),\n                        getAdContentByCreative(currentPlayerCreative), 5000,\n                        currentPlayerCreative.getDuration());\n\n        hmsLogger.sendSingleEvent(\"getEventProcessor\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void updateSdkServerConfig(String slotId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"updateSdkServerConfig\");\n        SdkFactory.updateSdkServerConfig(slotId);\n        hmsLogger.sendSingleEvent(\"updateSdkServerConfig\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void userAcceptAdLicense(boolean isAcceptLicense, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"userAcceptAdLicense\");\n        SdkFactory.userAcceptAdLicense(isAcceptLicense);\n        hmsLogger.sendSingleEvent(\"userAcceptAdLicense\");\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void getViewInfo(final int viewId, final Promise promise) {\n        UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n        uiManager.addUIBlock(nativeViewHierarchyManager -> {\n            View view = nativeViewHierarchyManager.resolveView(viewId);\n            if (view instanceof HMSAdsPrimeVastView) {\n                HMSAdsPrimeVastView myView = (HMSAdsPrimeVastView) view;\n                WritableMap wm = new WritableNativeMap();\n                wm.putMap(\"AdPlayerConfigs\", ReactUtils.getWritableMapFromVastAdPlayerConfigs(reactContext));\n                wm.putMap(\"LinearAdSlot\", ReactUtils.getWritableMapFromLinearAdSlot(myView.mLinearAdSlot));\n                wm.putMap(\"AdsData\", ReactUtils.getWritableMapFromAdsData(myView.mAdsData));\n                wm.putMap(\"VideoControllerInfo\", myView.getVideoControllerInfo());\n                promise.resolve(wm);\n            } else {\n                promise.reject(\"NOT_AD_VIEW\", \"Unexpected view type\");\n            }\n        });\n    }\n\n    private AdContent getAdContentByCreative(CreativeResource playerResource) {\n        return VastAdContent.createByRequestId(playerResource.getRequestId())\n                .setSlotId(playerResource.getSlotId())\n                .setAssetUri(playerResource.getUrl())\n                .setCreativeType(playerResource.getType())\n                .setShowId(playerResource.getShowId())\n                .setCreativeId(playerResource.getContentId())\n                .setCreativeExtensionMap(playerResource.getTypeToCreativeExtension())\n                .setAdExtensionMap(playerResource.getAdExtensionMap());\n    }\n\n    public static String getVastErrorMessages(int errorCode) {\n        switch (errorCode) {\n            case AdsRequestListener.LOAD_AD_FAILED:\n                return \"The XML content fails to be parsed.\";\n            case AdsRequestListener.MAIN_AD_LOAD_FAILED:\n                return \"The ad cannot be played or fails to be loaded.\";\n            case AdsRequestListener.CREATIVE_TYPE_ERROR:\n                return \"Incorrect type of the asset to be parsed.\";\n            case AdsRequestListener.ADSLOT_MORE_THAN_CREATIVE:\n                return \"The number of returned assets is less than that of ad units.\";\n        }\n        return \"Unknown error\";\n    }\n\n    public static String getVastPlayStateChangedMessage(int playState) {\n        switch (playState) {\n            case 2001:\n                return \"An ad whose creative type is not specified is being played.\";\n            case 2002:\n                return \"Playback pauses.\";\n            case 2006:\n                return \"A video ad is being played.\";\n            case 2007:\n                return \"An image ad is being played.\";\n            default:\n                return \"Unknown Play State\";\n        }\n    }\n\n    public static String getVastScreenStateChangedMessage(int screenState) {\n        switch (screenState) {\n            case 1001:\n                return \"normal screen mode\";\n            case 1002:\n                return \"full screen mode\";\n            default:\n                return \"Unknown Screen State\";\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/HMSAdsPrimeVastView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\nimport android.widget.ProgressBar;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.LifecycleEventListener;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\nimport com.huawei.hms.ads.vast.player.VastApplication;\nimport com.huawei.hms.ads.vast.player.api.AdsRequestListener;\nimport com.huawei.hms.ads.vast.player.api.DefaultVideoController;\nimport com.huawei.hms.ads.vast.player.api.PlayerConfig;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.api.VastPlayerListener;\nimport com.huawei.hms.ads.vast.player.model.adslot.AdsData;\nimport com.huawei.hms.ads.vast.player.model.adslot.LinearAdSlot;\nimport com.huawei.hms.ads.vast.player.model.remote.RequestCallback;\nimport com.huawei.hms.rn.ads.custome.CustomVideoController;\nimport com.huawei.hms.rn.ads.logger.HMSLogger;\nimport com.huawei.hms.rn.ads.utils.ReactUtils;\n\nimport java.util.Map;\n\npublic class HMSAdsPrimeVastView extends LinearLayout implements LifecycleEventListener, VastPlayerListener {\n    private static final String TAG = HMSAdsPrimeVastView.class.getSimpleName();\n\n    public ReactContext mReactContext;\n\n    private FrameLayout mLinearAdView;\n\n    private ProgressBar mProgressBar;\n\n    protected PlayerConfig playerConfig;\n    protected AdsData mAdsData;\n    protected LinearAdSlot mLinearAdSlot;\n    protected CustomVideoController customVideoController;\n    protected DefaultVideoController defaultVideoController;\n    private HMSAdsPrimeVastView mHMSAdsPrimeVastView;\n    private boolean isCustomVideoPlayer = false;\n    private boolean isAdLoadWithAdsData = false;\n    private boolean isTestAd = false;\n\n    private final Runnable measureAndLayout = () -> {\n        measure(\n                MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n        layout(getLeft(), getTop(), getRight(), getBottom());\n    };\n\n    public HMSAdsPrimeVastView(Context context) {\n        super(context);\n        if (context instanceof ReactContext) {\n            mReactContext = (ReactContext) context;\n        }\n        mReactContext.addLifecycleEventListener(this);\n    }\n\n    public HMSAdsPrimeVastView(Context context, AttributeSet attrs, int defStyle) {\n        super(context);\n    }\n\n    public HMSAdsPrimeVastView(Context context, AttributeSet attrs) {\n        super(context);\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(measureAndLayout);\n    }\n\n    private void sendEvent(HMSAdsPrimeVastView.Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    void loadAd() {\n        VastApplication.init(mReactContext, isTestAd);\n\n        VastAdPlayer.getInstance().setAdViewStrategy((expectedHeight, expectedWidth, height, width) -> true);\n\n        LayoutInflater layoutInflater = LayoutInflater.from(mReactContext);\n\n        if (mHMSAdsPrimeVastView != null) {\n            releaseAd();\n        }\n\n        mHMSAdsPrimeVastView = (HMSAdsPrimeVastView) layoutInflater.inflate(R.layout.vast_template, null);\n        mLinearAdView = mHMSAdsPrimeVastView.findViewById(R.id.fl_linear_ad);\n        mProgressBar = mHMSAdsPrimeVastView.findViewById(R.id.progress);\n\n        if (isCustomVideoPlayer) {\n            customVideoController = new CustomVideoController(mReactContext);\n            customVideoController.setPlayerListener(this);\n\n            VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, customVideoController);\n        } else {\n            defaultVideoController = new DefaultVideoController(mReactContext);\n\n            VastAdPlayer.getInstance().registerLinearAdView(mLinearAdView, defaultVideoController);\n        }\n\n        VastAdPlayer.getInstance().setConfig(playerConfig);\n\n        if (isAdLoadWithAdsData) {\n            VastAdPlayer.getInstance().loadLinearAd(mLinearAdSlot, new RequestCallback() {\n                @Override\n                public void onAdsLoadedSuccess(AdsData adsData) {\n                    Log.d(TAG, \"onAdsLoadedSuccess :\");\n                    mAdsData = adsData;\n                    showAd();\n                    sendEvent(Manager.Event.AD_LOAD_SUCCESS, ReactUtils.getWritableMapFromAdsData(adsData));\n                }\n\n                @Override\n                public void onAdsLoadFailed() {\n                    Log.d(TAG, \"onAdsLoadFailed :\");\n                    mAdsData = null;\n                    sendEvent(Manager.Event.AD_LOAD_FAILED, null);\n                }\n            });\n        }else{\n            showAd();\n        }\n\n    }\n\n    void showAd() {\n        if (mLinearAdSlot == null) {\n            return;\n        }\n\n        if (mAdsData != null) {\n            VastAdPlayer.getInstance().playLinearAds(mLinearAdSlot, mAdsData, adsRequestListener);\n        } else {\n            if (mLinearAdSlot.getMaxAdPods() != 0) {\n                VastAdPlayer.getInstance().startAdPods(mLinearAdSlot, adsRequestListener);\n            } else {\n                VastAdPlayer.getInstance().startLinearAd(mLinearAdSlot, adsRequestListener);\n            }\n        }\n\n        this.removeAllViews();\n        this.addView(mHMSAdsPrimeVastView);\n        this.requestLayout();\n    }\n\n    @Override\n    public void onPlayStateChanged(int playState) {\n        Log.d(TAG, \"onPlayStateChanged :\" + playState);\n        sendEvent(Manager.Event.AD_PLAY_STATE_CHANGED, ReactUtils.getWritableMapFromVastPlayState(playState));\n    }\n\n    @Override\n    public void onVolumeChanged(float volume) {\n        Log.d(TAG, \"onVolumeChanged :\" + volume);\n        WritableMap wm = new WritableNativeMap();\n        wm.putDouble(\"volume\", volume);\n        sendEvent(Manager.Event.AD_VOLUME_CHANGED, wm);\n    }\n\n    @Override\n    public void onScreenViewChanged(int screenState) {\n        Log.d(TAG, \"onScreenViewChanged :\" + screenState);\n        sendEvent(Manager.Event.AD_SCREEN_VIEW_CHANGED, ReactUtils.getWritableMapFromVastScreenState(screenState));\n    }\n\n    @Override\n    public void onProgressChanged(long duration, long currentPosition, long skipDuration) {\n        Log.d(TAG, \"onProgressChanged :\" + duration + \" -- \" + \" -- \" + currentPosition + \" -- \" + skipDuration);\n        sendEvent(Manager.Event.AD_PROGRESS_CHANGED, ReactUtils.getWritableMapFromVastProgressListener(duration, currentPosition, skipDuration));\n    }\n\n    private AdsRequestListener adsRequestListener = new AdsRequestListener() {\n        @Override\n        public void onSuccess(View view, int responseCode) {\n            Log.d(TAG, \"onSuccess :\" + responseCode);\n            sendEvent(Manager.Event.AD_ON_SUCCESS, null);\n        }\n\n        @Override\n        public void onFailed(View view, int responseCode) {\n            Log.d(TAG, \"onFailed :\" + responseCode);\n            sendEvent(Manager.Event.AD_ON_FAILED, ReactUtils.getWritableMapFromVastErrorCode(responseCode));\n        }\n\n        @Override\n        public void playAdReady() {\n            Log.d(TAG, \"playAdReady :\");\n            mLinearAdView.setVisibility(View.VISIBLE);\n            sendEvent(Manager.Event.AD_READY, null);\n        }\n\n        @Override\n        public void playAdFinish() {\n            Log.d(TAG, \"playAdFinish :\");\n            mLinearAdView.setVisibility(View.INVISIBLE);\n            sendEvent(Manager.Event.AD_FINISH, null);\n        }\n\n        @Override\n        public void onBufferStart() {\n            Log.d(TAG, \"onBufferStart :\");\n            mProgressBar.setVisibility(View.VISIBLE);\n            sendEvent(Manager.Event.AD_BUFFER_START, null);\n        }\n\n        @Override\n        public void onBufferEnd() {\n            Log.d(TAG, \"onBufferEnd :\");\n            mProgressBar.setVisibility(View.INVISIBLE);\n            sendEvent(Manager.Event.AD_BUFFER_END, null);\n        }\n    };\n\n    public enum CreativeMatchType {\n        EXACT(0),\n        SMART(1),\n        UNKNOWN(2),\n        ANY(3),\n        LANDSCAPE(4),\n        PORTRAIT(5);\n\n        private int value;\n\n        CreativeMatchType(int value) {\n            this.value = value;\n        }\n\n        public int getValue() {\n            return value;\n        }\n\n        public static HMSAdsPrimeVastView.CreativeMatchType forValue(int s) {\n            switch (s) {\n                case 0:\n                    return EXACT;\n                case 1:\n                    return SMART;\n                case 2:\n                    return UNKNOWN;\n                case 4:\n                    return LANDSCAPE;\n                case 5:\n                    return PORTRAIT;\n                default:\n                    return ANY;\n            }\n        }\n    }\n\n    public void setAdParam(ReadableMap adParamReadableMap) {\n        mLinearAdSlot = ReactUtils.getLinearAdSlotFromReadableMap(adParamReadableMap);\n    }\n\n    public void setIsCustomVideoPlayer(boolean isCustomVideoPlayer) {\n        this.isCustomVideoPlayer = isCustomVideoPlayer;\n    }\n\n    public void setIsAdLoadWithAdsData(boolean isAdLoadWithAdsData) {\n        this.isAdLoadWithAdsData = isAdLoadWithAdsData;\n    }\n\n    public void setIsTestAd(boolean isTestAd) {\n        this.isTestAd = isTestAd;\n    }\n\n    public void setPlayerConfig(ReadableMap adPlayerConfigsReadableMap) {\n        playerConfig = ReactUtils.getPlayerConfigsFromReadableMap(adPlayerConfigsReadableMap);\n    }\n\n    public void toggleMuteState(boolean isMute) {\n        if (isCustomVideoPlayer) {\n            customVideoController.toggleMuteState(isMute);\n        } else {\n            defaultVideoController.toggleMuteState(isMute);\n        }\n    }\n\n    public void startOrPause() {\n        if (isCustomVideoPlayer) {\n            customVideoController.startOrPause();\n        } else {\n            defaultVideoController.startOrPause();\n        }\n    }\n\n    public WritableMap getVideoControllerInfo() {\n        WritableMap wm = new WritableNativeMap();\n        if (isCustomVideoPlayer) {\n            wm.putBoolean(\"isMute\", customVideoController.isMute());\n            wm.putInt(\"layoutId\", customVideoController.getLayoutId());\n        } else {\n            wm.putBoolean(\"isMute\", defaultVideoController.isMute());\n            wm.putInt(\"layoutId\", defaultVideoController.getLayoutId());\n        }\n        return wm;\n    }\n\n    private void resumeAd() {\n        VastAdPlayer.getInstance().resume();\n    }\n\n    private void pauseAd() {\n        VastAdPlayer.getInstance().pause();\n    }\n\n    private void releaseAd() {\n        if (mLinearAdView != null) {\n            VastAdPlayer.getInstance().unregisterLinearAdView(mLinearAdView);\n        }\n        VastAdPlayer.getInstance().release();\n        this.removeAllViews();\n    }\n\n    @Override\n    public void onHostResume() {\n        Log.d(TAG, \"onHostResume\");\n        resumeAd();\n    }\n\n    @Override\n    public void onHostPause() {\n        Log.d(TAG, \"onHostPause\");\n        pauseAd();\n    }\n\n    @Override\n    public void onHostDestroy() {\n        Log.d(TAG, \"onHostDestroy\");\n        releaseAd();\n    }\n\n    public static class Manager extends SimpleViewManager<HMSAdsPrimeVastView> {\n        private HMSLogger hmsLogger;\n\n        public Manager(ReactApplicationContext reactContext) {\n            hmsLogger = HMSLogger.getInstance(reactContext);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            AD_LOAD_SUCCESS(\"onLoadSuccess\"),\n            AD_LOAD_FAILED(\"onLoadFailed\"),\n            AD_ON_SUCCESS(\"onSuccess\"),\n            AD_ON_FAILED(\"onFailed\"),\n            AD_READY(\"onPlayAdReady\"),\n            AD_FINISH(\"onPlayAdFinish\"),\n            AD_BUFFER_START(\"onBufferStart\"),\n            AD_BUFFER_END(\"onBufferEnd\"),\n            AD_PLAY_STATE_CHANGED(\"onPlayStateChanged\"),\n            AD_VOLUME_CHANGED(\"onVolumeChanged\"),\n            AD_SCREEN_VIEW_CHANGED(\"onScreenViewChanged\"),\n            AD_PROGRESS_CHANGED(\"onProgressChanged\");\n\n            private String nativeVastEventName;\n\n            Event(String nativeEventName) {\n                this.nativeVastEventName = nativeEventName;\n            }\n\n            public String getName() {\n                return nativeVastEventName;\n            }\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            LOAD_AD(\"loadAd\"),\n            SHOW_AD(\"showAd\"),\n            PAUSE(\"pause\"),\n            RESUME(\"resume\"),\n            RELEASE(\"release\"),\n            TOGGLE_MUTE_STATE(\"toggleMuteState\"),\n            START_OR_PAUSE(\"startOrPause\");\n\n            private String nativeVastCommandName;\n\n            Command(String nativeCommandName) {\n                this.nativeVastCommandName = nativeCommandName;\n            }\n\n            public String getName() {\n                return nativeVastCommandName;\n            }\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSAdsPrimeVastView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSAdsPrimeVastView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            hmsLogger.sendSingleEvent(\"vastView.create\");\n            return new HMSAdsPrimeVastView(reactContext);\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(HMSAdsPrimeVastView.Manager.Event.values());\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(HMSAdsPrimeVastView.Manager.Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSAdsPrimeVastView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < HMSAdsPrimeVastView.Manager.Command.values().length) {\n                switch (HMSAdsPrimeVastView.Manager.Command.values()[commandId]) {\n                    case LOAD_AD:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.loadAd\");\n                        root.loadAd();\n                        hmsLogger.sendSingleEvent(\"vastView.loadAd\");\n                        break;\n                    case PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.pause\");\n                        root.pauseAd();\n                        hmsLogger.sendSingleEvent(\"vastView.pause\");\n                        break;\n                    case RESUME:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.resume\");\n                        root.resumeAd();\n                        hmsLogger.sendSingleEvent(\"vastView.resume\");\n                        break;\n                    case RELEASE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.release\");\n                        root.releaseAd();\n                        hmsLogger.sendSingleEvent(\"vastView.release\");\n                        break;\n                    case TOGGLE_MUTE_STATE:\n                        assert args != null;\n                        hmsLogger.startMethodExecutionTimer(\"vastView.toggleMuteState\");\n                        root.toggleMuteState(args.getBoolean(0));\n                        hmsLogger.sendSingleEvent(\"vastView.toggleMuteState\");\n                        break;\n                    case START_OR_PAUSE:\n                        hmsLogger.startMethodExecutionTimer(\"vastView.startOrPause\");\n                        root.startOrPause();\n                        hmsLogger.sendSingleEvent(\"vastView.startOrPause\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"adParam\")\n        public void setAdParam(final HMSAdsPrimeVastView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"vastView.setAdParam\");\n            view.setAdParam(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"isCustomVideoPlayer\")\n        public void setIsCustomVideoPlayer(final HMSAdsPrimeVastView view, boolean isCustomVideoPlayer) {\n            hmsLogger.sendSingleEvent(\"vastView.setIsCustomVideoPlayer\");\n            view.setIsCustomVideoPlayer(isCustomVideoPlayer);\n        }\n\n        @ReactProp(name = \"isAdLoadWithAdsData\")\n        public void setIsAdLoadWithAdsData(final HMSAdsPrimeVastView view, boolean isAdLoadWithAdsData) {\n            hmsLogger.sendSingleEvent(\"vastView.setIsAdLoadWithAdsData\");\n            view.setIsAdLoadWithAdsData(isAdLoadWithAdsData);\n        }\n\n        @ReactProp(name = \"playerConfigs\")\n        public void setPlayerConfigs(final HMSAdsPrimeVastView view, final ReadableMap adParamReadableMap) {\n            hmsLogger.sendSingleEvent(\"vastView.setAdParam\");\n            view.setPlayerConfig(adParamReadableMap);\n        }\n\n        @ReactProp(name = \"isTestAd\")\n        public void setIsTestAd(final HMSAdsPrimeVastView view, boolean isTest) {\n            hmsLogger.sendSingleEvent(\"vastView.isTestAd\");\n            view.setIsTestAd(isTest);\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/custome/CustomVideoController.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.custome;\n\nimport android.util.AttributeSet;\nimport android.view.ViewGroup;\nimport android.widget.Button;\nimport android.widget.CheckBox;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.huawei.hms.ads.vast.player.base.BaseVideoController;\nimport com.huawei.hms.ads.vast.player.misc.utils.AudioUtil;\nimport com.huawei.hms.rn.ads.R;\n\npublic class CustomVideoController extends BaseVideoController{\n    private CheckBox btnMute;\n\n    private ViewGroup clContent;\n\n    private Button btnDetailView;\n\n    private Button btnScreen;\n\n    private Button btnPlay;\n\n    public CustomVideoController(ReactContext context) {\n        this(context, null);\n    }\n\n    public CustomVideoController(ReactContext context, AttributeSet attrs) {\n        this(context, attrs, 0);\n    }\n\n    public CustomVideoController(ReactContext context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        initView(context);\n        initMuteState();\n    }\n\n    private void initView(ReactContext context) {\n        clContent = findViewById(R.id.cl_content);\n        btnDetailView = findViewById(R.id.demo_bt_detail);\n        btnScreen = findViewById(R.id.demo_bt_full_screen);\n        btnPlay = findViewById(R.id.demo_bt_play);\n        btnMute = findViewById(R.id.demo_bt_voice);\n\n        btnScreen.setOnClickListener(v -> toggleScreen(context.getCurrentActivity()));\n        btnDetailView.setOnClickListener(v -> launchAdDetailView(context.getCurrentActivity()));\n        btnPlay.setOnClickListener(v -> startOrPause());\n        clContent.setOnClickListener(v -> launchAdDetailView(context.getCurrentActivity()));\n    }\n\n    private void initMuteState() {\n        btnMute.setChecked(isMute());\n        btnMute.setOnCheckedChangeListener((button, checked) -> toggleMuteState(checked));\n    }\n\n    @Override\n    public int getLayoutId() {\n        return R.layout.activity_video_player;\n    }\n\n    @Override\n    public boolean isMute() {\n        if (mIsForceMute) {\n            return btnMute.isChecked();\n        } else {\n            return AudioUtil.isSystemVolumeZero(mActivity);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/logger/HMSLogger.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ADSPrime\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"13.4.73.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode, final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/utils/CommonUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\n\npublic class CommonUtils {\n    private static final String TAG = CommonUtils.class.getSimpleName();\n\n    public static int GetIntegerExtra(Intent intent, String name, int defaultValue) {\n        try {\n            return intent.getIntExtra(name, defaultValue);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return defaultValue;\n        }\n    }\n\n    public static String GetStringExtra(Intent intent, String name) {\n        try {\n            return intent.getStringExtra(name);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return \"\";\n        }\n    }\n\n    public static Bundle GetBundleExtra(Intent intent, String name) {\n        try {\n            return intent.getBundleExtra(name);\n        } catch (Exception e) {\n            Log.e(TAG, e.getMessage());\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/utils/Constants.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\npublic interface Constants {\n    String INSTALL_REFERRER_FILE = \"install_referrer\";\n    String SERVICE_PACKAGE_NAME = \"com.huawei.hwid\";\n    String SERVICE_ACTION = \"com.huawei.android.hms.CHANNEL_SERVICE\";\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/utils/ReactUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport android.content.Context;\nimport android.location.Location;\nimport android.os.Bundle;\nimport android.util.ArrayMap;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.common.MapBuilder;\n\nimport com.huawei.hms.ads.AdParam;\nimport com.huawei.hms.ads.AdSize;\nimport com.huawei.hms.ads.AdvertiserInfo;\nimport com.huawei.hms.ads.BannerAdSize;\nimport com.huawei.hms.ads.BiddingParam;\nimport com.huawei.hms.ads.RequestOptions;\nimport com.huawei.hms.ads.VideoConfiguration;\nimport com.huawei.hms.ads.VideoOperator;\nimport com.huawei.hms.ads.InterstitialAd;\nimport com.huawei.hms.ads.consent.bean.AdProvider;\nimport com.huawei.hms.ads.identifier.AdvertisingIdClient;\nimport com.huawei.hms.ads.installreferrer.api.ReferrerDetails;\nimport com.huawei.hms.ads.instreamad.InstreamAd;\nimport com.huawei.hms.ads.nativead.DislikeAdReason;\nimport com.huawei.hms.ads.nativead.NativeAd;\nimport com.huawei.hms.ads.nativead.NativeAdConfiguration;\nimport com.huawei.hms.ads.nativead.NativeAdLoader;\nimport com.huawei.hms.ads.reward.Reward;\nimport com.huawei.hms.ads.reward.RewardAd;\nimport com.huawei.hms.ads.vast.adapter.SdkFactory;\nimport com.huawei.hms.ads.vast.adapter.VastSdkConfiguration;\nimport com.huawei.hms.ads.vast.application.requestinfo.CreativeMatchStrategy;\nimport com.huawei.hms.ads.vast.domain.advertisement.CreativeExtension;\nimport com.huawei.hms.ads.vast.player.api.PlayerConfig;\nimport com.huawei.hms.ads.vast.player.api.VastAdPlayer;\nimport com.huawei.hms.ads.vast.player.model.LinearCreative;\nimport com.huawei.hms.ads.vast.player.model.adslot.AdsData;\nimport com.huawei.hms.ads.vast.player.model.adslot.LinearAdSlot;\nimport com.huawei.hms.rn.ads.HMSAdsPrimeBannerView;\nimport com.huawei.hms.rn.ads.HMSAdsPrimeModule;\nimport com.huawei.hms.rn.ads.HMSAdsPrimeVastModule;\nimport com.huawei.hms.rn.ads.HMSAdsPrimeVastView;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\n\nimport static com.huawei.hms.rn.ads.HMSAdsPrimeNativeView.getCreativeType;\n\npublic class ReactUtils {\n    public interface Mapper<T, R> {\n        /**\n         * Used to map classes\n         *\n         * @param in mapped from\n         * @return mapped to\n         */\n        R map(T in);\n    }\n\n    public interface NamedEvent {\n        /**\n         * Gets name of the event\n         *\n         * @return String of name of the event\n         */\n        String getName();\n    }\n\n    public interface NamedCommand {\n        /**\n         * Gets name of the command\n         *\n         * @return String of name of the command\n         */\n        String getName();\n    }\n\n    public static <R> List<R> mapReadableArray(ReadableArray array, Mapper<ReadableMap, R> mapper) {\n        List<R> list = new ArrayList<>();\n        for (int i = 0; i < array.size(); i++) {\n            list.add(mapper.map(array.getMap(i)));\n        }\n        return list;\n    }\n\n    public static <T> WritableArray mapList(List<T> list, Mapper<T, WritableMap> mapper) {\n        if (list == null || list.isEmpty()) {\n            return null;\n        }\n        WritableArray array = new WritableNativeArray();\n        for (T item : list) {\n            array.pushMap(mapper.map(item));\n        }\n        return array;\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static WritableMap getWritableMapFromErrorCode(int errorCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"errorCode\", errorCode);\n        wm.putString(\"errorMessage\", HMSAdsPrimeModule.getErrorMessage(errorCode));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastErrorCode(int responseCode) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"responseCode\", responseCode);\n        wm.putString(\"errorMessage\", HMSAdsPrimeVastModule.getVastErrorMessages(responseCode));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastPlayState(int playState) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"playStateCode\", playState);\n        wm.putString(\"playStateMessage\", HMSAdsPrimeVastModule.getVastPlayStateChangedMessage(playState));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastScreenState(int screenState) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"screenStateCode\", screenState);\n        wm.putString(\"screenStateMessage\", HMSAdsPrimeVastModule.getVastScreenStateChangedMessage(screenState));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastProgressListener(long duration, long currentPosition,\n        long skipDuration) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putDouble(\"duration\", duration);\n        wm.putDouble(\"currentPosition\", currentPosition);\n        wm.putDouble(\"skipDuration\", skipDuration);\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromReward(Reward obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putString(\"name\", obj.getName());\n        wm.putInt(\"amount\", obj.getAmount());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromRewardAd(RewardAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putString(\"userId\", obj.getUserId());\n        wm.putString(\"data\", obj.getData());\n        wm.putMap(\"reward\", getWritableMapFromReward(obj.getReward()));\n        wm.putBoolean(\"isLoaded\", obj.isLoaded());\n        if(obj.getBiddingInfo() != null) {\n            wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n            wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n            wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n            wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromInterstitialAd(InterstitialAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adId\", obj.getAdId());\n            wm.putBoolean(\"isLoaded\", obj.isLoaded());\n            wm.putBoolean(\"isLoading\", obj.isLoading());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromInstreamAd(InstreamAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adSource\", obj.getAdSource());\n            wm.putString(\"adSign\", obj.getAdSign());\n            wm.putString(\"callToAction\", obj.getCallToAction());\n            wm.putString(\"whyThisAd\", obj.getWhyThisAd());\n            wm.putDouble(\"duration\", obj.getDuration());\n            wm.putBoolean(\"isClicked\", obj.isClicked());\n            wm.putBoolean(\"isExpired\", obj.isExpired());\n            wm.putBoolean(\"isImageAd\", obj.isImageAd());\n            wm.putBoolean(\"isShown\", obj.isShown());\n            wm.putBoolean(\"isVideoAd\", obj.isVideoAd());\n            wm.putBoolean(\"hasAdvertiserInfo\", obj.hasAdvertiserInfo());\n            if (obj.hasAdvertiserInfo()) {\n                wm.putArray(\"advertiserInfo\", getWritableArrayAdvertiserInfo(obj.getAdvertiserInfo()));\n            }\n            wm.putBoolean(\"isTransparencyOpen\", obj.isTransparencyOpen());\n            wm.putString(\"transparencyTplUrl\", obj.getTransparencyTplUrl());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAd(NativeAd obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"adSign\", obj.getAdSign());\n            wm.putString(\"adSource\", obj.getAdSource());\n            wm.putString(\"description\", obj.getDescription());\n            wm.putString(\"callToAction\", obj.getCallToAction());\n            wm.putString(\"whyThisAd\", obj.getWhyThisAd());\n            wm.putString(\"uniqueId\", obj.getUniqueId());\n            wm.putString(\"creativeType\", getCreativeType(obj.getCreativeType()));\n            wm.putArray(\"dislikeAdReasons\",\n                mapList(obj.getDislikeAdReasons(), ReactUtils::getWritableMapFromDislikeAdReason));\n            wm.putString(\"title\", obj.getTitle());\n            wm.putMap(\"videoOperator\", getWritableMapFromVideoOperator(obj.getVideoOperator()));\n            wm.putBoolean(\"isCustomClickAllowed\", obj.isCustomClickAllowed());\n            wm.putBoolean(\"isCustomDislikeThisAdEnabled\", obj.isCustomDislikeThisAdEnabled());\n            wm.putBoolean(\"hasAdvertiserInfo\", obj.hasAdvertiserInfo());\n            wm.putInt(\"interactionType\", obj.getInteractionType());\n            if (obj.hasAdvertiserInfo()) {\n                wm.putArray(\"advertiserInfo\", getWritableArrayAdvertiserInfo(obj.getAdvertiserInfo()));\n            }\n            if (obj.getAppInfo() != null) {\n                wm.putString(\"appName\", obj.getAppInfo().getAppName());\n                wm.putString(\"developerName\", obj.getAppInfo().getDeveloperName());\n                wm.putString(\"versionName\", obj.getAppInfo().getVersionName());\n            }\n            if (obj.getPromoteInfo() != null) {\n                wm.putInt(\"promoteType\", obj.getPromoteInfo().getType());\n                wm.putString(\"promoteName\", obj.getPromoteInfo().getName());\n            }\n            wm.putBoolean(\"isTransparencyOpen\", obj.isTransparencyOpen());\n            wm.putString(\"transparencyTplUrl\", obj.getTransparencyTplUrl());\n            if(obj.getBiddingInfo() != null) {\n                wm.putDouble(\"price\", (double) obj.getBiddingInfo().getPrice());\n                wm.putString(\"cur\", obj.getBiddingInfo().getCur());\n                wm.putString(\"nurl\", obj.getBiddingInfo().getNurl());\n                wm.putString(\"lurl\", obj.getBiddingInfo().getNurl());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableArray getWritableArrayAdvertiserInfo(List<AdvertiserInfo> arry) {\n        WritableArray wa = new WritableNativeArray();\n        if (arry != null && arry.size() > 0) {\n            for (AdvertiserInfo item : arry) {\n                WritableMap wm = new WritableNativeMap();\n                wm.putInt(\"seq\", item.getSeq());\n                wm.putString(\"key\", item.getKey());\n                wm.putString(\"value\", item.getValue());\n                wa.pushMap(wm);\n            }\n        }\n        return wa;\n    }\n\n    public static WritableMap getWritableMapFromDislikeAdReason(DislikeAdReason obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"description\", obj.getDescription());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVideoOperator(VideoOperator obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putDouble(\"aspectRatio\", obj.getAspectRatio());\n            wm.putBoolean(\"hasVideo\", obj.hasVideo());\n            wm.putBoolean(\"isCustomizeOperateEnabled\", obj.isCustomizeOperateEnabled());\n            wm.putBoolean(\"isClickToFullScreenEnabled\", obj.isClickToFullScreenEnabled());\n            wm.putBoolean(\"isMuted\", obj.isMuted());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdProvider(AdProvider obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"id\", obj.getId());\n            wm.putString(\"name\", obj.getName());\n            wm.putString(\"privacyPolicyUrl\", obj.getPrivacyPolicyUrl());\n            wm.putString(\"serviceArea\", obj.getServiceArea());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdSize(AdSize obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromBannerAdSizeWithContext(BannerAdSize obj, Context context) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n            wm.putInt(\"heightPx\", obj.getHeightPx(context));\n            wm.putInt(\"widthPx\", obj.getWidthPx(context));\n            wm.putBoolean(\"isAutoHeightSize\", obj.isAutoHeightSize());\n            wm.putBoolean(\"isDynamicSize\", obj.isDynamicSize());\n            wm.putBoolean(\"isFullWidthSize\", obj.isFullWidthSize());\n        }\n        return wm;\n    }\n\n    public static BannerAdSize getBannerAdSizeFromReadableMap(Context context, String bannerAdSize) {\n        if (bannerAdSize == null || context == null) {\n            return BannerAdSize.BANNER_SIZE_SMART;\n        }\n\n        switch (HMSAdsPrimeBannerView.BannerSize.forValue(bannerAdSize)) {\n            case B_DYNAMIC:\n                return BannerAdSize.BANNER_SIZE_DYNAMIC;\n            case B_INVALID:\n                return BannerAdSize.BANNER_SIZE_INVALID;\n            case B_300_250:\n                return BannerAdSize.BANNER_SIZE_300_250;\n            case B_320_50:\n                return BannerAdSize.BANNER_SIZE_320_50;\n            case B_320_100:\n                return BannerAdSize.BANNER_SIZE_320_100;\n            case B_360_57:\n                return BannerAdSize.BANNER_SIZE_360_57;\n            case B_360_144:\n                return BannerAdSize.BANNER_SIZE_360_144;\n            default:\n                break;\n        }\n\n        return BannerAdSize.BANNER_SIZE_SMART;\n    }\n\n    public static AdSize getAdSizeFromReadableMap(ReadableMap rm) {\n        if (rm != null && ReactUtils.hasValidKey(rm, \"height\", ReadableType.Number) && ReactUtils.hasValidKey(rm,\n            \"width\", ReadableType.Number)) {\n            return new AdSize(rm.getInt(\"height\"), rm.getInt(\"width\"));\n        }\n        return new AdSize(0, 0);\n    }\n\n    public static WritableMap getWritableMapFromVideoConfiguration(VideoConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"audioFocusType\", obj.getAudioFocusType());\n            wm.putBoolean(\"isCustomizeOperateRequested\", obj.isCustomizeOperateRequested());\n            wm.putBoolean(\"isClickToFullScreenRequested\", obj.isClickToFullScreenRequested());\n            wm.putBoolean(\"isStartMuted\", obj.isStartMuted());\n            wm.putInt(\"autoPlayNetWork\", obj.getAutoPlayNetwork());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAdConfiguration(NativeAdConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"adSize\", getWritableMapFromAdSize(obj.getAdSize()));\n            wm.putInt(\"choicesPosition\", obj.getChoicesPosition());\n            wm.putInt(\"mediaDirection\", obj.getMediaDirection());\n            wm.putInt(\"mediaAspect\", obj.getMediaAspect());\n            wm.putMap(\"videoConfiguration\", getWritableMapFromVideoConfiguration(obj.getVideoConfiguration()));\n            wm.putBoolean(\"isRequestMultiImages\", obj.isRequestMultiImages());\n            wm.putBoolean(\"isReturnUrlsForImages\", obj.isReturnUrlsForImages());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromNativeAdLoader(NativeAdLoader obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putBoolean(\"isLoading\", obj.isLoading());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdvertisingIdClientInfo(AdvertisingIdClient.Info obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"id\", obj.getId());\n            wm.putBoolean(\"isLimitAdTrackingEnabled\", obj.isLimitAdTrackingEnabled());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromReferrerDetails(ReferrerDetails obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putString(\"installReferrer\", obj.getInstallReferrer());\n            wm.putString(\"installChannel\", obj.getInstallChannel());\n            wm.putDouble(\"installBeginTimestampMillisecond\", obj.getInstallBeginTimestampMillisecond());\n            wm.putDouble(\"installBeginTimestampSeconds\", obj.getInstallBeginTimestampSeconds());\n            wm.putDouble(\"referrerClickTimestampMillisecond\", obj.getReferrerClickTimestampMillisecond());\n            wm.putDouble(\"referrerClickTimestampSeconds\", obj.getReferrerClickTimestampSeconds());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromRequestOptions(RequestOptions requestOptions) {\n        WritableMap wm = new WritableNativeMap();\n        if (requestOptions != null) {\n            if (requestOptions.getAdContentClassification() != null) {\n                wm.putString(\"adContentClassification\", requestOptions.getAdContentClassification());\n            }\n            if (requestOptions.getAppCountry() != null) {\n                wm.putString(\"appCountry\", requestOptions.getAppCountry());\n            }\n            if (requestOptions.getAppLang() != null) {\n                wm.putString(\"appLang\", requestOptions.getAppLang());\n            }\n            if (requestOptions.getNonPersonalizedAd() != null) {\n                wm.putInt(\"nonPersonalizedAd\", requestOptions.getNonPersonalizedAd());\n            }\n            if (requestOptions.getTagForChildProtection() != null) {\n                wm.putInt(\"tagForChildProtection\", requestOptions.getTagForChildProtection());\n            }\n            if (requestOptions.getTagForUnderAgeOfPromise() != null) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", requestOptions.getTagForUnderAgeOfPromise());\n            }\n        }\n        return wm;\n    }\n\n    public static RequestOptions getRequestOptionsFromReadableMap(ReadableMap rm) {\n        RequestOptions.Builder requestOptions = new RequestOptions.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                requestOptions.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                requestOptions.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                requestOptions.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                requestOptions.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                requestOptions.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                requestOptions.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                requestOptions.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if(hasValidKey(rm,\"tMax\", ReadableType.Number)) {\n                requestOptions.setTMax(rm.getInt(\"tMax\"));\n            }\n            if(hasValidKey(rm, \"biddingParam\", ReadableType.Map) && hasValidKey(rm, \"slotId\", ReadableType.String)) {\n                requestOptions.addBiddingParamMap(rm.getString(\"slotId\"), fromReadableMapToBiddingParam(rm.getMap(\"biddingParam\")));\n            }\n            if(hasValidKey(rm, \"biddingParamMap\", ReadableType.Map)){\n                requestOptions.setBiddingParamMap(fromReadableMapToBiddingParamMap(rm.getMap(\"biddingParamMap\")));\n            }\n        }\n        return requestOptions.build();\n    }\n\n    public static AdParam getAdParamFromReadableMap(ReadableMap rm) {\n        AdParam.Builder obj = new AdParam.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                obj.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"belongCountryCode\", ReadableType.String)) {\n                obj.setBelongCountryCode(rm.getString(\"belongCountryCode\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                obj.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"gender\", ReadableType.Number)) {\n                obj.setGender(rm.getInt(\"gender\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                obj.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                obj.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"requestOrigin\", ReadableType.String)) {\n                obj.setRequestOrigin(rm.getString(\"requestOrigin\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                obj.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                obj.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"targetingContentUrl\", ReadableType.String)) {\n                obj.setTargetingContentUrl(rm.getString(\"targetingContentUrl\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                obj.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if (hasValidKey(rm, \"detailedCreativeTypes\", ReadableType.Array)) {\n                obj.setDetailedCreativeTypeList(fromReadableArrayToListInteger(rm.getArray(\"detailedCreativeTypes\")));\n            }\n            if (hasValidKey(rm, \"contentBundle\", ReadableType.String)) {\n                obj.setContentBundle(rm.getString(\"contentBundle\"));\n            }\n            if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n                obj.setLocation(fromReadableMapToLocation(rm.getMap(\"location\")));\n            }\n            if(hasValidKey(rm,\"tMax\", ReadableType.Number)) {\n                obj.setTMax(rm.getInt(\"tMax\"));\n            }\n            if(hasValidKey(rm, \"biddingParam\", ReadableType.Map) && hasValidKey(rm, \"slotId\", ReadableType.String)) {\n                obj.addBiddingParamMap(rm.getString(\"slotId\"), fromReadableMapToBiddingParam(rm.getMap(\"biddingParam\")));\n            }\n            if(hasValidKey(rm, \"biddingParamMap\", ReadableType.Map)){\n                obj.setBiddingParamMap(fromReadableMapToBiddingParamMap(rm.getMap(\"biddingParamMap\")));\n            }\n        }\n        return obj.build();\n    }\n\n    public static WritableMap getWritableMapFromAdParamBundle(Bundle obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            if (obj.containsKey(\"adContentClassification\")) {\n                wm.putString(\"adContentClassification\", obj.getString(\"adContentClassification\"));\n            }\n            if (obj.containsKey(\"appCountry\")) {\n                wm.putString(\"appCountry\", obj.getString(\"appCountry\"));\n            }\n            if (obj.containsKey(\"appLang\")) {\n                wm.putString(\"appLang\", obj.getString(\"appLang\"));\n            }\n            if (obj.containsKey(\"belongCountryCode\")) {\n                wm.putString(\"belongCountryCode\", obj.getString(\"belongCountryCode\"));\n            }\n            if (obj.containsKey(\"gender\")) {\n                wm.putInt(\"gender\", obj.getInt(\"gender\"));\n            }\n            if (obj.containsKey(\"nonPersonalizedAd\")) {\n                wm.putInt(\"nonPersonalizedAd\", obj.getInt(\"nonPersonalizedAd\"));\n            }\n            if (obj.containsKey(\"requestOrigin\")) {\n                wm.putString(\"requestOrigin\", obj.getString(\"requestOrigin\"));\n            }\n            if (obj.containsKey(\"tagForChildProtection\")) {\n                wm.putInt(\"tagForChildProtection\", obj.getInt(\"tagForChildProtection\"));\n            }\n            if (obj.containsKey(\"tagForUnderAgeOfPromise\")) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", obj.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (obj.containsKey(\"targetingContentUrl\")) {\n                wm.putString(\"targetingContentUrl\", obj.getString(\"targetingContentUrl\"));\n            }\n        }\n        return wm;\n    }\n\n    public static VastSdkConfiguration getVastSdkConfigurationFromReadableMap(ReadableMap rm) {\n        VastSdkConfiguration vastSdkConfiguration = SdkFactory.getConfiguration();\n        if (rm != null) {\n            if (hasValidKey(rm, \"httpCallTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpCallTimeoutMs(rm.getInt(\"httpCallTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"httpConnectTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpConnectTimeoutMs(rm.getInt(\"httpConnectTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"httpKeepAliveDurationMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpKeepAliveDurationMs(rm.getInt(\"httpKeepAliveDurationMs\"));\n            }\n            if (hasValidKey(rm, \"httpReadTimeoutMs\", ReadableType.Number)) {\n                vastSdkConfiguration.setHttpReadTimeoutMs(rm.getInt(\"httpReadTimeoutMs\"));\n            }\n            if (hasValidKey(rm, \"maxHttpConnections\", ReadableType.Number)) {\n                vastSdkConfiguration.setMaxHttpConnections(rm.getInt(\"maxHttpConnections\"));\n            }\n            if (hasValidKey(rm, \"maxRedirectWrapperLimit\", ReadableType.Number)) {\n                vastSdkConfiguration.setMaxRedirectWrapperLimit(rm.getInt(\"maxRedirectWrapperLimit\"));\n            }\n            if (hasValidKey(rm, \"isTest\", ReadableType.Boolean)) {\n                vastSdkConfiguration.setTest(rm.getBoolean(\"isTest\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryBatchSize\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryBatchSize(rm.getInt(\"vastEventRetryBatchSize\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryIntervalSeconds\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryIntervalSeconds(rm.getInt(\"vastEventRetryIntervalSeconds\"));\n            }\n            if (hasValidKey(rm, \"vastEventRetryUploadTimes\", ReadableType.Number)) {\n                vastSdkConfiguration.setVastEventRetryUploadTimes(rm.getInt(\"vastEventRetryUploadTimes\"));\n            }\n        }\n        return vastSdkConfiguration;\n    }\n\n    public static WritableMap getWritableMapFromVastSdkConfiguration(VastSdkConfiguration obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"httpCallTimeoutMs\", obj.getHttpCallTimeoutMs());\n            wm.putInt(\"httpConnectTimeoutMs\", obj.getHttpConnectTimeoutMs());\n            wm.putInt(\"httpKeepAliveDurationMs\", obj.getHttpKeepAliveDurationMs());\n            wm.putInt(\"httpReadTimeoutMs\", obj.getHttpReadTimeoutMs());\n            wm.putInt(\"maxHttpConnections\", obj.getMaxHttpConnections());\n            wm.putInt(\"maxRedirectWrapperLimit\", obj.getMaxRedirectWrapperLimit());\n            wm.putInt(\"vastEventRetryBatchSize\", obj.getVastEventRetryBatchSize());\n            wm.putInt(\"vastEventRetryIntervalSeconds\", obj.getVastEventRetryIntervalSeconds());\n            wm.putInt(\"vastEventRetryUploadTimes\", obj.getVastEventRetryUploadTimes());\n            wm.putBoolean(\"isTest\", obj.isTest());\n        }\n        return wm;\n    }\n\n    public static Location fromReadableMapToLocation(ReadableMap rm) {\n        Location location = new Location(\"\");\n\n        if (hasValidKey(rm, \"lat\", ReadableType.Number)) {\n            location.setLatitude(rm.getInt(\"lat\"));\n        }\n        if (hasValidKey(rm, \"lng\", ReadableType.Number)) {\n            location.setLatitude(rm.getInt(\"lng\"));\n        }\n\n        return location;\n    }\n\n    public static BiddingParam fromReadableMapToBiddingParam(ReadableMap rm) {\n        BiddingParam.Builder builder = new BiddingParam.Builder();\n        BiddingParam biddingParam;\n\n        if(hasValidKey(rm,\"bidFloor\", ReadableType.Number)){\n            builder.setBidFloor((float) rm.getDouble(\"bidFloor\"));\n        }\n        if(hasValidKey(rm, \"bidFloorCur\", ReadableType.String)){\n            builder.setBidFloorCur(rm.getString(\"bidFloorCur\"));\n        }\n        if(hasValidKey(rm, \"bpkgName\", ReadableType.Array)){\n            List<String> bpkgNameList = new ArrayList<>();\n\n            for(int i=0; i< Objects.requireNonNull(rm.getArray(\"bpkgName\")).size(); i++){\n                bpkgNameList.add(Objects.requireNonNull(rm.getArray(\"bpkgName\")).getString(i));\n            }\n\n            builder.setBpkgName(bpkgNameList);\n        }\n\n        biddingParam = builder.build();\n\n        return biddingParam;\n    }\n\n    public static Map<String, BiddingParam> fromReadableMapToBiddingParamMap(ReadableMap rm){\n        Map<String, BiddingParam> biddingParamMap = new HashMap<>();\n\n        ReadableMapKeySetIterator iterator = rm.keySetIterator();\n        while(iterator.hasNextKey()){\n            String key = iterator.nextKey();\n            ReadableMap paramMap = rm.getMap(key);\n\n            BiddingParam.Builder builder = new BiddingParam.Builder();\n\n            if(hasValidKey(rm,\"bidFloor\", ReadableType.Number)){\n                builder.setBidFloor((float) rm.getDouble(\"bidFloor\"));\n            }\n            if(hasValidKey(rm, \"bidFloorCur\", ReadableType.String)){\n                builder.setBidFloorCur(rm.getString(\"bidFloorCur\"));\n            }\n            if(hasValidKey(rm, \"bpkgName\", ReadableType.Array)){\n                List<String> bpkgNameList = new ArrayList<>();\n\n                for(int i=0; i< Objects.requireNonNull(rm.getArray(\"bpkgName\")).size(); i++){\n                    bpkgNameList.add(Objects.requireNonNull(rm.getArray(\"bpkgName\")).getString(i));\n                }\n\n                builder.setBpkgName(bpkgNameList);\n            }\n\n            BiddingParam biddingParam = builder.build();\n            biddingParamMap.put(key,biddingParam);\n        }\n        return biddingParamMap;\n    }\n\n    public static List<Integer> fromReadableArrayToListInteger(ReadableArray arr) {\n        List<Integer> detailedCreativeTypeList = new ArrayList<>();\n\n        if (arr != null) {\n            for (int i = 0; i < arr.size(); i++) {\n                detailedCreativeTypeList.add(arr.getInt(i));\n            }\n        }\n        return detailedCreativeTypeList;\n    }\n\n    public static Map<String, Object> getExportedCustomDirectEventTypeConstantsFromEvents(NamedEvent[] eventList) {\n        Map<String, Object> obj = new ArrayMap<>();\n        for (NamedEvent event : eventList) {\n            obj.put(event.getName(), MapBuilder.of(\"registrationName\", event.getName()));\n        }\n        return obj;\n    }\n\n    public static Map<String, Integer> getCommandsMap(NamedCommand[] commandList) {\n        Map<String, Integer> obj = new ArrayMap<>();\n        for (int i = 0; i < commandList.length; i++) {\n            obj.put(commandList[i].getName(), i);\n        }\n        return obj;\n    }\n\n    public static Bundle getBundleFromReadableMap(ReadableMap rm) {\n        Bundle obj = new Bundle();\n        if (rm != null) {\n            obj.putSerializable(\"data\", rm.toHashMap());\n        }\n        return obj;\n    }\n\n    public static com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions getVastRequestOptionsFromReadableMap(\n        ReadableMap rm) {\n        com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions.Builder vastRequestOptions\n            = new com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions.Builder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adContentClassification\", ReadableType.String)) {\n                vastRequestOptions.setAdContentClassification(rm.getString(\"adContentClassification\"));\n            }\n            if (hasValidKey(rm, \"appCountry\", ReadableType.String)) {\n                vastRequestOptions.setAppCountry(rm.getString(\"appCountry\"));\n            }\n            if (hasValidKey(rm, \"appLang\", ReadableType.String)) {\n                vastRequestOptions.setAppLang(rm.getString(\"appLang\"));\n            }\n            if (hasValidKey(rm, \"nonPersonalizedAd\", ReadableType.Number)) {\n                vastRequestOptions.setNonPersonalizedAd(rm.getInt(\"nonPersonalizedAd\"));\n            }\n            if (hasValidKey(rm, \"tagForChildProtection\", ReadableType.Number)) {\n                vastRequestOptions.setTagForChildProtection(rm.getInt(\"tagForChildProtection\"));\n            }\n            if (hasValidKey(rm, \"tagForUnderAgeOfPromise\", ReadableType.Number)) {\n                vastRequestOptions.setTagForUnderAgeOfPromise(rm.getInt(\"tagForUnderAgeOfPromise\"));\n            }\n            if (hasValidKey(rm, \"requestLocation\", ReadableType.Boolean)) {\n                vastRequestOptions.setRequestLocation(rm.getBoolean(\"requestLocation\"));\n            }\n            if (hasValidKey(rm, \"consent\", ReadableType.String)) {\n                vastRequestOptions.setConsent(rm.getString(\"consent\"));\n            }\n        }\n        return vastRequestOptions.build();\n    }\n\n    public static PlayerConfig getPlayerConfigsFromReadableMap(ReadableMap rm) {\n        PlayerConfig.Builder obj = PlayerConfig.newBuilder();\n        if (rm != null) {\n            if (hasValidKey(rm, \"enableRotation\", ReadableType.Boolean)) {\n                obj.setEnableRotation(rm.getBoolean(\"enableRotation\"));\n            }\n            if (hasValidKey(rm, \"isEnableCutout\", ReadableType.Boolean)) {\n                obj.setIsEnableCutout(rm.getBoolean(\"isEnableCutout\"));\n            }\n            if (hasValidKey(rm, \"skipLinearAd\", ReadableType.Boolean)) {\n                obj.setSkipLinearAd(rm.getBoolean(\"skipLinearAd\"));\n            }\n            if (hasValidKey(rm, \"isEnablePortrait\", ReadableType.Boolean)) {\n                obj.setIsEnablePortrait(rm.getBoolean(\"isEnablePortrait\"));\n            }\n        }\n        return obj.build();\n    }\n\n    public static CreativeMatchStrategy.CreativeMatchType toCreativeMatchType(int creativeMatchType) {\n        switch (HMSAdsPrimeVastView.CreativeMatchType.forValue(creativeMatchType)) {\n            case EXACT:\n                return CreativeMatchStrategy.CreativeMatchType.EXACT;\n            case SMART:\n                return CreativeMatchStrategy.CreativeMatchType.SMART;\n            case UNKNOWN:\n                return CreativeMatchStrategy.CreativeMatchType.UNKNOWN;\n            case LANDSCAPE:\n                return CreativeMatchStrategy.CreativeMatchType.LANDSCAPE;\n            case PORTRAIT:\n                return CreativeMatchStrategy.CreativeMatchType.PORTRAIT;\n            default:\n                break;\n        }\n        return CreativeMatchStrategy.CreativeMatchType.ANY;\n    }\n\n    public static LinearAdSlot getLinearAdSlotFromReadableMap(ReadableMap rm) {\n        LinearAdSlot linearAdSlot = new LinearAdSlot();\n        if (rm != null) {\n            if (hasValidKey(rm, \"adId\", ReadableType.String)) {\n                linearAdSlot.setSlotId(rm.getString(\"adId\"));\n            }\n            if (hasValidKey(rm, \"totalDuration\", ReadableType.Number)) {\n                linearAdSlot.setTotalDuration(rm.getInt(\"totalDuration\"));\n            }\n            if (hasValidKey(rm, \"allowMobileTraffic\", ReadableType.Boolean)) {\n                linearAdSlot.setAllowMobileTraffic(rm.getBoolean(\"allowMobileTraffic\"));\n            }\n            if (hasValidKey(rm, \"adOrientation\", ReadableType.Number)) {\n                linearAdSlot.setOrientation(rm.getInt(\"adOrientation\"));\n            }\n            if (hasValidKey(rm, \"creativeMatchStrategy\", ReadableType.Number)) {\n                CreativeMatchStrategy creativeMatchStrategy = new CreativeMatchStrategy(\n                    toCreativeMatchType(rm.getInt(\"creativeMatchStrategy\")));\n                linearAdSlot.setCreativeMatchStrategy(creativeMatchStrategy);\n            }\n            if (hasValidKey(rm, \"requestOption\", ReadableType.Map)) {\n                linearAdSlot.setRequestOptions(getVastRequestOptionsFromReadableMap(rm.getMap(\"requestOption\")));\n            }\n            if (hasValidKey(rm, \"size\", ReadableType.Map)) {\n                linearAdSlot.setSize(Objects.requireNonNull(rm.getMap(\"size\")).getInt(\"width\"),\n                    Objects.requireNonNull(rm.getMap(\"size\")).getInt(\"height\"));\n            }\n            if (hasValidKey(rm, \"maxAdPods\", ReadableType.Number)) {\n                linearAdSlot.setMaxAdPods(rm.getInt(\"maxAdPods\"));\n            }\n        }\n        return linearAdSlot;\n    }\n\n    public static WritableMap getWritableMapFromPlayerConfig(PlayerConfig obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putBoolean(\"isEnableRotation\", obj.isEnableRotation());\n            wm.putBoolean(\"isSkipLinearAd\", obj.isSkipLinearAd());\n            wm.putBoolean(\"isEnableCutout\", obj.isEnableCutout());\n            wm.putBoolean(\"isEnablePortrait\", obj.isEnablePortrait());\n            wm.putBoolean(\"isForceMute\", obj.isForceMute());\n            wm.putBoolean(\"isIndustryIconShow\", obj.isIndustryIconShow());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastAdPlayerConfigs(ReactContext mReactContext) {\n        VastAdPlayer vastAdPlayer = VastAdPlayer.getInstance();\n        WritableMap wm = new WritableNativeMap();\n        if (mReactContext != null) {\n            wm.putMap(\"playerConfigs\", getWritableMapFromPlayerConfig(vastAdPlayer.getConfig()));\n            wm.putBoolean(\"isLinearAdShown\", vastAdPlayer.isLinearAdShown());\n            wm.putBoolean(\"isLinearPlaying\", vastAdPlayer.isLinearPlaying());\n            wm.putBoolean(\"isNonlinearPlaying\", vastAdPlayer.isNonlinearPlaying());\n            wm.putBoolean(\"onBackPressed\", vastAdPlayer.onBackPressed(mReactContext.getCurrentActivity()));\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCreativeMatchTStrategy(CreativeMatchStrategy obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putInt(\"creativeMatchType\", obj.getCreativeMatchType().getCode());\n\n            if (obj.expectedCreativeHeight != null) {\n                wm.putInt(\"height\", obj.expectedCreativeHeight);\n            }\n            if (obj.expectedCreativeWidth != null) {\n                wm.putInt(\"height\", obj.expectedCreativeWidth);\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromLinearAdSlot(LinearAdSlot obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"creativeMatchStrategy\",\n                getWritableMapFromCreativeMatchTStrategy(obj.getCreativeMatchStrategy()));\n            wm.putInt(\"height\", obj.getHeight());\n            wm.putInt(\"width\", obj.getWidth());\n            wm.putInt(\"maxAdPods\", obj.getMaxAdPods());\n            wm.putInt(\"orientation\", obj.getOrientation());\n            wm.putMap(\"requestOptions\", getWritableMapFromVastRequestOptions(obj.getRequestOptions()));\n            wm.putInt(\"totalDuration\", obj.getTotalDuration());\n            wm.putBoolean(\"isAllowMobileTraffic\", obj.isAllowMobileTraffic());\n            if (obj.getSlotId() != null) {\n                wm.putString(\"slotId\", obj.getSlotId());\n            }\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVastRequestOptions(\n        com.huawei.hms.ads.vast.openalliance.ad.beans.parameter.RequestOptions vastRequestOptions) {\n        WritableMap wm = new WritableNativeMap();\n        if (vastRequestOptions != null) {\n            if (vastRequestOptions.getAdContentClassification() != null) {\n                wm.putString(\"adContentClassification\", vastRequestOptions.getAdContentClassification());\n            }\n            if (vastRequestOptions.getAppCountry() != null) {\n                wm.putString(\"appCountry\", vastRequestOptions.getAppCountry());\n            }\n            if (vastRequestOptions.getAppLang() != null) {\n                wm.putString(\"appLang\", vastRequestOptions.getAppLang());\n            }\n            if (vastRequestOptions.getConsent() != null) {\n                wm.putString(\"consent\", vastRequestOptions.getConsent());\n            }\n            if (vastRequestOptions.getNonPersonalizedAd() != null) {\n                wm.putInt(\"nonPersonalizedAd\", vastRequestOptions.getNonPersonalizedAd());\n            }\n            if (vastRequestOptions.getTagForChildProtection() != null) {\n                wm.putInt(\"tagForChildProtection\", vastRequestOptions.getTagForChildProtection());\n            }\n            if (vastRequestOptions.getTagForUnderAgeOfPromise() != null) {\n                wm.putInt(\"tagForUnderAgeOfPromise\", vastRequestOptions.getTagForUnderAgeOfPromise());\n            }\n            wm.putBoolean(\"isRequestLocation\", vastRequestOptions.isRequestLocation());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromAdsData(AdsData obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putArray(\"linearAdCreatives\",\n                mapList(obj.getLinearCreations(), ReactUtils::getWritableMapFromLinearCreative));\n            wm.putArray(\"backupAdCreatives\",\n                mapList(obj.getBackUpCreation(), ReactUtils::getWritableMapFromLinearCreative));\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromLinearCreative(LinearCreative obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj != null) {\n            wm.putMap(\"adExtensions\", getWritableMapFromCreativeExtensionMap(obj.getAdExtensionMap()));\n            wm.putMap(\"typeToCreativeExtensions\",\n                getWritableMapFromCreativeExtensionMap(obj.getTypeToCreativeExtension()));\n            wm.putString(\"contentId\", obj.getContentId());\n            wm.putString(\"requestId\", obj.getRequestId());\n            wm.putString(\"showId\", obj.getShowId());\n            wm.putString(\"slotId\", obj.getSlotId());\n            wm.putString(\"type\", obj.getType());\n            wm.putString(\"url\", obj.getUrl());\n        }\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCreativeExtensionMap(Map<String, CreativeExtension> map) {\n        WritableMap wm = new WritableNativeMap();\n        Iterator<Map.Entry<String, CreativeExtension>> it = map.entrySet().iterator();\n        while (it.hasNext()) {\n            Map.Entry<String, CreativeExtension> pair = it.next();\n            wm.putString(pair.getKey(), pair.getValue().getValue());\n        }\n        return wm;\n    }\n}"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/java/com/huawei/hms/rn/ads/utils/ResourceUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.utils;\n\nimport androidx.annotation.NonNull;\n\nimport android.content.Context;\nimport android.util.Log;\n\npublic class ResourceUtils {\n    private static final String TAG = ResourceUtils.class.getSimpleName();\n\n    public static int getStringResourceIdFromContext(@NonNull Context context, String resName) {\n        final int stringRes = context.getResources().getIdentifier(resName, \"string\", context.getPackageName());\n        if (stringRes == 0) {\n            Log.e(TAG, \"The 'R.string.\" + resName + \" value it's not defined in your project's resources file.\");\n        }\n        return stringRes;\n    }\n\n    public static int getLogoResourceIdFromContext(@NonNull Context context, String resName) {\n        final int mipmapResId = context.getResources().getIdentifier(resName, \"mipmap\", context.getPackageName());\n        final int drawableResId = context.getResources().getIdentifier(resName, \"drawable\", context.getPackageName());\n        if (mipmapResId == 0 && drawableResId == 0) {\n            Log.e(TAG, \"The 'R.mipmap.\" + resName + \" or 'R.drawable.\" + resName + \" it's not defined in your \" +\n                    \"project's resources file.\");\n        }\n        return mipmapResId != 0 ? mipmapResId : drawableResId;\n    }\n\n    public static int getLayoutResourceIdFromContext(@NonNull Context context, String resName) {\n        final int layoutResId = context.getResources().getIdentifier(resName, \"layout\", context.getPackageName());\n        if (layoutResId == 0) {\n            Log.e(TAG, \"The 'R.layout.\" + resName + \" value it's not defined in your project's resources file.\");\n        }\n        return layoutResId;\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/drawable/native_button_rounded_corners_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#CCCCCC\" />\n\n    <padding\n        android:bottom=\"1dp\"\n        android:left=\"1dp\"\n        android:right=\"1dp\"\n        android:top=\"1dp\" />\n\n    <corners\n        android:bottomLeftRadius=\"20dp\"\n        android:bottomRightRadius=\"20dp\"\n        android:topLeftRadius=\"20dp\"\n        android:topRightRadius=\"20dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/drawable/native_flag_rounded_corners_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#CCCCCC\" />\n\n    <padding\n        android:bottom=\"1dp\"\n        android:left=\"1dp\"\n        android:right=\"1dp\"\n        android:top=\"1dp\" />\n\n    <corners\n        android:bottomLeftRadius=\"2dp\"\n        android:bottomRightRadius=\"2dp\"\n        android:topLeftRadius=\"2dp\"\n        android:topRightRadius=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/activity_splash.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <RelativeLayout\n        android:id=\"@+id/logo\"\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"100dp\"\n        android:layout_alignParentBottom=\"true\"\n        android:background=\"@android:color/white\"\n        android:visibility=\"visible\">\n\n        <LinearLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentBottom=\"true\"\n            android:layout_centerHorizontal=\"true\"\n            android:layout_marginBottom=\"39dp\"\n            android:orientation=\"vertical\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:layout_marginBottom=\"6dp\"\n                android:gravity=\"center\"\n                android:orientation=\"horizontal\">\n\n                <ImageView\n                    android:id=\"@+id/image_logo\"\n                    android:layout_width=\"28dp\"\n                    android:layout_height=\"28dp\"\n                    android:background=\"@drawable/ic_launcher\" />\n\n                <View\n                    android:layout_width=\"0.5dp\"\n                    android:layout_height=\"18dp\"\n                    android:layout_marginLeft=\"12dp\"\n                    android:layout_marginRight=\"12dp\"\n                    android:alpha=\"0.1\"\n                    android:background=\"#000000\" />\n\n                <TextView\n                    android:id=\"@+id/text_logo\"\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:alpha=\"1\"\n                    android:textColor=\"#000000\"\n                    android:textSize=\"16sp\" />\n            </LinearLayout>\n\n            <TextView\n                android:id=\"@+id/text_copyright\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:alpha=\"0.5\"\n                android:textColor=\"#000000\"\n                android:textSize=\"8sp\" />\n        </LinearLayout>\n    </RelativeLayout>\n\n    <com.huawei.hms.ads.splash.SplashView\n        android:id=\"@+id/splash_ad_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_above=\"@id/logo\" />\n\n</RelativeLayout>\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/activity_video_player.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/cl_content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <Button\n        android:id=\"@+id/demo_bt_play\"\n        android:layout_width=\"60dp\"\n        android:layout_height=\"60dp\"\n        android:background=\"@android:color/holo_red_dark\"\n        android:text=\"@string/demo_bt_play_video\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_alignParentBottom=\"true\" />\n\n    <CheckBox\n        android:id=\"@+id/demo_bt_voice\"\n        android:layout_width=\"60dp\"\n        android:layout_height=\"60dp\"\n        android:background=\"@android:color/holo_green_dark\"\n        android:layout_marginStart=\"20dp\"\n        android:text=\"@string/demo_custom_view_voice\"\n        android:gravity=\"center\"\n        android:button=\"@null\"\n        android:layout_alignParentBottom=\"true\"\n        android:layout_toEndOf=\"@id/demo_bt_play\" />\n\n    <Button\n        android:id=\"@+id/demo_bt_detail\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"40dp\"\n        android:text=\"@string/demo_custom_ad_detail\"\n        android:background=\"@android:color/holo_blue_dark\"\n        android:layout_marginEnd=\"20dp\"\n        android:layout_alignBottom=\"@id/demo_bt_full_screen\"\n        android:layout_alignTop=\"@id/demo_bt_full_screen\"\n        android:layout_alignEnd=\"@id/demo_bt_full_screen\" />\n\n    <Button\n        android:id=\"@+id/demo_bt_full_screen\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"60dp\"\n        android:text=\"@string/demo_custom_full_screen\"\n        android:background=\"@android:color/darker_gray\"\n        android:layout_alignParentTop=\"true\"\n        android:layout_alignParentEnd=\"true\" />\n</RelativeLayout>"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/button_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <Button\n        android:id=\"@+id/ad_call_to_actionx\"\n        android:layout_width=\"72dp\"\n        android:layout_height=\"26dp\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_marginTop=\"23dp\"\n        android:layout_marginEnd=\"52dp\"\n        android:layout_marginBottom=\"23dp\"\n        android:background=\"@drawable/native_button_rounded_corners_shape\"\n        android:textColor=\"#FFFFFF\"\n        android:textSize=\"10sp\" />\n</LinearLayout>\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/media_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:id=\"@+id/media_view_container\">\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"center_vertical\">\n\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/media_view_id\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_gravity=\"center_horizontal\"\n            android:layout_marginStart=\"0dp\"\n            android:layout_marginTop=\"0dp\"\n            android:layout_marginEnd=\"0dp\"\n            android:layout_marginBottom=\"0dp\" />\n\n    </RelativeLayout>\n</LinearLayout>\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/native_small_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.ads.nativead.NativeView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/native_small_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_centerInParent=\"true\"\n    android:background=\"#FFFFFF\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:id=\"@+id/background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentTop=\"true\"\n        android:orientation=\"vertical\">\n\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/ad_media\"\n            android:layout_width=\"89dp\"\n            android:layout_height=\"60dp\"\n            android:layout_marginStart=\"8dp\"\n            android:layout_marginTop=\"12dp\"\n            android:layout_marginBottom=\"12dp\"\n            android:background=\"#8BC34A\" />\n\n        <RelativeLayout\n            android:id=\"@+id/center_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginStart=\"107dp\"\n            android:layout_marginTop=\"8dp\"\n            android:layout_marginEnd=\"16dp\"\n            android:layout_marginBottom=\"8dp\"\n            android:background=\"#FFFFFF\">\n\n            <TextView\n                android:id=\"@+id/ad_title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"28dp\"\n                android:layout_marginBottom=\"16dp\"\n                android:alpha=\"1\"\n                android:textColor=\"#000000\"\n                android:textSize=\"@dimen/hiad_text_13_sp\" />\n\n            <TextView\n                android:id=\"@+id/ad_source\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"14dp\"\n                android:layout_marginTop=\"36dp\"\n                android:alpha=\"0.6\"\n                android:maxWidth=\"132dp\"\n                android:textColor=\"#666666\"\n                android:textSize=\"@dimen/hiad_text_9_sp\" />\n\n            <TextView\n                android:id=\"@+id/ad_flag\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"14dp\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"36dp\"\n                android:layout_toEndOf=\"@+id/ad_source\"\n                android:background=\"@drawable/native_flag_rounded_corners_shape\"\n                android:gravity=\"center\"\n                android:text=\"Ad\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"8sp\"\n                android:textStyle=\"bold\" />\n\n\n            <TextView\n                android:id=\"@+id/ad_description\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:ellipsize=\"end\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"30dp\"\n                android:layout_toEndOf=\"@+id/ad_flag\"\n                android:lines=\"2\"\n                android:text=\"Huawei Ad Description\"\n                android:textSize=\"10sp\"/>\n\n            <Button\n                android:id=\"@+id/ad_call_to_action\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_marginTop=\"20dp\"\n                android:paddingLeft=\"2dp\"\n                android:paddingRight=\"2dp\"\n                android:background=\"@drawable/native_button_rounded_corners_shape\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"6sp\" />\n        </RelativeLayout>\n    </RelativeLayout>\n</com.huawei.hms.ads.nativead.NativeView>\n\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/native_video_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.ads.nativead.NativeView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/native_video_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_centerInParent=\"true\"\n    android:background=\"#FFFFFF\"\n    android:orientation=\"vertical\">\n    <RelativeLayout\n        android:id=\"@+id/background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n        <com.huawei.hms.ads.nativead.MediaView\n            android:id=\"@+id/ad_media\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n        <RelativeLayout\n            android:id=\"@+id/left_bottom_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/ad_media\">\n            <TextView\n                android:id=\"@+id/ad_title\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginStart=\"24dp\"\n                android:layout_marginTop=\"16dp\"\n                android:alpha=\"1\"\n                android:textColor=\"#000000\"\n                android:textSize=\"@dimen/hiad_text_13_sp\" />\n            <TextView\n                android:id=\"@+id/ad_source\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"19dp\"\n                android:layout_below=\"@id/ad_title\"\n                android:layout_marginStart=\"24dp\"\n                android:layout_marginTop=\"2dp\"\n                android:alpha=\"0.6\"\n                android:maxWidth=\"158dp\"\n                android:textColor=\"#666666\"\n                android:textSize=\"@dimen/hiad_text_12_sp\" />\n            <TextView\n                android:id=\"@+id/ad_flag\"\n                android:layout_width=\"20dp\"\n                android:layout_height=\"14dp\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"40dp\"\n                android:layout_toEndOf=\"@+id/ad_source\"\n                android:background=\"@drawable/native_flag_rounded_corners_shape\"\n                android:gravity=\"center\"\n                android:text=\"Ad\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"8sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:id=\"@+id/ad_description\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:ellipsize=\"end\"\n                android:layout_marginStart=\"8dp\"\n                android:layout_marginTop=\"40dp\"\n                android:layout_toEndOf=\"@+id/ad_flag\"\n                android:lines=\"2\"\n                android:text=\"Huawei Ad Description\"\n                android:textSize=\"10sp\"/>\n        </RelativeLayout>\n        <RelativeLayout\n            android:id=\"@+id/right_bottom_view\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/ad_media\"\n            android:layout_alignParentEnd=\"true\">\n            <Button\n                android:id=\"@+id/ad_call_to_action\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_marginTop=\"23dp\"\n                android:layout_marginEnd=\"16dp\"\n                android:layout_marginBottom=\"23dp\"\n                android:background=\"@drawable/native_button_rounded_corners_shape\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"10sp\" />\n        </RelativeLayout>\n    </RelativeLayout>\n</com.huawei.hms.ads.nativead.NativeView>\n"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/layout/vast_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n<com.huawei.hms.rn.ads.HMSAdsPrimeVastView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <FrameLayout\n        android:id=\"@+id/fl_linear_ad\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"250dp\"\n        android:background=\"@android:color/black\"\n        android:visibility=\"gone\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_alignParentStart=\"true\"\n        android:layout_alignParentTop=\"true\" />\n\n    <ProgressBar\n        android:id=\"@+id/progress\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerInParent=\"true\"\n        android:visibility=\"gone\" />\n</com.huawei.hms.rn.ads.HMSAdsPrimeVastView>"
  },
  {
    "path": "react-native-hms-adsprime/android/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n  -->\n\n<resources>\n    <string name=\"demo_bt_play_video\">Play a video.</string>\n    <string name=\"demo_custom_view_voice\">Voice</string>\n    <string name=\"demo_custom_full_screen\">Full-screen</string>\n    <string name=\"demo_custom_ad_detail\">Ad details</string>\n</resources>"
  },
  {
    "path": "react-native-hms-adsprime/example/.gitattributes",
    "content": "*.pbxproj -text\n"
  },
  {
    "path": "react-native-hms-adsprime/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\nproject.xcworkspace\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\nandroid/.settings\n\n# BUCK\nbuck-out/\n\\.buckd/\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\nagconnect-services.json\n.settings\n.project\n.classpath\n*.tgz\n*.jks\n*.keystore\npackage-lock.json\nexample/android/gradle/wrapper/gradle-wrapper.jar\n"
  },
  {
    "path": "react-native-hms-adsprime/example/App.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport {\n  SafeAreaView,\n  StyleSheet,\n  ScrollView,\n  View,\n  Text,\n  StatusBar,\n  Button,\n  Modal,\n  BackHandler,\n  ToastAndroid,\n  LogBox,\n} from \"react-native\";\nimport {Picker} from \"@react-native-picker/picker\";\n\nimport { Colors } from \"react-native/Libraries/NewAppScreen\";\nimport HMSAdsPrime, {\n  HMSBanner,\n  HMSInstream,\n  HMSNative,\n  HMSVastView,\n  HMSVast,\n  HMSInterstitial,\n  HMSOaid,\n  HMSInstallReferrer,\n  HMSSplash,\n  HMSReward,\n} from \"@hmscore/react-native-hms-adsprime\";\n\nLogBox.ignoreLogs(['EventEmitter'])\n\nconst toast = (tag, message) => {\n  ToastAndroid.show(tag, ToastAndroid.SHORT);\n  message ? console.log(tag, message) : console.log(tag);\n};\n\nlet adBannerElement;\nlet adInstreamElement;\nlet adNativeElement;\nlet adVastElement;\n\nclass Banner extends React.Component {\n  constructor(props) {\n    super(props);\n    bannerAdIds = {};\n    bannerAdIds[HMSAdsPrime.BannerMediaTypes.IMAGE] = \"testw6vs28auh3\";\n    this.state = {\n      bannerAdSize: HMSAdsPrime.BannerAdSizes.B_320_100,\n      adId: bannerAdIds[HMSAdsPrime.BannerMediaTypes.IMAGE],\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select ad size\"\n            selectedValue={this.state.bannerAdSize}\n            onValueChange={(itemValue) => {\n              this.setState({\n                bannerAdSize: itemValue,\n              });\n            }}\n          >\n            {Object.values(HMSAdsPrime.BannerAdSizes).map((adSize) => (\n              <Picker.Item label={adSize} value={adSize} key={adSize} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement\n                  .getInfo()\n                  .then((res) => toast(\"HMSBanner, ref.getInfo\", res))\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Set Refresh\"\n            color=\"green\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.setRefresh(60);\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Resume\"\n            color=\"green\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.resume();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adBannerElement !== null) {\n                adBannerElement.destroy();\n              }\n            }}\n          />\n          <HMSBanner\n            style={{ height: 100 }}\n            bannerAdSize={this.state.bannerAdSize}\n            adId={this.state.adId}\n            adParam={{\n              adContentClassification:\n                HMSAdsPrime.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n              gender: HMSAdsPrime.Gender.UNKNOWN,\n              nonPersonalizedAd: HMSAdsPrime.NonPersonalizedAd.ALLOW_ALL,              \n              tagForChildProtection:\n                HMSAdsPrime.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n              tagForUnderAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,\n              location: {\n                lat: 15,\n                lng: 12\n              }\n            }}\n            onAdLoaded={(_) => toast(\"HMSBanner onAdLoaded\")}\n            onAdFailed={(e) => {\n              toast(\"HMSBanner onAdFailed\", e.nativeEvent);\n            }}\n            onAdOpened={(_) => toast(\"HMSBanner onAdOpened\")}\n            onAdClicked={(_) => toast(\"HMSBanner onAdClicked\")}\n            onAdClosed={(_) => toast(\"HMSBanner onAdClosed\")}\n            onAdImpression={(_) => toast(\"HMSBanner onAdImpression\")}\n            onAdLeave={(_) => toast(\"HMSBanner onAdLeave\")}\n            ref={(el) => {\n              adBannerElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Instream extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement\n                  .getInfo()\n                  .then((res) => {\n                    alert(JSON.stringify(res))\n                    toast(\"HMSInstream, ref.getInfo\", res)\n                  })\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            color=\"green\"\n            title=\"Register\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.register();\n              }\n            }}\n          />\n          <Button\n            title=\"Mute\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.mute();\n              }\n            }}\n          />\n          <Button\n            title=\"Unmute\"\n            color=\"purple\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.unmute();\n              }\n            }}\n          />\n          <Button\n            title=\"Stop\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.stop();\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Play\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.play();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.destroy();\n              }\n            }}\n          />\n          <Button\n            title=\"showAdvertiserInfoDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.showAdvertiserInfoDialog(true);\n              }\n            }}\n          />\n          <Button\n            title=\"hideAdvertiserInfoDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.hideAdvertiserInfoDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"showTransparencyDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.showTransparencyDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"hideTransParencyDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adInstreamElement !== null) {\n                adInstreamElement.hideTransparencyDialog();\n              }\n            }}\n          />\n          <HMSInstream\n            style={{ height: 189, width: 328 }}\n            adId=\"testy3cglm3pj0\"\n            maxCount={4}\n            totalDuration={60}\n            onClick={(_) => toast(\"HMSInstream onClick\")}\n            onMute={(_) => toast(\"HMSInstream onMute\")}\n            onUnmute={(_) => toast(\"HMSInstream onUnmute\")}\n            onAdLoaded={(_) => toast(\"HMSInstream onAdLoaded\")}\n            onAdFailed={(e) => toast(\"HMSInstream onAdFailed\", e.nativeEvent)}\n            onSegmentMediaChange={(e) =>\n              toast(\"HMSInstream onSegmentMediaChange\", e.nativeEvent)\n            }\n            onMediaProgress={(e) =>\n              console.log(\"HMSInstream onMediaProgress\", e.nativeEvent)\n            }\n            onMediaStart={(e) =>\n              toast(\"HMSInstream onMediaStart\", e.nativeEvent)\n            }\n            onMediaPause={(e) =>\n              toast(\"HMSInstream onMediaPause\", e.nativeEvent)\n            }\n            onMediaStop={(e) => toast(\"HMSInstream onMediaStop\", e.nativeEvent)}\n            onMediaCompletion={(e) =>\n              toast(\"HMSInstream onMediaCompletion\", e.nativeEvent)\n            }\n            onMediaError={(e) =>\n              toast(\"HMSInstream onMediaError\", e.nativeEvent)\n            }\n            ref={(el) => {\n              adInstreamElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Native extends React.Component {\n  constructor(props) {\n    super(props);\n    nativeAdIds = {};\n    nativeAdIds[HMSAdsPrime.NativeMediaTypes.VIDEO] = \"testy63txaom86\";\n    nativeAdIds[HMSAdsPrime.NativeMediaTypes.IMAGE_SMALL] = \"testb65czjivt9\";\n    nativeAdIds[HMSAdsPrime.NativeMediaTypes.IMAGE_LARGE] = \"testu7m3hc4gvm\";\n    this.state = {\n      displayForm: {\n        mediaType: HMSAdsPrime.NativeMediaTypes.VIDEO,\n        adId: nativeAdIds.video,\n      },\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select display form\"\n            selectedValue={this.state.displayForm.mediaType}\n            onValueChange={(itemValue) => {\n              this.setState({\n                displayForm: {\n                  mediaType: itemValue,\n                  adId: nativeAdIds[itemValue],\n                },\n              });\n            }}\n          >\n            {Object.values(HMSAdsPrime.NativeMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement\n                  .getInfo()\n                  .then((res) => {\n                    alert(JSON.stringify(res))\n                    toast(\"HMSNative, ref.getInfo\", res)\n                  })\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Dislike\"\n            color=\"orange\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.dislikeAd(\"Because I dont like it\");\n              }\n            }}\n          />\n          <Button\n            title=\"Go to Why Page\"\n            color=\"purple\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.gotoWhyThisAdPage();\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.destroy();\n              }\n            }}\n          />\n          <Button\n            title=\"Allow custom click\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.setAllowCustomClick();\n              }\n            }}\n          />\n          <Button\n            title=\"Record click event\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.recordClickEvent();\n              }\n            }}\n          />\n          <Button\n            title=\"Record impression\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.recordImpressionEvent({\n                  impressed: true,\n                  isUseful: \"nope\",\n                });\n              }\n            }}\n          />\n          <Button\n            title=\"showAdvertiserInfoDialog\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showAdvertiserInfoDialog(true);\n              }\n            }}\n          />\n          <Button\n            title=\"hideAdvertiserInfoDialog\"\n            color=\"red\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.hideAdvertiserInfoDialog();\n              }\n            }}\n          />\n          <Button\n            title=\"showPrivacyPolicy\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showPrivacyPolicy();\n              }\n            }}\n          />\n          <Button\n            title=\"showPermissionPage\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showPermissionPage();\n              }\n            }}\n          />\n           <Button\n            title=\"showAppDetailPage\"\n            color=\"green\"\n            onPress={() => {\n              if (adNativeElement !== null) {\n                adNativeElement.showAppDetailPage();\n              }\n            }}\n          />\n        </View>\n        <View>\n          <HMSNative\n            style={{ height: 322 }}\n            displayForm={this.state.displayForm}\n            adParam={{\n              adContentClassification:\n                HMSAdsPrime.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n              gender: HMSAdsPrime.Gender.UNKNOWN,\n              nonPersonalizedAd: HMSAdsPrime.NonPersonalizedAd.ALLOW_ALL,\n              tagForChildProtection:\n                HMSAdsPrime.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n              tagForUnderAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,\n              detailedCreativeTypes: [\n                HMSAdsPrime.DetailedCreativeTypes.BIG_IMG,\n                HMSAdsPrime.DetailedCreativeTypes.VIDEO,\n                HMSAdsPrime.DetailedCreativeTypes.SMALL_IMG,\n              ],\n            }}\n            nativeConfig={{\n              choicesPosition: HMSAdsPrime.ChoicesPosition.TOP_RIGHT,\n              mediaDirection: HMSAdsPrime.Direction.ANY,\n              videoConfiguration: {\n                audioFocusType: HMSAdsPrime.AudioFocusType.NOT_GAIN_AUDIO_FOCUS_ALL,\n                isStartMuted: true,\n                autoPlayNetWork: 0,\n              },\n            }}\n            viewOptions={{\n              showMediaContent: false,\n              mediaImageScaleType: HMSAdsPrime.ScaleType.FIT_CENTER,\n              descriptionTextStyle: { visibility: false },\n              callToActionStyle: { color: \"black\", fontSize: 12 },\n            }}\n            onNativeAdLoaded={(_) => toast(\"HMSNative onNativeAdLoaded\")}\n            onAdDisliked={(_) => toast(\"HMSNative onAdDisliked\")}\n            onAdFailed={(e) => toast(\"HMSNative onAdFailed\", e.nativeEvent)}\n            onAdClicked={(_) => toast(\"HMSNative onAdClicked\")}\n            onAdImpression={(_) => toast(\"HMSNative onAdImpression\")}\n            onVideoStart={(_) => toast(\"HMSNative onVideoStart\")}\n            onVideoPlay={(_) => toast(\"HMSNative onVideoPlay\")}\n            onVideoEnd={(_) => toast(\"HMSNative onVideoEnd\")}\n            onVideoPause={(_) => toast(\"HMSNative onVideoPause\")}\n            onVideoMute={(e) => toast(\"HMSNative onVideoMute\", e.nativeEvent)}\n            ref={(el) => {\n              adNativeElement = el;\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\nclass Vast extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n  render() {\n    return (\n      <SafeAreaView>\n        <View style={styles.sectionContainer}>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.loadAd();\n              }\n            }}\n          />\n          <Button\n            title=\"Info\"\n            color=\"purple\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement\n                  .getInfo()\n                  .then((res) => toast(\"Hms, ref.getInfo\", JSON.stringify(res)))\n                  .catch((err) => alert(err));\n              }\n            }}\n          />\n          <Button\n            title=\"Destroy\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.release();\n              }\n            }}\n          />\n          <Button\n            title=\"Resume\"\n            color=\"green\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.resume();\n              }\n            }}\n          />\n          <Button\n            title=\"Pause\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.pause();\n              }\n            }}\n          />\n          <Button\n            title=\"Start Or Pause\"\n            color=\"blue\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.startOrPause();\n              }\n            }}\n          />\n          <Button\n            title=\"Toggle Mute State\"\n            color=\"red\"\n            onPress={() => {\n              if (adVastElement !== null) {\n                adVastElement.toggleMuteState(true);\n              }\n            }}\n          />\n\n        </View>\n        <View style={{ marginTop: 50, height: 500 }}>\n          <HMSVastView style={{ flex: 1 }}\n            isTestAd={false}\n            isCustomVideoPlayer={false}\n            isAdLoadWithAdsData={true}\n            adParam={{\n              adId: \"testy3cglm3pj0\",\n              totalDuration: 99,\n              creativeMatchStrategy: HMSVast.CreativeMatchType.ANY,\n              allowMobileTraffic: false,\n              adOrientation: HMSVast.Orientation.LANDSCAPE,\n              maxAdPods: 1,\n              requestOption: {\n                adContentClassification: HMSVast.ContentClassification.AD_CONTENT_CLASSIFICATION_A,\n                nonPersonalizedAd: HMSVast.NonPersonalizedAd.PERSONALIZED,\n                tagForChildProtection: HMSVast.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                tagForUnderAgeOfPromise: HMSVast.UnderAge.PROMISE_UNSPECIFIED,\n              }\n            }}\n            playerConfigs={{\n              enableRotation: false,\n              isEnableCutout: false,\n              skipLinearAd: false,\n              isEnablePortrait: true\n            }}\n            onLoadSuccess={(e) => toast(\"HMSVast onLoadSuccess\", JSON.stringify(e.nativeEvent))}\n            onLoadFailed={(_) => toast(\"HMSVast onLoadFailed\")}\n            onSuccess={(_) => toast(\"HMSVast onSuccess\")}\n            onFailed={(e) => toast(\"HMSVast onFailed\", e.nativeEvent)}\n            onPlayAdReady={(_) => toast(\"HMSVast onPlayAdReady\")}\n            onPlayAdFinish={(_) => toast(\"HMSVast onPlayAdFinish\")}\n            onBufferStart={(_) => toast(\"HMSVast onBufferStart\")}\n            onBufferEnd={(_) => toast(\"HMSVast onBufferEnd\")}\n            onPlayStateChanged={(e) => toast(\"HMSVast onPlayStateChanged\", JSON.stringify(e.nativeEvent))}\n            onVolumeChanged={(e) => toast(\"HMSVast onVolumeChanged\", JSON.stringify(e.nativeEvent))}\n            onScreenViewChanged={(e) => toast(\"HMSVast onScreenViewChanged\", JSON.stringify(e.nativeEvent))}\n            onProgressChanged={(e) => console.log(e.nativeEvent)}\n            ref={(el) => {\n              adVastElement = el;\n            }}\n          />\n        </View>\n      </SafeAreaView>\n    );\n  }\n}\n\n\nclass Interstitial extends React.Component {\n  constructor(props) {\n    super(props);\n    interstitialAdIds = {};\n    interstitialAdIds[HMSAdsPrime.InterstitialMediaTypes.IMAGE] = \"teste9ih9j0rc3\";\n    interstitialAdIds[HMSAdsPrime.InterstitialMediaTypes.VIDEO] = \"testb4znbuh3n2\";\n    this.state = {\n      isLoaded: false,\n      displayForm: {\n        mediaType: HMSAdsPrime.InterstitialMediaTypes.VIDEO,\n        adId: interstitialAdIds.video,\n      },\n    };\n  }\n  componentDidMount() {\n    HMSInterstitial.setAdId(this.state.displayForm.adId)\n      .then((res) => toast(\"HMSInterstitial.setAdId\", res))\n      .catch((err) => alert(err));\n\n    HMSInterstitial.adClosedListenerAdd(() =>\n      toast(\"HMSInterstitial adClosed\")\n    ); \n\n    HMSInterstitial.adFailedListenerAdd((error) =>\n      toast(\"HMSInterstitial adFailed\", error)\n    ); \n\n    HMSInterstitial.adLeaveListenerAdd(() => toast(\"HMSInterstitial adLeave\")); \n\n    HMSInterstitial.adOpenedListenerAdd(() =>\n      toast(\"HMSInterstitial adOpened\")\n    ); \n\n    HMSInterstitial.adLoadedListenerAdd((res) =>\n      toast(\"HMSInterstitial adLoaded, result: \", res)\n    ); \n\n    HMSInterstitial.adClickedListenerAdd(() =>\n      toast(\"HMSInterstitial adClicked\")\n    ); \n\n    HMSInterstitial.adImpressionListenerAdd(() =>\n      toast(\"HMSInterstitial adImpression\")\n    ); \n\n    HMSInterstitial.adCompletedListenerAdd(() =>\n      toast(\"HMSInterstitial adCompleted\")\n    ); \n\n    HMSInterstitial.adStartedListenerAdd(() =>\n      toast(\"HMSInterstitial adStarted\")\n    ); \n  }\n\n  componentWillUnmount() {\n    HMSInterstitial.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Picker\n              prompt=\"Media Type\"\n              selectedValue={this.state.displayForm.mediaType}\n              style={styles.picker}\n              onValueChange={(itemValue) => {\n                this.setState({\n                  displayForm: {\n                    mediaType: itemValue,\n                    adId: interstitialAdIds[itemValue],\n                  },\n                });\n                HMSInterstitial.setAdId(interstitialAdIds[itemValue])\n                  .then((res) => toast(\"HMSInterstitial.setAdId\", res))\n                  .catch((err) => alert(err));\n              }}\n            >\n              {Object.values(HMSAdsPrime.InterstitialMediaTypes).map((mType) => (\n                <Picker.Item label={mType} value={mType} key={mType} />\n              ))}\n            </Picker>\n            <Button\n              title=\"Load\"\n              onPress={() => {\n                HMSInterstitial.loadAd()\n                  .then((res) => toast(\"HMSInterstitial.loadAd\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              title=\"Set Ad Parameter\"\n              onPress={() => {\n                HMSInterstitial.setAdParam({\n                  adContentClassification:\n                    HMSAdsPrime.ContentClassification\n                      .AD_CONTENT_CLASSIFICATION_UNKNOWN,               \n                  gender: HMSAdsPrime.Gender.UNKNOWN,\n                  nonPersonalizedAd: HMSAdsPrime.NonPersonalizedAd.ALLOW_ALL,\n                  tagForChildProtection:\n                    HMSAdsPrime.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                  tagForUnderAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,\n                })\n                  .then((res) => toast(\"HMSInterstitial.setAdParam\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              color=\"green\"\n              title=\"Check\"\n              onPress={() => {\n                HMSInterstitial.isLoaded()\n                  .then((res) => {\n                    toast(\"HMSInterstitial.isLoaded\", res);\n                    this.setState({ isLoaded: res });\n                  })\n                  .catch((err) => alert(err));\n              }}\n            />\n            <Button\n              title=\"Show\"\n              color=\"purple\"\n              disabled={!this.state.isLoaded}\n              onPress={() => {\n                this.setState({ isLoaded: false });\n                HMSInterstitial.show()\n                  .then((res) => toast(\"HMSInterstitial.show\", res))\n                  .catch((err) => alert(err));\n              }}\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Reward extends React.Component {\n  constructor(props) {\n    super(props);\n    rewardAdIds = {};\n    rewardAdIds[HMSAdsPrime.RewardMediaTypes.VIDEO] = \"testx9dtjwj8hp\";\n    this.state = {\n      isLoaded: false,\n      displayForm: {\n        mediaType: HMSAdsPrime.RewardMediaTypes.VIDEO,\n        adId: rewardAdIds[HMSAdsPrime.RewardMediaTypes.VIDEO],\n      },\n    };\n  }\n  componentDidMount() {\n    HMSReward.setAdId(this.state.displayForm.adId)\n      .then((res) => toast(\"HMSReward.setAdId\", res))\n      .catch((err) => alert(err));\n    HMSReward.loadWithAdId(true)\n      .then((res) => toast(\"HMSReward.loadWithAdId\", res))\n      .catch((err) => alert(err));\n    HMSReward.setVerifyConfig({ userId: \"HMS_User\", data: \"HMS data\" })\n      .then((res) => toast(\"HMSReward.setVerifyConfig\", res))\n      .catch((err) => alert(err));\n\n    HMSReward.adLoadedListenerAdd((res) =>\n      toast(\"HMSReward adLoaded, result: \", res)\n    ); \n\n    HMSReward.adFailedToLoadListenerAdd((error) =>\n      console.warn(\"HMSReward adFailedToLoad, error: \", error)\n    ); \n\n    HMSReward.adFailedToShowListenerAdd((error) =>\n      toast(\"HMSReward adFailedToShow, error: \", error)\n    ); \n\n    HMSReward.adOpenedListenerAdd(() => toast(\"HMSReward adOpened\")); \n\n    HMSReward.adClosedListenerAdd(() => toast(\"HMSReward adClosed\")); \n\n    HMSReward.adRewardedListenerAdd((reward) =>\n      toast(\"HMSReward adRewarded, reward: \", reward)\n    ); \n  }\n\n  componentWillUnmount() {\n    HMSReward.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Media Type\"\n            selectedValue={this.state.displayForm.mediaType}\n            style={styles.picker}\n            onValueChange={(itemValue) => {\n              this.setState({\n                displayForm: {\n                  mediaType: itemValue,\n                  adId: rewardAdIds[itemValue],\n                },\n              });\n              HMSReward.setAdId(rewardAdIds[itemValue])\n                .then((res) => toast(\"HMSReward.setAdId\", res))\n                .catch((err) => alert(err));\n            }}\n          >\n            {Object.values(HMSAdsPrime.RewardMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Load\"\n            onPress={() => {\n              HMSReward.loadAd()\n                .then((res) => toast(\"HMSReward.loadAd\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n          <Button\n            color=\"green\"\n            title=\"Check\"\n            onPress={() => {\n              HMSReward.isLoaded()\n                .then((res) => {\n                  toast(\"HMSReward.isLoaded\", res);\n                  this.setState({ isLoaded: res });\n                })\n                .catch((err) => alert(err));\n            }}\n          />\n          <Button\n            title=\"Show\"\n            disabled={!this.state.isLoaded}\n            onPress={() => {\n              this.setState({ isLoaded: false });\n              HMSReward.show()\n                .then((res) => toast(\"HMSReward.show\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass Splash extends React.Component {\n  constructor(props) {\n    super(props);\n    splashAdIds = {};\n    splashAdIds[HMSAdsPrime.SplashMediaTypes.VIDEO] = \"testd7c5cewoj6\";\n    splashAdIds[HMSAdsPrime.SplashMediaTypes.IMAGE] = \"testq6zq98hecj\";\n    this.state = {\n      mediaType: HMSAdsPrime.SplashMediaTypes.IMAGE,\n    };\n  }\n\n  componentDidMount() {\n    HMSSplash.setAdId(splashAdIds[this.state.mediaType])\n      .then((res) => toast(\"HMSSplash.setAdId\", res))\n      .catch((err) => alert(err));\n    HMSSplash.setLogoText(\"HMS App\")\n      .then((res) => toast(\"HMSSplash.setLogoText\", res))\n      .catch((err) => alert(err));\n    HMSSplash.setCopyrightText(\"Copyright HMS\")\n      .then((res) => toast(\"HMSSplash.setCopyrightText\", res))\n      .catch((err) => console.log(err));\n\n    HMSSplash.adLoadedListenerAdd(() => toast(\"HMSSplash adLoaded\")); \n    HMSSplash.adFailedToLoadListenerAdd((e) =>\n      toast(\"HMSSplash adFailedToLoad\", e)\n    ); \n    HMSSplash.adDismissedListenerAdd(() => toast(\"HMSSplash adDismissed\")); \n    HMSSplash.adShowedListenerAdd(() => toast(\"HMSSplash adShowed\")); \n    HMSSplash.adClickListenerAdd(() => toast(\"HMSSplash adClick\")); \n  }\n\n  componentWillUnmount() {\n    HMSSplash.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Media Type\"\n            selectedValue={this.state.mediaType}\n            style={styles.picker}\n            onValueChange={(itemValue) => {\n              this.setState({ mediaType: itemValue });\n              HMSSplash.setAdId(splashAdIds[itemValue])\n                .then((res) => toast(\"HMSSplash.setAdId\", res))\n                .catch((err) => alert(err));\n            }}\n          >\n            {Object.values(HMSAdsPrime.SplashMediaTypes).map((mType) => (\n              <Picker.Item label={mType} value={mType} key={mType} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Splash\"\n            color=\"green\"\n            onPress={() =>\n              HMSSplash.show()\n                .then((res) => toast(\"HMSSplash.show\", res))\n                .catch((err) => alert(err))\n            }\n          />\n          <Button\n            title=\"Set Ad Parameter\"\n            onPress={() => {\n              HMSSplash.setAdParam({\n                adContentClassification:\n                  HMSAdsPrime.ContentClassification.AD_CONTENT_CLASSIFICATION_UNKNOWN,\n                gender: HMSAdsPrime.Gender.UNKNOWN,\n                nonPersonalizedAd: HMSAdsPrime.NonPersonalizedAd.ALLOW_ALL,\n                tagForChildProtection:\n                  HMSAdsPrime.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                tagForUnderAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,\n              })\n                .then((res) => toast(\"HMSSplash.setAdParam\", res))\n                .catch((err) => alert(err));\n            }}\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass AdvertisingId extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isLoaded: false,\n      advertisingInfo: {\n        id: \"-\",\n        isLimitAdTrackingEnabled: false,\n      },\n      callMode: HMSAdsPrime.CallMode.SDK,\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <Picker\n            prompt=\"Select Call Mode\"\n            selectedValue={this.state.callMode}\n            onValueChange={(itemValue) => {\n              this.setState({ callMode: itemValue });\n            }}\n          >\n            {Object.values(HMSAdsPrime.CallMode).map((callMode) => (\n              <Picker.Item label={callMode} value={callMode} key={callMode} />\n            ))}\n          </Picker>\n          <Button\n            title=\"Get Advertising Id Info\"\n            onPress={() =>\n              HMSOaid.getAdvertisingIdInfo(this.state.callMode)\n                .then((res) => {\n                  toast(\"HMSOaid.getAdvertisingIdInfo, result:\", res);\n                  this.setState({ advertisingInfo: res });\n                })\n                .catch((e) => toast(\"HMSOaid.getAdvertisingIdInfo, error:\", e))\n            }\n          />\n          <Button\n            title=\"Clear\"\n            color=\"red\"\n            onPress={() =>\n              this.setState({\n                advertisingInfo: {\n                  id: \"-\",\n                  isLimitAdTrackingEnabled: false,\n                },\n              })\n            }\n          />\n          <Text title=\"Advertising Id\">\n            Advertising Id : {this.state.advertisingInfo.id}\n          </Text>\n          <Text title=\"Limit Ad Tracking Enabled\">\n            Limit Ad Tracking Enabled :\n            {this.state.advertisingInfo.isLimitAdTrackingEnabled\n              ? \"True\"\n              : \"False\"}\n          </Text>\n\n          <Button\n            color=\"green\"\n            title=\"Verify Advertising Id\"\n            onPress={() =>\n              HMSOaid.verifyAdvertisingId(this.state.advertisingInfo)\n                .then((res) =>\n                  alert(\"HMSOaid.verifyAdvertisingId, result:\", res)\n                )\n                .catch((err) => alert(err))\n            }\n          />\n        </View>\n      </>\n    );\n  }\n}\n\nclass InstallReferrer extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isTest: true,\n      callMode: HMSAdsPrime.CallMode.SDK,\n    };\n  }\n\n  componentDidMount() {\n    HMSInstallReferrer.serviceConnectedListenerAdd((response) =>\n      toast(\"HMSInstallReferrer serviceConnected, response:\", response)\n    ); \n    HMSInstallReferrer.serviceDisconnectedListenerAdd(() =>\n      toast(\"HMSInstallReferrer serviceDisconnected\")\n    ); \n  }\n\n  componentWillUnmount() {\n    HMSInstallReferrer.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Picker\n              prompt=\"Select Call Mode\"\n              selectedValue={this.state.callMode}\n              onValueChange={(itemValue) => {\n                this.setState({ callMode: itemValue });\n              }}\n            >\n              {Object.values(HMSAdsPrime.CallMode).map((cMode) => (\n                <Picker.Item label={cMode} value={cMode} key={cMode} />\n              ))}\n            </Picker>\n            <Button\n              title=\"Start Install Referer with given call mode\"\n              onPress={() =>\n                HMSInstallReferrer.startConnection(\n                  this.state.callMode,\n                  this.state.isTest\n                )\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.startConnection, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSInstallReferrer.startConnection, error:\", err)\n                  )\n              }\n            />\n            <Button\n              color=\"green\"\n              title=\"Ready?\"\n              onPress={() =>\n                HMSInstallReferrer.isReady()\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.isReady, result:\", res)\n                  )\n                  .catch((e) => toast(\"HMSInstallReferrer.isReady, error:\", e))\n              }\n            />\n            <Button\n              color=\"purple\"\n              title=\"Get Referrer Details\"\n              onPress={() =>\n                HMSInstallReferrer.getReferrerDetails(\"test channel\")\n                  .then((res) =>\n                    toast(\"HMSInstallReferrer.getReferrerDetails, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSInstallReferrer.getReferrerDetails, error:\", err)\n                  )\n              }\n            />\n            <Button\n              color=\"red\"\n              title=\"End Install Referer connection\"\n              onPress={() =>\n                HMSInstallReferrer.endConnection()\n                  .then(() => toast(\"HMSInstallReferrer.endConnection\"))\n                  .catch((e) =>\n                    toast(\"HMSInstallReferrer.endConnection, error:\", e)\n                  )\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Consent extends React.Component {\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Button\n              title=\"Set Consent\"\n              onPress={() =>\n                HMSAdsPrime.setConsent({\n                  consentStatus: HMSAdsPrime.ConsentStatus.NON_PERSONALIZED,\n                  debugNeedConsent: HMSAdsPrime.DebugNeedConsent.DEBUG_NEED_CONSENT,\n                  underAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,              \n                })\n                  .then((res) => toast(\"HMSAdsPrime.setConsent, result:\", res))\n                  .catch((e) => toast(\"HMSAdsPrime.setConsent, error:\", e))\n              }\n            />\n            <Button\n              color=\"green\"\n              title=\"Check Consent\"\n              onPress={() =>\n                HMSAdsPrime.checkConsent()\n                  .then((res) => toast(\"HMSAdsPrime.checkConsent, result:\", res))\n                  .catch((e) => toast(\"HMSAdsPrime.checkConsent, error:\", e))\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass RequestOptions extends React.Component {\n  render() {\n    return (\n      <>\n        <View>\n          <View style={styles.sectionContainer}>\n            <Button\n              title=\"Set Request\"\n              onPress={() =>\n                HMSAdsPrime.setRequestOptions({\n                  adContentClassification:\n                    HMSAdsPrime.ContentClassification.AD_CONTENT_CLASSIFICATION_A,\n                  nonPersonalizedAd: HMSAdsPrime.NonPersonalizedAd.ALLOW_ALL,\n                  tagForChildProtection:\n                    HMSAdsPrime.TagForChild.TAG_FOR_CHILD_PROTECTION_UNSPECIFIED,\n                  tagForUnderAgeOfPromise: HMSAdsPrime.UnderAge.PROMISE_UNSPECIFIED,            \n                })\n                  .then((res) => toast(\"HMSAdsPrime.setRequestOptions, res:\", res))\n                  .catch((err) =>\n                    toast(\"HMSAdsPrime.setRequestOptions, error:\", err)\n                  )\n              }\n            />\n            <Button\n              title=\"Get Request\"\n              color=\"green\"\n              onPress={() =>\n                HMSAdsPrime.getRequestOptions()\n                  .then((res) =>\n                    toast(\"HMSAdsPrime.getRequestOptions, result:\", res)\n                  )\n                  .catch((err) =>\n                    toast(\"HMSAdsPrime.getRequestOptions, error:\", err)\n                  )\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nconst pages = [\n  { name: \"Splash Ad\", id: \"splash\", component: <Splash key=\"splash\" /> },\n  { name: \"Reward Ad\", id: \"reward\", component: <Reward key=\"reward\" /> },\n  {\n    name: \"Interstitial Ad\",\n    id: \"interstitial\",\n    component: <Interstitial key=\"interstitial\" />,\n  },\n  { name: \"Native Ad\", id: \"native\", component: <Native key=\"native\" /> },\n  { name: \"Banner\", id: \"banner\", component: <Banner key=\"banner\" /> },\n  { name: \"Instream\", id: \"instream\", component: <Instream key=\"instream\" /> },\n  {\n    name: \"Advertising Id\",\n    id: \"advertisingInfo\",\n    component: <AdvertisingId key=\"advertisingInfo\" />,\n  },\n\n  {\n    name: \"Install Referrer\",\n    id: \"installReferrer\",\n    component: <InstallReferrer key=\"installReferrer\" />,\n  },\n  { name: \"VAST\", id: \"vast\", component: <Vast key=\"vast\" /> },\n  { name: \"Consent\", id: \"consent\", component: <Consent key=\"consent\" /> },\n  {\n    name: \"Request Options\",\n    id: \"requestOptions\",\n    component: <RequestOptions key=\"requestOptions\" />,\n  },\n];\n\nconst initAppState = {\n  privacyEnabled: true,\n  consentEnabled: true,\n  consentIgnored: false,\n  showNotifyButton: false,\n  pageId: pages[0].id,\n};\n\nconst ModalText = () => (\n  <>\n    <Text style={styles.sectionDescription}>Privacy Example of HUAWEI X</Text>\n    <Text style={styles.sectionContainer}>\n      1.Privacy description {\"\\n\"}\n      {\"\\n\"} The RNHmsAdsPrimeDemois software providing a code demo for the HUAWEI\n      Ads SDK. Connecting to the network, the software collects and processes\n      information to identify devices, providing customized services or ads. If\n      you do not agree to collect the preceding information or do not agree to\n      call related permissions or functions of your mobile phones, the software\n      cannot run properly. You can stop data collection and uploading by\n      uninstalling or exiting this software. {\"\\n\"}\n      {\"\\n\"} 2.Demo description\n      {\"\\n\"}\n      {\"\\n\"} This demo is for reference only. Modify the content based on the\n      user protocol specifications. {\"\\n\"}\n      {\"\\n\"} 3.Advertising and marketing {\"\\n\"}\n      {\"\\n\"} We will create a user group based on your personal information,\n      collect your device information, usage information, and ad interaction\n      information in this app, and display more relevant personalized ads and\n      other promotion content. In this process, we will strictly protect your\n      privacy. You can learn more about how we collect and use your personal\n      information in personalized ads based on Ads and Privacy. If you want to\n      restrict personalized ads, you can tap here to open the ad setting page\n      and enable the function of restricting personalized ads. After the\n      function is enabled, you will still receive equivalent number of ads.\n      However, the ad relevance will be reduced.\n    </Text>\n  </>\n);\n\nconst ModalText2 = () => (\n  <>\n    <Text style={styles.sectionDescription}>Content Example of HUAWEI X</Text>\n    <Text style={styles.sectionContainer}>\n      The Ads in HUAWEI X is provided in collaboration with our partners. You\n      can find a full list of our partners for each country/region here.{\"\\n\"}\n      {\"\\n\"} In order to provide you with personalized advertisements, we need\n      to share the following information with our partners:{\"\\n\"}\n      {\"\\n\"} • User information, including advertising ID, city of residence,\n      country, and language.{\"\\n\"}\n      {\"\\n\"} • Device information, including device name and model, operating\n      system version, screen size, and network type.{\"\\n\"}\n      {\"\\n\"} • Service usage information, including news ID and records of\n      views, clicks, dislikes, shares, and comments for news content and\n      advertisements.{\"\\n\"}\n      {\"\\n\"} With your consent, the above information will be shared with our\n      partners so that they can provide you with personalized advertisements on\n      behalf of their customers, based on interests and preferences identified\n      or predicted through analysis of your personal information.{\"\\n\"}\n      {\"\\n\"} You can withdraw your consent at any time by going to app settings.\n      {\"\\n\"}\n      {\"\\n\"} Without your consent, no data will be shared with our partners\n    </Text>\n  </>\n);\nclass App extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = initAppState;\n  }\n\n  componentDidMount() {\n    console.log(\"componentDidMount initAppState\", initAppState.pageId);\n  }\n  render() {\n    const usingHermes =\n      typeof global.HermesInternal === \"object\" &&\n      global.HermesInternal !== null;\n\n    const {\n      privacyEnabled,\n      consentEnabled,\n      consentIgnored,\n      pageId\n    } = this.state;\n\n    return (\n      <>\n        <Modal\n          animationType=\"slide\"\n          transparent={false}\n          visible={!privacyEnabled}\n          onRequestClose={() => {\n            BackHandler.exitApp();\n          }}\n        >\n          <ModalText />\n          <Button title=\"Close\" onPress={() => BackHandler.exitApp()} />\n          <Button\n            title=\"Ok\"\n            onPress={() => {\n              this.setState({ privacyEnabled: true });\n            }}\n          />\n        </Modal>\n        <Modal\n          animationType=\"slide\"\n          transparent={false}\n          visible={privacyEnabled && !consentIgnored && !consentEnabled}\n          onRequestClose={() => {\n            this.setState({ consentIgnored: true });\n          }}\n        >\n          <ModalText2 />\n          <Button\n            title=\"Ignore\"\n            onPress={() => {\n              this.setState({ consentIgnored: true });\n            }}\n          />\n          <Button\n            title=\"Ok\"\n            onPress={() => {\n              this.setState({ consentEnabled: true });\n            }}\n          />\n        </Modal>\n        <StatusBar barStyle=\"dark-content\" />\n        <SafeAreaView>\n          <ScrollView\n            contentInsetAdjustmentBehavior=\"automatic\"\n            style={styles.scrollView}\n          >\n            {!usingHermes ? null : (\n              <View style={styles.engine}>\n                <Text style={styles.footer}>Engine: Hermes</Text>\n              </View>\n            )}\n            <View style={styles.sectionContainer}>\n              <Text style={styles.sectionHeader} title=\"General\">\n                Huawei Ads Prime Kit\n              </Text>\n              <Button\n                title=\"Ask Permissions\"\n                color=\"red\"\n                onPress={() => {\n                  if (pageId == 'vast') {\n                    HMSVast.userAcceptAdLicense(true)\n                      .then((res) => toast(\"userAcceptAdLicense, result:\", res))\n                      .catch((err) => alert(err));\n                  }\n                  else {\n                    this.setState({\n                      privacyEnabled: false,\n                      consentEnabled: false,\n                    });\n                  }\n                }}\n              />\n              {pageId == 'vast' ? (<Button\n                title=\"Init Vast\"\n                color=\"green\"\n                onPress={() =>\n                  HMSVast.init(null)\n                    .then((res) => {\n                      toast(\"HMS init, result: \" + res, res);\n                      this.setState({ showNotifyButton: true });\n                    })\n                    .catch((err) => alert(err))\n                }\n              />) : (\n                <Button\n                  title=\"Init\"\n                  color=\"green\"\n                  onPress={() =>\n                    HMSAdsPrime.init()\n                      .then((res) => {\n                        toast(\"HMS init, result: \" + res, res);\n                        this.setState({ showNotifyButton: true });\n                      })\n                      .catch((err) => alert(err))\n                  }\n                />\n              )}\n              {this.state.showNotifyButton && (\n                <Button\n                  title=\"App Installed Notify\"\n                  color=\"blue\"\n                  onPress={() => {\n                    HMSAdsPrime.appInstalledNotify(true, HMSAdsPrime.ActivateStyle.BOTTOM_BANNER)\n                      .then((res) => toast(\"App Installed Notify, result: \" + JSON.stringify(res), res))\n                      .catch((err) => alert(err))\n                  }}\n                />\n              )}\n            </View>\n            {!privacyEnabled ? null : (\n              <View style={styles.sectionContainer}>\n                <Text style={styles.sectionHeader} title=\"Functions\">\n                  Functions:\n                </Text>\n                <Picker\n                  prompt=\"Select Function\"\n                  selectedValue={pageId}\n                  onValueChange={(itemValue) =>\n                    this.setState({ pageId: itemValue })\n                  }\n                >\n                  {pages.map((page) => (\n                    <Picker.Item\n                      label={page.name}\n                      value={page.id}\n                      key={page.id}\n                    />\n                  ))}\n                </Picker>\n                {pages\n                  .filter((page) => page.id === pageId)\n                  .map((page) => page.component)}\n              </View>\n            )}\n          </ScrollView>\n        </SafeAreaView>\n      </>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scrollView: {\n    backgroundColor: Colors.lighter,\n    paddingBottom: 20,\n  },\n  engine: {\n    position: \"absolute\",\n    right: 0,\n  },\n  body: {\n    backgroundColor: Colors.white,\n  },\n  sectionContainer: {\n    marginTop: 32,\n    paddingHorizontal: 24,\n  },\n  sectionTitle: {\n    fontSize: 24,\n    fontWeight: \"600\",\n    color: Colors.black,\n  },\n  sectionDescription: {\n    marginTop: 8,\n    fontSize: 18,\n    fontWeight: \"400\",\n    color: Colors.dark,\n  },\n  highlight: {\n    fontWeight: \"700\",\n  },\n  footer: {\n    color: Colors.dark,\n    fontSize: 12,\n    fontWeight: \"600\",\n    padding: 4,\n    paddingRight: 12,\n    textAlign: \"right\",\n  },\n  buttons: {\n    flex: 1,\n    flexDirection: \"row\",\n    justifyContent: \"center\",\n    alignItems: \"stretch\",\n  },\n  picker: { height: 50, width: 130 },\n  sectionHeader: {\n    fontSize: 20,\n    fontWeight: \"600\",\n    color: Colors.black,\n    paddingVertical: 12,\n    paddingHorizontal: 0,\n  },\n  yellowText: { backgroundColor: \"yellow\" },\n});\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-adsprime/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-adsprime/example/README.md",
    "content": "# React-Native HMS Ads Prime - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Ads Prime Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Ads Prime - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:ignore=\"GoogleAppIndexingWarning\"\n        tools:targetApi=\"28\" >\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.ads.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHmsAdsPrimeDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:usesCleartextTraffic=\"true\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHmsAdsPrimeDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:exported=\"true\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/src/main/java/com/huawei/hms/rn/ads/demo/MainActivity.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsAdsPrimeDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/src/main/java/com/huawei/hms/rn/ads/demo/MainApplication.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ads.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        \n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-adsprime/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsAdsPrimeDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-adsprime/example/app.json",
    "content": "{\n  \"name\": \"RNHmsAdsPrimeDemo\",\n  \"displayName\": \"RNHmsAdsPrimeDemo\"\n}"
  },
  {
    "path": "react-native-hms-adsprime/example/babel.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-adsprime/example/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nimport { AppRegistry } from \"react-native\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-adsprime/example/jest.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  preset: \"react-native\",\n  moduleFileExtensions: [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"node\"],\n};\n"
  },
  {
    "path": "react-native-hms-adsprime/example/metro.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-adsprime/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-adsprime-demo\",\n  \"version\": \"13.4.73-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"@react-native-picker/picker\": \"2.5.0\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-adsprime\": \"13.4.73-300\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.21.8\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-adsprime/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-adsprime\",\n  \"title\": \"React Native HMS Ads Prime Kit\",\n  \"description\": \"React Native HMS Ads Prime Kit\",\n  \"version\": \"13.4.73-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-adsprime\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ads\",\n    \"react-native-adsprime\",\n    \"huawei-ads\",\n    \"huawei-ads-prime\",\n    \"hms-ads\",\n    \"hms-ads-prime\",\n    \"ads\",\n    \"ads-prime\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-adsprime/src/AdsPrime.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSAdsPrime } = NativeModules;\n\nexport default HMSAdsPrime;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Banner.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\nconst { HMSAdsPrime } = NativeModules;\n\nclass HMSAdsPrimeBanner extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAdsPrime.getViewInfo(findNodeHandle(this.bannerView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeBannerView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  setRefresh = (refreshTime) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeBannerView\").Commands.setRefresh,\n      [refreshTime],\n    );\n  };\n\n  pause = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeBannerView\").Commands.pause,\n      null,\n    );\n  };\n\n  resume = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeBannerView\").Commands.resume,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.bannerView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeBannerView\").Commands.destroy,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <HMSAdsPrimeBannerView\n        {...this.props}\n        ref={(el) => (this.bannerView = el)}\n      />\n    );\n  }\n}\n\nconst HMSAdsPrimeBannerView = requireNativeComponent(\n  \"HMSAdsPrimeBannerView\",\n  HMSAdsPrimeBanner,\n);\n\nexport default HMSAdsPrimeBanner;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/InstallReferrer.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsPrimeInstallReferrer } = NativeModules;\n\nif (Platform.OS == \"android\") {\n    const events = [\"serviceConnected\", \"serviceDisconnected\"];\n    addListenerToModule(HMSAdsPrimeInstallReferrer, events);\n}\n\n\nexport default HMSAdsPrimeInstallReferrer;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Instream.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\n\nconst { HMSAdsPrime } = NativeModules;\n\nclass HMSAdsInstream extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAdsPrime.getViewInfo(findNodeHandle(this.instreamView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  register = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.register,\n      null,\n    );\n  };\n\n  mute = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.mute,\n      null,\n    );\n  };\n\n  unmute = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.unmute,\n      null,\n    );\n  };\n\n  stop = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.stop,\n      null,\n    );\n  };\n\n  pause = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.pause,\n      null,\n    );\n  };\n\n  play = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.play,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.destroy,\n      null,\n    );\n  };\n\n  showAdvertiserInfoDialog = (showWhyThisAd) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.showAdvertiserInfoDialog,\n      [showWhyThisAd],\n    );\n  };\n  \n  hideAdvertiserInfoDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.hideAdvertiserInfoDialog,\n      null,\n    );\n  };\n\n  showTransparencyDialog = (location) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.showTransparencyDialog,\n      location ? [location] : null,\n    )\n  }\n\n  hideTransparencyDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.instreamView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeInstreamView\").Commands.hideTransparencyDialog,\n      null,\n    )\n  }\n\n  render() {\n    return (\n      <HMSAdsPrimeInstreamView\n        {...this.props}\n        ref={(el) => (this.instreamView = el)}\n      />\n    );\n  }\n}\n\nconst HMSAdsPrimeInstreamView = requireNativeComponent(\n  \"HMSAdsPrimeInstreamView\",\n  HMSAdsInstream,\n);\n\nexport default HMSAdsInstream;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Interstitial.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsPrimeInterstitial } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adClosed\",\n    \"adFailed\",\n    \"adLeave\",\n    \"adOpened\",\n    \"adLoaded\",\n    \"adClicked\",\n    \"adImpression\",\n    \"adCompleted\",\n    \"adStarted\",\n  ];\n  addListenerToModule(HMSAdsPrimeInterstitial, events);\n}\n\n\nexport default HMSAdsPrimeInterstitial;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Native.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\n\nconst { HMSAdsPrime } = NativeModules;\n\nclass HMSAdsNative extends Component {\n  constructor() {\n    super();\n  }\n\n  componentDidMount() {\n    this.loadAd();\n  }\n\n  getInfo = () => {\n    return HMSAdsPrime.getViewInfo(findNodeHandle(this.nativeView));\n  };\n\n  loadAd = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands.loadAd,\n      null,\n    );\n  };\n\n  dislikeAd = (desc) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands.dislikeAd,\n      [desc],\n    );\n  };\n\n  gotoWhyThisAdPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .gotoWhyThisAdPage,\n      null,\n    );\n  };\n\n  destroy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands.destroy,\n      null,\n    );\n  };\n\n  setAllowCustomClick = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .setAllowCustomClick,\n      null,\n    );\n  };\n\n  showPrivacyPolicy = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .showPrivacyPolicy,\n      null,\n    );\n  };\n  showPermissionPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .showPermissionPage,\n      null,\n    );\n  };\n  showAppDetailPage = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .showAppDetailPage,\n      null,\n    );\n  };\n\n  recordClickEvent = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .recordClickEvent,\n      null,\n    );\n  };\n\n  recordImpressionEvent = (data) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .recordImpressionEvent,\n      [data],\n    );\n  };\n\n  showAdvertiserInfoDialog = (showWhyThisAd) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .showAdvertiserInfoDialog,\n      [showWhyThisAd],\n    );\n  };\n\n  hideAdvertiserInfoDialog = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.nativeView),\n      UIManager.getViewManagerConfig(\"HMSAdsPrimeNativeView\").Commands\n        .hideAdvertiserInfoDialog,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <HMSAdsPrimeNativeView {...this.props} ref={(el) => (this.nativeView = el)}>\n        {this.props.children}\n      </HMSAdsPrimeNativeView>\n    );\n  }\n}\n\nconst HMSAdsPrimeNativeView = requireNativeComponent(\n  \"HMSAdsPrimeNativeView\",\n  HMSAdsNative,\n);\n\nexport default HMSAdsNative;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Oaid.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSAdsPrimeOaid } = NativeModules;\n\nexport default HMSAdsPrimeOaid;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Reward.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsPrimeRewardAd } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adFailedToLoad\",\n    \"adLoaded\",\n    \"adClosed\",\n    \"adFailedToShow\",\n    \"adOpened\",\n    \"adRewarded\",\n  ];\n  addListenerToModule(HMSAdsPrimeRewardAd, events);\n}\n\nexport default HMSAdsPrimeRewardAd;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Splash.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules, Platform } from \"react-native\";\nimport { addListenerToModule } from \"./utils\";\n\nconst { HMSAdsPrimeSplash } = NativeModules;\n\nif (Platform.OS == \"android\") {\n  const events = [\n    \"adLoaded\",\n    \"adFailedToLoad\",\n    \"adDismissed\",\n    \"adShowed\",\n    \"adClick\",\n  ];\n  addListenerToModule(HMSAdsPrimeSplash, events);\n}\n\n\nexport default HMSAdsPrimeSplash;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/Vast.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from \"react-native\";\n\nconst { HMSVast } = NativeModules;\n\nexport default HMSVast;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/VastView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport {\n    findNodeHandle,\n    requireNativeComponent,\n    UIManager,\n    NativeModules,\n} from \"react-native\";\n\nconst { HMSVast } = NativeModules;\n\nclass HMSVastView extends Component {\n    constructor() {\n        super();\n    }\n\n    componentDidMount() {\n        this.loadAd();\n    }\n\n    getInfo = () => {\n        return HMSVast.getViewInfo(findNodeHandle(this.vastView));\n    };\n\n    componentWillUnmount() {\n        this.release();\n    }\n\n    loadAd = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.loadAd,\n            null,\n        );\n    };\n\n    pause = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.pause,\n            null,\n        );\n    };\n\n    resume = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.resume,\n            null,\n        );\n    };\n\n    toggleMuteState = (data) => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.toggleMuteState,\n            [data],\n        );\n    };\n\n    startOrPause = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.startOrPause,\n            null,\n        );\n    };\n\n    release = () => {\n        UIManager.dispatchViewManagerCommand(\n            findNodeHandle(this.vastView),\n            UIManager.getViewManagerConfig(\"HMSAdsPrimeVastView\").Commands.release,\n            null,\n        );\n    };\n\n    render() {\n        return (\n            <HMSAdsPrimeVastView {...this.props} ref={(el) => (this.vastView = el)}>\n                {this.props.children}\n            </HMSAdsPrimeVastView>\n        );\n    }\n}\n\nconst HMSAdsPrimeVastView = requireNativeComponent(\n    \"HMSAdsPrimeVastView\",\n    HMSVastView,\n);\n\nexport default HMSVastView;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/index.d.ts",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\ndeclare module \"@hmscore/react-native-hms-adsprime\" {\n  import * as React from \"react\";\n  import { NativeSyntheticEvent, ViewProps } from \"react-native\";\n\n  export enum RewardMediaTypes {\n    VIDEO = \"video\"\n  }\n  export enum InterstitialMediaTypes {\n    IMAGE = \"image\",\n    VIDEO = \"video\"\n  }\n  export enum SplashMediaTypes {\n    IMAGE = \"image\",\n    VIDEO = \"video\"\n  }\n  export enum BannerMediaTypes {\n    IMAGE = \"image\"\n  }\n  export enum NativeAdAssetNames {\n    TITLE = \"1\",\n    CALL_TO_ACTION = \"2\",\n    ICON = \"3\",\n    DESC = \"4\",\n    AD_SOURCE = \"5\",\n    MARKET = \"6\",\n    PRICE = \"7\",\n    IMAGE = \"8\",\n    RATING = \"9\",\n    MEDIA_VIDEO = \"10\",\n    CHOICES_CONTAINER = \"11\"\n  }\n\n  /**\n   *  Ad content rating.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-contentcassification\n   */\n  export enum ContentClassification {\n    AD_CONTENT_CLASSIFICATION_W = \"W\",\n    AD_CONTENT_CLASSIFICATION_PI = \"PI\",\n    AD_CONTENT_CLASSIFICATION_J = \"J\",\n    AD_CONTENT_CLASSIFICATION_A = \"A\",\n    AD_CONTENT_CLASSIFICATION_UNKNOWN = \"\",\n  }\n\n  /**\n   *  Whether to request only non-personalized ads.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nonpersonalizedad\n   */\n  export enum NonPersonalizedAd {\n    ALLOW_ALL = 0,\n    ALLOW_NON_PERSONALIZED = 1,\n  }\n\n  /**\n   *  Child-directed setting.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-tagforchild\n   */\n  export enum TagForChild {\n    TAG_FOR_CHILD_PROTECTION_FALSE = 0,\n    TAG_FOR_CHILD_PROTECTION_TRUE = 1,\n    TAG_FOR_CHILD_PROTECTION_UNSPECIFIED = -1,\n  }\n\n  /**\n   *  Setting directed to users under the age of consent.\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-underage\n   */\n  export enum UnderAge {\n    PROMISE_FALSE = 0,\n    PROMISE_TRUE = 1,\n    PROMISE_UNSPECIFIED = -1,\n  }\n\n  /**\n   *  Gender type\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-gender\n   */\n  export enum Gender {\n    UNKNOWN = 0,\n    MALE = 1,\n    FEMALE = 2,\n  }\n\n  /**\n   *  Whether to obtain the audio focus during video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-banneradSize\n   */\n  export enum BannerAdSizes {\n    B_300_250 = \"300_250\",\n    B_320_50 = \"320_50\",\n    B_320_100 = \"320_100\",\n    B_360_57 = \"360_57\",\n    B_360_144 = \"360_144\",\n    B_SMART = \"smart\",\n    B_DYNAMIC = \"dynamic\",\n    B_ADVANCED = \"advanced\",\n    B_INVALID = \"invalid\",\n  }\n\n  /**\n   *  Option for functions that can use Huawei SDK or\n   *  [Aidl](https://developer.android.com/guide/components/aidl) service.\n   */\n  export enum CallMode {\n    SDK = \"sdk\",\n    AIDL = \"aidl\", // Will not be used anymore\n  }\n\n  /**\n   *  Debug consent setting.\n   */\n  export enum DebugNeedConsent {\n    DEBUG_DISABLED = 0,\n    DEBUG_NEED_CONSENT = 1,\n    DEBUG_NOT_NEED_CONSENT = 2,\n  }\n\n  /**\n   *  Consent status.\n   */\n  export enum ConsentStatus {\n    PERSONALIZED = 0,\n    NON_PERSONALIZED = 1,\n    UNKNOWN = 2,\n  }\n\n  /**\n   *  Choice icon position constants\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nativeadconfiguration-choicesposition\n   */\n  export enum ChoicesPosition {\n    TOP_LEFT = 0,\n    TOP_RIGHT = 1,\n    BOTTOM_RIGHT = 2,\n    BOTTOM_LEFT = 3,\n    INVISIBLE = 4,\n  }\n\n  /**\n   *  Orientation constant\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-nativeadconfiguration-direction\n   */\n  export enum Direction {\n    ANY = 0,\n    PORTRAIT = 1,\n    LANDSCAPE = 2,\n  }\n\n  /**\n   *  Whether to obtain the audio focus during video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMS-References/ads-api-audiofocustype\n   */\n  export enum AudioFocusType {\n    GAIN_AUDIO_FOCUS_ALL = 0,\n    NOT_GAIN_AUDIO_FOCUS_WHEN_MUTE = 1,\n    NOT_GAIN_AUDIO_FOCUS_ALL = 2,\n  }\n\n  /**\n   *  Native ad media types\n   */\n  export enum NativeMediaTypes {\n    VIDEO = \"video\",\n    IMAGE_SMALL = \"image_small\",\n    IMAGE_LARGE = \"image_large\",\n  }\n\n  /**\n   *  Options for scaling the bounds of an image\n   *  Refer this page https://developer.android.com/reference/android/widget/ImageView.ScaleType\n   */\n  export enum ScaleType {\n    MATRIX = \"MATRIX\",\n    FIT_XY = \"FIT_XY\",\n    FIT_START = \"FIT_START\",\n    FIT_CENTER = \"FIT_CENTER\",\n    FIT_END = \"FIT_END\",\n    CENTER = \"CENTER\",\n    CENTER_CROP = \"CENTER_CROP\",\n    CENTER_INSIDE = \"CENTER_INSIDE\",\n  }\n\n  /**\n   *  Options for scaling the bounds of an image\n   *  Refer this page https://developer.android.com/reference/android/widget/ImageView.ScaleType\n   */\n  export enum DetailedCreativeTypes {\n    BIG_IMG = 901,\n    VIDEO = 903,\n    THREE_IMG = 904,\n    SMALL_IMG = 905,\n    SINGLE_IMG = 909,\n    SHORT_TEXT = 913,\n    LONG_TEXT = 914,\n  }\n\n  /**\n   *  App installed notify style\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/activatestyle-0000001210045468\n   */\n  export enum ActivateStyle {\n    BOTTOM_BANNER = 1,\n    CONFIRM_DIALOG = 2\n  }\n\n  /**\n   *  Type of the network allowed for automatic video playback\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/HMSCore-References/autoplaynettype-0000001876216905\n   */\n  export enum AutoPlayNetType {\n    WIFI_ONLY = 0,\n    BOTH_WIFI_AND_DATA = 1,\n    FORBID_AUTO_PLAY = 2\n  }\n\n  /**\n   *  Ad creative matching strategy\n   *  Refer this page https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/creativematchtype-0000001150370058\n   */\n   export enum CreativeMatchType {\n    EXACT = 0,\n    SMART = 1,\n    UNKNOWN = 2,\n    ANY = 3,\n    LANDSCAPE = 4,\n    PORTRAIT = 5,\n  }\n \n  /**\n   *  Vast Orientation\n   */\n  export enum Orientation {\n    PORTRAIT = 1,\n    LANDSCAPE = 0,\n  }\n\n  /**\n   *  Ad request options.\n   */\n  interface RequestOptions {\n    /**\n     *  The OAID.\n     */\n    adContentClassification?: ContentClassification;\n\n    /**\n     *  The OAID.\n     */\n    appCountry?: string;\n\n    /**\n     *  The OAID.\n     */\n    appLang?: string;\n\n    /**\n     *  The OAID.\n     */\n    nonPersonalizedAd?: NonPersonalizedAd;\n\n    /**\n     *  The OAID.\n     */\n    tagForChildProtection?: TagForChild;\n\n    /**\n     *  The OAID.\n     */\n    tagForUnderAgeOfPromise?: UnderAge;\n\n    /**\n     *  Whether the location information is carried in an ad request.\n     */\n    requestLocation?: boolean;\n\n    /**\n     *  Sets the maximum transaction timeout interval (including the network delay), in milliseconds.\n     */\n    tMax?: number;\n\n    /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n    biddingParam?: BiddingParam;\n\n     /**\n     *  Ad unit ID. The real-time bidding parameters are set on a per ad unit basis.\n     */\n     slotId?: string;\n\n     /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n     biddingParamMap?: object;\n  }\n\n  /**\n   *  Builds a BiddingParam object with specified attributes.\n   */\n  interface BiddingParam {\n    /**\n     *  Sets the floor bid for a real-time bidding ad unit.\n     */\n    bidFloor?: number;\n\n    /**\n     *  Sets the currency of the floor bid for a real-time bidding ad unit.\n     */\n    bidFloorCur?: string;\n\n    /**\n     *  Sets the app packages that are prohibited from delivering ads through real-time bidding ad units.\n     */\n    bpkgName?: [];\n  }\n\n  /**\n   *  Builds a BiddingParam object with specified attributes.\n   */\n  interface BiddingInfo {\n    /**\n     *  Obtains the creative bid amount. If the bid type CPM, the creative will be charged by every thousand impressions.\n     */\n    price?: number;\n\n    /**\n     *  Obtains the currency of a creative bid.\n     */\n    cur?: string;\n\n    /**\n     *  Obtains the bidding success notification URL.\n     */\n    nurl?: string;\n\n    /**\n     *  Obtains the URL used to notify Huawei of its bidding failure and the success of another vendor.\n     */\n    lurl?: string;\n  }\n\n  /**\n   *  Ad provider.\n   */\n  interface AdProvider {\n    /**\n     *  Id of ad provider.\n     */\n    id: ContentClassification;\n\n    /**\n     *  Name of ad provider.\n     */\n    name: string;\n\n    /**\n     *  The url for privacy policy.\n     */\n    privacyPolicyUrl: string;\n\n    /**\n     *  The service area for ad (ex: 'Global' or 'Asia').\n     */\n    serviceArea: string;\n  }\n\n  /**\n   *  Consent information from api result.\n   */\n  interface ConsentResult {\n    /**\n     *  Status of consent.\n     */\n    consentStatus: ConsentStatus;\n\n    /**\n     *  Shows whether consent is needed.\n     */\n    isNeedConsent: boolean;\n\n    /**\n     *  Ad provider list\n     */\n    adProviders: AdProvider[];\n  }\n\n  /**\n   *  Ad consent object to be submitted.\n   */\n  interface Consent {\n    /**\n     *  Consent option.\n     */\n    consentStatus?: ConsentStatus;\n\n    /**\n     *  DebugNeedConsent option.\n     */\n    debugNeedConsent?: DebugNeedConsent;\n\n    /**\n     *  UnderAge option.\n     */\n    underAgeOfPromise?: UnderAge;\n\n    /**\n     *  Device Id\n     */\n    testDeviceId?: string;\n  }\n\n  /**\n   *  Information about advertised clients.\n   */\n  interface AdvertisingIdClientInfo {\n    /**\n     *  The OAID.\n     */\n    id: string;\n\n    /**\n     *  'Limit ad tracking' setting.\n     */\n    isLimitAdTrackingEnabled: boolean;\n  }\n\n  /**\n   *  HMSOaid module.\n   */\n  export const HMSOaid = {\n    /**\n     *  Obtains the OAID and 'Limit ad tracking' setting.\n     */\n    getAdvertisingIdInfo(callMode: CallMode): Promise<AdvertisingIdClientInfo>;,\n\n    /**\n     *  Verifies the OAID and 'Limit ad tracking' setting\n     */\n    verifyAdvertisingId(advertisingInfo: AdvertisingIdClientInfo): Promise<boolean>;,\n  };\n\n  /**\n   *  Server-side verification parameter.\n   */\n  interface VerifyConfig {\n    /**\n     *  User Id.\n     */\n    userId: number;\n\n    /**\n     *  'Custom data.\n     */\n    data: boolean;\n  }\n\n  interface Location {\n    /**\n     * Latitude.\n     */\n    lat?: number;\n    /**\n     * Longitude.\n     */\n    lng?: number;\n  }\n\n  /**\n   *  Ad request parameters.\n   */\n  interface AdParam {\n    /**\n     *  Ad content rating. Check ContentClassification for possible values.\n     */\n    adContentClassification?: ContentClassification;\n\n    /**\n     *  Country code corresponding to the language in which an ad needs to be\n     *  returned for an app.\n     */\n    appCountry?: string;\n\n    /**\n     * Location.\n     */\n    location?: Location;\n\n    /**\n     *  Language in which an ad needs to be returned for an app.\n     */\n    appLang?: string;\n\n    /**\n     *  Home country code.\n     */\n    belongCountryCode?: string;\n\n    /**\n     *  Gender. Check Gender for possible values.\n     */\n    gender?: Gender;\n\n    /**\n     *  The setting of requesting personalized ads. Check NonPersonalizedAd\n     *  for possible values.\n     */\n    nonPersonalizedAd?: NonPersonalizedAd;\n\n    /**\n     *  Origin of request.\n     */\n    requestOrigin?: string;\n\n    /**\n     *  The setting of processing ad requests according to the COPPA.\n     *  Check TagForChild for possible values.\n     */\n    tagForChildProtection?: TagForChild;\n\n    /**\n     *  The setting of processing ad requests as directed to users under\n     *  the age of consent. Check UnderAge for possible values.\n     */\n    tagForUnderAgeOfPromise?: UnderAge;\n\n    /**\n     *  Targeting content url.\n     */\n    targetingContentUrl?: string;\n\n    /**\n     *  Whether the location information is carried in an ad request.\n     */\n    requestLocation?: boolean;\n\n    /**\n     *  Requested creative type of a native ad. \n     */\n    detailedCreativeTypes?: number[];\n\n    /**\n     *  Sets the maximum transaction timeout interval (including the network delay), in milliseconds.\n     */\n    tMax?: number;\n\n    /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n    biddingParam?: BiddingParam;\n\n     /**\n     *  Ad unit ID. The real-time bidding parameters are set on a per ad unit basis.\n     */\n     slotId?: string;\n\n     /**\n     *  Ad parameters requested by publisher apps for real-time bidding.\n     */\n     biddingParamMap?: BiddingParam;\n  }\n\n  /**\n   *  Information about the reward item in a rewarded ad.\n   */\n  interface Reward {\n    /**\n     *  The name of a reward item.\n     */\n    name: string;\n\n    /**\n     *  The number of reward items.\n     */\n    amount: number;\n  }\n\n  /**\n   *  Information about the reward item in a rewarded ad.\n   */\n  interface RewardAd {\n    /**\n     *  User id.\n     */\n    userId: string;\n\n    /**\n     *  Custom data.\n     */\n    data: string;\n\n    /**\n     *  Reward item.\n     */\n    reward: Reward;\n\n    /**\n     *  Shows whether a rewarded ad is successfully loaded.\n     */\n    isLoaded: boolean;\n  }\n\n  /**\n   *  HMSReward module for reward ads.\n   */\n  export const HMSReward = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n\n    /**\n     *  Sets to display ad on HMS Core app\n     */\n    loadWithAdId(loadWithAdId: boolean): Promise<null>;,\n\n    /**\n     *  Sets user id\n     */\n    setUserId(userID: string): Promise<null>;,\n\n    /**\n     *  Sets custom data in string\n     */\n    setData(data: string): Promise<null>;,\n\n    /**\n     *  Sets custom data in string\n     */\n    setVerifyConfig(verifyConfig: VerifyConfig): Promise<null>;,\n\n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n    /**\n     *  Video configuration that controls video playback.\n     */\n    setVideoConfiguration(videoConfiguration: VideoConfiguration): Promise<null>;,\n\n    /**\n     *  Sets custom data in string\n     */\n    pause(): Promise<null>;,\n\n    /**\n     *  Resumes the ad.\n     */\n    resume(): Promise<null>;,\n\n    /**\n     *  Destroys the ad.\n     */\n    destroy(): Promise<null>;,\n\n    /**\n     *  Shows the ad.\n     */\n    show(): Promise<null>;,\n\n    /**\n     *  Requests ad.\n     */\n    loadAd(): Promise<null>;,\n\n    /**\n     *  Checks whether ad is successfully loaded\n     */\n    isLoaded(): Promise<boolean>;,\n\n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: (response: RewardAd) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when fails to load.\n     */\n    adFailedToLoadListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when fails to load.\n     */\n    adFailedToLoadListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad fails to be displayed.\n     */\n    adFailedToShowListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad fails to be displayed.\n     */\n    adFailedToShowListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is opened.\n     */\n    adOpenedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is opened.\n     */\n    adOpenedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is closed.\n     */\n    adClosedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is closed.\n     */\n    adClosedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when a reward is provided.\n     */\n    adRewardedListenerAdd(listenerFn: (response: Reward) => void): void;,\n\n    /**\n     *  Remove the listener for the event when a reward is provided.\n     */\n    adRewardedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when user leaves the app.\n     */\n    adLeftAppListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when user leaves the app.\n     */\n    adLeftAppListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is completed.\n     */\n    adCompletedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is completed.\n     */\n    adCompletedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is started.\n     */\n    adStartedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is started.\n     */\n    adStartedListenerRemove(): void;,\n\n    /**\n     *  Remove all listeners for events of HMSReward\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  HMSSplash module for splash ads\n   */\n  export const HMSSplash = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n\n    /**\n     *  Sets logo text.\n     */\n    setLogoText(logoText: string): Promise<null>;,\n\n    /**\n     *  Sets copyright text.\n     */\n    setCopyrightText(cpyrightText: string): Promise<null>;,\n\n    /**\n     *  Sets screen orientation\n     */\n    setOrientation(orientation: number): Promise<null>;,\n\n    /**\n     *  Sets default app launch image in portrait mode,\n     *  which is displayed before a splash ad is displayed\n     */\n    setSloganResource(sloganResource: string): Promise<null>;,\n\n    /**\n     *  Sets default app launch image in landscape mode,\n     *  which is displayed before a splash ad is displayed.\n     */\n    setWideSloganResource(wideSloganResource: string): Promise<null>;,\n\n    /**\n     *  Sets app logo.\n     */\n    setLogoResource(logoResource: string): Promise<null>;,\n\n    /**\n     *  Sets app text resource.\n     */\n    setMediaNameResource(mediaNameResource: string): Promise<null>;,\n\n    /**\n     *  Sets the audio focus preemption policy for a video splash ad.\n     */\n    setAudioFocusType(audioFocusType: AudioFocusType): Promise<null>;,\n\n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n    /**\n     *  Obtains the real-time bidding data returned to a publisher app.\n     */\n    getBiddingInfo(): Promise<BiddingInfo>;,\n\n    /**\n     *  Pauses ad.\n     */\n    pause(): Promise<null>;,\n\n    /**\n     *  Resumes the ad.\n     */\n    resume(): Promise<null>;,\n\n    /**\n     *  Destroys the ad.\n     */\n    destroy(): Promise<null>;,\n\n    /**\n     *  Shows the ad.\n     */\n    show(): Promise<null>;,\n\n    /**\n     *  Checks whether ad is successfully loaded.\n     */\n    isLoaded(): Promise<boolean>;,\n\n    /**\n     *  Checks whether a splash ad is being loaded.\n     */\n    isLoading(): Promise<boolean>;,\n\n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad fails to load.\n     */\n    adFailedToLoadListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad fails to load.\n     */\n    adFailedToLoadListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is dismissed.\n     */\n    adDismissedListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is dismissed.\n     */\n    adDismissedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is shown.\n     */\n    adShowedListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is shown.\n     */\n    adShowedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is clicked.\n     */\n    adClickListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is clicked.\n     */\n    adClickListenerRemove(): void;,\n\n    /**\n     *  Remove all listeners for events of HMSSplash\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  Interstitial ad.\n   */\n  interface InterstitialAd {\n    /**\n     *  The ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Shows whether ad loading is complete.\n     */\n    isLoaded: boolean;\n\n    /**\n     *  Shows whether ads are being loaded.\n     */\n    isLoading: boolean;\n  }\n\n  /**\n   *  HMSInterstitial module for Interstitial ads\n   */\n  export const HMSInterstitial = {\n    /**\n     *  Sets ad slot id.\n     */\n    setAdId(adSlotId: string): Promise<null>;,\n\n    /**\n     *  Sets parameters of ad request\n     */\n    setAdParam(adParam: AdParam): Promise<null>;,\n\n    /**\n     *  Video configuration that controls video playback.\n     */\n    setVideoConfiguration(videoConfiguration: VideoConfiguration): Promise<null>;,\n\n    /**\n     *  Initiates a request to load an ad.\n     */\n    loadAd(): Promise<null>;,\n\n    /**\n     *  Displays an interstitial ad.\n     */\n    show(): Promise<null>;,\n\n    /**\n     *  Checks whether ad loading is complete.\n     */\n    isLoaded(): Promise<boolean>;,\n\n    /**\n     *  Checks whether ad is loading.\n     */\n    isLoading(): Promise<boolean>;,\n\n    /**\n     *  Add listener for the event when ad fails to load.\n     */\n    adFailedListenerAdd(listenerFn: (response: Error) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad fails to load.\n     */\n    adFailedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is closed.\n     */\n    adClosedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is closed.\n     */\n    adClosedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when the user leaves the app.\n     */\n    adLeaveListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event the user leaves the app.\n     */\n    adLeaveListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is displayed.\n     */\n    adOpenedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is displayed.\n     */\n    adOpenedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad loads.\n     */\n    adLoadedListenerAdd(listenerFn: (response: InterstitialAd) => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad loads.\n     */\n    adLoadedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is clicked.\n     */\n    adClickedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is clicked.\n     */\n    adClickedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad impression is detected.\n     */\n    adImpressionListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad impression is detected.\n     */\n    adImpressionListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad is completed.\n     */\n    adCompletedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad is completed.\n     */\n    adCompletedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when ad starts.\n     */\n    adStartedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when ad starts.\n     */\n    adStartedListenerRemove(): void;,\n\n    /**\n     *  Remove all listeners for events of HMSInterstitial\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  Describes the install referrer information.\n   */\n  interface ReferrerDetails {\n    /**\n     *  Install referrer information.\n     */\n    installReferrer: string;\n\n    /**\n     *  Obtains channel information.\n     */\n    installChannel: string;\n\n    /**\n     *  The app installation timestamp, in milliseconds.\n     */\n    installBeginTimestampMillisecond: number;\n\n    /**\n     *  The app installation timestamp, in seconds.\n     */\n    installBeginTimestampSeconds: number;\n\n    /**\n     *  The ad click timestamp, in milliseconds.\n     */\n    referrerClickTimestampMillisecond: number;\n\n    /**\n     *  The ad click timestamp, in seconds.\n     */\n    referrerClickTimestampSeconds: number;\n  }\n\n  /**\n   *  Install referrer connection response.\n   */\n  interface InstallReferrerResponse {\n    /**\n     *  Response code.\n     */\n    responseCode: number;\n\n    /**\n     *  Response message.\n     */\n    responseMessage: string;\n  }\n\n  /**\n   *  HMSInstallReferrer module for install referrer functions\n   */\n  export const HMSInstallReferrer = {\n    /**\n     *  Starts to connect to the install referrer service. The first string\n     *  argument should be one of values of [CallMode](#callmode). And the\n     *  boolean argument indicates test mode. The last string argument is the\n     *  name of the package that the service receives information about.\n     */\n    startConnection(callMode: CallMode, isTest: boolean): Promise<null>;,\n\n    /**\n     *  Ends the service connection and releases all occupied resources.\n     */\n    endConnection(): Promise<null>;,\n\n    /**\n     *  Obtains install referrer information.\n     */\n    getReferrerDetails(): Promise<ReferrerDetails>;,\n\n    /**\n     *  Indicates whether the service connection is ready.\n     */\n    isReady(): Promise<boolean>;,\n\n    /**\n     *  Add listener for the event when service connection is complete\n     */\n    serviceConnectedListenerAdd(listenerFn: (response: InstallReferrerResponse) => void): void;,\n\n    /**\n     *  Remove the listener for the event when service connection is complete\n     */\n    serviceConnectedListenerRemove(): void;,\n\n    /**\n     *  Add listener for the event when service is crashed or killed.\n     */\n    serviceDisconnectedListenerAdd(listenerFn: () => void): void;,\n\n    /**\n     *  Remove the listener for the event when service is crashed or killed.\n     */\n    serviceDisconnectedListenerRemove(): void;,\n\n    /**\n     *  Remove all listeners for events of HMSInstallReferrer\n     */\n    allListenersRemove(): void;,\n  };\n\n  /**\n   *  React prop defining banner ad sizes.\n   */\n  interface BannerAdSizeProp {\n    /**\n     *  Banner ad sizes. `BannerAdSizes` for possible values.\n     */\n    bannerAdSize: BannerAdSizes;\n  }\n\n  /**\n   *  Banner information from banner load event.\n   */\n  interface BannerInfo {\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Shows whether banner is loading.\n     */\n    isLoading: boolean;\n\n    /**\n     *  BannerAdSize information.\n     */\n    bannerAdSize: BannerAdSizes;\n  }\n\n  /**\n   *  Ad error.\n   */\n  interface Error {\n    /**\n     *  Error code.\n     */\n    errorCode: number;\n\n    /**\n     *  Error message.\n     */\n    errorMessage: string;\n  }\n\n  /**\n   *  Events triggered by the map.\n   */\n  interface AdEvent<T = {}> extends NativeSyntheticEvent<T> { }\n\n  /**\n   *  Props for <HMSBanner> component.\n   */\n  interface HMSBannerProps extends ViewProps {\n    /**\n     *  The banner ad size.\n     */\n    bannerAdSize: BannerAdSizeProp;\n\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad fails to load.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when ad is opened.\n     */\n    onAdOpened?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is clicked.\n     */\n    onAdClicked?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is closed.\n     */\n    onAdClosed?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad impression is detected.\n     */\n    onAdImpression?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when user leaves the app.\n     */\n    onAdLeave?: (event: AdEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows banner ads.\n   */\n  export class HMSBanner extends React.Component<HMSBannerProps, any> {\n    /**\n     *  Gets information related to HMSBanner component.\n     */\n    getInfo(): Promise<BannerInfo>;\n\n    /**\n     *  Loads banner.\n     */\n    loadAd(): void;\n\n    /**\n     *  Sets a rotation interval for banner ads. Input is rotation\n     *  interval, in seconds. It should range from 30 to 120.\n     */\n    setRefresh(interval: number): void;\n\n    /**\n     *  Pauses any additional processing related to ad.\n     */\n    pause(): void;\n\n    /**\n     *  Resumes ad after the pause() method is called last time.\n     */\n    resume(): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n  }\n\n  interface PlayTime {\n    /**\n     *  Played duration, in milliseconds.\n     */\n    playTime: number;\n  }\n\n  interface WithPercentage {\n    /**\n     *  Playback progress, in percentage.\n     */\n    percentage: number;\n  }\n\n  interface WithExtra {\n    /**\n     *  Additional information.\n     */\n    extra: number;\n  }\n\n  interface WithError {\n    /**\n     *  Error information.\n     */\n    error: Error;\n  }\n\n  /**\n   *  Instream ad information.\n   */\n  interface InstreamAd {\n    /**\n     *  Indicates whether ad has been clicked.\n     */\n    isClicked: boolean;\n\n    /**\n     *  Indicates whether an ad has expired.\n     */\n    isExpired: boolean;\n\n    /**\n     *  Indicates whether ad is an image ad\n     */\n    isImageAd: boolean;\n\n    /**\n     *  Indicates whether ad has been displayed.\n     */\n    isShown: boolean;\n\n    /**\n     *  Indicates whether ad is a video ad\n     */\n    isVideoAd: boolean;\n\n    /**\n     *  Duration of a roll ad, in milliseconds.\n     */\n    duration: number;\n\n    /**\n     *  Redirection link to `Why this ad`.\n     */\n    whyThisAd: string;\n\n    /**\n     *  Text to be displayed on a button.\n     */\n    callToAction: string;\n\n    /**\n     *  Indicates whether a task is an ad task.\n     */\n    adSign: string;\n\n    /**\n     *  Ad source.\n     */\n    adSource: string;\n\n    /**\n     * Checks whether advertiser information is delivered for the current ad.\n     */\n    hasAdvertiserInfo: boolean;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    advertiserInfo?: AdvertiserInfo[];\n\n    /**\n     * Indicates whether ad transparency information is displayed\n     */\n    isTransparencyOpen: boolean;\n\n    /**\n     * Obtains the redirection URL of the ad transparency information.\n     */\n    transparencyTplUrl: string;\n  }\n\n  interface AdvertiserInfo {\n\n    /**\n     * Obtains the advertiser information sequence.\n     */\n    seq: number;\n\n    /**\n     * Obtains the advertiser information type.\n     */\n    key: string;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    value: string;\n  }\n\n  interface InstreamInfo {\n    /**\n     *  Indicates whether ad is being played.\n     */\n    isPlaying: boolean;\n\n    /**\n     *  Indicates whether ad is loading.\n     */\n    isLoading: boolean;\n\n    /**\n     *  Ad slot id\n     */\n    adId: string;\n\n    /**\n     *  Maximum total duration of roll ads, in seconds\n     */\n    totalDuration: number;\n\n    /**\n     *  Maximum number of roll ads.\n     */\n    maxCount: number;\n\n    /**\n     *  List of roll ads.\n     */\n    instreamAds: InstreamAd[];\n  }\n\n  /**\n   *  Props for <HMSInstream> component.\n   */\n  interface HMSInstreamProps extends ViewProps {\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n\n    /**\n     *  Maximum number of roll ads.\n     */\n    maxCount: number;\n\n    /**\n     *  Maximum total duration of roll ads, in seconds\n     */\n    totalDuration: number;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Listener for the event called when ad is muted\n     */\n    onMute?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is unmuted\n     */\n    onUnmute?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when roll ads are successfully loaded.\n     */\n    onAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when roll ads fail to be loaded.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when a roll ad is switched to another.\n     */\n    onSegmentMediaChange?: (event: AdEvent<InstreamAd>) => void;\n\n    /**\n     *  Listener for the event called during the playback of a roll ad.\n     */\n    onMediaProgress?: (event: AdEvent<PlayTime | WithPercentage>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad starts.\n     */\n    onMediaStart?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad is paused.\n     */\n    onMediaPause?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad stops.\n     */\n    onMediaStop?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when the playback of a roll ad\n     *  is complete.\n     */\n    onMediaCompletion?: (event: AdEvent<PlayTime>) => void;\n\n    /**\n     *  Listener for the event called when a roll ad fails to be played.\n     */\n    onMediaError?: (event: AdEvent<PlayTime | WithExtra | WithError>) => void;\n\n    /**\n     *  Listener for the event called when ad is clicked.\n     */\n    onClick?: (event: AdEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows instream ads.\n   */\n  export class HMSInstream extends React.Component<HMSInstreamProps, any> {\n    /**\n     *  Gets information related to HMSInstream component.\n     */\n    getInfo(): Promise<InstreamInfo>;\n\n    /**\n     *  Loads instream ad.\n     */\n    loadAd(): void;\n\n    /**\n     *  Sets loaded ads to view in order to show them\n     */\n    register(): void;\n\n    /**\n     *  Mutes ad.\n     */\n    mute(): void;\n\n    /**\n     *  Unmutes ad.\n     */\n    unmute(): void;\n\n    /**\n     *  Stops ad.\n     */\n    stop(): void;\n\n    /**\n     *  Pauses ad.\n     */\n    pause(): void;\n\n    /**\n     *  Plays ad.\n     */\n    play(): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n\n    /**\n     * Displays the advertiser information dialog box.\n     */\n    showAdvertiserInfoDialog(showWhyThisAd: boolean): void;\n\n    /**\n     * Hides the advertiser information dialog box.\n     */\n    hideAdvertiserInfoDialog(): void;\n\n    /**\n     * Shows the ad transparency dialog box.\n     */\n    showTransparencyDialog(location?: number[]): void;\n\n    /**\n     * Hides the ad transparency dialog box.\n     */\n    hideTransparencyDialog(): void;\n  }\n\n  /**\n   *  React prop defining media type of the ad.\n   */\n  interface DisplayFormProp {\n    /**\n     *  Error code.\n     */\n    mediaType: NativeMediaTypes;\n\n    /**\n     *  Ad slot id.\n     */\n    adId: string;\n  }\n\n  /**\n   *  Ad size.\n   */\n  interface AdSize {\n    /**\n     *  Ad height, in dp.\n     */\n    height: number;\n\n    /**\n     *  Ad width, in dp.\n     */\n    width: number;\n  }\n\n  /**\n   *  Video configuration used to control video playback.\n   */\n  interface VideoConfiguration {\n    /**\n     *  The video playback scenario where the audio focus needs to be obtained.\n     */\n    audioFocusType?: AudioFocusType;\n\n    /**\n     *  The setting for using custom video control.\n     */\n    isCustomizeOperateRequested?: boolean;\n\n    /**\n     *  Setting indicating whether a video ad can be displayed\n     *  in full-screen mode upon a click.\n     */\n    isClickToFullScreenRequested?: boolean;\n\n    /**\n     *  The setting for muting video when it starts.\n     */\n    isStartMuted?: boolean;\n\n    /**\n     *  Obtains the type of the network allowed for automatic video playback.\n     */\n    autoPlayNetWork?: AutoPlayNetType;\n  }\n\n  /**\n   *  Native ad configuration.\n   */\n  interface NativeAdConfiguration {\n    /**\n     *  Ad size.\n     */\n    adSize?: AdSize;\n\n    /**\n     *  Position of an ad choice icon.\n     */\n    choicesPosition?: ChoicesPosition;\n\n    /**\n     *  Direction of an ad image.\n     */\n    mediaDirection?: Direction;\n\n    /**\n     *  Aspect ratio of an ad image.\n     */\n    mediaAspect?: number;\n\n    /**\n     *  Video Configuration.\n     */\n    videoConfiguration?: VideoConfiguration;\n\n    /**\n     *  The setting for requesting multiple ad images.\n     */\n    isRequestMultiImages?: boolean;\n\n    /**\n     *  The setting for enabling the SDK to download native ad images.\n     */\n    isReturnUrlsForImages?: boolean;\n  }\n\n  /**\n   *  Styles of the components in native ads.\n   */\n  interface AdTextStyle {\n    /**\n     *  Font size.\n     */\n    fontSize?: number;\n\n    /**\n     *  Color.\n     */\n    color?: string;\n\n    /**\n     *  Background color.\n     */\n    backgroundColor?: string;\n\n    /**\n     *  Visibility.\n     */\n    visibility?: boolean;\n  }\n\n  /**\n   *  View options for components in Native ads.\n   */\n  interface ViewOptionsProp {\n    /**\n     *  The option for showing media content.\n     */\n    showMediaContent?: boolean;\n\n    /**\n     *  The image scale type.\n     */\n    mediaImageScaleType?: ScaleType;\n\n    /**\n     *  The style of ad source.\n     */\n    adSourceTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad flag.\n     */\n    adFlagTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad title.\n     */\n    titleTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad description.\n     */\n    descriptionTextStyle?: AdTextStyle;\n\n    /**\n     *  The style of ad call-to-action button.\n     */\n    callToActionStyle?: AdTextStyle;\n  }\n\n  interface DislikeAdReason {\n    /**\n     *  The reason why a user dislikes an ad.\n     */\n    description: string;\n  }\n\n  /**\n   *  Video controller, which implements video control such as\n   *  playing, pausing, and muting a video.\n   */\n  interface VideoOperator {\n    /**\n     *  The video aspect ratio.\n     */\n    aspectRatio: number;\n\n    /**\n     *  Shows whether ad content contains a video.\n     */\n    hasVideo: boolean;\n\n    /**\n     *  Shows whether a custom video control is used for a video ad.\n     */\n    isCustomizeOperateEnabled: boolean;\n\n    /**\n     *  Shows whether click to full screen option enabled for a video ad.\n     */\n    isClickToFullScreenEnabled: boolean;\n  }\n\n  /**\n   *  Native ad information.\n   */\n  interface NativeAd {\n    /**\n     *  Indicates whether a task is an ad task.\n     */\n    adSign: string;\n\n    /**\n     *  Ad source.\n     */\n    adSource: string;\n\n    /**\n     *  Ad description.\n     */\n    description: string;\n\n    /**\n     *  The text to be displayed on a button, for example,\n     *  View Details or Install.\n     */\n    callToAction: string;\n\n    /**\n     *  Ad title.\n     */\n    title: string;\n\n    /**\n     *  The choices of not displaying the current ad.\n     */\n    dislikeAdReasons: DislikeAdReason[];\n\n    /**\n     *  Redirection link to Why this ad.\n     */\n    whyThisAd: string;\n\n    /**\n     *  Unique ID of an ad.\n     */\n    uniqueId: string;\n\n    /**\n     *  Ad creative type.\n     */\n    creativeType: string;\n\n    /**\n     *  Video operator used for the ad.\n     */\n    videoOperator: VideoOperator | Muted;\n\n    /**\n     *  Shows whether custom tap gestures are enabled.\n     */\n    isCustomClickAllowed: boolean;\n\n    /**\n     *  Shows whether custom ad closing is enabled.\n     */\n    isCustomDislikeThisAdEnabled: boolean;\n\n    /**\n     * Checks whether advertiser information is delivered for the current ad.\n     */\n    hasAdvertiserInfo: boolean;\n\n    /**\n     * Obtains the advertiser information.\n     */\n    advertiserInfo?: AdvertiserInfo[];\n\n    /**\n     * Indicates whether ad transparency information is displayed\n     */\n    isTransparencyOpen: boolean;\n\n    /**\n     * Obtains the redirection URL of the ad transparency information.\n     */\n    transparencyTplUrl: string;\n\n    /**\n     * Obtains the app name.\n     */\n    appName: string;\n\n    /**\n     * Obtains the app operator information.\n     */\n    developerName: string;\n\n    /**\n     * Obtains the app version number.\n     */\n    versionName: string;\n\n    /**\n     * Obtains the ad purpose.\n     */\n    interactionType: number;\n\n    /**\n     * Obtains the name of the promoted entity.\n     */\n    promoteName: string;\n\n    /**\n     * Obtains the promotion subtype.\n     */\n    promoteType: number;\n  }\n\n  interface NativeAdLoader {\n    /**\n     *  Shows whether ads are being loaded.\n     */\n    isLoading: boolean;\n  }\n\n  /**\n   *  Information related to native ad returned when ad is loaded.\n   */\n  interface NativeInfo {\n    /**\n     *  Native ad information.\n     */\n    nativeAd: NativeAd;\n\n    /**\n     *  Native ad configuration information.\n     */\n    nativeAdConfiguration: NativeAdConfiguration;\n\n    /**\n     *  Native ad loader information.\n     */\n    nativeAdLoader: NativeAdLoader;\n  }\n\n  interface Muted {\n    /**\n     *  Shows whether a video is muted.\n     */\n    isMuted: boolean;\n  }\n\n  /**\n   *  Props for <HMSNative> component.\n   */\n  interface HMSNativeProps extends ViewProps {\n    /**\n     *  The object parameter that has ad slot id and media type information.\n     */\n    displayForm: DisplayFormProp;\n\n    /**\n     *  Ad request parameter.\n     */\n    adParam?: AdParam;\n\n    /**\n     *  Native ad configuration parameter.\n     */\n    nativeConfig?: NativeAdConfiguration;\n\n    /**\n     *  View options parameter.\n     */\n    viewOptions?: ViewOptionsProp;\n\n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onNativeAdLoaded?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad is disliked.\n     */\n    onAdDisliked?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad fails to load.\n     */\n    onAdFailed?: (event: AdEvent<Error>) => void;\n\n    /**\n     *  Listener for the event called when ad impression is detected.\n     */\n    onAdImpression?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video starts playing.\n     */\n    onVideoStart?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video plays.\n     */\n    onVideoPlay?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video ends.\n     */\n    onVideoEnd?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when ad video pauses.\n     */\n    onVideoPause?: (event: AdEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when the mute status of a video changes.\n     */\n    onVideoMute?: (event: AdEvent<Muted>) => void;\n  }\n\n  /**\n   *  React component that shows native ads.\n   */\n  export class HMSNative extends React.Component<HMSNativeProps, any> {\n    /**\n     *  Gets information related to HMSNative component.\n     */\n    getInfo(): Promise<NativeInfo>;\n\n    /**\n     *  Loads native ad.\n     */\n    loadAd(): void;\n\n    /**\n     *  Dislikes ad with description.\n     */\n    dislikeAd(reason: string): void;\n\n    /**\n     *  Destroys ad.\n     */\n    destroy(): void;\n\n    /**\n     *  Goes to the page explaining why an ad is displayed.\n     */\n    gotoWhyThisAdPage(): void;\n\n    /**\n     *  Enables custom tap gestures.\n     */\n    setAllowCustomClick(): void;\n\n    /**\n     *  Reports a custom tap gesture.\n     */\n    recordClickEvent(): void;\n\n    /**\n     *  Reports an ad impression.\n     */\n    recordImpressionEvent(data: object): void;\n\n    /**\n     * Displays the advertiser information dialog box.\n     */\n    showAdvertiserInfoDialog(showWhyThisAd: boolean): void;\n\n    /**\n     * Hides the advertiser information dialog box.\n     */\n    hideAdvertiserInfoDialog(): void;\n\n    /**\n     * Shows the privacy policy of the app.\n     */\n    showPrivacyPolicy(): void;\n\n    /**\n     * Shows the app permission list.\n     */\n    showPermissionPage(): void;\n\n    /**\n     * Shows the introduction page of the promoted app.\n     */\n    showAppDetailPage(): void;\n  }\n\n  interface VASTInfo {\n    /**\n     *  VAST ad player informations.\n     */\n    adPlayerConfigs: AdPlayerConfigs;\n \n    /**\n     *  VAST ad Slot informations.\n     */\n    linearAdSlot: LinearAdSlot;\n \n    /**\n     *  VAST ad data informations.\n     */\n    adsData: AdsData;\n \n    /**\n     *  VAST ad video controller informations.\n     */\n    videoControllerInfo: VideoControllerInfo;\n  }\n \n  interface AdPlayerConfigs {\n    /**\n     *  Obtains player configurations.\n     */\n    playerConfigs: PlayerConfig;\n \n    /**\n     *  Checks whether a linear ad is shown.\n     */\n    isLinearAdShown: boolean;\n \n    /**\n     *  Checks whether a linear ad is being played.\n     */\n    isLinearPlaying: boolean;\n \n    /**\n     *  Checks whether a Nonlinear ad is being played.\n     */\n    isNonlinearPlaying: boolean;\n \n    /**\n     *  Called when a user clicks the return button.\n     */\n    onBackPressed: boolean;\n  }\n \n  interface PlayerConfig {\n    /**\n     *  Checks whether the landscape mode is enabled.\n     */\n    enableRotation?: boolean;\n \n    /**\n     *  Checks whether a linear ad is skippable.\n     */\n    skipLinearAd?: boolean;\n \n    /**\n     *  Checks whether the player adapts to a notched screen.\n     */\n    isEnableCutout?: boolean;\n \n    /**\n     *  Checks whether the portrait mode is enabled.\n     */\n    isEnablePortrait?: boolean;\n \n    /**\n     *  Checks whether the player is forcibly muted.\n     */\n    isForceMute?: boolean;\n \n    /**\n     *  Checks whether the industry icon is displayed.\n     */\n    isIndustryIconShow?: boolean;\n  }\n \n  interface LinearAdSlot {\n    /**\n     *  Obtains the ad creative matching strategy.\n     */\n    creativeMatchStrategy: CreativeMatchStrategy;\n \n    /**\n     *  Obtains the ad unit height.\n     */\n    height: number;\n \n    /**\n     *  Obtains the ad unit width.\n     */\n    width: number;\n \n    /**\n     *  Obtains the maximum number of ads in a pod.\n     */\n    maxAdPods: number;\n \n    /**\n     *  Obtains the screen orientation.\n     */\n    orientation: number;\n \n    /**\n     *  Obtains ad request configurations.\n     */\n    requestOptions: VASTRequestOptions;\n \n    /**\n     *  Obtains the total ad duration.\n     */\n    totalDuration: number;\n \n    /**\n     *  Mobile data can be used to preload ad content.\n     */\n    isAllowMobileTraffic: boolean;\n \n    /**\n     *  Obtains the ad unit ID.\n     */\n    slotId: string;\n  }\n \n  interface VASTRequestOptions {\n    /**\n     *  Ad content rating. Check ContentClassification for possible values.\n     */\n    adContentClassification?: string;\n \n    /**\n     *  Country/Region for an app.\n     */\n    appCountry?: string;\n \n    /**\n     *  Language for an app.\n     */\n    appLang?: string;\n \n    /**\n     *  Obtains the user consent string that complies with TCF v2.0.\n     */\n    consent?: string;\n \n    /**\n     *  Indicates whether to request only non-personalized ads. Check NonPersonalizedAd for possible values.\n     */\n    nonPersonalizedAd?: number;\n \n    /**\n     *  Child-directed setting. Check TagForChild for possible values.\n     */\n    tagForChildProtection?: number;\n \n    /**\n     *  Setting directed to users under the age of consent. Check UnderAge for possible values.\n     */\n    tagForUnderAgeOfPromise?: number;\n \n    /**\n     *  Checks whether location information is requested.\n     */\n    isRequestLocation?: boolean;\n  }\n \n  interface CreativeMatchStrategy {\n    /**\n     *  Obtains the ad creative matching strategy.\n     */\n    creativeMatchType: CreativeMatchType;\n    /**\n     *  Obtains the expected ad creative height.\n     */\n    height: number;\n    /**\n     *  Obtains the expected ad creative width.\n     */\n    width: number;\n  }\n \n  interface AdsData {\n    /**\n     *  Obtains the list of linear ad creatives.\n     */\n    linearAdCreatives: LinearCreatives[];\n \n    /**\n     *  Obtains the list of backup ad creatives.\n     */\n    backupAdCreatives: LinearCreatives[];\n  }\n \n  interface LinearCreatives {\n    /**\n     *  Obtains an ad extended field.\n     */\n    adExtensions: CreativeExtension;\n \n    /**\n     *  Obtains an ad asset extended field.\n     */\n    typeToCreativeExtensions: CreativeExtension;\n \n    /**\n     *  Obtains the ad asset ID.\n     */\n    contentId: string;\n \n    /**\n     *  Obtains the ad request ID.\n     */\n    requestId: string;\n \n    /**\n     *  Obtains the impression ID.\n     */\n    showId: string;\n \n    /**\n     *  Obtains the ad unit ID.\n     */\n    slotId: string;\n \n    /**\n     *  Obtains the ad asset type.\n     */\n    type: string;\n \n    /**\n     *  Obtains the ad asset URL.\n     */\n    url: string;\n  }\n \n  interface CreativeExtension {\n    /**\n     *  Obtains the type of an extended field.\n     */\n    type: string;\n \n    /**\n     *  Obtains the value of an extended field.\n     */\n    value: string;\n  }\n \n  interface VideoControllerInfo {\n    /**\n     *  Checks whether the player is muted.\n     */\n    isMute: boolean;\n \n    /**\n     *  Obtains the ID of the ad player layout file.\n     */\n    layoutId: number;\n  }\n \n  interface PlayState {\n    /**\n     *  Play state code.\n     */\n    playStateCode: number;\n \n    /**\n     *  Player status.\n     */\n    playStateMessage: string;\n  }\n \n  interface Volume {\n    /**\n     *  System media volume.\n     */\n    volume: number;\n  }\n \n  interface ScreenState {\n    /**\n     *  Screen Status Code.\n     */\n    screenStateCode: number;\n \n    /**\n     *  Screen viewing mode.\n     */\n    screenStateMessage: string;\n  }\n \n  interface Progress {\n    /**\n     *  Total duration of all assets to be played, in milliseconds.\n     */\n    duration: number;\n \n    /**\n     *  Played duration, in milliseconds.\n     */\n    currentPosition: number;\n \n    /**\n     *  Duration before which an ad can be skipped, in milliseconds.\n     */\n    skipDuration: number;\n  }\n \n  interface VASTAdParam {\n    /**\n     *  Ad unit ID.\n     */\n    adId: string;\n \n    /**\n     *  Total ad duration.\n     */\n    totalDuration: number;\n \n    /**\n     *  Ad creative matching strategy. Check CreativeMatchType for possible values.\n     */\n    creativeMatchStrategy: number;\n \n    /**\n     *  Whether mobile data can be used to preload ad content.\n     */\n    allowMobileTraffic: boolean;\n \n    /**\n     *  Ad Orientation. Check Orientation for possible values.\n     */\n    adOrientation: number;\n \n    /**\n     *  Maximum number of ads in a pod that can be requested each time.\n     */\n    maxAdPods: number;\n \n    /**\n     *  Ad request configurations.\n     */\n     requestOption: VASTRequestOptions;\n  }\n\n  interface AppInstalledNotifyCheck {\n    /**\n     *  Obtains the style of an app activation reminder pop-up.\n     */\n    style: number;\n \n    /**\n     *  Checks whether an app activation reminder pop-up is enabled.\n     */\n    notify: boolean;\n  }\n \n  interface HMSVastProps extends ViewProps {\n    /**\n     *  Indicates whether an ad is a test ad.\n     *   true: yes\n     *   false: no\n     */\n    isTestAd?: boolean;\n \n    /**\n     *  Indicates whether ad video player is custom or default.\n     */\n    isCustomVideoPlayer?: boolean;\n \n    /**\n     *  Indicates whether ad is load with AdsData.\n     */\n    isAdLoadWithAdsData?: boolean;\n \n    /**\n     *  Ad request parameters.\n     */\n    adParam?: VASTAdParam;\n \n    /**\n     *  Ad player attributes.\n     */\n    playerConfigs?: PlayerConfig;\n \n    /**\n     *  Function to handle the event when an ad load successfuly and isAdLoadWithAdsData value is true.\n     */\n    onLoadSuccess?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when ad loading is failed and isAdLoadWithAdsData value is true.\n     */\n    onLoadFailed?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when an ad is loaded.\n     */\n    onSuccess?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Listener for the event called when ad loads.\n     */\n    onFailed?: (event: AdEvent<Error>) => void;\n \n    /**\n     *  Function to handle the event when ad ad is ready for playback.\n     */\n    onPlayAdReady?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when an ad playback ends.\n     */\n    onPlayAdFinish?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when video starts buffering.\n     */\n    onBufferStart?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when video buffering is complete.\n     */\n    onBufferEnd?: (event: AdEvent<{}>) => void;\n \n    /**\n     *  Function to handle the event when the player status of ad changes.It obtains an event information object as the parameter which has nativeEvent as the key and a PlayState object as the value.\n     */\n    onPlayStateChanged?: (event: AdEvent<PlayState>) => void;\n \n    /**\n     *  Function to handle the event when the system media volume is adjusted.It obtains an event information object as the parameter which has nativeEvent as the key and a Volume object as the value.\n     */\n    onVolumeChanged?: (event: AdEvent<Volume>) => void;\n \n    /**\n     *  Function to handle the event when the screen viewing mode changes.It obtains an event information object as the parameter which has nativeEvent as the key and a ScreenState object as the value.\n     */\n    onScreenViewChanged?: (event: AdEvent<ScreenState>) => void;\n \n    /**\n     *  Function to handle the event when the playback progress changes.It obtains an event information object as the parameter which has nativeEvent as the key and a Progress object as the value.\n     */\n    onProgressChanged?: (event: AdEvent<Progress>) => void;\n  }\n \n  export class HMSVastView extends React.Component<HMSVastProps, any> {\n \n    /**\n     *  Loads vast ad.\n     */\n    loadAd(): void;\n \n    /**\n     *  Obtains information about a component.\n     */\n    getInfo(): Promise<VASTInfo>;\n \n    /**\n     *  Removes an ad asset from the player.\n     */\n    release(): void;\n \n    /**\n     *  Pauses ad playback.\n     */\n    pause(): void;\n \n    /**\n     *  Pauses or resumes playback.\n     */\n    startOrPause(): void;\n \n    /**\n     *  Reports a custom tap gesture.\n     */\n    toggleMuteState(isMute: boolean): void;\n  }\n\n  export enum NonPersonalizedAdEnum {\n    PERSONALIZED = 0,\n    NON_PERSONALIZED = 1,\n  }\n\n  export abstract class HMSVastEnum {\n    static readonly NonPersonalizedAd = NonPersonalizedAdEnum;\n    static readonly ContentClassification = ContentClassification;\n    static readonly TagForChild = TagForChild;\n    static readonly UnderAge = UnderAge;\n    static readonly CreativeMatchType = CreativeMatchType;\n    static readonly Orientation = Orientation;\n  }\n\n  export interface VastSdkConfiguration {\n    /**\n     * Obtains the network request timeout.\n     */\n    httpCallTimeoutMs?: number;\n    /**\n     * Obtains the network connection timeout.\n     */\n    httpConnectTimeoutMs?: number;\n    /**\n     * Obtains the keepalive time for connections between asset download and VAST ad event reporting.\n     */\n    httpKeepAliveDurationMs?: number;\n    /**\n     * Obtains the network response read timeout.\n     */\n    httpReadTimeoutMs?: number;\n    /**\n     * Obtains the maximum number of connections allowed between asset download and VAST ad event reporting.\n     */\n    maxHttpConnections?: number;\n    /**\n     * Obtains the maximum number of redirections allowed for a VAST wrapper.\n     */\n    maxRedirectWrapperLimit?: number;\n    /**\n     * Checks whether an ad is a test ad.\n     */\n    isTest?: boolean;\n    /**\n     * Obtains the number of tracking URLs that have used for each attempt made to report a VAST ad event.\n     */\n    vastEventRetryBatchSize?: number;\n    /**\n     * Obtains the interval between two attempts made to report a VAST ad event.\n     */\n    vastEventRetryIntervalSeconds?: number;\n    /**\n     * Obtains the maximum number of attempts allowed for reporting a VAST ad event.\n     */\n    vastEventRetryUploadTimes?: number;\n  }\n\n  export const HMSVast = {\n    ...HMSVastEnum,\n    /**\n     * Initializes the HUAWEI VAST SDK.\n     */\n    init(vastSdkConfiguration?: VastSdkConfiguration): Promise<string>;,\n    /**\n     * Sets whether consent is obtained from users to use their device data and personal data specified in user agreements.\n     */\n    userAcceptAdLicense(isAcceptOrNot: boolean): Promise<string>;,\n    /**\n     * Obtains the configuration object for initializing the SDK.\n     */\n    getVastSdkConfiguration(): Promise<VastSdkConfiguration>;,\n    /**\n     * Immediately synchronizes the local cache configuration file to the cloud. Once synchronized, the validity period of the file will be recalculated.\n     */\n    updateSdkServerConfig(slotId: string): Promise<string>;\n  }\n  \n  export abstract class HMSAdsPrimeEnum {\n    static readonly ConsentStatus = ConsentStatus;\n    static readonly DebugNeedConsent = DebugNeedConsent;\n    static readonly AudioFocusType = AudioFocusType;\n    static readonly ContentClassification = ContentClassification;\n    static readonly Gender = Gender;\n    static readonly NonPersonalizedAd = NonPersonalizedAd;\n    static readonly TagForChild = TagForChild;\n    static readonly UnderAge = UnderAge;\n    static readonly NativeAdAssetNames = NativeAdAssetNames;\n    static readonly ChoicesPosition = ChoicesPosition;\n    static readonly Direction = Direction;\n    static readonly ScaleType = ScaleType;\n    static readonly BannerAdSizes = BannerAdSizes;\n    static readonly BannerMediaTypes = BannerMediaTypes;\n    static readonly NativeMediaTypes = NativeMediaTypes;\n    static readonly InterstitialMediaTypes = InterstitialMediaTypes;\n    static readonly RewardMediaTypes = RewardMediaTypes;\n    static readonly SplashMediaTypes = SplashMediaTypes;\n    static readonly CallMode = CallMode;\n    static readonly DetailedCreativeTypes = DetailedCreativeTypes;\n    static readonly ActivateStyle = ActivateStyle;\n    static readonly AutoPlayNetType = AutoPlayNetType;\n  }\n\n  /**\n   *  HMSAdsPrime module\n   */\n  export default {\n\n    ...HMSAdsPrimeEnum,\n\n    /**\n     *  Initializes the HUAWEI Ads SDK. The function returns\n     *  a promise that resolves a string 'Hw Ads Initialized'.\n     */\n    init(): Promise<string>;,\n\n    /**\n     *  Enables HMSLogger capability which is used for sending usage\n     *  analytics of Ads SDK's methods to improve the service quality.\n     */\n    enableLogger(): Promise<null>;,\n\n    /**\n     *  Disables HMSLogger capability which is used for sending usage\n     *  analytics of Ads SDK's methods to improve the service quality.\n     */\n    disableLogger(): Promise<null>;,\n\n    /**\n     *  Obtains the version number of the HUAWEI Ads SDK. The function\n     *  returns a promise that resolves a string of the version number.\n     */\n    getSDKVersion(): Promise<string>;,\n\n    /**\n     *  App activation reminder pop-up configuration\n     */\n    appInstalledNotify(notifyVal: boolean, styleVal: number): Promise<AppInstalledNotifyCheck>;,\n\n    /**\n     *  Provides the global ad request configuration.\n     */\n    setRequestOptions(requestOptions: RequestOptions): Promise<RequestOptions>;,\n\n    /**\n     *  Obtains the global request configuration.\n     */\n    getRequestOptions(): Promise<RequestOptions>;,\n\n    /**\n     *  Provides ad consent configuration.\n     */\n    setConsent(consent: Consent): Promise<ConsentResult>;,\n\n    /**\n     *  Sets the user consent string that complies with [TCF 2.0](https://iabeurope.eu/tcf-2-0/)\n     */\n    setConsentString(consent: string): Promise<null>;,\n\n    /**\n     *  Obtains ad consent configuration.\n     */\n    checkConsent(): Promise<ConsentResult>;,\n  };\n}"
  },
  {
    "path": "react-native-hms-adsprime/src/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSAdsPrime from \"./AdsPrime\";\nimport HMSOaid from \"./Oaid\";\nimport HMSBanner from \"./Banner\";\nimport HMSVastView from './VastView';\nimport HMSVast from './Vast';\nimport HMSInstream from \"./Instream\";\nimport HMSNative from \"./Native\";\nimport HMSInstallReferrer from \"./InstallReferrer\";\nimport HMSInterstitial from \"./Interstitial\";\nimport HMSSplash from \"./Splash\";\nimport HMSReward from \"./Reward\";\n\nexport {\n  HMSBanner,\n  HMSInstream,\n  HMSNative,\n  HMSVastView,\n  HMSVast,\n  HMSOaid,\n  HMSInterstitial,\n  HMSInstallReferrer,\n  HMSSplash,\n  HMSReward,\n};\n\nexport default HMSAdsPrime;\n"
  },
  {
    "path": "react-native-hms-adsprime/src/utils.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeEventEmitter } from \"react-native\";\n\nexport const addListenerToModule = function (module, events) {\n  const emitter = new NativeEventEmitter(module);\n  const subscriptions = new Map();\n\n  events.map((event) => {\n    module[event + \"ListenerAdd\"] = (handler) =>\n      subscriptions.set(event, emitter.addListener(event, handler));\n    module[event + \"ListenerRemove\"] = () => subscriptions.get(event).remove();\n  });\n\n  module.allListenersRemove = () => subscriptions.forEach((a) => a.remove());\n};\n"
  },
  {
    "path": "react-native-hms-analytics/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-analytics/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Analytics</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-analytics\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-analytics?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-analytics\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-analytics?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-analytics.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI Analytics Kit offers a rich array of preset analytics models that help you gain an in-depth insight into your users, products, and content. With this insight, you can then take a data-driven approach to make informed decisions for product and marketing optimizations.\n\nThe React Native Plugin enables communication between HUAWEI Analytics SDK and React Native platform. \n\nBy integrating the React-Native HMS Analytics plugin, you can:\n\n- Collect and report custom events through coding.\n- Set a maximum of 25 user attributes.\n- Automate event logging and session calculation with predefined event IDs and parameters.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050157956?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-analytics\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051387084?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001053026463?ha_source=hms1)\n\n### Additional Topics\n\n- [Accessing HUAWEI Analytics](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/android-accessing-0000001050161888?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-analytics/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n        classpath (\"com.huawei.agconnect:agcp:1.9.1.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 31\n    buildToolsVersion \"30.0.3\"\n    defaultConfig {\n        minSdkVersion 18\n        targetSdkVersion 31\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    google()\n    jcenter()\n    mavenCentral()\n}\n\ndependencies {\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:hianalytics:6.12.0.300'\n}"
  },
  {
    "path": "react-native-hms-analytics/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-analytics/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-analytics/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-analytics/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.analytics\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application>\n    <provider\n        android:authorities=\"${applicationId}.hmsAnalyticsProvider\"\n        android:name=\"com.huawei.hms.rn.analytics.HMSAnalyticsProvider\"\n        android:exported=\"false\"/>\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/java/com/huawei/hms/rn/analytics/HMSAnalyticsModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSAnalyticsModule extends ReactContextBaseJavaModule {\n\n    private HMSAnalyticsWrapper hmsAnalyticsWrapper;\n\n    private ReactApplicationContext reactApplicationContext;\n\n    public HMSAnalyticsModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactApplicationContext = reactContext;\n    }\n\n    @Nonnull\n    @Override\n    public String getName() {\n        return \"HMSAnalyticsModule\";\n    }\n\n    @ReactMethod\n    public void getInstance(String routePolicy, final Promise promise) {\n        if (routePolicy != null && !routePolicy.isEmpty()) {\n            hmsAnalyticsWrapper = new HMSAnalyticsWrapper(this.reactApplicationContext, routePolicy, promise);\n        } else {\n            hmsAnalyticsWrapper = new HMSAnalyticsWrapper(this.reactApplicationContext, promise);\n        }\n    }\n\n    @ReactMethod\n    public void setAnalyticsEnabled(boolean enabled, Promise promise) {\n        hmsAnalyticsWrapper.setAnalyticsEnabled(enabled, promise);\n    }\n\n    @ReactMethod\n    public void setUserId(String userId, Promise promise) {\n        hmsAnalyticsWrapper.setUserId(userId, promise);\n    }\n\n    @ReactMethod\n    public void setUserProfile(String name, String value, Promise promise) {\n        hmsAnalyticsWrapper.setUserProfile(name, value, promise);\n    }\n\n    @ReactMethod\n    public void setPushToken(String token, Promise promise) {\n        hmsAnalyticsWrapper.setPushToken(token, promise);\n    }\n\n    @ReactMethod\n    public void setMinActivitySessions(int milliseconds, Promise promise) {\n        hmsAnalyticsWrapper.setMinActivitySessions(milliseconds, promise);\n    }\n\n    @ReactMethod\n    public void setSessionDuration(int milliseconds, Promise promise) {\n        hmsAnalyticsWrapper.setSessionDuration(milliseconds, promise);\n    }\n\n    @ReactMethod\n    public void clearCachedData(Promise promise) {\n        hmsAnalyticsWrapper.clearCachedData(promise);\n    }\n\n    @ReactMethod\n    public void getAAID(Promise promise) {\n        hmsAnalyticsWrapper.getAAID(promise);\n    }\n\n    @ReactMethod\n    public void getUserProfiles(boolean predefined, Promise promise) {\n        hmsAnalyticsWrapper.getUserProfiles(predefined, promise);\n    }\n\n    @ReactMethod\n    public void pageStart(String pageName, String pageClassOverride, Promise promise) {\n        hmsAnalyticsWrapper.pageStart(pageName, pageClassOverride, promise);\n    }\n\n    @ReactMethod\n    public void pageEnd(String pageName, Promise promise) {\n        hmsAnalyticsWrapper.pageEnd(pageName, promise);\n    }\n\n    @ReactMethod\n    public void onEvent(String event, ReadableMap rMap, Promise promise) {\n        hmsAnalyticsWrapper.onEvent(event, rMap, promise);\n    }\n\n    @ReactMethod\n    public void enableLog(Promise promise) {\n        hmsAnalyticsWrapper.enableLog(promise);\n    }\n\n    @ReactMethod\n    public void enableLogWithLevel(String level, Promise promise) {\n        hmsAnalyticsWrapper.enableLogWithLevel(level, promise);\n    }\n\n    @ReactMethod\n    public void deleteUserProfile(String name, Promise promise) {\n        hmsAnalyticsWrapper.setUserProfile(name, null, promise);\n    }\n\n    @ReactMethod\n    public void setRestrictionEnabled(Boolean enabled, Promise promise) {\n        hmsAnalyticsWrapper.setRestrictionEnabled(enabled, promise);\n    }\n\n    @ReactMethod\n    public void setCollectAdsIdEnabled(Boolean isEnabled, Promise promise) {\n        hmsAnalyticsWrapper.setCollectAdsIdEnabled(isEnabled, promise);\n    }\n\n    @ReactMethod\n    public void isRestrictionEnabled(Promise promise) {\n        hmsAnalyticsWrapper.isRestrictionEnabled(promise);\n    }\n\n    @ReactMethod\n    public void addDefaultEventParams(ReadableMap map, Promise promise) {\n        hmsAnalyticsWrapper.addDefaultEventParams(map, promise);\n    }\n\n    @ReactMethod\n    public void setReportPolicies(ReadableArray array, Promise promise) {\n        hmsAnalyticsWrapper.setReportPolicies(array, promise);\n    }\n\n    @ReactMethod\n    public void getReportPolicyThreshold(String reportPolicyType, Promise promise) {\n        hmsAnalyticsWrapper.getReportPolicyThreshold(reportPolicyType, promise);\n    }\n\n    @ReactMethod\n    public void enableLogger(Promise promise) {\n        hmsAnalyticsWrapper.enableLogger(promise);\n    }\n\n    @ReactMethod\n    public void disableLogger(Promise promise) {\n        hmsAnalyticsWrapper.disableLogger(promise);\n    }\n\n    @ReactMethod\n    public void setChannel(String channel, Promise promise) {\n        hmsAnalyticsWrapper.setChannel(channel, promise);\n    }\n\n    @ReactMethod\n    public void setPropertyCollection(String property, boolean enabled, Promise promise) {\n        hmsAnalyticsWrapper.setPropertyCollection(property, enabled, promise);\n    }\n\n    @ReactMethod\n    public void setCustomReferrer(String customReferrer, Promise promise) {\n        hmsAnalyticsWrapper.setCustomReferrer(customReferrer, promise);\n    }\n\n    @ReactMethod\n    public void getDataUploadSiteInfo(Promise promise) {\n        hmsAnalyticsWrapper.getDataUploadSiteInfo(promise);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/java/com/huawei/hms/rn/analytics/HMSAnalyticsPackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\npublic class HMSAnalyticsPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        return Arrays.<NativeModule>asList(new HMSAnalyticsModule(reactContext));\n    }\n\n\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/java/com/huawei/hms/rn/analytics/HMSAnalyticsProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics;\n\nimport android.content.ContentProvider;\nimport android.content.ContentValues;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.util.Log;\n\nimport com.huawei.hms.analytics.HiAnalytics;\n\nimport java.util.Arrays;\n\npublic class HMSAnalyticsProvider extends ContentProvider {\n\n    private final String TAG = HMSAnalyticsProvider.class.getSimpleName();\n    private final String[] routePolicyList = new String[]{\"CN\", \"DE\", \"SG\", \"RU\"};\n\n    /**\n     * Method overrides to send start up events.\n     * <p>\n     * Configurations will be read from AndroidManifest.xml\n     * If analytics enabled value is set to false, startup events won't be send.\n     * If route policy value is set, startup events will be sent to the corresponding region.\n     *\n     * @return true\n     */\n    @Override\n    public boolean onCreate() {\n        try {\n            Log.d(TAG, \"HMSAnalyticsContentProvider -> onCreate\");\n            ApplicationInfo ai = this.getContext().getPackageManager().getApplicationInfo(this.getContext().getPackageName(), PackageManager.GET_META_DATA);\n            boolean isEnabled = ai.metaData.getBoolean(\"hms_is_analytics_enabled\", true);\n\n            if (!isEnabled) {\n                return true;\n            }\n\n            String routePolicy = ai.metaData.getString(\"hms_analytics_route_policy\");\n\n            if (Arrays.asList(routePolicyList).contains(routePolicy)) {\n                HiAnalytics.getInstance(this.getContext(), routePolicy);\n                return true;\n            }\n        } catch (Exception e) {\n            Log.e(TAG, \"HiAnalytics=> Invalid  routePolicy!, Initialization failed. Message: \" + e.getMessage());\n        }\n        HiAnalytics.getInstance(this.getContext());\n        return true;\n    }\n\n\n    @Override\n    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {\n        return null;\n    }\n\n    @Override\n    public String getType(Uri uri) {\n        return null;\n    }\n\n\n    @Override\n    public Uri insert(Uri uri, ContentValues contentValues) {\n        return null;\n    }\n\n    @Override\n    public int delete(Uri uri, String s, String[] strings) {\n        return 0;\n    }\n\n    @Override\n    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {\n        return 0;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/java/com/huawei/hms/rn/analytics/HMSAnalyticsWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics;\n\nimport android.content.Context;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.analytics.HiAnalytics;\nimport com.huawei.hms.analytics.HiAnalyticsInstance;\nimport com.huawei.hms.analytics.HiAnalyticsTools;\nimport com.huawei.hms.analytics.type.ReportPolicy;\nimport com.huawei.hms.rn.analytics.logger.HMSLogger;\n\nimport java.lang.ref.WeakReference;\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.Map;\nimport java.util.Objects;\nimport java.util.Set;\n\nimport static com.facebook.react.bridge.Arguments.createMap;\n\npublic class HMSAnalyticsWrapper {\n\n    private final String TAG = HMSAnalyticsWrapper.class.getSimpleName();\n    private HiAnalyticsInstance instance;\n    private final WeakReference<Context> weakContext;\n\n    private enum LogLevel {\n        DEBUG(3),\n        INFO(4),\n        WARN(5),\n        ERROR(6);\n        int intValue;\n\n        LogLevel(int logLevel) {\n            this.intValue = logLevel;\n        }\n    }\n\n    public HMSAnalyticsWrapper(Context context, String routePolicy, Promise promise) {\n        this.weakContext = new WeakReference<>(context);\n        this.instance = HiAnalytics.getInstance(getContext(), routePolicy);\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public HMSAnalyticsWrapper(Context context, Promise promise) {\n        this.weakContext = new WeakReference<>(context);\n        this.instance = HiAnalytics.getInstance(getContext());\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void pageStart(String pageName, String pageClassOverride, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"pageStart\");\n        instance.pageStart(pageName, pageClassOverride);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"pageStart\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void pageEnd(String pageName, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"pageEnd\");\n        instance.pageEnd(pageName);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"pageEnd\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void onEvent(String event, ReadableMap rMap, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"onEvent\");\n        try {\n            Bundle bundle = mapToBundle(rMap);\n            instance.onEvent(event, bundle);\n            createResponseObj(\"response\", true, promise);\n        } catch (IllegalArgumentException e) {\n            createResponseObj(\"\", e, promise);\n        }\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"onEvent\");\n    }\n\n    public void setAnalyticsEnabled(boolean enabled, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setAnalyticsEnabled\");\n        instance.setAnalyticsEnabled(enabled);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setAnalyticsEnabled\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setUserId(String userId, Promise promise) throws IllegalArgumentException {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setUserId\");\n        instance.setUserId(userId);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setUserId\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setUserProfile(String name, String value, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setUserProfile\");\n        instance.setUserProfile(name, value);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setUserProfile\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setPushToken(String token, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setPushToken\");\n        instance.setPushToken(token);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setPushToken\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setMinActivitySessions(long milliseconds, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setMinActivitySessions\");\n        instance.setMinActivitySessions(milliseconds);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setMinActivitySessions\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setSessionDuration(int milliseconds, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setSessionDuration\");\n        instance.setSessionDuration(milliseconds);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setSessionDuration\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void clearCachedData(Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"clearCachedData\");\n        instance.clearCachedData();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"clearCachedData\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void getAAID(Promise promise) {\n        try {\n            HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getAAID\");\n            instance.getAAID()\n                    .addOnSuccessListener(s -> createResponseObj(\"aaid\", s, promise))\n                    .addOnFailureListener(e -> createResponseObj(\"\", e, promise));\n        } catch (IllegalArgumentException e) {\n            createResponseObj(\"Err\", e.toString(), promise);\n        }\n    }\n\n    public void isRestrictionEnabled(Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"isRestrictionEnabled\");\n        Boolean result = instance.isRestrictionEnabled();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"isRestrictionEnabled\");\n        createResponseObj(\"isRestrictionEnabled\", result, promise);\n    }\n\n    public void addDefaultEventParams(ReadableMap map, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"addDefaultEventParams\");\n        Bundle bundle = mapToBundle(map);\n        instance.addDefaultEventParams(bundle);\n        createResponseObj(\"addDefaultEventParams\", true, promise);\n    }\n\n    public void setRestrictionEnabled(Boolean enabled, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setRestrictionEnabled\");\n        instance.setRestrictionEnabled(enabled);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setRestrictionEnabled\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setReportPolicies(ReadableArray array, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setReportPolicies\");\n        ArrayList<Object> list = array.toArrayList();\n        Set<ReportPolicy> policies = new HashSet<>();\n\n        for (Object reportPolicy : list) {\n            if (reportPolicy instanceof ReadableMap && (((ReadableMap) reportPolicy).hasKey(\"reportPolicyType\"))) {\n                if (((ReadableMap) reportPolicy).getString(\"reportPolicyType\") == null) {\n                    return;\n                }\n                ReportPolicy reportPolicyType = toReportPolicy(Objects.requireNonNull(((ReadableMap) reportPolicy).getString(\"reportPolicyType\")));\n                switch (reportPolicyType) {\n                    case ON_SCHEDULED_TIME_POLICY:\n                        if (((ReadableMap) reportPolicy).hasKey(\"seconds\")) {\n                            int timer = ((ReadableMap) reportPolicy).getInt(\"seconds\");\n                            ReportPolicy reportPolicyScheduled = ReportPolicy.ON_SCHEDULED_TIME_POLICY;\n                            reportPolicyScheduled.setThreshold(timer);\n                            policies.add(reportPolicyScheduled);\n                            break;\n                        }\n                        break;\n                    case ON_MOVE_BACKGROUND_POLICY:\n                        policies.add(ReportPolicy.ON_MOVE_BACKGROUND_POLICY);\n                        break;\n                    case ON_CACHE_THRESHOLD_POLICY:\n                        if (((ReadableMap) reportPolicy).hasKey(\"threshold\")) {\n                            int threshold = ((ReadableMap) reportPolicy).getInt(\"threshold\");\n                            ReportPolicy reportPolicyThreshold = ReportPolicy.ON_CACHE_THRESHOLD_POLICY;\n                            reportPolicyThreshold.setThreshold(threshold);\n                            policies.add(reportPolicyThreshold);\n                            break;\n                        }\n                        break;\n                    default:\n                        policies.add(ReportPolicy.ON_APP_LAUNCH_POLICY);\n                }\n            }\n        }\n        instance.setReportPolicies(policies);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setReportPolicies\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void getReportPolicyThreshold(String reportPolicyType, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getReportPolicyThreshold\");\n        long threshold = toReportPolicy(reportPolicyType).getThreshold();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"getReportPolicyThreshold\");\n        createResponseObj(\"threshold\", threshold, promise);\n    }\n\n    public void getUserProfiles(boolean predefined, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getUserProfiles\");\n\n        Map<String, String> userProfiles = instance.getUserProfiles(predefined);\n\n        if (userProfiles == null) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getUserProfiles\");\n            createResponseObj(\"response\", true, promise);\n            return;\n        }\n\n        WritableMap result = createMap();\n        Set<Map.Entry<String, String>> entries = userProfiles.entrySet();\n        for (Map.Entry<String, String> entry : entries) {\n            result.putString(entry.getKey(), entry.getValue());\n        }\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"getUserProfiles\");\n        promise.resolve(result);\n    }\n\n    public void setCollectAdsIdEnabled(boolean isEnabled, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setCollectAdsIdEnabled\");\n        instance.setCollectAdsIdEnabled(isEnabled);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setCollectAdsIdEnabled\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setChannel(String channel, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setChannel\");\n        instance.setChannel(channel);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setChannel\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setPropertyCollection(String property, boolean enabled, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setPropertyCollection\");\n        instance.setPropertyCollection(property, enabled);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setPropertyCollection\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void setCustomReferrer(String customReferrer, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setCustomReferrer\");\n        instance.setCustomReferrer(customReferrer);\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"setCustomReferrer\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void getDataUploadSiteInfo(Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getDataUploadSiteInfo\");\n        String response = instance.getDataUploadSiteInfo();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"getDataUploadSiteInfo\");\n        createResponseObj(\"response\", response, promise);\n    }\n\n    //HiAnalyticsTools\n\n    public void enableLog(Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"enableLog\");\n        HiAnalyticsTools.enableLog();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"enableLog\");\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void enableLogWithLevel(String level, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"enableLogWithLevel\");\n        int intValueOfLevel = LogLevel.valueOf(level).intValue;\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"enableLogWithLevel\");\n        HiAnalyticsTools.enableLog(intValueOfLevel);\n        createResponseObj(\"response\", true, promise);\n    }\n\n    //HMSLogger\n\n    public void enableLogger(final Promise promise) {\n        Log.i(TAG, \"enableLogger:: \");\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            HMSLogger.getInstance(getContext()).enableLogger();\n        }\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public void disableLogger(final Promise promise) {\n        Log.i(TAG, \"enableLogger:: \");\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            HMSLogger.getInstance(getContext()).disableLogger();\n        }\n        createResponseObj(\"response\", true, promise);\n    }\n\n    public <T> void createResponseObj(String key, T value, Promise promise) {\n        WritableMap map = createMap();\n        if (value instanceof String) {\n            map.putString(key, value.toString());\n        } else if (value instanceof Exception) {\n            String message = ((Exception) value).getMessage();\n            map.putString(key, message);\n        } else if (value instanceof Boolean) {\n            map.putBoolean(key, (Boolean) value);\n        } else if (value instanceof Long) {\n            int valueInt = Integer.parseInt(String.valueOf(value));\n            map.putInt(key, valueInt);\n        }\n        promise.resolve(map);\n    }\n\n    private Bundle mapToBundle(ReadableMap map) {\n        Bundle bundle = new Bundle();\n\n        if (map == null) {\n            Log.i(TAG, \"event params is null\");\n            return bundle;\n        }\n\n        ReadableMapKeySetIterator keySetIterator = map.keySetIterator();\n        while (keySetIterator.hasNextKey()) {\n            String key = keySetIterator.nextKey();\n            switch (map.getType(key)) {\n                case Null:\n                    //do nothing\n                    break;\n                case Boolean:\n                    bundle.putBoolean(key, map.getBoolean(key));\n                    break;\n                case Number:\n                    bundle.putDouble(key, map.getDouble(key));\n                    break;\n                case String:\n                    bundle.putString(key, map.getString(key));\n                    break;\n                case Map:\n                    //not supported\n                    break;\n                case Array: {\n                    ReadableArray rArray = map.getArray(key);\n                    assert rArray != null;\n                    ArrayList<Bundle> listBundle = bundleArrayList(rArray);\n                    bundle.putParcelableArrayList(\"items\", listBundle);\n                    break;\n                }\n                default:\n                    break;\n            }\n        }\n        return bundle;\n    }\n\n    private ArrayList<Bundle> bundleArrayList(ReadableArray rArray) {\n        ArrayList<Bundle> bundleArrayList = new ArrayList<>();\n        for (int i = 0; i < rArray.size(); i++) {\n            ReadableMap map = rArray.getMap(i);\n            Bundle bundle = mapToBundle(map);\n            bundleArrayList.add(bundle);\n        }\n        return bundleArrayList;\n    }\n\n    private ReportPolicy toReportPolicy(String reportPolicy) {\n        switch (reportPolicy) {\n            case \"onScheduledTimePolicy\":\n                return ReportPolicy.ON_SCHEDULED_TIME_POLICY;\n            case \"onMoveBackgroundPolicy\":\n                return ReportPolicy.ON_MOVE_BACKGROUND_POLICY;\n            case \"onCacheThresholdPolicy\":\n                return ReportPolicy.ON_CACHE_THRESHOLD_POLICY;\n            default:\n                return ReportPolicy.ON_APP_LAUNCH_POLICY;\n        }\n    }\n\n    private Context getContext() {\n        return weakContext.get();\n    }\n}"
  },
  {
    "path": "react-native-hms-analytics/android/src/main/java/com/huawei/hms/rn/analytics/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Analytics\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"6.12.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n                                                    final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}"
  },
  {
    "path": "react-native-hms-analytics/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n"
  },
  {
    "path": "react-native-hms-analytics/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport { apiName, pickerType, logLevel, styles } from './constants/Data';\nimport { Platform, ScrollView, Text, TouchableOpacity, View } from 'react-native';\nimport RenderComponent from './customViews/RenderComponent';\nimport HMSAnalytics from '@hmscore/react-native-hms-analytics';\n\n/**\n * Provides methods to obtain HiAnalytics Kit functions both In Android & IOS Platforms.\n */\nexport default class App extends RenderComponent {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      paramId: \"\",\n      eventBundleValue: \"\",\n      isInstanceAvailable: false,\n    };\n    super.init(this, \"AppScreen\");\n  }\n\n  componentDidMount() {\n    super.pickerView(pickerType.logLevel.toString());\n\n    if (!this.state.isInstanceAvailable && Platform.OS === \"android\") {\n      HMSAnalytics.getInstance()\n        .then((res) => {\n          this.setState({ isInstanceAvailable: true });\n          super.showResult(apiName.getInstance, res);\n        })\n        .catch((err) => super.showResult(apiName.getInstance, err));\n    }\n  }\n\n  async setAnalyticsEnabled() {\n    const enabled = true;\n    HMSAnalytics.setAnalyticsEnabled(enabled)\n      .then((res) => super.showResult(apiName.setAnalyEnabled, res))\n      .catch((err) => super.showResult(apiName.setAnalyEnabled, err));\n  }\n\n  async setRestrictionEnabled() {\n    HMSAnalytics.setRestrictionEnabled(false)\n      .then((res) => super.showResult(apiName.setRestEnabled, res))\n      .catch((err) => super.showResult(apiName.setRestEnabled, err));\n  }\n\n  async isRestrictionEnabled() {\n    HMSAnalytics.isRestrictionEnabled()\n      .then((res) => super.showResult(apiName.isRestEnabled, res))\n      .catch((err) => super.showResult(apiName.isRestEnabled, err));\n  }\n\n  async setCollectAdsIdEnabled() {\n    HMSAnalytics.setCollectAdsIdEnabled(false)\n      .then((res) => super.showResult(apiName.setCollAdsIdEnabled, res))\n      .catch((err) => super.showResult(apiName.setCollAdsIdEnabled, err));\n  }\n\n  async addDefaultEventParams() {\n    const params = {\n      \"DefaultEventKey0\": false,\n      \"DefaultEventKey1\": 1,\n      \"DefaultEventKey2\": \"two\",\n    };\n    HMSAnalytics.addDefaultEventParams(params)\n      .then((res) => super.showResult(apiName.addDefEventPar, res))\n      .catch((err) => super.showResult(apiName.addDefEventPar, err));\n  }\n\n  /**\n   * @important: When the setUserId API is called, if the old userId is not empty and is different from the new userId, a new session is generated.\n   * If you do not want to use setUserId to identify a user (for example, when a user signs out), set userId to **null**.\n   */\n  async setUserId(userID) {\n    HMSAnalytics.setUserId(userID)\n      .then((res) => super.showResult(apiName.setUserId, res))\n      .catch((err) => super.showResult(apiName.setUserId, err));\n  }\n\n  async setUserProfile() {\n    const name = \"favor_sport\";\n    const value = \"volleyball\";\n    HMSAnalytics.setUserProfile(name, value)\n      .then((res) => super.showResult(apiName.setUserProf, res))\n      .catch((err) => super.showResult(apiName.setUserProf, err));\n  }\n\n  async deleteUserProfile() {\n    const name = \"favor_sport\";\n    HMSAnalytics.deleteUserProfile(name)\n      .then((res) => super.showResult(apiName.deleteUserProf, res))\n      .catch((err) => super.showResult(apiName.deleteUserProf, err));\n  }\n\n  async setSessionDuration() {\n    const sessionDurationValue = 1500000;\n    HMSAnalytics.setSessionDuration(sessionDurationValue)\n      .then((res) => super.showResult(apiName.setSesDuration, res))\n      .catch((err) => super.showResult(apiName.setSesDuration, err));\n  }\n\n  async onEvent() {\n    if (!super.validation())\n      return;\n\n    const eventId = this.state.eventId;\n    const bundle = {\n      \"name\": this.state.paramId,\n      \"value\": this.state.eventBundleValue\n    };\n    HMSAnalytics.onEvent(eventId, bundle)\n      .then((res) => super.showResult(apiName.onEvent, res))\n      .catch((err) => super.showResult(apiName.onEvent, err));\n  }\n\n  async onEventWithBundleList() {\n    const eventId = HMSAnalytics.HAEventType.ADDPRODUCT2WISHLIST;\n    const bundleList = [];\n    const bundleChild1 = {\n      \"name\": HMSAnalytics.HAParamType.PRODUCTID,\n      \"value\": \"itemId_1\"\n    };\n\n    const bundleChild2 = {\n      \"name\": HMSAnalytics.HAParamType.PRODUCTID,\n      \"value\": \"itemId_2\"\n    };\n\n    bundleList.push(bundleChild1);\n    bundleList.push(bundleChild2);\n\n    const bundleChild3 = {\n      \"name\": HMSAnalytics.HAParamType.SEARCHKEYWORDS,\n      \"value\": \"phone\"\n    };\n    const bundle = {\n      items: bundleList,\n      bundleChild: bundleChild3\n    };\n    HMSAnalytics.onEvent(eventId, bundle)\n      .then((res) => super.showResult(apiName.onEvent, res))\n      .catch((err) => super.showResult(apiName.onEvent, err));\n  }\n\n  async clearCachedData() {\n    HMSAnalytics.clearCachedData()\n      .then((res) => super.showResult(apiName.clearCachedData, res))\n      .catch((err) => super.showResult(apiName.clearCachedData, err));\n  }\n\n  async getAAID() {\n    HMSAnalytics.getAAID()\n      .then((res) => super.showResult(apiName.getAAID, res))\n      .catch((err) => super.showResult(apiName.getAAID, err));\n  }\n\n  async getUserProfiles() {\n    const preDefined = true;\n    HMSAnalytics.getUserProfiles(preDefined)\n      .then((res) => super.showResult(apiName.getUserProf, res))\n      .catch((err) => super.showResult(apiName.getUserProf, err));\n  }\n\n  async setReportPolicies() {\n    HMSAnalytics.setReportPolicies([\n      {\n        [HMSAnalytics.Constants.REPORT_POLICY_TYPE]: HMSAnalytics.ReportPolicyType.AppLaunchPolicy\n      },\n      {\n        [HMSAnalytics.Constants.REPORT_POLICY_TYPE]: HMSAnalytics.ReportPolicyType.ScheduledTimePolicy,\n        [HMSAnalytics.Constants.SECONDS]: 200\n      },\n      {\n        [HMSAnalytics.Constants.REPORT_POLICY_TYPE]: HMSAnalytics.ReportPolicyType.MoveBackgroundPolicy\n      },\n      {\n        [HMSAnalytics.Constants.REPORT_POLICY_TYPE]: HMSAnalytics.ReportPolicyType.CacheThresholdPolicy,\n        [HMSAnalytics.Constants.THRESHOLD]: 200\n      }\n    ])\n      .then((res) => super.showResult(apiName.setReportPolic, res))\n      .catch((err) => super.showResult(apiName.setReportPolic, err));\n  }\n\n  /*\n   * @note These function ate specifically used by Android Platforms.\n   */\n\n  async pageStart() {\n    if (!this.checkPlatform())\n      return;\n    const screenName = \"AppScreen\";\n    const screenClassOverride = \"App\";\n    HMSAnalytics.pageStart(screenName, screenClassOverride)\n      .then((res) => super.showResult(apiName.startPage, res))\n      .catch((err) => super.showResult(apiName.startPage, err));\n  }\n\n  async pageEnd() {\n    if (!this.checkPlatform())\n      return;\n    const screenName = \"AppScreen\";\n    HMSAnalytics.pageEnd(screenName)\n      .then((res) => super.showResult(apiName.endPage, res))\n      .catch((err) => super.showResult(apiName.endPage, err));\n  }\n\n  async enableLog() {\n    if (!this.checkPlatform())\n      return;\n    // defaultValue= logLevel.debug\n    HMSAnalytics.enableLog()\n      .then((res) => super.showResult(apiName.enableLog, res))\n      .catch((err) => super.showResult(apiName.enableLog, err));\n  }\n\n  async enableLogWithLevel() {\n    if (!this.checkPlatform())\n      return;\n\n    HMSAnalytics.enableLogWithLevel(logLevel.debug)\n      .then((res) => super.showResult(apiName.enableLogWithLevel, res))\n      .catch((err) => super.showResult(apiName.enableLogWithLevel, err));\n  }\n\n  async setPushToken() {\n    if (!this.checkPlatform())\n      return;\n    const token = \"<YOUR_PUSH_TOKEN>\";\n    HMSAnalytics.setPushToken(token)\n      .then((res) => super.showResult(apiName.setPushToken, res))\n      .catch((err) => super.showResult(apiName.setPushToken, err));\n  }\n\n  async setMinActivitySessions() {\n    if (!this.checkPlatform())\n      return;\n    //param => milisecond, Default value:3000\n    const minActivitySessionValue = 2500;\n    HMSAnalytics.setMinActivitySessions(minActivitySessionValue)\n      .then((res) => super.showResult(apiName.minActSession, res))\n      .catch((err) => super.showResult(apiName.minActSession, err));\n  }\n\n  async getReportPolicyThreshold() {\n    if (!this.checkPlatform())\n      return;\n    HMSAnalytics.getReportPolicyThreshold(HMSAnalytics.ReportPolicyType.AppLaunchPolicy)\n      .then((res) => super.showResult(apiName.getRepPolicyT, res))\n      .catch((err) => super.showResult(apiName.getRepPolicyT, err));\n  }\n\n  async getDataUploadSiteInfo() {\n    if (!this.checkPlatform())\n      return;\n    HMSAnalytics.getDataUploadSiteInfo()\n      .then((res) => super.showResult(apiName.getDataUploadSiteInfo, res))\n      .catch((err) => super.showResult(apiName.getDataUploadSiteInfo, err));\n  }\n\n  async setCustomReferrer() {\n    if (!this.checkPlatform())\n      return;\n    HMSAnalytics.setCustomReferrer(\"test\")\n      .then((res) => super.showResult(apiName.setCustomReferrer, res))\n      .catch((err) => super.showResult(apiName.setCustomReferrer, err));\n  }\n\n  async setPropertyCollection() {\n    if (!this.checkPlatform())\n      return;\n    HMSAnalytics.setPropertyCollection(\"userAgent\", true)\n      .then((res) => super.showResult(apiName.setPropertyCollection, res))\n      .catch((err) => super.showResult(apiName.setPropertyCollection, err));\n  }\n\n  async setChannel() {\n    if (!this.checkPlatform())\n      return;\n    HMSAnalytics.setChannel(\"test\")\n      .then((res) => super.showResult(apiName.setChannel, res))\n      .catch((err) => super.showResult(apiName.setChannel, err));\n  }\n\n  checkPlatform() {\n    if (Platform.OS === 'ios') {\n      alert(\"This function is not available in iOS platforms.\");\n      return false;\n    }\n    return true;\n  }\n\n  render() {\n    return (\n      <View style={styles.mainContainer}>\n        <View style={styles.header}>\n          <Text style={styles.headerText}>HMS RN Analytics Kit</Text>\n        </View>\n\n        <ScrollView style={styles.scrollView} nestedScrollEnabled={true}>\n          <View style={styles.container}>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.setAnalyticsEnabled()}>\n              <Text style={styles.txt}>{apiName.setAnalyEnabled}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.setReportPolicies()}>\n              <Text style={styles.txt}>Set Report Policies</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.clearCachedData()}>\n              <Text style={styles.txt}>{apiName.clearCachedData}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.setRestrictionEnabled()}>\n              <Text style={styles.txt}>{apiName.setRestEnabled}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.isRestrictionEnabled()}>\n              <Text style={styles.txt}>{apiName.isRestEnabled}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.setUserProfile()}>\n              <Text style={styles.txt}>{apiName.setUserProf}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.deleteUserProfile()}>\n              <Text style={styles.txt}>{apiName.deleteUserProf}</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity activeOpacity={.7} style={styles.btn}\n              onPress={() => this.setSessionDuration()}>\n              <Text style={styles.txt}>{apiName.setSesDuration}</Text>\n            </TouchableOpacity>\n\n            {super.setUserIdView()}\n\n            {super.onEventView()}\n\n            <View style={{ flexWrap: 'wrap', flexDirection: 'row', }}>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.onEventWithBundleList()}>\n                <Text style={styles.txt}>{apiName.onEvent + \"WithBundleList\"}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.addDefaultEventParams()}>\n                <Text style={styles.txt}>{apiName.addDefEventPar}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.getAAID()}>\n                <Text style={styles.txt}>{apiName.getAAID}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.getUserProfiles()}>\n                <Text style={styles.txt}>{apiName.getUserProf}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.getDataUploadSiteInfo()}>\n                <Text style={styles.txt}>{apiName.getDataUploadSiteInfo}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.setCustomReferrer()}>\n                <Text style={styles.txt}>{apiName.setCustomReferrer}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.setPropertyCollection()}>\n                <Text style={styles.txt}>{apiName.setPropertyCollection}</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                onPress={() => this.setChannel()}>\n                <Text style={styles.txt}>{apiName.setChannel}</Text>\n              </TouchableOpacity>\n\n            </View>\n\n            {Platform.OS === \"android\" ?\n              <View style={{ flexWrap: 'wrap', flexDirection: 'row', }}>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.pageStart()}>\n                  <Text style={styles.txt}>{apiName.startPage}</Text>\n                </TouchableOpacity>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.pageEnd()}>\n                  <Text style={styles.txt}>{apiName.endPage}</Text>\n                </TouchableOpacity>\n\n                {super.enableLogWithLevelView()}\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.enableLog()}>\n                  <Text style={styles.txt}>{apiName.enableLog}</Text>\n                </TouchableOpacity>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.setPushToken()}>\n                  <Text style={styles.txt}>{apiName.setPushToken}</Text>\n                </TouchableOpacity>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.setMinActivitySessions()}>\n                  <Text style={styles.txt}>{apiName.minActSession}</Text>\n                </TouchableOpacity>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                  onPress={() => this.getReportPolicyThreshold()}>\n                  <Text style={styles.txt}>{apiName.getRepPolicyT}</Text>\n                </TouchableOpacity>\n              </View>\n              : null\n            }\n          </View>\n        </ScrollView>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-analytics/example/README.md",
    "content": "# React-Native HMS Analytics - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Analytics Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). You may need to change the package name on AndroidManifest.xml and MainActivity.java respectively.\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Analytics - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.hms.rn.analytics.demo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.hms.rn.analytics.demo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        enableHermes: false\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\n//def enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n  defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    \n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            // minifyEnabled enableProguardInReleaseBuilds\n            // proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" /> \n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    package=\"com.huawei.hms.rn.analytics.example\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-sdk tools:overrideLibrary=\"com.huawei.agconnect.credential,com.huawei.agconnect.core,com.huawei.agconnect.https,com.huawei.agconnect.datastore\"/>\n\n    <application\n      android:name=\"com.huawei.hms.rn.analytics.example.MainApplication\"\n      android:label=\"RNHmsAnalyticsDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n\n      <activity\n        android:name=\"com.huawei.hms.rn.analytics.example.MainActivity\"\n        android:label=\"RNHmsAnalyticsDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:exported=\"true\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/src/main/java/com/huawei/hms/rn/analytics/example/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics.example;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"@hmscore/react-native-hms-analytics-demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/src/main/java/com/huawei/hms/rn/analytics/example/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.analytics.example;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"29.0.3\"\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath ('com.huawei.agconnect:agcp:1.9.1.300')\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n    }\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven {url 'https://developer.huawei.com/repo/'}\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m\n\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-analytics/example/android/settings.gradle",
    "content": "rootProject.name = 'example'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-analytics/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-analytics/example/constants/Data.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nexport default class Data { }\nimport {\n    Dimensions,\n    StyleSheet\n} from 'react-native';\n\nexport const apiName = {\n    getInstance: \"getInstance\",\n    setAnalyEnabled: \"setAnalyticsEnabled\",\n    startPage: \"startPage\",\n    endPage: \"endPage\",\n    setRestEnabled: \"setRestrictionEnabled\",\n    isRestEnabled: \"isRestrictionEnabled\",\n    setCollAdsIdEnabled: \"setCollectAdsIdEnabled\",\n    enableLog: \"enableLog\",\n    enableLogWithLevel: \"enableLogWithLevel\",\n    setUserId: \"setUserId\",\n    setUserProf: \"setUserProfile\",\n    deleteUserProf: \"deleteUserProfile\",\n    setPushToken: \"setPushToken\",\n    setSesDuration: \"setSessionDuration\",\n    minActSession: \"minActivitySession\",\n    onEvent: \"onEvent\",\n    clearCachedData: \"clearCachedData\",\n    getAAID: \"getAAID\",\n    getUserProf: \"getUserProfile\",\n    setReportPolic: \"setReportPolicies\",\n    getRepPolicyT: \"getReportPolicyThreshold\",\n    addDefEventPar: \"addDefaultEventParams\",\n    getDataUploadSiteInfo: \"getDataUploadSiteInfo\",\n    setCustomReferrer: \"setCustomReferrer\",\n    setPropertyCollection: \"setPropertyCollection\",\n    setChannel: \"setChannel\"\n}\nexport const pickerType = {\n    logLevel: \"logLevel\",\n    eventType: \"eventType\",\n    eventParamType: \"eventParamType\"\n}\nexport const logLevel = {\n    debug: \"DEBUG\",\n    info: \"INFO\",\n    warn: \"WARN\",\n    error: \"ERROR\"\n}\nexport const ScreenWidth = Dimensions.get(\"window\").width;\nexport const ScreenHeight = Dimensions.get(\"window\").height;\n\nexport const styles = StyleSheet.create({\n    mainContainer: {\n        flex: 1\n    },\n    header: {\n        width: \"100%\",\n        height: 80,\n        backgroundColor: \"#0b1528\",\n        justifyContent: 'center',\n        borderColor: \"#00ffad\",\n        borderWidth: 1\n    },\n    headerText: {\n        color: \"#00ffad\",\n        fontWeight: \"bold\",\n        fontSize: 20,\n        textAlign: \"center\"\n    },\n    scrollView: {\n        flex: 1,\n        backgroundColor: '#2e343b'\n    },\n    container: {\n        paddingTop: 30,\n        paddingBottom: 30,\n        flex: 1,\n        flexDirection: 'row',\n        flexWrap: 'wrap',\n        justifyContent: 'center'\n    },\n    btn: {\n        marginTop: 20,\n        backgroundColor: '#0b1528',\n        width: 170,\n        height: 45,\n        justifyContent: 'center',\n        alignSelf: 'center',\n        borderRadius: 10,\n        marginLeft: 5,\n        marginRight: 5,\n        padding: 2\n    },\n    txt: {\n        fontSize: 14,\n        color: '#00ffad',\n        textAlign: 'center'\n    },\n    resultView: {\n        flexDirection: 'row',\n        width: 250,\n        alignSelf: 'center',\n        marginLeft: 5,\n        marginRight: 5,\n        marginTop: 20\n    },\n    picker: {\n        marginTop: 20,\n        alignSelf: 'center',\n        backgroundColor: '#0b1528',\n        width: 250,\n        borderRadius: 10,\n        marginLeft: 5,\n        marginRight: 5,\n        maxHeight: 100\n    },\n    pickerItem: {\n        fontSize: 14,\n        color: 'white',\n        marginTop: 5,\n        marginBottom: 5,\n        marginLeft: 25\n    },\n    input: {\n        fontSize: 14,\n        color: 'white',\n        width: 135,\n        borderWidth: 1,\n        alignSelf: 'center',\n        paddingLeft: 10\n    },\n    partialView: {\n        width: '100%',\n        borderColor: '#00ffad',\n        borderWidth: 1,\n        paddingBottom: 10,\n        paddingTop: 10,\n        marginTop: 10\n    },\n    title: {\n        fontSize: 20,\n        textAlign: 'center',\n        color: 'white',\n        marginTop: 30,\n        width: '100%',\n        textDecorationLine: \"underline\"\n    },\n    bundleView: {\n        borderColor: \"#0b1528\",\n        borderWidth: 2,\n        width: '90%',\n        marginTop: 5,\n        height: 410,\n        alignSelf: \"center\",\n        justifyContent: 'center'\n    },\n    eventView: {\n        borderColor: \"#0b1528\",\n        width: '90%',\n        height: 220,\n        alignSelf: \"center\",\n        borderWidth: 2\n    }\n});\n\n\n\n\n\n"
  },
  {
    "path": "react-native-hms-analytics/example/customViews/ComboBox.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { View,Text,TouchableOpacity,StyleSheet} from \"react-native\";\n\nexport default class ComboBox extends React.Component {\n\n  constructor(props){\n    super(props)\n    this.state={isCustomEvent:false}\n  }\n\n  componentDidMount(){\n     this.setState({isCustomEvent:this.props.isCustomEvent})\n  }\n\n  componentDidUpdate(prevProps){\n      if(this.props.select!=prevProps.select){\n        this.setState({isCustomEvent:this.props.isCustomEvent})\n      }\n  }\n\n  changeSelection(isCustom){\n    this.props.changeSelection(isCustom)\n    this.setState({isCustomEvent:isCustom})\n  }\n\n  render() {\n    return (\n        <View style={styles.comboBox}>\n            <TouchableOpacity\n                onPress={()=>this.changeSelection(true)}\n                style={[styles.comboBtn,{borderRightWidth:1,borderColor:'white',backgroundColor:this.state.isCustomEvent ?'#0b1528':'#2e343b'}]}>\n                <Text style={styles.text}> Create Custom Event </Text>\n\n            </TouchableOpacity>\n\n            <TouchableOpacity\n                onPress={()=>this.changeSelection(false)}\n                style={[styles.comboBtn,{backgroundColor:!this.state.isCustomEvent ?'#0b1528':'#2e343b'}]}>\n                <Text style={styles.text}> Use A Preset Event </Text>\n            </TouchableOpacity>\n\n      </View>\n    )\n  }\n\n}\n\nconst styles = StyleSheet.create({\n\n  comboBox:{\n    backgroundColor:\"#0b1528\",\n    width:'95%',\n    alignSelf:'center',\n    marginTop:20,\n    borderColor:'white',\n    borderRadius:10,\n    borderWidth:1,\n    height:45,\n    flexDirection:'row',\n    overflow:'hidden'\n  },\n  comboBtn:{\n    flex:1,\n    justifyContent:'center'\n  },\n  text:{\n    fontSize:14,\n    color:'white',\n    marginTop:5,\n    marginBottom:5,\n    alignSelf:'center'\n  }\n});\n"
  },
  {
    "path": "react-native-hms-analytics/example/customViews/RenderComponent.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nimport React, { Component } from 'react';\nimport { TouchableOpacity, TextInput, Text, ScrollView, View } from 'react-native';\nimport Combobox from './ComboBox';\nimport { pickerType, logLevel, styles, apiName } from '../constants/Data';\nimport HMSAnalytics from '@hmscore/react-native-hms-analytics';\n\nexport default class RenderComponent extends Component {\n    constructor(props) {\n        super(props);\n        this.self = null;\n        this.componentName = null;\n        this.state = {\n            eventId: \"\",\n            logLevelList: [],\n            eventList: [],\n            selectedLogLevel: null,\n            paramList: [],\n            isCustomEvent: true,\n            showHaParamList: false\n        };\n    }\n\n    init(self, componentName) {\n        this.self = self;\n        this.componentName = componentName;\n    }\n\n    showResult(api, res) {\n        if (res != undefined) {\n            alert(api + \":\" + JSON.stringify(res));\n            console.log(api + \"::\" + JSON.stringify(res));\n        }\n    }\n\n    validation() {\n        const eventId = this.state.eventId;\n        const paramId = this.self.state.paramId;\n        const eventBundleValue = this.state.eventBundleValue;\n        if (eventId == \"\" || eventId == undefined) {\n            alert(\"Please select or enter a eventID\");\n            return false;\n        }\n\n        else if (paramId == \"\" || paramId == null) {\n            alert(\"Please enter a bundleName\");\n            return false;\n        }\n        else if (eventBundleValue == \"\" || eventBundleValue == null) {\n            alert(\"Please enter a bundleValue\");\n            return false;\n        }\n        return true;\n    }\n\n    pickerView(type) {\n        var data = [];\n        switch (type) {\n            case pickerType.logLevel: {\n                data = logLevel;\n                break;\n            }\n            case pickerType.eventType: {\n                data = HMSAnalytics.HAEventType;\n                break;\n            }\n            case pickerType.eventParamType: {\n                data = HMSAnalytics.HAParamType;\n                break;\n            }\n        }\n\n        var list = [];\n        for (var i = 0; i < Object.keys(data).length; i++) {\n\n            let value = Object.values(data)[i] ? Object.values(data)[i] : logLevel.debug;\n            var item = (\n                <TouchableOpacity\n                    key={type + \"\" + i}\n                    style={{\n                        width: '100%',\n                        height: 30,\n                        borderBottomColor: 'red',\n                        borderBottomWidth: .5\n                    }}\n                    onPress={() => this.changePickerSelection(value, type)} >\n                    <Text style={styles.pickerItem}>{value}</Text>\n                </TouchableOpacity>\n            );\n            list.push(item);\n\n        }\n        switch (type) {\n            case pickerType.logLevel: {\n                this.setState({ logLevelList: list });\n                break;\n            }\n            case pickerType.eventType: {\n                this.setState({ eventList: list });\n                break;\n            }\n            case pickerType.eventParamType: {\n                this.setState({ paramList: list });\n                break;\n            }\n        }\n    }\n\n    enableLogWithLevelView() {\n        var level = this.state.selectedLogLevel ? this.state.selectedLogLevel : logLevel.debug;\n        return (\n            <View key={\"enableLogWithLevel\"} style={styles.partialView}>\n\n                <Text style={[styles.pickerItem, { marginLeft: 60, marginBottom: -10 }]}>Select a logLevel </Text>\n\n                <ScrollView\n                    showsVerticalScrollIndicator={true}\n                    nestedScrollEnabled={true}\n                    style={styles.picker}>\n\n                    {this.state.logLevelList}\n\n                </ScrollView>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                    onPress={() => this.enableLogWithLevel()}>\n                    <Text style={styles.txt}>{'Enable Log With Level: ' + level}</Text>\n                </TouchableOpacity>\n\n            </View>\n        );\n    }\n\n    onEventView() {\n        return (\n            <View key={\"onEvent\"} style={[styles.partialView, { marginTop: 10 }]} >\n\n                {this.eventView()}\n                {this.bundleView()}\n                <TouchableOpacity activeOpacity={.7} style={[styles.btn, { width: 180 }]}\n                    onPress={() => this.self.onEvent()}>\n                    <Text style={styles.txt}>{'On Event \\n' + this.state.eventId}</Text>\n                </TouchableOpacity>\n\n            </View>\n        );\n    }\n\n    bundleView() {\n        return (\n            <View style={styles.bundleView}>\n\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                    onPress={() => [\n                        this.setState(prevState => ({\n                            showHaParamList: !prevState.showHaParamList\n                        })),\n\n                        this.pickerView(pickerType.eventParamType.toString())\n                    ]\n                    }>\n                    <Text style={styles.txt}>{this.state.showHaParamList ? \"Invisible HaParams\" : \"Visible HaParams\"}</Text>\n                </TouchableOpacity>\n\n                {this.haParamListView()}\n\n                <Text style={[styles.pickerItem, { marginLeft: 93, marginTop: 20 }]}>BundleName </Text>\n                <TextInput\n                    placeholder={\"examp: 'Coin'\"}\n                    placeholderTextColor={\"gray\"}\n                    style={[styles.input, { marginTop: 0 }]}\n                    numberOfLines={1}\n                    value={this.self.state.paramId}\n                    onChangeText={text => this.setState({ paramId: text })} />\n\n                <Text style={[styles.pickerItem, { marginLeft: 93, marginTop: 20 }]}>BundleValue </Text>\n                <TextInput\n                    placeholder={\"examp: '130'\"}\n                    placeholderTextColor={\"gray\"}\n                    style={[styles.input, { marginTop: 0 }]}\n                    numberOfLines={1}\n                    value={this.state.eventBundleValue}\n                    onChangeText={text => this.setState({ eventBundleValue: text })} />\n            </View>\n        );\n    }\n\n    eventView() {\n        var customView = this.state.isCustomEvent || this.state.isCustomEvent == undefined ?\n            (\n                <View>\n                    <Text style={[styles.pickerItem, { marginLeft: 95, marginTop: 10 }]}>EventID </Text>\n                    <TextInput\n                        style={styles.input}\n                        placeholder={\"examp: HelpDesk\"}\n                        placeholderTextColor={\"gray\"}\n                        numberOfLines={1}\n                        value={this.state.eventId}\n                        onChangeText={text => this.setState({ eventId: text })} />\n                </View>\n            )\n            :\n            (\n                <View>\n                    <Text style={[styles.pickerItem, { marginLeft: 80, marginTop: 10 }]}>Please, select a eventID </Text>\n                    <ScrollView showsVerticalScrollIndicator={true} nestedScrollEnabled={true}\n                        style={[styles.picker, { marginTop: 0 }]}>\n                        {this.state.eventList}\n                    </ScrollView>\n                </View>\n            );\n\n        return (\n            <View style={styles.eventView}>\n                <Combobox changeSelection={(selection) => this.changeEventType(selection)} select={false} />\n                {customView}\n            </View>\n        );\n    }\n\n    setUserIdView() {\n        return (\n            <View key={apiName.setUserId} style={[styles.partialView, { marginBottom: 10 }]}>\n                <Text style={[styles.pickerItem, { marginLeft: 115 }]}>User ID</Text>\n                <TextInput\n                    ref={component => this._setUserId = component}\n                    style={styles.input}\n                    placeholder={\"examp: f84137265\"}\n                    placeholderTextColor={\"gray\"}\n                    numberOfLines={1} value={this.state.userId}\n                    onChangeText={text => this.setState({ userId: text })} />\n                <TouchableOpacity activeOpacity={.7} style={styles.btn}\n                    onPress={() => this.checkUserId()}>\n                    <Text style={styles.txt}>{apiName.setUserId}</Text>\n                </TouchableOpacity>\n            </View>\n        );\n    }\n\n    haParamListView() {\n        return (\n            this.state.showHaParamList ?\n                <ScrollView showsVerticalScrollIndicator={true} nestedScrollEnabled={true}\n                    style={styles.picker}>\n\n                    {this.state.paramList}\n\n                </ScrollView>\n                : null\n        );\n    }\n\n    checkUserId() {\n        if (!this.state.userId) {\n            this._setUserId.setNativeProps({ borderColor: \"red\" });\n            return;\n        } else {\n            this._setUserId.setNativeProps({ borderColor: \"black\" });\n        }\n        this.self.setUserId(this.state.setUserId);\n    }\n\n    changePickerSelection(value, type) {\n        switch (type) {\n            case pickerType.logLevel: {\n                this.setState({ selectedLogLevel: value });\n                break;\n            }\n            case pickerType.eventType: {\n                this.self.setState({ eventId: value });\n                break;\n            }\n            case pickerType.eventParamType: {\n                this.self.setState({ paramId: value });\n                break;\n            }\n        }\n    }\n\n    changeEventType(selection) {\n        this.pickerView(pickerType.eventType.toString());\n        this.self.setState({ isCustomEvent: selection });\n    }\n\n}"
  },
  {
    "path": "react-native-hms-analytics/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nAppRegistry.registerComponent(\"@hmscore/react-native-hms-analytics-demo\", () => App);\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/Example.swift",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\nimport Foundation\n\n// You may add your other bridge declarations here.\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/Podfile",
    "content": "platform :ios, '9.0'\nrequire_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'\n\ntarget 'example' do\n  # React-Native Pods for example\n  pod 'React', :path => '../node_modules/react-native/'\n  pod 'React-Core', :path => '../node_modules/react-native/React'\n  pod 'React-DevSupport', :path => '../node_modules/react-native/React'\n  pod 'React-fishhook', :path => '../node_modules/react-native/Libraries/fishhook'\n  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'\n  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'\n  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'\n  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'\n  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'\n  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'\n  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'\n  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'\n  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'\n  pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'\n\n  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'\n  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'\n  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'\n  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'\n  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'\n\n  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'\n  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'\n  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'\n\n  target 'exampleTests' do\n    inherit! :search_paths\n    # Pods for testing\n  end\n\n  use_native_modules!\nend\n\ntarget 'example-tvOS' do\n  # Pods for example-tvOS\n\n  target 'example-tvOSTests' do\n    inherit! :search_paths\n    # Pods for testing\n  end\n\nend\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/AppDelegate.h",
    "content": "#import <React/RCTBridgeDelegate.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>\n\n@property (nonatomic, strong) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/AppDelegate.m",
    "content": "/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#import \"AppDelegate.h\"\n\n#import <React/RCTBridge.h>\n#import <React/RCTBundleURLProvider.h>\n#import <React/RCTRootView.h>\n#import \"HiAnalytics/HiAnalytics.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];\n  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge\n                                                   moduleName:@\"@hmscore/react-native-hms-analytics-demo\"\n                                            initialProperties:nil];\n\n  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];\n\n  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n  UIViewController *rootViewController = [UIViewController new];\n  rootViewController.view = rootView;\n  self.window.rootViewController = rootViewController;\n  [self.window makeKeyAndVisible];\n  \n  // Override point for customization after application launch.\n  // Initializate the Analytics SDK using the config API in AppDelegate\n  [HiAnalytics config];\n  \n  return YES;\n}\n\n- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge\n{\n#if DEBUG\n  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@\"index\" fallbackResource:nil];\n#else\n  return [[NSBundle mainBundle] URLForResource:@\"main\" withExtension:@\"jsbundle\"];\n#endif\n}\n\n@end\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"29x29\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"40x40\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"3x\",\n      \"size\" : \"60x60\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"scale\" : \"1x\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>@hmscore/react-native-hms-analytics-demo</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t\t<key>NSExceptionDomains</key>\n\t\t<dict>\n\t\t\t<key>localhost</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSExceptionAllowsInsecureHTTPLoads</key>\n\t\t\t\t<true/>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string></string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"15702\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"15704\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"obG-Y5-kRd\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"647\" width=\"375\" height=\"0.0\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"example\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"GJd-Yh-RWb\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"202\" width=\"375\" height=\"43\"/>\n                                <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                            <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Powered by React Native\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MN2-I3-ftu\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"626\" width=\"375\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"centerX\" id=\"5cz-MP-9tL\"/>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"bottom\" secondItem=\"MN2-I3-ftu\" secondAttribute=\"bottom\" constant=\"20\" id=\"OZV-Vh-mqD\"/>\n                            <constraint firstItem=\"Bcu-3y-fUS\" firstAttribute=\"centerX\" secondItem=\"GJd-Yh-RWb\" secondAttribute=\"centerX\" id=\"Q3B-4B-g5h\"/>\n                            <constraint firstItem=\"obG-Y5-kRd\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" symbolic=\"YES\" id=\"SfN-ll-jLj\"/>\n                            <constraint firstAttribute=\"bottom\" secondItem=\"obG-Y5-kRd\" secondAttribute=\"bottom\" constant=\"20\" id=\"Y44-ml-fuU\"/>\n                            <constraint firstItem=\"MN2-I3-ftu\" firstAttribute=\"centerX\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"centerX\" id=\"akx-eg-2ui\"/>\n                            <constraint firstItem=\"MN2-I3-ftu\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" id=\"i1E-0Y-4RG\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"moa-c2-u7t\"/>\n                            <constraint firstItem=\"GJd-Yh-RWb\" firstAttribute=\"leading\" secondItem=\"Bcu-3y-fUS\" secondAttribute=\"leading\" symbolic=\"YES\" id=\"x7j-FC-K8j\"/>\n                        </constraints>\n                        <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"52.173913043478265\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example/main.m",
    "content": "#import <UIKit/UIKit.h>\n\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"React/RCTBridgeModule.h\"\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example-tvOS/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSExceptionDomains</key>\n\t\t<dict>\n\t\t\t<key>localhost</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSExceptionAllowsInsecureHTTPLoads</key>\n\t\t\t\t<true/>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string></string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example-tvOSTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };\n\t\t13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };\n\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n\t\t2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };\n\t\t2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n\t\t2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n\t\t2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };\n\t\t4F29305633FD4452D97E59C0 /* libPods-exampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A89794D14A44AAE2A5E5A66 /* libPods-exampleTests.a */; };\n\t\t7808A079252C573D00EC5C94 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7808A078252C573D00EC5C94 /* Example.swift */; };\n\t\t81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };\n\t\t8EBB9C220AAB6DA3503F7A68 /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A089B76E6EFF2C67D02A3F0 /* libPods-example.a */; };\n\t\tA7AB6618267760DC00A976C9 /* agconnect-services.plist in Resources */ = {isa = PBXBuildFile; fileRef = A7AB6617267760DC00A976C9 /* agconnect-services.plist */; };\n\t\tD0F8F99DD1BF2279438E9DE8 /* libPods-example-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 604FD4071E509AC137BE8DA7 /* libPods-example-tvOS.a */; };\n\t\tDE612F6E957793FDAA5F5CCD /* libPods-example-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DB61B6D630D6477B6BC82B0 /* libPods-example-tvOSTests.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13B07F861A680F5B00A75B9A;\n\t\t\tremoteInfo = example;\n\t\t};\n\t\t2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;\n\t\t\tremoteInfo = \"example-tvOS\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = \"<group>\"; };\n\t\t13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = \"<group>\"; };\n\t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = \"<group>\"; };\n\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = \"<group>\"; };\n\t\t1A089B76E6EFF2C67D02A3F0 /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-example.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t220857A4DD9BF682D39657F5 /* Pods-exampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-exampleTests.debug.xcconfig\"; path = \"Target Support Files/Pods-exampleTests/Pods-exampleTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"example-tvOS.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"example-tvOSTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2DAF0C63CB1BF8A068F8C847 /* Pods-example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example-tvOS.release.xcconfig\"; path = \"Target Support Files/Pods-example-tvOS/Pods-example-tvOS.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t2DB431B2682E01CC9B91848F /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example.release.xcconfig\"; path = \"Target Support Files/Pods-example/Pods-example.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3A89794D14A44AAE2A5E5A66 /* libPods-exampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-exampleTests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t604F532643F241792DCEF92C /* Pods-example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example-tvOS.debug.xcconfig\"; path = \"Target Support Files/Pods-example-tvOS/Pods-example-tvOS.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t604FD4071E509AC137BE8DA7 /* libPods-example-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-example-tvOS.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t75A7559AD3B7A94371256AF9 /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example.debug.xcconfig\"; path = \"Target Support Files/Pods-example/Pods-example.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t7808A078252C573D00EC5C94 /* Example.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = \"<group>\"; };\n\t\t784CB61E251B5FDF0041E7B9 /* example-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"example-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = example/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t9DB61B6D630D6477B6BC82B0 /* libPods-example-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-example-tvOSTests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA7AB6617267760DC00A976C9 /* agconnect-services.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"agconnect-services.plist\"; path = \"../../../agconnect-services.plist\"; sourceTree = \"<group>\"; };\n\t\tA7AB66192678C4AD00A976C9 /* HmsAnalytics.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = HmsAnalytics.m; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/HmsAnalytics.m\"; sourceTree = \"<group>\"; };\n\t\tA7AB661A2678C4AD00A976C9 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Logger.swift; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/Logger.swift\"; sourceTree = \"<group>\"; };\n\t\tA7AB661B2678C4AE00A976C9 /* HmsAnalytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HmsAnalytics.swift; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/HmsAnalytics.swift\"; sourceTree = \"<group>\"; };\n\t\tA7AB661C2678C4AE00A976C9 /* HmsAnalytics-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = \"HmsAnalytics-Bridging-Header.h\"; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/HmsAnalytics-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tA7AB661D2678C4AE00A976C9 /* AnalyticsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AnalyticsViewModel.swift; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/AnalyticsViewModel.swift\"; sourceTree = \"<group>\"; };\n\t\tA7AB661E2678C4AE00A976C9 /* Promise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Promise.swift; path = \"../node_modules/@hmscore/react-native-hms-analytics/ios/Promise.swift\"; sourceTree = \"<group>\"; };\n\t\tB82060CA481619D6BA4BF22E /* Pods-example-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example-tvOSTests.debug.xcconfig\"; path = \"Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };\n\t\tED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };\n\t\tF2FB16E3670870BC6E3C2057 /* Pods-example-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-example-tvOSTests.release.xcconfig\"; path = \"Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF591140CEDDF7090638DDDB9 /* Pods-exampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-exampleTests.release.xcconfig\"; path = \"Target Support Files/Pods-exampleTests/Pods-exampleTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t00E356EB1AD99517003FC87E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4F29305633FD4452D97E59C0 /* libPods-exampleTests.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8EBB9C220AAB6DA3503F7A68 /* libPods-example.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E4781E0B4A5D006451C7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD0F8F99DD1BF2279438E9DE8 /* libPods-example-tvOS.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDE612F6E957793FDAA5F5CCD /* libPods-example-tvOSTests.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t00E356EF1AD99517003FC87E /* exampleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F21AD99517003FC87E /* exampleTests.m */,\n\t\t\t\t00E356F01AD99517003FC87E /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = exampleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00E356F01AD99517003FC87E /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F11AD99517003FC87E /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t107E043451EC78F9A669290F /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t75A7559AD3B7A94371256AF9 /* Pods-example.debug.xcconfig */,\n\t\t\t\t2DB431B2682E01CC9B91848F /* Pods-example.release.xcconfig */,\n\t\t\t\t604F532643F241792DCEF92C /* Pods-example-tvOS.debug.xcconfig */,\n\t\t\t\t2DAF0C63CB1BF8A068F8C847 /* Pods-example-tvOS.release.xcconfig */,\n\t\t\t\tB82060CA481619D6BA4BF22E /* Pods-example-tvOSTests.debug.xcconfig */,\n\t\t\t\tF2FB16E3670870BC6E3C2057 /* Pods-example-tvOSTests.release.xcconfig */,\n\t\t\t\t220857A4DD9BF682D39657F5 /* Pods-exampleTests.debug.xcconfig */,\n\t\t\t\tF591140CEDDF7090638DDDB9 /* Pods-exampleTests.release.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t13B07FAE1A68108700A75B9A /* example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA7AB6617267760DC00A976C9 /* agconnect-services.plist */,\n\t\t\t\t7808A078252C573D00EC5C94 /* Example.swift */,\n\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.m */,\n\t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n\t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n\t\t\t\t81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,\n\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n\t\t\t);\n\t\t\tname = example;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tED297162215061F000B7C4FE /* JavaScriptCore.framework */,\n\t\t\t\tED2971642150620600B7C4FE /* JavaScriptCore.framework */,\n\t\t\t\t1A089B76E6EFF2C67D02A3F0 /* libPods-example.a */,\n\t\t\t\t604FD4071E509AC137BE8DA7 /* libPods-example-tvOS.a */,\n\t\t\t\t9DB61B6D630D6477B6BC82B0 /* libPods-example-tvOSTests.a */,\n\t\t\t\t3A89794D14A44AAE2A5E5A66 /* libPods-exampleTests.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832341AE1AAA6A7D00B99B32 /* Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Libraries;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83CBB9F61A601CBA00E9B192 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA7AB661D2678C4AE00A976C9 /* AnalyticsViewModel.swift */,\n\t\t\t\tA7AB661C2678C4AE00A976C9 /* HmsAnalytics-Bridging-Header.h */,\n\t\t\t\tA7AB66192678C4AD00A976C9 /* HmsAnalytics.m */,\n\t\t\t\tA7AB661B2678C4AE00A976C9 /* HmsAnalytics.swift */,\n\t\t\t\tA7AB661A2678C4AD00A976C9 /* Logger.swift */,\n\t\t\t\tA7AB661E2678C4AE00A976C9 /* Promise.swift */,\n\t\t\t\t13B07FAE1A68108700A75B9A /* example */,\n\t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n\t\t\t\t00E356EF1AD99517003FC87E /* exampleTests */,\n\t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n\t\t\t\t2D16E6871FA4F8E400B85C8A /* Frameworks */,\n\t\t\t\t784CB61E251B5FDF0041E7B9 /* example-Bridging-Header.h */,\n\t\t\t\t107E043451EC78F9A669290F /* Pods */,\n\t\t\t);\n\t\t\tindentWidth = 2;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 2;\n\t\t\tusesTabs = 0;\n\t\t};\n\t\t83CBBA001A601CBA00E9B192 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07F961A680F5B00A75B9A /* example.app */,\n\t\t\t\t00E356EE1AD99517003FC87E /* exampleTests.xctest */,\n\t\t\t\t2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */,\n\t\t\t\t2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t00E356ED1AD99517003FC87E /* exampleTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"exampleTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t7652B6F464E41F77440A1E62 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t00E356EA1AD99517003FC87E /* Sources */,\n\t\t\t\t00E356EB1AD99517003FC87E /* Frameworks */,\n\t\t\t\t00E356EC1AD99517003FC87E /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = exampleTests;\n\t\t\tproductName = exampleTests;\n\t\t\tproductReference = 00E356EE1AD99517003FC87E /* exampleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t13B07F861A680F5B00A75B9A /* example */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"example\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1BAAB09C0E519669759E892B /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tFD10A7F022414F080027D42C /* Start Packager */,\n\t\t\t\t13B07F871A680F5B00A75B9A /* Sources */,\n\t\t\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */,\n\t\t\t\t13B07F8E1A680F5B00A75B9A /* Resources */,\n\t\t\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,\n\t\t\t\t09A6C9AC57B883BFFE487C63 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = example;\n\t\t\tproductName = example;\n\t\t\tproductReference = 13B07F961A680F5B00A75B9A /* example.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t2D02E47A1E0B4A5D006451C7 /* example-tvOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget \"example-tvOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1147595213F5F365BF3F9E03 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tFD10A7F122414F3F0027D42C /* Start Packager */,\n\t\t\t\t2D02E4771E0B4A5D006451C7 /* Sources */,\n\t\t\t\t2D02E4781E0B4A5D006451C7 /* Frameworks */,\n\t\t\t\t2D02E4791E0B4A5D006451C7 /* Resources */,\n\t\t\t\t2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"example-tvOS\";\n\t\t\tproductName = \"example-tvOS\";\n\t\t\tproductReference = 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget \"example-tvOSTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4B1A381FEE22F3500C940571 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t2D02E48C1E0B4A5D006451C7 /* Sources */,\n\t\t\t\t2D02E48D1E0B4A5D006451C7 /* Frameworks */,\n\t\t\t\t2D02E48E1E0B4A5D006451C7 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"example-tvOSTests\";\n\t\t\tproductName = \"example-tvOSTests\";\n\t\t\tproductReference = 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t83CBB9F71A601CBA00E9B192 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1130;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t00E356ED1AD99517003FC87E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t\tTestTargetID = 13B07F861A680F5B00A75B9A;\n\t\t\t\t\t};\n\t\t\t\t\t13B07F861A680F5B00A75B9A = {\n\t\t\t\t\t\tDevelopmentTeam = 3MB2DAV63K;\n\t\t\t\t\t\tLastSwiftMigration = 1200;\n\t\t\t\t\t};\n\t\t\t\t\t2D02E47A1E0B4A5D006451C7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t2D02E48F1E0B4A5D006451C7 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 2D02E47A1E0B4A5D006451C7;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"example\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 83CBB9F61A601CBA00E9B192;\n\t\t\tproductRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t13B07F861A680F5B00A75B9A /* example */,\n\t\t\t\t00E356ED1AD99517003FC87E /* exampleTests */,\n\t\t\t\t2D02E47A1E0B4A5D006451C7 /* example-tvOS */,\n\t\t\t\t2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t00E356EC1AD99517003FC87E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8E1A680F5B00A75B9A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tA7AB6618267760DC00A976C9 /* agconnect-services.plist in Resources */,\n\t\t\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E4791E0B4A5D006451C7 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E48E1E0B4A5D006451C7 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Bundle React Native code and images\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"export NODE_BINARY=node\\n../node_modules/react-native/scripts/react-native-xcode.sh\\n\";\n\t\t};\n\t\t09A6C9AC57B883BFFE487C63 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources.sh\",\n\t\t\t\t\"${PODS_ROOT}/AGConnectCredential/AGCResources.bundle\",\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGCResources.bundle\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-example/Pods-example-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t1147595213F5F365BF3F9E03 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-example-tvOS-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t1BAAB09C0E519669759E892B /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-example-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Bundle React Native Code And Images\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"export NODE_BINARY=node\\n../node_modules/react-native/scripts/react-native-xcode.sh\";\n\t\t};\n\t\t4B1A381FEE22F3500C940571 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-example-tvOSTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7652B6F464E41F77440A1E62 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-exampleTests-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tFD10A7F022414F080027D42C /* Start Packager */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Start Packager\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"export RCT_METRO_PORT=\\\"${RCT_METRO_PORT:=8081}\\\"\\necho \\\"export RCT_METRO_PORT=${RCT_METRO_PORT}\\\" > \\\"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\\\"\\nif [ -z \\\"${RCT_NO_LAUNCH_PACKAGER+xxx}\\\" ] ; then\\n  if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\\n    if ! curl -s \\\"http://localhost:${RCT_METRO_PORT}/status\\\" | grep -q \\\"packager-status:running\\\" ; then\\n      echo \\\"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\\\"\\n      exit 2\\n    fi\\n  else\\n    open \\\"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\\\" || echo \\\"Can't start packager automatically\\\"\\n  fi\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tFD10A7F122414F3F0027D42C /* Start Packager */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Start Packager\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"export RCT_METRO_PORT=\\\"${RCT_METRO_PORT:=8081}\\\"\\necho \\\"export RCT_METRO_PORT=${RCT_METRO_PORT}\\\" > \\\"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\\\"\\nif [ -z \\\"${RCT_NO_LAUNCH_PACKAGER+xxx}\\\" ] ; then\\n  if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\\n    if ! curl -s \\\"http://localhost:${RCT_METRO_PORT}/status\\\" | grep -q \\\"packager-status:running\\\" ; then\\n      echo \\\"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\\\"\\n      exit 2\\n    fi\\n  else\\n    open \\\"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\\\" || echo \\\"Can't start packager automatically\\\"\\n  fi\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t00E356EA1AD99517003FC87E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t00E356F31AD99517003FC87E /* exampleTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F871A680F5B00A75B9A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,\n\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n\t\t\t\t7808A079252C573D00EC5C94 /* Example.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E4771E0B4A5D006451C7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,\n\t\t\t\t2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t2D02E48C1E0B4A5D006451C7 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13B07F861A680F5B00A75B9A /* example */;\n\t\t\ttargetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;\n\t\t};\n\t\t2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 2D02E47A1E0B4A5D006451C7 /* example-tvOS */;\n\t\t\ttargetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t00E356F61AD99517003FC87E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 220857A4DD9BF682D39657F5 /* Pods-exampleTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = exampleTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/example.app/example\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t00E356F71AD99517003FC87E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F591140CEDDF7090638DDDB9 /* Pods-exampleTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tINFOPLIST_FILE = exampleTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/example.app/example\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 75A7559AD3B7A94371256AF9 /* Pods-example.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 3MB2DAV63K;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tINFOPLIST_FILE = example/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.huawei.hms.rn.analytics.demo;\n\t\t\t\tPRODUCT_NAME = example;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"example-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t13B07F951A680F5B00A75B9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2DB431B2682E01CC9B91848F /* Pods-example.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEAD_CODE_STRIPPING = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 3MB2DAV63K;\n\t\t\t\tENABLE_BITCODE = YES;\n\t\t\t\tINFOPLIST_FILE = example/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.huawei.hms.rn.analytics.demo;\n\t\t\t\tPRODUCT_NAME = example;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"example-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2D02E4971E0B4A5E006451C7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 604F532643F241792DCEF92C /* Pods-example-tvOS.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"example-tvOS/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.example-tvOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2D02E4981E0B4A5E006451C7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 2DAF0C63CB1BF8A068F8C847 /* Pods-example-tvOS.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = \"App Icon & Top Shelf Image\";\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"example-tvOS/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.example-tvOS\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 3;\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t2D02E4991E0B4A5E006451C7 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = B82060CA481619D6BA4BF22E /* Pods-example-tvOSTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"example-tvOSTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.example-tvOSTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 10.1;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t2D02E49A1E0B4A5E006451C7 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F2FB16E3670870BC6E3C2057 /* Pods-example-tvOSTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tINFOPLIST_FILE = \"example-tvOSTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"-ObjC\",\n\t\t\t\t\t\"-lc++\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.reactjs.native.example.example-tvOSTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = appletvos;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS\";\n\t\t\t\tTVOS_DEPLOYMENT_TARGET = 10.1;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t83CBBA201A601CBA00E9B192 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t83CBBA211A601CBA00E9B192 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"exampleTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t00E356F61AD99517003FC87E /* Debug */,\n\t\t\t\t00E356F71AD99517003FC87E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13B07F941A680F5B00A75B9A /* Debug */,\n\t\t\t\t13B07F951A680F5B00A75B9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget \"example-tvOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2D02E4971E0B4A5E006451C7 /* Debug */,\n\t\t\t\t2D02E4981E0B4A5E006451C7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget \"example-tvOSTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t2D02E4991E0B4A5E006451C7 /* Debug */,\n\t\t\t\t2D02E49A1E0B4A5E006451C7 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t83CBBA201A601CBA00E9B192 /* Debug */,\n\t\t\t\t83CBBA211A601CBA00E9B192 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;\n}\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2D02E47A1E0B4A5D006451C7\"\n               BuildableName = \"example-tvOS.app\"\n               BlueprintName = \"example-tvOS\"\n               ReferencedContainer = \"container:example.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"2D02E48F1E0B4A5D006451C7\"\n               BuildableName = \"example-tvOSTests.xctest\"\n               BlueprintName = \"example-tvOSTests\"\n               ReferencedContainer = \"container:example.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2D02E47A1E0B4A5D006451C7\"\n            BuildableName = \"example-tvOS.app\"\n            BlueprintName = \"example-tvOS\"\n            ReferencedContainer = \"container:example.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"2D02E47A1E0B4A5D006451C7\"\n            BuildableName = \"example-tvOS.app\"\n            BlueprintName = \"example-tvOS\"\n            ReferencedContainer = \"container:example.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n               BuildableName = \"example.app\"\n               BlueprintName = \"example\"\n               ReferencedContainer = \"container:example.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"exampleTests.xctest\"\n               BlueprintName = \"exampleTests\"\n               ReferencedContainer = \"container:example.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"example.app\"\n            BlueprintName = \"example\"\n            ReferencedContainer = \"container:example.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <CommandLineArguments>\n         <CommandLineArgument\n            argument = \"-HADebugEnabled\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n         <CommandLineArgument\n            argument = \"-HALogLevelDebug\"\n            isEnabled = \"YES\">\n         </CommandLineArgument>\n      </CommandLineArguments>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"example.app\"\n            BlueprintName = \"example\"\n            ReferencedContainer = \"container:example.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:example.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/exampleTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/example/ios/exampleTests/exampleTests.m",
    "content": "#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n#import <React/RCTLog.h>\n#import <React/RCTRootView.h>\n\n#define TIMEOUT_SECONDS 600\n#define TEXT_TO_LOOK_FOR @\"Welcome to React\"\n\n@interface exampleTests : XCTestCase\n\n@end\n\n@implementation exampleTests\n\n- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test\n{\n  if (test(view)) {\n    return YES;\n  }\n  for (UIView *subview in [view subviews]) {\n    if ([self findSubviewInView:subview matching:test]) {\n      return YES;\n    }\n  }\n  return NO;\n}\n\n- (void)testRendersWelcomeScreen\n{\n  UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];\n  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];\n  BOOL foundElement = NO;\n\n  __block NSString *redboxError = nil;\n#ifdef DEBUG\n  RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {\n    if (level >= RCTLogLevelError) {\n      redboxError = message;\n    }\n  });\n#endif\n\n  while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {\n    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n    [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n\n    foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {\n      if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {\n        return YES;\n      }\n      return NO;\n    }];\n  }\n\n#ifdef DEBUG\n  RCTSetLogFunction(RCTDefaultLogFunction);\n#endif\n\n  XCTAssertNil(redboxError, @\"RedBox error: %@\", redboxError);\n  XCTAssertTrue(foundElement, @\"Couldn't find element with text '%@' in %d seconds\", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);\n}\n\n\n@end\n"
  },
  {
    "path": "react-native-hms-analytics/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-analytics/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-analytics-demo\",\n  \"version\": \"6.12.0-301\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"@hmscore/react-native-hms-analytics\": \"6.12.0-301\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.9\",\n    \"@babel/runtime\": \"^7.12.5\",\n    \"@babel/traverse\": \"7.22.8\",\n    \"metro-react-native-babel-preset\": \"^0.64.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-analytics/ios/AnalyticsViewModel.swift",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\nimport HiAnalytics\n\n/// HAReportPolicy Types.\nenum ReportPolicyType: String {\n    case scheduledTime, appLaunch, moveBackground, cacheThreshold\n}\n\n/// All the Analytics API's can be reached via AnalyticsViewModel class instance.\npublic class AnalyticsViewModel {\n\n    /// **CompletionHandler** is a typealias that provides result and error when the request is completed.\n    /// - Parameters:\n    ///   - result: Any Object that will be returned when the result comes.\n    ///   - error: NSError that will be returned when there is an error.\n    public typealias CompletionHandler = (_ result: Any?, _ error: NSError?) -> Void\n\n    private var completionHandler: CompletionHandler?\n\n    /// Initialize configuration.\n    func config(_ routePolicy: String){\n        if(\"\" != routePolicy) {\n            HiAnalytics.config(withRoutePolicy: routePolicy)\n        } else {\n            HiAnalytics.config()\n        }\n    }\n\n    /// Sets data reporting policies.\n    /// - Parameters:\n    ///   - reportPolicyType: HAReportPolicy type.\n    ///   - timer: Scheduled time interval, in seconds (value range: 60 to 1800).\n    /// - Important:\n    /// - **onScheduledTimePolicy**  -> Event reporting at scheduled time.\n    /// - **onAppLaunchPolicy** -> Event reporting on app launch.\n    /// - **onMoveBackgroundPolicy** -> Event reporting when the app moves to the background (enabled by default).\n    /// - **onCacheThresholdPolicy** -> Event reporting when the specified threshold is reached (enabled by default). The default value is 200 (value range: 30 to 1000). This policy remains effective after being enabled.\n    /// - Returns: Void\n    func setReportPolicies(_ reportPolicyTypes: Array<Any>){\n        for type in reportPolicyTypes {\n            guard let type = type as? NSDictionary else {\n                return\n            }\n            reportPolicyTypeFor3rdParty(type)\n        }\n    }\n\n    /// Gets type as a Dictionary and calls HAReportPolicy with a requested type and parameters.\n    /// - Parameter typeDict: Refers to NSDictionary Value to get HAReportPolicy types.\n    /// - Returns: Void\n    private func reportPolicyTypeFor3rdParty(_ typeDict: NSDictionary){\n        guard let type = typeDict[\"reportPolicyType\"] as? String else {return}\n\n        switch type {\n        case ReportPolicyType.scheduledTime.rawValue:\n            if let timer = typeDict[\"seconds\"] as? Int{\n                HiAnalytics.setReportPolicies([HAReportPolicy.onScheduledTime(timer)])\n            }\n        case ReportPolicyType.appLaunch.rawValue:\n            HiAnalytics.setReportPolicies([HAReportPolicy.onAppLaunch()])\n        case ReportPolicyType.moveBackground.rawValue:\n            HiAnalytics.setReportPolicies([HAReportPolicy.onMoveBackground()])\n        case ReportPolicyType.cacheThreshold.rawValue:\n            if let timer = typeDict[\"threshold\"] as? Int{\n                HiAnalytics.setReportPolicies([HAReportPolicy.onCacheThresholdPolicy(timer)])\n            }\n        default:\n            return\n        }\n        return\n    }\n\n    /// Report custom events.\n    ///\n    /// - Parameters:\n    ///   - eventId: Event ID, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty or set to the ID of an automatically collected event.\n    ///   - params: Information carried in the event. The key value cannot contain spaces or invisible characters.\n    /// - Returns: Void\n    func onEvent(_ eventId: String, params: NSDictionary){\n        if let params = (params as? [String : Any]){\n            HiAnalytics.onEvent(eventId, setParams: params)\n        }\n    }\n\n    /// User attribute values remain unchanged throughout the app's lifecycle and session. A maximum of 25 user attribute names are supported. If an attribute name is duplicate with an existing one, the attribute names needs to be changed.\n    /// - Parameters:\n    ///   - name: User attribute name, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty.\n    ///   - value: Attribute value, a string that contains a maximum of 256 characters. The value cannot be empty.\n    /// - Returns: Void\n    func setUserProfile(_ name: String, value: String){\n        HiAnalytics.setUserProfile(name, setValue: value)\n    }\n\n    /// Deletes user profile.\n    /// - Parameters:\n    ///   - name: User attribute name, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty.\n    /// - Returns: Void\n    func deleteUserProfile(_ name: String){\n        HiAnalytics.setUserProfile(name, setValue: nil)\n    }\n\n    // Add Default Event Params .\n    /// - Parameters:\n    ///   - params: Bundle params\n    /// - Returns: Void\n    func addDefaultEventParams(_ params: NSDictionary){\n        if let params = (params as? [String : Any]){\n            HiAnalytics.addDefaultEventParams (params)\n        }\n    }\n\n    /// Enable AB Testing. Predefined or custom user attributes are supported.\n    /// - Parameters:\n    ///   - predefined: Indicates whether to obtain predefined user attributes.\n    ///   - completion: A closer in the form of CompletionHandler will be called after request is completed.\n    /// - Returns: Predefined or custom user attributes.\n    func userProfiles(_ predefined: Bool, completion: @escaping CompletionHandler){\n        self.completionHandler = completion\n        if let result =  HiAnalytics.userProfiles(predefined) {\n            print(result)\n            self.postData(result: result)\n        } else {\n            let error = NSError(domain: \"\", code: 0, userInfo: [NSLocalizedDescriptionKey : \"User attributes are nil\"])\n            self.postError(error: error)\n        }\n    }\n\n    /// Enable event collection. No data will be collected when this function is disabled.\n    /// - Parameters:\n    ///   - enabled: Indicates whether to enable event collection. **YES: enabled (default); NO: disabled.**\n    /// - Returns: Void\n    func setAnalyticsEnabled(_ enabled: Bool){\n        HiAnalytics.setAnalyticsEnabled(enabled)\n    }\n    \n    /// Sets whether to collect advertising identifiers.\n    /// - Parameters:\n    ///   - enabled: Indicates whether to enable advertising identifiers. **YES: enabled (default); NO: disabled.**\n    /// - Returns: Void\n    func setCollectAdsIdEnabled(_ enabled: Bool){\n        HiAnalytics.setCollectAdsIdEnabled(enabled)\n    }\n\n    /// Specifies whether to enable restriction of HUAWEI Analytics. The default value is false, which indicates that HUAWEI Analytics is enabled by default.\n    /// - Parameters:Indicates whether to enable restriction of HUAWEI Analytics. The default value is false, which indicates that HUAWEI Analytics is enabled by default. **true:** Enables restriction of HUAWEI Analytics. **false:** Disables restriction of HUAWEI Analytics.Indicates whether to enable event collection. **YES: enabled (default); NO: disabled.**\n    /// - Returns: Void\n    func setRestrictionEnabled(_ enabled: Bool){\n        HiAnalytics.setRestrictionEnabled(enabled)\n    }\n\n    /// Obtain the app instance ID from AppGallery Connect.\n    func aaid() -> String{\n        return HiAnalytics.aaid()\n    }\n\n    /// Obtains the restriction status of HUAWEI Analytics.\n    func isRestrictionEnabled() -> Bool{\n        return HiAnalytics.isRestrictionEnabled()\n    }\n\n    /// Set a user ID.\n    /// - Parameters:\n    ///   - userId: User ID, a string that contains a maximum of 256 characters. The value cannot be empty.\n    ///  - Important: When the setUserId API is called, if the old userId is not empty and is different from the new userId, a new session is generated. If you do not want to use setUserId to identify a user (for example, when a user signs out), set userId to **nil**.\n    /// - Returns: Void\n    func setUserId(_ userId: String){\n        HiAnalytics.setUserId(userId)\n    }\n\n    /// Set the session timeout interval. The app is running in the foreground. When the interval between two adjacent events exceeds the specified timeout interval, a new session is generated.\n    /// - Parameters:\n    ///   - milliseconds: Session timeout interval, in milliseconds.\n    ///  - Important: The default value is 30 minutes.\n    /// - Returns: Void\n    func setSessionDuration(_ milliseconds: TimeInterval){\n        HiAnalytics.setSessionDuration(TimeInterval(milliseconds))\n    }\n\n    /// Delete all collected data in the local cache, including the cached data that fails to be sent.\n    func clearCachedData(){\n        HiAnalytics.clearCachedData()\n    }\n}\n\nextension AnalyticsViewModel{\n    fileprivate func postData(result: Any?) {\n        if let comp = completionHandler {\n            comp(result, nil)\n        }\n    }\n\n    fileprivate func postError(error: NSError?) {\n        if let comp = completionHandler {\n            comp(nil, error)\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics-Bridging-Header.h",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import <React/RCTBridgeModule.h>\n"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics.m",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n#import <Foundation/Foundation.h>\n#import \"React/RCTBridgeModule.h\"\n\n/// Provides method declarations of Analytics Kit.\n@interface RCT_EXTERN_REMAP_MODULE(HMSAnalyticsModule, HMSAnalytics, NSObject)\n\nRCT_EXTERN_METHOD(isRestrictionEnabled: (RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setReportPolicies: (NSArray*)reportPolicyType resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setUserProfile: (NSString*)name value:(NSString*)value resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(deleteUserProfile: (NSString*)name resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(addDefaultEventParams: (NSDictionary*)params resolve:(RCTPromiseResolveBlock)resolve\n                  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(onEvent: (NSString*)eventId params:(NSDictionary*)params resolve:(RCTPromiseResolveBlock)resolve\n                  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(getUserProfiles: (BOOL*)predefined resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setAnalyticsEnabled: (BOOL*)enabled resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setCollectAdsIdEnabled: (BOOL*)enabled resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setRestrictionEnabled: (BOOL*)enabled resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(getAAID: (RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setUserId: (NSString*)predefined resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(setSessionDuration: (NSInteger*)milliseconds resolve:(RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\nRCT_EXTERN_METHOD(clearCachedData: (RCTPromiseResolveBlock)resolve\n\t\t\t\t  rejecter: (RCTPromiseRejectBlock)reject)\n\n@end\n"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics.swift",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\nimport Foundation\nimport HiAnalytics\n\n@objc(HMSAnalytics)\n\n/// Provides methods to initialize Analytics Kit and implement analysis functions.\nclass HMSAnalytics: NSObject, Handling{\n\n    /// All the Analytics API's can be reached via AnalyticsViewModel class instance.\n    private lazy var viewModel: AnalyticsViewModel = AnalyticsViewModel()\n    \n    /// Sets Data Processing Location.\n    /// - Parameters:\n    ///   - routePolicy: Data processing location.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func getInstance(_ routePolicy: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock)  -> Void {\n        Log.debug(#function) {\n            viewModel.config(routePolicy)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Obtains the restriction status of HUAWEI Analytics.\n    /// - Parameters:\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func isRestrictionEnabled(_ resolve: @escaping RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            handle(resolve: resolve, viewModel.isRestrictionEnabled())\n        }\n    }\n\n    /// Sets data reporting policies.\n    /// - Parameters:\n    ///   - reportPolicyType: HAReportPolicy type.\n    ///   - timer: Scheduled time interval, in seconds (value range: 60 to 1800).\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Important:\n    /// - **onScheduledTimePolicy**  -> Event reporting at scheduled time.\n    /// - **onAppLaunchPolicy** -> Event reporting on app launch.\n    /// - **onMoveBackgroundPolicy** -> Event reporting when the app moves to the background (enabled by default).\n    /// - **onCacheThresholdPolicy** -> Event reporting when the specified threshold is reached (enabled by default). The default value is 200 (value range: 30 to 1000). This policy remains effective after being enabled.\n    /// - Returns: Void\n    @objc func setReportPolicies(_ reportPolicyTypes: NSArray, resolve: @escaping RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            if let reportPolicyTypes = reportPolicyTypes as? Array<Any>{\n                viewModel.setReportPolicies(reportPolicyTypes)\n                handle(resolve: resolve)\n            }else{\n                fail(with: \"Please add report policy type.\", resolve: resolve)\n            }\n        }\n    }\n\n    /// Report custom events.\n    ///\n    /// - Parameters:\n    ///   - eventId: Event ID, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty or set to the ID of an automatically collected event.\n    ///   - params: Information carried in the event. The key value cannot contain spaces or invisible characters.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func onEvent(_ eventId: String, params: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.onEvent(eventId, params: params)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// User attribute values remain unchanged throughout the app's lifecycle and session. A maximum of 25 user attribute names are supported. If an attribute name is duplicate with an existing one, the attribute names needs to be changed.\n    /// - Parameters:\n    ///   - name: User attribute name, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty.\n    ///   - value: Attribute value, a string that contains a maximum of 256 characters. The value cannot be empty.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func setUserProfile(_ name: String, value: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.setUserProfile(name, value: value)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Deletes user profile.\n    /// - Parameters:\n    ///   - name: User attribute name, a string that contains a maximum of 256 characters excluding spaces and invisible characters. The value cannot be empty.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func deleteUserProfile(_ name: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.deleteUserProfile(name)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// - Parameters:\n    ///   - map:  The value cannot be empty.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func addDefaultEventParams(_ params: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.addDefaultEventParams(params)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Enable AB Testing. Predefined or custom user attributes are supported.\n    /// - Parameters:\n    ///   - predefined: Indicates whether to obtain predefined user attributes.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Predefined or custom user attributes.\n    @objc func getUserProfiles(_ predefined: Bool, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.userProfiles(predefined) { [weak self] (result, error) in\n                guard let strongSelf = self else {return}\n                if let error = error {\n                    strongSelf.fail(with: error.localizedDescription, resolve: resolve)\n                    return\n                }\n                if let result = result{\n                    print(result)\n                    strongSelf.handle(resolve: resolve, result)\n                }\n            }\n        }\n    }\n\n    /// Specifies whether to enable restriction of HUAWEI Analytics. The default value is false, which indicates that HUAWEI Analytics is enabled by default.\n    /// - Parameters:\n    ///   - enabled: Indicates whether to enable restriction of HUAWEI Analytics. The default value is false, which indicates that HUAWEI Analytics is enabled by default. true: Enables restriction of HUAWEI Analytics. false: Disables restriction of HUAWEI Analytics.\n    ///   - resolve: Refers to promise valaue, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func setRestrictionEnabled(_ enabled: Bool, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.setRestrictionEnabled(enabled)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Enable event collection. No data will be collected when this function is disabled.\n    /// - Parameters:\n    ///   - enabled: Indicates whether to enable event collection. **YES: enabled (default); NO: disabled.**\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func setAnalyticsEnabled(_ enabled: Bool, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.setAnalyticsEnabled(enabled)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Sets whether to collect advertising identifiers.\n    /// - Parameters:\n    ///   - enabled: Indicates whether to enable advertising identifiers. **YES: enabled (default); NO: disabled.**\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func setCollectAdsIdEnabled(_ enabled: Bool, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            viewModel.setCollectAdsIdEnabled(enabled)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Obtain the app instance ID from AppGallery Connect.\n    /// - Parameters:\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func getAAID(_ resolve: RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock) -> Void {\n        Log.debug(#function) {\n            handle(resolve: resolve, viewModel.aaid())\n        }\n    }\n\n    /// Set a user ID.\n    /// - Parameters:\n    ///   - userId: User ID, a string that contains a maximum of 256 characters. The value cannot be empty.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    ///  - Important: When the setUserId API is called, if the old userId is not empty and is different from the new userId, a new session is generated. If you do not want to use setUserId to identify a user (for example, when a user signs out), set userId to **nil**.\n    /// - Returns: Void\n    @objc func setUserId(_ userId: String, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock)  -> Void {\n        Log.debug(#function) {\n            viewModel.setUserId(userId)\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Set the session timeout interval. The app is running in the foreground. When the interval between two adjacent events exceeds the specified timeout interval, a new session is generated.\n    /// - Parameters:\n    ///   - milliseconds: Session timeout interval, in milliseconds.\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, inÏTO the failure scenarario, exception is returned.\n    ///  - Important: The default value is 30 minutes.\n    /// - Returns: Void\n    @objc func setSessionDuration(_ milliseconds: Int, resolve: @escaping RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock)  -> Void {\n        Log.debug(#function) {\n            viewModel.setSessionDuration(TimeInterval(milliseconds))\n            handle(resolve: resolve)\n        }\n    }\n\n    /// Delete all collected data in the local cache, including the cached data that fails to be sent.\n    /// - Parameters:\n    ///   - resolve: Refers to promise value, in the success scenarario, {\"isSuccess\": true} is returned.\n    ///   - reject:  Refers to promise value, in the failure scenarario, exception is returned.\n    /// - Returns: Void\n    @objc func clearCachedData(_ resolve: @escaping RCTPromiseResolveBlock,rejecter reject: RCTPromiseRejectBlock)  -> Void {\n        Log.debug(#function) {\n            viewModel.clearCachedData()\n            handle(resolve: resolve)\n        }\n    }\n\n    /// *requiresMainQueueSetup* must be implemented to use constantsToExport or have implemented an init() method for UIKit components in React Native v0.49+.\n    /// - Returns: a Boolean: **true** if the class needed to be initialized on the main thread, **false** if the class can be initialized on a background thread.\n    @objc static func requiresMainQueueSetup() -> Bool {\n        return false\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t58B511D91A9E6C8500147676 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/$(PRODUCT_NAME)\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t134814201AA4EA6300B7C361 /* libHMSAnalytics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHMSAnalytics.a; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t58B511D81A9E6C8500147676 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t134814211AA4EA7D00B7C361 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t134814201AA4EA6300B7C361 /* libHMSAnalytics.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t58B511D21A9E6C8500147676 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t134814211AA4EA7D00B7C361 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t58B511DA1A9E6C8500147676 /* HMSAnalytics */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget \"HMSAnalytics\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t58B511D71A9E6C8500147676 /* Sources */,\n\t\t\t\t58B511D81A9E6C8500147676 /* Frameworks */,\n\t\t\t\t58B511D91A9E6C8500147676 /* CopyFiles */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = HMSAnalytics;\n\t\t\tproductName = RCTDataManager;\n\t\t\tproductReference = 134814201AA4EA6300B7C361 /* libHMSAnalytics.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t58B511D31A9E6C8500147676 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = Facebook;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t58B511DA1A9E6C8500147676 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject \"HMSAnalytics\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 58B511D21A9E6C8500147676;\n\t\t\tproductRefGroup = 58B511D21A9E6C8500147676;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t58B511DA1A9E6C8500147676 /* HMSAnalytics */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t58B511D71A9E6C8500147676 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\t58B511ED1A9E6C8500147676 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t58B511EE1A9E6C8500147676 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"/usr/lib/swift $(inherited)\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\\\"\",\n\t\t\t\t\t\"\\\"$(inherited)\\\"\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t58B511F01A9E6C8500147676 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../../../React/**\",\n\t\t\t\t\t\"$(SRCROOT)/../../react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = HMSAnalytics;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t58B511F11A9E6C8500147676 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../../../React/**\",\n\t\t\t\t\t\"$(SRCROOT)/../../react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tLIBRARY_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_NAME = HMSAnalytics;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t58B511D61A9E6C8500147676 /* Build configuration list for PBXProject \"HMSAnalytics\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t58B511ED1A9E6C8500147676 /* Debug */,\n\t\t\t\t58B511EE1A9E6C8500147676 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget \"HMSAnalytics\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t58B511F01A9E6C8500147676 /* Debug */,\n\t\t\t\t58B511F11A9E6C8500147676 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 58B511D31A9E6C8500147676 /* Project object */;\n}\n"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:HMSAnalytics.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "react-native-hms-analytics/ios/HmsAnalytics.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "react-native-hms-analytics/ios/Logger.swift",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\nimport UIKit\nimport SystemConfiguration\nimport CoreTelephony\nimport Foundation\n\nlet Log = Logger(version: \"6.3.2.300\", service: \"ReactNativeAnalytics\")\n\n/// Custom Logger Class to listen api log events from RN Side.\nfinal class Logger {\n\n  /// Info Types to declare success and failure scenarios.\n  public enum InfoType{\n    case call, success, fail\n  }\n\n  private var prefix: String = GenericFunctions.className(Logger.self)\n  private var version: String?\n  private var service: String?\n\n  /// Version and Service names may be added to give more detail in panel.\n  /// - Parameters:\n  ///   - version: Refers to version number of the framework.\n  ///   - service: Refers to service declaration.\n  public init(version: String? = nil, service: String? = nil) {\n    self.version = version\n    self.service = service\n  }\n\n  /// This function can be used during synchronized events. It gets the method name, calculates start end end times and reports to console as single events.\n  /// - Parameters:\n  ///   - file: Refers to file name that the function is in.\n  ///   - line: Refers to line number.\n  ///   - name: Refers to name of the function.\n  ///   - eventType: Refers to InfoType instance.\n  ///   - message: Refers to message that can be added in the panel.\n  ///   - block: Refers to function that will be used.\n  /// - Returns: Void\n  func debug(file: String = #file, line: Int = #line, name: String = #function, _ message: String, block:()->()) {\n      showInPanel(file:file, line:line, name:name, message: message, type: .call)\n      block()\n      showInPanel(file:file, line:line, name:name, message: message, type: .success)\n  }\n\n  // MARK: - Private Functions\n\n  /// Shows infos in panel\n  private func showInPanel(callTime: Double? = nil,\n                           file: String = #file,\n                           line: Int = #line,\n                           name: String = #function,\n                           message: String?,\n                           timeElapsed: Double? = nil,\n                           type: Logger.InfoType) {\n    switch type {\n    case .call:\n      printCall(name)\n      return\n    case .success:\n      printStatus(name, true)\n    case .fail:\n      printStatus(name, false)\n    }\n  }\n\n  /// Prints call messages among with the function names.\n  private func printCall(_ message: String){\n    print(\"call \\(message)\")\n  }\n\n  /// Print status messages.\n  private func printStatus(_ name: String, _ status: Bool){\n    let statusMsg = status ? \"success\" : \"failure\"\n    print(\"\\(name) \\(statusMsg)\")\n  }\n\n  /// Returns file name of the function is in.\n  private func getFileName(_ filePath: String) -> String {\n    let parser = filePath.split(separator:\"/\")\n    if let fileName = String(parser.last ?? \"\").split(separator: \".\").first {\n      return String(fileName)\n    }\n    return \"\"\n  }\n}\n\n// MARK: - Helper Functions\n\nstruct GenericFunctions {\n  static func className<T>(_ name: T) -> String {\n    return \"\\(name)\"\n  }\n}\n\nextension UIDevice {\n  var modelName: String {\n    var systemInfo = utsname()\n    uname(&systemInfo)\n    let machineMirror = Mirror(reflecting: systemInfo.machine)\n    let identifier = machineMirror.children.reduce(\"\") { identifier, element in\n      guard let value = element.value as? Int8, value != 0 else { return identifier }\n      return identifier + String(UnicodeScalar(UInt8(value)))\n    }\n    return identifier\n  }\n}\n\nextension Bundle {\n\n  public var packageName: String {\n    if let result = Bundle.main.bundleIdentifier {\n      return result\n    } else {\n      return \"⚠️\"\n    }\n  }\n\n  public var appVersionShort: String {\n    if let result = infoDictionary?[\"CFBundleShortVersionString\"] as? String {\n      return result\n    } else {\n      return \"⚠️\"\n    }\n  }\n  public var appVersionLong: String {\n    if let result = infoDictionary?[\"CFBundleVersion\"] as? String {\n      return result\n    } else {\n      return \"⚠️\"\n    }\n  }\n  public var appName: String {\n    if let result = infoDictionary?[\"CFBundleName\"] as? String {\n      return result\n    } else {\n      return \"⚠️\"\n    }\n  }\n}\n"
  },
  {
    "path": "react-native-hms-analytics/ios/Promise.swift",
    "content": "/*\n Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\nimport Foundation\n\n///Promise Handling blueprint and declerations.\nprotocol Handling {\n  func handle(resolve: @escaping RCTPromiseResolveBlock, _ isSuccess: Bool?, _ message: String?)\n  func handle<T>(resolve: RCTPromiseResolveBlock, _ instance: T)\n  func fail(with message: String, resolve: @escaping RCTPromiseResolveBlock)\n}\n\nextension Handling {\n  func handle(resolve: @escaping RCTPromiseResolveBlock, _ isSuccess: Bool?=true, _ message: String?=nil) {\n    Promise.shared.resolve(resolve: resolve, isSuccess, message)\n  }\n\n  func handle<T>(resolve: RCTPromiseResolveBlock, _ instance: T) {\n    Promise.shared.resolve(resolve: resolve, instance: instance)\n  }\n\n  func fail(with message: String, resolve: @escaping RCTPromiseResolveBlock){\n    Promise.shared.resolve(resolve: resolve, false, message)\n  }\n}\n\nclass Promise {\n  static let shared = Promise()\n\n  private init() { }\n\n  func resolve<T>(resolve: RCTPromiseResolveBlock, instance: T?) {\n    resolve(instance)\n  }\n\n  func resolve(resolve: @escaping RCTPromiseResolveBlock, _ isSuccess: Bool?, _ message: String?) {\n    var params:[String: Any] = [\"isSuccess\": isSuccess ?? true]\n    if let message = message{\n      params[\"message\"] = message\n    }\n    resolve(params)\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-analytics/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-analytics\",\n  \"title\": \"React Native HMS Analytics Kit\",\n  \"description\": \"React Native HMS Analytics Kit\",\n  \"version\": \"6.12.0-301\",\n  \"main\": \"./src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-analytics\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-analytics\",\n    \"hms-analytics\",\n    \"huawei-analytics\",\n    \"analytics-kit\"\n  ],\n  \"files\": [\n    \"android\",\n    \"ios\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"README.md\",\n    \"package.json\",\n    \"react-native-hms-analytics.podspec\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-analytics/react-native-hms-analytics.podspec",
    "content": "ENV['SWIFT_VERSION'] = '5'\nrequire \"json\"\n\npackage = JSON.parse(File.read(File.join(__dir__, \"package.json\")))\n\nPod::Spec.new do |s|\n  s.name         = \"react-native-hms-analytics\"\n  s.version      = package[\"version\"]\n  s.summary      = package[\"description\"]\n  s.description  = <<-DESC\n                  react-native-hms-analytics\n                   DESC\n  s.homepage     = \"https://github.com/HMS-Core/hms-react-native-plugin/tree/master/react-native-hms-analytics\"\n  # brief license entry:\n  s.license      = package[\"license\"]\n  s.platforms    = { :ios => \"9.0\" }\n  s.authors      = { \"HMS-Core\" => \"https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/environment-faq-0000001050162062-V5\" }\n  s.source       = { :git => \"\", :tag => \"#{s.version}\" }\n\n  s.source_files = \"ios/**/*.{h,c,m,swift}\"\n  s.requires_arc = true\n  s.static_framework = true\n  s.dependency \"React\"\n  # HMS Analytics Kit SDK\n  s.dependency \"HiAnalytics\", \"6.3.2.300\"\n\nend"
  },
  {
    "path": "react-native-hms-analytics/src/constants/Constants.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst Constants = {\n  REPORT_POLICY_TYPE: \"reportPolicyType\",\n  SECONDS: \"seconds\",\n  THRESHOLD: \"threshold\"\n};\n\nObject.freeze(Constants)\n\nexport default Constants;\n"
  },
  {
    "path": "react-native-hms-analytics/src/constants/HAEventType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst HAEventType = {\n  CREATEPAYMENTINFO: \"$CreatePaymentInfo\",\n  ADDPRODUCT2CART: \"$AddProduct2Cart\",\n  ADDPRODUCT2WISHLIST: \"$AddProduct2WishList\",\n  STARTAPP: \"$StartApp\",\n  STARTCHECKOUT: \"$StartCheckout\",\n  VIEWCAMPAIGN: \"$ViewCampaign\",\n  VIEWCHECKOUTSTEP: \"$ViewCheckoutStep\",\n  WINVIRTUALCOIN: \"$WinVirtualCoin\",\n  COMPLETEPURCHASE: \"$CompletePurchase\",\n  OBTAINLEADS: \"$ObtainLeads\",\n  JOINUSERGROUP: \"$JoinUserGroup\",\n  COMPLETELEVEL: \"$CompleteLevel\",\n  STARTLEVEL: \"$StartLevel\",\n  UPGRADELEVEL: \"$UpgradeLevel\",\n  SIGNIN: \"$SignIn\",\n  SIGNOUT: \"$SignOut\",\n  SUBMITSCORE: \"$SubmitScore\",\n  CREATEORDER: \"$CreateOrder\",\n  REFUNDORDER: \"$RefundOrder\",\n  DELPRODUCTFROMCART: \"$DelProductFromCart\",\n  SEARCH: \"$Search\",\n  VIEWCONTENT: \"$ViewContent\",\n  UPDATECHECKOUTOPTION: \"$UpdateCheckoutOption\",\n  SHARECONTENT: \"$ShareContent\",\n  REGISTERACCOUNT: \"$RegisterAccount\",\n  CONSUMEVIRTUALCOIN: \"$ConsumeVirtualCoin\",\n  STARTTUTORIAL: \"$StartTutorial\",\n  COMPLETETUTORIAL: \"$CompleteTutorial\",\n  OBTAINACHIEVEMENT: \"$ObtainAchievement\",\n  VIEWPRODUCT: \"$ViewProduct\",\n  VIEWPRODUCTLIST: \"$ViewProductList\",\n  VIEWSEARCHRESULT: \"$ViewSearchResult\",\n  UPDATEMEMBERSHIPLEVEL: \"$UpdateMembershipLevel\",\n  FILTRATEPRODUCT: \"$FiltrateProduct\",\n  VIEWCATEGORY: \"$ViewCategory\",\n  UPDATEORDER: \"$UpdateOrder\",\n  CANCELORDER: \"$CancelOrder\",\n  COMPLETEORDER: \"$CompleteOrder\",\n  CANCELCHECKOUT: \"$CancelCheckout\",\n  OBTAINVOUCHER: \"$ObtainVoucher\",\n  CONTACTCUSTOMSERVICE: \"$ContactCustomService\",\n  RATE: \"$Rate\",\n  INVITE: \"$Invite\",\n  NOVICEGUIDESTART: \"$NoviceGuideStart\",\n  NOVICEGUIDEEND: \"$NoviceGuideEnd\",\n  STARTGAME: \"$StartGame\",\n  ENDGAME: \"$EndGame\",\n  WINPROPS: \"$WinProps\",\n  CONSUMEPROPS: \"$ConsumeProps\",\n  ADDFRIEND: \"$AddFriend\",\n  ADDBLACKLIST: \"$AddBlacklist\",\n  VIEWFRIENDLIST: \"$ViewFriendList\",\n  QUITUSERGROUP: \"$QuitUserGroup\",\n  CREATEUSERGROUP: \"$CreateUserGroup\",\n  DISBANDUSERGROUP: \"$DisbandUserGroup\",\n  UPGRADEUSERGROUP: \"$UpgradeUserGroup\",\n  VIEWUSERGROUP: \"$ViewUserGroup\",\n  JOINTEAM: \"$JoinTeam\",\n  SENDMESSAGE: \"$SendMessage\",\n  LEARNSKILL: \"$LearnSkill\",\n  USESKILL: \"$UseSkill\",\n  GETEQUIPMENT: \"$GetEquipment\",\n  LOSEEQUIPMENT: \"$LoseEquipment\",\n  ENHANCEEQUIPMENT: \"$EnhanceEquipment\",\n  SWITCHCLASS: \"$SwitchClass\",\n  ACCEPTTASK: \"$AcceptTask\",\n  FINISHTASK: \"$FinishTask\",\n  ATTENDACTIVITY: \"$AttendActivity\",\n  FINISHCUTSCENE: \"$FinishCutscene\",\n  SKIPCUTSCENE: \"$SkipCutscene\",\n  GETPET: \"$GetPet\",\n  LOSEPET: \"$LosePet\",\n  ENHANCEPET: \"$EnhancePet\",\n  GETMOUNT: \"$GetMount\",\n  LOSEMOUNT: \"$LoseMount\",\n  ENHANCEMOUNT: \"$EnhanceMount\",\n  CREATEROLE: \"$CreateRole\",\n  SIGNINROLE: \"$SignInRole\",\n  SIGNOUTROLE: \"$SignOutRole\",\n  STARTBATTLE: \"$StartBattle\",\n  ENDBATTLE: \"$EndBattle\",\n  STARTDUNGEON: \"$StartDungeon\",\n  FINISHDUNGEON: \"$FinishDungeon\",\n  VIEWPACKAGE: \"$ViewPackage\",\n  REDEEM: \"$Redeem\",\n  MODIFYSETTING: \"$ModifySetting\",\n  WATCHVIDEO: \"$WatchVideo\",\n  CLICKMESSAGE: \"$ClickMessage\",\n  DRAWCARD: \"$DrawCard\",\n  VIEWCARDLIST: \"$ViewCardList\",\n  BINDACCOUNT: \"$BindAccount\",\n  STARTEXERCISE: \"$StartExercise\",\n  ENDEXERCISE: \"$EndExercise\",\n  STARTPLAYMEDIA: \"$StartPlayMedia\",\n  ENDPLAYMEDIA: \"$EndPlayMedia\",\n  STARTEXAMINE: \"$StartExamine\",\n  ENDEXAMINE: \"$EndExamine\",\n  CHECKIN: \"$CheckIn\",\n  COMPENSATION: \"$Compensation\",\n  POST: \"$Post\",\n  SHAREAPP: \"$ShareApp\",\n  IMPROVEINFORMATION: \"$ImproveInformation\",\n  EXCHANGEGOODS: \"$ExchangeGoods\",\n  VIEWHOUSELIST: \"$ViewHouseList\",\n  VIEWHOUSEDETAIL: \"$ViewHouseDetail\",\n  BINDDEVICE: \"$BindDevice\",\n  UNBINDDEVICE: \"$UnBindDevice\",\n  RESERVEMAINTENANCE: \"$ReserceMaintenance\",\n  DEVICEMISSINGREPORT: \"$DeviceMissingReport\",\n  STARTBOOKING: \"$StartBooking\",\n  LEARNTARGET: \"$LearnTarget\",\n  LANGUAGETEST: \"$LanguageTest\",\n  STARTTRAINING: \"$StartTraining\",\n  ENDTRAINING: \"$EndTraining\",\n  REGISTERACTIVITY: \"$RegisterActivity\",\n  EXITACTIVITY: \"$ExitActivity\",\n  COMPLETEACTIVITY: \"$CompleteActivity\",\n  ENTERACCOUNTOPENING: \"$EnterAccountOpening\",\n  SUBMITACCOUNTOPENING: \"$SubmitAccountOpening\",\n  BANDCARD: \"$BandCard\",\n  BANKTRANSFERIN: \"$BankTransferIn\",\n  BANKTRANSFEROUT: \"$BankTransferOut\",\n  VIEWSTOCKDETAIL: \"$ViewStockDetail\",\n  TRADESTOCKS: \"$TradeStocks\",\n  VIEWFINANCEPAGE: \"$ViewFinancePage\",\n  PURCHASEFINANCE: \"$PurchaseFinance\",\n  REDEMPTIONFINANCE: \"$RedemptionFinance\",\n  FUNDTRADING: \"$FundTrading\",\n  FIXEDINVESTMENT: \"$Fixedinvestment\",\n  APPLYNEW: \"$ApplyNew\",\n  VIEWINFORMATIONSECTION: \"$ViewInformationSection\",\n  VIEWINFORMATION: \"$ViewInformation\",\n  MODULARCLICK: \"$ModularClick\",\n  PAGEVIEW: \"$PageView\",\n  DISPLAYVOUCHER: \"$DisplayVoucher\",\n  BOOKCOURSE: \"$BookCourse\",\n  LEARNCOURSES: \"$LearnCourses\",\n  TRYOUT: \"$Tryout\",\n  ANSWER: \"$Answer\",\n  COMMENTCONTENT: \"$CommentContent\",\n  LIKECONTENT: \"$LikeContent\",\n  DELETEPRODUCT2WISHLIST: \"$DeleteProduct2WishList\",\n  ADCLICK: \"$AdClick\",\n  ADDISPLAY: \"$AdDisplay\",\n  ENABLEMEMBER: \"$EnableMember\",\n  CANCELMEMBER: \"$CancelMember\",\n  CLICKPURCHASE: \"$ClickPurchase\",\n  VIEWFUNDPAGE: \"$ViewFundPage\",\n  VIPCLICK: \"$vipClick\",\n  VIPFAILED: \"$vipFailed\",\n  VIPSUC: \"$vipSuc\",\n  REGISTERFAILED: \"$registerFailed\",\n  PERMISSIONAPPLICATION: \"$permissionApplication\",\n};\n\nObject.freeze(HAEventType);\nexport default HAEventType;\n"
  },
  {
    "path": "react-native-hms-analytics/src/constants/HAParamType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst HAParamType = {\n  STORENAME: \"$StoreName\",\n  BRAND: \"$Brand\",\n  CATEGORY: \"$Category\",\n  PRODUCTID: \"$ProductId\",\n  PRODUCTNAME: \"$ProductName\",\n  PRODUCTFEATURE: \"$ProductFeature\",\n  PRICE: \"$Price\",\n  QUANTITY: \"$Quantity\",\n  REVENUE: \"$Revenue\",\n  CURRNAME: \"$CurrName\",\n  PLACEID: \"$PlaceId\",\n  DESTINATION: \"$Destination\",\n  ENDDATE: \"$EndDate\",\n  BOOKINGDAYS: \"$BookingDays\",\n  PASSENGERSNUMBER: \"$PassengersNumber\",\n  BOOKINGROOMS: \"$BookingRooms\",\n  ORIGINATINGPLACE: \"$OriginatingPlace\",\n  BEGINDATE: \"$BeginDate\",\n  TRANSACTIONID: \"$TransactionId\",\n  CLASS: \"$Class\",\n  CLICKID: \"$ClickId\",\n  PROMOTIONNAME: \"$PromotionName\",\n  CONTENT: \"$Content\",\n  EXTENDPARAM: \"$ExtendParam\",\n  MATERIALNAME: \"$MaterialName\",\n  MATERIALSLOT: \"$MaterialSlot\",\n  MEDIUM: \"$Medium\",\n  SOURCE: \"$Source\",\n  KEYWORDS: \"$Keywords\",\n  OPTION: \"$Option\",\n  STEP: \"$Step\",\n  VIRTUALCURRNAME: \"$VirtualCurrName\",\n  VOUCHER: \"$Voucher\",\n  PLACE: \"$Place\",\n  SHIPPING: \"$Shipping\",\n  TAXFEE: \"$TaxFee\",\n  USERGROUPID: \"$UserGroupId\",\n  LEVELNAME: \"$LevelName\",\n  RESULT: \"$Result\",\n  ROLENAME: \"$RoleName\",\n  LEVELID: \"$LevelId\",\n  CHANNEL: \"$Channel\",\n  SCORE: \"$Score\",\n  SEARCHKEYWORDS: \"$SearchKeywords\",\n  CONTENTTYPE: \"$ContentType\",\n  ACHIEVEMENTID: \"$AchievementId\",\n  FLIGHTNO: \"$FlightNo\",\n  POSITIONID: \"$PositionId\",\n  PRODUCTLIST: \"$ProductList\",\n  ACOUNTTYPE: \"$AcountType\",\n  OCCURREDDATE: \"$OccurredDate\",\n  EVTRESULT: \"$EvtResult\",\n  PREVLEVEL: \"$PrevLevel\",\n  CURRVLEVEL: \"$CurrvLevel\",\n  VOUCHERS: \"$Vouchers\",\n  MATERIALSLOTTYPE: \"$MaterialSlotType\",\n  LISTID: \"$ListId\",\n  FILTERS: \"$Filters\",\n  SORTS: \"$Sorts\",\n  ORDERID: \"$OrderId\",\n  PAYTYPE: \"$PayType\",\n  REASON: \"$Reason\",\n  EXPIREDATE: \"$ExpireDate\",\n  VOUCHERTYPE: \"$VoucherType\",\n  SERVICETYPE: \"$ServiceType\",\n  DETAILS: \"$Details\",\n  COMMENTTYPE: \"$CommentType\",\n  REGISTMETHOD: \"$RegistMethod\",\n  DURATION: \"$Duration\",\n  LEVEL: \"$Level\",\n  PURCHASEENTRY: \"$PurchaseEntry\",\n  PROPS: \"$Props\",\n  ENTRY: \"$Entry\",\n  INVITER: \"$Inviter\",\n  VIPLEVEL: \"$VIPLevel\",\n  FIRSTSIGNIN: \"$FirstSignIn\",\n  DISCOUNT: \"$Discount\",\n  FIRSTPAY: \"$FirstPay\",\n  TASKID: \"$TaskId\",\n  FRIENDNUMBER: \"$FriendNumber\",\n  USERGROUPNAME: \"$UserGroupName\",\n  USERGROUPLEVEL: \"$UserGroupLevel\",\n  MEMBERS: \"$Members\",\n  LEVELBEFORE: \"$LevelBefore\",\n  MESSAGETYPE: \"$MessageType\",\n  ROLECOMBAT: \"$RoleCombat\",\n  ISTOPLEVEL: \"$IsTopLevel\",\n  ROLECLASS: \"$RoleClass\",\n  SKILLNAME: \"$SkillName\",\n  SKILLLEVEL: \"$SkillLevel\",\n  SKILLLEVELBEFORE: \"$SkillLevelBefore\",\n  EQUIPMENTID: \"$EquipmentId\",\n  EQUIPMENTNAME: \"$EquipmentName\",\n  EQUIPMENTLEVEL: \"$EquipmentLevel\",\n  CLASSLIMIT: \"$ClassLimit\",\n  LEVELLIMIT: \"$LevelLimit\",\n  ISFREE: \"$IsFree\",\n  TOTALAFTERCHANGE: \"$TotalAfterChange\",\n  QUALITY: \"$Quality\",\n  ENHANCETYPE: \"$EnhanceType\",\n  NEWCLASS: \"$NewClass\",\n  OLDCLASS: \"$OldClass\",\n  TASKTYPE: \"$TaskType\",\n  TASKNAME: \"$TaskName\",\n  REWARD: \"$Reward\",\n  ACTIVITYTYPE: \"$ActivityType\",\n  ACTIVITYNAME: \"$ActivityName\",\n  CUTSCENENAME: \"$CutsceneName\",\n  PETID: \"$PetId\",\n  PETDEFAULTNAME: \"$PetDefaultName\",\n  PETLEVEL: \"$PetLevel\",\n  MOUNTID: \"$MountId\",\n  MOUNTDEFAULTNAME: \"$MountDefaultName\",\n  MOUNTLEVEL: \"$MountLevel\",\n  ROLEGENDER: \"$RoleGender\",\n  SERVER: \"$Server\",\n  FIRSTCREATE: \"$FirstCreate\",\n  COMBAT: \"$Combat\",\n  BATTLETYPE: \"$BattleType\",\n  BATTLENAME: \"$BattleName\",\n  NUMBEROFCARDS: \"$NumberOfCards\",\n  CARDLIST: \"$CardList\",\n  PARTICIPANTS: \"$Participants\",\n  DIFFICULTY: \"$Difficulty\",\n  MVP: \"$MVP\",\n  DAMAGE: \"$Damage\",\n  RANKING: \"$Ranking\",\n  DUNGEONNAME: \"$DungeonName\",\n  WINREASON: \"$WinReason\",\n  BALANCE: \"$Balance\",\n  PACKAGETYPE: \"$PackageType\",\n  AMOUNT: \"$Amount\",\n  ITEMLIST: \"$ItemList\",\n  GIFTTYPE: \"$GiftType\",\n  GIFTNAME: \"$GiftName\",\n  TYPE: \"$Type\",\n  OLDVALUE: \"$OldValue\",\n  NEWVALUE: \"$NewValue\",\n  VIDEOTYPE: \"$VideoType\",\n  VIDEONAME: \"$VideoName\",\n  MESSAGETITLE: \"$MessageTitle\",\n  OPERATION: \"$Operation\",\n  NUMBEROFDRAWING: \"$NumberOfDrawing\",\n  LEFTPULLSFORGUARANTEE: \"$LeftPullsForGuarantee\",\n  VIPTYPE: \"$VIPType\",\n  VIPSTATUS: \"$VIPStatus\",\n  VIPEXPIREDATE: \"$VIPExpireDate\",\n  ENTER: \"$Enter\",\n  STARTDATE: \"$StartDate\",\n  EFFECTIVETIME: \"$EffectiveTime\",\n  NAME: \"$Name\",\n  MODE: \"$Mode\",\n  SUBJECT: \"$Subject\",\n  ACCURACY: \"$Accuracy\",\n  CONTENTLENGTH: \"$ContentLength\",\n  REMARK: \"$Remark\",\n  CONTENTNAME: \"$ContentName\",\n  SECTION: \"$Section\",\n  DAYS: \"$Days\",\n  POSTID: \"$PostId\",\n  INFORMATIONTYPE: \"$InformationType\",\n  INFORMATION: \"$Information\",\n  FEATURE: \"$Feature\",\n  ROOMS: \"$Rooms\",\n  SALEPRICE: \"$SalePrice\",\n  RENTFEE: \"$RentFee\",\n  RENTTYPE: \"$RentType\",\n  PAGENAME: \"$PageName\",\n  SERIES: \"$Series\",\n  MODEL: \"$Model\",\n  DEVICETYPE: \"$DeviceType\",\n  DEVICENAME: \"$DeviceName\",\n  BINDDURATION: \"$BindDuration\",\n  DEALERNAME: \"$DealerName\",\n  ARRIVALDATE: \"$ArrivalDate\",\n  BUYERTYPE: \"$BuyerType\",\n  SEAT: \"$Seat\",\n  ENERGY: \"$Energy\",\n  CONFIGURATION: \"$Configuration\",\n  ISLOAN: \"$IsLoan\",\n  LOANPRODUCTNAME: \"$LoanProductName\",\n  LOANCHANNEL: \"$LoanChannel\",\n  REPAYMENTMETHOD: \"$RepaymentMethod\",\n  ACTION: \"$Action\",\n  PAGE: \"$Page\",\n  INDEX: \"$Index\",\n  MODULE: \"$Module\",\n  SOURCEPAGE: \"$SourcePage\",\n  SOURCEPAGENAME: \"$SourcePageName\",\n  SOURCELOCATION: \"$SourceLocation\",\n  CITY: \"$City\",\n  FROMCITY: \"$FromCity\",\n  TOCITY: \"$ToCity\",\n  DEPARTUREDATE: \"$DepartureDate\",\n  RETURNDATE: \"$ReturnDate\",\n  TRIPTYPE: \"$TripType\",\n  SEARCHHOTEL: \"$SearchHotel\",\n  SPECIALTICKET: \"$SpecialTicket\",\n  HASBABY: \"$HasBaby\",\n  HASCHILDREN: \"$HasChildren\",\n  COUNTRY: \"$Country\",\n  STAR: \"$Star\",\n  CHECKINDATE: \"$CheckinDate\",\n  CHECKOUTDATE: \"$CheckoutDate\",\n  ALDULTCOUNT: \"$AldultCount\",\n  BABYCOUNT: \"$BabyCount\",\n  CHILDRENCOUNT: \"$ChildrenCount\",\n  FROM: \"$From\",\n  CARMODE: \"$CarMode\",\n  CARTIME: \"$CarTime\",\n  FLIGHTID: \"$FlightID\",\n  SEARCHRESULT: \"$SearchResult\",\n  PRODUCT: \"$Product\",\n  DEPARTURETIME: \"$DepartureTime\",\n  ARRIVETIME: \"$ArriveTime\",\n  DEPARTUREAIRPORT: \"$DepartureAirport\",\n  ARRIVEEAIRPORT: \"$ArriveeAirport\",\n  AIRLINE: \"$Airline\",\n  FLIGHTTYPE: \"$FlightType\",\n  DIRECTFLIGHT: \"$DirectFlight\",\n  TRAINTYPE: \"$TrainType\",\n  FROMSTATION: \"$FromStation\",\n  BEDTYPE: \"$BedType\",\n  BREAKFAST: \"$Breakfast\",\n  ARRIVEDATE: \"$ArriveDate\",\n  TRAINID: \"$TrainID\",\n  HOTELID: \"$HotelID\",\n  HOTELNAME: \"$HotelName\",\n  TRIPTAG: \"$TripTag\",\n  HOTELTYPE: \"$HotelType\",\n  CABIN: \"$Cabin\",\n  ROOMTYPE: \"$RoomType\",\n  CARTYPE: \"$CarType\",\n  SUPPLIER: \"$Supplier\",\n  STUDENTCOUNT: \"$StudentCount\",\n  ROOMCOUNT: \"$RoomCount\",\n  PERSONCOUNT: \"$PersonCount\",\n  VOUCHERID: \"$VoucherID\",\n  VOUCHERNAME: \"$VoucherName\",\n  VOUCHERPRICE: \"$VoucherPrice\",\n  USERTYPE: \"$UserType\",\n  TARGET: \"$Target\",\n  ISCOMPELETED: \"$IsCompeleted\",\n  USERLEVEL: \"$UserLevel\",\n  TIME: \"$Time\",\n  DISTANCE: \"$Distance\",\n  CALORIECONSUMED: \"$CalorieConsumed\",\n  PROGRESS: \"$Progress\",\n  MULTIPLEACCOUNTS: \"$MultipleAccounts\",\n  ACCOUNTTYPE: \"$AccountType\",\n  FAILUREREASON: \"$FailureReason\",\n  AUTHORITY: \"$Authority\",\n  CARDTYPE: \"$CardType\",\n  ISSUEBANK: \"$IssueBank\",\n  TRANSFORMAMOUNT: \"$TransformAmount\",\n  BANKNAME: \"$BankName\",\n  SOURCEMODULE: \"$SourceModule\",\n  STOCKCODE: \"$Stockcode\",\n  STOCKNAME: \"$Stockname\",\n  MARKETCODE: \"$MarketCode\",\n  MARKETNAME: \"$MarketName\",\n  VIEWTYPE: \"$ViewType\",\n  TRENDCYCLE: \"$TrendCycle\",\n  TRANSACTIONTYPE: \"$TransactionType\",\n  CURRENCY: \"$Currency\",\n  MONEY: \"$Money\",\n  FINANCEID: \"$FinanceId\",\n  FINANCENAME: \"$FinanceName\",\n  FINANCETYPE: \"$FinanceType\",\n  FINANCERATE: \"$FinanceRate\",\n  FINANCETIMELIMIT: \"$FinanceTimeLimit\",\n  FINANCEAMOUNTMIN: \"$FinanceAmountMin\",\n  FINANCERISKLEV: \"$FinanceRiskLev\",\n  PURCHASEAMOUNT: \"$PurchaseAmount\",\n  HANDLINGFEES: \"$HandlingFees\",\n  REDEMPTIONAMOUNT: \"$RedemptionAmount\",\n  RETURNAMOUNT: \"$ReturnAmount\",\n  FUNDCODE: \"$FundCode\",\n  FUNDTYPE: \"$FundType\",\n  FUNDNAME: \"$FundName\",\n  FUNDRISKLEV: \"$FundRiskLev\",\n  CHARGERATE: \"$ChargeRate\",\n  PAYMENTMETHOD: \"$PaymentMethod\",\n  FIXEDCYCLE: \"$FixedCycle\",\n  ENTRANCE: \"$Entrance\",\n  CODE: \"$code\",\n  NEWSTOPIC: \"$NewsTopic\",\n  INFORMATIONSOURCE: \"$InformationSource\",\n  COMMENTSNUMBER: \"$CommentsNumber\",\n  FORWARDINGNUMBER: \"$forwardingNumber\",\n  LIKES: \"$Likes\",\n  TITLE: \"$Title\",\n  SEARCHTYPE: \"$SearchType\",\n  LOCATION: \"$Location\",\n  ID: \"$Id\",\n  PLAYMODE: \"$PlayMode\",\n  LISTS: \"$Lists\",\n  ADLOCATION: \"$Adlocation\",\n  ADCATEGORY: \"$AdCategory\",\n  ADTHEME: \"$AdTheme\",\n  BUTTONNAME: \"$ButtonName\",\n  USERID: \"$UserID\",\n  PAGECATEGORY: \"$PageCategory\",\n  RATING: \"$Rating\",\n  PERFORMANCE: \"$Performance\",\n  TRADINGRULES: \"$TradingRules\",\n  PORTFOLIO: \"$Portfolio\",\n  INVESTMENTMANAGER: \"$InvestmentManager\",\n  FUNDSIZE: \"$FundSize\",\n};\n\nObject.freeze(HAParamType);\n\nexport default HAParamType;\n"
  },
  {
    "path": "react-native-hms-analytics/src/constants/HAUserProfileType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst HAUserProfileType = {\n  USERLEVEL: \"user_level\",\n  ISFULLLEVEL: \"is_full_level\",\n  ISMEMBER: \"is_member\"\n};\n\nObject.freeze(HAUserProfileType);\n\nexport default HAUserProfileType;\n"
  },
  {
    "path": "react-native-hms-analytics/src/constants/ReportPolicyType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst ReportPolicyType = {\n    ScheduledTimePolicy: \"onScheduledTimePolicy\",\n    AppLaunchPolicy: \"onAppLaunchPolicy\",\n    MoveBackgroundPolicy: \"onMoveBackgroundPolicy\",\n    CacheThresholdPolicy: \"onCacheThresholdPolicy\"\n  };\n  Object.freeze(ReportPolicyType);\n  export default ReportPolicyType;"
  },
  {
    "path": "react-native-hms-analytics/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-analytics\" {\n\n    export interface Result {\n        key: string,\n        value: string | number | boolean | object\n    }\n\n    export interface DefaultEventParams {\n        key: string,\n        value: string | number | boolean\n    }\n\n    export interface EventParams {\n        eventId: string,\n        bundle: object\n    }\n\n    export enum Constants {\n        REPORT_POLICY_TYPE = \"reportPolicyType\",\n        SECONDS = \"seconds\",\n        THRESHOLD = \"threshold\"\n    }\n\n    export enum ReportPolicyType {\n        ScheduledTimePolicy = \"onScheduledTimePolicy\",\n        AppLaunchPolicy = \"onAppLaunchPolicy\",\n        MoveBackgroundPolicy = \"onMoveBackgroundPolicy\",\n        CacheThresholdPolicy = \"onCacheThresholdPolicy\"\n    }\n\n    export enum HAUserProfileType {\n        USERLEVEL = \"user_level\",\n        ISFULLLEVEL = \"is_full_level\",\n        ISMEMBER = \"is_member\"\n    }\n\n    export enum HAParamType {\n        STORENAME = \"$StoreName\",\n        BRAND = \"$Brand\",\n        CATEGORY = \"$Category\",\n        PRODUCTID = \"$ProductId\",\n        PRODUCTNAME = \"$ProductName\",\n        PRODUCTFEATURE = \"$ProductFeature\",\n        PRICE = \"$Price\",\n        QUANTITY = \"$Quantity\",\n        REVENUE = \"$Revenue\",\n        CURRNAME = \"$CurrName\",\n        PLACEID = \"$PlaceId\",\n        DESTINATION = \"$Destination\",\n        ENDDATE = \"$EndDate\",\n        BOOKINGDAYS = \"$BookingDays\",\n        PASSENGERSNUMBER = \"$PassengersNumber\",\n        BOOKINGROOMS = \"$BookingRooms\",\n        ORIGINATINGPLACE = \"$OriginatingPlace\",\n        BEGINDATE = \"$BeginDate\",\n        TRANSACTIONID = \"$TransactionId\",\n        CLASS = \"$Class\",\n        CLICKID = \"$ClickId\",\n        PROMOTIONNAME = \"$PromotionName\",\n        CONTENT = \"$Content\",\n        EXTENDPARAM = \"$ExtendParam\",\n        MATERIALNAME = \"$MaterialName\",\n        MATERIALSLOT = \"$MaterialSlot\",\n        MEDIUM = \"$Medium\",\n        SOURCE = \"$Source\",\n        KEYWORDS = \"$Keywords\",\n        OPTION = \"$Option\",\n        STEP = \"$Step\",\n        VIRTUALCURRNAME = \"$VirtualCurrName\",\n        VOUCHER = \"$Voucher\",\n        PLACE = \"$Place\",\n        SHIPPING = \"$Shipping\",\n        TAXFEE = \"$TaxFee\",\n        USERGROUPID = \"$UserGroupId\",\n        LEVELNAME = \"$LevelName\",\n        RESULT = \"$Result\",\n        ROLENAME = \"$RoleName\",\n        LEVELID = \"$LevelId\",\n        CHANNEL = \"$Channel\",\n        SCORE = \"$Score\",\n        SEARCHKEYWORDS = \"$SearchKeywords\",\n        CONTENTTYPE = \"$ContentType\",\n        ACHIEVEMENTID = \"$AchievementId\",\n        FLIGHTNO = \"$FlightNo\",\n        POSITIONID = \"$PositionId\",\n        PRODUCTLIST = \"$ProductList\",\n        ACOUNTTYPE = \"$AcountType\",\n        OCCURREDDATE = \"$OccurredDate\",\n        EVTRESULT = \"$EvtResult\",\n        PREVLEVEL = \"$PrevLevel\",\n        CURRVLEVEL = \"$CurrvLevel\",\n        VOUCHERS = \"$Vouchers\",\n        MATERIALSLOTTYPE = \"$MaterialSlotType\",\n        LISTID = \"$ListId\",\n        FILTERS = \"$Filters\",\n        SORTS = \"$Sorts\",\n        ORDERID = \"$OrderId\",\n        PAYTYPE = \"$PayType\",\n        REASON = \"$Reason\",\n        EXPIREDATE = \"$ExpireDate\",\n        VOUCHERTYPE = \"$VoucherType\",\n        SERVICETYPE = \"$ServiceType\",\n        DETAILS = \"$Details\",\n        COMMENTTYPE = \"$CommentType\",\n        REGISTMETHOD = \"$RegistMethod\",\n        DURATION = \"$Duration\",\n        LEVEL = \"$Level\",\n        PURCHASEENTRY = \"$PurchaseEntry\",\n        PROPS = \"$Props\",\n        ENTRY = \"$Entry\",\n        INVITER = \"$Inviter\",\n        VIPLEVEL = \"$VIPLevel\",\n        FIRSTSIGNIN = \"$FirstSignIn\",\n        DISCOUNT = \"$Discount\",\n        FIRSTPAY = \"$FirstPay\",\n        TASKID = \"$TaskId\",\n        FRIENDNUMBER = \"$FriendNumber\",\n        USERGROUPNAME = \"$UserGroupName\",\n        USERGROUPLEVEL = \"$UserGroupLevel\",\n        MEMBERS = \"$Members\",\n        LEVELBEFORE = \"$LevelBefore\",\n        MESSAGETYPE = \"$MessageType\",\n        ROLECOMBAT = \"$RoleCombat\",\n        ISTOPLEVEL = \"$IsTopLevel\",\n        ROLECLASS = \"$RoleClass\",\n        SKILLNAME = \"$SkillName\",\n        SKILLLEVEL = \"$SkillLevel\",\n        SKILLLEVELBEFORE = \"$SkillLevelBefore\",\n        EQUIPMENTID = \"$EquipmentId\",\n        EQUIPMENTNAME = \"$EquipmentName\",\n        EQUIPMENTLEVEL = \"$EquipmentLevel\",\n        CLASSLIMIT = \"$ClassLimit\",\n        LEVELLIMIT = \"$LevelLimit\",\n        ISFREE = \"$IsFree\",\n        TOTALAFTERCHANGE = \"$TotalAfterChange\",\n        QUALITY = \"$Quality\",\n        ENHANCETYPE = \"$EnhanceType\",\n        NEWCLASS = \"$NewClass\",\n        OLDCLASS = \"$OldClass\",\n        TASKTYPE = \"$TaskType\",\n        TASKNAME = \"$TaskName\",\n        REWARD = \"$Reward\",\n        ACTIVITYTYPE = \"$ActivityType\",\n        ACTIVITYNAME = \"$ActivityName\",\n        CUTSCENENAME = \"$CutsceneName\",\n        PETID = \"$PetId\",\n        PETDEFAULTNAME = \"$PetDefaultName\",\n        PETLEVEL = \"$PetLevel\",\n        MOUNTID = \"$MountId\",\n        MOUNTDEFAULTNAME = \"$MountDefaultName\",\n        MOUNTLEVEL = \"$MountLevel\",\n        ROLEGENDER = \"$RoleGender\",\n        SERVER = \"$Server\",\n        FIRSTCREATE = \"$FirstCreate\",\n        COMBAT = \"$Combat\",\n        BATTLETYPE = \"$BattleType\",\n        BATTLENAME = \"$BattleName\",\n        NUMBEROFCARDS = \"$NumberOfCards\",\n        CARDLIST = \"$CardList\",\n        PARTICIPANTS = \"$Participants\",\n        DIFFICULTY = \"$Difficulty\",\n        MVP = \"$MVP\",\n        DAMAGE = \"$Damage\",\n        RANKING = \"$Ranking\",\n        DUNGEONNAME = \"$DungeonName\",\n        WINREASON = \"$WinReason\",\n        BALANCE = \"$Balance\",\n        PACKAGETYPE = \"$PackageType\",\n        AMOUNT = \"$Amount\",\n        ITEMLIST = \"$ItemList\",\n        GIFTTYPE = \"$GiftType\",\n        GIFTNAME = \"$GiftName\",\n        TYPE = \"$Type\",\n        OLDVALUE = \"$OldValue\",\n        NEWVALUE = \"$NewValue\",\n        VIDEOTYPE = \"$VideoType\",\n        VIDEONAME = \"$VideoName\",\n        MESSAGETITLE = \"$MessageTitle\",\n        OPERATION = \"$Operation\",\n        NUMBEROFDRAWING = \"$NumberOfDrawing\",\n        LEFTPULLSFORGUARANTEE = \"$LeftPullsForGuarantee\",\n        VIPTYPE = \"$VIPType\",\n        VIPSTATUS = \"$VIPStatus\",\n        VIPEXPIREDATE = \"$VIPExpireDate\",\n        ENTER = \"$Enter\",\n        STARTDATE = \"$StartDate\",\n        EFFECTIVETIME = \"$EffectiveTime\",\n        NAME = \"$Name\",\n        MODE = \"$Mode\",\n        SUBJECT = \"$Subject\",\n        ACCURACY = \"$Accuracy\",\n        CONTENTLENGTH = \"$ContentLength\",\n        REMARK = \"$Remark\",\n        CONTENTNAME = \"$ContentName\",\n        SECTION = \"$Section\",\n        DAYS = \"$Days\",\n        POSTID = \"$PostId\",\n        INFORMATIONTYPE = \"$InformationType\",\n        INFORMATION = \"$Information\",\n        FEATURE = \"$Feature\",\n        ROOMS = \"$Rooms\",\n        SALEPRICE = \"$SalePrice\",\n        RENTFEE = \"$RentFee\",\n        RENTTYPE = \"$RentType\",\n        PAGENAME = \"$PageName\",\n        SERIES = \"$Series\",\n        MODEL = \"$Model\",\n        DEVICETYPE = \"$DeviceType\",\n        DEVICENAME = \"$DeviceName\",\n        BINDDURATION = \"$BindDuration\",\n        DEALERNAME = \"$DealerName\",\n        ARRIVALDATE = \"$ArrivalDate\",\n        BUYERTYPE = \"$BuyerType\",\n        SEAT = \"$Seat\",\n        ENERGY = \"$Energy\",\n        CONFIGURATION = \"$Configuration\",\n        ISLOAN = \"$IsLoan\",\n        LOANPRODUCTNAME = \"$LoanProductName\",\n        LOANCHANNEL = \"$LoanChannel\",\n        REPAYMENTMETHOD = \"$RepaymentMethod\",\n        ACTION = \"$Action\",\n        PAGE = \"$Page\",\n        INDEX = \"$Index\",\n        MODULE = \"$Module\",\n        SOURCEPAGE = \"$SourcePage\",\n        SOURCEPAGENAME = \"$SourcePageName\",\n        SOURCELOCATION = \"$SourceLocation\",\n        CITY = \"$City\",\n        FROMCITY = \"$FromCity\",\n        TOCITY = \"$ToCity\",\n        DEPARTUREDATE = \"$DepartureDate\",\n        RETURNDATE = \"$ReturnDate\",\n        TRIPTYPE = \"$TripType\",\n        SEARCHHOTEL = \"$SearchHotel\",\n        SPECIALTICKET = \"$SpecialTicket\",\n        HASBABY = \"$HasBaby\",\n        HASCHILDREN = \"$HasChildren\",\n        COUNTRY = \"$Country\",\n        STAR = \"$Star\",\n        CHECKINDATE = \"$CheckinDate\",\n        CHECKOUTDATE = \"$CheckoutDate\",\n        ALDULTCOUNT = \"$AldultCount\",\n        BABYCOUNT = \"$BabyCount\",\n        CHILDRENCOUNT = \"$ChildrenCount\",\n        FROM = \"$From\",\n        CARMODE = \"$CarMode\",\n        CARTIME = \"$CarTime\",\n        FLIGHTID = \"$FlightID\",\n        SEARCHRESULT = \"$SearchResult\",\n        PRODUCT = \"$Product\",\n        DEPARTURETIME = \"$DepartureTime\",\n        ARRIVETIME = \"$ArriveTime\",\n        DEPARTUREAIRPORT = \"$DepartureAirport\",\n        ARRIVEEAIRPORT = \"$ArriveeAirport\",\n        AIRLINE = \"$Airline\",\n        FLIGHTTYPE = \"$FlightType\",\n        DIRECTFLIGHT = \"$DirectFlight\",\n        TRAINTYPE = \"$TrainType\",\n        FROMSTATION = \"$FromStation\",\n        BEDTYPE = \"$BedType\",\n        BREAKFAST = \"$Breakfast\",\n        ARRIVEDATE = \"$ArriveDate\",\n        TRAINID = \"$TrainID\",\n        HOTELID = \"$HotelID\",\n        HOTELNAME = \"$HotelName\",\n        TRIPTAG = \"$TripTag\",\n        HOTELTYPE = \"$HotelType\",\n        CABIN = \"$Cabin\",\n        ROOMTYPE = \"$RoomType\",\n        CARTYPE = \"$CarType\",\n        SUPPLIER = \"$Supplier\",\n        STUDENTCOUNT = \"$StudentCount\",\n        ROOMCOUNT = \"$RoomCount\",\n        PERSONCOUNT = \"$PersonCount\",\n        VOUCHERID = \"$VoucherID\",\n        VOUCHERNAME = \"$VoucherName\",\n        VOUCHERPRICE = \"$VoucherPrice\",\n        USERTYPE = \"$UserType\",\n        TARGET = \"$Target\",\n        ISCOMPELETED = \"$IsCompeleted\",\n        USERLEVEL = \"$UserLevel\",\n        TIME = \"$Time\",\n        DISTANCE = \"$Distance\",\n        CALORIECONSUMED = \"$CalorieConsumed\",\n        PROGRESS = \"$Progress\",\n        MULTIPLEACCOUNTS = \"$MultipleAccounts\",\n        ACCOUNTTYPE = \"$AccountType\",\n        FAILUREREASON = \"$FailureReason\",\n        AUTHORITY = \"$Authority\",\n        CARDTYPE = \"$CardType\",\n        ISSUEBANK = \"$IssueBank\",\n        TRANSFORMAMOUNT = \"$TransformAmount\",\n        BANKNAME = \"$BankName\",\n        SOURCEMODULE = \"$SourceModule\",\n        STOCKCODE = \"$Stockcode\",\n        STOCKNAME = \"$Stockname\",\n        MARKETCODE = \"$MarketCode\",\n        MARKETNAME = \"$MarketName\",\n        VIEWTYPE = \"$ViewType\",\n        TRENDCYCLE = \"$TrendCycle\",\n        TRANSACTIONTYPE = \"$TransactionType\",\n        CURRENCY = \"$Currency\",\n        MONEY = \"$Money\",\n        FINANCEID = \"$FinanceId\",\n        FINANCENAME = \"$FinanceName\",\n        FINANCETYPE = \"$FinanceType\",\n        FINANCERATE = \"$FinanceRate\",\n        FINANCETIMELIMIT = \"$FinanceTimeLimit\",\n        FINANCEAMOUNTMIN = \"$FinanceAmountMin\",\n        FINANCERISKLEV = \"$FinanceRiskLev\",\n        PURCHASEAMOUNT = \"$PurchaseAmount\",\n        HANDLINGFEES = \"$HandlingFees\",\n        REDEMPTIONAMOUNT = \"$RedemptionAmount\",\n        RETURNAMOUNT = \"$ReturnAmount\",\n        FUNDCODE = \"$FundCode\",\n        FUNDTYPE = \"$FundType\",\n        FUNDNAME = \"$FundName\",\n        FUNDRISKLEV = \"$FundRiskLev\",\n        CHARGERATE = \"$ChargeRate\",\n        PAYMENTMETHOD = \"$PaymentMethod\",\n        FIXEDCYCLE = \"$FixedCycle\",\n        ENTRANCE = \"$Entrance\",\n        CODE = \"$code\",\n        NEWSTOPIC = \"$NewsTopic\",\n        INFORMATIONSOURCE = \"$InformationSource\",\n        COMMENTSNUMBER = \"$CommentsNumber\",\n        FORWARDINGNUMBER = \"$forwardingNumber\",\n        LIKES = \"$Likes\",\n        TITLE = \"$Title\",\n        SEARCHTYPE = \"$SearchType\",\n        LOCATION = \"$Location\",\n        ID = \"$Id\",\n        PLAYMODE = \"$PlayMode\",\n        LISTS = \"$Lists\",\n        ADLOCATION = \"$Adlocation\",\n        ADCATEGORY = \"$AdCategory\",\n        ADTHEME = \"$AdTheme\",\n        BUTTONNAME = \"$ButtonName\",\n        USERID = \"$UserID\",\n        PAGECATEGORY = \"$PageCategory\",\n        RATING = \"$Rating\",\n        PERFORMANCE = \"$Performance\",\n        TRADINGRULES = \"$TradingRules\",\n        PORTFOLIO = \"$Portfolio\",\n        INVESTMENTMANAGER = \"$InvestmentManager\",\n        FUNDSIZE = \"$FundSize\",\n    }\n\n    export enum HAEventType {\n        CREATEPAYMENTINFO = \"$CreatePaymentInfo\",\n        ADDPRODUCT2CART = \"$AddProduct2Cart\",\n        ADDPRODUCT2WISHLIST = \"$AddProduct2WishList\",\n        STARTAPP = \"$StartApp\",\n        STARTCHECKOUT = \"$StartCheckout\",\n        VIEWCAMPAIGN = \"$ViewCampaign\",\n        VIEWCHECKOUTSTEP = \"$ViewCheckoutStep\",\n        WINVIRTUALCOIN = \"$WinVirtualCoin\",\n        COMPLETEPURCHASE = \"$CompletePurchase\",\n        OBTAINLEADS = \"$ObtainLeads\",\n        JOINUSERGROUP = \"$JoinUserGroup\",\n        COMPLETELEVEL = \"$CompleteLevel\",\n        STARTLEVEL = \"$StartLevel\",\n        UPGRADELEVEL = \"$UpgradeLevel\",\n        SIGNIN = \"$SignIn\",\n        SIGNOUT = \"$SignOut\",\n        SUBMITSCORE = \"$SubmitScore\",\n        CREATEORDER = \"$CreateOrder\",\n        REFUNDORDER = \"$RefundOrder\",\n        DELPRODUCTFROMCART = \"$DelProductFromCart\",\n        SEARCH = \"$Search\",\n        VIEWCONTENT = \"$ViewContent\",\n        UPDATECHECKOUTOPTION = \"$UpdateCheckoutOption\",\n        SHARECONTENT = \"$ShareContent\",\n        REGISTERACCOUNT = \"$RegisterAccount\",\n        CONSUMEVIRTUALCOIN = \"$ConsumeVirtualCoin\",\n        STARTTUTORIAL = \"$StartTutorial\",\n        COMPLETETUTORIAL = \"$CompleteTutorial\",\n        OBTAINACHIEVEMENT = \"$ObtainAchievement\",\n        VIEWPRODUCT = \"$ViewProduct\",\n        VIEWPRODUCTLIST = \"$ViewProductList\",\n        VIEWSEARCHRESULT = \"$ViewSearchResult\",\n        UPDATEMEMBERSHIPLEVEL = \"$UpdateMembershipLevel\",\n        FILTRATEPRODUCT = \"$FiltrateProduct\",\n        VIEWCATEGORY = \"$ViewCategory\",\n        UPDATEORDER = \"$UpdateOrder\",\n        CANCELORDER = \"$CancelOrder\",\n        COMPLETEORDER = \"$CompleteOrder\",\n        CANCELCHECKOUT = \"$CancelCheckout\",\n        OBTAINVOUCHER = \"$ObtainVoucher\",\n        CONTACTCUSTOMSERVICE = \"$ContactCustomService\",\n        RATE = \"$Rate\",\n        INVITE = \"$Invite\",\n        NOVICEGUIDESTART = \"$NoviceGuideStart\",\n        NOVICEGUIDEEND = \"$NoviceGuideEnd\",\n        STARTGAME = \"$StartGame\",\n        ENDGAME = \"$EndGame\",\n        WINPROPS = \"$WinProps\",\n        CONSUMEPROPS = \"$ConsumeProps\",\n        ADDFRIEND = \"$AddFriend\",\n        ADDBLACKLIST = \"$AddBlacklist\",\n        VIEWFRIENDLIST = \"$ViewFriendList\",\n        QUITUSERGROUP = \"$QuitUserGroup\",\n        CREATEUSERGROUP = \"$CreateUserGroup\",\n        DISBANDUSERGROUP = \"$DisbandUserGroup\",\n        UPGRADEUSERGROUP = \"$UpgradeUserGroup\",\n        VIEWUSERGROUP = \"$ViewUserGroup\",\n        JOINTEAM = \"$JoinTeam\",\n        SENDMESSAGE = \"$SendMessage\",\n        LEARNSKILL = \"$LearnSkill\",\n        USESKILL = \"$UseSkill\",\n        GETEQUIPMENT = \"$GetEquipment\",\n        LOSEEQUIPMENT = \"$LoseEquipment\",\n        ENHANCEEQUIPMENT = \"$EnhanceEquipment\",\n        SWITCHCLASS = \"$SwitchClass\",\n        ACCEPTTASK = \"$AcceptTask\",\n        FINISHTASK = \"$FinishTask\",\n        ATTENDACTIVITY = \"$AttendActivity\",\n        FINISHCUTSCENE = \"$FinishCutscene\",\n        SKIPCUTSCENE = \"$SkipCutscene\",\n        GETPET = \"$GetPet\",\n        LOSEPET = \"$LosePet\",\n        ENHANCEPET = \"$EnhancePet\",\n        GETMOUNT = \"$GetMount\",\n        LOSEMOUNT = \"$LoseMount\",\n        ENHANCEMOUNT = \"$EnhanceMount\",\n        CREATEROLE = \"$CreateRole\",\n        SIGNINROLE = \"$SignInRole\",\n        SIGNOUTROLE = \"$SignOutRole\",\n        STARTBATTLE = \"$StartBattle\",\n        ENDBATTLE = \"$EndBattle\",\n        STARTDUNGEON = \"$StartDungeon\",\n        FINISHDUNGEON = \"$FinishDungeon\",\n        VIEWPACKAGE = \"$ViewPackage\",\n        REDEEM = \"$Redeem\",\n        MODIFYSETTING = \"$ModifySetting\",\n        WATCHVIDEO = \"$WatchVideo\",\n        CLICKMESSAGE = \"$ClickMessage\",\n        DRAWCARD = \"$DrawCard\",\n        VIEWCARDLIST = \"$ViewCardList\",\n        BINDACCOUNT = \"$BindAccount\",\n        STARTEXERCISE = \"$StartExercise\",\n        ENDEXERCISE = \"$EndExercise\",\n        STARTPLAYMEDIA = \"$StartPlayMedia\",\n        ENDPLAYMEDIA = \"$EndPlayMedia\",\n        STARTEXAMINE = \"$StartExamine\",\n        ENDEXAMINE = \"$EndExamine\",\n        CHECKIN = \"$CheckIn\",\n        COMPENSATION = \"$Compensation\",\n        POST = \"$Post\",\n        SHAREAPP = \"$ShareApp\",\n        IMPROVEINFORMATION = \"$ImproveInformation\",\n        EXCHANGEGOODS = \"$ExchangeGoods\",\n        VIEWHOUSELIST = \"$ViewHouseList\",\n        VIEWHOUSEDETAIL = \"$ViewHouseDetail\",\n        BINDDEVICE = \"$BindDevice\",\n        UNBINDDEVICE = \"$UnBindDevice\",\n        RESERVEMAINTENANCE = \"$ReserceMaintenance\",\n        DEVICEMISSINGREPORT = \"$DeviceMissingReport\",\n        STARTBOOKING = \"$StartBooking\",\n        LEARNTARGET = \"$LearnTarget\",\n        LANGUAGETEST = \"$LanguageTest\",\n        STARTTRAINING = \"$StartTraining\",\n        ENDTRAINING = \"$EndTraining\",\n        REGISTERACTIVITY = \"$RegisterActivity\",\n        EXITACTIVITY = \"$ExitActivity\",\n        COMPLETEACTIVITY = \"$CompleteActivity\",\n        ENTERACCOUNTOPENING = \"$EnterAccountOpening\",\n        SUBMITACCOUNTOPENING = \"$SubmitAccountOpening\",\n        BANDCARD = \"$BandCard\",\n        BANKTRANSFERIN = \"$BankTransferIn\",\n        BANKTRANSFEROUT = \"$BankTransferOut\",\n        VIEWSTOCKDETAIL = \"$ViewStockDetail\",\n        TRADESTOCKS = \"$TradeStocks\",\n        VIEWFINANCEPAGE = \"$ViewFinancePage\",\n        PURCHASEFINANCE = \"$PurchaseFinance\",\n        REDEMPTIONFINANCE = \"$RedemptionFinance\",\n        FUNDTRADING = \"$FundTrading\",\n        FIXEDINVESTMENT = \"$Fixedinvestment\",\n        APPLYNEW = \"$ApplyNew\",\n        VIEWINFORMATIONSECTION = \"$ViewInformationSection\",\n        VIEWINFORMATION = \"$ViewInformation\",\n        MODULARCLICK = \"$ModularClick\",\n        PAGEVIEW = \"$PageView\",\n        DISPLAYVOUCHER = \"$DisplayVoucher\",\n        BOOKCOURSE = \"$BookCourse\",\n        LEARNCOURSES = \"$LearnCourses\",\n        TRYOUT = \"$Tryout\",\n        ANSWER = \"$Answer\",\n        COMMENTCONTENT = \"$CommentContent\",\n        LIKECONTENT = \"$LikeContent\",\n        DELETEPRODUCT2WISHLIST = \"$DeleteProduct2WishList\",\n        ADCLICK = \"$AdClick\",\n        ADDISPLAY = \"$AdDisplay\",\n        ENABLEMEMBER = \"$EnableMember\",\n        CANCELMEMBER = \"$CancelMember\",\n        CLICKPURCHASE = \"$ClickPurchase\",\n        VIEWFUNDPAGE = \"$ViewFundPage\",\n        VIPCLICK = \"$vipClick\",\n        VIPFAILED = \"$vipFailed\",\n        VIPSUC = \"$vipSuc\",\n        REGISTERFAILED = \"$registerFailed\",\n        PERMISSIONAPPLICATION = \"$permissionApplication\",\n    }\n\n    export enum LogLevel {\n        debug = \"DEBUG\",\n        info = \"INFO\",\n        warn = \"WARN\",\n        error = \"ERROR\"\n    }\n\n    export default class HMSAnalytics {\n        static getInstance(routePolicy?: string): Promise<Result>;\n        static setAnalyticsEnabled(enabled: boolean): Promise<Result>;\n        static getAAID(): Promise<Result>;\n        static onEvent(eventId: `${HAEventType}` | string, bundle: object): Promise<Result>;\n        static setUserId(userId: string): Promise<Result>;\n        static setUserProfile(name: string, value: string): Promise<Result>;\n        static deleteUserProfile(name: string): Promise<Result>;\n        static getUserProfiles(predefined: boolean): Promise<Result>;\n        static enableLog(): Promise<Result>;\n        static enableLogWithLevel(logLevel: `${LogLevel}`): Promise<Result>;\n        static setPushToken(token: string): Promise<Result>;\n        static setMinActivitySessions(interval: number): Promise<Result>;\n        static setSessionDuration(duration: number): Promise<Result>;\n        static clearCachedData(): Promise<Result>;\n        static pageStart(pageName: string, pageClassOverride: string): Promise<Result>;\n        static pageEnd(pageName: string): Promise<Result>;\n        static setReportPolicies(reportPolicyType: Array<Object>): Promise<Result>;\n        static getReportPolicyThreshold(reportPolicyType: `${ReportPolicyType}`): Promise<Result>;\n        static setRestrictionEnabled(isEnabled: boolean): Promise<Result>;\n        static isRestrictionEnabled(): Promise<Result>;\n        static addDefaultEventParams(params: DefaultEventParams | object): Promise<Result>;\n        static setCollectAdsIdEnabled(enabled: boolean): Promise<Result>;\n        static enableLogger(): Promise<Result>;\n        static disableLogger(): Promise<Result>;\n        static setChannel(channel: string): Promise<Result>;\n        static setPropertyCollection(property: string, enabled: boolean):Promise<Result>;\n        static setCustomReferrer(customReferrer: string): Promise<Result>;\n        static getDataUploadSiteInfo(): Promise<Result>;\n\n        static ReportPolicyType = ReportPolicyType;\n        static Constants = Constants;\n        static HAUserProfileType = HAUserProfileType;\n        static HAParamType = HAParamType;\n        static HAEventType = HAEventType;\n    }\n}"
  },
  {
    "path": "react-native-hms-analytics/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nimport HAEventType from './constants/HAEventType';\nimport HAParamType from './constants/HAParamType';\nimport HAUserProfileType from \"./constants/HAUserProfileType\";\nimport ReportPolicyType from \"./constants/ReportPolicyType\";\nimport Constants from \"./constants/Constants\";\nimport { Platform } from \"react-native\";\n\nconst { HMSAnalyticsModule } = NativeModules;\nconst isIOS = Platform.OS === 'ios';\n\nclass HMSAnalytics {\n\n    static getInstance(routePolicy = \"\") {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.getInstance(routePolicy);\n    }\n\n    static setMinActivitySessions(minActivitySessionValue) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.setMinActivitySessions(minActivitySessionValue);\n    }\n\n    static setPushToken(token) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.setPushToken(token);\n    }\n\n    static enableLogWithLevel(level) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.enableLogWithLevel(level);\n    }\n\n    static enableLog() {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.enableLog();\n    }\n\n    static pageEnd(pageName) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.pageEnd(pageName);\n    }\n\n    static pageStart(pageName, pageClassOverride) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.pageStart(pageName, pageClassOverride);\n    }\n\n    static getReportPolicyThreshold(reportPolicyType) {\n        if (isIOS) {\n            console.log(\"This function is not available in iOS platforms.\");\n            return;\n        }\n        return HMSAnalyticsModule.getReportPolicyThreshold(reportPolicyType);\n    }\n\n    static setCollectAdsIdEnabled(isEnabled) {\n        return HMSAnalyticsModule.setCollectAdsIdEnabled(isEnabled);\n    }\n\n    static addDefaultEventParams(map) {\n        return HMSAnalyticsModule.addDefaultEventParams(map);\n    }\n\n    static setAnalyticsEnabled(isEnabled) {\n        return HMSAnalyticsModule.setAnalyticsEnabled(isEnabled);\n    }\n\n    static setRestrictionEnabled(isEnabled) {\n        return HMSAnalyticsModule.setRestrictionEnabled(isEnabled);\n    }\n\n    static setUserId(userId) {\n        return HMSAnalyticsModule.setUserId(userId);\n    }\n\n    static setUserProfile(name, value) {\n        return HMSAnalyticsModule.setUserProfile(name, value);\n    }\n\n    static deleteUserProfile(name) {\n        return HMSAnalyticsModule.deleteUserProfile(name);\n    }\n\n    static setSessionDuration(milliseconds) {\n        return HMSAnalyticsModule.setSessionDuration(milliseconds);\n    }\n\n    static clearCachedData() {\n        return HMSAnalyticsModule.clearCachedData();\n    }\n\n    static getAAID() {\n        return HMSAnalyticsModule.getAAID();\n    }\n\n    static getUserProfiles(isEnabled) {\n        return HMSAnalyticsModule.getUserProfiles(isEnabled);\n    }\n\n    static onEvent(event, rMap) {\n        return HMSAnalyticsModule.onEvent(event, rMap);\n    }\n\n    static isRestrictionEnabled() {\n        return HMSAnalyticsModule.isRestrictionEnabled();\n    }\n\n    static setReportPolicies(policies) {\n        return HMSAnalyticsModule.setReportPolicies(policies);\n    }\n\n    static enableLogger() {\n        return HMSAnalyticsModule.enableLogger();\n    }\n\n    static disableLogger() {\n        return HMSAnalyticsModule.disableLogger();\n    }\n\n    static setChannel(channel) {\n        return HMSAnalyticsModule.setChannel(channel);\n    }\n\n    static setPropertyCollection(property, enabled) {\n        return HMSAnalyticsModule.setPropertyCollection(property, enabled);\n    }\n\n    static setCustomReferrer(customReferrer) {\n        return HMSAnalyticsModule.setCustomReferrer(customReferrer);\n    }\n\n    static getDataUploadSiteInfo() {\n        return HMSAnalyticsModule.getDataUploadSiteInfo();\n    }\n}\n\nHMSAnalytics.HAEventType = HAEventType;\nHMSAnalytics.HAParamType = HAParamType;\nHMSAnalytics.HAUserProfileType = HAUserProfileType;\nHMSAnalytics.ReportPolicyType = ReportPolicyType;\nHMSAnalytics.Constants = Constants;\n\nexport default HMSAnalytics;"
  },
  {
    "path": "react-native-hms-ar/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-ar/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS AR</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ar\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-ar?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ar\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-account?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-ar.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nAR Engine is an engine for building augmented reality (AR) apps for Android smartphones that allows your app to bridge virtual world and the real world, for a brand new visually interactive user experience.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/introduction-0000001050130900?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-ar\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001058623563?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001058415717-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Checking AR Engine Availability](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/check-arengine-availability-0000001058295599-V1?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native Plugin is licenced under [Apache 2.0 licence](LICENCE)\n"
  },
  {
    "path": "react-native-hms-ar/THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt",
    "content": "Please note we provide an open source software notice for the third party open source software\nalong with this software and/or this software component contributed by Huawei (in the following\njust “this SOFTWARE”). The open source software licenses are granted by the respective right\nholders.\n\nWarranty Disclaimer\nTHE OPEN SOURCE SOFTWARE IN THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT\nIT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED\nWARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE\nAPPLICABLE LICENSES FOR MORE DETAILS.\n\nCopyright Notice and License Texts\n\nSoftware: de.javagl:obj 0.3.0\n----------------------------------------------------------------------\n\nwww.javagl.de - Obj\n\nCopyright (c) 2008-2015 Marco Hutter - http://www.javagl.de\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "react-native-hms-ar/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.3\"\n\n    defaultConfig {\n        minSdkVersion 26\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:arenginesdk:3.7.0.3' // Hms AREngine\n    implementation 'com.huawei.agconnect:agconnect-core:1.5.0.300'\n    implementation 'com.huawei.hms:stats:6.4.0.302'\n    implementation 'de.javagl:obj:0.3.0'\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ar/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-ar/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ar/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.ar\">\n</manifest>"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/ARSetupFacade.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.opengl.GLSurfaceView;\nimport android.util.Log;\nimport android.view.GestureDetector;\nimport android.view.MotionEvent;\nimport android.view.View;\nimport android.widget.Toast;\n\nimport com.huawei.hiar.ARAugmentedImageDatabase;\nimport com.huawei.hiar.ARImageTrackingConfig;\nimport com.huawei.hiar.ARWorldBodyTrackingConfig;\nimport com.huawei.hiar.exceptions.ARUnSupportedConfigurationException;\nimport com.huawei.hiar.exceptions.ARUnavailableClientSdkTooOldException;\nimport com.huawei.hiar.exceptions.ARUnavailableServiceApkTooOldException;\nimport com.huawei.hiar.exceptions.ARUnavailableServiceNotInstalledException;\nimport com.huawei.hiar.listener.FaceHealthServiceListener;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigAugmentedImage;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBody;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigFace;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigSceneMesh;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorld;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorldBody;\nimport com.huawei.hms.plugin.ar.core.helper.CameraConfigListener;\nimport com.huawei.hms.plugin.ar.core.helper.CameraIntrinsicsListener;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.face.FaceHealtyResult;\nimport com.huawei.hms.plugin.ar.core.helper.GestureEvent;\nimport com.huawei.hms.plugin.ar.core.helper.PluginCallbackHelper;\nimport com.huawei.hms.plugin.ar.core.helper.sceneMesh.SceneMeshDrawFrameListener;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.MessageTextListener;\nimport com.huawei.hms.plugin.ar.core.model.AugmentedImageDBModel;\nimport com.huawei.hms.plugin.ar.core.renderer.ARAugmentedImageRender;\nimport com.huawei.hms.plugin.ar.core.renderer.ARBaseRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARBodyRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARCloud3DObjectRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARFaceRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARHandRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARSceneMeshRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARWorldBodyRenderer;\nimport com.huawei.hms.plugin.ar.core.renderer.ARWorldRenderer;\n\nimport com.huawei.hiar.ARBodyTrackingConfig;\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARFaceTrackingConfig;\nimport com.huawei.hiar.ARHandTrackingConfig;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARWorldTrackingConfig;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.List;\nimport java.util.Optional;\nimport java.util.concurrent.ArrayBlockingQueue;\n\npublic class ARSetupFacade {\n    private final static String TAG = ARSetupFacade.class.getSimpleName();\n\n    private ARBaseRenderer renderer;\n\n    private ARConfigBase arConfigBase;\n\n    private ARSession arSession;\n\n    private GLSurfaceView surfaceView;\n\n    private DisplayRotationManager displayRotationManager;\n\n    private TextureDisplay textureDisplay;\n\n    private final Context context;\n\n    private String errorMessage = \"\";\n\n    public ARSetupFacade(Context context, GLSurfaceView view) {\n        this.context = context;\n        this.surfaceView = view;\n        this.surfaceView.setPreserveEGLContextOnPause(true);\n        this.surfaceView.setEGLContextClientVersion(2);\n        this.surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);\n        this.arSession = new ARSession(context);\n        this.displayRotationManager = new DisplayRotationManager(context);\n        this.textureDisplay = new TextureDisplay();\n        this.renderer = new ARBaseRenderer();\n        this.queue = new ArrayBlockingQueue<>(1);\n    }\n\n    public void startHand(ARPluginConfigHand config) {\n        try {\n            renderer = new ARHandRenderer(arSession, displayRotationManager, textureDisplay, config);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARHandTrackingConfig(arSession);\n\n            ((ARHandTrackingConfig) arConfigBase).setCameraLensFacing(config.getCameraLensFacing());\n\n            setCommonConfig(config);\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH);\n\n            if (((ARHandTrackingConfig) arConfigBase).getCameraLensFacing() != config.getCameraLensFacing()\n                || arConfigBase.getEnableItem() != ARConfigBase.ENABLE_DEPTH) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n            arSession.configure(arConfigBase);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n\n        arSession.resume();\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startFace(ARPluginConfigFace config) {\n        try {\n            renderer = new ARFaceRenderer(arSession, displayRotationManager, textureDisplay, config, context,\n                config.getHealth());\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARFaceTrackingConfig(arSession);\n\n            ((ARFaceTrackingConfig) arConfigBase).setCameraLensFacing(config.getCameraLensFacing());\n\n            setCommonConfig(config);\n\n            if (!config.getHealth() && config.getMultiFace()) {\n                ((ARFaceTrackingConfig) arConfigBase).setFaceDetectMode(\n                    ARConfigBase.FaceDetectMode.FACE_ENABLE_MULTIFACE.getEnumValue()\n                        | ARConfigBase.FaceDetectMode.FACE_ENABLE_DEFAULT.getEnumValue());\n            }\n\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH);\n\n            if (arConfigBase.getEnableItem() != ARConfigBase.ENABLE_DEPTH || (!config.getHealth()\n                && config.getMultiFace() && ((ARFaceTrackingConfig) arConfigBase).getFaceDetectMode() != (\n                ARConfigBase.FaceDetectMode.FACE_ENABLE_MULTIFACE.getEnumValue()\n                    | ARConfigBase.FaceDetectMode.FACE_ENABLE_DEFAULT.getEnumValue()))) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n        arSession.configure(arConfigBase);\n\n        arSession.resume();\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startBody(ARPluginConfigBody config) {\n        try {\n            renderer = new ARBodyRenderer(arSession, displayRotationManager, textureDisplay, config);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARBodyTrackingConfig(arSession);\n            ((ARBodyTrackingConfig) arConfigBase).setCameraLensFacing(ARConfigBase.CameraLensFacing.REAR);\n\n            setCommonConfig(config);\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK);\n\n            if (((ARBodyTrackingConfig) arConfigBase).getCameraLensFacing() != ARConfigBase.CameraLensFacing.REAR\n                || arConfigBase.getEnableItem() != (\n                ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK)) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n            arSession.configure(arConfigBase);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n\n        arSession.resume();\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startWorld(ARPluginConfigWorld config) {\n        try {\n            queue = new ArrayBlockingQueue<>(2);\n            initGestureDetector();\n            renderer = new ARWorldRenderer(arSession, displayRotationManager, textureDisplay, config, queue, context);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARWorldTrackingConfig(arSession);\n            arConfigBase.setMaxMapSize(config.getMaxMapSize());\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH);\n            setCommonConfig(config);\n\n            ((ARWorldTrackingConfig) arConfigBase).setPlaneFindingMode(config.getPlaneFindingMode());\n\n            if (config.getAugmentedImageDBModels().size() > 0) {\n                ARAugmentedImageDatabase db = setupInitAugmentedImageDatabase(config.getAugmentedImageDBModels());\n                if (db == null) {\n                    setMessageWhenError(null, \"Could not setup augmented image database\");\n                } else {\n                    ((ARWorldTrackingConfig) arConfigBase).setAugmentedImageDatabase(db);\n                }\n            }\n\n            if (arConfigBase.getEnableItem() != ARConfigBase.ENABLE_DEPTH) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n            arSession.configure(arConfigBase);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n\n        arSession.resume();\n\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startCloud3Dobject() {\n        try {\n            queue = new ArrayBlockingQueue<>(2);\n            renderer = new ARCloud3DObjectRenderer(arSession, displayRotationManager, textureDisplay, null, context);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARWorldTrackingConfig(arSession);\n            arConfigBase.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS);\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_CLOUD_OBJECT_RECOGNITION);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n        arSession.configure(arConfigBase);\n\n        arSession.resume();\n\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n    }\n\n    public void startAugmentedImage(ARPluginConfigAugmentedImage config) {\n        try {\n            queue = new ArrayBlockingQueue<>(2);\n            renderer = new ARAugmentedImageRender(arSession, displayRotationManager, textureDisplay, config, context);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARImageTrackingConfig(arSession);\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK);\n            setCommonConfig(config);\n\n            if (config.getAugmentedImageDBModels().size() > 0) {\n                ARAugmentedImageDatabase db = setupInitAugmentedImageDatabase(config.getAugmentedImageDBModels());\n                if (db == null) {\n                    setMessageWhenError(null, \"Could not setup augmented image database\");\n                } else {\n                    ((ARImageTrackingConfig) arConfigBase).setAugmentedImageDatabase(db);\n                }\n            }\n\n            if (arConfigBase.getEnableItem() != (\n                ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK)\n                ) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n        arSession.configure(arConfigBase);\n        ((ARAugmentedImageRender) renderer).setImageTrackOnly(true);\n        arSession.resume();\n\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startWorldBody(ARPluginConfigWorldBody config) {\n        try {\n            queue = new ArrayBlockingQueue<>(2);\n            initGestureDetector();\n            renderer = new ARWorldBodyRenderer(arSession, displayRotationManager, textureDisplay, config, queue,\n                context);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARWorldBodyTrackingConfig(arSession);\n\n            arConfigBase.setMaxMapSize(config.getMaxMapSize());\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK);\n            setCommonConfig(config);\n\n            ((ARWorldBodyTrackingConfig) arConfigBase).setPlaneFindingMode(config.getPlaneFindingMode());\n\n            if (((ARWorldBodyTrackingConfig) arConfigBase).getPlaneFindingMode() != config.getPlaneFindingMode()\n            || arConfigBase.getEnableItem() != (\n                ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK)) {\n                throw new ARUnSupportedConfigurationException();\n            }\n            checkCommonConfig(config);\n\n            arSession.configure(arConfigBase);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n\n        arSession.resume();\n\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void startSceneMesh(ARPluginConfigSceneMesh config) {\n        try {\n            queue = new ArrayBlockingQueue<>(2);\n            initGestureDetector();\n            renderer = new ARSceneMeshRenderer(arSession, displayRotationManager, textureDisplay, config, queue,\n                context);\n            surfaceView.setRenderer(renderer);\n            surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);\n\n            arConfigBase = new ARWorldTrackingConfig(arSession);\n\n            arConfigBase.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK);\n            setCommonConfig(config);\n\n            if (arConfigBase.getEnableItem() != (\n                ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE_MASK)) {\n                throw new ARUnSupportedConfigurationException();\n            }\n\n            checkCommonConfig(config);\n\n            arSession.configure(arConfigBase);\n        } catch (Exception capturedException) {\n            setMessageWhenError(capturedException, \"\");\n        }\n\n        arSession.resume();\n\n        displayRotationManager.registerDisplayListener();\n        surfaceView.onResume();\n\n        showSemanticModeSupportedInfo(config);\n    }\n\n    public void setEnableItem(long enableItem) {\n        if (arConfigBase != null) {\n            arSession.stop();\n            arConfigBase.setEnableItem(enableItem);\n            arSession.configure(arConfigBase);\n            arSession.resume();\n        }\n    }\n\n    public void setFaceHealthListener(FaceHealthServiceListener faceHealthListener) {\n        if (renderer instanceof ARFaceRenderer) {\n            ARFaceRenderer faceRenderer = (ARFaceRenderer) renderer;\n            faceRenderer.setFaceHealtyListener(faceHealthListener);\n            arSession.addServiceListener(faceRenderer);\n        }\n    }\n\n    public void setFaceHealthResultListener(FaceHealtyResult faceHealtyResult) {\n        if (renderer instanceof ARFaceRenderer) {\n            ARFaceRenderer faceRenderer = (ARFaceRenderer) renderer;\n            faceRenderer.setFaceHealtyResult(faceHealtyResult);\n            arSession.addServiceListener(faceRenderer);\n        }\n    }\n\n    public void setSceneMeshListener(SceneMeshDrawFrameListener listener) {\n        if (renderer instanceof ARSceneMeshRenderer) {\n            ARSceneMeshRenderer sceneMeshRenderer = (ARSceneMeshRenderer) renderer;\n            sceneMeshRenderer.setSceneMeshListener(listener);\n        }\n    }\n\n    private ARAugmentedImageDatabase setupInitAugmentedImageDatabase(List<AugmentedImageDBModel> list) {\n        if (list.size() == 0) {\n            return null;\n        }\n\n        ARAugmentedImageDatabase augmentedImageDatabase = new ARAugmentedImageDatabase(arSession);\n\n        for (AugmentedImageDBModel item : list) {\n            Optional<Bitmap> augmentedImageBitmap = loadAugmentedImageBitmap(item.getImgFileFromAsset());\n            if (!augmentedImageBitmap.isPresent()) {\n                continue;\n            }\n\n            if (item.getWidthInMeters() > 0) {\n                augmentedImageDatabase.addImage(item.getImgName(), augmentedImageBitmap.get(), item.getWidthInMeters());\n            } else {\n                augmentedImageDatabase.addImage(item.getImgName(), augmentedImageBitmap.get());\n            }\n        }\n        return augmentedImageDatabase;\n    }\n\n    private Optional<Bitmap> loadAugmentedImageBitmap(String fileName) {\n        try (InputStream is = context.getAssets().open(fileName)) {\n            return Optional.of(BitmapFactory.decodeStream(is));\n        } catch (IOException e) {\n            Log.e(TAG, \"IO exception loading augmented image bitmap.\");\n        }\n        return Optional.empty();\n    }\n\n    private void showSemanticModeSupportedInfo(ARPluginConfigBase configPlugin) {\n        if (!configPlugin.getShowSemanticSupportedInfo()) {\n            return;\n        }\n\n        String toastMsg = \"\";\n        switch (arSession.getSupportedSemanticMode()) {\n            case ARWorldTrackingConfig.SEMANTIC_NONE:\n                toastMsg = \"The running environment does not support the semantic mode.\";\n                break;\n            case ARWorldTrackingConfig.SEMANTIC_PLANE:\n                toastMsg = \"The running environment supports only the plane semantic mode.\";\n                break;\n            case ARWorldTrackingConfig.SEMANTIC_TARGET:\n                toastMsg = \"The running environment supports only the target semantic mode.\";\n                break;\n            default:\n                break;\n        }\n        if (!toastMsg.isEmpty()) {\n            Toast.makeText(context, toastMsg, Toast.LENGTH_LONG).show();\n        }\n    }\n\n    public void setListener(PluginCallbackHelper helper) {\n        renderer.setCallbackHelper(helper);\n    }\n\n    public void setCameraConfigListener(CameraConfigListener helper) {\n        renderer.setCameraConfigListener(helper);\n    }\n\n    public void setCameraIntrinsicsListener(CameraIntrinsicsListener helper) {\n        renderer.setCameraIntrinsicsListener(helper);\n    }\n\n    public void setMessageDataListener(MessageTextListener listener) {\n        renderer.setMessageDataListener(listener);\n    }\n\n    private GestureDetector gestureDetector;\n\n    private ArrayBlockingQueue<GestureEvent> queue;\n\n    private void initGestureDetector() {\n        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {\n            @Override\n            public boolean onSingleTapUp(MotionEvent e) {\n                return onGestureEvent(GestureEvent.createSingleTapUpEvent(e));\n            }\n\n            @Override\n            public boolean onDown(MotionEvent e) {\n                return onGestureEvent(GestureEvent.createDownEvent(e));\n            }\n\n            @Override\n            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {\n                return onGestureEvent(GestureEvent.createScrollEvent(e1, e2, distanceX, distanceY));\n            }\n        });\n\n        surfaceView.setOnTouchListener(new View.OnTouchListener() {\n            @Override\n            public boolean onTouch(View v, MotionEvent event) {\n                return gestureDetector.onTouchEvent(event);\n            }\n        });\n    }\n\n    private boolean onGestureEvent(GestureEvent e) {\n        return (queue.offer(e));\n    }\n\n    protected void setMessageWhenError(Exception catchException, String directMessage) {\n        if (directMessage == \"\") {\n            if (catchException instanceof ARUnavailableServiceNotInstalledException) {\n                errorMessage = \"ARUnavailableServiceNotInstalledException\";\n            } else if (catchException instanceof ARUnavailableServiceApkTooOldException) {\n                errorMessage = \"ARUnavailableServiceApkTooOldException: Please update HuaweiARService.apk\";\n            } else if (catchException instanceof ARUnavailableClientSdkTooOldException) {\n                errorMessage = \"ARUnavailableClientSdkTooOldException: Please update this SDK\";\n            } else if (catchException instanceof ARUnSupportedConfigurationException) {\n                errorMessage = \"ARUnSupportedConfigurationException: The configuration is not supported by the device!\";\n            } else {\n                errorMessage = \"exception throw\";\n            }\n        } else {\n            errorMessage = directMessage;\n        }\n\n        Toast.makeText(context, errorMessage, Toast.LENGTH_LONG).show();\n        Log.e(ARSetupFacade.class.getSimpleName(), errorMessage);\n    }\n\n    private void setCommonConfig(ARPluginConfigBase configPlugin) {\n        arConfigBase.setSemanticMode(configPlugin.getSemanticMode());\n        arConfigBase.setFocusMode(configPlugin.getFocusMode());\n        arConfigBase.setPowerMode(configPlugin.getPowerMode());\n        arConfigBase.setUpdateMode(configPlugin.getUpdateMode());\n        arConfigBase.setLightingMode(configPlugin.getLightMode());\n    }\n\n    private void checkCommonConfig(ARPluginConfigBase configPlugin) {\n        if (arConfigBase.getUpdateMode() != configPlugin.getUpdateMode()\n            || arConfigBase.getFocusMode() != configPlugin.getFocusMode()\n            || arConfigBase.getPowerMode() != configPlugin.getPowerMode()) {\n            throw new ARUnSupportedConfigurationException();\n        }\n        if (arConfigBase.getSemanticMode() != configPlugin.getSemanticMode()\n            || arConfigBase.getLightingMode() != configPlugin.getLightMode()) {\n            throw new ARUnSupportedConfigurationException();\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigAugmentedImage.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hms.plugin.ar.core.model.AugmentedImageDBModel;\n\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class ARPluginConfigAugmentedImage extends ARPluginConfigBasePointLine {\n    private List<AugmentedImageDBModel> augmentedImageDBModels = Arrays.asList();\n\n    public List<AugmentedImageDBModel> getAugmentedImageDBModels() {\n        return augmentedImageDBModels;\n    }\n\n    public void setAugmentedImageDBModels(List<AugmentedImageDBModel> augmentedImageDBModels) {\n        this.augmentedImageDBModels = augmentedImageDBModels;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigBase.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARWorldTrackingConfig;\n\npublic abstract class ARPluginConfigBase {\n\n    protected int lightMode = ARConfigBase.LIGHT_MODE_NONE;\n\n    protected int semanticMode = ARWorldTrackingConfig.SEMANTIC_NONE;\n\n    protected boolean showSemanticSupportedInfo = true;\n\n    protected ARConfigBase.FocusMode focusMode = ARConfigBase.FocusMode.AUTO_FOCUS;\n\n    protected ARConfigBase.PowerMode powerMode = ARConfigBase.PowerMode.PERFORMANCE_FIRST;\n\n    protected ARConfigBase.UpdateMode updateMode = ARConfigBase.UpdateMode.LATEST_CAMERA_IMAGE;\n\n\n    public ARConfigBase.FocusMode getFocusMode() {\n        return focusMode;\n    }\n\n    public void setFocusMode(ARConfigBase.FocusMode focusMode) {\n        this.focusMode = focusMode;\n    }\n\n    public ARConfigBase.PowerMode getPowerMode() {\n        return powerMode;\n    }\n\n    public void setPowerMode(ARConfigBase.PowerMode powerMode) {\n        this.powerMode = powerMode;\n    }\n\n    public ARConfigBase.UpdateMode getUpdateMode() {\n        return updateMode;\n    }\n\n    public void setUpdateMode(ARConfigBase.UpdateMode updateMode) {\n        this.updateMode = updateMode;\n    }\n\n    public int getSemanticMode() {\n        return semanticMode;\n    }\n\n    public void setSemanticMode(int semanticMode) {\n        this.semanticMode = semanticMode;\n    }\n\n    public boolean getShowSemanticSupportedInfo() {\n        return showSemanticSupportedInfo;\n    }\n\n    public void setShowSemanticSupportedInfo(boolean showSemanticSupportedInfo) {\n        this.showSemanticSupportedInfo = showSemanticSupportedInfo;\n    }\n\n    public int getLightMode() {\n        return this.lightMode;\n    }\n\n    public void setLightMode(int lightMode) {\n        this.lightMode = lightMode;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigBasePointLine.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\npublic abstract class ARPluginConfigBasePointLine extends ARPluginConfigBase {\n    private boolean drawLine = true;\n\n    private boolean drawPoint = true;\n\n    private float lineWidth = 19.9f;\n\n    private float pointSize = 50.0f;\n\n    private ColorRGBA lineColor = new ColorRGBA(0, 0, 255, 255);\n\n    private ColorRGBA pointColor = new ColorRGBA(0, 255, 0, 255);\n\n    public boolean isDrawLine() {\n        return drawLine;\n    }\n\n    public void setDrawLine(boolean drawLine) {\n        this.drawLine = drawLine;\n    }\n\n    public boolean isDrawPoint() {\n        return drawPoint;\n    }\n\n    public void setDrawPoint(boolean drawPoint) {\n        this.drawPoint = drawPoint;\n    }\n\n    public float getLineWidth() {\n        return lineWidth;\n    }\n\n    public void setLineWidth(float lineWidth) {\n        this.lineWidth = lineWidth;\n    }\n\n    public float getPointSize() {\n        return pointSize;\n    }\n\n    public void setPointSize(float pointSize) {\n        this.pointSize = pointSize;\n    }\n\n    public ColorRGBA getLineColor() {\n        return lineColor;\n    }\n\n    public void setLineColor(ColorRGBA lineColor) {\n        this.lineColor = lineColor;\n    }\n\n    public ColorRGBA getPointColor() {\n        return pointColor;\n    }\n\n    public void setPointColor(ColorRGBA pointColor) {\n        this.pointColor = pointColor;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigBaseWorld.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\npublic abstract class ARPluginConfigBaseWorld extends ARPluginConfigBasePointLine {\n    private String objPath = \"AR_logo.obj\";\n\n    private String texturePath = \"AR_logo.png\";\n\n    private boolean labelDraw = true;\n\n    private String imageOther;\n\n    private String imageWall;\n\n    private String imageFloor;\n\n    private String imageSeat;\n\n    private String imageTable;\n\n    private String imageCeiling;\n\n    private String textOther = \"other\";\n\n    private String textWall = \"wall\";\n\n    private String textFloor = \"floor\";\n\n    private String textSeat = \"seat\";\n\n    private String textTable = \"table\";\n\n    private String textCeiling = \"ceiling\";\n\n    private ColorRGBA colorOther = new ColorRGBA(255, 0, 0, 255);\n\n    private ColorRGBA colorWall = new ColorRGBA(255, 0, 0, 255);\n\n    private ColorRGBA colorFloor = new ColorRGBA(255, 0, 0, 255);\n\n    private ColorRGBA colorSeat = new ColorRGBA(255, 0, 0, 255);\n\n    private ColorRGBA colorTable = new ColorRGBA(255, 0, 0, 255);\n\n    private ColorRGBA colorCeiling = new ColorRGBA(255, 0, 0, 255);\n\n    private long maxMapSize = 800L;\n\n    public long getMaxMapSize() {\n        return maxMapSize;\n    }\n\n    public void setMaxMapSize(long maxMapSize) {\n        this.maxMapSize = maxMapSize;\n    }\n\n    public boolean isLabelDraw() {\n        return labelDraw;\n    }\n\n    public void setLabelDraw(boolean draw) {\n        this.labelDraw = draw;\n    }\n\n    public void setTexturePath(String texturePath) {\n        this.texturePath = texturePath;\n    }\n\n    public void setObjPath(String objPath) {\n        this.objPath = objPath;\n    }\n\n    public String getObjPath() {\n        return objPath;\n    }\n\n    public String getTexturePath() {\n        return texturePath;\n    }\n\n    public String getImageOther() {\n        return imageOther;\n    }\n\n    public void setImageOther(String imageOther) {\n        this.imageOther = imageOther;\n    }\n\n    public String getImageWall() {\n        return imageWall;\n    }\n\n    public void setImageWall(String imageWall) {\n        this.imageWall = imageWall;\n    }\n\n    public String getImageFloor() {\n        return imageFloor;\n    }\n\n    public void setImageFloor(String imageFloor) {\n        this.imageFloor = imageFloor;\n    }\n\n    public String getImageSeat() {\n        return imageSeat;\n    }\n\n    public void setImageSeat(String imageSeat) {\n        this.imageSeat = imageSeat;\n    }\n\n    public String getImageTable() {\n        return imageTable;\n    }\n\n    public void setImageTable(String imageTable) {\n        this.imageTable = imageTable;\n    }\n\n    public String getImageCeiling() {\n        return imageCeiling;\n    }\n\n    public void setImageCeiling(String imageCeiling) {\n        this.imageCeiling = imageCeiling;\n    }\n\n    public String getTextOther() {\n        return textOther;\n    }\n\n    public void setTextOther(String textOther) {\n        this.textOther = textOther;\n    }\n\n    public String getTextWall() {\n        return textWall;\n    }\n\n    public void setTextWall(String textWall) {\n        this.textWall = textWall;\n    }\n\n    public String getTextFloor() {\n        return textFloor;\n    }\n\n    public void setTextFloor(String textFloor) {\n        this.textFloor = textFloor;\n    }\n\n    public String getTextSeat() {\n        return textSeat;\n    }\n\n    public void setTextSeat(String textSeat) {\n        this.textSeat = textSeat;\n    }\n\n    public String getTextTable() {\n        return textTable;\n    }\n\n    public void setTextTable(String textTable) {\n        this.textTable = textTable;\n    }\n\n    public String getTextCeiling() {\n        return textCeiling;\n    }\n\n    public void setTextCeiling(String textCeiling) {\n        this.textCeiling = textCeiling;\n    }\n\n    public ColorRGBA getColorOther() {\n        return colorOther;\n    }\n\n    public void setColorOther(ColorRGBA colorOther) {\n        this.colorOther = colorOther;\n    }\n\n    public ColorRGBA getColorWall() {\n        return colorWall;\n    }\n\n    public void setColorWall(ColorRGBA colorWall) {\n        this.colorWall = colorWall;\n    }\n\n    public ColorRGBA getColorFloor() {\n        return colorFloor;\n    }\n\n    public void setColorFloor(ColorRGBA colorFloor) {\n        this.colorFloor = colorFloor;\n    }\n\n    public ColorRGBA getColorSeat() {\n        return colorSeat;\n    }\n\n    public void setColorSeat(ColorRGBA colorSeat) {\n        this.colorSeat = colorSeat;\n    }\n\n    public ColorRGBA getColorTable() {\n        return colorTable;\n    }\n\n    public void setColorTable(ColorRGBA colorTable) {\n        this.colorTable = colorTable;\n    }\n\n    public ColorRGBA getColorCeiling() {\n        return colorCeiling;\n    }\n\n    public void setColorCeiling(ColorRGBA colorCeiling) {\n        this.colorCeiling = colorCeiling;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigBody.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\npublic class ARPluginConfigBody extends ARPluginConfigBasePointLine {\n\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigFace.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hiar.ARConfigBase;\n\npublic class ARPluginConfigFace extends ARPluginConfigBase {\n    private float pointSize;\n\n    private ColorRGBA depthColor;\n\n    private String texturePath;\n\n    private boolean drawFace;\n\n    private boolean health = false;\n\n    private ARConfigBase.CameraLensFacing cameraLensFacing = ARConfigBase.CameraLensFacing.FRONT;\n\n    private boolean multiFace = false;\n\n    public ARPluginConfigFace() {\n        this.pointSize = 5.0f;\n        this.drawFace = true;\n\n        this.depthColor = new ColorRGBA(0, 255, 0, 255);\n\n        this.texturePath = \"\";\n    }\n\n    public float getPointSize() {\n        return pointSize;\n    }\n\n    public boolean isDrawFace() {\n        return drawFace;\n    }\n\n    public void setDrawFace(boolean drawFace) {\n        this.drawFace = drawFace;\n    }\n\n    public ColorRGBA getDepthColor() {\n        return this.depthColor;\n    }\n\n    public String getTexturePath() {\n        return texturePath;\n    }\n\n    public boolean getHealth() {\n        return this.health;\n    }\n\n    public ARConfigBase.CameraLensFacing getCameraLensFacing() {\n        return this.cameraLensFacing;\n    }\n\n    public void setPointSize(float pointSize) {\n        this.pointSize = pointSize;\n    }\n\n    public void setDepthColor(ColorRGBA depthColor) {\n        this.depthColor = depthColor;\n    }\n\n    public void setTexturePath(String texturePath) {\n        this.texturePath = texturePath;\n    }\n\n    public void setHealth(boolean health) {\n        this.health = health;\n    }\n\n    public void setCameraLensFacing(ARConfigBase.CameraLensFacing cameraLensFacing) {\n        this.cameraLensFacing = cameraLensFacing;\n    }\n\n    public void setMultiFace(boolean multiFace) {\n        this.multiFace = multiFace;\n    }\n\n    public boolean getMultiFace() {\n        return multiFace;\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigHand.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hiar.ARConfigBase;\n\npublic class ARPluginConfigHand extends ARPluginConfigBasePointLine {\n    private boolean drawBox;\n\n    private ColorRGBA boxColor;\n\n    private ARConfigBase.CameraLensFacing cameraLensFacing = ARConfigBase.CameraLensFacing.FRONT;\n\n    private float lineWidthSkeleton;\n\n    public ARPluginConfigHand() {\n        this.boxColor = new ColorRGBA(0, 255, 0, 255);\n        this.drawBox = true;\n\n        this.lineWidthSkeleton = 19.9f;\n    }\n\n    public float getLineWidthSkeleton() {\n        return lineWidthSkeleton;\n    }\n\n    public void setLineWidthSkeleton(float lineWidthSkeleton) {\n        this.lineWidthSkeleton = lineWidthSkeleton;\n    }\n\n    public ColorRGBA getBoxColor() {\n        return boxColor;\n    }\n\n    public boolean isDrawBox() {\n        return drawBox;\n    }\n\n    public ARConfigBase.CameraLensFacing getCameraLensFacing() {\n        return this.cameraLensFacing;\n    }\n\n    public void setBoxColor(ColorRGBA boxColor) {\n        this.boxColor = boxColor;\n    }\n\n    public void setDrawBox(boolean drawBox) {\n        this.drawBox = drawBox;\n    }\n\n    public void setCameraLensFacing(ARConfigBase.CameraLensFacing cameraLensFacing) {\n        this.cameraLensFacing = cameraLensFacing;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigSceneMesh.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\npublic class ARPluginConfigSceneMesh extends ARPluginConfigBase {\n\n    private String objPath = \"AR_logo.obj\";\n\n    private String texturePath = \"AR_logo.png\";\n\n    public String getObjPath() {\n        return objPath;\n    }\n\n    public void setObjPath(String objPath) {\n        this.objPath = objPath;\n    }\n\n    public String getTexturePath() {\n        return texturePath;\n    }\n\n    public void setTexturePath(String texturePath) {\n        this.texturePath = texturePath;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigWorld.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hms.plugin.ar.core.model.AugmentedImageDBModel;\n\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class ARPluginConfigWorld extends ARPluginConfigBaseWorld {\n\n    private List<AugmentedImageDBModel> augmentedImageDBModels = Arrays.asList();\n\n    private ARConfigBase.PlaneFindingMode planeFindingMode = ARConfigBase.PlaneFindingMode.ENABLE;\n\n    public List<AugmentedImageDBModel> getAugmentedImageDBModels() {\n        return augmentedImageDBModels;\n    }\n\n    public void setAugmentedImageDBModels(List<AugmentedImageDBModel> augmentedImageDBModels) {\n        this.augmentedImageDBModels = augmentedImageDBModels;\n    }\n\n    public ARConfigBase.PlaneFindingMode getPlaneFindingMode() {\n        return planeFindingMode;\n    }\n\n    public void setPlaneFindingMode(ARConfigBase.PlaneFindingMode planeFindingMode) {\n        this.planeFindingMode = planeFindingMode;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ARPluginConfigWorldBody.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport com.huawei.hiar.ARConfigBase;\n\npublic class ARPluginConfigWorldBody extends ARPluginConfigBaseWorld {\n    private ARConfigBase.PlaneFindingMode planeFindingMode = ARConfigBase.PlaneFindingMode.ENABLE;\n\n    public ARConfigBase.PlaneFindingMode getPlaneFindingMode() {\n        return planeFindingMode;\n    }\n\n    public void setPlaneFindingMode(ARConfigBase.PlaneFindingMode planeFindingMode) {\n        this.planeFindingMode = planeFindingMode;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/config/ColorRGBA.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.config;\n\nimport android.graphics.Color;\n\npublic class ColorRGBA {\n    public float red;\n\n    public float green;\n\n    public float blue;\n\n    public float alpha;\n\n    public ColorRGBA(int red, int green, int blue, int alpha) {\n        this.red = (float) red / 256;\n        this.green = (float) green / 256;\n        this.blue = (float) blue / 256;\n        this.alpha = (float) alpha / 256;\n    }\n\n    public Color getColor() {\n        return Color.valueOf(this.red, this.green, this.blue, this.alpha);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/ArDemoRuntimeException.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\npublic class ArDemoRuntimeException extends RuntimeException {\n    public ArDemoRuntimeException() {\n        super();\n    }\n\n    public ArDemoRuntimeException(String message) {\n        super(message);\n    }\n\n    public ArDemoRuntimeException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/AugmentedImage/CornerType.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.augmentedImage;\n\npublic enum CornerType {\n    /**\n     * Upper left corner\n     */\n    UPPER_LEFT,\n\n    /**\n     * Upper right corner\n     */\n    UPPER_RIGHT,\n\n    /**\n     * Lower right corner\n     */\n    LOWER_RIGHT,\n\n    /**\n     * Lower left corner\n     */\n    LOWER_LEFT,\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/AugmentedImage/ImageKeyBase.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.augmentedImage;\n\nimport android.opengl.GLES20;\n\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hiar.ARPose;\n\npublic class ImageKeyBase {\n    protected int mProgram;\n\n    protected int mPosition;\n\n    protected int mColor;\n\n    /**\n     * 0.5 indicates half of the edge length.\n     * The four corners of an image can be obtained by using this parameter and the enums.\n     */\n    private static final float[] COEFFICIENTS = {0.5f, 0.5f};\n\n    protected int index = 0;\n\n    protected static final int BYTES_PER_CORNER = 4;\n\n    protected float[] cornerPointCoordinates;\n\n    /**\n     * 3D coordinates. The coordinates have four components (x, y, z, and alpha).\n     * One float occupies 4 bytes.\n     */\n    protected static final int BYTES_PER_POINT = 4 * 4;\n\n    protected void createProgram() {\n        mProgram = ImageShaderUtil.getImageKeyMsgProgram();\n        mPosition = GLES20.glGetAttribLocation(mProgram, \"inPosition\");\n        mColor = GLES20.glGetUniformLocation(mProgram, \"inColor\");\n    }\n\n    /**\n     * Obtain the vertex coordinates of the four corners of the augmented image and\n     * write them to the cornerPointCoordinates array.\n     *\n     * @param augmentedImage Augmented image object.\n     * @param cornerType Corner type.\n     */\n    protected void createImageCorner(ARAugmentedImage augmentedImage, CornerType cornerType) {\n        ARPose localBoundaryPose;\n        float[] coefficient = new float[COEFFICIENTS.length];\n        switch (cornerType) {\n            case LOWER_RIGHT:\n                generateCoefficent(coefficient, 1, 1);\n                break;\n            case UPPER_LEFT:\n                generateCoefficent(coefficient, -1, -1);\n                break;\n            case UPPER_RIGHT:\n                generateCoefficent(coefficient, 1, -1);\n                break;\n            case LOWER_LEFT:\n                generateCoefficent(coefficient, -1, 1);\n                break;\n            default:\n                break;\n        }\n\n        localBoundaryPose = ARPose.makeTranslation(coefficient[0] * augmentedImage.getExtentX(), 0.0f,\n            coefficient[1] * augmentedImage.getExtentZ());\n\n        ARPose centerPose = augmentedImage.getCenterPose();\n        ARPose composeCenterPose;\n        int cornerCoordinatePos = index * BYTES_PER_CORNER;\n        composeCenterPose = centerPose.compose(localBoundaryPose);\n        cornerPointCoordinates[cornerCoordinatePos] = composeCenterPose.tx();\n        cornerPointCoordinates[cornerCoordinatePos + 1] = composeCenterPose.ty();\n        cornerPointCoordinates[cornerCoordinatePos + 2] = composeCenterPose.tz();\n        cornerPointCoordinates[cornerCoordinatePos + 3] = 1.0f;\n        index++;\n    }\n\n    private void generateCoefficent(float[] coefficient, int coefficentX, int coefficentZ) {\n        for (int i = 0; i < coefficient.length; i += 2) {\n            coefficient[i] = coefficentX * COEFFICIENTS[i];\n            coefficient[i + 1] = coefficentZ * COEFFICIENTS[i + 1];\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/AugmentedImage/ImageKeyLineDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.augmentedImage;\n\nimport android.opengl.GLES20;\nimport android.opengl.Matrix;\n\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport java.nio.FloatBuffer;\n\npublic class ImageKeyLineDisplay extends ImageKeyBase {\n    private static final String TAG = ImageKeyLineDisplay.class.getSimpleName();\n\n    private static final int INITIAL_BUFFER_POINTS = 150;\n\n    private static final int COORDINATE_DIMENSION = 3;\n\n    private int mVboSize = INITIAL_BUFFER_POINTS * BYTES_PER_POINT;\n\n    private int mModelViewProjectionMatrix;\n\n    private int mVbo;\n\n    private int mNumPoints = 0;\n\n    private ColorRGBA lineColor;\n\n    private float lineWidth;\n\n    public ImageKeyLineDisplay(ColorRGBA lineColor, float lineWidth) {\n        this.lineColor = lineColor;\n        this.lineWidth = lineWidth;\n    }\n\n    /**\n     * Create and build the augmented image shader on the OpenGL thread.\n     */\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Init start.\");\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        createProgram();\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Init end.\");\n    }\n\n    @Override\n    protected void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Create imageKeyLine program start.\");\n        super.createProgram();\n        mModelViewProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inMVPMatrix\");\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Create imageKeyLine program end.\");\n    }\n\n    /**\n     * Draw the borders of the augmented image.\n     *\n     * @param augmentedImage AugmentedImage object.\n     * @param viewMatrix View matrix.\n     * @param projectionMatrix AR camera projection matrix.\n     */\n    public void onDrawFrame(ARAugmentedImage augmentedImage, float[] viewMatrix, float[] projectionMatrix) {\n        float[] vpMatrix = new float[BYTES_PER_POINT];\n        Matrix.multiplyMM(vpMatrix, 0, projectionMatrix, 0, viewMatrix, 0);\n        draw(augmentedImage, vpMatrix);\n    }\n\n    /**\n     * Draw borders to augment the image.\n     *\n     * @param augmentedImage AugmentedImage object.\n     * @param viewProjectionMatrix View projection matrix.\n     */\n    private void draw(ARAugmentedImage augmentedImage, float[] viewProjectionMatrix) {\n        cornerPointCoordinates = new float[BYTES_PER_CORNER * 4];\n        for (CornerType cornerType : CornerType.values()) {\n            createImageCorner(augmentedImage, cornerType);\n        }\n\n        updateImageKeyLineData(cornerPointCoordinates);\n        drawImageLine(viewProjectionMatrix);\n        cornerPointCoordinates = null;\n        index = 0;\n    }\n\n    private void updateImageKeyLineData(float[] cornerPoints) {\n        // Total number of coordinates.\n        int mPointsNum = cornerPoints.length / 4;\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mNumPoints = mPointsNum;\n        int vboSize = mVboSize;\n        int numPoints = mNumPoints;\n        if (vboSize < mNumPoints * BYTES_PER_POINT) {\n            while (vboSize < numPoints * BYTES_PER_POINT) {\n                // If the size of VBO is insufficient to accommodate the new vertex, resize the VBO.\n                vboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        FloatBuffer cornerPointBuffer = FloatBuffer.wrap(cornerPoints);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, numPoints * BYTES_PER_POINT, cornerPointBuffer);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n    }\n\n    /**\n     * Draw the image border.\n     *\n     * @param viewProjectionMatrix View projection matrix.\n     */\n    private void drawImageLine(float[] viewProjectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Draw image box start.\");\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glEnableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        GLES20.glVertexAttribPointer(mPosition, COORDINATE_DIMENSION, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n        GLES20.glUniform4f(mColor, lineColor.red, lineColor.green, lineColor.blue, lineColor.alpha);\n        GLES20.glUniformMatrix4fv(mModelViewProjectionMatrix, 1, false, viewProjectionMatrix, 0);\n\n        // Set the width of a rendering stroke.\n        GLES20.glLineWidth(lineWidth);\n        GLES20.glDrawArrays(GLES20.GL_LINE_LOOP, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glDisableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"ImageKeyLine Draw image box end.\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/AugmentedImage/ImageKeyPointDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.augmentedImage;\n\nimport android.opengl.GLES20;\nimport android.opengl.Matrix;\n\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport java.nio.FloatBuffer;\n\npublic class ImageKeyPointDisplay extends ImageKeyBase {\n\n    private static final String TAG = ImageKeyPointDisplay.class.getSimpleName();\n\n    private static final int INITIAL_POINTS_SIZE = 20;\n\n    private float[] centerPointCoordinates;\n\n    private float[] allPointCoordinates;\n\n    private int mVbo;\n\n    private int mVboSize;\n\n    private int mMvpMatrix;\n\n    private int mPointSize;\n\n    private int mNumPoints;\n\n    private ColorRGBA pointColor;\n\n    private float pointSize;\n\n    public ImageKeyPointDisplay(ColorRGBA pointColor, float pointSize) {\n        this.pointColor = pointColor;\n        this.pointSize = pointSize;\n    }\n\n    /**\n     * Create and build shaders for image keypoints on the OpenGL thread.\n     */\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"ImageKeyPoint Init start.\");\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mVboSize = INITIAL_POINTS_SIZE * BYTES_PER_POINT;\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        createProgram();\n        ErrorUtil.checkGLError(TAG, \"ImageKeyPoint Init end.\");\n    }\n\n    @Override\n    protected void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"ImageKeyPoint Create gl program start.\");\n        super.createProgram();\n        mPointSize = GLES20.glGetUniformLocation(mProgram, \"inPointSize\");\n        mMvpMatrix = GLES20.glGetUniformLocation(mProgram, \"inMVPMatrix\");\n        ErrorUtil.checkGLError(TAG, \"ImageKeyPoint Create program end.\");\n    }\n\n    /**\n     * Draw image key points to augment the image.\n     *\n     * @param augmentedImage Image to be augmented.\n     * @param viewMatrix View matrix.\n     * @param projectionMatrix Projection matrix.\n     */\n    public void onDrawFrame(ARAugmentedImage augmentedImage, float[] viewMatrix, float[] projectionMatrix) {\n        float[] vpMatrix = new float[BYTES_PER_POINT];\n        Matrix.multiplyMM(vpMatrix, 0, projectionMatrix, 0, viewMatrix, 0);\n        draw(augmentedImage, vpMatrix);\n    }\n\n    private void draw(ARAugmentedImage augmentedImage, float[] viewProjectionMatrix) {\n        createImageCenterPoint(augmentedImage);\n        updateImageAllPoints(centerPointCoordinates);\n\n        cornerPointCoordinates = new float[BYTES_PER_CORNER * 4];\n        for (CornerType cornerType : CornerType.values()) {\n            createImageCorner(augmentedImage, cornerType);\n        }\n        mergeArray(centerPointCoordinates, cornerPointCoordinates);\n\n        updateImageAllPoints(allPointCoordinates);\n        drawImageKeyPoint(viewProjectionMatrix);\n        cornerPointCoordinates = null;\n        index = 0;\n    }\n\n    /**\n     * Obtain the coordinates of the center of the recognized image and\n     * write the coordinates to the centerPointCoordinates array.\n     *\n     * @param augmentedImage Augmented image object.\n     */\n    private void createImageCenterPoint(ARAugmentedImage augmentedImage) {\n        centerPointCoordinates = new float[4];\n        ARPose centerPose = augmentedImage.getCenterPose();\n        centerPointCoordinates[0] = centerPose.tx();\n        centerPointCoordinates[1] = centerPose.ty();\n        centerPointCoordinates[2] = centerPose.tz();\n        centerPointCoordinates[3] = 1.0f;\n    }\n\n    /**\n     * Combine the obtained central coordinate array and vertex coordinate array\n     * into an allPointCoordinates array.\n     *\n     * @param centerCoordinates Center coordinate array.\n     * @param cornerCoordinates Four-corner coordinate array.\n     */\n    private void mergeArray(float[] centerCoordinates, float[] cornerCoordinates) {\n        allPointCoordinates = new float[centerCoordinates.length + cornerCoordinates.length];\n        System.arraycopy(centerCoordinates, 0, allPointCoordinates, 0, centerCoordinates.length);\n        System.arraycopy(cornerCoordinates, 0, allPointCoordinates, centerCoordinates.length, cornerCoordinates.length);\n    }\n\n    /**\n     * Update the key point information of the augmented image.\n     *\n     * @param cornerPoints Array of key points of the augmented image,\n     * including the four vertexes and center.\n     */\n    private void updateImageAllPoints(float[] cornerPoints) {\n        ErrorUtil.checkGLError(TAG, \"Update image key point data start.\");\n        int mPointsNum = cornerPoints.length / 4;\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mNumPoints = mPointsNum;\n        int vboSize = mVboSize;\n        int numPoints = mNumPoints;\n        if (vboSize < mNumPoints * BYTES_PER_POINT) {\n            while (vboSize < numPoints * BYTES_PER_POINT) {\n                // If the size of VBO is insufficient to accommodate the new vertex, resize the VBO.\n                vboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n\n        FloatBuffer cornerPointBuffer = FloatBuffer.wrap(cornerPoints);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mNumPoints * BYTES_PER_POINT, cornerPointBuffer);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Update image key point data end.\");\n    }\n\n    private void drawImageKeyPoint(float[] viewProjectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"Draw image key point start.\");\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        GLES20.glVertexAttribPointer(mPosition, 4, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n\n        // Set the color of key points.\n        GLES20.glUniform4f(mColor, pointColor.red, pointColor.green, pointColor.blue, pointColor.alpha);\n        GLES20.glUniformMatrix4fv(mMvpMatrix, 1, false, viewProjectionMatrix, 0);\n\n        // Set the size of the key points of the image.\n        GLES20.glUniform1f(mPointSize, pointSize);\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"Draw image key point end.\");\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/AugmentedImage/ImageShaderUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.augmentedImage;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\npublic class ImageShaderUtil {\n    private static final String TAG = ImageShaderUtil.class.getSimpleName();\n\n    /**\n     * Newline character.\n     */\n    private static final String LS = System.lineSeparator();\n\n    /**\n     * Vertex shader used for label rendering.\n     */\n    private static final String LABEL_VERTEX = \"uniform mat2 inPlanUVMatrix;\" + LS + \"uniform mat4 inMVPMatrix;\" + LS\n        + \"attribute vec3 inPosXZAlpha;\" + LS + \"varying vec3 varTexCoordAlpha;\" + LS + \"void main() {\" + LS\n        + \"    vec4 tempPosition = vec4(inPosXZAlpha.x, 0.0, inPosXZAlpha.y, 1.0);\" + LS\n        + \"    vec2 tempUV = inPlanUVMatrix * inPosXZAlpha.xy;\" + LS\n        + \"    varTexCoordAlpha = vec3(tempUV.x + 0.5, tempUV.y + 0.5, inPosXZAlpha.z);\" + LS\n        + \"    gl_Position = inMVPMatrix * tempPosition;\" + LS + \"}\";\n\n    /**\n     * Segment shader used for label rendering.\n     */\n    private static final String LABEL_FRAGMENT = \"precision highp float;\" + LS + \"uniform sampler2D inTexture;\" + LS\n        + \"varying vec3 varTexCoordAlpha;\" + LS + \"void main() {\" + LS\n        + \"    vec4 control = texture2D(inTexture, varTexCoordAlpha.xy);\" + LS\n        + \"    gl_FragColor = vec4(control.rgb, 1.0);\" + LS + \"}\";\n\n    /**\n     * Code of the image vertex shader.\n     */\n    private static final String LP_VERTEX = \"uniform vec4 inColor;\" + LS + \"attribute vec4 inPosition;\" + LS\n        + \"uniform float inPointSize;\" + LS + \"varying vec4 varColor;\" + LS + \"uniform mat4 inMVPMatrix;\" + LS\n        + \"void main() {\" + LS + \"    gl_PointSize = inPointSize;\" + LS\n        + \"    gl_Position = inMVPMatrix * vec4(inPosition.xyz, 1.0);\" + LS + \"    varColor = inColor;\" + LS + \"}\";\n\n    /**\n     * Code of the image fragment shader.\n     */\n    private static final String LP_FRAGMENT = \"precision mediump float;\" + LS + \"varying vec4 varColor;\" + LS\n        + \"void main() {\" + LS + \"    gl_FragColor = varColor;\" + LS + \"}\";\n\n    private ImageShaderUtil() {\n    }\n\n    static int getLabelProgram() {\n        return createGlProgram(LABEL_VERTEX, LABEL_FRAGMENT);\n    }\n\n    static int getImageKeyMsgProgram() {\n        return createGlProgram(LP_VERTEX, LP_FRAGMENT);\n    }\n\n    /**\n     * Shader program generator.\n     *\n     * @param vertexCode Code of the vertex shader.\n     * @param fragmentCode Code of the image fragment shader.\n     * @return Program handle.\n     */\n    private static int createGlProgram(String vertexCode, String fragmentCode) {\n        int vertex = loadShader(GLES20.GL_VERTEX_SHADER, vertexCode);\n        if (vertex == 0) {\n            return 0;\n        }\n        int fragment = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentCode);\n        if (fragment == 0) {\n            return 0;\n        }\n        int program = GLES20.glCreateProgram();\n        if (program != 0) {\n            GLES20.glAttachShader(program, vertex);\n            GLES20.glAttachShader(program, fragment);\n            GLES20.glLinkProgram(program);\n            int[] linkStatus = new int[1];\n            GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);\n            if (linkStatus[0] != GLES20.GL_TRUE) {\n                Log.e(TAG, \"Could not link program: \" + GLES20.glGetProgramInfoLog(program));\n                GLES20.glDeleteProgram(program);\n                program = 0;\n            }\n        }\n        return program;\n    }\n\n    private static int loadShader(int shaderType, String source) {\n        int shader = GLES20.glCreateShader(shaderType);\n        if (shader != 0) {\n            GLES20.glShaderSource(shader, source);\n            GLES20.glCompileShader(shader);\n            int[] compiled = new int[1];\n            GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);\n            if (compiled[0] == 0) {\n                Log.e(TAG, \"glError: Could not compile shader \" + shaderType);\n                Log.e(TAG, \"GLES20 Error: \" + GLES20.glGetShaderInfoLog(shader));\n                GLES20.glDeleteShader(shader);\n                shader = 0;\n            }\n        }\n        return shader;\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/CameraConfigListener.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport com.huawei.hiar.ARCameraConfig;\n\npublic interface CameraConfigListener {\n    void handleCameraConfigData(ARCameraConfig cameraConfig);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/CameraIntrinsicsListener.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport com.huawei.hiar.ARCameraIntrinsics;\n\npublic interface CameraIntrinsicsListener {\n    void handleCameraIntrinsicsData(ARCameraIntrinsics cameraIntrinsics);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/DisplayRotationManager.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.content.Context;\nimport android.hardware.display.DisplayManager;\nimport android.view.Display;\nimport android.view.WindowManager;\n\nimport com.huawei.hiar.ARSession;\n\npublic class DisplayRotationManager implements DisplayManager.DisplayListener {\n    private final Context context;\n    private final Display display;\n    private int width;\n    private int height;\n    private boolean deviceRotated = false;\n\n    public DisplayRotationManager(Context context) {\n        this.context = context;\n        WindowManager systemService = context.getSystemService(WindowManager.class);\n        if (systemService != null) display = systemService.getDefaultDisplay();\n        else display = null;\n    }\n\n    public void registerDisplayListener() {\n        DisplayManager systemService = context.getSystemService(DisplayManager.class);\n        if (systemService != null)\n            systemService.registerDisplayListener(this, null);\n    }\n\n    public void unregisterDisplayListener() {\n        DisplayManager systemService = context.getSystemService(DisplayManager.class);\n        if (systemService != null)\n            systemService.unregisterDisplayListener(this);\n    }\n\n    public boolean isDeviceRotated() {\n        return deviceRotated;\n    }\n\n    public void updateViewportRotation(int width, int height) {\n        this.width = width;\n        this.height = height;\n        deviceRotated = true;\n    }\n\n    public void updateARSessionDisplayGeometry(ARSession arSession) {\n        arSession.setDisplayGeometry(display != null ? display.getRotation() : 0, width, height);\n        deviceRotated = false;\n    }\n\n    @Override\n    public void onDisplayAdded(int i) {\n    }\n\n    @Override\n    public void onDisplayRemoved(int i) {\n    }\n\n    @Override\n    public void onDisplayChanged(int i) {\n        deviceRotated = true;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/GestureEvent.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.view.MotionEvent;\n\npublic class GestureEvent {\n    /**\n     * Define the constant 0, indicating an unknown gesture type.\n     */\n    public static final int GESTURE_EVENT_TYPE_UNKNOW = 0;\n\n    /**\n     * Define the constant 1, indicating that the gesture type is DOWN.\n     */\n    public static final int GESTURE_EVENT_TYPE_DOWN = 1;\n\n    /**\n     * Define the constant 2, indicating that the gesture type is SINGLETAPUP.\n     */\n    public static final int GESTURE_EVENT_TYPE_SINGLETAPUP = 2;\n\n    /**\n     * Define the constant 3, indicating that the gesture type is SCROLL.\n     */\n    public static final int GESTURE_EVENT_TYPE_SCROLL = 3;\n\n    private int type;\n\n    private MotionEvent eventFirst;\n\n    private MotionEvent eventSecond;\n\n    private float distanceX;\n\n    private float distanceY;\n\n    private GestureEvent() {\n    }\n\n    public float getDistanceX() {\n        return distanceX;\n    }\n\n    public float getDistanceY() {\n        return distanceY;\n    }\n\n    public int getType() {\n        return type;\n    }\n\n    public MotionEvent getEventFirst() {\n        return eventFirst;\n    }\n\n    public MotionEvent getEventSecond() {\n        return eventSecond;\n    }\n\n    /**\n     * Create a gesture type: DOWN.\n     *\n     * @param motionEvent The gesture motion event: DOWN.\n     * @return GestureEvent.\n     */\n    public static GestureEvent createDownEvent(MotionEvent motionEvent) {\n        GestureEvent ret = new GestureEvent();\n        ret.type = GESTURE_EVENT_TYPE_DOWN;\n        ret.eventFirst = motionEvent;\n        return ret;\n    }\n\n    /**\n     * Create a gesture type: SINGLETAPUP.\n     *\n     * @param motionEvent The gesture motion event: SINGLETAPUP.\n     * @return GestureEvent(SINGLETAPUP).\n     */\n    public static GestureEvent createSingleTapUpEvent(MotionEvent motionEvent) {\n        GestureEvent ret = new GestureEvent();\n        ret.type = GESTURE_EVENT_TYPE_SINGLETAPUP;\n        ret.eventFirst = motionEvent;\n        return ret;\n    }\n\n    /**\n     * Create a gesture type: SCROLL.\n     *\n     * @param e1 The first down motion event that started the scrolling.\n     * @param e2 The second down motion event that ended the scrolling.\n     * @param distanceX The distance along the X axis that has been scrolled since the last call to onScroll.\n     * @param distanceY The distance along the Y axis that has been scrolled since the last call to onScroll.\n     * @return GestureEvent(SCROLL).\n     */\n    public static GestureEvent createScrollEvent(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {\n        GestureEvent ret = new GestureEvent();\n        ret.type = GESTURE_EVENT_TYPE_SCROLL;\n        ret.eventFirst = e1;\n        ret.eventSecond = e2;\n        ret.distanceX = distanceX;\n        ret.distanceY = distanceY;\n        return ret;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/LabelDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.graphics.Bitmap;\nimport android.opengl.GLES20;\nimport android.opengl.GLUtils;\nimport android.opengl.Matrix;\nimport android.util.Log;\nimport android.util.Pair;\n\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport com.huawei.hms.plugin.ar.core.util.WorldShaderUtil;\n\nimport java.io.Serializable;\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.FloatBuffer;\nimport java.nio.ShortBuffer;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.Comparator;\n\npublic class LabelDisplay {\n    private static final String TAG = LabelDisplay.class.getSimpleName();\n\n    private static final String LS = System.lineSeparator();\n\n    private static final int COORDS_PER_VERTEX = 3;\n\n    private static final float LABEL_WIDTH = 0.3f;\n\n    private static final float LABEL_HEIGHT = 0.3f;\n\n    private static final int TEXTURES_SIZE = 12;\n\n    private static final int MATRIX_SIZE = 16;\n\n    private static final int PLANE_ANGLE_MATRIX_SIZE = 4;\n\n    private final int[] textures = new int[TEXTURES_SIZE];\n\n    // Allocate a temporary list/matrix here to reduce the number of allocations per frame.\n    private final float[] modelMatrix = new float[MATRIX_SIZE];\n\n    private final float[] modelViewMatrix = new float[MATRIX_SIZE];\n\n    private final float[] modelViewProjectionMatrix = new float[MATRIX_SIZE];\n\n    // A 2 * 2 rotation matrix applied to the uv coordinates.\n    private final float[] planeAngleUvMatrix = new float[PLANE_ANGLE_MATRIX_SIZE];\n\n    private int mProgram;\n\n    private int glPositionParameter;\n\n    private int glModelViewProjectionMatrix;\n\n    private int glTexture;\n\n    private int glPlaneUvMatrix;\n\n    public void init(ArrayList<Bitmap> labelBitmaps) {\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Init start.\");\n        if (labelBitmaps.size() == 0) {\n            Log.e(TAG, \"LabelDisplay No bitmap.\");\n        }\n        createProgram();\n        int idx = 0;\n        GLES20.glGenTextures(textures.length, textures, 0);\n        for (Bitmap labelBitmap : labelBitmaps) {\n            // for semantic label plane\n            GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + idx);\n            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[idx]);\n\n            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);\n            GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);\n            GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, labelBitmap, 0);\n            GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);\n            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n            idx++;\n            ErrorUtil.checkGLError(TAG, \"LabelDisplay Texture loading\");\n        }\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay program start.\");\n        mProgram = WorldShaderUtil.getLabelProgram();\n        glPositionParameter = GLES20.glGetAttribLocation(mProgram, \"inPosXZAlpha\");\n        glModelViewProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inMVPMatrix\");\n        glTexture = GLES20.glGetUniformLocation(mProgram, \"inTexture\");\n        glPlaneUvMatrix = GLES20.glGetUniformLocation(mProgram, \"inPlanUVMatrix\");\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay program end.\");\n    }\n\n    /**\n     * Render the plane type at the center of the currently identified plane.\n     *\n     * @param allPlanes All identified planes.\n     * @param cameraPose Location and pose of the current camera.\n     * @param cameraProjection Projection matrix of the current camera.\n     */\n    public void onDrawFrame(Collection<ARPlane> allPlanes, ARPose cameraPose, float[] cameraProjection) {\n        ArrayList<ARPlane> sortedPlanes = getSortedPlanes(allPlanes, cameraPose);\n        float[] cameraViewMatrix = new float[MATRIX_SIZE];\n        cameraPose.inverse().toMatrix(cameraViewMatrix, 0);\n        drawSortedPlans(sortedPlanes, cameraViewMatrix, cameraProjection);\n    }\n\n    private ArrayList<ARPlane> getSortedPlanes(Collection<ARPlane> allPlanes, ARPose cameraPose) {\n        // Planes must be sorted by the distance from the camera so that we can\n        // first draw the closer planes, and have them block the further planes.\n        ArrayList<Pair<ARPlane, Float>> pairPlanes = new ArrayList<>();\n        for (ARPlane plane : allPlanes) {\n            if ((plane.getType() == ARPlane.PlaneType.UNKNOWN_FACING)\n                || plane.getTrackingState() != ARTrackable.TrackingState.TRACKING || plane.getSubsumedBy() != null) {\n                continue;\n            }\n\n            // Store the normal vector of the current plane.\n            float[] planeNormalVector = new float[3];\n            ARPose planeCenterPose = plane.getCenterPose();\n            planeCenterPose.getTransformedAxis(1, 1.0f, planeNormalVector, 0);\n\n            // Calculate the distance from the camera to the plane. If the value is negative,\n            // it indicates that the camera is behind the plane (the normal vector distinguishes\n            // the front side from the back side).\n            float distanceBetweenPlaneAndCamera = (cameraPose.tx() - planeCenterPose.tx()) * planeNormalVector[0]\n                + (cameraPose.ty() - planeCenterPose.ty()) * planeNormalVector[1]\n                + (cameraPose.tz() - planeCenterPose.tz()) * planeNormalVector[2];\n            pairPlanes.add(new Pair<>(plane, distanceBetweenPlaneAndCamera));\n        }\n\n        pairPlanes.sort(new PlanCompare());\n\n        ArrayList<ARPlane> sortedPlanes = new ArrayList<>();\n        for (Pair<ARPlane, Float> eachPlane : pairPlanes) {\n            sortedPlanes.add(eachPlane.first);\n        }\n        return sortedPlanes;\n    }\n\n    static class PlanCompare implements Comparator<Pair<ARPlane, Float>>, Serializable {\n        private static final long serialVersionUID = -7710923839970415650L;\n\n        @Override\n        public int compare(Pair<ARPlane, Float> planA, Pair<ARPlane, Float> planB) {\n            return planB.second.compareTo(planA.second);\n        }\n    }\n\n    private void drawSortedPlans(ArrayList<ARPlane> sortedPlanes, float[] cameraViews, float[] cameraProjection) {\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Draw sorted plans start.\");\n\n        GLES20.glDepthMask(false);\n        GLES20.glEnable(GLES20.GL_BLEND);\n        GLES20.glBlendFuncSeparate(GLES20.GL_DST_ALPHA, GLES20.GL_ONE, GLES20.GL_ZERO, GLES20.GL_ONE_MINUS_SRC_ALPHA);\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(glPositionParameter);\n\n        for (ARPlane plane : sortedPlanes) {\n            float[] planeMatrix = new float[MATRIX_SIZE];\n            plane.getCenterPose().toMatrix(planeMatrix, 0);\n\n            System.arraycopy(planeMatrix, 0, modelMatrix, 0, MATRIX_SIZE);\n\n            float scaleU = 1.0f / LABEL_WIDTH;\n\n            // Set the value of the plane angle uv matrix.\n            planeAngleUvMatrix[0] = scaleU;\n            planeAngleUvMatrix[1] = 0.0f;\n            planeAngleUvMatrix[2] = 0.0f;\n            float scaleV = 1.0f / LABEL_HEIGHT;\n            planeAngleUvMatrix[3] = scaleV;\n\n            int idx = plane.getLabel().ordinal();\n            Log.d(TAG, \"Plane getLabel:\" + idx);\n            idx = Math.abs(idx);\n            GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + idx);\n            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[idx]);\n            GLES20.glUniform1i(glTexture, idx);\n            GLES20.glUniformMatrix2fv(glPlaneUvMatrix, 1, false, planeAngleUvMatrix, 0);\n\n            drawLabel(cameraViews, cameraProjection);\n        }\n\n        GLES20.glDisableVertexAttribArray(glPositionParameter);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n        GLES20.glDisable(GLES20.GL_BLEND);\n        GLES20.glDepthMask(true);\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Draw sorted plans end.\");\n    }\n\n    private void drawLabel(float[] cameraViews, float[] cameraProjection) {\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Draw label start.\");\n        Matrix.multiplyMM(modelViewMatrix, 0, cameraViews, 0, modelMatrix, 0);\n        Matrix.multiplyMM(modelViewProjectionMatrix, 0, cameraProjection, 0, modelViewMatrix, 0);\n\n        float halfWidth = LABEL_WIDTH / 2.0f;\n        float halfHeight = LABEL_HEIGHT / 2.0f;\n        float[] vertices = {\n            -halfWidth, -halfHeight, 1, -halfWidth, halfHeight, 1, halfWidth, halfHeight, 1, halfWidth, -halfHeight, 1,\n        };\n\n        // The size of each floating point is 4 bits.\n        FloatBuffer vetBuffer = ByteBuffer.allocateDirect(4 * vertices.length)\n            .order(ByteOrder.nativeOrder())\n            .asFloatBuffer();\n        vetBuffer.rewind();\n        for (int i = 0; i < vertices.length; ++i) {\n            vetBuffer.put(vertices[i]);\n        }\n        vetBuffer.rewind();\n\n        // The size of each floating point is 4 bits.\n        GLES20.glVertexAttribPointer(glPositionParameter, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false,\n            4 * COORDS_PER_VERTEX, vetBuffer);\n\n        // Set the sequence of OpenGL drawing points to generate two triangles that form a plane.\n        short[] indices = {0, 1, 2, 0, 2, 3};\n\n        // Size of the allocated buffer.\n        ShortBuffer idxBuffer = ByteBuffer.allocateDirect(2 * indices.length)\n            .order(ByteOrder.nativeOrder())\n            .asShortBuffer();\n        idxBuffer.rewind();\n        for (int i = 0; i < indices.length; ++i) {\n            idxBuffer.put(indices[i]);\n        }\n        idxBuffer.rewind();\n\n        GLES20.glUniformMatrix4fv(glModelViewProjectionMatrix, 1, false, modelViewProjectionMatrix, 0);\n\n        GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, idxBuffer.limit(), GLES20.GL_UNSIGNED_SHORT, idxBuffer);\n        ErrorUtil.checkGLError(TAG, \"LabelDisplay Draw label end.\");\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/MessageTextListener.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\npublic interface MessageTextListener {\n    void handleMessageData(String text);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/ObjectDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.opengl.GLES20;\nimport android.opengl.GLUtils;\nimport android.opengl.Matrix;\nimport android.util.Log;\nimport android.view.MotionEvent;\n\nimport com.huawei.hms.plugin.ar.core.util.MatrixUtil;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.FloatBuffer;\nimport java.nio.IntBuffer;\nimport java.nio.ShortBuffer;\nimport java.util.Arrays;\nimport java.util.Optional;\n\nimport de.javagl.obj.Obj;\nimport de.javagl.obj.ObjData;\nimport de.javagl.obj.ObjReader;\nimport de.javagl.obj.ObjUtils;\n\npublic class ObjectDisplay {\n    private static final String TAG = ObjectDisplay.class.getSimpleName();\n\n    private static final float[] LIGHT_DIRECTIONS = new float[] {0.0f, 1.0f, 0.0f, 0.0f};\n\n    private static final int MATRIX_SIZE = 16;\n\n    public static final String LS = System.lineSeparator();\n\n    public static final String OBJECT_VERTEX = \"uniform mat4 u_ModelView;\" + LS + \"uniform mat4 u_ModelViewProjection;\"\n        + LS + \"attribute vec4 a_Position;\" + LS + \"attribute vec3 a_Normal;\" + LS + \"attribute vec2 a_TexCoord;\" + LS\n        + \"varying vec3 v_ViewPosition;\" + LS + \"varying vec3 v_ViewNormal;\" + LS + \"varying vec2 v_TexCoord;\" + LS\n        + \"void main() {\" + LS + \"v_ViewPosition = (u_ModelView * a_Position).xyz;\" + LS\n        + \"v_ViewNormal = (u_ModelView * vec4(a_Normal, 0.0)).xyz;\" + LS + \"v_TexCoord = a_TexCoord;\" + LS\n        + \"gl_Position = u_ModelViewProjection * a_Position;\" + LS + \"}\";\n\n    public static final String OBJECT_FRAGMENT = \"precision mediump float;\" + LS + \"uniform sampler2D u_Texture;\" + LS\n        + \"uniform vec4 u_LightingParameters;\" + LS + \"uniform vec4 u_MaterialParameters;\" + LS\n        + \"varying vec3 v_ViewPosition;\" + LS + \"varying vec3 v_ViewNormal;\" + LS + \"varying vec2 v_TexCoord;\" + LS\n        + \"uniform vec4 u_ObjColor;\" + LS + \"void main() {\" + LS + \"    const float kGamma = 0.4545454;\" + LS\n        + \"    const float kInverseGamma = 2.2;\" + LS + \"    vec3 viewLightDirection = u_LightingParameters.xyz;\" + LS\n        + \"    float lightIntensity = u_LightingParameters.w;\" + LS\n        + \"    float materialAmbient = u_MaterialParameters.x;\" + LS\n        + \"    float materialDiffuse = u_MaterialParameters.y;\" + LS\n        + \"    float materialSpecular = u_MaterialParameters.z;\" + LS\n        + \"    float materialSpecularPower = u_MaterialParameters.w;\" + LS\n        + \"    vec3 viewFragmentDirection = normalize(v_ViewPosition);\" + LS\n        + \"    vec3 viewNormal = normalize(v_ViewNormal);\" + LS\n        + \"    vec4 objectColor = texture2D(u_Texture, vec2(v_TexCoord.x, 1.0 - v_TexCoord.y));\" + LS\n        + \"    if (u_ObjColor.a >= 255.0) {\" + LS + \"      float intensity = objectColor.r;\" + LS\n        + \"      objectColor.rgb = u_ObjColor.rgb * intensity / 255.0;\" + LS + \"    }\" + LS\n        + \"    objectColor.rgb = pow(objectColor.rgb, vec3(kInverseGamma));\" + LS\n        + \"    float ambient = materialAmbient;\" + LS\n        + \"    float diffuse = lightIntensity * materialDiffuse * 0.5 * (dot(viewNormal, viewLightDirection) + 1.0);\"\n        + LS + \"    vec3 reflectedLightDirection = reflect(viewLightDirection, viewNormal);\" + LS\n        + \"    float specularStrength = max(0.0, dot(viewFragmentDirection, reflectedLightDirection));\" + LS\n        + \"    float specular = lightIntensity * materialSpecular * pow(specularStrength, materialSpecularPower);\" + LS\n        + \"    gl_FragColor.a = objectColor.a;\" + LS\n        + \"    gl_FragColor.rgb = pow(objectColor.rgb * (ambient + diffuse) + specular, vec3(kGamma));\" + LS + \"}\" + LS;\n\n    private float[] mViewLightDirections = new float[4];\n\n    private int mTexCoordsBaseAddress;\n\n    private int mNormalsBaseAddress;\n\n    private int mVertexBufferId;\n\n    private int mIndexCount;\n\n    private int mGlProgram;\n\n    private int mIndexBufferId;\n\n    private int[] mTextures = new int[1];\n\n    private int mModelViewUniform;\n\n    private int mModelViewProjectionUniform;\n\n    private int mPositionAttribute;\n\n    private int mNormalAttribute;\n\n    private int mTexCoordAttribute;\n\n    private int mTextureUniform;\n\n    private int mLightingParametersUniform;\n    //    private int mColorUniform;\n\n    private float[] mModelMatrixs = new float[MATRIX_SIZE];\n\n    private float[] mModelViewMatrixs = new float[MATRIX_SIZE];\n\n    private float[] mModelViewProjectionMatrixs = new float[MATRIX_SIZE];\n\n    // The largest bounding box of a virtual object, represented by two diagonals of a cube.\n    private float[] mBoundingBoxs = new float[6];\n\n    private float mWidth;\n\n    private float mHeight;\n\n    private float[] mModelMatrix = new float[16];\n\n    private int mMaterialParametersUniform;\n\n    private String objPath;\n\n    private String texturePath;\n\n    public void setSize(float width, float height) {\n        mWidth = width;\n        mHeight = height;\n    }\n\n    public ObjectDisplay(String objPath, String texturePath) {\n        this.objPath = objPath;\n        this.texturePath = texturePath;\n    }\n\n    public void init(Context context) {\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay Init start.\");\n\n        // Coordinate and index.\n        int[] buffers = new int[2];\n        GLES20.glGenBuffers(2, buffers, 0);\n        mVertexBufferId = buffers[0];\n        mIndexBufferId = buffers[1];\n        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);\n        GLES20.glGenTextures(mTextures.length, mTextures, 0);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);\n        try {\n            createOnGlThread(context, objPath, texturePath);\n        } catch (IOException e) {\n            Log.e(TAG, e.getMessage());\n        }\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay Init end.\");\n    }\n\n    public void createOnGlThread(Context context, String objAssetName, String diffuseTextureAssetName)\n        throws IOException {\n        initGlTextureData(context, diffuseTextureAssetName);\n\n        initializeGlObjectData(context, objAssetName);\n\n        mGlProgram = OpenGLUtil.createGlProgram(OBJECT_VERTEX, OBJECT_FRAGMENT);\n        GLES20.glUseProgram(mGlProgram);\n\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay program creation\");\n\n        mModelViewUniform = GLES20.glGetUniformLocation(mGlProgram, \"u_ModelView\");\n        mModelViewProjectionUniform = GLES20.glGetUniformLocation(mGlProgram, \"u_ModelViewProjection\");\n\n        mPositionAttribute = GLES20.glGetAttribLocation(mGlProgram, \"a_Position\");\n        mNormalAttribute = GLES20.glGetAttribLocation(mGlProgram, \"a_Normal\");\n        mTexCoordAttribute = GLES20.glGetAttribLocation(mGlProgram, \"a_TexCoord\");\n\n        mTextureUniform = GLES20.glGetUniformLocation(mGlProgram, \"u_Texture\");\n\n        mLightingParametersUniform = GLES20.glGetUniformLocation(mGlProgram, \"u_LightingParameters\");\n        mMaterialParametersUniform = GLES20.glGetUniformLocation(mGlProgram, \"u_MaterialParameters\");\n\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay Program parameters\");\n\n        Matrix.setIdentityM(mModelMatrix, 0);\n    }\n\n    private void initGlTextureData(Context context, String diffuseTextureAssetName) {\n        Bitmap textureBitmap = null;\n        try {\n            textureBitmap = BitmapFactory.decodeStream(context.getAssets().open(diffuseTextureAssetName));\n        } catch (IOException e) {\n            Log.d(TAG, \"ObjectDisplay Failed to load texture data. Error: \" + e.getMessage(), e.getCause());\n        }\n\n        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);\n        GLES20.glGenTextures(mTextures.length, mTextures, 0);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);\n\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);\n\n        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, textureBitmap, 0);\n        GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay load texture\");\n    }\n\n    private void initializeGlObjectData(Context context, String objAssetName) {\n        ObjectData objectData = null;\n        Optional<ObjectData> objectDataOptional = readObject(context, objAssetName);\n        if (objectDataOptional.isPresent()) {\n            objectData = objectDataOptional.get();\n        } else {\n            Log.e(TAG, \"Read object error.\");\n            return;\n        }\n        int[] buffers = new int[2];\n        GLES20.glGenBuffers(2, buffers, 0);\n        mVertexBufferId = buffers[0];\n        mIndexBufferId = buffers[1];\n\n        int mVerticesBaseAddress = 0;\n        mTexCoordsBaseAddress = mVerticesBaseAddress + 4 * objectData.objectIndices.limit();\n        mNormalsBaseAddress = mTexCoordsBaseAddress + 4 * objectData.texCoords.limit();\n        final int totalBytes = mNormalsBaseAddress + 4 * objectData.normals.limit();\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVertexBufferId);\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, totalBytes, null, GLES20.GL_STATIC_DRAW);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, mVerticesBaseAddress, 4 * objectData.objectVertices.limit(),\n            objectData.objectVertices);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, mTexCoordsBaseAddress, 4 * objectData.texCoords.limit(),\n            objectData.texCoords);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, mNormalsBaseAddress, 4 * objectData.normals.limit(),\n            objectData.normals);\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mIndexBufferId);\n        mIndexCount = objectData.indices.limit();\n        GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, 2 * mIndexCount, objectData.indices, GLES20.GL_STATIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay obj buffer load\");\n    }\n\n    private Optional<ObjectData> readObject(Context context, String objAssetName) {\n        Obj obj;\n        try (InputStream objInputStream = context.getAssets().open(objPath)) {\n            obj = ObjReader.read(objInputStream);\n            obj = ObjUtils.convertToRenderable(obj);\n        } catch (IllegalArgumentException | IOException e) {\n            Log.e(TAG, \"Get object data failed!\");\n            return Optional.empty();\n        }\n\n        IntBuffer wideIndices = ObjData.getFaceVertexIndices(obj, 3);\n        FloatBuffer vertices = ObjData.getVertices(obj);\n        FloatBuffer texCoords = ObjData.getTexCoords(obj, 2);\n        FloatBuffer normals = ObjData.getNormals(obj);\n\n        calculateBoundingBox(vertices);\n\n        ShortBuffer indices = ByteBuffer.allocateDirect(2 * wideIndices.limit())\n            .order(ByteOrder.nativeOrder())\n            .asShortBuffer();\n        while (wideIndices.hasRemaining()) {\n            indices.put((short) wideIndices.get());\n        }\n        indices.rewind();\n\n        return Optional.of(new ObjectData(wideIndices, vertices, indices, texCoords, normals));\n    }\n\n    private static class ObjectData {\n        IntBuffer objectIndices;\n\n        FloatBuffer objectVertices;\n\n        ShortBuffer indices;\n\n        FloatBuffer texCoords;\n\n        FloatBuffer normals;\n\n        ObjectData(IntBuffer objInds, FloatBuffer objVerts, ShortBuffer inds, FloatBuffer tCoords, FloatBuffer nrmls) {\n            this.objectIndices = objInds;\n            this.objectVertices = objVerts;\n            this.indices = inds;\n            this.texCoords = tCoords;\n            this.normals = nrmls;\n        }\n    }\n\n    /**\n     * Draw a virtual object at a specific location on a specified plane.\n     *\n     * @param cameraView The viewMatrix is a 4 * 4 matrix.\n     * @param cameraProjection The ProjectionMatrix is a 4 * 4 matrix.\n     * @param lightIntensity The lighting intensity.\n     * @param obj The virtual object.\n     */\n    public void onDrawFrame(float[] cameraView, float[] cameraProjection, float lightIntensity, VirtualObject obj) {\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay onDrawFrame start.\");\n        mModelMatrixs = obj.getModelAnchorMatrix();\n        Matrix.multiplyMM(mModelViewMatrixs, 0, cameraView, 0, mModelMatrixs, 0);\n        Matrix.multiplyMM(mModelViewProjectionMatrixs, 0, cameraProjection, 0, mModelViewMatrixs, 0);\n        GLES20.glUseProgram(mGlProgram);\n        Matrix.multiplyMV(mViewLightDirections, 0, mModelViewMatrixs, 0, LIGHT_DIRECTIONS, 0);\n        MatrixUtil.normalizeVec3(mViewLightDirections);\n\n        GLES20.glUniform4f(mLightingParametersUniform, mViewLightDirections[0], mViewLightDirections[1],\n            mViewLightDirections[2], lightIntensity);\n\n        // Set the object color property.\n        float mAmbient = 0.5f;\n        float mDiffuse = 1.0f;\n        float mSpecular = 1.0f;\n        float mSpecularPower = 4.0f;\n        GLES20.glUniform4f(mMaterialParametersUniform, mAmbient, mDiffuse, mSpecular, mSpecularPower);\n\n        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextures[0]);\n        GLES20.glUniform1i(mTextureUniform, 0);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVertexBufferId);\n\n        GLES20.glVertexAttribPointer(mPositionAttribute, 3, GLES20.GL_FLOAT, false, 0, 0);\n\n        GLES20.glVertexAttribPointer(mNormalAttribute, 3, GLES20.GL_FLOAT, false, 0, mNormalsBaseAddress);\n\n        GLES20.glVertexAttribPointer(mTexCoordAttribute, 2, GLES20.GL_FLOAT, false, 0, mTexCoordsBaseAddress);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        GLES20.glUniformMatrix4fv(mModelViewUniform, 1, false, mModelViewMatrixs, 0);\n        GLES20.glUniformMatrix4fv(mModelViewProjectionUniform, 1, false, mModelViewProjectionMatrixs, 0);\n        GLES20.glEnableVertexAttribArray(mPositionAttribute);\n        GLES20.glEnableVertexAttribArray(mNormalAttribute);\n        GLES20.glEnableVertexAttribArray(mTexCoordAttribute);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mIndexBufferId);\n        GLES20.glDrawElements(GLES20.GL_TRIANGLES, mIndexCount, GLES20.GL_UNSIGNED_SHORT, 0);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        GLES20.glDisableVertexAttribArray(mPositionAttribute);\n        GLES20.glDisableVertexAttribArray(mNormalAttribute);\n        GLES20.glDisableVertexAttribArray(mTexCoordAttribute);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n        ErrorUtil.checkGLError(TAG, \"ObjectDisplay onDrawFrame end.\");\n    }\n\n    /**\n     * Check whether the virtual object is clicked.\n     *\n     * @param cameraView The viewMatrix 4 * 4.\n     * @param cameraPerspective The ProjectionMatrix 4 * 4.\n     * @param obj The virtual object data.\n     * @param event The gesture event.\n     * @return Return the click result for determining whether the input virtual object is clicked\n     */\n    public boolean hitTest(float[] cameraView, float[] cameraPerspective, VirtualObject obj, MotionEvent event) {\n        mModelMatrixs = obj.getModelAnchorMatrix();\n        Matrix.multiplyMM(mModelViewMatrixs, 0, cameraView, 0, mModelMatrixs, 0);\n        Matrix.multiplyMM(mModelViewProjectionMatrixs, 0, cameraPerspective, 0, mModelViewMatrixs, 0);\n\n        // Calculate the coordinates of the smallest bounding box in the coordinate system of the device screen.\n        float[] screenPos = calculateScreenPos(mBoundingBoxs[0], mBoundingBoxs[1], mBoundingBoxs[2]);\n\n        // Record the largest bounding rectangle of an object (minX/minY/maxX/maxY).\n        float[] boundarys = new float[4];\n        boundarys[0] = screenPos[0];\n        boundarys[1] = screenPos[0];\n        boundarys[2] = screenPos[1];\n        boundarys[3] = screenPos[1];\n\n        // Determine whether a screen position corresponding to (maxX, maxY, maxZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {3, 4, 5});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (minX, minY, maxZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {0, 1, 5});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (minX, maxY, minZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {0, 4, 2});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (minX, maxY, maxZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {0, 4, 5});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (maxX, minY, minZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {3, 1, 2});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (maxX, minY, maxZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {3, 1, 5});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n\n        // Determine whether a screen position corresponding to (maxX, maxY, maxZ) is clicked.\n        boundarys = findMaximum(boundarys, new int[] {3, 4, 2});\n        if (((event.getX() > boundarys[0]) && (event.getX() < boundarys[1])) && ((event.getY() > boundarys[2]) && (\n            event.getY() < boundarys[3]))) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Obtain the AABB bounding box of a virtual object.\n     *\n     * @return AABB bounding box data (minX, minY, minZ, maxX, maxY, maxZ).\n     */\n    public float[] getBoundingBox() {\n        return Arrays.copyOf(mBoundingBoxs, mBoundingBoxs.length);\n    }\n\n    // The size of minXmaxXminYmaxY is 4, and the size of index is 3.\n    private float[] findMaximum(float[] minXmaxXminYmaxY, int[] index) {\n        float[] screenPos = calculateScreenPos(mBoundingBoxs[index[0]], mBoundingBoxs[index[1]],\n            mBoundingBoxs[index[2]]);\n        if (screenPos[0] < minXmaxXminYmaxY[0]) {\n            minXmaxXminYmaxY[0] = screenPos[0];\n        }\n        if (screenPos[0] > minXmaxXminYmaxY[1]) {\n            minXmaxXminYmaxY[1] = screenPos[0];\n        }\n        if (screenPos[1] < minXmaxXminYmaxY[2]) {\n            minXmaxXminYmaxY[2] = screenPos[1];\n        }\n        if (screenPos[1] > minXmaxXminYmaxY[3]) {\n            minXmaxXminYmaxY[3] = screenPos[1];\n        }\n        return minXmaxXminYmaxY;\n    }\n\n    // Convert the input coordinates to the plane coordinate system.\n    private float[] calculateScreenPos(float coordinateX, float coordinateY, float coordinateZ) {\n        // The coordinates of the point are four-dimensional (x, y, z, w).\n        float[] vecs = new float[4];\n        vecs[0] = coordinateX;\n        vecs[1] = coordinateY;\n        vecs[2] = coordinateZ;\n        vecs[3] = 1.0f;\n\n        // Store the coordinate values in the clip coordinate system.\n        float[] rets = new float[4];\n        Matrix.multiplyMV(rets, 0, mModelViewProjectionMatrixs, 0, vecs, 0);\n\n        // Divide by the w component of the coordinates.\n        rets[0] /= rets[3];\n        rets[1] /= rets[3];\n        rets[2] /= rets[3];\n\n        // In the current coordinate system, left is negative, right is positive, downward\n        // is positive, and upward is negative.Adding 1 to the left of the X coordinate is\n        // equivalent to moving the coordinate system leftwards. Such an operation on the Y\n        // axis is equivalent to moving the coordinate system upwards.\n        rets[0] += 1.0f;\n        rets[1] = 1.0f - rets[1];\n\n        // Convert to pixel coordinates.\n        rets[0] *= mWidth;\n        rets[1] *= mHeight;\n\n        // When the w component is set to 1, the xy component caused by coordinate system\n        // movement is eliminated and doubled.\n        rets[3] = 1.0f;\n        rets[0] /= 2.0f;\n        rets[1] /= 2.0f;\n        return rets;\n    }\n\n    // Bounding box [minX, minY, minZ, maxX, maxY, maxZ].\n    private void calculateBoundingBox(FloatBuffer vertices) {\n        if (vertices.limit() < 3) {\n            mBoundingBoxs[0] = 0.0f;\n            mBoundingBoxs[1] = 0.0f;\n            mBoundingBoxs[2] = 0.0f;\n            mBoundingBoxs[3] = 0.0f;\n            mBoundingBoxs[4] = 0.0f;\n            mBoundingBoxs[5] = 0.0f;\n            return;\n        } else {\n            mBoundingBoxs[0] = vertices.get(0);\n            mBoundingBoxs[1] = vertices.get(1);\n            mBoundingBoxs[2] = vertices.get(2);\n            mBoundingBoxs[3] = vertices.get(0);\n            mBoundingBoxs[4] = vertices.get(1);\n            mBoundingBoxs[5] = vertices.get(2);\n        }\n\n        // Use the first three pairs as the initial variables and get the three\n        // maximum values and three minimum values.\n        int index = 3;\n        while (index < vertices.limit() - 2) {\n            if (vertices.get(index) < mBoundingBoxs[0]) {\n                mBoundingBoxs[0] = vertices.get(index);\n            }\n            if (vertices.get(index) > mBoundingBoxs[3]) {\n                mBoundingBoxs[3] = vertices.get(index);\n            }\n            index++;\n\n            if (vertices.get(index) < mBoundingBoxs[1]) {\n                mBoundingBoxs[1] = vertices.get(index);\n            }\n            if (vertices.get(index) > mBoundingBoxs[4]) {\n                mBoundingBoxs[4] = vertices.get(index);\n            }\n            index++;\n\n            if (vertices.get(index) < mBoundingBoxs[2]) {\n                mBoundingBoxs[2] = vertices.get(index);\n            }\n            if (vertices.get(index) > mBoundingBoxs[5]) {\n                mBoundingBoxs[5] = vertices.get(index);\n            }\n            index++;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/PluginCallbackHelper.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport com.huawei.hiar.ARTrackable;\n\nimport java.util.List;\n\npublic interface PluginCallbackHelper {\n    /**\n     * Expose onDrawFrame function to all platforms\n     *\n     * @param arTrackables all trackables\n     */\n    void onDrawFrame(List<ARTrackable> arTrackables);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/PointCloudRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.content.Context;\nimport android.opengl.GLES20;\nimport android.opengl.Matrix;\n\nimport com.huawei.hiar.ARPointCloud;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.WorldShaderUtil;\n\npublic class PointCloudRenderer {\n    private static final String TAG = ARPointCloud.class.getSimpleName();\n\n    private static final int POSITION_COMPONENTS_NUMBERS = 4;\n\n    private static final int BYTES_FLOAT = Float.SIZE / 8;\n\n    private static final int FLOATS_POINT = 4; // X,Y,Z,confidence.\n\n    private static final int BYTES_POINT = BYTES_FLOAT * FLOATS_POINT;\n\n    private static final int INITIAL_BUFFER_POINT_SIZE = 1000;\n\n    private int mProgramName;\n\n    private int mPointBuffer;\n\n    private int mPointBufferSize;\n\n    private int mPositionAttribute;\n\n    private int mViewProjectionUniform;\n\n    private int mPointUniform;\n\n    private int mColorUniform;\n\n    private int mNumPoints = 0;\n\n    private ARPointCloud mPointCloud = null;\n\n    /**\n     * Constructor.\n     */\n    public PointCloudRenderer() {\n    }\n\n    /**\n     * Allocates and initializes OpenGL resources needed by the plane renderer. Must be\n     * called on the OpenGL thread, typically in\n     *\n     * @param context Needed to access shader source.\n     */\n    public void init(Context context) {\n        ErrorUtil.checkGLError(TAG, \"PointCloud before create\");\n\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mPointBuffer = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mPointBuffer);\n\n        mPointBufferSize = INITIAL_BUFFER_POINT_SIZE * BYTES_POINT;\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mPointBufferSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"PointCloud buffer alloc\");\n\n        mProgramName = WorldShaderUtil.getPointCloudProgram();\n        GLES20.glUseProgram(mProgramName);\n\n        ErrorUtil.checkGLError(TAG, \"PointCloud program\");\n\n        mPositionAttribute = GLES20.glGetAttribLocation(mProgramName, \"a_Position\");\n        mColorUniform = GLES20.glGetUniformLocation(mProgramName, \"u_Color\");\n        mViewProjectionUniform = GLES20.glGetUniformLocation(mProgramName, \"u_ModelViewProjection\");\n        mPointUniform = GLES20.glGetUniformLocation(mProgramName, \"u_PointSize\");\n        ErrorUtil.checkGLError(TAG, \"PointCloud program params\");\n    }\n\n    /**\n     * Update point cloud data in buffer and setting up input data in shader program and drawing, when draw the point.\n     *\n     * @param cloud Data types defined by HW(ARPointCloud).\n     * @param cameraView Camera view data.\n     * @param cameraPerspective Camera perspective data.\n     */\n    public void onDrawFrame(ARPointCloud cloud, float[] cameraView, float[] cameraPerspective) {\n        ErrorUtil.checkGLError(TAG, \"PointCloud start update\");\n        if (mPointCloud == cloud) {\n            return;\n        }\n        ErrorUtil.checkGLError(TAG, \"PointCloud before update\");\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mPointBuffer);\n        mPointCloud = cloud;\n\n        mNumPoints = mPointCloud.getPoints().remaining() / FLOATS_POINT;\n        if (mPointBufferSize < mNumPoints * BYTES_POINT) {\n            while (mPointBufferSize < mNumPoints * BYTES_POINT) {\n                mPointBufferSize *= 2; // If vertice VBO size is not big enough ,double it.\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mPointBufferSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mNumPoints * BYTES_POINT, mPointCloud.getPoints());\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"PointCloud end update and before draw\");\n        float[] modelViewProjection = new float[16];\n        Matrix.multiplyMM(modelViewProjection, 0, cameraPerspective, 0, cameraView, 0);\n\n        GLES20.glUseProgram(mProgramName);\n        GLES20.glEnableVertexAttribArray(mPositionAttribute);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mPointBuffer);\n        GLES20.glVertexAttribPointer(mPositionAttribute, POSITION_COMPONENTS_NUMBERS, GLES20.GL_FLOAT, false,\n            BYTES_POINT, 0);\n        GLES20.glUniform4f(mColorUniform, 255.0f / 255.0f, 241.0f / 255.0f, 67.0f / 255.0f, 1.0f);\n        GLES20.glUniformMatrix4fv(mViewProjectionUniform, 1, false, modelViewProjection, 0);\n        GLES20.glUniform1f(mPointUniform, 10.0f); // Set the size of Point to 10.\n\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPositionAttribute);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"PointCloud after draw\");\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/SceneMesh/SceneMeshDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.sceneMesh;\n\nimport static javax.microedition.khronos.opengles.GL10.GL_BLEND;\nimport static javax.microedition.khronos.opengles.GL10.GL_ONE_MINUS_SRC_ALPHA;\nimport static javax.microedition.khronos.opengles.GL10.GL_SRC_ALPHA;\n\nimport android.content.Context;\nimport android.opengl.GLES20;\nimport android.opengl.Matrix;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARSceneMesh;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\nimport com.huawei.hms.plugin.ar.core.util.SceneMeshShaderUtil;\n\nimport java.nio.FloatBuffer;\nimport java.nio.IntBuffer;\n\npublic class SceneMeshDisplay {\n    private static final String TAG = SceneMeshDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_FLOAT = Float.SIZE / 8;\n\n    private static final int FLOATS_PER_POINT = 3;\n\n    private static final int BYTES_PER_POINT = BYTES_PER_FLOAT * FLOATS_PER_POINT;\n\n    private static final int BUFFER_OBJECT_NUMBER = 2;\n\n    private static final int INT_PER_TRIANGE = 3;\n\n    private static final int MODLE_VIEW_PROJ_SIZE = 16;\n\n    private static final int POSITION_COMPONENTS_NUMBER = 4;\n\n    private int mVerticeVBO;\n\n    /**\n     * Initialize the VBO size. The actual size is 7365.\n     */\n    private int mVerticeVBOSize = 8000;\n\n    private int mTriangleVBO;\n\n    /**\n     * Initialize the size of the triangle VBO. The actual size is 4434.\n     */\n    private int mTriangleVBOSize = 5000;\n\n    private int mProgram;\n\n    private int mPositionAttribute;\n\n    private int mColorUniform;\n\n    private int mModelViewProjectionUniform;\n\n    private int mPointSizeUniform;\n\n    private int mPointsNum = 0;\n\n    private int mTrianglesNum = 0;\n\n    private float[] mModelViewProjection = new float[MODLE_VIEW_PROJ_SIZE];\n\n    /**\n     * Scene mesh display constructor.\n     */\n    public SceneMeshDisplay() {\n    }\n\n    public void init(Context context) {\n        int[] buffers = new int[BUFFER_OBJECT_NUMBER];\n        GLES20.glGenBuffers(BUFFER_OBJECT_NUMBER, buffers, 0);\n        mVerticeVBO = buffers[0];\n        mTriangleVBO = buffers[1];\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVerticeVBO);\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVerticeVBOSize * BYTES_PER_POINT, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mTriangleVBO);\n        GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, mTriangleVBOSize * BYTES_PER_FLOAT, null,\n            GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"SceneMesh buffer alloc\");\n\n        mProgram = OpenGLUtil.createGlProgram(SceneMeshShaderUtil.SCENE_MESH_VERTEX,\n            SceneMeshShaderUtil.SCENE_MESH_FRAGMENT);\n        GLES20.glUseProgram(mProgram);\n        ErrorUtil.checkGLError(TAG, \"SceneMesh program\");\n\n        mPositionAttribute = GLES20.glGetAttribLocation(mProgram, \"a_Position\");\n        mColorUniform = GLES20.glGetUniformLocation(mProgram, \"u_Color\");\n        mModelViewProjectionUniform = GLES20.glGetUniformLocation(mProgram, \"u_ModelViewProjection\");\n        mPointSizeUniform = GLES20.glGetUniformLocation(mProgram, \"u_PointSize\");\n        ErrorUtil.checkGLError(TAG, \"SceneMesh program params\");\n    }\n\n    public void onDrawFrame(ARFrame arFrame, float[] viewmtxs, float[] projmtxs) {\n        ARSceneMesh arSceneMesh = arFrame.acquireSceneMesh();\n        updateSceneMeshData(arSceneMesh);\n        arSceneMesh.release();\n        draw(viewmtxs, projmtxs);\n    }\n\n    /**\n     * Update the mesh data in the buffer.\n     *\n     * @param sceneMesh Data structure in the AR mesh scene.\n     */\n    public void updateSceneMeshData(ARSceneMesh sceneMesh) {\n        ErrorUtil.checkGLError(TAG, \"SceneMesh before update\");\n        FloatBuffer meshVertices = sceneMesh.getVertices();\n        mPointsNum = meshVertices.limit() / FLOATS_PER_POINT;\n        Log.d(TAG, \"SceneMesh updateData: Meshsize:\" + mPointsNum + \"position:\" + meshVertices.position() + \" limit:\"\n            + meshVertices.limit() + \" remaining:\" + meshVertices.remaining());\n        Log.d(TAG, \"SceneMesh Vertices = \");\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVerticeVBO);\n        if (mVerticeVBOSize < mPointsNum * BYTES_PER_POINT) {\n            while (mVerticeVBOSize < mPointsNum * BYTES_PER_POINT) {\n                // If the VBO is not large enough in size, double it.\n                mVerticeVBOSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVerticeVBOSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mPointsNum * BYTES_PER_POINT, meshVertices);\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        IntBuffer meshTriangleIndices = sceneMesh.getTriangleIndices();\n        mTrianglesNum = meshTriangleIndices.limit() / INT_PER_TRIANGE;\n        Log.d(TAG,\n            \"SceneMesh updateData: MeshTrianglesize:\" + mTrianglesNum + \"position:\" + meshTriangleIndices.position() + \" limit:\"\n                + meshTriangleIndices.limit() + \" remaining:\" + meshTriangleIndices.remaining());\n\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mTriangleVBO);\n        if (mTriangleVBOSize < mTrianglesNum * BYTES_PER_POINT) {\n            while (mTriangleVBOSize < mTrianglesNum * BYTES_PER_POINT) {\n                // If the triangle VBO is not large enough in size, double it.\n                mTriangleVBOSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, mTriangleVBOSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0, mTrianglesNum * BYTES_PER_POINT, meshTriangleIndices);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"SceneMesh after update\");\n    }\n\n    /**\n     * Set up the input data in the shader program and in the drawing program.\n     *\n     * @param cameraView Camera view data.\n     * @param cameraPerspective Perspective data of the camera.\n     */\n    public void draw(float[] cameraView, float[] cameraPerspective) {\n        ErrorUtil.checkGLError(TAG, \"SceneMesh Before draw\");\n        Log.d(TAG, \"SceneMesh draw: mPointsNum:\" + mPointsNum + \" mTrianglesNum:\" + mTrianglesNum);\n\n        GLES20.glEnable(GLES20.GL_DEPTH_TEST);\n        GLES20.glEnable(GLES20.GL_CULL_FACE);\n        Matrix.multiplyMM(mModelViewProjection, 0, cameraPerspective, 0, cameraView, 0);\n\n        // Drawing point.\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPositionAttribute);\n        GLES20.glEnableVertexAttribArray(mColorUniform);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVerticeVBO);\n        GLES20.glVertexAttribPointer(mPositionAttribute, POSITION_COMPONENTS_NUMBER, GLES20.GL_FLOAT, false,\n            BYTES_PER_POINT, 0);\n        GLES20.glUniform4f(mColorUniform, 1.0f, 0.0f, 0.0f, 1.0f);\n        GLES20.glUniformMatrix4fv(mModelViewProjectionUniform, 1, false, mModelViewProjection, 0);\n\n        // Set the point size to 5.\n        GLES20.glUniform1f(mPointSizeUniform, 5.0f);\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, mPointsNum);\n        GLES20.glDisableVertexAttribArray(mColorUniform);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"SceneMesh Draw point\");\n\n        // Draw a triangle.\n        GLES20.glEnable(GL_BLEND);\n        GLES20.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\n        GLES20.glEnableVertexAttribArray(mColorUniform);\n        GLES20.glUniform4f(mColorUniform, 0.0f, 1.0f, 0.0f, 0.5f);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, mTriangleVBO);\n\n        // Each triangle has three vertices.\n        GLES20.glDrawElements(GLES20.GL_TRIANGLES, mTrianglesNum * 3, GLES20.GL_UNSIGNED_INT, 0);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        GLES20.glDisableVertexAttribArray(mColorUniform);\n        ErrorUtil.checkGLError(TAG, \"SceneMesh Draw triangles\");\n        GLES20.glDisableVertexAttribArray(mPositionAttribute);\n\n        GLES20.glDisable(GLES20.GL_CULL_FACE);\n        GLES20.glDisable(GL_BLEND);\n        ErrorUtil.checkGLError(TAG, \"SceneMesh Draw after\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/SceneMesh/SceneMeshDrawFrameListener.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.sceneMesh;\n\nimport com.huawei.hiar.ARSceneMesh;\n\npublic interface SceneMeshDrawFrameListener {\n    void onDrawFrame(ARSceneMesh arSceneMesh);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/TextureDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.opengl.GLES11Ext;\nimport android.opengl.GLES20;\n\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.MatrixUtil;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.FloatBuffer;\n\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class TextureDisplay {\n    private static final String TAG = TextureDisplay.class.getSimpleName();\n\n    private static final String LS = System.lineSeparator();\n\n    private static final String BASE_FRAGMENT = \"#extension GL_OES_EGL_image_external : require\" + LS\n        + \"precision mediump float;\" + LS + \"varying vec2 textureCoordinate;\" + LS\n        + \"uniform samplerExternalOES vTexture;\" + LS + \"void main() {\" + LS\n        + \"    gl_FragColor = texture2D(vTexture, textureCoordinate );\" + LS + \"}\";\n\n    private static final String BASE_VERTEX = \"attribute vec4 vPosition;\" + LS + \"attribute vec2 vCoord;\" + LS\n        + \"uniform mat4 vMatrix;\" + LS + \"uniform mat4 vCoordMatrix;\" + LS + \"varying vec2 textureCoordinate;\" + LS\n        + \"void main(){\" + LS + \"    gl_Position = vMatrix*vPosition;\" + LS\n        + \"    textureCoordinate = (vCoordMatrix*vec4(vCoord,0,1)).xy;\" + LS + \"}\";\n\n    private static final float[] COORDINATES_OF_VERTEX = {-1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f};\n\n    private static final float[] TEXTURE_COORDINATES = {0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f};\n\n    private static final int MATRIX_SIZE = 16;\n\n    private static final float RGB_CLEAR_VALUE = 0.8157f;\n\n    private int externalTextureId;\n\n    private int program;\n\n    private int position;\n\n    private int coord;\n\n    private int matrix;\n\n    private int texture;\n\n    private int coordMatrix;\n\n    private FloatBuffer verBuffer;\n\n    private FloatBuffer texTransformedBuffer;\n\n    private FloatBuffer texBuffer;\n\n    private float[] projectionMatrix = new float[MATRIX_SIZE];\n\n    private float[] coordMatrixs;\n\n    public TextureDisplay() {\n        coordMatrixs = MatrixUtil.getIdentityMatrix();\n        initBuffers();\n    }\n\n    public void onSurfaceChanged(int width, int height) {\n        MatrixUtil.getProjectionMatrix(projectionMatrix, width, height);\n    }\n\n    public void onDrawFrame(ARFrame arFrame) {\n        ErrorUtil.checkGLError(TAG, \"TextureDisplay On draw frame start..\");\n        if (arFrame == null) {\n            return;\n        }\n\n        if (arFrame.hasDisplayGeometryChanged()) {\n            arFrame.transformDisplayUvCoords(texBuffer, texTransformedBuffer);\n        }\n        clear();\n\n        GLES20.glDisable(GLES20.GL_DEPTH_TEST);\n        GLES20.glDepthMask(false);\n        GLES20.glUseProgram(program);\n\n        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, externalTextureId);\n        GLES20.glUniformMatrix4fv(matrix, 1, false, projectionMatrix, 0);\n        GLES20.glUniformMatrix4fv(coordMatrix, 1, false, coordMatrixs, 0);\n\n        GLES20.glEnableVertexAttribArray(position);\n        GLES20.glVertexAttribPointer(position, 2, GLES20.GL_FLOAT, false, 0, verBuffer);\n\n        GLES20.glEnableVertexAttribArray(coord);\n        GLES20.glVertexAttribPointer(coord, 2, GLES20.GL_FLOAT, false, 0, texTransformedBuffer);\n\n        GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);\n        GLES20.glDisableVertexAttribArray(position);\n        GLES20.glDisableVertexAttribArray(coord);\n\n        GLES20.glDepthMask(true);\n        GLES20.glEnable(GLES20.GL_DEPTH_TEST);\n        ErrorUtil.checkGLError(TAG, \"TextureDisplay On draw frame end..\");\n    }\n\n    public void init() {\n        int[] textures = new int[1];\n        GLES20.glGenTextures(1, textures, 0);\n        externalTextureId = textures[0];\n        generateExternalTexture();\n        createProgram();\n    }\n\n    public void init(int textureId) {\n        externalTextureId = textureId;\n        generateExternalTexture();\n        createProgram();\n    }\n\n    private void generateExternalTexture() {\n        GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, externalTextureId);\n        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);\n        GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);\n        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);\n        GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);\n    }\n\n    public void createProgram() {\n        program = OpenGLUtil.createGlProgram(BASE_VERTEX, BASE_FRAGMENT);\n        position = GLES20.glGetAttribLocation(program, \"vPosition\");\n        coord = GLES20.glGetAttribLocation(program, \"vCoord\");\n        matrix = GLES20.glGetUniformLocation(program, \"vMatrix\");\n        texture = GLES20.glGetUniformLocation(program, \"vTexture\");\n        coordMatrix = GLES20.glGetUniformLocation(program, \"vCoordMatrix\");\n    }\n\n    private void initBuffers() {\n        ByteBuffer byteBufferForVer = ByteBuffer.allocateDirect(32);\n        byteBufferForVer.order(ByteOrder.nativeOrder());\n        verBuffer = byteBufferForVer.asFloatBuffer();\n        verBuffer.put(COORDINATES_OF_VERTEX);\n        verBuffer.position(0);\n\n        ByteBuffer byteBufferForTex = ByteBuffer.allocateDirect(32);\n        byteBufferForTex.order(ByteOrder.nativeOrder());\n        texBuffer = byteBufferForTex.asFloatBuffer();\n        texBuffer.put(TEXTURE_COORDINATES);\n        texBuffer.position(0);\n\n        ByteBuffer byteBufferForTransformedTex = ByteBuffer.allocateDirect(32);\n        byteBufferForTransformedTex.order(ByteOrder.nativeOrder());\n        texTransformedBuffer = byteBufferForTransformedTex.asFloatBuffer();\n    }\n\n    private void clear() {\n        GLES20.glClearColor(RGB_CLEAR_VALUE, RGB_CLEAR_VALUE, RGB_CLEAR_VALUE, 1.0f);\n        GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT);\n    }\n\n    public int getExternalTextureId() {\n        return externalTextureId;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/VirtualObject.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper;\n\nimport android.opengl.Matrix;\n\nimport com.huawei.hiar.ARAnchor;\n\nimport java.util.Arrays;\n\npublic class VirtualObject {\n    private static final float ROTATION_ANGLE = 315.0f;\n\n    private static final int MATRIX_SIZE = 16;\n\n    private static final int COLOR_SIZE = 4;\n\n    private static final float SCALE_FACTOR = 0.15f;\n\n    private ARAnchor mArAnchor;\n\n    private float[] mObjectColors = new float[COLOR_SIZE];\n\n    private float[] mModelMatrix = new float[MATRIX_SIZE];\n\n    private boolean mIsSelectedFlag = false;\n\n    /**\n     * The constructor initializes the pose of the virtual object in a space and the\n     * color of the virtual object with the input anchor point and color parameters.\n     *\n     * @param arAnchor Data provided by AR Engine, describing the pose.\n     * @param color4f Color data in an array with a length of 4.\n     */\n    public VirtualObject(ARAnchor arAnchor, float[] color4f) {\n        mObjectColors = Arrays.copyOf(color4f, color4f.length);\n        mArAnchor = arAnchor;\n        init();\n    }\n\n    @Override\n    protected void finalize() throws Throwable {\n        // If the anchor object is destroyed, call the detach() method to instruct\n        // the AR Engine to stop tracking the anchor.\n        if (mArAnchor != null) {\n            mArAnchor.detach();\n        }\n        super.finalize();\n    }\n\n    private void init() {\n        // Set a scaling matrix, in which the elements of the principal diagonal is the scaling coefficient.\n        Matrix.setIdentityM(mModelMatrix, 0);\n        mModelMatrix[0] = SCALE_FACTOR;\n        mModelMatrix[5] = SCALE_FACTOR;\n        mModelMatrix[10] = SCALE_FACTOR;\n\n        // Rotate the camera along the Y axis by a certain angle.\n        Matrix.rotateM(mModelMatrix, 0, ROTATION_ANGLE, 0f, 1f, 0f);\n    }\n\n    /**\n     * Update the anchor information in the virtual object corresponding to the class.\n     *\n     * @param arAnchor Data provided by AR Engine, describing the pose.\n     */\n    public void setAnchor(ARAnchor arAnchor) {\n        if (mArAnchor != null) {\n            mArAnchor.detach();\n        }\n        mArAnchor = arAnchor;\n    }\n\n    /**\n     * Obtain the anchor information of a virtual object corresponding to the class.\n     *\n     * @return ARAnchor(provided by AREngine)\n     */\n    public ARAnchor getAnchor() {\n        return mArAnchor;\n    }\n\n    /**\n     * Obtain the anchor information of a virtual object corresponding to the class.\n     *\n     * @return Color of the virtual object, returned in an array with a length of 4.\n     */\n    public float[] getColor() {\n        float[] rets = new float[4];\n        if (mIsSelectedFlag) {\n            rets[0] = 255.0f - mObjectColors[0];\n            rets[1] = 255.0f - mObjectColors[1];\n            rets[2] = 255.0f - mObjectColors[2];\n            rets[3] = mObjectColors[3];\n            return rets;\n        } else {\n            rets = Arrays.copyOf(mObjectColors, mObjectColors.length);\n            return rets;\n        }\n    }\n\n    /**\n     * Set the color of the current virtual object.\n     *\n     * @param color Color data in an array with a length of 4.\n     */\n    public void setColor(float[] color) {\n        if (color != null && color.length == COLOR_SIZE) {\n            mObjectColors = Arrays.copyOf(color, color.length);\n        }\n    }\n\n    /**\n     * Obtain the anchor matrix data of the current virtual object.\n     *\n     * @return Anchor matrix data of the current virtual object.\n     */\n    public float[] getModelAnchorMatrix() {\n        float[] modelMatrix = new float[MATRIX_SIZE];\n        if (mArAnchor != null) {\n            mArAnchor.getPose().toMatrix(modelMatrix, 0);\n        } else {\n            Matrix.setIdentityM(modelMatrix, 0);\n        }\n        float[] rets = new float[MATRIX_SIZE];\n        Matrix.multiplyMM(rets, 0, modelMatrix, 0, mModelMatrix, 0);\n        return rets;\n    }\n\n    /**\n     * Determine whether the current virtual object is in a selected state.\n     *\n     * @return Check whether the object is selected.\n     */\n    public boolean getIsSelectedFlag() {\n        return mIsSelectedFlag;\n    }\n\n    /**\n     * Set the selection status of the current object by passing true or false,\n     * where true indicates that the object is selected, and false indicates not.\n     *\n     * @param isSelected Whether the selection is successful.\n     */\n    public void setIsSelected(boolean isSelected) {\n        mIsSelectedFlag = isSelected;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/body/BodySkeletonDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.body;\n\nimport android.opengl.GLES20;\n\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.BodyShaderUtil;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARCoordinateSystemType;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.FloatBuffer;\nimport java.util.Collection;\n\npublic class BodySkeletonDisplay {\n    private static final String TAG = BodySkeletonDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int INITIAL_POINTS_SIZE = 150;\n\n    private static final float DRAW_COORDINATE = 2.0f;\n\n    private int mVbo;\n\n    private int mVboSize;\n\n    private int mProgram;\n\n    private int mPosition;\n\n    private int mProjectionMatrix;\n\n    private int mColor;\n\n    private int mPointSize;\n\n    private int mCoordinateSystem;\n\n    private int mNumPoints = 0;\n\n    private int mPointsNum = 0;\n\n    private FloatBuffer mSkeletonPoints;\n\n    private ColorRGBA pointColor;\n\n    private float pointSize;\n\n    public BodySkeletonDisplay(ColorRGBA pointColor, float pointSize) {\n        this.pointColor = pointColor;\n        this.pointSize = pointSize;\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"BodySkeleton Create gl program start.\");\n        mProgram = OpenGLUtil.createGlProgram(BodyShaderUtil.BODY_VERTEX, BodyShaderUtil.BODY_FRAGMENT);\n        mColor = GLES20.glGetUniformLocation(mProgram, \"inColor\");\n        mPosition = GLES20.glGetAttribLocation(mProgram, \"inPosition\");\n        mPointSize = GLES20.glGetUniformLocation(mProgram, \"inPointSize\");\n        mProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inProjectionMatrix\");\n        mCoordinateSystem = GLES20.glGetUniformLocation(mProgram, \"inCoordinateSystem\");\n        ErrorUtil.checkGLError(TAG, \"BodySkeleton Create gl program end.\");\n    }\n\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"BodySkeleton Init start.\");\n\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mVboSize = INITIAL_POINTS_SIZE * BYTES_PER_POINT;\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"BodySkeleton Before create gl program.\");\n        createProgram();\n        ErrorUtil.checkGLError(TAG, \"BodySkeleton Init end.\");\n    }\n\n    private void updateBodySkeleton() {\n        ErrorUtil.checkGLError(TAG, \"Update Body Skeleton data start.\");\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mNumPoints = mPointsNum;\n\n        if (mVboSize < mNumPoints * BYTES_PER_POINT) {\n            while (mVboSize < mNumPoints * BYTES_PER_POINT) {\n                mVboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mNumPoints * BYTES_PER_POINT, mSkeletonPoints);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Update Body Skeleton data end.\");\n    }\n\n    public void onDrawFrame(Collection<ARBody> bodies, float[] projectionMatrix) {\n        for (ARBody body : bodies) {\n            if (body.getTrackingState() == ARTrackable.TrackingState.TRACKING) {\n                float coordinate = 1.0f;\n                if (body.getCoordinateSystemType() == ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_CAMERA) {\n                    coordinate = DRAW_COORDINATE;\n                }\n                findValidSkeletonPoints(body);\n                updateBodySkeleton();\n                drawBodySkeleton(coordinate, projectionMatrix);\n            }\n        }\n    }\n\n    private void drawBodySkeleton(float coordinate, float[] projectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"Draw body skeleton start.\");\n\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        GLES20.glVertexAttribPointer(mPosition, 4, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n        GLES20.glUniform4f(mColor, pointColor.red, pointColor.green, pointColor.blue, pointColor.alpha);\n        GLES20.glUniformMatrix4fv(mProjectionMatrix, 1, false, projectionMatrix, 0);\n\n        GLES20.glUniform1f(mPointSize, pointSize);\n        GLES20.glUniform1f(mCoordinateSystem, coordinate);\n\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Draw body skeleton end.\");\n    }\n\n    private void findValidSkeletonPoints(ARBody arBody) {\n        int index = 0;\n        int[] isExists;\n        int validPointNum = 0;\n        float[] points;\n        float[] skeletonPoints;\n\n        if (arBody.getCoordinateSystemType() == ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_CAMERA) {\n            isExists = arBody.getSkeletonPointIsExist3D();\n            points = new float[isExists.length * 3];\n            skeletonPoints = arBody.getSkeletonPoint3D();\n        } else {\n            isExists = arBody.getSkeletonPointIsExist2D();\n            points = new float[isExists.length * 3];\n            skeletonPoints = arBody.getSkeletonPoint2D();\n        }\n\n        for (int i = 0; i < isExists.length; i++) {\n            if (isExists[i] != 0) {\n                points[index++] = skeletonPoints[3 * i];\n                points[index++] = skeletonPoints[3 * i + 1];\n                points[index++] = skeletonPoints[3 * i + 2];\n                validPointNum++;\n            }\n        }\n        mSkeletonPoints = FloatBuffer.wrap(points);\n        mPointsNum = validPointNum;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/body/BodySkeletonLineDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.body;\n\nimport android.opengl.GLES20;\n\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.BodyShaderUtil;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARCoordinateSystemType;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.FloatBuffer;\nimport java.util.Collection;\n\npublic class BodySkeletonLineDisplay {\n    private static final String TAG = BodySkeletonLineDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int INITIAL_BUFFER_POINTS = 150;\n\n    private static final float COORDINATE_SYSTEM_TYPE_3D_FLAG = 2.0f;\n\n    private static final int LINE_POINT_RATIO = 6;\n\n    private int mVbo;\n\n    private int mVboSize = INITIAL_BUFFER_POINTS * BYTES_PER_POINT;\n\n    private int mProgram;\n\n    private int mPosition;\n\n    private int mProjectionMatrix;\n\n    private int mColor;\n\n    private int mPointSize;\n\n    private int mCoordinateSystem;\n\n    private int mNumPoints = 0;\n\n    private int mPointsLineNum = 0;\n\n    private FloatBuffer mLinePoints;\n\n    private ColorRGBA lineColor;\n\n    private float lineWidth;\n\n    public BodySkeletonLineDisplay(ColorRGBA lineColor, float lineWidth) {\n        this.lineColor = lineColor;\n        this.lineWidth = lineWidth;\n    }\n\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Init start.\");\n\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Before create gl program.\");\n        createProgram();\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Create gl program start.\");\n        mProgram = OpenGLUtil.createGlProgram(BodyShaderUtil.BODY_VERTEX, BodyShaderUtil.BODY_FRAGMENT);\n        mPosition = GLES20.glGetAttribLocation(mProgram, \"inPosition\");\n        mColor = GLES20.glGetUniformLocation(mProgram, \"inColor\");\n        mPointSize = GLES20.glGetUniformLocation(mProgram, \"inPointSize\");\n        mProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inProjectionMatrix\");\n        mCoordinateSystem = GLES20.glGetUniformLocation(mProgram, \"inCoordinateSystem\");\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Create gl program end.\");\n    }\n\n    private void drawSkeletonLine(float coordinate, float[] projectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Draw skeleton line start.\");\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glEnableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        GLES20.glLineWidth(lineWidth);\n\n        GLES20.glVertexAttribPointer(mPosition, 4, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n        GLES20.glUniform4f(mColor, lineColor.red, lineColor.green, lineColor.blue, lineColor.alpha);\n        GLES20.glUniformMatrix4fv(mProjectionMatrix, 1, false, projectionMatrix, 0);\n\n        GLES20.glUniform1f(mPointSize, 100.0f);\n        GLES20.glUniform1f(mCoordinateSystem, coordinate);\n\n        GLES20.glDrawArrays(GLES20.GL_LINES, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glDisableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"BodySkeletonLine Draw skeleton line end.\");\n    }\n\n    public void onDrawFrame(Collection<ARBody> bodies, float[] projectionMatrix) {\n        for (ARBody body : bodies) {\n            if (body.getTrackingState() == ARTrackable.TrackingState.TRACKING) {\n                float coordinate = 1.0f;\n                if (body.getCoordinateSystemType() == ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_CAMERA) {\n                    coordinate = COORDINATE_SYSTEM_TYPE_3D_FLAG;\n                }\n                updateBodySkeletonLineData(body);\n                drawSkeletonLine(coordinate, projectionMatrix);\n            }\n        }\n    }\n\n    private void updateBodySkeletonLineData(ARBody body) {\n        findValidConnectionSkeletonLines(body);\n        ErrorUtil.checkGLError(TAG, \"Update body skeleton line data start.\");\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mNumPoints = mPointsLineNum;\n        if (mVboSize < mNumPoints * BYTES_PER_POINT) {\n            while (mVboSize < mNumPoints * BYTES_PER_POINT) {\n                // If the storage space is insufficient, allocate double the space.\n                mVboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mNumPoints * BYTES_PER_POINT, mLinePoints);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"Update body skeleton line data end.\");\n    }\n\n    private void findValidConnectionSkeletonLines(ARBody arBody) {\n        mPointsLineNum = 0;\n        int[] connections = arBody.getBodySkeletonConnection();\n        float[] linePoints = new float[LINE_POINT_RATIO * connections.length];\n        float[] coors;\n        int[] isExists;\n\n        if (arBody.getCoordinateSystemType() == ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_CAMERA) {\n            coors = arBody.getSkeletonPoint3D();\n            isExists = arBody.getSkeletonPointIsExist3D();\n        } else {\n            coors = arBody.getSkeletonPoint2D();\n            isExists = arBody.getSkeletonPointIsExist2D();\n        }\n\n        // Filter out valid skeleton connection lines based on the returned results,\n        // which consist of indexes of two ends, for example, [p0,p1;p0,p3;p0,p5;p1,p2].\n        // The loop takes out the 3D coordinates of the end points of the valid connection\n        // line and saves them in sequence.\n        for (int j = 0; j < connections.length; j += 2) {\n            if (isExists[connections[j]] != 0 && isExists[connections[j + 1]] != 0) {\n                linePoints[mPointsLineNum * 3] = coors[3 * connections[j]];\n                linePoints[mPointsLineNum * 3 + 1] = coors[3 * connections[j] + 1];\n                linePoints[mPointsLineNum * 3 + 2] = coors[3 * connections[j] + 2];\n                linePoints[mPointsLineNum * 3 + 3] = coors[3 * connections[j + 1]];\n                linePoints[mPointsLineNum * 3 + 4] = coors[3 * connections[j + 1] + 1];\n                linePoints[mPointsLineNum * 3 + 5] = coors[3 * connections[j + 1] + 2];\n                mPointsLineNum += 2;\n            }\n        }\n        mLinePoints = FloatBuffer.wrap(linePoints);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/face/FaceGeometryDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.face;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.opengl.GLES20;\nimport android.opengl.GLUtils;\nimport android.opengl.Matrix;\nimport android.util.Log;\n\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigFace;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFace;\nimport com.huawei.hiar.ARFaceGeometry;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.FloatBuffer;\nimport java.nio.IntBuffer;\n\npublic class FaceGeometryDisplay {\n    private static final String TAG = FaceGeometryDisplay.class.getSimpleName();\n\n    private static final String LS = System.lineSeparator();\n\n    private static final String FACE_GEOMETRY_VERTEX = \"attribute vec2 inTexCoord;\" + LS + \"uniform mat4 inMVPMatrix;\"\n        + LS + \"uniform float inPointSize;\" + LS + \"attribute vec4 inPosition;\" + LS + \"uniform vec4 inColor;\" + LS\n        + \"varying vec4 varAmbient;\" + LS + \"varying vec4 varColor;\" + LS + \"varying vec2 varCoord;\" + LS\n        + \"void main() {\" + LS + \"    varAmbient = vec4(1.0, 1.0, 1.0, 1.0);\" + LS\n        + \"    gl_Position = inMVPMatrix * vec4(inPosition.xyz, 1.0);\" + LS + \"    varColor = inColor;\" + LS\n        + \"    gl_PointSize = inPointSize;\" + LS + \"    varCoord = inTexCoord;\" + LS + \"}\";\n\n    private static final String FACE_GEOMETRY_FRAGMENT = \"precision mediump float;\" + LS\n        + \"uniform sampler2D inTexture;\" + LS + \"varying vec4 varColor;\" + LS + \"varying vec2 varCoord;\" + LS\n        + \"varying vec4 varAmbient;\" + LS + \"void main() {\" + LS\n        + \"    vec4 objectColor = texture2D(inTexture, vec2(varCoord.x, 1.0 - varCoord.y));\" + LS\n        + \"    if(varColor.x != 0.0) {\" + LS + \"        gl_FragColor = varColor * varAmbient;\" + LS + \"    }\" + LS\n        + \"    else {\" + LS + \"        gl_FragColor = objectColor * varAmbient;\" + LS + \"    }\" + LS + \"}\";\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int BYTES_PER_COORD = 4 * 2;\n\n    private static final int BUFFER_OBJECT_NUMBER = 2;\n\n    private static final int POSITION_COMPONENTS_NUMBER = 4;\n\n    private static final int TEXCOORD_COMPONENTS_NUMBER = 2;\n\n    private static final float PROJECTION_MATRIX_NEAR = 0.1f;\n\n    private static final float PROJECTION_MATRIX_FAR = 100.0f;\n\n    private int verticeId;\n\n    private int verticeBufferSize = 8000;\n\n    private int triangleId;\n\n    private int triangleBufferSize = 5000;\n\n    private int program;\n\n    private int textureName;\n\n    private int positionAttribute;\n\n    private int colorUniform;\n\n    private int modelViewProjectionUniform;\n\n    private int pointSizeUniform;\n\n    private int textureUniform;\n\n    private int textureCoordAttribute;\n\n    private int numberOfGeometricVertices = 0;\n\n    private int trianglesNum = 0;\n\n    private float[] modelViewProjections = new float[16];\n\n    private ARPluginConfigFace configBase = new ARPluginConfigFace();\n\n    public FaceGeometryDisplay(Context context, ARPluginConfigBase pluginConfigBase) {\n        if (pluginConfigBase instanceof ARPluginConfigFace) {\n            this.configBase = (ARPluginConfigFace) pluginConfigBase;\n        }\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry init start..\");\n        int[] texNames = new int[1];\n        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);\n        GLES20.glGenTextures(1, texNames, 0);\n        this.textureName = texNames[0];\n\n        int[] buffers = new int[BUFFER_OBJECT_NUMBER];\n        GLES20.glGenBuffers(BUFFER_OBJECT_NUMBER, buffers, 0);\n        verticeId = buffers[0];\n        triangleId = buffers[1];\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, verticeId);\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, verticeBufferSize * BYTES_PER_POINT, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, triangleId);\n\n        GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, triangleBufferSize * 4, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureName);\n\n        createProgram();\n        Bitmap textureBitmap;\n        try (InputStream inputStream = context.getAssets().open(configBase.getTexturePath())) {\n            textureBitmap = BitmapFactory.decodeStream(inputStream);\n        } catch (IllegalArgumentException | IOException e) {\n            Log.e(TAG, \"FaceGeometry Open bitmap error!\");\n            return;\n        }\n\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);\n        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);\n        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, textureBitmap, 0);\n        GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Create gl program start..\");\n        program = OpenGLUtil.createGlProgram(FACE_GEOMETRY_VERTEX, FACE_GEOMETRY_FRAGMENT);\n        ;\n        positionAttribute = GLES20.glGetAttribLocation(program, \"inPosition\");\n        colorUniform = GLES20.glGetUniformLocation(program, \"inColor\");\n        modelViewProjectionUniform = GLES20.glGetUniformLocation(program, \"inMVPMatrix\");\n        pointSizeUniform = GLES20.glGetUniformLocation(program, \"inPointSize\");\n        textureUniform = GLES20.glGetUniformLocation(program, \"inTexture\");\n\n        textureCoordAttribute = GLES20.glGetAttribLocation(program, \"inTexCoord\");\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Create gl program end..\");\n    }\n\n    public void onDrawFrame(ARCamera arCamera, ARFace arFace) {\n        ARFaceGeometry faceGeometry = arFace.getFaceGeometry();\n        updateFaceGeometryData(faceGeometry);\n        updateModelViewProjectionData(arCamera, arFace);\n        drawFaceGeometry();\n        faceGeometry.release();\n    }\n\n    private void updateFaceGeometryData(ARFaceGeometry arFaceGeometry) {\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Before update data..\");\n        FloatBuffer faceVertices = arFaceGeometry.getVertices();\n\n        numberOfGeometricVertices = faceVertices.limit() / 3;\n\n        FloatBuffer textureCoordinates = arFaceGeometry.getTextureCoordinates();\n        int numOfGeoTextures = textureCoordinates.limit() / 2;\n        Log.d(TAG, \"updateFaceGeometryData: texture coordinates size: \" + numOfGeoTextures);\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, verticeId);\n        if (verticeBufferSize < (numberOfGeometricVertices + numOfGeoTextures) * BYTES_PER_POINT) {\n            while (verticeBufferSize < (numberOfGeometricVertices + numOfGeoTextures) * BYTES_PER_POINT) {\n                verticeBufferSize *= 2;\n            }\n\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, verticeBufferSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, numberOfGeometricVertices * BYTES_PER_POINT, faceVertices);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, numberOfGeometricVertices * BYTES_PER_POINT,\n            numOfGeoTextures * BYTES_PER_COORD, textureCoordinates);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        trianglesNum = arFaceGeometry.getTriangleCount();\n        IntBuffer faceTriangleIndices = arFaceGeometry.getTriangleIndices();\n        Log.d(TAG, \"update face geometry data: faceTriangleIndices.size: \" + faceTriangleIndices.limit());\n\n        IntBuffer faceTriangleLabels = arFaceGeometry.getTriangleLabels();\n        Log.d(TAG, \"update face geometry data: faceTriangleLabels.size: \" + faceTriangleLabels.limit());\n\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, triangleId);\n        if (triangleBufferSize < trianglesNum * BYTES_PER_POINT) {\n            while (triangleBufferSize < trianglesNum * BYTES_PER_POINT) {\n                triangleBufferSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, triangleBufferSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        GLES20.glBufferSubData(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0, trianglesNum * BYTES_PER_POINT, faceTriangleIndices);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry After update data..\");\n    }\n\n    private void updateModelViewProjectionData(ARCamera camera, ARFace face) {\n        float[] projectionMatrix = new float[16];\n        camera.getProjectionMatrix(projectionMatrix, 0, PROJECTION_MATRIX_NEAR, PROJECTION_MATRIX_FAR);\n        ARPose facePose = face.getPose();\n\n        float[] facePoseViewMatrix = new float[16];\n        facePose.toMatrix(facePoseViewMatrix, 0);\n        Matrix.multiplyMM(modelViewProjections, 0, projectionMatrix, 0, facePoseViewMatrix, 0);\n    }\n\n    private void drawFaceGeometry() {\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Before draw.\");\n        Log.d(TAG, \"Draw face geometry: mPointsNum: \" + numberOfGeometricVertices + \" mTrianglesNum: \" + trianglesNum);\n\n        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureName);\n        GLES20.glUniform1i(textureUniform, 0);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Init texture.\");\n\n        GLES20.glEnable(GLES20.GL_DEPTH_TEST);\n        GLES20.glEnable(GLES20.GL_CULL_FACE);\n\n        GLES20.glUseProgram(program);\n        GLES20.glEnableVertexAttribArray(positionAttribute);\n        GLES20.glEnableVertexAttribArray(textureCoordAttribute);\n        GLES20.glEnableVertexAttribArray(colorUniform);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, verticeId);\n        GLES20.glVertexAttribPointer(positionAttribute, POSITION_COMPONENTS_NUMBER, GLES20.GL_FLOAT, false,\n            BYTES_PER_POINT, 0);\n        GLES20.glVertexAttribPointer(textureCoordAttribute, TEXCOORD_COMPONENTS_NUMBER, GLES20.GL_FLOAT, false,\n            BYTES_PER_COORD, 0);\n\n        if (configBase.getTexturePath().isEmpty()) {\n            ColorRGBA depthColor = configBase.getDepthColor();\n            GLES20.glUniform4f(colorUniform, depthColor.red > 0 ? depthColor.red : 0.0001f, depthColor.green,\n                depthColor.blue, depthColor.alpha);\n        }\n\n        GLES20.glUniformMatrix4fv(modelViewProjectionUniform, 1, false, modelViewProjections, 0);\n        GLES20.glUniform1f(pointSizeUniform, configBase.getPointSize()); // Set the size of Point to 5.\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, numberOfGeometricVertices);\n        GLES20.glDisableVertexAttribArray(colorUniform);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Draw point.\");\n\n        GLES20.glEnableVertexAttribArray(colorUniform);\n\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, triangleId);\n\n        GLES20.glDrawElements(GLES20.GL_TRIANGLES, trianglesNum * 3, GLES20.GL_UNSIGNED_INT, 0);\n        GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);\n        GLES20.glDisableVertexAttribArray(colorUniform);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Draw triangles.\");\n\n        GLES20.glDisableVertexAttribArray(textureCoordAttribute);\n        GLES20.glDisableVertexAttribArray(positionAttribute);\n        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);\n\n        GLES20.glDisable(GLES20.GL_DEPTH_TEST);\n        GLES20.glDisable(GLES20.GL_CULL_FACE);\n        ErrorUtil.checkGLError(TAG, \"FaceGeometry Draw after.\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/face/FaceHealtyResult.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.face;\n\npublic interface FaceHealtyResult {\n    void handleResult(String test);\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/hand/HandBoxDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.hand;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.HandShaderUtil;\nimport com.huawei.hms.plugin.ar.core.util.MatrixUtil;\n\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.FloatBuffer;\nimport java.util.Arrays;\nimport java.util.Collection;\n\npublic class HandBoxDisplay {\n    private static final String TAG = HandBoxDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int INITIAL_BUFFER_POINTS = 150;\n\n    private static final int COORDINATE_DIMENSION = 3;\n\n    private int vbo;\n\n    private int vboSize = INITIAL_BUFFER_POINTS * BYTES_PER_POINT;\n\n    private int program;\n\n    private int position;\n\n    private int color;\n\n    private int modelViewProjectionMatrix;\n\n    private int pointSize;\n\n    private int numPoints = 0;\n\n    private float[] mvpMatrix;\n\n    private ARPluginConfigHand configHand = new ARPluginConfigHand();\n\n    public HandBoxDisplay(ARPluginConfigBase arPluginConfigHand) {\n        if (arPluginConfigHand instanceof ARPluginConfigHand) {\n            this.configHand = (ARPluginConfigHand) arPluginConfigHand;\n        }\n    }\n\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"HandBox Init start.\");\n        mvpMatrix = MatrixUtil.getIdentityMatrix();\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        vbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo);\n\n        createProgram();\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"HandBox Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"HandBox Create program start.\");\n        program = OpenGLUtil.createGlProgram(HandShaderUtil.HAND_VERTEX, HandShaderUtil.HAND_FRAGMENT);\n        position = GLES20.glGetAttribLocation(program, \"inPosition\");\n        color = GLES20.glGetUniformLocation(program, \"inColor\");\n        pointSize = GLES20.glGetUniformLocation(program, \"inPointSize\");\n        modelViewProjectionMatrix = GLES20.glGetUniformLocation(program, \"inMVPMatrix\");\n        ErrorUtil.checkGLError(TAG, \"HandBox Create program start.\");\n    }\n\n    public void onDrawFrame(Collection<ARHand> arHandCollection, float[] projectionMatrix) {\n        if (arHandCollection.size() == 0) {\n            return;\n        }\n        if (projectionMatrix != null) {\n            Log.d(TAG, \"HandBox Camera projection matrix: \" + Arrays.toString(projectionMatrix));\n        }\n\n        for (ARHand hand : arHandCollection) {\n            if (hand.getTrackingState() == ARTrackable.TrackingState.TRACKING) {\n                updateHandBoundingBoxCoordinates(hand.getGestureHandBox());\n                renderHandBoundingBox();\n            }\n        }\n    }\n\n    private void updateHandBoundingBoxCoordinates(float[] gesturePoints) {\n        ErrorUtil.checkGLError(TAG, \"HandBox Update hand box data start.\");\n        float[] glGesturePoints = {\n            gesturePoints[0], gesturePoints[1], gesturePoints[2], gesturePoints[3], gesturePoints[1], gesturePoints[2],\n            gesturePoints[3], gesturePoints[4], gesturePoints[5], gesturePoints[0], gesturePoints[4], gesturePoints[5],\n        };\n        int gesturePointsNum = glGesturePoints.length / COORDINATE_DIMENSION;\n\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo);\n\n        numPoints = gesturePointsNum;\n        if (vboSize < numPoints * BYTES_PER_POINT) {\n            while (vboSize < numPoints * BYTES_PER_POINT) {\n                vboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        Log.d(TAG, \"HandBox gesture.getGestureHandPointsNum()\" + numPoints);\n        FloatBuffer mVertices = FloatBuffer.wrap(glGesturePoints);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, numPoints * BYTES_PER_POINT, mVertices);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"Update hand box data end.\");\n    }\n\n    private void renderHandBoundingBox() {\n        ErrorUtil.checkGLError(TAG, \"Draw hand box start.\");\n        GLES20.glUseProgram(program);\n        GLES20.glEnableVertexAttribArray(position);\n        GLES20.glEnableVertexAttribArray(color);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo);\n        GLES20.glVertexAttribPointer(position, COORDINATE_DIMENSION, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n        ColorRGBA boxColor = configHand.getBoxColor();\n        GLES20.glUniform4f(color, boxColor.red, boxColor.green, boxColor.blue, boxColor.alpha);\n        GLES20.glUniformMatrix4fv(modelViewProjectionMatrix, 1, false, mvpMatrix, 0);\n        GLES20.glUniform1f(pointSize, 50.0f);\n\n        GLES20.glLineWidth(configHand.getLineWidth());\n        GLES20.glDrawArrays(GLES20.GL_LINE_LOOP, 0, numPoints);\n        GLES20.glDisableVertexAttribArray(position);\n        GLES20.glDisableVertexAttribArray(color);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Draw hand box end.\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/hand/HandSkeletonDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.hand;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.HandShaderUtil;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.FloatBuffer;\nimport java.util.Collection;\n\npublic class HandSkeletonDisplay {\n    private static final String TAG = HandSkeletonDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int INITIAL_POINTS_SIZE = 150;\n\n    private int mVbo;\n\n    private int mVboSize;\n\n    private int mProgram;\n\n    private int mPosition;\n\n    private int mModelViewProjectionMatrix;\n\n    private int mColor;\n\n    private int mPointSize;\n\n    private int mNumPoints = 0;\n\n    private ARPluginConfigHand configBase = new ARPluginConfigHand();\n\n    public HandSkeletonDisplay(ARPluginConfigBase configBase) {\n        if (configBase instanceof ARPluginConfigHand) {\n            this.configBase = (ARPluginConfigHand) configBase;\n        }\n    }\n\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"HandSkeleton Init start.\");\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mVboSize = INITIAL_POINTS_SIZE * BYTES_PER_POINT;\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        createProgram();\n        ErrorUtil.checkGLError(TAG, \"HandSkeleton Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"HandSkeleton Create program start.\");\n        mProgram = OpenGLUtil.createGlProgram(HandShaderUtil.HAND_VERTEX, HandShaderUtil.HAND_FRAGMENT);\n        ErrorUtil.checkGLError(TAG, \"HandSkeleton program\");\n        mPosition = GLES20.glGetAttribLocation(mProgram, \"inPosition\");\n        mColor = GLES20.glGetUniformLocation(mProgram, \"inColor\");\n        mPointSize = GLES20.glGetUniformLocation(mProgram, \"inPointSize\");\n        mModelViewProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inMVPMatrix\");\n        ErrorUtil.checkGLError(TAG, \"HandSkeleton Create program end.\");\n    }\n\n    public void onDrawFrame(Collection<ARHand> hands, float[] projectionMatrix) {\n        // Verify external input. If the hand data is empty, the projection matrix is empty,\n        // or the projection matrix is not 4 x 4, rendering is not performed.\n        if (hands.isEmpty() || projectionMatrix == null || projectionMatrix.length != 16) {\n            Log.e(TAG, \"onDrawFrame Illegal external input!\");\n            return;\n        }\n        for (ARHand hand : hands) {\n            float[] handSkeletons = hand.getHandskeletonArray();\n            if (handSkeletons.length == 0) {\n                continue;\n            }\n            updateHandSkeletonsData(handSkeletons);\n            drawHandSkeletons(projectionMatrix);\n        }\n    }\n\n    /**\n     * Update the coordinates of hand skeleton points.\n     *\n     * @param handSkeletons hand skeletons data.\n     */\n    private void updateHandSkeletonsData(float[] handSkeletons) {\n        ErrorUtil.checkGLError(TAG, \"Update hand skeletons data start.\");\n\n        // Each point has a 3D coordinate. The total number of coordinates\n        // is three times the number of skeleton points.\n        int mPointsNum = handSkeletons.length / 3;\n        Log.d(TAG, \"ARHand HandSkeletonNumber = \" + mPointsNum);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mNumPoints = mPointsNum;\n        if (mVboSize < mNumPoints * BYTES_PER_POINT) {\n            while (mVboSize < mNumPoints * BYTES_PER_POINT) {\n                // If the size of VBO is insufficient to accommodate the new point cloud, resize the VBO.\n                mVboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        FloatBuffer mSkeletonPoints = FloatBuffer.wrap(handSkeletons);\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mNumPoints * BYTES_PER_POINT, mSkeletonPoints);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Update hand skeletons data end.\");\n    }\n\n    /**\n     * Draw hand skeleton points.\n     *\n     * @param projectionMatrix Projection matrix.\n     */\n    private void drawHandSkeletons(float[] projectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"Draw hand skeletons start.\");\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        // The size of the vertex attribute is 4, and each vertex has four coordinate components\n        GLES20.glVertexAttribPointer(mPosition, 4, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n\n        ColorRGBA pointColor = configBase.getPointColor();\n        GLES20.glUniform4f(mColor, pointColor.red, pointColor.green, pointColor.blue, pointColor.alpha);\n        GLES20.glUniformMatrix4fv(mModelViewProjectionMatrix, 1, false, projectionMatrix, 0);\n\n        // Set the size of the skeleton points.\n        GLES20.glUniform1f(mPointSize, configBase.getPointSize());\n\n        GLES20.glDrawArrays(GLES20.GL_POINTS, 0, mNumPoints);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Draw hand skeletons end.\");\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/helper/hand/HandSkeletonLineDisplay.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.helper.hand;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.util.ErrorUtil;\nimport com.huawei.hms.plugin.ar.core.util.HandShaderUtil;\nimport com.huawei.hms.plugin.ar.core.util.OpenGLUtil;\n\nimport java.nio.FloatBuffer;\nimport java.util.Collection;\n\npublic class HandSkeletonLineDisplay {\n    private static final String TAG = HandSkeletonLineDisplay.class.getSimpleName();\n\n    private static final int BYTES_PER_POINT = 4 * 3;\n\n    private static final int INITIAL_BUFFER_POINTS = 150;\n\n    private static final float JOINT_POINT_SIZE = 100f;\n\n    private int mVbo;\n\n    private int mVboSize = INITIAL_BUFFER_POINTS * BYTES_PER_POINT;\n\n    private int mProgram;\n\n    private int mPosition;\n\n    private int mModelViewProjectionMatrix;\n\n    private int mColor;\n\n    private int mPointSize;\n\n    private int mPointsNum = 0;\n\n    private ARPluginConfigHand configBase = new ARPluginConfigHand();\n\n    public HandSkeletonLineDisplay(ARPluginConfigBase configBase) {\n        if (configBase instanceof ARPluginConfigHand) {\n            this.configBase = (ARPluginConfigHand) configBase;\n        }\n    }\n\n    /**\n     * Create and build a shader for the hand skeleton line on the OpenGL thread.\n     */\n    public void init() {\n        ErrorUtil.checkGLError(TAG, \"HandSkeletonLine Init start.\");\n\n        int[] buffers = new int[1];\n        GLES20.glGenBuffers(1, buffers, 0);\n        mVbo = buffers[0];\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        createProgram();\n        GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"HandSkeletonLine Init end.\");\n    }\n\n    private void createProgram() {\n        ErrorUtil.checkGLError(TAG, \"HandSkeletonLine Create program start.\");\n        mProgram = OpenGLUtil.createGlProgram(HandShaderUtil.HAND_VERTEX, HandShaderUtil.HAND_FRAGMENT);\n        ErrorUtil.checkGLError(TAG, \"HandSkeletonLine program\");\n        mPosition = GLES20.glGetAttribLocation(mProgram, \"inPosition\");\n        mColor = GLES20.glGetUniformLocation(mProgram, \"inColor\");\n        mPointSize = GLES20.glGetUniformLocation(mProgram, \"inPointSize\");\n        mModelViewProjectionMatrix = GLES20.glGetUniformLocation(mProgram, \"inMVPMatrix\");\n        ErrorUtil.checkGLError(TAG, \"HandSkeletonLine Create program end.\");\n    }\n\n    /**\n     * Draw hand skeleton connection line.\n     *\n     * @param hands ARHand data collection.\n     * @param projectionMatrix ProjectionMatrix(4 * 4).\n     */\n    public void onDrawFrame(Collection<ARHand> hands, float[] projectionMatrix) {\n        // Verify external input. If the hand data is empty, the projection matrix is empty,\n        // or the projection matrix is not 4 * 4, rendering is not performed.\n        if (hands.isEmpty() || projectionMatrix == null || projectionMatrix.length != 16) {\n            Log.e(TAG, \"onDrawFrame Illegal external input!\");\n            return;\n        }\n        for (ARHand hand : hands) {\n            float[] handSkeletons = hand.getHandskeletonArray();\n            int[] handSkeletonConnections = hand.getHandSkeletonConnection();\n            if (handSkeletons.length == 0 || handSkeletonConnections.length == 0) {\n                continue;\n            }\n            updateHandSkeletonLinesData(handSkeletons, handSkeletonConnections);\n            drawHandSkeletonLine(projectionMatrix);\n        }\n    }\n\n    /**\n     * This method updates the connection data of skeleton points and is called when any frame is updated.\n     *\n     * @param handSkeletons Bone point data of hand.\n     * @param handSkeletonConnection Data of connection between bone points of hand.\n     */\n    private void updateHandSkeletonLinesData(float[] handSkeletons, int[] handSkeletonConnection) {\n        ErrorUtil.checkGLError(TAG, \"Update hand skeleton lines data start.\");\n        int pointsLineNum = 0;\n\n        // Each point is a set of 3D coordinate. Each connection line consists of two points.\n        float[] linePoint = new float[handSkeletonConnection.length * 3 * 2];\n\n        // The format of HandSkeletonConnection data is [p0,p1;p0,p3;p0,p5;p1,p2].\n        // handSkeletonConnection saves the node indexes. Two indexes obtain a set\n        // of connection point data. Therefore, j = j + 2. This loop obtains related\n        // coordinates and saves them in linePoint.\n        for (int j = 0; j < handSkeletonConnection.length; j += 2) {\n            linePoint[pointsLineNum * 3] = handSkeletons[3 * handSkeletonConnection[j]];\n            linePoint[pointsLineNum * 3 + 1] = handSkeletons[3 * handSkeletonConnection[j] + 1];\n            linePoint[pointsLineNum * 3 + 2] = handSkeletons[3 * handSkeletonConnection[j] + 2];\n            linePoint[pointsLineNum * 3 + 3] = handSkeletons[3 * handSkeletonConnection[j + 1]];\n            linePoint[pointsLineNum * 3 + 4] = handSkeletons[3 * handSkeletonConnection[j + 1] + 1];\n            linePoint[pointsLineNum * 3 + 5] = handSkeletons[3 * handSkeletonConnection[j + 1] + 2];\n            pointsLineNum += 2;\n        }\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n        mPointsNum = pointsLineNum;\n\n        // If the storage space is insufficient, apply for twice the memory each time.\n        if (mVboSize < mPointsNum * BYTES_PER_POINT) {\n            while (mVboSize < mPointsNum * BYTES_PER_POINT) {\n                mVboSize *= 2;\n            }\n            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, mVboSize, null, GLES20.GL_DYNAMIC_DRAW);\n        }\n        FloatBuffer linePoints = FloatBuffer.wrap(linePoint);\n        Log.d(TAG, \"Skeleton skeleton line points num: \" + mPointsNum);\n        Log.d(TAG, \"Skeleton line points: \" + linePoints.toString());\n        GLES20.glBufferSubData(GLES20.GL_ARRAY_BUFFER, 0, mPointsNum * BYTES_PER_POINT, linePoints);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n        ErrorUtil.checkGLError(TAG, \"Update hand skeleton lines data end.\");\n    }\n\n    /**\n     * Draw hand skeleton connection line.\n     *\n     * @param projectionMatrix Projection matrix(4 * 4).\n     */\n    private void drawHandSkeletonLine(float[] projectionMatrix) {\n        ErrorUtil.checkGLError(TAG, \"Draw hand skeleton line start.\");\n        GLES20.glUseProgram(mProgram);\n        GLES20.glEnableVertexAttribArray(mPosition);\n        GLES20.glEnableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mVbo);\n\n        // Set the width of the drawn line\n        GLES20.glLineWidth(configBase.getLineWidthSkeleton());\n\n        // Represented each point by 4D coordinates in the shader.\n        GLES20.glVertexAttribPointer(mPosition, 4, GLES20.GL_FLOAT, false, BYTES_PER_POINT, 0);\n        ColorRGBA lineColor = configBase.getLineColor();\n        GLES20.glUniform4f(mColor, lineColor.red, lineColor.green, lineColor.blue, lineColor.alpha);\n        GLES20.glUniformMatrix4fv(mModelViewProjectionMatrix, 1, false, projectionMatrix, 0);\n\n        GLES20.glUniform1f(mPointSize, JOINT_POINT_SIZE);\n\n        GLES20.glDrawArrays(GLES20.GL_LINES, 0, mPointsNum);\n        GLES20.glDisableVertexAttribArray(mPosition);\n        GLES20.glDisableVertexAttribArray(mColor);\n        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);\n\n        ErrorUtil.checkGLError(TAG, \"Draw hand skeleton line end.\");\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/model/AugmentedImageDBModel.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.model;\n\npublic class AugmentedImageDBModel {\n    private String imgFileFromAsset = \"image_default.png\";\n\n    private float widthInMeters = 0f;\n\n    private String imgName = \"Image\";\n\n    public AugmentedImageDBModel() {\n\n    }\n\n    public AugmentedImageDBModel(String imgFileFromAsset, float widthInMeters, String imgName) {\n        this.imgFileFromAsset = imgFileFromAsset;\n        this.widthInMeters = widthInMeters;\n        this.imgName = imgName;\n    }\n\n    public String getImgFileFromAsset() {\n        return imgFileFromAsset;\n    }\n\n    public float getWidthInMeters() {\n        return widthInMeters;\n    }\n\n    public String getImgName() {\n        return imgName;\n    }\n\n    public void setImgFileFromAsset(String imgFileFromAsset) {\n        this.imgFileFromAsset = imgFileFromAsset;\n    }\n\n    public void setWidthInMeters(float widthInMeters) {\n        this.widthInMeters = widthInMeters;\n    }\n\n    public void setImgName(String imgName) {\n        this.imgName = imgName;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARAugmentedImageRender.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.opengl.Matrix;\nimport android.util.Log;\nimport android.util.Pair;\n\nimport com.huawei.hiar.ARAnchor;\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hiar.exceptions.ARSessionPausedException;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigAugmentedImage;\nimport com.huawei.hms.plugin.ar.core.helper.augmentedImage.ImageKeyLineDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.augmentedImage.ImageKeyPointDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARAugmentedImageRender extends ARBaseRenderer {\n    private final static String TAG = ARAugmentedImageRender.class.getSimpleName();\n\n    private static final int PROJ_MATRIX_SIZE = 16;\n\n    private static final int PROJ_MATRIX_OFFSET = 0;\n\n    private static final float PROJ_MATRIX_NEAR = 0.1f;\n\n    private static final float PROJ_MATRIX_FAR = 100.0f;\n\n    private boolean isImageTrackOnly = false;\n\n    private ImageKeyPointDisplay imageKeyPointDisplay;\n\n    private ImageKeyLineDisplay imageKeyLineDisplay;\n\n    /**\n     * Anchors of the augmented image and its related center,\n     * which is controlled by the index key of the augmented image in the database.\n     */\n    private Map<Integer, Pair<ARAugmentedImage, ARAnchor>> augmentedImageMap = new HashMap<>();\n\n    public ARAugmentedImageRender(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigAugmentedImage pluginConfig, Context context) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfig);\n        imageKeyPointDisplay = new ImageKeyPointDisplay(pluginConfig.getPointColor(), pluginConfig.getPointSize());\n        imageKeyLineDisplay = new ImageKeyLineDisplay(pluginConfig.getLineColor(), pluginConfig.getLineWidth());\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        imageKeyPointDisplay.init();\n        imageKeyLineDisplay.init();\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame;\n        try {\n            arFrame = arSession.update();\n        } catch (ARSessionPausedException e) {\n            Log.e(TAG, \"Invoke session.resume before invoking Session.update.\");\n            return;\n        }\n        ARCamera arCamera = arFrame.getCamera();\n\n        textureDisplay.onDrawFrame(arFrame);\n\n        // If tracking is not set, the augmented image is not drawn.\n        if (arCamera.getTrackingState() == ARTrackable.TrackingState.PAUSED) {\n            Log.i(TAG, \"Draw background paused!\");\n            return;\n        }\n\n        // Obtain the projection matrix.\n        float[] projectionMatrix = new float[PROJ_MATRIX_SIZE];\n        arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);\n\n        // Obtain the view matrix.\n        float[] viewMatrix = new float[PROJ_MATRIX_SIZE];\n        if (isImageTrackOnly) {\n            Matrix.setIdentityM(viewMatrix, 0);\n        } else {\n            arCamera.getViewMatrix(viewMatrix, 0);\n        }\n\n        // Draw the augmented image.\n        drawAugmentedImages(arFrame, projectionMatrix, viewMatrix);\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    private void drawAugmentedImages(ARFrame frame, float[] projmtx, float[] viewmtx) {\n        Collection<ARAugmentedImage> updatedAugmentedImages = frame.getUpdatedTrackables(ARAugmentedImage.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(updatedAugmentedImages));\n        Log.d(TAG, \"drawAugmentedImages: Updated augment image is \" + updatedAugmentedImages.size());\n\n        // Iteratively update the augmented image mapping and remove the elements that cannot be drawn.\n        for (ARAugmentedImage augmentedImage : updatedAugmentedImages) {\n            switch (augmentedImage.getTrackingState()) {\n                case PAUSED:\n                    // When an image is in paused state but the camera is not paused,\n                    // the image is detected but not tracked.\n                    break;\n                case TRACKING:\n                    initTrackingImages(augmentedImage);\n                    break;\n                case STOPPED:\n                    augmentedImageMap.remove(augmentedImage.getIndex());\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        // Map the anchor to the AugmentedImage object and draw all augmentation effects.\n        for (Pair<ARAugmentedImage, ARAnchor> pair : augmentedImageMap.values()) {\n            ARAugmentedImage augmentedImage = pair.first;\n            if (augmentedImage.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n                continue;\n            }\n\n            if (((ARPluginConfigAugmentedImage)pluginConfig).isDrawLine()) {\n                imageKeyLineDisplay.onDrawFrame(augmentedImage, viewmtx, projmtx);\n            }\n\n            if (((ARPluginConfigAugmentedImage)pluginConfig).isDrawPoint()) {\n                imageKeyPointDisplay.onDrawFrame(augmentedImage, viewmtx, projmtx);\n            }\n        }\n    }\n\n    private void initTrackingImages(ARAugmentedImage augmentedImage) {\n        // Create an anchor for the newly found image and bind it to the image object.\n        if (!augmentedImageMap.containsKey(augmentedImage.getIndex())) {\n            ARAnchor centerPoseAnchor = null;\n            if (!isImageTrackOnly) {\n                centerPoseAnchor = augmentedImage.createAnchor(augmentedImage.getCenterPose());\n            }\n            augmentedImageMap.put(augmentedImage.getIndex(), Pair.create(augmentedImage, centerPoseAnchor));\n        }\n    }\n\n    public void setImageTrackOnly(boolean isOnlyImageTrack) {\n        this.isImageTrackOnly = isOnlyImageTrack;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARBaseDrawObject.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.util.Log;\nimport android.view.MotionEvent;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARHitResult;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARPoint;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.GestureEvent;\nimport com.huawei.hms.plugin.ar.core.helper.ObjectDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.VirtualObject;\n\nimport java.util.Arrays;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.concurrent.ArrayBlockingQueue;\n\npublic class ARBaseDrawObject extends ARBaseRenderer {\n\n    private static final String TAG = ARBaseDrawObject.class.getSimpleName();\n\n    protected List<VirtualObject> virtualObjects;\n\n    protected ObjectDisplay objectDisplay;\n\n    protected boolean mHaveSetEnvTextureData = false;\n\n    protected Boolean hasError = false;\n\n    protected ArrayBlockingQueue<GestureEvent> queuedSingleTaps;\n\n    private static final float[] BLUE_COLORS = new float[] {66.0f, 133.0f, 244.0f, 255.0f};\n\n    private static final float[] GREEN_COLORS = new float[] {66.0f, 133.0f, 244.0f, 255.0f};\n\n    protected static final int PROJ_MATRIX_OFFSET = 0;\n\n    protected static final float PROJ_MATRIX_NEAR = 0.1f;\n\n    protected static final float PROJ_MATRIX_FAR = 100.0f;\n\n    protected VirtualObject selectedObject;\n\n    protected Context context;\n\n    public ARBaseDrawObject(ARSession arSession, DisplayRotationManager displayRotationManager, TextureDisplay textureDisplay, ARPluginConfigBase configBase) {\n        super(arSession, displayRotationManager, textureDisplay, configBase);\n    }\n\n    protected void drawAllObjects(float[] projectionMatrix, float[] viewMatrix, float lightPixelIntensity) {\n        Iterator<VirtualObject> ite = virtualObjects.iterator();\n        while (ite.hasNext()) {\n            VirtualObject obj = ite.next();\n            if (obj.getAnchor().getTrackingState() == ARTrackable.TrackingState.STOPPED) {\n                ite.remove();\n            }\n            if (obj.getAnchor().getTrackingState() == ARTrackable.TrackingState.TRACKING) {\n                objectDisplay.onDrawFrame(viewMatrix, projectionMatrix, lightPixelIntensity, obj);\n            }\n        }\n    }\n\n    protected void setEnvTextureData() {\n        if (!mHaveSetEnvTextureData) {\n            try {\n                float[] boundBox = objectDisplay.getBoundingBox();\n                arSession.setEnvironmentTextureProbe(boundBox);\n                Log.i(TAG, \"setEnvironmentTextureProbe = \" + Arrays.toString(boundBox));\n                arSession.setEnvironmentTextureUpdateMode(ARSession.EnvironmentTextureUpdateMode.AUTO);\n            } catch (Exception e) {\n                Log.e(TAG, \"setEnvTextureData\");\n                hasError = true;\n            }\n            mHaveSetEnvTextureData = true;\n        }\n    }\n\n    protected void handleGestureEvent(ARFrame arFrame, ARCamera arCamera, float[] projectionMatrix, float[] viewMatrix) {\n        GestureEvent event = queuedSingleTaps.poll();\n        if (event == null) {\n            return;\n        }\n        if (arCamera.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n            return;\n        }\n\n        int eventType = event.getType();\n        switch (eventType) {\n            case GestureEvent.GESTURE_EVENT_TYPE_DOWN: {\n                doWhenEventTypeDown(viewMatrix, projectionMatrix, event);\n                break;\n            }\n            case GestureEvent.GESTURE_EVENT_TYPE_SCROLL: {\n                if (selectedObject == null) {\n                    break;\n                }\n                ARHitResult hitResult = hitTest4Result(arFrame, arCamera, event.getEventSecond());\n                if (hitResult != null) {\n                    selectedObject.setAnchor(hitResult.createAnchor());\n                }\n                break;\n            }\n            case GestureEvent.GESTURE_EVENT_TYPE_SINGLETAPUP: {\n                // Do not perform anything when an object is selected.\n                if (selectedObject != null) {\n                    return;\n                }\n\n                MotionEvent tap = event.getEventFirst();\n                ARHitResult hitResult = null;\n\n                hitResult = hitTest4Result(arFrame, arCamera, tap);\n\n                if (hitResult == null) {\n                    break;\n                }\n                doWhenEventTypeSingleTap(hitResult);\n                break;\n            }\n            default: {\n                Log.e(TAG, \"Unknown motion event type, and do nothing.\");\n            }\n        }\n    }\n\n    protected void doWhenEventTypeDown(float[] viewMatrix, float[] projectionMatrix, GestureEvent event) {\n        if (selectedObject != null) {\n            selectedObject.setIsSelected(false);\n            selectedObject = null;\n        }\n        for (VirtualObject obj : virtualObjects) {\n            if (objectDisplay.hitTest(viewMatrix, projectionMatrix, obj, event.getEventFirst())) {\n                obj.setIsSelected(true);\n                selectedObject = obj;\n                break;\n            }\n        }\n    }\n\n    protected void doWhenEventTypeSingleTap(ARHitResult hitResult) {\n        // The hit results are sorted by distance. Only the nearest hit point is valid.\n        // Set the number of stored objects to 10 to avoid the overload of rendering and AR Engine.\n        if (virtualObjects.size() >= 16) {\n            virtualObjects.get(0).getAnchor().detach();\n            virtualObjects.remove(0);\n        }\n\n        ARTrackable currentTrackable = hitResult.getTrackable();\n        if (currentTrackable instanceof ARPoint) {\n            virtualObjects.add(new VirtualObject(hitResult.createAnchor(), BLUE_COLORS));\n        } else if (currentTrackable instanceof ARPlane) {\n            virtualObjects.add(new VirtualObject(hitResult.createAnchor(), GREEN_COLORS));\n        } else {\n            Log.i(TAG, \"Hit result is not plane or point.\");\n        }\n    }\n\n    private ARHitResult hitTest4Result(ARFrame frame, ARCamera camera, MotionEvent event) {\n        ARHitResult hitResult = null;\n        List<ARHitResult> hitTestResults = frame.hitTest(event);\n\n        for (int i = 0; i < hitTestResults.size(); i++) {\n            // Determine whether the hit point is within the plane polygon.\n            ARHitResult hitResultTemp = hitTestResults.get(i);\n            if (hitResultTemp == null) {\n                continue;\n            }\n            ARTrackable trackable = hitResultTemp.getTrackable();\n\n            boolean isPlanHitJudge = trackable instanceof ARPlane && ((ARPlane) trackable).isPoseInPolygon(\n                hitResultTemp.getHitPose()) && (calculateDistanceToPlane(hitResultTemp.getHitPose(), camera.getPose())\n                > 0);\n\n            // Determine whether the point cloud is clicked and whether the point faces the camera.\n            boolean isPointHitJudge = trackable instanceof ARPoint\n                && ((ARPoint) trackable).getOrientationMode() == ARPoint.OrientationMode.ESTIMATED_SURFACE_NORMAL\n                && trackable.getTrackingState() == ARTrackable.TrackingState.TRACKING;\n\n            // Select points on the plane preferentially.\n            if (isPlanHitJudge || isPointHitJudge) {\n                hitResult = hitResultTemp;\n                if (trackable instanceof ARPlane) {\n                    break;\n                }\n            }\n        }\n        return hitResult;\n    }\n\n    /**\n     * Calculate the distance between a point in a space and a plane. This method is used\n     * to calculate the distance between a camera in a space and a specified plane.\n     *\n     * @param planePose ARPose of a plane.\n     * @param cameraPose ARPose of a camera.\n     * @return Calculation results.\n     */\n    protected static float calculateDistanceToPlane(ARPose planePose, ARPose cameraPose) {\n        // The dimension of the direction vector is 3.\n        float[] normals = new float[3];\n\n        // Obtain the unit coordinate vector of a normal vector of a plane.\n        planePose.getTransformedAxis(1, 1.0f, normals, 0);\n\n        // Calculate the distance based on projection.\n        return (cameraPose.tx() - planePose.tx()) * normals[0] // 0:x\n            + (cameraPose.ty() - planePose.ty()) * normals[1] // 1:y\n            + (cameraPose.tz() - planePose.tz()) * normals[2]; // 2:z\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARBaseRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.opengl.GLES20;\nimport android.opengl.GLSurfaceView;\n\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.helper.CameraConfigListener;\nimport com.huawei.hms.plugin.ar.core.helper.CameraIntrinsicsListener;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.MessageTextListener;\nimport com.huawei.hms.plugin.ar.core.helper.PluginCallbackHelper;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport com.huawei.hiar.ARSession;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARBaseRenderer implements GLSurfaceView.Renderer {\n    protected ARSession arSession;\n\n    protected DisplayRotationManager displayRotationManager;\n\n    protected PluginCallbackHelper callbackHelper;\n\n    protected CameraConfigListener cameraConfigListener;\n\n    protected CameraIntrinsicsListener cameraIntrinsicsListener;\n\n    protected MessageTextListener messageDataListener;\n\n    protected ARPluginConfigBase pluginConfig;\n\n    protected TextureDisplay textureDisplay;\n\n    protected boolean Lock = false;\n\n    private int frames = 0;\n\n    private long lastInterval;\n\n    private float fps;\n\n    public ARBaseRenderer() {\n    }\n\n    public ARBaseRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigBase configBase) {\n        this.arSession = arSession;\n        this.displayRotationManager = displayRotationManager;\n        this.textureDisplay = textureDisplay;\n        this.pluginConfig = configBase;\n        this.callbackHelper = arTrackables -> {\n        };\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        GLES20.glClearColor(0.1f, 0.1f, 0.1f, 1.0f);\n        textureDisplay.init();\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        textureDisplay.onSurfaceChanged(width, height);\n        GLES20.glViewport(0, 0, width, height);\n        displayRotationManager.updateViewportRotation(width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);\n        if (arSession == null) {\n            return;\n        }\n        if (displayRotationManager.isDeviceRotated()) {\n            displayRotationManager.updateARSessionDisplayGeometry(arSession);\n        }\n        arSession.setCameraTextureName(textureDisplay.getExternalTextureId());\n    }\n\n    public void setCallbackHelper(PluginCallbackHelper callbackHelper) {\n        this.callbackHelper = callbackHelper;\n    }\n\n    public void setCameraConfigListener(CameraConfigListener cameraConfigListener) {\n        this.cameraConfigListener = cameraConfigListener;\n    }\n\n    public void setCameraIntrinsicsListener(CameraIntrinsicsListener cameraIntrinsicsListener) {\n        this.cameraIntrinsicsListener = cameraIntrinsicsListener;\n    }\n\n    public void setMessageDataListener(MessageTextListener listener) {\n        this.messageDataListener = listener;\n    }\n\n    protected float doFpsCalculate() {\n        ++frames;\n        long timeNow = System.currentTimeMillis();\n\n        // Convert millisecond to second.\n        if (((timeNow - lastInterval) / 1000.0f) > 0.5f) {\n            fps = frames / ((timeNow - lastInterval) / 1000.0f);\n            frames = 0;\n            lastInterval = timeNow;\n        }\n        return fps;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARBodyRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBody;\nimport com.huawei.hms.plugin.ar.core.helper.body.BodySkeletonDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.body.BodySkeletonLineDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARSession;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARBodyRenderer extends ARBaseRenderer {\n    private static final int PROJECTION_MATRIX_OFFSET = 0;\n\n    private static final float PROJECTION_MATRIX_NEAR = 0.1f;\n\n    private static final float PROJECTION_MATRIX_FAR = 100.f;\n\n    private BodySkeletonDisplay bodySkeletonDisplay;\n\n    private BodySkeletonLineDisplay bodySkeletonLineDisplay;\n\n    public ARBodyRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigBody pluginConfig) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfig);\n        bodySkeletonDisplay = new BodySkeletonDisplay(pluginConfig.getPointColor(), pluginConfig.getPointSize());\n        bodySkeletonLineDisplay = new BodySkeletonLineDisplay(pluginConfig.getLineColor(), pluginConfig.getLineWidth());\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        bodySkeletonDisplay.init();\n        bodySkeletonLineDisplay.init();\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n\n        float[] projectionMatrix = new float[16];\n        ARCamera camera = arFrame.getCamera();\n\n        camera.getProjectionMatrix(projectionMatrix, PROJECTION_MATRIX_OFFSET, PROJECTION_MATRIX_NEAR,\n            PROJECTION_MATRIX_FAR);\n        textureDisplay.onDrawFrame(arFrame);\n        Collection<ARBody> arBodyCollection = arSession.getAllTrackables(ARBody.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(arBodyCollection));\n        if (((ARPluginConfigBody) pluginConfig).isDrawLine()) {\n            bodySkeletonLineDisplay.onDrawFrame(arBodyCollection, projectionMatrix);\n        }\n        if (((ARPluginConfigBody) pluginConfig).isDrawPoint()) {\n            bodySkeletonDisplay.onDrawFrame(arBodyCollection, projectionMatrix);\n        }\n\n        StringBuilder sb = new StringBuilder();\n        updateMessageData(sb, arBodyCollection);\n        messageDataListener.handleMessageData(sb.toString());\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(camera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n    }\n\n    private void updateMessageData(StringBuilder sb, Collection<ARBody> bodies) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult).append(System.lineSeparator());\n        int trackingBodySum = 0;\n        for (ARBody body : bodies) {\n            if (body.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n                continue;\n            }\n            trackingBodySum++;\n            sb.append(\"body action: \").append(body.getBodyAction()).append(System.lineSeparator());\n        }\n        sb.append(\"tracking body sum: \").append(trackingBodySum).append(System.lineSeparator());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARCloud3DObjectRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.common.CloudServiceState;\nimport com.huawei.hiar.listener.CloudServiceEvent;\nimport com.huawei.hiar.listener.CloudServiceListener;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\nimport com.huawei.hms.plugin.ar.core.util.ApplicationUtil;\nimport com.huawei.hms.plugin.ar.core.util.ModeInformation;\n\nimport java.util.ArrayList;\nimport java.util.EventObject;\nimport java.util.List;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARCloud3DObjectRenderer extends ARBaseRenderer {\n    private final static String TAG = ARCloud3DObjectRenderer.class.getSimpleName();\n\n    private Context context;\n\n    public ARCloud3DObjectRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigBase pluginConfigBase, Context context) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfigBase);\n        this.context = context;\n        signWithAppIdNew();\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        setCloudServiceStateListener();\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n        ARCamera arCamera = arFrame.getCamera();\n\n        textureDisplay.onDrawFrame(arFrame);\n        callbackHelper.onDrawFrame(new ArrayList<>(arSession.getAllTrackables(ARPlane.class)));\n        float[] viewMatrix = new float[16];\n        arCamera.getViewMatrix(viewMatrix, 0);\n    }\n\n    public void setCloudServiceStateListener() {\n        arSession.addServiceListener(new CloudImageServiceListener());\n    }\n\n    private void signWithAppIdNew() {\n        String authJson = ApplicationUtil.readApplicationMessage(context);\n        if (authJson.isEmpty()) {\n            String jsonString = ApplicationUtil.getJson(\"mode_id.json\", context);\n            List<ModeInformation> modeList = ApplicationUtil.json2List(jsonString);\n            if (modeList.size() <= 0) {\n                Log.e(TAG, \"sign error, get application message error\");\n                return;\n            }\n            authJson = modeList.get(0).getModeInformation();\n        }\n        arSession.setCloudServiceAuthInfo(authJson);\n    }\n\n    public class CloudImageServiceListener implements CloudServiceListener {\n        @Override\n        public void handleEvent(EventObject eventObject) {\n            CloudServiceState state = null;\n            if (eventObject instanceof CloudServiceEvent) {\n                CloudServiceEvent cloudServiceEvent = (CloudServiceEvent) eventObject;\n                state = cloudServiceEvent.getCloudServiceState();\n            }\n            if (state == null) {\n                return;\n            }\n            String tipMsg = \"\";\n            switch (state) {\n                case CLOUD_SERVICE_ERROR_NETWORK_UNAVAILABLE:\n                    tipMsg = \"network unavailable\";\n                    break;\n                case CLOUD_SERVICE_ERROR_CLOUD_SERVICE_UNAVAILABLE:\n                    tipMsg = \"cloud service unavailable\";\n                    break;\n                case CLOUD_SERVICE_ERROR_NOT_AUTHORIZED:\n                    tipMsg = \"cloud service not authorized\";\n                    break;\n                case CLOUD_SERVICE_ERROR_SERVER_VERSION_TOO_OLD:\n                    tipMsg = \"cloud server version too old\";\n                    break;\n                case CLOUD_SERVICE_ERROR_TIME_EXHAUSTED:\n                    tipMsg = \"time exhausted\";\n                    break;\n                case CLOUD_SERVICE_ERROR_INTERNAL:\n                    tipMsg = \"cloud service gallery invalid\";\n                    break;\n                case CLOUD_OBJECT_ERROR_OBJECT_MODEL_INVALID:\n                    tipMsg = \"cloud object error, object invalid\";\n                    break;\n                case CLOUD_OBJECT_ERROR_OBJECT_RECOGNIZE_FAILE:\n                    tipMsg = \"cloud object recognize fail\";\n                    break;\n                default:\n            }\n            Log.w(TAG, tipMsg);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARFaceRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARFace;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARLightEstimate;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hiar.listener.FaceHealthServiceListener;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigFace;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.face.FaceGeometryDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.face.FaceHealtyResult;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.EventObject;\nimport java.util.HashMap;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARFaceRenderer extends ARBaseRenderer implements FaceHealthServiceListener {\n    private final static String TAG = ARFaceRenderer.class.getSimpleName();\n\n    private static final int MAX_PROGRESS = 100;\n\n    protected FaceHealthServiceListener faceHealtyListener;\n\n    protected FaceHealtyResult faceHealtyResult;\n\n    private int textureId = -1;\n\n    private FaceGeometryDisplay faceGeometryDisplay;\n\n    private boolean health;\n\n    private int mProgress = 0;\n\n    private Context context;\n\n    public ARFaceRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigFace pluginConfigBase, Context context, boolean health) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfigBase);\n        this.context = context;\n        this.health = health;\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        Log.i(TAG, \"onSurfaceCreated: textureId : \" + textureId);\n        faceGeometryDisplay = new FaceGeometryDisplay(context, pluginConfig);\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n\n        textureDisplay.onDrawFrame(arFrame);\n        Collection<ARFace> arFaceCollection = arSession.getAllTrackables(ARFace.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(arFaceCollection));\n        ARCamera arCamera = arFrame.getCamera();\n        for (ARFace face : arFaceCollection) {\n            if (face.getTrackingState() == ARTrackable.TrackingState.TRACKING && this.health) {\n                HashMap<ARFace.HealthParameter, Float> healthParams = face.getHealthParameters();\n                if (mProgress < MAX_PROGRESS) {\n                    updateHealthParamTable(healthParams);\n                }\n            } else if (face.getTrackingState() == ARTrackable.TrackingState.TRACKING\n                && ((ARPluginConfigFace) pluginConfig).isDrawFace() && !this.health) {\n                faceGeometryDisplay.onDrawFrame(arCamera, face);\n            }\n\n        }\n\n        StringBuilder sb = new StringBuilder();\n        updateMessageData(sb, arFaceCollection, arFrame);\n        messageDataListener.handleMessageData(sb.toString());\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    private void updateHealthParamTable(final HashMap<ARFace.HealthParameter, Float> healthParams) {\n        StringBuilder sb = new StringBuilder();\n        sb.append(\"{ \\\"\" + ARFace.HealthParameter.PARAMETER_HEART_RATE.toString() + \"\\\":\" + healthParams.getOrDefault(\n            ARFace.HealthParameter.PARAMETER_HEART_RATE, 0.0f).toString() + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_FACE_AGE.toString() + \"\\\":\" + healthParams.getOrDefault(\n            ARFace.HealthParameter.PARAMETER_FACE_AGE, 0.0f).toString() + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_BREATH_RATE_CONFIDENCE.toString() + \"\\\":\"\n            + healthParams.getOrDefault(ARFace.HealthParameter.PARAMETER_BREATH_RATE_CONFIDENCE, 0.0f).toString()\n            + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_HEART_WAVE.toString() + \"\\\":\" + healthParams.getOrDefault(\n            ARFace.HealthParameter.PARAMETER_HEART_WAVE, 0.0f).toString() + \",\");\n        sb.append(\n            \"\\\"\" + ARFace.HealthParameter.PARAMETER_BREATH_RATE_SNR.toString() + \"\\\":\" + healthParams.getOrDefault(\n                ARFace.HealthParameter.PARAMETER_BREATH_RATE_SNR, 0.0f).toString() + \",\");\n        sb.append(\n            \"\\\"\" + ARFace.HealthParameter.PARAMETER_GENDER_FEMALE_WEIGHT.toString() + \"\\\":\" + healthParams.getOrDefault(\n                ARFace.HealthParameter.PARAMETER_GENDER_FEMALE_WEIGHT, 0.0f).toString() + \",\");\n        sb.append(\n            \"\\\"\" + ARFace.HealthParameter.PARAMETER_GENDER_MALE_WEIGHT.toString() + \"\\\":\" + healthParams.getOrDefault(\n                ARFace.HealthParameter.PARAMETER_GENDER_MALE_WEIGHT, 0.0f).toString() + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_HEART_RATE_CONFIDENCE.toString() + \"\\\":\"\n            + healthParams.getOrDefault(ARFace.HealthParameter.PARAMETER_HEART_RATE_CONFIDENCE, 0.0f).toString() + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_HEART_RATE_SNR.toString() + \"\\\":\" + healthParams.getOrDefault(\n            ARFace.HealthParameter.PARAMETER_HEART_RATE_SNR, 0.0f).toString() + \",\");\n        sb.append(\"\\\"\" + ARFace.HealthParameter.PARAMETER_BREATH_RATE.toString() + \"\\\":\" + healthParams.getOrDefault(\n            ARFace.HealthParameter.PARAMETER_BREATH_RATE, 0.0f).toString() + \"}\");\n\n        this.faceHealtyResult.handleResult(sb.toString());\n    }\n\n    public void setFaceHealtyListener(FaceHealthServiceListener faceHealtyListener) {\n        this.faceHealtyListener = faceHealtyListener;\n    }\n\n    public void setFaceHealtyResult(FaceHealtyResult faceHealtyResult) {\n        this.faceHealtyResult = faceHealtyResult;\n    }\n\n    @Override\n    public void handleProcessProgressEvent(int i) {\n        Log.e(TAG, \"FaceHealtyListener handleProcessProgressEvent:\" + i);\n        this.faceHealtyListener.handleProcessProgressEvent(i);\n    }\n\n    @Override\n    public void handleEvent(EventObject eventObject) {\n        Log.e(TAG, \"FaceHealtyListener handleEvent Object:\" + eventObject);\n        this.faceHealtyListener.handleEvent(eventObject);\n    }\n\n    private void updateMessageData(StringBuilder sb, Collection<ARFace> faces, ARFrame frame) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS= \").append(fpsResult).append(System.lineSeparator());\n        int index = 1;\n        for (ARFace face : faces) {\n            if (face.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n                continue;\n            }\n            ARPose pose = face.getPose();\n            if (pose == null) {\n                continue;\n            }\n            sb.append(\"face \" + index + \" pose information:\");\n            sb.append(\"face pose tx:[\").append(pose.tx()).append(\"]\").append(System.lineSeparator());\n            sb.append(\"face pose ty:[\").append(pose.ty()).append(\"]\").append(System.lineSeparator());\n            sb.append(\"face pose tz:[\").append(pose.tz()).append(\"]\").append(System.lineSeparator());\n            sb.append(System.lineSeparator());\n\n            float[] textureCoordinates = face.getFaceGeometry().getTextureCoordinates().array();\n            sb.append(\"textureCoordinates length:[ \").append(textureCoordinates.length).append(\" ]\");\n            sb.append(System.lineSeparator()).append(System.lineSeparator());\n            index++;\n\n            ARLightEstimate lightEstimate = frame.getLightEstimate();\n            if (lightEstimate == null) {\n                Log.w(TAG, \"lightEstimate is null.\");\n                continue;\n            }\n\n            // Obtain the data of main light source and ambient light\n            // when the ambient lighting estimation mode is enabled.\n            if ((((ARPluginConfigFace) pluginConfig).getLightMode() & ARConfigBase.LIGHT_MODE_ENVIRONMENT_LIGHTING)\n                != 0) {\n                sb.append(\"PrimaryLightIntensity=\")\n                    .append(lightEstimate.getPrimaryLightIntensity())\n                    .append(System.lineSeparator());\n                sb.append(\"PrimaryLightDirection=\")\n                    .append(Arrays.toString(lightEstimate.getPrimaryLightDirection()))\n                    .append(System.lineSeparator());\n                sb.append(\"PrimaryLightColor=\")\n                    .append(Arrays.toString(lightEstimate.getPrimaryLightColor()))\n                    .append(System.lineSeparator());\n                sb.append(\"LightShadowType=\").append(lightEstimate.getLightShadowType()).append(System.lineSeparator());\n                sb.append(\"LightShadowStrength=\")\n                    .append(lightEstimate.getShadowStrength())\n                    .append(System.lineSeparator());\n                sb.append(\"LightSphericalHarmonicCoefficients=\")\n                    .append(Arrays.toString(lightEstimate.getSphericalHarmonicCoefficients()))\n                    .append(System.lineSeparator());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARHandRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.util.Log;\n\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARLightEstimate;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.hand.HandBoxDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.hand.HandSkeletonDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.hand.HandSkeletonLineDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hiar.ARSession;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARHandRenderer extends ARBaseRenderer {\n    private final static String TAG = ARHandRenderer.class.getSimpleName();\n\n    private static final int PROJECTION_MATRIX_OFFSET = 0;\n\n    private static final float PROJECTION_MATRIX_NEAR = 0.1f;\n\n    private static final float PROJECTION_MATRIX_FAR = 100.0f;\n\n    private HandBoxDisplay handBoxDisplay;\n    private HandSkeletonDisplay handSkeletonDisplay;\n    private HandSkeletonLineDisplay handSkeletonLineDisplay;\n\n    public ARHandRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigHand config) {\n        super(arSession, displayRotationManager, textureDisplay, config);\n        this.pluginConfig = config;\n        handBoxDisplay = new HandBoxDisplay(config);\n        handSkeletonDisplay = new HandSkeletonDisplay(config);\n        handSkeletonLineDisplay = new HandSkeletonLineDisplay(config);\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        handBoxDisplay.init();\n        handSkeletonDisplay.init();\n        handSkeletonLineDisplay.init();\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n        Log.d(\"ARHandRenderer\", \"onSurfaceChanged :: (width=\" + width + \", height=\" + height + \")\");\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n\n        ARFrame arFrame = arSession.update();\n        ARCamera arCamera = arFrame.getCamera();\n\n        float[] projectionMatrix = new float[16];\n\n        arCamera.getProjectionMatrix(projectionMatrix, PROJECTION_MATRIX_OFFSET, PROJECTION_MATRIX_NEAR,\n            PROJECTION_MATRIX_FAR);\n        textureDisplay.onDrawFrame(arFrame);\n        Collection<ARHand> arHandCollection = arSession.getAllTrackables(ARHand.class);\n\n        for (ARHand hand : arHandCollection) {\n            // Update the hand recognition information to be displayed on the screen.\n            StringBuilder sb = new StringBuilder();\n            updateMessageData(sb, hand);\n\n            // Display hand recognition information on the screen.\n            this.messageDataListener.handleMessageData(sb.toString());\n        }\n\n        callbackHelper.onDrawFrame(new ArrayList<>(arHandCollection));\n        if (pluginConfig instanceof ARPluginConfigHand) {\n            ARPluginConfigHand configHand = (ARPluginConfigHand) pluginConfig;\n            if (configHand.isDrawBox()) {\n                handBoxDisplay.onDrawFrame(arHandCollection, projectionMatrix);\n            }\n            if (configHand.isDrawPoint()) {\n                handSkeletonDisplay.onDrawFrame(arHandCollection, projectionMatrix);\n            }\n            if (configHand.isDrawLine()) {\n                handSkeletonLineDisplay.onDrawFrame(arHandCollection, projectionMatrix);\n            }\n        }\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    private void updateMessageData(StringBuilder sb, ARHand hand) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult).append(System.lineSeparator());\n        addHandNormalStringBuffer(sb, hand);\n        addGestureActionStringBuffer(sb, hand);\n        addGestureCenterStringBuffer(sb, hand);\n        float[] gestureHandBoxPoints = hand.getGestureHandBox();\n\n        sb.append(\"GestureHandBox length:[\")\n            .append(gestureHandBoxPoints.length)\n            .append(\"]\")\n            .append(System.lineSeparator());\n        for (int i = 0; i < gestureHandBoxPoints.length; i++) {\n            Log.i(TAG, \"gesturePoints:\" + gestureHandBoxPoints[i]);\n            sb.append(\"gesturePoints[\")\n                .append(i)\n                .append(\"]:[\")\n                .append(gestureHandBoxPoints[i])\n                .append(\"]\")\n                .append(System.lineSeparator());\n        }\n        addHandSkeletonStringBuffer(sb, hand);\n    }\n\n    private void addHandNormalStringBuffer(StringBuilder sb, ARHand hand) {\n        sb.append(\"GestureType=\").append(hand.getGestureType()).append(System.lineSeparator());\n        sb.append(\"GestureCoordinateSystem=\").append(hand.getGestureCoordinateSystem()).append(System.lineSeparator());\n        float[] gestureOrientation = hand.getGestureOrientation();\n        sb.append(\"gestureOrientation length:[\")\n            .append(gestureOrientation.length)\n            .append(\"]\")\n            .append(System.lineSeparator());\n        for (int i = 0; i < gestureOrientation.length; i++) {\n            Log.i(TAG, \"gestureOrientation:\" + gestureOrientation[i]);\n            sb.append(\"gestureOrientation[\")\n                .append(i)\n                .append(\"]:[\")\n                .append(gestureOrientation[i])\n                .append(\"]\")\n                .append(System.lineSeparator());\n        }\n        sb.append(System.lineSeparator());\n    }\n\n    private void addGestureActionStringBuffer(StringBuilder sb, ARHand hand) {\n        int[] gestureAction = hand.getGestureAction();\n        sb.append(\"gestureAction length:[\").append(gestureAction.length).append(\"]\").append(System.lineSeparator());\n        for (int i = 0; i < gestureAction.length; i++) {\n            Log.i(TAG, \"GestureAction:\" + gestureAction[i]);\n            sb.append(\"gestureAction[\")\n                .append(i)\n                .append(\"]:[\")\n                .append(gestureAction[i])\n                .append(\"]\")\n                .append(System.lineSeparator());\n        }\n        sb.append(System.lineSeparator());\n    }\n\n    private void addGestureCenterStringBuffer(StringBuilder sb, ARHand hand) {\n        float[] gestureCenter = hand.getGestureCenter();\n        sb.append(\"gestureCenter length:[\").append(gestureCenter.length).append(\"]\").append(System.lineSeparator());\n        for (int i = 0; i < gestureCenter.length; i++) {\n            Log.i(TAG, \"GestureCenter:\" + gestureCenter[i]);\n            sb.append(\"gestureCenter[\")\n                .append(i)\n                .append(\"]:[\")\n                .append(gestureCenter[i])\n                .append(\"]\")\n                .append(System.lineSeparator());\n        }\n        sb.append(System.lineSeparator());\n    }\n\n    private void addHandSkeletonStringBuffer(StringBuilder sb, ARHand hand) {\n        sb.append(System.lineSeparator()).append(\"Handtype=\").append(hand.getHandtype()).append(System.lineSeparator());\n        sb.append(\"SkeletonCoordinateSystem=\").append(hand.getSkeletonCoordinateSystem());\n        sb.append(System.lineSeparator());\n        float[] skeletonArray = hand.getHandskeletonArray();\n        sb.append(\"HandskeletonArray length:[\").append(skeletonArray.length).append(\"]\").append(System.lineSeparator());\n        Log.i(TAG, \"SkeletonArray.length:\" + skeletonArray.length);\n        for (int i = 0; i < skeletonArray.length; i++) {\n            Log.i(TAG, \"SkeletonArray:\" + skeletonArray[i]);\n        }\n        sb.append(System.lineSeparator());\n        int[] handSkeletonConnection = hand.getHandSkeletonConnection();\n        sb.append(\"HandSkeletonConnection length:[\")\n            .append(handSkeletonConnection.length)\n            .append(\"]\")\n            .append(System.lineSeparator());\n        Log.i(TAG, \"handSkeletonConnection.length:\" + handSkeletonConnection.length);\n        for (int i = 0; i < handSkeletonConnection.length; i++) {\n            Log.i(TAG, \"handSkeletonConnection:\" + handSkeletonConnection[i]);\n        }\n        sb.append(System.lineSeparator()).append(\"-----------------------------------------------------\");\n    }\n\n    private void updateMessageData(ARFrame arFrame, StringBuilder sb) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult).append(System.lineSeparator());\n\n        ARLightEstimate lightEstimate = arFrame.getLightEstimate();\n\n        if ((lightEstimate.getState() != ARLightEstimate.State.VALID)) {\n            return;\n        }\n\n        // Obtain the estimated light data when the light intensity mode is enabled.\n        if ((((ARPluginConfigHand) pluginConfig).getLightMode() & ARConfigBase.LIGHT_MODE_AMBIENT_INTENSITY) != 0) {\n            sb.append(\"PixelIntensity=\").append(lightEstimate.getPixelIntensity()).append(System.lineSeparator());\n        }\n        // Obtain the texture data when the environment texture mode is enabled.\n        if ((((ARPluginConfigHand) pluginConfig).getLightMode() & ARConfigBase.LIGHT_MODE_ENVIRONMENT_LIGHTING) != 0) {\n            sb.append(\"PrimaryLightIntensity=\")\n                .append(lightEstimate.getPrimaryLightIntensity())\n                .append(System.lineSeparator());\n            sb.append(\"PrimaryLightDirection=\")\n                .append(Arrays.toString(lightEstimate.getPrimaryLightDirection()))\n                .append(System.lineSeparator());\n            sb.append(\"PrimaryLightColor=\")\n                .append(Arrays.toString(lightEstimate.getPrimaryLightColor()))\n                .append(System.lineSeparator());\n            sb.append(\"LightShadowType=\").append(lightEstimate.getLightShadowType()).append(System.lineSeparator());\n            sb.append(\"LightShadowStrength=\").append(lightEstimate.getShadowStrength()).append(System.lineSeparator());\n            sb.append(\"LightSphericalHarmonicCoefficients=\")\n                .append(Arrays.toString(lightEstimate.getSphericalHarmonicCoefficients()))\n                .append(System.lineSeparator());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARSceneMeshRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARLightEstimate;\nimport com.huawei.hiar.ARSceneMesh;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigSceneMesh;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.GestureEvent;\nimport com.huawei.hms.plugin.ar.core.helper.ObjectDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.sceneMesh.SceneMeshDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.sceneMesh.SceneMeshDrawFrameListener;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport java.util.ArrayList;\nimport java.util.concurrent.ArrayBlockingQueue;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARSceneMeshRenderer extends ARBaseDrawObject {\n    private SceneMeshDisplay sceneMesh = new SceneMeshDisplay();\n\n    private SceneMeshDrawFrameListener listener;\n\n    public ARSceneMeshRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigSceneMesh configBase,\n        ArrayBlockingQueue<GestureEvent> queuedSingleTaps, Context context) {\n        super(arSession, displayRotationManager, textureDisplay, configBase);\n        this.queuedSingleTaps = queuedSingleTaps;\n        this.context = context;\n        virtualObjects = new ArrayList<>();\n        objectDisplay = new ObjectDisplay(configBase.getObjPath(), configBase.getTexturePath());\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        objectDisplay.init(context);\n        sceneMesh.init(context);\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n        objectDisplay.setSize(width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n\n        setEnvTextureData();\n\n        ARCamera arCamera = arFrame.getCamera();\n\n        float[] projectionMatrix = new float[16];\n        arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);\n        textureDisplay.onDrawFrame(arFrame);\n\n        if (hasError) return;\n\n        StringBuilder sb = new StringBuilder();\n        updateMessageData(sb);\n        messageDataListener.handleMessageData(sb.toString());\n\n        float[] viewMatrix = new float[16];\n        arCamera.getViewMatrix(viewMatrix, 0);\n        handleGestureEvent(arFrame, arCamera, projectionMatrix, viewMatrix);\n        ARLightEstimate lightEstimate = arFrame.getLightEstimate();\n        float lightPixelIntensity = 1f;\n        if (lightEstimate.getState() != ARLightEstimate.State.NOT_VALID) {\n            lightPixelIntensity = lightEstimate.getPixelIntensity();\n        }\n\n        sceneMesh.onDrawFrame(arFrame, viewMatrix, projectionMatrix);\n        ARSceneMesh arSceneMesh = arFrame.acquireSceneMesh();\n        this.listener.onDrawFrame(arSceneMesh);\n\n        drawAllObjects(projectionMatrix, viewMatrix, lightPixelIntensity);\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    private void updateMessageData(StringBuilder sb) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult);\n    }\n\n    public void setSceneMeshListener(SceneMeshDrawFrameListener listener) {\n        this.listener = listener;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARWorldBodyRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.util.Log;\n\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARLightEstimate;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARPointCloud;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorldBody;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.helper.body.BodySkeletonDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.body.BodySkeletonLineDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.GestureEvent;\nimport com.huawei.hms.plugin.ar.core.helper.LabelDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.ObjectDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.PointCloudRenderer;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.concurrent.ArrayBlockingQueue;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARWorldBodyRenderer extends ARBaseDrawObject {\n    private static final String TAG = ARBaseRenderer.class.getSimpleName();\n\n    private PointCloudRenderer pointCloud = new PointCloudRenderer();\n\n    private LabelDisplay labelDisplay;\n\n    private BodySkeletonDisplay bodySkeletonDisplay;\n\n    private BodySkeletonLineDisplay bodySkeletonLineDisplay;\n\n    public ARWorldBodyRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigWorldBody pluginConfig,\n        ArrayBlockingQueue<GestureEvent> queuedSingleTaps, Context context) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfig);\n        this.queuedSingleTaps = queuedSingleTaps;\n        this.context = context;\n        virtualObjects = new ArrayList<>();\n        objectDisplay = new ObjectDisplay(pluginConfig.getObjPath(), pluginConfig.getTexturePath());\n        bodySkeletonDisplay = new BodySkeletonDisplay(pluginConfig.getPointColor(), pluginConfig.getPointSize());\n        bodySkeletonLineDisplay = new BodySkeletonLineDisplay(pluginConfig.getLineColor(), pluginConfig.getLineWidth());\n        labelDisplay = new LabelDisplay();\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        bodySkeletonDisplay.init();\n        bodySkeletonLineDisplay.init();\n\n        objectDisplay.init(context);\n        pointCloud.init(context);\n\n        initLabelDisplay();\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n        objectDisplay.setSize(width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n\n        setEnvTextureData();\n\n        ARCamera arCamera = arFrame.getCamera();\n\n        float[] projectionMatrix = new float[16];\n        arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);\n        textureDisplay.onDrawFrame(arFrame);\n\n        if (hasError) return;\n\n        float[] viewMatrix = new float[16];\n        arCamera.getViewMatrix(viewMatrix, 0);\n        handleGestureEvent(arFrame, arCamera, projectionMatrix, viewMatrix);\n        ARLightEstimate lightEstimate = arFrame.getLightEstimate();\n        float lightPixelIntensity = 1f;\n        if (lightEstimate.getState() != ARLightEstimate.State.NOT_VALID) {\n            lightPixelIntensity = lightEstimate.getPixelIntensity();\n        }\n\n        Collection<ARBody> bodies = arSession.getAllTrackables(ARBody.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(bodies));\n        if (((ARPluginConfigWorldBody) pluginConfig).isDrawPoint()) {\n            bodySkeletonDisplay.onDrawFrame(bodies, projectionMatrix);\n        }\n        if (((ARPluginConfigWorldBody) pluginConfig).isDrawLine()) {\n            bodySkeletonLineDisplay.onDrawFrame(bodies, projectionMatrix);\n        }\n        if (((ARPluginConfigWorldBody) pluginConfig).isLabelDraw()) {\n            labelDisplay.onDrawFrame(arSession.getAllTrackables(ARPlane.class), arCamera.getDisplayOrientedPose(),\n                projectionMatrix);\n        }\n\n        ARPointCloud arPointCloud = arFrame.acquirePointCloud();\n\n        drawAllObjects(projectionMatrix, viewMatrix, lightPixelIntensity);\n        pointCloud.onDrawFrame(arPointCloud, viewMatrix, projectionMatrix);\n\n        StringBuilder sb = new StringBuilder();\n        updateMessageData(bodies, sb);\n        messageDataListener.handleMessageData(sb.toString());\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n    }\n\n    private void updateMessageData(Collection<ARBody> bodies, StringBuilder sb) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult).append(System.lineSeparator());\n\n        int trackingBodySum = 0;\n        for (ARBody body : bodies) {\n            if (body.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n                continue;\n            }\n            trackingBodySum++;\n            sb.append(\"body action: \").append(body.getBodyAction()).append(System.lineSeparator());\n        }\n        sb.append(\"tracking body sum: \").append(trackingBodySum).append(System.lineSeparator());\n        sb.append(\"virtual object number: \").append(virtualObjects.size()).append(System.lineSeparator());\n    }\n\n    private void initLabelDisplay() {\n        if (pluginConfig instanceof ARPluginConfigWorldBody) {\n            ARPluginConfigWorldBody pluginWorld = (ARPluginConfigWorldBody) pluginConfig;\n            labelDisplay.init(getPlaneBitmaps(pluginWorld));\n        }\n    }\n\n    private Bitmap getBitmap(String imageOther, String textOther, ColorRGBA colorOther) {\n        android.graphics.Matrix matrix = new android.graphics.Matrix();\n        matrix.setScale(-1, -1);\n        if (imageOther != null && !imageOther.isEmpty()) {\n            return getImageBitmap(matrix, imageOther);\n        }\n        return getTextBitmap(matrix, textOther, colorOther);\n    }\n\n    private ArrayList<Bitmap> getPlaneBitmaps(ARPluginConfigWorldBody pluginWorld) {\n        ArrayList<Bitmap> bitmaps = new ArrayList<>();\n        bitmaps.add(getBitmap(pluginWorld.getImageOther(), pluginWorld.getTextOther(), pluginWorld.getColorOther()));\n        bitmaps.add(getBitmap(pluginWorld.getImageWall(), pluginWorld.getTextWall(), pluginWorld.getColorWall()));\n        bitmaps.add(getBitmap(pluginWorld.getImageFloor(), pluginWorld.getTextFloor(), pluginWorld.getColorFloor()));\n        bitmaps.add(getBitmap(pluginWorld.getImageSeat(), pluginWorld.getTextSeat(), pluginWorld.getColorSeat()));\n        bitmaps.add(getBitmap(pluginWorld.getImageTable(), pluginWorld.getTextTable(), pluginWorld.getColorTable()));\n        bitmaps.add(\n            getBitmap(pluginWorld.getImageCeiling(), pluginWorld.getTextCeiling(), pluginWorld.getColorCeiling()));\n        return bitmaps;\n    }\n\n    private Bitmap getImageBitmap(android.graphics.Matrix matrix, String assetFileName) {\n        try (InputStream inputStream = context.getAssets().open(assetFileName)) {\n            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);\n            return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);\n        } catch (IllegalArgumentException | IOException e) {\n            Log.e(TAG, \"Get data error!\");\n        }\n        return null;\n    }\n\n    private Bitmap getTextBitmap(android.graphics.Matrix matrix, String text, ColorRGBA color) {\n        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        paint.setTextSize(100);\n        paint.setColor(color.getColor().toArgb());\n        float baseline = -paint.ascent();\n        Bitmap image = Bitmap.createBitmap((int) (paint.measureText(text) + 1.f),\n            (int) (baseline + paint.descent() + 1.f), Bitmap.Config.ARGB_8888);\n        Canvas canvas = new Canvas(image);\n        canvas.drawText(text, 0, baseline, paint);\n        return Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, true);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/renderer/ARWorldRenderer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.renderer;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.util.Log;\nimport android.util.Pair;\n\nimport com.huawei.hiar.ARAnchor;\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARPointCloud;\nimport com.huawei.hiar.ARTarget;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorld;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.helper.augmentedImage.ImageKeyLineDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.augmentedImage.ImageKeyPointDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.DisplayRotationManager;\nimport com.huawei.hms.plugin.ar.core.helper.GestureEvent;\nimport com.huawei.hms.plugin.ar.core.helper.LabelDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.ObjectDisplay;\nimport com.huawei.hms.plugin.ar.core.helper.PointCloudRenderer;\nimport com.huawei.hms.plugin.ar.core.helper.TextureDisplay;\n\nimport com.huawei.hiar.ARCamera;\nimport com.huawei.hiar.ARFrame;\nimport com.huawei.hiar.ARLightEstimate;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARSession;\nimport com.huawei.hiar.ARTrackable;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.concurrent.ArrayBlockingQueue;\n\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.opengles.GL10;\n\npublic class ARWorldRenderer extends ARBaseDrawObject {\n    private static final String TAG = ARBaseRenderer.class.getSimpleName();\n\n    private PointCloudRenderer pointCloud = new PointCloudRenderer();\n\n    private LabelDisplay labelDisplay;\n\n    private ImageKeyPointDisplay imageKeyPointDisplay;\n\n    private ImageKeyLineDisplay imageKeyLineDisplay;\n\n    private Map<Integer, Pair<ARAugmentedImage, ARAnchor>> augmentedImageMap = new HashMap<>();\n\n    public ARWorldRenderer(ARSession arSession, DisplayRotationManager displayRotationManager,\n        TextureDisplay textureDisplay, ARPluginConfigWorld pluginConfig,\n        ArrayBlockingQueue<GestureEvent> queuedSingleTaps, Context context) {\n        super(arSession, displayRotationManager, textureDisplay, pluginConfig);\n        this.queuedSingleTaps = queuedSingleTaps;\n        this.context = context;\n        virtualObjects = new ArrayList<>();\n        objectDisplay = new ObjectDisplay(pluginConfig.getObjPath(), pluginConfig.getTexturePath());\n        labelDisplay = new LabelDisplay();\n        imageKeyPointDisplay = new ImageKeyPointDisplay(pluginConfig.getPointColor(), pluginConfig.getPointSize());\n        imageKeyLineDisplay = new ImageKeyLineDisplay(pluginConfig.getLineColor(), pluginConfig.getLineWidth());\n    }\n\n    @Override\n    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {\n        super.onSurfaceCreated(gl10, eglConfig);\n        objectDisplay.init(context);\n        pointCloud.init(context);\n        initLabelDisplay();\n\n        imageKeyPointDisplay.init();\n        imageKeyLineDisplay.init();\n    }\n\n    private void initLabelDisplay() {\n        if (pluginConfig instanceof ARPluginConfigWorld) {\n            ARPluginConfigWorld pluginWorld = (ARPluginConfigWorld) pluginConfig;\n            labelDisplay.init(getPlaneBitmaps(pluginWorld));\n        }\n    }\n\n    @Override\n    public void onSurfaceChanged(GL10 gl10, int width, int height) {\n        super.onSurfaceChanged(gl10, width, height);\n        objectDisplay.setSize(width, height);\n    }\n\n    @Override\n    public void onDrawFrame(GL10 gl10) {\n        super.onDrawFrame(gl10);\n        ARFrame arFrame = arSession.update();\n\n        setEnvTextureData();\n\n        ARCamera arCamera = arFrame.getCamera();\n\n        float[] projectionMatrix = new float[16];\n        arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);\n        textureDisplay.onDrawFrame(arFrame);\n\n        if (hasError) return;\n\n        StringBuilder sb = new StringBuilder();\n        updateMessageData(arFrame, sb);\n        messageDataListener.handleMessageData(sb.toString());\n\n        Collection<ARTarget> arTargetCollection = arSession.getAllTrackables(ARTarget.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(arTargetCollection));\n        float[] viewMatrix = new float[16];\n        arCamera.getViewMatrix(viewMatrix, 0);\n        handleGestureEvent(arFrame, arCamera, projectionMatrix, viewMatrix);\n        ARLightEstimate lightEstimate = arFrame.getLightEstimate();\n        float lightPixelIntensity = 1f;\n        if (lightEstimate.getState() != ARLightEstimate.State.NOT_VALID) {\n            lightPixelIntensity = lightEstimate.getPixelIntensity();\n        }\n\n        if (((ARPluginConfigWorld) pluginConfig).isLabelDraw()) {\n            labelDisplay.onDrawFrame(arSession.getAllTrackables(ARPlane.class), arCamera.getDisplayOrientedPose(),\n                projectionMatrix);\n        }\n\n        ARPointCloud arPointCloud = arFrame.acquirePointCloud();\n\n        drawAllObjects(projectionMatrix, viewMatrix, lightPixelIntensity);\n        pointCloud.onDrawFrame(arPointCloud, viewMatrix, projectionMatrix);\n\n        if (!Lock) {\n            cameraConfigListener.handleCameraConfigData(arSession.getCameraConfig());\n            cameraIntrinsicsListener.handleCameraIntrinsicsData(arCamera.getCameraImageIntrinsics());\n            Lock = true;\n        }\n\n        drawAugmentedImages(arFrame, projectionMatrix, viewMatrix);\n    }\n\n    private void updateMessageData(ARFrame arFrame, StringBuilder sb) {\n        float fpsResult = doFpsCalculate();\n        sb.append(\"FPS=\").append(fpsResult).append(System.lineSeparator());\n\n        ARLightEstimate lightEstimate = arFrame.getLightEstimate();\n\n        if ((lightEstimate.getState() != ARLightEstimate.State.VALID)) {\n            return;\n        }\n\n        // Obtain the estimated light data when the light intensity mode is enabled.\n        if ((((ARPluginConfigWorld) pluginConfig).getLightMode() & ARConfigBase.LIGHT_MODE_AMBIENT_INTENSITY) != 0) {\n            sb.append(\"PixelIntensity=\").append(lightEstimate.getPixelIntensity()).append(System.lineSeparator());\n        }\n        // Obtain the texture data when the environment texture mode is enabled.\n        if ((((ARPluginConfigWorld) pluginConfig).getLightMode() & ARConfigBase.LIGHT_MODE_ENVIRONMENT_LIGHTING) != 0) {\n            sb.append(\"PrimaryLightIntensity=\")\n                .append(lightEstimate.getPrimaryLightIntensity())\n                .append(System.lineSeparator());\n            sb.append(\"PrimaryLightDirection=\")\n                .append(Arrays.toString(lightEstimate.getPrimaryLightDirection()))\n                .append(System.lineSeparator());\n            sb.append(\"PrimaryLightColor=\")\n                .append(Arrays.toString(lightEstimate.getPrimaryLightColor()))\n                .append(System.lineSeparator());\n            sb.append(\"LightShadowType=\").append(lightEstimate.getLightShadowType()).append(System.lineSeparator());\n            sb.append(\"LightShadowStrength=\").append(lightEstimate.getShadowStrength()).append(System.lineSeparator());\n            sb.append(\"LightSphericalHarmonicCoefficients=\")\n                .append(Arrays.toString(lightEstimate.getSphericalHarmonicCoefficients()))\n                .append(System.lineSeparator());\n        }\n    }\n\n    private Bitmap getTextBitmap(android.graphics.Matrix matrix, String text, ColorRGBA color) {\n        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        paint.setTextSize(100);\n        paint.setColor(color.getColor().toArgb());\n        float baseline = -paint.ascent();\n        Bitmap image = Bitmap.createBitmap((int) (paint.measureText(text) + 1.f),\n            (int) (baseline + paint.descent() + 1.f), Bitmap.Config.ARGB_8888);\n        Canvas canvas = new Canvas(image);\n        canvas.drawText(text, 0, baseline, paint);\n        return Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, true);\n    }\n\n    private Bitmap getImageBitmap(android.graphics.Matrix matrix, String assetFileName) {\n        try (InputStream inputStream = context.getAssets().open(assetFileName)) {\n            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);\n            return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);\n        } catch (IllegalArgumentException | IOException e) {\n            Log.e(TAG, \"Get data error!\");\n        }\n        return null;\n    }\n\n    private Bitmap getBitmap(String imageOther, String textOther, ColorRGBA colorOther) {\n        android.graphics.Matrix matrix = new android.graphics.Matrix();\n        matrix.setScale(-1, -1);\n        if (imageOther != null && !imageOther.isEmpty()) {\n            return getImageBitmap(matrix, imageOther);\n        }\n        return getTextBitmap(matrix, textOther, colorOther);\n    }\n\n    private ArrayList<Bitmap> getPlaneBitmaps(ARPluginConfigWorld pluginWorld) {\n        ArrayList<Bitmap> bitmaps = new ArrayList<>();\n        bitmaps.add(getBitmap(pluginWorld.getImageOther(), pluginWorld.getTextOther(), pluginWorld.getColorOther()));\n        bitmaps.add(getBitmap(pluginWorld.getImageWall(), pluginWorld.getTextWall(), pluginWorld.getColorWall()));\n        bitmaps.add(getBitmap(pluginWorld.getImageFloor(), pluginWorld.getTextFloor(), pluginWorld.getColorFloor()));\n        bitmaps.add(getBitmap(pluginWorld.getImageSeat(), pluginWorld.getTextSeat(), pluginWorld.getColorSeat()));\n        bitmaps.add(getBitmap(pluginWorld.getImageTable(), pluginWorld.getTextTable(), pluginWorld.getColorTable()));\n        bitmaps.add(\n            getBitmap(pluginWorld.getImageCeiling(), pluginWorld.getTextCeiling(), pluginWorld.getColorCeiling()));\n        return bitmaps;\n    }\n\n    private void drawAugmentedImages(ARFrame frame, float[] projmtx, float[] viewmtx) {\n        Collection<ARAugmentedImage> updatedAugmentedImages = frame.getUpdatedTrackables(ARAugmentedImage.class);\n        callbackHelper.onDrawFrame(new ArrayList<>(updatedAugmentedImages));\n        Log.d(TAG, \"drawAugmentedImages: Updated augment image is \" + updatedAugmentedImages.size());\n\n        // Iteratively update the augmented image mapping and remove the elements that cannot be drawn.\n        for (ARAugmentedImage augmentedImage : updatedAugmentedImages) {\n            switch (augmentedImage.getTrackingState()) {\n                case PAUSED:\n                    // When an image is in paused state but the camera is not paused,\n                    // the image is detected but not tracked.\n                    break;\n                case TRACKING:\n                    initTrackingImages(augmentedImage);\n                    break;\n                case STOPPED:\n                    augmentedImageMap.remove(augmentedImage.getIndex());\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        // Map the anchor to the AugmentedImage object and draw all augmentation effects.\n        for (Pair<ARAugmentedImage, ARAnchor> pair : augmentedImageMap.values()) {\n            ARAugmentedImage augmentedImage = pair.first;\n            if (augmentedImage.getTrackingState() != ARTrackable.TrackingState.TRACKING) {\n                continue;\n            }\n\n            if (((ARPluginConfigWorld)pluginConfig).isDrawLine()) {\n                imageKeyLineDisplay.onDrawFrame(augmentedImage, viewmtx, projmtx);\n            }\n\n            if (((ARPluginConfigWorld)pluginConfig).isDrawPoint()) {\n                imageKeyPointDisplay.onDrawFrame(augmentedImage, viewmtx, projmtx);\n            }\n        }\n    }\n\n    private void initTrackingImages(ARAugmentedImage augmentedImage) {\n        // Create an anchor for the newly found image and bind it to the image object.\n        if (!augmentedImageMap.containsKey(augmentedImage.getIndex())) {\n            ARAnchor centerPoseAnchor = augmentedImage.createAnchor(augmentedImage.getCenterPose());\n            augmentedImageMap.put(augmentedImage.getIndex(), Pair.create(augmentedImage, centerPoseAnchor));\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/CommonSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARAnchor;\nimport com.huawei.hiar.ARCameraConfig;\nimport com.huawei.hiar.ARCameraIntrinsics;\nimport com.huawei.hiar.ARPose;\nimport com.huawei.hiar.ARSceneMesh;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class CommonSerializer {\n    private CommonSerializer() {\n    }\n\n    public static Map<String, Object> arCameraConfigToMap(ARCameraConfig cameraConfig) {\n        Map<String, Object> jsonMap = new HashMap<>();\n        jsonMap.put(\"imageDimensions\", cameraConfig.getImageDimensions().toString());\n        jsonMap.put(\"textureDimensions\", cameraConfig.getTextureDimensions().toString());\n        return jsonMap;\n    }\n\n    public static Map<String, Object> arCameraIntrinsicsToMap(ARCameraIntrinsics cameraIntrinsics) {\n        Map<String, Object> jsonMap = new HashMap<>();\n        jsonMap.put(\"imageDimensions\", cameraIntrinsics.getImageDimensions());\n        jsonMap.put(\"distortions\", cameraIntrinsics.getDistortions());\n        jsonMap.put(\"focalLength\", cameraIntrinsics.getFocalLength());\n        jsonMap.put(\"principalPoint\", cameraIntrinsics.getPrincipalPoint());\n        return jsonMap;\n    }\n\n    public static Map<String, Object> arSceneMeshToMap(ARSceneMesh arSceneMesh) {\n        Map<String, Object> jsonMap = new HashMap<>();\n        jsonMap.put(\"sceneDepth\", arSceneMesh.getSceneDepth());\n        jsonMap.put(\"sceneDepthHeight\", arSceneMesh.getSceneDepthHeight());\n        jsonMap.put(\"sceneDepthWidth\", arSceneMesh.getSceneDepthWidth());\n        jsonMap.put(\"triangleIndices\", arSceneMesh.getTriangleIndices());\n        jsonMap.put(\"vertexNormals\", arSceneMesh.getVertexNormals());\n        jsonMap.put(\"vertexs\", arSceneMesh.getVertices());\n        return jsonMap;\n    }\n\n    static Map<String, Object> arPoseToMap(ARPose pose) {\n        Map<String, Object> jsonMap = new HashMap<>();\n        float[] translation = new float[3];\n        float[] rotation = new float[4];\n        float[] rotationVector = new float[4];\n        float[] rotationVectorOut = new float[4];\n        int rotationVectorOutOffSet = 0;\n\n        float[] transformPoint = new float[4];\n        float[] transformPointOut = new float[4];\n        int transformPointOutOffSet = 0;\n\n        pose.rotateVector(rotationVector, 0, rotationVectorOut, rotationVectorOutOffSet);\n        Map<String, Object> jsonMapRotateVector = new HashMap<>();\n        jsonMapRotateVector.put(\"vector\", rotationVectorOut);\n        jsonMapRotateVector.put(\"offset\", rotationVectorOutOffSet);\n\n        pose.transformPoint(transformPoint, 0, transformPointOut, transformPointOutOffSet);\n        Map<String, Object> jsonMapTransformPoint = new HashMap<>();\n        jsonMapTransformPoint.put(\"point\", transformPointOut);\n        jsonMapTransformPoint.put(\"offset\", transformPointOutOffSet);\n\n        pose.getTranslation(translation, 0);\n        pose.getRotationQuaternion(rotation, 0);\n\n        jsonMap.put(\"translation\", translation);\n        jsonMap.put(\"rotation\", rotation);\n        jsonMap.put(\"xAxis\", pose.getXAxis());\n        jsonMap.put(\"yAxis\", pose.getYAxis());\n        jsonMap.put(\"zAxis\", pose.getZAxis());\n        jsonMap.put(\"qw\", pose.qw());\n        jsonMap.put(\"qx\", pose.qx());\n        jsonMap.put(\"qy\", pose.qy());\n        jsonMap.put(\"qz\", pose.qz());\n        jsonMap.put(\"rotationVector\", jsonMapRotateVector);\n        jsonMap.put(\"transformPoint\", pose.transformPoint(new float[4]));\n        jsonMap.put(\"transformPointObject\", jsonMapTransformPoint);\n\n        return jsonMap;\n    }\n\n    static List<Map<String, Object>> anchorsToList(Collection<ARAnchor> anchorList) {\n        List<Map<String, Object>> anchorsCollection = new ArrayList<>();\n        for (ARAnchor anchor : anchorList) {\n            Map<String, Object> jsonMap = new HashMap<>();\n            jsonMap.put(\"pose\", arPoseToMap(anchor.getPose()));\n            jsonMap.put(\"trackingState\", anchor.getTrackingState());\n            anchorsCollection.add(jsonMap);\n        }\n        return anchorsCollection;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARAugmentedImageSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARAugmentedImage;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARAugmentedImageSerializer {\n    private PluginARAugmentedImageSerializer() {\n    }\n\n    static Map<String, Object> convertARAugmentedImageToMap(ARAugmentedImage target) {\n        Map<String, Object> result = new HashMap<>();\n        result.put(\"anchors\", CommonSerializer.anchorsToList(target.getAnchors()));\n        result.put(\"centerPose\", CommonSerializer.arPoseToMap(target.getCenterPose()));\n        result.put(\"extendX\", target.getExtentX());\n        result.put(\"extendZ\", target.getExtentZ());\n        result.put(\"index\", target.getIndex());\n        result.put(\"name\", target.getName());\n        result.put(\"trackingState\", target.getTrackingState());\n        return result;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARBodySerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARBody;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARBodySerializer {\n    private PluginARBodySerializer() {\n    }\n\n    static Map<String, Object> convertARBodyToMap(ARBody body) {\n        Map<String, Object> result = new HashMap<>();\n\n        result.put(\"bodyAction\", body.getBodyAction());\n        result.put(\"anchors\", CommonSerializer.anchorsToList(body.getAnchors()));\n        result.put(\"trackingState\", body.getTrackingState().ordinal());\n        result.put(\"bodySkeletonTypes\", createIntegerEnumValuesArrayFromBodySkeletonTypes(body.getBodySkeletonType()));\n        result.put(\"skeletonPoint2D\", body.getSkeletonPoint2D());\n        result.put(\"skeletonPoint3D\", body.getSkeletonPoint3D());\n        result.put(\"skeletonConfidence\", body.getSkeletonConfidence());\n        result.put(\"bodySkeletonConnection\", body.getBodySkeletonConnection());\n        result.put(\"skeletonPointIsExist2D\", body.getSkeletonPointIsExist2D());\n        result.put(\"skeletonPointIsExist3D\", body.getSkeletonPointIsExist3D());\n        result.put(\"coordinateSystemType\", body.getCoordinateSystemType().getKeyValues());\n        result.put(\"maskConfidence\", body.getMaskConfidence());\n        result.put(\"maskDepth\", body.getMaskDepth());\n        return result;\n    }\n\n    private static int[] createIntegerEnumValuesArrayFromBodySkeletonTypes(\n        ARBody.ARBodySkeletonType[] bodySkeletonTypes) {\n        int[] bodyTypesNumeric = new int[bodySkeletonTypes.length];\n        for (int i = 0; i < bodySkeletonTypes.length; ++i) {\n            bodyTypesNumeric[i] = bodySkeletonTypes[i].ordinal();\n        }\n        return bodyTypesNumeric;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARFaceSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport android.util.Log;\n\nimport com.huawei.hiar.ARFace;\nimport com.huawei.hiar.ARFaceBlendShapes;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARFaceSerializer {\n    private PluginARFaceSerializer() {\n    }\n\n    static Map<String, Object> convertARFaceToMap(ARFace arFace) {\n        Map<String, Object> resultMap = new HashMap<>();\n        resultMap.put(\"trackingState\", arFace.getTrackingState().ordinal());\n        resultMap.put(\"anchors\", CommonSerializer.anchorsToList(arFace.getAnchors()));\n        resultMap.put(\"faceBlendShapes\", faceBlendShapesToMap(arFace.getFaceBlendShapes()));\n        resultMap.put(\"pose\", CommonSerializer.arPoseToMap(arFace.getPose()));\n        resultMap.put(\"healthParameterCount\", arFace.getHealthParameterCount());\n        resultMap.put(\"healthParameters\", healthParametersToMap(arFace.getHealthParameters()));\n        return resultMap;\n    }\n\n    private static JSONObject healthParametersToMap(HashMap<ARFace.HealthParameter, Float> healthParameters) {\n        JSONObject jsonMap = new JSONObject();\n        try {\n            for (Map.Entry<ARFace.HealthParameter, Float> entry : healthParameters.entrySet()) {\n                jsonMap.put(entry.getKey().name(), entry.getValue());\n            }\n        } catch (JSONException e) {\n            Log.d(\"PluginARFaceSerializer\", e.getLocalizedMessage());\n        }\n\n        return jsonMap;\n    }\n\n    private static Map<String, Object> faceBlendShapesToMap(ARFaceBlendShapes faceBlendShapes) {\n        Map<String, Object> jsonMap = new HashMap<>();\n        jsonMap.put(\"blendShapeCount\", faceBlendShapes.getBlendShapeCount());\n        jsonMap.put(\"blendShapeData\", faceBlendShapes.getBlendShapeData().array());\n        jsonMap.put(\"blendShapeType\", faceBlendShapes.getBlendShapeType());\n        jsonMap.put(\"blendShapeDataMap\", faceBlendShapes.getBlendShapeDataMapKeyString());\n        return jsonMap;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARHandSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARHand;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARHandSerializer {\n    private PluginARHandSerializer() {\n    }\n\n    static Map<String, Object> convertARHandToMap(ARHand hand) {\n        Map<String, Object> resultMap = new HashMap<>();\n        resultMap.put(\"handType\", hand.getHandtype().getKeyValues());\n        resultMap.put(\"handSkeletonArray\", hand.getHandskeletonArray());\n        resultMap.put(\"handSkeletonConnection\", hand.getHandSkeletonConnection());\n        resultMap.put(\"handSkeletonTypes\", hand.getHandskeletonTypes());\n        resultMap.put(\"anchors\", CommonSerializer.anchorsToList(hand.getAnchors()));\n        resultMap.put(\"gestureType\", hand.getGestureType());\n        resultMap.put(\"gestureHandBox\", hand.getGestureHandBox());\n        resultMap.put(\"gestureCenter\", hand.getGestureCenter());\n        resultMap.put(\"gestureCoordinateSystem\", hand.getGestureCoordinateSystem().getKeyValues());\n        resultMap.put(\"skeletonCoordinateSystem\", hand.getSkeletonCoordinateSystem().getKeyValues());\n        resultMap.put(\"trackingState\", hand.getTrackingState().ordinal());\n        return resultMap;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARPlaneSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARPlane;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARPlaneSerializer {\n    private PluginARPlaneSerializer() {\n    }\n\n    static Map<String, Object> convertARPlaneToMap(ARPlane plane) {\n        Map<String, Object> map = new HashMap<>();\n        map.put(\"centerPose\", CommonSerializer.arPoseToMap(plane.getCenterPose()));\n        map.put(\"extentX\", plane.getExtentX());\n        map.put(\"extentZ\", plane.getExtentZ());\n        map.put(\"planePolygon\", plane.getPlanePolygon().array());\n        map.put(\"label\", plane.getLabel().ordinal());\n        map.put(\"type\", plane.getType().ordinal());\n        map.put(\"trackingState\", plane.getTrackingState().ordinal());\n        map.put(\"anchors\", CommonSerializer.anchorsToList(plane.getAnchors()));\n        return map;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARTargetSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARTarget;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nclass PluginARTargetSerializer {\n    private PluginARTargetSerializer() {\n    }\n\n    static Map<String, Object> convertARTargetToMap(ARTarget target) {\n        Map<String, Object> result = new HashMap<>();\n        result.put(\"anchors\", CommonSerializer.anchorsToList(target.getAnchors()));\n        result.put(\"axisAlignBoundingBox\", target.getAxisAlignBoundingBox());\n        result.put(\"centerPose\", CommonSerializer.arPoseToMap(target.getCenterPose()));\n        result.put(\"label\", target.getLabel().ordinal());\n        result.put(\"radius\", target.getRadius());\n        result.put(\"shapeType\", target.getShapeType().ordinal());\n        result.put(\"trackingState\", target.getTrackingState().ordinal());\n        return result;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/serializer/PluginARTrackableSerializer.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.serializer;\n\nimport com.huawei.hiar.ARAugmentedImage;\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARFace;\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARTarget;\nimport com.huawei.hiar.ARTrackable;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.List;\nimport java.util.Map;\n\npublic class PluginARTrackableSerializer {\n    private PluginARTrackableSerializer() {\n    }\n\n    public static List<Map<String, Object>> serialize(Collection<ARTrackable> arTrackableCollection) {\n        List<Map<String, Object>> arTrackableJsonArray = new ArrayList<>();\n        for (ARTrackable arTrackable : arTrackableCollection) {\n            arTrackableJsonArray.add(serialize(arTrackable));\n        }\n        return arTrackableJsonArray;\n    }\n\n    public static Map<String, Object> serialize(ARTrackable arTrackable) {\n        if (arTrackable instanceof ARFace) {\n            return PluginARFaceSerializer.convertARFaceToMap((ARFace) arTrackable);\n        } else if (arTrackable instanceof ARHand) {\n            return PluginARHandSerializer.convertARHandToMap((ARHand) arTrackable);\n        } else if (arTrackable instanceof ARPlane) {\n            return PluginARPlaneSerializer.convertARPlaneToMap((ARPlane) arTrackable);\n        } else if (arTrackable instanceof ARBody) {\n            return PluginARBodySerializer.convertARBodyToMap((ARBody) arTrackable);\n        } else if (arTrackable instanceof ARTarget) {\n            return PluginARTargetSerializer.convertARTargetToMap((ARTarget) arTrackable);\n        } else if (arTrackable instanceof ARAugmentedImage) {\n            return PluginARAugmentedImageSerializer.convertARAugmentedImageToMap((ARAugmentedImage) arTrackable);\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/AREngineAvailability.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\n\nimport com.huawei.hiar.AREnginesApk;\n\npublic final class AREngineAvailability {\n    private static final String DOWNLOAD_APP_ACTION = \"com.huawei.appmarket.intent.action.AppDetail\";\n\n    private static final String HUAWEI_MARKET_NAME = \"com.huawei.appmarket\";\n\n    private static final String PACKAGE_NAME_KEY = \"APP_PACKAGENAME\";\n\n    private static final String PACKAGENAME_ARSERVICE = \"com.huawei.arengine.service\";\n\n    private AREngineAvailability() {\n    }\n\n    public static boolean isArEngineServiceApkReady(Context context) {\n        return AREnginesApk.isAREngineApkReady(context);\n    }\n\n    public static void navigateToAppMarketPage(Activity activity) {\n        Intent intent = new Intent(DOWNLOAD_APP_ACTION);\n        intent.putExtra(PACKAGE_NAME_KEY, PACKAGENAME_ARSERVICE);\n        intent.setPackage(HUAWEI_MARKET_NAME);\n        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n        activity.startActivity(intent);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/ApplicationUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.content.res.AssetManager;\nimport android.util.Log;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStreamReader;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ApplicationUtil {\n    private static final String TAG = ApplicationUtil.class.getSimpleName();\n\n    private static final int EXPECTED_BUFFER_DATA = 1024;\n\n    private static final int LIST_MAX_SIZE = 1024;\n\n    private static final String DEFAULT_FILE = \"default_id\";\n\n    private static final String DEFAULT_KEY = \"mode_id\";\n\n    /**\n     * Read the default authentication data.\n     *\n     * @param context context.\n     * @return Return the default authentication data.\n     */\n    public static String readApplicationMessage(Context context) {\n        String json = \"\";\n        if (context == null) {\n            return json;\n        }\n        SharedPreferences sharedPreferences = context.getSharedPreferences(DEFAULT_FILE, Context.MODE_PRIVATE);\n        json = sharedPreferences.getString(DEFAULT_KEY, \"\");\n        return json;\n    }\n\n    /**\n     * Read json file.\n     *\n     * @param fileName file name.\n     * @param context context.\n     * @return json file content.\n     */\n    public static String getJson(String fileName, Context context) {\n        // change json file to string\n        StringBuilder stringBuilder = new StringBuilder(EXPECTED_BUFFER_DATA);\n        InputStreamReader inputStreamReader = null;\n        BufferedReader reader = null;\n        try {\n            AssetManager assetManager = context.getAssets();\n\n            // open file and read file input stream\n            inputStreamReader = new InputStreamReader(assetManager.open(fileName), \"UTF-8\");\n            reader = new BufferedReader(inputStreamReader);\n            String line;\n            while ((line = reader.readLine()) != null) {\n                if (line.contains(\"/\") || line.contains(\"*\")) {\n                    continue;\n                }\n                stringBuilder.append(line);\n            }\n        } catch (IOException e) {\n            Log.w(TAG, \"open json file error\");\n        } finally {\n            if (reader != null) {\n                try {\n                    reader.close();\n                } catch (IOException e) {\n                    Log.w(TAG, \"close BufferedReader error\");\n                }\n            }\n            if (inputStreamReader != null) {\n                try {\n                    inputStreamReader.close();\n                } catch (IOException e) {\n                    Log.w(TAG, \"close inputStream error\");\n                }\n            }\n        }\n        return stringBuilder.toString();\n    }\n\n    /**\n     * Read continents, modelName, appId, and appSecret in a specified JSON file.\n     *\n     * @param jsonFile Name of the JSON file that stores mode name data.\n     * @return Return the modeID array, which contains continents, modelName, appId, and appSecret.\n     */\n    public static List<ModeInformation> json2List(String jsonFile) {\n        List<ModeInformation> modeIdList = new ArrayList<>(LIST_MAX_SIZE);\n        if (jsonFile == null) {\n            return modeIdList;\n        }\n        try {\n            JSONObject jsonObject = new JSONObject(jsonFile);\n            JSONArray jsonArray = jsonObject.getJSONArray(\"data\");\n            if (jsonArray == null) {\n                return modeIdList;\n            }\n            for (int i = 0; i < jsonArray.length(); i++) {\n                JSONObject object = jsonArray.getJSONObject(i);\n                if (object == null) {\n                    continue;\n                }\n                ModeInformation id = new ModeInformation(object.getString(\"modeInformation\"),\n                    object.getString(\"continents\"));\n                if (id.getContinents().isEmpty() || id.getModeInformation().isEmpty()) {\n                    continue;\n                }\n                modeIdList.add(id);\n            }\n        } catch (JSONException e) {\n        }\n        return modeIdList;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/BodyShaderUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\npublic class BodyShaderUtil {\n    public static final String LS = System.lineSeparator();\n\n    public static final String BODY_VERTEX = \"uniform vec4 inColor;\" + LS + \"attribute vec4 inPosition;\" + LS\n        + \"uniform float inPointSize;\" + LS + \"varying vec4 varColor;\" + LS + \"uniform mat4 inProjectionMatrix;\" + LS\n        + \"uniform float inCoordinateSystem;\" + LS + \"void main() {\" + LS\n        + \"    vec4 position = vec4(inPosition.xyz, 1.0);\" + LS + \"    if (inCoordinateSystem == 2.0) {\" + LS\n        + \"        position = inProjectionMatrix * position;\" + LS + \"    }\" + LS + \"    gl_Position = position;\" + LS\n        + \"    varColor = inColor;\" + LS + \"    gl_PointSize = inPointSize;\" + LS + \"}\";\n\n    public static final String BODY_FRAGMENT = \"precision mediump float;\" + LS + \"varying vec4 varColor;\" + LS\n        + \"void main() {\" + LS + \"    gl_FragColor = varColor;\" + LS + \"}\";\n\n    private BodyShaderUtil() {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/ErrorUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\nimport com.huawei.hms.plugin.ar.core.helper.ArDemoRuntimeException;\n\npublic final class ErrorUtil {\n    private static final String TAG = ErrorUtil.class.getSimpleName();\n\n    private ErrorUtil() {\n    }\n\n    public static void checkGLError(String tag, String label) {\n        int lastError = GLES20.GL_NO_ERROR;\n        int error = GLES20.glGetError();\n\n        while (error != GLES20.GL_NO_ERROR) {\n            Log.e(TAG, label + \" : checkGLError : \" + error);\n            lastError = error;\n            error = GLES20.glGetError();\n        }\n\n        if (lastError != GLES20.GL_NO_ERROR) {\n            throw new ArDemoRuntimeException(label + \": glError :\" + lastError);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/HandShaderUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\npublic class HandShaderUtil {\n    public static final String LS = System.lineSeparator();\n\n    public static final String HAND_VERTEX =\n        \"uniform vec4 inColor;\" + LS\n            + \"attribute vec4 inPosition;\" + LS\n            + \"uniform float inPointSize;\" + LS\n            + \"varying vec4 varColor;\" + LS\n            + \"uniform mat4 inMVPMatrix;\" + LS\n            + \"void main() {\" + LS\n            + \"    gl_PointSize = inPointSize;\" + LS\n            + \"    gl_Position = inMVPMatrix * vec4(inPosition.xyz, 1.0);\" + LS\n            + \"    varColor = inColor;\" + LS\n            + \"}\";\n\n    public static final String HAND_FRAGMENT =\n        \"precision mediump float;\" + LS\n            + \"varying vec4 varColor;\" + LS\n            + \"void main() {\" + LS\n            + \"    gl_FragColor = varColor;\" + LS\n            + \"}\";\n\n    private HandShaderUtil() {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/MatrixUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\nimport android.opengl.Matrix;\n\npublic final class MatrixUtil {\n    private static final int MATRIX_SIZE = 16;\n\n    private MatrixUtil() {\n    }\n\n    public static void getProjectionMatrix(float[] matrix, int width, int height) {\n        if (height <= 0 || width <= 0) {\n            return;\n        }\n\n        float[] projection = new float[MATRIX_SIZE];\n        float[] camera = new float[MATRIX_SIZE];\n\n        Matrix.orthoM(projection, 0, -1, 1, -1, 1, 1, 3);\n        Matrix.setLookAtM(camera, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0);\n        Matrix.multiplyMM(matrix, 0, projection, 0, camera, 0);\n    }\n\n    public static void normalizeVec3(float[] vector) {\n        float length = 1.0f / (float) Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]);\n        vector[0] *= length;\n        vector[1] *= length;\n        vector[2] *= length;\n    }\n\n    public static float[] getIdentityMatrix() {\n        return new float[] {\n            1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/ModeInformation.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\npublic class ModeInformation {\n    private String modeInformation;\n\n    private String continents;\n\n    /**\n     * Create a ModeInformation object.\n     *\n     * @param information Model information, including modelName, appId, and appSecret.\n     * @param continents Country/Region.\n     */\n    public ModeInformation(String information, String continents) {\n        this.modeInformation = (information == null) ? \"\" : information;\n        this.continents = (continents == null) ? \"\" : continents;\n    }\n\n    /**\n     * Obtains the modelName.\n     *\n     * @return modelName.\n     */\n    public String getContinents() {\n        return continents;\n    }\n\n    /**\n     * Obtain the model information, including modelName, appId, and appSecret.\n     *\n     * @return Return the model information.\n     */\n    public String getModeInformation() {\n        return modeInformation;\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/OpenGLUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\nimport android.opengl.GLES20;\nimport android.util.Log;\n\npublic final class OpenGLUtil {\n    private static final String TAG = OpenGLUtil.class.getSimpleName();\n\n    private OpenGLUtil() {\n    }\n\n    public static int createGlProgram(String vertexSource, String fragmentSource) {\n        int vertex = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);\n        if (vertex == 0) {\n            return 0;\n        }\n        int fragment = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);\n        if (fragment == 0) {\n            return 0;\n        }\n        int program = GLES20.glCreateProgram();\n        if (program == 0) {\n            return 0;\n        }\n\n        GLES20.glAttachShader(program, vertex);\n        GLES20.glAttachShader(program, fragment);\n        GLES20.glLinkProgram(program);\n        int[] linkStatus = new int[1];\n        GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);\n        if (linkStatus[0] != GLES20.GL_TRUE) {\n            Log.e(TAG, \"Could not link program:\" + GLES20.glGetProgramInfoLog(program));\n            GLES20.glDeleteProgram(program);\n            program = 0;\n        }\n        return program;\n    }\n\n    private static int loadShader(int shaderType, String source) {\n        int shader = GLES20.glCreateShader(shaderType);\n        if (0 != shader) {\n            GLES20.glShaderSource(shader, source);\n            GLES20.glCompileShader(shader);\n            int[] compiled = new int[1];\n            GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);\n            if (compiled[0] == 0) {\n                Log.e(TAG, \"Could not compile shader:\" + shaderType);\n                Log.e(TAG, \"GLES20 Error:\" + GLES20.glGetShaderInfoLog(shader));\n                GLES20.glDeleteShader(shader);\n                shader = 0;\n            }\n        }\n        return shader;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/SceneMeshShaderUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\npublic class SceneMeshShaderUtil {\n    public static final String LS = System.lineSeparator();\n\n    public static final String SCENE_MESH_VERTEX = \"uniform mat4 u_ModelViewProjection;\" + LS + \"uniform vec4 u_Color;\"\n        + LS + \"uniform float u_PointSize;\" + LS + \"attribute vec2 a_TexCoord;\" + LS + \"attribute vec4 a_Position;\" + LS\n        + \"varying vec4 v_Color;\" + LS + \"varying vec4 v_Ambient;\" + LS + \"varying vec2 v_TexCoord;\" + LS\n        + \"void main() {\" + LS + \"    v_Color = u_Color;\" + LS\n        + \"    gl_Position = u_ModelViewProjection * vec4(a_Position.xyz, 1.0);\" + LS\n        + \"    gl_PointSize = u_PointSize;\" + LS + \"    v_TexCoord = a_TexCoord;\" + LS\n        + \"    v_Ambient = vec4(1.0, 1.0, 1.0, 1.0);\" + LS + \"}\";\n\n    public static final String SCENE_MESH_FRAGMENT = \"precision mediump float;\" + LS + \"uniform sampler2D vv;\" + LS\n        + \"varying vec4 v_Color;\" + LS + \"varying vec4 v_Ambient;\" + LS + \"varying vec2 v_TexCoord;\" + LS\n        + \"void main() {\" + LS + \"    gl_FragColor = v_Color;\" + LS + \"}\";\n\n    private SceneMeshShaderUtil() {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/plugin/ar/core/util/WorldShaderUtil.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.plugin.ar.core.util;\n\npublic class WorldShaderUtil {\n    private static final String LS = System.lineSeparator();\n\n    private static final String LABEL_VERTEX = \"uniform mat2 inPlanUVMatrix;\" + LS + \"uniform mat4 inMVPMatrix;\" + LS\n        + \"attribute vec3 inPosXZAlpha;\" + LS + \"varying vec3 varTexCoordAlpha;\" + LS + \"void main() {\" + LS\n        + \"    vec4 tempPosition = vec4(inPosXZAlpha.x, 0.0, inPosXZAlpha.y, 1.0);\" + LS\n        + \"    vec2 tempUV = inPlanUVMatrix * inPosXZAlpha.xy;\" + LS\n        + \"    varTexCoordAlpha = vec3(tempUV.x + 0.5, tempUV.y + 0.5, inPosXZAlpha.z);\" + LS\n        + \"    gl_Position = inMVPMatrix * tempPosition;\" + LS + \"}\";\n\n    private static final String LABEL_FRAGMENT = \"precision highp float;\" + LS + \"uniform sampler2D inTexture;\" + LS\n        + \"varying vec3 varTexCoordAlpha;\" + LS + \"void main() {\" + LS\n        + \"    vec4 control = texture2D(inTexture, varTexCoordAlpha.xy);\" + LS\n        + \"    gl_FragColor = vec4(control.rgb, 1.0);\" + LS + \"}\";\n\n    private static final String OBJECT_VERTEX = \"uniform mat4 inMVPMatrix;\" + LS + \"uniform mat4 inViewMatrix;\" + LS\n        + \"attribute vec3 inObjectNormalVector;\" + LS + \"attribute vec4 inObjectPosition;\" + LS\n        + \"attribute vec2 inTexCoordinate;\" + LS + \"varying vec3 varCameraNormalVector;\" + LS\n        + \"varying vec2 varTexCoordinate;\" + LS + \"varying vec3 varCameraPos;\" + LS + \"void main() {\" + LS\n        + \"    gl_Position = inMVPMatrix * inObjectPosition;\" + LS\n        + \"    varCameraNormalVector = (inViewMatrix * vec4(inObjectNormalVector, 0.0)).xyz;\" + LS\n        + \"    varTexCoordinate = inTexCoordinate;\" + LS + \"    varCameraPos = (inViewMatrix * inObjectPosition).xyz;\"\n        + LS + \"}\";\n\n    private static final String OBJECT_FRAGMENT = \"precision mediump float;\" + LS + \" uniform vec4 inLight;\" + LS\n        + \"uniform vec4 inObjectColor;\" + LS + \"uniform sampler2D inObjectTexture;\" + LS + \"varying vec3 varCameraPos;\"\n        + LS + \"varying vec3 varCameraNormalVector;\" + LS + \"varying vec2 varTexCoordinate;\" + LS + \"void main() {\" + LS\n        + \"    vec4 objectColor = texture2D(inObjectTexture, vec2(varTexCoordinate.x, 1.0 - \" + \"varTexCoordinate.y));\"\n        + LS + \"    objectColor.rgb = inObjectColor.rgb / 255.0;\" + LS\n        + \"    vec3 viewNormal = normalize(varCameraNormalVector);\" + LS\n        + \"    vec3 reflectedLightDirection = reflect(inLight.xyz, viewNormal);\" + LS\n        + \"    vec3 normalCameraPos = normalize(varCameraPos);\" + LS\n        + \"    float specularStrength = max(0.0, dot(normalCameraPos, reflectedLightDirection));\" + LS\n        + \"    gl_FragColor.a = objectColor.a;\" + LS + \"    float diffuse = inLight.w * 3.5 *\" + LS\n        + \"        0.5 * (dot(viewNormal, inLight.xyz) + 1.0);\" + LS + \"    float specular = inLight.w *\" + LS\n        + \"        pow(specularStrength, 6.0);\" + LS + \"    gl_FragColor.rgb = objectColor.rgb * + diffuse + specular;\"\n        + LS + \"}\";\n\n    private static final String POINTCLOUD_VERTEX = \"uniform mat4 u_ModelViewProjection;\" + LS + \"uniform vec4 u_Color;\"\n        + LS + \"uniform float u_PointSize;\" + LS + \"attribute vec4 a_Position;\" + LS + \"varying vec4 v_Color;\" + LS\n        + \"void main() {\" + LS + \"   v_Color = u_Color;\" + LS\n        + \"   gl_Position = u_ModelViewProjection * vec4(a_Position.xyz, 1.0);\" + LS + \"   gl_PointSize = u_PointSize;\"\n        + LS + \"}\";\n\n    private static final String POINTCLOUD_FRAGMENT = \"precision mediump float;\" + LS + \"varying vec4 v_Color;\" + LS\n        + \"void main() {\" + LS + \"    gl_FragColor = v_Color;\" + LS + \"}\";\n\n    private WorldShaderUtil() {\n    }\n\n    public static int getLabelProgram() {\n        return OpenGLUtil.createGlProgram(LABEL_VERTEX, LABEL_FRAGMENT);\n    }\n\n    public static int getObjectProgram() {\n        return OpenGLUtil.createGlProgram(OBJECT_VERTEX, OBJECT_FRAGMENT);\n    }\n\n    public static int getPointCloudProgram() {\n        return OpenGLUtil.createGlProgram(POINTCLOUD_VERTEX, POINTCLOUD_FRAGMENT);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/ARSurfaceView.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar;\n\nimport android.opengl.GLSurfaceView;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.facebook.react.uimanager.annotations.ReactProp;\n\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.common.FaceHealthCheckState;\nimport com.huawei.hiar.listener.FaceHealthCheckStateEvent;\nimport com.huawei.hiar.listener.FaceHealthServiceListener;\nimport com.huawei.hms.plugin.ar.core.ARSetupFacade;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigAugmentedImage;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBase;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBasePointLine;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBaseWorld;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigBody;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigFace;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigHand;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigSceneMesh;\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorld;\n\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\nimport com.huawei.hms.plugin.ar.core.config.ARPluginConfigWorldBody;\nimport com.huawei.hms.rn.ar.logger.HMSLogger;\nimport com.huawei.hms.rn.ar.utils.Converter;\n\nimport static com.huawei.hms.rn.ar.utils.Converter.hasValidKey;\nimport static com.huawei.hms.rn.ar.utils.Converter.toColorRGBA;\n\nimport java.util.EventObject;\n\npublic class ARSurfaceView extends SimpleViewManager<GLSurfaceView> {\n    private ReactApplicationContext reactContext;\n\n    private HMSLogger hmsLogger;\n\n    public ARSurfaceView(ReactApplicationContext reactContext) {\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"ARSurfaceView\";\n    }\n\n    @NonNull\n    @Override\n    protected GLSurfaceView createViewInstance(@NonNull ThemedReactContext reactContext) {\n        return new GLSurfaceView(reactContext);\n    }\n\n    private void setCommonConfig(ReadableMap params, ARPluginConfigBase configPlugin) {\n        if (hasValidKey(params, \"lightMode\", ReadableType.Number)) {\n            configPlugin.setLightMode(Converter.IntToLightEnum(params.getInt(\"lightMode\")));\n        }\n        if (hasValidKey(params, \"semantic\", ReadableType.Map)) {\n            ReadableMap paramsSemantic = params.getMap(\"semantic\");\n            if (hasValidKey(paramsSemantic, \"mode\", ReadableType.Number)) {\n                configPlugin.setSemanticMode(paramsSemantic.getInt(\"mode\"));\n            }\n            if (hasValidKey(paramsSemantic, \"showSemanticModeSupportedInfo\", ReadableType.Boolean)) {\n                configPlugin.setShowSemanticSupportedInfo(\n                    paramsSemantic.getBoolean(\"showSemanticModeSupportedInfo\"));\n            }\n        }\n        if (hasValidKey(params, \"focusMode\", ReadableType.Number)) {\n            configPlugin.setFocusMode(Converter.IntToFocusModeEnum(params.getInt(\"focusMode\")));\n        }\n        if (hasValidKey(params, \"powerMode\", ReadableType.Number)) {\n            configPlugin.setPowerMode(Converter.IntToPowerModeEnum(params.getInt(\"powerMode\")));\n        }\n        if (hasValidKey(params, \"updateMode\", ReadableType.Number)) {\n            configPlugin.setUpdateMode(Converter.IntToUpdateModeEnum(params.getInt(\"updateMode\")));\n        }\n    }\n\n    private void setPointLineConfig(ReadableMap params, ARPluginConfigBasePointLine configPlugin) {\n        if (hasValidKey(params, \"drawLine\", ReadableType.Boolean)) {\n            configPlugin.setDrawLine(params.getBoolean(\"drawLine\"));\n        }\n        if (hasValidKey(params, \"drawPoint\", ReadableType.Boolean)) {\n            configPlugin.setDrawPoint(params.getBoolean(\"drawPoint\"));\n        }\n        if (hasValidKey(params, \"lineWidth\", ReadableType.Number)) {\n            configPlugin.setLineWidth((float) params.getDouble(\"lineWidth\"));\n        }\n        if (hasValidKey(params, \"pointSize\", ReadableType.Number)) {\n            configPlugin.setPointSize((float) params.getDouble(\"pointSize\"));\n        }\n        if (hasValidKey(params, \"lineColor\", ReadableType.Map)) {\n            configPlugin.setLineColor(toColorRGBA(params.getMap(\"lineColor\")));\n        }\n        if (hasValidKey(params, \"pointColor\", ReadableType.Map)) {\n            configPlugin.setPointColor(toColorRGBA(params.getMap(\"pointColor\")));\n        }\n        setCommonConfig(params, configPlugin);\n    }\n\n    private void setWorldConfig(ReadableMap params, ARPluginConfigBaseWorld configPlugin) {\n        if (hasValidKey(params, \"objectName\", ReadableType.String)) {\n            configPlugin.setObjPath(params.getString(\"objectName\"));\n        }\n        if (hasValidKey(params, \"objectTexture\", ReadableType.String)) {\n            configPlugin.setTexturePath(params.getString(\"objectTexture\"));\n        }\n        if (hasValidKey(params, \"showPlanes\", ReadableType.Boolean)) {\n            configPlugin.setLabelDraw(params.getBoolean(\"showPlanes\"));\n        }\n        if (hasValidKey(params, \"planeOther\", ReadableType.Map)) {\n            ReadableMap other = params.getMap(\"planeOther\");\n            if (other != null) {\n                configPlugin.setImageOther(null);\n                if (hasValidKey(other, \"image\", ReadableType.String)) {\n                    configPlugin.setImageOther(other.getString(\"image\"));\n                }\n                if (hasValidKey(other, \"text\", ReadableType.String)) {\n                    configPlugin.setTextOther(other.getString(\"text\"));\n                }\n                configPlugin.setColorOther(toColorRGBA(other));\n            }\n        }\n        if (hasValidKey(params, \"planeWall\", ReadableType.Map)) {\n            ReadableMap wall = params.getMap(\"planeWall\");\n            if (wall != null) {\n                configPlugin.setImageWall(null);\n                if (hasValidKey(wall, \"image\", ReadableType.String)) {\n                    configPlugin.setImageWall(wall.getString(\"image\"));\n                }\n                if (hasValidKey(wall, \"text\", ReadableType.String)) {\n                    configPlugin.setTextWall(wall.getString(\"text\"));\n                }\n                configPlugin.setColorWall(toColorRGBA(wall));\n            }\n        }\n        if (hasValidKey(params, \"planeFloor\", ReadableType.Map)) {\n            ReadableMap floor = params.getMap(\"planeFloor\");\n            if (floor != null) {\n                configPlugin.setImageFloor(null);\n                if (hasValidKey(floor, \"image\", ReadableType.String)) {\n                    configPlugin.setImageFloor(floor.getString(\"image\"));\n                }\n                if (hasValidKey(floor, \"text\", ReadableType.String)) {\n                    configPlugin.setTextFloor(floor.getString(\"text\"));\n                }\n                configPlugin.setColorFloor(toColorRGBA(floor));\n            }\n        }\n        if (hasValidKey(params, \"planeSeat\", ReadableType.Map)) {\n            ReadableMap seat = params.getMap(\"planeSeat\");\n            if (seat != null) {\n                configPlugin.setImageSeat(null);\n                if (hasValidKey(seat, \"image\", ReadableType.String)) {\n                    configPlugin.setImageSeat(seat.getString(\"image\"));\n                }\n                if (hasValidKey(seat, \"text\", ReadableType.String)) {\n                    configPlugin.setTextSeat(seat.getString(\"text\"));\n                }\n                configPlugin.setColorSeat(toColorRGBA(seat));\n            }\n        }\n        if (hasValidKey(params, \"planeTable\", ReadableType.Map)) {\n            ReadableMap table = params.getMap(\"planeTable\");\n            if (table != null) {\n                configPlugin.setImageTable(null);\n                if (hasValidKey(table, \"image\", ReadableType.String)) {\n                    configPlugin.setImageTable(table.getString(\"image\"));\n                }\n                if (hasValidKey(table, \"text\", ReadableType.String)) {\n                    configPlugin.setTextTable(table.getString(\"text\"));\n                }\n                configPlugin.setColorTable(toColorRGBA(table));\n            }\n        }\n        if (hasValidKey(params, \"planeCeiling\", ReadableType.Map)) {\n            ReadableMap ceiling = params.getMap(\"planeCeiling\");\n            if (ceiling != null) {\n                configPlugin.setImageCeiling(null);\n                if (hasValidKey(ceiling, \"image\", ReadableType.String)) {\n                    configPlugin.setImageCeiling(ceiling.getString(\"image\"));\n                }\n                if (hasValidKey(ceiling, \"text\", ReadableType.String)) {\n                    configPlugin.setTextCeiling(ceiling.getString(\"text\"));\n                }\n                configPlugin.setColorCeiling(toColorRGBA(ceiling));\n            }\n        }\n        if (hasValidKey(params, \"maxMapSize\", ReadableType.Number)) {\n            configPlugin.setMaxMapSize(params.getInt(\"maxMapSize\"));\n        }\n        setPointLineConfig(params, configPlugin);\n    }\n\n    private ARPluginConfigBody getBodyConfig(ReadableMap params) {\n        ARPluginConfigBody mARPluginConfigBody = new ARPluginConfigBody();\n        if (params == null) {\n            return mARPluginConfigBody;\n        }\n        setPointLineConfig(params, mARPluginConfigBody);\n        return mARPluginConfigBody;\n    }\n\n    private ARPluginConfigFace getFaceConfig(ReadableMap params) {\n        ARPluginConfigFace mARPluginConfigFace = new ARPluginConfigFace();\n\n        if (params == null) {\n            return mARPluginConfigFace;\n        }\n        if (hasValidKey(params, \"drawFace\", ReadableType.Boolean)) {\n            mARPluginConfigFace.setDrawFace(params.getBoolean(\"drawFace\"));\n        }\n        if (hasValidKey(params, \"texturePath\", ReadableType.String)) {\n            mARPluginConfigFace.setTexturePath(params.getString(\"texturePath\"));\n        }\n        if (hasValidKey(params, \"pointSize\", ReadableType.Number)) {\n            mARPluginConfigFace.setPointSize((float) params.getDouble(\"pointSize\"));\n        }\n        if (hasValidKey(params, \"depthColor\", ReadableType.Map)) {\n            mARPluginConfigFace.setDepthColor(toColorRGBA(params.getMap(\"depthColor\")));\n        }\n        if (hasValidKey(params, \"cameraLensFacing\", ReadableType.Number)) {\n            if (params.getInt(\"cameraLensFacing\") == ARConfigBase.CameraLensFacing.REAR.ordinal()) {\n                mARPluginConfigFace.setCameraLensFacing(ARConfigBase.CameraLensFacing.REAR);\n            }\n        }\n        if (hasValidKey(params, \"enableHealthDevice\", ReadableType.Boolean)) {\n            mARPluginConfigFace.setHealth(params.getBoolean(\"enableHealthDevice\"));\n        }\n        if (hasValidKey(params, \"multiFace\", ReadableType.Boolean)) {\n            mARPluginConfigFace.setMultiFace(params.getBoolean(\"multiFace\"));\n        }\n        setCommonConfig(params, mARPluginConfigFace);\n        return mARPluginConfigFace;\n    }\n\n    private ARPluginConfigHand getHandConfig(ReadableMap params) {\n        ARPluginConfigHand mARPluginConfigHand = new ARPluginConfigHand();\n\n        if (params == null) {\n            return mARPluginConfigHand;\n        }\n        if (hasValidKey(params, \"drawBox\", ReadableType.Boolean)) {\n            mARPluginConfigHand.setDrawBox(params.getBoolean(\"drawBox\"));\n        }\n        if (hasValidKey(params, \"boxColor\", ReadableType.Map)) {\n            mARPluginConfigHand.setBoxColor(toColorRGBA(params.getMap(\"boxColor\")));\n        }\n        if (hasValidKey(params, \"cameraLensFacing\", ReadableType.Number)) {\n            if (params.getInt(\"cameraLensFacing\") == ARConfigBase.CameraLensFacing.REAR.ordinal()) {\n                mARPluginConfigHand.setCameraLensFacing(ARConfigBase.CameraLensFacing.REAR);\n            }\n        }\n        if (hasValidKey(params, \"lineWidthSkeleton\", ReadableType.Number)) {\n            mARPluginConfigHand.setLineWidthSkeleton((float) params.getDouble(\"lineWidthSkeleton\"));\n        }\n        setPointLineConfig(params, mARPluginConfigHand);\n\n        return mARPluginConfigHand;\n    }\n\n    private ARPluginConfigWorld getWorldConfig(ReadableMap params) {\n        ARPluginConfigWorld mARPluginConfigWorld = new ARPluginConfigWorld();\n        if (params == null) {\n            return mARPluginConfigWorld;\n        }\n        setWorldConfig(params, mARPluginConfigWorld);\n        if (hasValidKey(params, \"augmentedImages\", ReadableType.Array)) {\n            ReadableArray paramsAI = params.getArray(\"augmentedImages\");\n            mARPluginConfigWorld.setAugmentedImageDBModels(Converter.toAugmentedImageDBModelList(paramsAI));\n        }\n        if (hasValidKey(params, \"planeFindingMode\", ReadableType.Number)) {\n            mARPluginConfigWorld.setPlaneFindingMode(\n                Converter.IntToPlaneFindingModeEnum(params.getInt(\"planeFindingMode\")));\n        }\n        if (hasValidKey(params, \"drawLineAI\", ReadableType.Boolean)) {\n            mARPluginConfigWorld.setDrawLine(params.getBoolean(\"drawLineAI\"));\n        }\n        if (hasValidKey(params, \"drawPointAI\", ReadableType.Boolean)) {\n            mARPluginConfigWorld.setDrawPoint(params.getBoolean(\"drawPointAI\"));\n        }\n        if (hasValidKey(params, \"lineWidthAI\", ReadableType.Number)) {\n            mARPluginConfigWorld.setLineWidth((float) params.getDouble(\"lineWidthAI\"));\n        }\n        if (hasValidKey(params, \"pointSizeAI\", ReadableType.Number)) {\n            mARPluginConfigWorld.setPointSize((float) params.getDouble(\"pointSizeAI\"));\n        }\n        if (hasValidKey(params, \"lineColorAI\", ReadableType.Map)) {\n            mARPluginConfigWorld.setLineColor(toColorRGBA(params.getMap(\"lineColorAI\")));\n        }\n        if (hasValidKey(params, \"pointColorAI\", ReadableType.Map)) {\n            mARPluginConfigWorld.setPointColor(toColorRGBA(params.getMap(\"pointColorAI\")));\n        }\n        return mARPluginConfigWorld;\n    }\n\n    private ARPluginConfigWorldBody getWorldBodyConfig(ReadableMap params) {\n        ARPluginConfigWorldBody mARPluginConfigWorld = new ARPluginConfigWorldBody();\n        if (params == null) {\n            return mARPluginConfigWorld;\n        }\n        setWorldConfig(params, mARPluginConfigWorld);\n        if (hasValidKey(params, \"planeFindingMode\", ReadableType.Number)) {\n            mARPluginConfigWorld.setPlaneFindingMode(\n                Converter.IntToPlaneFindingModeEnum(params.getInt(\"planeFindingMode\")));\n        }\n\n        return mARPluginConfigWorld;\n    }\n\n    private ARPluginConfigAugmentedImage getAugmentedImageConfig(ReadableMap params) {\n        ARPluginConfigAugmentedImage mARPluginConfigImageConfig = new ARPluginConfigAugmentedImage();\n        if (params == null) {\n            return mARPluginConfigImageConfig;\n        }\n        if (hasValidKey(params, \"augmentedImages\", ReadableType.Array)) {\n            ReadableArray paramsAI = params.getArray(\"augmentedImages\");\n            mARPluginConfigImageConfig.setAugmentedImageDBModels(Converter.toAugmentedImageDBModelList(paramsAI));\n        }\n        setPointLineConfig(params, mARPluginConfigImageConfig);\n        return mARPluginConfigImageConfig;\n    }\n\n    private ARPluginConfigSceneMesh getSceneMeshConfig(ReadableMap params) {\n        ARPluginConfigSceneMesh mARPluginConfigSceneMesh = new ARPluginConfigSceneMesh();\n        if (params == null) {\n            return mARPluginConfigSceneMesh;\n        }\n        if (hasValidKey(params, \"objectName\", ReadableType.String)) {\n            mARPluginConfigSceneMesh.setObjPath(params.getString(\"objectName\"));\n        }\n        if (hasValidKey(params, \"objectTexture\", ReadableType.String)) {\n            mARPluginConfigSceneMesh.setTexturePath(params.getString(\"objectTexture\"));\n        }\n        setCommonConfig(params, mARPluginConfigSceneMesh);\n        return mARPluginConfigSceneMesh;\n    }\n\n    @ReactProp(name = \"config\")\n    public void setConfig(GLSurfaceView view, ReadableMap config) {\n        ARSetupFacade arSetupFacade = new ARSetupFacade(reactContext, view);\n        if (hasValidKey(config, \"hand\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startHand\");\n            arSetupFacade.startHand(getHandConfig(config.getMap(\"hand\")));\n            hmsLogger.sendSingleEvent(\"startHand\");\n        } else if (hasValidKey(config, \"body\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startBody\");\n            arSetupFacade.startBody(getBodyConfig(config.getMap(\"body\")));\n            hmsLogger.sendSingleEvent(\"startBody\");\n        } else if (hasValidKey(config, \"face\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startFace\");\n            arSetupFacade.startFace(getFaceConfig(config.getMap(\"face\")));\n\n            if (config.getMap(\"face\").hasKey(\"enableHealthDevice\")) {\n                Boolean enableHealthDevice = config.getMap(\"face\").getBoolean(\"enableHealthDevice\");\n                if (enableHealthDevice) {\n                    arSetupFacade.setEnableItem(ARConfigBase.ENABLE_HEALTH_DEVICE);\n                    arSetupFacade.setFaceHealthListener(new FaceHealthServiceListener() {\n                        @Override\n                        public void handleEvent(EventObject eventObject) {\n                            if (!(eventObject instanceof FaceHealthCheckStateEvent)) {\n                                return;\n                            }\n                            final FaceHealthCheckState faceHealthCheckState\n                                = ((FaceHealthCheckStateEvent) eventObject).getFaceHealthCheckState();\n                            Log.e(ARSetupFacade.class.getSimpleName(),\n                                \"handleEvent Object:\" + faceHealthCheckState.toString());\n                            reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                                .emit(\"handleEvent\", faceHealthCheckState.toString());\n                        }\n\n                        @Override\n                        public void handleProcessProgressEvent(final int progress) {\n                            Log.e(ARSetupFacade.class.getSimpleName(),\n                                \"handleProcessProgressEvent Count:\" + progress);\n                            reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                                .emit(\"handleProcessProgressEvent\", progress);\n                        }\n                    });\n                    arSetupFacade.setFaceHealthResultListener(res -> {\n                        Log.e(ARSetupFacade.class.getSimpleName(), \"handleResult Object:\" + res);\n                        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                            .emit(\"handleResult\", res);\n                    });\n                }\n            }\n            hmsLogger.sendSingleEvent(\"startFace\");\n        } else if (hasValidKey(config, \"world\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startWorld\");\n            arSetupFacade.startWorld(getWorldConfig(config.getMap(\"world\")));\n            hmsLogger.sendSingleEvent(\"startWorld\");\n        } else if (hasValidKey(config, \"cloud3Dobject\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"cloud3Dobject\");\n            arSetupFacade.startCloud3Dobject();\n            hmsLogger.sendSingleEvent(\"cloud3Dobject\");\n        } else if (hasValidKey(config, \"augmentedImage\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"augmentedImage\");\n            arSetupFacade.startAugmentedImage(getAugmentedImageConfig(config.getMap(\"augmentedImage\")));\n            hmsLogger.sendSingleEvent(\"augmentedImage\");\n        } else if (hasValidKey(config, \"worldBody\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startWorldBody\");\n            arSetupFacade.startWorldBody(getWorldBodyConfig(config.getMap(\"worldBody\")));\n            hmsLogger.sendSingleEvent(\"startWorldBody\");\n        } else if (hasValidKey(config, \"sceneMesh\", ReadableType.Map)) {\n            hmsLogger.startMethodExecutionTimer(\"startSceneMesh\");\n            arSetupFacade.startSceneMesh(getSceneMeshConfig(config.getMap(\"sceneMesh\")));\n            hmsLogger.sendSingleEvent(\"startSceneMesh\");\n\n            arSetupFacade.setSceneMeshListener(\n                arSceneMesh -> reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(\"onDrawFrame\", Converter.arSceneMeshToWritableMap(arSceneMesh)));\n        } else {\n            return;\n        }\n        arSetupFacade.setListener(\n            arTrackables -> reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(\"onDrawFrame\", Converter.arTrackableToWritableMap(arTrackables)));\n        arSetupFacade.setCameraConfigListener(\n            cameraConfig -> reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(\"handleCameraConfig\", Converter.arCameraConfigToWritableMap(cameraConfig)));\n        arSetupFacade.setCameraIntrinsicsListener(\n            cameraIntrinsics -> reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(\"handleCameraIntrinsics\", Converter.arCameraIntrinsicsToWritableMap(cameraIntrinsics)));\n        arSetupFacade.setMessageDataListener(\n            res -> reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(\"messageListener\", res));\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/HmsARModule.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\n\nimport com.huawei.hms.plugin.ar.core.util.AREngineAvailability;\nimport com.huawei.hms.rn.ar.logger.HMSLogger;\nimport com.huawei.hms.rn.ar.utils.EnumGenerator;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HmsARModule extends ReactContextBaseJavaModule {\n    private final ReactApplicationContext reactContext;\n\n    private final HMSLogger hmsLogger;\n\n    public HmsARModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HmsARModule\";\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return EnumGenerator.getConstants();\n    }\n\n    @ReactMethod\n    public void isAREngineReady(Promise promise) {\n        hmsLogger.sendSingleEvent(\"isAREngineServiceApkReady\");\n        promise.resolve(AREngineAvailability.isArEngineServiceApkReady(reactContext));\n    }\n\n    @ReactMethod\n    public void navigateToAppMarket() {\n        hmsLogger.sendSingleEvent(\"navigateToAppMarketPage\");\n        if (reactContext.getCurrentActivity() != null) {\n            AREngineAvailability.navigateToAppMarketPage(reactContext.getCurrentActivity());\n        }\n    }\n\n    @ReactMethod\n    public void disableLogger() {\n        hmsLogger.disableLogger();\n    }\n\n    @ReactMethod\n    public void enableLogger() {\n        hmsLogger.enableLogger();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/HmsARPackage.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\npublic class HmsARPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(new HmsARModule(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(new ARSurfaceView(reactContext));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"AR\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.7.0.3\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/utils/Converter.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar.utils;\n\nimport static com.huawei.hms.plugin.ar.core.serializer.CommonSerializer.arCameraConfigToMap;\nimport static com.huawei.hms.plugin.ar.core.serializer.CommonSerializer.arCameraIntrinsicsToMap;\nimport static com.huawei.hms.plugin.ar.core.serializer.CommonSerializer.arSceneMeshToMap;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport com.huawei.hiar.ARCameraConfig;\nimport com.huawei.hiar.ARCameraIntrinsics;\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARSceneMesh;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hms.plugin.ar.core.config.ColorRGBA;\nimport com.huawei.hms.plugin.ar.core.model.AugmentedImageDBModel;\nimport com.huawei.hms.plugin.ar.core.serializer.PluginARTrackableSerializer;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\n\npublic class Converter {\n    private static String TAG = Converter.class.getSimpleName();\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static boolean hasValidElement(ReadableArray ra, int index, ReadableType type) {\n        return !ra.isNull(index) && ra.getType(index) == type;\n    }\n\n    public static ColorRGBA toColorRGBA(final ReadableMap rm) {\n        int red = 0;\n        int blue = 0;\n        int green = 0;\n        int alpha = 0;\n        if (rm != null) {\n            if (hasValidKey(rm, \"red\", ReadableType.Number)) {\n                red = (int) rm.getDouble(\"red\");\n            }\n            if (hasValidKey(rm, \"blue\", ReadableType.Number)) {\n                blue = (int) rm.getDouble(\"blue\");\n            }\n            if (hasValidKey(rm, \"green\", ReadableType.Number)) {\n                green = (int) rm.getDouble(\"green\");\n            }\n            if (hasValidKey(rm, \"alpha\", ReadableType.Number)) {\n                alpha = (int) rm.getDouble(\"alpha\");\n            }\n        }\n        return new ColorRGBA(red, green, blue, alpha);\n    }\n\n    public static WritableMap arTrackableToWritableMap(List<ARTrackable> arTrackables) {\n        for (ARTrackable arTrackable : arTrackables) {\n            Map<String, Object> m = PluginARTrackableSerializer.serialize(arTrackable);\n            return toWritableMap(m);\n        }\n        return null;\n    }\n\n    public static WritableMap arCameraConfigToWritableMap(ARCameraConfig cameraConfig) {\n        Map<String, Object> m = arCameraConfigToMap(cameraConfig);\n        return toWritableMap(m);\n    }\n\n    public static WritableMap arCameraIntrinsicsToWritableMap(ARCameraIntrinsics cameraIntrinsics) {\n        Map<String, Object> m = arCameraIntrinsicsToMap(cameraIntrinsics);\n        return toWritableMap(m);\n    }\n\n    public static WritableMap arSceneMeshToWritableMap(ARSceneMesh arSceneMesh) {\n        Map<String, Object> m = arSceneMeshToMap(arSceneMesh);\n        return toWritableMap(m);\n    }\n\n    public static int IntToLightEnum(int val) {\n        switch (val) {\n            // fall-through\n            case ARConfigBase.LIGHT_MODE_NONE:\n                ;\n                // fall-through\n            case ARConfigBase.LIGHT_MODE_AMBIENT_INTENSITY:\n                ;\n                // fall-through\n            case ARConfigBase.LIGHT_MODE_ENVIRONMENT_LIGHTING:\n                ;\n                // fall-through\n            case ARConfigBase.LIGHT_MODE_ENVIRONMENT_TEXTURE:\n                ;\n                // fall-through\n            case ARConfigBase.LIGHT_MODE_ALL:\n                return val;\n            default:\n                return ARConfigBase.LIGHT_MODE_NONE;\n        }\n    }\n\n    public static ARConfigBase.FocusMode IntToFocusModeEnum(int val) {\n        if (val == ARConfigBase.FocusMode.FIXED_FOCUS.ordinal()) {\n            return ARConfigBase.FocusMode.FIXED_FOCUS;\n        }\n        return ARConfigBase.FocusMode.AUTO_FOCUS;\n    }\n\n    public static ARConfigBase.PowerMode IntToPowerModeEnum(int val) {\n        if (val == ARConfigBase.PowerMode.NORMAL.ordinal()) {\n            return ARConfigBase.PowerMode.NORMAL;\n        } else if (val == ARConfigBase.PowerMode.POWER_SAVING.ordinal()) {\n            return ARConfigBase.PowerMode.POWER_SAVING;\n        } else if (val == ARConfigBase.PowerMode.ULTRA_POWER_SAVING.ordinal()) {\n            return ARConfigBase.PowerMode.ULTRA_POWER_SAVING;\n        } else {\n            return ARConfigBase.PowerMode.PERFORMANCE_FIRST;\n        }\n    }\n\n    public static ARConfigBase.UpdateMode IntToUpdateModeEnum(int val) {\n        if (val == ARConfigBase.UpdateMode.BLOCKING.ordinal()) {\n            return ARConfigBase.UpdateMode.BLOCKING;\n        }\n        return ARConfigBase.UpdateMode.LATEST_CAMERA_IMAGE;\n    }\n\n    public static ARConfigBase.PlaneFindingMode IntToPlaneFindingModeEnum(int val) {\n        if (val == ARConfigBase.PlaneFindingMode.DISABLED.ordinal()) {\n            return ARConfigBase.PlaneFindingMode.DISABLED;\n        } else if (val == ARConfigBase.PlaneFindingMode.VERTICAL_ONLY.ordinal()) {\n            return ARConfigBase.PlaneFindingMode.VERTICAL_ONLY;\n        } else if (val == ARConfigBase.PlaneFindingMode.HORIZONTAL_ONLY.ordinal()) {\n            return ARConfigBase.PlaneFindingMode.HORIZONTAL_ONLY;\n        } else {\n            return ARConfigBase.PlaneFindingMode.ENABLE;\n        }\n    }\n\n    public static WritableMap toWritableMap(final Map<String, Object> map) {\n        WritableNativeMap result = new WritableNativeMap();\n\n        for (Map.Entry<String, Object> entry : map.entrySet()) {\n            String key = entry.getKey();\n            Object value = entry.getValue();\n            if (value == null) {\n                result.putNull(key);\n            } else if (value instanceof Map) {\n                //noinspection unchecked,rawtypes\n                result.putMap(key, toWritableMap((Map) value));\n            } else if (value instanceof List) {\n                //noinspection unchecked,rawtypes\n                result.putArray(key, toWritableArray((List) value));\n            } else if (value instanceof float[]) {\n                WritableArray wa = Arguments.fromArray(value);\n                result.putArray(key, wa);\n            } else if (value instanceof String[]) {\n                WritableArray wa = Arguments.fromArray(value);\n                result.putArray(key, wa);\n            } else if (value instanceof int[]) {\n                WritableArray wa = Arguments.fromArray(value);\n                result.putArray(key, wa);\n            } else if (value instanceof Boolean) {\n                result.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                result.putInt(key, (Integer) value);\n            } else if (value instanceof String) {\n                result.putString(key, (String) value);\n            } else if (value instanceof Double) {\n                result.putDouble(key, (Double) value);\n            } else if (value instanceof Float) {\n                result.putDouble(key, (float) value);\n            } else {\n                Log.e(TAG, \"Could not convert object \" + value.toString());\n            }\n        }\n        return result;\n    }\n\n    private static WritableArray toWritableArray(List<Object> array) {\n        WritableNativeArray result = new WritableNativeArray();\n\n        for (Object value : array) {\n            if (value == null) {\n                result.pushNull();\n            } else if (value instanceof Map) {\n                //noinspection unchecked,rawtypes\n                result.pushMap(toWritableMap((Map) value));\n            } else if (value instanceof List) {\n                //noinspection unchecked,rawtypes\n                result.pushArray(toWritableArray((List) value));\n            } else if (value instanceof float[]) {\n                WritableArray wa = Arguments.fromArray(value);\n                result.pushArray(wa);\n            } else if (value instanceof Boolean) {\n                result.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                result.pushInt((Integer) value);\n            } else if (value instanceof String) {\n                result.pushString((String) value);\n            } else if (value instanceof Double) {\n                result.pushDouble((Double) value);\n            } else if (value instanceof Float) {\n                result.pushDouble((float) value);\n            } else {\n                Log.e(TAG, \"Could not convert object \" + value.toString());\n            }\n        }\n        return result;\n    }\n\n    public static List<AugmentedImageDBModel> toAugmentedImageDBModelList(ReadableArray paramsAI) {\n        AugmentedImageDBModel[] array = new AugmentedImageDBModel[paramsAI.size()];\n        for (int i = 0; i < paramsAI.size(); i++) {\n            ReadableMap item = paramsAI.getMap(i);\n            AugmentedImageDBModel augmentedImageDBModel = new AugmentedImageDBModel();\n            if (hasValidKey(item, \"imgFileFromAsset\", ReadableType.String)) {\n                augmentedImageDBModel.setImgFileFromAsset(item.getString(\"imgFileFromAsset\"));\n            }\n            if (hasValidKey(item, \"widthInMeters\", ReadableType.Number)) {\n                augmentedImageDBModel.setWidthInMeters(item.getInt(\"widthInMeters\"));\n            }\n            if (hasValidKey(item, \"imgName\", ReadableType.String)) {\n                augmentedImageDBModel.setImgName(item.getString(\"imgName\"));\n            }\n            array[i] = augmentedImageDBModel;\n        }\n        return Arrays.asList(array);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/java/com/huawei/hms/rn/ar/utils/EnumGenerator.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar.utils;\n\nimport android.util.ArrayMap;\n\nimport com.huawei.hiar.ARBody;\nimport com.huawei.hiar.ARConfigBase;\nimport com.huawei.hiar.ARCoordinateSystemType;\nimport com.huawei.hiar.ARHand;\nimport com.huawei.hiar.ARPlane;\nimport com.huawei.hiar.ARTrackable;\nimport com.huawei.hiar.ARWorldTrackingConfig;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class EnumGenerator {\n\n    public static Map<String, Object> getConstants() {\n        Map<String, Object> constants = new HashMap<>();\n        constants.put(\"PlaneFindingMode\", getPlaneFindingMode());\n        constants.put(\"UpdateMode\", getUpdateMode());\n        constants.put(\"FocusMode\", getFocusMode());\n        constants.put(\"PowerMode\", getPowerMode());\n        constants.put(\"SemanticMode\", getSemanticMode());\n        constants.put(\"CameraLensFacing\", getCameraLensFacing());\n        constants.put(\"LightMode\", getLightMode());\n        constants.put(\"TrackingState\", getTracingState());\n        constants.put(\"HandType\", getHandTypes());\n        constants.put(\"HandSkeletonType\", getHandSkeletonType());\n        constants.put(\"BodySkeletonType\", getBodySkeletonType());\n        constants.put(\"PlaneLabel\", getSemanticPlaneLabel());\n        constants.put(\"PlaneType\", getPlaneTypes());\n        constants.put(\"CoordinateSystemType\", getCoordinateSystemType());\n        return constants;\n    }\n\n    public static Map<String, Object> getSemanticMode() {\n        Map<String, Object> semanticMode = new ArrayMap<>();\n        semanticMode.put(\"NONE\", ARWorldTrackingConfig.SEMANTIC_NONE);\n        semanticMode.put(\"PLANE\", ARWorldTrackingConfig.SEMANTIC_PLANE);\n        semanticMode.put(\"TARGET\", ARWorldTrackingConfig.SEMANTIC_TARGET);\n        semanticMode.put(\"ALL\", (ARWorldTrackingConfig.SEMANTIC_PLANE | ARWorldTrackingConfig.SEMANTIC_TARGET));\n        return semanticMode;\n    }\n\n    public static Map<String, Object> getPowerMode() {\n        Map<String, Object> powerMode = new ArrayMap<>();\n        powerMode.put(\"NORMAL\", ARConfigBase.PowerMode.NORMAL.ordinal());\n        powerMode.put(\"POWER_SAVING\", ARConfigBase.PowerMode.POWER_SAVING.ordinal());\n        powerMode.put(\"ULTRA_POWER_SAVING\", ARConfigBase.PowerMode.ULTRA_POWER_SAVING.ordinal());\n        powerMode.put(\"PERFORMANCE_FIRST\", ARConfigBase.PowerMode.PERFORMANCE_FIRST.ordinal());\n        return powerMode;\n    }\n\n    public static Map<String, Object> getFocusMode() {\n        Map<String, Object> focusMode = new ArrayMap<>();\n        focusMode.put(\"FIXED_FOCUS\", ARConfigBase.FocusMode.FIXED_FOCUS.ordinal());\n        focusMode.put(\"AUTO_FOCUS\", ARConfigBase.FocusMode.AUTO_FOCUS.ordinal());\n        return focusMode;\n    }\n\n    public static Map<String, Object> getUpdateMode() {\n        Map<String, Object> updateMode = new ArrayMap<>();\n        updateMode.put(\"BLOCKING\", ARConfigBase.UpdateMode.BLOCKING.ordinal());\n        updateMode.put(\"LATEST_CAMERA_IMAGE\", ARConfigBase.UpdateMode.LATEST_CAMERA_IMAGE.ordinal());\n        return updateMode;\n    }\n\n    public static Map<String, Object> getPlaneFindingMode() {\n        Map<String, Object> planeFindingMode = new ArrayMap<>();\n        planeFindingMode.put(\"DISABLED\", ARConfigBase.PlaneFindingMode.DISABLED.ordinal());\n        planeFindingMode.put(\"VERTICAL_ONLY\", ARConfigBase.PlaneFindingMode.VERTICAL_ONLY.ordinal());\n        planeFindingMode.put(\"HORIZONTAL_ONLY\", ARConfigBase.PlaneFindingMode.HORIZONTAL_ONLY.ordinal());\n        planeFindingMode.put(\"ENABLE\", ARConfigBase.PlaneFindingMode.ENABLE.ordinal());\n        return planeFindingMode;\n    }\n\n    public static Map<String, Object> getCameraLensFacing() {\n        Map<String, Object> cameraLensFacing = new ArrayMap<>();\n        cameraLensFacing.put(\"FRONT\", ARConfigBase.CameraLensFacing.FRONT.ordinal());\n        cameraLensFacing.put(\"REAR\", ARConfigBase.CameraLensFacing.REAR.ordinal());\n        return cameraLensFacing;\n    }\n\n    public static Map<String, Object> getLightMode() {\n        Map<String, Object> lightMode = new ArrayMap<>();\n        lightMode.put(\"NONE\", ARConfigBase.LIGHT_MODE_NONE);\n        lightMode.put(\"AMBIENT_INTENSITY\", ARConfigBase.LIGHT_MODE_AMBIENT_INTENSITY);\n        lightMode.put(\"ENVIRONMENT_LIGHTING\", ARConfigBase.LIGHT_MODE_ENVIRONMENT_LIGHTING);\n        lightMode.put(\"ENVIRONMENT_TEXTURE\", ARConfigBase.LIGHT_MODE_ENVIRONMENT_TEXTURE);\n        lightMode.put(\"ALL\", ARConfigBase.LIGHT_MODE_ALL);\n        return lightMode;\n    }\n\n    public static Map<String, Object> getTracingState() {\n        Map<String, Object> trackingStates = new HashMap<>();\n        trackingStates.put(\"PAUSED\", ARTrackable.TrackingState.PAUSED.ordinal());\n        trackingStates.put(\"TRACKING\", ARTrackable.TrackingState.TRACKING.ordinal());\n        trackingStates.put(\"STOPPED\", ARTrackable.TrackingState.STOPPED.ordinal());\n        trackingStates.put(\"UNKNOWN_STATE\", ARTrackable.TrackingState.UNKNOWN_STATE.ordinal());\n        return trackingStates;\n    }\n\n    public static Map<String, Object> getHandTypes() {\n        Map<String, Object> handTypes = new HashMap<>();\n        handTypes.put(\"AR_HAND_LEFT\", ARHand.ARHandType.AR_HAND_LEFT.ordinal());\n        handTypes.put(\"AR_HAND_RIGHT\", ARHand.ARHandType.AR_HAND_RIGHT.ordinal());\n        handTypes.put(\"AR_HAND_UNKNOWN\", ARHand.ARHandType.AR_HAND_UNKNOWN.ordinal());\n        return handTypes;\n    }\n\n    public static Map<String, Object> getHandSkeletonType() {\n        Map<String, Object> handSkeletonTypes = new HashMap<>();\n        handSkeletonTypes.put(\"INDEX_1\", ARHand.ARHandSkeletonType.HANDSKELETON_INDEX_1.ordinal());\n        handSkeletonTypes.put(\"INDEX_2\", ARHand.ARHandSkeletonType.HANDSKELETON_INDEX_2.ordinal());\n        handSkeletonTypes.put(\"INDEX_3\", ARHand.ARHandSkeletonType.HANDSKELETON_INDEX_3.ordinal());\n        handSkeletonTypes.put(\"INDEX_4\", ARHand.ARHandSkeletonType.HANDSKELETON_INDEX_4.ordinal());\n        handSkeletonTypes.put(\"LENGTH\", ARHand.ARHandSkeletonType.HANDSKELETON_LENGTH.ordinal());\n        handSkeletonTypes.put(\"MIDDLE_1\", ARHand.ARHandSkeletonType.HANDSKELETON_MIDDLE_1.ordinal());\n        handSkeletonTypes.put(\"MIDDLE_2\", ARHand.ARHandSkeletonType.HANDSKELETON_MIDDLE_2.ordinal());\n        handSkeletonTypes.put(\"MIDDLE_3\", ARHand.ARHandSkeletonType.HANDSKELETON_MIDDLE_3.ordinal());\n        handSkeletonTypes.put(\"MIDDLE_4\", ARHand.ARHandSkeletonType.HANDSKELETON_MIDDLE_4.ordinal());\n        handSkeletonTypes.put(\"PINKY_1\", ARHand.ARHandSkeletonType.HANDSKELETON_PINKY_1.ordinal());\n        handSkeletonTypes.put(\"PINKY_2\", ARHand.ARHandSkeletonType.HANDSKELETON_PINKY_2.ordinal());\n        handSkeletonTypes.put(\"PINKY_3\", ARHand.ARHandSkeletonType.HANDSKELETON_PINKY_3.ordinal());\n        handSkeletonTypes.put(\"PINKY_4\", ARHand.ARHandSkeletonType.HANDSKELETON_PINKY_4.ordinal());\n        handSkeletonTypes.put(\"RING_1\", ARHand.ARHandSkeletonType.HANDSKELETON_RING_1.ordinal());\n        handSkeletonTypes.put(\"RING_2\", ARHand.ARHandSkeletonType.HANDSKELETON_RING_2.ordinal());\n        handSkeletonTypes.put(\"RING_3\", ARHand.ARHandSkeletonType.HANDSKELETON_RING_3.ordinal());\n        handSkeletonTypes.put(\"RING_4\", ARHand.ARHandSkeletonType.HANDSKELETON_RING_4.ordinal());\n        handSkeletonTypes.put(\"ROOT\", ARHand.ARHandSkeletonType.HANDSKELETON_ROOT.ordinal());\n        handSkeletonTypes.put(\"THUMB_1\", ARHand.ARHandSkeletonType.HANDSKELETON_THUMB_1.ordinal());\n        handSkeletonTypes.put(\"THUMB_2\", ARHand.ARHandSkeletonType.HANDSKELETON_THUMB_2.ordinal());\n        handSkeletonTypes.put(\"THUMB_3\", ARHand.ARHandSkeletonType.HANDSKELETON_THUMB_3.ordinal());\n        handSkeletonTypes.put(\"THUMB_4\", ARHand.ARHandSkeletonType.HANDSKELETON_THUMB_4.ordinal());\n        handSkeletonTypes.put(\"UNKNOWN\", ARHand.ARHandSkeletonType.HANDSKELETON_UNKNOWN.ordinal());\n        return handSkeletonTypes;\n    }\n\n    public static Map<String, Object> getBodySkeletonType() {\n        Map<String, Object> bodySkeletonTypes = new HashMap<>();\n        bodySkeletonTypes.put(\"L_ANKLE\", ARBody.ARBodySkeletonType.BodySkeleton_l_Ankle.ordinal());\n        bodySkeletonTypes.put(\"L_EAR\", ARBody.ARBodySkeletonType.BodySkeleton_l_ear.ordinal());\n        bodySkeletonTypes.put(\"L_ELBOW\", ARBody.ARBodySkeletonType.BodySkeleton_l_Elbow.ordinal());\n        bodySkeletonTypes.put(\"L_EYE\", ARBody.ARBodySkeletonType.BodySkeleton_l_eye.ordinal());\n        bodySkeletonTypes.put(\"L_HIP\", ARBody.ARBodySkeletonType.BodySkeleton_l_Hip.ordinal());\n        bodySkeletonTypes.put(\"L_KNEE\", ARBody.ARBodySkeletonType.BodySkeleton_l_Knee.ordinal());\n        bodySkeletonTypes.put(\"L_SHO\", ARBody.ARBodySkeletonType.BodySkeleton_l_Sho.ordinal());\n        bodySkeletonTypes.put(\"L_TOE\", ARBody.ARBodySkeletonType.BodySkeleton_l_toe.ordinal());\n        bodySkeletonTypes.put(\"L_WRIST\", ARBody.ARBodySkeletonType.BodySkeleton_l_Wrist.ordinal());\n        bodySkeletonTypes.put(\"LENGTH\", ARBody.ARBodySkeletonType.BodySkeleton_Length.ordinal());\n        bodySkeletonTypes.put(\"NECK\", ARBody.ARBodySkeletonType.BodySkeleton_Neck.ordinal());\n        bodySkeletonTypes.put(\"NOSE\", ARBody.ARBodySkeletonType.BodySkeleton_nose.ordinal());\n        bodySkeletonTypes.put(\"SPINE\", ARBody.ARBodySkeletonType.BodySkeleton_spine.ordinal());\n        bodySkeletonTypes.put(\"UNKNOWN\", ARBody.ARBodySkeletonType.BodySkeleton_Unknown.ordinal());\n        bodySkeletonTypes.put(\"HEAD\", ARBody.ARBodySkeletonType.BodySkeleton_Head.ordinal());\n        bodySkeletonTypes.put(\"HIP_MID\", ARBody.ARBodySkeletonType.BodySkeleton_Hip_mid.ordinal());\n        bodySkeletonTypes.put(\"R_ANKLE\", ARBody.ARBodySkeletonType.BodySkeleton_r_Ankle.ordinal());\n        bodySkeletonTypes.put(\"R_EAR\", ARBody.ARBodySkeletonType.BodySkeleton_r_ear.ordinal());\n        bodySkeletonTypes.put(\"R_ELBOW\", ARBody.ARBodySkeletonType.BodySkeleton_r_Elbow.ordinal());\n        bodySkeletonTypes.put(\"R_EYE\", ARBody.ARBodySkeletonType.BodySkeleton_r_eye.ordinal());\n        bodySkeletonTypes.put(\"R_HIP\", ARBody.ARBodySkeletonType.BodySkeleton_r_Hip.ordinal());\n        bodySkeletonTypes.put(\"R_KNEE\", ARBody.ARBodySkeletonType.BodySkeleton_r_Knee.ordinal());\n        bodySkeletonTypes.put(\"R_SHO\", ARBody.ARBodySkeletonType.BodySkeleton_r_Sho.ordinal());\n        bodySkeletonTypes.put(\"R_TOE\", ARBody.ARBodySkeletonType.BodySkeleton_r_toe.ordinal());\n        bodySkeletonTypes.put(\"R_WRIST\", ARBody.ARBodySkeletonType.BodySkeleton_r_Wrist.ordinal());\n        return bodySkeletonTypes;\n    }\n\n    public static Map<String, Object> getSemanticPlaneLabel() {\n        Map<String, Object> semanticPlaneLabel = new HashMap<>();\n        semanticPlaneLabel.put(\"PLANE_CEILING\", ARPlane.SemanticPlaneLabel.PLANE_CEILING.ordinal());\n        semanticPlaneLabel.put(\"PLANE_FLOOR\", ARPlane.SemanticPlaneLabel.PLANE_FLOOR.ordinal());\n        semanticPlaneLabel.put(\"PLANE_OTHER\", ARPlane.SemanticPlaneLabel.PLANE_OTHER.ordinal());\n        semanticPlaneLabel.put(\"PLANE_SEAT\", ARPlane.SemanticPlaneLabel.PLANE_SEAT.ordinal());\n        semanticPlaneLabel.put(\"PLANE_TABLE\", ARPlane.SemanticPlaneLabel.PLANE_TABLE.ordinal());\n        semanticPlaneLabel.put(\"PLANE_WALL\", ARPlane.SemanticPlaneLabel.PLANE_WALL.ordinal());\n        semanticPlaneLabel.put(\"PLANE_DOOR\", ARPlane.SemanticPlaneLabel.PLANE_DOOR.ordinal());\n        semanticPlaneLabel.put(\"PLANE_WINDOW\", ARPlane.SemanticPlaneLabel.PLANE_WINDOW.ordinal());\n        semanticPlaneLabel.put(\"PLANE_BED\", ARPlane.SemanticPlaneLabel.PLANE_BED.ordinal());\n        return semanticPlaneLabel;\n    }\n\n    public static Map<String, Object> getPlaneTypes() {\n        Map<String, Object> planeTypes = new HashMap<>();\n        planeTypes.put(\"HORIZONTAL_DOWNWARD_FACING\", ARPlane.PlaneType.HORIZONTAL_DOWNWARD_FACING.ordinal());\n        planeTypes.put(\"VERTICAL_FACING\", ARPlane.PlaneType.VERTICAL_FACING.ordinal());\n        planeTypes.put(\"UNKNOWN_FACING\", ARPlane.PlaneType.UNKNOWN_FACING.ordinal());\n        planeTypes.put(\"HORIZONTAL_UPWARD_FACING\", ARPlane.PlaneType.HORIZONTAL_UPWARD_FACING.ordinal());\n        return planeTypes;\n    }\n\n    public static Map<String, Object> getCoordinateSystemType() {\n        Map<String, Object> coordinateSystemTypes = new HashMap<>();\n        coordinateSystemTypes.put(\"2D_IMAGE\", ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_2D_IMAGE.ordinal());\n        coordinateSystemTypes.put(\"3D_CAMERA\", ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_CAMERA.ordinal());\n        coordinateSystemTypes.put(\"3D_SELF\", ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_SELF.ordinal());\n        coordinateSystemTypes.put(\"3D_WORLD\", ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_3D_WORLD.ordinal());\n        coordinateSystemTypes.put(\"UNKNOWN\", ARCoordinateSystemType.COORDINATE_SYSTEM_TYPE_UNKNOWN.ordinal());\n        return coordinateSystemTypes;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/android/src/main/res/drawable/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <stroke android:width=\"3dp\" android:color=\"#e1ffff\"/>\n    <solid android:color=\"#1f00BCD4\"/>\n    <corners android:radius=\"5dip\"/>\n    <padding\n        android:left=\"2dp\"\n        android:top=\"2dp\"\n        android:right=\"2dp\"\n        android:bottom=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-ar/android/src/main/res/drawable/scanningframe.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:shape=\"rectangle\">\n\n    <stroke android:width=\"3dp\" android:color=\"#e1ffff\"/>\n\n    <solid android:color=\"#1f00BCD4\"/>\n\n    <corners android:radius=\"5dip\"/>\n\n    <padding\n            android:left=\"2dp\"\n            android:top=\"2dp\"\n            android:right=\"2dp\"\n            android:bottom=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-ar/example/App.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  StyleSheet,\n  PermissionsAndroid,\n  View,\n  Text,\n  BackHandler,\n  TouchableHighlight,\n  Image,\n} from \"react-native\";\n\nimport ARView, {\n  HmsARModule,\n} from \"@hmscore/react-native-hms-ar\";\n\nconst configWorldCommon = {\n  objectName: \"bob.obj\",\n  objectTexture: \"bob_texture.png\",\n  showPlanes: true,\n  planeOther: {\n    image: \"blueTexture.png\",\n  },\n  planeWall: {\n    text: \"Wall\",\n    red: 255,\n    blue: 255,\n    green: 0,\n    alpha: 255,\n  },\n  planeFloor: {\n    text: \"Floor\",\n    red: 255,\n    blue: 255,\n    green: 0,\n    alpha: 255,\n  },\n  planeSeat: {\n    text: \"Seat\",\n    red: 255,\n    blue: 255,\n    green: 0,\n    alpha: 255,\n  },\n  planeTable: {\n    image: \"blueTexture.png\",\n  },\n  planeCeiling: {\n    image: \"blueTexture.png\",\n  },\n  planeFindingMode: HmsARModule.PlaneFindingMode.ENABLE,\n  ...configCommon,\n};\n\nconst configCommon = {\n  lightMode: HmsARModule.LightMode.ALL,\n  semantic: {\n    mode: HmsARModule.SemanticMode.ALL,\n    showSemanticModeSupportedInfo: true\n  },\n  powerMode: HmsARModule.PowerMode.PERFORMANCE_FIRST,\n  focusMode: HmsARModule.FocusMode.AUTO_FOCUS,\n  updateMode: HmsARModule.UpdateMode.LATEST_CAMERA_IMAGE,\n}\n\nconst configLinePointCommon = {\n  drawLine: true,\n  drawPoint: true,\n  lineWidth: 30,\n  pointSize: 40,\n  lineColor: {\n    red: 0,\n    blue: 0,\n    green: 255,\n    alpha: 255,\n  },\n  pointColor: {\n    red: 255,\n    blue: 128,\n    green: 255,\n    alpha: 192,\n  },\n}\n\nconst configAugmentedImagesCommon = {\n  augmentedImages: [{\n    imgFileFromAsset: \"ARAugmentedImageTest.jpg\",\n    widthInMeters: 0,\n    imgName: \"ImageTest\",\n  }]\n}\n\nclass Hand extends React.Component {\n  state = {\n    text: \"\"\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => this.setState({ text })}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            hand: {\n              boxColor: {\n                red: 255,\n                blue: 0,\n                green: 0,\n                alpha: 255,\n              },\n              drawBox: true,\n              lineWidthSkeleton: 30,\n              ...configLinePointCommon,\n              ...configCommon,\n            },\n          }}\n        />\n        <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>\n      </>\n    );\n  }\n};\n\nclass Body extends React.Component {\n  state = {\n    text: \"\"\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => this.setState({ text })}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            body: {\n              ...configLinePointCommon,\n              ...configCommon,\n            },\n          }}\n        />\n        <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>\n      </>\n    );\n  }\n};\n\nclass Face extends React.Component {\n  state = {\n    text: \"\",\n    event: \"\",\n    result: \"\",\n    processProgressEvent: \"process 0%\",\n    healty: false\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => this.setState({ text })}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            face: {\n              enableHealthDevice: this.state.healty,\n              healty: {\n                handleProcessProgressEvent: (num) => { this.setState({ processProgressEvent: (\"process \" + num + \"%\") }) },\n                handleEvent: (status) => { this.setState({ event: status }) },\n                handleResult: (result) => { this.setState({ result: result }) },\n              },\n              multiFace: true,\n              drawFace: true,\n              pointSize: 15,\n              depthColor: {\n                red: 255,\n                blue: 255,\n                green: 255,\n                alpha: 0,\n              },\n              texturePath: \"blueTexture.png\",\n              ...configCommon,\n            },\n          }}\n        />\n        {!this.state.healty && <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>}\n        {this.state.healty && (\n          <View style={{ justifyContent: \"center\", alignItems: \"center\", position: \"absolute\", height: \"100%\", width: \"100%\", backgroundColor: \"transparent\" }}>\n            <Text style={{ top: 150, position: \"absolute\", top: 20, color: \"white\", fontSize: 15 }}>{this.state.event}</Text>\n            <View style={{\n              width: 250,\n              height: 250,\n              borderColor: 'red',\n              borderWidth: 3,\n              borderRadius: 200,\n              paddingBottom: 20,\n              alignItems: \"center\",\n              justifyContent: \"flex-end\",\n              marginTop: -150,\n              transform: [\n                { scaleY: 1.5 }\n              ]\n            }} />\n            <Text style={{ color: \"white\", fontSize: 13 }}>{this.state.processProgressEvent}</Text>\n            <Text style={{ position: \"absolute\", bottom: 20, color: \"white\", fontSize: 10 }}>{this.state.result}</Text>\n          </View>\n        )}\n      </>\n\n    );\n  }\n};\n\nclass World extends React.Component {\n  state = {\n    text: \"\"\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => {\n            console.log(\"messageListener\", text);\n            this.setState({ text })\n          }}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            world: {\n              ...configWorldCommon,\n              maxMapSize: 800,\n              ...configAugmentedImagesCommon,\n              aiBoxLineWidth: 30,\n              aiBoxPointSize: 40,\n              aiBoxLineColor: {\n                red: 0,\n                blue: 0,\n                green: 255,\n                alpha: 255,\n              },\n              aiBoxPointColor: {\n                red: 255,\n                blue: 128,\n                green: 255,\n                alpha: 192,\n              },\n\n              drawLineAI: true,\n              drawPointAI: true,\n              lineWidthAI: 30,\n              pointSizeAI: 40,\n              lineColorAI: {\n                red: 0,\n                blue: 0,\n                green: 255,\n                alpha: 255,\n              },\n              pointColorAI: {\n                red: 255,\n                blue: 128,\n                green: 255,\n                alpha: 192,\n              },\n            },\n          }}\n        />\n        <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>\n      </>\n\n    );\n  }\n};\n\nconst AugmentedImage = () => {\n  return (\n    <ARView\n      style={styles.arView}\n      onDrawFrame={(e) => console.log(e)}\n      handleCameraConfig={(e) => console.log(e)}\n      handleCameraIntrinsics={(e) => console.log(e)}\n      config={{\n        augmentedImage: {\n          ...configAugmentedImagesCommon,\n          ...configCommon,\n          ...configLinePointCommon,\n        }\n      }}\n    />\n  );\n};\n\nclass WorldBody extends React.Component {\n  state = {\n    text: \"\"\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => this.setState({ text })}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            worldBody: {\n              ...configWorldCommon,\n              ...configLinePointCommon,\n              maxMapSize: 1800,\n            },\n          }}\n        />\n        <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>\n      </>\n    );\n  }\n};\n\nclass SceneMesh extends React.Component {\n  state = {\n    text: \"\"\n  }\n\n  render() {\n    return (\n      <>\n        <ARView\n          style={styles.arView}\n          onDrawFrame={(e) => console.log(e)}\n          messageListener={(text) => this.setState({ text })}\n          handleCameraConfig={(e) => console.log(e)}\n          handleCameraIntrinsics={(e) => console.log(e)}\n          config={{\n            sceneMesh: {\n              objectName: \"bob.obj\",\n              objectTexture: \"bob_texture.png\",\n              ...configCommon,\n            },\n          }}\n        />\n        <Text style={{ position: \"absolute\", color: \"white\", fontSize: 8 }}>{this.state.text}</Text>\n      </>\n    );\n  }\n};\n\nconst scenes = [\n  {\n    name: \"HAND\",\n    id: 0,\n    component: <Hand key=\"Hand\" />,\n  },\n  {\n    name: \"BODY\",\n    id: 1,\n    component: <Body key=\"Body\" />,\n  },\n  {\n    name: \"FACE\",\n    id: 2,\n    component: <Face key=\"Face\" />,\n  },\n  {\n    name: \"WORLD\",\n    id: 3,\n    component: <World key=\"World\" />,\n  },\n  {\n    name: \"AUGMENTED IMAGE\",\n    id: 4,\n    component: <AugmentedImage key=\"AugmentedImage\" />,\n  },\n  {\n    name: \"WORLD BODY\",\n    id: 5,\n    component: <WorldBody key=\"WorldBody\" />,\n  },\n  {\n    name: \"SCENE MESH\",\n    id: 6,\n    component: <SceneMesh key=\"SceneMesh\" />,\n  }\n];\nclass App extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      isMain: true,\n      sceneId: 0,\n    };\n    this.requestPermissions();\n  }\n\n  handleBackButton = () => {\n    this.setState({ isMain: true });\n    return true;\n  };\n\n  componentDidMount() {\n    BackHandler.addEventListener(\"hardwareBackPress\", this.handleBackButton);\n    HmsARModule.isAREngineReady().then((response) => {\n      // Checks weather HUAWEI AR Engine is installed.\n      console.log(response);\n      if (response === false) {\n        HmsARModule.navigateToAppMarket();\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    BackHandler.removeEventListener(\"hardwareBackPress\", this.handleBackButton);\n  }\n\n  requestPermissions = async () => {\n    try {\n      const granted = await PermissionsAndroid.request(\n        PermissionsAndroid.PERMISSIONS.CAMERA\n      );\n      if (granted === PermissionsAndroid.RESULTS.GRANTED) {\n        console.log(\"You can use the camera\");\n      } else {\n        console.log(\"Camera permission denied\");\n      }\n    } catch (err) {\n      console.warn(err);\n    }\n  };\n\n  render() {\n    return this.state.isMain ? (\n      <View style={styles.inputsContainer}>\n        <View style={styles.header}>\n          <Text style={styles.headerTitle}>HMS React Native AR Plugin</Text>\n          <Image\n            style={styles.headerImage}\n            source={require('./src/assets/hms-rn-logo.png')} />\n        </View>\n        <View style={styles.buttonsContainer}>\n          {scenes.map((scene) => (\n            <TouchableHighlight\n              key={scene.id}\n              style={styles.button}\n              onPress={() => this.setState({ isMain: false, sceneId: scene.id })}\n            >\n              <Text style={styles.buttonText}>{scene.name}</Text>\n            </TouchableHighlight>\n          ))}\n        </View>\n      </View>\n    ) : (\n      <View style={styles.container}>\n        {scenes[this.state.sceneId].component}\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  inputsContainer: {\n    flex: 1,\n    backgroundColor: \"#1c1c1c\",\n  },\n  header: {\n    flex: 1,\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    flexDirection: \"row\",\n    margin: 10,\n    marginHorizontal: 30,\n  },\n  headerTitle: {\n    fontWeight: \"bold\",\n    color: \"#909090\"\n  },\n  headerImage: {\n    resizeMode: \"center\",\n    width: 100,\n    height: 100,\n  },\n  buttonsContainer: {\n    flex: 4,\n  },\n  button: {\n    flex: 1,\n    flexDirection: \"row\",\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    backgroundColor: \"#2e2e2e\",\n    margin: 10,\n    elevation: 5,\n    borderRadius: 5,\n  },\n  buttonText: {\n    fontSize: 24,\n    fontWeight: \"bold\",\n    color: \"#909090\",\n  },\n  container: {\n    flex: 1,\n    alignItems: \"stretch\",\n  },\n  arView: {\n    height: \"100%\",\n  },\n});\n\nexport default App;"
  },
  {
    "path": "react-native-hms-ar/example/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-ar/example/README.md",
    "content": "# React-Native HMS AR - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native AR Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS AR - Demo is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.hms.rn.ar.demo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.hms.rn.ar.demo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n    entryFile: \"index.js\"\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n      exclude group:'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:ignore=\"GoogleAppIndexingWarning\"\n        tools:targetApi=\"28\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.ar.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\"com.huawei.hms.rn.ar.demo.MainApplication\"\n      android:label=\"RNHMSARDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:usesCleartextTraffic=\"true\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\"com.huawei.hms.rn.ar.demo.MainActivity\"\n        android:label=\"RNHMSARDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/assets/AR_logo.obj",
    "content": "# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware\n# File Created: 04.05.2018 14:30:15\n\nmtllib AR_logo.mtl\n\n#\n# object Mesh\n#\n\nv  -0.1399 0.3417 0.1636\nv  -0.1402 0.3417 0.1635\nv  0.2006 0.3417 0.1635\nv  0.3673 0.3567 0.1609\nv  -0.1396 0.3417 0.1636\nv  -0.1392 0.3417 0.1637\nv  -0.1389 0.3417 0.1638\nv  -0.1384 0.3417 0.1640\nv  0.2006 0.3417 0.3355\nv  0.2609 0.0000 0.2238\nv  -0.2630 0.0000 0.2238\nv  -0.2998 0.3567 0.1609\nv  -0.2624 0.0000 0.2238\nv  -0.2619 0.0000 0.2239\nv  -0.2615 0.0000 0.2241\nv  -0.1379 0.3417 0.1643\nv  -0.2610 0.0001 0.2243\nv  -0.1375 0.3417 0.1647\nv  -0.2605 0.0003 0.2246\nv  -0.1372 0.3417 0.1652\nv  -0.2597 0.0009 0.2253\nv  -0.2601 0.0005 0.2249\nv  -0.1369 0.3417 0.1657\nv  -0.2593 0.0013 0.2257\nv  -0.1368 0.3417 0.1663\nv  -0.2589 0.0018 0.2262\nv  -0.1367 0.3417 0.1669\nv  -0.1367 0.3417 0.3355\nv  -0.2587 0.0023 0.3957\nv  -0.2587 0.0023 0.2267\nv  0.2006 0.3417 0.3357\nv  -0.1367 0.3417 0.3357\nv  0.2609 0.0000 0.3957\nv  0.2033 0.3417 0.1060\nv  0.2038 0.3417 0.1060\nv  0.0694 0.3417 0.1060\nv  0.3675 0.3567 0.1188\nv  0.2029 0.3417 0.1059\nv  0.2025 0.3417 0.1057\nv  0.2021 0.3417 0.1054\nv  0.2017 0.3417 0.1051\nv  0.2014 0.3417 0.1046\nv  0.0694 0.3417 -0.1068\nv  0.0694 0.3567 -0.0940\nv  0.0694 0.3567 0.1188\nv  0.3673 0.3567 0.1188\nv  0.3674 0.3567 0.1188\nv  0.2638 0.0012 -0.1842\nv  0.2633 0.0008 -0.1845\nv  0.2629 0.0005 -0.1849\nv  0.2625 0.0003 -0.1854\nv  0.2621 0.0001 -0.1859\nv  0.2618 0.0000 -0.1863\nv  0.2011 0.3417 0.1041\nv  0.2615 0.0000 -0.1868\nv  0.2008 0.3417 0.1035\nv  0.2612 0.0000 -0.1873\nv  0.2007 0.3417 0.1031\nv  0.2610 0.0000 -0.1879\nv  0.2007 0.3417 0.1028\nv  0.2006 0.3417 0.1024\nv  0.2609 0.0000 -0.1885\nv  0.2006 0.3417 0.1020\nv  0.2006 0.3417 -0.1068\nv  0.2609 0.0000 -0.1892\nv  0.2609 0.0000 -0.3981\nv  0.4302 0.0000 -0.3981\nv  0.3673 0.3567 -0.0940\nv  0.4312 0.0002 -0.3979\nv  0.4307 0.0000 -0.3980\nv  0.4302 0.0000 -0.1868\nv  0.2006 0.3417 0.3360\nv  -0.1367 0.3417 0.3359\nv  0.2609 0.0000 0.3960\nv  0.2609 0.0000 0.3962\nv  0.2609 0.0001 0.3966\nv  -0.1367 0.3418 0.3363\nv  0.2006 0.3418 0.3364\nv  0.4302 0.0000 0.3961\nv  0.4302 0.0001 0.3965\nv  0.4302 0.0001 0.3963\nv  0.4302 0.0000 0.2238\nv  0.4302 0.0000 0.3957\nv  0.3676 0.3567 0.1609\nv  0.3678 0.3567 0.1609\nv  0.4336 0.0041 0.3957\nv  0.3404 0.5328 0.1335\nv  0.2924 0.8046 0.0856\nv  0.3404 0.5327 0.1329\nv  0.2850 0.8467 -0.2119\nv  0.2924 0.8046 -0.0199\nv  0.2925 0.8040 0.0850\nv  0.2636 0.9685 -0.0592\nv  0.2636 0.9685 0.2256\nv  0.2636 0.9685 -0.0613\nv  0.2636 0.9684 -0.0633\nv  0.2636 0.9684 -0.0654\nv  0.2636 0.9683 -0.0675\nv  0.2636 0.9682 -0.0695\nv  0.2636 0.9680 -0.0716\nv  0.2637 0.9678 -0.0737\nv  0.2637 0.9676 -0.0757\nv  0.2637 0.9674 -0.0778\nv  0.2638 0.9672 -0.0798\nv  0.2638 0.9669 -0.0818\nv  0.2639 0.9665 -0.0839\nv  0.2640 0.9659 -0.0879\nv  0.2642 0.9651 -0.0919\nv  0.2643 0.9642 -0.0959\nv  0.2645 0.9632 -0.0998\nv  0.2647 0.9621 -0.1038\nv  0.2649 0.9609 -0.1076\nv  0.2651 0.9596 -0.1115\nv  0.2654 0.9582 -0.1154\nv  0.2656 0.9567 -0.1191\nv  0.2659 0.9551 -0.1229\nv  0.2662 0.9534 -0.1266\nv  0.2665 0.9516 -0.1303\nv  0.2669 0.9498 -0.1339\nv  0.2672 0.9478 -0.1374\nv  0.2676 0.9458 -0.1409\nv  0.2679 0.9436 -0.1444\nv  0.2684 0.9414 -0.1478\nv  0.2688 0.9390 -0.1511\nv  0.2692 0.9366 -0.1544\nv  0.2696 0.9341 -0.1576\nv  0.2701 0.9316 -0.1607\nv  0.2705 0.9289 -0.1637\nv  0.2710 0.9262 -0.1667\nv  0.2715 0.9234 -0.1697\nv  0.2720 0.9205 -0.1725\nv  0.2725 0.9176 -0.1753\nv  0.2731 0.9145 -0.1780\nv  0.2736 0.9114 -0.1806\nv  0.2742 0.9083 -0.1831\nv  0.2747 0.9051 -0.1855\nv  0.2753 0.9018 -0.1879\nv  0.2759 0.8984 -0.1902\nv  0.2765 0.8950 -0.1923\nv  0.2771 0.8916 -0.1944\nv  0.2777 0.8881 -0.1964\nv  0.2784 0.8845 -0.1983\nv  0.2790 0.8809 -0.2001\nv  0.2796 0.8773 -0.2018\nv  0.2803 0.8736 -0.2034\nv  0.2809 0.8699 -0.2049\nv  0.2816 0.8661 -0.2064\nv  0.2823 0.8623 -0.2077\nv  0.2830 0.8585 -0.2089\nv  0.2836 0.8546 -0.2100\nv  0.2843 0.8507 -0.2110\nv  0.2847 0.8487 -0.2114\nv  0.3405 0.5319 0.1336\nv  0.3407 0.5311 0.1336\nv  0.3406 0.5312 0.1331\nv  0.3405 0.5319 0.1330\nv  0.3408 0.5302 0.1334\nv  0.3408 0.5304 0.1331\nv  0.3410 0.5293 0.1332\nv  0.3409 0.5296 0.1329\nv  0.3411 0.5285 0.1329\nv  0.3411 0.5289 0.1327\nv  0.3413 0.5278 0.1324\nv  0.3412 0.5281 0.1324\nv  0.3414 0.5271 0.1319\nv  0.3413 0.5274 0.1320\nv  0.3415 0.5264 0.1313\nv  0.3414 0.5268 0.1315\nv  0.3416 0.5259 0.1306\nv  0.3415 0.5262 0.1309\nv  0.3416 0.5257 0.1303\nv  0.3417 0.5255 0.1299\nv  0.3415 0.5260 0.1297\nv  0.3414 0.5264 0.1303\nv  0.3417 0.5251 0.1291\nv  0.3416 0.5256 0.1290\nv  0.3418 0.5248 0.1283\nv  0.3416 0.5254 0.1282\nv  0.3418 0.5247 0.1275\nv  0.3417 0.5252 0.1274\nv  0.3418 0.5246 0.1266\nv  0.3707 0.3607 0.1638\nv  0.3418 0.5246 -0.0639\nv  0.3417 0.5250 -0.0639\nv  0.3417 0.5251 0.1266\nv  0.3415 0.5264 -0.2796\nv  0.3418 0.5247 -0.0659\nv  0.3422 0.5224 -0.2799\nv  0.3418 0.5248 -0.0679\nv  0.3417 0.5252 -0.0678\nv  0.3417 0.5251 -0.0659\nv  0.3417 0.5251 -0.0699\nv  0.3416 0.5255 -0.0697\nv  0.3417 0.5255 -0.0718\nv  0.3416 0.5258 -0.0716\nv  0.3416 0.5259 -0.0738\nv  0.3415 0.5263 -0.0735\nv  0.3415 0.5265 -0.0757\nv  0.3414 0.5268 -0.0754\nv  0.3408 0.5304 -0.2793\nv  0.3414 0.5271 -0.0775\nv  0.3413 0.5275 -0.0772\nv  0.3412 0.5279 -0.0794\nv  0.3412 0.5282 -0.0790\nv  0.3411 0.5288 -0.0812\nv  0.3410 0.5290 -0.0807\nv  0.3409 0.5297 -0.0829\nv  0.3409 0.5299 -0.0824\nv  0.3407 0.5307 -0.0846\nv  0.3407 0.5310 -0.0841\nv  0.3401 0.5344 -0.2788\nv  0.3406 0.5319 -0.0862\nv  0.3405 0.5320 -0.0857\nv  0.3403 0.5331 -0.0878\nv  0.3403 0.5332 -0.0872\nv  0.3401 0.5343 -0.0893\nv  0.3401 0.5344 -0.0887\nv  0.3399 0.5356 -0.0907\nv  0.3398 0.5358 -0.0900\nv  0.3398 0.5364 -0.2785\nv  0.3399 0.5357 -0.0908\nv  0.3397 0.5370 -0.0920\nv  0.3396 0.5371 -0.0914\nv  0.3396 0.5371 -0.0922\nv  0.3394 0.5384 -0.2782\nv  0.3394 0.5387 -0.0935\nv  0.3394 0.5385 -0.0932\nv  0.3391 0.5404 -0.2779\nv  0.3391 0.5402 -0.0947\nv  0.3391 0.5400 -0.0944\nv  0.3388 0.5419 -0.0958\nv  0.3388 0.5416 -0.0955\nv  0.3387 0.5424 -0.2775\nv  0.3385 0.5436 -0.0969\nv  0.3386 0.5432 -0.0965\nv  0.3383 0.5444 -0.2771\nv  0.3382 0.5454 -0.0979\nv  0.3382 0.5449 -0.0974\nv  0.3380 0.5464 -0.2767\nv  0.3380 0.5463 -0.0983\nv  0.3378 0.5472 -0.0987\nv  0.3379 0.5466 -0.0983\nv  0.3377 0.5481 -0.0991\nv  0.3375 0.5490 -0.0995\nv  0.3376 0.5483 -0.0990\nv  0.3374 0.5500 -0.0998\nv  0.3372 0.5509 -0.1002\nv  0.3373 0.5501 -0.0997\nv  0.3370 0.5519 -0.1005\nv  0.3368 0.5529 -0.1007\nv  0.3370 0.5520 -0.1002\nv  0.3367 0.5538 -0.1010\nv  0.3367 0.5538 -0.1007\nv  0.3365 0.5548 -0.1012\nv  0.3363 0.5558 -0.1014\nv  0.3363 0.5557 -0.1011\nv  0.3362 0.5568 -0.1016\nv  0.3360 0.5578 -0.1017\nv  0.3360 0.5575 -0.1014\nv  0.3358 0.5588 -0.1019\nv  0.3356 0.5598 -0.1020\nv  0.3357 0.5594 -0.1015\nv  0.3355 0.5608 -0.1020\nv  0.3353 0.5618 -0.1021\nv  0.3353 0.5613 -0.1016\nv  0.3351 0.5628 -0.1021\nv  0.3349 0.5638 -0.1021\nv  0.3350 0.5632 -0.1016\nv  0.3347 0.5648 -0.1020\nv  0.3345 0.5658 -0.1019\nv  0.3346 0.5651 -0.1015\nv  0.3344 0.5669 -0.1019\nv  0.3342 0.5679 -0.1017\nv  0.3343 0.5670 -0.1013\nv  0.3340 0.5688 -0.1016\nv  0.3338 0.5699 -0.1014\nv  0.3340 0.5689 -0.1011\nv  0.3337 0.5708 -0.1012\nv  0.2978 0.7745 -0.0572\nv  0.2978 0.7745 -0.0571\nv  0.2977 0.7744 -0.0567\nv  0.3337 0.5707 -0.1007\nv  0.2974 0.7764 -0.0568\nv  0.2971 0.7783 -0.0562\nv  0.2971 0.7783 -0.0560\nv  0.2974 0.7764 -0.0566\nv  0.2968 0.7802 -0.0556\nv  0.2968 0.7801 -0.0554\nv  0.2965 0.7820 -0.0548\nv  0.2965 0.7819 -0.0546\nv  0.2961 0.7837 -0.0540\nv  0.2958 0.7854 -0.0530\nv  0.2961 0.7837 -0.0537\nv  0.2955 0.7871 -0.0521\nv  0.2958 0.7854 -0.0527\nv  0.2953 0.7887 -0.0510\nv  0.2955 0.7870 -0.0517\nv  0.2950 0.7902 -0.0498\nv  0.2952 0.7887 -0.0505\nv  0.2947 0.7917 -0.0486\nv  0.2950 0.7902 -0.0493\nv  0.2945 0.7931 -0.0473\nv  0.2947 0.7917 -0.0480\nv  0.2943 0.7944 -0.0459\nv  0.2945 0.7931 -0.0467\nv  0.2940 0.7957 -0.0445\nv  0.2942 0.7944 -0.0452\nv  0.2938 0.7969 -0.0430\nv  0.2940 0.7957 -0.0437\nv  0.2936 0.7980 -0.0414\nv  0.2938 0.7969 -0.0421\nv  0.2935 0.7990 -0.0398\nv  0.2936 0.7980 -0.0405\nv  0.2933 0.8000 -0.0382\nv  0.2934 0.7990 -0.0388\nv  0.2931 0.8008 -0.0365\nv  0.2932 0.7999 -0.0371\nv  0.2930 0.8016 -0.0348\nv  0.2931 0.8008 -0.0353\nv  0.2929 0.8023 -0.0330\nv  0.2930 0.8015 -0.0335\nv  0.2927 0.8029 -0.0312\nv  0.2928 0.8022 -0.0316\nv  0.2927 0.8034 -0.0294\nv  0.2927 0.8027 -0.0297\nv  0.2926 0.8038 -0.0275\nv  0.2926 0.8032 -0.0278\nv  0.2925 0.8042 -0.0256\nv  0.2926 0.8035 -0.0258\nv  0.2925 0.8044 -0.0238\nv  0.2925 0.8038 -0.0239\nv  0.2925 0.8045 -0.0219\nv  0.2925 0.8039 -0.0219\nv  0.2925 0.8040 -0.0199\nv  0.2634 0.9691 -0.0592\nv  0.2635 0.9686 0.2262\nv  0.2635 0.9688 0.2256\nv  0.2634 0.9690 -0.0632\nv  0.2634 0.9689 -0.0672\nv  0.2635 0.9686 -0.0712\nv  0.2635 0.9682 -0.0753\nv  0.2636 0.9678 -0.0792\nv  0.2637 0.9672 -0.0832\nv  0.2638 0.9666 -0.0872\nv  0.2640 0.9658 -0.0912\nv  0.2641 0.9650 -0.0951\nv  0.2643 0.9640 -0.0990\nv  0.2645 0.9629 -0.1029\nv  0.2647 0.9618 -0.1067\nv  0.2649 0.9605 -0.1105\nv  0.2652 0.9592 -0.1143\nv  0.2654 0.9578 -0.1181\nv  0.2657 0.9562 -0.1218\nv  0.2660 0.9546 -0.1254\nv  0.2663 0.9529 -0.1291\nv  0.2666 0.9511 -0.1327\nv  0.2669 0.9491 -0.1362\nv  0.2673 0.9472 -0.1397\nv  0.2676 0.9451 -0.1431\nv  0.2680 0.9429 -0.1465\nv  0.2684 0.9407 -0.1498\nv  0.2688 0.9383 -0.1530\nv  0.2693 0.9359 -0.1562\nv  0.2697 0.9334 -0.1594\nv  0.2701 0.9308 -0.1624\nv  0.2706 0.9282 -0.1654\nv  0.2711 0.9255 -0.1683\nv  0.2716 0.9227 -0.1712\nv  0.2721 0.9198 -0.1740\nv  0.2726 0.9169 -0.1767\nv  0.2731 0.9139 -0.1793\nv  0.2737 0.9108 -0.1818\nv  0.2742 0.9077 -0.1843\nv  0.2748 0.9045 -0.1867\nv  0.2754 0.9012 -0.1890\nv  0.2760 0.8979 -0.1912\nv  0.2766 0.8946 -0.1933\nv  0.2771 0.8911 -0.1953\nv  0.2778 0.8877 -0.1973\nv  0.2784 0.8841 -0.1991\nv  0.2790 0.8806 -0.2009\nv  0.2797 0.8770 -0.2026\nv  0.2803 0.8733 -0.2042\nv  0.2809 0.8696 -0.2056\nv  0.2816 0.8659 -0.2070\nv  0.2822 0.8622 -0.2083\nv  0.2829 0.8584 -0.2095\nv  0.2836 0.8546 -0.2106\nv  0.2843 0.8507 -0.2116\nv  0.3379 0.5465 -0.2773\nv  0.2849 0.8468 -0.2125\nv  0.3386 0.5426 -0.2781\nv  0.4307 0.0002 -0.1859\nv  0.4312 0.0003 -0.1858\nv  0.4307 0.0004 -0.1854\nv  0.3393 0.5387 -0.2788\nv  0.3400 0.5347 -0.2794\nv  0.3407 0.5308 -0.2798\nv  0.3414 0.5268 -0.2802\nv  0.3421 0.5228 -0.2805\nv  0.3429 0.5184 -0.2801\nv  0.3428 0.5189 -0.2807\nv  0.3436 0.5145 -0.2801\nv  0.3435 0.5149 -0.2807\nv  0.3443 0.5105 -0.2801\nv  0.3442 0.5109 -0.2807\nv  0.3450 0.5066 -0.2799\nv  0.3449 0.5069 -0.2806\nv  0.3457 0.5026 -0.2797\nv  0.3456 0.5030 -0.2803\nv  0.3464 0.4987 -0.2793\nv  0.3463 0.4990 -0.2799\nv  0.3471 0.4948 -0.2788\nv  0.3470 0.4950 -0.2795\nv  0.3478 0.4909 -0.2783\nv  0.3477 0.4911 -0.2789\nv  0.3485 0.4870 -0.2776\nv  0.3484 0.4872 -0.2783\nv  0.3492 0.4831 -0.2769\nv  0.3491 0.4832 -0.2775\nv  0.3498 0.4792 -0.2760\nv  0.3498 0.4794 -0.2766\nv  0.3505 0.4754 -0.2750\nv  0.3504 0.4755 -0.2757\nv  0.3512 0.4716 -0.2739\nv  0.3511 0.4717 -0.2746\nv  0.3518 0.4678 -0.2728\nv  0.3518 0.4679 -0.2734\nv  0.3525 0.4640 -0.2715\nv  0.3524 0.4641 -0.2721\nv  0.3532 0.4603 -0.2701\nv  0.3531 0.4603 -0.2708\nv  0.3538 0.4566 -0.2687\nv  0.3538 0.4566 -0.2693\nv  0.3545 0.4530 -0.2671\nv  0.3544 0.4529 -0.2677\nv  0.3551 0.4494 -0.2654\nv  0.3550 0.4493 -0.2661\nv  0.3557 0.4458 -0.2637\nv  0.3557 0.4457 -0.2643\nv  0.3564 0.4423 -0.2619\nv  0.3563 0.4422 -0.2625\nv  0.3570 0.4388 -0.2599\nv  0.3569 0.4387 -0.2606\nv  0.3576 0.4354 -0.2579\nv  0.3575 0.4352 -0.2585\nv  0.3581 0.4320 -0.2558\nv  0.3581 0.4319 -0.2564\nv  0.3587 0.4287 -0.2536\nv  0.3587 0.4285 -0.2542\nv  0.3593 0.4255 -0.2513\nv  0.3593 0.4252 -0.2519\nv  0.3599 0.4223 -0.2490\nv  0.3599 0.4220 -0.2495\nv  0.3604 0.4192 -0.2465\nv  0.3604 0.4189 -0.2471\nv  0.3610 0.4161 -0.2440\nv  0.3610 0.4158 -0.2445\nv  0.3615 0.4131 -0.2414\nv  0.3615 0.4128 -0.2419\nv  0.3620 0.4101 -0.2387\nv  0.3620 0.4098 -0.2392\nv  0.3625 0.4073 -0.2359\nv  0.3625 0.4069 -0.2364\nv  0.3630 0.4045 -0.2331\nv  0.3630 0.4041 -0.2335\nv  0.3635 0.4017 -0.2302\nv  0.3635 0.4013 -0.2306\nv  0.3640 0.3991 -0.2272\nv  0.3640 0.3987 -0.2276\nv  0.3644 0.3965 -0.2241\nv  0.3644 0.3961 -0.2246\nv  0.3649 0.3940 -0.2210\nv  0.3649 0.3936 -0.2214\nv  0.3653 0.3916 -0.2178\nv  0.3653 0.3911 -0.2182\nv  0.3657 0.3892 -0.2146\nv  0.3657 0.3888 -0.2150\nv  0.3661 0.3870 -0.2113\nv  0.3661 0.3865 -0.2116\nv  0.3665 0.3848 -0.2079\nv  0.3665 0.3843 -0.2083\nv  0.3669 0.3827 -0.2045\nv  0.3669 0.3822 -0.2048\nv  0.3672 0.3807 -0.2010\nv  0.3672 0.3802 -0.2013\nv  0.3675 0.3788 -0.1975\nv  0.3676 0.3783 -0.1978\nv  0.3679 0.3770 -0.1939\nv  0.3682 0.3753 -0.1903\nv  0.3679 0.3765 -0.1942\nv  0.3684 0.3737 -0.1867\nv  0.3682 0.3747 -0.1906\nv  0.3687 0.3721 -0.1829\nv  0.3685 0.3731 -0.1869\nv  0.3690 0.3707 -0.1792\nv  0.3688 0.3715 -0.1832\nv  0.3692 0.3693 -0.1754\nv  0.3690 0.3701 -0.1794\nv  0.3694 0.3681 -0.1716\nv  0.3693 0.3687 -0.1756\nv  0.3696 0.3669 -0.1678\nv  0.3695 0.3675 -0.1718\nv  0.3698 0.3659 -0.1639\nv  0.3697 0.3663 -0.1679\nv  0.3700 0.3649 -0.1600\nv  0.3699 0.3652 -0.1640\nv  0.3701 0.3640 -0.1561\nv  0.3700 0.3643 -0.1601\nv  0.3703 0.3633 -0.1521\nv  0.3702 0.3634 -0.1561\nv  0.3704 0.3626 -0.1481\nv  0.3703 0.3627 -0.1522\nv  0.3705 0.3620 -0.1442\nv  0.3705 0.3620 -0.1482\nv  0.3706 0.3616 -0.1402\nv  0.3706 0.3614 -0.1442\nv  0.3706 0.3612 -0.1362\nv  0.3706 0.3610 -0.1402\nv  0.3707 0.3607 0.1173\nv  0.3707 0.3606 -0.1361\nv  0.3707 0.3609 -0.1321\nv  0.3707 0.3603 -0.1321\nv  0.3707 0.3608 -0.1281\nv  0.3707 0.3607 -0.0865\nv  0.3707 0.3607 -0.1240\nv  0.3708 0.3602 -0.1281\nv  0.3708 0.3604 -0.0872\nv  0.3708 0.3601 -0.1240\nv  0.4336 0.0041 -0.1868\nv  0.4336 0.0041 -0.3906\nv  0.4337 0.0038 -0.3912\nv  0.4337 0.0035 -0.1868\nv  0.3708 0.3602 0.1175\nv  0.4336 0.0037 -0.1864\nv  0.3708 0.3602 0.1633\nv  0.4336 0.0041 0.2267\nv  0.4337 0.0035 0.2262\nv  0.4337 0.0035 0.3957\nv  0.4336 0.0041 0.3961\nv  0.4336 0.0035 0.3961\nv  -0.2364 0.5469 -0.2767\nv  -0.2283 0.5695 -0.0978\nv  -0.1551 0.7732 -0.0539\nv  0.3303 0.5695 -0.0978\nv  -0.1547 0.7741 -0.0536\nv  0.2942 0.7741 -0.0536\nv  0.2944 0.7732 -0.0539\nv  -0.2290 0.5676 -0.0982\nv  -0.2296 0.5657 -0.0984\nv  0.3306 0.5676 -0.0982\nv  0.3304 0.5685 -0.0980\nv  -0.2303 0.5638 -0.0986\nv  0.3310 0.5656 -0.0984\nv  0.3308 0.5666 -0.0983\nv  -0.2311 0.5618 -0.0986\nv  0.3314 0.5637 -0.0986\nv  0.3312 0.5647 -0.0985\nv  -0.2317 0.5599 -0.0985\nv  0.3318 0.5617 -0.0986\nv  0.3316 0.5627 -0.0986\nv  -0.2324 0.5579 -0.0983\nv  0.3321 0.5598 -0.0985\nv  0.3320 0.5608 -0.0986\nv  -0.2331 0.5560 -0.0981\nv  0.3325 0.5579 -0.0983\nv  0.3323 0.5588 -0.0984\nv  -0.2338 0.5541 -0.0977\nv  0.3329 0.5560 -0.0980\nv  0.3327 0.5569 -0.0982\nv  -0.2345 0.5523 -0.0971\nv  0.3333 0.5540 -0.0976\nv  0.3331 0.5550 -0.0978\nv  -0.2351 0.5505 -0.0965\nv  0.3336 0.5522 -0.0971\nv  0.3334 0.5531 -0.0974\nv  -0.2358 0.5487 -0.0958\nv  0.3340 0.5503 -0.0965\nv  0.3338 0.5512 -0.0968\nv  -0.2364 0.5469 -0.0951\nv  0.3343 0.5485 -0.0958\nv  0.3342 0.5494 -0.0962\nv  -0.2371 0.5449 -0.2771\nv  -0.2370 0.5452 -0.0942\nv  0.3347 0.5468 -0.0950\nv  0.3345 0.5476 -0.0954\nv  -0.2376 0.5436 -0.0932\nv  0.3350 0.5451 -0.0941\nv  0.3348 0.5459 -0.0945\nv  -0.2378 0.5429 -0.2775\nv  -0.2382 0.5420 -0.0921\nv  0.3353 0.5434 -0.0931\nv  0.3352 0.5442 -0.0936\nv  -0.2386 0.5409 -0.2779\nv  -0.2387 0.5405 -0.0910\nv  0.3356 0.5418 -0.0920\nv  0.3355 0.5426 -0.0925\nv  -0.2393 0.5389 -0.2782\nv  -0.2392 0.5391 -0.0898\nv  0.3359 0.5403 -0.0908\nv  0.3358 0.5410 -0.0914\nv  -0.2397 0.5377 -0.0885\nv  0.3362 0.5388 -0.0895\nv  0.3361 0.5395 -0.0902\nv  -0.2400 0.5369 -0.2785\nv  -0.2402 0.5364 -0.0872\nv  0.3365 0.5374 -0.0882\nv  0.3364 0.5381 -0.0889\nv  -0.2407 0.5349 -0.2788\nv  -0.2406 0.5352 -0.0857\nv  0.3367 0.5361 -0.0868\nv  0.3366 0.5367 -0.0875\nv  -0.2410 0.5341 -0.0843\nv  0.3370 0.5349 -0.0853\nv  0.3369 0.5355 -0.0860\nv  -0.2414 0.5329 -0.2791\nv  -0.2414 0.5331 -0.0827\nv  0.3372 0.5337 -0.0838\nv  0.3371 0.5343 -0.0845\nv  -0.2417 0.5321 -0.0812\nv  0.3374 0.5327 -0.0821\nv  0.3373 0.5332 -0.0829\nv  -0.2422 0.5309 -0.2793\nv  -0.2420 0.5312 -0.0796\nv  0.3376 0.5317 -0.0805\nv  0.3375 0.5322 -0.0813\nv  -0.2423 0.5304 -0.0779\nv  0.3378 0.5309 -0.0788\nv  0.3377 0.5313 -0.0796\nv  -0.2429 0.5288 -0.2795\nv  -0.2426 0.5298 -0.0762\nv  0.3378 0.5304 -0.0779\nv  -0.2428 0.5292 -0.0745\nv  0.3380 0.5297 -0.0761\nv  0.3379 0.5301 -0.0770\nv  -0.2430 0.5287 -0.0728\nv  0.3381 0.5291 -0.0743\nv  0.3380 0.5294 -0.0752\nv  -0.2436 0.5268 -0.2797\nv  -0.2431 0.5282 -0.0710\nv  0.3382 0.5286 -0.0725\nv  0.3381 0.5288 -0.0734\nv  -0.2432 0.5279 -0.0693\nv  0.3383 0.5282 -0.0706\nv  0.3382 0.5284 -0.0715\nv  -0.2433 0.5277 -0.0675\nv  0.3383 0.5278 -0.0687\nv  0.3383 0.5280 -0.0697\nv  -0.2434 0.5276 -0.0657\nv  0.3384 0.5276 -0.0668\nv  0.3384 0.5277 -0.0677\nv  -0.2434 0.5275 -0.0639\nv  0.3384 0.5275 -0.0649\nv  0.3384 0.5276 -0.0658\nv  -0.2434 0.5275 0.1308\nv  -0.0765 0.5275 0.1308\nv  -0.0763 0.5275 0.1305\nv  0.1659 0.5275 0.1292\nv  0.1679 0.5275 0.1266\nv  0.3384 0.5275 0.1266\nv  -0.0699 0.5275 0.1292\nv  -0.0699 0.5275 0.1293\nv  -0.0705 0.5275 0.1291\nv  -0.0712 0.5275 0.1289\nv  -0.0719 0.5275 0.1288\nv  -0.0723 0.5275 0.1288\nv  -0.0726 0.5275 0.1288\nv  -0.0729 0.5275 0.1289\nv  -0.0730 0.5275 0.1289\nv  -0.0734 0.5275 0.1289\nv  -0.0737 0.5275 0.1290\nv  -0.0741 0.5275 0.1291\nv  -0.0744 0.5275 0.1293\nv  -0.0748 0.5275 0.1294\nv  -0.0751 0.5275 0.1296\nv  -0.0753 0.5275 0.1298\nv  -0.0754 0.5275 0.1298\nv  -0.0757 0.5275 0.1300\nv  -0.0760 0.5275 0.1303\nv  0.3384 0.5275 -0.0639\nv  -0.0847 0.9691 0.2256\nv  -0.1452 0.8005 0.0826\nv  -0.3031 0.3614 -0.1280\nv  -0.3031 0.3613 -0.1240\nv  -0.3031 0.3613 0.1601\nv  -0.3030 0.3615 -0.1320\nv  -0.3029 0.3618 -0.1360\nv  -0.3028 0.3621 -0.1400\nv  -0.3027 0.3626 -0.1439\nv  -0.3025 0.3631 -0.1478\nv  -0.3022 0.3637 -0.1517\nv  -0.3020 0.3645 -0.1555\nv  -0.3017 0.3653 -0.1593\nv  -0.3013 0.3662 -0.1631\nv  -0.3010 0.3672 -0.1669\nv  -0.3006 0.3683 -0.1707\nv  -0.3001 0.3696 -0.1744\nv  -0.2997 0.3708 -0.1781\nv  -0.2992 0.3722 -0.1818\nv  -0.2987 0.3737 -0.1854\nv  -0.2981 0.3753 -0.1890\nv  -0.2975 0.3769 -0.1926\nv  -0.2969 0.3787 -0.1961\nv  -0.2962 0.3805 -0.1996\nv  -0.2955 0.3824 -0.2030\nv  -0.2948 0.3845 -0.2064\nv  -0.2940 0.3865 -0.2097\nv  -0.2932 0.3887 -0.2130\nv  -0.2928 0.3899 -0.2146\nv  -0.2924 0.3910 -0.2162\nv  -0.2920 0.3922 -0.2179\nv  -0.2916 0.3934 -0.2194\nv  -0.2912 0.3946 -0.2210\nv  -0.2907 0.3958 -0.2225\nv  -0.2902 0.3970 -0.2241\nv  -0.2898 0.3983 -0.2256\nv  -0.2893 0.3996 -0.2271\nv  -0.2889 0.4009 -0.2286\nv  -0.2884 0.4022 -0.2301\nv  -0.2879 0.4036 -0.2316\nv  -0.2874 0.4050 -0.2330\nv  -0.2869 0.4063 -0.2344\nv  -0.2864 0.4077 -0.2358\nv  -0.2859 0.4092 -0.2372\nv  -0.2854 0.4106 -0.2386\nv  -0.2849 0.4121 -0.2399\nv  -0.2843 0.4135 -0.2413\nv  -0.2838 0.4150 -0.2426\nv  -0.2832 0.4165 -0.2439\nv  -0.2827 0.4181 -0.2452\nv  -0.2821 0.4196 -0.2464\nv  -0.2816 0.4212 -0.2477\nv  -0.2810 0.4228 -0.2489\nv  -0.2805 0.4244 -0.2501\nv  -0.2799 0.4260 -0.2513\nv  -0.2793 0.4276 -0.2524\nv  -0.2787 0.4293 -0.2536\nv  -0.2781 0.4309 -0.2547\nv  -0.2775 0.4326 -0.2558\nv  -0.2769 0.4343 -0.2569\nv  -0.2763 0.4360 -0.2579\nv  -0.2756 0.4377 -0.2589\nv  -0.2750 0.4394 -0.2600\nv  -0.2744 0.4412 -0.2609\nv  -0.2738 0.4429 -0.2619\nv  -0.2731 0.4447 -0.2629\nv  -0.2725 0.4465 -0.2638\nv  -0.2718 0.4483 -0.2647\nv  -0.2712 0.4501 -0.2655\nv  -0.2705 0.4519 -0.2664\nv  -0.2699 0.4538 -0.2672\nv  -0.2692 0.4556 -0.2680\nv  -0.2685 0.4575 -0.2688\nv  -0.2679 0.4593 -0.2695\nv  -0.2672 0.4612 -0.2703\nv  -0.2665 0.4631 -0.2710\nv  -0.2658 0.4650 -0.2716\nv  -0.2651 0.4669 -0.2723\nv  -0.2645 0.4688 -0.2729\nv  -0.2638 0.4708 -0.2735\nv  -0.2631 0.4727 -0.2741\nv  -0.2624 0.4747 -0.2747\nv  -0.2617 0.4766 -0.2752\nv  -0.2610 0.4786 -0.2757\nv  -0.2603 0.4805 -0.2761\nv  -0.2596 0.4825 -0.2766\nv  -0.2588 0.4845 -0.2770\nv  -0.2581 0.4865 -0.2774\nv  -0.2574 0.4884 -0.2778\nv  -0.2567 0.4904 -0.2781\nv  -0.2560 0.4925 -0.2784\nv  -0.2552 0.4944 -0.2787\nv  -0.2545 0.4965 -0.2790\nv  -0.2538 0.4985 -0.2792\nv  -0.2531 0.5005 -0.2794\nv  -0.2524 0.5025 -0.2796\nv  -0.2516 0.5045 -0.2798\nv  -0.2509 0.5066 -0.2799\nv  -0.2502 0.5086 -0.2800\nv  -0.2495 0.5106 -0.2801\nv  -0.2487 0.5126 -0.2801\nv  -0.2480 0.5147 -0.2801\nv  -0.2473 0.5167 -0.2801\nv  -0.2465 0.5187 -0.2801\nv  -0.2458 0.5207 -0.2800\nv  -0.2451 0.5228 -0.2799\nv  -0.2443 0.5248 -0.2798\nv  -0.1452 0.8005 -0.0199\nv  0.2890 0.8005 -0.0199\nv  0.0247 0.8005 0.0826\nv  -0.1284 0.8473 -0.2119\nv  -0.1453 0.8005 -0.0218\nv  -0.1453 0.8003 -0.0236\nv  0.2890 0.8005 -0.0218\nv  -0.1454 0.8001 -0.0254\nv  0.2891 0.8003 -0.0237\nv  -0.1455 0.7998 -0.0272\nv  0.2891 0.8001 -0.0255\nv  -0.1457 0.7993 -0.0290\nv  0.2892 0.7997 -0.0274\nv  -0.1459 0.7988 -0.0308\nv  0.2893 0.7993 -0.0292\nv  -0.1461 0.7982 -0.0325\nv  0.2894 0.7988 -0.0310\nv  -0.1463 0.7975 -0.0342\nv  0.2895 0.7981 -0.0327\nv  -0.1466 0.7967 -0.0358\nv  0.2897 0.7974 -0.0344\nv  -0.1470 0.7958 -0.0375\nv  0.2898 0.7965 -0.0361\nv  -0.1473 0.7948 -0.0391\nv  0.2900 0.7956 -0.0377\nv  -0.1477 0.7937 -0.0406\nv  0.2902 0.7946 -0.0393\nv  -0.1481 0.7926 -0.0421\nv  0.2904 0.7935 -0.0408\nv  -0.1486 0.7913 -0.0435\nv  0.2906 0.7924 -0.0423\nv  -0.1490 0.7900 -0.0449\nv  0.2909 0.7911 -0.0437\nv  -0.1493 0.7893 -0.0455\nv  0.2911 0.7898 -0.0450\nv  -0.1495 0.7886 -0.0461\nv  -0.1498 0.7879 -0.0467\nv  0.2914 0.7884 -0.0463\nv  -0.1501 0.7871 -0.0473\nv  -0.1504 0.7863 -0.0479\nv  0.2917 0.7869 -0.0475\nv  -0.1506 0.7856 -0.0485\nv  -0.1509 0.7848 -0.0490\nv  0.2920 0.7854 -0.0486\nv  -0.1512 0.7840 -0.0495\nv  -0.1515 0.7831 -0.0500\nv  0.2923 0.7838 -0.0496\nv  -0.1518 0.7823 -0.0505\nv  -0.1521 0.7814 -0.0509\nv  0.2926 0.7822 -0.0505\nv  -0.1524 0.7806 -0.0514\nv  0.2927 0.7814 -0.0510\nv  -0.1527 0.7797 -0.0518\nv  0.2929 0.7805 -0.0514\nv  -0.1531 0.7788 -0.0522\nv  0.2931 0.7796 -0.0518\nv  -0.1534 0.7779 -0.0525\nv  0.2933 0.7787 -0.0522\nv  -0.1537 0.7769 -0.0528\nv  0.2935 0.7778 -0.0525\nv  -0.1541 0.7760 -0.0531\nv  0.2936 0.7769 -0.0528\nv  -0.1544 0.7751 -0.0534\nv  0.2938 0.7760 -0.0531\nv  0.2940 0.7751 -0.0534\nv  -0.3033 0.3607 -0.1240\nv  -0.3032 0.3609 -0.1320\nv  -0.3032 0.3608 -0.1280\nv  -0.3031 0.3612 -0.1359\nv  -0.3030 0.3615 -0.1399\nv  -0.3028 0.3620 -0.1438\nv  -0.3026 0.3625 -0.1478\nv  -0.3024 0.3632 -0.1517\nv  -0.3021 0.3639 -0.1556\nv  -0.3018 0.3647 -0.1594\nv  -0.3015 0.3657 -0.1633\nv  -0.3011 0.3667 -0.1671\nv  -0.3007 0.3678 -0.1709\nv  -0.3003 0.3690 -0.1747\nv  -0.2998 0.3703 -0.1784\nv  -0.2993 0.3717 -0.1821\nv  -0.2988 0.3732 -0.1857\nv  -0.2982 0.3748 -0.1893\nv  -0.2976 0.3764 -0.1929\nv  -0.2970 0.3782 -0.1964\nv  -0.2956 0.3819 -0.2033\nv  -0.2963 0.3800 -0.1999\nv  -0.2949 0.3839 -0.2067\nv  -0.2942 0.3860 -0.2100\nv  -0.2934 0.3882 -0.2132\nv  -0.2926 0.3904 -0.2164\nv  -0.2918 0.3927 -0.2195\nv  -0.2909 0.3951 -0.2226\nv  -0.2900 0.3975 -0.2256\nv  -0.2891 0.4000 -0.2285\nv  -0.2882 0.4026 -0.2314\nv  -0.2873 0.4053 -0.2342\nv  -0.2863 0.4080 -0.2369\nv  -0.2853 0.4108 -0.2396\nv  -0.2843 0.4136 -0.2422\nv  -0.2832 0.4165 -0.2446\nv  -0.2821 0.4195 -0.2471\nv  -0.2811 0.4225 -0.2494\nv  -0.2799 0.4256 -0.2517\nv  -0.2788 0.4287 -0.2539\nv  -0.2777 0.4318 -0.2560\nv  -0.2765 0.4351 -0.2581\nv  -0.2754 0.4383 -0.2600\nv  -0.2742 0.4416 -0.2619\nv  -0.2730 0.4450 -0.2637\nv  -0.2718 0.4484 -0.2653\nv  -0.2705 0.4518 -0.2670\nv  -0.2693 0.4552 -0.2685\nv  -0.2680 0.4587 -0.2699\nv  -0.2668 0.4622 -0.2713\nv  -0.2655 0.4658 -0.2725\nv  -0.2642 0.4693 -0.2737\nv  -0.2629 0.4729 -0.2748\nv  -0.2616 0.4766 -0.2758\nv  -0.2603 0.4802 -0.2767\nv  -0.2590 0.4839 -0.2775\nv  -0.2577 0.4875 -0.2782\nv  -0.2564 0.4912 -0.2789\nv  -0.2550 0.4949 -0.2794\nv  -0.2537 0.4987 -0.2798\nv  -0.2524 0.5024 -0.2802\nv  -0.2510 0.5061 -0.2805\nv  -0.2497 0.5099 -0.2807\nv  -0.2483 0.5136 -0.2807\nv  -0.2470 0.5173 -0.2807\nv  -0.2456 0.5211 -0.2806\nv  -0.2443 0.5248 -0.2804\nv  -0.2429 0.5285 -0.2801\nv  -0.2416 0.5323 -0.2797\nv  -0.2403 0.5360 -0.2793\nv  -0.2389 0.5397 -0.2787\nv  -0.2376 0.5434 -0.2781\nv  -0.1283 0.8474 -0.2124\nv  -0.2363 0.5470 -0.2773\nv  -0.1277 0.8493 -0.2114\nv  -0.1270 0.8513 -0.2110\nv  -0.1270 0.8511 -0.2116\nv  -0.1263 0.8533 -0.2105\nv  -0.1256 0.8552 -0.2100\nv  -0.1258 0.8547 -0.2107\nv  -0.1249 0.8572 -0.2094\nv  -0.1242 0.8591 -0.2088\nv  -0.1244 0.8583 -0.2097\nv  -0.1235 0.8611 -0.2082\nv  -0.1228 0.8630 -0.2076\nv  -0.1232 0.8618 -0.2086\nv  -0.1221 0.8649 -0.2070\nv  -0.1214 0.8668 -0.2063\nv  -0.1219 0.8654 -0.2074\nv  -0.1207 0.8688 -0.2056\nv  -0.1206 0.8689 -0.2061\nv  -0.1201 0.8706 -0.2049\nv  -0.1194 0.8725 -0.2041\nv  -0.1194 0.8724 -0.2048\nv  -0.1187 0.8744 -0.2033\nv  -0.1180 0.8763 -0.2025\nv  -0.1181 0.8759 -0.2033\nv  -0.1174 0.8781 -0.2017\nv  -0.1167 0.8799 -0.2009\nv  -0.1169 0.8793 -0.2018\nv  -0.1161 0.8817 -0.2000\nv  -0.1154 0.8836 -0.1991\nv  -0.1157 0.8827 -0.2002\nv  -0.1148 0.8854 -0.1982\nv  -0.1141 0.8871 -0.1972\nv  -0.1145 0.8861 -0.1984\nv  -0.1135 0.8889 -0.1963\nv  -0.1129 0.8907 -0.1953\nv  -0.1133 0.8894 -0.1967\nv  -0.1122 0.8924 -0.1943\nv  -0.1121 0.8926 -0.1948\nv  -0.1116 0.8942 -0.1932\nv  -0.1110 0.8959 -0.1922\nv  -0.1109 0.8959 -0.1928\nv  -0.1104 0.8976 -0.1911\nv  -0.1098 0.8992 -0.1900\nv  -0.1098 0.8991 -0.1908\nv  -0.1092 0.9009 -0.1889\nv  -0.1086 0.9026 -0.1877\nv  -0.1087 0.9022 -0.1887\nv  -0.1080 0.9042 -0.1866\nv  -0.1074 0.9058 -0.1854\nv  -0.1075 0.9053 -0.1865\nv  -0.1068 0.9075 -0.1842\nv  -0.1063 0.9090 -0.1830\nv  -0.1064 0.9084 -0.1842\nv  -0.1057 0.9106 -0.1817\nv  -0.1051 0.9122 -0.1804\nv  -0.1054 0.9113 -0.1818\nv  -0.1046 0.9137 -0.1792\nv  -0.1040 0.9152 -0.1778\nv  -0.1043 0.9143 -0.1794\nv  -0.1035 0.9167 -0.1765\nv  -0.1029 0.9182 -0.1752\nv  -0.1033 0.9171 -0.1769\nv  -0.1024 0.9197 -0.1738\nv  -0.1023 0.9200 -0.1743\nv  -0.1019 0.9212 -0.1724\nv  -0.1014 0.9226 -0.1710\nv  -0.1013 0.9227 -0.1717\nv  -0.1009 0.9240 -0.1696\nv  -0.1004 0.9254 -0.1682\nv  -0.1003 0.9254 -0.1689\nv  -0.0999 0.9268 -0.1667\nv  -0.0994 0.9281 -0.1653\nv  -0.0994 0.9281 -0.1661\nv  -0.0989 0.9295 -0.1638\nv  -0.0985 0.9308 -0.1623\nv  -0.0984 0.9306 -0.1633\nv  -0.0980 0.9321 -0.1608\nv  -0.0975 0.9333 -0.1592\nv  -0.0976 0.9331 -0.1603\nv  -0.0971 0.9346 -0.1577\nv  -0.0966 0.9358 -0.1561\nv  -0.0967 0.9356 -0.1574\nv  -0.0962 0.9370 -0.1546\nv  -0.0958 0.9382 -0.1530\nv  -0.0958 0.9379 -0.1543\nv  -0.0953 0.9394 -0.1514\nv  -0.0949 0.9406 -0.1497\nv  -0.0950 0.9402 -0.1512\nv  -0.0945 0.9417 -0.1481\nv  -0.0941 0.9428 -0.1465\nv  -0.0942 0.9424 -0.1480\nv  -0.0937 0.9439 -0.1448\nv  -0.0933 0.9449 -0.1431\nv  -0.0934 0.9446 -0.1448\nv  -0.0930 0.9460 -0.1414\nv  -0.0926 0.9470 -0.1398\nv  -0.0927 0.9466 -0.1415\nv  -0.0922 0.9480 -0.1380\nv  -0.0916 0.9500 -0.1346\nv  -0.0920 0.9486 -0.1381\nv  -0.0909 0.9518 -0.1311\nv  -0.0913 0.9505 -0.1347\nv  -0.0902 0.9536 -0.1275\nv  -0.0907 0.9523 -0.1313\nv  -0.0897 0.9552 -0.1240\nv  -0.0900 0.9540 -0.1278\nv  -0.0891 0.9568 -0.1203\nv  -0.0894 0.9557 -0.1242\nv  -0.0886 0.9583 -0.1167\nv  -0.0884 0.9587 -0.1170\nv  -0.0889 0.9572 -0.1206\nv  -0.0881 0.9596 -0.1130\nv  -0.0879 0.9601 -0.1133\nv  -0.0876 0.9609 -0.1093\nv  -0.0874 0.9614 -0.1096\nv  -0.0872 0.9621 -0.1055\nv  -0.0870 0.9626 -0.1059\nv  -0.0868 0.9632 -0.1018\nv  -0.0866 0.9637 -0.1021\nv  -0.0864 0.9642 -0.0980\nv  -0.0862 0.9647 -0.0983\nv  -0.0861 0.9652 -0.0942\nv  -0.0859 0.9656 -0.0945\nv  -0.0858 0.9660 -0.0903\nv  -0.0856 0.9664 -0.0906\nv  -0.0855 0.9667 -0.0865\nv  -0.0853 0.9672 -0.0867\nv  -0.0853 0.9673 -0.0826\nv  -0.0851 0.9678 -0.0828\nv  -0.0851 0.9679 -0.0787\nv  -0.0849 0.9684 -0.0789\nv  -0.0850 0.9683 -0.0748\nv  -0.0847 0.9688 -0.0750\nv  -0.0848 0.9686 -0.0709\nv  -0.0846 0.9691 -0.0710\nv  -0.0848 0.9689 -0.0670\nv  -0.0845 0.9694 -0.0671\nv  -0.0847 0.9690 -0.0631\nv  -0.0845 0.9695 -0.0631\nv  -0.0847 0.9691 -0.0592\nv  -0.0844 0.9696 0.2256\nv  -0.0844 0.9696 -0.0592\nv  -0.4329 0.0001 0.3965\nv  -0.4329 0.0002 0.3968\nv  -0.0847 0.9691 0.2259\nv  -0.4330 0.0000 0.2238\nv  -0.4329 0.0000 0.3961\nv  -0.2619 0.0001 0.3963\nv  -0.2619 0.0001 0.3966\nv  -0.4330 0.0000 0.3957\nv  -0.2619 0.0000 0.3960\nv  -0.2619 0.0000 0.3957\nv  -0.3033 0.3607 0.1602\nv  -0.3004 0.3567 0.1609\nv  -0.3010 0.3569 0.1609\nv  -0.3016 0.3571 0.1608\nv  -0.3021 0.3575 0.1608\nv  -0.3025 0.3579 0.1607\nv  -0.3028 0.3584 0.1606\nv  -0.3031 0.3589 0.1605\nv  -0.3032 0.3595 0.1604\nv  -0.3033 0.3601 0.1603\nv  0.2601 0.9713 -0.0633\nv  -0.0814 0.9713 -0.0631\nv  -0.0814 0.9714 -0.0592\nv  -0.0816 0.9714 -0.0592\nv  0.2601 0.9714 -0.0592\nv  0.2601 0.9714 0.2256\nv  -0.0814 0.9714 0.2256\nv  -0.0815 0.9712 -0.0670\nv  -0.0816 0.9713 -0.0632\nv  0.2602 0.9711 -0.0675\nv  -0.0816 0.9709 -0.0710\nv  -0.0817 0.9712 -0.0672\nv  0.2602 0.9709 -0.0716\nv  -0.0817 0.9706 -0.0749\nv  -0.0818 0.9709 -0.0712\nv  0.2603 0.9705 -0.0758\nv  -0.0818 0.9702 -0.0788\nv  -0.0819 0.9706 -0.0752\nv  0.2604 0.9700 -0.0799\nv  -0.0820 0.9696 -0.0827\nv  -0.0821 0.9701 -0.0792\nv  0.2605 0.9694 -0.0839\nv  -0.0822 0.9690 -0.0865\nv  -0.0823 0.9695 -0.0832\nv  0.2606 0.9688 -0.0880\nv  -0.0825 0.9683 -0.0904\nv  -0.0825 0.9689 -0.0872\nv  0.2607 0.9680 -0.0920\nv  -0.0828 0.9675 -0.0943\nv  -0.0828 0.9682 -0.0911\nv  0.2609 0.9671 -0.0960\nv  -0.0831 0.9666 -0.0981\nv  -0.0831 0.9673 -0.0951\nv  0.2610 0.9661 -0.1000\nv  -0.0834 0.9656 -0.1019\nv  -0.0834 0.9664 -0.0990\nv  0.2612 0.9651 -0.1039\nv  -0.0838 0.9645 -0.1057\nv  -0.0838 0.9654 -0.1028\nv  0.2614 0.9639 -0.1078\nv  -0.0842 0.9634 -0.1095\nv  -0.0842 0.9642 -0.1067\nv  0.2617 0.9626 -0.1117\nv  -0.0847 0.9621 -0.1132\nv  -0.0846 0.9630 -0.1105\nv  0.2619 0.9612 -0.1156\nv  -0.0852 0.9607 -0.1169\nv  -0.0851 0.9617 -0.1142\nv  0.2622 0.9598 -0.1194\nv  -0.0857 0.9593 -0.1206\nv  -0.0856 0.9603 -0.1180\nv  0.2624 0.9582 -0.1231\nv  -0.0862 0.9577 -0.1242\nv  -0.0861 0.9588 -0.1217\nv  0.2627 0.9565 -0.1269\nv  -0.0868 0.9561 -0.1278\nv  -0.0867 0.9572 -0.1253\nv  0.2630 0.9548 -0.1305\nv  -0.0874 0.9543 -0.1314\nv  -0.0873 0.9555 -0.1289\nv  0.2633 0.9529 -0.1342\nv  -0.0880 0.9525 -0.1349\nv  -0.0879 0.9538 -0.1325\nv  0.2637 0.9510 -0.1378\nv  -0.0887 0.9506 -0.1384\nv  -0.0886 0.9519 -0.1360\nv  0.2640 0.9489 -0.1413\nv  -0.0894 0.9486 -0.1418\nv  -0.0893 0.9500 -0.1395\nv  0.2644 0.9468 -0.1448\nv  -0.0901 0.9466 -0.1452\nv  -0.0900 0.9480 -0.1429\nv  0.2648 0.9446 -0.1482\nv  -0.0909 0.9444 -0.1486\nv  -0.0908 0.9459 -0.1462\nv  0.2652 0.9423 -0.1516\nv  -0.0917 0.9421 -0.1519\nv  -0.0916 0.9437 -0.1495\nv  0.2656 0.9400 -0.1549\nv  -0.0925 0.9398 -0.1551\nv  -0.0924 0.9415 -0.1527\nv  0.2660 0.9375 -0.1581\nv  -0.0934 0.9374 -0.1583\nv  -0.0932 0.9392 -0.1559\nv  0.2664 0.9350 -0.1613\nv  -0.0942 0.9349 -0.1614\nv  -0.0941 0.9368 -0.1590\nv  0.2669 0.9324 -0.1644\nv  -0.0951 0.9323 -0.1645\nv  -0.0949 0.9343 -0.1621\nv  0.2673 0.9297 -0.1674\nv  -0.0961 0.9297 -0.1674\nv  -0.0959 0.9317 -0.1651\nv  -0.0965 0.9283 -0.1689\nv  -0.0968 0.9291 -0.1680\nv  0.2678 0.9269 -0.1704\nv  -0.0970 0.9269 -0.1704\nv  -0.0975 0.9255 -0.1718\nv  -0.0978 0.9265 -0.1708\nv  0.2683 0.9240 -0.1733\nv  -0.0980 0.9241 -0.1732\nv  -0.0985 0.9227 -0.1746\nv  -0.0987 0.9237 -0.1736\nv  0.2688 0.9211 -0.1761\nv  -0.0986 0.9224 -0.1750\nv  -0.0990 0.9212 -0.1760\nv  -0.0996 0.9196 -0.1776\nv  -0.0997 0.9209 -0.1763\nv  -0.0996 0.9198 -0.1774\nv  0.2693 0.9181 -0.1789\nv  -0.1001 0.9183 -0.1788\nv  -0.1006 0.9168 -0.1801\nv  0.2699 0.9151 -0.1815\nv  -0.1012 0.9153 -0.1814\nv  -0.1007 0.9167 -0.1801\nv  -0.1017 0.9137 -0.1827\nv  -0.1017 0.9138 -0.1826\nv  0.2704 0.9119 -0.1841\nv  -0.1022 0.9122 -0.1840\nv  -0.1028 0.9106 -0.1852\nv  -0.1028 0.9109 -0.1850\nv  0.2709 0.9088 -0.1866\nv  -0.1033 0.9090 -0.1865\nv  -0.1039 0.9074 -0.1877\nv  -0.1038 0.9079 -0.1873\nv  0.2715 0.9055 -0.1891\nv  -0.1045 0.9058 -0.1889\nv  -0.1051 0.9041 -0.1901\nv  -0.1049 0.9049 -0.1895\nv  0.2721 0.9022 -0.1914\nv  -0.1056 0.9025 -0.1912\nv  -0.1062 0.9008 -0.1924\nv  -0.1061 0.9018 -0.1917\nv  0.2727 0.8988 -0.1937\nv  -0.1068 0.8991 -0.1935\nv  -0.1074 0.8974 -0.1946\nv  -0.1072 0.8986 -0.1938\nv  0.2732 0.8954 -0.1958\nv  -0.1080 0.8957 -0.1956\nv  -0.1086 0.8940 -0.1967\nv  -0.1083 0.8954 -0.1958\nv  0.2738 0.8919 -0.1979\nv  -0.1092 0.8922 -0.1977\nv  -0.1099 0.8905 -0.1987\nv  -0.1095 0.8922 -0.1977\nv  0.2744 0.8884 -0.1999\nv  -0.1105 0.8887 -0.1997\nv  -0.1107 0.8889 -0.1996\nv  -0.1111 0.8869 -0.2007\nv  0.2751 0.8848 -0.2017\nv  -0.1117 0.8851 -0.2016\nv  -0.1119 0.8856 -0.2013\nv  -0.1124 0.8833 -0.2025\nv  0.2757 0.8812 -0.2035\nv  -0.1130 0.8815 -0.2034\nv  -0.1131 0.8822 -0.2030\nv  -0.1137 0.8796 -0.2043\nv  0.2763 0.8775 -0.2052\nv  -0.1143 0.8778 -0.2051\nv  -0.1143 0.8788 -0.2046\nv  -0.1150 0.8759 -0.2059\nv  0.2770 0.8738 -0.2068\nv  -0.1156 0.8741 -0.2067\nv  -0.1155 0.8754 -0.2061\nv  -0.1163 0.8722 -0.2075\nv  0.2776 0.8701 -0.2083\nv  -0.1169 0.8703 -0.2083\nv  -0.1168 0.8720 -0.2076\nv  -0.1176 0.8684 -0.2090\nv  0.2783 0.8663 -0.2097\nv  -0.1183 0.8665 -0.2097\nv  -0.1180 0.8685 -0.2089\nv  -0.1190 0.8646 -0.2104\nv  -0.1193 0.8650 -0.2102\nv  0.2789 0.8625 -0.2110\nv  -0.1196 0.8626 -0.2110\nv  -0.1203 0.8607 -0.2116\nv  -0.1205 0.8614 -0.2114\nv  0.2796 0.8587 -0.2122\nv  -0.1210 0.8587 -0.2122\nv  -0.1217 0.8568 -0.2128\nv  -0.1218 0.8579 -0.2124\nv  0.2803 0.8548 -0.2134\nv  -0.1224 0.8548 -0.2134\nv  -0.1231 0.8528 -0.2139\nv  -0.1231 0.8543 -0.2135\nv  0.2809 0.8508 -0.2144\nv  -0.1238 0.8509 -0.2144\nv  -0.1245 0.8489 -0.2148\nv  -0.1244 0.8507 -0.2144\nv  0.2816 0.8469 -0.2153\nv  -0.1252 0.8469 -0.2153\nv  -0.2331 0.5465 -0.2801\nv  -0.2335 0.5466 -0.2801\nv  -0.1257 0.8470 -0.2152\nv  0.2822 0.8470 -0.2152\nv  0.3346 0.5465 -0.2801\nv  0.2808 0.8548 -0.2133\nv  0.2815 0.8509 -0.2143\nv  0.2801 0.8587 -0.2122\nv  0.2794 0.8626 -0.2110\nv  0.2788 0.8664 -0.2097\nv  0.2781 0.8702 -0.2083\nv  0.2774 0.8739 -0.2068\nv  0.2768 0.8776 -0.2052\nv  0.2761 0.8813 -0.2035\nv  0.2755 0.8849 -0.2017\nv  0.2749 0.8885 -0.1998\nv  0.2742 0.8920 -0.1978\nv  0.2736 0.8955 -0.1957\nv  0.2730 0.8989 -0.1936\nv  0.2724 0.9023 -0.1913\nv  0.2719 0.9056 -0.1890\nv  0.2713 0.9089 -0.1865\nv  0.2707 0.9121 -0.1840\nv  0.2702 0.9152 -0.1814\nv  0.2696 0.9182 -0.1788\nv  0.2691 0.9212 -0.1760\nv  0.2686 0.9241 -0.1732\nv  0.2681 0.9270 -0.1703\nv  0.2676 0.9298 -0.1673\nv  0.2671 0.9325 -0.1643\nv  0.2666 0.9351 -0.1612\nv  0.2662 0.9376 -0.1580\nv  0.2658 0.9401 -0.1547\nv  0.2654 0.9425 -0.1514\nv  0.2650 0.9447 -0.1480\nv  0.2645 0.9469 -0.1446\nv  0.2642 0.9490 -0.1411\nv  0.2638 0.9511 -0.1376\nv  0.2635 0.9530 -0.1340\nv  0.2632 0.9549 -0.1303\nv  0.2629 0.9566 -0.1266\nv  0.2626 0.9583 -0.1229\nv  0.2623 0.9599 -0.1191\nv  0.2620 0.9613 -0.1153\nv  0.2618 0.9627 -0.1115\nv  0.2616 0.9640 -0.1076\nv  0.2614 0.9651 -0.1036\nv  0.2611 0.9662 -0.0997\nv  0.2610 0.9672 -0.0957\nv  0.2608 0.9681 -0.0917\nv  0.2607 0.9688 -0.0877\nv  0.2606 0.9695 -0.0837\nv  0.2605 0.9701 -0.0796\nv  0.2604 0.9705 -0.0755\nv  0.2603 0.9709 -0.0715\nv  0.2603 0.9712 -0.0674\nv  0.2603 0.9713 -0.0633\nv  0.2604 0.9713 0.2256\nv  0.2602 0.9714 -0.0592\nv  0.3353 0.5425 -0.2809\nv  -0.2338 0.5445 -0.2805\nv  0.3357 0.5426 -0.2809\nv  0.3351 0.5466 -0.2800\nv  -0.2346 0.5424 -0.2809\nv  -0.2348 0.5429 -0.2808\nv  0.3360 0.5385 -0.2816\nv  -0.2353 0.5404 -0.2813\nv  -0.2360 0.5384 -0.2816\nv  -0.2362 0.5391 -0.2815\nv  0.3367 0.5344 -0.2822\nv  -0.2367 0.5364 -0.2819\nv  -0.2374 0.5343 -0.2822\nv  -0.2375 0.5354 -0.2821\nv  0.3374 0.5304 -0.2827\nv  -0.2381 0.5323 -0.2825\nv  -0.2388 0.5303 -0.2827\nv  -0.2389 0.5316 -0.2825\nv  0.3380 0.5263 -0.2831\nv  -0.2395 0.5282 -0.2829\nv  -0.2402 0.5262 -0.2831\nv  -0.2402 0.5278 -0.2829\nv  0.3388 0.5223 -0.2834\nv  -0.2410 0.5242 -0.2832\nv  -0.2417 0.5221 -0.2834\nv  -0.2416 0.5240 -0.2832\nv  0.3394 0.5183 -0.2835\nv  -0.2424 0.5201 -0.2835\nv  -0.2431 0.5180 -0.2835\nv  -0.2430 0.5202 -0.2834\nv  0.3401 0.5144 -0.2836\nv  -0.2438 0.5160 -0.2836\nv  -0.2443 0.5164 -0.2835\nv  -0.2443 0.5147 -0.2836\nv  -0.2453 0.5119 -0.2836\nv  -0.2446 0.5140 -0.2836\nv  -0.2457 0.5109 -0.2836\nv  -0.2457 0.5126 -0.2835\nv  0.3404 0.5126 -0.2836\nv  0.3408 0.5104 -0.2835\nv  -0.2460 0.5099 -0.2835\nv  0.3415 0.5064 -0.2834\nv  -0.2467 0.5078 -0.2835\nv  -0.2474 0.5058 -0.2834\nv  -0.2470 0.5070 -0.2834\nv  0.3422 0.5024 -0.2832\nv  -0.2481 0.5037 -0.2833\nv  -0.2489 0.5017 -0.2831\nv  -0.2484 0.5032 -0.2832\nv  0.3429 0.4984 -0.2828\nv  -0.2496 0.4997 -0.2829\nv  -0.2503 0.4976 -0.2827\nv  -0.2498 0.4994 -0.2829\nv  0.3435 0.4945 -0.2824\nv  -0.2510 0.4956 -0.2825\nv  -0.2517 0.4936 -0.2823\nv  -0.2512 0.4955 -0.2825\nv  0.3442 0.4905 -0.2818\nv  -0.2524 0.4915 -0.2820\nv  -0.2526 0.4917 -0.2820\nv  -0.2531 0.4895 -0.2817\nv  0.3449 0.4866 -0.2812\nv  -0.2538 0.4875 -0.2813\nv  -0.2539 0.4879 -0.2814\nv  -0.2545 0.4855 -0.2810\nv  0.3456 0.4827 -0.2804\nv  -0.2552 0.4835 -0.2806\nv  -0.2553 0.4842 -0.2807\nv  -0.2560 0.4815 -0.2802\nv  0.3463 0.4788 -0.2796\nv  -0.2567 0.4795 -0.2797\nv  -0.2566 0.4804 -0.2799\nv  -0.2574 0.4775 -0.2793\nv  0.3469 0.4749 -0.2786\nv  -0.2580 0.4756 -0.2788\nv  -0.2580 0.4766 -0.2790\nv  -0.2587 0.4736 -0.2783\nv  0.3476 0.4710 -0.2776\nv  -0.2594 0.4716 -0.2777\nv  -0.2593 0.4729 -0.2781\nv  -0.2601 0.4697 -0.2772\nv  0.3482 0.4672 -0.2764\nv  -0.2608 0.4677 -0.2766\nv  -0.2606 0.4692 -0.2770\nv  -0.2615 0.4658 -0.2759\nv  0.3489 0.4634 -0.2752\nv  -0.2622 0.4638 -0.2753\nv  -0.2620 0.4655 -0.2758\nv  -0.2628 0.4619 -0.2746\nv  0.3496 0.4597 -0.2738\nv  -0.2635 0.4600 -0.2740\nv  -0.2633 0.4619 -0.2746\nv  -0.2642 0.4581 -0.2732\nv  -0.2646 0.4583 -0.2733\nv  0.3502 0.4559 -0.2724\nv  -0.2648 0.4562 -0.2725\nv  -0.2655 0.4543 -0.2717\nv  -0.2659 0.4547 -0.2718\nv  0.3508 0.4522 -0.2708\nv  -0.2662 0.4525 -0.2709\nv  -0.2668 0.4506 -0.2701\nv  -0.2672 0.4511 -0.2703\nv  0.3514 0.4486 -0.2692\nv  -0.2675 0.4488 -0.2693\nv  -0.2681 0.4469 -0.2684\nv  -0.2684 0.4476 -0.2687\nv  0.3521 0.4450 -0.2675\nv  -0.2687 0.4451 -0.2675\nv  -0.2694 0.4433 -0.2666\nv  -0.2697 0.4441 -0.2670\nv  0.3527 0.4414 -0.2656\nv  -0.2700 0.4415 -0.2657\nv  -0.2707 0.4397 -0.2647\nv  -0.2709 0.4406 -0.2652\nv  0.3533 0.4379 -0.2638\nv  -0.2713 0.4379 -0.2638\nv  -0.2719 0.4362 -0.2628\nv  -0.2721 0.4372 -0.2633\nv  0.3539 0.4345 -0.2617\nv  -0.2723 0.4350 -0.2621\nv  -0.2731 0.4327 -0.2607\nv  -0.2725 0.4344 -0.2617\nv  -0.2735 0.4317 -0.2601\nv  -0.2734 0.4339 -0.2613\nv  0.3545 0.4310 -0.2597\nv  -0.2737 0.4310 -0.2596\nv  0.3551 0.4277 -0.2575\nv  -0.2743 0.4293 -0.2585\nv  -0.2749 0.4276 -0.2574\nv  -0.2746 0.4285 -0.2580\nv  0.3556 0.4244 -0.2552\nv  -0.2755 0.4259 -0.2563\nv  -0.2761 0.4243 -0.2551\nv  -0.2758 0.4253 -0.2559\nv  0.3562 0.4211 -0.2529\nv  -0.2766 0.4226 -0.2540\nv  -0.2772 0.4210 -0.2528\nv  -0.2769 0.4221 -0.2536\nv  0.3567 0.4179 -0.2504\nv  -0.2778 0.4194 -0.2516\nv  -0.2783 0.4178 -0.2503\nv  -0.2780 0.4191 -0.2513\nv  0.3573 0.4148 -0.2479\nv  -0.2789 0.4162 -0.2491\nv  -0.2794 0.4147 -0.2478\nv  -0.2791 0.4160 -0.2489\nv  0.3578 0.4117 -0.2453\nv  -0.2800 0.4131 -0.2465\nv  -0.2805 0.4116 -0.2452\nv  -0.2802 0.4130 -0.2464\nv  0.3583 0.4087 -0.2427\nv  -0.2811 0.4101 -0.2439\nv  -0.2816 0.4086 -0.2426\nv  -0.2813 0.4101 -0.2439\nv  0.3588 0.4058 -0.2399\nv  -0.2821 0.4071 -0.2412\nv  -0.2823 0.4072 -0.2412\nv  -0.2826 0.4057 -0.2398\nv  0.3593 0.4029 -0.2371\nv  -0.2831 0.4042 -0.2384\nv  -0.2833 0.4044 -0.2386\nv  -0.2836 0.4028 -0.2370\nv  0.3598 0.4001 -0.2342\nv  -0.2841 0.4014 -0.2356\nv  -0.2843 0.4017 -0.2358\nv  -0.2846 0.4000 -0.2341\nv  0.3603 0.3974 -0.2313\nv  -0.2851 0.3987 -0.2326\nv  -0.2852 0.3990 -0.2329\nv  -0.2860 0.3960 -0.2296\nv  -0.2862 0.3964 -0.2300\nv  0.3607 0.3948 -0.2282\nv  -0.2869 0.3934 -0.2266\nv  -0.2871 0.3938 -0.2270\nv  0.3612 0.3922 -0.2251\nv  -0.2878 0.3910 -0.2235\nv  -0.2880 0.3914 -0.2240\nv  0.3616 0.3897 -0.2219\nv  -0.2886 0.3885 -0.2203\nv  -0.2888 0.3890 -0.2209\nv  0.3620 0.3873 -0.2187\nv  -0.2895 0.3862 -0.2171\nv  -0.2897 0.3866 -0.2177\nv  0.3624 0.3850 -0.2154\nv  -0.2902 0.3839 -0.2138\nv  -0.2905 0.3844 -0.2145\nv  0.3628 0.3828 -0.2121\nv  -0.2910 0.3818 -0.2105\nv  -0.2913 0.3822 -0.2112\nv  0.3632 0.3806 -0.2087\nv  -0.2918 0.3797 -0.2071\nv  -0.2920 0.3801 -0.2078\nv  0.3635 0.3785 -0.2052\nv  -0.2925 0.3777 -0.2037\nv  -0.2927 0.3781 -0.2044\nv  0.3639 0.3766 -0.2017\nv  -0.2931 0.3757 -0.2002\nv  -0.2934 0.3762 -0.2009\nv  0.3642 0.3746 -0.1981\nv  -0.2938 0.3739 -0.1967\nv  -0.2941 0.3743 -0.1974\nv  0.3645 0.3729 -0.1945\nv  -0.2944 0.3722 -0.1932\nv  -0.2947 0.3725 -0.1939\nv  0.3648 0.3711 -0.1909\nv  -0.2950 0.3705 -0.1896\nv  -0.2953 0.3709 -0.1902\nv  0.3651 0.3695 -0.1872\nv  -0.2955 0.3690 -0.1859\nv  -0.2959 0.3693 -0.1866\nv  0.3654 0.3680 -0.1834\nv  -0.2960 0.3675 -0.1823\nv  -0.2964 0.3678 -0.1829\nv  0.3656 0.3665 -0.1796\nv  -0.2965 0.3661 -0.1785\nv  -0.2969 0.3664 -0.1792\nv  0.3658 0.3652 -0.1758\nv  -0.2970 0.3648 -0.1748\nv  -0.2974 0.3651 -0.1754\nv  0.3660 0.3639 -0.1720\nv  -0.2974 0.3637 -0.1710\nv  -0.2979 0.3639 -0.1716\nv  0.3662 0.3628 -0.1681\nv  -0.2978 0.3626 -0.1672\nv  -0.2983 0.3627 -0.1677\nv  0.3664 0.3617 -0.1642\nv  -0.2981 0.3615 -0.1634\nv  -0.2987 0.3617 -0.1638\nv  0.3666 0.3608 -0.1602\nv  -0.2985 0.3606 -0.1596\nv  -0.2990 0.3608 -0.1599\nv  0.3668 0.3599 -0.1563\nv  -0.2987 0.3598 -0.1558\nv  -0.2993 0.3599 -0.1560\nv  0.3669 0.3592 -0.1523\nv  -0.2990 0.3591 -0.1519\nv  -0.2996 0.3592 -0.1521\nv  0.3670 0.3585 -0.1483\nv  -0.2992 0.3584 -0.1480\nv  -0.2998 0.3585 -0.1481\nv  0.3671 0.3579 -0.1443\nv  -0.2994 0.3579 -0.1441\nv  -0.3000 0.3580 -0.1441\nv  0.3672 0.3575 -0.1403\nv  -0.2996 0.3575 -0.1401\nv  -0.3001 0.3575 -0.1401\nv  0.3672 0.3571 -0.1363\nv  -0.2997 0.3571 -0.1361\nv  0.3673 0.3569 -0.1322\nv  -0.2998 0.3569 -0.1321\nv  -0.3003 0.3572 -0.1361\nv  0.3673 0.3567 -0.1281\nv  -0.2998 0.3567 -0.1280\nv  -0.3004 0.3569 -0.1321\nv  0.3673 0.3567 -0.1240\nv  -0.2998 0.3567 -0.1240\nv  -0.3004 0.3568 -0.1280\nv  -0.3004 0.3567 -0.1240\nv  0.3679 0.3567 -0.1240\nv  0.3679 0.3568 -0.1282\nv  0.3679 0.3569 -0.1323\nv  0.3678 0.3572 -0.1365\nv  0.3678 0.3576 -0.1406\nv  0.3677 0.3580 -0.1447\nv  0.3676 0.3587 -0.1488\nv  0.3675 0.3593 -0.1529\nv  0.3673 0.3601 -0.1570\nv  0.3672 0.3610 -0.1611\nv  0.3670 0.3620 -0.1651\nv  0.3668 0.3631 -0.1691\nv  0.3665 0.3643 -0.1731\nv  0.3663 0.3657 -0.1770\nv  0.3661 0.3671 -0.1809\nv  0.3658 0.3686 -0.1848\nv  0.3655 0.3702 -0.1886\nv  0.3652 0.3719 -0.1924\nv  0.3649 0.3737 -0.1961\nv  0.3646 0.3756 -0.1998\nv  0.3642 0.3776 -0.2034\nv  0.3639 0.3796 -0.2070\nv  0.3635 0.3818 -0.2105\nv  0.3631 0.3841 -0.2140\nv  0.3627 0.3864 -0.2174\nv  0.3622 0.3889 -0.2207\nv  0.3618 0.3914 -0.2240\nv  0.3613 0.3940 -0.2272\nv  0.3609 0.3967 -0.2303\nv  0.3604 0.3994 -0.2334\nv  0.3599 0.4023 -0.2364\nv  0.3593 0.4052 -0.2393\nv  0.3588 0.4082 -0.2422\nv  0.3583 0.4113 -0.2449\nv  0.3577 0.4144 -0.2476\nv  0.3572 0.4176 -0.2502\nv  0.3566 0.4209 -0.2527\nv  0.3560 0.4242 -0.2551\nv  0.3554 0.4276 -0.2574\nv  0.3548 0.4310 -0.2597\nv  0.3542 0.4345 -0.2618\nv  0.3536 0.4381 -0.2638\nv  0.3529 0.4417 -0.2658\nv  0.3523 0.4454 -0.2677\nv  0.3516 0.4491 -0.2694\nv  0.3510 0.4528 -0.2711\nv  0.3503 0.4566 -0.2726\nv  0.3496 0.4605 -0.2741\nv  0.3489 0.4643 -0.2755\nv  0.3482 0.4682 -0.2767\nv  0.3475 0.4722 -0.2779\nv  0.3469 0.4761 -0.2789\nv  0.3462 0.4801 -0.2799\nv  0.3454 0.4841 -0.2807\nv  0.3447 0.4881 -0.2815\nv  0.3440 0.4922 -0.2821\nv  0.3433 0.4963 -0.2826\nv  0.3426 0.5003 -0.2830\nv  0.3419 0.5044 -0.2833\nv  0.3411 0.5085 -0.2835\nv  0.3407 0.5144 -0.2835\nv  0.3414 0.5104 -0.2835\nv  0.3400 0.5184 -0.2835\nv  0.3393 0.5225 -0.2833\nv  0.3386 0.5265 -0.2830\nv  0.3379 0.5306 -0.2826\nv  0.3371 0.5346 -0.2822\nv  0.3364 0.5386 -0.2816\nv  0.3678 0.3567 -0.0940\nv  0.3683 0.3568 -0.0939\nv  0.3686 0.3569 -0.0938\nv  0.4308 0.0001 -0.1868\nv  0.4314 0.0002 -0.1868\nv  0.4315 0.0003 -0.3978\nv  0.3685 0.3569 -0.1240\nv  0.4302 0.0012 -0.1842\nv  0.4308 0.0013 -0.1841\nv  0.3680 0.3567 0.1189\nv  0.4309 0.0012 -0.1843\nv  0.4302 0.0009 -0.1845\nv  0.4306 0.0009 -0.1844\nv  -0.3010 0.3569 -0.1240\nv  -0.3016 0.3571 -0.1240\nv  -0.3021 0.3575 -0.1240\nv  -0.3025 0.3579 -0.1240\nv  -0.3028 0.3584 -0.1240\nv  -0.3031 0.3590 -0.1240\nv  -0.3032 0.3595 -0.1240\nv  -0.3033 0.3601 -0.1240\nv  0.4307 0.0000 0.2238\nv  0.4305 0.0000 0.2238\nv  0.3682 0.3568 0.1609\nv  0.4308 0.0001 0.3957\nv  0.4311 0.0001 0.2238\nv  -0.2613 0.0001 0.3957\nv  -0.2613 0.0001 0.3962\nv  -0.4280 0.0041 0.3991\nv  -0.0720 0.5324 0.3059\nv  -0.0718 0.5332 0.3058\nv  -0.0712 0.5330 0.3058\nv  0.0258 0.8046 0.2580\nv  -0.0721 0.5316 0.3061\nv  -0.0715 0.5323 0.3059\nv  -0.0722 0.5308 0.3062\nv  -0.0717 0.5315 0.3061\nv  -0.0721 0.5299 0.3064\nv  -0.0718 0.5307 0.3062\nv  -0.0719 0.5291 0.3065\nv  -0.0718 0.5299 0.3064\nv  -0.0717 0.5283 0.3067\nv  -0.0717 0.5291 0.3065\nv  -0.0713 0.5276 0.3068\nv  -0.0715 0.5283 0.3067\nv  -0.0709 0.5268 0.3069\nv  -0.0712 0.5275 0.3068\nv  -0.0708 0.5267 0.3070\nv  -0.0704 0.5262 0.3071\nv  -0.0702 0.5269 0.3069\nv  -0.0706 0.5276 0.3067\nv  -0.0698 0.5256 0.3072\nv  -0.0697 0.5263 0.3070\nv  -0.0691 0.5251 0.3073\nv  -0.0691 0.5257 0.3071\nv  -0.0684 0.5247 0.3073\nv  -0.0684 0.5252 0.3072\nv  -0.0676 0.5244 0.3074\nv  -0.0677 0.5248 0.3073\nv  -0.0669 0.5241 0.3074\nv  -0.0669 0.5245 0.3073\nv  -0.0661 0.5240 0.3075\nv  -0.0661 0.5243 0.3074\nv  -0.0652 0.5240 0.3075\nv  -0.1391 0.3457 0.3389\nv  0.1639 0.5240 0.3075\nv  0.1639 0.5245 0.3073\nv  -0.0652 0.5243 0.3074\nv  0.1647 0.5240 0.3074\nv  0.1655 0.5242 0.3074\nv  0.1647 0.5245 0.3073\nv  0.1664 0.5244 0.3074\nv  0.1654 0.5247 0.3073\nv  0.1671 0.5248 0.3073\nv  0.1662 0.5249 0.3072\nv  0.2035 0.3457 0.3389\nv  0.1675 0.5250 0.3073\nv  0.1669 0.5253 0.3072\nv  0.1679 0.5252 0.3072\nv  0.1682 0.5255 0.3072\nv  0.1676 0.5258 0.3071\nv  0.1685 0.5258 0.3071\nv  0.1691 0.5264 0.3070\nv  0.1687 0.5261 0.3071\nv  0.1696 0.5271 0.3069\nv  0.1692 0.5267 0.3070\nv  0.1701 0.5279 0.3068\nv  0.1696 0.5275 0.3068\nv  0.1704 0.5287 0.3066\nv  0.1700 0.5282 0.3067\nv  0.1707 0.5295 0.3065\nv  0.1702 0.5289 0.3065\nv  0.2601 0.9685 0.2291\nv  0.1708 0.5303 0.3063\nv  0.1703 0.5297 0.3064\nv  0.1708 0.5312 0.3062\nv  0.1703 0.5305 0.3063\nv  0.1707 0.5321 0.3060\nv  0.1702 0.5312 0.3061\nv  0.1226 0.8046 0.2580\nv  0.1221 0.8040 0.2580\nv  0.1701 0.5320 0.3060\nv  0.0260 0.8043 0.2580\nv  0.0262 0.8040 0.2580\nv  -0.0814 0.9685 0.2291\nv  0.2638 0.0041 0.3991\nv  0.4302 0.0041 0.3991\nv  0.4305 0.0041 0.3991\nv  0.2601 0.9691 0.2289\nv  0.2604 0.9685 0.2290\nv  0.2633 0.0035 0.3992\nv  0.4308 0.0039 0.3991\nv  0.4302 0.0035 0.3992\nv  0.4305 0.0035 0.3992\nv  0.2030 0.3451 0.3389\nv  -0.1389 0.3454 0.3389\nv  -0.1387 0.3451 0.3389\nv  -0.2619 0.0041 0.3991\nv  -0.2614 0.0039 0.3991\nv  -0.4285 0.0038 0.3992\nv  0.4312 0.0006 -0.1852\nv  0.4317 0.0006 -0.1857\nv  0.4322 0.0009 -0.1856\nv  0.4317 0.0008 -0.1851\nv  -0.0815 0.9685 0.2291\nv  -0.0814 0.9691 0.2289\nv  -0.0814 0.9713 0.2259\nv  -0.0820 0.9713 0.2256\nv  -0.0820 0.9713 0.2261\nv  0.2605 0.9713 0.2262\nv  0.2601 0.9713 0.2263\nv  0.3308 0.5696 -0.0978\nv  0.2946 0.7750 -0.0535\nv  0.2949 0.7733 -0.0539\nv  0.0251 0.8005 0.0826\nv  -0.0722 0.5309 0.1302\nv  -0.0727 0.5304 0.1302\nv  -0.0761 0.5277 0.1307\nv  -0.0758 0.5279 0.1307\nv  -0.0753 0.5282 0.1306\nv  -0.0752 0.5283 0.1306\nv  -0.0749 0.5285 0.1306\nv  -0.0745 0.5289 0.1305\nv  -0.0742 0.5291 0.1305\nv  -0.0741 0.5292 0.1305\nv  -0.0736 0.5296 0.1304\nv  -0.0732 0.5300 0.1303\nv  0.0254 0.8005 0.0827\nv  -0.0715 0.5311 0.1302\nv  -0.0718 0.5310 0.1302\nv  0.0257 0.8005 0.0828\nv  -0.0712 0.5312 0.1302\nv  0.0260 0.8005 0.0828\nv  -0.0709 0.5312 0.1303\nv  0.0265 0.8005 0.0831\nv  -0.0706 0.5313 0.1304\nv  0.0270 0.8005 0.0834\nv  -0.0701 0.5314 0.1306\nv  -0.0703 0.5314 0.1305\nv  0.0274 0.8005 0.0838\nv  -0.0695 0.5315 0.1310\nv  -0.0698 0.5315 0.1308\nv  0.0278 0.8005 0.0843\nv  -0.0692 0.5316 0.1313\nv  0.0280 0.8005 0.0848\nv  -0.0688 0.5316 0.1319\nv  -0.0689 0.5316 0.1316\nv  0.0282 0.8005 0.0854\nv  -0.0686 0.5316 0.1323\nv  0.0282 0.8005 0.0860\nv  -0.0685 0.5315 0.1330\nv  -0.0685 0.5316 0.1326\nv  0.1197 0.8005 0.0826\nv  0.0282 0.8005 0.2546\nv  -0.0685 0.5315 0.3024\nv  -0.0685 0.5315 0.1334\nv  0.1197 0.8005 0.2546\nv  0.1197 0.8005 0.2548\nv  0.0282 0.8005 0.2548\nv  0.1672 0.5316 0.1300\nv  0.2890 0.8005 0.0826\nv  0.2896 0.8006 -0.0199\nv  0.2893 0.8005 0.0826\nv  0.2896 0.8006 0.0826\nv  0.3370 0.5316 0.1300\nv  0.2900 0.8007 0.0826\nv  0.3371 0.5313 0.1301\nv  0.3376 0.5317 0.1301\nv  0.3377 0.5313 0.1301\nv  0.1197 0.8006 0.2551\nv  0.1673 0.5310 0.1301\nv  0.3372 0.5310 0.1301\nv  -0.0727 0.5301 0.1302\nv  -0.0721 0.5303 0.1302\nv  -0.0756 0.5278 0.1304\nv  -0.0747 0.5284 0.1304\nv  -0.0750 0.5279 0.1301\nv  -0.0737 0.5292 0.1303\nv  -0.0741 0.5286 0.1302\nv  -0.0732 0.5294 0.1302\nv  0.1679 0.5275 0.1308\nv  0.1679 0.5276 0.1272\nv  0.1659 0.5275 0.1300\nv  0.1659 0.5275 0.1308\nv  0.1663 0.5279 0.1307\nv  0.1674 0.5303 0.1300\nv  0.1673 0.5309 0.1302\nv  0.1673 0.5303 0.1303\nv  0.1678 0.5277 0.1278\nv  0.1678 0.5280 0.1284\nv  0.1677 0.5283 0.1289\nv  0.1676 0.5287 0.1293\nv  0.1676 0.5292 0.1296\nv  0.1675 0.5298 0.1299\nv  0.1667 0.5283 0.1306\nv  0.1670 0.5287 0.1305\nv  0.1672 0.5292 0.1305\nv  0.1673 0.5298 0.1304\nv  0.1654 0.5272 0.1292\nv  0.1658 0.5274 0.3038\nv  0.1661 0.5276 0.3038\nv  0.1663 0.5278 0.3037\nv  -0.0691 0.5272 0.1292\nv  0.1639 0.5268 0.1292\nv  -0.0667 0.5268 0.1292\nv  -0.0675 0.5268 0.1292\nv  0.1644 0.5268 0.1292\nv  -0.0683 0.5270 0.1292\nv  0.4321 0.0012 -0.1850\nv  0.1649 0.5270 0.1292\nv  -0.0703 0.5279 0.1296\nv  -0.0698 0.5279 0.1299\nv  -0.0709 0.5278 0.1293\nv  -0.0715 0.5277 0.1291\nv  -0.0721 0.5276 0.1289\nv  -0.0727 0.5279 0.1293\nv  -0.0733 0.5278 0.1293\nv  -0.0740 0.5277 0.1294\nv  -0.0747 0.5276 0.1295\nv  0.3390 0.5275 0.1266\nv  0.3390 0.5275 -0.0657\nv  0.3390 0.5275 -0.0639\nv  0.3384 0.5275 0.1269\nv  0.1673 0.5309 0.3026\nv  0.1673 0.5310 0.3032\nv  0.1673 0.5306 0.3027\nv  0.3384 0.5276 0.1275\nv  0.3384 0.5276 0.1272\nv  0.3383 0.5278 0.1281\nv  0.3383 0.5277 0.1278\nv  0.3382 0.5281 0.1286\nv  0.3382 0.5280 0.1284\nv  0.3380 0.5285 0.1291\nv  0.3381 0.5283 0.1289\nv  0.3379 0.5290 0.1295\nv  0.3380 0.5287 0.1293\nv  0.3377 0.5295 0.1298\nv  0.3378 0.5292 0.1296\nv  0.3375 0.5300 0.1300\nv  0.3376 0.5298 0.1299\nv  0.3374 0.5303 0.1300\nv  0.3373 0.5306 0.1301\nv  0.0282 0.8006 0.2550\nv  0.0282 0.8006 0.2554\nv  0.1197 0.8007 0.2555\nv  -0.0686 0.5312 0.3025\nv  -0.0686 0.5311 0.3031\nv  -0.0685 0.5316 0.3029\nv  -0.0687 0.5309 0.1329\nv  -0.0686 0.5309 0.1334\nv  0.4326 0.0013 -0.1856\nv  -0.0694 0.5275 0.1297\nv  0.1639 0.5268 0.3040\nv  -0.0652 0.5268 0.1334\nv  -0.0652 0.5268 0.3040\nv  -0.0657 0.5268 0.1334\nv  -0.0652 0.5268 0.3046\nv  -0.0655 0.5268 0.3040\nv  -0.0653 0.5268 0.1326\nv  -0.0654 0.5268 0.1319\nv  -0.0658 0.5268 0.1326\nv  -0.0656 0.5268 0.1312\nv  -0.0660 0.5269 0.1319\nv  -0.0659 0.5268 0.1305\nv  -0.0663 0.5269 0.1312\nv  -0.0663 0.5268 0.1299\nv  -0.0666 0.5269 0.1305\nv  -0.0670 0.5269 0.1298\nv  0.1641 0.5268 0.3040\nv  0.1643 0.5268 0.3046\nv  0.1639 0.5268 0.3046\nv  0.2897 0.8004 -0.0236\nv  0.2897 0.8005 -0.0218\nv  0.2897 0.8002 -0.0254\nv  0.2898 0.7998 -0.0272\nv  0.2899 0.7994 -0.0289\nv  0.2900 0.7989 -0.0307\nv  0.2901 0.7983 -0.0324\nv  0.2902 0.7976 -0.0341\nv  0.2904 0.7968 -0.0357\nv  0.2905 0.7959 -0.0373\nv  0.2907 0.7950 -0.0389\nv  0.2909 0.7939 -0.0404\nv  0.2911 0.7929 -0.0418\nv  0.2914 0.7917 -0.0432\nv  0.2916 0.7904 -0.0445\nv  0.2919 0.7891 -0.0457\nv  0.2921 0.7878 -0.0469\nv  0.2924 0.7863 -0.0480\nv  0.2927 0.7848 -0.0490\nv  0.2930 0.7833 -0.0500\nv  0.2933 0.7817 -0.0508\nv  0.2936 0.7801 -0.0516\nv  0.2939 0.7784 -0.0523\nv  0.2943 0.7767 -0.0529\nv  0.3311 0.5679 -0.0982\nv  0.3315 0.5662 -0.0984\nv  0.3318 0.5644 -0.0986\nv  0.3322 0.5626 -0.0986\nv  0.3325 0.5609 -0.0986\nv  0.3328 0.5591 -0.0985\nv  0.3332 0.5574 -0.0983\nv  0.3335 0.5557 -0.0980\nv  0.3338 0.5539 -0.0977\nv  0.3342 0.5522 -0.0972\nv  0.3345 0.5505 -0.0966\nv  0.3348 0.5489 -0.0960\nv  0.3351 0.5473 -0.0953\nv  0.3354 0.5457 -0.0945\nv  0.3357 0.5442 -0.0936\nv  0.3360 0.5427 -0.0927\nv  0.3363 0.5412 -0.0916\nv  0.3366 0.5399 -0.0905\nv  0.3368 0.5385 -0.0893\nv  0.3371 0.5373 -0.0881\nv  0.3373 0.5361 -0.0868\nv  0.3375 0.5349 -0.0854\nv  0.3377 0.5339 -0.0840\nv  0.3379 0.5329 -0.0825\nv  0.3381 0.5320 -0.0810\nv  0.3382 0.5311 -0.0794\nv  0.3384 0.5303 -0.0778\nv  0.3385 0.5297 -0.0761\nv  0.3387 0.5291 -0.0745\nv  0.3387 0.5286 -0.0728\nv  0.3388 0.5282 -0.0710\nv  0.3389 0.5279 -0.0692\nv  0.3389 0.5276 -0.0675\nv  -0.2589 0.0018 0.3957\nv  -0.2587 0.0023 0.3960\nv  0.4302 0.0000 -0.1864\nv  -0.0677 0.5270 0.1298\nv  0.4329 0.0017 -0.1856\nv  0.4325 0.0016 -0.1850\nv  -0.0686 0.5272 0.1297\nv  -0.0689 0.5276 0.1301\nv  0.1653 0.5271 0.3039\nv  0.1656 0.5273 0.3039\nv  0.1647 0.5269 0.3040\nv  0.1650 0.5270 0.3040\nv  0.1644 0.5269 0.3040\nv  0.2925 0.8034 0.0846\nv  0.2924 0.8034 -0.0199\nv  0.2925 0.8034 -0.0219\nv  0.2923 0.8029 0.0841\nv  0.2923 0.8028 -0.0199\nv  0.2923 0.8028 -0.0219\nv  0.2921 0.8024 0.0837\nv  0.2920 0.8023 -0.0199\nv  0.2920 0.8022 -0.0218\nv  0.2918 0.8019 0.0834\nv  0.2917 0.8018 -0.0199\nv  0.2917 0.8017 -0.0218\nv  0.2915 0.8015 0.0832\nv  0.2913 0.8013 -0.0199\nv  0.2913 0.8013 -0.0218\nv  0.2911 0.8012 0.0830\nv  0.2908 0.8010 -0.0199\nv  0.2908 0.8009 -0.0218\nv  0.2904 0.8008 0.0827\nv  0.2902 0.8007 -0.0199\nv  0.2902 0.8007 -0.0218\nv  0.2908 0.8010 0.0828\nv  0.3382 0.5318 0.1302\nv  0.3387 0.5320 0.1305\nv  0.3392 0.5321 0.1308\nv  0.3396 0.5322 0.1312\nv  0.3400 0.5324 0.1317\nv  0.3402 0.5325 0.1323\nv  0.2974 0.7762 -0.0561\nv  0.2977 0.7743 -0.0565\nv  0.2971 0.7781 -0.0555\nv  0.2967 0.7799 -0.0548\nv  0.2964 0.7817 -0.0540\nv  0.2961 0.7834 -0.0532\nv  0.2958 0.7851 -0.0522\nv  0.2955 0.7867 -0.0512\nv  0.2952 0.7883 -0.0501\nv  0.2949 0.7898 -0.0489\nv  0.2947 0.7913 -0.0476\nv  0.2944 0.7927 -0.0462\nv  0.2942 0.7940 -0.0448\nv  0.2939 0.7952 -0.0433\nv  0.2937 0.7964 -0.0418\nv  0.2935 0.7975 -0.0402\nv  0.2934 0.7985 -0.0385\nv  0.2932 0.7994 -0.0368\nv  0.2930 0.8002 -0.0351\nv  0.2929 0.8010 -0.0332\nv  0.2928 0.8016 -0.0314\nv  0.2927 0.8022 -0.0296\nv  0.2926 0.8026 -0.0277\nv  0.2925 0.8030 -0.0258\nv  0.2925 0.8032 -0.0238\nv  0.2976 0.7742 -0.0562\nv  0.2972 0.7760 -0.0555\nv  0.2976 0.7742 -0.0560\nv  0.2969 0.7779 -0.0549\nv  0.2966 0.7796 -0.0542\nv  0.2962 0.7814 -0.0535\nv  0.2959 0.7831 -0.0527\nv  0.2956 0.7848 -0.0517\nv  0.2953 0.7864 -0.0507\nv  0.2950 0.7879 -0.0496\nv  0.2948 0.7894 -0.0484\nv  0.2945 0.7909 -0.0472\nv  0.2943 0.7922 -0.0458\nv  0.2940 0.7935 -0.0444\nv  0.2938 0.7948 -0.0430\nv  0.2936 0.7959 -0.0415\nv  0.2934 0.7970 -0.0399\nv  0.2932 0.7980 -0.0382\nv  0.2930 0.7989 -0.0365\nv  0.2929 0.7997 -0.0348\nv  0.2927 0.8004 -0.0330\nv  0.2926 0.8010 -0.0313\nv  0.2925 0.8016 -0.0294\nv  0.2924 0.8020 -0.0276\nv  0.2924 0.8024 -0.0257\nv  0.2923 0.8026 -0.0238\nv  0.3335 0.5706 -0.1001\nv  0.2974 0.7741 -0.0557\nv  0.2970 0.7758 -0.0550\nv  0.2973 0.7740 -0.0555\nv  0.2966 0.7776 -0.0544\nv  0.2963 0.7794 -0.0538\nv  0.2960 0.7811 -0.0530\nv  0.2957 0.7828 -0.0522\nv  0.2954 0.7845 -0.0513\nv  0.2951 0.7860 -0.0503\nv  0.2948 0.7876 -0.0492\nv  0.2945 0.7891 -0.0480\nv  0.2943 0.7905 -0.0468\nv  0.2940 0.7918 -0.0455\nv  0.2938 0.7931 -0.0441\nv  0.2935 0.7943 -0.0427\nv  0.2933 0.7955 -0.0412\nv  0.2931 0.7965 -0.0396\nv  0.2930 0.7975 -0.0380\nv  0.2928 0.7984 -0.0363\nv  0.2926 0.7992 -0.0346\nv  0.2925 0.7999 -0.0329\nv  0.2924 0.8005 -0.0311\nv  0.2923 0.8010 -0.0293\nv  0.2922 0.8015 -0.0275\nv  0.2921 0.8018 -0.0256\nv  0.2921 0.8021 -0.0237\nv  0.3333 0.5704 -0.0996\nv  0.2972 0.7740 -0.0552\nv  0.2966 0.7757 -0.0545\nv  0.2970 0.7739 -0.0550\nv  0.2963 0.7774 -0.0540\nv  0.2960 0.7792 -0.0533\nv  0.2956 0.7809 -0.0526\nv  0.2953 0.7825 -0.0518\nv  0.2950 0.7842 -0.0509\nv  0.2947 0.7857 -0.0499\nv  0.2944 0.7872 -0.0488\nv  0.2942 0.7887 -0.0477\nv  0.2939 0.7901 -0.0464\nv  0.2937 0.7915 -0.0452\nv  0.2934 0.7927 -0.0438\nv  0.2932 0.7939 -0.0424\nv  0.2930 0.7950 -0.0409\nv  0.2928 0.7961 -0.0394\nv  0.2926 0.7970 -0.0378\nv  0.2924 0.7979 -0.0361\nv  0.2923 0.7987 -0.0344\nv  0.2921 0.7994 -0.0327\nv  0.2920 0.8000 -0.0310\nv  0.2919 0.8006 -0.0292\nv  0.2918 0.8010 -0.0274\nv  0.2918 0.8013 -0.0255\nv  0.2917 0.8016 -0.0237\nv  0.3331 0.5703 -0.0992\nv  0.2968 0.7738 -0.0548\nv  0.2962 0.7755 -0.0541\nv  0.2966 0.7737 -0.0546\nv  0.2959 0.7772 -0.0536\nv  0.2955 0.7790 -0.0529\nv  0.2952 0.7807 -0.0522\nv  0.2949 0.7823 -0.0514\nv  0.2946 0.7839 -0.0505\nv  0.2943 0.7854 -0.0495\nv  0.2940 0.7869 -0.0485\nv  0.2938 0.7884 -0.0474\nv  0.2935 0.7898 -0.0462\nv  0.2932 0.7911 -0.0449\nv  0.2930 0.7924 -0.0435\nv  0.2927 0.7935 -0.0421\nv  0.2925 0.7947 -0.0407\nv  0.2923 0.7957 -0.0392\nv  0.2922 0.7967 -0.0376\nv  0.2920 0.7975 -0.0360\nv  0.2918 0.7983 -0.0343\nv  0.2917 0.7990 -0.0326\nv  0.2916 0.7996 -0.0309\nv  0.2915 0.8001 -0.0291\nv  0.2914 0.8006 -0.0273\nv  0.2913 0.8009 -0.0255\nv  0.2913 0.8011 -0.0236\nv  0.3327 0.5702 -0.0988\nv  0.2964 0.7737 -0.0545\nv  0.2957 0.7753 -0.0538\nv  0.2960 0.7736 -0.0542\nv  0.2954 0.7771 -0.0533\nv  0.2951 0.7788 -0.0527\nv  0.2947 0.7804 -0.0519\nv  0.2944 0.7821 -0.0511\nv  0.2941 0.7836 -0.0503\nv  0.2938 0.7852 -0.0493\nv  0.2935 0.7867 -0.0483\nv  0.2933 0.7881 -0.0471\nv  0.2930 0.7895 -0.0459\nv  0.2927 0.7908 -0.0447\nv  0.2925 0.7921 -0.0434\nv  0.2923 0.7932 -0.0420\nv  0.2920 0.7943 -0.0405\nv  0.2919 0.7954 -0.0390\nv  0.2917 0.7963 -0.0374\nv  0.2915 0.7972 -0.0358\nv  0.2914 0.7980 -0.0342\nv  0.2912 0.7987 -0.0325\nv  0.2911 0.7993 -0.0308\nv  0.2910 0.7998 -0.0290\nv  0.2909 0.8002 -0.0272\nv  0.2909 0.8006 -0.0254\nv  0.2908 0.8008 -0.0236\nv  0.3323 0.5700 -0.0984\nv  0.2959 0.7735 -0.0542\nv  0.2952 0.7752 -0.0536\nv  0.2955 0.7734 -0.0540\nv  0.2948 0.7769 -0.0531\nv  0.2945 0.7786 -0.0524\nv  0.2942 0.7802 -0.0517\nv  0.2939 0.7819 -0.0509\nv  0.2936 0.7834 -0.0501\nv  0.2933 0.7850 -0.0491\nv  0.2930 0.7865 -0.0481\nv  0.2927 0.7879 -0.0470\nv  0.2924 0.7893 -0.0458\nv  0.2922 0.7906 -0.0445\nv  0.2919 0.7918 -0.0432\nv  0.2917 0.7930 -0.0419\nv  0.2915 0.7941 -0.0404\nv  0.2913 0.7952 -0.0389\nv  0.2911 0.7961 -0.0373\nv  0.2910 0.7970 -0.0358\nv  0.2908 0.7977 -0.0341\nv  0.2907 0.7984 -0.0324\nv  0.2906 0.7990 -0.0307\nv  0.2905 0.7996 -0.0290\nv  0.2904 0.8000 -0.0272\nv  0.2903 0.8003 -0.0254\nv  0.2903 0.8005 -0.0236\nv  0.3319 0.5699 -0.0981\nv  0.2954 0.7734 -0.0540\nv  0.3313 0.5697 -0.0980\nv  0.3339 0.5687 -0.1005\nv  0.3337 0.5686 -0.1000\nv  0.3334 0.5685 -0.0995\nv  0.3331 0.5684 -0.0991\nv  0.3326 0.5682 -0.0988\nv  0.3322 0.5681 -0.0985\nv  0.3317 0.5680 -0.0983\nv  0.3393 0.5386 -0.0926\nv  0.3391 0.5401 -0.0938\nv  0.3388 0.5417 -0.0949\nv  0.3385 0.5433 -0.0959\nv  0.3382 0.5449 -0.0968\nv  0.3379 0.5466 -0.0977\nv  0.3375 0.5484 -0.0984\nv  0.3372 0.5502 -0.0991\nv  0.3369 0.5520 -0.0997\nv  0.3366 0.5538 -0.1001\nv  0.3362 0.5556 -0.1005\nv  0.3359 0.5575 -0.1008\nv  0.3356 0.5594 -0.1010\nv  0.3352 0.5613 -0.1011\nv  0.3349 0.5631 -0.1011\nv  0.3345 0.5650 -0.1010\nv  0.3342 0.5669 -0.1008\nv  0.3417 0.5252 -0.0639\nv  0.3415 0.5256 -0.0658\nv  0.3415 0.5255 -0.0639\nv  0.3415 0.5257 -0.0677\nv  0.3414 0.5260 -0.0696\nv  0.3414 0.5263 -0.0715\nv  0.3413 0.5268 -0.0734\nv  0.3412 0.5273 -0.0752\nv  0.3411 0.5279 -0.0770\nv  0.3410 0.5287 -0.0787\nv  0.3408 0.5295 -0.0805\nv  0.3407 0.5304 -0.0821\nv  0.3405 0.5314 -0.0838\nv  0.3403 0.5324 -0.0853\nv  0.3401 0.5336 -0.0869\nv  0.3399 0.5348 -0.0883\nv  0.3396 0.5361 -0.0897\nv  0.3394 0.5375 -0.0910\nv  0.3391 0.5389 -0.0922\nv  0.3389 0.5404 -0.0934\nv  0.3386 0.5419 -0.0945\nv  0.3383 0.5435 -0.0955\nv  0.3380 0.5452 -0.0964\nv  0.3377 0.5468 -0.0972\nv  0.3374 0.5486 -0.0979\nv  0.3370 0.5503 -0.0986\nv  0.3367 0.5521 -0.0991\nv  0.3364 0.5539 -0.0996\nv  0.3361 0.5557 -0.1000\nv  0.3357 0.5575 -0.1003\nv  0.3354 0.5594 -0.1005\nv  0.3350 0.5612 -0.1005\nv  0.3347 0.5631 -0.1005\nv  0.3343 0.5649 -0.1005\nv  0.3340 0.5668 -0.1003\nv  0.3417 0.5252 0.1266\nv  0.3414 0.5258 -0.0639\nv  0.3414 0.5257 0.1266\nv  0.3412 0.5260 -0.0658\nv  0.3413 0.5260 -0.0639\nv  0.3412 0.5262 -0.0677\nv  0.3412 0.5264 -0.0695\nv  0.3411 0.5268 -0.0714\nv  0.3410 0.5272 -0.0732\nv  0.3409 0.5278 -0.0750\nv  0.3408 0.5284 -0.0768\nv  0.3407 0.5291 -0.0785\nv  0.3405 0.5299 -0.0802\nv  0.3404 0.5308 -0.0819\nv  0.3402 0.5318 -0.0835\nv  0.3400 0.5328 -0.0850\nv  0.3398 0.5339 -0.0865\nv  0.3396 0.5352 -0.0880\nv  0.3394 0.5364 -0.0893\nv  0.3391 0.5378 -0.0906\nv  0.3388 0.5392 -0.0918\nv  0.3386 0.5406 -0.0930\nv  0.3383 0.5422 -0.0940\nv  0.3380 0.5437 -0.0950\nv  0.3377 0.5453 -0.0959\nv  0.3374 0.5470 -0.0967\nv  0.3371 0.5487 -0.0975\nv  0.3368 0.5504 -0.0981\nv  0.3364 0.5522 -0.0987\nv  0.3361 0.5539 -0.0991\nv  0.3358 0.5558 -0.0995\nv  0.3354 0.5576 -0.0998\nv  0.3351 0.5594 -0.1000\nv  0.3347 0.5612 -0.1001\nv  0.3344 0.5631 -0.1001\nv  0.3341 0.5649 -0.1000\nv  0.3337 0.5667 -0.0998\nv  0.3414 0.5258 0.1266\nv  0.3411 0.5263 -0.0639\nv  0.3411 0.5262 0.1266\nv  0.3409 0.5265 -0.0658\nv  0.3409 0.5264 -0.0639\nv  0.3409 0.5266 -0.0676\nv  0.3408 0.5269 -0.0695\nv  0.3408 0.5272 -0.0713\nv  0.3407 0.5276 -0.0731\nv  0.3406 0.5282 -0.0749\nv  0.3405 0.5288 -0.0766\nv  0.3403 0.5295 -0.0783\nv  0.3402 0.5303 -0.0800\nv  0.3400 0.5312 -0.0817\nv  0.3399 0.5321 -0.0832\nv  0.3397 0.5331 -0.0848\nv  0.3395 0.5343 -0.0862\nv  0.3392 0.5355 -0.0876\nv  0.3390 0.5367 -0.0890\nv  0.3388 0.5380 -0.0902\nv  0.3385 0.5394 -0.0915\nv  0.3382 0.5408 -0.0926\nv  0.3379 0.5424 -0.0936\nv  0.3376 0.5439 -0.0946\nv  0.3373 0.5455 -0.0955\nv  0.3370 0.5471 -0.0963\nv  0.3367 0.5488 -0.0970\nv  0.3364 0.5505 -0.0977\nv  0.3361 0.5522 -0.0983\nv  0.3358 0.5540 -0.0987\nv  0.3354 0.5558 -0.0991\nv  0.3351 0.5576 -0.0994\nv  0.3347 0.5594 -0.0995\nv  0.3344 0.5612 -0.0996\nv  0.3341 0.5630 -0.0996\nv  0.3337 0.5648 -0.0996\nv  0.3334 0.5666 -0.0994\nv  0.3411 0.5263 0.1266\nv  0.3406 0.5267 -0.0639\nv  0.3407 0.5266 0.1266\nv  0.3405 0.5268 -0.0658\nv  0.3405 0.5268 -0.0639\nv  0.3404 0.5270 -0.0676\nv  0.3404 0.5272 -0.0694\nv  0.3403 0.5276 -0.0712\nv  0.3403 0.5280 -0.0730\nv  0.3402 0.5285 -0.0747\nv  0.3401 0.5291 -0.0765\nv  0.3399 0.5298 -0.0782\nv  0.3398 0.5306 -0.0798\nv  0.3396 0.5315 -0.0814\nv  0.3394 0.5324 -0.0830\nv  0.3392 0.5334 -0.0845\nv  0.3390 0.5345 -0.0860\nv  0.3388 0.5357 -0.0874\nv  0.3386 0.5369 -0.0887\nv  0.3383 0.5383 -0.0899\nv  0.3381 0.5396 -0.0912\nv  0.3378 0.5410 -0.0923\nv  0.3375 0.5425 -0.0933\nv  0.3372 0.5440 -0.0943\nv  0.3369 0.5456 -0.0952\nv  0.3366 0.5472 -0.0960\nv  0.3363 0.5489 -0.0967\nv  0.3360 0.5506 -0.0973\nv  0.3357 0.5523 -0.0979\nv  0.3354 0.5540 -0.0983\nv  0.3350 0.5558 -0.0987\nv  0.3347 0.5575 -0.0990\nv  0.3343 0.5593 -0.0992\nv  0.3340 0.5611 -0.0993\nv  0.3337 0.5629 -0.0993\nv  0.3333 0.5647 -0.0992\nv  0.3330 0.5665 -0.0990\nv  0.3406 0.5267 0.1266\nv  0.3401 0.5270 -0.0639\nv  0.3402 0.5270 0.1266\nv  0.3400 0.5271 -0.0657\nv  0.3400 0.5271 -0.0639\nv  0.3400 0.5273 -0.0675\nv  0.3399 0.5275 -0.0693\nv  0.3399 0.5279 -0.0711\nv  0.3398 0.5283 -0.0729\nv  0.3397 0.5288 -0.0746\nv  0.3396 0.5294 -0.0764\nv  0.3395 0.5301 -0.0780\nv  0.3393 0.5309 -0.0797\nv  0.3391 0.5317 -0.0813\nv  0.3390 0.5326 -0.0828\nv  0.3388 0.5336 -0.0843\nv  0.3386 0.5347 -0.0857\nv  0.3383 0.5359 -0.0871\nv  0.3381 0.5371 -0.0884\nv  0.3379 0.5384 -0.0897\nv  0.3376 0.5398 -0.0909\nv  0.3373 0.5412 -0.0920\nv  0.3371 0.5426 -0.0930\nv  0.3368 0.5441 -0.0940\nv  0.3365 0.5457 -0.0949\nv  0.3362 0.5473 -0.0957\nv  0.3359 0.5489 -0.0964\nv  0.3355 0.5506 -0.0970\nv  0.3352 0.5523 -0.0976\nv  0.3349 0.5540 -0.0980\nv  0.3345 0.5558 -0.0984\nv  0.3342 0.5575 -0.0987\nv  0.3339 0.5593 -0.0989\nv  0.3335 0.5610 -0.0990\nv  0.3332 0.5628 -0.0990\nv  0.3329 0.5646 -0.0989\nv  0.3325 0.5664 -0.0987\nv  0.3401 0.5270 0.1266\nv  0.3396 0.5273 -0.0639\nv  0.3396 0.5273 0.1266\nv  0.3395 0.5274 -0.0657\nv  0.3395 0.5273 -0.0639\nv  0.3395 0.5275 -0.0675\nv  0.3394 0.5277 -0.0693\nv  0.3394 0.5281 -0.0711\nv  0.3393 0.5285 -0.0728\nv  0.3392 0.5290 -0.0745\nv  0.3391 0.5296 -0.0762\nv  0.3389 0.5302 -0.0779\nv  0.3388 0.5310 -0.0795\nv  0.3386 0.5319 -0.0811\nv  0.3384 0.5328 -0.0826\nv  0.3382 0.5338 -0.0841\nv  0.3380 0.5349 -0.0856\nv  0.3378 0.5360 -0.0869\nv  0.3376 0.5372 -0.0883\nv  0.3373 0.5385 -0.0895\nv  0.3371 0.5398 -0.0907\nv  0.3368 0.5412 -0.0918\nv  0.3366 0.5427 -0.0928\nv  0.3363 0.5442 -0.0938\nv  0.3360 0.5457 -0.0946\nv  0.3357 0.5473 -0.0954\nv  0.3354 0.5489 -0.0962\nv  0.3350 0.5506 -0.0968\nv  0.3347 0.5523 -0.0973\nv  0.3344 0.5540 -0.0978\nv  0.3340 0.5557 -0.0982\nv  0.3337 0.5574 -0.0985\nv  0.3334 0.5592 -0.0986\nv  0.3330 0.5610 -0.0988\nv  0.3327 0.5627 -0.0988\nv  0.3324 0.5645 -0.0987\nv  0.3320 0.5663 -0.0985\nv  0.4328 0.0021 -0.1850\nv  0.3414 0.5257 0.1274\nv  0.3411 0.5263 0.1273\nv  0.3407 0.5267 0.1272\nv  0.3402 0.5270 0.1272\nv  0.3396 0.5273 0.1271\nv  0.4332 0.0021 -0.1856\nv  0.3390 0.5275 0.1271\nv  0.4307 0.0006 -0.1849\nv  0.3383 0.5314 0.1303\nv  0.3389 0.5315 0.1306\nv  0.3394 0.5316 0.1309\nv  0.3398 0.5317 0.1314\nv  0.3401 0.5318 0.1319\nv  0.3404 0.5318 0.1324\nv  0.3390 0.5276 0.1275\nv  0.3389 0.5277 0.1280\nv  0.3389 0.5279 0.1284\nv  0.3388 0.5282 0.1288\nv  0.3387 0.5284 0.1291\nv  0.3386 0.5288 0.1294\nv  0.3384 0.5291 0.1297\nv  0.3383 0.5295 0.1299\nv  0.3382 0.5299 0.1300\nv  0.3380 0.5304 0.1301\nv  0.3379 0.5308 0.1302\nv  0.3413 0.5270 0.1309\nv  0.3412 0.5276 0.1314\nv  0.3411 0.5282 0.1318\nv  0.3410 0.5289 0.1321\nv  0.3408 0.5296 0.1323\nv  0.3407 0.5304 0.1325\nv  0.3405 0.5311 0.1325\nv  0.3403 0.5311 0.1319\nv  0.3404 0.5304 0.1319\nv  0.3406 0.5298 0.1318\nv  0.3407 0.5291 0.1316\nv  0.3408 0.5285 0.1313\nv  0.3410 0.5279 0.1309\nv  0.3411 0.5274 0.1305\nv  0.3412 0.5269 0.1300\nv  0.3413 0.5265 0.1294\nv  0.3413 0.5261 0.1288\nv  0.3414 0.5259 0.1281\nv  0.3396 0.5274 0.1276\nv  0.3395 0.5276 0.1281\nv  0.3395 0.5278 0.1285\nv  0.3394 0.5281 0.1289\nv  0.3393 0.5284 0.1293\nv  0.3392 0.5287 0.1296\nv  0.3390 0.5291 0.1298\nv  0.3389 0.5295 0.1300\nv  0.3388 0.5300 0.1302\nv  0.3386 0.5304 0.1303\nv  0.3384 0.5309 0.1303\nv  0.3401 0.5271 0.1277\nv  0.3401 0.5273 0.1282\nv  0.3400 0.5276 0.1287\nv  0.3399 0.5279 0.1291\nv  0.3398 0.5282 0.1295\nv  0.3397 0.5286 0.1298\nv  0.3396 0.5291 0.1301\nv  0.3395 0.5295 0.1303\nv  0.3393 0.5300 0.1305\nv  0.3392 0.5305 0.1306\nv  0.3390 0.5310 0.1306\nv  0.3406 0.5268 0.1278\nv  0.3406 0.5270 0.1284\nv  0.3405 0.5273 0.1289\nv  0.3404 0.5276 0.1294\nv  0.3403 0.5280 0.1298\nv  0.3402 0.5285 0.1301\nv  0.3401 0.5289 0.1304\nv  0.3399 0.5294 0.1307\nv  0.3398 0.5300 0.1308\nv  0.3397 0.5305 0.1309\nv  0.3395 0.5311 0.1310\nv  0.3411 0.5264 0.1279\nv  0.3410 0.5266 0.1286\nv  0.3409 0.5269 0.1291\nv  0.3408 0.5273 0.1297\nv  0.3407 0.5277 0.1301\nv  0.3406 0.5282 0.1305\nv  0.3405 0.5287 0.1308\nv  0.3404 0.5293 0.1311\nv  0.3402 0.5299 0.1313\nv  0.3401 0.5305 0.1314\nv  0.3399 0.5311 0.1314\nv  -0.0716 0.5304 0.1303\nv  -0.0711 0.5306 0.1303\nv  -0.0706 0.5307 0.1305\nv  -0.0702 0.5308 0.1307\nv  -0.0698 0.5309 0.1310\nv  -0.0695 0.5309 0.1313\nv  -0.0692 0.5310 0.1316\nv  -0.0689 0.5310 0.1320\nv  -0.0688 0.5310 0.1325\nv  0.4311 0.0009 -0.1847\nv  -0.0686 0.5309 0.3026\nv  -0.0687 0.5306 0.3027\nv  -0.0687 0.5303 0.1334\nv  -0.0687 0.5303 0.1329\nv  -0.0687 0.5303 0.3028\nv  -0.0687 0.5302 0.1334\nv  -0.0687 0.5300 0.3029\nv  -0.0686 0.5297 0.1334\nv  -0.0687 0.5297 0.1329\nv  -0.0686 0.5297 0.3030\nv  -0.0686 0.5296 0.1334\nv  -0.0686 0.5294 0.3031\nv  -0.0685 0.5291 0.1334\nv  -0.0685 0.5291 0.1329\nv  -0.0685 0.5291 0.3032\nv  -0.0685 0.5290 0.1334\nv  -0.0684 0.5288 0.3033\nv  -0.0682 0.5285 0.1334\nv  -0.0683 0.5286 0.1329\nv  -0.0682 0.5285 0.3034\nv  -0.0681 0.5283 0.3035\nv  -0.0679 0.5281 0.1334\nv  -0.0679 0.5281 0.1328\nv  -0.0679 0.5280 0.3036\nv  -0.0678 0.5280 0.1334\nv  -0.0677 0.5278 0.3037\nv  -0.0675 0.5276 0.1334\nv  -0.0675 0.5276 0.1328\nv  -0.0674 0.5276 0.3038\nv  -0.0674 0.5276 0.1334\nv  -0.0672 0.5274 0.3038\nv  -0.0670 0.5273 0.1334\nv  -0.0670 0.5272 0.1327\nv  -0.0670 0.5273 0.3039\nv  -0.0669 0.5272 0.1334\nv  -0.0667 0.5271 0.3039\nv  -0.0664 0.5270 0.1334\nv  -0.0664 0.5270 0.1326\nv  -0.0664 0.5270 0.3040\nv  -0.0663 0.5270 0.1334\nv  -0.0661 0.5269 0.3040\nv  -0.0658 0.5269 0.1334\nv  -0.0658 0.5269 0.3040\nv  -0.0657 0.5268 0.3046\nv  -0.0662 0.5269 0.3046\nv  -0.0666 0.5270 0.3045\nv  -0.0670 0.5272 0.3044\nv  -0.0674 0.5275 0.3043\nv  -0.0677 0.5278 0.3042\nv  -0.0680 0.5282 0.3041\nv  -0.0683 0.5285 0.3040\nv  -0.0685 0.5289 0.3039\nv  -0.0686 0.5294 0.3037\nv  -0.0687 0.5298 0.3036\nv  -0.0687 0.5302 0.3034\nv  -0.0687 0.5307 0.3032\nv  -0.0707 0.5328 0.3057\nv  0.0266 0.8035 0.2580\nv  -0.0702 0.5326 0.3055\nv  0.0269 0.8029 0.2578\nv  0.1217 0.8034 0.2580\nv  -0.0698 0.5324 0.3052\nv  0.0273 0.8024 0.2576\nv  0.1212 0.8029 0.2578\nv  -0.0694 0.5322 0.3049\nv  0.0275 0.8020 0.2573\nv  0.1208 0.8024 0.2576\nv  0.0278 0.8016 0.2570\nv  0.1205 0.8019 0.2573\nv  -0.0690 0.5320 0.3045\nv  0.0279 0.8012 0.2566\nv  0.1202 0.8015 0.2570\nv  -0.0688 0.5318 0.3040\nv  0.0281 0.8010 0.2562\nv  0.1199 0.8010 0.2563\nv  0.1200 0.8012 0.2566\nv  -0.0686 0.5317 0.3035\nv  0.0282 0.8008 0.2558\nv  0.1198 0.8008 0.2559\nv  -0.0687 0.5313 0.3036\nv  -0.0689 0.5314 0.3042\nv  -0.0692 0.5315 0.3046\nv  -0.0696 0.5317 0.3050\nv  -0.0700 0.5318 0.3054\nv  -0.0705 0.5320 0.3056\nv  -0.0710 0.5321 0.3058\nv  0.1695 0.5319 0.3058\nv  0.1689 0.5317 0.3056\nv  0.1684 0.5316 0.3053\nv  0.1680 0.5314 0.3048\nv  0.1677 0.5313 0.3043\nv  0.1674 0.5311 0.3038\nv  0.1696 0.5312 0.3060\nv  0.1691 0.5311 0.3057\nv  0.1686 0.5310 0.3054\nv  0.1681 0.5309 0.3050\nv  0.1678 0.5308 0.3045\nv  0.1675 0.5307 0.3039\nv  0.1674 0.5306 0.3033\nv  0.1673 0.5303 0.3028\nv  0.1673 0.5300 0.3029\nv  0.1674 0.5301 0.3035\nv  0.1673 0.5297 0.3030\nv  0.1672 0.5294 0.3031\nv  0.1673 0.5297 0.3037\nv  0.1671 0.5291 0.3032\nv  0.1672 0.5293 0.3038\nv  0.1670 0.5288 0.3033\nv  0.1669 0.5285 0.3034\nv  0.1671 0.5289 0.3039\nv  0.1667 0.5283 0.3035\nv  0.1669 0.5285 0.3041\nv  0.1665 0.5280 0.3036\nv  0.1666 0.5281 0.3042\nv  0.1663 0.5278 0.3043\nv  0.1660 0.5275 0.3044\nv  0.1656 0.5272 0.3045\nv  0.1652 0.5270 0.3046\nv  0.1648 0.5269 0.3046\nv  0.4316 0.0012 -0.1846\nv  -0.0652 0.5266 0.3051\nv  -0.0652 0.5266 0.3052\nv  0.1639 0.5266 0.3052\nv  0.1643 0.5266 0.3052\nv  0.4319 0.0015 -0.1845\nv  -0.0652 0.5264 0.3057\nv  -0.0652 0.5263 0.3058\nv  0.1639 0.5263 0.3058\nv  0.1644 0.5264 0.3058\nv  -0.0652 0.5261 0.3061\nv  -0.0652 0.5260 0.3063\nv  0.1639 0.5260 0.3063\nv  0.1644 0.5260 0.3063\nv  -0.0652 0.5257 0.3065\nv  -0.0652 0.5256 0.3067\nv  0.1639 0.5256 0.3067\nv  0.1645 0.5256 0.3067\nv  -0.0652 0.5253 0.3069\nv  0.1639 0.5255 0.3067\nv  -0.0652 0.5251 0.3070\nv  0.1639 0.5251 0.3070\nv  0.1646 0.5251 0.3071\nv  -0.0652 0.5248 0.3072\nv  0.1639 0.5250 0.3071\nv  -0.0652 0.5245 0.3073\nv  -0.0660 0.5249 0.3072\nv  -0.0660 0.5253 0.3069\nv  -0.0659 0.5258 0.3065\nv  -0.0658 0.5261 0.3061\nv  -0.0658 0.5264 0.3056\nv  -0.0657 0.5267 0.3051\nv  0.1681 0.5263 0.3070\nv  0.1686 0.5269 0.3068\nv  0.1690 0.5276 0.3067\nv  0.1693 0.5283 0.3066\nv  0.1695 0.5290 0.3064\nv  0.1697 0.5297 0.3063\nv  0.1697 0.5304 0.3061\nv  0.1653 0.5252 0.3070\nv  0.1660 0.5255 0.3070\nv  0.1666 0.5258 0.3069\nv  0.1672 0.5262 0.3068\nv  0.1677 0.5267 0.3067\nv  0.1682 0.5272 0.3066\nv  0.1685 0.5278 0.3065\nv  0.1688 0.5285 0.3063\nv  0.1690 0.5291 0.3062\nv  0.1691 0.5298 0.3060\nv  0.1691 0.5304 0.3059\nv  0.1675 0.5302 0.3041\nv  0.1675 0.5298 0.3042\nv  0.1674 0.5293 0.3044\nv  0.1673 0.5289 0.3045\nv  0.1671 0.5285 0.3047\nv  0.1668 0.5281 0.3048\nv  0.1665 0.5277 0.3049\nv  0.1661 0.5274 0.3050\nv  0.1657 0.5271 0.3051\nv  0.1653 0.5269 0.3051\nv  0.1648 0.5267 0.3052\nv  0.1678 0.5303 0.3046\nv  0.1678 0.5298 0.3048\nv  0.1677 0.5293 0.3049\nv  0.1675 0.5288 0.3051\nv  0.1673 0.5284 0.3052\nv  0.1670 0.5280 0.3053\nv  0.1667 0.5276 0.3054\nv  0.1663 0.5272 0.3055\nv  0.1659 0.5269 0.3056\nv  0.1654 0.5266 0.3057\nv  0.1649 0.5265 0.3058\nv  0.1682 0.5304 0.3051\nv  0.1681 0.5298 0.3053\nv  0.1681 0.5293 0.3054\nv  0.1679 0.5288 0.3056\nv  0.1677 0.5283 0.3057\nv  0.1674 0.5278 0.3058\nv  0.1670 0.5273 0.3059\nv  0.1666 0.5269 0.3060\nv  0.1661 0.5266 0.3061\nv  0.1656 0.5263 0.3062\nv  0.1650 0.5261 0.3062\nv  0.1686 0.5304 0.3055\nv  0.1686 0.5298 0.3057\nv  0.1685 0.5292 0.3058\nv  0.1683 0.5286 0.3060\nv  0.1681 0.5281 0.3061\nv  0.1677 0.5275 0.3063\nv  0.1673 0.5270 0.3064\nv  0.1669 0.5266 0.3065\nv  0.1664 0.5262 0.3066\nv  0.1658 0.5259 0.3066\nv  0.1651 0.5257 0.3067\nv  -0.0710 0.5283 0.3066\nv  -0.0712 0.5291 0.3064\nv  -0.0713 0.5299 0.3063\nv  -0.0713 0.5306 0.3061\nv  -0.0712 0.5314 0.3060\nv  -0.0707 0.5313 0.3058\nv  -0.0707 0.5306 0.3060\nv  -0.0707 0.5299 0.3061\nv  -0.0706 0.5292 0.3063\nv  -0.0705 0.5285 0.3064\nv  -0.0702 0.5279 0.3065\nv  -0.0698 0.5272 0.3067\nv  -0.0694 0.5266 0.3068\nv  -0.0688 0.5261 0.3069\nv  -0.0682 0.5256 0.3070\nv  -0.0675 0.5253 0.3071\nv  -0.0668 0.5250 0.3072\nv  -0.0662 0.5268 0.3051\nv  -0.0667 0.5269 0.3050\nv  -0.0671 0.5271 0.3050\nv  -0.0675 0.5274 0.3049\nv  -0.0679 0.5278 0.3048\nv  -0.0682 0.5281 0.3047\nv  -0.0684 0.5285 0.3045\nv  -0.0686 0.5290 0.3044\nv  -0.0688 0.5294 0.3043\nv  -0.0689 0.5299 0.3041\nv  -0.0689 0.5303 0.3040\nv  -0.0688 0.5308 0.3038\nv  -0.0663 0.5265 0.3056\nv  -0.0668 0.5267 0.3056\nv  -0.0673 0.5270 0.3055\nv  -0.0677 0.5273 0.3054\nv  -0.0681 0.5277 0.3053\nv  -0.0684 0.5281 0.3052\nv  -0.0687 0.5285 0.3051\nv  -0.0689 0.5290 0.3049\nv  -0.0690 0.5294 0.3048\nv  -0.0691 0.5299 0.3046\nv  -0.0691 0.5304 0.3045\nv  -0.0691 0.5309 0.3043\nv  -0.0664 0.5263 0.3061\nv  -0.0669 0.5265 0.3060\nv  -0.0675 0.5267 0.3060\nv  -0.0679 0.5271 0.3059\nv  -0.0683 0.5275 0.3058\nv  -0.0687 0.5279 0.3056\nv  -0.0690 0.5284 0.3055\nv  -0.0692 0.5289 0.3054\nv  -0.0693 0.5294 0.3052\nv  -0.0694 0.5300 0.3051\nv  -0.0694 0.5305 0.3049\nv  -0.0694 0.5310 0.3048\nv  -0.0665 0.5259 0.3065\nv  -0.0671 0.5261 0.3065\nv  -0.0677 0.5264 0.3064\nv  -0.0682 0.5268 0.3063\nv  -0.0686 0.5272 0.3062\nv  -0.0690 0.5277 0.3061\nv  -0.0693 0.5283 0.3059\nv  -0.0696 0.5288 0.3058\nv  -0.0697 0.5294 0.3056\nv  -0.0698 0.5300 0.3055\nv  -0.0698 0.5305 0.3053\nv  -0.0697 0.5311 0.3052\nv  -0.0666 0.5255 0.3069\nv  -0.0673 0.5257 0.3068\nv  -0.0679 0.5261 0.3067\nv  -0.0685 0.5265 0.3066\nv  -0.0690 0.5269 0.3065\nv  -0.0694 0.5275 0.3064\nv  -0.0697 0.5281 0.3063\nv  -0.0700 0.5287 0.3061\nv  -0.0702 0.5293 0.3060\nv  -0.0702 0.5300 0.3058\nv  -0.0702 0.5306 0.3057\nv  -0.0702 0.5312 0.3055\nv  -0.0666 0.5270 0.1319\nv  -0.0669 0.5270 0.1311\nv  -0.0673 0.5270 0.1305\nv  -0.0726 0.5295 0.1302\nv  -0.0721 0.5297 0.1302\nv  -0.0716 0.5298 0.1302\nv  -0.0711 0.5300 0.1304\nv  -0.0706 0.5301 0.1305\nv  -0.0702 0.5302 0.1307\nv  -0.0698 0.5303 0.1310\nv  -0.0695 0.5303 0.1314\nv  -0.0692 0.5304 0.1317\nv  -0.0690 0.5304 0.1321\nv  -0.0688 0.5303 0.1325\nv  -0.0736 0.5287 0.1301\nv  -0.0730 0.5289 0.1300\nv  -0.0724 0.5290 0.1300\nv  -0.0719 0.5291 0.1300\nv  -0.0714 0.5293 0.1301\nv  -0.0709 0.5294 0.1303\nv  -0.0705 0.5295 0.1305\nv  -0.0701 0.5296 0.1307\nv  -0.0697 0.5297 0.1310\nv  -0.0694 0.5297 0.1314\nv  -0.0691 0.5297 0.1317\nv  -0.0689 0.5298 0.1321\nv  -0.0688 0.5297 0.1325\nv  -0.0744 0.5281 0.1299\nv  -0.0738 0.5282 0.1298\nv  -0.0732 0.5283 0.1297\nv  -0.0726 0.5284 0.1297\nv  -0.0720 0.5286 0.1298\nv  -0.0714 0.5287 0.1299\nv  -0.0709 0.5288 0.1301\nv  -0.0705 0.5289 0.1303\nv  -0.0700 0.5290 0.1306\nv  -0.0697 0.5291 0.1309\nv  -0.0693 0.5291 0.1312\nv  -0.0690 0.5292 0.1316\nv  -0.0688 0.5292 0.1320\nv  -0.0686 0.5291 0.1325\nv  -0.0720 0.5280 0.1294\nv  -0.0715 0.5282 0.1295\nv  -0.0709 0.5283 0.1297\nv  -0.0704 0.5284 0.1300\nv  -0.0699 0.5284 0.1303\nv  -0.0695 0.5285 0.1306\nv  -0.0691 0.5286 0.1310\nv  -0.0688 0.5286 0.1315\nv  -0.0686 0.5286 0.1319\nv  -0.0684 0.5286 0.1324\nv  -0.0693 0.5280 0.1303\nv  -0.0689 0.5281 0.1308\nv  -0.0686 0.5281 0.1312\nv  -0.0683 0.5281 0.1317\nv  -0.0681 0.5281 0.1323\nv  -0.0685 0.5276 0.1306\nv  -0.0682 0.5277 0.1311\nv  -0.0679 0.5277 0.1316\nv  -0.0676 0.5276 0.1322\nv  -0.0681 0.5273 0.1302\nv  -0.0677 0.5273 0.1308\nv  -0.0674 0.5273 0.1314\nv  -0.0672 0.5273 0.1320\nv  -0.2607 0.0002 0.3957\nv  -0.2602 0.0005 0.3957\nv  -0.2597 0.0008 0.3957\nv  -0.2593 0.0013 0.3957\nv  -0.2589 0.0017 0.3957\nv  -0.2608 0.0003 0.3963\nv  0.4333 0.0021 -0.1862\nv  -0.2602 0.0005 0.3963\nv  -0.2597 0.0009 0.3963\nv  -0.2593 0.0013 0.3962\nv  -0.2589 0.0018 0.3962\nv  -0.3010 0.3569 -0.1281\nv  -0.3016 0.3572 -0.1281\nv  -0.3020 0.3575 -0.1281\nv  -0.3025 0.3579 -0.1280\nv  -0.3028 0.3584 -0.1280\nv  -0.3031 0.3590 -0.1280\nv  -0.3032 0.3596 -0.1280\nv  -0.3033 0.3602 -0.1280\nv  -0.3032 0.3603 -0.1320\nv  -0.3031 0.3606 -0.1360\nv  -0.3030 0.3609 -0.1400\nv  -0.3029 0.3614 -0.1439\nv  -0.3027 0.3619 -0.1479\nv  -0.3024 0.3626 -0.1518\nv  -0.3022 0.3633 -0.1557\nv  -0.3019 0.3641 -0.1596\nv  -0.3015 0.3651 -0.1634\nv  -0.3011 0.3661 -0.1673\nv  -0.3007 0.3672 -0.1711\nv  -0.3003 0.3684 -0.1749\nv  -0.2998 0.3698 -0.1786\nv  -0.2993 0.3711 -0.1823\nv  -0.2988 0.3726 -0.1860\nv  -0.2982 0.3742 -0.1896\nv  -0.2976 0.3759 -0.1932\nv  -0.2970 0.3776 -0.1967\nv  -0.2963 0.3795 -0.2002\nv  -0.2957 0.3814 -0.2036\nv  -0.2949 0.3834 -0.2070\nv  -0.2942 0.3855 -0.2103\nv  -0.2934 0.3877 -0.2136\nv  -0.2926 0.3899 -0.2167\nv  -0.2918 0.3922 -0.2199\nv  -0.2909 0.3946 -0.2230\nv  -0.2900 0.3970 -0.2260\nv  -0.2891 0.3996 -0.2289\nv  -0.2882 0.4022 -0.2318\nv  -0.2872 0.4049 -0.2346\nv  -0.2862 0.4076 -0.2373\nv  -0.2852 0.4104 -0.2400\nv  -0.2842 0.4132 -0.2426\nv  -0.2832 0.4161 -0.2451\nv  -0.2821 0.4191 -0.2475\nv  -0.2810 0.4221 -0.2499\nv  -0.2799 0.4252 -0.2522\nv  -0.2788 0.4283 -0.2544\nv  -0.2777 0.4315 -0.2565\nv  -0.2765 0.4347 -0.2586\nv  -0.2753 0.4380 -0.2605\nv  -0.2741 0.4413 -0.2624\nv  -0.2729 0.4447 -0.2642\nv  -0.2717 0.4481 -0.2659\nv  -0.2705 0.4515 -0.2675\nv  -0.2692 0.4550 -0.2690\nv  -0.2680 0.4585 -0.2705\nv  -0.2667 0.4620 -0.2718\nv  -0.2654 0.4656 -0.2731\nv  -0.2641 0.4691 -0.2743\nv  -0.2628 0.4728 -0.2754\nv  -0.2615 0.4764 -0.2763\nv  -0.2602 0.4800 -0.2773\nv  -0.2589 0.4837 -0.2781\nv  -0.2576 0.4874 -0.2788\nv  -0.2562 0.4911 -0.2794\nv  -0.2549 0.4948 -0.2800\nv  -0.2536 0.4985 -0.2804\nv  -0.2522 0.5023 -0.2808\nv  -0.2509 0.5060 -0.2811\nv  -0.2495 0.5098 -0.2812\nv  -0.2482 0.5135 -0.2813\nv  -0.2468 0.5173 -0.2813\nv  -0.2455 0.5210 -0.2812\nv  -0.2441 0.5248 -0.2810\nv  -0.2428 0.5285 -0.2807\nv  -0.2414 0.5323 -0.2803\nv  -0.2401 0.5360 -0.2798\nv  -0.2388 0.5397 -0.2793\nv  -0.2374 0.5434 -0.2786\nv  -0.1282 0.8475 -0.2130\nv  -0.2361 0.5471 -0.2778\nv  -0.3032 0.3597 -0.1320\nv  -0.3031 0.3600 -0.1360\nv  -0.3030 0.3603 -0.1400\nv  -0.3028 0.3608 -0.1440\nv  -0.3026 0.3613 -0.1479\nv  -0.3024 0.3620 -0.1519\nv  -0.3021 0.3627 -0.1558\nv  -0.3018 0.3636 -0.1597\nv  -0.3015 0.3645 -0.1636\nv  -0.3011 0.3655 -0.1674\nv  -0.3007 0.3667 -0.1713\nv  -0.3002 0.3679 -0.1751\nv  -0.2998 0.3692 -0.1788\nv  -0.2993 0.3706 -0.1825\nv  -0.2987 0.3721 -0.1862\nv  -0.2982 0.3737 -0.1898\nv  -0.2976 0.3753 -0.1934\nv  -0.2969 0.3771 -0.1970\nv  -0.2963 0.3789 -0.2004\nv  -0.2956 0.3809 -0.2039\nv  -0.2949 0.3829 -0.2073\nv  -0.2941 0.3850 -0.2106\nv  -0.2933 0.3872 -0.2139\nv  -0.2925 0.3894 -0.2171\nv  -0.2917 0.3917 -0.2202\nv  -0.2908 0.3941 -0.2233\nv  -0.2899 0.3966 -0.2263\nv  -0.2890 0.3991 -0.2293\nv  -0.2881 0.4017 -0.2322\nv  -0.2871 0.4044 -0.2350\nv  -0.2861 0.4071 -0.2377\nv  -0.2851 0.4099 -0.2404\nv  -0.2841 0.4128 -0.2430\nv  -0.2830 0.4157 -0.2456\nv  -0.2820 0.4187 -0.2480\nv  -0.2809 0.4217 -0.2504\nv  -0.2798 0.4248 -0.2527\nv  -0.2786 0.4280 -0.2549\nv  -0.2775 0.4312 -0.2570\nv  -0.2763 0.4344 -0.2590\nv  -0.2752 0.4377 -0.2610\nv  -0.2740 0.4410 -0.2629\nv  -0.2727 0.4444 -0.2647\nv  -0.2715 0.4478 -0.2664\nv  -0.2703 0.4512 -0.2680\nv  -0.2690 0.4547 -0.2695\nv  -0.2678 0.4582 -0.2710\nv  -0.2665 0.4617 -0.2723\nv  -0.2652 0.4653 -0.2736\nv  -0.2639 0.4689 -0.2748\nv  -0.2626 0.4725 -0.2759\nv  -0.2613 0.4762 -0.2769\nv  -0.2600 0.4798 -0.2778\nv  -0.2587 0.4835 -0.2786\nv  -0.2574 0.4872 -0.2793\nv  -0.2560 0.4909 -0.2800\nv  -0.2547 0.4947 -0.2805\nv  -0.2533 0.4984 -0.2810\nv  -0.2520 0.5022 -0.2813\nv  -0.2506 0.5059 -0.2816\nv  -0.2493 0.5097 -0.2818\nv  -0.2479 0.5135 -0.2819\nv  -0.2466 0.5172 -0.2818\nv  -0.2452 0.5210 -0.2817\nv  -0.2439 0.5247 -0.2815\nv  -0.2425 0.5285 -0.2813\nv  -0.2412 0.5322 -0.2809\nv  -0.2398 0.5360 -0.2804\nv  -0.2385 0.5397 -0.2798\nv  -0.2361 0.5471 -0.2779\nv  -0.2372 0.5434 -0.2792\nv  -0.2359 0.5471 -0.2783\nv  -0.1279 0.8475 -0.2135\nv  -0.3030 0.3592 -0.1320\nv  -0.3029 0.3594 -0.1361\nv  -0.3028 0.3598 -0.1401\nv  -0.3026 0.3602 -0.1440\nv  -0.3024 0.3607 -0.1480\nv  -0.3022 0.3614 -0.1520\nv  -0.3020 0.3622 -0.1559\nv  -0.3016 0.3630 -0.1598\nv  -0.3013 0.3639 -0.1637\nv  -0.3009 0.3650 -0.1676\nv  -0.3005 0.3661 -0.1714\nv  -0.3001 0.3673 -0.1752\nv  -0.2996 0.3686 -0.1790\nv  -0.2991 0.3700 -0.1827\nv  -0.2986 0.3715 -0.1864\nv  -0.2980 0.3731 -0.1900\nv  -0.2974 0.3748 -0.1936\nv  -0.2967 0.3766 -0.1972\nv  -0.2961 0.3784 -0.2007\nv  -0.2954 0.3804 -0.2041\nv  -0.2947 0.3824 -0.2075\nv  -0.2939 0.3845 -0.2109\nv  -0.2931 0.3866 -0.2142\nv  -0.2923 0.3889 -0.2174\nv  -0.2915 0.3912 -0.2206\nv  -0.2906 0.3936 -0.2236\nv  -0.2897 0.3961 -0.2267\nv  -0.2888 0.3987 -0.2296\nv  -0.2879 0.4013 -0.2325\nv  -0.2869 0.4040 -0.2354\nv  -0.2859 0.4067 -0.2381\nv  -0.2849 0.4095 -0.2408\nv  -0.2839 0.4124 -0.2434\nv  -0.2828 0.4153 -0.2459\nv  -0.2818 0.4183 -0.2484\nv  -0.2807 0.4213 -0.2508\nv  -0.2795 0.4244 -0.2531\nv  -0.2784 0.4276 -0.2553\nv  -0.2773 0.4308 -0.2574\nv  -0.2761 0.4340 -0.2595\nv  -0.2749 0.4373 -0.2614\nv  -0.2737 0.4407 -0.2633\nv  -0.2725 0.4441 -0.2651\nv  -0.2713 0.4475 -0.2668\nv  -0.2700 0.4509 -0.2685\nv  -0.2688 0.4544 -0.2700\nv  -0.2675 0.4579 -0.2715\nv  -0.2663 0.4615 -0.2728\nv  -0.2650 0.4651 -0.2741\nv  -0.2637 0.4687 -0.2753\nv  -0.2623 0.4723 -0.2764\nv  -0.2610 0.4760 -0.2774\nv  -0.2597 0.4796 -0.2783\nv  -0.2584 0.4833 -0.2791\nv  -0.2571 0.4870 -0.2798\nv  -0.2557 0.4908 -0.2805\nv  -0.2544 0.4945 -0.2810\nv  -0.2530 0.4982 -0.2815\nv  -0.2517 0.5020 -0.2818\nv  -0.2503 0.5058 -0.2821\nv  -0.2490 0.5095 -0.2823\nv  -0.2476 0.5133 -0.2823\nv  -0.2463 0.5171 -0.2823\nv  -0.2449 0.5209 -0.2822\nv  -0.2435 0.5247 -0.2820\nv  -0.2422 0.5284 -0.2817\nv  -0.2408 0.5322 -0.2814\nv  -0.2395 0.5359 -0.2809\nv  -0.2382 0.5397 -0.2803\nv  -0.2358 0.5471 -0.2784\nv  -0.2368 0.5434 -0.2796\nv  -0.2355 0.5471 -0.2788\nv  -0.1276 0.8475 -0.2140\nv  -0.3028 0.3586 -0.1321\nv  -0.3027 0.3589 -0.1361\nv  -0.3025 0.3592 -0.1401\nv  -0.3024 0.3597 -0.1441\nv  -0.3022 0.3602 -0.1481\nv  -0.3020 0.3609 -0.1521\nv  -0.3017 0.3616 -0.1560\nv  -0.3014 0.3625 -0.1599\nv  -0.3010 0.3634 -0.1638\nv  -0.3007 0.3644 -0.1677\nv  -0.3003 0.3656 -0.1716\nv  -0.2998 0.3668 -0.1754\nv  -0.2993 0.3681 -0.1791\nv  -0.2988 0.3695 -0.1829\nv  -0.2983 0.3710 -0.1866\nv  -0.2977 0.3726 -0.1902\nv  -0.2971 0.3743 -0.1938\nv  -0.2965 0.3761 -0.1974\nv  -0.2958 0.3779 -0.2009\nv  -0.2951 0.3799 -0.2044\nv  -0.2944 0.3819 -0.2078\nv  -0.2936 0.3840 -0.2111\nv  -0.2928 0.3862 -0.2144\nv  -0.2920 0.3884 -0.2176\nv  -0.2912 0.3908 -0.2208\nv  -0.2903 0.3932 -0.2239\nv  -0.2894 0.3957 -0.2269\nv  -0.2885 0.3982 -0.2299\nv  -0.2876 0.4009 -0.2328\nv  -0.2866 0.4035 -0.2357\nv  -0.2856 0.4063 -0.2384\nv  -0.2846 0.4091 -0.2411\nv  -0.2836 0.4120 -0.2437\nv  -0.2825 0.4149 -0.2463\nv  -0.2814 0.4179 -0.2487\nv  -0.2804 0.4210 -0.2511\nv  -0.2792 0.4241 -0.2534\nv  -0.2781 0.4272 -0.2556\nv  -0.2770 0.4304 -0.2578\nv  -0.2758 0.4337 -0.2598\nv  -0.2746 0.4370 -0.2618\nv  -0.2734 0.4403 -0.2637\nv  -0.2722 0.4437 -0.2655\nv  -0.2709 0.4472 -0.2672\nv  -0.2697 0.4506 -0.2688\nv  -0.2684 0.4541 -0.2704\nv  -0.2672 0.4576 -0.2718\nv  -0.2659 0.4612 -0.2732\nv  -0.2646 0.4648 -0.2745\nv  -0.2633 0.4684 -0.2757\nv  -0.2620 0.4720 -0.2768\nv  -0.2607 0.4757 -0.2778\nv  -0.2594 0.4794 -0.2787\nv  -0.2580 0.4831 -0.2795\nv  -0.2567 0.4868 -0.2803\nv  -0.2553 0.4906 -0.2809\nv  -0.2540 0.4943 -0.2814\nv  -0.2526 0.4981 -0.2819\nv  -0.2513 0.5018 -0.2823\nv  -0.2499 0.5056 -0.2825\nv  -0.2486 0.5094 -0.2827\nv  -0.2472 0.5132 -0.2828\nv  -0.2459 0.5170 -0.2828\nv  -0.2445 0.5208 -0.2827\nv  -0.2431 0.5245 -0.2825\nv  -0.2418 0.5283 -0.2822\nv  -0.2404 0.5321 -0.2818\nv  -0.2391 0.5358 -0.2813\nv  -0.2377 0.5396 -0.2807\nv  -0.2355 0.5471 -0.2789\nv  -0.2364 0.5433 -0.2801\nv  -0.2352 0.5470 -0.2792\nv  -0.1272 0.8474 -0.2144\nv  -0.3024 0.3581 -0.1321\nv  -0.3023 0.3583 -0.1361\nv  -0.3022 0.3587 -0.1401\nv  -0.3020 0.3592 -0.1442\nv  -0.3018 0.3597 -0.1481\nv  -0.3016 0.3604 -0.1521\nv  -0.3013 0.3611 -0.1561\nv  -0.3010 0.3620 -0.1600\nv  -0.3007 0.3629 -0.1639\nv  -0.3003 0.3639 -0.1678\nv  -0.2999 0.3651 -0.1717\nv  -0.2995 0.3663 -0.1755\nv  -0.2990 0.3676 -0.1793\nv  -0.2985 0.3690 -0.1830\nv  -0.2979 0.3706 -0.1867\nv  -0.2974 0.3722 -0.1904\nv  -0.2968 0.3739 -0.1940\nv  -0.2961 0.3756 -0.1976\nv  -0.2955 0.3775 -0.2011\nv  -0.2948 0.3794 -0.2045\nv  -0.2940 0.3815 -0.2080\nv  -0.2933 0.3836 -0.2113\nv  -0.2925 0.3857 -0.2146\nv  -0.2917 0.3880 -0.2179\nv  -0.2908 0.3904 -0.2210\nv  -0.2899 0.3928 -0.2241\nv  -0.2891 0.3953 -0.2272\nv  -0.2881 0.3978 -0.2302\nv  -0.2872 0.4004 -0.2331\nv  -0.2862 0.4031 -0.2359\nv  -0.2852 0.4059 -0.2387\nv  -0.2842 0.4087 -0.2414\nv  -0.2832 0.4116 -0.2440\nv  -0.2821 0.4146 -0.2465\nv  -0.2811 0.4176 -0.2490\nv  -0.2799 0.4206 -0.2514\nv  -0.2788 0.4237 -0.2537\nv  -0.2777 0.4269 -0.2559\nv  -0.2765 0.4301 -0.2581\nv  -0.2754 0.4334 -0.2601\nv  -0.2742 0.4367 -0.2621\nv  -0.2730 0.4400 -0.2640\nv  -0.2718 0.4434 -0.2658\nv  -0.2705 0.4469 -0.2675\nv  -0.2693 0.4503 -0.2692\nv  -0.2680 0.4538 -0.2707\nv  -0.2668 0.4574 -0.2722\nv  -0.2655 0.4609 -0.2736\nv  -0.2642 0.4645 -0.2748\nv  -0.2629 0.4681 -0.2760\nv  -0.2616 0.4718 -0.2771\nv  -0.2602 0.4755 -0.2781\nv  -0.2589 0.4792 -0.2790\nv  -0.2576 0.4829 -0.2799\nv  -0.2562 0.4866 -0.2806\nv  -0.2549 0.4903 -0.2812\nv  -0.2535 0.4941 -0.2818\nv  -0.2522 0.4979 -0.2822\nv  -0.2508 0.5016 -0.2826\nv  -0.2495 0.5054 -0.2829\nv  -0.2481 0.5092 -0.2830\nv  -0.2467 0.5130 -0.2831\nv  -0.2454 0.5168 -0.2831\nv  -0.2440 0.5206 -0.2830\nv  -0.2427 0.5244 -0.2828\nv  -0.2413 0.5282 -0.2825\nv  -0.2399 0.5319 -0.2821\nv  -0.2386 0.5357 -0.2817\nv  -0.2372 0.5395 -0.2811\nv  -0.2351 0.5470 -0.2793\nv  -0.2359 0.5432 -0.2804\nv  -0.2347 0.5470 -0.2796\nv  -0.1267 0.8473 -0.2148\nv  -0.3020 0.3577 -0.1321\nv  -0.3019 0.3579 -0.1361\nv  -0.3018 0.3583 -0.1402\nv  -0.3016 0.3587 -0.1442\nv  -0.3014 0.3593 -0.1482\nv  -0.3012 0.3599 -0.1522\nv  -0.3009 0.3607 -0.1561\nv  -0.3006 0.3615 -0.1601\nv  -0.3003 0.3625 -0.1640\nv  -0.2999 0.3635 -0.1679\nv  -0.2995 0.3647 -0.1717\nv  -0.2990 0.3659 -0.1756\nv  -0.2986 0.3672 -0.1794\nv  -0.2981 0.3686 -0.1831\nv  -0.2975 0.3702 -0.1868\nv  -0.2969 0.3718 -0.1905\nv  -0.2963 0.3735 -0.1941\nv  -0.2957 0.3752 -0.1977\nv  -0.2950 0.3771 -0.2012\nv  -0.2943 0.3790 -0.2047\nv  -0.2936 0.3811 -0.2081\nv  -0.2928 0.3832 -0.2115\nv  -0.2920 0.3854 -0.2148\nv  -0.2912 0.3876 -0.2180\nv  -0.2904 0.3900 -0.2212\nv  -0.2895 0.3924 -0.2243\nv  -0.2886 0.3949 -0.2273\nv  -0.2877 0.3975 -0.2303\nv  -0.2867 0.4001 -0.2332\nv  -0.2858 0.4028 -0.2361\nv  -0.2848 0.4056 -0.2389\nv  -0.2838 0.4084 -0.2416\nv  -0.2827 0.4113 -0.2442\nv  -0.2817 0.4142 -0.2467\nv  -0.2806 0.4172 -0.2492\nv  -0.2795 0.4203 -0.2516\nv  -0.2784 0.4234 -0.2539\nv  -0.2772 0.4266 -0.2562\nv  -0.2761 0.4298 -0.2583\nv  -0.2749 0.4331 -0.2604\nv  -0.2737 0.4364 -0.2623\nv  -0.2725 0.4397 -0.2642\nv  -0.2713 0.4431 -0.2660\nv  -0.2701 0.4466 -0.2678\nv  -0.2688 0.4500 -0.2694\nv  -0.2675 0.4536 -0.2710\nv  -0.2663 0.4571 -0.2724\nv  -0.2650 0.4607 -0.2738\nv  -0.2637 0.4643 -0.2751\nv  -0.2624 0.4679 -0.2763\nv  -0.2611 0.4716 -0.2774\nv  -0.2598 0.4752 -0.2784\nv  -0.2584 0.4789 -0.2793\nv  -0.2571 0.4826 -0.2801\nv  -0.2557 0.4864 -0.2809\nv  -0.2544 0.4901 -0.2815\nv  -0.2530 0.4939 -0.2820\nv  -0.2517 0.4977 -0.2825\nv  -0.2503 0.5014 -0.2828\nv  -0.2490 0.5052 -0.2831\nv  -0.2476 0.5090 -0.2833\nv  -0.2462 0.5128 -0.2834\nv  -0.2449 0.5166 -0.2834\nv  -0.2435 0.5204 -0.2833\nv  -0.2421 0.5242 -0.2831\nv  -0.2408 0.5280 -0.2828\nv  -0.2394 0.5318 -0.2824\nv  -0.2381 0.5356 -0.2819\nv  -0.2367 0.5393 -0.2813\nv  -0.2346 0.5469 -0.2797\nv  -0.2354 0.5431 -0.2807\nv  -0.2342 0.5468 -0.2798\nv  -0.1262 0.8472 -0.2150\nv  -0.3015 0.3573 -0.1321\nv  -0.3014 0.3576 -0.1362\nv  -0.3013 0.3579 -0.1402\nv  -0.3011 0.3584 -0.1442\nv  -0.3009 0.3590 -0.1482\nv  -0.3007 0.3596 -0.1522\nv  -0.3004 0.3604 -0.1562\nv  -0.3001 0.3612 -0.1601\nv  -0.2998 0.3622 -0.1640\nv  -0.2994 0.3632 -0.1679\nv  -0.2990 0.3643 -0.1718\nv  -0.2985 0.3656 -0.1756\nv  -0.2981 0.3669 -0.1794\nv  -0.2975 0.3683 -0.1832\nv  -0.2970 0.3698 -0.1869\nv  -0.2964 0.3714 -0.1906\nv  -0.2958 0.3731 -0.1942\nv  -0.2952 0.3749 -0.1978\nv  -0.2945 0.3768 -0.2013\nv  -0.2938 0.3787 -0.2048\nv  -0.2931 0.3808 -0.2082\nv  -0.2923 0.3828 -0.2115\nv  -0.2915 0.3851 -0.2149\nv  -0.2907 0.3873 -0.2181\nv  -0.2899 0.3897 -0.2213\nv  -0.2890 0.3921 -0.2244\nv  -0.2881 0.3946 -0.2275\nv  -0.2872 0.3971 -0.2304\nv  -0.2862 0.3998 -0.2334\nv  -0.2853 0.4025 -0.2362\nv  -0.2843 0.4053 -0.2390\nv  -0.2832 0.4081 -0.2417\nv  -0.2822 0.4110 -0.2443\nv  -0.2812 0.4139 -0.2469\nv  -0.2801 0.4169 -0.2493\nv  -0.2790 0.4200 -0.2517\nv  -0.2778 0.4231 -0.2540\nv  -0.2767 0.4263 -0.2563\nv  -0.2755 0.4295 -0.2584\nv  -0.2744 0.4328 -0.2605\nv  -0.2732 0.4361 -0.2625\nv  -0.2720 0.4395 -0.2644\nv  -0.2708 0.4429 -0.2662\nv  -0.2695 0.4463 -0.2679\nv  -0.2683 0.4498 -0.2695\nv  -0.2670 0.4533 -0.2711\nv  -0.2657 0.4568 -0.2726\nv  -0.2644 0.4604 -0.2739\nv  -0.2632 0.4640 -0.2752\nv  -0.2618 0.4677 -0.2764\nv  -0.2605 0.4713 -0.2775\nv  -0.2592 0.4750 -0.2785\nv  -0.2579 0.4787 -0.2794\nv  -0.2565 0.4824 -0.2803\nv  -0.2552 0.4862 -0.2810\nv  -0.2538 0.4899 -0.2816\nv  -0.2525 0.4937 -0.2822\nv  -0.2511 0.4974 -0.2826\nv  -0.2498 0.5012 -0.2830\nv  -0.2484 0.5050 -0.2833\nv  -0.2470 0.5088 -0.2834\nv  -0.2340 0.5468 -0.2799\nv  -0.2337 0.5467 -0.2800\nv  -0.3009 0.3571 -0.1322\nv  -0.3008 0.3573 -0.1363\nv  -0.3007 0.3577 -0.1403\nv  -0.3005 0.3582 -0.1444\nv  -0.3003 0.3587 -0.1484\nv  -0.3001 0.3594 -0.1525\nv  -0.2998 0.3602 -0.1565\nv  -0.2995 0.3610 -0.1605\nv  -0.2992 0.3620 -0.1644\nv  -0.2988 0.3631 -0.1684\nv  -0.2984 0.3642 -0.1722\nv  -0.2979 0.3655 -0.1761\nv  -0.2974 0.3668 -0.1799\nv  -0.2969 0.3683 -0.1837\nv  -0.2964 0.3698 -0.1875\nv  -0.2958 0.3714 -0.1912\nv  -0.2952 0.3732 -0.1948\nv  -0.2945 0.3750 -0.1984\nv  -0.2938 0.3769 -0.2020\nv  -0.2931 0.3789 -0.2055\nv  -0.2924 0.3809 -0.2089\nv  -0.2916 0.3831 -0.2123\nv  -0.2908 0.3853 -0.2156\nv  -0.2900 0.3876 -0.2189\nv  -0.2891 0.3900 -0.2221\nv  -0.2882 0.3925 -0.2252\nv  -0.2873 0.3950 -0.2283\nv  -0.2864 0.3976 -0.2313\nv  -0.2854 0.4003 -0.2342\nv  -0.2844 0.4031 -0.2371\nv  -0.2834 0.4059 -0.2399\nv  -0.2824 0.4088 -0.2426\nv  -0.2813 0.4117 -0.2452\nv  -0.2802 0.4147 -0.2477\nv  -0.2791 0.4178 -0.2502\nv  -0.2780 0.4209 -0.2526\nv  -0.2769 0.4240 -0.2549\nv  -0.2757 0.4273 -0.2571\nv  -0.2745 0.4305 -0.2593\nv  -0.1249 0.8509 -0.2142\nv  -0.1254 0.8510 -0.2139\nv  -0.1259 0.8511 -0.2136\nv  -0.1263 0.8511 -0.2131\nv  -0.1266 0.8512 -0.2127\nv  -0.1269 0.8511 -0.2122\nv  -0.1256 0.8548 -0.2112\nv  -0.1243 0.8584 -0.2102\nv  -0.1230 0.8620 -0.2091\nv  -0.1217 0.8655 -0.2079\nv  -0.1204 0.8690 -0.2067\nv  -0.1192 0.8726 -0.2053\nv  -0.1179 0.8760 -0.2038\nv  -0.1167 0.8795 -0.2023\nv  -0.1155 0.8829 -0.2007\nv  -0.1142 0.8862 -0.1989\nv  -0.1131 0.8896 -0.1972\nv  -0.1119 0.8928 -0.1953\nv  -0.1107 0.8961 -0.1933\nv  -0.1096 0.8993 -0.1913\nv  -0.1084 0.9024 -0.1891\nv  -0.1073 0.9056 -0.1869\nv  -0.1062 0.9086 -0.1846\nv  -0.1051 0.9116 -0.1823\nv  -0.1041 0.9146 -0.1798\nv  -0.1030 0.9174 -0.1773\nv  -0.1020 0.9203 -0.1747\nv  -0.1010 0.9230 -0.1721\nv  -0.1000 0.9258 -0.1693\nv  -0.0991 0.9284 -0.1665\nv  -0.0982 0.9310 -0.1637\nv  -0.0973 0.9335 -0.1607\nv  -0.0964 0.9359 -0.1577\nv  -0.0955 0.9383 -0.1547\nv  -0.0947 0.9406 -0.1515\nv  -0.0939 0.9428 -0.1483\nv  -0.0931 0.9449 -0.1451\nv  -0.0924 0.9470 -0.1418\nv  -0.0917 0.9490 -0.1384\nv  -0.0910 0.9509 -0.1350\nv  -0.0904 0.9527 -0.1315\nv  -0.0897 0.9545 -0.1280\nv  -0.0891 0.9561 -0.1244\nv  -0.0886 0.9577 -0.1208\nv  -0.0880 0.9591 -0.1172\nv  -0.0876 0.9605 -0.1135\nv  -0.0871 0.9618 -0.1098\nv  -0.0866 0.9630 -0.1060\nv  -0.0862 0.9642 -0.1022\nv  -0.0859 0.9652 -0.0984\nv  -0.0855 0.9661 -0.0946\nv  -0.0852 0.9669 -0.0907\nv  -0.0850 0.9677 -0.0868\nv  -0.0848 0.9683 -0.0829\nv  -0.0846 0.9688 -0.0790\nv  -0.0844 0.9693 -0.0750\nv  -0.0843 0.9696 -0.0711\nv  -0.0842 0.9699 -0.0671\nv  -0.0841 0.9700 -0.0632\nv  -0.1253 0.8548 -0.2118\nv  -0.1240 0.8584 -0.2107\nv  -0.1227 0.8620 -0.2096\nv  -0.1214 0.8656 -0.2084\nv  -0.1201 0.8691 -0.2072\nv  -0.1189 0.8726 -0.2058\nv  -0.1176 0.8761 -0.2043\nv  -0.1164 0.8796 -0.2028\nv  -0.1152 0.8830 -0.2011\nv  -0.1139 0.8864 -0.1994\nv  -0.1128 0.8897 -0.1976\nv  -0.1116 0.8930 -0.1957\nv  -0.1104 0.8963 -0.1938\nv  -0.1092 0.8995 -0.1917\nv  -0.1081 0.9026 -0.1896\nv  -0.1070 0.9058 -0.1874\nv  -0.1059 0.9088 -0.1851\nv  -0.1048 0.9118 -0.1827\nv  -0.1037 0.9148 -0.1802\nv  -0.1027 0.9177 -0.1777\nv  -0.1017 0.9205 -0.1751\nv  -0.1007 0.9233 -0.1725\nv  -0.0997 0.9260 -0.1697\nv  -0.0988 0.9287 -0.1669\nv  -0.0978 0.9312 -0.1640\nv  -0.0969 0.9338 -0.1611\nv  -0.0960 0.9362 -0.1581\nv  -0.0952 0.9386 -0.1550\nv  -0.0944 0.9409 -0.1518\nv  -0.0935 0.9431 -0.1486\nv  -0.0928 0.9453 -0.1454\nv  -0.0920 0.9473 -0.1420\nv  -0.0913 0.9493 -0.1387\nv  -0.0906 0.9512 -0.1352\nv  -0.0900 0.9531 -0.1318\nv  -0.0893 0.9548 -0.1282\nv  -0.0888 0.9565 -0.1247\nv  -0.0882 0.9580 -0.1211\nv  -0.0877 0.9595 -0.1174\nv  -0.0872 0.9609 -0.1137\nv  -0.0867 0.9622 -0.1100\nv  -0.0862 0.9634 -0.1062\nv  -0.0858 0.9646 -0.1024\nv  -0.0855 0.9656 -0.0986\nv  -0.0852 0.9665 -0.0947\nv  -0.0849 0.9673 -0.0908\nv  -0.0846 0.9681 -0.0869\nv  -0.0844 0.9687 -0.0830\nv  -0.0842 0.9692 -0.0790\nv  -0.0840 0.9697 -0.0751\nv  -0.0839 0.9700 -0.0711\nv  -0.0838 0.9703 -0.0672\nv  -0.0841 0.9701 -0.0592\nv  -0.0837 0.9704 -0.0632\nv  -0.0841 0.9701 0.2256\nv  -0.1250 0.8548 -0.2122\nv  -0.1237 0.8584 -0.2112\nv  -0.1224 0.8620 -0.2101\nv  -0.1211 0.8656 -0.2089\nv  -0.1198 0.8692 -0.2076\nv  -0.1185 0.8727 -0.2062\nv  -0.1173 0.8762 -0.2048\nv  -0.1160 0.8797 -0.2032\nv  -0.1148 0.8831 -0.2016\nv  -0.1136 0.8865 -0.1999\nv  -0.1124 0.8898 -0.1980\nv  -0.1112 0.8931 -0.1962\nv  -0.1100 0.8964 -0.1942\nv  -0.1089 0.8996 -0.1921\nv  -0.1077 0.9028 -0.1900\nv  -0.1066 0.9059 -0.1878\nv  -0.1055 0.9090 -0.1855\nv  -0.1044 0.9120 -0.1831\nv  -0.1033 0.9150 -0.1806\nv  -0.1023 0.9179 -0.1781\nv  -0.1013 0.9207 -0.1755\nv  -0.1003 0.9235 -0.1728\nv  -0.0993 0.9262 -0.1701\nv  -0.0983 0.9289 -0.1672\nv  -0.0974 0.9315 -0.1644\nv  -0.0965 0.9340 -0.1614\nv  -0.0956 0.9365 -0.1584\nv  -0.0948 0.9389 -0.1553\nv  -0.0939 0.9411 -0.1521\nv  -0.0931 0.9434 -0.1489\nv  -0.0923 0.9455 -0.1456\nv  -0.0916 0.9476 -0.1423\nv  -0.0909 0.9496 -0.1389\nv  -0.0902 0.9515 -0.1355\nv  -0.0895 0.9534 -0.1320\nv  -0.0889 0.9551 -0.1285\nv  -0.0883 0.9568 -0.1249\nv  -0.0877 0.9584 -0.1212\nv  -0.0872 0.9599 -0.1176\nv  -0.0867 0.9612 -0.1139\nv  -0.0862 0.9625 -0.1101\nv  -0.0858 0.9638 -0.1063\nv  -0.0854 0.9649 -0.1025\nv  -0.0850 0.9659 -0.0987\nv  -0.0847 0.9668 -0.0948\nv  -0.0844 0.9677 -0.0909\nv  -0.0841 0.9684 -0.0870\nv  -0.0839 0.9690 -0.0831\nv  -0.0837 0.9696 -0.0791\nv  -0.0836 0.9700 -0.0751\nv  -0.0834 0.9704 -0.0712\nv  -0.0833 0.9706 -0.0672\nv  -0.0837 0.9705 -0.0592\nv  -0.0833 0.9708 -0.0632\nv  -0.0837 0.9706 -0.0592\nv  -0.0837 0.9706 0.2256\nv  -0.1245 0.8548 -0.2126\nv  -0.1232 0.8584 -0.2116\nv  -0.1219 0.8620 -0.2105\nv  -0.1207 0.8656 -0.2093\nv  -0.1194 0.8692 -0.2080\nv  -0.1181 0.8727 -0.2066\nv  -0.1168 0.8762 -0.2051\nv  -0.1156 0.8797 -0.2036\nv  -0.1144 0.8831 -0.2020\nv  -0.1131 0.8865 -0.2002\nv  -0.1119 0.8899 -0.1984\nv  -0.1107 0.8932 -0.1965\nv  -0.1096 0.8964 -0.1945\nv  -0.1084 0.8997 -0.1925\nv  -0.1073 0.9029 -0.1903\nv  -0.1061 0.9060 -0.1881\nv  -0.1050 0.9091 -0.1858\nv  -0.1039 0.9121 -0.1834\nv  -0.1029 0.9151 -0.1810\nv  -0.1018 0.9180 -0.1784\nv  -0.1008 0.9208 -0.1758\nv  -0.0998 0.9236 -0.1731\nv  -0.0988 0.9264 -0.1704\nv  -0.0979 0.9290 -0.1675\nv  -0.0969 0.9316 -0.1646\nv  -0.0960 0.9342 -0.1617\nv  -0.0951 0.9366 -0.1586\nv  -0.0943 0.9390 -0.1555\nv  -0.0934 0.9413 -0.1524\nv  -0.0926 0.9436 -0.1492\nv  -0.0919 0.9457 -0.1459\nv  -0.0911 0.9478 -0.1425\nv  -0.0904 0.9498 -0.1391\nv  -0.0897 0.9517 -0.1357\nv  -0.0890 0.9536 -0.1322\nv  -0.0884 0.9553 -0.1286\nv  -0.0878 0.9570 -0.1251\nv  -0.0872 0.9586 -0.1214\nv  -0.0867 0.9601 -0.1177\nv  -0.0862 0.9615 -0.1140\nv  -0.0857 0.9628 -0.1103\nv  -0.0853 0.9640 -0.1065\nv  -0.0849 0.9651 -0.1027\nv  -0.0845 0.9661 -0.0988\nv  -0.0842 0.9671 -0.0949\nv  -0.0839 0.9679 -0.0910\nv  -0.0836 0.9687 -0.0871\nv  -0.0834 0.9693 -0.0831\nv  -0.0832 0.9698 -0.0792\nv  -0.0830 0.9703 -0.0752\nv  -0.0829 0.9707 -0.0712\nv  -0.0828 0.9709 -0.0672\nv  -0.0832 0.9708 -0.0592\nv  -0.0828 0.9711 -0.0632\nv  -0.0831 0.9709 -0.0592\nv  -0.0831 0.9709 0.2256\nv  -0.1241 0.8547 -0.2130\nv  -0.1228 0.8583 -0.2119\nv  -0.1215 0.8620 -0.2108\nv  -0.1202 0.8656 -0.2096\nv  -0.1189 0.8691 -0.2083\nv  -0.1176 0.8727 -0.2070\nv  -0.1164 0.8762 -0.2055\nv  -0.1151 0.8797 -0.2039\nv  -0.1139 0.8831 -0.2023\nv  -0.1127 0.8865 -0.2005\nv  -0.1115 0.8899 -0.1987\nv  -0.1103 0.8932 -0.1968\nv  -0.1091 0.8965 -0.1948\nv  -0.1079 0.8997 -0.1928\nv  -0.1068 0.9029 -0.1906\nv  -0.1056 0.9060 -0.1884\nv  -0.1045 0.9091 -0.1861\nv  -0.1034 0.9122 -0.1837\nv  -0.1024 0.9151 -0.1812\nv  -0.1013 0.9181 -0.1787\nv  -0.1003 0.9209 -0.1761\nv  -0.0993 0.9237 -0.1734\nv  -0.0983 0.9264 -0.1706\nv  -0.0973 0.9291 -0.1678\nv  -0.0964 0.9317 -0.1649\nv  -0.0955 0.9343 -0.1619\nv  -0.0946 0.9367 -0.1589\nv  -0.0937 0.9391 -0.1558\nv  -0.0929 0.9414 -0.1526\nv  -0.0921 0.9437 -0.1494\nv  -0.0913 0.9459 -0.1461\nv  -0.0906 0.9479 -0.1427\nv  -0.0898 0.9500 -0.1393\nv  -0.0892 0.9519 -0.1359\nv  -0.0885 0.9537 -0.1324\nv  -0.0879 0.9555 -0.1288\nv  -0.0873 0.9572 -0.1252\nv  -0.0867 0.9587 -0.1216\nv  -0.0862 0.9602 -0.1179\nv  -0.0857 0.9616 -0.1141\nv  -0.0852 0.9629 -0.1104\nv  -0.0848 0.9642 -0.1066\nv  -0.0843 0.9653 -0.1028\nv  -0.0840 0.9663 -0.0989\nv  -0.0836 0.9673 -0.0950\nv  -0.0833 0.9681 -0.0911\nv  -0.0831 0.9688 -0.0872\nv  -0.0828 0.9695 -0.0832\nv  -0.0826 0.9700 -0.0792\nv  -0.0825 0.9705 -0.0752\nv  -0.0823 0.9708 -0.0712\nv  -0.0823 0.9711 -0.0672\nv  -0.0827 0.9711 -0.0592\nv  -0.0822 0.9712 -0.0632\nv  -0.0826 0.9712 -0.0592\nv  -0.0826 0.9712 0.2256\nv  -0.1236 0.8546 -0.2132\nv  -0.1223 0.8582 -0.2122\nv  -0.1210 0.8619 -0.2111\nv  -0.1197 0.8655 -0.2099\nv  -0.1184 0.8690 -0.2086\nv  -0.1171 0.8726 -0.2072\nv  -0.1159 0.8761 -0.2057\nv  -0.1146 0.8796 -0.2042\nv  -0.1134 0.8830 -0.2025\nv  -0.1121 0.8865 -0.2008\nv  -0.1109 0.8898 -0.1990\nv  -0.1097 0.8932 -0.1971\nv  -0.1086 0.8964 -0.1951\nv  -0.1074 0.8997 -0.1930\nv  -0.1062 0.9029 -0.1909\nv  -0.1051 0.9060 -0.1886\nv  -0.1040 0.9091 -0.1863\nv  -0.1029 0.9121 -0.1839\nv  -0.1018 0.9151 -0.1814\nv  -0.1008 0.9180 -0.1789\nv  -0.0822 0.9713 -0.0592\nv  -0.0820 0.9713 -0.0592\nv  -0.0826 0.9711 0.2262\nv  -0.0831 0.9709 0.2262\nv  -0.0836 0.9705 0.2262\nv  -0.0841 0.9701 0.2262\nv  -0.0844 0.9696 0.2261\nv  0.2607 0.9686 0.2290\nv  0.2606 0.9690 0.2289\nv  0.4310 0.0042 0.3990\nv  0.2610 0.9686 0.2289\nv  0.2610 0.9690 0.2288\nv  0.4308 0.0042 0.3991\nv  0.4311 0.0042 0.3990\nv  0.2613 0.9687 0.2288\nv  0.4314 0.0042 0.3989\nv  0.2616 0.9687 0.2287\nv  0.2614 0.9689 0.2287\nv  0.4318 0.0043 0.3987\nv  0.2618 0.9687 0.2286\nv  0.4317 0.0043 0.3988\nv  0.4319 0.0043 0.3986\nv  0.2619 0.9692 0.2283\nv  0.2615 0.9694 0.2285\nv  0.4323 0.0043 0.3983\nv  0.2623 0.9687 0.2282\nv  0.2623 0.9690 0.2281\nv  0.4322 0.0043 0.3984\nv  0.4326 0.0043 0.3980\nv  0.2626 0.9687 0.2279\nv  0.4324 0.0043 0.3982\nv  0.4327 0.0043 0.3979\nv  0.2627 0.9687 0.2278\nv  0.2626 0.9693 0.2277\nv  0.4330 0.0043 0.3975\nv  0.2631 0.9687 0.2273\nv  0.2629 0.9690 0.2274\nv  0.4328 0.0043 0.3978\nv  0.4332 0.0043 0.3972\nv  0.2632 0.9687 0.2271\nv  0.4332 0.0043 0.3973\nv  0.4334 0.0042 0.3968\nv  0.2633 0.9687 0.2268\nv  0.2633 0.9689 0.2265\nv  0.2631 0.9693 0.2268\nv  0.4335 0.0042 0.3964\nv  0.4334 0.0026 -0.1857\nv  0.4336 0.0042 0.3963\nv  0.2633 0.9692 0.2260\nv  0.4336 0.0036 0.3966\nv  0.4335 0.0026 -0.1862\nv  0.4334 0.0037 0.3970\nv  0.4332 0.0037 0.3974\nv  0.4329 0.0038 0.3978\nv  0.4326 0.0039 0.3982\nv  0.4321 0.0038 0.3986\nv  0.4315 0.0039 0.3989\nv  0.4336 0.0029 0.2257\nv  0.3707 0.3596 0.1628\nv  0.3707 0.3596 0.1178\nv  0.4335 0.0023 0.2253\nv  0.3706 0.3590 0.1624\nv  0.3706 0.3591 0.1180\nv  0.4333 0.0018 0.2249\nv  0.3704 0.3585 0.1620\nv  0.3704 0.3586 0.1182\nv  0.4330 0.0014 0.2246\nv  0.3701 0.3581 0.1617\nv  0.3701 0.3581 0.1184\nv  0.4327 0.0010 0.2243\nv  0.3698 0.3577 0.1614\nv  0.3698 0.3577 0.1186\nv  0.4323 0.0007 0.2241\nv  0.3694 0.3574 0.1612\nv  0.4319 0.0005 0.2240\nv  0.3690 0.3571 0.1611\nv  0.3694 0.3574 0.1187\nv  0.4315 0.0003 0.2238\nv  0.3686 0.3569 0.1610\nv  0.3690 0.3571 0.1188\nv  0.3685 0.3569 0.1188\nv  0.4314 0.0002 0.3957\nv  0.4319 0.0005 0.3957\nv  0.4324 0.0008 0.3957\nv  0.4328 0.0012 0.3957\nv  0.4332 0.0017 0.3957\nv  0.4334 0.0023 0.3957\nv  0.4336 0.0029 0.3957\nv  0.4335 0.0032 -0.1858\nv  0.4336 0.0033 -0.1860\nv  0.4334 0.0029 -0.1855\nv  0.4331 0.0026 -0.1851\nv  0.4328 0.0022 -0.1848\nv  0.4324 0.0019 -0.1845\nv  0.4319 0.0017 -0.1843\nv  0.4323 0.0019 -0.1845\nv  0.4313 0.0015 -0.1842\nv  0.4312 0.0014 -0.1842\nv  0.4336 0.0031 -0.1863\nv  0.4302 0.0008 -0.1846\nv  0.4302 0.0004 -0.1851\nv  0.4302 0.0005 -0.1849\nv  0.4302 0.0002 -0.1856\nv  0.4302 0.0003 -0.1854\nv  0.4302 0.0001 -0.1860\nv  0.4302 0.0001 -0.1859\nv  0.4302 0.0000 -0.1863\nv  0.4308 0.0001 -0.1863\nv  0.4313 0.0002 -0.1863\nv  0.4318 0.0004 -0.3977\nv  0.4319 0.0005 -0.1868\nv  0.4318 0.0005 -0.1862\nv  0.4324 0.0008 -0.3971\nv  0.4324 0.0008 -0.1868\nv  0.4323 0.0008 -0.1862\nv  0.4321 0.0006 -0.3974\nv  0.4326 0.0010 -0.3967\nv  0.4328 0.0012 -0.1868\nv  0.4327 0.0011 -0.1862\nv  0.4331 0.0016 -0.3955\nv  0.4332 0.0017 -0.1868\nv  0.4330 0.0016 -0.1862\nv  0.4329 0.0013 -0.3961\nv  0.4333 0.0020 -0.3948\nv  0.4334 0.0023 -0.1868\nv  0.4335 0.0024 -0.3939\nv  0.4336 0.0029 -0.1868\nv  0.4337 0.0035 -0.3918\nv  0.4336 0.0029 -0.3930\nv  0.3708 0.3601 -0.0878\nv  0.3707 0.3596 -0.0889\nv  0.3706 0.3591 -0.0899\nv  0.3705 0.3587 -0.0908\nv  0.3703 0.3583 -0.0915\nv  0.3700 0.3580 -0.0921\nv  0.3697 0.3577 -0.0926\nv  0.3695 0.3574 -0.0930\nv  0.3692 0.3572 -0.0934\nv  0.3689 0.3570 -0.0936\nv  0.3707 0.3595 -0.1240\nv  0.3706 0.3590 -0.1240\nv  0.3703 0.3584 -0.1240\nv  0.3700 0.3579 -0.1240\nv  0.3695 0.3575 -0.1240\nv  0.3690 0.3571 -0.1240\nv  0.2607 0.9713 0.2256\nv  0.2607 0.9713 -0.0592\nv  0.2608 0.9712 -0.0633\nv  0.2610 0.9712 0.2256\nv  0.2608 0.9713 -0.0592\nv  0.2613 0.9712 0.2256\nv  0.2613 0.9712 -0.0592\nv  0.2614 0.9711 -0.0633\nv  0.2616 0.9710 0.2256\nv  0.2614 0.9711 -0.0592\nv  0.2619 0.9709 0.2256\nv  0.2619 0.9709 -0.0592\nv  0.2620 0.9708 -0.0633\nv  0.2621 0.9707 0.2256\nv  0.2624 0.9706 0.2256\nv  0.2624 0.9706 -0.0592\nv  0.2624 0.9705 -0.0633\nv  0.2623 0.9706 0.2256\nv  0.2626 0.9704 0.2256\nv  0.2624 0.9705 -0.0592\nv  0.2628 0.9701 0.2256\nv  0.2628 0.9701 -0.0592\nv  0.2628 0.9700 -0.0632\nv  0.2631 0.9697 0.2256\nv  0.2631 0.9696 0.2256\nv  0.2631 0.9696 -0.0592\nv  0.2632 0.9695 -0.0632\nv  0.2634 0.9691 0.2256\nv  0.2632 0.9696 -0.0592\nv  0.2628 0.9700 0.2259\nv  0.2631 0.9696 0.2263\nv  0.2626 0.9703 0.2261\nv  0.2620 0.9708 0.2258\nv  0.2622 0.9706 0.2264\nv  0.2617 0.9710 0.2260\nv  0.2613 0.9711 0.2261\nv  0.2609 0.9712 0.2262\nv  0.2632 0.9694 -0.0673\nv  0.2632 0.9691 -0.0713\nv  0.2633 0.9688 -0.0753\nv  0.2634 0.9683 -0.0793\nv  0.2635 0.9678 -0.0833\nv  0.2636 0.9671 -0.0873\nv  0.2637 0.9663 -0.0913\nv  0.2639 0.9655 -0.0952\nv  0.2640 0.9645 -0.0991\nv  0.2642 0.9635 -0.1030\nv  0.2644 0.9623 -0.1069\nv  0.2647 0.9610 -0.1107\nv  0.2649 0.9597 -0.1145\nv  0.2652 0.9582 -0.1183\nv  0.2654 0.9567 -0.1220\nv  0.2657 0.9551 -0.1257\nv  0.2660 0.9534 -0.1293\nv  0.2663 0.9515 -0.1329\nv  0.2667 0.9496 -0.1365\nv  0.2670 0.9476 -0.1400\nv  0.2674 0.9455 -0.1434\nv  0.2678 0.9434 -0.1468\nv  0.2682 0.9411 -0.1501\nv  0.2686 0.9388 -0.1534\nv  0.2690 0.9363 -0.1566\nv  0.2695 0.9338 -0.1597\nv  0.2699 0.9312 -0.1628\nv  0.2704 0.9286 -0.1658\nv  0.2709 0.9259 -0.1687\nv  0.2714 0.9231 -0.1716\nv  0.2719 0.9202 -0.1744\nv  0.2724 0.9172 -0.1771\nv  0.2729 0.9142 -0.1797\nv  0.2735 0.9111 -0.1823\nv  0.2740 0.9080 -0.1847\nv  0.2746 0.9048 -0.1871\nv  0.2752 0.9015 -0.1895\nv  0.2758 0.8982 -0.1917\nv  0.2764 0.8948 -0.1938\nv  0.2770 0.8914 -0.1959\nv  0.2776 0.8879 -0.1978\nv  0.2782 0.8844 -0.1997\nv  0.2788 0.8808 -0.2014\nv  0.2795 0.8772 -0.2031\nv  0.2801 0.8735 -0.2047\nv  0.2808 0.8698 -0.2062\nv  0.2814 0.8661 -0.2076\nv  0.2821 0.8623 -0.2089\nv  0.2828 0.8585 -0.2101\nv  0.2834 0.8547 -0.2111\nv  0.2841 0.8508 -0.2121\nv  0.2848 0.8469 -0.2130\nv  0.3377 0.5466 -0.2779\nv  0.2629 0.9699 -0.0673\nv  0.2629 0.9696 -0.0713\nv  0.2630 0.9693 -0.0754\nv  0.2631 0.9688 -0.0794\nv  0.2632 0.9682 -0.0834\nv  0.2633 0.9676 -0.0874\nv  0.2634 0.9668 -0.0914\nv  0.2636 0.9659 -0.0953\nv  0.2637 0.9650 -0.0993\nv  0.2639 0.9639 -0.1032\nv  0.2641 0.9628 -0.1071\nv  0.2643 0.9615 -0.1109\nv  0.2646 0.9602 -0.1147\nv  0.2648 0.9587 -0.1185\nv  0.2651 0.9572 -0.1222\nv  0.2654 0.9555 -0.1259\nv  0.2657 0.9538 -0.1296\nv  0.2660 0.9519 -0.1332\nv  0.2664 0.9500 -0.1367\nv  0.2667 0.9480 -0.1402\nv  0.2671 0.9459 -0.1437\nv  0.2675 0.9438 -0.1471\nv  0.2679 0.9415 -0.1504\nv  0.2683 0.9391 -0.1537\nv  0.2687 0.9367 -0.1569\nv  0.2692 0.9342 -0.1601\nv  0.2696 0.9316 -0.1631\nv  0.2701 0.9289 -0.1662\nv  0.2706 0.9262 -0.1691\nv  0.2711 0.9234 -0.1720\nv  0.2716 0.9205 -0.1748\nv  0.2721 0.9175 -0.1775\nv  0.2726 0.9145 -0.1801\nv  0.2732 0.9114 -0.1827\nv  0.2737 0.9083 -0.1852\nv  0.2743 0.9050 -0.1876\nv  0.2749 0.9018 -0.1899\nv  0.2755 0.8984 -0.1921\nv  0.2761 0.8950 -0.1943\nv  0.2767 0.8916 -0.1963\nv  0.2773 0.8881 -0.1983\nv  0.2779 0.8846 -0.2002\nv  0.2785 0.8810 -0.2019\nv  0.2792 0.8773 -0.2036\nv  0.2798 0.8737 -0.2052\nv  0.2805 0.8700 -0.2067\nv  0.2811 0.8662 -0.2081\nv  0.2818 0.8624 -0.2094\nv  0.2825 0.8586 -0.2106\nv  0.2832 0.8548 -0.2117\nv  0.2838 0.8509 -0.2126\nv  0.2845 0.8470 -0.2136\nv  0.3375 0.5466 -0.2784\nv  0.2625 0.9703 -0.0673\nv  0.2625 0.9700 -0.0714\nv  0.2626 0.9697 -0.0754\nv  0.2626 0.9692 -0.0794\nv  0.2627 0.9687 -0.0835\nv  0.2629 0.9680 -0.0875\nv  0.2630 0.9672 -0.0915\nv  0.2631 0.9664 -0.0955\nv  0.2633 0.9654 -0.0994\nv  0.2635 0.9643 -0.1033\nv  0.2637 0.9632 -0.1072\nv  0.2639 0.9619 -0.1111\nv  0.2642 0.9605 -0.1149\nv  0.2644 0.9591 -0.1187\nv  0.2647 0.9575 -0.1224\nv  0.2650 0.9559 -0.1261\nv  0.2653 0.9542 -0.1298\nv  0.2656 0.9523 -0.1334\nv  0.2660 0.9504 -0.1370\nv  0.2663 0.9484 -0.1405\nv  0.2667 0.9463 -0.1440\nv  0.2671 0.9441 -0.1474\nv  0.2675 0.9418 -0.1507\nv  0.2679 0.9395 -0.1540\nv  0.2683 0.9370 -0.1572\nv  0.2688 0.9345 -0.1604\nv  0.2692 0.9319 -0.1635\nv  0.2697 0.9292 -0.1665\nv  0.2702 0.9265 -0.1694\nv  0.2707 0.9237 -0.1723\nv  0.2712 0.9208 -0.1751\nv  0.2717 0.9178 -0.1779\nv  0.2723 0.9148 -0.1805\nv  0.2728 0.9117 -0.1831\nv  0.2734 0.9085 -0.1856\nv  0.2739 0.9053 -0.1880\nv  0.2745 0.9020 -0.1903\nv  0.2751 0.8986 -0.1926\nv  0.2757 0.8952 -0.1947\nv  0.2763 0.8918 -0.1968\nv  0.2769 0.8883 -0.1987\nv  0.2775 0.8847 -0.2006\nv  0.2782 0.8811 -0.2024\nv  0.2788 0.8775 -0.2041\nv  0.2795 0.8738 -0.2056\nv  0.2801 0.8701 -0.2071\nv  0.2808 0.8663 -0.2085\nv  0.2814 0.8625 -0.2098\nv  0.2821 0.8587 -0.2110\nv  0.2828 0.8549 -0.2121\nv  0.2835 0.8510 -0.2131\nv  0.2842 0.8470 -0.2140\nv  0.3371 0.5467 -0.2789\nv  0.2620 0.9707 -0.0673\nv  0.2620 0.9704 -0.0714\nv  0.2621 0.9700 -0.0755\nv  0.2622 0.9696 -0.0795\nv  0.2623 0.9690 -0.0836\nv  0.2624 0.9683 -0.0876\nv  0.2625 0.9676 -0.0916\nv  0.2627 0.9667 -0.0956\nv  0.2628 0.9657 -0.0995\nv  0.2630 0.9647 -0.1034\nv  0.2632 0.9635 -0.1073\nv  0.2635 0.9622 -0.1112\nv  0.2637 0.9609 -0.1151\nv  0.2639 0.9594 -0.1188\nv  0.2642 0.9578 -0.1226\nv  0.2645 0.9562 -0.1263\nv  0.2648 0.9545 -0.1300\nv  0.2652 0.9526 -0.1336\nv  0.2655 0.9507 -0.1372\nv  0.2659 0.9487 -0.1407\nv  0.2662 0.9466 -0.1442\nv  0.2666 0.9444 -0.1476\nv  0.2670 0.9421 -0.1510\nv  0.2674 0.9397 -0.1543\nv  0.2678 0.9373 -0.1575\nv  0.2683 0.9348 -0.1607\nv  0.2688 0.9322 -0.1637\nv  0.2692 0.9295 -0.1668\nv  0.2697 0.9267 -0.1697\nv  0.2702 0.9239 -0.1726\nv  0.2707 0.9210 -0.1755\nv  0.2712 0.9180 -0.1782\nv  0.2718 0.9150 -0.1808\nv  0.2723 0.9119 -0.1834\nv  0.2729 0.9087 -0.1859\nv  0.2735 0.9054 -0.1883\nv  0.2740 0.9021 -0.1907\nv  0.2746 0.8988 -0.1929\nv  0.2752 0.8954 -0.1950\nv  0.2759 0.8919 -0.1971\nv  0.2765 0.8884 -0.1991\nv  0.2771 0.8848 -0.2010\nv  0.2777 0.8812 -0.2027\nv  0.2784 0.8776 -0.2044\nv  0.2790 0.8739 -0.2060\nv  0.2797 0.8702 -0.2075\nv  0.2804 0.8664 -0.2089\nv  0.2810 0.8626 -0.2102\nv  0.2817 0.8588 -0.2114\nv  0.2824 0.8549 -0.2125\nv  0.2831 0.8510 -0.2136\nv  0.2838 0.8471 -0.2144\nv  0.3367 0.5467 -0.2793\nv  0.2615 0.9709 -0.0674\nv  0.2615 0.9707 -0.0714\nv  0.2616 0.9703 -0.0755\nv  0.2616 0.9698 -0.0795\nv  0.2617 0.9693 -0.0836\nv  0.2619 0.9686 -0.0876\nv  0.2620 0.9678 -0.0916\nv  0.2621 0.9670 -0.0956\nv  0.2623 0.9660 -0.0996\nv  0.2625 0.9649 -0.1035\nv  0.2627 0.9637 -0.1074\nv  0.2629 0.9625 -0.1113\nv  0.2632 0.9611 -0.1152\nv  0.2634 0.9596 -0.1190\nv  0.2637 0.9581 -0.1227\nv  0.2640 0.9564 -0.1265\nv  0.2643 0.9547 -0.1301\nv  0.2646 0.9528 -0.1338\nv  0.2650 0.9509 -0.1374\nv  0.2653 0.9489 -0.1409\nv  0.2657 0.9468 -0.1444\nv  0.2661 0.9446 -0.1478\nv  0.2665 0.9423 -0.1512\nv  0.2669 0.9399 -0.1545\nv  0.2673 0.9375 -0.1577\nv  0.2678 0.9349 -0.1609\nv  0.2683 0.9323 -0.1640\nv  0.2687 0.9296 -0.1670\nv  0.2692 0.9269 -0.1700\nv  0.2697 0.9240 -0.1729\nv  0.2702 0.9211 -0.1757\nv  0.2707 0.9182 -0.1785\nv  0.2713 0.9151 -0.1811\nv  0.2718 0.9120 -0.1837\nv  0.2724 0.9088 -0.1862\nv  0.2730 0.9056 -0.1886\nv  0.2735 0.9023 -0.1909\nv  0.2741 0.8989 -0.1932\nv  0.2747 0.8955 -0.1953\nv  0.2754 0.8920 -0.1974\nv  0.2760 0.8885 -0.1994\nv  0.2766 0.8849 -0.2013\nv  0.2772 0.8813 -0.2031\nv  0.2779 0.8776 -0.2048\nv  0.2785 0.8739 -0.2064\nv  0.2792 0.8702 -0.2079\nv  0.2799 0.8664 -0.2093\nv  0.2805 0.8626 -0.2106\nv  0.2812 0.8588 -0.2118\nv  0.2819 0.8549 -0.2129\nv  0.2826 0.8510 -0.2139\nv  0.2833 0.8471 -0.2148\nv  0.3363 0.5467 -0.2796\nv  0.2609 0.9711 -0.0674\nv  0.2609 0.9708 -0.0714\nv  0.2610 0.9705 -0.0755\nv  0.2611 0.9700 -0.0796\nv  0.2612 0.9694 -0.0837\nv  0.2613 0.9688 -0.0877\nv  0.2614 0.9680 -0.0917\nv  0.2616 0.9671 -0.0957\nv  0.2618 0.9661 -0.0997\nv  0.2619 0.9651 -0.1036\nv  0.2621 0.9639 -0.1075\nv  0.2624 0.9626 -0.1114\nv  0.2626 0.9613 -0.1153\nv  0.2629 0.9598 -0.1191\nv  0.2631 0.9582 -0.1228\nv  0.2634 0.9566 -0.1266\nv  0.2637 0.9548 -0.1303\nv  0.2641 0.9530 -0.1339\nv  0.2644 0.9510 -0.1375\nv  0.2648 0.9490 -0.1410\nv  0.2651 0.9469 -0.1445\nv  0.2655 0.9447 -0.1479\nv  0.2659 0.9424 -0.1513\nv  0.2664 0.9400 -0.1546\nv  0.2668 0.9376 -0.1579\nv  0.2672 0.9350 -0.1610\nv  0.2677 0.9324 -0.1641\nv  0.2682 0.9297 -0.1672\nv  0.2687 0.9270 -0.1702\nv  0.2692 0.9241 -0.1731\nv  0.2697 0.9212 -0.1759\nv  0.2702 0.9182 -0.1787\nv  0.2707 0.9152 -0.1813\nv  0.2713 0.9121 -0.1839\nv  0.2719 0.9089 -0.1864\nv  0.2724 0.9056 -0.1888\nv  0.2730 0.9023 -0.1912\nv  0.2736 0.8989 -0.1934\nv  0.2742 0.8955 -0.1956\nv  0.2748 0.8920 -0.1976\nv  0.2754 0.8885 -0.1996\nv  0.2761 0.8849 -0.2015\nv  0.2767 0.8813 -0.2033\nv  0.2773 0.8776 -0.2050\nv  0.2780 0.8739 -0.2066\nv  0.2787 0.8702 -0.2081\nv  0.2793 0.8664 -0.2095\nv  0.2800 0.8626 -0.2108\nv  0.2807 0.8587 -0.2120\nv  0.2814 0.8549 -0.2131\nv  0.2820 0.8510 -0.2141\nv  0.2828 0.8470 -0.2150\nv  0.3357 0.5467 -0.2799\nv  0.3362 0.5467 -0.2796\nv  0.3352 0.5466 -0.2800\nv  0.3356 0.5466 -0.2799\nv  0.3363 0.5427 -0.2807\nv  0.3369 0.5427 -0.2805\nv  0.3374 0.5428 -0.2801\nv  0.3378 0.5427 -0.2797\nv  0.3382 0.5427 -0.2792\nv  0.3384 0.5427 -0.2787\nv  0.3391 0.5387 -0.2794\nv  0.3398 0.5348 -0.2799\nv  0.3405 0.5308 -0.2804\nv  0.3412 0.5268 -0.2808\nv  0.3419 0.5228 -0.2811\nv  0.3426 0.5188 -0.2813\nv  0.3433 0.5149 -0.2813\nv  0.3440 0.5109 -0.2813\nv  0.3447 0.5069 -0.2811\nv  0.3454 0.5029 -0.2809\nv  0.3462 0.4989 -0.2805\nv  0.3469 0.4949 -0.2801\nv  0.3475 0.4910 -0.2795\nv  0.3482 0.4870 -0.2788\nv  0.3489 0.4831 -0.2781\nv  0.3496 0.4792 -0.2772\nv  0.3503 0.4753 -0.2762\nv  0.3510 0.4715 -0.2751\nv  0.3517 0.4677 -0.2740\nv  0.3523 0.4638 -0.2727\nv  0.3530 0.4601 -0.2713\nv  0.3537 0.4564 -0.2699\nv  0.3543 0.4527 -0.2683\nv  0.3549 0.4490 -0.2666\nv  0.3556 0.4454 -0.2649\nv  0.3562 0.4419 -0.2630\nv  0.3568 0.4384 -0.2611\nv  0.3574 0.4349 -0.2590\nv  0.3580 0.4315 -0.2569\nv  0.3586 0.4282 -0.2547\nv  0.3592 0.4249 -0.2524\nv  0.3598 0.4216 -0.2500\nv  0.3603 0.4185 -0.2475\nv  0.3609 0.4154 -0.2450\nv  0.3614 0.4124 -0.2423\nv  0.3619 0.4094 -0.2396\nv  0.3624 0.4065 -0.2368\nv  0.3629 0.4036 -0.2339\nv  0.3634 0.4009 -0.2310\nv  0.3639 0.3982 -0.2280\nv  0.3644 0.3956 -0.2249\nv  0.3648 0.3931 -0.2218\nv  0.3652 0.3907 -0.2186\nv  0.3656 0.3883 -0.2153\nv  0.3660 0.3860 -0.2120\nv  0.3664 0.3838 -0.2086\nv  0.3668 0.3817 -0.2051\nv  0.3672 0.3797 -0.2016\nv  0.3675 0.3778 -0.1981\nv  0.3678 0.3759 -0.1945\nv  0.3681 0.3742 -0.1908\nv  0.3684 0.3725 -0.1871\nv  0.3687 0.3710 -0.1834\nv  0.3690 0.3695 -0.1796\nv  0.3692 0.3682 -0.1758\nv  0.3694 0.3669 -0.1719\nv  0.3696 0.3657 -0.1681\nv  0.3698 0.3647 -0.1641\nv  0.3700 0.3637 -0.1602\nv  0.3701 0.3628 -0.1562\nv  0.3703 0.3620 -0.1523\nv  0.3704 0.3614 -0.1483\nv  0.3705 0.3608 -0.1443\nv  0.3706 0.3604 -0.1402\nv  0.3706 0.3600 -0.1362\nv  0.3707 0.3597 -0.1321\nv  0.3707 0.3596 -0.1281\nv  0.3389 0.5388 -0.2799\nv  0.3396 0.5348 -0.2805\nv  0.3403 0.5308 -0.2810\nv  0.3410 0.5268 -0.2814\nv  0.3417 0.5228 -0.2816\nv  0.3424 0.5188 -0.2818\nv  0.3431 0.5148 -0.2819\nv  0.3438 0.5108 -0.2818\nv  0.3445 0.5068 -0.2817\nv  0.3452 0.5028 -0.2814\nv  0.3459 0.4988 -0.2811\nv  0.3466 0.4948 -0.2806\nv  0.3473 0.4908 -0.2800\nv  0.3480 0.4869 -0.2794\nv  0.3487 0.4830 -0.2786\nv  0.3494 0.4790 -0.2777\nv  0.3501 0.4752 -0.2768\nv  0.3508 0.4713 -0.2757\nv  0.3514 0.4674 -0.2745\nv  0.3521 0.4636 -0.2732\nv  0.3528 0.4599 -0.2718\nv  0.3534 0.4561 -0.2704\nv  0.3541 0.4524 -0.2688\nv  0.3547 0.4488 -0.2671\nv  0.3554 0.4452 -0.2653\nv  0.3560 0.4416 -0.2635\nv  0.3566 0.4381 -0.2615\nv  0.3572 0.4346 -0.2595\nv  0.3578 0.4312 -0.2574\nv  0.3584 0.4278 -0.2551\nv  0.3590 0.4245 -0.2528\nv  0.3596 0.4213 -0.2504\nv  0.3601 0.4181 -0.2479\nv  0.3607 0.4150 -0.2454\nv  0.3612 0.4120 -0.2427\nv  0.3617 0.4090 -0.2400\nv  0.3623 0.4061 -0.2372\nv  0.3628 0.4032 -0.2343\nv  0.3633 0.4004 -0.2314\nv  0.3637 0.3978 -0.2284\nv  0.3642 0.3952 -0.2253\nv  0.3646 0.3926 -0.2221\nv  0.3651 0.3902 -0.2189\nv  0.3655 0.3878 -0.2156\nv  0.3659 0.3855 -0.2123\nv  0.3663 0.3833 -0.2089\nv  0.3666 0.3812 -0.2054\nv  0.3670 0.3792 -0.2019\nv  0.3673 0.3773 -0.1983\nv  0.3677 0.3754 -0.1947\nv  0.3680 0.3737 -0.1910\nv  0.3683 0.3720 -0.1873\nv  0.3685 0.3704 -0.1836\nv  0.3688 0.3690 -0.1798\nv  0.3690 0.3676 -0.1760\nv  0.3693 0.3663 -0.1721\nv  0.3695 0.3652 -0.1682\nv  0.3696 0.3641 -0.1643\nv  0.3698 0.3631 -0.1603\nv  0.3700 0.3623 -0.1564\nv  0.3701 0.3615 -0.1524\nv  0.3702 0.3608 -0.1484\nv  0.3703 0.3602 -0.1443\nv  0.3704 0.3598 -0.1403\nv  0.3705 0.3594 -0.1362\nv  0.3705 0.3592 -0.1321\nv  0.3706 0.3590 -0.1281\nv  0.3385 0.5388 -0.2804\nv  0.3392 0.5348 -0.2810\nv  0.3399 0.5308 -0.2815\nv  0.3406 0.5268 -0.2818\nv  0.3413 0.5228 -0.2821\nv  0.3420 0.5188 -0.2823\nv  0.3427 0.5148 -0.2824\nv  0.3435 0.5107 -0.2823\nv  0.3442 0.5067 -0.2822\nv  0.3449 0.5027 -0.2819\nv  0.3456 0.4987 -0.2816\nv  0.3463 0.4947 -0.2811\nv  0.3470 0.4907 -0.2805\nv  0.3477 0.4867 -0.2799\nv  0.3484 0.4828 -0.2791\nv  0.3491 0.4789 -0.2782\nv  0.3498 0.4750 -0.2772\nv  0.3504 0.4711 -0.2761\nv  0.3511 0.4672 -0.2750\nv  0.3518 0.4634 -0.2737\nv  0.3524 0.4596 -0.2723\nv  0.3531 0.4559 -0.2708\nv  0.3538 0.4522 -0.2692\nv  0.3544 0.4485 -0.2676\nv  0.3551 0.4449 -0.2658\nv  0.3557 0.4413 -0.2639\nv  0.3563 0.4378 -0.2620\nv  0.3569 0.4343 -0.2599\nv  0.3575 0.4309 -0.2578\nv  0.3581 0.4275 -0.2556\nv  0.3587 0.4242 -0.2532\nv  0.3593 0.4209 -0.2508\nv  0.3599 0.4177 -0.2483\nv  0.3604 0.4146 -0.2458\nv  0.3609 0.4116 -0.2431\nv  0.3615 0.4086 -0.2404\nv  0.3620 0.4057 -0.2376\nv  0.3625 0.4028 -0.2347\nv  0.3630 0.4000 -0.2317\nv  0.3635 0.3973 -0.2287\nv  0.3639 0.3947 -0.2256\nv  0.3644 0.3922 -0.2224\nv  0.3648 0.3897 -0.2192\nv  0.3652 0.3873 -0.2159\nv  0.3656 0.3850 -0.2125\nv  0.3660 0.3828 -0.2091\nv  0.3664 0.3807 -0.2057\nv  0.3667 0.3787 -0.2021\nv  0.3671 0.3768 -0.1985\nv  0.3674 0.3749 -0.1949\nv  0.3677 0.3732 -0.1912\nv  0.3680 0.3715 -0.1875\nv  0.3683 0.3699 -0.1838\nv  0.3685 0.3685 -0.1800\nv  0.3688 0.3671 -0.1761\nv  0.3690 0.3658 -0.1723\nv  0.3692 0.3646 -0.1684\nv  0.3694 0.3636 -0.1644\nv  0.3696 0.3626 -0.1604\nv  0.3697 0.3617 -0.1565\nv  0.3699 0.3609 -0.1524\nv  0.3700 0.3603 -0.1484\nv  0.3701 0.3597 -0.1444\nv  0.3702 0.3592 -0.1403\nv  0.3702 0.3589 -0.1363\nv  0.3703 0.3586 -0.1322\nv  0.3703 0.3584 -0.1281\nv  0.3381 0.5388 -0.2808\nv  0.3388 0.5348 -0.2814\nv  0.3395 0.5308 -0.2819\nv  0.3402 0.5268 -0.2823\nv  0.3409 0.5227 -0.2825\nv  0.3416 0.5187 -0.2827\nv  0.3423 0.5147 -0.2828\nv  0.3430 0.5107 -0.2827\nv  0.3437 0.5066 -0.2826\nv  0.3444 0.5026 -0.2823\nv  0.3451 0.4986 -0.2820\nv  0.3459 0.4946 -0.2815\nv  0.3466 0.4906 -0.2810\nv  0.3473 0.4866 -0.2803\nv  0.3480 0.4826 -0.2795\nv  0.3487 0.4787 -0.2786\nv  0.3494 0.4748 -0.2777\nv  0.3500 0.4709 -0.2766\nv  0.3507 0.4670 -0.2754\nv  0.3514 0.4632 -0.2741\nv  0.3521 0.4594 -0.2727\nv  0.3527 0.4556 -0.2712\nv  0.3534 0.4519 -0.2696\nv  0.3540 0.4483 -0.2680\nv  0.3547 0.4446 -0.2662\nv  0.3553 0.4410 -0.2643\nv  0.3559 0.4375 -0.2623\nv  0.3566 0.4340 -0.2603\nv  0.3572 0.4306 -0.2581\nv  0.3577 0.4272 -0.2559\nv  0.3583 0.4239 -0.2536\nv  0.3589 0.4206 -0.2512\nv  0.3595 0.4174 -0.2487\nv  0.3600 0.4143 -0.2461\nv  0.3606 0.4112 -0.2434\nv  0.3611 0.4082 -0.2407\nv  0.3616 0.4053 -0.2379\nv  0.3621 0.4024 -0.2350\nv  0.3626 0.3996 -0.2320\nv  0.3631 0.3969 -0.2290\nv  0.3636 0.3943 -0.2259\nv  0.3640 0.3918 -0.2227\nv  0.3644 0.3893 -0.2195\nv  0.3648 0.3869 -0.2161\nv  0.3652 0.3846 -0.2128\nv  0.3656 0.3824 -0.2094\nv  0.3660 0.3803 -0.2059\nv  0.3664 0.3783 -0.2023\nv  0.3667 0.3763 -0.1987\nv  0.3671 0.3745 -0.1951\nv  0.3674 0.3727 -0.1914\nv  0.3677 0.3710 -0.1877\nv  0.3679 0.3695 -0.1839\nv  0.3682 0.3680 -0.1801\nv  0.3684 0.3666 -0.1763\nv  0.3687 0.3653 -0.1724\nv  0.3689 0.3642 -0.1685\nv  0.3690 0.3631 -0.1645\nv  0.3692 0.3621 -0.1605\nv  0.3694 0.3612 -0.1565\nv  0.3695 0.3605 -0.1525\nv  0.3696 0.3598 -0.1485\nv  0.3697 0.3592 -0.1444\nv  0.3698 0.3588 -0.1404\nv  0.3699 0.3584 -0.1363\nv  0.3699 0.3581 -0.1322\nv  0.3699 0.3580 -0.1281\nv  0.3376 0.5387 -0.2812\nv  0.3383 0.5348 -0.2818\nv  0.3390 0.5307 -0.2822\nv  0.3397 0.5267 -0.2826\nv  0.3404 0.5227 -0.2829\nv  0.3411 0.5186 -0.2831\nv  0.3418 0.5146 -0.2831\nv  0.3426 0.5106 -0.2831\nv  0.3433 0.5065 -0.2829\nv  0.3440 0.5025 -0.2827\nv  0.3447 0.4984 -0.2823\nv  0.3454 0.4944 -0.2819\nv  0.3461 0.4904 -0.2813\nv  0.3468 0.4864 -0.2806\nv  0.3475 0.4825 -0.2798\nv  0.3482 0.4785 -0.2790\nv  0.3489 0.4746 -0.2780\nv  0.3496 0.4707 -0.2769\nv  0.3503 0.4668 -0.2757\nv  0.3509 0.4630 -0.2744\nv  0.3516 0.4592 -0.2730\nv  0.3523 0.4554 -0.2715\nv  0.3529 0.4517 -0.2700\nv  0.3536 0.4480 -0.2683\nv  0.3542 0.4444 -0.2665\nv  0.3548 0.4408 -0.2646\nv  0.3555 0.4372 -0.2627\nv  0.3561 0.4337 -0.2606\nv  0.3567 0.4303 -0.2584\nv  0.3573 0.4269 -0.2562\nv  0.3579 0.4236 -0.2539\nv  0.3584 0.4203 -0.2514\nv  0.3590 0.4171 -0.2490\nv  0.3596 0.4140 -0.2464\nv  0.3601 0.4109 -0.2437\nv  0.3606 0.4079 -0.2409\nv  0.3612 0.4050 -0.2381\nv  0.3617 0.4021 -0.2352\nv  0.3622 0.3993 -0.2323\nv  0.3626 0.3966 -0.2292\nv  0.3631 0.3940 -0.2261\nv  0.3636 0.3914 -0.2229\nv  0.3640 0.3889 -0.2197\nv  0.3644 0.3865 -0.2163\nv  0.3648 0.3843 -0.2130\nv  0.3652 0.3820 -0.2095\nv  0.3656 0.3799 -0.2060\nv  0.3659 0.3779 -0.2025\nv  0.3663 0.3759 -0.1989\nv  0.3666 0.3741 -0.1953\nv  0.3669 0.3723 -0.1916\nv  0.3672 0.3706 -0.1878\nv  0.3675 0.3691 -0.1841\nv  0.3678 0.3676 -0.1802\nv  0.3680 0.3662 -0.1764\nv  0.3682 0.3649 -0.1725\nv  0.3684 0.3637 -0.1686\nv  0.3686 0.3627 -0.1646\nv  0.3688 0.3617 -0.1606\nv  0.3689 0.3608 -0.1566\nv  0.3691 0.3600 -0.1526\nv  0.3692 0.3594 -0.1485\nv  0.3693 0.3588 -0.1445\nv  0.3694 0.3583 -0.1404\nv  0.3694 0.3579 -0.1363\nv  0.3695 0.3577 -0.1322\nv  0.3695 0.3575 -0.1281\nv  0.3370 0.5387 -0.2814\nv  0.3377 0.5347 -0.2820\nv  0.3384 0.5306 -0.2825\nv  0.3392 0.5266 -0.2829\nv  0.3399 0.5226 -0.2831\nv  0.3406 0.5185 -0.2833\nv  0.3413 0.5145 -0.2834\nv  0.3420 0.5105 -0.2833\nv  0.3427 0.5064 -0.2832\nv  0.3434 0.5024 -0.2829\nv  0.3441 0.4983 -0.2826\nv  0.3448 0.4943 -0.2821\nv  0.3455 0.4903 -0.2816\nv  0.3463 0.4863 -0.2809\nv  0.3470 0.4823 -0.2801\nv  0.3477 0.4784 -0.2792\nv  0.3483 0.4744 -0.2782\nv  0.3490 0.4705 -0.2772\nv  0.3497 0.4667 -0.2759\nv  0.3504 0.4628 -0.2747\nv  0.3511 0.4590 -0.2733\nv  0.3517 0.4552 -0.2718\nv  0.3524 0.4515 -0.2702\nv  0.3531 0.4478 -0.2685\nv  0.3537 0.4442 -0.2667\nv  0.3543 0.4406 -0.2648\nv  0.3549 0.4370 -0.2629\nv  0.3556 0.4335 -0.2608\nv  0.3562 0.4301 -0.2586\nv  0.3568 0.4267 -0.2564\nv  0.3574 0.4233 -0.2541\nv  0.3579 0.4201 -0.2516\nv  0.3585 0.4169 -0.2492\nv  0.3591 0.4137 -0.2466\nv  0.3596 0.4106 -0.2439\nv  0.3601 0.4076 -0.2411\nv  0.3607 0.4047 -0.2383\nv  0.3612 0.4018 -0.2354\nv  0.3616 0.3990 -0.2324\nv  0.3621 0.3963 -0.2294\nv  0.3626 0.3937 -0.2263\nv  0.3630 0.3911 -0.2231\nv  0.3635 0.3886 -0.2198\nv  0.3639 0.3862 -0.2165\nv  0.3643 0.3840 -0.2131\nv  0.3647 0.3817 -0.2097\nv  0.3651 0.3796 -0.2062\nv  0.3654 0.3776 -0.2026\nv  0.3658 0.3756 -0.1990\nv  0.3661 0.3738 -0.1954\nv  0.3664 0.3720 -0.1917\nv  0.3667 0.3703 -0.1879\nv  0.3670 0.3687 -0.1842\nv  0.3673 0.3673 -0.1803\nv  0.3675 0.3659 -0.1765\nv  0.3677 0.3646 -0.1726\nv  0.3679 0.3634 -0.1686\nv  0.3681 0.3623 -0.1647\nv  0.3683 0.3613 -0.1607\nv  0.3684 0.3605 -0.1567\nv  0.3686 0.3597 -0.1526\nv  0.3687 0.3590 -0.1486\nv  0.3688 0.3584 -0.1445\nv  0.3689 0.3580 -0.1404\nv  0.3690 0.3576 -0.1363\nv  0.3690 0.3573 -0.1322\nv  0.3690 0.3572 -0.1281\nv  0.3422 0.5063 -0.2833\nv  0.3429 0.5022 -0.2831\nv  0.3436 0.4982 -0.2827\nv  0.3443 0.4942 -0.2823\nv  0.3450 0.4902 -0.2817\nv  0.3457 0.4862 -0.2810\nv  0.3464 0.4822 -0.2803\nv  0.3471 0.4783 -0.2794\nv  0.3478 0.4743 -0.2784\nv  0.3485 0.4704 -0.2773\nv  0.3492 0.4665 -0.2761\nv  0.3498 0.4627 -0.2748\nv  0.3505 0.4589 -0.2734\nv  0.3512 0.4551 -0.2719\nv  0.3518 0.4514 -0.2703\nv  0.3525 0.4477 -0.2686\nv  0.3531 0.4440 -0.2669\nv  0.3538 0.4404 -0.2650\nv  0.3544 0.4368 -0.2630\nv  0.3550 0.4333 -0.2609\nv  0.3556 0.4299 -0.2588\nv  0.3562 0.4265 -0.2565\nv  0.3568 0.4232 -0.2542\nv  0.3574 0.4199 -0.2518\nv  0.3579 0.4167 -0.2493\nv  0.3585 0.4135 -0.2467\nv  0.3590 0.4104 -0.2440\nv  0.3596 0.4074 -0.2412\nv  0.3601 0.4045 -0.2384\nv  0.3606 0.4016 -0.2355\nv  0.3611 0.3988 -0.2325\nv  0.3616 0.3961 -0.2295\nv  0.3620 0.3935 -0.2264\nv  0.3625 0.3909 -0.2232\nv  0.3629 0.3884 -0.2199\nv  0.3634 0.3860 -0.2166\nv  0.3638 0.3837 -0.2132\nv  0.3642 0.3815 -0.2098\nv  0.3645 0.3794 -0.2063\nv  0.3649 0.3773 -0.2027\nv  0.3652 0.3754 -0.1991\nv  0.3656 0.3735 -0.1954\nv  0.3659 0.3717 -0.1917\nv  0.3662 0.3701 -0.1880\nv  0.3664 0.3685 -0.1842\nv  0.3667 0.3670 -0.1804\nv  0.3670 0.3656 -0.1765\nv  0.3672 0.3643 -0.1726\nv  0.3674 0.3632 -0.1687\nv  0.3676 0.3621 -0.1647\nv  0.3678 0.3611 -0.1607\nv  0.3679 0.3602 -0.1567\nv  0.3680 0.3594 -0.1527\nv  0.3682 0.3588 -0.1486\nv  0.3683 0.3582 -0.1445\nv  0.3683 0.3577 -0.1405\nv  0.3684 0.3573 -0.1364\nv  0.3685 0.3571 -0.1322\nv  0.3685 0.3569 -0.1281\nv  -0.0814 0.9712 0.2266\nv  0.2601 0.9712 0.2268\nv  0.2606 0.9711 0.2268\nv  -0.0814 0.9713 0.2263\nv  -0.0814 0.9710 0.2271\nv  0.2601 0.9709 0.2274\nv  0.2606 0.9709 0.2274\nv  -0.0814 0.9712 0.2268\nv  -0.0814 0.9707 0.2276\nv  0.2601 0.9706 0.2279\nv  0.2606 0.9705 0.2279\nv  -0.0814 0.9709 0.2274\nv  -0.0814 0.9704 0.2281\nv  0.2601 0.9701 0.2283\nv  0.2607 0.9701 0.2283\nv  -0.0814 0.9705 0.2280\nv  -0.0814 0.9706 0.2279\nv  -0.0814 0.9701 0.2283\nv  0.2601 0.9696 0.2286\nv  0.2606 0.9696 0.2286\nv  -0.0814 0.9695 0.2287\nv  -0.0814 0.9696 0.2286\nv  -0.0818 0.9689 0.2289\nv  -0.0817 0.9698 0.2285\nv  -0.0821 0.9693 0.2287\nv  -0.0819 0.9701 0.2282\nv  -0.0816 0.9707 0.2277\nv  -0.0821 0.9705 0.2279\nv  -0.0817 0.9709 0.2273\nv  -0.0819 0.9711 0.2269\nv  -0.0819 0.9712 0.2265\nv  -0.0820 0.9687 0.2290\nv  -0.4289 0.0035 0.3992\nv  -0.2619 0.0035 0.3992\nv  -0.0825 0.9688 0.2288\nv  -0.4297 0.0029 0.3991\nv  -0.2619 0.0030 0.3991\nv  -0.0824 0.9688 0.2288\nv  -0.0830 0.9690 0.2285\nv  -0.4304 0.0024 0.3990\nv  -0.2619 0.0029 0.3991\nv  -0.0833 0.9690 0.2283\nv  -0.4309 0.0019 0.3988\nv  -0.2619 0.0023 0.3990\nv  -0.0835 0.9691 0.2282\nv  -0.4315 0.0015 0.3986\nv  -0.2619 0.0017 0.3987\nv  -0.2619 0.0019 0.3988\nv  -0.0839 0.9691 0.2278\nv  -0.4319 0.0012 0.3983\nv  -0.2619 0.0012 0.3983\nv  -0.0842 0.9692 0.2273\nv  -0.4322 0.0009 0.3980\nv  -0.2619 0.0009 0.3980\nv  -0.0841 0.9692 0.2274\nv  -0.0843 0.9692 0.2270\nv  -0.4325 0.0006 0.3977\nv  -0.2619 0.0008 0.3979\nv  -0.0844 0.9692 0.2268\nv  -0.4327 0.0005 0.3974\nv  -0.2619 0.0006 0.3977\nv  -0.0845 0.9692 0.2265\nv  -0.4328 0.0003 0.3971\nv  -0.2619 0.0003 0.3972\nv  -0.2619 0.0005 0.3974\nv  -0.0846 0.9691 0.2262\nv  -0.2619 0.0002 0.3969\nv  -0.0844 0.9695 0.2266\nv  -0.0843 0.9694 0.2270\nv  -0.0837 0.9696 0.2276\nv  -0.0839 0.9698 0.2271\nv  -0.0836 0.9693 0.2280\nv  -0.0829 0.9695 0.2283\nv  -0.0827 0.9692 0.2286\nv  -0.2616 0.0036 0.3992\nv  -0.2616 0.0025 0.3990\nv  -0.2613 0.0031 0.3991\nv  -0.2616 0.0015 0.3986\nv  -0.2613 0.0021 0.3988\nv  -0.2614 0.0011 0.3982\nv  -0.2617 0.0006 0.3977\nv  -0.2612 0.0008 0.3978\nv  -0.2615 0.0004 0.3972\nv  -0.2614 0.0002 0.3967\nv  -0.2609 0.0037 0.3990\nv  -0.1383 0.3446 0.3389\nv  -0.2604 0.0035 0.3988\nv  -0.1380 0.3440 0.3388\nv  0.2026 0.3446 0.3389\nv  -0.2600 0.0032 0.3986\nv  -0.1377 0.3435 0.3385\nv  0.2021 0.3440 0.3388\nv  -0.2599 0.0032 0.3985\nv  -0.1374 0.3431 0.3382\nv  0.2018 0.3435 0.3385\nv  -0.2594 0.0029 0.3980\nv  -0.1372 0.3427 0.3379\nv  0.2014 0.3430 0.3382\nv  -0.2596 0.0030 0.3982\nv  -0.2591 0.0028 0.3975\nv  -0.1370 0.3424 0.3376\nv  0.2011 0.3427 0.3379\nv  -0.2592 0.0029 0.3978\nv  -0.2589 0.0026 0.3971\nv  -0.1368 0.3421 0.3372\nv  0.2008 0.3421 0.3372\nv  -0.2590 0.0027 0.3973\nv  0.2009 0.3424 0.3376\nv  -0.2588 0.0025 0.3968\nv  -0.1368 0.3419 0.3367\nv  0.2007 0.3419 0.3368\nv  -0.2587 0.0024 0.3963\nv  -0.2587 0.0025 0.3965\nv  -0.2590 0.0019 0.3967\nv  -0.2591 0.0021 0.3971\nv  -0.2593 0.0023 0.3976\nv  -0.2594 0.0026 0.3979\nv  -0.2597 0.0029 0.3982\nv  -0.2603 0.0028 0.3987\nv  -0.2601 0.0025 0.3985\nv  -0.2606 0.0033 0.3989\nv  0.2628 0.0029 0.3991\nv  0.2624 0.0023 0.3990\nv  0.2620 0.0018 0.3988\nv  0.2617 0.0014 0.3985\nv  0.2614 0.0010 0.3982\nv  0.2612 0.0007 0.3978\nv  0.2610 0.0005 0.3974\nv  0.2609 0.0003 0.3970\nv  0.4302 0.0029 0.3991\nv  0.4302 0.0032 0.3992\nv  0.4302 0.0023 0.3990\nv  0.4302 0.0017 0.3987\nv  0.4302 0.0012 0.3983\nv  0.4302 0.0016 0.3986\nv  0.4302 0.0008 0.3979\nv  0.4302 0.0011 0.3982\nv  0.4302 0.0007 0.3977\nv  0.4302 0.0004 0.3973\nv  0.4302 0.0005 0.3974\nv  0.4302 0.0002 0.3969\nv  0.4305 0.0027 0.3991\nv  0.4309 0.0031 0.3991\nv  0.4306 0.0020 0.3988\nv  0.4306 0.0013 0.3984\nv  0.4307 0.0009 0.3980\nv  0.4307 0.0006 0.3975\nv  0.4307 0.0003 0.3970\nv  0.4308 0.0002 0.3966\nv  0.4308 0.0001 0.3962\nv  0.4314 0.0003 0.3962\nv  0.4319 0.0005 0.3963\nv  0.4324 0.0009 0.3963\nv  0.4328 0.0013 0.3963\nv  0.4332 0.0018 0.3963\nv  0.4334 0.0023 0.3962\nv  0.4336 0.0029 0.3962\nv  0.4313 0.0004 0.3967\nv  0.4319 0.0006 0.3968\nv  0.4323 0.0010 0.3968\nv  0.4327 0.0014 0.3968\nv  0.4331 0.0019 0.3968\nv  0.4333 0.0024 0.3968\nv  0.4335 0.0030 0.3967\nv  0.4312 0.0035 0.3990\nv  0.4318 0.0033 0.3988\nv  0.4314 0.0029 0.3989\nv  0.4310 0.0024 0.3989\nv  0.4323 0.0034 0.3984\nv  0.4321 0.0029 0.3986\nv  0.4318 0.0025 0.3986\nv  0.4314 0.0021 0.3986\nv  0.4310 0.0017 0.3986\nv  0.4328 0.0033 0.3980\nv  0.4325 0.0028 0.3982\nv  0.4322 0.0024 0.3983\nv  0.4319 0.0019 0.3983\nv  0.4315 0.0015 0.3982\nv  0.4311 0.0012 0.3981\nv  0.4331 0.0031 0.3976\nv  0.4328 0.0026 0.3978\nv  0.4325 0.0021 0.3978\nv  0.4322 0.0016 0.3979\nv  0.4317 0.0012 0.3978\nv  0.4313 0.0008 0.3977\nv  0.4333 0.0031 0.3971\nv  0.4332 0.0026 0.3973\nv  0.4329 0.0021 0.3973\nv  0.4326 0.0016 0.3974\nv  0.4322 0.0012 0.3974\nv  0.4317 0.0008 0.3973\nv  0.4313 0.0005 0.3972\nv  -0.2594 0.0014 0.3968\nv  -0.2595 0.0016 0.3973\nv  -0.2596 0.0018 0.3977\nv  -0.2598 0.0021 0.3981\nv  -0.2598 0.0010 0.3969\nv  -0.2599 0.0012 0.3974\nv  -0.2601 0.0015 0.3979\nv  -0.2604 0.0018 0.3983\nv  -0.2606 0.0022 0.3987\nv  -0.2609 0.0026 0.3989\nv  -0.2603 0.0006 0.3968\nv  -0.2604 0.0008 0.3973\nv  -0.2606 0.0011 0.3978\nv  -0.2608 0.0014 0.3982\nv  -0.2610 0.0017 0.3986\nv  -0.2610 0.0006 0.3973\nv  -0.2608 0.0004 0.3968\nv  -0.0840 0.9700 0.2267\nv  -0.0836 0.9704 0.2267\nv  -0.0835 0.9703 0.2271\nv  -0.0833 0.9701 0.2276\nv  -0.0831 0.9698 0.2280\nv  -0.0830 0.9708 0.2267\nv  -0.0829 0.9706 0.2272\nv  -0.0828 0.9704 0.2277\nv  -0.0826 0.9701 0.2281\nv  -0.0823 0.9697 0.2284\nv  -0.0825 0.9710 0.2266\nv  -0.0824 0.9709 0.2271\nv  -0.0823 0.9707 0.2275\nv  0.2619 0.9708 0.2265\nv  0.2615 0.9709 0.2267\nv  0.2610 0.9711 0.2268\nv  0.2628 0.9699 0.2266\nv  0.2625 0.9702 0.2268\nv  0.2621 0.9704 0.2270\nv  0.2616 0.9706 0.2272\nv  0.2611 0.9708 0.2273\nv  0.2628 0.9696 0.2271\nv  0.2625 0.9699 0.2273\nv  0.2621 0.9701 0.2275\nv  0.2616 0.9703 0.2277\nv  0.2611 0.9704 0.2278\nv  0.2622 0.9696 0.2279\nv  0.2617 0.9698 0.2281\nv  0.2612 0.9700 0.2282\nv  0.2611 0.9695 0.2286\n# 5007 vertices\n\nvn 0.0000 -1.0000 -0.0000\nvn 0.0000 -0.1736 -0.9848\nvn -0.9848 -0.1736 -0.0000\nvn 0.0829 -0.2019 -0.9759\nvn 0.1353 -0.2190 -0.9663\nvn 0.1646 -0.2283 -0.9596\nvn 0.2444 -0.2529 -0.9361\nvn 0.2662 -0.2594 -0.9284\nvn 0.3217 -0.2754 -0.9059\nvn 0.3824 -0.2920 -0.8766\nvn 0.4671 -0.3137 -0.8267\nvn 0.4966 -0.3207 -0.8066\nvn 0.5973 -0.3425 -0.7252\nvn 0.6062 -0.3443 -0.7169\nvn 0.7095 -0.3616 -0.6048\nvn 0.7969 -0.3705 -0.4771\nvn 0.8017 -0.3708 -0.4689\nvn 0.7078 -0.3614 -0.6070\nvn 0.8685 -0.3702 -0.3295\nvn 0.8720 -0.3699 -0.3206\nvn 0.9178 -0.3595 -0.1684\nvn 0.9190 -0.3590 -0.1632\nvn 0.9411 -0.3382 -0.0000\nvn 0.0000 -0.9974 0.0721\nvn 0.0000 -0.9983 0.0578\nvn 0.0000 -0.6487 0.7610\nvn -1.0000 0.0000 -0.0000\nvn -0.1269 -0.6563 0.7437\nvn -0.1516 -0.6566 0.7389\nvn -0.2514 -0.6532 0.7143\nvn -0.2977 -0.6492 0.7000\nvn -0.3731 -0.6391 0.6726\nvn -0.4338 -0.6276 0.6465\nvn -0.4915 -0.6135 0.6181\nvn -0.5564 -0.5937 0.5813\nvn -0.6053 -0.5755 0.5499\nvn -0.6635 -0.5497 0.5076\nvn -0.7121 -0.5239 0.4674\nvn -0.7543 -0.4979 0.4280\nvn -0.8085 -0.4578 0.3698\nvn -0.8361 -0.4338 0.3359\nvn -0.8897 -0.3767 0.2579\nvn -0.9044 -0.3577 0.2325\nvn -0.9230 -0.3307 0.1970\nvn -0.9503 -0.2812 0.1333\nvn -0.9553 -0.2704 0.1196\nvn -0.9711 -0.2288 0.0675\nvn 0.0000 0.6487 -0.7610\nvn 0.0000 -0.9933 0.1155\nvn 0.0000 -0.9896 0.1439\nvn -0.9810 -0.1516 0.1212\nvn 0.0000 -0.9697 0.2443\nvn 0.0000 -0.9644 0.2645\nvn 0.0000 -0.9940 0.1096\nvn 0.0000 -0.9751 0.2216\nvn 0.0000 -0.9851 0.1721\nvn 0.9848 0.1736 -0.0000\nvn 0.9745 0.1411 -0.1743\nvn 1.0000 0.0032 -0.0000\nvn 0.9754 0.1424 -0.1680\nvn 0.9741 0.1803 -0.1363\nvn 0.9848 0.1737 -0.0000\nvn 0.9741 0.1630 -0.1566\nvn 0.9746 0.1927 -0.1144\nvn 0.9754 0.2004 -0.0922\nvn 0.9765 0.2036 -0.0707\nvn 0.9779 0.2026 -0.0508\nvn 0.9796 0.1983 -0.0332\nvn 0.9814 0.1913 -0.0187\nvn 0.9831 0.1827 -0.0075\nvn 0.9848 0.1734 0.0002\nvn 0.9440 0.3191 -0.0841\nvn 0.9423 0.3163 -0.1092\nvn 0.9454 0.3202 -0.0609\nvn 0.9465 0.3203 -0.0395\nvn 0.9472 0.3202 -0.0194\nvn 0.9597 0.2812 -0.0000\nvn 0.9474 0.3201 -0.0000\nvn 0.9595 0.2815 0.0116\nvn 0.9596 0.2812 0.0058\nvn 0.9593 0.2818 0.0175\nvn 0.9590 0.2823 0.0236\nvn 0.9587 0.2828 0.0299\nvn 0.9583 0.2835 0.0365\nvn 0.9578 0.2841 0.0433\nvn 0.9573 0.2847 0.0505\nvn 0.9567 0.2852 0.0581\nvn 0.9561 0.2856 0.0660\nvn 0.9554 0.2858 0.0743\nvn 0.9547 0.2857 0.0830\nvn 0.9540 0.2853 0.0922\nvn 0.9533 0.2845 0.1017\nvn 0.9525 0.2833 0.1116\nvn 0.9841 0.1778 0.0047\nvn 0.9518 0.2815 0.1219\nvn 0.9833 0.1817 0.0101\nvn 0.9826 0.1852 0.0160\nvn 0.9819 0.1883 0.0226\nvn 0.9812 0.1909 0.0297\nvn 0.9805 0.1928 0.0373\nvn 0.9799 0.1942 0.0453\nvn 0.9794 0.1948 0.0538\nvn 0.9789 0.1947 0.0625\nvn 0.9784 0.1938 0.0714\nvn 0.9781 0.1921 0.0806\nvn 0.9777 0.1896 0.0898\nvn 0.9775 0.1862 0.0990\nvn 0.9774 0.1819 0.1081\nvn 0.9773 0.1768 0.1171\nvn 0.9772 0.1708 0.1258\nvn 0.9773 0.1640 0.1342\nvn 0.9774 0.1563 0.1422\nvn 0.9776 0.1479 0.1497\nvn 0.9855 0.1660 0.0358\nvn 0.9779 0.1386 0.1566\nvn 0.9862 0.1571 0.0514\nvn 0.9858 0.1620 0.0438\nvn 0.9867 0.1515 0.0584\nvn 0.9873 0.1451 0.0648\nvn 0.9879 0.1382 0.0705\nvn 0.9885 0.1307 0.0755\nvn 0.9892 0.1227 0.0797\nvn 0.9900 0.1143 0.0830\nvn 0.9907 0.1056 0.0854\nvn 0.9915 0.0967 0.0869\nvn 0.9923 0.0877 0.0875\nvn 0.9931 0.0787 0.0871\nvn 0.9939 0.0697 0.0858\nvn 0.9946 0.0609 0.0835\nvn 0.9954 0.0523 0.0803\nvn 0.9961 0.0442 0.0762\nvn 0.9968 0.0365 0.0713\nvn 0.9974 0.0293 0.0655\nvn 0.9980 0.0228 0.0591\nvn 0.9985 0.0169 0.0519\nvn 0.9990 0.0119 0.0442\nvn 0.9993 0.0077 0.0360\nvn 0.9996 0.0044 0.0274\nvn 0.9998 0.0019 0.0184\nvn 1.0000 0.0005 0.0093\nvn 1.0000 0.0000 -0.0000\nvn 0.9411 0.3382 -0.0000\nvn 0.9655 0.1997 0.1669\nvn 0.9623 0.2721 0.0007\nvn 0.9624 0.2718 -0.0000\nvn 0.9411 0.3381 -0.0044\nvn 0.9411 0.3380 -0.0087\nvn 0.9412 0.3377 -0.0131\nvn 0.9412 0.3373 -0.0174\nvn 0.9413 0.3368 -0.0217\nvn 0.9414 0.3362 -0.0260\nvn 0.9416 0.3355 -0.0303\nvn 0.9417 0.3347 -0.0346\nvn 0.9418 0.3338 -0.0389\nvn 0.9420 0.3327 -0.0431\nvn 0.9422 0.3316 -0.0473\nvn 0.9425 0.3303 -0.0514\nvn 0.9427 0.3290 -0.0556\nvn 0.9430 0.3275 -0.0597\nvn 0.9432 0.3260 -0.0637\nvn 0.9435 0.3243 -0.0677\nvn 0.9438 0.3225 -0.0717\nvn 0.9442 0.3207 -0.0756\nvn 0.9445 0.3187 -0.0795\nvn 0.9449 0.3166 -0.0833\nvn 0.9453 0.3145 -0.0871\nvn 0.9457 0.3122 -0.0908\nvn 0.9461 0.3099 -0.0945\nvn 0.9465 0.3075 -0.0981\nvn 0.9469 0.3049 -0.1016\nvn 0.9474 0.3023 -0.1050\nvn 0.9479 0.2996 -0.1084\nvn 0.9484 0.2968 -0.1117\nvn 0.9489 0.2940 -0.1150\nvn 0.9494 0.2910 -0.1181\nvn 0.9499 0.2880 -0.1212\nvn 0.9505 0.2849 -0.1242\nvn 0.9510 0.2817 -0.1272\nvn 0.9516 0.2785 -0.1300\nvn 0.9522 0.2751 -0.1328\nvn 0.9528 0.2717 -0.1354\nvn 0.9534 0.2683 -0.1380\nvn 0.9540 0.2648 -0.1405\nvn 0.9547 0.2612 -0.1429\nvn 0.9553 0.2575 -0.1452\nvn 0.9560 0.2538 -0.1474\nvn 0.9566 0.2501 -0.1495\nvn 0.9573 0.2463 -0.1515\nvn 0.9580 0.2424 -0.1534\nvn 0.9587 0.2385 -0.1552\nvn 0.9594 0.2345 -0.1569\nvn 0.9601 0.2305 -0.1585\nvn 0.9608 0.2265 -0.1600\nvn 0.9615 0.2224 -0.1614\nvn 0.9622 0.2183 -0.1627\nvn 0.9629 0.2142 -0.1639\nvn 0.9637 0.2101 -0.1650\nvn 0.9644 0.2059 -0.1659\nvn 0.9643 0.2022 -0.1707\nvn 0.1535 -0.9502 0.2714\nvn 0.3009 -0.9044 0.3025\nvn 0.1517 -0.8988 0.4114\nvn 0.9651 0.1979 -0.1715\nvn 0.9659 0.1935 -0.1721\nvn 0.9667 0.1891 -0.1727\nvn 0.9674 0.1847 -0.1731\nvn 0.9682 0.1803 -0.1734\nvn 0.9690 0.1759 -0.1736\nvn 0.9698 0.1715 -0.1736\nvn 0.9705 0.1671 -0.1736\nvn 0.9713 0.1627 -0.1734\nvn 0.9721 0.1583 -0.1732\nvn 0.9729 0.1539 -0.1728\nvn 0.9736 0.1495 -0.1723\nvn 0.9744 0.1451 -0.1716\nvn 0.9752 0.1408 -0.1709\nvn 0.9759 0.1364 -0.1701\nvn 0.9767 0.1321 -0.1691\nvn 0.9775 0.1278 -0.1680\nvn 0.9782 0.1236 -0.1668\nvn 0.9790 0.1194 -0.1655\nvn 0.9797 0.1152 -0.1641\nvn 0.9804 0.1110 -0.1626\nvn 0.9811 0.1069 -0.1610\nvn 0.9819 0.1028 -0.1593\nvn 0.9826 0.0988 -0.1574\nvn 0.9833 0.0948 -0.1555\nvn 0.9840 0.0909 -0.1534\nvn 0.9847 0.0870 -0.1513\nvn 0.9853 0.0832 -0.1490\nvn 0.9860 0.0795 -0.1467\nvn 0.9866 0.0758 -0.1442\nvn 0.9873 0.0721 -0.1417\nvn 0.9879 0.0686 -0.1391\nvn 0.9885 0.0651 -0.1363\nvn 0.9891 0.0616 -0.1335\nvn 0.9897 0.0583 -0.1306\nvn 0.9903 0.0550 -0.1276\nvn 0.9909 0.0518 -0.1245\nvn 0.9914 0.0487 -0.1213\nvn 0.9920 0.0456 -0.1181\nvn 0.9925 0.0427 -0.1148\nvn 0.9930 0.0398 -0.1114\nvn 0.9935 0.0370 -0.1079\nvn 0.9939 0.0343 -0.1044\nvn 0.9944 0.0317 -0.1007\nvn 0.9948 0.0292 -0.0971\nvn 0.9953 0.0268 -0.0933\nvn 0.9957 0.0245 -0.0895\nvn 0.9961 0.0222 -0.0856\nvn 0.9965 0.0201 -0.0817\nvn 0.9968 0.0181 -0.0777\nvn 0.9971 0.0162 -0.0737\nvn 0.9975 0.0144 -0.0696\nvn 0.9978 0.0126 -0.0655\nvn 0.9981 0.0110 -0.0613\nvn 0.9983 0.0095 -0.0571\nvn 0.9986 0.0081 -0.0529\nvn 0.9988 0.0068 -0.0486\nvn 0.9990 0.0057 -0.0443\nvn 0.9992 0.0046 -0.0399\nvn 0.9994 0.0036 -0.0356\nvn 0.9995 0.0028 -0.0312\nvn 0.9996 0.0020 -0.0268\nvn 0.9998 0.0014 -0.0223\nvn 0.9998 0.0009 -0.0179\nvn 0.9999 0.0005 -0.0134\nvn 1.0000 0.0002 -0.0090\nvn 1.0000 0.0001 -0.0045\nvn 0.9964 0.0846 -0.0000\nvn 0.9708 0.2298 -0.0687\nvn 0.9899 0.0686 0.1242\nvn 0.9901 0.0723 0.1200\nvn 0.9896 0.0632 0.1293\nvn 0.9901 0.0724 0.1200\nvn 0.9999 0.0116 -0.0000\nvn 0.9759 0.1907 0.1059\nvn 0.9917 0.0153 0.1275\nvn 0.9765 0.1873 0.1067\nvn -0.9411 0.3382 -0.0000\nvn 0.0000 -0.2110 0.9775\nvn 0.0000 -0.2385 0.9711\nvn 0.0000 -0.1562 0.9877\nvn 0.0000 -0.1556 0.9878\nvn 0.0000 -0.1009 0.9949\nvn 0.0000 -0.1833 0.9831\nvn 0.0000 -0.0999 0.9950\nvn 0.0000 -0.0452 0.9990\nvn 0.0000 -0.1278 0.9918\nvn 0.0000 -0.0439 0.9990\nvn 0.0000 0.0107 0.9999\nvn 0.0000 -0.0719 0.9974\nvn 0.0000 0.0124 0.9999\nvn 0.0000 0.0665 0.9978\nvn 0.0000 -0.0157 0.9999\nvn 0.0000 0.0685 0.9977\nvn 0.0000 0.1221 0.9925\nvn 0.0000 0.0405 0.9992\nvn 0.0000 0.1244 0.9922\nvn 0.0000 0.1772 0.9842\nvn 0.0000 0.0965 0.9953\nvn 0.0000 0.1799 0.9837\nvn 0.0000 0.2318 0.9728\nvn 0.0000 0.1522 0.9883\nvn 0.0000 0.2347 0.9721\nvn 0.0000 0.2855 0.9584\nvn 0.0000 0.2074 0.9783\nvn 0.0000 0.2888 0.9574\nvn 0.0000 0.3382 0.9411\nvn 0.0000 0.2619 0.9651\nvn 0.0000 0.3420 0.9397\nvn 0.0000 0.3897 0.9209\nvn 0.0000 0.3155 0.9489\nvn 0.0000 0.3940 0.9191\nvn 0.0000 0.4399 0.8980\nvn 0.0000 0.3681 0.9298\nvn 0.0000 0.4448 0.8956\nvn 0.0000 0.4886 0.8725\nvn 0.0000 0.4196 0.9077\nvn 0.0000 0.4941 0.8694\nvn 0.0000 0.5357 0.8444\nvn 0.0000 0.4696 0.8829\nvn 0.0000 0.5418 0.8405\nvn 0.0000 0.5810 0.8139\nvn 0.0000 0.5182 0.8553\nvn 0.0000 0.5878 0.8090\nvn 0.0000 0.6244 0.7811\nvn 0.0000 0.5651 0.8250\nvn 0.0000 0.6320 0.7750\nvn 0.0000 0.6658 0.7461\nvn 0.0000 0.6102 0.7923\nvn 0.0000 0.6741 0.7386\nvn 0.0000 0.7051 0.7091\nvn 0.0000 0.6533 0.7571\nvn 0.0000 0.7141 0.7000\nvn 0.0000 0.7422 0.6702\nvn 0.0000 0.6944 0.7196\nvn 0.0000 0.7518 0.6593\nvn 0.0000 0.7770 0.6295\nvn 0.0000 0.7333 0.6800\nvn 0.0000 0.7873 0.6166\nvn 0.0000 0.8094 0.5872\nvn 0.0000 0.7698 0.6382\nvn 0.0000 0.8202 0.5721\nvn 0.0000 0.8395 0.5434\nvn 0.0000 0.8040 0.5946\nvn 0.0000 0.8506 0.5258\nvn 0.0000 0.8670 0.4982\nvn 0.0000 0.8357 0.5491\nvn 0.0000 0.8784 0.4780\nvn 0.0000 0.8921 0.4518\nvn 0.0000 0.8648 0.5021\nvn 0.0000 0.9034 0.4288\nvn 0.0000 0.9146 0.4044\nvn 0.0000 0.8912 0.4536\nvn 0.0000 0.9149 0.4037\nvn 0.0000 0.9345 0.3559\nvn 0.0000 0.9358 0.3525\nvn 0.0000 0.9518 0.3066\nvn 0.0000 0.9257 0.3783\nvn 0.0000 0.9538 0.3003\nvn 0.0000 0.9665 0.2566\nvn 0.0000 0.9452 0.3266\nvn 0.0000 0.9689 0.2473\nvn 0.0000 0.9786 0.2060\nvn 0.0000 0.9618 0.2739\nvn 0.0000 0.9811 0.1933\nvn 0.0000 0.9879 0.1549\nvn 0.0000 0.9754 0.2204\nvn 0.0000 0.9904 0.1385\nvn 0.0000 0.9946 0.1035\nvn 0.0000 0.9861 0.1660\nvn 0.0000 0.9965 0.0832\nvn 0.0000 0.9987 0.0518\nvn 0.0000 0.9938 0.1109\nvn 0.0000 0.9996 0.0278\nvn 0.0000 1.0000 -0.0000\nvn 0.0000 0.9985 0.0555\nvn 0.0000 -0.9986 0.0526\nvn 0.0000 -0.9985 0.0543\nvn 0.0000 -0.9945 0.1050\nvn 0.0000 -0.9942 0.1079\nvn 0.0000 -0.9876 0.1572\nvn 0.0000 -0.9870 0.1610\nvn 0.0000 -0.9779 0.2091\nvn 0.0000 -0.9769 0.2137\nvn 0.0000 -0.9655 0.2604\nvn 0.0000 -0.9640 0.2659\nvn 0.0000 -0.9503 0.3112\nvn 0.0000 -0.9483 0.3173\nvn 0.0000 -0.9325 0.3611\nvn 0.0000 -0.9299 0.3677\nvn 0.0000 -0.9120 0.4102\nvn 0.0000 -0.9088 0.4172\nvn 0.0000 -0.8888 0.4583\nvn 0.0000 -0.8851 0.4655\nvn 0.0000 -0.8630 0.5052\nvn 0.0000 -0.8587 0.5125\nvn 0.0000 -0.8346 0.5509\nvn 0.0000 -0.8298 0.5580\nvn 0.0000 -0.8036 0.5951\nvn 0.0000 -0.7985 0.6020\nvn 0.0000 -0.7702 0.6378\nvn 0.0000 -0.7648 0.6442\nvn 0.0000 -0.7344 0.6787\nvn 0.0000 -0.7289 0.6847\nvn 0.0000 -0.6962 0.7178\nvn 0.0000 -0.6907 0.7231\nvn 0.0000 -0.6763 0.7366\nvn 0.0000 -0.6558 0.7549\nvn 0.0000 -0.6505 0.7595\nvn 0.0000 -0.6348 0.7727\nvn 0.0000 -0.6133 0.7899\nvn 0.0000 -0.6084 0.7936\nvn 0.0000 -0.5912 0.8065\nvn 0.0000 -0.5687 0.8226\nvn 0.0000 -0.5644 0.8255\nvn 0.0000 -0.5457 0.8380\nvn 0.0000 -0.5222 0.8528\nvn 0.0000 -0.5187 0.8550\nvn 0.0000 -0.4982 0.8670\nvn 0.0000 -0.4739 0.8806\nvn 0.0000 -0.4715 0.8819\nvn 0.0000 -0.4491 0.8935\nvn 0.0000 -0.4473 0.8944\nvn 0.0000 -0.4239 0.9057\nvn 0.0000 -0.4226 0.9063\nvn 0.0000 -0.3984 0.9172\nvn 0.0000 -0.3975 0.9176\nvn 0.0000 -0.3725 0.9280\nvn 0.0000 -0.3719 0.9283\nvn 0.0000 -0.3463 0.9381\nvn 0.0000 -0.3459 0.9383\nvn 0.0000 -0.3197 0.9475\nvn 0.0000 -0.3195 0.9476\nvn 0.0000 -0.2929 0.9561\nvn 0.0000 -0.2927 0.9562\nvn 0.0000 -0.2658 0.9640\nvn 0.0000 -0.2657 0.9641\nvn -0.9854 0.1700 -0.0000\nvn -0.9854 0.1702 -0.0092\nvn -0.9854 0.1701 -0.0046\nvn -0.9853 0.1705 -0.0138\nvn -0.9851 0.1709 -0.0183\nvn -0.9849 0.1714 -0.0229\nvn -0.9847 0.1721 -0.0274\nvn -0.9844 0.1728 -0.0319\nvn -0.9841 0.1737 -0.0364\nvn -0.9838 0.1746 -0.0409\nvn -0.9834 0.1757 -0.0453\nvn -0.9830 0.1769 -0.0497\nvn -0.9825 0.1781 -0.0540\nvn -0.9820 0.1795 -0.0583\nvn -0.9815 0.1810 -0.0625\nvn -0.9809 0.1826 -0.0667\nvn -0.9803 0.1843 -0.0709\nvn -0.9797 0.1861 -0.0749\nvn -0.9790 0.1879 -0.0789\nvn -0.9783 0.1899 -0.0829\nvn -0.9768 0.1941 -0.0906\nvn -0.9776 0.1919 -0.0868\nvn -0.9760 0.1963 -0.0943\nvn -0.9752 0.1986 -0.0980\nvn -0.9743 0.2010 -0.1016\nvn -0.9734 0.2035 -0.1051\nvn -0.9725 0.2060 -0.1086\nvn -0.9716 0.2086 -0.1119\nvn -0.9706 0.2113 -0.1152\nvn -0.9696 0.2140 -0.1184\nvn -0.9686 0.2168 -0.1215\nvn -0.9676 0.2197 -0.1246\nvn -0.9665 0.2227 -0.1275\nvn -0.9654 0.2256 -0.1304\nvn -0.9644 0.2287 -0.1331\nvn -0.9632 0.2318 -0.1358\nvn -0.9621 0.2349 -0.1384\nvn -0.9610 0.2381 -0.1409\nvn -0.9598 0.2414 -0.1433\nvn -0.9586 0.2447 -0.1456\nvn -0.9574 0.2480 -0.1478\nvn -0.9562 0.2514 -0.1500\nvn -0.9550 0.2548 -0.1520\nvn -0.9538 0.2582 -0.1539\nvn -0.9525 0.2617 -0.1558\nvn -0.9512 0.2652 -0.1576\nvn -0.9500 0.2687 -0.1592\nvn -0.9487 0.2723 -0.1608\nvn -0.9474 0.2759 -0.1623\nvn -0.9461 0.2795 -0.1637\nvn -0.9448 0.2831 -0.1650\nvn -0.9435 0.2868 -0.1662\nvn -0.9421 0.2905 -0.1673\nvn -0.9408 0.2942 -0.1683\nvn -0.9395 0.2979 -0.1692\nvn -0.9382 0.3016 -0.1700\nvn -0.9368 0.3053 -0.1708\nvn -0.9355 0.3091 -0.1714\nvn -0.9341 0.3128 -0.1719\nvn -0.9328 0.3166 -0.1724\nvn -0.9314 0.3204 -0.1728\nvn -0.9301 0.3241 -0.1730\nvn -0.9287 0.3279 -0.1732\nvn -0.9273 0.3317 -0.1733\nvn -0.9260 0.3355 -0.1733\nvn -0.9246 0.3392 -0.1732\nvn -0.9233 0.3430 -0.1730\nvn -0.9219 0.3468 -0.1727\nvn -0.9205 0.3506 -0.1723\nvn -0.9192 0.3543 -0.1718\nvn -0.9179 0.3581 -0.1712\nvn -0.9165 0.3618 -0.1706\nvn -0.9169 0.3646 -0.1625\nvn -0.9156 0.3681 -0.1617\nvn -0.9143 0.3717 -0.1608\nvn -0.9131 0.3752 -0.1598\nvn -0.9118 0.3787 -0.1587\nvn -0.9106 0.3821 -0.1576\nvn -0.9093 0.3856 -0.1563\nvn -0.9081 0.3890 -0.1550\nvn -0.9068 0.3925 -0.1536\nvn -0.9057 0.3958 -0.1520\nvn -0.9044 0.3992 -0.1504\nvn -0.9033 0.4025 -0.1487\nvn -0.9021 0.4058 -0.1469\nvn -0.9009 0.4091 -0.1451\nvn -0.8997 0.4124 -0.1431\nvn -0.8985 0.4156 -0.1411\nvn -0.8974 0.4187 -0.1389\nvn -0.8963 0.4218 -0.1367\nvn -0.8952 0.4249 -0.1344\nvn -0.8941 0.4280 -0.1320\nvn -0.8930 0.4310 -0.1295\nvn -0.8920 0.4339 -0.1270\nvn -0.8909 0.4368 -0.1243\nvn -0.8899 0.4396 -0.1216\nvn -0.8889 0.4424 -0.1188\nvn -0.8879 0.4451 -0.1159\nvn -0.8870 0.4478 -0.1129\nvn -0.8860 0.4504 -0.1099\nvn -0.8851 0.4530 -0.1067\nvn -0.8842 0.4554 -0.1035\nvn -0.8834 0.4579 -0.1002\nvn -0.8825 0.4602 -0.0969\nvn -0.8817 0.4625 -0.0934\nvn -0.8809 0.4646 -0.0899\nvn -0.8802 0.4668 -0.0863\nvn -0.8794 0.4688 -0.0827\nvn -0.8787 0.4707 -0.0790\nvn -0.8781 0.4726 -0.0752\nvn -0.8774 0.4744 -0.0714\nvn -0.8762 0.4777 -0.0636\nvn -0.8768 0.4761 -0.0675\nvn -0.8757 0.4792 -0.0596\nvn -0.8752 0.4806 -0.0555\nvn -0.8747 0.4819 -0.0515\nvn -0.8743 0.4831 -0.0473\nvn -0.8739 0.4842 -0.0431\nvn -0.8735 0.4852 -0.0389\nvn -0.8732 0.4861 -0.0347\nvn -0.8729 0.4869 -0.0304\nvn -0.8727 0.4876 -0.0261\nvn -0.8724 0.4882 -0.0218\nvn -0.8723 0.4887 -0.0175\nvn -0.8721 0.4891 -0.0131\nvn -0.8720 0.4894 -0.0088\nvn -0.8720 0.4895 -0.0044\nvn -0.8678 0.4970 -0.0000\nvn -0.8720 0.4896 -0.0000\nvn -0.9323 0.3506 0.0883\nvn -0.9331 0.3500 0.0828\nvn -0.9331 0.3499 0.0827\nvn 0.0000 -0.9848 0.1736\nvn 0.0000 -0.9729 0.2312\nvn 0.0000 -0.9932 0.1163\nvn 0.0000 -0.9659 0.2588\nvn 0.0000 -0.9483 0.3174\nvn 0.0000 -0.9962 0.0871\nvn -0.9856 0.1689 -0.0000\nvn 0.0000 0.9997 -0.0257\nvn 0.0000 0.9997 -0.0243\nvn -0.0586 0.9983 -0.0000\nvn 0.0000 0.9988 -0.0485\nvn -0.0587 0.9980 -0.0243\nvn 0.0000 0.9987 -0.0513\nvn 0.0000 0.9974 -0.0727\nvn -0.0590 0.9971 -0.0485\nvn 0.0000 0.9970 -0.0768\nvn 0.0000 0.9953 -0.0968\nvn -0.0595 0.9956 -0.0727\nvn 0.0000 0.9948 -0.1023\nvn 0.0000 0.9927 -0.1209\nvn -0.0603 0.9935 -0.0969\nvn 0.0000 0.9918 -0.1276\nvn 0.0000 0.9894 -0.1449\nvn -0.0613 0.9908 -0.1210\nvn 0.0000 0.9883 -0.1528\nvn 0.0000 0.9856 -0.1689\nvn -0.0624 0.9875 -0.1449\nvn 0.0000 0.9841 -0.1778\nvn 0.0000 0.9812 -0.1928\nvn -0.0638 0.9836 -0.1687\nvn 0.0000 0.9793 -0.2026\nvn 0.0000 0.9762 -0.2167\nvn -0.0654 0.9791 -0.1924\nvn 0.0000 0.9738 -0.2273\nvn 0.0000 0.9707 -0.2404\nvn -0.0673 0.9741 -0.2160\nvn 0.0000 0.9678 -0.2519\nvn 0.0000 0.9645 -0.2640\nvn -0.0693 0.9685 -0.2393\nvn 0.0000 0.9611 -0.2763\nvn 0.0000 0.9578 -0.2874\nvn -0.0715 0.9623 -0.2624\nvn 0.0000 0.9538 -0.3006\nvn 0.0000 0.9505 -0.3107\nvn -0.0739 0.9556 -0.2853\nvn 0.0000 0.9458 -0.3246\nvn 0.0000 0.9426 -0.3339\nvn -0.0765 0.9483 -0.3080\nvn 0.0000 0.9373 -0.3485\nvn 0.0000 0.9341 -0.3569\nvn -0.0793 0.9405 -0.3304\nvn 0.0000 0.9282 -0.3721\nvn 0.0000 0.9251 -0.3797\nvn -0.0823 0.9322 -0.3526\nvn 0.0000 0.9184 -0.3956\nvn 0.0000 0.9155 -0.4024\nvn -0.0855 0.9233 -0.3744\nvn 0.0000 0.9081 -0.4188\nvn 0.0000 0.9053 -0.4248\nvn -0.0889 0.9139 -0.3960\nvn 0.0000 0.8972 -0.4417\nvn 0.0000 0.8945 -0.4470\nvn -0.0924 0.9041 -0.4172\nvn 0.0000 0.8856 -0.4644\nvn 0.0000 0.8832 -0.4690\nvn -0.0961 0.8938 -0.4381\nvn 0.0000 0.8736 -0.4867\nvn 0.0000 0.8713 -0.4907\nvn -0.1000 0.8830 -0.4587\nvn 0.0000 0.8609 -0.5088\nvn 0.0000 0.8589 -0.5122\nvn -0.1041 0.8717 -0.4788\nvn 0.0000 0.8476 -0.5306\nvn 0.0000 0.8459 -0.5333\nvn -0.1083 0.8600 -0.4987\nvn 0.0000 0.8338 -0.5520\nvn 0.0000 0.8324 -0.5542\nvn -0.1126 0.8479 -0.5181\nvn 0.0000 0.8323 -0.5543\nvn 0.0000 0.8195 -0.5731\nvn 0.0000 0.8183 -0.5748\nvn -0.1171 0.8353 -0.5372\nvn 0.0000 0.8046 -0.5938\nvn 0.0000 0.8036 -0.5951\nvn -0.1218 0.8223 -0.5558\nvn 0.0000 0.7892 -0.6142\nvn 0.0000 0.7885 -0.6151\nvn -0.1266 0.8090 -0.5740\nvn 0.0000 0.7732 -0.6341\nvn 0.0000 0.7728 -0.6347\nvn -0.1315 0.7953 -0.5918\nvn 0.0000 0.7568 -0.6537\nvn 0.0000 0.7566 -0.6539\nvn -0.1366 0.7811 -0.6092\nvn 0.0000 0.7398 -0.6729\nvn 0.0000 0.7398 -0.6728\nvn -0.1418 0.7667 -0.6262\nvn 0.0000 0.7313 -0.6821\nvn -0.1471 0.7519 -0.6427\nvn 0.0000 0.7223 -0.6916\nvn 0.0000 0.7226 -0.6913\nvn 0.0000 0.7138 -0.7004\nvn -0.1526 0.7367 -0.6587\nvn 0.0000 0.7043 -0.7099\nvn 0.0000 0.7049 -0.7094\nvn 0.0000 0.6958 -0.7182\nvn -0.1581 0.7213 -0.6744\nvn 0.0000 0.6859 -0.7277\nvn 0.0000 0.6938 -0.7202\nvn 0.0000 0.6866 -0.7270\nvn -0.0059 0.6773 -0.7357\nvn -0.1638 0.7055 -0.6895\nvn 0.0000 0.6773 -0.7357\nvn 0.0000 0.6670 -0.7451\nvn 0.0000 0.6679 -0.7442\nvn 0.0000 0.6584 -0.7527\nvn 0.0000 0.6476 -0.7620\nvn -0.0119 0.6606 -0.7507\nvn 0.0000 0.6390 -0.7692\nvn -0.0181 0.6435 -0.7652\nvn 0.0000 0.6278 -0.7784\nvn 0.0000 0.6291 -0.7773\nvn 0.0000 0.6191 -0.7853\nvn -0.0243 0.6262 -0.7793\nvn 0.0000 0.6076 -0.7943\nvn 0.0000 0.6090 -0.7932\nvn 0.0000 0.5988 -0.8009\nvn -0.0306 0.6087 -0.7928\nvn 0.0000 0.5869 -0.8097\nvn 0.0000 0.5885 -0.8085\nvn 0.0000 0.5780 -0.8160\nvn -0.0370 0.5909 -0.8059\nvn 0.0000 0.5658 -0.8245\nvn 0.0000 0.5675 -0.8234\nvn 0.0000 0.5569 -0.8306\nvn -0.0435 0.5729 -0.8185\nvn 0.0000 0.5444 -0.8388\nvn 0.0000 0.5461 -0.8377\nvn 0.0000 0.5353 -0.8447\nvn -0.0500 0.5546 -0.8306\nvn 0.0000 0.5226 -0.8526\nvn 0.0000 0.5243 -0.8515\nvn 0.0000 0.5133 -0.8582\nvn -0.0566 0.5362 -0.8422\nvn 0.0000 0.5004 -0.8658\nvn 0.0000 0.5022 -0.8648\nvn 0.0000 0.4909 -0.8712\nvn -0.0633 0.5175 -0.8533\nvn 0.0000 0.4778 -0.8785\nvn 0.0000 0.4796 -0.8775\nvn -0.0701 0.4987 -0.8640\nvn 0.0000 0.4682 -0.8836\nvn 0.0000 0.4550 -0.8905\nvn 0.0000 0.4567 -0.8896\nvn -0.0770 0.4796 -0.8741\nvn 0.0000 0.4451 -0.8955\nvn 0.0000 0.4318 -0.9020\nvn 0.0000 0.4335 -0.9012\nvn -0.0838 0.4605 -0.8837\nvn 0.0000 0.4217 -0.9067\nvn 0.0000 0.4083 -0.9129\nvn 0.0000 0.4099 -0.9121\nvn -0.0908 0.4411 -0.8928\nvn 0.0000 0.3980 -0.9174\nvn 0.0000 0.3845 -0.9231\nvn 0.0000 0.3860 -0.9225\nvn -0.0978 0.4216 -0.9015\nvn 0.0000 0.3739 -0.9275\nvn 0.0000 0.3604 -0.9328\nvn 0.0000 0.3618 -0.9323\nvn -0.1049 0.4020 -0.9096\nvn 0.0000 0.3496 -0.9369\nvn 0.0000 0.3361 -0.9418\nvn 0.0000 0.3373 -0.9414\nvn -0.1120 0.3822 -0.9173\nvn 0.0000 0.3249 -0.9457\nvn -0.1191 0.3623 -0.9244\nvn 0.0000 0.3116 -0.9502\nvn 0.0000 0.3125 -0.9499\nvn 0.0000 0.3000 -0.9539\nvn -0.1263 0.3424 -0.9310\nvn 0.0000 0.2868 -0.9580\nvn 0.0000 0.2874 -0.9578\nvn 0.0000 0.2748 -0.9615\nvn -0.1335 0.3223 -0.9372\nvn 0.0000 0.2618 -0.9651\nvn 0.0000 0.2622 -0.9650\nvn 0.0000 0.2494 -0.9684\nvn -0.1408 0.3021 -0.9428\nvn 0.0000 0.2365 -0.9716\nvn 0.0000 0.2367 -0.9716\nvn 0.0000 0.2238 -0.9746\nvn -0.1481 0.2818 -0.9480\nvn 0.0000 0.2110 -0.9775\nvn -0.0987 0.2437 -0.9648\nvn -0.1554 0.2614 -0.9526\nvn 0.1660 0.2359 -0.9575\nvn 0.1575 0.2841 -0.9458\nvn 0.1618 0.2601 -0.9519\nvn 0.1533 0.3080 -0.9390\nvn 0.1491 0.3316 -0.9316\nvn 0.1450 0.3551 -0.9235\nvn 0.1409 0.3784 -0.9149\nvn 0.1368 0.4014 -0.9056\nvn 0.1328 0.4242 -0.8958\nvn 0.1288 0.4467 -0.8853\nvn 0.1249 0.4690 -0.8743\nvn 0.1210 0.4910 -0.8627\nvn 0.1172 0.5127 -0.8505\nvn 0.1135 0.5340 -0.8378\nvn 0.1097 0.5550 -0.8246\nvn 0.1061 0.5757 -0.8107\nvn 0.1025 0.5961 -0.7964\nvn 0.0990 0.6160 -0.7815\nvn 0.0955 0.6356 -0.7661\nvn 0.0922 0.6548 -0.7502\nvn 0.0888 0.6736 -0.7338\nvn 0.0856 0.6919 -0.7169\nvn 0.0825 0.7098 -0.6995\nvn 0.0794 0.7273 -0.6817\nvn 0.0764 0.7443 -0.6634\nvn 0.0735 0.7609 -0.6447\nvn 0.0706 0.7769 -0.6256\nvn 0.0679 0.7925 -0.6061\nvn 0.0652 0.8076 -0.5861\nvn 0.0626 0.8222 -0.5658\nvn 0.0602 0.8362 -0.5451\nvn 0.0578 0.8497 -0.5240\nvn 0.0555 0.8627 -0.5026\nvn 0.0533 0.8752 -0.4809\nvn 0.0512 0.8870 -0.4589\nvn 0.0492 0.8984 -0.4365\nvn 0.0473 0.9091 -0.4139\nvn 0.0455 0.9193 -0.3909\nvn 0.0438 0.9289 -0.3678\nvn 0.0422 0.9379 -0.3444\nvn 0.0408 0.9463 -0.3207\nvn 0.0394 0.9541 -0.2969\nvn 0.0381 0.9613 -0.2728\nvn 0.0369 0.9679 -0.2486\nvn 0.0359 0.9739 -0.2242\nvn 0.0349 0.9792 -0.1997\nvn 0.0341 0.9840 -0.1750\nvn 0.0334 0.9881 -0.1502\nvn 0.0328 0.9916 -0.1253\nvn 0.0323 0.9944 -0.1004\nvn 0.0319 0.9966 -0.0753\nvn 0.0316 0.9982 -0.0502\nvn 0.0314 0.9992 -0.0251\nvn 0.0871 0.9962 -0.0000\nvn 0.0314 0.9995 -0.0000\nvn 0.0000 0.1851 -0.9827\nvn 0.0000 0.1979 -0.9802\nvn 0.1386 0.2071 -0.9685\nvn 0.1343 0.2316 -0.9635\nvn 0.0000 0.1848 -0.9828\nvn -0.1064 0.2225 -0.9691\nvn 0.0000 0.1591 -0.9873\nvn 0.0000 0.1717 -0.9851\nvn 0.0000 0.1586 -0.9873\nvn -0.1140 0.2013 -0.9729\nvn 0.0000 0.1330 -0.9911\nvn 0.0000 0.1455 -0.9894\nvn 0.0000 0.1324 -0.9912\nvn -0.1217 0.1799 -0.9761\nvn 0.0000 0.1069 -0.9943\nvn 0.0000 0.1194 -0.9928\nvn 0.0000 0.1063 -0.9943\nvn -0.1293 0.1586 -0.9788\nvn 0.0000 0.0809 -0.9967\nvn 0.0000 0.0931 -0.9957\nvn 0.0000 0.0800 -0.9968\nvn -0.1370 0.1372 -0.9810\nvn 0.0000 0.0549 -0.9985\nvn 0.0000 0.0668 -0.9978\nvn 0.0000 0.0536 -0.9986\nvn -0.1447 0.1157 -0.9827\nvn 0.0000 0.0291 -0.9996\nvn 0.0000 0.0404 -0.9992\nvn 0.0000 0.0272 -0.9996\nvn -0.1524 0.0943 -0.9838\nvn 0.0000 0.0034 -1.0000\nvn 0.0000 0.0140 -0.9999\nvn -0.1602 0.0728 -0.9844\nvn 0.0000 0.0057 -1.0000\nvn 0.0000 -0.0124 -0.9999\nvn 0.0000 0.0008 -1.0000\nvn -0.0079 -0.0163 -0.9998\nvn -0.1679 0.0513 -0.9845\nvn 0.0000 -0.0080 -1.0000\nvn 0.0000 -0.0224 -0.9997\nvn 0.0000 -0.0256 -0.9997\nvn 0.0000 -0.0481 -0.9988\nvn 0.0000 -0.0389 -0.9992\nvn 0.0000 -0.0520 -0.9986\nvn -0.0158 -0.0384 -0.9991\nvn 0.0000 -0.0738 -0.9973\nvn 0.0000 -0.0652 -0.9979\nvn 0.0000 -0.0784 -0.9969\nvn -0.0237 -0.0604 -0.9979\nvn 0.0000 -0.0995 -0.9950\nvn 0.0000 -0.0915 -0.9958\nvn 0.0000 -0.1047 -0.9945\nvn -0.0316 -0.0823 -0.9961\nvn 0.0000 -0.1251 -0.9921\nvn 0.0000 -0.1178 -0.9930\nvn 0.0000 -0.1309 -0.9914\nvn -0.0395 -0.1043 -0.9938\nvn 0.0000 -0.1506 -0.9886\nvn 0.0000 -0.1439 -0.9896\nvn -0.0474 -0.1262 -0.9909\nvn 0.0000 -0.1570 -0.9876\nvn 0.0000 -0.1760 -0.9844\nvn 0.0000 -0.1700 -0.9854\nvn -0.0552 -0.1480 -0.9874\nvn 0.0000 -0.1829 -0.9831\nvn 0.0000 -0.2012 -0.9795\nvn 0.0000 -0.1958 -0.9806\nvn -0.0631 -0.1698 -0.9835\nvn 0.0000 -0.2087 -0.9780\nvn 0.0000 -0.2264 -0.9740\nvn 0.0000 -0.2216 -0.9751\nvn -0.0709 -0.1915 -0.9789\nvn 0.0000 -0.2344 -0.9721\nvn 0.0000 -0.2513 -0.9679\nvn 0.0000 -0.2471 -0.9690\nvn -0.0787 -0.2132 -0.9738\nvn 0.0000 -0.2598 -0.9657\nvn 0.0000 -0.2761 -0.9611\nvn 0.0000 -0.2725 -0.9622\nvn -0.0864 -0.2347 -0.9682\nvn 0.0000 -0.2850 -0.9585\nvn 0.0000 -0.3007 -0.9537\nvn 0.0000 -0.2976 -0.9547\nvn -0.0941 -0.2562 -0.9620\nvn 0.0000 -0.3101 -0.9507\nvn 0.0000 -0.3251 -0.9457\nvn 0.0000 -0.3225 -0.9466\nvn -0.1018 -0.2776 -0.9553\nvn 0.0000 -0.3348 -0.9423\nvn 0.0000 -0.3493 -0.9370\nvn 0.0000 -0.3471 -0.9378\nvn -0.1094 -0.2988 -0.9480\nvn 0.0000 -0.3593 -0.9332\nvn -0.1170 -0.3199 -0.9402\nvn 0.0000 -0.3732 -0.9277\nvn 0.0000 -0.3715 -0.9284\nvn 0.0000 -0.3835 -0.9235\nvn -0.1246 -0.3409 -0.9318\nvn 0.0000 -0.3969 -0.9179\nvn 0.0000 -0.3955 -0.9185\nvn 0.0000 -0.4075 -0.9132\nvn -0.1320 -0.3617 -0.9229\nvn 0.0000 -0.4203 -0.9074\nvn 0.0000 -0.4193 -0.9078\nvn 0.0000 -0.4311 -0.9023\nvn -0.1395 -0.3824 -0.9134\nvn 0.0000 -0.4434 -0.8963\nvn 0.0000 -0.4428 -0.8966\nvn 0.0000 -0.4543 -0.8908\nvn -0.1468 -0.4029 -0.9034\nvn 0.0000 -0.4544 -0.8908\nvn 0.0000 -0.4662 -0.8847\nvn 0.0000 -0.4659 -0.8849\nvn 0.0000 -0.4773 -0.8788\nvn -0.1541 -0.4232 -0.8928\nvn 0.0000 -0.4887 -0.8725\nvn 0.0000 -0.4886 -0.8725\nvn 0.0000 -0.4998 -0.8661\nvn -0.1614 -0.4433 -0.8817\nvn 0.0000 -0.5108 -0.8597\nvn 0.0000 -0.5073 -0.8618\nvn 0.0000 -0.5220 -0.8529\nvn 0.0000 -0.5110 -0.8596\nvn -0.0069 -0.5265 -0.8501\nvn -0.1685 -0.4633 -0.8700\nvn 0.0000 -0.5326 -0.8463\nvn 0.0000 -0.5330 -0.8461\nvn 0.0000 -0.5541 -0.8325\nvn 0.0000 -0.5438 -0.8392\nvn 0.0000 -0.5546 -0.8321\nvn -0.0137 -0.5455 -0.8380\nvn 0.0000 -0.5751 -0.8181\nvn 0.0000 -0.5652 -0.8249\nvn 0.0000 -0.5758 -0.8176\nvn -0.0205 -0.5643 -0.8253\nvn 0.0000 -0.5958 -0.8031\nvn 0.0000 -0.5862 -0.8102\nvn 0.0000 -0.5965 -0.8026\nvn -0.0272 -0.5829 -0.8121\nvn 0.0000 -0.6161 -0.7877\nvn 0.0000 -0.6068 -0.7949\nvn 0.0000 -0.6169 -0.7871\nvn -0.0337 -0.6012 -0.7984\nvn 0.0000 -0.6359 -0.7717\nvn 0.0000 -0.6269 -0.7791\nvn 0.0000 -0.6368 -0.7710\nvn -0.0402 -0.6192 -0.7842\nvn 0.0000 -0.6554 -0.7553\nvn 0.0000 -0.6466 -0.7629\nvn 0.0000 -0.6562 -0.7546\nvn -0.0466 -0.6370 -0.7695\nvn 0.0000 -0.6744 -0.7384\nvn 0.0000 -0.6658 -0.7462\nvn 0.0000 -0.6752 -0.7376\nvn -0.0529 -0.6545 -0.7542\nvn 0.0000 -0.6929 -0.7210\nvn 0.0000 -0.6845 -0.7290\nvn -0.0591 -0.6717 -0.7385\nvn 0.0000 -0.6937 -0.7203\nvn 0.0000 -0.7110 -0.7032\nvn 0.0000 -0.7027 -0.7114\nvn -0.0651 -0.6885 -0.7223\nvn 0.0000 -0.7117 -0.7025\nvn 0.0000 -0.7286 -0.6850\nvn 0.0000 -0.7205 -0.6934\nvn -0.0711 -0.7051 -0.7056\nvn 0.0000 -0.7292 -0.6843\nvn 0.0000 -0.7457 -0.6663\nvn 0.0000 -0.7378 -0.6750\nvn -0.0769 -0.7213 -0.6884\nvn 0.0000 -0.7545 -0.6563\nvn -0.0826 -0.7371 -0.6707\nvn 0.0000 -0.7624 -0.6472\nvn 0.0000 -0.7708 -0.6371\nvn -0.0882 -0.7526 -0.6525\nvn 0.0000 -0.7785 -0.6277\nvn 0.0000 -0.7865 -0.6176\nvn -0.0936 -0.7677 -0.6339\nvn 0.0000 -0.7941 -0.6078\nvn 0.0000 -0.8017 -0.5977\nvn -0.0989 -0.7824 -0.6148\nvn 0.0000 -0.8092 -0.5875\nvn 0.0000 -0.8164 -0.5775\nvn -0.1040 -0.7968 -0.5953\nvn 0.0000 -0.8238 -0.5669\nvn 0.0000 -0.8306 -0.5569\nvn -0.1090 -0.8106 -0.5753\nvn 0.0000 -0.8378 -0.5459\nvn 0.0000 -0.8442 -0.5361\nvn -0.1139 -0.8241 -0.5549\nvn 0.0000 -0.8513 -0.5246\nvn 0.0000 -0.8572 -0.5150\nvn -0.1185 -0.8371 -0.5341\nvn 0.0000 -0.8643 -0.5030\nvn 0.0000 -0.8697 -0.4936\nvn -0.1230 -0.8496 -0.5129\nvn 0.0000 -0.8767 -0.4811\nvn 0.0000 -0.8817 -0.4719\nvn -0.1274 -0.8617 -0.4912\nvn 0.0000 -0.8885 -0.4589\nvn 0.0000 -0.8930 -0.4500\nvn -0.1315 -0.8732 -0.4692\nvn 0.0000 -0.8998 -0.4364\nvn 0.0000 -0.9039 -0.4278\nvn -0.1355 -0.8843 -0.4468\nvn 0.0000 -0.9105 -0.4136\nvn 0.0000 -0.9141 -0.4054\nvn -0.1393 -0.8948 -0.4241\nvn 0.0000 -0.9206 -0.3906\nvn 0.0000 -0.9238 -0.3828\nvn -0.1429 -0.9049 -0.4010\nvn 0.0000 -0.9301 -0.3674\nvn 0.0000 -0.9329 -0.3600\nvn -0.1463 -0.9143 -0.3776\nvn 0.0000 -0.9390 -0.3439\nvn 0.0000 -0.9415 -0.3371\nvn -0.1495 -0.9233 -0.3539\nvn 0.0000 -0.9473 -0.3202\nvn 0.0000 -0.9495 -0.3139\nvn -0.1525 -0.9316 -0.3299\nvn 0.0000 -0.9551 -0.2964\nvn 0.0000 -0.9568 -0.2906\nvn -0.1553 -0.9394 -0.3056\nvn 0.0000 -0.9622 -0.2724\nvn 0.0000 -0.9637 -0.2671\nvn -0.1579 -0.9466 -0.2811\nvn 0.0000 -0.9687 -0.2482\nvn 0.0000 -0.9699 -0.2435\nvn -0.1603 -0.9532 -0.2563\nvn 0.0000 -0.9746 -0.2238\nvn 0.0000 -0.9755 -0.2198\nvn -0.1624 -0.9592 -0.2313\nvn 0.0000 -0.9799 -0.1994\nvn 0.0000 -0.9806 -0.1960\nvn -0.1644 -0.9646 -0.2061\nvn 0.0000 -0.9846 -0.1748\nvn 0.0000 -0.9851 -0.1721\nvn -0.1661 -0.9694 -0.1807\nvn 0.0000 -0.9887 -0.1501\nvn 0.0000 -0.9890 -0.1480\nvn -0.1676 -0.9736 -0.1552\nvn 0.0000 -0.9921 -0.1253\nvn 0.0000 -0.9923 -0.1237\nvn -0.1688 -0.9771 -0.1295\nvn 0.0000 -0.9949 -0.1004\nvn 0.0000 -0.9951 -0.0992\nvn -0.1699 -0.9800 -0.1038\nvn 0.0000 -0.9971 -0.0756\nvn 0.0000 -0.9972 -0.0745\nvn 0.0000 -0.9987 -0.0506\nvn 0.0000 -0.9988 -0.0497\nvn -0.1707 -0.9822 -0.0779\nvn 0.0000 -0.9997 -0.0254\nvn 0.0000 -0.9997 -0.0249\nvn -0.1713 -0.9838 -0.0520\nvn -0.1716 -0.9848 -0.0260\nvn -0.1714 -0.9852 -0.0000\nvn -0.1717 -0.9851 -0.0000\nvn 0.1723 -0.9850 -0.0000\nvn 0.1722 -0.9847 -0.0260\nvn 0.1720 -0.9837 -0.0520\nvn 0.1717 -0.9821 -0.0780\nvn 0.1713 -0.9797 -0.1040\nvn 0.1708 -0.9767 -0.1298\nvn 0.1702 -0.9730 -0.1556\nvn 0.1694 -0.9687 -0.1813\nvn 0.1685 -0.9638 -0.2068\nvn 0.1675 -0.9581 -0.2322\nvn 0.1664 -0.9519 -0.2574\nvn 0.1652 -0.9449 -0.2825\nvn 0.1639 -0.9374 -0.3074\nvn 0.1624 -0.9292 -0.3321\nvn 0.1609 -0.9203 -0.3565\nvn 0.1592 -0.9109 -0.3807\nvn 0.1574 -0.9008 -0.4047\nvn 0.1555 -0.8901 -0.4283\nvn 0.1535 -0.8789 -0.4517\nvn 0.1515 -0.8670 -0.4748\nvn 0.1493 -0.8545 -0.4975\nvn 0.1470 -0.8414 -0.5200\nvn 0.1446 -0.8278 -0.5420\nvn 0.1421 -0.8137 -0.5637\nvn 0.1395 -0.7989 -0.5850\nvn 0.1368 -0.7836 -0.6060\nvn 0.1340 -0.7678 -0.6265\nvn 0.1311 -0.7515 -0.6466\nvn 0.1281 -0.7347 -0.6662\nvn 0.1251 -0.7173 -0.6854\nvn 0.1219 -0.6995 -0.7041\nvn 0.1187 -0.6812 -0.7224\nvn 0.1154 -0.6625 -0.7402\nvn 0.1120 -0.6432 -0.7574\nvn 0.1085 -0.6236 -0.7742\nvn 0.1050 -0.6035 -0.7904\nvn 0.1014 -0.5830 -0.8061\nvn 0.0977 -0.5622 -0.8212\nvn 0.0940 -0.5409 -0.8358\nvn 0.0901 -0.5193 -0.8498\nvn 0.0863 -0.4973 -0.8633\nvn 0.0823 -0.4750 -0.8761\nvn 0.0783 -0.4524 -0.8884\nvn 0.0743 -0.4294 -0.9000\nvn 0.0702 -0.4062 -0.9111\nvn 0.0661 -0.3827 -0.9215\nvn 0.0619 -0.3589 -0.9313\nvn 0.0576 -0.3349 -0.9405\nvn 0.0534 -0.3106 -0.9490\nvn 0.0490 -0.2862 -0.9569\nvn 0.0447 -0.2615 -0.9642\nvn 0.0403 -0.2367 -0.9707\nvn 0.0359 -0.2117 -0.9767\nvn 0.0315 -0.1866 -0.9819\nvn 0.0270 -0.1613 -0.9865\nvn 0.0225 -0.1359 -0.9905\nvn 0.0181 -0.1105 -0.9937\nvn 0.0136 -0.0849 -0.9963\nvn 0.0090 -0.0593 -0.9982\nvn 0.0045 -0.0337 -0.9994\nvn 0.1693 0.0328 -0.9850\nvn 0.1737 0.0078 -0.9848\nvn 0.1649 0.0578 -0.9846\nvn 0.1605 0.0829 -0.9836\nvn 0.1561 0.1078 -0.9818\nvn 0.1517 0.1328 -0.9795\nvn 0.1473 0.1576 -0.9765\nvn 0.1429 0.1824 -0.9728\nvn 0.0308 -0.9995 -0.0000\nvn 0.0616 -0.9981 -0.0000\nvn 0.0721 -0.9974 -0.0000\nvn 0.1420 -0.9899 -0.0000\nvn 0.0875 0.6551 -0.7504\nvn 0.1736 -0.9848 -0.0000\nvn 0.2835 -0.9590 -0.0000\nvn 0.3420 -0.9397 -0.0000\nvn 0.3671 -0.9302 -0.0000\nvn 0.3409 -0.9401 -0.0000\nvn 0.1676 -0.6223 0.7647\nvn 0.2048 -0.9788 -0.0000\nvn 0.1429 -0.6274 0.7655\nvn 0.0000 -0.7575 0.6529\nvn 0.2026 -0.6630 0.7207\nvn 0.1676 -0.6223 0.7646\nvn 0.0000 -0.7553 0.6554\nvn 0.1031 -0.7279 0.6779\nvn -0.3380 -0.9412 -0.0000\nvn -0.3400 -0.9404 -0.0000\nvn -0.4948 -0.8690 -0.0000\nvn -0.4980 -0.8672 -0.0000\nvn -0.6373 -0.7707 -0.0000\nvn -0.6409 -0.7677 -0.0000\nvn -0.7610 -0.6488 -0.0000\nvn -0.7643 -0.6449 -0.0000\nvn -0.8620 -0.5069 -0.0000\nvn -0.8646 -0.5025 -0.0000\nvn -0.9371 -0.3491 -0.0000\nvn -0.9386 -0.3449 -0.0000\nvn -0.9836 -0.1803 -0.0000\nvn -0.9842 -0.1769 -0.0000\nvn -1.0000 -0.0058 -0.0000\nvn -1.0000 -0.0035 -0.0000\nvn 0.1439 -0.9896 -0.0000\nvn 0.1212 -0.1516 -0.9810\nvn 0.2645 -0.9644 -0.0000\nvn 0.1310 -0.9914 -0.0000\nvn 0.1742 -0.9847 -0.0000\nvn 0.1686 -0.9739 0.1521\nvn 0.0000 -0.9962 0.0872\nvn 0.0041 -0.9940 0.1091\nvn 0.0000 0.1736 0.9848\nvn 0.1529 0.1181 0.9812\nvn 0.0000 0.1737 0.9848\nvn 0.1529 0.1180 0.9812\nvn 0.1385 0.1416 0.9802\nvn 0.1204 0.1609 0.9796\nvn 0.0996 0.1752 0.9795\nvn 0.0776 0.1844 0.9798\nvn 0.0555 0.1883 0.9805\nvn 0.0345 0.1875 0.9817\nvn 0.0157 0.1823 0.9831\nvn -0.0001 0.1736 0.9848\nvn 0.1250 0.2675 0.9554\nvn 0.1518 0.2597 0.9537\nvn 0.1000 0.2714 0.9573\nvn 0.0775 0.2722 0.9591\nvn 0.0576 0.2710 0.9609\nvn 0.0404 0.2688 0.9624\nvn 0.0255 0.2665 0.9635\nvn 0.0123 0.2648 0.9642\nvn 0.0000 0.3201 0.9474\nvn 0.0000 0.2641 0.9645\nvn -0.0194 0.3202 0.9472\nvn -0.0395 0.3203 0.9465\nvn -0.0609 0.3202 0.9454\nvn -0.0841 0.3191 0.9440\nvn 0.0002 0.1734 0.9848\nvn -0.0075 0.1827 0.9831\nvn -0.1092 0.3163 0.9423\nvn -0.0187 0.1913 0.9814\nvn -0.0332 0.1983 0.9796\nvn -0.0508 0.2026 0.9779\nvn -0.0707 0.2036 0.9765\nvn -0.0922 0.2004 0.9754\nvn -0.1144 0.1927 0.9746\nvn -0.1363 0.1803 0.9741\nvn -0.1566 0.1630 0.9741\nvn -0.1680 0.1424 0.9754\nvn -0.1743 0.1411 0.9745\nvn 0.0000 0.0902 0.9959\nvn 0.0000 0.0065 1.0000\nvn 0.0000 0.0032 1.0000\nvn 0.0793 0.1454 0.9862\nvn 0.0866 0.1878 0.9784\nvn 0.0841 0.1874 0.9787\nvn 0.0843 0.1875 0.9786\nvn 0.1643 0.1132 0.9799\nvn 0.0866 0.1879 0.9784\nvn 0.0000 -0.0002 1.0000\nvn 0.0830 0.0149 0.9964\nvn 0.0000 0.0863 0.9963\nvn 0.2968 -0.8397 0.4548\nvn 0.4408 -0.8363 0.3261\nvn 0.5698 -0.7474 0.3417\nvn 0.4341 -0.7585 0.4861\nvn -0.0192 0.1803 0.9834\nvn -0.0829 0.2019 0.9759\nvn -0.0192 0.1802 0.9834\nvn 0.0000 0.9962 0.0871\nvn -0.1734 0.9849 -0.0000\nvn -0.1683 0.9776 0.1262\nvn 0.0000 0.9962 0.0873\nvn 0.1163 0.9790 0.1676\nvn 0.0873 0.9962 -0.0000\nvn 0.0000 0.9850 0.1726\nvn 0.1565 -0.1819 0.9708\nvn 0.1698 -0.2295 0.9584\nvn 0.1577 -0.1817 0.9706\nvn 0.1546 -0.2252 -0.9620\nvn 0.0778 -0.2002 -0.9767\nvn 0.2299 -0.2485 -0.9410\nvn 0.3032 -0.2701 -0.9138\nvn 0.3744 -0.2899 -0.8808\nvn 0.5055 -0.3228 -0.8002\nvn 0.4423 -0.3075 -0.8425\nvn 0.6550 -0.3532 -0.6680\nvn 0.5625 -0.3354 -0.7558\nvn 0.7259 -0.3638 -0.5837\nvn 0.8341 -0.3716 -0.4077\nvn 0.7847 -0.3697 -0.4975\nvn 0.8743 -0.3697 -0.3145\nvn 0.9284 -0.3537 -0.1140\nvn 0.9058 -0.3638 -0.2170\nvn 0.0000 -0.0873 -0.9962\nvn 0.1731 -0.1413 -0.9747\nvn 0.1731 -0.0197 -0.9847\nvn 0.0000 0.0003 -1.0000\nvn 0.0000 0.0015 -1.0000\nvn -0.1149 0.0444 -0.9924\nvn -0.1173 -0.0447 -0.9921\nvn 0.0077 0.0002 -1.0000\nvn -0.4160 0.8036 -0.4256\nvn -0.4422 0.8036 -0.3984\nvn -0.4718 0.7432 -0.4744\nvn -0.4330 0.7125 -0.5522\nvn -0.4905 0.6760 -0.5499\nvn -0.4935 0.5963 -0.6332\nvn -0.4903 0.5689 -0.6603\nvn -0.4241 0.5311 -0.7335\nvn -0.4784 0.5078 -0.7164\nvn -0.3827 0.6796 -0.6258\nvn -0.4439 0.4112 -0.7962\nvn -0.4116 0.3469 -0.8427\nvn -0.3154 0.3028 -0.8993\nvn -0.3896 0.3077 -0.8680\nvn -0.3473 0.4919 -0.7984\nvn -0.3160 0.1969 -0.9281\nvn -0.2326 0.0900 -0.9684\nvn -0.2242 0.0797 -0.9713\nvn -0.2104 0.2585 -0.9428\nvn 0.0000 0.9851 -0.1719\nvn -0.4601 0.8879 -0.0000\nvn -0.5952 0.8036 -0.0000\nvn -0.5692 0.8222 -0.0000\nvn -0.6384 0.7697 -0.0000\nvn -0.7030 0.7112 -0.0000\nvn -0.7137 0.7005 -0.0000\nvn 0.0000 0.0000 1.0000\nvn 0.5599 -0.6572 0.5047\nvn 0.2760 0.6981 -0.6606\nvn 0.2534 0.8036 -0.5385\nvn 0.1800 0.8036 -0.5673\nvn 0.3753 0.6760 -0.6341\nvn 0.2475 0.8097 -0.5321\nvn 0.1787 0.7229 -0.6675\nvn 0.1049 0.8036 -0.5859\nvn 0.0869 0.7493 -0.6565\nvn 0.0288 0.8036 -0.5945\nvn 0.0034 0.7764 -0.6302\nvn -0.0095 0.8036 -0.5951\nvn -0.0475 0.8036 -0.5933\nvn -0.0699 0.8035 -0.5911\nvn -0.0725 0.6808 -0.7289\nvn -0.0851 0.8036 -0.5891\nvn -0.1222 0.8036 -0.5825\nvn -0.1520 0.7131 -0.6844\nvn -0.1587 0.8036 -0.5736\nvn -0.1945 0.8036 -0.5625\nvn -0.2203 0.7446 -0.6301\nvn -0.2295 0.8036 -0.5492\nvn -0.2767 0.7749 -0.5682\nvn -0.2636 0.8036 -0.5336\nvn -0.2966 0.8036 -0.5160\nvn -0.3212 0.8036 -0.5011\nvn -0.3284 0.8036 -0.4964\nvn -0.3590 0.8036 -0.4747\nvn -0.3883 0.8036 -0.4511\nvn 0.1757 0.9844 -0.0000\nvn 0.1588 0.9861 0.0493\nvn 0.1588 0.9873 -0.0000\nvn 0.0000 0.9964 -0.0851\nvn -0.9999 -0.0156 -0.0000\nvn -0.9747 -0.1413 0.1731\nvn -0.9962 -0.0873 -0.0000\nvn 0.0000 0.9669 -0.2550\nvn 0.0000 0.9408 -0.3389\nvn 0.0000 0.9854 -0.1704\nvn 0.0000 0.9082 -0.4186\nvn 0.0000 0.8683 -0.4960\nvn 0.0000 0.9411 -0.3381\nvn 0.0000 0.8222 -0.5692\nvn 0.0000 0.7694 -0.6387\nvn 0.0000 0.8684 -0.4958\nvn 0.0000 0.7112 -0.7030\nvn 0.0000 0.6470 -0.7625\nvn 0.0000 0.7697 -0.6384\nvn 0.0000 0.5044 -0.8635\nvn 0.0000 0.6472 -0.7623\nvn 0.0000 0.4269 -0.9043\nvn 0.0000 0.3459 -0.9383\nvn 0.0000 0.2621 -0.9650\nvn 0.0000 0.1765 -0.9843\nvn 0.0000 0.3460 -0.9382\nvn 0.0000 0.1760 -0.9844\nvn 0.0000 0.0884 -0.9961\nvn 0.9402 -0.3152 0.1289\nvn 0.9669 -0.2551 -0.0000\nvn 0.9695 -0.1870 0.1586\nvn 0.9377 -0.3090 0.1588\nvn 0.9721 -0.1857 -0.1430\nvn 0.9283 -0.3538 -0.1141\nvn 0.9854 -0.1700 -0.0000\nvn 0.6847 -0.6400 0.3487\nvn 0.2518 0.8845 -0.3927\nvn 0.2417 0.8157 -0.5256\nvn 0.3307 0.7912 -0.5144\nvn 0.1396 0.9902 -0.0000\nvn 0.0000 0.9870 0.1609\nvn 0.0848 0.9964 -0.0000\nvn 0.1551 0.9877 -0.0195\nvn 0.1626 0.9858 -0.0420\nvn 0.1614 0.9848 -0.0648\nvn 0.1521 0.9847 -0.0853\nvn 0.1356 0.9856 -0.1011\nvn 0.1139 0.9874 -0.1101\nvn -0.0851 0.9964 -0.0000\nvn -0.1587 0.9873 -0.0000\nvn -0.1199 0.9771 0.1757\nvn 0.0000 0.9848 0.1736\nvn 0.1722 -0.9793 0.1066\nvn 0.1723 -0.9836 0.0534\nvn 0.1722 -0.9721 0.1595\nvn 0.1722 -0.9620 0.2119\nvn 0.1721 -0.9492 0.2636\nvn 0.1720 -0.9335 0.3146\nvn 0.1719 -0.9152 0.3645\nvn 0.1718 -0.8942 0.4133\nvn 0.1717 -0.8707 0.4609\nvn 0.1716 -0.8446 0.5071\nvn 0.1715 -0.8162 0.5517\nvn 0.1714 -0.7855 0.5947\nvn 0.1712 -0.7525 0.6359\nvn 0.1711 -0.7175 0.6752\nvn 0.1709 -0.6805 0.7125\nvn 0.1708 -0.6417 0.7477\nvn 0.1707 -0.6011 0.7807\nvn 0.1705 -0.5589 0.8115\nvn 0.1704 -0.5152 0.8400\nvn 0.1703 -0.4702 0.8660\nvn 0.1702 -0.4239 0.8896\nvn 0.1701 -0.3766 0.9106\nvn 0.1700 -0.3283 0.9291\nvn 0.1699 -0.2792 0.9451\nvn 0.1564 -0.1323 0.9788\nvn 0.1564 -0.0825 0.9842\nvn 0.1564 -0.0325 0.9872\nvn 0.1564 0.0175 0.9875\nvn 0.1564 0.0674 0.9854\nvn 0.1564 0.1171 0.9807\nvn 0.1564 0.1664 0.9736\nvn 0.1565 0.2152 0.9640\nvn 0.1565 0.2634 0.9519\nvn 0.1566 0.3110 0.9374\nvn 0.1566 0.3576 0.9206\nvn 0.1567 0.4034 0.9015\nvn 0.1568 0.4481 0.8801\nvn 0.1569 0.4916 0.8566\nvn 0.1570 0.5339 0.8309\nvn 0.1571 0.5748 0.8031\nvn 0.1572 0.6142 0.7733\nvn 0.1574 0.6521 0.7416\nvn 0.1575 0.6884 0.7081\nvn 0.0000 0.7141 0.7001\nvn 0.1576 0.7229 0.6728\nvn 0.0000 0.7333 0.6799\nvn 0.1577 0.7556 0.6358\nvn 0.1578 0.7864 0.5972\nvn 0.1580 0.8152 0.5572\nvn 0.1581 0.8420 0.5158\nvn 0.1582 0.8667 0.4731\nvn 0.1583 0.8892 0.4292\nvn 0.1584 0.9096 0.3842\nvn 0.1585 0.9276 0.3383\nvn 0.1586 0.9433 0.2916\nvn 0.1586 0.9567 0.2441\nvn 0.1587 0.9677 0.1960\nvn 0.1587 0.9763 0.1474\nvn 0.1588 0.9824 0.0985\nvn 0.8758 -0.4827 -0.0000\nvn 0.9425 -0.3245 0.0804\nvn 0.9424 -0.3246 0.0803\nvn 0.8695 -0.4939 -0.0000\nvn 0.0000 -0.9933 0.1154\nvn 0.0000 -0.9914 0.1311\nvn 0.0014 -0.9933 0.1152\nvn 0.2495 0.9425 -0.2223\nvn 0.2049 0.9480 -0.2434\nvn 0.7826 -0.5167 0.3472\nvn 0.6709 -0.5385 0.5099\nvn 0.3151 0.8761 -0.3650\nvn 0.2511 0.8866 -0.3884\nvn 0.4100 0.7773 -0.4771\nvn -0.4186 0.9082 -0.0000\nvn -0.3134 0.9496 -0.0000\nvn -0.4958 0.8684 -0.0000\nvn -0.2550 0.9669 -0.0000\nvn -0.3381 0.9411 -0.0000\nvn -0.1704 0.9854 -0.0000\nvn 0.9863 -0.1647 -0.0000\nvn 0.9848 -0.1738 -0.0000\nvn 0.9847 -0.1731 0.0183\nvn 0.9462 -0.3236 -0.0000\nvn 0.9396 -0.3423 -0.0000\nvn 0.9395 -0.3414 0.0267\nvn 0.8836 -0.4683 -0.0000\nvn 0.8658 -0.5005 -0.0000\nvn 0.8657 -0.4993 0.0343\nvn 0.8032 -0.5957 -0.0000\nvn 0.7656 -0.6433 -0.0000\nvn 0.7656 -0.6421 0.0409\nvn 0.7096 -0.7046 -0.0000\nvn 0.6421 -0.7666 -0.0000\nvn 0.6421 -0.7652 0.0462\nvn 0.6065 -0.7951 -0.0000\nvn 0.4991 -0.8665 -0.0000\nvn 0.4991 -0.8651 0.0502\nvn 0.3825 -0.9239 -0.0000\nvn 0.3409 -0.9386 0.0526\nvn 0.4968 -0.8678 -0.0000\nvn 0.2420 -0.1269 -0.9619\nvn 0.3422 -0.1043 -0.9338\nvn 0.3614 -0.0997 -0.9271\nvn 0.4787 -0.0699 -0.8752\nvn 0.5004 -0.0640 -0.8634\nvn 0.5920 -0.0376 -0.8051\nvn 0.6428 -0.0217 -0.7657\nvn 0.6987 -0.0030 -0.7154\nvn 0.7649 0.0214 -0.6438\nvn 0.7951 0.0334 -0.6055\nvn 0.8628 0.0637 -0.5015\nvn 0.8767 0.0707 -0.4758\nvn 0.9334 0.1040 -0.3433\nvn 0.9383 0.1075 -0.3286\nvn 0.9708 0.1141 0.2110\nvn 0.9705 0.1268 0.2052\nvn 0.9712 0.1006 0.2158\nvn 0.9717 0.0866 0.2197\nvn 0.9723 0.0721 0.2225\nvn 0.9728 0.0571 0.2243\nvn 0.9735 0.0418 0.2249\nvn 0.9742 0.0262 0.2242\nvn 0.9749 0.0105 0.2224\nvn 0.9756 -0.0052 0.2193\nvn 0.9764 -0.0209 0.2149\nvn 0.9772 -0.0364 0.2092\nvn 0.9780 -0.0515 0.2023\nvn 0.9787 -0.0663 0.1941\nvn 0.9795 -0.0805 0.1846\nvn 0.9802 -0.0941 0.1740\nvn 0.9809 -0.1069 0.1622\nvn 0.9816 -0.1188 0.1493\nvn 0.9822 -0.1298 0.1355\nvn 0.9828 -0.1398 0.1207\nvn 0.9833 -0.1486 0.1051\nvn 0.9837 -0.1561 0.0887\nvn 0.9841 -0.1624 0.0717\nvn 0.9844 -0.1674 0.0542\nvn 0.9846 -0.1709 0.0364\nvn 0.9458 0.1001 0.3091\nvn 0.9263 0.0627 0.3716\nvn 0.9259 0.0838 0.3683\nvn 0.9266 0.0411 0.3737\nvn 0.9271 0.0191 0.3743\nvn 0.9276 -0.0032 0.3735\nvn 0.9282 -0.0258 0.3712\nvn 0.9288 -0.0484 0.3674\nvn 0.9295 -0.0711 0.3620\nvn 0.9302 -0.0937 0.3550\nvn 0.9309 -0.1160 0.3465\nvn 0.9316 -0.1379 0.3363\nvn 0.9323 -0.1594 0.3246\nvn 0.9331 -0.1802 0.3113\nvn 0.9338 -0.2002 0.2964\nvn 0.9346 -0.2194 0.2801\nvn 0.9352 -0.2376 0.2624\nvn 0.9359 -0.2547 0.2433\nvn 0.9366 -0.2705 0.2229\nvn 0.9371 -0.2850 0.2013\nvn 0.9377 -0.2980 0.1786\nvn 0.9382 -0.3095 0.1550\nvn 0.9386 -0.3194 0.1305\nvn 0.9389 -0.3276 0.1053\nvn 0.9392 -0.3340 0.0795\nvn 0.9394 -0.3386 0.0532\nvn 0.9457 0.1000 0.3092\nvn 0.8892 0.0589 0.4536\nvn 0.8535 0.0094 0.5210\nvn 0.8532 0.0382 0.5202\nvn 0.8539 -0.0196 0.5201\nvn 0.8543 -0.0489 0.5175\nvn 0.8548 -0.0784 0.5131\nvn 0.8553 -0.1078 0.5068\nvn 0.8558 -0.1372 0.4987\nvn 0.8565 -0.1662 0.4887\nvn 0.8571 -0.1950 0.4769\nvn 0.8577 -0.2232 0.4631\nvn 0.8584 -0.2507 0.4475\nvn 0.8591 -0.2775 0.4301\nvn 0.8598 -0.3033 0.4108\nvn 0.8605 -0.3281 0.3898\nvn 0.8611 -0.3517 0.3671\nvn 0.8618 -0.3739 0.3428\nvn 0.8624 -0.3947 0.3169\nvn 0.8630 -0.4140 0.2896\nvn 0.8635 -0.4315 0.2610\nvn 0.8640 -0.4472 0.2311\nvn 0.8645 -0.4611 0.2002\nvn 0.8649 -0.4730 0.1683\nvn 0.8652 -0.4828 0.1357\nvn 0.8654 -0.4905 0.1023\nvn 0.8656 -0.4960 0.0685\nvn 0.8891 0.0588 0.4539\nvn 0.8098 0.0162 0.5865\nvn 0.7547 -0.0441 0.6545\nvn 0.7545 -0.0086 0.6563\nvn 0.7551 -0.0798 0.6508\nvn 0.7554 -0.1155 0.6450\nvn 0.7559 -0.1512 0.6370\nvn 0.7563 -0.1866 0.6270\nvn 0.7568 -0.2217 0.6149\nvn 0.7574 -0.2563 0.6006\nvn 0.7579 -0.2903 0.5842\nvn 0.7585 -0.3236 0.5657\nvn 0.7591 -0.3559 0.5451\nvn 0.7597 -0.3872 0.5225\nvn 0.7603 -0.4172 0.4978\nvn 0.7609 -0.4460 0.4713\nvn 0.7615 -0.4732 0.4429\nvn 0.7621 -0.4989 0.4128\nvn 0.7626 -0.5228 0.3809\nvn 0.7631 -0.5448 0.3476\nvn 0.7636 -0.5649 0.3127\nvn 0.7641 -0.5828 0.2766\nvn 0.7645 -0.5986 0.2393\nvn 0.7648 -0.6121 0.2010\nvn 0.7651 -0.6233 0.1619\nvn 0.7653 -0.6320 0.1220\nvn 0.7655 -0.6383 0.0816\nvn 0.8095 0.0161 0.5869\nvn 0.7095 -0.0269 0.7042\nvn 0.6330 -0.0963 0.7681\nvn 0.6328 -0.0551 0.7724\nvn 0.6333 -0.1375 0.7616\nvn 0.6336 -0.1786 0.7528\nvn 0.6340 -0.2193 0.7416\nvn 0.6343 -0.2597 0.7281\nvn 0.6348 -0.2995 0.7123\nvn 0.6352 -0.3386 0.6942\nvn 0.6357 -0.3769 0.6737\nvn 0.6362 -0.4141 0.6510\nvn 0.6367 -0.4502 0.6261\nvn 0.6372 -0.4851 0.5989\nvn 0.6377 -0.5185 0.5697\nvn 0.6382 -0.5503 0.5384\nvn 0.6387 -0.5804 0.5052\nvn 0.6392 -0.6086 0.4702\nvn 0.6396 -0.6349 0.4333\nvn 0.6401 -0.6591 0.3949\nvn 0.6405 -0.6810 0.3550\nvn 0.6408 -0.7007 0.3137\nvn 0.6412 -0.7179 0.2712\nvn 0.6414 -0.7326 0.2276\nvn 0.6417 -0.7448 0.1832\nvn 0.6419 -0.7543 0.1380\nvn 0.6420 -0.7611 0.0923\nvn 0.7090 -0.0271 0.7046\nvn 0.5909 -0.0693 0.8038\nvn 0.4920 -0.1456 0.8583\nvn 0.4918 -0.1000 0.8649\nvn 0.4922 -0.1911 0.8492\nvn 0.4925 -0.2362 0.8377\nvn 0.4927 -0.2808 0.8236\nvn 0.4930 -0.3249 0.8071\nvn 0.4934 -0.3682 0.7880\nvn 0.4937 -0.4106 0.7666\nvn 0.4941 -0.4519 0.7427\nvn 0.4945 -0.4921 0.7165\nvn 0.4949 -0.5309 0.6880\nvn 0.4952 -0.5682 0.6572\nvn 0.4956 -0.6039 0.6242\nvn 0.4960 -0.6378 0.5892\nvn 0.4964 -0.6698 0.5522\nvn 0.4968 -0.6998 0.5132\nvn 0.4972 -0.7277 0.4726\nvn 0.4975 -0.7533 0.4302\nvn 0.4978 -0.7765 0.3864\nvn 0.4981 -0.7972 0.3412\nvn 0.4983 -0.8153 0.2948\nvn 0.4986 -0.8308 0.2473\nvn 0.4988 -0.8436 0.1989\nvn 0.4989 -0.8536 0.1498\nvn 0.4990 -0.8608 0.1002\nvn 0.5902 -0.0695 0.8042\nvn 0.4570 -0.1099 0.8826\nvn 0.3360 -0.1904 0.9224\nvn 0.3359 -0.1417 0.9312\nvn 0.3362 -0.2388 0.9110\nvn 0.3364 -0.2866 0.8971\nvn 0.3365 -0.3338 0.8805\nvn 0.3367 -0.3802 0.8614\nvn 0.3370 -0.4257 0.8398\nvn 0.3372 -0.4700 0.8157\nvn 0.3375 -0.5132 0.7891\nvn 0.3377 -0.5550 0.7602\nvn 0.3380 -0.5953 0.7289\nvn 0.3382 -0.6340 0.6954\nvn 0.3385 -0.6709 0.6598\nvn 0.3388 -0.7059 0.6220\nvn 0.3390 -0.7389 0.5823\nvn 0.3393 -0.7697 0.5407\nvn 0.3395 -0.7983 0.4974\nvn 0.3398 -0.8245 0.4525\nvn 0.3400 -0.8483 0.4060\nvn 0.3402 -0.8694 0.3583\nvn 0.3404 -0.8879 0.3094\nvn 0.3405 -0.9037 0.2594\nvn 0.3406 -0.9168 0.2086\nvn 0.3407 -0.9269 0.1571\nvn 0.3408 -0.9342 0.1050\nvn 0.4562 -0.1102 0.8830\nvn 0.3114 -0.1477 0.9387\nvn 0.1698 -0.1792 0.9690\nvn 0.3103 -0.1480 0.9390\nvn 0.9455 0.1170 0.3040\nvn 0.8889 0.0831 0.4506\nvn 0.8093 0.0470 0.5855\nvn 0.7088 0.0097 0.7053\nvn 0.5901 -0.0278 0.8069\nvn 0.4561 -0.0646 0.8876\nvn 0.3102 -0.0998 0.9454\nvn 0.9510 0.2792 0.1325\nvn 0.9503 0.2763 0.1433\nvn 0.9496 0.2727 0.1545\nvn 0.9490 0.2683 0.1658\nvn 0.9483 0.2632 0.1772\nvn 0.9477 0.2573 0.1887\nvn 0.9472 0.2505 0.2002\nvn 0.9467 0.2428 0.2116\nvn 0.9463 0.2342 0.2229\nvn 0.9459 0.2248 0.2340\nvn 0.9456 0.2144 0.2447\nvn 0.9453 0.2031 0.2551\nvn 0.9452 0.1908 0.2649\nvn 0.9451 0.1777 0.2742\nvn 0.9451 0.1638 0.2828\nvn 0.9451 0.1490 0.2907\nvn 0.9453 0.1334 0.2978\nvn 0.9397 0.3420 -0.0000\nvn 0.9022 0.4311 0.0140\nvn 0.9022 0.4313 -0.0000\nvn 0.9021 0.4307 0.0280\nvn 0.9019 0.4299 0.0421\nvn 0.9016 0.4288 0.0563\nvn 0.9013 0.4274 0.0706\nvn 0.9009 0.4256 0.0850\nvn 0.9005 0.4234 0.0995\nvn 0.9000 0.4207 0.1142\nvn 0.8994 0.4176 0.1290\nvn 0.8989 0.4139 0.1440\nvn 0.8982 0.4097 0.1592\nvn 0.8976 0.4049 0.1745\nvn 0.8969 0.3994 0.1899\nvn 0.8962 0.3932 0.2054\nvn 0.8955 0.3863 0.2210\nvn 0.8948 0.3786 0.2366\nvn 0.8941 0.3700 0.2522\nvn 0.8934 0.3606 0.2678\nvn 0.8928 0.3503 0.2832\nvn 0.8922 0.3391 0.2984\nvn 0.8916 0.3269 0.3134\nvn 0.8910 0.3138 0.3281\nvn 0.8905 0.2997 0.3423\nvn 0.8900 0.2846 0.3561\nvn 0.8896 0.2685 0.3694\nvn 0.8893 0.2515 0.3820\nvn 0.8890 0.2334 0.3939\nvn 0.8888 0.2145 0.4051\nvn 0.8886 0.1946 0.4153\nvn 0.8885 0.1738 0.4246\nvn 0.8885 0.1523 0.4328\nvn 0.8886 0.1299 0.4400\nvn 0.8887 0.1068 0.4459\nvn 0.8660 0.5000 -0.0000\nvn 0.8757 0.4828 -0.0000\nvn 0.8214 0.5699 0.0219\nvn 0.8215 0.5703 -0.0000\nvn 0.8213 0.5688 0.0438\nvn 0.8212 0.5669 0.0656\nvn 0.8209 0.5643 0.0875\nvn 0.8206 0.5609 0.1094\nvn 0.8203 0.5567 0.1312\nvn 0.8199 0.5517 0.1531\nvn 0.8194 0.5458 0.1749\nvn 0.8189 0.5391 0.1967\nvn 0.8184 0.5315 0.2184\nvn 0.8178 0.5230 0.2400\nvn 0.8172 0.5136 0.2615\nvn 0.8166 0.5032 0.2828\nvn 0.8160 0.4917 0.3039\nvn 0.8154 0.4793 0.3247\nvn 0.8147 0.4658 0.3453\nvn 0.8141 0.4513 0.3655\nvn 0.8135 0.4357 0.3853\nvn 0.8129 0.4189 0.4046\nvn 0.8123 0.4011 0.4234\nvn 0.8118 0.3823 0.4415\nvn 0.8113 0.3623 0.4589\nvn 0.8108 0.3412 0.4756\nvn 0.8104 0.3190 0.4914\nvn 0.8100 0.2959 0.5063\nvn 0.8097 0.2717 0.5202\nvn 0.8094 0.2465 0.5330\nvn 0.8092 0.2203 0.5446\nvn 0.8091 0.1933 0.5550\nvn 0.8090 0.1655 0.5640\nvn 0.8090 0.1368 0.5717\nvn 0.8090 0.1075 0.5778\nvn 0.8091 0.0775 0.5825\nvn 0.7660 0.6428 -0.0000\nvn 0.7764 0.6303 -0.0000\nvn 0.7195 0.6939 0.0292\nvn 0.7195 0.6945 -0.0000\nvn 0.7194 0.6922 0.0583\nvn 0.7192 0.6892 0.0874\nvn 0.7190 0.6852 0.1165\nvn 0.7188 0.6799 0.1454\nvn 0.7185 0.6734 0.1741\nvn 0.7181 0.6657 0.2027\nvn 0.7177 0.6569 0.2311\nvn 0.7173 0.6468 0.2592\nvn 0.7168 0.6354 0.2871\nvn 0.7163 0.6229 0.3146\nvn 0.7158 0.6090 0.3417\nvn 0.7153 0.5939 0.3683\nvn 0.7147 0.5776 0.3945\nvn 0.7141 0.5599 0.4201\nvn 0.7136 0.5410 0.4450\nvn 0.7130 0.5209 0.4693\nvn 0.7125 0.4994 0.4929\nvn 0.7120 0.4767 0.5156\nvn 0.7115 0.4528 0.5374\nvn 0.7110 0.4277 0.5582\nvn 0.7106 0.4014 0.5779\nvn 0.7102 0.3739 0.5966\nvn 0.7098 0.3453 0.6140\nvn 0.7095 0.3156 0.6301\nvn 0.7092 0.2848 0.6449\nvn 0.7090 0.2531 0.6583\nvn 0.7088 0.2205 0.6701\nvn 0.7087 0.1871 0.6803\nvn 0.7086 0.1528 0.6889\nvn 0.7086 0.1179 0.6957\nvn 0.7086 0.0823 0.7008\nvn 0.7087 0.0462 0.7040\nvn 0.6428 0.7660 -0.0000\nvn 0.6525 0.7578 -0.0000\nvn 0.5989 0.8000 0.0357\nvn 0.5989 0.8008 -0.0000\nvn 0.5988 0.7977 0.0714\nvn 0.5987 0.7938 0.1070\nvn 0.5985 0.7883 0.1424\nvn 0.5983 0.7813 0.1776\nvn 0.5981 0.7727 0.2125\nvn 0.5978 0.7626 0.2471\nvn 0.5975 0.7509 0.2813\nvn 0.5971 0.7377 0.3151\nvn 0.5967 0.7229 0.3483\nvn 0.5963 0.7066 0.3810\nvn 0.5959 0.6887 0.4130\nvn 0.5954 0.6694 0.4443\nvn 0.5949 0.6485 0.4749\nvn 0.5945 0.6261 0.5045\nvn 0.5940 0.6023 0.5333\nvn 0.5936 0.5770 0.5610\nvn 0.5931 0.5503 0.5877\nvn 0.5927 0.5222 0.6132\nvn 0.5923 0.4928 0.6375\nvn 0.5919 0.4621 0.6604\nvn 0.5915 0.4301 0.6820\nvn 0.5912 0.3969 0.7022\nvn 0.5909 0.3625 0.7207\nvn 0.5906 0.3271 0.7377\nvn 0.5904 0.2907 0.7530\nvn 0.5902 0.2533 0.7665\nvn 0.5900 0.2150 0.7782\nvn 0.5899 0.1760 0.7881\nvn 0.5899 0.1362 0.7959\nvn 0.5898 0.0959 0.8018\nvn 0.5899 0.0550 0.8056\nvn 0.5899 0.0138 0.8073\nvn 0.5000 0.8660 -0.0000\nvn 0.5079 0.8614 -0.0000\nvn 0.4629 0.8855 0.0414\nvn 0.4629 0.8864 -0.0000\nvn 0.4628 0.8826 0.0827\nvn 0.4627 0.8778 0.1238\nvn 0.4626 0.8711 0.1647\nvn 0.4624 0.8626 0.2053\nvn 0.4622 0.8521 0.2455\nvn 0.4620 0.8398 0.2852\nvn 0.4618 0.8256 0.3243\nvn 0.4615 0.8096 0.3628\nvn 0.4612 0.7917 0.4006\nvn 0.4609 0.7721 0.4376\nvn 0.4605 0.7507 0.4737\nvn 0.4602 0.7275 0.5089\nvn 0.4598 0.7026 0.5430\nvn 0.4595 0.6761 0.5760\nvn 0.4591 0.6480 0.6078\nvn 0.4587 0.6182 0.6382\nvn 0.4584 0.5870 0.6673\nvn 0.4581 0.5542 0.6950\nvn 0.4577 0.5200 0.7211\nvn 0.4574 0.4845 0.7457\nvn 0.4572 0.4477 0.7685\nvn 0.4569 0.4096 0.7896\nvn 0.4567 0.3705 0.8088\nvn 0.4564 0.3302 0.8262\nvn 0.4563 0.2890 0.8416\nvn 0.4561 0.2469 0.8550\nvn 0.4560 0.2039 0.8663\nvn 0.4559 0.1603 0.8755\nvn 0.4559 0.1161 0.8824\nvn 0.4559 0.0714 0.8872\nvn 0.4559 0.0263 0.8896\nvn 0.4560 -0.0191 0.8898\nvn 0.3420 0.9397 -0.0000\nvn 0.3473 0.9378 -0.0000\nvn 0.3149 0.9480 0.0459\nvn 0.3149 0.9491 -0.0000\nvn 0.3149 0.9447 0.0918\nvn 0.3148 0.9392 0.1374\nvn 0.3147 0.9314 0.1827\nvn 0.3146 0.9215 0.2276\nvn 0.3145 0.9095 0.2720\nvn 0.3143 0.8953 0.3158\nvn 0.3141 0.8789 0.3589\nvn 0.3139 0.8605 0.4012\nvn 0.3137 0.8401 0.4426\nvn 0.3135 0.8176 0.4829\nvn 0.3133 0.7932 0.5222\nvn 0.3131 0.7669 0.5603\nvn 0.3128 0.7387 0.5971\nvn 0.3126 0.7087 0.6325\nvn 0.3123 0.6769 0.6665\nvn 0.3121 0.6435 0.6990\nvn 0.3118 0.6084 0.7298\nvn 0.3116 0.5719 0.7588\nvn 0.3114 0.5338 0.7862\nvn 0.3112 0.4944 0.8116\nvn 0.3110 0.4537 0.8351\nvn 0.3108 0.4118 0.8566\nvn 0.3107 0.3688 0.8761\nvn 0.3105 0.3248 0.8934\nvn 0.3104 0.2798 0.9085\nvn 0.3103 0.2341 0.9214\nvn 0.3102 0.1876 0.9320\nvn 0.3102 0.1405 0.9402\nvn 0.3101 0.0930 0.9461\nvn 0.3101 0.0450 0.9496\nvn 0.3101 -0.0031 0.9507\nvn 0.3102 -0.0514 0.9493\nvn 0.1736 0.9848 -0.0000\nvn 0.7641 -0.4056 0.5016\nvn 0.8755 0.4814 -0.0415\nvn 0.7762 0.6274 -0.0622\nvn 0.6523 0.7536 -0.0809\nvn 0.5078 0.8560 -0.0971\nvn 0.3472 0.9313 -0.1103\nvn 0.8611 -0.3807 0.3370\nvn 0.1757 0.9771 -0.1199\nvn 0.1364 -0.8245 0.5492\nvn 0.3420 0.0124 -0.9396\nvn 0.5002 0.0441 -0.8648\nvn 0.6426 0.0744 -0.7626\nvn 0.7646 0.1024 -0.6363\nvn 0.8625 0.1271 -0.4899\nvn 0.9330 0.1478 -0.3280\nvn 0.1756 0.9553 -0.2380\nvn 0.1753 0.9192 -0.3526\nvn 0.1751 0.8695 -0.4619\nvn 0.1748 0.8068 -0.5644\nvn 0.1745 0.7321 -0.6584\nvn 0.0000 0.6472 -0.7624\nvn 0.1741 0.6465 -0.7427\nvn 0.0000 0.5781 -0.8160\nvn 0.1738 0.5512 -0.8160\nvn 0.0000 0.5045 -0.8634\nvn 0.1735 0.4476 -0.8772\nvn 0.1733 0.3371 -0.9254\nvn 0.1732 0.2212 -0.9597\nvn 0.1731 0.1017 -0.9796\nvn 0.9406 0.3110 -0.1363\nvn 0.9388 0.3024 -0.1650\nvn 0.9371 0.2896 -0.1949\nvn 0.9356 0.2720 -0.2251\nvn 0.9344 0.2491 -0.2546\nvn 0.9336 0.2207 -0.2824\nvn 0.9331 0.1869 -0.3073\nvn 0.8625 0.1863 -0.4705\nvn 0.8629 0.2405 -0.4444\nvn 0.8637 0.2891 -0.4128\nvn 0.8648 0.3317 -0.3769\nvn 0.8662 0.3682 -0.3378\nvn 0.8678 0.3988 -0.2965\nvn 0.8694 0.4238 -0.2539\nvn 0.8711 0.4436 -0.2109\nvn 0.8726 0.4587 -0.1679\nvn 0.8739 0.4697 -0.1253\nvn 0.8749 0.4771 -0.0832\nvn 0.3470 0.9119 -0.2191\nvn 0.3466 0.8799 -0.3250\nvn 0.3461 0.8356 -0.4266\nvn 0.3455 0.7795 -0.5226\nvn 0.3448 0.7122 -0.6115\nvn 0.3442 0.6345 -0.6921\nvn 0.3435 0.5474 -0.7631\nvn 0.3430 0.4519 -0.8235\nvn 0.3425 0.3493 -0.8722\nvn 0.3422 0.2408 -0.9082\nvn 0.3421 0.1280 -0.9309\nvn 0.5074 0.8398 -0.1932\nvn 0.5068 0.8128 -0.2872\nvn 0.5061 0.7753 -0.3779\nvn 0.5052 0.7275 -0.4643\nvn 0.5043 0.6697 -0.5452\nvn 0.5033 0.6024 -0.6195\nvn 0.5024 0.5263 -0.6860\nvn 0.5016 0.4420 -0.7437\nvn 0.5009 0.3505 -0.7913\nvn 0.5005 0.2528 -0.8280\nvn 0.5002 0.1502 -0.8528\nvn 0.6518 0.7410 -0.1612\nvn 0.6511 0.7200 -0.2402\nvn 0.6501 0.6905 -0.3172\nvn 0.6490 0.6525 -0.3913\nvn 0.6478 0.6060 -0.4617\nvn 0.6465 0.5513 -0.5274\nvn 0.6454 0.4885 -0.5873\nvn 0.6443 0.4180 -0.6404\nvn 0.6435 0.3405 -0.6855\nvn 0.6429 0.2568 -0.7216\nvn 0.6426 0.1677 -0.7476\nvn 0.7756 0.6189 -0.1242\nvn 0.7747 0.6044 -0.1857\nvn 0.7736 0.5838 -0.2464\nvn 0.7722 0.5568 -0.3059\nvn 0.7708 0.5232 -0.3636\nvn 0.7693 0.4827 -0.4185\nvn 0.7679 0.4352 -0.4700\nvn 0.7667 0.3809 -0.5168\nvn 0.7657 0.3199 -0.5580\nvn 0.7650 0.2526 -0.5924\nvn 0.7646 0.1798 -0.6189\nvn 0.1332 -0.0417 -0.9902\nvn 0.2299 -0.2485 -0.9409\nvn 0.2596 -0.0805 -0.9624\nvn 0.3032 -0.2701 -0.9139\nvn 0.3846 -0.1154 -0.9159\nvn 0.5053 -0.1455 -0.8506\nvn 0.5624 -0.3354 -0.7558\nvn 0.6188 -0.1699 -0.7670\nvn 0.7217 -0.1878 -0.6662\nvn 0.8110 -0.1986 -0.5503\nvn 0.8838 -0.2019 -0.4221\nvn 0.9379 -0.1976 -0.2850\nvn 0.2669 -0.7560 0.5977\nvn 0.9855 -0.1695 -0.0000\nvn 0.9966 -0.0822 -0.0000\nvn 1.0000 0.0033 -0.0000\nvn 0.9895 -0.0090 -0.1440\nvn 1.0000 0.0059 -0.0000\nvn 0.9999 0.0100 -0.0000\nvn 0.9956 0.0938 -0.0000\nvn 0.9843 0.1766 -0.0000\nvn 0.9760 0.1681 -0.1384\nvn 0.9835 0.1808 -0.0000\nvn 0.9825 0.1865 -0.0000\nvn 0.9639 0.2662 -0.0000\nvn 0.9388 0.3444 -0.0000\nvn 0.9310 0.3395 -0.1338\nvn 0.9369 0.3495 -0.0000\nvn 0.9341 0.3571 -0.0000\nvn 0.9028 0.4301 -0.0000\nvn 0.8649 0.5019 -0.0000\nvn 0.8569 0.5001 -0.1246\nvn 0.8617 0.5074 -0.0000\nvn 0.8563 0.5165 -0.0000\nvn 0.8141 0.5807 -0.0000\nvn 0.7649 0.6442 -0.0000\nvn 0.7559 0.6451 -0.1114\nvn 0.7604 0.6495 -0.0000\nvn 0.7516 0.6597 -0.0000\nvn 0.7010 0.7131 -0.0000\nvn 0.6417 0.7670 -0.0000\nvn 0.6314 0.7703 -0.0895\nvn 0.6365 0.7713 -0.0000\nvn 0.6232 0.7821 -0.0000\nvn 0.5674 0.8234 -0.0000\nvn 0.4990 0.8666 -0.0000\nvn 0.4867 0.8709 -0.0688\nvn 0.4941 0.8694 -0.0000\nvn 0.4752 0.8799 -0.0000\nvn 0.4170 0.9089 -0.0000\nvn 0.3413 0.9399 -0.0000\nvn 0.3268 0.9439 -0.0469\nvn 0.3367 0.9416 -0.0000\nvn 0.3123 0.9500 -0.0000\nvn 0.2539 0.9672 -0.0000\nvn 0.1733 0.9849 -0.0000\nvn 0.1697 0.9855 -0.0000\nvn 0.1236 0.9792 0.1609\nvn 0.2452 0.9560 0.1608\nvn 0.3629 0.9179 0.1606\nvn 0.4749 0.8653 0.1603\nvn 0.5795 0.7991 0.1601\nvn 0.6749 0.7204 0.1597\nvn 0.7597 0.6304 0.1594\nvn 0.8327 0.5304 0.1591\nvn 0.8926 0.4220 0.1589\nvn 0.9385 0.3067 0.1587\nvn 0.9696 0.1863 0.1586\nvn 0.9854 0.0627 0.1585\nvn 1.0000 0.0058 -0.0000\nvn 0.9854 -0.0624 0.1585\nvn 0.1577 0.1162 0.9806\nvn 0.3020 0.0592 0.9515\nvn 0.3092 0.0563 0.9493\nvn 0.0000 -0.1589 0.9873\nvn 0.4430 -0.0011 0.8965\nvn 0.4492 -0.0039 0.8934\nvn 0.0000 -0.1647 0.9863\nvn 0.0000 -0.3166 0.9486\nvn 0.5722 -0.0615 0.8178\nvn 0.5738 -0.0622 0.8166\nvn 0.0000 -0.3236 0.9462\nvn 0.0000 -0.4617 0.8870\nvn 0.6863 -0.1202 0.7173\nvn 0.6807 -0.1171 0.7232\nvn 0.0000 -0.4683 0.8836\nvn 0.0000 -0.5909 0.8067\nvn 0.7687 -0.1674 0.6173\nvn 0.0000 -0.5957 0.8032\nvn 0.0000 -0.7026 0.7116\nvn 0.7821 -0.1757 0.5978\nvn 0.8381 -0.2126 0.5024\nvn 0.0000 -0.7046 0.7096\nvn 0.0000 -0.7960 0.6053\nvn 0.8572 -0.2265 0.4624\nvn 0.8893 -0.2523 0.3814\nvn 0.0000 -0.8678 0.4968\nvn 0.0000 -0.8714 0.4906\nvn 0.0000 -0.7951 0.6065\nvn 0.9095 -0.2714 0.3148\nvn 0.9231 -0.2865 0.2565\nvn 0.0000 -0.9239 0.3825\nvn 0.0000 -0.9291 0.3698\nvn 0.9370 -0.1523 0.3145\nvn 0.8796 -0.1135 0.4620\nvn 0.7989 -0.0718 0.5972\nvn 0.6969 -0.0281 0.7166\nvn 0.5765 0.0162 0.8169\nvn 0.4407 0.0602 0.8956\nvn 0.2933 0.1026 0.9505\nvn 0.3020 0.0593 0.9515\nvn -0.3286 0.1075 0.9383\nvn -0.3433 0.1040 0.9334\nvn -0.4758 0.0707 0.8767\nvn -0.5015 0.0637 0.8628\nvn -0.6055 0.0334 0.7951\nvn -0.6438 0.0214 0.7649\nvn -0.7154 -0.0030 0.6987\nvn -0.7657 -0.0217 0.6428\nvn -0.8051 -0.0376 0.5920\nvn -0.8634 -0.0640 0.5004\nvn -0.8752 -0.0699 0.4787\nvn -0.9271 -0.0997 0.3614\nvn -0.9338 -0.1043 0.3422\nvn -0.9619 -0.1269 0.2420\nvn -0.3280 0.1478 0.9330\nvn -0.4899 0.1271 0.8625\nvn -0.6363 0.1024 0.7646\nvn -0.7626 0.0744 0.6426\nvn -0.8648 0.0441 0.5002\nvn -0.9396 0.0124 0.3420\nvn -0.9847 -0.0197 0.1731\nvn -1.0000 0.0003 -0.0000\nvn -0.9898 0.1427 -0.0000\nvn -0.9961 0.0884 -0.0000\nvn -0.9796 0.1017 0.1731\nvn -0.9844 0.1760 -0.0000\nvn -0.9548 0.2974 -0.0000\nvn -0.9650 0.2621 -0.0000\nvn -0.9597 0.2212 0.1732\nvn -0.9382 0.3460 -0.0000\nvn -0.9254 0.3371 0.1733\nvn -0.8959 0.4443 -0.0000\nvn -0.9043 0.4269 -0.0000\nvn -0.8635 0.5044 -0.0000\nvn -0.8772 0.4476 0.1735\nvn -0.8634 0.5045 -0.0000\nvn -0.8148 0.5798 -0.0000\nvn -0.8160 0.5780 -0.0000\nvn -0.8160 0.5512 0.1738\nvn -0.8160 0.5781 -0.0000\nvn -0.7623 0.6472 -0.0000\nvn -0.7427 0.6465 0.1741\nvn -0.7624 0.6472 -0.0000\nvn -0.6584 0.7321 0.1745\nvn -0.5644 0.8068 0.1748\nvn -0.4619 0.8695 0.1751\nvn -0.3526 0.9192 0.1753\nvn -0.2380 0.9553 0.1756\nvn 0.3910 -0.6693 0.6318\nvn 0.0000 0.9477 0.3191\nvn 0.0000 0.9397 0.3420\nvn -0.1103 0.9313 0.3472\nvn 0.5057 -0.5665 0.6506\nvn 0.0000 0.8833 0.4688\nvn 0.0000 0.8660 0.5000\nvn -0.0971 0.8560 0.5078\nvn 0.0000 0.7955 0.6060\nvn 0.0000 0.8614 0.5079\nvn 0.0000 0.7660 0.6428\nvn -0.0809 0.7536 0.6523\nvn 0.0000 0.6865 0.7271\nvn 0.0000 0.7578 0.6525\nvn 0.0000 0.6428 0.7660\nvn -0.0622 0.6274 0.7762\nvn 0.0000 0.5593 0.8290\nvn 0.0000 0.6303 0.7764\nvn 0.0000 0.5000 0.8660\nvn -0.0415 0.4814 0.8755\nvn 0.0000 0.4173 0.9088\nvn 0.0000 0.4828 0.8757\nvn 0.0333 0.4164 0.9086\nvn 0.0534 0.5571 0.8287\nvn 0.0721 0.6829 0.7269\nvn 0.0889 0.7906 0.6058\nvn 0.1033 0.8773 0.4686\nvn 0.1150 0.9408 0.3190\nvn -0.1363 0.3110 0.9406\nvn -0.1650 0.3024 0.9388\nvn -0.1949 0.2896 0.9371\nvn -0.2251 0.2720 0.9356\nvn -0.2546 0.2491 0.9344\nvn -0.2824 0.2207 0.9336\nvn -0.3073 0.1869 0.9331\nvn -0.0832 0.4771 0.8749\nvn -0.1253 0.4697 0.8739\nvn -0.1679 0.4587 0.8726\nvn -0.2109 0.4436 0.8711\nvn -0.2539 0.4238 0.8694\nvn -0.2965 0.3988 0.8678\nvn -0.3378 0.3682 0.8662\nvn -0.3769 0.3317 0.8648\nvn -0.4128 0.2891 0.8637\nvn -0.4444 0.2405 0.8629\nvn -0.4705 0.1863 0.8625\nvn -0.9309 0.1280 0.3421\nvn -0.9082 0.2408 0.3422\nvn -0.8722 0.3493 0.3425\nvn -0.8235 0.4519 0.3430\nvn -0.7631 0.5474 0.3435\nvn -0.6921 0.6345 0.3442\nvn -0.6115 0.7122 0.3448\nvn -0.5226 0.7795 0.3455\nvn -0.4266 0.8356 0.3461\nvn -0.3250 0.8799 0.3466\nvn -0.2191 0.9119 0.3470\nvn -0.8528 0.1502 0.5002\nvn -0.8280 0.2528 0.5005\nvn -0.7913 0.3505 0.5009\nvn -0.7437 0.4420 0.5016\nvn -0.6860 0.5263 0.5024\nvn -0.6195 0.6024 0.5033\nvn -0.5452 0.6697 0.5043\nvn -0.4643 0.7275 0.5052\nvn -0.3779 0.7753 0.5061\nvn -0.2872 0.8128 0.5068\nvn -0.1932 0.8398 0.5074\nvn -0.7476 0.1677 0.6426\nvn -0.7216 0.2568 0.6429\nvn -0.6855 0.3405 0.6435\nvn -0.6404 0.4180 0.6443\nvn -0.5873 0.4885 0.6454\nvn -0.5274 0.5513 0.6465\nvn -0.4617 0.6060 0.6478\nvn -0.3913 0.6525 0.6490\nvn -0.3172 0.6905 0.6501\nvn -0.2402 0.7200 0.6511\nvn -0.1612 0.7410 0.6518\nvn -0.6189 0.1798 0.7646\nvn -0.5924 0.2526 0.7650\nvn -0.5580 0.3199 0.7657\nvn -0.5168 0.3809 0.7667\nvn -0.4700 0.4352 0.7679\nvn -0.4185 0.4827 0.7693\nvn -0.3636 0.5232 0.7708\nvn -0.3059 0.5568 0.7722\nvn -0.2464 0.5838 0.7736\nvn -0.1857 0.6044 0.7747\nvn -0.1242 0.6189 0.7756\nvn 0.1796 0.2472 0.9522\nvn 0.2075 0.2293 0.9510\nvn 0.2340 0.2058 0.9502\nvn 0.2581 0.1766 0.9498\nvn 0.2783 0.1420 0.9499\nvn 0.4299 0.1184 0.8951\nvn 0.4115 0.1723 0.8950\nvn 0.3867 0.2210 0.8953\nvn 0.3569 0.2640 0.8961\nvn 0.3233 0.3009 0.8972\nvn 0.2872 0.3317 0.8986\nvn 0.2497 0.3567 0.9002\nvn 0.2118 0.3763 0.9020\nvn 0.1742 0.3911 0.9037\nvn 0.1374 0.4018 0.9054\nvn 0.1017 0.4092 0.9068\nvn 0.0671 0.4139 0.9079\nvn 0.2283 0.9199 0.3188\nvn 0.3384 0.8855 0.3184\nvn 0.4437 0.8379 0.3179\nvn 0.5426 0.7778 0.3173\nvn 0.6337 0.7058 0.3167\nvn 0.7155 0.6230 0.3161\nvn 0.7869 0.5303 0.3155\nvn 0.8465 0.4291 0.3150\nvn 0.8934 0.3208 0.3146\nvn 0.9265 0.2068 0.3144\nvn 0.9452 0.0887 0.3142\nvn 0.9488 -0.0316 0.3143\nvn 0.2053 0.8594 0.4683\nvn 0.3048 0.8296 0.4677\nvn 0.4006 0.7883 0.4670\nvn 0.4913 0.7358 0.4662\nvn 0.5756 0.6725 0.4653\nvn 0.6523 0.5990 0.4644\nvn 0.7202 0.5162 0.4635\nvn 0.7780 0.4250 0.4628\nvn 0.8245 0.3264 0.4622\nvn 0.8588 0.2217 0.4618\nvn 0.8799 0.1124 0.4617\nvn 0.8870 0.0001 0.4617\nvn 0.1769 0.7760 0.6054\nvn 0.2632 0.7517 0.6047\nvn 0.3469 0.7178 0.6037\nvn 0.4269 0.6742 0.6026\nvn 0.5023 0.6213 0.6015\nvn 0.5718 0.5592 0.6003\nvn 0.6344 0.4884 0.5992\nvn 0.6888 0.4095 0.5983\nvn 0.7338 0.3233 0.5975\nvn 0.7683 0.2308 0.5970\nvn 0.7913 0.1331 0.5968\nvn 0.8017 0.0317 0.5969\nvn 0.1438 0.6721 0.7264\nvn 0.2146 0.6539 0.7255\nvn 0.2840 0.6282 0.7244\nvn 0.3512 0.5948 0.7231\nvn 0.4156 0.5536 0.7217\nvn 0.4761 0.5045 0.7203\nvn 0.5317 0.4476 0.7190\nvn 0.5813 0.3831 0.7178\nvn 0.6236 0.3116 0.7170\nvn 0.6574 0.2337 0.7164\nvn 0.6816 0.1503 0.7161\nvn 0.6951 0.0625 0.7162\nvn 0.1069 0.5503 0.8281\nvn 0.1603 0.5387 0.8271\nvn 0.2135 0.5219 0.8258\nvn 0.2662 0.4996 0.8243\nvn 0.3179 0.4712 0.8228\nvn 0.3678 0.4364 0.8212\nvn 0.4150 0.3949 0.8197\nvn 0.4584 0.3466 0.8184\nvn 0.4968 0.2917 0.8174\nvn 0.5291 0.2304 0.8167\nvn 0.5539 0.1635 0.8164\nvn 0.5701 0.0917 0.8165\nvn 0.3275 0.9399 -0.0969\nvn 0.3138 0.9382 -0.1457\nvn 0.2870 0.9391 -0.1888\nvn -0.0975 0.2147 -0.9718\nvn 0.0216 0.1720 -0.9849\nvn 0.1452 0.1313 -0.9807\nvn 0.2712 0.0934 -0.9580\nvn 0.3969 0.0592 -0.9159\nvn 0.5193 0.0296 -0.8541\nvn 0.6349 0.0056 -0.7726\nvn 0.7399 -0.0121 -0.6726\nvn 0.8308 -0.0227 -0.5562\nvn 0.9041 -0.0257 -0.4265\nvn 0.9575 -0.0211 -0.2877\nvn -0.2603 0.4519 -0.8533\nvn -0.1638 0.4116 -0.8965\nvn -0.0590 0.3715 -0.9266\nvn 0.0529 0.3324 -0.9417\nvn 0.1701 0.2950 -0.9402\nvn 0.2905 0.2600 -0.9209\nvn 0.4113 0.2285 -0.8824\nvn 0.5294 0.2012 -0.8242\nvn 0.6410 0.1791 -0.7464\nvn 0.7422 0.1630 -0.6500\nvn 0.8292 0.1537 -0.5374\nvn 0.8987 0.1514 -0.4117\nvn 0.9480 0.1563 -0.2771\nvn -0.3209 0.6450 -0.6935\nvn -0.2477 0.6092 -0.7534\nvn -0.1637 0.5725 -0.8034\nvn -0.0697 0.5356 -0.8416\nvn 0.0331 0.4991 -0.8659\nvn 0.1431 0.4637 -0.8744\nvn 0.2581 0.4303 -0.8650\nvn 0.3753 0.3999 -0.8362\nvn 0.4912 0.3733 -0.7870\nvn 0.6018 0.3516 -0.7171\nvn 0.7026 0.3356 -0.6275\nvn 0.7893 0.3261 -0.5203\nvn 0.8579 0.3236 -0.3991\nvn 0.9057 0.3281 -0.2686\nvn 0.0173 0.6483 -0.7612\nvn 0.1160 0.6165 -0.7788\nvn 0.2213 0.5860 -0.7795\nvn 0.3305 0.5579 -0.7612\nvn 0.4400 0.5331 -0.7226\nvn 0.5455 0.5126 -0.6630\nvn 0.6422 0.4974 -0.5832\nvn 0.7254 0.4882 -0.4852\nvn 0.7907 0.4856 -0.3728\nvn 0.8351 0.4896 -0.2507\nvn 0.4723 0.6575 -0.5871\nvn 0.5618 0.6436 -0.5198\nvn 0.6388 0.6350 -0.4344\nvn 0.6988 0.6324 -0.3343\nvn 0.7384 0.6358 -0.2247\nvn 0.4828 0.7670 -0.4226\nvn 0.5447 0.7608 -0.3528\nvn 0.5916 0.7594 -0.2709\nvn 0.6209 0.7626 -0.1814\nvn 0.3740 0.8682 -0.3261\nvn 0.4237 0.8635 -0.2735\nvn 0.4606 0.8624 -0.2102\nvn 0.4819 0.8649 -0.1404\nvn 0.2653 -0.9642 -0.0000\nvn 0.3431 -0.9393 -0.0000\nvn 0.4006 -0.9162 -0.0000\nvn 0.5015 -0.8652 -0.0000\nvn 0.5338 -0.8456 -0.0000\nvn 0.6446 -0.7646 -0.0000\nvn 0.6601 -0.7512 -0.0000\nvn 0.5081 -0.8613 -0.0000\nvn 0.7679 -0.6406 -0.0000\nvn 0.7740 -0.6331 -0.0000\nvn 0.6526 -0.7577 -0.0000\nvn 0.7765 -0.6302 -0.0000\nvn 0.8678 -0.4970 -0.0000\nvn 0.3396 -0.9264 0.1628\nvn 0.8975 -0.4065 0.1710\nvn 0.5006 -0.8506 0.1606\nvn 0.6442 -0.7458 0.1695\nvn 0.7693 -0.6199 0.1547\nvn 0.8692 -0.4733 0.1431\nvn -0.3399 -0.9401 -0.0268\nvn -0.4979 -0.8669 -0.0261\nvn -0.6407 -0.7674 -0.0249\nvn -0.7642 -0.6446 -0.0229\nvn -0.8645 -0.5023 -0.0203\nvn -0.9386 -0.3447 -0.0170\nvn -0.9842 -0.1767 -0.0132\nvn -1.0000 -0.0034 -0.0091\nvn -0.9998 -0.0030 -0.0181\nvn -0.9996 -0.0025 -0.0271\nvn -0.9993 -0.0017 -0.0361\nvn -0.9990 -0.0007 -0.0451\nvn -0.9985 0.0006 -0.0541\nvn -0.9980 0.0020 -0.0630\nvn -0.9974 0.0037 -0.0718\nvn -0.9967 0.0056 -0.0806\nvn -0.9960 0.0077 -0.0893\nvn -0.9951 0.0100 -0.0979\nvn -0.9942 0.0125 -0.1064\nvn -0.9933 0.0152 -0.1149\nvn -0.9922 0.0182 -0.1232\nvn -0.9911 0.0213 -0.1315\nvn -0.9899 0.0246 -0.1396\nvn -0.9886 0.0281 -0.1477\nvn -0.9873 0.0318 -0.1556\nvn -0.9859 0.0357 -0.1634\nvn -0.9845 0.0397 -0.1710\nvn -0.9830 0.0439 -0.1785\nvn -0.9814 0.0483 -0.1859\nvn -0.9797 0.0529 -0.1932\nvn -0.9781 0.0576 -0.2002\nvn -0.9763 0.0624 -0.2072\nvn -0.9745 0.0674 -0.2140\nvn -0.9727 0.0726 -0.2206\nvn -0.9708 0.0778 -0.2271\nvn -0.9688 0.0833 -0.2334\nvn -0.9668 0.0888 -0.2395\nvn -0.9648 0.0945 -0.2455\nvn -0.9627 0.1002 -0.2513\nvn -0.9606 0.1061 -0.2569\nvn -0.9584 0.1121 -0.2623\nvn -0.9562 0.1182 -0.2676\nvn -0.9540 0.1245 -0.2727\nvn -0.9517 0.1308 -0.2776\nvn -0.9494 0.1372 -0.2824\nvn -0.9471 0.1436 -0.2869\nvn -0.9448 0.1502 -0.2913\nvn -0.9424 0.1568 -0.2955\nvn -0.9400 0.1635 -0.2995\nvn -0.9375 0.1703 -0.3034\nvn -0.9351 0.1772 -0.3070\nvn -0.9326 0.1841 -0.3105\nvn -0.9301 0.1910 -0.3138\nvn -0.9275 0.1981 -0.3169\nvn -0.9250 0.2051 -0.3198\nvn -0.9225 0.2123 -0.3225\nvn -0.9199 0.2194 -0.3251\nvn -0.9173 0.2266 -0.3274\nvn -0.9147 0.2339 -0.3296\nvn -0.9121 0.2412 -0.3316\nvn -0.9094 0.2485 -0.3334\nvn -0.9068 0.2558 -0.3351\nvn -0.9042 0.2632 -0.3365\nvn -0.9015 0.2705 -0.3378\nvn -0.8989 0.2779 -0.3388\nvn -0.8962 0.2854 -0.3397\nvn -0.8935 0.2928 -0.3404\nvn -0.8908 0.3002 -0.3410\nvn -0.8882 0.3077 -0.3413\nvn -0.8855 0.3151 -0.3415\nvn -0.8828 0.3226 -0.3415\nvn -0.8801 0.3300 -0.3412\nvn -0.8775 0.3374 -0.3409\nvn -0.8748 0.3449 -0.3403\nvn -0.8721 0.3523 -0.3395\nvn -0.8695 0.3597 -0.3386\nvn -0.8668 0.3671 -0.3375\nvn -0.9152 0.3656 -0.1698\nvn -0.8642 0.3745 -0.3361\nvn -0.8672 0.3809 -0.3207\nvn -0.8673 0.3809 -0.3205\nvn -0.9840 -0.1762 -0.0265\nvn -0.9837 -0.1754 -0.0397\nvn -0.9833 -0.1743 -0.0529\nvn -0.9827 -0.1728 -0.0660\nvn -0.9821 -0.1710 -0.0790\nvn -0.9813 -0.1688 -0.0921\nvn -0.9805 -0.1664 -0.1050\nvn -0.9795 -0.1636 -0.1178\nvn -0.9784 -0.1606 -0.1305\nvn -0.9771 -0.1572 -0.1431\nvn -0.9758 -0.1535 -0.1556\nvn -0.9744 -0.1495 -0.1680\nvn -0.9729 -0.1452 -0.1802\nvn -0.9712 -0.1407 -0.1923\nvn -0.9695 -0.1358 -0.2042\nvn -0.9676 -0.1307 -0.2159\nvn -0.9657 -0.1253 -0.2275\nvn -0.9637 -0.1196 -0.2389\nvn -0.9615 -0.1137 -0.2501\nvn -0.9593 -0.1076 -0.2611\nvn -0.9570 -0.1011 -0.2719\nvn -0.9546 -0.0945 -0.2824\nvn -0.9521 -0.0876 -0.2928\nvn -0.9496 -0.0805 -0.3030\nvn -0.9470 -0.0732 -0.3129\nvn -0.9443 -0.0657 -0.3226\nvn -0.9415 -0.0580 -0.3320\nvn -0.9386 -0.0501 -0.3412\nvn -0.9357 -0.0419 -0.3502\nvn -0.9328 -0.0337 -0.3589\nvn -0.9297 -0.0252 -0.3674\nvn -0.9266 -0.0166 -0.3756\nvn -0.9235 -0.0078 -0.3836\nvn -0.9203 0.0011 -0.3913\nvn -0.9170 0.0102 -0.3988\nvn -0.9137 0.0194 -0.4060\nvn -0.9103 0.0288 -0.4129\nvn -0.9069 0.0382 -0.4196\nvn -0.9035 0.0478 -0.4260\nvn -0.9000 0.0575 -0.4321\nvn -0.8965 0.0673 -0.4380\nvn -0.8929 0.0773 -0.4436\nvn -0.8893 0.0873 -0.4489\nvn -0.8857 0.0974 -0.4540\nvn -0.8820 0.1076 -0.4588\nvn -0.8783 0.1178 -0.4633\nvn -0.8746 0.1282 -0.4676\nvn -0.8708 0.1386 -0.4716\nvn -0.8671 0.1491 -0.4753\nvn -0.8633 0.1596 -0.4788\nvn -0.8595 0.1702 -0.4820\nvn -0.8557 0.1808 -0.4849\nvn -0.8518 0.1915 -0.4876\nvn -0.8480 0.2022 -0.4899\nvn -0.8441 0.2130 -0.4921\nvn -0.8402 0.2238 -0.4939\nvn -0.8363 0.2346 -0.4955\nvn -0.8324 0.2455 -0.4968\nvn -0.8285 0.2563 -0.4978\nvn -0.8246 0.2672 -0.4986\nvn -0.8207 0.2781 -0.4991\nvn -0.8168 0.2890 -0.4993\nvn -0.8129 0.2999 -0.4993\nvn -0.8090 0.3108 -0.4990\nvn -0.8051 0.3216 -0.4984\nvn -0.8012 0.3325 -0.4976\nvn -0.7973 0.3434 -0.4965\nvn -0.7934 0.3542 -0.4951\nvn -0.7895 0.3650 -0.4934\nvn -0.8615 0.3818 -0.3347\nvn -0.7856 0.3758 -0.4915\nvn -0.7937 0.3866 -0.4697\nvn -0.7935 0.3866 -0.4699\nvn -0.9383 -0.3441 -0.0340\nvn -0.9379 -0.3430 -0.0510\nvn -0.9374 -0.3415 -0.0680\nvn -0.9367 -0.3396 -0.0848\nvn -0.9359 -0.3373 -0.1016\nvn -0.9349 -0.3346 -0.1184\nvn -0.9338 -0.3314 -0.1350\nvn -0.9325 -0.3279 -0.1515\nvn -0.9311 -0.3239 -0.1678\nvn -0.9295 -0.3196 -0.1840\nvn -0.9278 -0.3148 -0.2001\nvn -0.9260 -0.3097 -0.2160\nvn -0.9240 -0.3042 -0.2317\nvn -0.9219 -0.2983 -0.2472\nvn -0.9196 -0.2921 -0.2625\nvn -0.9173 -0.2855 -0.2776\nvn -0.9148 -0.2786 -0.2925\nvn -0.9122 -0.2713 -0.3072\nvn -0.9094 -0.2637 -0.3215\nvn -0.9066 -0.2558 -0.3357\nvn -0.9036 -0.2475 -0.3496\nvn -0.9005 -0.2390 -0.3632\nvn -0.8974 -0.2301 -0.3765\nvn -0.8941 -0.2210 -0.3895\nvn -0.8907 -0.2116 -0.4023\nvn -0.8872 -0.2019 -0.4148\nvn -0.8837 -0.1920 -0.4269\nvn -0.8800 -0.1818 -0.4388\nvn -0.8763 -0.1714 -0.4503\nvn -0.8724 -0.1608 -0.4615\nvn -0.8685 -0.1499 -0.4724\nvn -0.8646 -0.1388 -0.4830\nvn -0.8605 -0.1275 -0.4932\nvn -0.8564 -0.1160 -0.5032\nvn -0.8522 -0.1044 -0.5127\nvn -0.8479 -0.0925 -0.5220\nvn -0.8436 -0.0805 -0.5309\nvn -0.8392 -0.0683 -0.5395\nvn -0.8348 -0.0560 -0.5477\nvn -0.8303 -0.0435 -0.5556\nvn -0.8258 -0.0309 -0.5632\nvn -0.8212 -0.0181 -0.5704\nvn -0.8166 -0.0053 -0.5772\nvn -0.8119 0.0077 -0.5838\nvn -0.8072 0.0208 -0.5899\nvn -0.8024 0.0340 -0.5958\nvn -0.7976 0.0473 -0.6013\nvn -0.7928 0.0607 -0.6064\nvn -0.7880 0.0742 -0.6112\nvn -0.7831 0.0877 -0.6156\nvn -0.7782 0.1014 -0.6197\nvn -0.7733 0.1150 -0.6235\nvn -0.7684 0.1288 -0.6269\nvn -0.7634 0.1426 -0.6300\nvn -0.7585 0.1564 -0.6327\nvn -0.7535 0.1703 -0.6351\nvn -0.7485 0.1842 -0.6371\nvn -0.7435 0.1981 -0.6388\nvn -0.7384 0.2121 -0.6401\nvn -0.7334 0.2261 -0.6411\nvn -0.7284 0.2401 -0.6417\nvn -0.7233 0.2541 -0.6420\nvn -0.7183 0.2681 -0.6420\nvn -0.7133 0.2821 -0.6416\nvn -0.7083 0.2961 -0.6409\nvn -0.7032 0.3101 -0.6398\nvn -0.6982 0.3240 -0.6384\nvn -0.6932 0.3380 -0.6366\nvn -0.6882 0.3519 -0.6345\nvn -0.7817 0.3866 -0.4894\nvn -0.6832 0.3657 -0.6320\nvn -0.6981 0.3816 -0.6058\nvn -0.6978 0.3816 -0.6062\nvn -0.8642 -0.5015 -0.0406\nvn -0.8638 -0.5002 -0.0608\nvn -0.8631 -0.4985 -0.0810\nvn -0.8623 -0.4962 -0.1011\nvn -0.8613 -0.4934 -0.1212\nvn -0.8601 -0.4902 -0.1411\nvn -0.8588 -0.4864 -0.1609\nvn -0.8573 -0.4822 -0.1805\nvn -0.8556 -0.4775 -0.2000\nvn -0.8537 -0.4723 -0.2194\nvn -0.8517 -0.4666 -0.2385\nvn -0.8495 -0.4605 -0.2575\nvn -0.8471 -0.4540 -0.2762\nvn -0.8446 -0.4470 -0.2947\nvn -0.8419 -0.4396 -0.3129\nvn -0.8391 -0.4317 -0.3309\nvn -0.8361 -0.4234 -0.3487\nvn -0.8330 -0.4148 -0.3661\nvn -0.8298 -0.4057 -0.3833\nvn -0.8264 -0.3962 -0.4001\nvn -0.8228 -0.3864 -0.4167\nvn -0.8192 -0.3762 -0.4329\nvn -0.8154 -0.3657 -0.4488\nvn -0.8115 -0.3548 -0.4643\nvn -0.8075 -0.3436 -0.4795\nvn -0.8033 -0.3321 -0.4944\nvn -0.7991 -0.3202 -0.5089\nvn -0.7947 -0.3081 -0.5230\nvn -0.7902 -0.2957 -0.5367\nvn -0.7857 -0.2830 -0.5501\nvn -0.7810 -0.2700 -0.5631\nvn -0.7763 -0.2568 -0.5757\nvn -0.7714 -0.2434 -0.5879\nvn -0.7665 -0.2297 -0.5997\nvn -0.7615 -0.2158 -0.6112\nvn -0.7564 -0.2017 -0.6222\nvn -0.7513 -0.1873 -0.6328\nvn -0.7461 -0.1728 -0.6430\nvn -0.7408 -0.1581 -0.6529\nvn -0.7354 -0.1432 -0.6623\nvn -0.7300 -0.1282 -0.6713\nvn -0.7246 -0.1130 -0.6799\nvn -0.7191 -0.0976 -0.6881\nvn -0.7135 -0.0822 -0.6958\nvn -0.7079 -0.0665 -0.7032\nvn -0.7022 -0.0508 -0.7101\nvn -0.6965 -0.0349 -0.7167\nvn -0.6908 -0.0190 -0.7228\nvn -0.6850 -0.0029 -0.7285\nvn -0.6792 0.0132 -0.7338\nvn -0.6734 0.0294 -0.7387\nvn -0.6675 0.0457 -0.7432\nvn -0.6616 0.0621 -0.7472\nvn -0.6557 0.0786 -0.7509\nvn -0.6498 0.0951 -0.7541\nvn -0.6439 0.1116 -0.7570\nvn -0.6379 0.1282 -0.7594\nvn -0.6319 0.1448 -0.7614\nvn -0.6259 0.1614 -0.7630\nvn -0.6200 0.1781 -0.7642\nvn -0.6140 0.1948 -0.7649\nvn -0.6080 0.2115 -0.7653\nvn -0.6020 0.2282 -0.7652\nvn -0.5960 0.2449 -0.7648\nvn -0.5900 0.2616 -0.7639\nvn -0.5840 0.2782 -0.7626\nvn -0.5780 0.2949 -0.7609\nvn -0.5720 0.3115 -0.7588\nvn -0.5661 0.3280 -0.7563\nvn -0.6783 0.3796 -0.6292\nvn -0.5601 0.3446 -0.7533\nvn -0.5832 0.3661 -0.7251\nvn -0.5827 0.3660 -0.7256\nvn -0.7639 -0.6437 -0.0459\nvn -0.7634 -0.6423 -0.0688\nvn -0.7627 -0.6403 -0.0916\nvn -0.7617 -0.6377 -0.1143\nvn -0.7606 -0.6346 -0.1370\nvn -0.7593 -0.6309 -0.1595\nvn -0.7578 -0.6267 -0.1819\nvn -0.7560 -0.6219 -0.2041\nvn -0.7541 -0.6166 -0.2262\nvn -0.7520 -0.6107 -0.2481\nvn -0.7497 -0.6043 -0.2697\nvn -0.7472 -0.5974 -0.2911\nvn -0.7446 -0.5900 -0.3123\nvn -0.7417 -0.5821 -0.3332\nvn -0.7387 -0.5737 -0.3539\nvn -0.7355 -0.5648 -0.3742\nvn -0.7322 -0.5554 -0.3942\nvn -0.7286 -0.5456 -0.4140\nvn -0.7250 -0.5354 -0.4334\nvn -0.7211 -0.5247 -0.4524\nvn -0.7171 -0.5136 -0.4711\nvn -0.7130 -0.5021 -0.4895\nvn -0.7087 -0.4902 -0.5074\nvn -0.7043 -0.4779 -0.5250\nvn -0.6997 -0.4652 -0.5422\nvn -0.6950 -0.4522 -0.5590\nvn -0.6902 -0.4388 -0.5754\nvn -0.6853 -0.4251 -0.5913\nvn -0.6803 -0.4110 -0.6069\nvn -0.6751 -0.3967 -0.6220\nvn -0.6698 -0.3820 -0.6367\nvn -0.6645 -0.3671 -0.6510\nvn -0.6590 -0.3519 -0.6648\nvn -0.6534 -0.3364 -0.6781\nvn -0.6478 -0.3206 -0.6911\nvn -0.6420 -0.3047 -0.7035\nvn -0.6362 -0.2885 -0.7156\nvn -0.6303 -0.2721 -0.7271\nvn -0.6243 -0.2554 -0.7382\nvn -0.6183 -0.2386 -0.7489\nvn -0.6122 -0.2216 -0.7590\nvn -0.6060 -0.2044 -0.7687\nvn -0.5998 -0.1871 -0.7780\nvn -0.5935 -0.1695 -0.7868\nvn -0.5871 -0.1519 -0.7951\nvn -0.5807 -0.1341 -0.8030\nvn -0.5743 -0.1162 -0.8104\nvn -0.5678 -0.0981 -0.8173\nvn -0.5613 -0.0800 -0.8238\nvn -0.5547 -0.0617 -0.8297\nvn -0.5481 -0.0434 -0.8353\nvn -0.5415 -0.0249 -0.8403\nvn -0.5348 -0.0064 -0.8449\nvn -0.5282 0.0122 -0.8491\nvn -0.5215 0.0308 -0.8527\nvn -0.5147 0.0495 -0.8559\nvn -0.5080 0.0683 -0.8586\nvn -0.5012 0.0871 -0.8609\nvn -0.4945 0.1059 -0.8627\nvn -0.4877 0.1247 -0.8640\nvn -0.4809 0.1436 -0.8649\nvn -0.4741 0.1625 -0.8653\nvn -0.4674 0.1814 -0.8653\nvn -0.4606 0.2002 -0.8647\nvn -0.4538 0.2191 -0.8637\nvn -0.4470 0.2379 -0.8623\nvn -0.4403 0.2568 -0.8604\nvn -0.4335 0.2755 -0.8580\nvn -0.4268 0.2943 -0.8551\nvn -0.5542 0.3611 -0.7500\nvn -0.4201 0.3130 -0.8518\nvn -0.4522 0.3404 -0.8244\nvn -0.4515 0.3403 -0.8249\nvn -0.6404 -0.7664 -0.0498\nvn -0.6399 -0.7649 -0.0746\nvn -0.6391 -0.7627 -0.0994\nvn -0.6381 -0.7599 -0.1241\nvn -0.6369 -0.7565 -0.1487\nvn -0.6354 -0.7525 -0.1731\nvn -0.6338 -0.7479 -0.1974\nvn -0.6319 -0.7427 -0.2216\nvn -0.6298 -0.7369 -0.2455\nvn -0.6275 -0.7306 -0.2692\nvn -0.6250 -0.7236 -0.2927\nvn -0.6223 -0.7161 -0.3160\nvn -0.6194 -0.7081 -0.3389\nvn -0.6164 -0.6995 -0.3616\nvn -0.6131 -0.6904 -0.3840\nvn -0.6096 -0.6808 -0.4061\nvn -0.6060 -0.6706 -0.4279\nvn -0.6022 -0.6600 -0.4493\nvn -0.5982 -0.6488 -0.4703\nvn -0.5940 -0.6372 -0.4910\nvn -0.5897 -0.6252 -0.5113\nvn -0.5852 -0.6127 -0.5312\nvn -0.5805 -0.5998 -0.5507\nvn -0.5757 -0.5864 -0.5698\nvn -0.5708 -0.5727 -0.5885\nvn -0.5657 -0.5585 -0.6067\nvn -0.5605 -0.5440 -0.6245\nvn -0.5551 -0.5291 -0.6418\nvn -0.5496 -0.5139 -0.6587\nvn -0.5440 -0.4983 -0.6751\nvn -0.5383 -0.4824 -0.6910\nvn -0.5325 -0.4662 -0.7065\nvn -0.5266 -0.4497 -0.7215\nvn -0.5205 -0.4329 -0.7360\nvn -0.5144 -0.4158 -0.7500\nvn -0.5082 -0.3985 -0.7635\nvn -0.5019 -0.3809 -0.7766\nvn -0.4954 -0.3631 -0.7891\nvn -0.4890 -0.3450 -0.8012\nvn -0.4824 -0.3268 -0.8127\nvn -0.4758 -0.3083 -0.8238\nvn -0.4691 -0.2896 -0.8343\nvn -0.4623 -0.2708 -0.8444\nvn -0.4555 -0.2518 -0.8539\nvn -0.4486 -0.2326 -0.8629\nvn -0.4416 -0.2133 -0.8715\nvn -0.4346 -0.1939 -0.8795\nvn -0.4276 -0.1743 -0.8870\nvn -0.4205 -0.1546 -0.8940\nvn -0.4134 -0.1348 -0.9005\nvn -0.4062 -0.1149 -0.9065\nvn -0.3991 -0.0948 -0.9120\nvn -0.3918 -0.0747 -0.9170\nvn -0.3846 -0.0546 -0.9215\nvn -0.3773 -0.0343 -0.9255\nvn -0.3700 -0.0140 -0.9289\nvn -0.3627 0.0063 -0.9319\nvn -0.3554 0.0267 -0.9343\nvn -0.3480 0.0471 -0.9363\nvn -0.3407 0.0676 -0.9377\nvn -0.3333 0.0881 -0.9387\nvn -0.3260 0.1086 -0.9391\nvn -0.3186 0.1290 -0.9391\nvn -0.3112 0.1495 -0.9385\nvn -0.3039 0.1700 -0.9374\nvn -0.2965 0.1904 -0.9359\nvn -0.2892 0.2109 -0.9338\nvn -0.2819 0.2312 -0.9312\nvn -0.2746 0.2516 -0.9281\nvn -0.4134 0.3316 -0.8480\nvn -0.2673 0.2719 -0.9245\nvn -0.3086 0.3053 -0.9009\nvn -0.3077 0.3051 -0.9012\nvn -0.4975 -0.8659 -0.0522\nvn -0.4969 -0.8643 -0.0782\nvn -0.4961 -0.8620 -0.1042\nvn -0.4951 -0.8591 -0.1301\nvn -0.4938 -0.8555 -0.1559\nvn -0.4923 -0.8513 -0.1815\nvn -0.4905 -0.8465 -0.2070\nvn -0.4886 -0.8410 -0.2322\nvn -0.4864 -0.8350 -0.2573\nvn -0.4840 -0.8283 -0.2822\nvn -0.4814 -0.8210 -0.3068\nvn -0.4786 -0.8132 -0.3312\nvn -0.4755 -0.8047 -0.3553\nvn -0.4723 -0.7957 -0.3791\nvn -0.4689 -0.7862 -0.4026\nvn -0.4652 -0.7761 -0.4257\nvn -0.4614 -0.7654 -0.4485\nvn -0.4574 -0.7543 -0.4710\nvn -0.4532 -0.7426 -0.4930\nvn -0.4489 -0.7305 -0.5147\nvn -0.4443 -0.7178 -0.5360\nvn -0.4396 -0.7047 -0.5569\nvn -0.4347 -0.6912 -0.5773\nvn -0.4297 -0.6772 -0.5973\nvn -0.4245 -0.6628 -0.6169\nvn -0.4192 -0.6479 -0.6360\nvn -0.4137 -0.6327 -0.6546\nvn -0.4081 -0.6171 -0.6728\nvn -0.4024 -0.6011 -0.6905\nvn -0.3965 -0.5848 -0.7077\nvn -0.3905 -0.5681 -0.7244\nvn -0.3844 -0.5511 -0.7406\nvn -0.3782 -0.5338 -0.7563\nvn -0.3719 -0.5162 -0.7715\nvn -0.3654 -0.4983 -0.7862\nvn -0.3589 -0.4802 -0.8004\nvn -0.3523 -0.4617 -0.8141\nvn -0.3456 -0.4430 -0.8272\nvn -0.3388 -0.4241 -0.8399\nvn -0.3319 -0.4050 -0.8520\nvn -0.3249 -0.3856 -0.8636\nvn -0.3179 -0.3661 -0.8746\nvn -0.3108 -0.3463 -0.8851\nvn -0.3036 -0.3264 -0.8951\nvn -0.2964 -0.3063 -0.9046\nvn -0.2891 -0.2861 -0.9135\nvn -0.2818 -0.2657 -0.9219\nvn -0.2744 -0.2452 -0.9298\nvn -0.2670 -0.2245 -0.9372\nvn -0.2596 -0.2037 -0.9440\nvn -0.2520 -0.1829 -0.9503\nvn -0.2445 -0.1619 -0.9560\nvn -0.2369 -0.1408 -0.9613\nvn -0.2293 -0.1197 -0.9660\nvn -0.2217 -0.0985 -0.9701\nvn -0.2141 -0.0772 -0.9738\nvn -0.2064 -0.0558 -0.9769\nvn -0.1987 -0.0345 -0.9795\nvn -0.1910 -0.0131 -0.9815\nvn -0.1833 0.0084 -0.9830\nvn -0.1756 0.0299 -0.9840\nvn -0.2600 0.2921 -0.9204\nvn -0.1565 0.2618 -0.9524\nvn -0.3395 -0.9391 -0.0535\nvn -0.3389 -0.9374 -0.0802\nvn -0.3381 -0.9350 -0.1069\nvn -0.3370 -0.9320 -0.1334\nvn -0.3357 -0.9283 -0.1598\nvn -0.3341 -0.9240 -0.1861\nvn -0.3323 -0.9190 -0.2122\nvn -0.3303 -0.9134 -0.2381\nvn -0.3280 -0.9071 -0.2638\nvn -0.3256 -0.9002 -0.2893\nvn -0.3229 -0.8927 -0.3145\nvn -0.3199 -0.8845 -0.3395\nvn -0.3168 -0.8758 -0.3641\nvn -0.3135 -0.8665 -0.3885\nvn -0.3099 -0.8566 -0.4125\nvn -0.3061 -0.8462 -0.4362\nvn -0.3022 -0.8352 -0.4595\nvn -0.2980 -0.8236 -0.4825\nvn -0.2937 -0.8116 -0.5050\nvn -0.2892 -0.7990 -0.5272\nvn -0.2845 -0.7860 -0.5489\nvn -0.2796 -0.7724 -0.5702\nvn -0.2746 -0.7584 -0.5911\nvn -0.2694 -0.7440 -0.6115\nvn -0.2641 -0.7291 -0.6314\nvn -0.2586 -0.7138 -0.6509\nvn -0.2529 -0.6981 -0.6699\nvn -0.2471 -0.6819 -0.6884\nvn -0.2412 -0.6655 -0.7064\nvn -0.2351 -0.6486 -0.7239\nvn -0.2290 -0.6314 -0.7409\nvn -0.2227 -0.6139 -0.7573\nvn -0.2163 -0.5960 -0.7733\nvn -0.2097 -0.5779 -0.7887\nvn -0.2031 -0.5594 -0.8036\nvn -0.1964 -0.5407 -0.8180\nvn -0.1895 -0.5217 -0.8318\nvn -0.1826 -0.5025 -0.8451\nvn -0.1756 -0.4830 -0.8578\nvn -0.3006 0.3247 -0.8968\nvn -0.4450 0.3583 -0.8207\nvn -0.5770 0.3818 -0.7220\nvn -0.6931 0.3948 -0.6031\nvn -0.7898 0.3969 -0.4676\nvn -0.8647 0.3879 -0.3191\nvn -0.8622 0.3948 -0.3173\nvn -0.8597 0.4018 -0.3154\nvn -0.8572 0.4087 -0.3132\nvn -0.8548 0.4155 -0.3109\nvn -0.8523 0.4224 -0.3085\nvn -0.8499 0.4291 -0.3058\nvn -0.8475 0.4359 -0.3030\nvn -0.8451 0.4426 -0.3000\nvn -0.8427 0.4492 -0.2968\nvn -0.8403 0.4558 -0.2935\nvn -0.8380 0.4623 -0.2900\nvn -0.8357 0.4687 -0.2863\nvn -0.8334 0.4751 -0.2824\nvn -0.8311 0.4815 -0.2784\nvn -0.8288 0.4877 -0.2742\nvn -0.8266 0.4939 -0.2698\nvn -0.8245 0.4999 -0.2652\nvn -0.8223 0.5059 -0.2605\nvn -0.8202 0.5118 -0.2556\nvn -0.8181 0.5177 -0.2506\nvn -0.8160 0.5234 -0.2453\nvn -0.8140 0.5290 -0.2399\nvn -0.8120 0.5345 -0.2344\nvn -0.8101 0.5399 -0.2287\nvn -0.8082 0.5451 -0.2228\nvn -0.8064 0.5503 -0.2168\nvn -0.8046 0.5553 -0.2106\nvn -0.8028 0.5602 -0.2042\nvn -0.8011 0.5649 -0.1978\nvn -0.7994 0.5695 -0.1911\nvn -0.7978 0.5740 -0.1843\nvn -0.7963 0.5783 -0.1774\nvn -0.7948 0.5825 -0.1704\nvn -0.7933 0.5865 -0.1632\nvn -0.7920 0.5903 -0.1559\nvn -0.7906 0.5940 -0.1484\nvn -0.7894 0.5975 -0.1409\nvn -0.7882 0.6009 -0.1332\nvn -0.7870 0.6040 -0.1255\nvn -0.7860 0.6070 -0.1176\nvn -0.7850 0.6097 -0.1096\nvn -0.7841 0.6123 -0.1015\nvn -0.7832 0.6147 -0.0934\nvn -0.7824 0.6169 -0.0851\nvn -0.7817 0.6189 -0.0768\nvn -0.7810 0.6207 -0.0685\nvn -0.7805 0.6223 -0.0600\nvn -0.7800 0.6237 -0.0516\nvn -0.7796 0.6249 -0.0430\nvn -0.7792 0.6258 -0.0345\nvn -0.7789 0.6266 -0.0259\nvn -0.7787 0.6271 -0.0173\nvn -0.7786 0.6274 -0.0086\nvn -0.7862 0.4071 -0.4650\nvn -0.7825 0.4172 -0.4621\nvn -0.7789 0.4273 -0.4590\nvn -0.7753 0.4374 -0.4557\nvn -0.7717 0.4474 -0.4520\nvn -0.7681 0.4573 -0.4482\nvn -0.7646 0.4672 -0.4440\nvn -0.7610 0.4770 -0.4396\nvn -0.7576 0.4867 -0.4350\nvn -0.7541 0.4964 -0.4301\nvn -0.7507 0.5059 -0.4249\nvn -0.7473 0.5154 -0.4195\nvn -0.7439 0.5247 -0.4139\nvn -0.7406 0.5340 -0.4079\nvn -0.7373 0.5431 -0.4018\nvn -0.7340 0.5522 -0.3954\nvn -0.7308 0.5611 -0.3887\nvn -0.7277 0.5699 -0.3818\nvn -0.7246 0.5785 -0.3746\nvn -0.7215 0.5870 -0.3672\nvn -0.7185 0.5954 -0.3595\nvn -0.7155 0.6036 -0.3516\nvn -0.7126 0.6117 -0.3435\nvn -0.7098 0.6196 -0.3351\nvn -0.7070 0.6273 -0.3265\nvn -0.7043 0.6348 -0.3177\nvn -0.7017 0.6422 -0.3086\nvn -0.6991 0.6494 -0.2993\nvn -0.6966 0.6563 -0.2898\nvn -0.6942 0.6631 -0.2801\nvn -0.6918 0.6696 -0.2702\nvn -0.6895 0.6760 -0.2600\nvn -0.6873 0.6821 -0.2497\nvn -0.6852 0.6879 -0.2392\nvn -0.6832 0.6936 -0.2284\nvn -0.6813 0.6990 -0.2175\nvn -0.6794 0.7041 -0.2065\nvn -0.6777 0.7090 -0.1952\nvn -0.6760 0.7136 -0.1838\nvn -0.6745 0.7179 -0.1723\nvn -0.6730 0.7220 -0.1606\nvn -0.6716 0.7258 -0.1488\nvn -0.6704 0.7293 -0.1368\nvn -0.6692 0.7325 -0.1248\nvn -0.6682 0.7354 -0.1126\nvn -0.6672 0.7381 -0.1003\nvn -0.6664 0.7404 -0.0880\nvn -0.6657 0.7424 -0.0756\nvn -0.6650 0.7441 -0.0631\nvn -0.6645 0.7456 -0.0505\nvn -0.6641 0.7466 -0.0379\nvn -0.6639 0.7474 -0.0253\nvn -0.7786 0.6275 -0.0000\nvn -0.6637 0.7479 -0.0127\nvn -0.7678 0.6407 -0.0000\nvn -0.7679 0.6406 -0.0000\nvn -0.6883 0.4080 -0.5998\nvn -0.6836 0.4211 -0.5961\nvn -0.6789 0.4341 -0.5921\nvn -0.6743 0.4471 -0.5878\nvn -0.6696 0.4600 -0.5831\nvn -0.6650 0.4728 -0.5781\nvn -0.6604 0.4856 -0.5728\nvn -0.6559 0.4982 -0.5671\nvn -0.6514 0.5107 -0.5611\nvn -0.6469 0.5232 -0.5548\nvn -0.6425 0.5355 -0.5481\nvn -0.6381 0.5477 -0.5411\nvn -0.6338 0.5598 -0.5338\nvn -0.6295 0.5717 -0.5262\nvn -0.6252 0.5835 -0.5182\nvn -0.6211 0.5952 -0.5100\nvn -0.6169 0.6067 -0.5014\nvn -0.6129 0.6180 -0.4924\nvn -0.6088 0.6292 -0.4832\nvn -0.6049 0.6401 -0.4736\nvn -0.6010 0.6509 -0.4638\nvn -0.5972 0.6615 -0.4536\nvn -0.5935 0.6719 -0.4431\nvn -0.5898 0.6821 -0.4323\nvn -0.5862 0.6921 -0.4212\nvn -0.5827 0.7018 -0.4098\nvn -0.5793 0.7113 -0.3981\nvn -0.5760 0.7205 -0.3861\nvn -0.5728 0.7295 -0.3738\nvn -0.5696 0.7382 -0.3613\nvn -0.5666 0.7467 -0.3485\nvn -0.5637 0.7548 -0.3354\nvn -0.5608 0.7627 -0.3221\nvn -0.5581 0.7703 -0.3085\nvn -0.5555 0.7775 -0.2947\nvn -0.5530 0.7845 -0.2806\nvn -0.5506 0.7911 -0.2663\nvn -0.5484 0.7974 -0.2518\nvn -0.5462 0.8034 -0.2371\nvn -0.5442 0.8090 -0.2222\nvn -0.5423 0.8142 -0.2072\nvn -0.5406 0.8191 -0.1919\nvn -0.5389 0.8236 -0.1765\nvn -0.5375 0.8278 -0.1609\nvn -0.5361 0.8316 -0.1453\nvn -0.5349 0.8350 -0.1294\nvn -0.5338 0.8380 -0.1135\nvn -0.5329 0.8406 -0.0975\nvn -0.5321 0.8428 -0.0814\nvn -0.5314 0.8446 -0.0652\nvn -0.5309 0.8460 -0.0489\nvn -0.5305 0.8470 -0.0326\nvn -0.6636 0.7481 -0.0000\nvn -0.5303 0.8476 -0.0163\nvn -0.6446 0.7646 -0.0000\nvn -0.6443 0.7648 -0.0000\nvn -0.5714 0.3976 -0.7179\nvn -0.5657 0.4133 -0.7135\nvn -0.5601 0.4289 -0.7087\nvn -0.5545 0.4444 -0.7035\nvn -0.5490 0.4599 -0.6979\nvn -0.5435 0.4752 -0.6920\nvn -0.5380 0.4904 -0.6856\nvn -0.5326 0.5056 -0.6788\nvn -0.5272 0.5206 -0.6716\nvn -0.5218 0.5355 -0.6641\nvn -0.5165 0.5502 -0.6561\nvn -0.5113 0.5648 -0.6477\nvn -0.5061 0.5793 -0.6390\nvn -0.5009 0.5936 -0.6299\nvn -0.4959 0.6077 -0.6203\nvn -0.4909 0.6216 -0.6104\nvn -0.4859 0.6354 -0.6001\nvn -0.4810 0.6490 -0.5894\nvn -0.4762 0.6623 -0.5784\nvn -0.4715 0.6755 -0.5669\nvn -0.4669 0.6884 -0.5551\nvn -0.4623 0.7011 -0.5429\nvn -0.4578 0.7135 -0.5303\nvn -0.4535 0.7257 -0.5174\nvn -0.4492 0.7376 -0.5041\nvn -0.4450 0.7493 -0.4905\nvn -0.4409 0.7606 -0.4765\nvn -0.4369 0.7717 -0.4621\nvn -0.4331 0.7824 -0.4475\nvn -0.4293 0.7929 -0.4325\nvn -0.4257 0.8030 -0.4171\nvn -0.4222 0.8128 -0.4015\nvn -0.4188 0.8222 -0.3855\nvn -0.4155 0.8313 -0.3693\nvn -0.4124 0.8400 -0.3527\nvn -0.4094 0.8483 -0.3359\nvn -0.4066 0.8562 -0.3188\nvn -0.4038 0.8638 -0.3014\nvn -0.4013 0.8709 -0.2839\nvn -0.3989 0.8776 -0.2660\nvn -0.3966 0.8839 -0.2480\nvn -0.3945 0.8897 -0.2297\nvn -0.3926 0.8951 -0.2113\nvn -0.3908 0.9001 -0.1927\nvn -0.3892 0.9046 -0.1739\nvn -0.3877 0.9087 -0.1549\nvn -0.3864 0.9123 -0.1359\nvn -0.3853 0.9154 -0.1167\nvn -0.3843 0.9180 -0.0974\nvn -0.3835 0.9202 -0.0780\nvn -0.3829 0.9219 -0.0586\nvn -0.3825 0.9231 -0.0391\nvn -0.5302 0.8479 -0.0000\nvn -0.3822 0.9239 -0.0195\nvn -0.5015 0.8652 -0.0000\nvn -0.5010 0.8654 -0.0000\nvn -0.4386 0.3762 -0.8162\nvn -0.4322 0.3940 -0.8112\nvn -0.4258 0.4117 -0.8057\nvn -0.4194 0.4294 -0.7998\nvn -0.4131 0.4470 -0.7934\nvn -0.4069 0.4644 -0.7866\nvn -0.4006 0.4817 -0.7794\nvn -0.3945 0.4989 -0.7717\nvn -0.3883 0.5160 -0.7635\nvn -0.3822 0.5329 -0.7549\nvn -0.3762 0.5497 -0.7459\nvn -0.3702 0.5663 -0.7364\nvn -0.3643 0.5827 -0.7264\nvn -0.3585 0.5990 -0.7160\nvn -0.3527 0.6150 -0.7052\nvn -0.3470 0.6309 -0.6939\nvn -0.3414 0.6465 -0.6822\nvn -0.3359 0.6619 -0.6701\nvn -0.3304 0.6771 -0.6575\nvn -0.3250 0.6921 -0.6445\nvn -0.3198 0.7068 -0.6311\nvn -0.3146 0.7212 -0.6172\nvn -0.3095 0.7353 -0.6029\nvn -0.3045 0.7492 -0.5882\nvn -0.2996 0.7627 -0.5731\nvn -0.2949 0.7760 -0.5576\nvn -0.2902 0.7889 -0.5417\nvn -0.2857 0.8015 -0.5254\nvn -0.2813 0.8137 -0.5087\nvn -0.2771 0.8256 -0.4916\nvn -0.2729 0.8370 -0.4742\nvn -0.2689 0.8482 -0.4564\nvn -0.2651 0.8589 -0.4383\nvn -0.2614 0.8692 -0.4198\nvn -0.2578 0.8791 -0.4010\nvn -0.2544 0.8885 -0.3818\nvn -0.2512 0.8975 -0.3624\nvn -0.2481 0.9061 -0.3427\nvn -0.2452 0.9142 -0.3227\nvn -0.2425 0.9218 -0.3024\nvn -0.2399 0.9290 -0.2819\nvn -0.2375 0.9356 -0.2612\nvn -0.2353 0.9418 -0.2402\nvn -0.2333 0.9474 -0.2190\nvn -0.2314 0.9526 -0.1977\nvn -0.2298 0.9572 -0.1761\nvn -0.2283 0.9613 -0.1544\nvn -0.2270 0.9648 -0.1326\nvn -0.2259 0.9678 -0.1107\nvn -0.2250 0.9703 -0.0887\nvn -0.2244 0.9722 -0.0666\nvn -0.2239 0.9736 -0.0444\nvn -0.3822 0.9241 -0.0000\nvn -0.2236 0.9744 -0.0222\nvn -0.3431 0.9393 -0.0000\nvn -0.3424 0.9395 -0.0000\nvn -0.2936 0.3443 -0.8918\nvn -0.2866 0.3638 -0.8863\nvn -0.2796 0.3832 -0.8803\nvn -0.2727 0.4025 -0.8739\nvn -0.2658 0.4216 -0.8669\nvn -0.2590 0.4407 -0.8595\nvn -0.2521 0.4596 -0.8516\nvn -0.2454 0.4784 -0.8431\nvn -0.2387 0.4971 -0.8342\nvn -0.2320 0.5156 -0.8248\nvn -0.2255 0.5339 -0.8149\nvn -0.2189 0.5520 -0.8046\nvn -0.2125 0.5700 -0.7937\nvn -0.2061 0.5877 -0.7824\nvn -0.1998 0.6053 -0.7705\nvn -0.1936 0.6226 -0.7582\nvn -0.1874 0.6397 -0.7454\nvn -0.1814 0.6566 -0.7321\nvn -0.1754 0.6731 -0.7184\nvn -0.1695 0.6895 -0.7042\nvn -0.2235 0.9747 -0.0000\nvn -0.1742 0.9847 -0.0000\nvn -0.3365 0.9310 0.1414\nvn -0.4940 0.8554 0.1555\nvn -0.6382 0.7561 0.1452\nvn -0.7614 0.6316 0.1463\nvn -0.8620 0.4889 0.1338\nvn 0.1677 0.1998 0.9654\nvn 0.1251 0.3351 0.9338\nvn 0.2429 0.2098 0.9471\nvn 0.2501 0.2107 0.9450\nvn 0.2476 0.3143 0.9165\nvn 0.2501 0.2108 0.9450\nvn 0.1726 0.2005 0.9644\nvn 0.2572 0.2116 0.9429\nvn 0.3307 0.2201 0.9177\nvn 0.3306 0.2201 0.9177\nvn 0.3399 0.2211 0.9141\nvn 0.4088 0.2279 0.8837\nvn 0.3648 0.2803 0.8879\nvn 0.4486 0.2313 0.8633\nvn 0.4746 0.2333 0.8487\nvn 0.4744 0.2336 0.8487\nvn 0.4199 0.2289 0.8782\nvn 0.4966 0.2349 0.8356\nvn 0.4839 0.2340 0.8432\nvn 0.5168 0.3815 0.7664\nvn 0.3974 0.4326 0.8093\nvn 0.6083 0.2406 0.7564\nvn 0.6231 0.2411 0.7441\nvn 0.6251 0.3178 0.7129\nvn 0.5695 0.2391 0.7864\nvn 0.7017 0.2419 0.6702\nvn 0.7207 0.2417 0.6498\nvn 0.7203 0.2426 0.6499\nvn 0.6381 0.2414 0.7312\nvn 0.7271 0.2415 0.6426\nvn 0.7440 0.2411 0.6232\nvn 0.6976 0.4211 0.5796\nvn 0.7440 0.2410 0.6232\nvn 0.8130 0.2371 0.5318\nvn 0.8432 0.2340 0.4841\nvn 0.7980 0.3308 0.5038\nvn 0.7594 0.2405 0.6045\nvn 0.8774 0.2290 0.4216\nvn 0.8788 0.2288 0.4187\nvn 0.8786 0.2294 0.4188\nvn 0.8548 0.2325 0.4639\nvn 0.9239 0.2183 0.3141\nvn 0.9177 0.2201 0.3308\nvn 0.9177 0.3047 0.2550\nvn 0.8505 0.4032 0.3377\nvn 0.9556 0.2057 0.2110\nvn 0.9183 -0.2351 0.3185\nvn 0.9673 0.1985 0.1582\nvn 0.9200 0.3810 0.0921\nvn 0.9563 0.2021 0.2111\nvn 0.9673 0.1984 0.1581\nvn 0.9672 0.0356 0.2515\nvn 0.9240 0.2182 0.3141\nvn 0.9534 -0.2552 0.1611\nvn 0.9266 0.0613 0.3710\nvn 0.8783 0.2258 0.4215\nvn 0.8144 0.2333 0.5313\nvn 0.8661 0.0677 0.4952\nvn 0.7275 0.2406 0.6425\nvn 0.7880 0.0951 0.6083\nvn 0.6381 0.2415 0.7311\nvn 0.7017 0.2419 0.6701\nvn 0.6086 0.2399 0.7563\nvn 0.6832 0.1105 0.7218\nvn 0.4966 0.2350 0.8356\nvn 0.5696 0.2390 0.7864\nvn 0.4489 0.2308 0.8633\nvn 0.5380 0.1043 0.8365\nvn 0.3716 0.1184 0.9208\nvn 0.2572 0.2117 0.9429\nvn 0.2430 0.2097 0.9471\nvn 0.1726 0.2004 0.9644\nvn 0.9887 -0.1499 -0.0000\nvn 0.9521 -0.3058 -0.0000\nvn 0.8921 -0.4518 -0.0000\nvn 0.8115 -0.5843 -0.0000\nvn 0.7135 -0.7007 -0.0000\nvn 0.6009 -0.7993 -0.0000\nvn 0.4769 -0.8790 -0.0000\nvn 0.3440 -0.9390 -0.0000\nvn 0.5000 -0.8660 -0.0000\nvn 0.6428 -0.7660 -0.0000\nvn 0.7660 -0.6428 -0.0000\nvn 0.8660 -0.5000 -0.0000\nvn 0.9397 -0.3420 -0.0000\nvn 0.9848 -0.1736 -0.0000\nvn 0.9895 0.0636 0.1301\nvn 0.9689 -0.0376 0.2446\nvn 0.9523 -0.0826 0.2939\nvn 0.9232 -0.1418 0.3573\nvn 0.9690 -0.0372 0.2441\nvn 0.9198 -0.1476 0.3635\nvn 0.8549 -0.2409 0.4594\nvn 0.8442 -0.2537 0.4722\nvn 0.7671 -0.3324 0.5486\nvn 0.7442 -0.3524 0.5674\nvn 0.6630 -0.4145 0.6234\nvn 0.8371 -0.2618 0.4803\nvn 0.6229 -0.4410 0.6462\nvn 0.5456 -0.4859 0.6828\nvn 0.4835 -0.5169 0.7064\nvn 0.4181 -0.5455 0.7264\nvn 0.6082 -0.4501 0.6538\nvn 0.3303 -0.5779 0.7463\nvn 0.2830 -0.5928 0.7540\nvn 0.2991 -0.5879 0.7516\nvn 0.9843 -0.0973 0.1471\nvn 0.9527 -0.0838 0.2920\nvn 0.9199 -0.1476 0.3634\nvn 0.8372 -0.2620 0.4800\nvn 0.2989 -0.5875 0.7520\nvn 0.0000 -0.7808 0.6248\nvn 0.0000 -0.8474 0.5310\nvn 0.0000 -0.8727 0.4883\nvn 0.0000 -0.9164 0.4003\nvn 0.0000 -0.8448 0.5351\nvn 0.0000 -0.9338 0.3578\nvn 0.0000 -0.9641 0.2656\nvn 0.0000 -0.9142 0.4053\nvn 0.0000 -0.9722 0.2341\nvn 0.0000 -0.9623 0.2720\nvn 0.0000 -0.9907 0.1360\nvn 0.0019 -0.7812 0.6243\nvn 0.0001 -0.8448 0.5350\nvn 0.0025 -0.8731 0.4876\nvn 0.0026 -0.9341 0.3571\nvn 0.0000 -0.9623 0.2719\nvn 0.0023 -0.9724 0.2335\nvn 0.1609 -0.9776 0.1354\nvn 0.0000 -0.9907 0.1359\nvn 0.3163 -0.9364 0.1521\nvn 0.4534 -0.8913 -0.0000\nvn 0.4633 -0.8707 0.1648\nvn 0.6254 -0.7803 -0.0000\nvn 0.5983 -0.7824 0.1732\nvn 0.5404 -0.8414 -0.0000\nvn 0.7065 -0.7077 -0.0000\nvn 0.7176 -0.6736 0.1770\nvn 0.8498 -0.5271 -0.0000\nvn 0.8182 -0.5472 0.1763\nvn 0.7817 -0.6236 -0.0000\nvn 0.9086 -0.4177 -0.0000\nvn 0.9557 -0.2942 -0.0000\nvn 1.0000 -0.0002 -0.0000\nvn 0.9878 -0.1555 -0.0000\nvn 0.9504 0.2811 -0.1331\nvn 0.8952 0.3698 -0.2487\nvn 0.8257 0.4431 -0.3490\nvn 0.7462 0.5031 -0.4359\nvn 0.6596 0.5515 -0.5106\nvn 0.5678 0.5897 -0.5743\nvn 0.4726 0.6185 -0.6278\nvn 0.3752 0.6388 -0.6717\nvn 0.2773 0.6511 -0.7065\nvn 0.1805 0.6563 -0.7326\nvn 0.2007 0.9794 -0.0239\nvn 0.2587 0.9660 -0.0000\nvn 0.2006 0.9797 -0.0000\nvn 0.3419 0.9397 -0.0000\nvn 0.3641 0.9311 -0.0219\nvn 0.4226 0.9063 -0.0000\nvn 0.3641 0.9314 -0.0000\nvn 0.4999 0.8661 -0.0000\nvn 0.5170 0.8558 -0.0193\nvn 0.5735 0.8192 -0.0000\nvn 0.5169 0.8560 -0.0000\nvn 0.6427 0.7661 -0.0000\nvn 0.6548 0.7556 -0.0162\nvn 0.6261 0.7797 -0.0000\nvn 0.7071 0.7071 -0.0000\nvn 0.6548 0.7558 -0.0000\nvn 0.7737 0.6335 -0.0126\nvn 0.8452 0.5344 -0.0000\nvn 0.7736 0.6336 -0.0000\nvn 0.8700 0.4930 -0.0086\nvn 0.8700 0.4931 -0.0000\nvn 0.8450 0.5347 0.0011\nvn 0.7796 0.6219 0.0743\nvn 0.8568 0.4838 0.1784\nvn 0.6989 0.7012 0.1408\nvn 0.6260 0.7798 0.0004\nvn 0.5401 0.8401 0.0510\nvn 0.6046 0.7711 0.1995\nvn 0.4225 0.9064 -0.0000\nvn 0.4443 0.8910 0.0937\nvn 0.3405 0.9315 0.1278\nvn 0.2588 0.9659 -0.0000\nvn 0.2305 0.9611 0.1525\nvn 0.1735 0.9848 -0.0000\nvn 0.8701 0.4926 -0.0172\nvn 0.8702 0.4921 -0.0257\nvn 0.8703 0.4913 -0.0343\nvn 0.8705 0.4904 -0.0428\nvn 0.8707 0.4892 -0.0513\nvn 0.8709 0.4878 -0.0598\nvn 0.8712 0.4862 -0.0682\nvn 0.8715 0.4843 -0.0766\nvn 0.8719 0.4823 -0.0850\nvn 0.8723 0.4800 -0.0932\nvn 0.8727 0.4776 -0.1014\nvn 0.8732 0.4749 -0.1096\nvn 0.8737 0.4720 -0.1177\nvn 0.8742 0.4689 -0.1257\nvn 0.8748 0.4657 -0.1336\nvn 0.8754 0.4622 -0.1414\nvn 0.8761 0.4585 -0.1492\nvn 0.8768 0.4546 -0.1568\nvn 0.8775 0.4506 -0.1643\nvn 0.8782 0.4463 -0.1718\nvn 0.8790 0.4419 -0.1791\nvn 0.8798 0.4373 -0.1863\nvn 0.8807 0.4325 -0.1934\nvn 0.8815 0.4275 -0.2003\nvn 0.8825 0.4223 -0.2071\nvn 0.8834 0.4170 -0.2138\nvn 0.8844 0.4115 -0.2203\nvn 0.8854 0.4059 -0.2267\nvn 0.8864 0.4001 -0.2330\nvn 0.8874 0.3941 -0.2391\nvn 0.8885 0.3880 -0.2450\nvn 0.8896 0.3817 -0.2508\nvn 0.8907 0.3753 -0.2564\nvn 0.8919 0.3687 -0.2618\nvn 0.8931 0.3620 -0.2671\nvn 0.8943 0.3552 -0.2721\nvn 0.8955 0.3483 -0.2771\nvn 0.8968 0.3412 -0.2818\nvn 0.8980 0.3340 -0.2863\nvn 0.8993 0.3267 -0.2907\nvn 0.9006 0.3193 -0.2948\nvn 0.9020 0.3118 -0.2988\nvn 0.9033 0.3042 -0.3026\nvn 0.9047 0.2965 -0.3061\nvn 0.9060 0.2887 -0.3095\nvn 0.9074 0.2808 -0.3126\nvn 0.9088 0.2729 -0.3156\nvn 0.9102 0.2648 -0.3183\nvn 0.9116 0.2568 -0.3209\nvn 0.9131 0.2486 -0.3232\nvn 0.9145 0.2404 -0.3253\nvn 0.9160 0.2321 -0.3272\nvn 0.9161 0.2321 -0.3271\nvn 0.7737 0.6330 -0.0251\nvn 0.7739 0.6322 -0.0377\nvn 0.7741 0.6311 -0.0502\nvn 0.7743 0.6297 -0.0627\nvn 0.7746 0.6279 -0.0751\nvn 0.7750 0.6259 -0.0875\nvn 0.7754 0.6235 -0.0999\nvn 0.7759 0.6208 -0.1122\nvn 0.7764 0.6178 -0.1244\nvn 0.7770 0.6145 -0.1365\nvn 0.7776 0.6109 -0.1485\nvn 0.7783 0.6070 -0.1604\nvn 0.7791 0.6028 -0.1723\nvn 0.7799 0.5983 -0.1840\nvn 0.7807 0.5935 -0.1956\nvn 0.7816 0.5884 -0.2070\nvn 0.7825 0.5830 -0.2184\nvn 0.7835 0.5774 -0.2295\nvn 0.7846 0.5714 -0.2406\nvn 0.7857 0.5652 -0.2514\nvn 0.7868 0.5587 -0.2622\nvn 0.7880 0.5520 -0.2727\nvn 0.7893 0.5449 -0.2830\nvn 0.7906 0.5376 -0.2932\nvn 0.7919 0.5301 -0.3032\nvn 0.7933 0.5223 -0.3130\nvn 0.7947 0.5143 -0.3225\nvn 0.7961 0.5060 -0.3319\nvn 0.7976 0.4975 -0.3410\nvn 0.7992 0.4887 -0.3499\nvn 0.8008 0.4798 -0.3586\nvn 0.8024 0.4706 -0.3671\nvn 0.8040 0.4612 -0.3753\nvn 0.8057 0.4516 -0.3832\nvn 0.8074 0.4418 -0.3909\nvn 0.8092 0.4318 -0.3984\nvn 0.8110 0.4217 -0.4056\nvn 0.8128 0.4113 -0.4125\nvn 0.8147 0.4008 -0.4191\nvn 0.8166 0.3901 -0.4255\nvn 0.8185 0.3793 -0.4316\nvn 0.8204 0.3683 -0.4374\nvn 0.8224 0.3571 -0.4429\nvn 0.8244 0.3458 -0.4481\nvn 0.8264 0.3344 -0.4530\nvn 0.8284 0.3229 -0.4577\nvn 0.8305 0.3113 -0.4620\nvn 0.8325 0.2995 -0.4660\nvn 0.8346 0.2877 -0.4697\nvn 0.8367 0.2758 -0.4731\nvn 0.8388 0.2638 -0.4762\nvn 0.8410 0.2517 -0.4790\nvn 0.8412 0.2516 -0.4787\nvn 0.9130 0.2332 -0.3347\nvn 0.6549 0.7550 -0.0324\nvn 0.6551 0.7540 -0.0485\nvn 0.6554 0.7525 -0.0647\nvn 0.6557 0.7507 -0.0807\nvn 0.6561 0.7485 -0.0968\nvn 0.6566 0.7458 -0.1127\nvn 0.6571 0.7428 -0.1286\nvn 0.6577 0.7393 -0.1444\nvn 0.6584 0.7355 -0.1602\nvn 0.6591 0.7312 -0.1758\nvn 0.6599 0.7266 -0.1912\nvn 0.6608 0.7215 -0.2066\nvn 0.6618 0.7161 -0.2218\nvn 0.6628 0.7103 -0.2369\nvn 0.6639 0.7041 -0.2519\nvn 0.6651 0.6976 -0.2666\nvn 0.6663 0.6906 -0.2812\nvn 0.6676 0.6834 -0.2956\nvn 0.6689 0.6757 -0.3098\nvn 0.6703 0.6677 -0.3238\nvn 0.6718 0.6593 -0.3376\nvn 0.6733 0.6506 -0.3512\nvn 0.6749 0.6416 -0.3645\nvn 0.6766 0.6322 -0.3776\nvn 0.6783 0.6225 -0.3905\nvn 0.6801 0.6124 -0.4030\nvn 0.6819 0.6021 -0.4154\nvn 0.6838 0.5914 -0.4274\nvn 0.6857 0.5804 -0.4392\nvn 0.6877 0.5692 -0.4507\nvn 0.6897 0.5576 -0.4618\nvn 0.6918 0.5458 -0.4727\nvn 0.6939 0.5337 -0.4833\nvn 0.6961 0.5214 -0.4935\nvn 0.6983 0.5088 -0.5035\nvn 0.7006 0.4959 -0.5130\nvn 0.7029 0.4828 -0.5223\nvn 0.7053 0.4695 -0.5312\nvn 0.7077 0.4559 -0.5398\nvn 0.7101 0.4422 -0.5480\nvn 0.7126 0.4282 -0.5558\nvn 0.7151 0.4140 -0.5633\nvn 0.7176 0.3997 -0.5704\nvn 0.7201 0.3852 -0.5771\nvn 0.7227 0.3705 -0.5834\nvn 0.7254 0.3556 -0.5894\nvn 0.7280 0.3407 -0.5950\nvn 0.7307 0.3255 -0.6001\nvn 0.7333 0.3103 -0.6049\nvn 0.7361 0.2949 -0.6093\nvn 0.7388 0.2795 -0.6133\nvn 0.7415 0.2639 -0.6168\nvn 0.7419 0.2639 -0.6165\nvn 0.8346 0.2528 -0.4894\nvn 0.5171 0.8550 -0.0387\nvn 0.5173 0.8538 -0.0580\nvn 0.5176 0.8521 -0.0772\nvn 0.5180 0.8499 -0.0964\nvn 0.5185 0.8472 -0.1156\nvn 0.5190 0.8441 -0.1347\nvn 0.5197 0.8404 -0.1536\nvn 0.5204 0.8363 -0.1725\nvn 0.5212 0.8317 -0.1913\nvn 0.5221 0.8266 -0.2099\nvn 0.5231 0.8211 -0.2284\nvn 0.5242 0.8151 -0.2468\nvn 0.5253 0.8086 -0.2650\nvn 0.5265 0.8017 -0.2830\nvn 0.5278 0.7943 -0.3008\nvn 0.5292 0.7865 -0.3185\nvn 0.5307 0.7782 -0.3359\nvn 0.5322 0.7695 -0.3531\nvn 0.5338 0.7603 -0.3701\nvn 0.5355 0.7508 -0.3868\nvn 0.5373 0.7408 -0.4033\nvn 0.5391 0.7304 -0.4195\nvn 0.5410 0.7195 -0.4354\nvn 0.5430 0.7083 -0.4510\nvn 0.5450 0.6967 -0.4664\nvn 0.5471 0.6847 -0.4814\nvn 0.5493 0.6724 -0.4961\nvn 0.5516 0.6596 -0.5105\nvn 0.5539 0.6466 -0.5246\nvn 0.5562 0.6331 -0.5383\nvn 0.5587 0.6193 -0.5516\nvn 0.5612 0.6052 -0.5646\nvn 0.5637 0.5908 -0.5773\nvn 0.5663 0.5760 -0.5895\nvn 0.5690 0.5609 -0.6014\nvn 0.5717 0.5456 -0.6128\nvn 0.5744 0.5299 -0.6239\nvn 0.5772 0.5140 -0.6345\nvn 0.5801 0.4978 -0.6447\nvn 0.5830 0.4814 -0.6545\nvn 0.5859 0.4647 -0.6639\nvn 0.5889 0.4478 -0.6728\nvn 0.5919 0.4307 -0.6813\nvn 0.5950 0.4133 -0.6893\nvn 0.5981 0.3958 -0.6969\nvn 0.6012 0.3780 -0.7040\nvn 0.6044 0.3601 -0.7106\nvn 0.6076 0.3421 -0.7168\nvn 0.6108 0.3239 -0.7225\nvn 0.6140 0.3055 -0.7278\nvn 0.6173 0.2870 -0.7325\nvn 0.6205 0.2684 -0.7368\nvn 0.6211 0.2684 -0.7363\nvn 0.7309 0.2647 -0.6291\nvn 0.3643 0.9303 -0.0438\nvn 0.3645 0.9289 -0.0657\nvn 0.3649 0.9269 -0.0876\nvn 0.3653 0.9244 -0.1093\nvn 0.3658 0.9214 -0.1310\nvn 0.3665 0.9178 -0.1527\nvn 0.3672 0.9137 -0.1742\nvn 0.3680 0.9090 -0.1956\nvn 0.3689 0.9038 -0.2169\nvn 0.3700 0.8980 -0.2380\nvn 0.3711 0.8918 -0.2590\nvn 0.3723 0.8849 -0.2798\nvn 0.3736 0.8776 -0.3004\nvn 0.3749 0.8698 -0.3209\nvn 0.3764 0.8614 -0.3411\nvn 0.3780 0.8525 -0.3611\nvn 0.3796 0.8431 -0.3808\nvn 0.3814 0.8332 -0.4003\nvn 0.3832 0.8229 -0.4196\nvn 0.3851 0.8120 -0.4385\nvn 0.3871 0.8007 -0.4572\nvn 0.3892 0.7889 -0.4756\nvn 0.3914 0.7766 -0.4936\nvn 0.3936 0.7639 -0.5114\nvn 0.3959 0.7508 -0.5288\nvn 0.3983 0.7372 -0.5458\nvn 0.4008 0.7232 -0.5625\nvn 0.4033 0.7087 -0.5788\nvn 0.4060 0.6939 -0.5947\nvn 0.4086 0.6786 -0.6103\nvn 0.4114 0.6630 -0.6254\nvn 0.4142 0.6470 -0.6402\nvn 0.4171 0.6306 -0.6545\nvn 0.4201 0.6139 -0.6683\nvn 0.4231 0.5968 -0.6818\nvn 0.4261 0.5794 -0.6948\nvn 0.4293 0.5617 -0.7073\nvn 0.4325 0.5436 -0.7194\nvn 0.4357 0.5253 -0.7309\nvn 0.4390 0.5066 -0.7420\nvn 0.4423 0.4877 -0.7527\nvn 0.4457 0.4685 -0.7628\nvn 0.4491 0.4491 -0.7724\nvn 0.4526 0.4294 -0.7815\nvn 0.4561 0.4096 -0.7901\nvn 0.4596 0.3895 -0.7982\nvn 0.4632 0.3692 -0.8057\nvn 0.4668 0.3487 -0.8127\nvn 0.4705 0.3280 -0.8192\nvn 0.4741 0.3072 -0.8251\nvn 0.4778 0.2863 -0.8305\nvn 0.4815 0.2652 -0.8353\nvn 0.4823 0.2652 -0.8349\nvn 0.6048 0.2685 -0.7497\nvn 0.2009 0.9785 -0.0477\nvn 0.2011 0.9769 -0.0716\nvn 0.2015 0.9748 -0.0953\nvn 0.2020 0.9721 -0.1191\nvn 0.2026 0.9688 -0.1427\nvn 0.2032 0.9649 -0.1662\nvn 0.2040 0.9604 -0.1897\nvn 0.2049 0.9553 -0.2130\nvn 0.2059 0.9496 -0.2362\nvn 0.2070 0.9434 -0.2592\nvn 0.2082 0.9365 -0.2820\nvn 0.2096 0.9291 -0.3047\nvn 0.2110 0.9211 -0.3271\nvn 0.2125 0.9126 -0.3494\nvn 0.2141 0.9035 -0.3714\nvn 0.2158 0.8938 -0.3932\nvn 0.2176 0.8836 -0.4147\nvn 0.2195 0.8728 -0.4359\nvn 0.2215 0.8615 -0.4569\nvn 0.2236 0.8497 -0.4775\nvn 0.2257 0.8374 -0.4978\nvn 0.2280 0.8245 -0.5179\nvn 0.2303 0.8112 -0.5375\nvn 0.2328 0.7973 -0.5568\nvn 0.2353 0.7830 -0.5758\nvn 0.2379 0.7682 -0.5943\nvn 0.2406 0.7529 -0.6125\nvn 0.2434 0.7372 -0.6303\nvn 0.2462 0.7211 -0.6476\nvn 0.2492 0.7045 -0.6646\nvn 0.2522 0.6874 -0.6811\nvn 0.2552 0.6700 -0.6971\nvn 0.2584 0.6522 -0.7127\nvn 0.2616 0.6340 -0.7278\nvn 0.2649 0.6154 -0.7424\nvn 0.2682 0.5964 -0.7566\nvn 0.2716 0.5771 -0.7702\nvn 0.2751 0.5574 -0.7833\nvn 0.2786 0.5374 -0.7959\nvn 0.2822 0.5171 -0.8080\nvn 0.2858 0.4966 -0.8196\nvn 0.2895 0.4757 -0.8306\nvn 0.2932 0.4545 -0.8411\nvn 0.2970 0.4331 -0.8510\nvn 0.3008 0.4115 -0.8604\nvn 0.3047 0.3896 -0.8691\nvn 0.3086 0.3675 -0.8773\nvn 0.3125 0.3452 -0.8850\nvn 0.3165 0.3227 -0.8920\nvn 0.3205 0.3000 -0.8985\nvn 0.3245 0.2772 -0.9044\nvn 0.3285 0.2543 -0.9096\nvn 0.3295 0.2543 -0.9093\nvn 0.4604 0.2641 -0.8475\nvn 0.1672 0.2361 -0.9572\nvn 0.3019 0.2517 -0.9195\nvn 0.3060 0.2283 -0.9242\nvn 0.4642 0.2425 -0.8519\nvn 0.6082 0.2494 -0.7536\nvn 0.7337 0.2486 -0.6324\nvn 0.6211 0.2684 -0.7364\nvn 0.8368 0.2403 -0.4919\nvn 0.9145 0.2247 -0.3364\nvn 0.9160 0.2161 -0.3379\nvn 0.9175 0.2075 -0.3392\nvn 0.9190 0.1989 -0.3403\nvn 0.9206 0.1902 -0.3411\nvn 0.9221 0.1815 -0.3417\nvn 0.9236 0.1729 -0.3420\nvn 0.9252 0.1642 -0.3422\nvn 0.9267 0.1555 -0.3421\nvn 0.9282 0.1468 -0.3418\nvn 0.9298 0.1381 -0.3412\nvn 0.9313 0.1294 -0.3405\nvn 0.9328 0.1208 -0.3395\nvn 0.9344 0.1122 -0.3382\nvn 0.9359 0.1036 -0.3368\nvn 0.9374 0.0951 -0.3351\nvn 0.9389 0.0866 -0.3332\nvn 0.9404 0.0781 -0.3311\nvn 0.9418 0.0697 -0.3288\nvn 0.9433 0.0614 -0.3262\nvn 0.9448 0.0531 -0.3234\nvn 0.9462 0.0450 -0.3204\nvn 0.9476 0.0369 -0.3172\nvn 0.9490 0.0288 -0.3138\nvn 0.9504 0.0209 -0.3102\nvn 0.9518 0.0131 -0.3064\nvn 0.9532 0.0053 -0.3023\nvn 0.9545 -0.0023 -0.2981\nvn 0.9559 -0.0098 -0.2937\nvn 0.9572 -0.0172 -0.2890\nvn 0.9584 -0.0245 -0.2842\nvn 0.9597 -0.0317 -0.2792\nvn 0.9610 -0.0387 -0.2740\nvn 0.9622 -0.0456 -0.2686\nvn 0.9634 -0.0523 -0.2631\nvn 0.9645 -0.0589 -0.2573\nvn 0.9657 -0.0654 -0.2514\nvn 0.9668 -0.0717 -0.2454\nvn 0.9679 -0.0779 -0.2391\nvn 0.9689 -0.0839 -0.2327\nvn 0.9699 -0.0897 -0.2262\nvn 0.9709 -0.0954 -0.2195\nvn 0.9719 -0.1009 -0.2126\nvn 0.9728 -0.1062 -0.2057\nvn 0.9738 -0.1113 -0.1985\nvn 0.9746 -0.1163 -0.1913\nvn 0.9755 -0.1210 -0.1839\nvn 0.9763 -0.1256 -0.1764\nvn 0.9770 -0.1300 -0.1688\nvn 0.9778 -0.1342 -0.1610\nvn 0.9785 -0.1382 -0.1532\nvn 0.9792 -0.1419 -0.1453\nvn 0.9798 -0.1455 -0.1372\nvn 0.9804 -0.1489 -0.1291\nvn 0.9809 -0.1521 -0.1209\nvn 0.9815 -0.1551 -0.1126\nvn 0.9820 -0.1578 -0.1042\nvn 0.9824 -0.1604 -0.0958\nvn 0.9828 -0.1627 -0.0873\nvn 0.9832 -0.1648 -0.0787\nvn 0.9835 -0.1667 -0.0701\nvn 0.9838 -0.1683 -0.0614\nvn 0.9841 -0.1698 -0.0527\nvn 0.9843 -0.1710 -0.0440\nvn 0.9845 -0.1720 -0.0352\nvn 0.9846 -0.1728 -0.0264\nvn 0.9847 -0.1734 -0.0176\nvn 0.9848 -0.1737 -0.0088\nvn 0.8390 0.2278 -0.4941\nvn 0.8413 0.2152 -0.4959\nvn 0.8435 0.2026 -0.4975\nvn 0.8457 0.1899 -0.4987\nvn 0.8480 0.1772 -0.4996\nvn 0.8502 0.1645 -0.5001\nvn 0.8524 0.1518 -0.5003\nvn 0.8547 0.1391 -0.5002\nvn 0.8569 0.1264 -0.4997\nvn 0.8592 0.1137 -0.4989\nvn 0.8614 0.1010 -0.4978\nvn 0.8636 0.0884 -0.4963\nvn 0.8658 0.0758 -0.4945\nvn 0.8681 0.0632 -0.4924\nvn 0.8703 0.0508 -0.4900\nvn 0.8724 0.0383 -0.4872\nvn 0.8746 0.0260 -0.4841\nvn 0.8768 0.0137 -0.4807\nvn 0.8789 0.0016 -0.4769\nvn 0.8811 -0.0105 -0.4729\nvn 0.8832 -0.0225 -0.4685\nvn 0.8853 -0.0343 -0.4638\nvn 0.8873 -0.0460 -0.4588\nvn 0.8894 -0.0576 -0.4535\nvn 0.8914 -0.0691 -0.4479\nvn 0.8934 -0.0804 -0.4420\nvn 0.8954 -0.0916 -0.4358\nvn 0.8973 -0.1026 -0.4294\nvn 0.8992 -0.1134 -0.4226\nvn 0.9011 -0.1240 -0.4155\nvn 0.9029 -0.1345 -0.4082\nvn 0.9047 -0.1448 -0.4006\nvn 0.9065 -0.1549 -0.3928\nvn 0.9083 -0.1647 -0.3846\nvn 0.9100 -0.1744 -0.3762\nvn 0.9116 -0.1838 -0.3676\nvn 0.9133 -0.1931 -0.3587\nvn 0.9148 -0.2021 -0.3496\nvn 0.9164 -0.2108 -0.3403\nvn 0.9179 -0.2194 -0.3307\nvn 0.9194 -0.2276 -0.3209\nvn 0.9208 -0.2357 -0.3109\nvn 0.9221 -0.2434 -0.3007\nvn 0.9235 -0.2509 -0.2903\nvn 0.9247 -0.2582 -0.2797\nvn 0.9260 -0.2651 -0.2689\nvn 0.9271 -0.2718 -0.2579\nvn 0.9283 -0.2782 -0.2468\nvn 0.9293 -0.2844 -0.2355\nvn 0.9304 -0.2902 -0.2240\nvn 0.9313 -0.2958 -0.2124\nvn 0.9323 -0.3010 -0.2006\nvn 0.9332 -0.3059 -0.1887\nvn 0.9340 -0.3106 -0.1767\nvn 0.9347 -0.3149 -0.1646\nvn 0.9354 -0.3189 -0.1524\nvn 0.9361 -0.3227 -0.1400\nvn 0.9367 -0.3261 -0.1276\nvn 0.9372 -0.3291 -0.1151\nvn 0.9377 -0.3319 -0.1025\nvn 0.9382 -0.3343 -0.0898\nvn 0.9385 -0.3365 -0.0771\nvn 0.9388 -0.3383 -0.0643\nvn 0.9391 -0.3397 -0.0515\nvn 0.9393 -0.3409 -0.0387\nvn 0.9395 -0.3417 -0.0258\nvn 0.9395 -0.3422 -0.0129\nvn 0.7365 0.2325 -0.6352\nvn 0.7394 0.2163 -0.6376\nvn 0.7422 0.2001 -0.6396\nvn 0.7451 0.1838 -0.6411\nvn 0.7480 0.1675 -0.6422\nvn 0.7509 0.1512 -0.6429\nvn 0.7537 0.1348 -0.6432\nvn 0.7566 0.1185 -0.6430\nvn 0.7595 0.1022 -0.6424\nvn 0.7624 0.0858 -0.6414\nvn 0.7653 0.0695 -0.6400\nvn 0.7681 0.0533 -0.6381\nvn 0.7710 0.0371 -0.6358\nvn 0.7738 0.0210 -0.6331\nvn 0.7767 0.0049 -0.6299\nvn 0.7795 -0.0110 -0.6263\nvn 0.7823 -0.0269 -0.6224\nvn 0.7850 -0.0427 -0.6180\nvn 0.7878 -0.0583 -0.6132\nvn 0.7905 -0.0738 -0.6079\nvn 0.7933 -0.0892 -0.6023\nvn 0.7959 -0.1044 -0.5963\nvn 0.7986 -0.1195 -0.5899\nvn 0.8012 -0.1344 -0.5831\nvn 0.8038 -0.1492 -0.5759\nvn 0.8064 -0.1637 -0.5683\nvn 0.8089 -0.1780 -0.5603\nvn 0.8114 -0.1922 -0.5520\nvn 0.8139 -0.2061 -0.5433\nvn 0.8163 -0.2198 -0.5342\nvn 0.8186 -0.2332 -0.5248\nvn 0.8210 -0.2464 -0.5150\nvn 0.8233 -0.2594 -0.5049\nvn 0.8255 -0.2721 -0.4945\nvn 0.8277 -0.2845 -0.4837\nvn 0.8298 -0.2967 -0.4726\nvn 0.8319 -0.3085 -0.4612\nvn 0.8340 -0.3201 -0.4495\nvn 0.8359 -0.3314 -0.4375\nvn 0.8379 -0.3423 -0.4251\nvn 0.8398 -0.3530 -0.4126\nvn 0.8416 -0.3633 -0.3997\nvn 0.8433 -0.3733 -0.3866\nvn 0.8450 -0.3829 -0.3732\nvn 0.8467 -0.3922 -0.3595\nvn 0.8483 -0.4012 -0.3457\nvn 0.8498 -0.4098 -0.3316\nvn 0.8513 -0.4180 -0.3172\nvn 0.8526 -0.4259 -0.3027\nvn 0.8539 -0.4334 -0.2880\nvn 0.8552 -0.4405 -0.2730\nvn 0.8564 -0.4473 -0.2579\nvn 0.8575 -0.4536 -0.2426\nvn 0.8586 -0.4596 -0.2272\nvn 0.8595 -0.4652 -0.2116\nvn 0.8605 -0.4704 -0.1959\nvn 0.8613 -0.4751 -0.1800\nvn 0.8621 -0.4795 -0.1640\nvn 0.8628 -0.4835 -0.1479\nvn 0.8634 -0.4870 -0.1318\nvn 0.8639 -0.4902 -0.1155\nvn 0.8644 -0.4929 -0.0991\nvn 0.8648 -0.4952 -0.0827\nvn 0.8652 -0.4971 -0.0662\nvn 0.8654 -0.4986 -0.0497\nvn 0.8656 -0.4996 -0.0332\nvn 0.8657 -0.5002 -0.0166\nvn 0.6116 0.2302 -0.7570\nvn 0.6150 0.2109 -0.7598\nvn 0.6184 0.1915 -0.7622\nvn 0.6218 0.1721 -0.7640\nvn 0.6252 0.1527 -0.7654\nvn 0.6287 0.1332 -0.7662\nvn 0.6321 0.1138 -0.7665\nvn 0.6355 0.0943 -0.7663\nvn 0.6390 0.0748 -0.7656\nvn 0.6424 0.0554 -0.7644\nvn 0.6458 0.0360 -0.7626\nvn 0.6492 0.0166 -0.7604\nvn 0.6526 -0.0027 -0.7577\nvn 0.6560 -0.0219 -0.7544\nvn 0.6594 -0.0410 -0.7507\nvn 0.6628 -0.0601 -0.7464\nvn 0.6661 -0.0790 -0.7417\nvn 0.6694 -0.0978 -0.7364\nvn 0.6727 -0.1164 -0.7307\nvn 0.6759 -0.1349 -0.7245\nvn 0.6792 -0.1532 -0.7178\nvn 0.6824 -0.1714 -0.7106\nvn 0.6855 -0.1894 -0.7030\nvn 0.6887 -0.2071 -0.6948\nvn 0.6918 -0.2247 -0.6863\nvn 0.6948 -0.2420 -0.6772\nvn 0.6978 -0.2591 -0.6677\nvn 0.7008 -0.2759 -0.6578\nvn 0.7037 -0.2925 -0.6474\nvn 0.7066 -0.3088 -0.6366\nvn 0.7094 -0.3249 -0.6254\nvn 0.7122 -0.3406 -0.6138\nvn 0.7149 -0.3561 -0.6017\nvn 0.7176 -0.3712 -0.5893\nvn 0.7202 -0.3860 -0.5764\nvn 0.7228 -0.4005 -0.5632\nvn 0.7253 -0.4146 -0.5496\nvn 0.7277 -0.4284 -0.5356\nvn 0.7301 -0.4418 -0.5213\nvn 0.7324 -0.4549 -0.5067\nvn 0.7346 -0.4676 -0.4916\nvn 0.7368 -0.4799 -0.4763\nvn 0.7389 -0.4918 -0.4607\nvn 0.7409 -0.5033 -0.4447\nvn 0.7429 -0.5144 -0.4285\nvn 0.7448 -0.5250 -0.4119\nvn 0.7465 -0.5353 -0.3951\nvn 0.7483 -0.5451 -0.3781\nvn 0.7499 -0.5545 -0.3607\nvn 0.7515 -0.5634 -0.3432\nvn 0.7530 -0.5719 -0.3254\nvn 0.7544 -0.5800 -0.3074\nvn 0.7558 -0.5875 -0.2892\nvn 0.7570 -0.5947 -0.2708\nvn 0.7582 -0.6013 -0.2522\nvn 0.7593 -0.6075 -0.2334\nvn 0.7603 -0.6132 -0.2145\nvn 0.7612 -0.6184 -0.1955\nvn 0.7620 -0.6231 -0.1763\nvn 0.7628 -0.6273 -0.1570\nvn 0.7634 -0.6311 -0.1376\nvn 0.7640 -0.6343 -0.1181\nvn 0.7645 -0.6371 -0.0986\nvn 0.7649 -0.6393 -0.0789\nvn 0.7652 -0.6411 -0.0592\nvn 0.7654 -0.6423 -0.0395\nvn 0.7656 -0.6431 -0.0198\nvn 0.4680 0.2208 -0.8557\nvn 0.4719 0.1990 -0.8589\nvn 0.4757 0.1771 -0.8616\nvn 0.4796 0.1552 -0.8637\nvn 0.4835 0.1332 -0.8652\nvn 0.4873 0.1112 -0.8661\nvn 0.4912 0.0892 -0.8665\nvn 0.4951 0.0672 -0.8662\nvn 0.4990 0.0452 -0.8654\nvn 0.5029 0.0232 -0.8640\nvn 0.5067 0.0013 -0.8621\nvn 0.5106 -0.0206 -0.8596\nvn 0.5144 -0.0424 -0.8565\nvn 0.5183 -0.0642 -0.8528\nvn 0.5221 -0.0858 -0.8486\nvn 0.5259 -0.1073 -0.8438\nvn 0.5296 -0.1287 -0.8384\nvn 0.5334 -0.1499 -0.8325\nvn 0.5371 -0.1710 -0.8260\nvn 0.5408 -0.1919 -0.8190\nvn 0.5444 -0.2126 -0.8114\nvn 0.5481 -0.2331 -0.8033\nvn 0.5516 -0.2534 -0.7947\nvn 0.5552 -0.2735 -0.7855\nvn 0.5587 -0.2934 -0.7758\nvn 0.5621 -0.3129 -0.7656\nvn 0.5655 -0.3323 -0.7548\nvn 0.5689 -0.3513 -0.7436\nvn 0.5722 -0.3701 -0.7319\nvn 0.5754 -0.3885 -0.7197\nvn 0.5786 -0.4066 -0.7070\nvn 0.5818 -0.4244 -0.6938\nvn 0.5849 -0.4419 -0.6802\nvn 0.5879 -0.4590 -0.6661\nvn 0.5908 -0.4757 -0.6516\nvn 0.5937 -0.4921 -0.6367\nvn 0.5965 -0.5081 -0.6213\nvn 0.5993 -0.5237 -0.6055\nvn 0.6020 -0.5388 -0.5893\nvn 0.6046 -0.5536 -0.5727\nvn 0.6071 -0.5679 -0.5558\nvn 0.6095 -0.5818 -0.5384\nvn 0.6119 -0.5953 -0.5207\nvn 0.6142 -0.6083 -0.5027\nvn 0.6164 -0.6208 -0.4843\nvn 0.6185 -0.6329 -0.4657\nvn 0.6206 -0.6445 -0.4467\nvn 0.6225 -0.6556 -0.4274\nvn 0.6244 -0.6662 -0.4078\nvn 0.6262 -0.6763 -0.3879\nvn 0.6279 -0.6859 -0.3678\nvn 0.6295 -0.6950 -0.3475\nvn 0.6310 -0.7036 -0.3269\nvn 0.6324 -0.7116 -0.3061\nvn 0.6337 -0.7191 -0.2851\nvn 0.6350 -0.7261 -0.2639\nvn 0.6361 -0.7325 -0.2425\nvn 0.6371 -0.7384 -0.2210\nvn 0.6381 -0.7437 -0.1993\nvn 0.6389 -0.7485 -0.1775\nvn 0.6397 -0.7527 -0.1556\nvn 0.6403 -0.7564 -0.1335\nvn 0.6409 -0.7595 -0.1114\nvn 0.6413 -0.7621 -0.0892\nvn 0.6417 -0.7641 -0.0670\nvn 0.6419 -0.7655 -0.0447\nvn 0.6421 -0.7663 -0.0223\nvn 0.3102 0.2047 -0.9284\nvn 0.3144 0.1811 -0.9319\nvn 0.3186 0.1574 -0.9347\nvn 0.3227 0.1336 -0.9370\nvn 0.3270 0.1097 -0.9386\nvn 0.3312 0.0858 -0.9397\nvn 0.3354 0.0620 -0.9400\nvn 0.3396 0.0381 -0.9398\nvn 0.3438 0.0142 -0.9389\nvn 0.3480 -0.0097 -0.9374\nvn 0.3522 -0.0335 -0.9353\nvn 0.3564 -0.0572 -0.9326\nvn 0.3606 -0.0809 -0.9292\nvn 0.3647 -0.1044 -0.9252\nvn 0.3688 -0.1279 -0.9207\nvn 0.3730 -0.1512 -0.9154\nvn 0.3771 -0.1744 -0.9096\nvn 0.3811 -0.1975 -0.9032\nvn 0.3851 -0.2203 -0.8962\nvn 0.3891 -0.2430 -0.8886\nvn 0.3931 -0.2655 -0.8803\nvn 0.3970 -0.2878 -0.8715\nvn 0.4009 -0.3098 -0.8621\nvn 0.4048 -0.3316 -0.8522\nvn 0.4086 -0.3531 -0.8417\nvn 0.4123 -0.3744 -0.8306\nvn 0.4160 -0.3953 -0.8189\nvn 0.4196 -0.4160 -0.8068\nvn 0.4232 -0.4363 -0.7940\nvn 0.4268 -0.4563 -0.7808\nvn 0.4302 -0.4760 -0.7670\nvn 0.4336 -0.4953 -0.7527\nvn 0.4370 -0.5143 -0.7380\nvn 0.4402 -0.5328 -0.7227\nvn 0.4434 -0.5510 -0.7070\nvn 0.4466 -0.5687 -0.6907\nvn 0.4496 -0.5861 -0.6741\nvn 0.4526 -0.6030 -0.6569\nvn 0.4555 -0.6194 -0.6394\nvn 0.4583 -0.6355 -0.6214\nvn 0.4611 -0.6510 -0.6030\nvn 0.4637 -0.6661 -0.5842\nvn 0.4663 -0.6807 -0.5650\nvn 0.4688 -0.6948 -0.5454\nvn 0.4712 -0.7084 -0.5255\nvn 0.4735 -0.7215 -0.5052\nvn 0.4757 -0.7341 -0.4846\nvn 0.4779 -0.7461 -0.4637\nvn 0.4799 -0.7576 -0.4424\nvn 0.4818 -0.7686 -0.4209\nvn 0.4837 -0.7790 -0.3991\nvn 0.4854 -0.7889 -0.3770\nvn 0.4870 -0.7982 -0.3546\nvn 0.4886 -0.8069 -0.3321\nvn 0.4900 -0.8150 -0.3093\nvn 0.4913 -0.8226 -0.2863\nvn 0.4926 -0.8296 -0.2631\nvn 0.4937 -0.8359 -0.2397\nvn 0.4947 -0.8417 -0.2162\nvn 0.4956 -0.8469 -0.1926\nvn 0.4964 -0.8515 -0.1688\nvn 0.4971 -0.8555 -0.1449\nvn 0.4977 -0.8589 -0.1209\nvn 0.4982 -0.8616 -0.0968\nvn 0.4986 -0.8638 -0.0727\nvn 0.4989 -0.8653 -0.0485\nvn 0.4990 -0.8662 -0.0242\nvn 0.1781 -0.0172 -0.9839\nvn 0.1826 -0.0422 -0.9823\nvn 0.1869 -0.0672 -0.9801\nvn 0.1913 -0.0921 -0.9772\nvn 0.1957 -0.1169 -0.9737\nvn 0.2001 -0.1415 -0.9695\nvn 0.2044 -0.1661 -0.9647\nvn 0.2087 -0.1906 -0.9592\nvn 0.2130 -0.2149 -0.9531\nvn 0.2173 -0.2390 -0.9464\nvn 0.2215 -0.2630 -0.9390\nvn 0.2257 -0.2868 -0.9310\nvn 0.2298 -0.3103 -0.9224\nvn 0.2339 -0.3336 -0.9132\nvn 0.2380 -0.3567 -0.9034\nvn 0.2420 -0.3796 -0.8929\nvn 0.2460 -0.4021 -0.8819\nvn 0.2499 -0.4244 -0.8703\nvn 0.2538 -0.4463 -0.8581\nvn 0.2576 -0.4680 -0.8454\nvn 0.2614 -0.4893 -0.8320\nvn 0.2651 -0.5103 -0.8181\nvn 0.2687 -0.5309 -0.8037\nvn 0.2723 -0.5511 -0.7888\nvn 0.2758 -0.5710 -0.7733\nvn 0.2792 -0.5904 -0.7573\nvn 0.2826 -0.6094 -0.7408\nvn 0.2858 -0.6280 -0.7238\nvn 0.2891 -0.6462 -0.7063\nvn 0.2922 -0.6639 -0.6884\nvn 0.2952 -0.6812 -0.6699\nvn 0.2982 -0.6980 -0.6511\nvn 0.3011 -0.7143 -0.6318\nvn 0.3038 -0.7301 -0.6121\nvn 0.3065 -0.7454 -0.5920\nvn 0.3091 -0.7601 -0.5715\nvn 0.3117 -0.7744 -0.5506\nvn 0.3141 -0.7881 -0.5294\nvn 0.3164 -0.8013 -0.5078\nvn 0.3186 -0.8139 -0.4858\nvn 0.3207 -0.8260 -0.4636\nvn 0.3228 -0.8375 -0.4410\nvn 0.3247 -0.8484 -0.4181\nvn 0.3265 -0.8587 -0.3950\nvn 0.3282 -0.8684 -0.3716\nvn 0.3298 -0.8776 -0.3480\nvn 0.3313 -0.8861 -0.3241\nvn 0.3327 -0.8940 -0.3000\nvn 0.3340 -0.9013 -0.2757\nvn 0.3352 -0.9080 -0.2512\nvn 0.3363 -0.9141 -0.2266\nvn 0.3372 -0.9195 -0.2018\nvn 0.3381 -0.9243 -0.1768\nvn 0.3388 -0.9285 -0.1518\nvn 0.3395 -0.9320 -0.1267\nvn 0.3400 -0.9349 -0.1014\nvn 0.3404 -0.9372 -0.0761\nvn 0.3406 -0.9388 -0.0508\nvn 0.3408 -0.9398 -0.0254\nvn 0.0000 0.9659 0.2588\nvn 0.0000 0.9400 0.3412\nvn 0.1309 0.9330 0.3353\nvn 0.0000 0.9063 0.4226\nvn 0.0000 0.8664 0.4994\nvn 0.1479 0.8578 0.4922\nvn 0.0000 0.8192 0.5736\nvn 0.0000 0.7664 0.6424\nvn 0.1448 0.7583 0.6356\nvn 0.0000 0.7071 0.7071\nvn 0.0000 0.6431 0.7658\nvn 0.1544 0.6337 0.7580\nvn 0.0000 0.7389 0.6738\nvn 0.0000 0.7661 0.6428\nvn 0.0000 0.5002 0.8659\nvn 0.1363 0.4925 0.8596\nvn 0.0000 0.4536 0.8912\nvn -0.1064 0.3042 0.9466\nvn -0.0009 0.4539 0.8911\nvn -0.0736 0.5573 0.8270\nvn -0.1892 0.4220 0.8866\nvn -0.1402 0.6520 0.7452\nvn -0.0005 0.7390 0.6737\nvn 0.0000 0.8192 0.5735\nvn -0.0511 0.8110 0.5828\nvn -0.1992 0.7358 0.6473\nvn -0.0940 0.8720 0.4805\nvn -0.1282 0.9206 0.3688\nvn -0.1531 0.9561 0.2500\nvn -0.1576 0.2262 0.9613\nvn -0.1638 0.2281 0.9598\nvn 0.0000 -0.0001 1.0000\nvn -0.3109 0.2723 0.9106\nvn -0.3170 0.2740 0.9080\nvn 0.0000 -0.1389 0.9903\nvn 0.0000 -0.1676 0.9859\nvn -0.2948 0.2677 0.9173\nvn -0.4553 0.3107 0.8343\nvn -0.4505 0.3096 0.8374\nvn 0.0000 -0.1737 0.9848\nvn 0.0000 -0.3181 0.9481\nvn -0.5521 0.3332 0.7643\nvn -0.5642 0.3358 0.7542\nvn 0.0000 -0.3420 0.9397\nvn 0.0000 -0.4503 0.8929\nvn -0.5869 0.3405 0.7346\nvn -0.6598 0.3540 0.6628\nvn 0.0000 -0.5000 0.8660\nvn 0.0000 -0.5653 0.8249\nvn 0.0000 -0.4445 0.8958\nvn -0.7020 0.3606 0.6141\nvn -0.7388 0.3654 0.5662\nvn 0.0000 -0.6428 0.7660\nvn 0.0000 -0.6640 0.7477\nvn -0.7973 0.3706 0.4764\nvn -0.8026 0.3708 0.4673\nvn 0.0000 -0.7357 0.6773\nvn 0.0000 -0.7473 0.6645\nvn -0.7789 0.3693 0.5069\nvn -0.8367 0.3716 0.4022\nvn -0.8522 0.3713 0.3687\nvn 0.0000 -0.7661 0.6428\nvn 0.0000 -0.8160 0.5780\nvn -0.8702 0.3701 0.3252\nvn -0.8892 0.3676 0.2723\nvn 0.0000 -0.8192 0.5735\nvn 0.0000 -0.8713 0.4907\nvn -0.8976 0.3659 0.2459\nvn -0.9154 0.3605 0.1789\nvn 0.0000 -0.9063 0.4226\nvn 0.0000 -0.9149 0.4038\nvn 0.0000 -0.8660 0.5000\nvn -0.9186 0.3592 0.1649\nvn 0.0000 -0.9397 0.3420\nvn -0.9186 0.3592 0.1648\nvn -0.8976 0.3660 0.2459\nvn -0.8450 0.4646 0.2647\nvn -0.8170 0.4249 0.3898\nvn -0.7974 0.3706 0.4763\nvn -0.7787 0.3704 0.5063\nvn -0.6681 0.4989 0.5520\nvn -0.7110 0.5599 0.4255\nvn -0.6147 0.4230 0.6657\nvn -0.5869 0.3404 0.7346\nvn -0.5521 0.3339 0.7640\nvn -0.4374 0.4706 0.7663\nvn -0.4553 0.3107 0.8344\nvn -0.3693 0.3737 0.8508\nvn -0.2948 0.2678 0.9173\nvn -0.1576 0.2262 0.9612\nvn 0.0977 0.0314 0.9947\nvn 0.0002 -0.1390 0.9903\nvn 0.0911 -0.2683 0.9590\nvn 0.1949 -0.1068 0.9750\nvn 0.0010 -0.4448 0.8956\nvn 0.0847 -0.5639 0.8215\nvn 0.1779 -0.3918 0.9027\nvn 0.1601 -0.6711 0.7239\nvn 0.0014 -0.7361 0.6769\nvn 0.0000 -0.7661 0.6427\nvn 0.0618 -0.8220 0.5661\nvn 0.2250 -0.7633 0.6056\nvn 0.0000 -0.9064 0.4225\nvn 0.1107 -0.8915 0.4393\nvn 0.1467 -0.9426 0.3000\nvn 0.3018 0.0593 0.9515\nvn 0.2878 0.0650 0.9555\nvn 0.4427 -0.0010 0.8967\nvn 0.5719 -0.0613 0.8180\nvn 0.5842 -0.0674 0.8088\nvn 0.7362 -0.1482 0.6603\nvn 0.6859 -0.1199 0.7178\nvn 0.8220 -0.2015 0.5326\nvn 0.7817 -0.1754 0.5984\nvn 0.8860 -0.2495 0.3909\nvn 0.8568 -0.2262 0.4633\nvn 0.9093 -0.2711 0.3158\nvn 0.9376 -0.3087 0.1600\nvn 0.9265 -0.2909 0.2387\nvn 0.9376 -0.3088 0.1600\nvn 0.9265 -0.2909 0.2388\nvn 0.8496 -0.4454 0.2826\nvn 0.8174 -0.3997 0.4149\nvn 0.8568 -0.2263 0.4633\nvn 0.7735 -0.3373 0.5366\nvn 0.7817 -0.1754 0.5985\nvn 0.7191 -0.2598 0.6445\nvn 0.7363 -0.1482 0.6603\nvn 0.6554 -0.1693 0.7361\nvn 0.5842 -0.0680 0.8088\nvn 0.4589 -0.1786 0.8703\nvn 0.5364 -0.2887 0.7931\nvn 0.3754 -0.0598 0.9249\nvn 0.2878 0.0647 0.9555\nvn 0.0000 -0.1741 0.9847\nvn 0.0000 -0.0836 0.9965\nvn 0.0000 -0.3320 0.9433\nvn 0.0000 -0.5007 0.8656\nvn 0.0000 -0.3426 0.9395\nvn 0.0000 -0.6436 0.7654\nvn 0.0000 -0.5384 0.8427\nvn 0.0000 -0.7668 0.6418\nvn 0.0000 -0.6959 0.7182\nvn 0.0000 -0.8093 0.5874\nvn 0.0000 -0.8884 0.4591\nvn 0.0000 -0.8668 0.4987\nvn 0.0000 -0.9402 0.3405\nvn 0.0003 -0.0837 0.9965\nvn 0.0983 -0.2244 0.9695\nvn 0.1944 -0.1117 0.9745\nvn 0.0002 -0.3321 0.9433\nvn 0.1229 -0.4281 0.8953\nvn 0.0015 -0.5388 0.8424\nvn 0.1228 -0.6138 0.7798\nvn 0.0025 -0.6965 0.7176\nvn 0.1343 -0.7456 0.6527\nvn -0.0001 -0.7668 0.6418\nvn 0.0032 -0.8099 0.5865\nvn 0.1560 -0.8367 0.5250\nvn 0.0031 -0.8888 0.4582\nvn 0.1550 -0.9082 0.3888\nvn 0.1690 -0.9509 0.2594\nvn 0.0036 -0.9754 0.2206\nvn 0.1760 -0.9758 0.1295\nvn 0.0000 -0.9851 0.1720\nvn 0.3425 -0.9281 0.1460\nvn 0.4986 -0.8523 0.1580\nvn 0.6397 -0.7507 0.1653\nvn 0.7613 -0.6263 0.1676\nvn 0.8600 -0.4830 0.1647\nvn 0.9326 -0.3251 0.1569\nvn 0.9769 -0.1573 0.1444\nvn 0.3294 -0.8984 0.2906\nvn 0.4801 -0.8194 0.3133\nvn 0.6166 -0.7163 0.3267\nvn 0.7350 -0.5921 0.3305\nvn 0.8317 -0.4504 0.3246\nvn 0.9040 -0.2955 0.3091\nvn 0.9496 -0.1319 0.2845\nvn 0.2861 0.0034 0.9582\nvn 0.4513 -0.0344 0.8917\nvn 0.3512 -0.1721 0.9204\nvn 0.2406 -0.3046 0.9216\nvn 0.6216 -0.0224 0.7830\nvn 0.5445 -0.1548 0.8244\nvn 0.4536 -0.2832 0.8450\nvn 0.3512 -0.4045 0.8444\nvn 0.2401 -0.5157 0.8225\nvn 0.7413 -0.0456 0.6696\nvn 0.6756 -0.1851 0.7137\nvn 0.5924 -0.3199 0.7394\nvn 0.4940 -0.4464 0.7461\nvn 0.3830 -0.5614 0.7336\nvn 0.2620 -0.6620 0.7022\nvn 0.8275 -0.0924 0.5538\nvn 0.7636 -0.2498 0.5954\nvn 0.6763 -0.3994 0.6189\nvn 0.5684 -0.5369 0.6234\nvn 0.4431 -0.6580 0.6089\nvn 0.3042 -0.7589 0.5758\nvn 0.9034 -0.0972 0.4176\nvn 0.8551 -0.2531 0.4525\nvn 0.7829 -0.4019 0.4749\nvn 0.6890 -0.5395 0.4840\nvn 0.5759 -0.6621 0.4796\nvn 0.4467 -0.7662 0.4619\nvn 0.3051 -0.8490 0.4313\nvn 0.7478 -0.5895 0.3054\nvn 0.7128 -0.5396 0.4481\nvn 0.6650 -0.4716 0.5792\nvn 0.6056 -0.3872 0.6952\nvn 0.6194 -0.7105 0.3340\nvn 0.5788 -0.6528 0.4888\nvn 0.5236 -0.5743 0.6293\nvn 0.4555 -0.4775 0.7514\nvn 0.3764 -0.3650 0.8515\nvn 0.2887 -0.2402 0.9268\nvn 0.4783 -0.8190 0.3170\nvn 0.4419 -0.7671 0.4651\nvn 0.3921 -0.6964 0.6011\nvn 0.3304 -0.6086 0.7214\nvn 0.2584 -0.5062 0.8228\nvn 0.2774 -0.8379 0.4700\nvn 0.3160 -0.8928 0.3210\nvn -0.7423 0.6044 0.2893\nvn -0.6200 0.7302 0.2873\nvn -0.5900 0.6876 0.4232\nvn -0.5490 0.6293 0.5501\nvn -0.4978 0.5564 0.6653\nvn -0.4731 0.8257 0.3073\nvn -0.4388 0.7769 0.4514\nvn -0.3920 0.7104 0.5846\nvn -0.3338 0.6276 0.7033\nvn -0.2657 0.5307 0.8048\nvn -0.3186 0.9057 0.2797\nvn -0.2894 0.8640 0.4120\nvn -0.2492 0.8070 0.5354\nvn 0.4985 0.8303 0.2492\nvn 0.3826 0.8776 0.2888\nvn 0.2593 0.9120 0.3177\nvn 0.7742 0.5782 0.2576\nvn 0.6740 0.6620 0.3279\nvn 0.5585 0.7333 0.3877\nvn 0.4304 0.7905 0.4357\nvn 0.2925 0.8323 0.4708\nvn 0.7654 0.4933 0.4133\nvn 0.6642 0.5730 0.4801\nvn 0.5490 0.6406 0.5369\nvn 0.4222 0.6948 0.5823\nvn 0.2865 0.7343 0.6154\nvn 0.5800 0.4983 0.6444\nvn 0.4481 0.5605 0.6965\nvn 0.3050 0.6060 0.7347\nvn 0.2697 0.4699 0.8405\n# 4527 vertex normals\n\nvt 0.2656 0.4946 0.0000\nvt 0.2654 0.4946 0.0000\nvt 0.4548 0.4117 0.0000\nvt 0.5625 0.3780 0.0000\nvt 0.2657 0.4945 0.0000\nvt 0.2658 0.4944 0.0000\nvt 0.2659 0.4943 0.0000\nvt 0.2661 0.4941 0.0000\nvt 0.3488 0.3659 0.0000\nvt 0.4521 0.1238 0.0000\nvt 0.1776 0.2788 0.0000\nvt 0.1883 0.5399 0.0000\nvt 0.1778 0.2787 0.0000\nvt 0.1780 0.2785 0.0000\nvt 0.1781 0.2784 0.0000\nvt 0.2661 0.4940 0.0000\nvt 0.1782 0.2783 0.0000\nvt 0.2661 0.4938 0.0000\nvt 0.1783 0.2782 0.0000\nvt 0.2660 0.4936 0.0000\nvt 0.2658 0.4934 0.0000\nvt 0.1782 0.2782 0.0000\nvt 0.2656 0.4933 0.0000\nvt 0.1781 0.2783 0.0000\nvt 0.2653 0.4932 0.0000\nvt 0.1624 0.4554 0.0000\nvt 0.0773 0.2345 0.0000\nvt 0.1779 0.2785 0.0000\nvt 0.3486 0.3658 0.0000\nvt 0.1622 0.4554 0.0000\nvt 0.3477 0.0658 0.0000\nvt 0.4899 0.4254 0.0000\nvt 0.4902 0.4253 0.0000\nvt 0.4114 0.4588 0.0000\nvt 0.5871 0.3894 0.0000\nvt 0.4897 0.4255 0.0000\nvt 0.4896 0.4257 0.0000\nvt 0.4895 0.4259 0.0000\nvt 0.4895 0.4260 0.0000\nvt 0.4895 0.4262 0.0000\nvt 0.5273 0.5056 0.0000\nvt 0.5209 0.5136 0.0000\nvt 0.4041 0.4669 0.0000\nvt 0.5870 0.3895 0.0000\nvt 0.6690 0.2432 0.0000\nvt 0.6689 0.2432 0.0000\nvt 0.6688 0.2432 0.0000\nvt 0.6688 0.2433 0.0000\nvt 0.6688 0.2434 0.0000\nvt 0.6688 0.2436 0.0000\nvt 0.4896 0.4264 0.0000\nvt 0.6688 0.2438 0.0000\nvt 0.4899 0.4267 0.0000\nvt 0.6689 0.2440 0.0000\nvt 0.4900 0.4268 0.0000\nvt 0.6691 0.2442 0.0000\nvt 0.4902 0.4269 0.0000\nvt 0.4904 0.4270 0.0000\nvt 0.6693 0.2444 0.0000\nvt 0.4906 0.4271 0.0000\nvt 0.6041 0.4761 0.0000\nvt 0.6697 0.2446 0.0000\nvt 0.7648 0.2974 0.0000\nvt 0.8680 0.2531 0.0000\nvt 0.7032 0.4439 0.0000\nvt 0.8686 0.2528 0.0000\nvt 0.8683 0.2529 0.0000\nvt 0.7728 0.1951 0.0000\nvt 0.3484 0.3658 0.0000\nvt 0.1621 0.4554 0.0000\nvt 0.3475 0.0658 0.0000\nvt 0.3473 0.0657 0.0000\nvt 0.3471 0.0656 0.0000\nvt 0.1618 0.4553 0.0000\nvt 0.3482 0.3657 0.0000\nvt 0.4528 0.0005 0.0000\nvt 0.4526 0.0004 0.0000\nvt 0.4527 0.0004 0.0000\nvt 0.5576 0.0642 0.0000\nvt 0.4531 0.0006 0.0000\nvt 0.5626 0.3780 0.0000\nvt 0.5628 0.3779 0.0000\nvt 0.4554 0.0024 0.0000\nvt 0.5656 0.5352 0.0000\nvt 0.5695 0.7869 0.0000\nvt 0.5659 0.5353 0.0000\nvt 0.7322 0.8697 0.0000\nvt 0.6312 0.8045 0.0000\nvt 0.5698 0.7865 0.0000\nvt 0.6400 0.9566 0.0000\nvt 0.4643 0.9191 0.0000\nvt 0.6412 0.9569 0.0000\nvt 0.6424 0.9571 0.0000\nvt 0.6435 0.9573 0.0000\nvt 0.6447 0.9574 0.0000\nvt 0.6459 0.9576 0.0000\nvt 0.6471 0.9577 0.0000\nvt 0.6483 0.9578 0.0000\nvt 0.6494 0.9579 0.0000\nvt 0.6506 0.9579 0.0000\nvt 0.6518 0.9579 0.0000\nvt 0.6530 0.9579 0.0000\nvt 0.6541 0.9579 0.0000\nvt 0.6564 0.9578 0.0000\nvt 0.6588 0.9575 0.0000\nvt 0.6610 0.9572 0.0000\nvt 0.6633 0.9568 0.0000\nvt 0.6656 0.9563 0.0000\nvt 0.6679 0.9557 0.0000\nvt 0.6701 0.9550 0.0000\nvt 0.6723 0.9542 0.0000\nvt 0.6745 0.9533 0.0000\nvt 0.6767 0.9524 0.0000\nvt 0.6789 0.9513 0.0000\nvt 0.6810 0.9502 0.0000\nvt 0.6832 0.9490 0.0000\nvt 0.6853 0.9477 0.0000\nvt 0.6873 0.9463 0.0000\nvt 0.6894 0.9448 0.0000\nvt 0.6914 0.9432 0.0000\nvt 0.6933 0.9416 0.0000\nvt 0.6953 0.9399 0.0000\nvt 0.6972 0.9381 0.0000\nvt 0.6991 0.9362 0.0000\nvt 0.7009 0.9343 0.0000\nvt 0.7027 0.9323 0.0000\nvt 0.7045 0.9302 0.0000\nvt 0.7062 0.9280 0.0000\nvt 0.7079 0.9258 0.0000\nvt 0.7096 0.9235 0.0000\nvt 0.7112 0.9212 0.0000\nvt 0.7128 0.9187 0.0000\nvt 0.7143 0.9163 0.0000\nvt 0.7158 0.9137 0.0000\nvt 0.7172 0.9111 0.0000\nvt 0.7186 0.9085 0.0000\nvt 0.7199 0.9058 0.0000\nvt 0.7212 0.9030 0.0000\nvt 0.7225 0.9002 0.0000\nvt 0.7237 0.8973 0.0000\nvt 0.7248 0.8944 0.0000\nvt 0.7259 0.8915 0.0000\nvt 0.7270 0.8885 0.0000\nvt 0.7280 0.8855 0.0000\nvt 0.7289 0.8824 0.0000\nvt 0.7298 0.8793 0.0000\nvt 0.7307 0.8761 0.0000\nvt 0.7315 0.8729 0.0000\nvt 0.7319 0.8713 0.0000\nvt 0.5656 0.5345 0.0000\nvt 0.5657 0.5337 0.0000\nvt 0.5659 0.5339 0.0000\nvt 0.5659 0.5346 0.0000\nvt 0.5658 0.5330 0.0000\nvt 0.5660 0.5333 0.0000\nvt 0.5660 0.5323 0.0000\nvt 0.5661 0.5326 0.0000\nvt 0.5663 0.5317 0.0000\nvt 0.5663 0.5320 0.0000\nvt 0.5666 0.5311 0.0000\nvt 0.5666 0.5314 0.0000\nvt 0.5670 0.5306 0.0000\nvt 0.5669 0.5309 0.0000\nvt 0.5674 0.5302 0.0000\nvt 0.5673 0.5305 0.0000\nvt 0.5678 0.5299 0.0000\nvt 0.5676 0.5301 0.0000\nvt 0.5681 0.5298 0.0000\nvt 0.5683 0.5297 0.0000\nvt 0.5684 0.5302 0.0000\nvt 0.5680 0.5305 0.0000\nvt 0.5688 0.5296 0.0000\nvt 0.5688 0.5301 0.0000\nvt 0.5693 0.5295 0.0000\nvt 0.5693 0.5300 0.0000\nvt 0.5698 0.5296 0.0000\nvt 0.5698 0.5301 0.0000\nvt 0.5703 0.5298 0.0000\nvt 0.5631 0.3795 0.0000\nvt 0.6777 0.5728 0.0000\nvt 0.6777 0.5731 0.0000\nvt 0.5703 0.5302 0.0000\nvt 0.7872 0.6181 0.0000\nvt 0.6788 0.5733 0.0000\nvt 0.7876 0.6150 0.0000\nvt 0.6798 0.5738 0.0000\nvt 0.6797 0.5741 0.0000\nvt 0.6787 0.5736 0.0000\nvt 0.6809 0.5745 0.0000\nvt 0.6807 0.5747 0.0000\nvt 0.6819 0.5752 0.0000\nvt 0.6817 0.5754 0.0000\nvt 0.6829 0.5760 0.0000\nvt 0.6827 0.5762 0.0000\nvt 0.6839 0.5768 0.0000\nvt 0.6837 0.5770 0.0000\nvt 0.7868 0.6212 0.0000\nvt 0.6848 0.5778 0.0000\nvt 0.6846 0.5780 0.0000\nvt 0.6857 0.5788 0.0000\nvt 0.6855 0.5790 0.0000\nvt 0.6866 0.5799 0.0000\nvt 0.6863 0.5800 0.0000\nvt 0.6875 0.5810 0.0000\nvt 0.6872 0.5811 0.0000\nvt 0.6883 0.5822 0.0000\nvt 0.6880 0.5823 0.0000\nvt 0.7863 0.6243 0.0000\nvt 0.6891 0.5835 0.0000\nvt 0.6887 0.5836 0.0000\nvt 0.6898 0.5849 0.0000\nvt 0.6895 0.5848 0.0000\nvt 0.6905 0.5862 0.0000\nvt 0.6901 0.5862 0.0000\nvt 0.6911 0.5875 0.0000\nvt 0.6908 0.5876 0.0000\nvt 0.7860 0.6258 0.0000\nvt 0.6912 0.5877 0.0000\nvt 0.6917 0.5890 0.0000\nvt 0.6914 0.5890 0.0000\nvt 0.6918 0.5892 0.0000\nvt 0.7858 0.6273 0.0000\nvt 0.6924 0.5907 0.0000\nvt 0.6923 0.5905 0.0000\nvt 0.7855 0.6288 0.0000\nvt 0.6929 0.5922 0.0000\nvt 0.6928 0.5920 0.0000\nvt 0.6934 0.5938 0.0000\nvt 0.6933 0.5935 0.0000\nvt 0.7852 0.6304 0.0000\nvt 0.6938 0.5955 0.0000\nvt 0.6937 0.5951 0.0000\nvt 0.7849 0.6319 0.0000\nvt 0.6942 0.5971 0.0000\nvt 0.6940 0.5966 0.0000\nvt 0.7845 0.6334 0.0000\nvt 0.6944 0.5980 0.0000\nvt 0.6946 0.5988 0.0000\nvt 0.6944 0.5982 0.0000\nvt 0.6947 0.5997 0.0000\nvt 0.6948 0.6005 0.0000\nvt 0.6946 0.5998 0.0000\nvt 0.6949 0.6014 0.0000\nvt 0.6950 0.6022 0.0000\nvt 0.6948 0.6015 0.0000\nvt 0.6951 0.6031 0.0000\nvt 0.6952 0.6039 0.0000\nvt 0.6950 0.6031 0.0000\nvt 0.6953 0.6048 0.0000\nvt 0.6951 0.6047 0.0000\nvt 0.6953 0.6056 0.0000\nvt 0.6953 0.6065 0.0000\nvt 0.6952 0.6063 0.0000\nvt 0.6954 0.6074 0.0000\nvt 0.6954 0.6082 0.0000\nvt 0.6952 0.6079 0.0000\nvt 0.6954 0.6091 0.0000\nvt 0.6953 0.6099 0.0000\nvt 0.6951 0.6095 0.0000\nvt 0.6953 0.6108 0.0000\nvt 0.6952 0.6116 0.0000\nvt 0.6950 0.6111 0.0000\nvt 0.6952 0.6124 0.0000\nvt 0.6951 0.6133 0.0000\nvt 0.6949 0.6127 0.0000\nvt 0.6950 0.6141 0.0000\nvt 0.6949 0.6149 0.0000\nvt 0.6947 0.6142 0.0000\nvt 0.6948 0.6157 0.0000\nvt 0.6946 0.6166 0.0000\nvt 0.6944 0.6158 0.0000\nvt 0.6945 0.6173 0.0000\nvt 0.6943 0.6181 0.0000\nvt 0.6942 0.6173 0.0000\nvt 0.6941 0.6189 0.0000\nvt 0.6547 0.7841 0.0000\nvt 0.6546 0.7841 0.0000\nvt 0.6543 0.7839 0.0000\nvt 0.6938 0.6187 0.0000\nvt 0.6542 0.7857 0.0000\nvt 0.6538 0.7873 0.0000\nvt 0.6537 0.7872 0.0000\nvt 0.6542 0.7856 0.0000\nvt 0.6533 0.7888 0.0000\nvt 0.6532 0.7887 0.0000\nvt 0.6527 0.7903 0.0000\nvt 0.6526 0.7901 0.0000\nvt 0.6521 0.7916 0.0000\nvt 0.6514 0.7930 0.0000\nvt 0.6519 0.7915 0.0000\nvt 0.6508 0.7943 0.0000\nvt 0.6513 0.7929 0.0000\nvt 0.6500 0.7955 0.0000\nvt 0.6505 0.7942 0.0000\nvt 0.6493 0.7966 0.0000\nvt 0.6498 0.7954 0.0000\nvt 0.6485 0.7977 0.0000\nvt 0.6490 0.7965 0.0000\nvt 0.6476 0.7987 0.0000\nvt 0.6481 0.7976 0.0000\nvt 0.6467 0.7997 0.0000\nvt 0.6472 0.7986 0.0000\nvt 0.6458 0.8006 0.0000\nvt 0.6463 0.7996 0.0000\nvt 0.6449 0.8014 0.0000\nvt 0.6454 0.8005 0.0000\nvt 0.6439 0.8021 0.0000\nvt 0.6444 0.8012 0.0000\nvt 0.6429 0.8027 0.0000\nvt 0.6434 0.8020 0.0000\nvt 0.6419 0.8033 0.0000\nvt 0.6424 0.8026 0.0000\nvt 0.6409 0.8038 0.0000\nvt 0.6413 0.8031 0.0000\nvt 0.6399 0.8042 0.0000\nvt 0.6402 0.8036 0.0000\nvt 0.6388 0.8045 0.0000\nvt 0.6391 0.8039 0.0000\nvt 0.6378 0.8048 0.0000\nvt 0.6380 0.8042 0.0000\nvt 0.6367 0.8049 0.0000\nvt 0.6369 0.8044 0.0000\nvt 0.6356 0.8050 0.0000\nvt 0.6358 0.8045 0.0000\nvt 0.6345 0.8050 0.0000\nvt 0.6346 0.8045 0.0000\nvt 0.6334 0.8049 0.0000\nvt 0.6335 0.8044 0.0000\nvt 0.6323 0.8047 0.0000\nvt 0.6324 0.8042 0.0000\nvt 0.6312 0.8039 0.0000\nvt 0.6399 0.9572 0.0000\nvt 0.4639 0.9191 0.0000\nvt 0.4643 0.9194 0.0000\nvt 0.6422 0.9576 0.0000\nvt 0.6445 0.9580 0.0000\nvt 0.6468 0.9582 0.0000\nvt 0.6491 0.9584 0.0000\nvt 0.6514 0.9584 0.0000\nvt 0.6537 0.9584 0.0000\nvt 0.6560 0.9583 0.0000\nvt 0.6582 0.9581 0.0000\nvt 0.6605 0.9578 0.0000\nvt 0.6628 0.9574 0.0000\nvt 0.6650 0.9569 0.0000\nvt 0.6672 0.9564 0.0000\nvt 0.6695 0.9557 0.0000\nvt 0.6717 0.9550 0.0000\nvt 0.6738 0.9541 0.0000\nvt 0.6760 0.9532 0.0000\nvt 0.6781 0.9522 0.0000\nvt 0.6803 0.9511 0.0000\nvt 0.6824 0.9500 0.0000\nvt 0.6844 0.9487 0.0000\nvt 0.6865 0.9474 0.0000\nvt 0.6885 0.9460 0.0000\nvt 0.6905 0.9445 0.0000\nvt 0.6925 0.9429 0.0000\nvt 0.6944 0.9412 0.0000\nvt 0.6963 0.9395 0.0000\nvt 0.6982 0.9377 0.0000\nvt 0.7000 0.9358 0.0000\nvt 0.7018 0.9339 0.0000\nvt 0.7036 0.9319 0.0000\nvt 0.7053 0.9298 0.0000\nvt 0.7070 0.9276 0.0000\nvt 0.7087 0.9254 0.0000\nvt 0.7103 0.9231 0.0000\nvt 0.7119 0.9208 0.0000\nvt 0.7134 0.9184 0.0000\nvt 0.7149 0.9159 0.0000\nvt 0.7163 0.9134 0.0000\nvt 0.7177 0.9108 0.0000\nvt 0.7191 0.9082 0.0000\nvt 0.7204 0.9055 0.0000\nvt 0.7217 0.9028 0.0000\nvt 0.7229 0.9000 0.0000\nvt 0.7241 0.8972 0.0000\nvt 0.7252 0.8943 0.0000\nvt 0.7263 0.8914 0.0000\nvt 0.7273 0.8884 0.0000\nvt 0.7283 0.8854 0.0000\nvt 0.7293 0.8824 0.0000\nvt 0.7301 0.8793 0.0000\nvt 0.7310 0.8762 0.0000\nvt 0.7318 0.8730 0.0000\nvt 0.7848 0.6336 0.0000\nvt 0.7325 0.8699 0.0000\nvt 0.7854 0.6306 0.0000\nvt 0.7727 0.1948 0.0000\nvt 0.7730 0.1947 0.0000\nvt 0.7725 0.1948 0.0000\nvt 0.7860 0.6277 0.0000\nvt 0.7865 0.6246 0.0000\nvt 0.7870 0.6216 0.0000\nvt 0.7874 0.6185 0.0000\nvt 0.7878 0.6154 0.0000\nvt 0.7879 0.6119 0.0000\nvt 0.7881 0.6123 0.0000\nvt 0.7882 0.6088 0.0000\nvt 0.7884 0.6092 0.0000\nvt 0.7884 0.6056 0.0000\nvt 0.7886 0.6061 0.0000\nvt 0.7886 0.6025 0.0000\nvt 0.7888 0.6029 0.0000\nvt 0.7887 0.5993 0.0000\nvt 0.7889 0.5997 0.0000\nvt 0.7887 0.5962 0.0000\nvt 0.7890 0.5965 0.0000\nvt 0.7888 0.5930 0.0000\nvt 0.7890 0.5933 0.0000\nvt 0.7887 0.5898 0.0000\nvt 0.7890 0.5901 0.0000\nvt 0.7887 0.5866 0.0000\nvt 0.7889 0.5869 0.0000\nvt 0.7885 0.5834 0.0000\nvt 0.7888 0.5837 0.0000\nvt 0.7883 0.5802 0.0000\nvt 0.7886 0.5804 0.0000\nvt 0.7881 0.5770 0.0000\nvt 0.7884 0.5772 0.0000\nvt 0.7878 0.5738 0.0000\nvt 0.7881 0.5740 0.0000\nvt 0.7875 0.5706 0.0000\nvt 0.7878 0.5708 0.0000\nvt 0.7871 0.5674 0.0000\nvt 0.7874 0.5675 0.0000\nvt 0.7867 0.5642 0.0000\nvt 0.7870 0.5643 0.0000\nvt 0.7862 0.5610 0.0000\nvt 0.7865 0.5611 0.0000\nvt 0.7857 0.5578 0.0000\nvt 0.7860 0.5579 0.0000\nvt 0.7851 0.5546 0.0000\nvt 0.7854 0.5547 0.0000\nvt 0.7845 0.5515 0.0000\nvt 0.7848 0.5516 0.0000\nvt 0.7839 0.5484 0.0000\nvt 0.7841 0.5484 0.0000\nvt 0.7832 0.5452 0.0000\nvt 0.7834 0.5453 0.0000\nvt 0.7824 0.5421 0.0000\nvt 0.7827 0.5421 0.0000\nvt 0.7816 0.5391 0.0000\nvt 0.7818 0.5390 0.0000\nvt 0.7807 0.5360 0.0000\nvt 0.7810 0.5360 0.0000\nvt 0.7798 0.5330 0.0000\nvt 0.7801 0.5329 0.0000\nvt 0.7789 0.5300 0.0000\nvt 0.7791 0.5299 0.0000\nvt 0.7779 0.5270 0.0000\nvt 0.7782 0.5269 0.0000\nvt 0.7769 0.5240 0.0000\nvt 0.7771 0.5239 0.0000\nvt 0.7758 0.5211 0.0000\nvt 0.7760 0.5210 0.0000\nvt 0.7747 0.5183 0.0000\nvt 0.7749 0.5181 0.0000\nvt 0.7735 0.5154 0.0000\nvt 0.7738 0.5152 0.0000\nvt 0.7723 0.5126 0.0000\nvt 0.7725 0.5124 0.0000\nvt 0.7711 0.5098 0.0000\nvt 0.7713 0.5096 0.0000\nvt 0.7698 0.5071 0.0000\nvt 0.7700 0.5069 0.0000\nvt 0.7685 0.5044 0.0000\nvt 0.7687 0.5042 0.0000\nvt 0.7671 0.5018 0.0000\nvt 0.7673 0.5015 0.0000\nvt 0.7657 0.4992 0.0000\nvt 0.7659 0.4989 0.0000\nvt 0.7643 0.4966 0.0000\nvt 0.7645 0.4963 0.0000\nvt 0.7628 0.4941 0.0000\nvt 0.7630 0.4938 0.0000\nvt 0.7613 0.4917 0.0000\nvt 0.7615 0.4914 0.0000\nvt 0.7598 0.4893 0.0000\nvt 0.7599 0.4889 0.0000\nvt 0.7582 0.4869 0.0000\nvt 0.7583 0.4866 0.0000\nvt 0.7566 0.4846 0.0000\nvt 0.7567 0.4843 0.0000\nvt 0.7549 0.4824 0.0000\nvt 0.7533 0.4802 0.0000\nvt 0.7551 0.4820 0.0000\nvt 0.7516 0.4781 0.0000\nvt 0.7534 0.4798 0.0000\nvt 0.7498 0.4760 0.0000\nvt 0.7517 0.4777 0.0000\nvt 0.7481 0.4740 0.0000\nvt 0.7499 0.4756 0.0000\nvt 0.7463 0.4721 0.0000\nvt 0.7482 0.4736 0.0000\nvt 0.7445 0.4702 0.0000\nvt 0.7464 0.4717 0.0000\nvt 0.7426 0.4684 0.0000\nvt 0.7446 0.4698 0.0000\nvt 0.7408 0.4667 0.0000\nvt 0.7427 0.4680 0.0000\nvt 0.7389 0.4650 0.0000\nvt 0.7408 0.4662 0.0000\nvt 0.7370 0.4634 0.0000\nvt 0.7389 0.4646 0.0000\nvt 0.7350 0.4619 0.0000\nvt 0.7370 0.4630 0.0000\nvt 0.7331 0.4604 0.0000\nvt 0.7351 0.4614 0.0000\nvt 0.7311 0.4590 0.0000\nvt 0.7331 0.4600 0.0000\nvt 0.7291 0.4577 0.0000\nvt 0.7311 0.4586 0.0000\nvt 0.7271 0.4565 0.0000\nvt 0.7291 0.4573 0.0000\nvt 0.5903 0.3922 0.0000\nvt 0.7271 0.4560 0.0000\nvt 0.7251 0.4554 0.0000\nvt 0.7251 0.4549 0.0000\nvt 0.7231 0.4543 0.0000\nvt 0.7017 0.4442 0.0000\nvt 0.7210 0.4533 0.0000\nvt 0.7231 0.4538 0.0000\nvt 0.7021 0.4442 0.0000\nvt 0.7210 0.4528 0.0000\nvt 0.7752 0.1969 0.0000\nvt 0.8672 0.2528 0.0000\nvt 0.8675 0.2528 0.0000\nvt 0.7752 0.1965 0.0000\nvt 0.5902 0.3916 0.0000\nvt 0.7750 0.1965 0.0000\nvt 0.5634 0.3791 0.0000\nvt 0.5582 0.0649 0.0000\nvt 0.5585 0.0646 0.0000\nvt 0.4554 0.0019 0.0000\nvt 0.4551 0.0023 0.0000\nvt 0.4551 0.0018 0.0000\nvt 0.4525 0.7328 0.0000\nvt 0.3650 0.7204 0.0000\nvt 0.3791 0.8519 0.0000\nvt 0.6900 0.6179 0.0000\nvt 0.3791 0.8526 0.0000\nvt 0.6502 0.7838 0.0000\nvt 0.6504 0.7830 0.0000\nvt 0.3648 0.7193 0.0000\nvt 0.3646 0.7181 0.0000\nvt 0.6903 0.6164 0.0000\nvt 0.6902 0.6171 0.0000\nvt 0.3643 0.7168 0.0000\nvt 0.6906 0.6148 0.0000\nvt 0.6905 0.6156 0.0000\nvt 0.3640 0.7156 0.0000\nvt 0.6909 0.6132 0.0000\nvt 0.6908 0.6140 0.0000\nvt 0.3636 0.7143 0.0000\nvt 0.6911 0.6116 0.0000\nvt 0.6910 0.6124 0.0000\nvt 0.3632 0.7131 0.0000\nvt 0.6912 0.6100 0.0000\nvt 0.6911 0.6108 0.0000\nvt 0.3627 0.7118 0.0000\nvt 0.6913 0.6083 0.0000\nvt 0.6912 0.6091 0.0000\nvt 0.3621 0.7105 0.0000\nvt 0.6913 0.6067 0.0000\nvt 0.6913 0.6075 0.0000\nvt 0.3615 0.7093 0.0000\nvt 0.6912 0.6050 0.0000\nvt 0.6912 0.6058 0.0000\nvt 0.3609 0.7080 0.0000\nvt 0.6911 0.6033 0.0000\nvt 0.6912 0.6042 0.0000\nvt 0.3602 0.7067 0.0000\nvt 0.6909 0.6017 0.0000\nvt 0.6910 0.6025 0.0000\nvt 0.3594 0.7055 0.0000\nvt 0.6907 0.6000 0.0000\nvt 0.6908 0.6008 0.0000\nvt 0.4523 0.7316 0.0000\nvt 0.3587 0.7043 0.0000\nvt 0.6904 0.5984 0.0000\nvt 0.6906 0.5992 0.0000\nvt 0.3578 0.7031 0.0000\nvt 0.6901 0.5968 0.0000\nvt 0.6903 0.5976 0.0000\nvt 0.4521 0.7304 0.0000\nvt 0.3570 0.7019 0.0000\nvt 0.6897 0.5952 0.0000\nvt 0.6899 0.5960 0.0000\nvt 0.4519 0.7292 0.0000\nvt 0.3561 0.7008 0.0000\nvt 0.6893 0.5936 0.0000\nvt 0.6895 0.5944 0.0000\nvt 0.4517 0.7280 0.0000\nvt 0.3552 0.6997 0.0000\nvt 0.6888 0.5921 0.0000\nvt 0.6890 0.5929 0.0000\nvt 0.3543 0.6986 0.0000\nvt 0.6882 0.5906 0.0000\nvt 0.6885 0.5914 0.0000\nvt 0.4515 0.7268 0.0000\nvt 0.3533 0.6976 0.0000\nvt 0.6876 0.5892 0.0000\nvt 0.6879 0.5899 0.0000\nvt 0.4512 0.7256 0.0000\nvt 0.3524 0.6966 0.0000\nvt 0.6870 0.5878 0.0000\nvt 0.6873 0.5885 0.0000\nvt 0.3514 0.6956 0.0000\nvt 0.6863 0.5865 0.0000\nvt 0.6867 0.5872 0.0000\nvt 0.4510 0.7244 0.0000\nvt 0.3504 0.6947 0.0000\nvt 0.6856 0.5852 0.0000\nvt 0.6860 0.5858 0.0000\nvt 0.3494 0.6938 0.0000\nvt 0.6848 0.5840 0.0000\nvt 0.6852 0.5846 0.0000\nvt 0.4507 0.7232 0.0000\nvt 0.3484 0.6930 0.0000\nvt 0.6840 0.5829 0.0000\nvt 0.6844 0.5834 0.0000\nvt 0.3474 0.6923 0.0000\nvt 0.6832 0.5818 0.0000\nvt 0.6836 0.5823 0.0000\nvt 0.4504 0.7220 0.0000\nvt 0.3463 0.6916 0.0000\nvt 0.6828 0.5813 0.0000\nvt 0.3453 0.6909 0.0000\nvt 0.6819 0.5803 0.0000\nvt 0.6823 0.5808 0.0000\nvt 0.3443 0.6903 0.0000\nvt 0.6810 0.5794 0.0000\nvt 0.6814 0.5798 0.0000\nvt 0.4501 0.7207 0.0000\nvt 0.3433 0.6898 0.0000\nvt 0.6800 0.5785 0.0000\nvt 0.6805 0.5789 0.0000\nvt 0.3423 0.6893 0.0000\nvt 0.6791 0.5778 0.0000\nvt 0.6796 0.5782 0.0000\nvt 0.3413 0.6888 0.0000\nvt 0.6781 0.5771 0.0000\nvt 0.6786 0.5774 0.0000\nvt 0.3403 0.6885 0.0000\nvt 0.6771 0.5765 0.0000\nvt 0.6776 0.5768 0.0000\nvt 0.3393 0.6881 0.0000\nvt 0.6761 0.5760 0.0000\nvt 0.6766 0.5763 0.0000\nvt 0.2297 0.6555 0.0000\nvt 0.3160 0.6238 0.0000\nvt 0.3163 0.6238 0.0000\nvt 0.4561 0.5730 0.0000\nvt 0.4588 0.5731 0.0000\nvt 0.5681 0.5330 0.0000\nvt 0.3205 0.6228 0.0000\nvt 0.3203 0.6229 0.0000\nvt 0.3200 0.6231 0.0000\nvt 0.3197 0.6233 0.0000\nvt 0.3195 0.6233 0.0000\nvt 0.3193 0.6234 0.0000\nvt 0.3191 0.6234 0.0000\nvt 0.3191 0.6235 0.0000\nvt 0.3188 0.6235 0.0000\nvt 0.3186 0.6236 0.0000\nvt 0.3183 0.6236 0.0000\nvt 0.3180 0.6237 0.0000\nvt 0.3178 0.6237 0.0000\nvt 0.3175 0.6237 0.0000\nvt 0.3173 0.6238 0.0000\nvt 0.3172 0.6238 0.0000\nvt 0.3169 0.6238 0.0000\nvt 0.3166 0.6238 0.0000\nvt 0.6755 0.5758 0.0000\nvt 0.2465 0.9665 0.0000\nvt 0.3053 0.8535 0.0000\nvt 0.3445 0.5968 0.0000\nvt 0.3424 0.5961 0.0000\nvt 0.1871 0.5439 0.0000\nvt 0.3465 0.5976 0.0000\nvt 0.3486 0.5984 0.0000\nvt 0.3507 0.5993 0.0000\nvt 0.3528 0.6002 0.0000\nvt 0.3549 0.6012 0.0000\nvt 0.3569 0.6022 0.0000\nvt 0.3590 0.6033 0.0000\nvt 0.3611 0.6045 0.0000\nvt 0.3632 0.6056 0.0000\nvt 0.3652 0.6069 0.0000\nvt 0.3673 0.6082 0.0000\nvt 0.3694 0.6095 0.0000\nvt 0.3715 0.6109 0.0000\nvt 0.3736 0.6123 0.0000\nvt 0.3757 0.6138 0.0000\nvt 0.3777 0.6153 0.0000\nvt 0.3798 0.6169 0.0000\nvt 0.3819 0.6185 0.0000\nvt 0.3839 0.6202 0.0000\nvt 0.3860 0.6219 0.0000\nvt 0.3880 0.6236 0.0000\nvt 0.3900 0.6254 0.0000\nvt 0.3921 0.6272 0.0000\nvt 0.3931 0.6281 0.0000\nvt 0.3941 0.6291 0.0000\nvt 0.3951 0.6300 0.0000\nvt 0.3961 0.6310 0.0000\nvt 0.3970 0.6320 0.0000\nvt 0.3980 0.6329 0.0000\nvt 0.3990 0.6339 0.0000\nvt 0.4000 0.6349 0.0000\nvt 0.4010 0.6359 0.0000\nvt 0.4019 0.6369 0.0000\nvt 0.4029 0.6380 0.0000\nvt 0.4038 0.6390 0.0000\nvt 0.4048 0.6400 0.0000\nvt 0.4058 0.6411 0.0000\nvt 0.4067 0.6421 0.0000\nvt 0.4076 0.6432 0.0000\nvt 0.4086 0.6443 0.0000\nvt 0.4095 0.6454 0.0000\nvt 0.4104 0.6464 0.0000\nvt 0.4113 0.6475 0.0000\nvt 0.4122 0.6486 0.0000\nvt 0.4131 0.6498 0.0000\nvt 0.4140 0.6509 0.0000\nvt 0.4149 0.6520 0.0000\nvt 0.4158 0.6531 0.0000\nvt 0.4167 0.6543 0.0000\nvt 0.4176 0.6554 0.0000\nvt 0.4184 0.6566 0.0000\nvt 0.4193 0.6577 0.0000\nvt 0.4201 0.6589 0.0000\nvt 0.4210 0.6601 0.0000\nvt 0.4218 0.6612 0.0000\nvt 0.4226 0.6624 0.0000\nvt 0.4234 0.6636 0.0000\nvt 0.4243 0.6648 0.0000\nvt 0.4251 0.6660 0.0000\nvt 0.4258 0.6672 0.0000\nvt 0.4266 0.6684 0.0000\nvt 0.4274 0.6696 0.0000\nvt 0.4282 0.6708 0.0000\nvt 0.4289 0.6720 0.0000\nvt 0.4297 0.6733 0.0000\nvt 0.4304 0.6745 0.0000\nvt 0.4311 0.6757 0.0000\nvt 0.4319 0.6770 0.0000\nvt 0.4326 0.6782 0.0000\nvt 0.4333 0.6794 0.0000\nvt 0.4340 0.6807 0.0000\nvt 0.4347 0.6819 0.0000\nvt 0.4353 0.6832 0.0000\nvt 0.4360 0.6844 0.0000\nvt 0.4366 0.6857 0.0000\nvt 0.4373 0.6869 0.0000\nvt 0.4379 0.6882 0.0000\nvt 0.4385 0.6895 0.0000\nvt 0.4391 0.6907 0.0000\nvt 0.4397 0.6920 0.0000\nvt 0.4403 0.6932 0.0000\nvt 0.4409 0.6945 0.0000\nvt 0.4414 0.6958 0.0000\nvt 0.4420 0.6970 0.0000\nvt 0.4425 0.6983 0.0000\nvt 0.4431 0.6995 0.0000\nvt 0.4436 0.7008 0.0000\nvt 0.4441 0.7021 0.0000\nvt 0.4446 0.7033 0.0000\nvt 0.4450 0.7046 0.0000\nvt 0.4455 0.7058 0.0000\nvt 0.4460 0.7071 0.0000\nvt 0.4464 0.7084 0.0000\nvt 0.4468 0.7096 0.0000\nvt 0.4472 0.7109 0.0000\nvt 0.4477 0.7121 0.0000\nvt 0.4480 0.7133 0.0000\nvt 0.4484 0.7146 0.0000\nvt 0.4488 0.7158 0.0000\nvt 0.4491 0.7171 0.0000\nvt 0.4495 0.7183 0.0000\nvt 0.4498 0.7195 0.0000\nvt 0.3652 0.8671 0.0000\nvt 0.6288 0.8016 0.0000\nvt 0.4012 0.8284 0.0000\nvt 0.4797 0.9237 0.0000\nvt 0.3662 0.8673 0.0000\nvt 0.3672 0.8674 0.0000\nvt 0.6298 0.8018 0.0000\nvt 0.3682 0.8675 0.0000\nvt 0.6309 0.8020 0.0000\nvt 0.3692 0.8675 0.0000\nvt 0.6320 0.8021 0.0000\nvt 0.3701 0.8674 0.0000\nvt 0.6330 0.8021 0.0000\nvt 0.3710 0.8672 0.0000\nvt 0.6341 0.8019 0.0000\nvt 0.3719 0.8670 0.0000\nvt 0.6352 0.8018 0.0000\nvt 0.3727 0.8667 0.0000\nvt 0.6362 0.8015 0.0000\nvt 0.3735 0.8664 0.0000\nvt 0.6373 0.8011 0.0000\nvt 0.3742 0.8659 0.0000\nvt 0.6383 0.8007 0.0000\nvt 0.3749 0.8654 0.0000\nvt 0.6393 0.8001 0.0000\nvt 0.3756 0.8648 0.0000\nvt 0.6403 0.7995 0.0000\nvt 0.3762 0.8642 0.0000\nvt 0.6412 0.7988 0.0000\nvt 0.3768 0.8635 0.0000\nvt 0.6422 0.7980 0.0000\nvt 0.3773 0.8627 0.0000\nvt 0.6431 0.7971 0.0000\nvt 0.3775 0.8623 0.0000\nvt 0.6439 0.7962 0.0000\nvt 0.3777 0.8619 0.0000\nvt 0.3779 0.8615 0.0000\nvt 0.6448 0.7951 0.0000\nvt 0.3781 0.8610 0.0000\nvt 0.3783 0.8605 0.0000\nvt 0.6456 0.7940 0.0000\nvt 0.3785 0.8600 0.0000\nvt 0.3786 0.8595 0.0000\nvt 0.6463 0.7929 0.0000\nvt 0.3787 0.8590 0.0000\nvt 0.3788 0.8585 0.0000\nvt 0.6470 0.7917 0.0000\nvt 0.3789 0.8580 0.0000\nvt 0.3790 0.8574 0.0000\nvt 0.6477 0.7904 0.0000\nvt 0.3791 0.8568 0.0000\nvt 0.6480 0.7897 0.0000\nvt 0.3792 0.8563 0.0000\nvt 0.6484 0.7890 0.0000\nvt 0.3792 0.8557 0.0000\nvt 0.6487 0.7883 0.0000\nvt 0.3792 0.8551 0.0000\nvt 0.6489 0.7876 0.0000\nvt 0.3792 0.8545 0.0000\nvt 0.6492 0.7869 0.0000\nvt 0.3792 0.8538 0.0000\nvt 0.6495 0.7861 0.0000\nvt 0.3792 0.8532 0.0000\nvt 0.6497 0.7854 0.0000\nvt 0.6500 0.7846 0.0000\nvt 0.3423 0.5957 0.0000\nvt 0.3464 0.5972 0.0000\nvt 0.3444 0.5964 0.0000\nvt 0.3485 0.5980 0.0000\nvt 0.3506 0.5989 0.0000\nvt 0.3527 0.5998 0.0000\nvt 0.3548 0.6008 0.0000\nvt 0.3569 0.6019 0.0000\nvt 0.3590 0.6030 0.0000\nvt 0.3611 0.6041 0.0000\nvt 0.3632 0.6053 0.0000\nvt 0.3653 0.6066 0.0000\nvt 0.3674 0.6079 0.0000\nvt 0.3695 0.6092 0.0000\nvt 0.3716 0.6106 0.0000\nvt 0.3737 0.6121 0.0000\nvt 0.3758 0.6135 0.0000\nvt 0.3778 0.6151 0.0000\nvt 0.3799 0.6166 0.0000\nvt 0.3820 0.6182 0.0000\nvt 0.3861 0.6216 0.0000\nvt 0.3840 0.6199 0.0000\nvt 0.3881 0.6233 0.0000\nvt 0.3901 0.6251 0.0000\nvt 0.3921 0.6269 0.0000\nvt 0.3940 0.6287 0.0000\nvt 0.3960 0.6306 0.0000\nvt 0.3979 0.6325 0.0000\nvt 0.3999 0.6344 0.0000\nvt 0.4018 0.6364 0.0000\nvt 0.4036 0.6384 0.0000\nvt 0.4055 0.6404 0.0000\nvt 0.4073 0.6425 0.0000\nvt 0.4091 0.6445 0.0000\nvt 0.4109 0.6466 0.0000\nvt 0.4126 0.6488 0.0000\nvt 0.4144 0.6509 0.0000\nvt 0.4161 0.6531 0.0000\nvt 0.4177 0.6552 0.0000\nvt 0.4194 0.6574 0.0000\nvt 0.4210 0.6597 0.0000\nvt 0.4226 0.6619 0.0000\nvt 0.4241 0.6641 0.0000\nvt 0.4256 0.6664 0.0000\nvt 0.4271 0.6687 0.0000\nvt 0.4286 0.6710 0.0000\nvt 0.4300 0.6733 0.0000\nvt 0.4313 0.6756 0.0000\nvt 0.4327 0.6779 0.0000\nvt 0.4340 0.6802 0.0000\nvt 0.4353 0.6825 0.0000\nvt 0.4365 0.6849 0.0000\nvt 0.4377 0.6872 0.0000\nvt 0.4388 0.6895 0.0000\nvt 0.4400 0.6919 0.0000\nvt 0.4410 0.6942 0.0000\nvt 0.4421 0.6965 0.0000\nvt 0.4431 0.6989 0.0000\nvt 0.4440 0.7012 0.0000\nvt 0.4449 0.7035 0.0000\nvt 0.4458 0.7059 0.0000\nvt 0.4466 0.7082 0.0000\nvt 0.4474 0.7105 0.0000\nvt 0.4482 0.7128 0.0000\nvt 0.4489 0.7151 0.0000\nvt 0.4495 0.7173 0.0000\nvt 0.4501 0.7196 0.0000\nvt 0.4507 0.7219 0.0000\nvt 0.4512 0.7241 0.0000\nvt 0.4517 0.7263 0.0000\nvt 0.4521 0.7285 0.0000\nvt 0.4525 0.7307 0.0000\nvt 0.4800 0.9238 0.0000\nvt 0.4528 0.7329 0.0000\nvt 0.4799 0.9250 0.0000\nvt 0.4800 0.9264 0.0000\nvt 0.4804 0.9263 0.0000\nvt 0.4802 0.9277 0.0000\nvt 0.4803 0.9291 0.0000\nvt 0.4806 0.9287 0.0000\nvt 0.4805 0.9304 0.0000\nvt 0.4806 0.9317 0.0000\nvt 0.4809 0.9312 0.0000\nvt 0.4807 0.9331 0.0000\nvt 0.4807 0.9344 0.0000\nvt 0.4810 0.9336 0.0000\nvt 0.4808 0.9357 0.0000\nvt 0.4809 0.9370 0.0000\nvt 0.4812 0.9360 0.0000\nvt 0.4809 0.9382 0.0000\nvt 0.4812 0.9384 0.0000\nvt 0.4809 0.9395 0.0000\nvt 0.4809 0.9408 0.0000\nvt 0.4813 0.9408 0.0000\nvt 0.4809 0.9421 0.0000\nvt 0.4809 0.9433 0.0000\nvt 0.4812 0.9431 0.0000\nvt 0.4808 0.9445 0.0000\nvt 0.4808 0.9458 0.0000\nvt 0.4812 0.9454 0.0000\nvt 0.4807 0.9470 0.0000\nvt 0.4806 0.9482 0.0000\nvt 0.4810 0.9477 0.0000\nvt 0.4805 0.9494 0.0000\nvt 0.4804 0.9506 0.0000\nvt 0.4808 0.9499 0.0000\nvt 0.4803 0.9518 0.0000\nvt 0.4801 0.9529 0.0000\nvt 0.4806 0.9521 0.0000\nvt 0.4799 0.9541 0.0000\nvt 0.4803 0.9543 0.0000\nvt 0.4798 0.9552 0.0000\nvt 0.4796 0.9564 0.0000\nvt 0.4799 0.9565 0.0000\nvt 0.4794 0.9575 0.0000\nvt 0.4791 0.9586 0.0000\nvt 0.4795 0.9586 0.0000\nvt 0.4789 0.9597 0.0000\nvt 0.4786 0.9608 0.0000\nvt 0.4791 0.9606 0.0000\nvt 0.4784 0.9619 0.0000\nvt 0.4781 0.9629 0.0000\nvt 0.4786 0.9627 0.0000\nvt 0.4778 0.9640 0.0000\nvt 0.4775 0.9650 0.0000\nvt 0.4780 0.9646 0.0000\nvt 0.4771 0.9661 0.0000\nvt 0.4768 0.9671 0.0000\nvt 0.4774 0.9666 0.0000\nvt 0.4764 0.9681 0.0000\nvt 0.4761 0.9690 0.0000\nvt 0.4767 0.9685 0.0000\nvt 0.4757 0.9700 0.0000\nvt 0.4753 0.9710 0.0000\nvt 0.4760 0.9703 0.0000\nvt 0.4749 0.9719 0.0000\nvt 0.4752 0.9722 0.0000\nvt 0.4744 0.9728 0.0000\nvt 0.4740 0.9737 0.0000\nvt 0.4744 0.9739 0.0000\nvt 0.4735 0.9746 0.0000\nvt 0.4730 0.9755 0.0000\nvt 0.4735 0.9756 0.0000\nvt 0.4726 0.9764 0.0000\nvt 0.4721 0.9773 0.0000\nvt 0.4725 0.9773 0.0000\nvt 0.4715 0.9781 0.0000\nvt 0.4710 0.9789 0.0000\nvt 0.4715 0.9789 0.0000\nvt 0.4705 0.9797 0.0000\nvt 0.4699 0.9805 0.0000\nvt 0.4705 0.9805 0.0000\nvt 0.4693 0.9813 0.0000\nvt 0.4688 0.9820 0.0000\nvt 0.4694 0.9820 0.0000\nvt 0.4682 0.9828 0.0000\nvt 0.4675 0.9835 0.0000\nvt 0.4682 0.9834 0.0000\nvt 0.4669 0.9842 0.0000\nvt 0.4663 0.9849 0.0000\nvt 0.4670 0.9848 0.0000\nvt 0.4656 0.9856 0.0000\nvt 0.4650 0.9863 0.0000\nvt 0.4658 0.9861 0.0000\nvt 0.4643 0.9869 0.0000\nvt 0.4636 0.9876 0.0000\nvt 0.4644 0.9874 0.0000\nvt 0.4629 0.9882 0.0000\nvt 0.4622 0.9888 0.0000\nvt 0.4631 0.9886 0.0000\nvt 0.4615 0.9893 0.0000\nvt 0.4600 0.9904 0.0000\nvt 0.4617 0.9898 0.0000\nvt 0.4585 0.9915 0.0000\nvt 0.4602 0.9909 0.0000\nvt 0.4569 0.9925 0.0000\nvt 0.4587 0.9919 0.0000\nvt 0.4553 0.9933 0.0000\nvt 0.4571 0.9928 0.0000\nvt 0.4536 0.9942 0.0000\nvt 0.4555 0.9937 0.0000\nvt 0.4519 0.9949 0.0000\nvt 0.4522 0.9953 0.0000\nvt 0.4539 0.9945 0.0000\nvt 0.4501 0.9956 0.0000\nvt 0.4504 0.9960 0.0000\nvt 0.4483 0.9962 0.0000\nvt 0.4486 0.9966 0.0000\nvt 0.4465 0.9968 0.0000\nvt 0.4468 0.9971 0.0000\nvt 0.4446 0.9972 0.0000\nvt 0.4449 0.9976 0.0000\nvt 0.4427 0.9976 0.0000\nvt 0.4430 0.9980 0.0000\nvt 0.4407 0.9979 0.0000\nvt 0.4410 0.9983 0.0000\nvt 0.4388 0.9982 0.0000\nvt 0.4390 0.9986 0.0000\nvt 0.4367 0.9983 0.0000\nvt 0.4370 0.9987 0.0000\nvt 0.4347 0.9984 0.0000\nvt 0.4349 0.9988 0.0000\nvt 0.4326 0.9985 0.0000\nvt 0.4328 0.9989 0.0000\nvt 0.4305 0.9984 0.0000\nvt 0.4307 0.9988 0.0000\nvt 0.4283 0.9983 0.0000\nvt 0.4285 0.9987 0.0000\nvt 0.4262 0.9981 0.0000\nvt 0.4263 0.9985 0.0000\nvt 0.4240 0.9978 0.0000\nvt 0.4241 0.9982 0.0000\nvt 0.4217 0.9974 0.0000\nvt 0.2466 0.9669 0.0000\nvt 0.4219 0.9978 0.0000\nvt 0.0007 0.2800 0.0000\nvt 0.0005 0.2800 0.0000\nvt 0.2463 0.9665 0.0000\nvt 0.1022 0.3214 0.0000\nvt 0.0009 0.2801 0.0000\nvt 0.0756 0.2338 0.0000\nvt 0.0754 0.2338 0.0000\nvt 0.0012 0.2802 0.0000\nvt 0.0757 0.2339 0.0000\nvt 0.0759 0.2339 0.0000\nvt 0.1870 0.5435 0.0000\nvt 0.1880 0.5400 0.0000\nvt 0.1878 0.5403 0.0000\nvt 0.1875 0.5406 0.0000\nvt 0.1873 0.5409 0.0000\nvt 0.1871 0.5413 0.0000\nvt 0.1870 0.5417 0.0000\nvt 0.1869 0.5422 0.0000\nvt 0.1869 0.5426 0.0000\nvt 0.1869 0.5431 0.0000\nvt 0.6401 0.9600 0.0000\nvt 0.4258 0.9993 0.0000\nvt 0.4236 0.9989 0.0000\nvt 0.4235 0.9989 0.0000\nvt 0.6378 0.9596 0.0000\nvt 0.4620 0.9223 0.0000\nvt 0.2483 0.9681 0.0000\nvt 0.4281 0.9996 0.0000\nvt 0.6425 0.9604 0.0000\nvt 0.4302 0.9998 0.0000\nvt 0.4280 0.9996 0.0000\nvt 0.6449 0.9607 0.0000\nvt 0.4324 0.9999 0.0000\nvt 0.4303 0.9998 0.0000\nvt 0.6472 0.9608 0.0000\nvt 0.4345 1.0000 0.0000\nvt 0.4325 0.9999 0.0000\nvt 0.6496 0.9609 0.0000\nvt 0.4366 1.0000 0.0000\nvt 0.4347 1.0000 0.0000\nvt 0.6519 0.9609 0.0000\nvt 0.4387 0.9999 0.0000\nvt 0.4368 1.0000 0.0000\nvt 0.6543 0.9607 0.0000\nvt 0.4407 0.9997 0.0000\nvt 0.4389 0.9999 0.0000\nvt 0.6566 0.9605 0.0000\nvt 0.4427 0.9995 0.0000\nvt 0.4410 0.9997 0.0000\nvt 0.6589 0.9602 0.0000\nvt 0.4447 0.9992 0.0000\nvt 0.4430 0.9994 0.0000\nvt 0.6612 0.9598 0.0000\nvt 0.4466 0.9988 0.0000\nvt 0.4450 0.9991 0.0000\nvt 0.6634 0.9593 0.0000\nvt 0.4485 0.9983 0.0000\nvt 0.4469 0.9987 0.0000\nvt 0.6657 0.9587 0.0000\nvt 0.4504 0.9978 0.0000\nvt 0.4488 0.9982 0.0000\nvt 0.6680 0.9581 0.0000\nvt 0.4522 0.9972 0.0000\nvt 0.4507 0.9977 0.0000\nvt 0.6702 0.9573 0.0000\nvt 0.4540 0.9966 0.0000\nvt 0.4525 0.9971 0.0000\nvt 0.6724 0.9564 0.0000\nvt 0.4557 0.9958 0.0000\nvt 0.4543 0.9964 0.0000\nvt 0.6746 0.9555 0.0000\nvt 0.4574 0.9950 0.0000\nvt 0.4560 0.9956 0.0000\nvt 0.6768 0.9545 0.0000\nvt 0.4590 0.9941 0.0000\nvt 0.4577 0.9948 0.0000\nvt 0.6789 0.9534 0.0000\nvt 0.4606 0.9932 0.0000\nvt 0.4593 0.9939 0.0000\nvt 0.6811 0.9522 0.0000\nvt 0.4622 0.9922 0.0000\nvt 0.4609 0.9929 0.0000\nvt 0.6832 0.9509 0.0000\nvt 0.4637 0.9911 0.0000\nvt 0.4625 0.9918 0.0000\nvt 0.6852 0.9495 0.0000\nvt 0.4652 0.9899 0.0000\nvt 0.4640 0.9907 0.0000\nvt 0.6873 0.9481 0.0000\nvt 0.4666 0.9887 0.0000\nvt 0.4654 0.9896 0.0000\nvt 0.6893 0.9466 0.0000\nvt 0.4680 0.9874 0.0000\nvt 0.4668 0.9883 0.0000\nvt 0.6913 0.9449 0.0000\nvt 0.4693 0.9860 0.0000\nvt 0.4681 0.9870 0.0000\nvt 0.6933 0.9433 0.0000\nvt 0.4706 0.9846 0.0000\nvt 0.4694 0.9857 0.0000\nvt 0.6952 0.9415 0.0000\nvt 0.4718 0.9831 0.0000\nvt 0.4706 0.9843 0.0000\nvt 0.6971 0.9397 0.0000\nvt 0.4729 0.9816 0.0000\nvt 0.4718 0.9828 0.0000\nvt 0.6989 0.9378 0.0000\nvt 0.4741 0.9800 0.0000\nvt 0.4729 0.9813 0.0000\nvt 0.7008 0.9358 0.0000\nvt 0.4751 0.9783 0.0000\nvt 0.4740 0.9797 0.0000\nvt 0.4756 0.9775 0.0000\nvt 0.4750 0.9780 0.0000\nvt 0.7025 0.9337 0.0000\nvt 0.4761 0.9766 0.0000\nvt 0.4766 0.9757 0.0000\nvt 0.4759 0.9763 0.0000\nvt 0.7043 0.9316 0.0000\nvt 0.4771 0.9748 0.0000\nvt 0.4775 0.9739 0.0000\nvt 0.4768 0.9746 0.0000\nvt 0.7060 0.9294 0.0000\nvt 0.4776 0.9737 0.0000\nvt 0.4780 0.9730 0.0000\nvt 0.4784 0.9719 0.0000\nvt 0.4777 0.9728 0.0000\nvt 0.4784 0.9720 0.0000\nvt 0.7077 0.9272 0.0000\nvt 0.4788 0.9711 0.0000\nvt 0.4792 0.9701 0.0000\nvt 0.7093 0.9249 0.0000\nvt 0.4796 0.9691 0.0000\nvt 0.4800 0.9681 0.0000\nvt 0.4799 0.9682 0.0000\nvt 0.7109 0.9225 0.0000\nvt 0.4803 0.9671 0.0000\nvt 0.4807 0.9661 0.0000\nvt 0.4805 0.9663 0.0000\nvt 0.7125 0.9200 0.0000\nvt 0.4810 0.9650 0.0000\nvt 0.4813 0.9640 0.0000\nvt 0.4811 0.9643 0.0000\nvt 0.7140 0.9175 0.0000\nvt 0.4816 0.9629 0.0000\nvt 0.4819 0.9618 0.0000\nvt 0.4817 0.9623 0.0000\nvt 0.7154 0.9150 0.0000\nvt 0.4821 0.9608 0.0000\nvt 0.4824 0.9597 0.0000\nvt 0.4822 0.9603 0.0000\nvt 0.7168 0.9123 0.0000\nvt 0.4826 0.9585 0.0000\nvt 0.4829 0.9574 0.0000\nvt 0.4826 0.9582 0.0000\nvt 0.7182 0.9097 0.0000\nvt 0.4831 0.9563 0.0000\nvt 0.4833 0.9551 0.0000\nvt 0.4830 0.9561 0.0000\nvt 0.7195 0.9070 0.0000\nvt 0.4834 0.9540 0.0000\nvt 0.4836 0.9528 0.0000\nvt 0.4833 0.9540 0.0000\nvt 0.7208 0.9042 0.0000\nvt 0.4838 0.9516 0.0000\nvt 0.4836 0.9518 0.0000\nvt 0.4839 0.9504 0.0000\nvt 0.7221 0.9014 0.0000\nvt 0.4840 0.9492 0.0000\nvt 0.4838 0.9496 0.0000\nvt 0.4841 0.9480 0.0000\nvt 0.7232 0.8985 0.0000\nvt 0.4842 0.9468 0.0000\nvt 0.4840 0.9474 0.0000\nvt 0.4843 0.9456 0.0000\nvt 0.7244 0.8956 0.0000\nvt 0.4843 0.9443 0.0000\nvt 0.4841 0.9451 0.0000\nvt 0.4844 0.9431 0.0000\nvt 0.7255 0.8926 0.0000\nvt 0.4844 0.9418 0.0000\nvt 0.4842 0.9428 0.0000\nvt 0.4844 0.9406 0.0000\nvt 0.7265 0.8896 0.0000\nvt 0.4844 0.9393 0.0000\nvt 0.4842 0.9405 0.0000\nvt 0.4844 0.9380 0.0000\nvt 0.7275 0.8866 0.0000\nvt 0.4844 0.9367 0.0000\nvt 0.4842 0.9381 0.0000\nvt 0.4843 0.9354 0.0000\nvt 0.4841 0.9357 0.0000\nvt 0.7284 0.8835 0.0000\nvt 0.4843 0.9341 0.0000\nvt 0.4842 0.9328 0.0000\nvt 0.4839 0.9333 0.0000\nvt 0.7293 0.8804 0.0000\nvt 0.4841 0.9314 0.0000\nvt 0.4840 0.9301 0.0000\nvt 0.4838 0.9309 0.0000\nvt 0.7301 0.8772 0.0000\nvt 0.4839 0.9288 0.0000\nvt 0.4837 0.9274 0.0000\nvt 0.4835 0.9285 0.0000\nvt 0.7309 0.8740 0.0000\nvt 0.4836 0.9261 0.0000\nvt 0.4834 0.9247 0.0000\nvt 0.4832 0.9260 0.0000\nvt 0.7317 0.8708 0.0000\nvt 0.4832 0.9233 0.0000\nvt 0.4558 0.7325 0.0000\nvt 0.4556 0.7326 0.0000\nvt 0.4829 0.9235 0.0000\nvt 0.7320 0.8707 0.0000\nvt 0.7839 0.6348 0.0000\nvt 0.7305 0.8772 0.0000\nvt 0.7313 0.8740 0.0000\nvt 0.7296 0.8803 0.0000\nvt 0.7287 0.8834 0.0000\nvt 0.7278 0.8865 0.0000\nvt 0.7268 0.8896 0.0000\nvt 0.7258 0.8926 0.0000\nvt 0.7247 0.8956 0.0000\nvt 0.7235 0.8985 0.0000\nvt 0.7223 0.9014 0.0000\nvt 0.7211 0.9042 0.0000\nvt 0.7198 0.9070 0.0000\nvt 0.7184 0.9097 0.0000\nvt 0.7170 0.9124 0.0000\nvt 0.7156 0.9150 0.0000\nvt 0.7141 0.9176 0.0000\nvt 0.7126 0.9201 0.0000\nvt 0.7111 0.9225 0.0000\nvt 0.7095 0.9249 0.0000\nvt 0.7078 0.9272 0.0000\nvt 0.7061 0.9295 0.0000\nvt 0.7044 0.9317 0.0000\nvt 0.7027 0.9338 0.0000\nvt 0.7009 0.9358 0.0000\nvt 0.6990 0.9378 0.0000\nvt 0.6952 0.9416 0.0000\nvt 0.6913 0.9450 0.0000\nvt 0.6852 0.9496 0.0000\nvt 0.6724 0.9565 0.0000\nvt 0.6679 0.9581 0.0000\nvt 0.6657 0.9588 0.0000\nvt 0.6611 0.9598 0.0000\nvt 0.6588 0.9602 0.0000\nvt 0.6565 0.9605 0.0000\nvt 0.6542 0.9607 0.0000\nvt 0.6495 0.9609 0.0000\nvt 0.6449 0.9606 0.0000\nvt 0.6402 0.9600 0.0000\nvt 0.4622 0.9223 0.0000\nvt 0.7846 0.6318 0.0000\nvt 0.4556 0.7313 0.0000\nvt 0.7848 0.6317 0.0000\nvt 0.7842 0.6347 0.0000\nvt 0.4554 0.7301 0.0000\nvt 0.4553 0.7304 0.0000\nvt 0.7851 0.6287 0.0000\nvt 0.4552 0.7288 0.0000\nvt 0.4550 0.7276 0.0000\nvt 0.4549 0.7281 0.0000\nvt 0.7857 0.6256 0.0000\nvt 0.4548 0.7264 0.0000\nvt 0.4546 0.7252 0.0000\nvt 0.4544 0.7259 0.0000\nvt 0.7861 0.6225 0.0000\nvt 0.4543 0.7240 0.0000\nvt 0.4540 0.7228 0.0000\nvt 0.4540 0.7236 0.0000\nvt 0.7866 0.6194 0.0000\nvt 0.4538 0.7216 0.0000\nvt 0.4535 0.7203 0.0000\nvt 0.4534 0.7214 0.0000\nvt 0.7869 0.6163 0.0000\nvt 0.4532 0.7191 0.0000\nvt 0.4529 0.7178 0.0000\nvt 0.4528 0.7191 0.0000\nvt 0.7872 0.6132 0.0000\nvt 0.4525 0.7166 0.0000\nvt 0.4522 0.7154 0.0000\nvt 0.4522 0.7168 0.0000\nvt 0.7875 0.6101 0.0000\nvt 0.4518 0.7141 0.0000\nvt 0.4516 0.7145 0.0000\nvt 0.4516 0.7133 0.0000\nvt 0.4511 0.7116 0.0000\nvt 0.4515 0.7129 0.0000\nvt 0.4509 0.7110 0.0000\nvt 0.4508 0.7121 0.0000\nvt 0.7876 0.6087 0.0000\nvt 0.7877 0.6069 0.0000\nvt 0.4507 0.7103 0.0000\nvt 0.7879 0.6037 0.0000\nvt 0.4503 0.7091 0.0000\nvt 0.4498 0.7078 0.0000\nvt 0.4501 0.7086 0.0000\nvt 0.7880 0.6006 0.0000\nvt 0.4494 0.7066 0.0000\nvt 0.4490 0.7053 0.0000\nvt 0.4492 0.7062 0.0000\nvt 0.7881 0.5974 0.0000\nvt 0.4485 0.7040 0.0000\nvt 0.4480 0.7027 0.0000\nvt 0.4484 0.7039 0.0000\nvt 0.7881 0.5942 0.0000\nvt 0.4475 0.7015 0.0000\nvt 0.4471 0.7002 0.0000\nvt 0.7881 0.5910 0.0000\nvt 0.4465 0.6989 0.0000\nvt 0.4465 0.6991 0.0000\nvt 0.4460 0.6977 0.0000\nvt 0.7880 0.5878 0.0000\nvt 0.4455 0.6964 0.0000\nvt 0.4455 0.6967 0.0000\nvt 0.4450 0.6951 0.0000\nvt 0.7879 0.5845 0.0000\nvt 0.4444 0.6938 0.0000\nvt 0.4445 0.6943 0.0000\nvt 0.4438 0.6926 0.0000\nvt 0.7877 0.5813 0.0000\nvt 0.4433 0.6913 0.0000\nvt 0.4434 0.6919 0.0000\nvt 0.4427 0.6900 0.0000\nvt 0.7875 0.5781 0.0000\nvt 0.4421 0.6887 0.0000\nvt 0.4422 0.6895 0.0000\nvt 0.4415 0.6875 0.0000\nvt 0.7872 0.5749 0.0000\nvt 0.4408 0.6862 0.0000\nvt 0.4411 0.6871 0.0000\nvt 0.4402 0.6849 0.0000\nvt 0.7869 0.5716 0.0000\nvt 0.4396 0.6837 0.0000\nvt 0.4399 0.6847 0.0000\nvt 0.4389 0.6824 0.0000\nvt 0.7865 0.5684 0.0000\nvt 0.4382 0.6811 0.0000\nvt 0.4386 0.6823 0.0000\nvt 0.4376 0.6799 0.0000\nvt 0.7861 0.5652 0.0000\nvt 0.4369 0.6786 0.0000\nvt 0.4373 0.6799 0.0000\nvt 0.4362 0.6774 0.0000\nvt 0.4360 0.6775 0.0000\nvt 0.7856 0.5620 0.0000\nvt 0.4355 0.6761 0.0000\nvt 0.4348 0.6749 0.0000\nvt 0.4346 0.6752 0.0000\nvt 0.7851 0.5588 0.0000\nvt 0.4341 0.6736 0.0000\nvt 0.4333 0.6724 0.0000\nvt 0.4332 0.6728 0.0000\nvt 0.7845 0.5556 0.0000\nvt 0.4326 0.6711 0.0000\nvt 0.4318 0.6699 0.0000\nvt 0.4318 0.6704 0.0000\nvt 0.7839 0.5525 0.0000\nvt 0.4311 0.6687 0.0000\nvt 0.4303 0.6675 0.0000\nvt 0.4303 0.6681 0.0000\nvt 0.7832 0.5493 0.0000\nvt 0.4295 0.6662 0.0000\nvt 0.4287 0.6650 0.0000\nvt 0.4288 0.6657 0.0000\nvt 0.7825 0.5462 0.0000\nvt 0.4279 0.6638 0.0000\nvt 0.4271 0.6626 0.0000\nvt 0.4273 0.6634 0.0000\nvt 0.7818 0.5430 0.0000\nvt 0.4266 0.6618 0.0000\nvt 0.4255 0.6602 0.0000\nvt 0.4263 0.6614 0.0000\nvt 0.4250 0.6595 0.0000\nvt 0.4257 0.6611 0.0000\nvt 0.7810 0.5399 0.0000\nvt 0.4247 0.6590 0.0000\nvt 0.7801 0.5368 0.0000\nvt 0.4239 0.6578 0.0000\nvt 0.4230 0.6566 0.0000\nvt 0.4234 0.6573 0.0000\nvt 0.7792 0.5338 0.0000\nvt 0.4222 0.6555 0.0000\nvt 0.4213 0.6543 0.0000\nvt 0.4218 0.6550 0.0000\nvt 0.7783 0.5308 0.0000\nvt 0.4204 0.6531 0.0000\nvt 0.4196 0.6520 0.0000\nvt 0.4201 0.6528 0.0000\nvt 0.7773 0.5278 0.0000\nvt 0.4187 0.6508 0.0000\nvt 0.4178 0.6497 0.0000\nvt 0.4184 0.6506 0.0000\nvt 0.7763 0.5248 0.0000\nvt 0.4169 0.6485 0.0000\nvt 0.4160 0.6474 0.0000\nvt 0.4167 0.6484 0.0000\nvt 0.7752 0.5218 0.0000\nvt 0.4151 0.6463 0.0000\nvt 0.4142 0.6452 0.0000\nvt 0.4150 0.6462 0.0000\nvt 0.7741 0.5189 0.0000\nvt 0.4133 0.6441 0.0000\nvt 0.4124 0.6430 0.0000\nvt 0.4132 0.6441 0.0000\nvt 0.7730 0.5160 0.0000\nvt 0.4114 0.6419 0.0000\nvt 0.4114 0.6420 0.0000\nvt 0.4105 0.6408 0.0000\nvt 0.7718 0.5132 0.0000\nvt 0.4096 0.6397 0.0000\nvt 0.4096 0.6399 0.0000\nvt 0.4086 0.6387 0.0000\nvt 0.7705 0.5104 0.0000\nvt 0.4077 0.6376 0.0000\nvt 0.4077 0.6378 0.0000\nvt 0.4067 0.6365 0.0000\nvt 0.7693 0.5076 0.0000\nvt 0.4058 0.6355 0.0000\nvt 0.4058 0.6358 0.0000\nvt 0.4038 0.6334 0.0000\nvt 0.4039 0.6338 0.0000\nvt 0.7680 0.5049 0.0000\nvt 0.4019 0.6314 0.0000\nvt 0.4020 0.6318 0.0000\nvt 0.7666 0.5022 0.0000\nvt 0.3999 0.6294 0.0000\nvt 0.4000 0.6298 0.0000\nvt 0.7652 0.4996 0.0000\nvt 0.3979 0.6275 0.0000\nvt 0.3981 0.6279 0.0000\nvt 0.7638 0.4970 0.0000\nvt 0.3959 0.6256 0.0000\nvt 0.3961 0.6260 0.0000\nvt 0.7623 0.4944 0.0000\nvt 0.3939 0.6237 0.0000\nvt 0.3941 0.6241 0.0000\nvt 0.7608 0.4919 0.0000\nvt 0.3919 0.6219 0.0000\nvt 0.3921 0.6223 0.0000\nvt 0.7593 0.4895 0.0000\nvt 0.3898 0.6201 0.0000\nvt 0.3900 0.6205 0.0000\nvt 0.7577 0.4871 0.0000\nvt 0.3878 0.6183 0.0000\nvt 0.3880 0.6188 0.0000\nvt 0.7561 0.4847 0.0000\nvt 0.3857 0.6166 0.0000\nvt 0.3859 0.6171 0.0000\nvt 0.7545 0.4824 0.0000\nvt 0.3837 0.6150 0.0000\nvt 0.3839 0.6154 0.0000\nvt 0.7528 0.4802 0.0000\nvt 0.3816 0.6134 0.0000\nvt 0.3818 0.6138 0.0000\nvt 0.7511 0.4780 0.0000\nvt 0.3795 0.6118 0.0000\nvt 0.3797 0.6122 0.0000\nvt 0.7494 0.4759 0.0000\nvt 0.3774 0.6102 0.0000\nvt 0.3776 0.6106 0.0000\nvt 0.7477 0.4738 0.0000\nvt 0.3753 0.6088 0.0000\nvt 0.3755 0.6091 0.0000\nvt 0.7459 0.4718 0.0000\nvt 0.3732 0.6073 0.0000\nvt 0.3733 0.6077 0.0000\nvt 0.7441 0.4699 0.0000\nvt 0.3711 0.6059 0.0000\nvt 0.3712 0.6063 0.0000\nvt 0.7422 0.4680 0.0000\nvt 0.3691 0.6046 0.0000\nvt 0.3691 0.6049 0.0000\nvt 0.7404 0.4662 0.0000\nvt 0.3670 0.6033 0.0000\nvt 0.3669 0.6036 0.0000\nvt 0.7385 0.4645 0.0000\nvt 0.3649 0.6021 0.0000\nvt 0.3648 0.6023 0.0000\nvt 0.7366 0.4628 0.0000\nvt 0.3628 0.6009 0.0000\nvt 0.3627 0.6011 0.0000\nvt 0.7347 0.4612 0.0000\nvt 0.3607 0.5997 0.0000\nvt 0.3605 0.5999 0.0000\nvt 0.7327 0.4597 0.0000\nvt 0.3586 0.5987 0.0000\nvt 0.3584 0.5988 0.0000\nvt 0.7307 0.4583 0.0000\nvt 0.3565 0.5976 0.0000\nvt 0.3563 0.5978 0.0000\nvt 0.7288 0.4569 0.0000\nvt 0.3544 0.5966 0.0000\nvt 0.3542 0.5968 0.0000\nvt 0.7268 0.4556 0.0000\nvt 0.3523 0.5957 0.0000\nvt 0.3521 0.5958 0.0000\nvt 0.7247 0.4543 0.0000\nvt 0.3502 0.5948 0.0000\nvt 0.7227 0.4532 0.0000\nvt 0.3481 0.5939 0.0000\nvt 0.3499 0.5949 0.0000\nvt 0.7207 0.4521 0.0000\nvt 0.3460 0.5932 0.0000\nvt 0.3478 0.5941 0.0000\nvt 0.7186 0.4511 0.0000\nvt 0.3440 0.5924 0.0000\nvt 0.3458 0.5933 0.0000\nvt 0.3437 0.5926 0.0000\nvt 0.7190 0.4509 0.0000\nvt 0.7211 0.4520 0.0000\nvt 0.7232 0.4531 0.0000\nvt 0.7253 0.4543 0.0000\nvt 0.7273 0.4556 0.0000\nvt 0.7294 0.4569 0.0000\nvt 0.7314 0.4583 0.0000\nvt 0.7334 0.4598 0.0000\nvt 0.7354 0.4614 0.0000\nvt 0.7374 0.4631 0.0000\nvt 0.7393 0.4648 0.0000\nvt 0.7412 0.4666 0.0000\nvt 0.7431 0.4685 0.0000\nvt 0.7450 0.4704 0.0000\nvt 0.7469 0.4724 0.0000\nvt 0.7487 0.4745 0.0000\nvt 0.7504 0.4766 0.0000\nvt 0.7522 0.4788 0.0000\nvt 0.7539 0.4811 0.0000\nvt 0.7556 0.4834 0.0000\nvt 0.7573 0.4858 0.0000\nvt 0.7589 0.4882 0.0000\nvt 0.7605 0.4907 0.0000\nvt 0.7620 0.4933 0.0000\nvt 0.7635 0.4959 0.0000\nvt 0.7650 0.4985 0.0000\nvt 0.7664 0.5012 0.0000\nvt 0.7678 0.5039 0.0000\nvt 0.7692 0.5067 0.0000\nvt 0.7705 0.5096 0.0000\nvt 0.7718 0.5124 0.0000\nvt 0.7730 0.5153 0.0000\nvt 0.7742 0.5183 0.0000\nvt 0.7753 0.5213 0.0000\nvt 0.7764 0.5243 0.0000\nvt 0.7775 0.5274 0.0000\nvt 0.7785 0.5304 0.0000\nvt 0.7794 0.5336 0.0000\nvt 0.7803 0.5367 0.0000\nvt 0.7812 0.5399 0.0000\nvt 0.7820 0.5431 0.0000\nvt 0.7828 0.5463 0.0000\nvt 0.7835 0.5495 0.0000\nvt 0.7841 0.5527 0.0000\nvt 0.7847 0.5560 0.0000\nvt 0.7853 0.5593 0.0000\nvt 0.7858 0.5626 0.0000\nvt 0.7863 0.5659 0.0000\nvt 0.7867 0.5692 0.0000\nvt 0.7871 0.5725 0.0000\nvt 0.7874 0.5758 0.0000\nvt 0.7876 0.5791 0.0000\nvt 0.7878 0.5824 0.0000\nvt 0.7880 0.5857 0.0000\nvt 0.7881 0.5890 0.0000\nvt 0.7882 0.5923 0.0000\nvt 0.7881 0.5956 0.0000\nvt 0.7881 0.5989 0.0000\nvt 0.7880 0.6022 0.0000\nvt 0.7878 0.6054 0.0000\nvt 0.7879 0.6100 0.0000\nvt 0.7881 0.6068 0.0000\nvt 0.7876 0.6131 0.0000\nvt 0.7873 0.6163 0.0000\nvt 0.7869 0.6194 0.0000\nvt 0.7865 0.6226 0.0000\nvt 0.7860 0.6256 0.0000\nvt 0.7854 0.6287 0.0000\nvt 0.7035 0.4437 0.0000\nvt 0.7038 0.4437 0.0000\nvt 0.7039 0.4437 0.0000\nvt 0.7732 0.1950 0.0000\nvt 0.7736 0.1949 0.0000\nvt 0.8687 0.2528 0.0000\nvt 0.7194 0.4509 0.0000\nvt 0.7716 0.1952 0.0000\nvt 0.7720 0.1951 0.0000\nvt 0.5874 0.3893 0.0000\nvt 0.7721 0.1950 0.0000\nvt 0.7718 0.1950 0.0000\nvt 0.7720 0.1950 0.0000\nvt 0.3434 0.5928 0.0000\nvt 0.3431 0.5930 0.0000\nvt 0.3429 0.5934 0.0000\nvt 0.3427 0.5937 0.0000\nvt 0.3425 0.5941 0.0000\nvt 0.3424 0.5945 0.0000\nvt 0.3423 0.5949 0.0000\nvt 0.3423 0.5953 0.0000\nvt 0.5579 0.0640 0.0000\nvt 0.5577 0.0641 0.0000\nvt 0.5631 0.3779 0.0000\nvt 0.4535 0.0004 0.0000\nvt 0.5582 0.0640 0.0000\nvt 0.0762 0.2338 0.0000\nvt 0.0759 0.2337 0.0000\nvt 0.0010 0.2807 0.0000\nvt 0.2100 0.5919 0.0000\nvt 0.2102 0.5925 0.0000\nvt 0.2105 0.5923 0.0000\nvt 0.2914 0.8045 0.0000\nvt 0.2099 0.5913 0.0000\nvt 0.2103 0.5917 0.0000\nvt 0.2098 0.5906 0.0000\nvt 0.2101 0.5911 0.0000\nvt 0.2097 0.5899 0.0000\nvt 0.2100 0.5905 0.0000\nvt 0.2098 0.5892 0.0000\nvt 0.2099 0.5898 0.0000\nvt 0.2098 0.5885 0.0000\nvt 0.2099 0.5891 0.0000\nvt 0.2100 0.5878 0.0000\nvt 0.2099 0.5884 0.0000\nvt 0.2101 0.5871 0.0000\nvt 0.2100 0.5877 0.0000\nvt 0.2102 0.5870 0.0000\nvt 0.2103 0.5865 0.0000\nvt 0.2105 0.5870 0.0000\nvt 0.2104 0.5877 0.0000\nvt 0.2106 0.5859 0.0000\nvt 0.2107 0.5864 0.0000\nvt 0.2109 0.5853 0.0000\nvt 0.2110 0.5858 0.0000\nvt 0.2113 0.5848 0.0000\nvt 0.2113 0.5852 0.0000\nvt 0.2116 0.5844 0.0000\nvt 0.2116 0.5847 0.0000\nvt 0.2120 0.5840 0.0000\nvt 0.2120 0.5843 0.0000\nvt 0.2125 0.5837 0.0000\nvt 0.2125 0.5840 0.0000\nvt 0.2129 0.5835 0.0000\nvt 0.1588 0.4582 0.0000\nvt 0.3438 0.5303 0.0000\nvt 0.3439 0.5308 0.0000\nvt 0.2129 0.5838 0.0000\nvt 0.3444 0.5302 0.0000\nvt 0.3449 0.5301 0.0000\nvt 0.3444 0.5306 0.0000\nvt 0.3454 0.5301 0.0000\nvt 0.3449 0.5306 0.0000\nvt 0.3459 0.5302 0.0000\nvt 0.3454 0.5306 0.0000\nvt 0.3483 0.3673 0.0000\nvt 0.3462 0.5303 0.0000\nvt 0.3459 0.5308 0.0000\nvt 0.3464 0.5305 0.0000\nvt 0.3466 0.5306 0.0000\nvt 0.3463 0.5310 0.0000\nvt 0.3469 0.5308 0.0000\nvt 0.3473 0.5312 0.0000\nvt 0.3471 0.5310 0.0000\nvt 0.3477 0.5316 0.0000\nvt 0.3474 0.5314 0.0000\nvt 0.3481 0.5322 0.0000\nvt 0.3478 0.5319 0.0000\nvt 0.3484 0.5328 0.0000\nvt 0.3480 0.5325 0.0000\nvt 0.3486 0.5335 0.0000\nvt 0.3483 0.5331 0.0000\nvt 0.4597 0.9191 0.0000\nvt 0.3488 0.5342 0.0000\nvt 0.3484 0.5338 0.0000\nvt 0.3489 0.5349 0.0000\nvt 0.3485 0.5344 0.0000\nvt 0.3489 0.5357 0.0000\nvt 0.3486 0.5351 0.0000\nvt 0.3498 0.7877 0.0000\nvt 0.3495 0.7873 0.0000\nvt 0.3486 0.5358 0.0000\nvt 0.2915 0.8042 0.0000\nvt 0.2916 0.8039 0.0000\nvt 0.2461 0.9652 0.0000\nvt 0.3472 0.0666 0.0000\nvt 0.4510 0.0024 0.0000\nvt 0.4512 0.0023 0.0000\nvt 0.4598 0.9197 0.0000\nvt 0.4599 0.9191 0.0000\nvt 0.3469 0.0663 0.0000\nvt 0.4513 0.0020 0.0000\nvt 0.4509 0.0019 0.0000\nvt 0.4511 0.0019 0.0000\nvt 0.3480 0.3670 0.0000\nvt 0.1589 0.4580 0.0000\nvt 0.1590 0.4577 0.0000\nvt 0.0737 0.2357 0.0000\nvt 0.0739 0.2355 0.0000\nvt 0.0008 0.2806 0.0000\nvt 0.7727 0.1947 0.0000\nvt 0.7733 0.1947 0.0000\nvt 0.7735 0.1948 0.0000\nvt 0.7730 0.1948 0.0000\nvt 0.2460 0.9652 0.0000\nvt 0.2462 0.9657 0.0000\nvt 0.2481 0.9680 0.0000\nvt 0.2479 0.9681 0.0000\nvt 0.2477 0.9680 0.0000\nvt 0.4619 0.9221 0.0000\nvt 0.4616 0.9222 0.0000\nvt 0.6904 0.6179 0.0000\nvt 0.6504 0.7845 0.0000\nvt 0.6508 0.7830 0.0000\nvt 0.4014 0.8283 0.0000\nvt 0.3187 0.6256 0.0000\nvt 0.3184 0.6253 0.0000\nvt 0.3162 0.6239 0.0000\nvt 0.3165 0.6240 0.0000\nvt 0.3167 0.6241 0.0000\nvt 0.3168 0.6242 0.0000\nvt 0.3170 0.6243 0.0000\nvt 0.3173 0.6245 0.0000\nvt 0.3174 0.6246 0.0000\nvt 0.3175 0.6247 0.0000\nvt 0.3178 0.6249 0.0000\nvt 0.3181 0.6251 0.0000\nvt 0.4015 0.8283 0.0000\nvt 0.3191 0.6256 0.0000\nvt 0.3189 0.6256 0.0000\nvt 0.4017 0.8282 0.0000\nvt 0.3192 0.6256 0.0000\nvt 0.4018 0.8282 0.0000\nvt 0.3193 0.6256 0.0000\nvt 0.4020 0.8280 0.0000\nvt 0.3194 0.6255 0.0000\nvt 0.4021 0.8279 0.0000\nvt 0.3196 0.6255 0.0000\nvt 0.3195 0.6255 0.0000\nvt 0.4021 0.8278 0.0000\nvt 0.3196 0.6254 0.0000\nvt 0.4020 0.8277 0.0000\nvt 0.3196 0.6253 0.0000\nvt 0.4018 0.8275 0.0000\nvt 0.3195 0.6251 0.0000\nvt 0.3196 0.6252 0.0000\nvt 0.4016 0.8274 0.0000\nvt 0.3194 0.6250 0.0000\nvt 0.4013 0.8273 0.0000\nvt 0.3190 0.6248 0.0000\nvt 0.3192 0.6249 0.0000\nvt 0.4587 0.8133 0.0000\nvt 0.2951 0.8012 0.0000\nvt 0.2142 0.5911 0.0000\nvt 0.3188 0.6247 0.0000\nvt 0.3503 0.7853 0.0000\nvt 0.3501 0.7852 0.0000\nvt 0.2950 0.8011 0.0000\nvt 0.4564 0.5757 0.0000\nvt 0.5688 0.7845 0.0000\nvt 0.6292 0.8015 0.0000\nvt 0.5690 0.7844 0.0000\nvt 0.5691 0.7844 0.0000\nvt 0.5653 0.5359 0.0000\nvt 0.5694 0.7844 0.0000\nvt 0.5653 0.5356 0.0000\nvt 0.5656 0.5358 0.0000\nvt 0.5657 0.5354 0.0000\nvt 0.3500 0.7852 0.0000\nvt 0.4564 0.5752 0.0000\nvt 0.5654 0.5353 0.0000\nvt 0.3184 0.6251 0.0000\nvt 0.3187 0.6251 0.0000\nvt 0.3168 0.6239 0.0000\nvt 0.3173 0.6242 0.0000\nvt 0.3172 0.6239 0.0000\nvt 0.3178 0.6246 0.0000\nvt 0.3177 0.6242 0.0000\nvt 0.3182 0.6247 0.0000\nvt 0.4564 0.5722 0.0000\nvt 0.4585 0.5730 0.0000\nvt 0.4556 0.5728 0.0000\nvt 0.4552 0.5726 0.0000\nvt 0.4555 0.5728 0.0000\nvt 0.4565 0.5747 0.0000\nvt 0.4564 0.5747 0.0000\nvt 0.4581 0.5730 0.0000\nvt 0.4577 0.5731 0.0000\nvt 0.4574 0.5733 0.0000\nvt 0.4571 0.5735 0.0000\nvt 0.4569 0.5739 0.0000\nvt 0.4567 0.5743 0.0000\nvt 0.4557 0.5731 0.0000\nvt 0.4559 0.5734 0.0000\nvt 0.4561 0.5738 0.0000\nvt 0.4563 0.5742 0.0000\nvt 0.4558 0.5728 0.0000\nvt 0.3474 0.5336 0.0000\nvt 0.3476 0.5337 0.0000\nvt 0.3478 0.5338 0.0000\nvt 0.3205 0.6227 0.0000\nvt 0.3209 0.6224 0.0000\nvt 0.4548 0.5729 0.0000\nvt 0.3222 0.6216 0.0000\nvt 0.3218 0.6218 0.0000\nvt 0.4551 0.5728 0.0000\nvt 0.3214 0.6221 0.0000\nvt 0.7733 0.1948 0.0000\nvt 0.3201 0.6231 0.0000\nvt 0.3202 0.6229 0.0000\nvt 0.3199 0.6232 0.0000\nvt 0.3189 0.6236 0.0000\nvt 0.3186 0.6237 0.0000\nvt 0.3182 0.6237 0.0000\nvt 0.5685 0.5328 0.0000\nvt 0.6769 0.5761 0.0000\nvt 0.6759 0.5757 0.0000\nvt 0.5680 0.5329 0.0000\nvt 0.3491 0.5364 0.0000\nvt 0.3487 0.5363 0.0000\nvt 0.3490 0.5361 0.0000\nvt 0.5676 0.5329 0.0000\nvt 0.5678 0.5329 0.0000\nvt 0.5672 0.5329 0.0000\nvt 0.5674 0.5329 0.0000\nvt 0.5668 0.5331 0.0000\nvt 0.5670 0.5330 0.0000\nvt 0.5665 0.5333 0.0000\nvt 0.5667 0.5332 0.0000\nvt 0.5662 0.5336 0.0000\nvt 0.5663 0.5335 0.0000\nvt 0.5659 0.5340 0.0000\nvt 0.5660 0.5338 0.0000\nvt 0.5657 0.5343 0.0000\nvt 0.5655 0.5348 0.0000\nvt 0.5654 0.5350 0.0000\nvt 0.2948 0.8011 0.0000\nvt 0.2945 0.8011 0.0000\nvt 0.3497 0.7852 0.0000\nvt 0.2141 0.5909 0.0000\nvt 0.2137 0.5908 0.0000\nvt 0.2139 0.5911 0.0000\nvt 0.3190 0.6244 0.0000\nvt 0.3187 0.6243 0.0000\nvt 0.7738 0.1949 0.0000\nvt 0.3205 0.6226 0.0000\nvt 0.3461 0.5335 0.0000\nvt 0.3206 0.6205 0.0000\nvt 0.2150 0.5865 0.0000\nvt 0.3203 0.6207 0.0000\nvt 0.2147 0.5863 0.0000\nvt 0.2149 0.5865 0.0000\nvt 0.3210 0.6207 0.0000\nvt 0.3214 0.6209 0.0000\nvt 0.3207 0.6208 0.0000\nvt 0.3217 0.6210 0.0000\nvt 0.3211 0.6210 0.0000\nvt 0.3219 0.6212 0.0000\nvt 0.3213 0.6212 0.0000\nvt 0.3221 0.6214 0.0000\nvt 0.3216 0.6214 0.0000\nvt 0.3217 0.6216 0.0000\nvt 0.3462 0.5334 0.0000\nvt 0.3459 0.5332 0.0000\nvt 0.2146 0.5863 0.0000\nvt 0.3457 0.5333 0.0000\nvt 0.6313 0.8019 0.0000\nvt 0.6302 0.8018 0.0000\nvt 0.6323 0.8020 0.0000\nvt 0.6333 0.8020 0.0000\nvt 0.6344 0.8019 0.0000\nvt 0.6354 0.8017 0.0000\nvt 0.6365 0.8015 0.0000\nvt 0.6375 0.8011 0.0000\nvt 0.6385 0.8007 0.0000\nvt 0.6394 0.8002 0.0000\nvt 0.6404 0.7996 0.0000\nvt 0.6413 0.7990 0.0000\nvt 0.6423 0.7982 0.0000\nvt 0.6431 0.7974 0.0000\nvt 0.6440 0.7965 0.0000\nvt 0.6448 0.7956 0.0000\nvt 0.6456 0.7946 0.0000\nvt 0.6463 0.7935 0.0000\nvt 0.6471 0.7923 0.0000\nvt 0.6477 0.7911 0.0000\nvt 0.6484 0.7899 0.0000\nvt 0.6489 0.7886 0.0000\nvt 0.6495 0.7873 0.0000\nvt 0.6500 0.7859 0.0000\nvt 0.6907 0.6165 0.0000\nvt 0.6910 0.6151 0.0000\nvt 0.6912 0.6137 0.0000\nvt 0.6914 0.6122 0.0000\nvt 0.6915 0.6108 0.0000\nvt 0.6916 0.6093 0.0000\nvt 0.6917 0.6078 0.0000\nvt 0.6917 0.6063 0.0000\nvt 0.6916 0.6048 0.0000\nvt 0.6915 0.6033 0.0000\nvt 0.6914 0.6018 0.0000\nvt 0.6912 0.6003 0.0000\nvt 0.6909 0.5988 0.0000\nvt 0.6906 0.5973 0.0000\nvt 0.6903 0.5958 0.0000\nvt 0.6899 0.5944 0.0000\nvt 0.6895 0.5930 0.0000\nvt 0.6890 0.5916 0.0000\nvt 0.6885 0.5903 0.0000\nvt 0.6880 0.5890 0.0000\nvt 0.6874 0.5877 0.0000\nvt 0.6868 0.5864 0.0000\nvt 0.6861 0.5853 0.0000\nvt 0.6854 0.5841 0.0000\nvt 0.6847 0.5830 0.0000\nvt 0.6839 0.5820 0.0000\nvt 0.6831 0.5810 0.0000\nvt 0.6823 0.5801 0.0000\nvt 0.6814 0.5793 0.0000\nvt 0.6806 0.5785 0.0000\nvt 0.6797 0.5778 0.0000\nvt 0.6787 0.5771 0.0000\nvt 0.6778 0.5766 0.0000\nvt 0.0772 0.2343 0.0000\nvt 0.0772 0.2345 0.0000\nvt 0.7726 0.1950 0.0000\nvt 0.3213 0.6219 0.0000\nvt 0.7740 0.1951 0.0000\nvt 0.7735 0.1950 0.0000\nvt 0.3209 0.6222 0.0000\nvt 0.3205 0.6225 0.0000\nvt 0.3470 0.5334 0.0000\nvt 0.3472 0.5335 0.0000\nvt 0.3466 0.5334 0.0000\nvt 0.3468 0.5334 0.0000\nvt 0.3464 0.5334 0.0000\nvt 0.5700 0.7861 0.0000\nvt 0.6312 0.8034 0.0000\nvt 0.6323 0.8037 0.0000\nvt 0.5702 0.7857 0.0000\nvt 0.6311 0.8030 0.0000\nvt 0.6322 0.8032 0.0000\nvt 0.5703 0.7854 0.0000\nvt 0.6309 0.8025 0.0000\nvt 0.6319 0.8028 0.0000\nvt 0.5702 0.7851 0.0000\nvt 0.6306 0.8022 0.0000\nvt 0.6317 0.8024 0.0000\nvt 0.5702 0.7848 0.0000\nvt 0.6303 0.8019 0.0000\nvt 0.6314 0.8021 0.0000\nvt 0.5700 0.7847 0.0000\nvt 0.6300 0.8017 0.0000\nvt 0.6310 0.8019 0.0000\nvt 0.5697 0.7845 0.0000\nvt 0.6296 0.8015 0.0000\nvt 0.6306 0.8018 0.0000\nvt 0.5699 0.7845 0.0000\nvt 0.5660 0.5358 0.0000\nvt 0.5662 0.5357 0.0000\nvt 0.5663 0.5356 0.0000\nvt 0.5664 0.5355 0.0000\nvt 0.5663 0.5354 0.0000\nvt 0.5661 0.5354 0.0000\nvt 0.6538 0.7854 0.0000\nvt 0.6542 0.7839 0.0000\nvt 0.6533 0.7869 0.0000\nvt 0.6528 0.7884 0.0000\nvt 0.6522 0.7898 0.0000\nvt 0.6516 0.7912 0.0000\nvt 0.6509 0.7925 0.0000\nvt 0.6502 0.7938 0.0000\nvt 0.6495 0.7950 0.0000\nvt 0.6487 0.7961 0.0000\nvt 0.6478 0.7972 0.0000\nvt 0.6470 0.7982 0.0000\nvt 0.6460 0.7992 0.0000\nvt 0.6451 0.8000 0.0000\nvt 0.6441 0.8008 0.0000\nvt 0.6431 0.8015 0.0000\nvt 0.6421 0.8021 0.0000\nvt 0.6411 0.8026 0.0000\nvt 0.6400 0.8031 0.0000\nvt 0.6389 0.8034 0.0000\nvt 0.6379 0.8037 0.0000\nvt 0.6368 0.8039 0.0000\nvt 0.6356 0.8040 0.0000\nvt 0.6345 0.8040 0.0000\nvt 0.6334 0.8039 0.0000\nvt 0.6540 0.7837 0.0000\nvt 0.6534 0.7852 0.0000\nvt 0.6538 0.7837 0.0000\nvt 0.6529 0.7867 0.0000\nvt 0.6524 0.7882 0.0000\nvt 0.6518 0.7896 0.0000\nvt 0.6512 0.7909 0.0000\nvt 0.6505 0.7922 0.0000\nvt 0.6498 0.7935 0.0000\nvt 0.6491 0.7947 0.0000\nvt 0.6483 0.7958 0.0000\nvt 0.6475 0.7968 0.0000\nvt 0.6466 0.7978 0.0000\nvt 0.6457 0.7987 0.0000\nvt 0.6448 0.7996 0.0000\nvt 0.6438 0.8003 0.0000\nvt 0.6428 0.8010 0.0000\nvt 0.6418 0.8016 0.0000\nvt 0.6408 0.8022 0.0000\nvt 0.6398 0.8026 0.0000\nvt 0.6387 0.8030 0.0000\nvt 0.6376 0.8032 0.0000\nvt 0.6365 0.8034 0.0000\nvt 0.6354 0.8035 0.0000\nvt 0.6344 0.8035 0.0000\nvt 0.6333 0.8034 0.0000\nvt 0.6935 0.6185 0.0000\nvt 0.6535 0.7836 0.0000\nvt 0.6529 0.7850 0.0000\nvt 0.6533 0.7835 0.0000\nvt 0.6524 0.7865 0.0000\nvt 0.6519 0.7879 0.0000\nvt 0.6514 0.7893 0.0000\nvt 0.6508 0.7906 0.0000\nvt 0.6501 0.7919 0.0000\nvt 0.6494 0.7932 0.0000\nvt 0.6487 0.7943 0.0000\nvt 0.6479 0.7954 0.0000\nvt 0.6471 0.7965 0.0000\nvt 0.6462 0.7975 0.0000\nvt 0.6453 0.7984 0.0000\nvt 0.6444 0.7992 0.0000\nvt 0.6435 0.8000 0.0000\nvt 0.6425 0.8006 0.0000\nvt 0.6415 0.8012 0.0000\nvt 0.6405 0.8017 0.0000\nvt 0.6395 0.8022 0.0000\nvt 0.6384 0.8025 0.0000\nvt 0.6373 0.8028 0.0000\nvt 0.6363 0.8030 0.0000\nvt 0.6352 0.8031 0.0000\nvt 0.6341 0.8031 0.0000\nvt 0.6330 0.8030 0.0000\nvt 0.6930 0.6184 0.0000\nvt 0.6531 0.7834 0.0000\nvt 0.6524 0.7848 0.0000\nvt 0.6528 0.7833 0.0000\nvt 0.6520 0.7863 0.0000\nvt 0.6514 0.7877 0.0000\nvt 0.6509 0.7891 0.0000\nvt 0.6503 0.7904 0.0000\nvt 0.6496 0.7917 0.0000\nvt 0.6489 0.7929 0.0000\nvt 0.6482 0.7940 0.0000\nvt 0.6474 0.7951 0.0000\nvt 0.6466 0.7962 0.0000\nvt 0.6458 0.7971 0.0000\nvt 0.6449 0.7980 0.0000\nvt 0.6440 0.7989 0.0000\nvt 0.6431 0.7996 0.0000\nvt 0.6421 0.8003 0.0000\nvt 0.6411 0.8009 0.0000\nvt 0.6401 0.8014 0.0000\nvt 0.6391 0.8018 0.0000\nvt 0.6381 0.8022 0.0000\nvt 0.6370 0.8024 0.0000\nvt 0.6360 0.8026 0.0000\nvt 0.6349 0.8027 0.0000\nvt 0.6338 0.8027 0.0000\nvt 0.6327 0.8026 0.0000\nvt 0.6926 0.6182 0.0000\nvt 0.6526 0.7833 0.0000\nvt 0.6519 0.7847 0.0000\nvt 0.6523 0.7832 0.0000\nvt 0.6514 0.7861 0.0000\nvt 0.6509 0.7875 0.0000\nvt 0.6504 0.7889 0.0000\nvt 0.6498 0.7902 0.0000\nvt 0.6491 0.7915 0.0000\nvt 0.6485 0.7927 0.0000\nvt 0.6477 0.7938 0.0000\nvt 0.6470 0.7949 0.0000\nvt 0.6462 0.7959 0.0000\nvt 0.6453 0.7969 0.0000\nvt 0.6445 0.7978 0.0000\nvt 0.6436 0.7986 0.0000\nvt 0.6426 0.7993 0.0000\nvt 0.6417 0.8000 0.0000\nvt 0.6407 0.8006 0.0000\nvt 0.6397 0.8011 0.0000\nvt 0.6387 0.8015 0.0000\nvt 0.6377 0.8019 0.0000\nvt 0.6366 0.8021 0.0000\nvt 0.6356 0.8023 0.0000\nvt 0.6345 0.8024 0.0000\nvt 0.6335 0.8024 0.0000\nvt 0.6324 0.8023 0.0000\nvt 0.6922 0.6181 0.0000\nvt 0.6522 0.7832 0.0000\nvt 0.6514 0.7846 0.0000\nvt 0.6518 0.7831 0.0000\nvt 0.6509 0.7860 0.0000\nvt 0.6504 0.7874 0.0000\nvt 0.6499 0.7887 0.0000\nvt 0.6493 0.7901 0.0000\nvt 0.6487 0.7913 0.0000\nvt 0.6480 0.7925 0.0000\nvt 0.6473 0.7936 0.0000\nvt 0.6465 0.7947 0.0000\nvt 0.6457 0.7957 0.0000\nvt 0.6449 0.7967 0.0000\nvt 0.6440 0.7976 0.0000\nvt 0.6431 0.7984 0.0000\nvt 0.6422 0.7991 0.0000\nvt 0.6413 0.7998 0.0000\nvt 0.6403 0.8004 0.0000\nvt 0.6393 0.8009 0.0000\nvt 0.6383 0.8013 0.0000\nvt 0.6373 0.8016 0.0000\nvt 0.6363 0.8019 0.0000\nvt 0.6352 0.8021 0.0000\nvt 0.6342 0.8022 0.0000\nvt 0.6331 0.8022 0.0000\nvt 0.6321 0.8021 0.0000\nvt 0.6917 0.6180 0.0000\nvt 0.6517 0.7831 0.0000\nvt 0.6509 0.7845 0.0000\nvt 0.6513 0.7830 0.0000\nvt 0.6504 0.7859 0.0000\nvt 0.6499 0.7873 0.0000\nvt 0.6494 0.7887 0.0000\nvt 0.6488 0.7900 0.0000\nvt 0.6482 0.7912 0.0000\nvt 0.6475 0.7924 0.0000\nvt 0.6468 0.7935 0.0000\nvt 0.6460 0.7946 0.0000\nvt 0.6452 0.7956 0.0000\nvt 0.6444 0.7966 0.0000\nvt 0.6436 0.7974 0.0000\nvt 0.6427 0.7983 0.0000\nvt 0.6418 0.7990 0.0000\nvt 0.6408 0.7997 0.0000\nvt 0.6399 0.8002 0.0000\nvt 0.6389 0.8007 0.0000\nvt 0.6379 0.8012 0.0000\nvt 0.6369 0.8015 0.0000\nvt 0.6358 0.8018 0.0000\nvt 0.6348 0.8019 0.0000\nvt 0.6338 0.8020 0.0000\nvt 0.6327 0.8020 0.0000\nvt 0.6317 0.8020 0.0000\nvt 0.6912 0.6179 0.0000\nvt 0.6512 0.7830 0.0000\nvt 0.6908 0.6179 0.0000\nvt 0.6938 0.6171 0.0000\nvt 0.6934 0.6169 0.0000\nvt 0.6929 0.6168 0.0000\nvt 0.6925 0.6167 0.0000\nvt 0.6920 0.6166 0.0000\nvt 0.6916 0.6165 0.0000\nvt 0.6911 0.6165 0.0000\nvt 0.6919 0.5904 0.0000\nvt 0.6924 0.5919 0.0000\nvt 0.6929 0.5935 0.0000\nvt 0.6933 0.5950 0.0000\nvt 0.6937 0.5966 0.0000\nvt 0.6940 0.5982 0.0000\nvt 0.6943 0.5998 0.0000\nvt 0.6945 0.6014 0.0000\nvt 0.6946 0.6030 0.0000\nvt 0.6947 0.6046 0.0000\nvt 0.6948 0.6062 0.0000\nvt 0.6948 0.6078 0.0000\nvt 0.6948 0.6094 0.0000\nvt 0.6947 0.6110 0.0000\nvt 0.6945 0.6125 0.0000\nvt 0.6943 0.6141 0.0000\nvt 0.6941 0.6156 0.0000\nvt 0.6776 0.5733 0.0000\nvt 0.6786 0.5740 0.0000\nvt 0.6776 0.5736 0.0000\nvt 0.6796 0.5745 0.0000\nvt 0.6806 0.5752 0.0000\nvt 0.6816 0.5758 0.0000\nvt 0.6825 0.5766 0.0000\nvt 0.6834 0.5774 0.0000\nvt 0.6844 0.5784 0.0000\nvt 0.6852 0.5793 0.0000\nvt 0.6861 0.5804 0.0000\nvt 0.6869 0.5815 0.0000\nvt 0.6877 0.5826 0.0000\nvt 0.6884 0.5839 0.0000\nvt 0.6892 0.5851 0.0000\nvt 0.6898 0.5864 0.0000\nvt 0.6905 0.5878 0.0000\nvt 0.6911 0.5892 0.0000\nvt 0.6916 0.5906 0.0000\nvt 0.6921 0.5921 0.0000\nvt 0.6925 0.5936 0.0000\nvt 0.6929 0.5951 0.0000\nvt 0.6933 0.5967 0.0000\nvt 0.6936 0.5983 0.0000\nvt 0.6939 0.5998 0.0000\nvt 0.6941 0.6014 0.0000\nvt 0.6942 0.6030 0.0000\nvt 0.6943 0.6046 0.0000\nvt 0.6944 0.6062 0.0000\nvt 0.6944 0.6078 0.0000\nvt 0.6944 0.6093 0.0000\nvt 0.6943 0.6109 0.0000\nvt 0.6941 0.6124 0.0000\nvt 0.6939 0.6140 0.0000\nvt 0.6937 0.6155 0.0000\nvt 0.5703 0.5303 0.0000\nvt 0.6775 0.5738 0.0000\nvt 0.5701 0.5307 0.0000\nvt 0.6784 0.5744 0.0000\nvt 0.6774 0.5740 0.0000\nvt 0.6794 0.5750 0.0000\nvt 0.6804 0.5756 0.0000\nvt 0.6813 0.5763 0.0000\nvt 0.6823 0.5770 0.0000\nvt 0.6832 0.5778 0.0000\nvt 0.6841 0.5787 0.0000\nvt 0.6850 0.5797 0.0000\nvt 0.6858 0.5807 0.0000\nvt 0.6866 0.5818 0.0000\nvt 0.6874 0.5830 0.0000\nvt 0.6881 0.5842 0.0000\nvt 0.6888 0.5854 0.0000\nvt 0.6895 0.5867 0.0000\nvt 0.6901 0.5880 0.0000\nvt 0.6907 0.5894 0.0000\nvt 0.6912 0.5908 0.0000\nvt 0.6917 0.5923 0.0000\nvt 0.6921 0.5938 0.0000\nvt 0.6925 0.5953 0.0000\nvt 0.6929 0.5968 0.0000\nvt 0.6932 0.5984 0.0000\nvt 0.6934 0.5999 0.0000\nvt 0.6937 0.6015 0.0000\nvt 0.6938 0.6030 0.0000\nvt 0.6939 0.6046 0.0000\nvt 0.6940 0.6062 0.0000\nvt 0.6940 0.6077 0.0000\nvt 0.6939 0.6093 0.0000\nvt 0.6938 0.6108 0.0000\nvt 0.6937 0.6124 0.0000\nvt 0.6935 0.6139 0.0000\nvt 0.6932 0.6153 0.0000\nvt 0.5701 0.5308 0.0000\nvt 0.6773 0.5742 0.0000\nvt 0.5699 0.5313 0.0000\nvt 0.6782 0.5749 0.0000\nvt 0.6772 0.5744 0.0000\nvt 0.6791 0.5754 0.0000\nvt 0.6801 0.5760 0.0000\nvt 0.6811 0.5766 0.0000\nvt 0.6820 0.5774 0.0000\nvt 0.6829 0.5782 0.0000\nvt 0.6838 0.5791 0.0000\nvt 0.6846 0.5800 0.0000\nvt 0.6855 0.5810 0.0000\nvt 0.6863 0.5821 0.0000\nvt 0.6870 0.5832 0.0000\nvt 0.6878 0.5844 0.0000\nvt 0.6884 0.5857 0.0000\nvt 0.6891 0.5869 0.0000\nvt 0.6897 0.5883 0.0000\nvt 0.6903 0.5896 0.0000\nvt 0.6908 0.5910 0.0000\nvt 0.6913 0.5925 0.0000\nvt 0.6917 0.5939 0.0000\nvt 0.6921 0.5954 0.0000\nvt 0.6925 0.5969 0.0000\nvt 0.6927 0.5985 0.0000\nvt 0.6930 0.6000 0.0000\nvt 0.6932 0.6015 0.0000\nvt 0.6933 0.6031 0.0000\nvt 0.6934 0.6046 0.0000\nvt 0.6935 0.6062 0.0000\nvt 0.6935 0.6077 0.0000\nvt 0.6935 0.6093 0.0000\nvt 0.6934 0.6108 0.0000\nvt 0.6932 0.6123 0.0000\nvt 0.6930 0.6138 0.0000\nvt 0.6928 0.6152 0.0000\nvt 0.6770 0.5747 0.0000\nvt 0.5696 0.5317 0.0000\nvt 0.6779 0.5752 0.0000\nvt 0.6769 0.5748 0.0000\nvt 0.6789 0.5757 0.0000\nvt 0.6798 0.5763 0.0000\nvt 0.6807 0.5770 0.0000\nvt 0.6817 0.5777 0.0000\nvt 0.6826 0.5785 0.0000\nvt 0.6834 0.5794 0.0000\nvt 0.6843 0.5803 0.0000\nvt 0.6851 0.5813 0.0000\nvt 0.6859 0.5824 0.0000\nvt 0.6866 0.5835 0.0000\nvt 0.6874 0.5847 0.0000\nvt 0.6880 0.5859 0.0000\nvt 0.6887 0.5872 0.0000\nvt 0.6893 0.5885 0.0000\nvt 0.6898 0.5898 0.0000\nvt 0.6904 0.5912 0.0000\nvt 0.6908 0.5926 0.0000\nvt 0.6913 0.5941 0.0000\nvt 0.6917 0.5955 0.0000\nvt 0.6920 0.5970 0.0000\nvt 0.6923 0.5985 0.0000\nvt 0.6925 0.6001 0.0000\nvt 0.6927 0.6016 0.0000\nvt 0.6929 0.6031 0.0000\nvt 0.6930 0.6047 0.0000\nvt 0.6930 0.6062 0.0000\nvt 0.6930 0.6077 0.0000\nvt 0.6930 0.6093 0.0000\nvt 0.6929 0.6108 0.0000\nvt 0.6927 0.6123 0.0000\nvt 0.6925 0.6137 0.0000\nvt 0.6923 0.6152 0.0000\nvt 0.5696 0.5318 0.0000\nvt 0.6767 0.5751 0.0000\nvt 0.5693 0.5321 0.0000\nvt 0.6776 0.5756 0.0000\nvt 0.6766 0.5751 0.0000\nvt 0.6785 0.5761 0.0000\nvt 0.6795 0.5767 0.0000\nvt 0.6804 0.5773 0.0000\nvt 0.6813 0.5780 0.0000\nvt 0.6822 0.5788 0.0000\nvt 0.6831 0.5797 0.0000\nvt 0.6839 0.5806 0.0000\nvt 0.6847 0.5816 0.0000\nvt 0.6855 0.5827 0.0000\nvt 0.6862 0.5838 0.0000\nvt 0.6869 0.5849 0.0000\nvt 0.6876 0.5861 0.0000\nvt 0.6882 0.5874 0.0000\nvt 0.6888 0.5887 0.0000\nvt 0.6894 0.5900 0.0000\nvt 0.6899 0.5914 0.0000\nvt 0.6904 0.5928 0.0000\nvt 0.6908 0.5942 0.0000\nvt 0.6912 0.5957 0.0000\nvt 0.6915 0.5971 0.0000\nvt 0.6918 0.5986 0.0000\nvt 0.6921 0.6001 0.0000\nvt 0.6923 0.6017 0.0000\nvt 0.6924 0.6032 0.0000\nvt 0.6925 0.6047 0.0000\nvt 0.6926 0.6062 0.0000\nvt 0.6926 0.6077 0.0000\nvt 0.6925 0.6092 0.0000\nvt 0.6924 0.6107 0.0000\nvt 0.6923 0.6122 0.0000\nvt 0.6921 0.6137 0.0000\nvt 0.6918 0.6151 0.0000\nvt 0.5693 0.5322 0.0000\nvt 0.6763 0.5754 0.0000\nvt 0.5689 0.5325 0.0000\nvt 0.6772 0.5759 0.0000\nvt 0.6782 0.5764 0.0000\nvt 0.6791 0.5769 0.0000\nvt 0.6800 0.5776 0.0000\nvt 0.6809 0.5783 0.0000\nvt 0.6818 0.5791 0.0000\nvt 0.6827 0.5799 0.0000\nvt 0.6835 0.5809 0.0000\nvt 0.6843 0.5818 0.0000\nvt 0.6851 0.5829 0.0000\nvt 0.6858 0.5840 0.0000\nvt 0.6865 0.5851 0.0000\nvt 0.6872 0.5863 0.0000\nvt 0.6878 0.5875 0.0000\nvt 0.6884 0.5888 0.0000\nvt 0.6890 0.5902 0.0000\nvt 0.6895 0.5915 0.0000\nvt 0.6899 0.5929 0.0000\nvt 0.6904 0.5943 0.0000\nvt 0.6907 0.5958 0.0000\nvt 0.6911 0.5972 0.0000\nvt 0.6914 0.5987 0.0000\nvt 0.6916 0.6002 0.0000\nvt 0.6918 0.6017 0.0000\nvt 0.6919 0.6032 0.0000\nvt 0.6920 0.6047 0.0000\nvt 0.6921 0.6062 0.0000\nvt 0.6921 0.6078 0.0000\nvt 0.6920 0.6093 0.0000\nvt 0.6920 0.6107 0.0000\nvt 0.6918 0.6122 0.0000\nvt 0.6916 0.6137 0.0000\nvt 0.6914 0.6151 0.0000\nvt 0.6759 0.5756 0.0000\nvt 0.7738 0.1952 0.0000\nvt 0.5697 0.5306 0.0000\nvt 0.5695 0.5311 0.0000\nvt 0.5693 0.5316 0.0000\nvt 0.5690 0.5321 0.0000\nvt 0.5686 0.5324 0.0000\nvt 0.7743 0.1954 0.0000\nvt 0.5683 0.5327 0.0000\nvt 0.7722 0.1948 0.0000\nvt 0.5660 0.5353 0.0000\nvt 0.5662 0.5352 0.0000\nvt 0.5663 0.5351 0.0000\nvt 0.5664 0.5350 0.0000\nvt 0.5663 0.5348 0.0000\nvt 0.5661 0.5347 0.0000\nvt 0.5680 0.5327 0.0000\nvt 0.5677 0.5327 0.0000\nvt 0.5674 0.5328 0.0000\nvt 0.5671 0.5329 0.0000\nvt 0.5669 0.5331 0.0000\nvt 0.5666 0.5333 0.0000\nvt 0.5664 0.5336 0.0000\nvt 0.5662 0.5339 0.0000\nvt 0.5660 0.5343 0.0000\nvt 0.5658 0.5350 0.0000\nvt 0.5676 0.5308 0.0000\nvt 0.5672 0.5312 0.0000\nvt 0.5669 0.5317 0.0000\nvt 0.5666 0.5322 0.0000\nvt 0.5664 0.5328 0.0000\nvt 0.5663 0.5334 0.0000\nvt 0.5662 0.5341 0.0000\nvt 0.5663 0.5343 0.0000\nvt 0.5664 0.5337 0.0000\nvt 0.5666 0.5331 0.0000\nvt 0.5668 0.5326 0.0000\nvt 0.5670 0.5321 0.0000\nvt 0.5673 0.5317 0.0000\nvt 0.5676 0.5313 0.0000\nvt 0.5680 0.5310 0.0000\nvt 0.5684 0.5308 0.0000\nvt 0.5688 0.5306 0.0000\nvt 0.5692 0.5306 0.0000\nvt 0.5683 0.5324 0.0000\nvt 0.5680 0.5324 0.0000\nvt 0.5677 0.5325 0.0000\nvt 0.5675 0.5327 0.0000\nvt 0.5667 0.5334 0.0000\nvt 0.5665 0.5337 0.0000\nvt 0.5663 0.5341 0.0000\nvt 0.5662 0.5345 0.0000\nvt 0.5661 0.5349 0.0000\nvt 0.5687 0.5320 0.0000\nvt 0.5683 0.5321 0.0000\nvt 0.5680 0.5322 0.0000\nvt 0.5677 0.5323 0.0000\nvt 0.5674 0.5326 0.0000\nvt 0.5671 0.5328 0.0000\nvt 0.5669 0.5332 0.0000\nvt 0.5667 0.5335 0.0000\nvt 0.5665 0.5339 0.0000\nvt 0.5664 0.5343 0.0000\nvt 0.5689 0.5316 0.0000\nvt 0.5686 0.5316 0.0000\nvt 0.5682 0.5318 0.0000\nvt 0.5679 0.5319 0.0000\nvt 0.5676 0.5322 0.0000\nvt 0.5673 0.5325 0.0000\nvt 0.5670 0.5328 0.0000\nvt 0.5668 0.5332 0.0000\nvt 0.5666 0.5337 0.0000\nvt 0.5665 0.5341 0.0000\nvt 0.5664 0.5346 0.0000\nvt 0.5691 0.5311 0.0000\nvt 0.5687 0.5312 0.0000\nvt 0.5683 0.5313 0.0000\nvt 0.5680 0.5315 0.0000\nvt 0.5676 0.5318 0.0000\nvt 0.5673 0.5321 0.0000\nvt 0.5671 0.5325 0.0000\nvt 0.5669 0.5329 0.0000\nvt 0.5664 0.5344 0.0000\nvt 0.3190 0.6251 0.0000\nvt 0.3192 0.6251 0.0000\nvt 0.3193 0.6251 0.0000\nvt 0.3195 0.6250 0.0000\nvt 0.3195 0.6249 0.0000\nvt 0.3195 0.6248 0.0000\nvt 0.3193 0.6247 0.0000\nvt 0.3192 0.6246 0.0000\nvt 0.7724 0.1948 0.0000\nvt 0.2140 0.5907 0.0000\nvt 0.2139 0.5904 0.0000\nvt 0.3187 0.6238 0.0000\nvt 0.3189 0.6240 0.0000\nvt 0.2139 0.5902 0.0000\nvt 0.2138 0.5899 0.0000\nvt 0.3187 0.6234 0.0000\nvt 0.3190 0.6235 0.0000\nvt 0.2138 0.5896 0.0000\nvt 0.3187 0.6233 0.0000\nvt 0.2138 0.5894 0.0000\nvt 0.3188 0.6229 0.0000\nvt 0.3191 0.6230 0.0000\nvt 0.2137 0.5891 0.0000\nvt 0.2138 0.5888 0.0000\nvt 0.3189 0.6224 0.0000\nvt 0.3192 0.6226 0.0000\nvt 0.2138 0.5886 0.0000\nvt 0.3190 0.6224 0.0000\nvt 0.2138 0.5883 0.0000\nvt 0.3191 0.6220 0.0000\nvt 0.3195 0.6221 0.0000\nvt 0.2139 0.5881 0.0000\nvt 0.3192 0.6219 0.0000\nvt 0.2139 0.5878 0.0000\nvt 0.3194 0.6216 0.0000\nvt 0.3197 0.6217 0.0000\nvt 0.2140 0.5876 0.0000\nvt 0.3194 0.6215 0.0000\nvt 0.2141 0.5874 0.0000\nvt 0.3196 0.6212 0.0000\nvt 0.3200 0.6214 0.0000\nvt 0.2142 0.5872 0.0000\nvt 0.3197 0.6212 0.0000\nvt 0.2143 0.5870 0.0000\nvt 0.3199 0.6209 0.0000\nvt 0.3204 0.6211 0.0000\nvt 0.2144 0.5869 0.0000\nvt 0.3200 0.6209 0.0000\nvt 0.2146 0.5867 0.0000\nvt 0.2147 0.5866 0.0000\nvt 0.2144 0.5864 0.0000\nvt 0.2142 0.5866 0.0000\nvt 0.2140 0.5868 0.0000\nvt 0.2138 0.5871 0.0000\nvt 0.2137 0.5874 0.0000\nvt 0.2135 0.5877 0.0000\nvt 0.2134 0.5881 0.0000\nvt 0.2134 0.5885 0.0000\nvt 0.2134 0.5889 0.0000\nvt 0.2134 0.5893 0.0000\nvt 0.2134 0.5897 0.0000\nvt 0.2135 0.5900 0.0000\nvt 0.2136 0.5904 0.0000\nvt 0.2109 0.5920 0.0000\nvt 0.2919 0.8034 0.0000\nvt 0.2113 0.5918 0.0000\nvt 0.2922 0.8029 0.0000\nvt 0.3492 0.7869 0.0000\nvt 0.2117 0.5916 0.0000\nvt 0.2925 0.8024 0.0000\nvt 0.3490 0.7865 0.0000\nvt 0.2121 0.5914 0.0000\nvt 0.2928 0.8020 0.0000\nvt 0.3490 0.7862 0.0000\nvt 0.2932 0.8017 0.0000\nvt 0.3489 0.7859 0.0000\nvt 0.2126 0.5913 0.0000\nvt 0.2936 0.8015 0.0000\nvt 0.3490 0.7857 0.0000\nvt 0.2130 0.5912 0.0000\nvt 0.2939 0.8013 0.0000\nvt 0.3493 0.7853 0.0000\nvt 0.3491 0.7855 0.0000\nvt 0.2135 0.5911 0.0000\nvt 0.2942 0.8012 0.0000\nvt 0.3495 0.7853 0.0000\nvt 0.2133 0.5908 0.0000\nvt 0.2129 0.5908 0.0000\nvt 0.2124 0.5909 0.0000\nvt 0.2119 0.5910 0.0000\nvt 0.2115 0.5911 0.0000\nvt 0.2111 0.5913 0.0000\nvt 0.2107 0.5915 0.0000\nvt 0.3483 0.5359 0.0000\nvt 0.3481 0.5359 0.0000\nvt 0.3480 0.5360 0.0000\nvt 0.3481 0.5361 0.0000\nvt 0.3482 0.5362 0.0000\nvt 0.3484 0.5362 0.0000\nvt 0.3483 0.5352 0.0000\nvt 0.3481 0.5353 0.0000\nvt 0.3480 0.5355 0.0000\nvt 0.3480 0.5356 0.0000\nvt 0.3481 0.5357 0.0000\nvt 0.3483 0.5358 0.0000\nvt 0.3486 0.5359 0.0000\nvt 0.3490 0.5358 0.0000\nvt 0.3489 0.5355 0.0000\nvt 0.3485 0.5355 0.0000\nvt 0.3488 0.5353 0.0000\nvt 0.3487 0.5350 0.0000\nvt 0.3484 0.5351 0.0000\nvt 0.3485 0.5348 0.0000\nvt 0.3483 0.5348 0.0000\nvt 0.3484 0.5345 0.0000\nvt 0.3483 0.5343 0.0000\nvt 0.3481 0.5344 0.0000\nvt 0.3481 0.5341 0.0000\nvt 0.3479 0.5341 0.0000\nvt 0.3479 0.5340 0.0000\nvt 0.3476 0.5338 0.0000\nvt 0.3471 0.5334 0.0000\nvt 0.3468 0.5333 0.0000\nvt 0.3465 0.5332 0.0000\nvt 0.3462 0.5332 0.0000\nvt 0.7727 0.1949 0.0000\nvt 0.2143 0.5861 0.0000\nvt 0.2143 0.5860 0.0000\nvt 0.3453 0.5331 0.0000\nvt 0.3456 0.5330 0.0000\nvt 0.7729 0.1950 0.0000\nvt 0.2140 0.5858 0.0000\nvt 0.2139 0.5857 0.0000\nvt 0.3449 0.5327 0.0000\nvt 0.3452 0.5326 0.0000\nvt 0.2137 0.5855 0.0000\nvt 0.2136 0.5854 0.0000\nvt 0.3446 0.5323 0.0000\nvt 0.3449 0.5322 0.0000\nvt 0.2134 0.5851 0.0000\nvt 0.2133 0.5849 0.0000\nvt 0.3443 0.5319 0.0000\nvt 0.3447 0.5317 0.0000\nvt 0.2132 0.5847 0.0000\nvt 0.3443 0.5318 0.0000\nvt 0.2131 0.5845 0.0000\nvt 0.3441 0.5314 0.0000\nvt 0.3445 0.5312 0.0000\nvt 0.2130 0.5842 0.0000\nvt 0.3441 0.5313 0.0000\nvt 0.2130 0.5840 0.0000\nvt 0.3439 0.5309 0.0000\nvt 0.2126 0.5844 0.0000\nvt 0.2128 0.5849 0.0000\nvt 0.2131 0.5853 0.0000\nvt 0.2134 0.5856 0.0000\nvt 0.2137 0.5860 0.0000\nvt 0.2141 0.5862 0.0000\nvt 0.3468 0.5313 0.0000\nvt 0.3471 0.5317 0.0000\nvt 0.3475 0.5322 0.0000\nvt 0.3477 0.5327 0.0000\nvt 0.3480 0.5333 0.0000\nvt 0.3481 0.5339 0.0000\nvt 0.3482 0.5346 0.0000\nvt 0.3450 0.5311 0.0000\nvt 0.3454 0.5312 0.0000\nvt 0.3459 0.5313 0.0000\nvt 0.3463 0.5315 0.0000\nvt 0.3467 0.5318 0.0000\nvt 0.3470 0.5322 0.0000\nvt 0.3473 0.5326 0.0000\nvt 0.3476 0.5331 0.0000\nvt 0.3478 0.5336 0.0000\nvt 0.3479 0.5342 0.0000\nvt 0.3481 0.5348 0.0000\nvt 0.3483 0.5354 0.0000\nvt 0.3481 0.5350 0.0000\nvt 0.3480 0.5346 0.0000\nvt 0.3478 0.5343 0.0000\nvt 0.3476 0.5339 0.0000\nvt 0.3468 0.5332 0.0000\nvt 0.3465 0.5330 0.0000\nvt 0.3462 0.5330 0.0000\nvt 0.3459 0.5329 0.0000\nvt 0.3479 0.5348 0.0000\nvt 0.3478 0.5344 0.0000\nvt 0.3476 0.5340 0.0000\nvt 0.3474 0.5337 0.0000\nvt 0.3471 0.5333 0.0000\nvt 0.3469 0.5331 0.0000\nvt 0.3466 0.5329 0.0000\nvt 0.3462 0.5327 0.0000\nvt 0.3459 0.5326 0.0000\nvt 0.3456 0.5326 0.0000\nvt 0.3480 0.5351 0.0000\nvt 0.3479 0.5346 0.0000\nvt 0.3477 0.5342 0.0000\nvt 0.3475 0.5338 0.0000\nvt 0.3473 0.5334 0.0000\nvt 0.3470 0.5330 0.0000\nvt 0.3467 0.5327 0.0000\nvt 0.3464 0.5325 0.0000\nvt 0.3461 0.5323 0.0000\nvt 0.3457 0.5322 0.0000\nvt 0.3453 0.5321 0.0000\nvt 0.3480 0.5349 0.0000\nvt 0.3477 0.5339 0.0000\nvt 0.3475 0.5334 0.0000\nvt 0.3473 0.5330 0.0000\nvt 0.3470 0.5326 0.0000\nvt 0.3467 0.5323 0.0000\nvt 0.3463 0.5320 0.0000\nvt 0.3459 0.5318 0.0000\nvt 0.3455 0.5317 0.0000\nvt 0.3451 0.5317 0.0000\nvt 0.2103 0.5884 0.0000\nvt 0.2102 0.5890 0.0000\nvt 0.2103 0.5897 0.0000\nvt 0.2103 0.5903 0.0000\nvt 0.2105 0.5909 0.0000\nvt 0.2109 0.5908 0.0000\nvt 0.2107 0.5902 0.0000\nvt 0.2107 0.5897 0.0000\nvt 0.2106 0.5891 0.0000\nvt 0.2106 0.5884 0.0000\nvt 0.2107 0.5878 0.0000\nvt 0.2109 0.5872 0.0000\nvt 0.2110 0.5866 0.0000\nvt 0.2113 0.5861 0.0000\nvt 0.2115 0.5856 0.0000\nvt 0.2119 0.5851 0.0000\nvt 0.2122 0.5847 0.0000\nvt 0.2138 0.5864 0.0000\nvt 0.2136 0.5867 0.0000\nvt 0.2134 0.5869 0.0000\nvt 0.2132 0.5873 0.0000\nvt 0.2131 0.5876 0.0000\nvt 0.2130 0.5880 0.0000\nvt 0.2129 0.5884 0.0000\nvt 0.2129 0.5888 0.0000\nvt 0.2129 0.5892 0.0000\nvt 0.2130 0.5896 0.0000\nvt 0.2130 0.5900 0.0000\nvt 0.2132 0.5904 0.0000\nvt 0.2134 0.5862 0.0000\nvt 0.2132 0.5864 0.0000\nvt 0.2130 0.5867 0.0000\nvt 0.2128 0.5871 0.0000\nvt 0.2127 0.5875 0.0000\nvt 0.2126 0.5879 0.0000\nvt 0.2125 0.5883 0.0000\nvt 0.2125 0.5887 0.0000\nvt 0.2125 0.5892 0.0000\nvt 0.2125 0.5896 0.0000\nvt 0.2126 0.5900 0.0000\nvt 0.2127 0.5904 0.0000\nvt 0.2131 0.5859 0.0000\nvt 0.2128 0.5861 0.0000\nvt 0.2126 0.5865 0.0000\nvt 0.2124 0.5869 0.0000\nvt 0.2122 0.5873 0.0000\nvt 0.2121 0.5877 0.0000\nvt 0.2120 0.5882 0.0000\nvt 0.2120 0.5887 0.0000\nvt 0.2120 0.5891 0.0000\nvt 0.2120 0.5896 0.0000\nvt 0.2121 0.5901 0.0000\nvt 0.2122 0.5905 0.0000\nvt 0.2128 0.5855 0.0000\nvt 0.2125 0.5858 0.0000\nvt 0.2122 0.5862 0.0000\nvt 0.2120 0.5866 0.0000\nvt 0.2118 0.5871 0.0000\nvt 0.2117 0.5876 0.0000\nvt 0.2116 0.5881 0.0000\nvt 0.2115 0.5886 0.0000\nvt 0.2115 0.5891 0.0000\nvt 0.2116 0.5896 0.0000\nvt 0.2117 0.5901 0.0000\nvt 0.2118 0.5906 0.0000\nvt 0.2125 0.5851 0.0000\nvt 0.2122 0.5855 0.0000\nvt 0.2119 0.5859 0.0000\nvt 0.2116 0.5864 0.0000\nvt 0.2114 0.5869 0.0000\nvt 0.2112 0.5874 0.0000\nvt 0.2111 0.5879 0.0000\nvt 0.2111 0.5885 0.0000\nvt 0.2111 0.5891 0.0000\nvt 0.2111 0.5896 0.0000\nvt 0.2112 0.5902 0.0000\nvt 0.2113 0.5907 0.0000\nvt 0.3207 0.6213 0.0000\nvt 0.3210 0.6215 0.0000\nvt 0.3212 0.6217 0.0000\nvt 0.3185 0.6247 0.0000\nvt 0.3190 0.6247 0.0000\nvt 0.3192 0.6247 0.0000\nvt 0.3193 0.6246 0.0000\nvt 0.3194 0.6246 0.0000\nvt 0.3195 0.6245 0.0000\nvt 0.3195 0.6244 0.0000\nvt 0.3194 0.6243 0.0000\nvt 0.3193 0.6242 0.0000\nvt 0.3191 0.6241 0.0000\nvt 0.3180 0.6243 0.0000\nvt 0.3184 0.6243 0.0000\nvt 0.3189 0.6243 0.0000\nvt 0.3191 0.6242 0.0000\nvt 0.3194 0.6242 0.0000\nvt 0.3195 0.6241 0.0000\nvt 0.3195 0.6240 0.0000\nvt 0.3195 0.6239 0.0000\nvt 0.3194 0.6239 0.0000\nvt 0.3193 0.6237 0.0000\nvt 0.3192 0.6236 0.0000\nvt 0.3177 0.6240 0.0000\nvt 0.3181 0.6240 0.0000\nvt 0.3185 0.6239 0.0000\nvt 0.3188 0.6239 0.0000\nvt 0.3191 0.6239 0.0000\nvt 0.3193 0.6238 0.0000\nvt 0.3195 0.6238 0.0000\nvt 0.3196 0.6237 0.0000\nvt 0.3197 0.6236 0.0000\nvt 0.3196 0.6235 0.0000\nvt 0.3196 0.6234 0.0000\nvt 0.3194 0.6233 0.0000\nvt 0.3193 0.6232 0.0000\nvt 0.3195 0.6235 0.0000\nvt 0.3197 0.6234 0.0000\nvt 0.3198 0.6234 0.0000\nvt 0.3199 0.6233 0.0000\nvt 0.3198 0.6231 0.0000\nvt 0.3198 0.6230 0.0000\nvt 0.3196 0.6228 0.0000\nvt 0.3195 0.6227 0.0000\nvt 0.3202 0.6228 0.0000\nvt 0.3201 0.6227 0.0000\nvt 0.3200 0.6226 0.0000\nvt 0.3199 0.6224 0.0000\nvt 0.3197 0.6223 0.0000\nvt 0.3205 0.6223 0.0000\nvt 0.3204 0.6222 0.0000\nvt 0.3202 0.6220 0.0000\nvt 0.3200 0.6219 0.0000\nvt 0.3209 0.6221 0.0000\nvt 0.3208 0.6219 0.0000\nvt 0.3206 0.6217 0.0000\nvt 0.3203 0.6215 0.0000\nvt 0.0765 0.2337 0.0000\nvt 0.0767 0.2338 0.0000\nvt 0.0769 0.2339 0.0000\nvt 0.0771 0.2340 0.0000\nvt 0.0761 0.2336 0.0000\nvt 0.7746 0.1954 0.0000\nvt 0.0764 0.2336 0.0000\nvt 0.0768 0.2339 0.0000\nvt 0.0769 0.2342 0.0000\nvt 0.3455 0.5935 0.0000\nvt 0.3452 0.5938 0.0000\nvt 0.3450 0.5941 0.0000\nvt 0.3448 0.5944 0.0000\nvt 0.3446 0.5948 0.0000\nvt 0.3445 0.5952 0.0000\nvt 0.3444 0.5956 0.0000\nvt 0.3444 0.5960 0.0000\nvt 0.3464 0.5968 0.0000\nvt 0.3485 0.5976 0.0000\nvt 0.3506 0.5985 0.0000\nvt 0.3527 0.5995 0.0000\nvt 0.3548 0.6005 0.0000\nvt 0.3569 0.6015 0.0000\nvt 0.3590 0.6026 0.0000\nvt 0.3611 0.6038 0.0000\nvt 0.3632 0.6050 0.0000\nvt 0.3653 0.6062 0.0000\nvt 0.3675 0.6075 0.0000\nvt 0.3696 0.6089 0.0000\nvt 0.3717 0.6103 0.0000\nvt 0.3738 0.6117 0.0000\nvt 0.3759 0.6132 0.0000\nvt 0.3780 0.6148 0.0000\nvt 0.3800 0.6163 0.0000\nvt 0.3821 0.6180 0.0000\nvt 0.3841 0.6196 0.0000\nvt 0.3862 0.6213 0.0000\nvt 0.3882 0.6230 0.0000\nvt 0.3902 0.6248 0.0000\nvt 0.3922 0.6266 0.0000\nvt 0.3942 0.6285 0.0000\nvt 0.3962 0.6303 0.0000\nvt 0.3981 0.6323 0.0000\nvt 0.4000 0.6342 0.0000\nvt 0.4020 0.6362 0.0000\nvt 0.4038 0.6382 0.0000\nvt 0.4057 0.6402 0.0000\nvt 0.4075 0.6423 0.0000\nvt 0.4093 0.6443 0.0000\nvt 0.4111 0.6464 0.0000\nvt 0.4129 0.6486 0.0000\nvt 0.4146 0.6507 0.0000\nvt 0.4163 0.6529 0.0000\nvt 0.4180 0.6551 0.0000\nvt 0.4196 0.6573 0.0000\nvt 0.4212 0.6595 0.0000\nvt 0.4228 0.6617 0.0000\nvt 0.4244 0.6640 0.0000\nvt 0.4259 0.6663 0.0000\nvt 0.4274 0.6686 0.0000\nvt 0.4288 0.6708 0.0000\nvt 0.4303 0.6732 0.0000\nvt 0.4316 0.6755 0.0000\nvt 0.4330 0.6778 0.0000\nvt 0.4343 0.6801 0.0000\nvt 0.4356 0.6824 0.0000\nvt 0.4368 0.6848 0.0000\nvt 0.4380 0.6871 0.0000\nvt 0.4392 0.6895 0.0000\nvt 0.4403 0.6918 0.0000\nvt 0.4414 0.6942 0.0000\nvt 0.4424 0.6965 0.0000\nvt 0.4434 0.6988 0.0000\nvt 0.4444 0.7012 0.0000\nvt 0.4453 0.7035 0.0000\nvt 0.4462 0.7059 0.0000\nvt 0.4470 0.7082 0.0000\nvt 0.4478 0.7105 0.0000\nvt 0.4485 0.7128 0.0000\nvt 0.4492 0.7151 0.0000\nvt 0.4499 0.7174 0.0000\nvt 0.4505 0.7197 0.0000\nvt 0.4511 0.7219 0.0000\nvt 0.4516 0.7242 0.0000\nvt 0.4520 0.7264 0.0000\nvt 0.4525 0.7286 0.0000\nvt 0.4529 0.7308 0.0000\nvt 0.4804 0.9239 0.0000\nvt 0.4532 0.7330 0.0000\nvt 0.3465 0.5964 0.0000\nvt 0.3485 0.5972 0.0000\nvt 0.3506 0.5981 0.0000\nvt 0.3527 0.5991 0.0000\nvt 0.3549 0.6001 0.0000\nvt 0.3570 0.6011 0.0000\nvt 0.3591 0.6022 0.0000\nvt 0.3612 0.6034 0.0000\nvt 0.3633 0.6046 0.0000\nvt 0.3655 0.6059 0.0000\nvt 0.3676 0.6072 0.0000\nvt 0.3697 0.6085 0.0000\nvt 0.3718 0.6099 0.0000\nvt 0.3739 0.6114 0.0000\nvt 0.3760 0.6129 0.0000\nvt 0.3781 0.6144 0.0000\nvt 0.3802 0.6160 0.0000\nvt 0.3823 0.6176 0.0000\nvt 0.3843 0.6193 0.0000\nvt 0.3864 0.6210 0.0000\nvt 0.3884 0.6227 0.0000\nvt 0.3904 0.6245 0.0000\nvt 0.3924 0.6263 0.0000\nvt 0.3944 0.6282 0.0000\nvt 0.3964 0.6301 0.0000\nvt 0.3983 0.6320 0.0000\nvt 0.4003 0.6339 0.0000\nvt 0.4022 0.6359 0.0000\nvt 0.4041 0.6379 0.0000\nvt 0.4059 0.6400 0.0000\nvt 0.4078 0.6420 0.0000\nvt 0.4096 0.6441 0.0000\nvt 0.4114 0.6462 0.0000\nvt 0.4132 0.6483 0.0000\nvt 0.4149 0.6505 0.0000\nvt 0.4166 0.6527 0.0000\nvt 0.4183 0.6549 0.0000\nvt 0.4199 0.6571 0.0000\nvt 0.4215 0.6593 0.0000\nvt 0.4231 0.6616 0.0000\nvt 0.4247 0.6638 0.0000\nvt 0.4262 0.6661 0.0000\nvt 0.4277 0.6684 0.0000\nvt 0.4292 0.6707 0.0000\nvt 0.4306 0.6730 0.0000\nvt 0.4320 0.6753 0.0000\nvt 0.4333 0.6777 0.0000\nvt 0.4346 0.6800 0.0000\nvt 0.4359 0.6823 0.0000\nvt 0.4372 0.6847 0.0000\nvt 0.4384 0.6870 0.0000\nvt 0.4395 0.6894 0.0000\nvt 0.4406 0.6917 0.0000\nvt 0.4417 0.6941 0.0000\nvt 0.4428 0.6964 0.0000\nvt 0.4438 0.6988 0.0000\nvt 0.4447 0.7011 0.0000\nvt 0.4457 0.7035 0.0000\nvt 0.4465 0.7058 0.0000\nvt 0.4474 0.7081 0.0000\nvt 0.4482 0.7105 0.0000\nvt 0.4489 0.7128 0.0000\nvt 0.4496 0.7151 0.0000\nvt 0.4503 0.7174 0.0000\nvt 0.4509 0.7197 0.0000\nvt 0.4514 0.7219 0.0000\nvt 0.4520 0.7242 0.0000\nvt 0.4524 0.7264 0.0000\nvt 0.4529 0.7286 0.0000\nvt 0.4533 0.7308 0.0000\nvt 0.4535 0.7330 0.0000\nvt 0.4808 0.9239 0.0000\nvt 0.3466 0.5960 0.0000\nvt 0.3486 0.5968 0.0000\nvt 0.3507 0.5977 0.0000\nvt 0.3529 0.5987 0.0000\nvt 0.3550 0.5997 0.0000\nvt 0.3571 0.6007 0.0000\nvt 0.3592 0.6019 0.0000\nvt 0.3613 0.6030 0.0000\nvt 0.3635 0.6042 0.0000\nvt 0.3656 0.6055 0.0000\nvt 0.3677 0.6068 0.0000\nvt 0.3699 0.6082 0.0000\nvt 0.3720 0.6096 0.0000\nvt 0.3741 0.6110 0.0000\nvt 0.3762 0.6125 0.0000\nvt 0.3783 0.6141 0.0000\nvt 0.3804 0.6157 0.0000\nvt 0.3825 0.6173 0.0000\nvt 0.3845 0.6190 0.0000\nvt 0.3866 0.6207 0.0000\nvt 0.3886 0.6224 0.0000\nvt 0.3907 0.6242 0.0000\nvt 0.3927 0.6260 0.0000\nvt 0.3947 0.6279 0.0000\nvt 0.3966 0.6298 0.0000\nvt 0.3986 0.6317 0.0000\nvt 0.4005 0.6337 0.0000\nvt 0.4025 0.6356 0.0000\nvt 0.4043 0.6376 0.0000\nvt 0.4062 0.6397 0.0000\nvt 0.4081 0.6418 0.0000\nvt 0.4099 0.6439 0.0000\nvt 0.4117 0.6460 0.0000\nvt 0.4134 0.6481 0.0000\nvt 0.4152 0.6503 0.0000\nvt 0.4169 0.6525 0.0000\nvt 0.4186 0.6547 0.0000\nvt 0.4202 0.6569 0.0000\nvt 0.4219 0.6591 0.0000\nvt 0.4235 0.6614 0.0000\nvt 0.4250 0.6636 0.0000\nvt 0.4266 0.6659 0.0000\nvt 0.4280 0.6682 0.0000\nvt 0.4295 0.6705 0.0000\nvt 0.4309 0.6728 0.0000\nvt 0.4323 0.6752 0.0000\nvt 0.4337 0.6775 0.0000\nvt 0.4350 0.6798 0.0000\nvt 0.4363 0.6822 0.0000\nvt 0.4375 0.6845 0.0000\nvt 0.4387 0.6869 0.0000\nvt 0.4399 0.6893 0.0000\nvt 0.4410 0.6916 0.0000\nvt 0.4421 0.6940 0.0000\nvt 0.4432 0.6963 0.0000\nvt 0.4442 0.6987 0.0000\nvt 0.4451 0.7010 0.0000\nvt 0.4460 0.7034 0.0000\nvt 0.4469 0.7057 0.0000\nvt 0.4478 0.7081 0.0000\nvt 0.4486 0.7104 0.0000\nvt 0.4493 0.7127 0.0000\nvt 0.4500 0.7150 0.0000\nvt 0.4507 0.7173 0.0000\nvt 0.4513 0.7196 0.0000\nvt 0.4519 0.7219 0.0000\nvt 0.4524 0.7242 0.0000\nvt 0.4529 0.7264 0.0000\nvt 0.4533 0.7286 0.0000\nvt 0.4536 0.7330 0.0000\nvt 0.4537 0.7308 0.0000\nvt 0.4539 0.7330 0.0000\nvt 0.4812 0.9239 0.0000\nvt 0.3467 0.5956 0.0000\nvt 0.3488 0.5964 0.0000\nvt 0.3509 0.5973 0.0000\nvt 0.3530 0.5983 0.0000\nvt 0.3551 0.5993 0.0000\nvt 0.3573 0.6004 0.0000\nvt 0.3594 0.6015 0.0000\nvt 0.3615 0.6026 0.0000\nvt 0.3637 0.6039 0.0000\nvt 0.3658 0.6051 0.0000\nvt 0.3679 0.6064 0.0000\nvt 0.3701 0.6078 0.0000\nvt 0.3722 0.6092 0.0000\nvt 0.3743 0.6107 0.0000\nvt 0.3764 0.6122 0.0000\nvt 0.3785 0.6137 0.0000\nvt 0.3806 0.6153 0.0000\nvt 0.3827 0.6170 0.0000\nvt 0.3848 0.6186 0.0000\nvt 0.3868 0.6203 0.0000\nvt 0.3889 0.6221 0.0000\nvt 0.3909 0.6239 0.0000\nvt 0.3929 0.6257 0.0000\nvt 0.3949 0.6276 0.0000\nvt 0.3969 0.6295 0.0000\nvt 0.3989 0.6314 0.0000\nvt 0.4008 0.6334 0.0000\nvt 0.4027 0.6353 0.0000\nvt 0.4046 0.6374 0.0000\nvt 0.4065 0.6394 0.0000\nvt 0.4084 0.6415 0.0000\nvt 0.4102 0.6436 0.0000\nvt 0.4120 0.6457 0.0000\nvt 0.4138 0.6479 0.0000\nvt 0.4155 0.6500 0.0000\nvt 0.4172 0.6522 0.0000\nvt 0.4189 0.6544 0.0000\nvt 0.4206 0.6566 0.0000\nvt 0.4222 0.6589 0.0000\nvt 0.4238 0.6611 0.0000\nvt 0.4254 0.6634 0.0000\nvt 0.4269 0.6657 0.0000\nvt 0.4284 0.6680 0.0000\nvt 0.4299 0.6703 0.0000\nvt 0.4313 0.6726 0.0000\nvt 0.4327 0.6750 0.0000\nvt 0.4340 0.6773 0.0000\nvt 0.4354 0.6797 0.0000\nvt 0.4367 0.6820 0.0000\nvt 0.4379 0.6844 0.0000\nvt 0.4391 0.6867 0.0000\nvt 0.4403 0.6891 0.0000\nvt 0.4414 0.6915 0.0000\nvt 0.4425 0.6938 0.0000\nvt 0.4435 0.6962 0.0000\nvt 0.4446 0.6986 0.0000\nvt 0.4455 0.7009 0.0000\nvt 0.4464 0.7033 0.0000\nvt 0.4473 0.7056 0.0000\nvt 0.4482 0.7080 0.0000\nvt 0.4490 0.7103 0.0000\nvt 0.4497 0.7126 0.0000\nvt 0.4504 0.7149 0.0000\nvt 0.4511 0.7172 0.0000\nvt 0.4517 0.7195 0.0000\nvt 0.4523 0.7218 0.0000\nvt 0.4528 0.7241 0.0000\nvt 0.4533 0.7263 0.0000\nvt 0.4537 0.7286 0.0000\nvt 0.4540 0.7330 0.0000\nvt 0.4541 0.7308 0.0000\nvt 0.4543 0.7330 0.0000\nvt 0.4817 0.9239 0.0000\nvt 0.3469 0.5952 0.0000\nvt 0.3490 0.5961 0.0000\nvt 0.3511 0.5970 0.0000\nvt 0.3532 0.5979 0.0000\nvt 0.3553 0.5989 0.0000\nvt 0.3575 0.6000 0.0000\nvt 0.3596 0.6011 0.0000\nvt 0.3617 0.6023 0.0000\nvt 0.3639 0.6035 0.0000\nvt 0.3660 0.6048 0.0000\nvt 0.3681 0.6061 0.0000\nvt 0.3703 0.6075 0.0000\nvt 0.3724 0.6089 0.0000\nvt 0.3745 0.6103 0.0000\nvt 0.3767 0.6118 0.0000\nvt 0.3788 0.6134 0.0000\nvt 0.3809 0.6150 0.0000\nvt 0.3830 0.6166 0.0000\nvt 0.3850 0.6183 0.0000\nvt 0.3871 0.6200 0.0000\nvt 0.3892 0.6218 0.0000\nvt 0.3912 0.6236 0.0000\nvt 0.3932 0.6254 0.0000\nvt 0.3952 0.6273 0.0000\nvt 0.3972 0.6292 0.0000\nvt 0.3992 0.6311 0.0000\nvt 0.4011 0.6331 0.0000\nvt 0.4030 0.6351 0.0000\nvt 0.4049 0.6371 0.0000\nvt 0.4068 0.6391 0.0000\nvt 0.4087 0.6412 0.0000\nvt 0.4105 0.6433 0.0000\nvt 0.4123 0.6454 0.0000\nvt 0.4141 0.6476 0.0000\nvt 0.4158 0.6498 0.0000\nvt 0.4176 0.6520 0.0000\nvt 0.4192 0.6542 0.0000\nvt 0.4209 0.6564 0.0000\nvt 0.4225 0.6586 0.0000\nvt 0.4241 0.6609 0.0000\nvt 0.4257 0.6632 0.0000\nvt 0.4272 0.6655 0.0000\nvt 0.4288 0.6678 0.0000\nvt 0.4302 0.6701 0.0000\nvt 0.4317 0.6724 0.0000\nvt 0.4331 0.6748 0.0000\nvt 0.4344 0.6771 0.0000\nvt 0.4357 0.6795 0.0000\nvt 0.4370 0.6818 0.0000\nvt 0.4383 0.6842 0.0000\nvt 0.4395 0.6866 0.0000\nvt 0.4407 0.6889 0.0000\nvt 0.4418 0.6913 0.0000\nvt 0.4429 0.6937 0.0000\nvt 0.4439 0.6960 0.0000\nvt 0.4449 0.6984 0.0000\nvt 0.4459 0.7008 0.0000\nvt 0.4468 0.7031 0.0000\nvt 0.4477 0.7055 0.0000\nvt 0.4486 0.7078 0.0000\nvt 0.4494 0.7102 0.0000\nvt 0.4501 0.7125 0.0000\nvt 0.4508 0.7148 0.0000\nvt 0.4515 0.7171 0.0000\nvt 0.4521 0.7194 0.0000\nvt 0.4527 0.7217 0.0000\nvt 0.4532 0.7240 0.0000\nvt 0.4537 0.7262 0.0000\nvt 0.4541 0.7285 0.0000\nvt 0.4544 0.7330 0.0000\nvt 0.4545 0.7307 0.0000\nvt 0.4547 0.7329 0.0000\nvt 0.4821 0.9238 0.0000\nvt 0.3471 0.5949 0.0000\nvt 0.3492 0.5957 0.0000\nvt 0.3513 0.5966 0.0000\nvt 0.3534 0.5976 0.0000\nvt 0.3556 0.5986 0.0000\nvt 0.3577 0.5996 0.0000\nvt 0.3598 0.6008 0.0000\nvt 0.3620 0.6019 0.0000\nvt 0.3641 0.6032 0.0000\nvt 0.3663 0.6044 0.0000\nvt 0.3684 0.6058 0.0000\nvt 0.3705 0.6071 0.0000\nvt 0.3727 0.6085 0.0000\nvt 0.3748 0.6100 0.0000\nvt 0.3769 0.6115 0.0000\nvt 0.3790 0.6131 0.0000\nvt 0.3811 0.6147 0.0000\nvt 0.3832 0.6163 0.0000\nvt 0.3853 0.6180 0.0000\nvt 0.3874 0.6197 0.0000\nvt 0.3894 0.6215 0.0000\nvt 0.3915 0.6233 0.0000\nvt 0.3935 0.6251 0.0000\nvt 0.3955 0.6270 0.0000\nvt 0.3975 0.6289 0.0000\nvt 0.3995 0.6308 0.0000\nvt 0.4014 0.6328 0.0000\nvt 0.4033 0.6348 0.0000\nvt 0.4052 0.6368 0.0000\nvt 0.4071 0.6389 0.0000\nvt 0.4090 0.6409 0.0000\nvt 0.4108 0.6430 0.0000\nvt 0.4126 0.6452 0.0000\nvt 0.4144 0.6473 0.0000\nvt 0.4162 0.6495 0.0000\nvt 0.4179 0.6517 0.0000\nvt 0.4196 0.6539 0.0000\nvt 0.4212 0.6561 0.0000\nvt 0.4229 0.6584 0.0000\nvt 0.4245 0.6607 0.0000\nvt 0.4261 0.6630 0.0000\nvt 0.4276 0.6653 0.0000\nvt 0.4291 0.6676 0.0000\nvt 0.4306 0.6699 0.0000\nvt 0.4320 0.6722 0.0000\nvt 0.4334 0.6746 0.0000\nvt 0.4348 0.6769 0.0000\nvt 0.4361 0.6793 0.0000\nvt 0.4374 0.6816 0.0000\nvt 0.4386 0.6840 0.0000\nvt 0.4398 0.6864 0.0000\nvt 0.4410 0.6887 0.0000\nvt 0.4422 0.6911 0.0000\nvt 0.4433 0.6935 0.0000\nvt 0.4443 0.6958 0.0000\nvt 0.4453 0.6982 0.0000\nvt 0.4463 0.7006 0.0000\nvt 0.4472 0.7029 0.0000\nvt 0.4481 0.7053 0.0000\nvt 0.4489 0.7077 0.0000\nvt 0.4497 0.7100 0.0000\nvt 0.4505 0.7123 0.0000\nvt 0.4512 0.7147 0.0000\nvt 0.4519 0.7170 0.0000\nvt 0.4525 0.7193 0.0000\nvt 0.4531 0.7216 0.0000\nvt 0.4536 0.7238 0.0000\nvt 0.4541 0.7261 0.0000\nvt 0.4545 0.7283 0.0000\nvt 0.4548 0.7329 0.0000\nvt 0.4549 0.7305 0.0000\nvt 0.4551 0.7328 0.0000\nvt 0.4825 0.9237 0.0000\nvt 0.3473 0.5946 0.0000\nvt 0.3494 0.5954 0.0000\nvt 0.3516 0.5963 0.0000\nvt 0.3537 0.5973 0.0000\nvt 0.3558 0.5983 0.0000\nvt 0.3579 0.5993 0.0000\nvt 0.3601 0.6005 0.0000\nvt 0.3622 0.6016 0.0000\nvt 0.3644 0.6029 0.0000\nvt 0.3665 0.6041 0.0000\nvt 0.3687 0.6055 0.0000\nvt 0.3708 0.6068 0.0000\nvt 0.3729 0.6082 0.0000\nvt 0.3751 0.6097 0.0000\nvt 0.3772 0.6112 0.0000\nvt 0.3793 0.6128 0.0000\nvt 0.3814 0.6144 0.0000\nvt 0.3835 0.6160 0.0000\nvt 0.3856 0.6177 0.0000\nvt 0.3877 0.6194 0.0000\nvt 0.3897 0.6212 0.0000\nvt 0.3918 0.6230 0.0000\nvt 0.3938 0.6248 0.0000\nvt 0.3958 0.6267 0.0000\nvt 0.3978 0.6286 0.0000\nvt 0.3998 0.6305 0.0000\nvt 0.4017 0.6325 0.0000\nvt 0.4036 0.6345 0.0000\nvt 0.4055 0.6365 0.0000\nvt 0.4074 0.6386 0.0000\nvt 0.4093 0.6407 0.0000\nvt 0.4111 0.6428 0.0000\nvt 0.4129 0.6449 0.0000\nvt 0.4147 0.6471 0.0000\nvt 0.4165 0.6492 0.0000\nvt 0.4182 0.6514 0.0000\nvt 0.4199 0.6537 0.0000\nvt 0.4216 0.6559 0.0000\nvt 0.4232 0.6582 0.0000\nvt 0.4248 0.6604 0.0000\nvt 0.4264 0.6627 0.0000\nvt 0.4279 0.6650 0.0000\nvt 0.4294 0.6673 0.0000\nvt 0.4309 0.6696 0.0000\nvt 0.4323 0.6720 0.0000\nvt 0.4337 0.6743 0.0000\nvt 0.4351 0.6767 0.0000\nvt 0.4364 0.6790 0.0000\nvt 0.4377 0.6814 0.0000\nvt 0.4390 0.6838 0.0000\nvt 0.4402 0.6861 0.0000\nvt 0.4414 0.6885 0.0000\nvt 0.4425 0.6909 0.0000\nvt 0.4436 0.6933 0.0000\nvt 0.4446 0.6956 0.0000\nvt 0.4457 0.6980 0.0000\nvt 0.4466 0.7004 0.0000\nvt 0.4476 0.7027 0.0000\nvt 0.4484 0.7051 0.0000\nvt 0.4493 0.7075 0.0000\nvt 0.4501 0.7098 0.0000\nvt 0.4552 0.7328 0.0000\nvt 0.4555 0.7326 0.0000\nvt 0.3476 0.5943 0.0000\nvt 0.3498 0.5952 0.0000\nvt 0.3519 0.5961 0.0000\nvt 0.3540 0.5970 0.0000\nvt 0.3562 0.5981 0.0000\nvt 0.3584 0.5992 0.0000\nvt 0.3605 0.6003 0.0000\nvt 0.3627 0.6015 0.0000\nvt 0.3649 0.6027 0.0000\nvt 0.3670 0.6040 0.0000\nvt 0.3692 0.6054 0.0000\nvt 0.3713 0.6067 0.0000\nvt 0.3735 0.6082 0.0000\nvt 0.3756 0.6097 0.0000\nvt 0.3778 0.6112 0.0000\nvt 0.3799 0.6128 0.0000\nvt 0.3821 0.6144 0.0000\nvt 0.3842 0.6161 0.0000\nvt 0.3863 0.6178 0.0000\nvt 0.3884 0.6195 0.0000\nvt 0.3904 0.6213 0.0000\nvt 0.3925 0.6231 0.0000\nvt 0.3945 0.6250 0.0000\nvt 0.3966 0.6269 0.0000\nvt 0.3986 0.6288 0.0000\nvt 0.4005 0.6308 0.0000\nvt 0.4025 0.6328 0.0000\nvt 0.4045 0.6348 0.0000\nvt 0.4064 0.6369 0.0000\nvt 0.4083 0.6390 0.0000\nvt 0.4101 0.6411 0.0000\nvt 0.4120 0.6432 0.0000\nvt 0.4138 0.6454 0.0000\nvt 0.4156 0.6476 0.0000\nvt 0.4174 0.6498 0.0000\nvt 0.4191 0.6520 0.0000\nvt 0.4208 0.6542 0.0000\nvt 0.4225 0.6565 0.0000\nvt 0.4241 0.6588 0.0000\nvt 0.4829 0.9262 0.0000\nvt 0.4825 0.9263 0.0000\nvt 0.4820 0.9264 0.0000\nvt 0.4816 0.9264 0.0000\nvt 0.4812 0.9264 0.0000\nvt 0.4807 0.9264 0.0000\nvt 0.4810 0.9288 0.0000\nvt 0.4812 0.9313 0.0000\nvt 0.4814 0.9337 0.0000\nvt 0.4816 0.9362 0.0000\nvt 0.4816 0.9385 0.0000\nvt 0.4817 0.9409 0.0000\nvt 0.4816 0.9433 0.0000\nvt 0.4815 0.9456 0.0000\nvt 0.4814 0.9478 0.0000\nvt 0.4812 0.9501 0.0000\nvt 0.4810 0.9523 0.0000\nvt 0.4807 0.9545 0.0000\nvt 0.4803 0.9566 0.0000\nvt 0.4799 0.9588 0.0000\nvt 0.4795 0.9608 0.0000\nvt 0.4790 0.9629 0.0000\nvt 0.4784 0.9649 0.0000\nvt 0.4778 0.9668 0.0000\nvt 0.4771 0.9687 0.0000\nvt 0.4764 0.9706 0.0000\nvt 0.4756 0.9724 0.0000\nvt 0.4747 0.9742 0.0000\nvt 0.4739 0.9759 0.0000\nvt 0.4729 0.9776 0.0000\nvt 0.4719 0.9792 0.0000\nvt 0.4708 0.9807 0.0000\nvt 0.4697 0.9823 0.0000\nvt 0.4686 0.9837 0.0000\nvt 0.4674 0.9851 0.0000\nvt 0.4661 0.9864 0.0000\nvt 0.4648 0.9877 0.0000\nvt 0.4634 0.9889 0.0000\nvt 0.4620 0.9901 0.0000\nvt 0.4605 0.9912 0.0000\nvt 0.4590 0.9922 0.0000\nvt 0.4574 0.9932 0.0000\nvt 0.4558 0.9941 0.0000\nvt 0.4542 0.9949 0.0000\nvt 0.4525 0.9956 0.0000\nvt 0.4507 0.9963 0.0000\nvt 0.4489 0.9969 0.0000\nvt 0.4471 0.9975 0.0000\nvt 0.4452 0.9980 0.0000\nvt 0.4433 0.9983 0.0000\nvt 0.4413 0.9987 0.0000\nvt 0.4393 0.9989 0.0000\nvt 0.4373 0.9991 0.0000\nvt 0.4352 0.9992 0.0000\nvt 0.4331 0.9992 0.0000\nvt 0.4309 0.9992 0.0000\nvt 0.4287 0.9990 0.0000\nvt 0.4265 0.9988 0.0000\nvt 0.4243 0.9985 0.0000\nvt 0.4814 0.9289 0.0000\nvt 0.4817 0.9314 0.0000\nvt 0.4818 0.9338 0.0000\nvt 0.4820 0.9362 0.0000\nvt 0.4821 0.9386 0.0000\nvt 0.4821 0.9410 0.0000\nvt 0.4820 0.9434 0.0000\nvt 0.4820 0.9457 0.0000\nvt 0.4818 0.9480 0.0000\nvt 0.4816 0.9502 0.0000\nvt 0.4814 0.9524 0.0000\nvt 0.4811 0.9546 0.0000\nvt 0.4808 0.9568 0.0000\nvt 0.4803 0.9589 0.0000\nvt 0.4799 0.9610 0.0000\nvt 0.4794 0.9630 0.0000\nvt 0.4788 0.9650 0.0000\nvt 0.4782 0.9670 0.0000\nvt 0.4775 0.9689 0.0000\nvt 0.4768 0.9708 0.0000\nvt 0.4760 0.9726 0.0000\nvt 0.4751 0.9744 0.0000\nvt 0.4743 0.9761 0.0000\nvt 0.4733 0.9778 0.0000\nvt 0.4723 0.9794 0.0000\nvt 0.4712 0.9810 0.0000\nvt 0.4701 0.9825 0.0000\nvt 0.4690 0.9839 0.0000\nvt 0.4678 0.9853 0.0000\nvt 0.4665 0.9867 0.0000\nvt 0.4652 0.9880 0.0000\nvt 0.4638 0.9892 0.0000\nvt 0.4624 0.9904 0.0000\nvt 0.4609 0.9914 0.0000\nvt 0.4594 0.9925 0.0000\nvt 0.4578 0.9934 0.0000\nvt 0.4562 0.9943 0.0000\nvt 0.4545 0.9952 0.0000\nvt 0.4528 0.9959 0.0000\nvt 0.4510 0.9966 0.0000\nvt 0.4492 0.9972 0.0000\nvt 0.4474 0.9978 0.0000\nvt 0.4455 0.9982 0.0000\nvt 0.4436 0.9986 0.0000\nvt 0.4416 0.9990 0.0000\nvt 0.4396 0.9992 0.0000\nvt 0.4375 0.9994 0.0000\nvt 0.4355 0.9995 0.0000\nvt 0.4333 0.9995 0.0000\nvt 0.4312 0.9995 0.0000\nvt 0.4290 0.9993 0.0000\nvt 0.4268 0.9991 0.0000\nvt 0.4220 0.9982 0.0000\nvt 0.4245 0.9988 0.0000\nvt 0.2468 0.9673 0.0000\nvt 0.4221 0.9982 0.0000\nvt 0.4819 0.9289 0.0000\nvt 0.4821 0.9314 0.0000\nvt 0.4823 0.9338 0.0000\nvt 0.4824 0.9363 0.0000\nvt 0.4825 0.9387 0.0000\nvt 0.4825 0.9411 0.0000\nvt 0.4825 0.9434 0.0000\nvt 0.4824 0.9457 0.0000\nvt 0.4823 0.9480 0.0000\nvt 0.4821 0.9503 0.0000\nvt 0.4818 0.9525 0.0000\nvt 0.4815 0.9547 0.0000\nvt 0.4812 0.9569 0.0000\nvt 0.4808 0.9590 0.0000\nvt 0.4803 0.9611 0.0000\nvt 0.4798 0.9631 0.0000\nvt 0.4792 0.9652 0.0000\nvt 0.4786 0.9671 0.0000\nvt 0.4779 0.9690 0.0000\nvt 0.4772 0.9709 0.0000\nvt 0.4764 0.9727 0.0000\nvt 0.4756 0.9745 0.0000\nvt 0.4747 0.9763 0.0000\nvt 0.4737 0.9779 0.0000\nvt 0.4727 0.9796 0.0000\nvt 0.4717 0.9811 0.0000\nvt 0.4705 0.9827 0.0000\nvt 0.4694 0.9841 0.0000\nvt 0.4682 0.9855 0.0000\nvt 0.4669 0.9869 0.0000\nvt 0.4656 0.9882 0.0000\nvt 0.4642 0.9894 0.0000\nvt 0.4628 0.9906 0.0000\nvt 0.4613 0.9916 0.0000\nvt 0.4597 0.9927 0.0000\nvt 0.4582 0.9936 0.0000\nvt 0.4565 0.9945 0.0000\nvt 0.4549 0.9954 0.0000\nvt 0.4532 0.9961 0.0000\nvt 0.4514 0.9968 0.0000\nvt 0.4496 0.9974 0.0000\nvt 0.4477 0.9980 0.0000\nvt 0.4458 0.9985 0.0000\nvt 0.4439 0.9989 0.0000\nvt 0.4419 0.9992 0.0000\nvt 0.4399 0.9994 0.0000\nvt 0.4379 0.9996 0.0000\nvt 0.4358 0.9997 0.0000\nvt 0.4336 0.9997 0.0000\nvt 0.4315 0.9997 0.0000\nvt 0.4293 0.9996 0.0000\nvt 0.4271 0.9993 0.0000\nvt 0.4223 0.9985 0.0000\nvt 0.4248 0.9991 0.0000\nvt 0.2470 0.9676 0.0000\nvt 0.4823 0.9289 0.0000\nvt 0.4825 0.9314 0.0000\nvt 0.4827 0.9338 0.0000\nvt 0.4829 0.9363 0.0000\nvt 0.4829 0.9387 0.0000\nvt 0.4830 0.9411 0.0000\nvt 0.4829 0.9434 0.0000\nvt 0.4828 0.9458 0.0000\nvt 0.4827 0.9481 0.0000\nvt 0.4825 0.9503 0.0000\nvt 0.4823 0.9526 0.0000\nvt 0.4820 0.9548 0.0000\nvt 0.4816 0.9569 0.0000\nvt 0.4812 0.9591 0.0000\nvt 0.4808 0.9612 0.0000\nvt 0.4803 0.9632 0.0000\nvt 0.4797 0.9652 0.0000\nvt 0.4791 0.9672 0.0000\nvt 0.4784 0.9691 0.0000\nvt 0.4776 0.9710 0.0000\nvt 0.4769 0.9728 0.0000\nvt 0.4760 0.9746 0.0000\nvt 0.4751 0.9764 0.0000\nvt 0.4742 0.9780 0.0000\nvt 0.4731 0.9797 0.0000\nvt 0.4721 0.9812 0.0000\nvt 0.4710 0.9828 0.0000\nvt 0.4698 0.9842 0.0000\nvt 0.4686 0.9857 0.0000\nvt 0.4673 0.9870 0.0000\nvt 0.4660 0.9883 0.0000\nvt 0.4646 0.9895 0.0000\nvt 0.4632 0.9907 0.0000\nvt 0.4617 0.9918 0.0000\nvt 0.4601 0.9928 0.0000\nvt 0.4586 0.9938 0.0000\nvt 0.4569 0.9947 0.0000\nvt 0.4553 0.9955 0.0000\nvt 0.4535 0.9963 0.0000\nvt 0.4518 0.9970 0.0000\nvt 0.4500 0.9976 0.0000\nvt 0.4481 0.9982 0.0000\nvt 0.4462 0.9986 0.0000\nvt 0.4443 0.9990 0.0000\nvt 0.4423 0.9994 0.0000\nvt 0.4403 0.9996 0.0000\nvt 0.4382 0.9998 0.0000\nvt 0.4361 0.9999 0.0000\nvt 0.4340 0.9999 0.0000\nvt 0.4318 0.9999 0.0000\nvt 0.4296 0.9997 0.0000\nvt 0.4274 0.9995 0.0000\nvt 0.4225 0.9987 0.0000\nvt 0.4251 0.9992 0.0000\nvt 0.4226 0.9987 0.0000\nvt 0.2473 0.9679 0.0000\nvt 0.4827 0.9288 0.0000\nvt 0.4830 0.9313 0.0000\nvt 0.4832 0.9338 0.0000\nvt 0.4833 0.9362 0.0000\nvt 0.4834 0.9386 0.0000\nvt 0.4834 0.9410 0.0000\nvt 0.4834 0.9434 0.0000\nvt 0.4833 0.9457 0.0000\nvt 0.4832 0.9480 0.0000\nvt 0.4830 0.9503 0.0000\nvt 0.4827 0.9525 0.0000\nvt 0.4824 0.9547 0.0000\nvt 0.4821 0.9569 0.0000\nvt 0.4817 0.9591 0.0000\nvt 0.4812 0.9611 0.0000\nvt 0.4807 0.9632 0.0000\nvt 0.4801 0.9652 0.0000\nvt 0.4795 0.9672 0.0000\nvt 0.4788 0.9691 0.0000\nvt 0.4781 0.9710 0.0000\nvt 0.4773 0.9729 0.0000\nvt 0.4764 0.9746 0.0000\nvt 0.4755 0.9764 0.0000\nvt 0.4746 0.9781 0.0000\nvt 0.4736 0.9797 0.0000\nvt 0.4725 0.9813 0.0000\nvt 0.4714 0.9828 0.0000\nvt 0.4702 0.9843 0.0000\nvt 0.4690 0.9857 0.0000\nvt 0.4677 0.9871 0.0000\nvt 0.4664 0.9883 0.0000\nvt 0.4650 0.9896 0.0000\nvt 0.4636 0.9907 0.0000\nvt 0.4621 0.9919 0.0000\nvt 0.4605 0.9929 0.0000\nvt 0.4590 0.9939 0.0000\nvt 0.4573 0.9948 0.0000\nvt 0.4556 0.9956 0.0000\nvt 0.4539 0.9964 0.0000\nvt 0.4521 0.9971 0.0000\nvt 0.4503 0.9977 0.0000\nvt 0.4485 0.9982 0.0000\nvt 0.4466 0.9987 0.0000\nvt 0.4446 0.9991 0.0000\nvt 0.4426 0.9994 0.0000\nvt 0.4406 0.9997 0.0000\nvt 0.4385 0.9999 0.0000\nvt 0.4364 1.0000 0.0000\nvt 0.4343 1.0000 0.0000\nvt 0.4321 0.9999 0.0000\nvt 0.4299 0.9998 0.0000\nvt 0.4277 0.9996 0.0000\nvt 0.4228 0.9989 0.0000\nvt 0.4254 0.9993 0.0000\nvt 0.4229 0.9989 0.0000\nvt 0.2476 0.9680 0.0000\nvt 0.4832 0.9287 0.0000\nvt 0.4834 0.9312 0.0000\nvt 0.4836 0.9337 0.0000\nvt 0.4837 0.9361 0.0000\nvt 0.4838 0.9385 0.0000\nvt 0.4838 0.9409 0.0000\nvt 0.4838 0.9433 0.0000\nvt 0.4837 0.9456 0.0000\nvt 0.4836 0.9479 0.0000\nvt 0.4834 0.9502 0.0000\nvt 0.4831 0.9525 0.0000\nvt 0.4828 0.9547 0.0000\nvt 0.4825 0.9568 0.0000\nvt 0.4821 0.9590 0.0000\nvt 0.4816 0.9611 0.0000\nvt 0.4811 0.9631 0.0000\nvt 0.4805 0.9652 0.0000\nvt 0.4799 0.9671 0.0000\nvt 0.4792 0.9691 0.0000\nvt 0.4785 0.9710 0.0000\nvt 0.4232 0.9989 0.0000\nvt 0.4233 0.9990 0.0000\nvt 0.2470 0.9678 0.0000\nvt 0.2467 0.9675 0.0000\nvt 0.2465 0.9672 0.0000\nvt 0.2463 0.9668 0.0000\nvt 0.4601 0.9191 0.0000\nvt 0.4601 0.9196 0.0000\nvt 0.4516 0.0022 0.0000\nvt 0.4604 0.9191 0.0000\nvt 0.4605 0.9195 0.0000\nvt 0.4514 0.0023 0.0000\nvt 0.4606 0.9191 0.0000\nvt 0.4519 0.0022 0.0000\nvt 0.4609 0.9191 0.0000\nvt 0.4608 0.9193 0.0000\nvt 0.4522 0.0021 0.0000\nvt 0.4612 0.9191 0.0000\nvt 0.4521 0.0021 0.0000\nvt 0.4524 0.0021 0.0000\nvt 0.4615 0.9196 0.0000\nvt 0.4611 0.9198 0.0000\nvt 0.4528 0.0020 0.0000\nvt 0.4618 0.9191 0.0000\nvt 0.4618 0.9194 0.0000\nvt 0.4527 0.0021 0.0000\nvt 0.4532 0.0020 0.0000\nvt 0.4622 0.9191 0.0000\nvt 0.4530 0.0020 0.0000\nvt 0.4534 0.0020 0.0000\nvt 0.4623 0.9191 0.0000\nvt 0.4623 0.9198 0.0000\nvt 0.4538 0.0021 0.0000\nvt 0.4629 0.9191 0.0000\nvt 0.4627 0.9195 0.0000\nvt 0.4535 0.0020 0.0000\nvt 0.4542 0.0021 0.0000\nvt 0.4631 0.9191 0.0000\nvt 0.4540 0.0021 0.0000\nvt 0.4545 0.0021 0.0000\nvt 0.4634 0.9191 0.0000\nvt 0.4636 0.9194 0.0000\nvt 0.4632 0.9197 0.0000\nvt 0.4548 0.0022 0.0000\nvt 0.7744 0.1957 0.0000\nvt 0.4550 0.0022 0.0000\nvt 0.4640 0.9198 0.0000\nvt 0.4548 0.0017 0.0000\nvt 0.7748 0.1957 0.0000\nvt 0.4544 0.0016 0.0000\nvt 0.4540 0.0016 0.0000\nvt 0.4536 0.0016 0.0000\nvt 0.4531 0.0016 0.0000\nvt 0.4525 0.0017 0.0000\nvt 0.4519 0.0018 0.0000\nvt 0.5588 0.0644 0.0000\nvt 0.5637 0.3788 0.0000\nvt 0.5900 0.3911 0.0000\nvt 0.5589 0.0642 0.0000\nvt 0.5638 0.3785 0.0000\nvt 0.5897 0.3907 0.0000\nvt 0.5590 0.0640 0.0000\nvt 0.5639 0.3783 0.0000\nvt 0.5895 0.3903 0.0000\nvt 0.5590 0.0639 0.0000\nvt 0.5639 0.3781 0.0000\nvt 0.5891 0.3900 0.0000\nvt 0.5589 0.0639 0.0000\nvt 0.5638 0.3780 0.0000\nvt 0.5888 0.3897 0.0000\nvt 0.5588 0.0638 0.0000\nvt 0.5637 0.3779 0.0000\nvt 0.5586 0.0638 0.0000\nvt 0.5635 0.3778 0.0000\nvt 0.5885 0.3895 0.0000\nvt 0.5584 0.0639 0.0000\nvt 0.5633 0.3778 0.0000\nvt 0.5881 0.3894 0.0000\nvt 0.5878 0.3893 0.0000\nvt 0.4539 0.0003 0.0000\nvt 0.4542 0.0003 0.0000\nvt 0.4546 0.0003 0.0000\nvt 0.4548 0.0005 0.0000\nvt 0.4551 0.0007 0.0000\nvt 0.4552 0.0011 0.0000\nvt 0.4554 0.0014 0.0000\nvt 0.7746 0.1960 0.0000\nvt 0.7747 0.1962 0.0000\nvt 0.7744 0.1958 0.0000\nvt 0.7740 0.1955 0.0000\nvt 0.7736 0.1953 0.0000\nvt 0.7732 0.1952 0.0000\nvt 0.7732 0.1951 0.0000\nvt 0.7724 0.1950 0.0000\nvt 0.7723 0.1950 0.0000\nvt 0.7749 0.1961 0.0000\nvt 0.7720 0.1949 0.0000\nvt 0.7719 0.1950 0.0000\nvt 0.7722 0.1949 0.0000\nvt 0.7721 0.1949 0.0000\nvt 0.7723 0.1949 0.0000\nvt 0.7729 0.1949 0.0000\nvt 0.8689 0.2528 0.0000\nvt 0.7739 0.1949 0.0000\nvt 0.7736 0.1948 0.0000\nvt 0.8690 0.2527 0.0000\nvt 0.7743 0.1950 0.0000\nvt 0.7739 0.1948 0.0000\nvt 0.7746 0.1952 0.0000\nvt 0.7742 0.1950 0.0000\nvt 0.8689 0.2527 0.0000\nvt 0.7748 0.1954 0.0000\nvt 0.7744 0.1952 0.0000\nvt 0.8687 0.2527 0.0000\nvt 0.7750 0.1957 0.0000\nvt 0.8685 0.2527 0.0000\nvt 0.7751 0.1961 0.0000\nvt 0.8677 0.2528 0.0000\nvt 0.8682 0.2527 0.0000\nvt 0.7024 0.4441 0.0000\nvt 0.7029 0.4440 0.0000\nvt 0.7033 0.4439 0.0000\nvt 0.7036 0.4438 0.0000\nvt 0.7040 0.4437 0.0000\nvt 0.7041 0.4437 0.0000\nvt 0.7041 0.4436 0.0000\nvt 0.7040 0.4436 0.0000\nvt 0.7209 0.4524 0.0000\nvt 0.7208 0.4520 0.0000\nvt 0.7206 0.4516 0.0000\nvt 0.7204 0.4513 0.0000\nvt 0.7201 0.4511 0.0000\nvt 0.7197 0.4510 0.0000\nvt 0.4624 0.9222 0.0000\nvt 0.6382 0.9595 0.0000\nvt 0.6406 0.9599 0.0000\nvt 0.4626 0.9221 0.0000\nvt 0.6382 0.9594 0.0000\nvt 0.4628 0.9219 0.0000\nvt 0.6386 0.9593 0.0000\nvt 0.6410 0.9597 0.0000\nvt 0.4630 0.9218 0.0000\nvt 0.6386 0.9592 0.0000\nvt 0.4632 0.9216 0.0000\nvt 0.6389 0.9590 0.0000\nvt 0.6413 0.9594 0.0000\nvt 0.4634 0.9214 0.0000\nvt 0.6390 0.9589 0.0000\nvt 0.4635 0.9212 0.0000\nvt 0.6393 0.9586 0.0000\nvt 0.6416 0.9590 0.0000\nvt 0.4635 0.9213 0.0000\nvt 0.4637 0.9210 0.0000\nvt 0.4638 0.9207 0.0000\nvt 0.6395 0.9582 0.0000\nvt 0.6419 0.9586 0.0000\nvt 0.4640 0.9204 0.0000\nvt 0.6396 0.9581 0.0000\nvt 0.4641 0.9202 0.0000\nvt 0.6398 0.9577 0.0000\nvt 0.6421 0.9581 0.0000\nvt 0.4642 0.9197 0.0000\nvt 0.4637 0.9206 0.0000\nvt 0.4636 0.9201 0.0000\nvt 0.4634 0.9209 0.0000\nvt 0.4632 0.9215 0.0000\nvt 0.4630 0.9212 0.0000\nvt 0.4629 0.9217 0.0000\nvt 0.4625 0.9219 0.0000\nvt 0.4622 0.9220 0.0000\nvt 0.6444 0.9585 0.0000\nvt 0.6467 0.9587 0.0000\nvt 0.6490 0.9589 0.0000\nvt 0.6513 0.9589 0.0000\nvt 0.6536 0.9589 0.0000\nvt 0.6559 0.9588 0.0000\nvt 0.6582 0.9586 0.0000\nvt 0.6604 0.9583 0.0000\nvt 0.6627 0.9579 0.0000\nvt 0.6650 0.9574 0.0000\nvt 0.6672 0.9569 0.0000\nvt 0.6694 0.9562 0.0000\nvt 0.6716 0.9555 0.0000\nvt 0.6738 0.9546 0.0000\nvt 0.6760 0.9537 0.0000\nvt 0.6781 0.9527 0.0000\nvt 0.6803 0.9516 0.0000\nvt 0.6824 0.9504 0.0000\nvt 0.6845 0.9492 0.0000\nvt 0.6865 0.9478 0.0000\nvt 0.6885 0.9464 0.0000\nvt 0.6905 0.9449 0.0000\nvt 0.6925 0.9433 0.0000\nvt 0.6945 0.9417 0.0000\nvt 0.6964 0.9399 0.0000\nvt 0.6982 0.9381 0.0000\nvt 0.7001 0.9362 0.0000\nvt 0.7019 0.9343 0.0000\nvt 0.7037 0.9323 0.0000\nvt 0.7054 0.9302 0.0000\nvt 0.7071 0.9280 0.0000\nvt 0.7088 0.9258 0.0000\nvt 0.7104 0.9235 0.0000\nvt 0.7120 0.9211 0.0000\nvt 0.7135 0.9187 0.0000\nvt 0.7150 0.9163 0.0000\nvt 0.7165 0.9137 0.0000\nvt 0.7179 0.9111 0.0000\nvt 0.7192 0.9085 0.0000\nvt 0.7206 0.9058 0.0000\nvt 0.7218 0.9031 0.0000\nvt 0.7231 0.9003 0.0000\nvt 0.7242 0.8974 0.0000\nvt 0.7254 0.8945 0.0000\nvt 0.7265 0.8916 0.0000\nvt 0.7275 0.8886 0.0000\nvt 0.7285 0.8856 0.0000\nvt 0.7294 0.8826 0.0000\nvt 0.7303 0.8795 0.0000\nvt 0.7311 0.8764 0.0000\nvt 0.7319 0.8732 0.0000\nvt 0.7327 0.8701 0.0000\nvt 0.7849 0.6338 0.0000\nvt 0.6442 0.9589 0.0000\nvt 0.6465 0.9592 0.0000\nvt 0.6488 0.9594 0.0000\nvt 0.6511 0.9594 0.0000\nvt 0.6534 0.9594 0.0000\nvt 0.6557 0.9593 0.0000\nvt 0.6580 0.9591 0.0000\nvt 0.6603 0.9588 0.0000\nvt 0.6626 0.9584 0.0000\nvt 0.6648 0.9579 0.0000\nvt 0.6671 0.9573 0.0000\nvt 0.6693 0.9567 0.0000\nvt 0.6715 0.9559 0.0000\nvt 0.6737 0.9551 0.0000\nvt 0.6759 0.9542 0.0000\nvt 0.6781 0.9531 0.0000\nvt 0.6802 0.9520 0.0000\nvt 0.6823 0.9509 0.0000\nvt 0.6844 0.9496 0.0000\nvt 0.6865 0.9483 0.0000\nvt 0.6885 0.9468 0.0000\nvt 0.6905 0.9453 0.0000\nvt 0.6925 0.9437 0.0000\nvt 0.6944 0.9421 0.0000\nvt 0.6964 0.9403 0.0000\nvt 0.6982 0.9385 0.0000\nvt 0.7001 0.9366 0.0000\nvt 0.7019 0.9347 0.0000\nvt 0.7037 0.9326 0.0000\nvt 0.7054 0.9305 0.0000\nvt 0.7071 0.9284 0.0000\nvt 0.7088 0.9261 0.0000\nvt 0.7104 0.9238 0.0000\nvt 0.7120 0.9215 0.0000\nvt 0.7136 0.9191 0.0000\nvt 0.7151 0.9166 0.0000\nvt 0.7165 0.9140 0.0000\nvt 0.7179 0.9114 0.0000\nvt 0.7193 0.9088 0.0000\nvt 0.7206 0.9061 0.0000\nvt 0.7219 0.9033 0.0000\nvt 0.7231 0.9005 0.0000\nvt 0.7243 0.8977 0.0000\nvt 0.7255 0.8948 0.0000\nvt 0.7265 0.8919 0.0000\nvt 0.7276 0.8889 0.0000\nvt 0.7286 0.8859 0.0000\nvt 0.7295 0.8828 0.0000\nvt 0.7304 0.8797 0.0000\nvt 0.7312 0.8766 0.0000\nvt 0.7320 0.8734 0.0000\nvt 0.7328 0.8702 0.0000\nvt 0.7850 0.6340 0.0000\nvt 0.6439 0.9594 0.0000\nvt 0.6463 0.9596 0.0000\nvt 0.6486 0.9598 0.0000\nvt 0.6509 0.9599 0.0000\nvt 0.6532 0.9598 0.0000\nvt 0.6555 0.9597 0.0000\nvt 0.6578 0.9595 0.0000\nvt 0.6601 0.9592 0.0000\nvt 0.6624 0.9588 0.0000\nvt 0.6646 0.9583 0.0000\nvt 0.6669 0.9578 0.0000\nvt 0.6691 0.9571 0.0000\nvt 0.6714 0.9563 0.0000\nvt 0.6736 0.9555 0.0000\nvt 0.6757 0.9546 0.0000\nvt 0.6779 0.9535 0.0000\nvt 0.6801 0.9524 0.0000\nvt 0.6822 0.9513 0.0000\nvt 0.6843 0.9500 0.0000\nvt 0.6863 0.9486 0.0000\nvt 0.6884 0.9472 0.0000\nvt 0.6904 0.9457 0.0000\nvt 0.6924 0.9441 0.0000\nvt 0.6943 0.9424 0.0000\nvt 0.6963 0.9407 0.0000\nvt 0.6982 0.9389 0.0000\nvt 0.7000 0.9370 0.0000\nvt 0.7018 0.9350 0.0000\nvt 0.7036 0.9330 0.0000\nvt 0.7054 0.9309 0.0000\nvt 0.7071 0.9287 0.0000\nvt 0.7087 0.9265 0.0000\nvt 0.7104 0.9241 0.0000\nvt 0.7120 0.9218 0.0000\nvt 0.7135 0.9194 0.0000\nvt 0.7150 0.9169 0.0000\nvt 0.7165 0.9143 0.0000\nvt 0.7179 0.9117 0.0000\nvt 0.7193 0.9091 0.0000\nvt 0.7206 0.9063 0.0000\nvt 0.7219 0.9036 0.0000\nvt 0.7231 0.9008 0.0000\nvt 0.7243 0.8979 0.0000\nvt 0.7254 0.8950 0.0000\nvt 0.7265 0.8921 0.0000\nvt 0.7276 0.8891 0.0000\nvt 0.7286 0.8860 0.0000\nvt 0.7295 0.8830 0.0000\nvt 0.7304 0.8799 0.0000\nvt 0.7313 0.8767 0.0000\nvt 0.7320 0.8736 0.0000\nvt 0.7328 0.8704 0.0000\nvt 0.7850 0.6342 0.0000\nvt 0.6436 0.9597 0.0000\nvt 0.6460 0.9600 0.0000\nvt 0.6483 0.9602 0.0000\nvt 0.6506 0.9602 0.0000\nvt 0.6529 0.9602 0.0000\nvt 0.6552 0.9601 0.0000\nvt 0.6575 0.9599 0.0000\nvt 0.6598 0.9596 0.0000\nvt 0.6621 0.9592 0.0000\nvt 0.6644 0.9587 0.0000\nvt 0.6667 0.9581 0.0000\nvt 0.6689 0.9574 0.0000\nvt 0.6711 0.9567 0.0000\nvt 0.6733 0.9558 0.0000\nvt 0.6755 0.9549 0.0000\nvt 0.6777 0.9539 0.0000\nvt 0.6799 0.9528 0.0000\nvt 0.6820 0.9516 0.0000\nvt 0.6841 0.9503 0.0000\nvt 0.6862 0.9490 0.0000\nvt 0.6882 0.9475 0.0000\nvt 0.6902 0.9460 0.0000\nvt 0.6922 0.9444 0.0000\nvt 0.6942 0.9428 0.0000\nvt 0.6961 0.9410 0.0000\nvt 0.6980 0.9392 0.0000\nvt 0.6999 0.9373 0.0000\nvt 0.7017 0.9353 0.0000\nvt 0.7035 0.9333 0.0000\nvt 0.7052 0.9312 0.0000\nvt 0.7069 0.9290 0.0000\nvt 0.7086 0.9267 0.0000\nvt 0.7102 0.9244 0.0000\nvt 0.7118 0.9220 0.0000\nvt 0.7134 0.9196 0.0000\nvt 0.7149 0.9171 0.0000\nvt 0.7164 0.9146 0.0000\nvt 0.7178 0.9119 0.0000\nvt 0.7192 0.9093 0.0000\nvt 0.7205 0.9066 0.0000\nvt 0.7218 0.9038 0.0000\nvt 0.7230 0.9010 0.0000\nvt 0.7242 0.8981 0.0000\nvt 0.7254 0.8952 0.0000\nvt 0.7265 0.8923 0.0000\nvt 0.7275 0.8893 0.0000\nvt 0.7285 0.8862 0.0000\nvt 0.7294 0.8831 0.0000\nvt 0.7303 0.8800 0.0000\nvt 0.7312 0.8769 0.0000\nvt 0.7320 0.8737 0.0000\nvt 0.7327 0.8705 0.0000\nvt 0.7850 0.6344 0.0000\nvt 0.6433 0.9600 0.0000\nvt 0.6456 0.9603 0.0000\nvt 0.6479 0.9604 0.0000\nvt 0.6503 0.9605 0.0000\nvt 0.6526 0.9605 0.0000\nvt 0.6549 0.9604 0.0000\nvt 0.6572 0.9602 0.0000\nvt 0.6595 0.9599 0.0000\nvt 0.6618 0.9595 0.0000\nvt 0.6641 0.9590 0.0000\nvt 0.6664 0.9584 0.0000\nvt 0.6686 0.9577 0.0000\nvt 0.6708 0.9570 0.0000\nvt 0.6731 0.9561 0.0000\nvt 0.6753 0.9552 0.0000\nvt 0.6774 0.9542 0.0000\nvt 0.6796 0.9531 0.0000\nvt 0.6817 0.9519 0.0000\nvt 0.6838 0.9506 0.0000\nvt 0.6859 0.9492 0.0000\nvt 0.6880 0.9478 0.0000\nvt 0.6900 0.9463 0.0000\nvt 0.6920 0.9447 0.0000\nvt 0.6939 0.9430 0.0000\nvt 0.6959 0.9413 0.0000\nvt 0.6978 0.9394 0.0000\nvt 0.6996 0.9375 0.0000\nvt 0.7015 0.9355 0.0000\nvt 0.7033 0.9335 0.0000\nvt 0.7050 0.9314 0.0000\nvt 0.7067 0.9292 0.0000\nvt 0.7084 0.9269 0.0000\nvt 0.7100 0.9246 0.0000\nvt 0.7116 0.9223 0.0000\nvt 0.7132 0.9198 0.0000\nvt 0.7147 0.9173 0.0000\nvt 0.7162 0.9148 0.0000\nvt 0.7176 0.9121 0.0000\nvt 0.7190 0.9095 0.0000\nvt 0.7203 0.9067 0.0000\nvt 0.7216 0.9040 0.0000\nvt 0.7229 0.9012 0.0000\nvt 0.7241 0.8983 0.0000\nvt 0.7252 0.8954 0.0000\nvt 0.7263 0.8924 0.0000\nvt 0.7273 0.8894 0.0000\nvt 0.7283 0.8864 0.0000\nvt 0.7293 0.8833 0.0000\nvt 0.7302 0.8802 0.0000\nvt 0.7310 0.8770 0.0000\nvt 0.7318 0.8738 0.0000\nvt 0.7326 0.8706 0.0000\nvt 0.7848 0.6345 0.0000\nvt 0.7849 0.6344 0.0000\nvt 0.6429 0.9602 0.0000\nvt 0.6452 0.9605 0.0000\nvt 0.6476 0.9607 0.0000\nvt 0.6499 0.9607 0.0000\nvt 0.6522 0.9607 0.0000\nvt 0.6546 0.9606 0.0000\nvt 0.6569 0.9604 0.0000\nvt 0.6592 0.9601 0.0000\nvt 0.6615 0.9597 0.0000\nvt 0.6638 0.9592 0.0000\nvt 0.6660 0.9586 0.0000\nvt 0.6683 0.9580 0.0000\nvt 0.6705 0.9572 0.0000\nvt 0.6727 0.9563 0.0000\nvt 0.6749 0.9554 0.0000\nvt 0.6771 0.9544 0.0000\nvt 0.6793 0.9533 0.0000\nvt 0.6814 0.9521 0.0000\nvt 0.6835 0.9508 0.0000\nvt 0.6856 0.9494 0.0000\nvt 0.6877 0.9480 0.0000\nvt 0.6897 0.9465 0.0000\nvt 0.6917 0.9449 0.0000\nvt 0.6936 0.9432 0.0000\nvt 0.6956 0.9414 0.0000\nvt 0.6975 0.9396 0.0000\nvt 0.6994 0.9377 0.0000\nvt 0.7012 0.9357 0.0000\nvt 0.7030 0.9337 0.0000\nvt 0.7047 0.9316 0.0000\nvt 0.7065 0.9294 0.0000\nvt 0.7081 0.9271 0.0000\nvt 0.7098 0.9248 0.0000\nvt 0.7114 0.9224 0.0000\nvt 0.7129 0.9200 0.0000\nvt 0.7145 0.9175 0.0000\nvt 0.7159 0.9149 0.0000\nvt 0.7174 0.9123 0.0000\nvt 0.7187 0.9096 0.0000\nvt 0.7201 0.9069 0.0000\nvt 0.7214 0.9041 0.0000\nvt 0.7226 0.9013 0.0000\nvt 0.7238 0.8984 0.0000\nvt 0.7250 0.8955 0.0000\nvt 0.7261 0.8925 0.0000\nvt 0.7271 0.8895 0.0000\nvt 0.7281 0.8865 0.0000\nvt 0.7291 0.8834 0.0000\nvt 0.7300 0.8803 0.0000\nvt 0.7308 0.8771 0.0000\nvt 0.7316 0.8739 0.0000\nvt 0.7323 0.8707 0.0000\nvt 0.7846 0.6346 0.0000\nvt 0.7843 0.6347 0.0000\nvt 0.7845 0.6346 0.0000\nvt 0.7852 0.6316 0.0000\nvt 0.7854 0.6315 0.0000\nvt 0.7856 0.6314 0.0000\nvt 0.7857 0.6312 0.0000\nvt 0.7857 0.6310 0.0000\nvt 0.7856 0.6308 0.0000\nvt 0.7861 0.6278 0.0000\nvt 0.7867 0.6248 0.0000\nvt 0.7872 0.6218 0.0000\nvt 0.7876 0.6187 0.0000\nvt 0.7880 0.6156 0.0000\nvt 0.7883 0.6125 0.0000\nvt 0.7886 0.6093 0.0000\nvt 0.7888 0.6062 0.0000\nvt 0.7890 0.6030 0.0000\nvt 0.7891 0.5998 0.0000\nvt 0.7892 0.5966 0.0000\nvt 0.7892 0.5934 0.0000\nvt 0.7892 0.5902 0.0000\nvt 0.7891 0.5869 0.0000\nvt 0.7890 0.5837 0.0000\nvt 0.7888 0.5805 0.0000\nvt 0.7886 0.5772 0.0000\nvt 0.7883 0.5740 0.0000\nvt 0.7880 0.5707 0.0000\nvt 0.7876 0.5675 0.0000\nvt 0.7872 0.5643 0.0000\nvt 0.7867 0.5611 0.0000\nvt 0.7862 0.5579 0.0000\nvt 0.7856 0.5547 0.0000\nvt 0.7850 0.5515 0.0000\nvt 0.7843 0.5483 0.0000\nvt 0.7836 0.5452 0.0000\nvt 0.7828 0.5420 0.0000\nvt 0.7820 0.5389 0.0000\nvt 0.7811 0.5358 0.0000\nvt 0.7802 0.5328 0.0000\nvt 0.7793 0.5297 0.0000\nvt 0.7783 0.5267 0.0000\nvt 0.7773 0.5238 0.0000\nvt 0.7762 0.5208 0.0000\nvt 0.7750 0.5179 0.0000\nvt 0.7739 0.5150 0.0000\nvt 0.7727 0.5122 0.0000\nvt 0.7714 0.5094 0.0000\nvt 0.7701 0.5066 0.0000\nvt 0.7688 0.5039 0.0000\nvt 0.7674 0.5013 0.0000\nvt 0.7660 0.4986 0.0000\nvt 0.7646 0.4961 0.0000\nvt 0.7631 0.4935 0.0000\nvt 0.7616 0.4911 0.0000\nvt 0.7600 0.4886 0.0000\nvt 0.7584 0.4863 0.0000\nvt 0.7568 0.4840 0.0000\nvt 0.7551 0.4817 0.0000\nvt 0.7534 0.4795 0.0000\nvt 0.7517 0.4774 0.0000\nvt 0.7500 0.4753 0.0000\nvt 0.7482 0.4733 0.0000\nvt 0.7464 0.4713 0.0000\nvt 0.7446 0.4694 0.0000\nvt 0.7427 0.4676 0.0000\nvt 0.7408 0.4659 0.0000\nvt 0.7389 0.4642 0.0000\nvt 0.7370 0.4626 0.0000\nvt 0.7351 0.4610 0.0000\nvt 0.7331 0.4596 0.0000\nvt 0.7311 0.4582 0.0000\nvt 0.7291 0.4568 0.0000\nvt 0.7271 0.4556 0.0000\nvt 0.7251 0.4544 0.0000\nvt 0.7230 0.4534 0.0000\nvt 0.7862 0.6280 0.0000\nvt 0.7868 0.6250 0.0000\nvt 0.7872 0.6219 0.0000\nvt 0.7877 0.6189 0.0000\nvt 0.7881 0.6157 0.0000\nvt 0.7884 0.6126 0.0000\nvt 0.7887 0.6095 0.0000\nvt 0.7889 0.6063 0.0000\nvt 0.7891 0.6031 0.0000\nvt 0.7892 0.5999 0.0000\nvt 0.7893 0.5967 0.0000\nvt 0.7893 0.5935 0.0000\nvt 0.7893 0.5902 0.0000\nvt 0.7892 0.5870 0.0000\nvt 0.7891 0.5837 0.0000\nvt 0.7889 0.5805 0.0000\nvt 0.7887 0.5772 0.0000\nvt 0.7884 0.5740 0.0000\nvt 0.7881 0.5707 0.0000\nvt 0.7877 0.5675 0.0000\nvt 0.7873 0.5643 0.0000\nvt 0.7868 0.5610 0.0000\nvt 0.7862 0.5578 0.0000\nvt 0.7857 0.5546 0.0000\nvt 0.7850 0.5514 0.0000\nvt 0.7844 0.5482 0.0000\nvt 0.7837 0.5451 0.0000\nvt 0.7829 0.5419 0.0000\nvt 0.7821 0.5388 0.0000\nvt 0.7812 0.5357 0.0000\nvt 0.7803 0.5327 0.0000\nvt 0.7794 0.5296 0.0000\nvt 0.7784 0.5266 0.0000\nvt 0.7773 0.5236 0.0000\nvt 0.7762 0.5207 0.0000\nvt 0.7751 0.5177 0.0000\nvt 0.7739 0.5149 0.0000\nvt 0.7727 0.5120 0.0000\nvt 0.7715 0.5092 0.0000\nvt 0.7702 0.5064 0.0000\nvt 0.7688 0.5037 0.0000\nvt 0.7674 0.5010 0.0000\nvt 0.7660 0.4984 0.0000\nvt 0.7646 0.4958 0.0000\nvt 0.7631 0.4933 0.0000\nvt 0.7616 0.4908 0.0000\nvt 0.7600 0.4884 0.0000\nvt 0.7584 0.4860 0.0000\nvt 0.7568 0.4837 0.0000\nvt 0.7551 0.4814 0.0000\nvt 0.7534 0.4792 0.0000\nvt 0.7517 0.4770 0.0000\nvt 0.7500 0.4750 0.0000\nvt 0.7482 0.4729 0.0000\nvt 0.7464 0.4710 0.0000\nvt 0.7445 0.4691 0.0000\nvt 0.7427 0.4673 0.0000\nvt 0.7408 0.4655 0.0000\nvt 0.7389 0.4638 0.0000\nvt 0.7369 0.4622 0.0000\nvt 0.7350 0.4607 0.0000\nvt 0.7330 0.4592 0.0000\nvt 0.7310 0.4578 0.0000\nvt 0.7290 0.4565 0.0000\nvt 0.7270 0.4552 0.0000\nvt 0.7249 0.4541 0.0000\nvt 0.7229 0.4530 0.0000\nvt 0.7862 0.6282 0.0000\nvt 0.7868 0.6252 0.0000\nvt 0.7872 0.6221 0.0000\nvt 0.7877 0.6190 0.0000\nvt 0.7881 0.6159 0.0000\nvt 0.7884 0.6127 0.0000\nvt 0.7887 0.6096 0.0000\nvt 0.7889 0.6064 0.0000\nvt 0.7891 0.6032 0.0000\nvt 0.7892 0.6000 0.0000\nvt 0.7893 0.5968 0.0000\nvt 0.7893 0.5903 0.0000\nvt 0.7891 0.5838 0.0000\nvt 0.7887 0.5773 0.0000\nvt 0.7881 0.5708 0.0000\nvt 0.7837 0.5450 0.0000\nvt 0.7821 0.5387 0.0000\nvt 0.7812 0.5356 0.0000\nvt 0.7803 0.5326 0.0000\nvt 0.7793 0.5295 0.0000\nvt 0.7783 0.5265 0.0000\nvt 0.7773 0.5235 0.0000\nvt 0.7762 0.5205 0.0000\nvt 0.7751 0.5176 0.0000\nvt 0.7739 0.5147 0.0000\nvt 0.7727 0.5118 0.0000\nvt 0.7714 0.5090 0.0000\nvt 0.7701 0.5063 0.0000\nvt 0.7688 0.5035 0.0000\nvt 0.7674 0.5008 0.0000\nvt 0.7660 0.4982 0.0000\nvt 0.7645 0.4956 0.0000\nvt 0.7630 0.4931 0.0000\nvt 0.7615 0.4906 0.0000\nvt 0.7599 0.4881 0.0000\nvt 0.7583 0.4857 0.0000\nvt 0.7567 0.4834 0.0000\nvt 0.7550 0.4811 0.0000\nvt 0.7533 0.4789 0.0000\nvt 0.7516 0.4768 0.0000\nvt 0.7498 0.4747 0.0000\nvt 0.7481 0.4727 0.0000\nvt 0.7462 0.4707 0.0000\nvt 0.7444 0.4688 0.0000\nvt 0.7425 0.4670 0.0000\nvt 0.7406 0.4652 0.0000\nvt 0.7387 0.4635 0.0000\nvt 0.7368 0.4619 0.0000\nvt 0.7348 0.4603 0.0000\nvt 0.7329 0.4589 0.0000\nvt 0.7309 0.4575 0.0000\nvt 0.7288 0.4561 0.0000\nvt 0.7268 0.4549 0.0000\nvt 0.7248 0.4537 0.0000\nvt 0.7227 0.4526 0.0000\nvt 0.7862 0.6284 0.0000\nvt 0.7867 0.6253 0.0000\nvt 0.7872 0.6222 0.0000\nvt 0.7876 0.6191 0.0000\nvt 0.7880 0.6160 0.0000\nvt 0.7883 0.6129 0.0000\nvt 0.7886 0.6097 0.0000\nvt 0.7888 0.6065 0.0000\nvt 0.7890 0.6033 0.0000\nvt 0.7891 0.6001 0.0000\nvt 0.7892 0.5969 0.0000\nvt 0.7892 0.5936 0.0000\nvt 0.7892 0.5904 0.0000\nvt 0.7891 0.5871 0.0000\nvt 0.7890 0.5838 0.0000\nvt 0.7888 0.5806 0.0000\nvt 0.7886 0.5773 0.0000\nvt 0.7880 0.5708 0.0000\nvt 0.7867 0.5610 0.0000\nvt 0.7856 0.5545 0.0000\nvt 0.7850 0.5513 0.0000\nvt 0.7843 0.5481 0.0000\nvt 0.7836 0.5450 0.0000\nvt 0.7828 0.5418 0.0000\nvt 0.7820 0.5387 0.0000\nvt 0.7811 0.5356 0.0000\nvt 0.7802 0.5325 0.0000\nvt 0.7792 0.5294 0.0000\nvt 0.7782 0.5264 0.0000\nvt 0.7772 0.5234 0.0000\nvt 0.7761 0.5204 0.0000\nvt 0.7750 0.5175 0.0000\nvt 0.7738 0.5146 0.0000\nvt 0.7726 0.5117 0.0000\nvt 0.7713 0.5089 0.0000\nvt 0.7700 0.5061 0.0000\nvt 0.7686 0.5034 0.0000\nvt 0.7673 0.5007 0.0000\nvt 0.7658 0.4980 0.0000\nvt 0.7644 0.4954 0.0000\nvt 0.7629 0.4929 0.0000\nvt 0.7613 0.4904 0.0000\nvt 0.7598 0.4879 0.0000\nvt 0.7582 0.4855 0.0000\nvt 0.7565 0.4832 0.0000\nvt 0.7549 0.4809 0.0000\nvt 0.7532 0.4787 0.0000\nvt 0.7514 0.4766 0.0000\nvt 0.7497 0.4745 0.0000\nvt 0.7479 0.4724 0.0000\nvt 0.7461 0.4705 0.0000\nvt 0.7442 0.4686 0.0000\nvt 0.7423 0.4667 0.0000\nvt 0.7404 0.4650 0.0000\nvt 0.7385 0.4633 0.0000\nvt 0.7366 0.4616 0.0000\nvt 0.7346 0.4601 0.0000\nvt 0.7326 0.4586 0.0000\nvt 0.7306 0.4572 0.0000\nvt 0.7286 0.4559 0.0000\nvt 0.7266 0.4546 0.0000\nvt 0.7245 0.4534 0.0000\nvt 0.7225 0.4523 0.0000\nvt 0.7860 0.6285 0.0000\nvt 0.7865 0.6255 0.0000\nvt 0.7870 0.6224 0.0000\nvt 0.7874 0.6193 0.0000\nvt 0.7878 0.6161 0.0000\nvt 0.7882 0.6130 0.0000\nvt 0.7884 0.6098 0.0000\nvt 0.7887 0.6066 0.0000\nvt 0.7888 0.6034 0.0000\nvt 0.7890 0.6002 0.0000\nvt 0.7890 0.5969 0.0000\nvt 0.7891 0.5937 0.0000\nvt 0.7890 0.5904 0.0000\nvt 0.7890 0.5872 0.0000\nvt 0.7888 0.5839 0.0000\nvt 0.7887 0.5806 0.0000\nvt 0.7884 0.5773 0.0000\nvt 0.7882 0.5741 0.0000\nvt 0.7865 0.5610 0.0000\nvt 0.7860 0.5578 0.0000\nvt 0.7854 0.5545 0.0000\nvt 0.7848 0.5513 0.0000\nvt 0.7841 0.5481 0.0000\nvt 0.7834 0.5449 0.0000\nvt 0.7826 0.5418 0.0000\nvt 0.7818 0.5386 0.0000\nvt 0.7809 0.5355 0.0000\nvt 0.7800 0.5324 0.0000\nvt 0.7791 0.5294 0.0000\nvt 0.7781 0.5263 0.0000\nvt 0.7770 0.5233 0.0000\nvt 0.7759 0.5203 0.0000\nvt 0.7748 0.5174 0.0000\nvt 0.7736 0.5145 0.0000\nvt 0.7724 0.5116 0.0000\nvt 0.7711 0.5088 0.0000\nvt 0.7698 0.5060 0.0000\nvt 0.7684 0.5033 0.0000\nvt 0.7671 0.5006 0.0000\nvt 0.7656 0.4979 0.0000\nvt 0.7642 0.4953 0.0000\nvt 0.7627 0.4928 0.0000\nvt 0.7611 0.4903 0.0000\nvt 0.7596 0.4878 0.0000\nvt 0.7580 0.4854 0.0000\nvt 0.7563 0.4831 0.0000\nvt 0.7546 0.4808 0.0000\nvt 0.7529 0.4786 0.0000\nvt 0.7512 0.4764 0.0000\nvt 0.7494 0.4743 0.0000\nvt 0.7476 0.4723 0.0000\nvt 0.7458 0.4703 0.0000\nvt 0.7440 0.4684 0.0000\nvt 0.7421 0.4665 0.0000\nvt 0.7402 0.4648 0.0000\nvt 0.7383 0.4631 0.0000\nvt 0.7363 0.4614 0.0000\nvt 0.7343 0.4599 0.0000\nvt 0.7324 0.4584 0.0000\nvt 0.7303 0.4570 0.0000\nvt 0.7283 0.4557 0.0000\nvt 0.7263 0.4544 0.0000\nvt 0.7242 0.4532 0.0000\nvt 0.7222 0.4521 0.0000\nvt 0.7857 0.6286 0.0000\nvt 0.7863 0.6256 0.0000\nvt 0.7868 0.6225 0.0000\nvt 0.7872 0.6194 0.0000\nvt 0.7876 0.6162 0.0000\nvt 0.7879 0.6131 0.0000\nvt 0.7882 0.6099 0.0000\nvt 0.7884 0.6067 0.0000\nvt 0.7886 0.6035 0.0000\nvt 0.7887 0.6002 0.0000\nvt 0.7888 0.5970 0.0000\nvt 0.7888 0.5937 0.0000\nvt 0.7888 0.5905 0.0000\nvt 0.7887 0.5872 0.0000\nvt 0.7886 0.5839 0.0000\nvt 0.7884 0.5807 0.0000\nvt 0.7882 0.5774 0.0000\nvt 0.7879 0.5741 0.0000\nvt 0.7876 0.5708 0.0000\nvt 0.7872 0.5676 0.0000\nvt 0.7868 0.5643 0.0000\nvt 0.7863 0.5610 0.0000\nvt 0.7858 0.5578 0.0000\nvt 0.7852 0.5546 0.0000\nvt 0.7845 0.5513 0.0000\nvt 0.7839 0.5481 0.0000\nvt 0.7831 0.5449 0.0000\nvt 0.7824 0.5418 0.0000\nvt 0.7815 0.5386 0.0000\nvt 0.7807 0.5355 0.0000\nvt 0.7798 0.5324 0.0000\nvt 0.7788 0.5293 0.0000\nvt 0.7778 0.5263 0.0000\nvt 0.7767 0.5233 0.0000\nvt 0.7757 0.5203 0.0000\nvt 0.7745 0.5174 0.0000\nvt 0.7733 0.5144 0.0000\nvt 0.7721 0.5116 0.0000\nvt 0.7708 0.5087 0.0000\nvt 0.7695 0.5060 0.0000\nvt 0.7682 0.5032 0.0000\nvt 0.7668 0.5005 0.0000\nvt 0.7654 0.4978 0.0000\nvt 0.7639 0.4952 0.0000\nvt 0.7624 0.4927 0.0000\nvt 0.7609 0.4902 0.0000\nvt 0.7593 0.4877 0.0000\nvt 0.7577 0.4853 0.0000\nvt 0.7560 0.4830 0.0000\nvt 0.7544 0.4807 0.0000\nvt 0.7526 0.4785 0.0000\nvt 0.7509 0.4763 0.0000\nvt 0.7491 0.4742 0.0000\nvt 0.7473 0.4722 0.0000\nvt 0.7455 0.4702 0.0000\nvt 0.7437 0.4683 0.0000\nvt 0.7418 0.4664 0.0000\nvt 0.7399 0.4647 0.0000\nvt 0.7379 0.4629 0.0000\nvt 0.7360 0.4613 0.0000\nvt 0.7340 0.4598 0.0000\nvt 0.7320 0.4583 0.0000\nvt 0.7300 0.4569 0.0000\nvt 0.7280 0.4555 0.0000\nvt 0.7259 0.4543 0.0000\nvt 0.7239 0.4531 0.0000\nvt 0.7218 0.4520 0.0000\nvt 0.7883 0.6035 0.0000\nvt 0.7884 0.6003 0.0000\nvt 0.7885 0.5971 0.0000\nvt 0.7885 0.5938 0.0000\nvt 0.7885 0.5905 0.0000\nvt 0.7884 0.5873 0.0000\nvt 0.7883 0.5840 0.0000\nvt 0.7881 0.5807 0.0000\nvt 0.7879 0.5774 0.0000\nvt 0.7876 0.5741 0.0000\nvt 0.7873 0.5709 0.0000\nvt 0.7869 0.5676 0.0000\nvt 0.7865 0.5643 0.0000\nvt 0.7860 0.5611 0.0000\nvt 0.7854 0.5578 0.0000\nvt 0.7849 0.5546 0.0000\nvt 0.7842 0.5514 0.0000\nvt 0.7836 0.5481 0.0000\nvt 0.7828 0.5450 0.0000\nvt 0.7821 0.5418 0.0000\nvt 0.7812 0.5386 0.0000\nvt 0.7804 0.5355 0.0000\nvt 0.7794 0.5324 0.0000\nvt 0.7785 0.5293 0.0000\nvt 0.7775 0.5263 0.0000\nvt 0.7764 0.5233 0.0000\nvt 0.7753 0.5203 0.0000\nvt 0.7742 0.5174 0.0000\nvt 0.7730 0.5144 0.0000\nvt 0.7718 0.5116 0.0000\nvt 0.7705 0.5087 0.0000\nvt 0.7692 0.5059 0.0000\nvt 0.7679 0.5032 0.0000\nvt 0.7665 0.5005 0.0000\nvt 0.7650 0.4978 0.0000\nvt 0.7636 0.4952 0.0000\nvt 0.7621 0.4927 0.0000\nvt 0.7605 0.4902 0.0000\nvt 0.7589 0.4877 0.0000\nvt 0.7573 0.4853 0.0000\nvt 0.7557 0.4829 0.0000\nvt 0.7540 0.4807 0.0000\nvt 0.7523 0.4784 0.0000\nvt 0.7506 0.4763 0.0000\nvt 0.7488 0.4742 0.0000\nvt 0.7470 0.4721 0.0000\nvt 0.7452 0.4701 0.0000\nvt 0.7433 0.4682 0.0000\nvt 0.7414 0.4664 0.0000\nvt 0.7395 0.4646 0.0000\nvt 0.7376 0.4629 0.0000\nvt 0.7356 0.4613 0.0000\nvt 0.7337 0.4597 0.0000\nvt 0.7317 0.4582 0.0000\nvt 0.7297 0.4568 0.0000\nvt 0.7276 0.4555 0.0000\nvt 0.7256 0.4542 0.0000\nvt 0.7235 0.4530 0.0000\nvt 0.7214 0.4519 0.0000\nvt 0.2477 0.9679 0.0000\nvt 0.4612 0.9220 0.0000\nvt 0.4616 0.9219 0.0000\nvt 0.2479 0.9679 0.0000\nvt 0.2473 0.9676 0.0000\nvt 0.4609 0.9216 0.0000\nvt 0.4612 0.9215 0.0000\nvt 0.2475 0.9677 0.0000\nvt 0.2470 0.9673 0.0000\nvt 0.4605 0.9212 0.0000\nvt 0.4609 0.9211 0.0000\nvt 0.2471 0.9675 0.0000\nvt 0.2467 0.9669 0.0000\nvt 0.4602 0.9208 0.0000\nvt 0.4606 0.9207 0.0000\nvt 0.2467 0.9670 0.0000\nvt 0.2468 0.9671 0.0000\nvt 0.2465 0.9667 0.0000\nvt 0.4600 0.9202 0.0000\nvt 0.4603 0.9202 0.0000\nvt 0.2463 0.9661 0.0000\nvt 0.2463 0.9662 0.0000\nvt 0.2459 0.9656 0.0000\nvt 0.2463 0.9664 0.0000\nvt 0.2459 0.9660 0.0000\nvt 0.2469 0.9673 0.0000\nvt 0.2464 0.9671 0.0000\nvt 0.2470 0.9675 0.0000\nvt 0.2472 0.9677 0.0000\nvt 0.2474 0.9679 0.0000\nvt 0.2458 0.9654 0.0000\nvt 0.0006 0.2805 0.0000\nvt 0.0737 0.2353 0.0000\nvt 0.2456 0.9656 0.0000\nvt 0.0003 0.2803 0.0000\nvt 0.0737 0.2350 0.0000\nvt 0.2455 0.9658 0.0000\nvt 0.0002 0.2802 0.0000\nvt 0.0737 0.2349 0.0000\nvt 0.2455 0.9660 0.0000\nvt 0.0000 0.2801 0.0000\nvt 0.0738 0.2346 0.0000\nvt 0.0000 0.2800 0.0000\nvt 0.0740 0.2343 0.0000\nvt 0.0739 0.2344 0.0000\nvt 0.2455 0.9662 0.0000\nvt 0.0742 0.2340 0.0000\nvt 0.2457 0.9663 0.0000\nvt 0.0001 0.2800 0.0000\nvt 0.0744 0.2339 0.0000\nvt 0.2456 0.9663 0.0000\nvt 0.2458 0.9664 0.0000\nvt 0.0745 0.2339 0.0000\nvt 0.2459 0.9664 0.0000\nvt 0.0003 0.2800 0.0000\nvt 0.0747 0.2338 0.0000\nvt 0.2460 0.9664 0.0000\nvt 0.0004 0.2800 0.0000\nvt 0.0750 0.2338 0.0000\nvt 0.0748 0.2338 0.0000\nvt 0.2461 0.9665 0.0000\nvt 0.0752 0.2338 0.0000\nvt 0.2460 0.9667 0.0000\nvt 0.2458 0.9665 0.0000\nvt 0.2457 0.9666 0.0000\nvt 0.2459 0.9669 0.0000\nvt 0.2456 0.9660 0.0000\nvt 0.0738 0.2353 0.0000\nvt 0.0739 0.2346 0.0000\nvt 0.0740 0.2349 0.0000\nvt 0.0742 0.2341 0.0000\nvt 0.0742 0.2343 0.0000\nvt 0.0746 0.2339 0.0000\nvt 0.0750 0.2337 0.0000\nvt 0.0751 0.2337 0.0000\nvt 0.0755 0.2336 0.0000\nvt 0.0742 0.2352 0.0000\nvt 0.1593 0.4572 0.0000\nvt 0.0746 0.2350 0.0000\nvt 0.1596 0.4567 0.0000\nvt 0.3477 0.3667 0.0000\nvt 0.0750 0.2348 0.0000\nvt 0.1599 0.4563 0.0000\nvt 0.3475 0.3664 0.0000\nvt 0.1602 0.4560 0.0000\nvt 0.3474 0.3662 0.0000\nvt 0.0756 0.2346 0.0000\nvt 0.1605 0.4557 0.0000\nvt 0.3474 0.3660 0.0000\nvt 0.0754 0.2346 0.0000\nvt 0.0760 0.2345 0.0000\nvt 0.1609 0.4555 0.0000\nvt 0.3475 0.3658 0.0000\nvt 0.0758 0.2345 0.0000\nvt 0.0764 0.2344 0.0000\nvt 0.1612 0.4554 0.0000\nvt 0.3477 0.3657 0.0000\nvt 0.0762 0.2345 0.0000\nvt 0.3476 0.3658 0.0000\nvt 0.0766 0.2344 0.0000\nvt 0.1615 0.4553 0.0000\nvt 0.3479 0.3657 0.0000\nvt 0.0770 0.2345 0.0000\nvt 0.0768 0.2344 0.0000\nvt 0.0766 0.2341 0.0000\nvt 0.0763 0.2341 0.0000\nvt 0.0759 0.2342 0.0000\nvt 0.0756 0.2343 0.0000\nvt 0.0753 0.2345 0.0000\nvt 0.0747 0.2346 0.0000\nvt 0.0750 0.2343 0.0000\nvt 0.0744 0.2349 0.0000\nvt 0.3466 0.0661 0.0000\nvt 0.3465 0.0659 0.0000\nvt 0.3464 0.0657 0.0000\nvt 0.3464 0.0656 0.0000\nvt 0.3464 0.0655 0.0000\nvt 0.3465 0.0655 0.0000\nvt 0.3467 0.0655 0.0000\nvt 0.3469 0.0655 0.0000\nvt 0.4509 0.0015 0.0000\nvt 0.4509 0.0017 0.0000\nvt 0.4510 0.0011 0.0000\nvt 0.4512 0.0008 0.0000\nvt 0.4514 0.0005 0.0000\nvt 0.4512 0.0007 0.0000\nvt 0.4517 0.0004 0.0000\nvt 0.4515 0.0005 0.0000\nvt 0.4518 0.0003 0.0000\nvt 0.4521 0.0003 0.0000\nvt 0.4520 0.0003 0.0000\nvt 0.4523 0.0003 0.0000\nvt 0.4512 0.0012 0.0000\nvt 0.4514 0.0014 0.0000\nvt 0.4514 0.0008 0.0000\nvt 0.4520 0.0002 0.0000\nvt 0.4523 0.0001 0.0000\nvt 0.4526 0.0001 0.0000\nvt 0.4529 0.0002 0.0000\nvt 0.4532 0.0003 0.0000\nvt 0.4535 0.0001 0.0000\nvt 0.4539 0.0001 0.0000\nvt 0.4542 0.0002 0.0000\nvt 0.4545 0.0003 0.0000\nvt 0.4547 0.0006 0.0000\nvt 0.4549 0.0009 0.0000\nvt 0.4550 0.0013 0.0000\nvt 0.4532 0.0000 0.0000\nvt 0.4535 0.0000 0.0000\nvt 0.4538 0.0001 0.0000\nvt 0.4540 0.0002 0.0000\nvt 0.4543 0.0005 0.0000\nvt 0.4545 0.0008 0.0000\nvt 0.4546 0.0012 0.0000\nvt 0.4517 0.0016 0.0000\nvt 0.4522 0.0014 0.0000\nvt 0.4519 0.0011 0.0000\nvt 0.4516 0.0009 0.0000\nvt 0.4528 0.0013 0.0000\nvt 0.4525 0.0010 0.0000\nvt 0.4523 0.0008 0.0000\nvt 0.4520 0.0006 0.0000\nvt 0.4518 0.0005 0.0000\nvt 0.4533 0.0012 0.0000\nvt 0.4531 0.0009 0.0000\nvt 0.4528 0.0006 0.0000\nvt 0.4521 0.0002 0.0000\nvt 0.4538 0.0011 0.0000\nvt 0.4535 0.0007 0.0000\nvt 0.4533 0.0004 0.0000\nvt 0.4530 0.0002 0.0000\nvt 0.4528 0.0001 0.0000\nvt 0.4525 0.0001 0.0000\nvt 0.4542 0.0012 0.0000\nvt 0.4541 0.0008 0.0000\nvt 0.4538 0.0005 0.0000\nvt 0.4536 0.0002 0.0000\nvt 0.4533 0.0001 0.0000\nvt 0.4531 0.0000 0.0000\nvt 0.4528 0.0000 0.0000\nvt 0.0764 0.2339 0.0000\nvt 0.0760 0.2339 0.0000\nvt 0.0757 0.2340 0.0000\nvt 0.0753 0.2341 0.0000\nvt 0.0762 0.2337 0.0000\nvt 0.0757 0.2337 0.0000\nvt 0.0750 0.2340 0.0000\nvt 0.0746 0.2342 0.0000\nvt 0.0743 0.2345 0.0000\nvt 0.0760 0.2336 0.0000\nvt 0.0756 0.2336 0.0000\nvt 0.0752 0.2337 0.0000\nvt 0.0749 0.2338 0.0000\nvt 0.0745 0.2341 0.0000\nvt 0.0753 0.2336 0.0000\nvt 0.0757 0.2336 0.0000\nvt 0.2462 0.9671 0.0000\nvt 0.2464 0.9674 0.0000\nvt 0.2462 0.9672 0.0000\nvt 0.2460 0.9670 0.0000\nvt 0.2458 0.9667 0.0000\nvt 0.2467 0.9676 0.0000\nvt 0.2460 0.9668 0.0000\nvt 0.2468 0.9676 0.0000\nvt 0.2466 0.9674 0.0000\nvt 0.4626 0.9214 0.0000\nvt 0.4623 0.9216 0.0000\nvt 0.4619 0.9217 0.0000\nvt 0.4633 0.9204 0.0000\nvt 0.4629 0.9207 0.0000\nvt 0.4624 0.9210 0.0000\nvt 0.4620 0.9212 0.0000\nvt 0.4616 0.9214 0.0000\nvt 0.4629 0.9201 0.0000\nvt 0.4625 0.9203 0.0000\nvt 0.4621 0.9206 0.0000\nvt 0.4617 0.9208 0.0000\nvt 0.4613 0.9210 0.0000\nvt 0.4619 0.9201 0.0000\nvt 0.4615 0.9203 0.0000\nvt 0.4610 0.9205 0.0000\nvt 0.4607 0.9200 0.0000\n# 4909 texture coords\n\ng Mesh\nusemtl lambert3SG\ns off\nf 1/1/1 2/2/1 3/3/1 \nf 4/4/2 3/3/2 2/2/2 \nf 5/5/1 1/1/1 3/3/1 \nf 6/6/1 5/5/1 3/3/1 \nf 7/7/1 6/6/1 3/3/1 \nf 8/8/1 7/7/1 3/3/1 \nf 9/9/1 8/8/1 3/3/1 \nf 10/10/3 9/9/3 3/3/3 \nf 4/4/2 10/10/2 3/3/2 \nf 11/11/2 2/2/2 1/1/4 \nf 4/4/2 2/2/2 12/12/2 \nf 11/11/2 12/12/2 2/2/2 \nf 13/13/5 1/1/4 5/5/6 \nf 13/13/5 11/11/2 1/1/4 \nf 13/13/5 5/5/6 6/6/7 \nf 14/14/8 6/6/7 7/7/9 \nf 13/13/5 6/6/7 14/14/8 \nf 15/15/10 7/7/9 8/8/11 \nf 15/15/10 14/14/8 7/7/9 \nf 9/9/1 16/16/1 8/8/1 \nf 17/17/12 8/8/11 16/16/13 \nf 17/17/12 15/15/10 8/8/11 \nf 9/9/1 18/18/1 16/16/1 \nf 19/19/14 16/16/13 18/18/15 \nf 19/19/14 17/17/12 16/16/13 \nf 9/9/1 20/20/1 18/18/1 \nf 21/19/16 18/18/15 20/20/17 \nf 22/19/18 19/19/14 18/18/15 \nf 21/19/16 22/19/18 18/18/15 \nf 9/9/1 23/21/1 20/20/1 \nf 24/22/19 20/20/17 23/21/20 \nf 24/22/19 21/19/16 20/20/17 \nf 9/9/1 25/23/1 23/21/1 \nf 26/24/21 23/21/20 25/23/22 \nf 26/24/21 24/22/19 23/21/20 \nf 9/9/1 27/25/1 25/23/1 \nf 26/24/21 25/23/22 27/25/23 \nf 9/9/1 28/26/1 27/25/1 \nf 29/27/23 27/25/23 28/26/23 \nf 30/28/23 27/25/23 29/27/23 \nf 26/24/21 27/25/23 30/28/23 \nf 31/29/24 28/26/1 9/9/1 \nf 32/30/25 28/26/1 31/29/24 \nf 32/30/23 29/27/23 28/26/23 \nf 33/31/3 31/29/3 9/9/3 \nf 10/10/3 33/31/3 9/9/3 \nf 34/32/1 35/33/1 36/34/1 \nf 37/35/26 36/34/26 35/33/26 \nf 38/36/1 34/32/1 36/34/1 \nf 39/37/1 38/36/1 36/34/1 \nf 40/38/1 39/37/1 36/34/1 \nf 41/39/1 40/38/1 36/34/1 \nf 42/40/1 41/39/1 36/34/1 \nf 43/41/1 42/40/1 36/34/1 \nf 44/42/27 43/41/27 36/34/27 \nf 45/43/26 36/34/26 46/44/26 \nf 47/44/26 46/44/26 36/34/26 \nf 44/42/27 36/34/27 45/43/27 \nf 47/44/26 36/34/26 37/35/26 \nf 48/45/26 35/33/26 34/32/28 \nf 48/45/26 37/35/26 35/33/26 \nf 49/46/29 34/32/28 38/36/30 \nf 49/46/29 48/45/26 34/32/28 \nf 50/47/31 38/36/30 39/37/32 \nf 50/47/31 49/46/29 38/36/30 \nf 51/48/33 39/37/32 40/38/34 \nf 51/48/33 50/47/31 39/37/32 \nf 52/49/35 40/38/34 41/39/36 \nf 52/49/35 51/48/33 40/38/34 \nf 53/50/37 41/39/36 42/40/38 \nf 53/50/37 52/49/35 41/39/36 \nf 43/41/1 54/51/1 42/40/1 \nf 55/52/39 42/40/38 54/51/40 \nf 53/50/37 42/40/38 55/52/39 \nf 43/41/1 56/53/1 54/51/1 \nf 57/54/41 54/51/40 56/53/42 \nf 57/54/41 55/52/39 54/51/40 \nf 43/41/1 58/55/1 56/53/1 \nf 59/56/43 56/53/42 58/55/44 \nf 57/54/41 56/53/42 59/56/43 \nf 43/41/1 60/57/1 58/55/1 \nf 59/56/43 58/55/44 60/57/45 \nf 43/41/1 61/58/1 60/57/1 \nf 62/59/46 60/57/45 61/58/47 \nf 59/56/43 60/57/45 62/59/46 \nf 43/41/1 63/60/1 61/58/1 \nf 62/59/46 61/58/47 63/60/3 \nf 43/41/1 64/61/1 63/60/1 \nf 65/62/3 63/60/3 64/61/3 \nf 62/59/46 63/60/3 65/62/3 \nf 44/42/48 64/61/48 43/41/48 \nf 66/63/3 65/62/3 64/61/3 \nf 67/64/48 66/63/48 64/61/48 \nf 68/65/48 64/61/48 44/42/48 \nf 69/66/48 64/61/48 68/65/48 \nf 70/67/48 64/61/48 69/66/48 \nf 70/67/48 67/64/48 64/61/48 \nf 71/68/1 65/62/1 66/63/1 \nf 62/59/1 65/62/1 71/68/1 \nf 71/68/1 66/63/1 67/64/1 \nf 33/31/3 72/69/3 31/29/3 \nf 73/70/49 31/29/24 72/69/50 \nf 32/30/25 31/29/24 73/70/49 \nf 74/71/3 75/72/3 72/69/3 \nf 76/73/51 72/69/3 75/72/3 \nf 33/31/3 74/71/3 72/69/3 \nf 77/74/52 73/70/49 72/69/50 \nf 78/75/53 77/74/52 72/69/50 \nf 76/73/51 78/75/51 72/69/3 \nf 79/76/54 75/72/50 74/71/24 \nf 80/77/55 76/73/53 75/72/50 \nf 81/78/56 80/77/55 75/72/50 \nf 79/76/54 81/78/56 75/72/50 \nf 79/76/54 74/71/24 33/31/1 \nf 82/79/1 33/31/1 10/10/1 \nf 83/80/1 33/31/1 82/79/1 \nf 79/76/54 33/31/1 83/80/1 \nf 84/81/2 10/10/2 4/4/2 \nf 85/82/2 82/79/2 10/10/2 \nf 84/81/2 85/82/2 10/10/2 \nf 86/83/57 87/84/57 88/85/57 \nf 89/86/58 88/85/57 87/84/57 \nf 90/87/57 88/85/57 91/88/57 \nf 92/89/59 91/88/57 88/85/57 \nf 93/90/57 94/91/57 88/85/57 \nf 86/83/57 88/85/57 94/91/57 \nf 95/92/57 93/90/57 88/85/57 \nf 96/93/57 95/92/57 88/85/57 \nf 97/94/57 96/93/57 88/85/57 \nf 98/95/57 97/94/57 88/85/57 \nf 99/96/57 98/95/57 88/85/57 \nf 100/97/57 99/96/57 88/85/57 \nf 101/98/57 100/97/57 88/85/57 \nf 102/99/57 101/98/57 88/85/57 \nf 103/100/57 102/99/57 88/85/57 \nf 104/101/57 103/100/57 88/85/57 \nf 105/102/57 104/101/57 88/85/57 \nf 106/103/57 105/102/57 88/85/57 \nf 107/104/57 106/103/57 88/85/57 \nf 108/105/57 107/104/57 88/85/57 \nf 109/106/57 108/105/57 88/85/57 \nf 110/107/57 109/106/57 88/85/57 \nf 111/108/57 110/107/57 88/85/57 \nf 112/109/57 111/108/57 88/85/57 \nf 113/110/57 112/109/57 88/85/57 \nf 114/111/57 113/110/57 88/85/57 \nf 115/112/57 114/111/57 88/85/57 \nf 116/113/57 115/112/57 88/85/57 \nf 117/114/57 116/113/57 88/85/57 \nf 118/115/57 117/114/57 88/85/57 \nf 119/116/57 118/115/57 88/85/57 \nf 120/117/57 119/116/57 88/85/57 \nf 121/118/57 120/117/57 88/85/57 \nf 122/119/57 121/118/57 88/85/57 \nf 123/120/57 122/119/57 88/85/57 \nf 124/121/57 123/120/57 88/85/57 \nf 125/122/57 124/121/57 88/85/57 \nf 126/123/57 125/122/57 88/85/57 \nf 127/124/57 126/123/57 88/85/57 \nf 128/125/57 127/124/57 88/85/57 \nf 129/126/57 128/125/57 88/85/57 \nf 130/127/57 129/126/57 88/85/57 \nf 131/128/57 130/127/57 88/85/57 \nf 132/129/57 131/128/57 88/85/57 \nf 133/130/57 132/129/57 88/85/57 \nf 134/131/57 133/130/57 88/85/57 \nf 135/132/57 134/131/57 88/85/57 \nf 136/133/57 135/132/57 88/85/57 \nf 137/134/57 136/133/57 88/85/57 \nf 138/135/57 137/134/57 88/85/57 \nf 139/136/57 138/135/57 88/85/57 \nf 140/137/57 139/136/57 88/85/57 \nf 141/138/57 140/137/57 88/85/57 \nf 142/139/57 141/138/57 88/85/57 \nf 143/140/57 142/139/57 88/85/57 \nf 144/141/57 143/140/57 88/85/57 \nf 145/142/57 144/141/57 88/85/57 \nf 146/143/57 145/142/57 88/85/57 \nf 147/144/57 146/143/57 88/85/57 \nf 148/145/57 147/144/57 88/85/57 \nf 149/146/57 148/145/57 88/85/57 \nf 150/147/57 149/146/57 88/85/57 \nf 151/148/57 150/147/57 88/85/57 \nf 152/149/57 151/148/57 88/85/57 \nf 90/87/57 152/149/57 88/85/57 \nf 89/86/58 92/89/60 88/85/57 \nf 86/83/57 153/150/57 87/84/57 \nf 89/86/58 87/84/57 153/150/57 \nf 86/83/57 154/151/57 153/150/57 \nf 155/152/61 153/150/57 154/151/62 \nf 156/153/63 89/86/58 153/150/57 \nf 156/153/63 153/150/57 155/152/61 \nf 86/83/57 157/154/57 154/151/57 \nf 158/155/64 154/151/62 157/154/62 \nf 155/152/61 154/151/62 158/155/64 \nf 86/83/57 159/156/57 157/154/57 \nf 160/157/65 157/154/62 159/156/62 \nf 158/155/64 157/154/62 160/157/65 \nf 86/83/57 161/158/57 159/156/57 \nf 162/159/66 159/156/62 161/158/62 \nf 160/157/65 159/156/62 162/159/66 \nf 86/83/57 163/160/57 161/158/57 \nf 164/161/67 161/158/62 163/160/62 \nf 162/159/66 161/158/62 164/161/67 \nf 86/83/57 165/162/57 163/160/57 \nf 166/163/68 163/160/62 165/162/62 \nf 164/161/67 163/160/62 166/163/68 \nf 86/83/57 167/164/57 165/162/57 \nf 168/165/69 165/162/62 167/164/62 \nf 166/163/68 165/162/62 168/165/69 \nf 86/83/57 169/166/57 167/164/57 \nf 170/167/70 167/164/62 169/166/57 \nf 168/165/69 167/164/62 170/167/70 \nf 86/83/57 171/168/57 169/166/57 \nf 170/167/70 169/166/57 171/168/71 \nf 86/83/57 172/169/57 171/168/57 \nf 173/170/72 171/168/71 172/169/57 \nf 174/171/73 170/167/70 171/168/71 \nf 173/170/72 174/171/73 171/168/71 \nf 86/83/57 175/172/57 172/169/57 \nf 176/173/74 172/169/57 175/172/57 \nf 176/173/74 173/170/72 172/169/57 \nf 86/83/57 177/174/57 175/172/57 \nf 178/175/75 175/172/57 177/174/57 \nf 178/175/75 176/173/74 175/172/57 \nf 86/83/57 179/176/57 177/174/57 \nf 180/177/76 177/174/57 179/176/57 \nf 180/177/76 178/175/75 177/174/57 \nf 86/83/57 181/178/57 179/176/57 \nf 180/177/76 179/176/57 181/178/57 \nf 182/179/57 183/180/57 181/178/57 \nf 184/181/77 181/178/57 183/180/57 \nf 86/83/57 182/179/57 181/178/57 \nf 185/182/78 181/178/57 184/181/77 \nf 180/177/76 181/178/57 185/182/78 \nf 186/183/57 187/184/57 183/180/57 \nf 184/181/77 183/180/57 187/184/57 \nf 188/185/57 186/183/57 183/180/57 \nf 182/179/57 188/185/57 183/180/57 \nf 186/183/57 189/186/57 187/184/57 \nf 190/187/79 187/184/57 189/186/57 \nf 191/188/80 184/181/77 187/184/57 \nf 190/187/79 191/188/80 187/184/57 \nf 186/183/57 192/189/57 189/186/57 \nf 193/190/81 189/186/57 192/189/57 \nf 193/190/81 190/187/79 189/186/57 \nf 186/183/57 194/191/57 192/189/57 \nf 195/192/82 192/189/57 194/191/57 \nf 195/192/82 193/190/81 192/189/57 \nf 186/183/57 196/193/57 194/191/57 \nf 197/194/83 194/191/57 196/193/57 \nf 197/194/83 195/192/82 194/191/57 \nf 186/183/57 198/195/57 196/193/57 \nf 199/196/84 196/193/57 198/195/57 \nf 199/196/84 197/194/83 196/193/57 \nf 200/197/57 201/198/57 198/195/57 \nf 202/199/85 198/195/57 201/198/57 \nf 186/183/57 200/197/57 198/195/57 \nf 202/199/85 199/196/84 198/195/57 \nf 200/197/57 203/200/57 201/198/57 \nf 204/201/86 201/198/57 203/200/57 \nf 204/201/86 202/199/85 201/198/57 \nf 200/197/57 205/202/57 203/200/57 \nf 206/203/87 203/200/57 205/202/57 \nf 206/203/87 204/201/86 203/200/57 \nf 200/197/57 207/204/57 205/202/57 \nf 208/205/88 205/202/57 207/204/57 \nf 208/205/88 206/203/87 205/202/57 \nf 200/197/57 209/206/57 207/204/57 \nf 210/207/89 207/204/57 209/206/57 \nf 210/207/89 208/205/88 207/204/57 \nf 211/208/57 212/209/57 209/206/57 \nf 213/210/90 209/206/57 212/209/57 \nf 200/197/57 211/208/57 209/206/57 \nf 213/210/90 210/207/89 209/206/57 \nf 211/208/57 214/211/57 212/209/57 \nf 215/212/91 212/209/57 214/211/57 \nf 215/212/91 213/210/90 212/209/57 \nf 211/208/57 216/213/57 214/211/57 \nf 217/214/92 214/211/57 216/213/57 \nf 217/214/92 215/212/91 214/211/57 \nf 211/208/57 218/215/57 216/213/57 \nf 219/216/93 216/213/57 218/215/57 \nf 219/216/93 217/214/92 216/213/57 \nf 220/217/57 221/218/57 218/215/57 \nf 222/219/94 218/215/57 221/218/57 \nf 211/208/57 220/217/57 218/215/57 \nf 223/220/95 218/215/57 222/219/94 \nf 223/220/95 219/216/93 218/215/57 \nf 220/217/57 224/221/57 221/218/57 \nf 222/219/94 221/218/57 224/221/57 \nf 225/222/57 226/223/57 224/221/57 \nf 227/224/96 224/221/57 226/223/57 \nf 220/217/57 225/222/57 224/221/57 \nf 227/224/96 222/219/94 224/221/57 \nf 228/225/57 229/226/57 226/223/57 \nf 230/227/97 226/223/57 229/226/57 \nf 225/222/57 228/225/57 226/223/57 \nf 230/227/97 227/224/96 226/223/57 \nf 228/225/57 231/228/57 229/226/57 \nf 232/229/98 229/226/57 231/228/57 \nf 232/229/98 230/227/97 229/226/57 \nf 233/230/57 234/231/57 231/228/57 \nf 235/232/99 231/228/57 234/231/57 \nf 228/225/57 233/230/57 231/228/57 \nf 235/232/99 232/229/98 231/228/57 \nf 236/233/57 237/234/57 234/231/57 \nf 238/235/100 234/231/57 237/234/57 \nf 233/230/57 236/233/57 234/231/57 \nf 238/235/100 235/232/99 234/231/57 \nf 239/236/57 240/237/57 237/234/57 \nf 238/235/100 237/234/57 240/237/57 \nf 236/233/57 239/236/57 237/234/57 \nf 239/236/57 241/238/57 240/237/57 \nf 242/239/101 240/237/57 241/238/57 \nf 242/239/101 238/235/100 240/237/57 \nf 239/236/57 243/240/57 241/238/57 \nf 242/239/101 241/238/57 243/240/57 \nf 239/236/57 244/241/57 243/240/57 \nf 245/242/102 243/240/57 244/241/57 \nf 245/242/102 242/239/101 243/240/57 \nf 90/87/57 246/243/57 244/241/57 \nf 245/242/102 244/241/57 246/243/57 \nf 239/236/57 90/87/57 244/241/57 \nf 90/87/57 247/244/57 246/243/57 \nf 248/245/103 246/243/57 247/244/57 \nf 248/245/103 245/242/102 246/243/57 \nf 90/87/57 249/246/57 247/244/57 \nf 248/245/103 247/244/57 249/246/57 \nf 90/87/57 250/247/57 249/246/57 \nf 251/248/104 249/246/57 250/247/57 \nf 251/248/104 248/245/103 249/246/57 \nf 90/87/57 252/249/57 250/247/57 \nf 253/250/105 250/247/57 252/249/57 \nf 253/250/105 251/248/104 250/247/57 \nf 90/87/57 254/251/57 252/249/57 \nf 253/250/105 252/249/57 254/251/57 \nf 90/87/57 255/252/57 254/251/57 \nf 256/253/106 254/251/57 255/252/57 \nf 256/253/106 253/250/105 254/251/57 \nf 90/87/57 257/254/57 255/252/57 \nf 256/253/106 255/252/57 257/254/57 \nf 90/87/57 258/255/57 257/254/57 \nf 259/256/107 257/254/57 258/255/57 \nf 259/256/107 256/253/106 257/254/57 \nf 90/87/57 260/257/57 258/255/57 \nf 259/256/107 258/255/57 260/257/57 \nf 90/87/57 261/258/57 260/257/57 \nf 262/259/108 260/257/57 261/258/57 \nf 262/259/108 259/256/107 260/257/57 \nf 90/87/57 263/260/57 261/258/57 \nf 262/259/108 261/258/57 263/260/57 \nf 90/87/57 264/261/57 263/260/57 \nf 265/262/109 263/260/57 264/261/57 \nf 265/262/109 262/259/108 263/260/57 \nf 90/87/57 266/263/57 264/261/57 \nf 265/262/109 264/261/57 266/263/57 \nf 90/87/57 267/264/57 266/263/57 \nf 268/265/110 266/263/57 267/264/57 \nf 268/265/110 265/262/109 266/263/57 \nf 90/87/57 269/266/57 267/264/57 \nf 268/265/110 267/264/57 269/266/57 \nf 90/87/57 270/267/57 269/266/57 \nf 271/268/111 269/266/57 270/267/57 \nf 271/268/111 268/265/110 269/266/57 \nf 90/87/57 272/269/57 270/267/57 \nf 271/268/111 270/267/57 272/269/57 \nf 90/87/57 273/270/57 272/269/57 \nf 274/271/112 272/269/57 273/270/57 \nf 274/271/112 271/268/111 272/269/57 \nf 90/87/57 275/272/57 273/270/57 \nf 274/271/112 273/270/57 275/272/57 \nf 90/87/57 276/273/57 275/272/57 \nf 277/274/113 275/272/57 276/273/57 \nf 277/274/113 274/271/112 275/272/57 \nf 90/87/57 278/275/57 276/273/57 \nf 277/274/113 276/273/57 278/275/57 \nf 90/87/57 279/276/57 278/275/57 \nf 280/277/114 278/275/57 279/276/57 \nf 281/278/115 278/275/57 280/277/114 \nf 282/279/115 278/275/57 281/278/115 \nf 277/274/113 278/275/57 282/279/115 \nf 90/87/57 283/280/57 279/276/57 \nf 280/277/114 279/276/57 283/280/57 \nf 90/87/57 284/281/57 283/280/57 \nf 285/282/116 283/280/57 284/281/57 \nf 286/283/117 280/277/114 283/280/57 \nf 285/282/116 286/283/117 283/280/57 \nf 90/87/57 287/284/57 284/281/57 \nf 288/285/118 284/281/57 287/284/57 \nf 288/285/118 285/282/116 284/281/57 \nf 90/87/57 289/286/57 287/284/57 \nf 290/287/119 287/284/57 289/286/57 \nf 290/287/119 288/285/118 287/284/57 \nf 90/87/57 291/288/57 289/286/57 \nf 290/287/119 289/286/57 291/288/57 \nf 90/87/57 292/289/57 291/288/57 \nf 293/290/120 291/288/57 292/289/57 \nf 293/290/120 290/287/119 291/288/57 \nf 90/87/57 294/291/57 292/289/57 \nf 295/292/121 292/289/57 294/291/57 \nf 295/292/121 293/290/120 292/289/57 \nf 90/87/57 296/293/57 294/291/57 \nf 297/294/122 294/291/57 296/293/57 \nf 297/294/122 295/292/121 294/291/57 \nf 90/87/57 298/295/57 296/293/57 \nf 299/296/123 296/293/57 298/295/57 \nf 299/296/123 297/294/122 296/293/57 \nf 90/87/57 300/297/57 298/295/57 \nf 301/298/124 298/295/57 300/297/57 \nf 301/298/124 299/296/123 298/295/57 \nf 90/87/57 302/299/57 300/297/57 \nf 303/300/125 300/297/57 302/299/57 \nf 303/300/125 301/298/124 300/297/57 \nf 90/87/57 304/301/57 302/299/57 \nf 305/302/126 302/299/57 304/301/57 \nf 305/302/126 303/300/125 302/299/57 \nf 90/87/57 306/303/57 304/301/57 \nf 307/304/127 304/301/57 306/303/57 \nf 307/304/127 305/302/126 304/301/57 \nf 90/87/57 308/305/57 306/303/57 \nf 309/306/128 306/303/57 308/305/57 \nf 309/306/128 307/304/127 306/303/57 \nf 90/87/57 310/307/57 308/305/57 \nf 311/308/129 308/305/57 310/307/57 \nf 311/308/129 309/306/128 308/305/57 \nf 90/87/57 312/309/57 310/307/57 \nf 313/310/130 310/307/57 312/309/57 \nf 313/310/130 311/308/129 310/307/57 \nf 90/87/57 314/311/57 312/309/57 \nf 315/312/131 312/309/57 314/311/57 \nf 315/312/131 313/310/130 312/309/57 \nf 90/87/57 316/313/57 314/311/57 \nf 317/314/132 314/311/57 316/313/57 \nf 317/314/132 315/312/131 314/311/57 \nf 90/87/57 318/315/57 316/313/57 \nf 319/316/133 316/313/57 318/315/57 \nf 319/316/133 317/314/132 316/313/57 \nf 90/87/57 320/317/57 318/315/57 \nf 321/318/134 318/315/57 320/317/57 \nf 321/318/134 319/316/133 318/315/57 \nf 90/87/57 322/319/57 320/317/57 \nf 323/320/135 320/317/57 322/319/57 \nf 323/320/135 321/318/134 320/317/57 \nf 90/87/57 324/321/57 322/319/57 \nf 325/322/136 322/319/57 324/321/57 \nf 325/322/136 323/320/135 322/319/57 \nf 90/87/57 326/323/57 324/321/57 \nf 327/324/137 324/321/57 326/323/57 \nf 327/324/137 325/322/136 324/321/57 \nf 90/87/57 328/325/57 326/323/57 \nf 329/326/138 326/323/57 328/325/57 \nf 329/326/138 327/324/137 326/323/57 \nf 90/87/57 330/327/57 328/325/57 \nf 331/328/139 328/325/57 330/327/57 \nf 331/328/139 329/326/138 328/325/57 \nf 90/87/57 332/329/57 330/327/57 \nf 333/330/140 330/327/57 332/329/57 \nf 333/330/140 331/328/139 330/327/57 \nf 90/87/57 91/88/57 332/329/57 \nf 333/330/140 332/329/57 91/88/57 \nf 92/89/59 334/331/141 91/88/57 \nf 333/330/140 91/88/57 334/331/141 \nf 335/332/142 94/91/57 93/90/57 \nf 336/333/143 86/83/57 94/91/57 \nf 337/334/144 336/333/143 94/91/57 \nf 337/334/145 94/91/57 335/332/142 \nf 335/332/142 93/90/57 95/92/57 \nf 338/335/146 95/92/57 96/93/57 \nf 338/335/146 335/332/142 95/92/57 \nf 338/335/146 96/93/57 97/94/57 \nf 339/336/147 97/94/57 98/95/57 \nf 339/336/147 338/335/146 97/94/57 \nf 339/336/147 98/95/57 99/96/57 \nf 340/337/148 99/96/57 100/97/57 \nf 340/337/148 339/336/147 99/96/57 \nf 340/337/148 100/97/57 101/98/57 \nf 341/338/149 101/98/57 102/99/57 \nf 341/338/149 340/337/148 101/98/57 \nf 341/338/149 102/99/57 103/100/57 \nf 342/339/150 103/100/57 104/101/57 \nf 342/339/150 341/338/149 103/100/57 \nf 342/339/150 104/101/57 105/102/57 \nf 343/340/151 105/102/57 106/103/57 \nf 343/340/151 342/339/150 105/102/57 \nf 344/341/152 106/103/57 107/104/57 \nf 344/341/152 343/340/151 106/103/57 \nf 345/342/153 107/104/57 108/105/57 \nf 345/342/153 344/341/152 107/104/57 \nf 346/343/154 108/105/57 109/106/57 \nf 346/343/154 345/342/153 108/105/57 \nf 347/344/155 109/106/57 110/107/57 \nf 347/344/155 346/343/154 109/106/57 \nf 348/345/156 110/107/57 111/108/57 \nf 348/345/156 347/344/155 110/107/57 \nf 349/346/157 111/108/57 112/109/57 \nf 349/346/157 348/345/156 111/108/57 \nf 350/347/158 112/109/57 113/110/57 \nf 350/347/158 349/346/157 112/109/57 \nf 351/348/159 113/110/57 114/111/57 \nf 351/348/159 350/347/158 113/110/57 \nf 352/349/160 114/111/57 115/112/57 \nf 352/349/160 351/348/159 114/111/57 \nf 353/350/161 115/112/57 116/113/57 \nf 353/350/161 352/349/160 115/112/57 \nf 354/351/162 116/113/57 117/114/57 \nf 354/351/162 353/350/161 116/113/57 \nf 355/352/163 117/114/57 118/115/57 \nf 355/352/163 354/351/162 117/114/57 \nf 356/353/164 118/115/57 119/116/57 \nf 356/353/164 355/352/163 118/115/57 \nf 357/354/165 119/116/57 120/117/57 \nf 357/354/165 356/353/164 119/116/57 \nf 358/355/166 120/117/57 121/118/57 \nf 358/355/166 357/354/165 120/117/57 \nf 359/356/167 121/118/57 122/119/57 \nf 359/356/167 358/355/166 121/118/57 \nf 360/357/168 122/119/57 123/120/57 \nf 360/357/168 359/356/167 122/119/57 \nf 361/358/169 123/120/57 124/121/57 \nf 361/358/169 360/357/168 123/120/57 \nf 362/359/170 124/121/57 125/122/57 \nf 362/359/170 361/358/169 124/121/57 \nf 363/360/171 125/122/57 126/123/57 \nf 363/360/171 362/359/170 125/122/57 \nf 364/361/172 126/123/57 127/124/57 \nf 364/361/172 363/360/171 126/123/57 \nf 365/362/173 127/124/57 128/125/57 \nf 365/362/173 364/361/172 127/124/57 \nf 366/363/174 128/125/57 129/126/57 \nf 366/363/174 365/362/173 128/125/57 \nf 367/364/175 129/126/57 130/127/57 \nf 367/364/175 366/363/174 129/126/57 \nf 368/365/176 130/127/57 131/128/57 \nf 368/365/176 367/364/175 130/127/57 \nf 369/366/177 131/128/57 132/129/57 \nf 369/366/177 368/365/176 131/128/57 \nf 370/367/178 132/129/57 133/130/57 \nf 370/367/178 369/366/177 132/129/57 \nf 371/368/179 133/130/57 134/131/57 \nf 371/368/179 370/367/178 133/130/57 \nf 372/369/180 134/131/57 135/132/57 \nf 372/369/180 371/368/179 134/131/57 \nf 373/370/181 135/132/57 136/133/57 \nf 373/370/181 372/369/180 135/132/57 \nf 374/371/182 136/133/57 137/134/57 \nf 374/371/182 373/370/181 136/133/57 \nf 375/372/183 137/134/57 138/135/57 \nf 375/372/183 374/371/182 137/134/57 \nf 376/373/184 138/135/57 139/136/57 \nf 376/373/184 375/372/183 138/135/57 \nf 377/374/185 139/136/57 140/137/57 \nf 377/374/185 376/373/184 139/136/57 \nf 378/375/186 140/137/57 141/138/57 \nf 378/375/186 377/374/185 140/137/57 \nf 379/376/187 141/138/57 142/139/57 \nf 379/376/187 378/375/186 141/138/57 \nf 380/377/188 142/139/57 143/140/57 \nf 380/377/188 379/376/187 142/139/57 \nf 381/378/189 143/140/57 144/141/57 \nf 381/378/189 380/377/188 143/140/57 \nf 382/379/190 144/141/57 145/142/57 \nf 382/379/190 381/378/189 144/141/57 \nf 383/380/191 145/142/57 146/143/57 \nf 383/380/191 382/379/190 145/142/57 \nf 384/381/192 146/143/57 147/144/57 \nf 384/381/192 383/380/191 146/143/57 \nf 385/382/193 147/144/57 148/145/57 \nf 385/382/193 384/381/192 147/144/57 \nf 386/383/194 148/145/57 149/146/57 \nf 386/383/194 385/382/193 148/145/57 \nf 387/384/195 149/146/57 150/147/57 \nf 387/384/195 386/383/194 149/146/57 \nf 388/385/196 150/147/57 151/148/57 \nf 388/385/196 387/384/195 150/147/57 \nf 389/386/197 151/148/57 152/149/57 \nf 389/386/197 388/385/196 151/148/57 \nf 389/386/197 152/149/57 90/87/57 \nf 390/387/198 90/87/57 239/236/57 \nf 391/388/198 389/386/197 90/87/57 \nf 390/387/198 391/388/198 90/87/57 \nf 390/387/198 239/236/57 236/233/57 \nf 392/389/199 236/233/57 233/230/57 \nf 393/390/200 394/391/201 395/392/202 \nf 392/389/199 390/387/198 236/233/57 \nf 392/389/199 233/230/57 228/225/57 \nf 396/393/203 228/225/57 225/222/57 \nf 396/393/203 392/389/199 228/225/57 \nf 396/393/203 225/222/57 220/217/57 \nf 397/394/204 220/217/57 211/208/57 \nf 397/394/204 396/393/203 220/217/57 \nf 398/395/205 211/208/57 200/197/57 \nf 398/395/205 397/394/204 211/208/57 \nf 399/396/206 200/197/57 186/183/57 \nf 399/396/206 398/395/205 200/197/57 \nf 400/397/207 186/183/57 188/185/57 \nf 400/397/207 399/396/206 186/183/57 \nf 182/179/57 401/398/57 188/185/57 \nf 402/399/208 188/185/57 401/398/57 \nf 402/399/208 400/397/207 188/185/57 \nf 182/179/57 403/400/57 401/398/57 \nf 404/401/209 401/398/57 403/400/57 \nf 404/401/209 402/399/208 401/398/57 \nf 182/179/57 405/402/57 403/400/57 \nf 406/403/210 403/400/57 405/402/57 \nf 406/403/210 404/401/209 403/400/57 \nf 182/179/57 407/404/57 405/402/57 \nf 408/405/211 405/402/57 407/404/57 \nf 408/405/211 406/403/210 405/402/57 \nf 182/179/57 409/406/57 407/404/57 \nf 410/407/212 407/404/57 409/406/57 \nf 410/407/212 408/405/211 407/404/57 \nf 182/179/57 411/408/57 409/406/57 \nf 412/409/213 409/406/57 411/408/57 \nf 412/409/213 410/407/212 409/406/57 \nf 182/179/57 413/410/57 411/408/57 \nf 414/411/214 411/408/57 413/410/57 \nf 414/411/214 412/409/213 411/408/57 \nf 182/179/57 415/412/57 413/410/57 \nf 416/413/215 413/410/57 415/412/57 \nf 416/413/215 414/411/214 413/410/57 \nf 182/179/57 417/414/57 415/412/57 \nf 418/415/216 415/412/57 417/414/57 \nf 418/415/216 416/413/215 415/412/57 \nf 182/179/57 419/416/57 417/414/57 \nf 420/417/217 417/414/57 419/416/57 \nf 420/417/217 418/415/216 417/414/57 \nf 182/179/57 421/418/57 419/416/57 \nf 422/419/218 419/416/57 421/418/57 \nf 422/419/218 420/417/217 419/416/57 \nf 182/179/57 423/420/57 421/418/57 \nf 424/421/219 421/418/57 423/420/57 \nf 424/421/219 422/419/218 421/418/57 \nf 182/179/57 425/422/57 423/420/57 \nf 426/423/220 423/420/57 425/422/57 \nf 426/423/220 424/421/219 423/420/57 \nf 182/179/57 427/424/57 425/422/57 \nf 428/425/221 425/422/57 427/424/57 \nf 428/425/221 426/423/220 425/422/57 \nf 182/179/57 429/426/57 427/424/57 \nf 430/427/222 427/424/57 429/426/57 \nf 430/427/222 428/425/221 427/424/57 \nf 182/179/57 431/428/57 429/426/57 \nf 432/429/223 429/426/57 431/428/57 \nf 432/429/223 430/427/222 429/426/57 \nf 182/179/57 433/430/57 431/428/57 \nf 434/431/224 431/428/57 433/430/57 \nf 434/431/224 432/429/223 431/428/57 \nf 182/179/57 435/432/57 433/430/57 \nf 436/433/225 433/430/57 435/432/57 \nf 436/433/225 434/431/224 433/430/57 \nf 182/179/57 437/434/57 435/432/57 \nf 438/435/226 435/432/57 437/434/57 \nf 438/435/226 436/433/225 435/432/57 \nf 182/179/57 439/436/57 437/434/57 \nf 440/437/227 437/434/57 439/436/57 \nf 440/437/227 438/435/226 437/434/57 \nf 182/179/57 441/438/57 439/436/57 \nf 442/439/228 439/436/57 441/438/57 \nf 442/439/228 440/437/227 439/436/57 \nf 182/179/57 443/440/57 441/438/57 \nf 444/441/229 441/438/57 443/440/57 \nf 444/441/229 442/439/228 441/438/57 \nf 182/179/57 445/442/57 443/440/57 \nf 446/443/230 443/440/57 445/442/57 \nf 446/443/230 444/441/229 443/440/57 \nf 182/179/57 447/444/57 445/442/57 \nf 448/445/231 445/442/57 447/444/57 \nf 448/445/231 446/443/230 445/442/57 \nf 182/179/57 449/446/57 447/444/57 \nf 450/447/232 447/444/57 449/446/57 \nf 450/447/232 448/445/231 447/444/57 \nf 182/179/57 451/448/57 449/446/57 \nf 452/449/233 449/446/57 451/448/57 \nf 452/449/233 450/447/232 449/446/57 \nf 182/179/57 453/450/57 451/448/57 \nf 454/451/234 451/448/57 453/450/57 \nf 454/451/234 452/449/233 451/448/57 \nf 182/179/57 455/452/57 453/450/57 \nf 456/453/235 453/450/57 455/452/57 \nf 456/453/235 454/451/234 453/450/57 \nf 182/179/57 457/454/57 455/452/57 \nf 458/455/236 455/452/57 457/454/57 \nf 458/455/236 456/453/235 455/452/57 \nf 182/179/57 459/456/57 457/454/57 \nf 460/457/237 457/454/57 459/456/57 \nf 460/457/237 458/455/236 457/454/57 \nf 182/179/57 461/458/57 459/456/57 \nf 462/459/238 459/456/57 461/458/57 \nf 462/459/238 460/457/237 459/456/57 \nf 182/179/57 463/460/57 461/458/57 \nf 464/461/239 461/458/57 463/460/57 \nf 464/461/239 462/459/238 461/458/57 \nf 182/179/57 465/462/57 463/460/57 \nf 466/463/240 463/460/57 465/462/57 \nf 466/463/240 464/461/239 463/460/57 \nf 182/179/57 467/464/57 465/462/57 \nf 468/465/241 465/462/57 467/464/57 \nf 468/465/241 466/463/240 465/462/57 \nf 182/179/57 469/466/57 467/464/57 \nf 470/467/242 467/464/57 469/466/57 \nf 470/467/242 468/465/241 467/464/57 \nf 182/179/57 471/468/57 469/466/57 \nf 472/469/243 469/466/57 471/468/57 \nf 472/469/243 470/467/242 469/466/57 \nf 182/179/57 473/470/57 471/468/57 \nf 474/471/244 471/468/57 473/470/57 \nf 474/471/244 472/469/243 471/468/57 \nf 182/179/57 475/472/57 473/470/57 \nf 476/473/245 473/470/57 475/472/57 \nf 476/473/245 474/471/244 473/470/57 \nf 182/179/57 477/474/57 475/472/57 \nf 478/475/246 475/472/57 477/474/57 \nf 478/475/246 476/473/245 475/472/57 \nf 182/179/57 479/476/57 477/474/57 \nf 480/477/247 477/474/57 479/476/57 \nf 480/477/247 478/475/246 477/474/57 \nf 182/179/57 481/478/57 479/476/57 \nf 482/479/248 479/476/57 481/478/57 \nf 482/479/248 480/477/247 479/476/57 \nf 182/179/57 483/480/57 481/478/57 \nf 484/481/249 481/478/57 483/480/57 \nf 484/481/249 482/479/248 481/478/57 \nf 182/179/57 485/482/57 483/480/57 \nf 486/483/250 483/480/57 485/482/57 \nf 486/483/250 484/481/249 483/480/57 \nf 182/179/57 487/484/57 485/482/57 \nf 488/485/251 485/482/57 487/484/57 \nf 488/485/251 486/483/250 485/482/57 \nf 182/179/57 489/486/57 487/484/57 \nf 488/485/251 487/484/57 489/486/57 \nf 182/179/57 490/487/57 489/486/57 \nf 491/488/252 489/486/57 490/487/57 \nf 491/488/252 488/485/251 489/486/57 \nf 182/179/57 492/489/57 490/487/57 \nf 493/490/253 490/487/57 492/489/57 \nf 493/490/253 491/488/252 490/487/57 \nf 182/179/57 494/491/57 492/489/57 \nf 495/492/254 492/489/57 494/491/57 \nf 495/492/254 493/490/253 492/489/57 \nf 182/179/57 496/493/57 494/491/57 \nf 497/494/255 494/491/57 496/493/57 \nf 497/494/255 495/492/254 494/491/57 \nf 182/179/57 498/495/57 496/493/57 \nf 499/496/256 496/493/57 498/495/57 \nf 499/496/256 497/494/255 496/493/57 \nf 182/179/57 500/497/57 498/495/57 \nf 501/498/257 498/495/57 500/497/57 \nf 501/498/257 499/496/256 498/495/57 \nf 182/179/57 502/499/57 500/497/57 \nf 503/500/258 500/497/57 502/499/57 \nf 503/500/258 501/498/257 500/497/57 \nf 182/179/57 504/501/57 502/499/57 \nf 505/502/259 502/499/57 504/501/57 \nf 505/502/259 503/500/258 502/499/57 \nf 182/179/57 506/503/57 504/501/57 \nf 507/504/260 504/501/57 506/503/57 \nf 507/504/260 505/502/259 504/501/57 \nf 182/179/57 508/505/57 506/503/57 \nf 509/506/261 506/503/57 508/505/57 \nf 509/506/261 507/504/260 506/503/57 \nf 182/179/57 510/507/57 508/505/57 \nf 511/508/262 508/505/57 510/507/57 \nf 511/508/262 509/506/261 508/505/57 \nf 182/179/57 512/509/57 510/507/57 \nf 513/510/263 510/507/57 512/509/57 \nf 513/510/263 511/508/262 510/507/57 \nf 182/179/57 514/511/57 512/509/57 \nf 515/512/264 512/509/57 514/511/57 \nf 515/512/264 513/510/263 512/509/57 \nf 182/179/57 516/513/57 514/511/57 \nf 517/514/265 514/511/57 516/513/57 \nf 517/514/265 515/512/264 514/511/57 \nf 182/179/57 518/515/57 516/513/57 \nf 519/516/266 516/513/57 518/515/57 \nf 519/516/266 517/514/265 516/513/57 \nf 518/515/57 182/179/57 520/517/57 \nf 521/518/267 518/515/57 522/519/57 \nf 521/518/267 519/516/266 518/515/57 \nf 520/517/57 522/519/57 518/515/57 \nf 523/520/268 522/519/57 524/521/57 \nf 523/520/268 521/518/267 522/519/57 \nf 525/522/57 526/523/57 524/521/57 \nf 527/524/269 524/521/57 526/523/57 \nf 525/522/57 524/521/57 522/519/57 \nf 522/519/57 520/517/57 525/522/57 \nf 527/524/269 523/520/268 524/521/57 \nf 528/525/270 526/523/57 525/522/57 \nf 529/526/141 526/523/57 528/525/270 \nf 529/526/141 527/524/269 526/523/57 \nf 530/527/57 531/528/57 525/522/57 \nf 532/529/271 525/522/57 531/528/57 \nf 520/517/57 530/527/57 525/522/57 \nf 528/525/271 525/522/57 532/529/271 \nf 533/530/141 531/528/57 530/527/57 \nf 532/529/270 531/528/57 533/530/141 \nf 534/531/272 530/527/57 520/517/57 \nf 535/532/273 530/527/57 534/531/272 \nf 535/532/274 530/527/57 535/532/275 \nf 533/530/141 530/527/57 535/532/274 \nf 536/533/59 520/517/57 182/179/57 \nf 534/531/276 520/517/57 536/533/59 \nf 86/83/57 537/534/57 182/179/57 \nf 538/535/60 182/179/57 537/534/57 \nf 538/535/60 536/533/60 182/179/57 \nf 539/536/141 537/534/57 86/83/57 \nf 539/536/141 538/535/59 537/534/57 \nf 540/537/277 86/83/57 336/333/143 \nf 541/538/278 86/83/57 540/537/279 \nf 541/538/278 539/536/141 86/83/57 \nf 542/539/280 543/540/280 544/541/280 \nf 545/542/281 544/541/281 543/540/281 \nf 542/539/280 544/541/280 546/543/280 \nf 547/544/282 546/543/282 544/541/281 \nf 545/542/281 548/545/281 544/541/281 \nf 547/544/282 544/541/281 548/545/281 \nf 542/539/280 549/546/280 543/540/280 \nf 545/542/281 543/540/281 549/546/283 \nf 542/539/280 550/547/280 549/546/280 \nf 551/548/284 549/546/283 550/547/285 \nf 552/549/286 545/542/281 549/546/283 \nf 551/548/284 552/549/286 549/546/283 \nf 542/539/280 553/550/280 550/547/280 \nf 554/551/287 550/547/285 553/550/288 \nf 555/552/289 551/548/284 550/547/285 \nf 554/551/287 555/552/289 550/547/285 \nf 542/539/280 556/553/280 553/550/280 \nf 557/554/290 553/550/288 556/553/291 \nf 558/555/292 554/551/287 553/550/288 \nf 557/554/290 558/555/292 553/550/288 \nf 542/539/280 559/556/280 556/553/280 \nf 560/557/293 556/553/291 559/556/294 \nf 561/558/295 557/554/290 556/553/291 \nf 560/557/293 561/558/295 556/553/291 \nf 542/539/280 562/559/280 559/556/280 \nf 563/560/296 559/556/294 562/559/297 \nf 564/561/298 560/557/293 559/556/294 \nf 563/560/296 564/561/298 559/556/294 \nf 542/539/280 565/562/280 562/559/280 \nf 566/563/299 562/559/297 565/562/300 \nf 567/564/301 563/560/296 562/559/297 \nf 566/563/299 567/564/301 562/559/297 \nf 542/539/280 568/565/280 565/562/280 \nf 569/566/302 565/562/300 568/565/303 \nf 570/567/304 566/563/299 565/562/300 \nf 569/566/302 570/567/304 565/562/300 \nf 542/539/280 571/568/280 568/565/280 \nf 572/569/305 568/565/303 571/568/306 \nf 573/570/307 569/566/302 568/565/303 \nf 572/569/305 573/570/307 568/565/303 \nf 542/539/280 574/571/280 571/568/280 \nf 575/572/308 571/568/306 574/571/309 \nf 576/573/310 572/569/305 571/568/306 \nf 575/572/308 576/573/310 571/568/306 \nf 542/539/280 577/574/280 574/571/280 \nf 578/575/311 574/571/309 577/574/312 \nf 579/576/313 575/572/308 574/571/309 \nf 578/575/311 579/576/313 574/571/309 \nf 542/539/280 580/577/280 577/574/280 \nf 581/578/314 577/574/312 580/577/315 \nf 582/579/316 578/575/311 577/574/312 \nf 581/578/314 582/579/316 577/574/312 \nf 583/580/280 584/581/280 580/577/280 \nf 585/582/317 580/577/315 584/581/318 \nf 542/539/280 583/580/280 580/577/280 \nf 586/583/319 581/578/314 580/577/315 \nf 585/582/317 586/583/319 580/577/315 \nf 583/580/280 587/584/280 584/581/280 \nf 588/585/320 584/581/318 587/584/321 \nf 589/586/322 585/582/317 584/581/318 \nf 588/585/320 589/586/322 584/581/318 \nf 590/587/280 591/588/280 587/584/280 \nf 592/589/323 587/584/321 591/588/324 \nf 583/580/280 590/587/280 587/584/280 \nf 593/590/325 588/585/320 587/584/321 \nf 592/589/323 593/590/325 587/584/321 \nf 594/591/280 595/592/280 591/588/280 \nf 596/593/326 591/588/324 595/592/327 \nf 590/587/280 594/591/280 591/588/280 \nf 597/594/328 592/589/323 591/588/324 \nf 596/593/326 597/594/328 591/588/324 \nf 598/595/280 599/596/280 595/592/280 \nf 600/597/329 595/592/327 599/596/330 \nf 594/591/280 598/595/280 595/592/280 \nf 601/598/331 596/593/326 595/592/327 \nf 600/597/329 601/598/331 595/592/327 \nf 598/595/280 602/599/280 599/596/280 \nf 603/600/332 599/596/330 602/599/333 \nf 604/601/334 600/597/329 599/596/330 \nf 603/600/332 604/601/334 599/596/330 \nf 605/602/280 606/603/280 602/599/280 \nf 607/604/335 602/599/333 606/603/336 \nf 598/595/280 605/602/280 602/599/280 \nf 608/605/337 603/600/332 602/599/333 \nf 607/604/335 608/605/337 602/599/333 \nf 609/606/280 610/607/280 606/603/280 \nf 611/608/338 606/603/336 610/607/339 \nf 605/602/280 609/606/280 606/603/280 \nf 612/609/340 607/604/335 606/603/336 \nf 611/608/338 612/609/340 606/603/336 \nf 609/606/280 613/610/280 610/607/280 \nf 614/611/341 610/607/339 613/610/342 \nf 615/612/343 611/608/338 610/607/339 \nf 614/611/341 615/612/343 610/607/339 \nf 616/613/280 617/614/280 613/610/280 \nf 618/615/344 613/610/342 617/614/345 \nf 609/606/280 616/613/280 613/610/280 \nf 619/616/346 614/611/341 613/610/342 \nf 618/615/344 619/616/346 613/610/342 \nf 616/613/280 620/617/280 617/614/280 \nf 621/618/347 617/614/345 620/617/348 \nf 622/619/349 618/615/344 617/614/345 \nf 621/618/347 622/619/349 617/614/345 \nf 623/620/280 624/621/280 620/617/280 \nf 625/622/350 620/617/348 624/621/351 \nf 616/613/280 623/620/280 620/617/280 \nf 626/623/352 621/618/347 620/617/348 \nf 625/622/350 626/623/352 620/617/348 \nf 623/620/280 627/624/280 624/621/280 \nf 628/625/353 624/621/351 627/624/354 \nf 629/626/355 625/622/350 624/621/351 \nf 628/625/353 629/626/355 624/621/351 \nf 630/627/280 631/628/280 627/624/280 \nf 632/629/356 627/624/354 631/628/357 \nf 623/620/280 630/627/280 627/624/280 \nf 632/629/356 628/625/353 627/624/354 \nf 630/627/280 633/630/280 631/628/280 \nf 634/631/358 631/628/357 633/630/359 \nf 635/632/360 632/629/356 631/628/357 \nf 634/631/358 635/632/360 631/628/357 \nf 630/627/280 636/633/280 633/630/280 \nf 637/634/361 633/630/359 636/633/362 \nf 638/635/363 634/631/358 633/630/359 \nf 637/634/361 638/635/363 633/630/359 \nf 639/636/280 640/637/280 636/633/280 \nf 641/638/364 636/633/362 640/637/365 \nf 630/627/280 639/636/280 636/633/280 \nf 642/639/366 637/634/361 636/633/362 \nf 641/638/364 642/639/366 636/633/362 \nf 639/636/280 643/640/280 640/637/280 \nf 644/641/367 640/637/365 643/640/368 \nf 645/642/369 641/638/364 640/637/365 \nf 644/641/367 645/642/369 640/637/365 \nf 639/636/280 646/643/280 643/640/280 \nf 647/644/370 643/640/368 646/643/371 \nf 648/645/372 644/641/367 643/640/368 \nf 647/644/370 648/645/372 643/640/368 \nf 639/636/280 649/646/280 646/643/280 \nf 650/647/373 646/643/371 649/646/374 \nf 651/648/375 647/644/370 646/643/371 \nf 650/647/373 651/648/375 646/643/371 \nf 639/636/280 652/649/280 649/646/280 \nf 653/650/376 649/646/374 652/649/377 \nf 654/651/378 650/647/373 649/646/374 \nf 653/650/376 654/651/378 649/646/374 \nf 639/636/280 655/652/280 652/649/280 \nf 656/653/377 652/649/377 655/652/377 \nf 657/654/377 652/649/377 656/653/377 \nf 658/655/377 659/656/377 652/649/377 \nf 660/657/377 652/649/377 659/656/377 \nf 661/658/377 658/655/377 652/649/377 \nf 662/658/377 661/658/377 652/649/377 \nf 663/659/377 662/658/377 652/649/377 \nf 664/660/377 663/659/377 652/649/377 \nf 665/661/377 664/660/377 652/649/377 \nf 666/662/377 665/661/377 652/649/377 \nf 667/663/377 666/662/377 652/649/377 \nf 668/664/377 667/663/377 652/649/377 \nf 669/665/377 668/664/377 652/649/377 \nf 670/666/377 669/665/377 652/649/377 \nf 671/667/377 670/666/377 652/649/377 \nf 672/668/377 671/667/377 652/649/377 \nf 673/669/377 672/668/377 652/649/377 \nf 674/670/377 673/669/377 652/649/377 \nf 675/671/377 674/670/377 652/649/377 \nf 676/672/377 675/671/377 652/649/377 \nf 677/673/377 676/672/377 652/649/377 \nf 678/674/377 677/673/377 652/649/377 \nf 679/675/377 678/674/377 652/649/377 \nf 657/654/377 679/675/377 652/649/377 \nf 660/657/377 680/676/377 652/649/377 \nf 653/650/376 652/649/377 680/676/377 \nf 681/677/280 682/678/280 655/652/280 \nf 656/653/2 655/652/2 682/678/2 \nf 683/679/280 684/680/280 655/652/280 \nf 685/681/280 655/652/280 684/680/280 \nf 686/682/280 683/679/280 655/652/280 \nf 687/683/280 686/682/280 655/652/280 \nf 688/684/280 687/683/280 655/652/280 \nf 689/685/280 688/684/280 655/652/280 \nf 690/686/280 689/685/280 655/652/280 \nf 691/687/280 690/686/280 655/652/280 \nf 692/688/280 691/687/280 655/652/280 \nf 693/689/280 692/688/280 655/652/280 \nf 694/690/280 693/689/280 655/652/280 \nf 695/691/280 694/690/280 655/652/280 \nf 696/692/280 695/691/280 655/652/280 \nf 697/693/280 696/692/280 655/652/280 \nf 698/694/280 697/693/280 655/652/280 \nf 699/695/280 698/694/280 655/652/280 \nf 700/696/280 699/695/280 655/652/280 \nf 701/697/280 700/696/280 655/652/280 \nf 702/698/280 701/697/280 655/652/280 \nf 703/699/280 702/698/280 655/652/280 \nf 704/700/280 703/699/280 655/652/280 \nf 705/701/280 704/700/280 655/652/280 \nf 706/702/280 705/701/280 655/652/280 \nf 707/703/280 706/702/280 655/652/280 \nf 708/704/280 707/703/280 655/652/280 \nf 709/705/280 708/704/280 655/652/280 \nf 710/706/280 709/705/280 655/652/280 \nf 711/707/280 710/706/280 655/652/280 \nf 712/708/280 711/707/280 655/652/280 \nf 713/709/280 712/708/280 655/652/280 \nf 714/710/280 713/709/280 655/652/280 \nf 715/711/280 714/710/280 655/652/280 \nf 716/712/280 715/711/280 655/652/280 \nf 717/713/280 716/712/280 655/652/280 \nf 718/714/280 717/713/280 655/652/280 \nf 719/715/280 718/714/280 655/652/280 \nf 720/716/280 719/715/280 655/652/280 \nf 721/717/280 720/716/280 655/652/280 \nf 722/718/280 721/717/280 655/652/280 \nf 723/719/280 722/718/280 655/652/280 \nf 724/720/280 723/719/280 655/652/280 \nf 725/721/280 724/720/280 655/652/280 \nf 726/722/280 725/721/280 655/652/280 \nf 727/723/280 726/722/280 655/652/280 \nf 728/724/280 727/723/280 655/652/280 \nf 729/725/280 728/724/280 655/652/280 \nf 730/726/280 729/725/280 655/652/280 \nf 731/727/280 730/726/280 655/652/280 \nf 732/728/280 731/727/280 655/652/280 \nf 733/729/280 732/728/280 655/652/280 \nf 734/730/280 733/729/280 655/652/280 \nf 735/731/280 734/730/280 655/652/280 \nf 736/732/280 735/731/280 655/652/280 \nf 737/733/280 736/732/280 655/652/280 \nf 738/734/280 737/733/280 655/652/280 \nf 739/735/280 738/734/280 655/652/280 \nf 740/736/280 739/735/280 655/652/280 \nf 741/737/280 740/736/280 655/652/280 \nf 742/738/280 741/737/280 655/652/280 \nf 743/739/280 742/738/280 655/652/280 \nf 744/740/280 743/739/280 655/652/280 \nf 745/741/280 744/740/280 655/652/280 \nf 746/742/280 745/741/280 655/652/280 \nf 747/743/280 746/742/280 655/652/280 \nf 748/744/280 747/743/280 655/652/280 \nf 749/745/280 748/744/280 655/652/280 \nf 750/746/280 749/745/280 655/652/280 \nf 751/747/280 750/746/280 655/652/280 \nf 752/748/280 751/747/280 655/652/280 \nf 753/749/280 752/748/280 655/652/280 \nf 754/750/280 753/749/280 655/652/280 \nf 755/751/280 754/750/280 655/652/280 \nf 756/752/280 755/751/280 655/652/280 \nf 757/753/280 756/752/280 655/652/280 \nf 758/754/280 757/753/280 655/652/280 \nf 759/755/280 758/754/280 655/652/280 \nf 760/756/280 759/755/280 655/652/280 \nf 761/757/280 760/756/280 655/652/280 \nf 762/758/280 761/757/280 655/652/280 \nf 763/759/280 762/758/280 655/652/280 \nf 764/760/280 763/759/280 655/652/280 \nf 765/761/280 764/760/280 655/652/280 \nf 766/762/280 765/761/280 655/652/280 \nf 767/763/280 766/762/280 655/652/280 \nf 768/764/280 767/763/280 655/652/280 \nf 769/765/280 768/764/280 655/652/280 \nf 770/766/280 769/765/280 655/652/280 \nf 771/767/280 770/766/280 655/652/280 \nf 772/768/280 771/767/280 655/652/280 \nf 773/769/280 772/768/280 655/652/280 \nf 774/770/280 773/769/280 655/652/280 \nf 775/771/280 774/770/280 655/652/280 \nf 776/772/280 775/771/280 655/652/280 \nf 777/773/280 776/772/280 655/652/280 \nf 778/774/280 777/773/280 655/652/280 \nf 779/775/280 778/774/280 655/652/280 \nf 780/776/280 779/775/280 655/652/280 \nf 781/777/280 780/776/280 655/652/280 \nf 782/778/280 781/777/280 655/652/280 \nf 783/779/280 782/778/280 655/652/280 \nf 784/780/280 783/779/280 655/652/280 \nf 785/781/280 784/780/280 655/652/280 \nf 786/782/280 785/781/280 655/652/280 \nf 787/783/280 786/782/280 655/652/280 \nf 639/636/280 787/783/280 655/652/280 \nf 685/681/280 681/677/280 655/652/280 \nf 681/677/280 788/784/280 682/678/280 \nf 789/785/1 682/678/1 788/784/1 \nf 789/785/1 790/786/1 682/678/1 \nf 656/653/2 682/678/2 790/786/2 \nf 791/787/280 792/788/280 788/784/280 \nf 789/785/1 788/784/1 792/788/379 \nf 681/677/280 791/787/280 788/784/280 \nf 791/787/280 793/789/280 792/788/280 \nf 794/790/380 792/788/379 793/789/381 \nf 794/790/380 789/785/1 792/788/379 \nf 791/787/280 795/791/280 793/789/280 \nf 796/792/382 793/789/381 795/791/383 \nf 796/792/382 794/790/380 793/789/381 \nf 791/787/280 797/793/280 795/791/280 \nf 798/794/384 795/791/383 797/793/385 \nf 798/794/384 796/792/382 795/791/383 \nf 791/787/280 799/795/280 797/793/280 \nf 800/796/386 797/793/385 799/795/387 \nf 800/796/386 798/794/384 797/793/385 \nf 791/787/280 801/797/280 799/795/280 \nf 802/798/388 799/795/387 801/797/389 \nf 802/798/388 800/796/386 799/795/387 \nf 791/787/280 803/799/280 801/797/280 \nf 804/800/390 801/797/389 803/799/391 \nf 804/800/390 802/798/388 801/797/389 \nf 791/787/280 805/801/280 803/799/280 \nf 806/802/392 803/799/391 805/801/393 \nf 806/802/392 804/800/390 803/799/391 \nf 791/787/280 807/803/280 805/801/280 \nf 808/804/394 805/801/393 807/803/395 \nf 808/804/394 806/802/392 805/801/393 \nf 791/787/280 809/805/280 807/803/280 \nf 810/806/396 807/803/395 809/805/397 \nf 810/806/396 808/804/394 807/803/395 \nf 791/787/280 811/807/280 809/805/280 \nf 812/808/398 809/805/397 811/807/399 \nf 812/808/398 810/806/396 809/805/397 \nf 791/787/280 813/809/280 811/807/280 \nf 814/810/400 811/807/399 813/809/401 \nf 814/810/400 812/808/398 811/807/399 \nf 791/787/280 815/811/280 813/809/280 \nf 816/812/402 813/809/401 815/811/403 \nf 816/812/402 814/810/400 813/809/401 \nf 791/787/280 817/813/280 815/811/280 \nf 818/814/404 815/811/403 817/813/405 \nf 818/814/404 816/812/402 815/811/403 \nf 791/787/280 819/815/280 817/813/280 \nf 820/816/406 817/813/405 819/815/407 \nf 820/816/406 818/814/404 817/813/405 \nf 542/539/280 821/817/280 819/815/280 \nf 822/818/408 819/815/407 821/817/409 \nf 791/787/280 542/539/280 819/815/280 \nf 822/818/408 820/816/406 819/815/407 \nf 542/539/280 823/819/280 821/817/280 \nf 822/818/408 821/817/409 823/819/410 \nf 542/539/280 824/820/280 823/819/280 \nf 825/821/411 823/819/410 824/820/412 \nf 825/821/411 822/818/408 823/819/410 \nf 542/539/280 826/822/280 824/820/280 \nf 825/821/411 824/820/412 826/822/413 \nf 542/539/280 827/823/280 826/822/280 \nf 828/824/414 826/822/413 827/823/415 \nf 828/824/414 825/821/411 826/822/413 \nf 542/539/280 829/825/280 827/823/280 \nf 828/824/414 827/823/415 829/825/416 \nf 542/539/280 830/826/280 829/825/280 \nf 831/827/417 829/825/416 830/826/418 \nf 831/827/417 828/824/414 829/825/416 \nf 542/539/280 832/828/280 830/826/280 \nf 831/827/417 830/826/418 832/828/419 \nf 542/539/280 833/829/280 832/828/280 \nf 834/830/420 832/828/419 833/829/421 \nf 834/830/420 831/827/417 832/828/419 \nf 542/539/280 835/831/280 833/829/280 \nf 834/830/420 833/829/421 835/831/422 \nf 542/539/280 836/832/280 835/831/280 \nf 837/833/423 835/831/422 836/832/424 \nf 837/833/423 834/830/420 835/831/422 \nf 542/539/280 838/834/280 836/832/280 \nf 839/835/425 836/832/424 838/834/426 \nf 839/835/425 837/833/423 836/832/424 \nf 542/539/280 840/836/280 838/834/280 \nf 841/837/427 838/834/426 840/836/428 \nf 841/837/427 839/835/425 838/834/426 \nf 542/539/280 842/838/280 840/836/280 \nf 843/839/429 840/836/428 842/838/430 \nf 843/839/429 841/837/427 840/836/428 \nf 542/539/280 844/840/280 842/838/280 \nf 845/841/431 842/838/430 844/840/432 \nf 845/841/431 843/839/429 842/838/430 \nf 542/539/280 846/842/280 844/840/280 \nf 847/843/433 844/840/432 846/842/434 \nf 847/843/433 845/841/431 844/840/432 \nf 542/539/280 848/844/280 846/842/280 \nf 849/845/435 846/842/434 848/844/436 \nf 849/845/435 847/843/433 846/842/434 \nf 542/539/280 850/846/280 848/844/280 \nf 851/847/437 848/844/436 850/846/438 \nf 851/847/437 849/845/435 848/844/436 \nf 542/539/280 546/543/280 850/846/280 \nf 852/848/439 850/846/438 546/543/282 \nf 852/848/439 851/847/437 850/846/438 \nf 547/544/282 852/848/439 546/543/282 \nf 853/849/440 684/680/280 683/679/280 \nf 853/849/440 685/681/280 684/680/280 \nf 854/850/441 683/679/280 686/682/280 \nf 855/851/442 853/849/440 683/679/280 \nf 854/850/441 855/851/442 683/679/280 \nf 856/852/443 686/682/280 687/683/280 \nf 856/852/443 854/850/441 686/682/280 \nf 857/853/444 687/683/280 688/684/280 \nf 857/853/444 856/852/443 687/683/280 \nf 858/854/445 688/684/280 689/685/280 \nf 858/854/445 857/853/444 688/684/280 \nf 859/855/446 689/685/280 690/686/280 \nf 859/855/446 858/854/445 689/685/280 \nf 860/856/447 690/686/280 691/687/280 \nf 860/856/447 859/855/446 690/686/280 \nf 861/857/448 691/687/280 692/688/280 \nf 861/857/448 860/856/447 691/687/280 \nf 862/858/449 692/688/280 693/689/280 \nf 862/858/449 861/857/448 692/688/280 \nf 863/859/450 693/689/280 694/690/280 \nf 863/859/450 862/858/449 693/689/280 \nf 863/859/450 694/690/280 695/691/280 \nf 864/860/451 695/691/280 696/692/280 \nf 864/860/451 863/859/450 695/691/280 \nf 865/861/452 696/692/280 697/693/280 \nf 865/861/452 864/860/451 696/692/280 \nf 866/862/453 697/693/280 698/694/280 \nf 866/862/453 865/861/452 697/693/280 \nf 867/863/454 698/694/280 699/695/280 \nf 867/863/454 866/862/453 698/694/280 \nf 868/864/455 699/695/280 700/696/280 \nf 868/864/455 867/863/454 699/695/280 \nf 869/865/456 700/696/280 701/697/280 \nf 869/865/456 868/864/455 700/696/280 \nf 870/866/457 701/697/280 702/698/280 \nf 870/866/457 869/865/456 701/697/280 \nf 871/867/458 702/698/280 703/699/280 \nf 871/867/458 870/866/457 702/698/280 \nf 872/868/459 703/699/280 704/700/280 \nf 872/868/459 871/867/458 703/699/280 \nf 873/869/460 704/700/280 705/701/280 \nf 874/870/461 872/868/459 704/700/280 \nf 873/869/460 874/870/461 704/700/280 \nf 875/871/462 705/701/280 706/702/280 \nf 875/871/462 873/869/460 705/701/280 \nf 876/872/463 706/702/280 707/703/280 \nf 876/872/463 875/871/462 706/702/280 \nf 877/873/464 707/703/280 708/704/280 \nf 877/873/464 876/872/463 707/703/280 \nf 877/873/464 708/704/280 709/705/280 \nf 878/874/465 709/705/280 710/706/280 \nf 878/874/465 877/873/464 709/705/280 \nf 878/874/465 710/706/280 711/707/280 \nf 879/875/466 711/707/280 712/708/280 \nf 879/875/466 878/874/465 711/707/280 \nf 879/875/466 712/708/280 713/709/280 \nf 880/876/467 713/709/280 714/710/280 \nf 880/876/467 879/875/466 713/709/280 \nf 880/876/467 714/710/280 715/711/280 \nf 881/877/468 715/711/280 716/712/280 \nf 881/877/468 880/876/467 715/711/280 \nf 881/877/468 716/712/280 717/713/280 \nf 882/878/469 717/713/280 718/714/280 \nf 882/878/469 881/877/468 717/713/280 \nf 882/878/469 718/714/280 719/715/280 \nf 883/879/470 719/715/280 720/716/280 \nf 883/879/470 882/878/469 719/715/280 \nf 883/879/470 720/716/280 721/717/280 \nf 884/880/471 721/717/280 722/718/280 \nf 884/880/471 883/879/470 721/717/280 \nf 884/880/471 722/718/280 723/719/280 \nf 885/881/472 723/719/280 724/720/280 \nf 885/881/472 884/880/471 723/719/280 \nf 885/881/472 724/720/280 725/721/280 \nf 886/882/473 725/721/280 726/722/280 \nf 886/882/473 885/881/472 725/721/280 \nf 886/882/473 726/722/280 727/723/280 \nf 887/883/474 727/723/280 728/724/280 \nf 887/883/474 886/882/473 727/723/280 \nf 887/883/474 728/724/280 729/725/280 \nf 888/884/475 729/725/280 730/726/280 \nf 888/884/475 887/883/474 729/725/280 \nf 888/884/475 730/726/280 731/727/280 \nf 889/885/476 731/727/280 732/728/280 \nf 889/885/476 888/884/475 731/727/280 \nf 889/885/476 732/728/280 733/729/280 \nf 890/886/477 733/729/280 734/730/280 \nf 890/886/477 889/885/476 733/729/280 \nf 891/887/478 734/730/280 735/731/280 \nf 891/887/478 890/886/477 734/730/280 \nf 891/887/478 735/731/280 736/732/280 \nf 892/888/479 736/732/280 737/733/280 \nf 892/888/479 891/887/478 736/732/280 \nf 892/888/479 737/733/280 738/734/280 \nf 893/889/480 738/734/280 739/735/280 \nf 893/889/480 892/888/479 738/734/280 \nf 893/889/480 739/735/280 740/736/280 \nf 894/890/481 740/736/280 741/737/280 \nf 894/890/481 893/889/480 740/736/280 \nf 894/890/481 741/737/280 742/738/280 \nf 895/891/482 742/738/280 743/739/280 \nf 895/891/482 894/890/481 742/738/280 \nf 895/891/482 743/739/280 744/740/280 \nf 896/892/483 744/740/280 745/741/280 \nf 896/892/483 895/891/482 744/740/280 \nf 896/892/483 745/741/280 746/742/280 \nf 897/893/484 746/742/280 747/743/280 \nf 897/893/484 896/892/483 746/742/280 \nf 897/893/484 747/743/280 748/744/280 \nf 898/894/485 748/744/280 749/745/280 \nf 898/894/485 897/893/484 748/744/280 \nf 898/894/485 749/745/280 750/746/280 \nf 899/895/486 750/746/280 751/747/280 \nf 899/895/486 898/894/485 750/746/280 \nf 900/896/487 751/747/280 752/748/280 \nf 900/896/487 899/895/486 751/747/280 \nf 900/896/487 752/748/280 753/749/280 \nf 901/897/488 753/749/280 754/750/280 \nf 901/897/488 900/896/487 753/749/280 \nf 901/897/488 754/750/280 755/751/280 \nf 902/898/489 755/751/280 756/752/280 \nf 902/898/489 901/897/488 755/751/280 \nf 902/898/489 756/752/280 757/753/280 \nf 903/899/490 757/753/280 758/754/280 \nf 903/899/490 902/898/489 757/753/280 \nf 903/899/490 758/754/280 759/755/280 \nf 904/900/491 759/755/280 760/756/280 \nf 904/900/491 903/899/490 759/755/280 \nf 904/900/491 760/756/280 761/757/280 \nf 905/901/492 761/757/280 762/758/280 \nf 905/901/492 904/900/491 761/757/280 \nf 905/901/492 762/758/280 763/759/280 \nf 906/902/493 763/759/280 764/760/280 \nf 906/902/493 905/901/492 763/759/280 \nf 907/903/494 764/760/280 765/761/280 \nf 907/903/494 906/902/493 764/760/280 \nf 907/903/494 765/761/280 766/762/280 \nf 908/904/495 766/762/280 767/763/280 \nf 908/904/495 907/903/494 766/762/280 \nf 908/904/495 767/763/280 768/764/280 \nf 909/905/496 768/764/280 769/765/280 \nf 909/905/496 908/904/495 768/764/280 \nf 909/905/496 769/765/280 770/766/280 \nf 910/906/497 770/766/280 771/767/280 \nf 910/906/497 909/905/496 770/766/280 \nf 910/906/497 771/767/280 772/768/280 \nf 911/907/498 772/768/280 773/769/280 \nf 911/907/498 910/906/497 772/768/280 \nf 911/907/498 773/769/280 774/770/280 \nf 912/908/499 774/770/280 775/771/280 \nf 912/908/499 911/907/498 774/770/280 \nf 913/909/500 775/771/280 776/772/280 \nf 913/909/500 912/908/499 775/771/280 \nf 913/909/500 776/772/280 777/773/280 \nf 914/910/501 777/773/280 778/774/280 \nf 914/910/501 913/909/500 777/773/280 \nf 914/910/501 778/774/280 779/775/280 \nf 915/911/502 779/775/280 780/776/280 \nf 915/911/502 914/910/501 779/775/280 \nf 915/911/502 780/776/280 781/777/280 \nf 916/912/503 781/777/280 782/778/280 \nf 916/912/503 915/911/502 781/777/280 \nf 916/912/503 782/778/280 783/779/280 \nf 917/913/504 783/779/280 784/780/280 \nf 917/913/504 916/912/503 783/779/280 \nf 917/913/504 784/780/280 785/781/280 \nf 918/914/505 785/781/280 786/782/280 \nf 918/914/505 917/913/504 785/781/280 \nf 918/914/505 786/782/280 787/783/280 \nf 919/915/506 787/783/280 639/636/280 \nf 919/915/506 918/914/505 787/783/280 \nf 920/916/507 639/636/280 630/627/280 \nf 920/916/507 919/915/506 639/636/280 \nf 920/916/507 630/627/280 623/620/280 \nf 921/917/508 623/620/280 616/613/280 \nf 921/917/508 920/916/507 623/620/280 \nf 921/917/508 616/613/280 609/606/280 \nf 922/918/509 609/606/280 605/602/280 \nf 922/918/509 921/917/508 609/606/280 \nf 922/918/509 605/602/280 598/595/280 \nf 923/919/510 598/595/280 594/591/280 \nf 923/919/510 922/918/509 598/595/280 \nf 923/919/510 594/591/280 590/587/280 \nf 924/920/511 590/587/280 583/580/280 \nf 924/920/511 923/919/510 590/587/280 \nf 924/920/511 583/580/280 542/539/280 \nf 925/921/512 542/539/280 791/787/280 \nf 926/922/512 924/920/511 542/539/280 \nf 925/921/512 926/922/512 542/539/280 \nf 681/677/280 927/923/280 791/787/280 \nf 925/921/512 791/787/280 927/923/280 \nf 681/677/280 928/924/280 927/923/280 \nf 929/925/513 927/923/280 928/924/280 \nf 929/925/513 925/921/512 927/923/280 \nf 681/677/280 930/926/280 928/924/280 \nf 929/925/513 928/924/280 930/926/280 \nf 681/677/280 931/927/280 930/926/280 \nf 932/928/514 930/926/280 931/927/280 \nf 932/928/514 929/925/513 930/926/280 \nf 681/677/280 933/929/280 931/927/280 \nf 932/928/514 931/927/280 933/929/280 \nf 681/677/280 934/930/280 933/929/280 \nf 935/931/515 933/929/280 934/930/280 \nf 935/931/515 932/928/514 933/929/280 \nf 681/677/280 936/932/280 934/930/280 \nf 935/931/515 934/930/280 936/932/280 \nf 681/677/280 937/933/280 936/932/280 \nf 938/934/516 936/932/280 937/933/280 \nf 938/934/516 935/931/515 936/932/280 \nf 681/677/280 939/935/280 937/933/280 \nf 938/934/516 937/933/280 939/935/280 \nf 681/677/280 940/936/280 939/935/280 \nf 941/937/517 939/935/280 940/936/280 \nf 941/937/517 938/934/516 939/935/280 \nf 681/677/280 942/938/280 940/936/280 \nf 943/939/518 940/936/280 942/938/280 \nf 943/939/518 941/937/517 940/936/280 \nf 681/677/280 944/940/280 942/938/280 \nf 943/939/518 942/938/280 944/940/280 \nf 681/677/280 945/941/280 944/940/280 \nf 946/942/519 944/940/280 945/941/280 \nf 946/942/519 943/939/518 944/940/280 \nf 681/677/280 947/943/280 945/941/280 \nf 946/942/519 945/941/280 947/943/280 \nf 681/677/280 948/944/280 947/943/280 \nf 949/945/520 947/943/280 948/944/280 \nf 949/945/520 946/942/519 947/943/280 \nf 681/677/280 950/946/280 948/944/280 \nf 949/945/520 948/944/280 950/946/280 \nf 681/677/280 951/947/280 950/946/280 \nf 952/948/521 950/946/280 951/947/280 \nf 952/948/521 949/945/520 950/946/280 \nf 681/677/280 953/949/280 951/947/280 \nf 952/948/521 951/947/280 953/949/280 \nf 681/677/280 954/950/280 953/949/280 \nf 955/951/522 953/949/280 954/950/280 \nf 955/951/522 952/948/521 953/949/280 \nf 681/677/280 956/952/280 954/950/280 \nf 955/951/522 954/950/280 956/952/280 \nf 681/677/280 957/953/280 956/952/280 \nf 958/954/523 956/952/280 957/953/280 \nf 958/954/523 955/951/522 956/952/280 \nf 681/677/280 959/955/280 957/953/280 \nf 958/954/523 957/953/280 959/955/280 \nf 681/677/280 960/956/280 959/955/280 \nf 961/957/524 959/955/280 960/956/280 \nf 961/957/524 958/954/523 959/955/280 \nf 681/677/280 962/958/280 960/956/280 \nf 963/959/525 960/956/280 962/958/280 \nf 963/959/525 961/957/524 960/956/280 \nf 681/677/280 964/960/280 962/958/280 \nf 963/959/525 962/958/280 964/960/280 \nf 681/677/280 965/961/280 964/960/280 \nf 966/962/526 964/960/280 965/961/280 \nf 966/962/526 963/959/525 964/960/280 \nf 681/677/280 967/963/280 965/961/280 \nf 966/962/526 965/961/280 967/963/280 \nf 681/677/280 968/964/280 967/963/280 \nf 969/965/527 967/963/280 968/964/280 \nf 969/965/527 966/962/526 967/963/280 \nf 681/677/280 970/966/280 968/964/280 \nf 969/965/527 968/964/280 970/966/280 \nf 681/677/280 971/967/280 970/966/280 \nf 972/968/528 970/966/280 971/967/280 \nf 972/968/528 969/965/527 970/966/280 \nf 681/677/280 973/969/280 971/967/280 \nf 972/968/528 971/967/280 973/969/280 \nf 681/677/280 974/970/280 973/969/280 \nf 975/971/529 973/969/280 974/970/280 \nf 975/971/529 972/968/528 973/969/280 \nf 681/677/280 976/972/280 974/970/280 \nf 975/971/529 974/970/280 976/972/280 \nf 681/677/280 977/973/280 976/972/280 \nf 978/974/530 976/972/280 977/973/280 \nf 978/974/530 975/971/529 976/972/280 \nf 681/677/280 979/975/280 977/973/280 \nf 978/974/530 977/973/280 979/975/280 \nf 681/677/280 980/976/280 979/975/280 \nf 981/977/531 979/975/280 980/976/280 \nf 981/977/531 978/974/530 979/975/280 \nf 681/677/280 982/978/280 980/976/280 \nf 981/977/531 980/976/280 982/978/280 \nf 681/677/280 983/979/280 982/978/280 \nf 984/980/532 982/978/280 983/979/280 \nf 984/980/532 981/977/531 982/978/280 \nf 681/677/280 985/981/280 983/979/280 \nf 984/980/532 983/979/280 985/981/280 \nf 681/677/280 986/982/280 985/981/280 \nf 987/983/533 985/981/280 986/982/280 \nf 987/983/533 984/980/532 985/981/280 \nf 681/677/280 988/984/280 986/982/280 \nf 989/985/534 986/982/280 988/984/280 \nf 989/985/534 987/983/533 986/982/280 \nf 681/677/280 990/986/280 988/984/280 \nf 989/985/534 988/984/280 990/986/280 \nf 681/677/280 991/987/280 990/986/280 \nf 992/988/535 990/986/280 991/987/280 \nf 992/988/535 989/985/534 990/986/280 \nf 681/677/280 993/989/280 991/987/280 \nf 992/988/535 991/987/280 993/989/280 \nf 681/677/280 994/990/280 993/989/280 \nf 995/991/536 993/989/280 994/990/280 \nf 995/991/536 992/988/535 993/989/280 \nf 681/677/280 996/992/280 994/990/280 \nf 995/991/536 994/990/280 996/992/280 \nf 681/677/280 997/993/280 996/992/280 \nf 998/994/537 996/992/280 997/993/280 \nf 998/994/537 995/991/536 996/992/280 \nf 681/677/280 999/995/280 997/993/280 \nf 998/994/537 997/993/280 999/995/280 \nf 681/677/280 1000/996/280 999/995/280 \nf 1001/997/538 999/995/280 1000/996/280 \nf 1001/997/538 998/994/537 999/995/280 \nf 681/677/280 1002/998/280 1000/996/280 \nf 1001/997/538 1000/996/280 1002/998/280 \nf 681/677/280 1003/999/280 1002/998/280 \nf 1004/1000/539 1002/998/280 1003/999/280 \nf 1004/1000/539 1001/997/538 1002/998/280 \nf 681/677/280 1005/1001/280 1003/999/280 \nf 1004/1000/539 1003/999/280 1005/1001/280 \nf 681/677/280 1006/1002/280 1005/1001/280 \nf 1007/1003/540 1005/1001/280 1006/1002/280 \nf 1007/1003/540 1004/1000/539 1005/1001/280 \nf 681/677/280 1008/1004/280 1006/1002/280 \nf 1007/1003/540 1006/1002/280 1008/1004/280 \nf 681/677/280 1009/1005/280 1008/1004/280 \nf 1010/1006/541 1008/1004/280 1009/1005/280 \nf 1010/1006/541 1007/1003/540 1008/1004/280 \nf 681/677/280 1011/1007/280 1009/1005/280 \nf 1010/1006/541 1009/1005/280 1011/1007/280 \nf 681/677/280 1012/1008/280 1011/1007/280 \nf 1013/1009/542 1011/1007/280 1012/1008/280 \nf 1013/1009/542 1010/1006/541 1011/1007/280 \nf 681/677/280 1014/1010/280 1012/1008/280 \nf 1013/1009/542 1012/1008/280 1014/1010/280 \nf 681/677/280 1015/1011/280 1014/1010/280 \nf 1016/1012/543 1014/1010/280 1015/1011/280 \nf 1016/1012/543 1013/1009/542 1014/1010/280 \nf 681/677/280 1017/1013/280 1015/1011/280 \nf 1016/1012/543 1015/1011/280 1017/1013/280 \nf 681/677/280 1018/1014/280 1017/1013/280 \nf 1019/1015/544 1017/1013/280 1018/1014/280 \nf 1019/1015/544 1016/1012/543 1017/1013/280 \nf 681/677/280 1020/1016/280 1018/1014/280 \nf 1019/1015/544 1018/1014/280 1020/1016/280 \nf 681/677/280 1021/1017/280 1020/1016/280 \nf 1022/1018/545 1020/1016/280 1021/1017/280 \nf 1022/1018/545 1019/1015/544 1020/1016/280 \nf 681/677/280 1023/1019/280 1021/1017/280 \nf 1022/1018/545 1021/1017/280 1023/1019/280 \nf 681/677/280 1024/1020/280 1023/1019/280 \nf 1025/1021/546 1023/1019/280 1024/1020/280 \nf 1025/1021/546 1022/1018/545 1023/1019/280 \nf 681/677/280 1026/1022/280 1024/1020/280 \nf 1027/1023/547 1024/1020/280 1026/1022/280 \nf 1027/1023/547 1025/1021/546 1024/1020/280 \nf 681/677/280 1028/1024/280 1026/1022/280 \nf 1029/1025/548 1026/1022/280 1028/1024/280 \nf 1029/1025/548 1027/1023/547 1026/1022/280 \nf 681/677/280 1030/1026/280 1028/1024/280 \nf 1031/1027/549 1028/1024/280 1030/1026/280 \nf 1031/1027/549 1029/1025/548 1028/1024/280 \nf 681/677/280 1032/1028/280 1030/1026/280 \nf 1033/1029/550 1030/1026/280 1032/1028/280 \nf 1033/1029/550 1031/1027/549 1030/1026/280 \nf 681/677/280 1034/1030/280 1032/1028/280 \nf 1035/1031/551 1032/1028/280 1034/1030/280 \nf 1036/1032/552 1033/1029/550 1032/1028/280 \nf 1035/1031/551 1036/1032/552 1032/1028/280 \nf 681/677/280 1037/1033/280 1034/1030/280 \nf 1038/1034/553 1034/1030/280 1037/1033/280 \nf 1038/1034/553 1035/1031/551 1034/1030/280 \nf 681/677/280 1039/1035/280 1037/1033/280 \nf 1040/1036/554 1037/1033/280 1039/1035/280 \nf 1040/1036/554 1038/1034/553 1037/1033/280 \nf 681/677/280 1041/1037/280 1039/1035/280 \nf 1042/1038/555 1039/1035/280 1041/1037/280 \nf 1042/1038/555 1040/1036/554 1039/1035/280 \nf 681/677/280 1043/1039/280 1041/1037/280 \nf 1044/1040/556 1041/1037/280 1043/1039/280 \nf 1044/1040/556 1042/1038/555 1041/1037/280 \nf 681/677/280 1045/1041/280 1043/1039/280 \nf 1046/1042/557 1043/1039/280 1045/1041/280 \nf 1046/1042/557 1044/1040/556 1043/1039/280 \nf 681/677/280 1047/1043/280 1045/1041/280 \nf 1048/1044/558 1045/1041/280 1047/1043/280 \nf 1048/1044/558 1046/1042/557 1045/1041/280 \nf 681/677/280 1049/1045/280 1047/1043/280 \nf 1050/1046/559 1047/1043/280 1049/1045/280 \nf 1050/1046/559 1048/1044/558 1047/1043/280 \nf 681/677/280 1051/1047/280 1049/1045/280 \nf 1052/1048/560 1049/1045/280 1051/1047/280 \nf 1052/1048/560 1050/1046/559 1049/1045/280 \nf 681/677/280 1053/1049/280 1051/1047/280 \nf 1054/1050/561 1051/1047/280 1053/1049/280 \nf 1054/1050/561 1052/1048/560 1051/1047/280 \nf 681/677/280 1055/1051/280 1053/1049/280 \nf 1056/1052/562 1053/1049/280 1055/1051/280 \nf 1056/1052/562 1054/1050/561 1053/1049/280 \nf 681/677/280 1057/1053/280 1055/1051/280 \nf 1058/1054/563 1055/1051/280 1057/1053/280 \nf 1058/1054/563 1056/1052/562 1055/1051/280 \nf 681/677/280 1059/1055/280 1057/1053/280 \nf 1060/1056/564 1057/1053/280 1059/1055/280 \nf 1060/1056/564 1058/1054/563 1057/1053/280 \nf 681/677/280 1061/1057/280 1059/1055/280 \nf 1062/1058/565 1059/1055/280 1061/1057/280 \nf 1062/1058/565 1060/1056/564 1059/1055/280 \nf 681/677/280 1063/1059/280 1061/1057/280 \nf 1064/1060/566 1061/1057/280 1063/1059/280 \nf 1064/1060/566 1062/1058/565 1061/1057/280 \nf 681/677/280 1065/1061/280 1063/1059/280 \nf 1064/1060/566 1063/1059/280 1065/1061/280 \nf 1066/1062/567 1065/1061/280 681/677/280 \nf 1067/1063/568 1064/1060/566 1065/1061/280 \nf 1066/1062/567 1067/1063/568 1065/1061/280 \nf 685/681/280 1068/1064/280 681/677/280 \nf 1069/1065/569 681/677/280 1068/1064/280 \nf 1070/1066/570 1066/1062/567 681/677/280 \nf 1070/1066/571 681/677/280 1069/1065/569 \nf 1071/1067/280 1072/1068/280 1068/1064/280 \nf 1073/1069/572 1068/1064/573 1072/1068/574 \nf 685/681/280 1071/1067/280 1068/1064/280 \nf 1074/1070/575 1069/1065/576 1068/1064/573 \nf 1073/1069/572 1074/1070/575 1068/1064/573 \nf 1071/1067/280 1075/1071/280 1072/1068/280 \nf 1076/1072/577 1072/1068/574 1075/1071/1 \nf 1076/1072/577 1073/1069/572 1072/1068/574 \nf 11/11/1 1075/1071/1 1071/1067/1 \nf 13/13/1 1075/1071/1 11/11/1 \nf 14/14/1 1077/1073/1 1075/1071/1 \nf 1076/1072/577 1075/1071/1 1077/1073/1 \nf 13/13/1 14/14/1 1075/1071/1 \nf 1078/1074/2 1071/1067/2 685/681/2 \nf 1079/1075/2 12/12/2 1071/1067/2 \nf 11/11/2 1071/1067/2 12/12/2 \nf 1080/1076/2 1079/1075/2 1071/1067/2 \nf 1081/1077/2 1080/1076/2 1071/1067/2 \nf 1082/1078/2 1081/1077/2 1071/1067/2 \nf 1083/1079/2 1082/1078/2 1071/1067/2 \nf 1084/1080/2 1083/1079/2 1071/1067/2 \nf 1085/1081/2 1084/1080/2 1071/1067/2 \nf 1086/1082/2 1085/1081/2 1071/1067/2 \nf 1087/1083/2 1086/1082/2 1071/1067/2 \nf 1078/1074/2 1087/1083/2 1071/1067/2 \nf 853/849/440 1078/1074/578 685/681/280 \nf 1088/1084/579 1089/1085/580 1090/1086/377 \nf 1091/1087/581 1090/1086/377 1089/1085/580 \nf 1092/1088/377 1088/1084/579 1090/1086/377 \nf 1093/1089/377 1092/1088/377 1090/1086/377 \nf 1093/1089/377 1090/1086/377 1094/1090/377 \nf 1091/1087/581 1094/1090/377 1090/1086/377 \nf 1088/1084/579 1095/1091/582 1089/1085/580 \nf 1096/1085/583 1089/1085/580 1095/1091/582 \nf 1091/1087/581 1089/1085/580 1096/1085/583 \nf 1097/1092/584 1098/1093/585 1095/1091/582 \nf 1099/1094/586 1095/1091/582 1098/1093/585 \nf 1088/1084/579 1097/1092/584 1095/1091/582 \nf 1096/1085/583 1095/1091/582 1099/1094/586 \nf 1100/1095/587 1101/1096/588 1098/1093/585 \nf 1102/1097/589 1098/1093/585 1101/1096/588 \nf 1097/1092/584 1100/1095/587 1098/1093/585 \nf 1099/1094/586 1098/1093/585 1102/1097/589 \nf 1103/1098/590 1104/1099/591 1101/1096/588 \nf 1105/1100/592 1101/1096/588 1104/1099/591 \nf 1100/1095/587 1103/1098/590 1101/1096/588 \nf 1102/1097/589 1101/1096/588 1105/1100/592 \nf 1106/1101/593 1107/1102/594 1104/1099/591 \nf 1108/1103/595 1104/1099/591 1107/1102/594 \nf 1103/1098/590 1106/1101/593 1104/1099/591 \nf 1105/1100/592 1104/1099/591 1108/1103/595 \nf 1109/1104/596 1110/1105/597 1107/1102/594 \nf 1111/1106/598 1107/1102/594 1110/1105/597 \nf 1106/1101/593 1109/1104/596 1107/1102/594 \nf 1108/1103/595 1107/1102/594 1111/1106/598 \nf 1112/1107/599 1113/1108/600 1110/1105/597 \nf 1114/1109/601 1110/1105/597 1113/1108/600 \nf 1109/1104/596 1112/1107/599 1110/1105/597 \nf 1111/1106/598 1110/1105/597 1114/1109/601 \nf 1115/1110/602 1116/1111/603 1113/1108/600 \nf 1117/1112/604 1113/1108/600 1116/1111/603 \nf 1112/1107/599 1115/1110/602 1113/1108/600 \nf 1114/1109/601 1113/1108/600 1117/1112/604 \nf 1118/1113/605 1119/1114/606 1116/1111/603 \nf 1120/1115/607 1116/1111/603 1119/1114/606 \nf 1115/1110/602 1118/1113/605 1116/1111/603 \nf 1117/1112/604 1116/1111/603 1120/1115/607 \nf 1121/1116/608 1122/1117/609 1119/1114/606 \nf 1123/1118/610 1119/1114/606 1122/1117/609 \nf 1118/1113/605 1121/1116/608 1119/1114/606 \nf 1120/1115/607 1119/1114/606 1123/1118/610 \nf 1124/1119/611 1125/1120/612 1122/1117/609 \nf 1126/1121/613 1122/1117/609 1125/1120/612 \nf 1121/1116/608 1124/1119/611 1122/1117/609 \nf 1123/1118/610 1122/1117/609 1126/1121/613 \nf 1127/1122/614 1128/1123/615 1125/1120/612 \nf 1129/1124/616 1125/1120/612 1128/1123/615 \nf 1124/1119/611 1127/1122/614 1125/1120/612 \nf 1126/1121/613 1125/1120/612 1129/1124/616 \nf 1130/1125/617 1131/1126/618 1128/1123/615 \nf 1132/1127/619 1128/1123/615 1131/1126/618 \nf 1127/1122/614 1130/1125/617 1128/1123/615 \nf 1129/1124/616 1128/1123/615 1132/1127/619 \nf 1133/1128/620 1134/1129/621 1131/1126/618 \nf 1135/1130/622 1131/1126/618 1134/1129/621 \nf 1130/1125/617 1133/1128/620 1131/1126/618 \nf 1132/1127/619 1131/1126/618 1135/1130/622 \nf 1136/1131/623 1137/1132/624 1134/1129/621 \nf 1138/1133/625 1134/1129/621 1137/1132/624 \nf 1133/1128/620 1136/1131/623 1134/1129/621 \nf 1135/1130/622 1134/1129/621 1138/1133/625 \nf 1139/1134/626 1140/1135/627 1137/1132/624 \nf 1141/1136/628 1137/1132/624 1140/1135/627 \nf 1136/1131/623 1139/1134/626 1137/1132/624 \nf 1138/1133/625 1137/1132/624 1141/1136/628 \nf 1142/1137/629 1143/1138/630 1140/1135/627 \nf 1144/1139/631 1140/1135/627 1143/1138/630 \nf 1139/1134/626 1142/1137/629 1140/1135/627 \nf 1141/1136/628 1140/1135/627 1144/1139/631 \nf 1145/1140/632 1146/1141/633 1143/1138/630 \nf 1147/1142/634 1143/1138/630 1146/1141/633 \nf 1142/1137/629 1145/1140/632 1143/1138/630 \nf 1144/1139/631 1143/1138/630 1147/1142/634 \nf 1148/1143/635 1149/1144/636 1146/1141/633 \nf 1150/1145/637 1146/1141/633 1149/1144/636 \nf 1145/1140/632 1148/1143/635 1146/1141/633 \nf 1147/1142/634 1146/1141/633 1150/1145/637 \nf 1151/1146/638 1152/1147/639 1149/1144/636 \nf 1153/1148/640 1149/1144/636 1152/1147/639 \nf 1148/1143/635 1151/1146/638 1149/1144/636 \nf 1150/1145/637 1149/1144/636 1153/1148/640 \nf 1154/1149/641 1155/1150/642 1152/1147/639 \nf 1156/1151/643 1152/1147/639 1155/1150/642 \nf 1151/1146/638 1154/1149/641 1152/1147/639 \nf 1153/1148/640 1152/1147/639 1156/1151/643 \nf 1157/1152/644 1158/1153/645 1155/1150/642 \nf 1159/1154/646 1155/1150/642 1158/1153/645 \nf 1154/1149/641 1157/1152/644 1155/1150/642 \nf 1156/1151/643 1155/1150/642 1159/1154/646 \nf 1160/1155/647 1161/1156/648 1158/1153/645 \nf 1162/1157/649 1158/1153/645 1161/1156/650 \nf 1157/1152/644 1160/1155/647 1158/1153/645 \nf 1159/1154/646 1158/1153/645 1162/1157/649 \nf 1163/1158/651 1164/1159/652 1161/1156/648 \nf 1165/1160/653 1161/1156/650 1164/1159/652 \nf 1160/1155/647 1163/1158/651 1161/1156/648 \nf 1162/1157/649 1161/1156/650 1165/1160/653 \nf 1166/1161/654 1167/1162/655 1164/1159/652 \nf 1168/1163/656 1164/1159/652 1167/1162/655 \nf 1163/1158/651 1166/1161/654 1164/1159/652 \nf 1165/1160/653 1164/1159/652 1168/1163/656 \nf 1169/1164/657 1170/1165/658 1167/1162/655 \nf 1171/1166/659 1167/1162/655 1170/1165/658 \nf 1166/1161/654 1169/1164/657 1167/1162/655 \nf 1168/1163/656 1167/1162/655 1171/1166/659 \nf 1172/1167/660 1173/1168/661 1170/1165/658 \nf 1174/1169/662 1170/1165/658 1173/1168/661 \nf 1169/1164/657 1172/1167/660 1170/1165/658 \nf 1171/1166/659 1170/1165/658 1174/1169/662 \nf 1175/1170/663 1176/1171/664 1173/1168/661 \nf 1177/1172/665 1173/1168/661 1176/1171/664 \nf 1172/1167/660 1175/1170/663 1173/1168/661 \nf 1174/1169/662 1173/1168/661 1177/1172/665 \nf 1178/1173/666 1179/1174/667 1176/1171/664 \nf 1180/1175/668 1176/1171/664 1179/1174/667 \nf 1175/1170/663 1178/1173/666 1176/1171/664 \nf 1177/1172/665 1176/1171/664 1180/1175/668 \nf 1178/1173/666 1181/1176/669 1179/1174/667 \nf 1182/1177/670 1179/1174/667 1181/1176/669 \nf 1180/1175/668 1179/1174/667 1182/1177/670 \nf 1183/1178/671 1184/1179/672 1181/1176/669 \nf 1182/1177/670 1181/1176/669 1184/1179/672 \nf 1178/1173/666 1183/1178/671 1181/1176/669 \nf 1183/1178/671 1185/1180/673 1184/1179/672 \nf 1186/1181/674 1184/1179/672 1185/1180/673 \nf 1182/1177/670 1184/1179/672 1186/1181/674 \nf 1187/1182/675 1188/1183/676 1185/1180/673 \nf 1186/1181/674 1185/1180/673 1188/1183/676 \nf 1183/1178/671 1187/1182/675 1185/1180/673 \nf 1187/1182/675 1189/1184/677 1188/1183/676 \nf 1190/1185/678 1188/1183/676 1189/1184/677 \nf 1186/1181/674 1188/1183/676 1190/1185/678 \nf 1191/1186/679 1192/1187/680 1189/1184/677 \nf 1190/1185/678 1189/1184/677 1192/1187/680 \nf 1187/1182/675 1191/1186/679 1189/1184/677 \nf 1191/1186/679 1193/1188/681 1192/1187/680 \nf 1194/1189/682 1192/1187/680 1193/1188/681 \nf 1190/1185/678 1192/1187/680 1195/1190/683 \nf 1194/1189/682 1195/1190/683 1192/1187/680 \nf 1191/1186/679 1196/1191/684 1193/1188/681 \nf 1194/1189/682 1193/1188/681 1196/1191/684 \nf 1197/1192/685 1198/1193/686 1196/1191/684 \nf 1194/1189/682 1196/1191/684 1198/1193/686 \nf 1191/1186/679 1197/1192/685 1196/1191/684 \nf 1197/1192/685 1199/1194/687 1198/1193/686 \nf 1194/1189/682 1198/1193/686 1199/1194/687 \nf 1200/1195/688 1201/1196/48 1199/1194/687 \nf 1202/1194/689 1199/1194/687 1201/1196/48 \nf 1197/1192/685 1200/1195/688 1199/1194/687 \nf 1194/1189/682 1199/1194/687 1202/1194/689 \nf 1200/1195/688 1203/1197/690 1201/1196/48 \nf 1204/1198/691 1201/1196/48 1203/1197/690 \nf 1202/1194/689 1201/1196/48 1204/1198/691 \nf 1205/1199/692 1206/1200/693 1203/1197/690 \nf 1204/1198/691 1203/1197/690 1206/1200/693 \nf 1200/1195/688 1205/1199/692 1203/1197/690 \nf 1205/1199/692 1207/1201/694 1206/1200/693 \nf 1208/1202/695 1206/1200/693 1207/1201/694 \nf 1204/1198/691 1206/1200/693 1208/1202/695 \nf 1209/1203/696 1210/1204/697 1207/1201/694 \nf 1208/1202/695 1207/1201/694 1210/1204/697 \nf 1205/1199/692 1209/1203/696 1207/1201/694 \nf 1209/1203/696 1211/1205/698 1210/1204/697 \nf 1212/1206/699 1210/1204/697 1211/1205/698 \nf 1208/1202/695 1210/1204/697 1212/1206/699 \nf 1213/1207/700 1214/1208/701 1211/1205/698 \nf 1212/1206/699 1211/1205/698 1214/1208/701 \nf 1209/1203/696 1213/1207/700 1211/1205/698 \nf 1213/1207/700 1215/1209/702 1214/1208/701 \nf 1216/1210/703 1214/1208/701 1215/1209/702 \nf 1212/1206/699 1214/1208/701 1216/1210/703 \nf 1217/1211/704 1218/1212/705 1215/1209/702 \nf 1216/1210/703 1215/1209/702 1218/1212/705 \nf 1213/1207/700 1217/1211/704 1215/1209/702 \nf 1217/1211/704 1219/1213/706 1218/1212/705 \nf 1220/1214/707 1218/1212/705 1219/1213/706 \nf 1216/1210/703 1218/1212/705 1220/1214/707 \nf 1221/1215/708 1222/1216/709 1219/1213/706 \nf 1220/1214/707 1219/1213/706 1222/1216/709 \nf 1217/1211/704 1221/1215/708 1219/1213/706 \nf 1221/1215/708 1223/1217/710 1222/1216/709 \nf 1224/1218/711 1222/1216/709 1223/1217/710 \nf 1220/1214/707 1222/1216/709 1224/1218/711 \nf 1225/1219/712 1226/1220/713 1223/1217/710 \nf 1224/1218/711 1223/1217/710 1226/1220/713 \nf 1221/1215/708 1225/1219/712 1223/1217/710 \nf 1225/1219/712 1227/1221/714 1226/1220/713 \nf 1228/1222/715 1226/1220/713 1227/1221/714 \nf 1224/1218/711 1226/1220/713 1228/1222/715 \nf 1229/1223/716 1230/1224/717 1227/1221/714 \nf 1228/1222/715 1227/1221/714 1230/1224/717 \nf 1225/1219/712 1229/1223/716 1227/1221/714 \nf 1229/1223/716 1231/1225/718 1230/1224/717 \nf 1232/1226/719 1230/1224/717 1231/1225/718 \nf 1228/1222/715 1230/1224/717 1232/1226/719 \nf 1233/1227/720 1234/1228/721 1231/1225/718 \nf 1235/1229/722 1231/1225/718 1234/1228/721 \nf 1229/1223/716 1233/1227/720 1231/1225/718 \nf 1232/1226/719 1231/1225/718 1235/1229/722 \nf 1233/1227/720 1236/1230/723 1234/1228/721 \nf 1235/1229/722 1234/1228/721 1236/1230/723 \nf 1237/1231/724 1238/1232/725 1236/1230/723 \nf 1239/1233/726 1236/1230/723 1238/1232/725 \nf 1233/1227/720 1237/1231/724 1236/1230/723 \nf 1235/1229/722 1236/1230/723 1239/1233/726 \nf 1237/1231/724 1240/1234/727 1238/1232/725 \nf 1239/1233/726 1238/1232/725 1240/1234/727 \nf 1241/1235/728 1242/1236/729 1240/1234/727 \nf 1243/1237/730 1240/1234/727 1242/1236/729 \nf 1237/1231/724 1241/1235/728 1240/1234/727 \nf 1239/1233/726 1240/1234/727 1243/1237/730 \nf 1241/1235/728 1244/1238/731 1242/1236/729 \nf 1243/1237/730 1242/1236/729 1244/1238/731 \nf 1245/1239/732 1246/1240/733 1244/1238/731 \nf 1247/1241/734 1244/1238/731 1246/1240/733 \nf 1241/1235/728 1245/1239/732 1244/1238/731 \nf 1243/1237/730 1244/1238/731 1247/1241/734 \nf 1245/1239/732 1248/1242/735 1246/1240/733 \nf 1247/1241/734 1246/1240/733 1248/1242/735 \nf 1249/1243/736 1250/1244/737 1248/1242/735 \nf 1251/1245/738 1248/1242/735 1250/1244/737 \nf 1245/1239/732 1249/1243/736 1248/1242/735 \nf 1247/1241/734 1248/1242/735 1251/1245/738 \nf 1249/1243/736 1252/1246/739 1250/1244/737 \nf 1251/1245/738 1250/1244/737 1252/1246/739 \nf 1253/1247/740 1254/1248/741 1252/1246/739 \nf 1255/1249/742 1252/1246/739 1254/1248/741 \nf 1249/1243/736 1253/1247/740 1252/1246/739 \nf 1251/1245/738 1252/1246/739 1255/1249/742 \nf 1253/1247/740 1256/1250/743 1254/1248/741 \nf 1255/1249/742 1254/1248/741 1256/1250/743 \nf 1257/1251/744 1258/1252/745 1256/1250/743 \nf 1259/1253/746 1256/1250/743 1258/1252/745 \nf 1253/1247/740 1257/1251/744 1256/1250/743 \nf 1255/1249/742 1256/1250/743 1259/1253/746 \nf 1257/1251/744 1260/1254/747 1258/1252/745 \nf 1261/1255/748 1258/1252/745 1260/1254/747 \nf 1259/1253/746 1258/1252/745 1261/1255/748 \nf 1262/1256/749 1263/1257/750 1260/1254/747 \nf 1261/1255/748 1260/1254/747 1263/1257/750 \nf 1257/1251/744 1262/1256/749 1260/1254/747 \nf 1262/1256/749 1264/1258/751 1263/1257/750 \nf 1265/1259/752 1263/1257/750 1264/1258/751 \nf 1261/1255/748 1263/1257/750 1265/1259/752 \nf 1266/1260/753 1267/1261/754 1264/1258/751 \nf 1265/1259/752 1264/1258/751 1267/1261/754 \nf 1262/1256/749 1266/1260/753 1264/1258/751 \nf 1266/1260/753 1268/1262/755 1267/1261/754 \nf 1269/1263/756 1267/1261/754 1268/1262/755 \nf 1265/1259/752 1267/1261/754 1269/1263/756 \nf 1270/1264/757 1271/1265/758 1268/1262/755 \nf 1269/1263/756 1268/1262/755 1271/1265/758 \nf 1266/1260/753 1270/1264/757 1268/1262/755 \nf 1270/1264/757 1272/1266/759 1271/1265/758 \nf 1273/1267/760 1271/1265/758 1272/1266/759 \nf 1269/1263/756 1271/1265/758 1273/1267/760 \nf 1274/1268/761 1275/1269/762 1272/1266/759 \nf 1273/1267/760 1272/1266/759 1275/1269/762 \nf 1270/1264/757 1274/1268/761 1272/1266/759 \nf 1274/1268/761 1276/1270/763 1275/1269/762 \nf 1277/1271/764 1275/1269/762 1276/1270/763 \nf 1273/1267/760 1275/1269/762 1277/1271/764 \nf 1278/1272/765 1279/1273/765 1276/1270/763 \nf 1277/1271/764 1276/1270/763 1279/1273/765 \nf 1274/1268/761 1278/1272/765 1276/1270/763 \nf 1280/1274/765 1279/1273/765 1278/1272/765 \nf 1281/1275/766 1279/1273/765 1280/1274/765 \nf 1282/1276/767 1279/1273/765 1281/1275/766 \nf 1277/1271/764 1279/1273/765 1282/1276/767 \nf 1283/1277/768 1278/1272/765 1274/1268/761 \nf 1284/1278/765 1280/1274/765 1278/1272/765 \nf 1283/1277/768 1284/1278/765 1278/1272/765 \nf 1285/1279/769 1274/1268/761 1270/1264/757 \nf 1286/1280/770 1274/1268/761 1285/1279/769 \nf 1283/1277/768 1274/1268/761 1286/1280/770 \nf 1287/1281/771 1270/1264/757 1266/1260/753 \nf 1285/1279/769 1270/1264/757 1287/1281/771 \nf 1288/1282/772 1266/1260/753 1262/1256/749 \nf 1287/1281/771 1266/1260/753 1288/1282/772 \nf 1289/1283/773 1262/1256/749 1257/1251/744 \nf 1288/1282/772 1262/1256/749 1289/1283/773 \nf 1289/1283/773 1257/1251/744 1253/1247/740 \nf 1290/1284/774 1253/1247/740 1249/1243/736 \nf 1289/1283/773 1253/1247/740 1290/1284/774 \nf 1291/1285/775 1249/1243/736 1245/1239/732 \nf 1290/1284/774 1249/1243/736 1291/1285/775 \nf 1292/1286/776 1245/1239/732 1241/1235/728 \nf 1291/1285/775 1245/1239/732 1292/1286/776 \nf 1293/1287/777 1241/1235/728 1237/1231/724 \nf 1292/1286/776 1241/1235/728 1293/1287/777 \nf 1294/1288/778 1237/1231/724 1233/1227/720 \nf 1293/1287/777 1237/1231/724 1294/1288/778 \nf 1295/1289/779 1233/1227/720 1229/1223/716 \nf 1294/1288/778 1233/1227/720 1295/1289/779 \nf 1296/1290/780 1229/1223/716 1225/1219/712 \nf 1295/1289/779 1229/1223/716 1296/1290/780 \nf 1297/1291/781 1225/1219/712 1221/1215/708 \nf 1296/1290/780 1225/1219/712 1297/1291/781 \nf 1298/1292/782 1221/1215/708 1217/1211/704 \nf 1297/1291/781 1221/1215/708 1298/1292/782 \nf 1299/1293/783 1217/1211/704 1213/1207/700 \nf 1298/1292/782 1217/1211/704 1299/1293/783 \nf 1300/1294/784 1213/1207/700 1209/1203/696 \nf 1299/1293/783 1213/1207/700 1300/1294/784 \nf 1301/1295/785 1209/1203/696 1205/1199/692 \nf 1300/1294/784 1209/1203/696 1301/1295/785 \nf 1302/1296/786 1205/1199/692 1200/1195/688 \nf 1301/1295/785 1205/1199/692 1302/1296/786 \nf 1303/1297/787 1200/1195/688 1197/1192/685 \nf 1302/1296/786 1200/1195/688 1303/1297/787 \nf 1304/1298/788 1197/1192/685 1191/1186/679 \nf 1303/1297/787 1197/1192/685 1304/1298/788 \nf 1305/1299/789 1191/1186/679 1187/1182/675 \nf 1304/1298/788 1191/1186/679 1305/1299/789 \nf 1306/1300/790 1187/1182/675 1183/1178/671 \nf 1305/1299/789 1187/1182/675 1306/1300/790 \nf 1307/1301/791 1183/1178/671 1178/1173/666 \nf 1306/1300/790 1183/1178/671 1307/1301/791 \nf 1308/1302/792 1178/1173/666 1175/1170/663 \nf 1307/1301/791 1178/1173/666 1308/1302/792 \nf 1309/1303/793 1175/1170/663 1172/1167/660 \nf 1308/1302/792 1175/1170/663 1309/1303/793 \nf 1310/1167/794 1172/1167/660 1169/1164/657 \nf 1309/1303/793 1172/1167/660 1310/1167/794 \nf 1311/1304/795 1169/1164/657 1166/1161/654 \nf 1310/1167/794 1169/1164/657 1311/1304/795 \nf 1312/1161/796 1166/1161/654 1163/1158/651 \nf 1311/1304/795 1166/1161/654 1312/1161/796 \nf 1313/1305/797 1163/1158/651 1160/1155/647 \nf 1312/1161/796 1163/1158/651 1313/1305/797 \nf 1314/1155/798 1160/1155/647 1157/1152/644 \nf 1313/1305/797 1160/1155/647 1314/1155/798 \nf 1315/1152/799 1157/1152/644 1154/1149/641 \nf 1314/1155/798 1157/1152/644 1315/1152/799 \nf 1316/1306/800 1154/1149/641 1151/1146/638 \nf 1315/1152/799 1154/1149/641 1316/1306/800 \nf 1317/1146/801 1151/1146/638 1148/1143/635 \nf 1316/1306/800 1151/1146/638 1317/1146/801 \nf 1318/1143/802 1148/1143/635 1145/1140/632 \nf 1317/1146/801 1148/1143/635 1318/1143/802 \nf 1319/1140/803 1145/1140/632 1142/1137/629 \nf 1318/1143/802 1145/1140/632 1319/1140/803 \nf 1320/1137/804 1142/1137/629 1139/1134/626 \nf 1319/1140/803 1142/1137/629 1320/1137/804 \nf 1321/1134/805 1139/1134/626 1136/1131/623 \nf 1320/1137/804 1139/1134/626 1321/1134/805 \nf 1322/1307/806 1136/1131/623 1133/1128/620 \nf 1321/1134/805 1136/1131/623 1322/1307/806 \nf 1323/1128/807 1133/1128/620 1130/1125/617 \nf 1322/1307/806 1133/1128/620 1323/1128/807 \nf 1324/1308/808 1130/1125/617 1127/1122/614 \nf 1323/1128/807 1130/1125/617 1324/1308/808 \nf 1325/1309/809 1127/1122/614 1124/1119/611 \nf 1324/1308/808 1127/1122/614 1325/1309/809 \nf 1326/1119/810 1124/1119/611 1121/1116/608 \nf 1325/1309/809 1124/1119/611 1326/1119/810 \nf 1327/1310/811 1121/1116/608 1118/1113/605 \nf 1326/1119/810 1121/1116/608 1327/1310/811 \nf 1328/1311/812 1118/1113/605 1115/1110/602 \nf 1327/1310/811 1118/1113/605 1328/1311/812 \nf 1329/1312/813 1115/1110/602 1112/1107/599 \nf 1328/1311/812 1115/1110/602 1329/1312/813 \nf 1330/1313/814 1112/1107/599 1109/1104/596 \nf 1329/1312/813 1112/1107/599 1330/1313/814 \nf 1331/1104/815 1109/1104/596 1106/1101/593 \nf 1330/1313/814 1109/1104/596 1331/1104/815 \nf 1332/1314/816 1106/1101/593 1103/1098/590 \nf 1331/1104/815 1106/1101/593 1332/1314/816 \nf 1333/1098/817 1103/1098/590 1100/1095/587 \nf 1332/1314/816 1103/1098/590 1333/1098/817 \nf 1334/1315/818 1100/1095/587 1097/1092/584 \nf 1333/1098/817 1100/1095/587 1334/1315/818 \nf 1335/1092/819 1097/1092/584 1088/1084/579 \nf 1334/1315/818 1097/1092/584 1335/1092/819 \nf 1336/1316/820 1088/1084/579 1092/1088/377 \nf 1335/1092/819 1088/1084/579 1336/1316/820 \nf 1337/1317/821 1092/1088/377 1093/1089/377 \nf 1337/1317/821 1338/1088/822 1092/1088/377 \nf 1336/1316/820 1092/1088/377 1338/1088/822 \nf 1339/1318/823 1280/1274/765 1284/1278/765 \nf 1339/1318/823 1340/1319/824 1280/1274/765 \nf 1281/1275/766 1280/1274/765 1340/1319/824 \nf 1341/1320/825 1339/1318/823 1284/1278/765 \nf 1342/1321/826 1284/1278/765 1283/1277/768 \nf 1341/1320/825 1284/1278/765 1342/1321/826 \nf 1339/1318/823 1343/1322/827 1340/1319/824 \nf 1344/1323/828 1340/1319/824 1343/1322/827 \nf 1281/1275/766 1340/1319/824 1344/1323/828 \nf 1345/1324/829 1346/1325/830 1343/1322/827 \nf 1344/1323/828 1343/1322/827 1346/1325/830 \nf 1339/1318/823 1345/1324/829 1343/1322/827 \nf 1345/1324/829 1347/1326/831 1346/1325/830 \nf 1348/1327/832 1346/1325/830 1347/1326/831 \nf 1344/1323/828 1346/1325/830 1348/1327/832 \nf 1349/1328/833 1350/1329/834 1347/1326/831 \nf 1348/1327/832 1347/1326/831 1350/1329/834 \nf 1345/1324/829 1349/1328/833 1347/1326/831 \nf 1349/1328/833 1351/1330/835 1350/1329/834 \nf 1352/1331/836 1350/1329/834 1351/1330/835 \nf 1348/1327/832 1350/1329/834 1352/1331/836 \nf 1353/1332/837 1354/1333/838 1351/1330/835 \nf 1352/1331/836 1351/1330/835 1354/1333/838 \nf 1349/1328/833 1353/1332/837 1351/1330/835 \nf 1353/1332/837 1355/1334/839 1354/1333/838 \nf 1356/1335/840 1354/1333/838 1355/1334/839 \nf 1352/1331/836 1354/1333/838 1356/1335/840 \nf 1357/1336/841 1358/1337/842 1355/1334/839 \nf 1356/1335/840 1355/1334/839 1358/1337/842 \nf 1353/1332/837 1357/1336/841 1355/1334/839 \nf 1357/1336/841 1359/1338/843 1358/1337/842 \nf 1360/1339/844 1358/1337/842 1359/1338/843 \nf 1356/1335/840 1358/1337/842 1360/1339/844 \nf 1361/1340/845 1362/1341/846 1359/1338/843 \nf 1360/1339/844 1359/1338/843 1362/1341/846 \nf 1357/1336/841 1361/1340/845 1359/1338/843 \nf 1361/1340/845 1363/1342/847 1362/1341/846 \nf 1364/1343/848 1362/1341/846 1363/1342/847 \nf 1360/1339/844 1362/1341/846 1364/1343/848 \nf 1365/1344/849 1366/1345/850 1363/1342/847 \nf 1364/1343/848 1363/1342/847 1366/1345/850 \nf 1361/1340/845 1365/1344/849 1363/1342/847 \nf 1365/1344/849 1367/1346/851 1366/1345/850 \nf 1368/1347/852 1366/1345/850 1367/1346/851 \nf 1364/1343/848 1366/1345/850 1368/1347/852 \nf 1369/1348/853 1370/1349/854 1367/1346/851 \nf 1371/1350/855 1367/1346/851 1370/1349/854 \nf 1365/1344/849 1369/1348/853 1367/1346/851 \nf 1368/1347/852 1367/1346/851 1371/1350/855 \nf 1369/1348/853 1372/1351/856 1370/1349/854 \nf 1371/1350/855 1370/1349/854 1372/1351/856 \nf 1373/1352/857 1372/1351/856 1374/1353/858 \nf 1369/1348/853 1374/1353/858 1372/1351/856 \nf 1375/1354/859 1372/1351/856 1373/1352/857 \nf 1371/1350/855 1372/1351/856 1376/1355/860 \nf 1375/1354/859 1376/1355/860 1372/1351/856 \nf 1377/1356/861 1373/1352/857 1374/1353/858 \nf 1369/1348/853 1377/1356/861 1374/1353/858 \nf 1378/1357/862 1379/1358/863 1373/1352/857 \nf 1375/1354/859 1373/1352/857 1379/1358/863 \nf 1377/1356/861 1378/1357/862 1373/1352/857 \nf 1380/1359/864 1381/1360/865 1379/1358/863 \nf 1375/1354/859 1379/1358/863 1381/1360/865 \nf 1378/1357/862 1380/1359/864 1379/1358/863 \nf 1380/1359/864 1382/1361/866 1381/1360/865 \nf 1383/1362/867 1381/1360/865 1382/1361/866 \nf 1375/1354/859 1381/1360/865 1383/1362/867 \nf 1384/1363/868 1385/1364/869 1382/1361/866 \nf 1383/1362/867 1382/1361/866 1385/1364/869 \nf 1380/1359/864 1384/1363/868 1382/1361/866 \nf 1384/1363/868 1386/1365/870 1385/1364/869 \nf 1387/1366/871 1385/1364/869 1386/1365/870 \nf 1383/1362/867 1385/1364/869 1387/1366/871 \nf 1388/1367/872 1389/1368/873 1386/1365/870 \nf 1387/1366/871 1386/1365/870 1389/1368/873 \nf 1384/1363/868 1388/1367/872 1386/1365/870 \nf 1388/1367/872 1390/1369/874 1389/1368/873 \nf 1391/1370/875 1389/1368/873 1390/1369/874 \nf 1387/1366/871 1389/1368/873 1391/1370/875 \nf 1392/1371/876 1393/1372/877 1390/1369/874 \nf 1391/1370/875 1390/1369/874 1393/1372/877 \nf 1388/1367/872 1392/1371/876 1390/1369/874 \nf 1392/1371/876 1394/1373/878 1393/1372/877 \nf 1395/1372/879 1393/1372/877 1394/1373/878 \nf 1391/1370/875 1393/1372/877 1395/1372/879 \nf 1396/1374/880 1397/1375/881 1394/1373/878 \nf 1398/1376/882 1394/1373/878 1397/1375/881 \nf 1392/1371/876 1396/1374/880 1394/1373/878 \nf 1395/1372/879 1394/1373/878 1398/1376/882 \nf 1396/1374/880 1399/1377/883 1397/1375/881 \nf 1398/1376/882 1397/1375/881 1399/1377/883 \nf 1400/1378/884 1401/1379/885 1399/1377/883 \nf 1402/1380/886 1399/1377/883 1401/1379/885 \nf 1396/1374/880 1400/1378/884 1399/1377/883 \nf 1398/1376/882 1399/1377/883 1402/1380/886 \nf 1400/1378/884 1403/1381/887 1401/1379/885 \nf 1402/1380/886 1401/1379/885 1403/1381/887 \nf 1404/1382/888 1405/1383/889 1403/1381/887 \nf 1406/1384/890 1403/1381/887 1405/1383/889 \nf 1400/1378/884 1404/1382/888 1403/1381/887 \nf 1402/1380/886 1403/1381/887 1406/1384/890 \nf 1404/1382/888 1407/1385/891 1405/1383/889 \nf 1406/1384/890 1405/1383/889 1407/1385/891 \nf 1408/1386/892 1409/1387/893 1407/1385/891 \nf 1410/1388/894 1407/1385/891 1409/1387/893 \nf 1404/1382/888 1408/1386/892 1407/1385/891 \nf 1406/1384/890 1407/1385/891 1410/1388/894 \nf 1408/1386/892 1411/1389/895 1409/1387/893 \nf 1410/1388/894 1409/1387/893 1411/1389/895 \nf 1412/1390/896 1413/1391/897 1411/1389/895 \nf 1414/1392/898 1411/1389/895 1413/1391/897 \nf 1408/1386/892 1412/1390/896 1411/1389/895 \nf 1410/1388/894 1411/1389/895 1414/1392/898 \nf 1412/1390/896 1415/1393/899 1413/1391/897 \nf 1414/1392/898 1413/1391/897 1415/1393/899 \nf 1416/1394/900 1417/1395/901 1415/1393/899 \nf 1418/1396/902 1415/1393/899 1417/1395/901 \nf 1412/1390/896 1416/1394/900 1415/1393/899 \nf 1414/1392/898 1415/1393/899 1418/1396/902 \nf 1416/1394/900 1419/1397/903 1417/1395/901 \nf 1418/1396/902 1417/1395/901 1419/1397/903 \nf 1420/1398/904 1421/1399/905 1419/1397/903 \nf 1422/1400/906 1419/1397/903 1421/1399/905 \nf 1416/1394/900 1420/1398/904 1419/1397/903 \nf 1418/1396/902 1419/1397/903 1422/1400/906 \nf 1420/1398/904 1423/1401/907 1421/1399/905 \nf 1422/1400/906 1421/1399/905 1423/1401/907 \nf 1424/1402/908 1425/1403/909 1423/1401/907 \nf 1426/1404/910 1423/1401/907 1425/1403/909 \nf 1420/1398/904 1424/1402/908 1423/1401/907 \nf 1422/1400/906 1423/1401/907 1426/1404/910 \nf 1424/1402/908 1427/1405/911 1425/1403/909 \nf 1426/1404/910 1425/1403/909 1427/1405/911 \nf 1428/1406/912 1429/1407/913 1427/1405/911 \nf 1430/1408/914 1427/1405/911 1429/1407/913 \nf 1424/1402/908 1428/1406/912 1427/1405/911 \nf 1426/1404/910 1427/1405/911 1430/1408/914 \nf 1428/1406/912 1431/1409/915 1429/1407/913 \nf 1432/1410/916 1429/1407/913 1431/1409/915 \nf 1430/1408/914 1429/1407/913 1432/1410/916 \nf 1433/1411/917 1434/1412/918 1431/1409/915 \nf 1432/1410/916 1431/1409/915 1434/1412/918 \nf 1428/1406/912 1433/1411/917 1431/1409/915 \nf 1433/1411/917 1435/1413/919 1434/1412/918 \nf 1436/1414/920 1434/1412/918 1435/1413/919 \nf 1432/1410/916 1434/1412/918 1436/1414/920 \nf 1437/1415/921 1438/1416/922 1435/1413/919 \nf 1436/1414/920 1435/1413/919 1438/1416/922 \nf 1433/1411/917 1437/1415/921 1435/1413/919 \nf 1437/1415/921 1439/1417/923 1438/1416/922 \nf 1440/1418/924 1438/1416/922 1439/1417/923 \nf 1436/1414/920 1438/1416/922 1440/1418/924 \nf 1441/1419/925 1442/1420/926 1439/1417/923 \nf 1440/1418/924 1439/1417/923 1442/1420/926 \nf 1437/1415/921 1441/1419/925 1439/1417/923 \nf 1441/1419/925 1443/1421/927 1442/1420/926 \nf 1444/1422/928 1442/1420/926 1443/1421/927 \nf 1440/1418/924 1442/1420/926 1444/1422/928 \nf 1445/1423/929 1446/1424/930 1443/1421/927 \nf 1444/1422/928 1443/1421/927 1446/1424/930 \nf 1441/1419/925 1445/1423/929 1443/1421/927 \nf 1445/1423/929 1447/1425/931 1446/1424/930 \nf 1448/1426/932 1446/1424/930 1447/1425/933 \nf 1444/1422/928 1446/1424/930 1448/1426/932 \nf 1449/1427/934 1450/1428/935 1447/1425/931 \nf 1448/1426/932 1447/1425/933 1450/1428/935 \nf 1445/1423/929 1449/1427/934 1447/1425/931 \nf 1449/1427/934 1451/1429/936 1450/1428/935 \nf 1452/1430/937 1450/1428/935 1451/1429/936 \nf 1448/1426/932 1450/1428/935 1452/1430/937 \nf 1453/1431/938 1454/1432/939 1451/1429/936 \nf 1452/1430/937 1451/1429/936 1454/1432/939 \nf 1449/1427/934 1453/1431/938 1451/1429/936 \nf 1453/1431/938 1455/1433/940 1454/1432/939 \nf 1456/1434/941 1454/1432/939 1455/1433/940 \nf 1452/1430/937 1454/1432/939 1456/1434/941 \nf 1457/1435/942 1458/1436/943 1455/1433/940 \nf 1456/1434/941 1455/1433/940 1458/1436/943 \nf 1453/1431/938 1457/1435/942 1455/1433/940 \nf 1459/1437/944 1458/1436/943 1460/1438/945 \nf 1457/1435/942 1460/1438/945 1458/1436/943 \nf 1461/1439/946 1458/1436/943 1459/1437/944 \nf 1456/1434/941 1458/1436/943 1462/1440/947 \nf 1461/1439/946 1462/1440/947 1458/1436/943 \nf 1463/1441/948 1459/1437/944 1460/1438/945 \nf 1457/1435/942 1463/1441/948 1460/1438/945 \nf 1463/1441/948 1464/1442/949 1459/1437/944 \nf 1461/1439/946 1459/1437/944 1464/1442/949 \nf 1465/1443/950 1466/1444/951 1464/1442/949 \nf 1461/1439/946 1464/1442/949 1466/1444/951 \nf 1463/1441/948 1465/1443/950 1464/1442/949 \nf 1465/1443/950 1467/1445/952 1466/1444/951 \nf 1468/1446/953 1466/1444/951 1467/1445/952 \nf 1461/1439/946 1466/1444/951 1468/1446/953 \nf 1469/1447/954 1470/1448/955 1467/1445/952 \nf 1468/1446/953 1467/1445/952 1470/1448/955 \nf 1465/1443/950 1469/1447/954 1467/1445/952 \nf 1469/1447/954 1471/1449/956 1470/1448/955 \nf 1472/1450/957 1470/1448/955 1471/1449/956 \nf 1468/1446/953 1470/1448/955 1472/1450/957 \nf 1473/1451/958 1474/1452/959 1471/1449/956 \nf 1472/1450/957 1471/1449/956 1474/1452/959 \nf 1469/1447/954 1473/1451/958 1471/1449/956 \nf 1473/1451/958 1475/1453/960 1474/1452/959 \nf 1476/1454/961 1474/1452/959 1475/1453/960 \nf 1472/1450/957 1474/1452/959 1476/1454/961 \nf 1477/1455/962 1478/1456/963 1475/1453/960 \nf 1476/1454/961 1475/1453/960 1478/1456/963 \nf 1473/1451/958 1477/1455/962 1475/1453/960 \nf 1477/1455/962 1479/1457/964 1478/1456/963 \nf 1480/1458/965 1478/1456/963 1479/1457/964 \nf 1476/1454/961 1478/1456/963 1480/1458/965 \nf 1481/1459/966 1482/1460/967 1479/1457/964 \nf 1480/1458/965 1479/1457/964 1482/1460/967 \nf 1477/1455/962 1481/1459/966 1479/1457/964 \nf 1481/1459/966 1483/1461/968 1482/1460/967 \nf 1484/1462/969 1482/1460/967 1483/1461/968 \nf 1480/1458/965 1482/1460/967 1484/1462/969 \nf 1485/1463/970 1486/1464/971 1483/1461/968 \nf 1484/1462/969 1483/1461/968 1486/1464/971 \nf 1481/1459/966 1485/1463/970 1483/1461/968 \nf 1485/1463/970 1487/1465/972 1486/1464/971 \nf 1488/1466/973 1486/1464/971 1487/1465/972 \nf 1484/1462/969 1486/1464/971 1488/1466/973 \nf 1489/1467/974 1490/1468/975 1487/1465/972 \nf 1488/1466/973 1487/1465/972 1490/1468/975 \nf 1485/1463/970 1489/1467/974 1487/1465/972 \nf 1489/1467/974 1491/1469/976 1490/1468/975 \nf 1492/1470/977 1490/1468/975 1491/1469/976 \nf 1488/1466/973 1490/1468/975 1492/1470/977 \nf 1493/1471/978 1494/1472/979 1491/1469/976 \nf 1495/1473/980 1491/1469/976 1494/1472/979 \nf 1489/1467/974 1493/1471/978 1491/1469/976 \nf 1492/1470/977 1491/1469/976 1495/1473/980 \nf 1493/1471/978 1496/1474/981 1494/1472/979 \nf 1495/1473/980 1494/1472/979 1496/1474/981 \nf 1497/1475/982 1498/1476/983 1496/1474/981 \nf 1499/1477/984 1496/1474/981 1498/1476/983 \nf 1493/1471/978 1497/1475/982 1496/1474/981 \nf 1495/1473/980 1496/1474/981 1499/1477/984 \nf 1497/1475/982 1500/1478/985 1498/1476/983 \nf 1499/1477/984 1498/1476/983 1500/1478/985 \nf 1501/1479/986 1502/1480/987 1500/1478/985 \nf 1503/1481/988 1500/1478/985 1502/1480/987 \nf 1497/1475/982 1501/1479/986 1500/1478/985 \nf 1499/1477/984 1500/1478/985 1503/1481/988 \nf 1501/1479/986 1504/1482/989 1502/1480/987 \nf 1503/1481/988 1502/1480/987 1504/1482/989 \nf 1505/1483/990 1506/1484/991 1504/1482/989 \nf 1507/1485/992 1504/1482/989 1506/1484/991 \nf 1501/1479/986 1505/1483/990 1504/1482/989 \nf 1503/1481/988 1504/1482/989 1507/1485/992 \nf 1505/1483/990 1508/1486/993 1506/1484/991 \nf 1509/1487/994 1506/1484/991 1508/1486/993 \nf 1507/1485/992 1506/1484/991 1509/1487/994 \nf 1510/1488/995 1511/1489/996 1508/1486/993 \nf 1512/1490/997 1508/1486/993 1511/1489/996 \nf 1505/1483/990 1510/1488/995 1508/1486/993 \nf 1509/1487/994 1508/1486/993 1512/1490/997 \nf 1513/1491/998 1514/1492/999 1511/1489/996 \nf 1515/1493/1000 1511/1489/996 1514/1492/999 \nf 1510/1488/995 1513/1491/998 1511/1489/996 \nf 1512/1490/997 1511/1489/996 1515/1493/1000 \nf 1516/1494/1001 1517/1495/1002 1514/1492/999 \nf 1518/1496/1003 1514/1492/999 1517/1495/1002 \nf 1513/1491/998 1516/1494/1001 1514/1492/999 \nf 1515/1493/1000 1514/1492/999 1518/1496/1003 \nf 1519/1497/1004 1520/1498/1005 1517/1495/1002 \nf 1521/1499/1006 1517/1495/1002 1520/1498/1005 \nf 1516/1494/1001 1519/1497/1004 1517/1495/1002 \nf 1518/1496/1003 1517/1495/1002 1521/1499/1006 \nf 1522/1500/1007 1523/1501/1008 1520/1498/1005 \nf 1524/1502/1009 1520/1498/1005 1523/1501/1008 \nf 1519/1497/1004 1522/1500/1007 1520/1498/1005 \nf 1521/1499/1006 1520/1498/1005 1524/1502/1009 \nf 1525/1503/1010 1526/1504/1011 1523/1501/1008 \nf 1527/1505/1012 1523/1501/1008 1526/1504/1011 \nf 1522/1500/1007 1525/1503/1010 1523/1501/1008 \nf 1524/1502/1009 1523/1501/1008 1527/1505/1012 \nf 1528/1506/1013 1529/1507/1014 1526/1504/1011 \nf 1530/1508/1015 1526/1504/1011 1529/1507/1014 \nf 1525/1503/1010 1528/1506/1013 1526/1504/1011 \nf 1527/1505/1012 1526/1504/1011 1530/1508/1015 \nf 1531/1509/1016 1532/1510/1017 1529/1507/1014 \nf 1533/1511/1018 1529/1507/1014 1532/1510/1017 \nf 1528/1506/1013 1531/1509/1016 1529/1507/1014 \nf 1530/1508/1015 1529/1507/1014 1533/1511/1018 \nf 1534/1512/1019 1535/1513/1020 1532/1510/1017 \nf 1536/1514/1021 1532/1510/1017 1535/1513/1020 \nf 1531/1509/1016 1534/1512/1019 1532/1510/1017 \nf 1533/1511/1018 1532/1510/1017 1536/1514/1021 \nf 1537/1515/1022 1538/1516/1023 1535/1513/1020 \nf 1539/1517/1024 1535/1513/1020 1538/1516/1023 \nf 1534/1512/1019 1537/1515/1022 1535/1513/1020 \nf 1536/1514/1021 1535/1513/1020 1539/1517/1024 \nf 1540/1518/1025 1541/1519/1026 1538/1516/1023 \nf 1542/1520/1027 1538/1516/1023 1541/1519/1026 \nf 1537/1515/1022 1540/1518/1025 1538/1516/1023 \nf 1539/1517/1024 1538/1516/1023 1542/1520/1027 \nf 1543/1521/1028 1544/1522/1029 1541/1519/1026 \nf 1545/1523/1030 1541/1519/1026 1544/1522/1029 \nf 1540/1518/1025 1543/1521/1028 1541/1519/1026 \nf 1542/1520/1027 1541/1519/1026 1545/1523/1030 \nf 1546/1524/1031 1547/1525/1032 1544/1522/1029 \nf 1548/1526/1033 1544/1522/1029 1547/1525/1032 \nf 1543/1521/1028 1546/1524/1031 1544/1522/1029 \nf 1545/1523/1030 1544/1522/1029 1548/1526/1033 \nf 1549/1527/1034 1550/1528/1035 1547/1525/1032 \nf 1551/1529/1036 1547/1525/1032 1550/1528/1035 \nf 1546/1524/1031 1549/1527/1034 1547/1525/1032 \nf 1548/1526/1033 1547/1525/1032 1551/1529/1036 \nf 1552/1530/1037 1553/1531/1038 1550/1528/1035 \nf 1554/1532/1039 1550/1528/1035 1553/1531/1038 \nf 1549/1527/1034 1552/1530/1037 1550/1528/1035 \nf 1551/1529/1036 1550/1528/1035 1554/1532/1039 \nf 1555/1533/1040 1556/1534/1041 1553/1531/1038 \nf 1557/1535/1042 1553/1531/1038 1556/1534/1041 \nf 1552/1530/1037 1555/1533/1040 1553/1531/1038 \nf 1554/1532/1039 1553/1531/1038 1557/1535/1042 \nf 1558/1536/1043 1559/1537/1044 1556/1534/1041 \nf 1560/1538/1045 1556/1534/1041 1559/1537/1044 \nf 1555/1533/1040 1558/1536/1043 1556/1534/1041 \nf 1557/1535/1042 1556/1534/1041 1560/1538/1045 \nf 1561/1539/1046 1562/1540/1047 1559/1537/1044 \nf 1563/1541/1048 1559/1537/1044 1562/1540/1047 \nf 1558/1536/1043 1561/1539/1046 1559/1537/1044 \nf 1560/1538/1045 1559/1537/1044 1563/1541/1048 \nf 1564/1542/1049 1565/1543/1050 1562/1540/1047 \nf 1566/1544/1051 1562/1540/1047 1565/1543/1050 \nf 1561/1539/1046 1564/1542/1049 1562/1540/1047 \nf 1563/1541/1048 1562/1540/1047 1566/1544/1051 \nf 1567/1545/1052 1568/1546/1053 1565/1543/1050 \nf 1569/1547/1054 1565/1543/1050 1568/1546/1053 \nf 1564/1542/1049 1567/1545/1052 1565/1543/1050 \nf 1566/1544/1051 1565/1543/1050 1569/1547/1054 \nf 1570/1548/1055 1571/1549/1056 1568/1546/1053 \nf 1572/1550/1057 1568/1546/1053 1571/1549/1056 \nf 1567/1545/1052 1570/1548/1055 1568/1546/1053 \nf 1569/1547/1054 1568/1546/1053 1572/1550/1057 \nf 1573/1551/1058 1574/1552/1059 1571/1549/1056 \nf 1575/1553/1060 1571/1549/1056 1574/1552/1059 \nf 1570/1548/1055 1573/1551/1058 1571/1549/1056 \nf 1572/1550/1057 1571/1549/1056 1575/1553/1060 \nf 1576/1554/1061 1577/1555/1062 1574/1552/1059 \nf 1578/1556/1063 1574/1552/1059 1577/1555/1062 \nf 1573/1551/1058 1576/1554/1061 1574/1552/1059 \nf 1575/1553/1060 1574/1552/1059 1578/1556/1063 \nf 1579/1557/1064 1580/1558/1065 1577/1555/1062 \nf 1581/1559/1066 1577/1555/1062 1580/1558/1065 \nf 1576/1554/1061 1579/1557/1064 1577/1555/1062 \nf 1578/1556/1063 1577/1555/1062 1581/1559/1066 \nf 1582/1560/1067 1583/1561/1068 1580/1558/1065 \nf 1584/1562/1069 1580/1558/1065 1583/1561/1068 \nf 1579/1557/1064 1582/1560/1067 1580/1558/1065 \nf 1581/1559/1066 1580/1558/1065 1584/1562/1069 \nf 1585/1563/1070 1586/1564/1071 1583/1561/1068 \nf 1584/1562/1069 1583/1561/1068 1586/1564/1071 \nf 1582/1560/1067 1585/1563/1070 1583/1561/1068 \nf 1587/1565/1072 1588/1566/1073 1586/1564/1071 \nf 1589/1567/1074 1586/1564/1071 1588/1566/1073 \nf 1585/1563/1070 1587/1565/1072 1586/1564/1071 \nf 1584/1562/1069 1586/1564/1071 1589/1567/1074 \nf 1590/1568/1075 1591/1569/1076 1588/1566/1073 \nf 1592/1570/1077 1588/1566/1073 1591/1569/1076 \nf 1587/1565/1072 1590/1568/1075 1588/1566/1073 \nf 1589/1567/1074 1588/1566/1073 1592/1570/1077 \nf 1593/1571/1 1594/1572/1 1591/1569/1076 \nf 1595/1573/1078 1591/1569/1076 1594/1572/1 \nf 1590/1568/1075 1593/1571/1 1591/1569/1076 \nf 1592/1570/1077 1591/1569/1076 1595/1573/1078 \nf 44/42/1 1594/1572/1 1593/1571/1 \nf 44/42/1 12/12/1 1594/1572/1 \nf 1079/1075/1079 1594/1572/1 12/12/1 \nf 1596/1574/1080 1594/1572/1 1079/1075/1079 \nf 1595/1573/1078 1594/1572/1 1596/1574/1080 \nf 1597/1575/1081 1593/1571/1 1590/1568/1075 \nf 68/65/1 44/42/1 1593/1571/1 \nf 1597/1575/1081 68/65/1 1593/1571/1 \nf 1598/1576/1082 1590/1568/1075 1587/1565/1072 \nf 1597/1575/1081 1590/1568/1075 1598/1576/1082 \nf 1599/1577/1083 1587/1565/1072 1585/1563/1070 \nf 1598/1576/1082 1587/1565/1072 1599/1577/1083 \nf 1600/1578/1084 1585/1563/1070 1582/1560/1067 \nf 1599/1577/1083 1585/1563/1070 1600/1578/1084 \nf 1601/1579/1085 1582/1560/1067 1579/1557/1064 \nf 1600/1578/1084 1582/1560/1067 1601/1579/1085 \nf 1602/1580/1086 1579/1557/1064 1576/1554/1061 \nf 1601/1579/1085 1579/1557/1064 1602/1580/1086 \nf 1603/1581/1087 1576/1554/1061 1573/1551/1058 \nf 1602/1580/1086 1576/1554/1061 1603/1581/1087 \nf 1604/1582/1088 1573/1551/1058 1570/1548/1055 \nf 1603/1581/1087 1573/1551/1058 1604/1582/1088 \nf 1605/1583/1089 1570/1548/1055 1567/1545/1052 \nf 1604/1582/1088 1570/1548/1055 1605/1583/1089 \nf 1606/1584/1090 1567/1545/1052 1564/1542/1049 \nf 1605/1583/1089 1567/1545/1052 1606/1584/1090 \nf 1607/1585/1091 1564/1542/1049 1561/1539/1046 \nf 1606/1584/1090 1564/1542/1049 1607/1585/1091 \nf 1608/1586/1092 1561/1539/1046 1558/1536/1043 \nf 1607/1585/1091 1561/1539/1046 1608/1586/1092 \nf 1609/1587/1093 1558/1536/1043 1555/1533/1040 \nf 1608/1586/1092 1558/1536/1043 1609/1587/1093 \nf 1610/1588/1094 1555/1533/1040 1552/1530/1037 \nf 1609/1587/1093 1555/1533/1040 1610/1588/1094 \nf 1611/1589/1095 1552/1530/1037 1549/1527/1034 \nf 1610/1588/1094 1552/1530/1037 1611/1589/1095 \nf 1612/1590/1096 1549/1527/1034 1546/1524/1031 \nf 1611/1589/1095 1549/1527/1034 1612/1590/1096 \nf 1613/1591/1097 1546/1524/1031 1543/1521/1028 \nf 1612/1590/1096 1546/1524/1031 1613/1591/1097 \nf 1614/1592/1098 1543/1521/1028 1540/1518/1025 \nf 1613/1591/1097 1543/1521/1028 1614/1592/1098 \nf 1615/1593/1099 1540/1518/1025 1537/1515/1022 \nf 1614/1592/1098 1540/1518/1025 1615/1593/1099 \nf 1616/1594/1100 1537/1515/1022 1534/1512/1019 \nf 1615/1593/1099 1537/1515/1022 1616/1594/1100 \nf 1617/1595/1101 1534/1512/1019 1531/1509/1016 \nf 1616/1594/1100 1534/1512/1019 1617/1595/1101 \nf 1618/1596/1102 1531/1509/1016 1528/1506/1013 \nf 1617/1595/1101 1531/1509/1016 1618/1596/1102 \nf 1619/1597/1103 1528/1506/1013 1525/1503/1010 \nf 1618/1596/1102 1528/1506/1013 1619/1597/1103 \nf 1620/1598/1104 1525/1503/1010 1522/1500/1007 \nf 1619/1597/1103 1525/1503/1010 1620/1598/1104 \nf 1621/1599/1105 1522/1500/1007 1519/1497/1004 \nf 1620/1598/1104 1522/1500/1007 1621/1599/1105 \nf 1622/1600/1106 1519/1497/1004 1516/1494/1001 \nf 1621/1599/1105 1519/1497/1004 1622/1600/1106 \nf 1623/1601/1107 1516/1494/1001 1513/1491/998 \nf 1622/1600/1106 1516/1494/1001 1623/1601/1107 \nf 1624/1602/1108 1513/1491/998 1510/1488/995 \nf 1623/1601/1107 1513/1491/998 1624/1602/1108 \nf 1625/1603/1109 1510/1488/995 1505/1483/990 \nf 1624/1602/1108 1510/1488/995 1625/1603/1109 \nf 1626/1604/1110 1505/1483/990 1501/1479/986 \nf 1625/1603/1109 1505/1483/990 1626/1604/1110 \nf 1627/1605/1111 1501/1479/986 1497/1475/982 \nf 1626/1604/1110 1501/1479/986 1627/1605/1111 \nf 1628/1606/1112 1497/1475/982 1493/1471/978 \nf 1627/1605/1111 1497/1475/982 1628/1606/1112 \nf 1629/1607/1113 1493/1471/978 1489/1467/974 \nf 1628/1606/1112 1493/1471/978 1629/1607/1113 \nf 1630/1608/1114 1489/1467/974 1485/1463/970 \nf 1629/1607/1113 1489/1467/974 1630/1608/1114 \nf 1631/1609/1115 1485/1463/970 1481/1459/966 \nf 1630/1608/1114 1485/1463/970 1631/1609/1115 \nf 1632/1610/1116 1481/1459/966 1477/1455/962 \nf 1631/1609/1115 1481/1459/966 1632/1610/1116 \nf 1633/1611/1117 1477/1455/962 1473/1451/958 \nf 1632/1610/1116 1477/1455/962 1633/1611/1117 \nf 1634/1612/1118 1473/1451/958 1469/1447/954 \nf 1633/1611/1117 1473/1451/958 1634/1612/1118 \nf 1635/1613/1119 1469/1447/954 1465/1443/950 \nf 1634/1612/1118 1469/1447/954 1635/1613/1119 \nf 1636/1614/1120 1465/1443/950 1463/1441/948 \nf 1635/1613/1119 1465/1443/950 1636/1614/1120 \nf 1636/1614/1120 1463/1441/948 1457/1435/942 \nf 1637/1615/1121 1457/1435/942 1453/1431/938 \nf 1636/1614/1120 1457/1435/942 1637/1615/1121 \nf 1638/1616/1122 1453/1431/938 1449/1427/934 \nf 1637/1615/1121 1453/1431/938 1638/1616/1122 \nf 1639/1617/1123 1449/1427/934 1445/1423/929 \nf 1638/1616/1122 1449/1427/934 1639/1617/1123 \nf 1640/1618/1124 1445/1423/929 1441/1419/925 \nf 1639/1617/1123 1445/1423/929 1640/1618/1124 \nf 1641/1619/1125 1441/1419/925 1437/1415/921 \nf 1640/1618/1124 1441/1419/925 1641/1619/1125 \nf 1642/1620/1126 1437/1415/921 1433/1411/917 \nf 1641/1619/1125 1437/1415/921 1642/1620/1126 \nf 1643/1621/1127 1433/1411/917 1428/1406/912 \nf 1642/1620/1126 1433/1411/917 1643/1621/1127 \nf 1644/1622/1128 1428/1406/912 1424/1402/908 \nf 1643/1621/1127 1428/1406/912 1644/1622/1128 \nf 1645/1623/1129 1424/1402/908 1420/1398/904 \nf 1644/1622/1128 1424/1402/908 1645/1623/1129 \nf 1646/1624/1130 1420/1398/904 1416/1394/900 \nf 1645/1623/1129 1420/1398/904 1646/1624/1130 \nf 1647/1625/1131 1416/1394/900 1412/1390/896 \nf 1646/1624/1130 1416/1394/900 1647/1625/1131 \nf 1648/1626/1132 1412/1390/896 1408/1386/892 \nf 1647/1625/1131 1412/1390/896 1648/1626/1132 \nf 1649/1627/1133 1408/1386/892 1404/1382/888 \nf 1648/1626/1132 1408/1386/892 1649/1627/1133 \nf 1650/1628/1134 1404/1382/888 1400/1378/884 \nf 1649/1627/1133 1404/1382/888 1650/1628/1134 \nf 1651/1629/1135 1400/1378/884 1396/1374/880 \nf 1650/1628/1134 1400/1378/884 1651/1629/1135 \nf 1652/1630/1136 1396/1374/880 1392/1371/876 \nf 1651/1629/1135 1396/1374/880 1652/1630/1136 \nf 1653/1631/1137 1392/1371/876 1388/1367/872 \nf 1652/1630/1136 1392/1371/876 1653/1631/1137 \nf 1654/1632/1138 1388/1367/872 1384/1363/868 \nf 1653/1631/1137 1388/1367/872 1654/1632/1138 \nf 1655/1633/1139 1384/1363/868 1380/1359/864 \nf 1654/1632/1138 1384/1363/868 1655/1633/1139 \nf 1656/1634/1140 1380/1359/864 1378/1357/862 \nf 1655/1633/1139 1380/1359/864 1656/1634/1140 \nf 1656/1634/1140 1378/1357/862 1377/1356/861 \nf 1657/1635/1141 1377/1356/861 1369/1348/853 \nf 1658/1636/1142 1377/1356/861 1657/1635/1141 \nf 1656/1634/1140 1377/1356/861 1658/1636/1142 \nf 1657/1635/1141 1369/1348/853 1365/1344/849 \nf 1659/1637/1143 1365/1344/849 1361/1340/845 \nf 1657/1635/1141 1365/1344/849 1659/1637/1143 \nf 1660/1638/1144 1361/1340/845 1357/1336/841 \nf 1659/1637/1143 1361/1340/845 1660/1638/1144 \nf 1661/1639/1145 1357/1336/841 1353/1332/837 \nf 1660/1638/1144 1357/1336/841 1661/1639/1145 \nf 1662/1640/1146 1353/1332/837 1349/1328/833 \nf 1661/1639/1145 1353/1332/837 1662/1640/1146 \nf 1663/1641/1147 1349/1328/833 1345/1324/829 \nf 1662/1640/1146 1349/1328/833 1663/1641/1147 \nf 1664/1642/1148 1345/1324/829 1339/1318/823 \nf 1663/1641/1147 1345/1324/829 1664/1642/1148 \nf 1664/1642/1148 1339/1318/823 1341/1320/825 \nf 46/44/1 4/4/1 12/12/1 \nf 45/43/1 46/44/1 12/12/1 \nf 44/42/1 45/43/1 12/12/1 \nf 47/44/1149 4/4/1 46/44/1 \nf 47/44/1149 37/35/1150 4/4/1 \nf 84/81/1151 4/4/1 37/35/1150 \nf 1665/1643/48 69/66/48 68/65/48 \nf 1597/1575/1081 1665/1643/1152 68/65/1 \nf 1665/1643/48 1666/1644/48 69/66/48 \nf 1667/1645/1153 69/66/48 1666/1644/48 \nf 1668/1646/1154 70/67/1152 69/66/1155 \nf 1669/1647/1156 1668/1646/1154 69/66/1155 \nf 1670/1648/1157 1669/1647/1156 69/66/1155 \nf 1667/1645/1153 1670/1648/1153 69/66/48 \nf 1597/1575/1081 1666/1644/1155 1665/1643/1152 \nf 1671/1649/1158 1667/1645/1157 1666/1644/1155 \nf 1597/1575/1081 1671/1649/1158 1666/1644/1155 \nf 71/68/1 67/64/1 70/67/1152 \nf 1668/1646/1154 71/68/1 70/67/1152 \nf 48/45/26 1672/1650/26 37/35/26 \nf 1673/1651/1159 37/35/26 1672/1650/26 \nf 1674/1652/1160 84/81/1151 37/35/1150 \nf 1673/1651/1159 1674/1652/1161 37/35/26 \nf 49/46/1162 1672/1650/26 48/45/26 \nf 1675/1653/1163 1673/1651/1164 1672/1650/26 \nf 1676/1654/1165 1672/1650/26 49/46/1162 \nf 1677/1655/1166 1672/1650/26 1676/1654/1165 \nf 1677/1655/1166 1675/1653/1163 1672/1650/26 \nf 1596/1574/1080 1079/1075/1079 1080/1076/1167 \nf 1678/1656/1168 1080/1076/1167 1081/1077/1169 \nf 1678/1656/1168 1596/1574/1080 1080/1076/1167 \nf 1679/1657/1170 1081/1077/1169 1082/1078/1171 \nf 1679/1657/1170 1678/1656/1168 1081/1077/1169 \nf 1680/1658/1172 1082/1078/1171 1083/1079/1173 \nf 1680/1658/1172 1679/1657/1170 1082/1078/1171 \nf 1681/1659/1174 1083/1079/1173 1084/1080/1175 \nf 1681/1659/1174 1680/1658/1172 1083/1079/1173 \nf 1682/1660/1176 1084/1080/1175 1085/1081/1177 \nf 1682/1660/1176 1681/1659/1174 1084/1080/1175 \nf 1683/1661/1178 1085/1081/1177 1086/1082/1179 \nf 1683/1661/1178 1682/1660/1176 1085/1081/1177 \nf 1684/1662/1180 1086/1082/1179 1087/1083/1181 \nf 1684/1662/1180 1683/1661/1178 1086/1082/1179 \nf 1685/1663/1182 1087/1083/1181 1078/1074/578 \nf 1685/1663/1182 1684/1662/1180 1087/1083/1181 \nf 853/849/440 1685/1663/1182 1078/1074/578 \nf 1686/1664/2 1687/1665/2 82/79/2 \nf 83/80/1 82/79/1 1687/1665/1151 \nf 85/82/2 1686/1664/2 82/79/2 \nf 83/80/1 1687/1665/1151 1686/1664/1183 \nf 1688/1666/1184 1686/1664/2 85/82/2 \nf 1689/1667/1154 83/80/1 1686/1664/1183 \nf 1690/1668/1184 1686/1664/2 1688/1666/1184 \nf 1689/1667/1154 1686/1664/1183 1690/1668/1185 \nf 1674/1652/1160 85/82/1183 84/81/1151 \nf 1674/1652/1160 1688/1666/1185 85/82/1183 \nf 15/15/1186 1077/1073/1 14/14/1 \nf 1691/1669/1187 1077/1073/1 15/15/1186 \nf 1692/1670/1188 1077/1073/1 1691/1669/1187 \nf 1692/1670/1188 1076/1072/1189 1077/1073/1 \nf 1689/1667/1154 79/76/1190 83/80/1 \nf 1693/1671/1191 1694/1672/1191 1695/1673/1191 \nf 1696/1674/1192 1695/1673/1193 1694/1672/1191 \nf 1693/1671/1191 1695/1673/1191 1697/1675/1191 \nf 1696/1674/1194 1697/1675/1191 1695/1673/1191 \nf 1693/1671/1191 1698/1676/1191 1694/1672/1191 \nf 1699/1677/1195 1694/1672/1191 1698/1676/1193 \nf 1699/1677/1195 1696/1674/1192 1694/1672/1191 \nf 1693/1671/1191 1700/1678/1191 1698/1676/1191 \nf 1701/1679/1196 1698/1676/1193 1700/1678/1193 \nf 1699/1677/1195 1698/1676/1193 1701/1679/1196 \nf 1693/1671/1191 1702/1680/1191 1700/1678/1191 \nf 1703/1681/1197 1700/1678/1193 1702/1680/1193 \nf 1701/1679/1196 1700/1678/1193 1703/1681/1197 \nf 1693/1671/1191 1704/1682/1191 1702/1680/1191 \nf 1705/1683/1198 1702/1680/1193 1704/1682/1191 \nf 1703/1681/1197 1702/1680/1193 1705/1683/1198 \nf 1693/1671/1191 1706/1684/1191 1704/1682/1191 \nf 1707/1685/1199 1704/1682/1191 1706/1684/1191 \nf 1705/1683/1198 1704/1682/1191 1707/1685/1199 \nf 1693/1671/1191 1708/1686/1191 1706/1684/1191 \nf 1709/1687/1200 1706/1684/1191 1708/1686/1191 \nf 1707/1685/1199 1706/1684/1191 1709/1687/1200 \nf 1693/1671/1191 1710/1688/1191 1708/1686/1191 \nf 1711/1689/1201 1708/1686/1191 1710/1688/1191 \nf 1709/1687/1200 1708/1686/1191 1711/1689/1201 \nf 1693/1671/1191 1712/1690/1191 1710/1688/1191 \nf 1711/1689/1201 1710/1688/1191 1712/1690/1202 \nf 1693/1671/1191 1713/1691/1191 1712/1690/1191 \nf 1714/1692/1203 1712/1690/1202 1713/1691/1191 \nf 1715/1693/1204 1711/1689/1201 1712/1690/1202 \nf 1714/1692/1203 1715/1693/1204 1712/1690/1202 \nf 1693/1671/1191 1716/1694/1191 1713/1691/1191 \nf 1717/1695/1205 1713/1691/1191 1716/1694/1191 \nf 1717/1695/1205 1714/1692/1203 1713/1691/1191 \nf 1693/1671/1191 1718/1696/1191 1716/1694/1191 \nf 1719/1697/1206 1716/1694/1191 1718/1696/1191 \nf 1719/1697/1206 1717/1695/1205 1716/1694/1191 \nf 1693/1671/1191 1720/1698/1191 1718/1696/1191 \nf 1721/1699/1207 1718/1696/1191 1720/1698/1191 \nf 1721/1699/1207 1719/1697/1206 1718/1696/1191 \nf 1693/1671/1191 1722/1700/1191 1720/1698/1191 \nf 1723/1701/1208 1720/1698/1191 1722/1700/1191 \nf 1723/1701/1208 1721/1699/1207 1720/1698/1191 \nf 1693/1671/1191 1724/1702/1191 1722/1700/1191 \nf 1725/1703/1209 1722/1700/1191 1724/1702/1191 \nf 1725/1703/1209 1723/1701/1208 1722/1700/1191 \nf 1693/1671/1191 1726/1704/1191 1724/1702/1191 \nf 1727/1705/1210 1724/1702/1191 1726/1704/1191 \nf 1727/1705/1210 1725/1703/1209 1724/1702/1191 \nf 1693/1671/1191 1728/1706/1191 1726/1704/1191 \nf 1727/1705/1210 1726/1704/1191 1728/1706/1191 \nf 1729/1707/1191 1730/1708/1191 1728/1706/1191 \nf 1731/1709/1211 1728/1706/1191 1730/1708/1191 \nf 1693/1671/1191 1729/1707/1191 1728/1706/1191 \nf 1732/1710/1212 1728/1706/1191 1731/1709/1211 \nf 1727/1705/1210 1728/1706/1191 1732/1710/1212 \nf 1729/1707/1191 1733/1711/1191 1730/1708/1191 \nf 1731/1709/1211 1730/1708/1191 1733/1711/1191 \nf 1729/1707/1191 1734/1712/1191 1733/1711/1191 \nf 1735/1713/1213 1733/1711/1191 1734/1712/1191 \nf 1735/1713/1213 1731/1709/1211 1733/1711/1191 \nf 1729/1707/1191 1736/1714/1191 1734/1712/1191 \nf 1737/1715/1214 1734/1712/1191 1736/1714/1191 \nf 1737/1715/1214 1735/1713/1213 1734/1712/1191 \nf 1729/1707/1191 1738/1716/1191 1736/1714/1191 \nf 1739/1717/1215 1736/1714/1191 1738/1716/1191 \nf 1739/1717/1215 1737/1715/1214 1736/1714/1191 \nf 1740/1718/1191 1741/1719/1191 1738/1716/1191 \nf 1742/1720/1216 1738/1716/1191 1741/1719/1217 \nf 1729/1707/1191 1740/1718/1191 1738/1716/1191 \nf 1742/1720/1216 1739/1717/1215 1738/1716/1191 \nf 1740/1718/1191 1743/1721/1191 1741/1719/1191 \nf 1744/1722/1218 1741/1719/1217 1743/1721/1191 \nf 1745/1723/1219 1741/1719/1217 1744/1722/1218 \nf 1745/1723/1219 1742/1720/1216 1741/1719/1217 \nf 1740/1718/1191 1746/1724/1191 1743/1721/1191 \nf 1744/1722/1218 1743/1721/1191 1746/1724/1193 \nf 1740/1718/1191 1747/1725/1191 1746/1724/1191 \nf 1748/1726/1220 1746/1724/1193 1747/1725/1193 \nf 1748/1726/1220 1744/1722/1218 1746/1724/1193 \nf 1740/1718/1191 1749/1727/1191 1747/1725/1191 \nf 1750/1728/1221 1747/1725/1193 1749/1727/1193 \nf 1750/1728/1221 1748/1726/1220 1747/1725/1193 \nf 1740/1718/1191 1751/1729/1191 1749/1727/1191 \nf 1752/1730/1222 1749/1727/1193 1751/1729/1193 \nf 1752/1730/1222 1750/1728/1221 1749/1727/1193 \nf 1740/1718/1191 1753/1731/1191 1751/1729/1191 \nf 1754/1732/1223 1751/1729/1193 1753/1731/1193 \nf 1754/1732/1223 1752/1730/1222 1751/1729/1193 \nf 1740/1718/1191 1755/1733/1191 1753/1731/1191 \nf 1756/1734/1224 1753/1731/1193 1755/1733/1193 \nf 1756/1734/1224 1754/1732/1223 1753/1731/1193 \nf 1757/1735/1191 1758/1736/1191 1755/1733/1191 \nf 1759/1737/1225 1755/1733/1193 1758/1736/1193 \nf 1740/1718/1191 1757/1735/1191 1755/1733/1191 \nf 1759/1737/1225 1756/1734/1224 1755/1733/1193 \nf 1757/1735/1191 1760/1738/1191 1758/1736/1191 \nf 1761/1739/1226 1758/1736/1193 1760/1738/1191 \nf 1761/1739/1226 1759/1737/1225 1758/1736/1193 \nf 1757/1735/1191 1762/1740/1191 1760/1738/1191 \nf 1763/1741/1227 1760/1738/1191 1762/1740/1191 \nf 1763/1741/1227 1761/1739/1226 1760/1738/1191 \nf 1757/1735/1191 1764/1742/1191 1762/1740/1191 \nf 1765/1743/1228 1762/1740/1191 1764/1742/1191 \nf 1766/1744/1229 1762/1740/1191 1765/1743/1228 \nf 1763/1741/1227 1762/1740/1191 1766/1744/1229 \nf 1757/1735/1191 1697/1675/1191 1764/1742/1191 \nf 1767/1745/1230 1764/1742/1191 1697/1675/1191 \nf 1768/1746/1231 1764/1742/1191 1767/1745/1230 \nf 1765/1743/1232 1764/1742/1191 1768/1746/1231 \nf 1769/1747/1191 1697/1675/1191 1757/1735/1191 \nf 1769/1747/1191 1693/1671/1191 1697/1675/1191 \nf 1696/1674/1194 1767/1745/1233 1697/1675/1191 \nf 1770/1748/1191 1771/1749/1191 1757/1735/1191 \nf 1772/1750/1234 1757/1735/1191 1771/1749/1191 \nf 1740/1718/1191 1770/1748/1191 1757/1735/1191 \nf 1773/1751/311 1769/1747/1191 1757/1735/1191 \nf 1772/1750/1234 1774/1752/1235 1757/1735/1191 \nf 1773/1751/311 1757/1735/1191 1774/1752/1236 \nf 1775/1753/1232 1771/1749/1191 1770/1748/1191 \nf 1776/1754/1237 1772/1750/1238 1771/1749/1191 \nf 1777/1755/1239 1771/1749/1191 1775/1753/1232 \nf 1778/1756/1240 1771/1749/1191 1777/1755/1239 \nf 1778/1756/1240 1776/1754/1237 1771/1749/1191 \nf 1779/1757/1228 1770/1748/1191 1740/1718/1191 \nf 1775/1753/1228 1770/1748/1191 1779/1757/1228 \nf 1780/1758/1230 1740/1718/1191 1729/1707/1191 \nf 1781/1759/1231 1740/1718/1191 1780/1758/1230 \nf 1779/1757/1232 1740/1718/1191 1781/1759/1231 \nf 1693/1671/1191 1782/1760/1191 1729/1707/1191 \nf 1783/1761/1194 1729/1707/1191 1782/1760/1191 \nf 1783/1761/1194 1780/1758/1233 1729/1707/1191 \nf 1784/1762/1241 1782/1760/1191 1693/1671/1191 \nf 394/391/201 1785/1763/1242 395/392/202 \nf 1786/1764/1243 1787/1765/1244 1788/1766/1245 \nf 1789/1767/1246 1693/1671/1191 1769/1747/1191 \nf 1789/1767/1246 1784/1762/1247 1693/1671/1191 \nf 1790/1768/311 1769/1747/1191 1773/1751/311 \nf 1789/1767/1248 1769/1747/1191 1790/1768/311 \nf 1791/1769/1249 1093/1089/377 1094/1090/377 \nf 1792/1770/1250 1094/1090/377 1091/1087/581 \nf 1793/1771/1251 1094/1090/377 1792/1770/1250 \nf 1793/1771/1251 1791/1769/1252 1094/1090/377 \nf 1794/1772/1253 1337/1317/1254 1093/1089/377 \nf 1791/1769/1249 1795/1773/1255 1093/1089/377 \nf 1794/1772/1253 1093/1089/377 1795/1773/1255 \nf 1796/1774/1256 548/545/281 545/542/281 \nf 1797/1775/1257 547/544/282 548/545/281 \nf 1798/1776/1258 1797/1775/1257 548/545/281 \nf 1796/1774/1256 1798/1776/1258 548/545/281 \nf 1796/1774/1256 545/542/281 552/549/286 \nf 789/785/1 1799/1777/1 790/786/1 \nf 1800/1778/2 790/786/2 1799/1777/4 \nf 1801/1779/2 790/786/2 1800/1778/2 \nf 1802/1780/2 656/653/2 790/786/2 \nf 1803/1781/2 1802/1780/2 790/786/2 \nf 1804/1782/2 1803/1781/2 790/786/2 \nf 1805/1783/2 1804/1782/2 790/786/2 \nf 1806/1784/2 1805/1783/2 790/786/2 \nf 1807/1785/2 1806/1784/2 790/786/2 \nf 1808/1786/2 1807/1785/2 790/786/2 \nf 1809/1787/2 1808/1786/2 790/786/2 \nf 1810/1788/2 1809/1787/2 790/786/2 \nf 1811/1789/2 1810/1788/2 790/786/2 \nf 1811/1789/2 1811/1789/2 790/786/2 \nf 1801/1779/2 1811/1789/2 790/786/2 \nf 789/785/1 1812/1790/1 1799/1777/1 \nf 1813/1791/1259 1799/1777/4 1812/1790/6 \nf 1814/1792/1260 1800/1778/2 1799/1777/4 \nf 1813/1791/1259 1814/1792/1260 1799/1777/4 \nf 789/785/1 1815/1793/1 1812/1790/1 \nf 1816/1794/1261 1812/1790/6 1815/1793/7 \nf 1816/1794/1261 1813/1791/1259 1812/1790/6 \nf 789/785/1 1817/1795/1 1815/1793/1 \nf 1818/1796/1262 1815/1793/7 1817/1795/9 \nf 1818/1796/1262 1816/1794/1261 1815/1793/7 \nf 789/785/1 1819/1797/1 1817/1795/1 \nf 1820/1798/1263 1817/1795/9 1819/1797/11 \nf 1820/1798/1263 1818/1796/1262 1817/1795/9 \nf 789/785/1 1821/1799/1 1819/1797/1 \nf 1822/1800/1264 1819/1797/11 1821/1799/13 \nf 1823/1801/1265 1820/1798/1263 1819/1797/11 \nf 1822/1800/1264 1823/1801/1265 1819/1797/11 \nf 789/785/1 1824/1802/1 1821/1799/1 \nf 1825/1803/1266 1821/1799/13 1824/1802/15 \nf 1826/1803/1267 1822/1800/1264 1821/1799/13 \nf 1825/1803/1266 1826/1803/1267 1821/1799/13 \nf 789/785/1 1827/1804/1 1824/1802/1 \nf 1828/1805/1268 1824/1802/15 1827/1804/17 \nf 1828/1805/1268 1825/1803/1266 1824/1802/15 \nf 789/785/1 1829/1806/1 1827/1804/1 \nf 1830/1807/1269 1827/1804/17 1829/1806/20 \nf 1831/1808/1270 1828/1805/1268 1827/1804/17 \nf 1830/1807/1269 1831/1808/1270 1827/1804/17 \nf 789/785/1 1832/1809/1 1829/1806/1 \nf 1833/1810/1271 1829/1806/20 1832/1809/22 \nf 1833/1810/1271 1830/1807/1269 1829/1806/20 \nf 789/785/1 1834/1811/1 1832/1809/1 \nf 1835/1812/1272 1832/1809/22 1834/1811/23 \nf 1836/1813/1273 1833/1810/1271 1832/1809/22 \nf 1835/1812/1272 1836/1813/1273 1832/1809/22 \nf 1837/1814/1 1838/1815/1 1834/1811/1 \nf 1839/1816/23 1834/1811/23 1838/1815/23 \nf 789/785/1 1837/1814/1 1834/1811/1 \nf 1840/1817/23 1834/1811/23 1839/1816/23 \nf 1835/1812/1272 1834/1811/23 1840/1817/23 \nf 1837/1814/1 1841/1818/1 1838/1815/1 \nf 1842/1819/24 1838/1815/1 1841/1818/1 \nf 1843/1820/25 1838/1815/1 1842/1819/24 \nf 1843/1820/23 1839/1816/23 1838/1815/23 \nf 1844/1821/3 1841/1818/3 1837/1814/3 \nf 1842/1819/3 1841/1818/3 1844/1821/3 \nf 789/785/1 1845/1822/1 1837/1814/1 \nf 1844/1821/2 1837/1814/2 1845/1822/2 \nf 1846/1823/1081 1845/1822/1 789/785/1 \nf 1844/1821/2 1845/1822/2 1847/1824/2 \nf 1846/1823/1081 1847/1824/1151 1845/1822/1 \nf 1846/1823/1081 789/785/1 794/790/380 \nf 1844/1821/2 1848/1825/2 1849/1826/2 \nf 1850/1827/1184 1849/1826/2 1848/1825/2 \nf 1851/1828/1274 1844/1821/2 1849/1826/2 \nf 1852/1829/1275 1849/1826/2 1850/1827/1184 \nf 1853/1830/1276 1849/1826/2 1852/1829/1275 \nf 1853/1830/1276 1851/1828/1274 1849/1826/2 \nf 1844/1821/2 1847/1824/2 1848/1825/2 \nf 1846/1823/1081 1848/1825/1183 1847/1824/1151 \nf 1850/1827/1185 1848/1825/1183 1846/1823/1081 \nf 1854/1831/3 1844/1821/3 1855/1832/3 \nf 1856/1833/1277 1855/1832/1278 1844/1821/2 \nf 1854/1831/3 1842/1819/3 1844/1821/3 \nf 1851/1828/1274 1856/1833/1277 1844/1821/2 \nf 1857/1834/1279 1801/1779/1280 1800/1778/2 \nf 1858/1835/1281 1800/1778/2 1814/1792/1260 \nf 1858/1835/1281 1857/1834/1279 1800/1778/2 \nf 657/654/1282 656/653/1283 1802/1780/1284 \nf 1859/1836/1285 1802/1780/1284 1803/1781/1286 \nf 1859/1836/1285 657/654/1282 1802/1780/1284 \nf 1859/1836/1285 1803/1781/1286 1804/1782/1287 \nf 1859/1836/1285 1804/1782/1287 1805/1783/1288 \nf 1860/1837/1289 1805/1783/1288 1806/1784/1290 \nf 1861/1838/1291 1805/1783/1288 1860/1837/1289 \nf 1861/1838/1291 1859/1836/1285 1805/1783/1288 \nf 1860/1837/1289 1806/1784/1290 1807/1785/1292 \nf 1860/1837/1289 1807/1785/1292 1808/1786/1293 \nf 1862/1839/1294 1808/1786/1293 1809/1787/1295 \nf 1863/1840/1296 1808/1786/1293 1862/1839/1294 \nf 1863/1840/1296 1860/1837/1289 1808/1786/1293 \nf 1862/1839/1294 1809/1787/1295 1810/1788/1297 \nf 1862/1839/1294 1810/1788/1297 1811/1789/1298 \nf 1811/1789/1299 1801/1779/1280 1857/1834/1279 \nf 1857/1834/1279 1811/1789/1298 1811/1789/1299 \nf 1864/1841/1300 1811/1789/1298 1857/1834/1279 \nf 1864/1841/1300 1862/1839/1294 1811/1789/1298 \nf 658/655/377 1865/1842/377 659/656/377 \nf 1866/1843/3 659/656/3 1865/1842/3 \nf 1866/1843/1301 660/657/377 659/656/377 \nf 1867/1844/377 1868/1845/377 1865/1842/377 \nf 1869/1846/2 1865/1842/2 1868/1845/2 \nf 658/655/377 1867/1844/377 1865/1842/377 \nf 1870/1847/3 1865/1842/3 1871/1832/3 \nf 1872/1848/2 1871/1832/2 1865/1842/2 \nf 1873/1849/3 1866/1843/3 1865/1842/3 \nf 1874/1850/3 1873/1849/3 1865/1842/3 \nf 1875/1851/3 1874/1850/3 1865/1842/3 \nf 1876/1852/3 1875/1851/3 1865/1842/3 \nf 1877/1853/3 1876/1852/3 1865/1842/3 \nf 1878/1854/3 1877/1853/3 1865/1842/3 \nf 1870/1847/3 1878/1854/3 1865/1842/3 \nf 1879/1855/2 1865/1842/2 1869/1846/2 \nf 1880/1856/2 1865/1842/2 1879/1855/2 \nf 1881/1857/2 1865/1842/2 1880/1856/2 \nf 1882/1858/2 1865/1842/2 1881/1857/2 \nf 1872/1848/2 1865/1842/2 1882/1858/2 \nf 1883/1859/1302 1868/1845/1303 1867/1844/1303 \nf 1884/1860/1304 1868/1845/1303 1883/1859/1302 \nf 1885/1861/1305 1886/1862/1306 1868/1845/1303 \nf 1869/1846/1307 1868/1845/1303 1886/1862/1306 \nf 1884/1860/1304 1885/1861/1305 1868/1845/1303 \nf 1883/1859/1302 1867/1844/1303 658/655/1303 \nf 1883/1859/1308 658/655/1308 661/658/1308 \nf 662/658/23 661/658/23 662/658/23 \nf 662/658/23 661/1863/23 661/658/23 \nf 1887/1864/1308 661/658/1308 661/1863/1308 \nf 1786/1764/1243 1788/1766/1245 1785/1763/1242 \nf 1888/1865/1308 661/658/1308 1889/1866/1308 \nf 1890/1867/1308 1889/1866/1308 661/658/1308 \nf 1891/1868/1308 661/658/1308 1888/1865/1308 \nf 1892/1869/1308 1890/1867/1308 661/658/1308 \nf 1787/1765/1244 1893/1870/1309 1788/1766/1245 \nf 1887/1864/1308 1892/1869/1308 661/658/1308 \nf 1887/1864/1308 1887/1864/1308 661/658/1308 \nf 1894/1846/1308 1883/1859/1308 661/658/1308 \nf 1891/1868/1308 1894/1846/1308 661/658/1308 \nf 1895/1871/1310 662/658/1311 663/659/1312 \nf 1896/1872/1313 662/658/1314 662/658/1311 \nf 1896/1872/1313 662/658/1311 1895/1871/1310 \nf 1897/1873/1315 663/659/1312 664/660/1316 \nf 1895/1871/1310 663/659/1312 1897/1873/1315 \nf 1898/661/1317 664/660/1316 665/661/1318 \nf 1897/1873/1315 664/660/1316 1898/661/1317 \nf 1899/662/1319 665/661/1318 666/662/1320 \nf 1898/661/1317 665/661/1318 1899/662/1319 \nf 1899/662/1319 666/662/1320 667/663/1321 \nf 1899/662/1319 667/663/1321 668/664/1322 \nf 1900/1874/1323 668/664/1322 669/665/1324 \nf 1899/662/1319 668/664/1322 1900/1874/1323 \nf 1900/1874/1323 669/665/1324 670/666/1325 \nf 1901/1875/1326 670/666/1325 671/667/1327 \nf 1900/1874/1323 670/666/1325 1901/1875/1326 \nf 1901/1875/1326 671/667/1327 672/668/1328 \nf 1902/1876/1329 672/668/1328 673/669/1330 \nf 1901/1875/1326 672/668/1328 1902/1876/1329 \nf 1903/670/1331 673/669/1330 674/670/1332 \nf 1902/1876/1329 673/669/1330 1903/670/1331 \nf 1903/670/1331 674/670/1332 675/671/1333 \nf 1903/670/1331 675/671/1333 676/672/1334 \nf 1861/1838/1291 676/672/1334 677/673/1335 \nf 1903/670/1331 676/672/1334 1861/1838/1291 \nf 1861/1838/1291 677/673/1335 678/674/1336 \nf 1859/1836/1285 678/674/1336 679/675/1337 \nf 1861/1838/1291 678/674/1336 1859/1836/1285 \nf 1859/1836/1285 679/675/1337 657/654/1282 \nf 1904/1877/1338 680/676/377 660/657/377 \nf 1905/1878/1339 653/650/376 680/676/377 \nf 1905/1878/1339 680/676/377 1906/1879/1340 \nf 1904/1877/1338 1906/1879/1340 680/676/377 \nf 1907/1880/1341 660/657/377 1866/1843/1301 \nf 1907/1880/1341 1904/1877/1338 660/657/377 \nf 1854/1831/3 1871/1832/3 1908/1881/3 \nf 1872/1848/1342 1908/1881/3 1871/1832/3 \nf 1909/1882/1343 1854/1831/3 1908/1881/3 \nf 1910/1883/1344 1909/1882/1343 1908/1881/3 \nf 1872/1848/1342 1910/1883/1344 1908/1881/3 \nf 1855/1832/3 1870/1847/3 1871/1832/3 \nf 1854/1831/3 1855/1832/3 1871/1832/3 \nf 1911/1884/1345 1866/1843/1301 1873/1849/1346 \nf 1912/1885/1347 1907/1880/1341 1866/1843/1301 \nf 1911/1884/1345 1912/1885/1347 1866/1843/1301 \nf 1913/1886/1348 1873/1849/1346 1874/1850/1349 \nf 1914/1887/1350 1911/1884/1345 1873/1849/1346 \nf 1913/1886/1348 1914/1887/1350 1873/1849/1346 \nf 1915/1888/1351 1874/1850/1349 1875/1851/1352 \nf 1916/1889/1353 1913/1886/1348 1874/1850/1349 \nf 1915/1888/1351 1916/1889/1353 1874/1850/1349 \nf 1917/1890/1354 1875/1851/1352 1876/1852/1355 \nf 1918/1891/1356 1915/1888/1351 1875/1851/1352 \nf 1917/1890/1354 1918/1891/1356 1875/1851/1352 \nf 1919/1892/702 1876/1852/1355 1877/1853/1357 \nf 1920/1893/1358 1917/1890/1354 1876/1852/1355 \nf 1919/1892/702 1920/1893/1358 1876/1852/1355 \nf 1921/1894/1359 1877/1853/1357 1878/1854/1360 \nf 1922/1895/1357 1919/1892/702 1877/1853/1357 \nf 1921/1894/1359 1922/1895/1357 1877/1853/1357 \nf 1923/150/1361 1878/1854/1360 1870/1847/1362 \nf 1924/1896/1363 1921/1894/1359 1878/1854/1360 \nf 1923/150/1361 1924/1896/1363 1878/1854/1360 \nf 1925/1897/1364 1870/1847/1362 1855/1832/1278 \nf 1925/1897/1364 1923/150/1361 1870/1847/1362 \nf 1926/1898/1365 1925/1897/1364 1855/1832/1278 \nf 1856/1833/1277 1926/1898/1365 1855/1832/1278 \nf 1927/1899/49 1842/1819/24 1854/1831/50 \nf 1843/1820/25 1842/1819/24 1927/1899/49 \nf 1928/1900/52 1927/1899/49 1854/1831/50 \nf 1929/1901/53 1928/1900/52 1854/1831/50 \nf 1909/1882/1343 1929/1901/51 1854/1831/3 \nf 1843/1820/23 1927/1899/23 1839/1816/23 \nf 1928/1900/1366 1839/1816/23 1927/1899/23 \nf 1930/1902/1367 1840/1817/23 1839/1816/23 \nf 1931/1903/1368 1930/1902/1367 1839/1816/23 \nf 1932/1904/1369 1839/1816/23 1928/1900/1366 \nf 1931/1903/1368 1839/1816/23 1932/1904/1369 \nf 1933/1905/1370 1835/1812/1371 1840/1817/23 \nf 1930/1902/1367 1934/1906/1372 1840/1817/23 \nf 1933/1905/1370 1840/1817/23 1934/1906/1372 \nf 1787/1765/1244 1935/1907/1373 1893/1870/1309 \nf 1887/1864/1374 661/1863/1375 662/658/1314 \nf 1936/1908/1376 1887/1864/1374 662/658/1314 \nf 1936/1908/1376 662/658/1314 1896/1872/1313 \nf 1937/1909/377 1938/1910/377 1939/1911/377 \nf 1940/1912/1377 1939/1911/377 1938/1910/377 \nf 1941/1913/1378 1937/1909/377 1939/1911/377 \nf 1942/1914/1379 1939/1911/377 1940/1912/1377 \nf 1941/1913/1378 1939/1911/377 1942/1914/1379 \nf 1937/1909/377 1943/1915/377 1938/1910/377 \nf 1940/1912/1377 1938/1910/377 1943/1915/377 \nf 1937/1909/377 1944/1916/377 1943/1915/377 \nf 1945/1917/1380 1943/1915/377 1944/1916/377 \nf 1945/1917/1380 1940/1912/1377 1943/1915/377 \nf 1937/1909/377 1946/1918/377 1944/1916/377 \nf 1947/1919/1381 1944/1916/377 1946/1918/377 \nf 1947/1919/1381 1945/1917/1380 1944/1916/377 \nf 1937/1909/377 1948/1920/377 1946/1918/377 \nf 1949/1921/1382 1946/1918/377 1948/1920/377 \nf 1949/1921/1382 1947/1919/1381 1946/1918/377 \nf 1937/1909/377 1950/1922/377 1948/1920/377 \nf 1951/1923/1383 1948/1920/377 1950/1922/377 \nf 1951/1923/1383 1949/1921/1382 1948/1920/377 \nf 1937/1909/377 1889/1866/377 1950/1922/377 \nf 1952/1924/1384 1950/1922/377 1889/1866/377 \nf 1952/1924/1384 1951/1923/1383 1950/1922/377 \nf 1937/1909/377 1888/1865/377 1889/1866/377 \nf 1952/1924/1384 1889/1866/377 1890/1867/1385 \nf 1953/1925/1386 1888/1865/377 1937/1909/377 \nf 1953/1925/1386 1891/1868/1387 1888/1865/377 \nf 1954/1926/1388 1953/1925/1386 1937/1909/377 \nf 1941/1927/1389 1955/1928/1389 1937/1909/377 \nf 1954/1926/1388 1937/1909/377 1955/1928/1389 \nf 1941/1913/1378 1941/1927/1389 1937/1909/377 \nf 1956/1929/1390 794/790/380 796/792/382 \nf 1957/1930/1391 1846/1823/1081 794/790/380 \nf 1957/1930/1391 794/790/380 1956/1929/1390 \nf 1958/1931/1392 796/792/382 798/794/384 \nf 1956/1929/1390 796/792/382 1958/1931/1392 \nf 1959/1932/1393 798/794/384 800/796/386 \nf 1958/1931/1392 798/794/384 1959/1932/1393 \nf 1960/1933/1394 800/796/386 802/798/388 \nf 1959/1932/1393 800/796/386 1960/1933/1394 \nf 1961/1934/1395 802/798/388 804/800/390 \nf 1960/1933/1394 802/798/388 1961/1934/1395 \nf 1962/1935/1396 804/800/390 806/802/392 \nf 1961/1934/1395 804/800/390 1962/1935/1396 \nf 1963/1936/1397 806/802/392 808/804/394 \nf 1962/1935/1396 806/802/392 1963/1936/1397 \nf 1964/1937/1398 808/804/394 810/806/396 \nf 1963/1936/1397 808/804/394 1964/1937/1398 \nf 1965/1938/1399 810/806/396 812/808/398 \nf 1964/1937/1398 810/806/396 1965/1938/1399 \nf 1966/1939/1400 812/808/398 814/810/400 \nf 1965/1938/1399 812/808/398 1966/1939/1400 \nf 1967/1940/1401 814/810/400 816/812/402 \nf 1966/1939/1400 814/810/400 1967/1940/1401 \nf 1968/1941/1402 816/812/402 818/814/404 \nf 1967/1940/1401 816/812/402 1968/1941/1402 \nf 1969/1942/1403 818/814/404 820/816/406 \nf 1968/1941/1402 818/814/404 1969/1942/1403 \nf 1970/1943/1404 820/816/406 822/818/408 \nf 1969/1942/1403 820/816/406 1970/1943/1404 \nf 1971/1944/1405 822/818/408 825/821/411 \nf 1970/1943/1404 822/818/408 1971/1944/1405 \nf 1972/1945/1406 825/821/411 828/824/414 \nf 1971/1944/1405 825/821/411 1972/1945/1406 \nf 1973/1946/1407 828/824/414 831/827/417 \nf 1972/1945/1406 828/824/414 1973/1946/1407 \nf 1974/1947/1408 831/827/417 834/830/420 \nf 1973/1946/1407 831/827/417 1974/1947/1408 \nf 1975/1948/1409 834/830/420 837/833/423 \nf 1974/1947/1408 834/830/420 1975/1948/1409 \nf 1976/1949/1410 837/833/423 839/835/425 \nf 1975/1948/1409 837/833/423 1976/1949/1410 \nf 1976/1949/1410 839/835/425 841/837/427 \nf 1977/1950/1411 841/837/427 843/839/429 \nf 1976/1949/1410 841/837/427 1977/1950/1411 \nf 1977/1950/1411 843/839/429 845/841/431 \nf 1978/1951/1412 845/841/431 847/843/433 \nf 1977/1950/1411 845/841/431 1978/1951/1412 \nf 1978/1951/1412 847/843/433 849/845/435 \nf 1979/1952/1413 849/845/435 851/847/437 \nf 1978/1951/1412 849/845/435 1979/1952/1413 \nf 1979/1952/1413 851/847/437 852/848/439 \nf 1797/1775/1257 852/848/439 547/544/282 \nf 1979/1952/1413 852/848/439 1797/1775/1257 \nf 1980/1953/1414 552/549/286 551/548/284 \nf 1980/1953/1414 1796/1774/1256 552/549/286 \nf 1980/1953/1414 551/548/284 555/552/289 \nf 1981/1954/1415 555/552/289 554/551/287 \nf 1980/1953/1414 555/552/289 1981/1954/1415 \nf 1981/1954/1415 554/551/287 558/555/292 \nf 1982/1955/1416 558/555/292 557/554/290 \nf 1981/1954/1415 558/555/292 1982/1955/1416 \nf 1982/1955/1416 557/554/290 561/558/295 \nf 1983/1956/1417 561/558/295 560/557/293 \nf 1982/1955/1416 561/558/295 1983/1956/1417 \nf 1984/1957/1418 560/557/293 564/561/298 \nf 1983/1956/1417 560/557/293 1984/1957/1418 \nf 1984/1957/1418 564/561/298 563/560/296 \nf 1985/1958/1419 563/560/296 567/564/301 \nf 1984/1957/1418 563/560/296 1985/1958/1419 \nf 1985/1958/1419 567/564/301 566/563/299 \nf 1986/1959/1420 566/563/299 570/567/304 \nf 1985/1958/1419 566/563/299 1986/1959/1420 \nf 1986/1959/1420 570/567/304 569/566/302 \nf 1987/1960/1421 569/566/302 573/570/307 \nf 1986/1959/1420 569/566/302 1987/1960/1421 \nf 1987/1960/1421 573/570/307 572/569/305 \nf 1988/1961/1422 572/569/305 576/573/310 \nf 1987/1960/1421 572/569/305 1988/1961/1422 \nf 1988/1961/1422 576/573/310 575/572/308 \nf 1989/1962/1423 575/572/308 579/576/313 \nf 1988/1961/1422 575/572/308 1989/1962/1423 \nf 1990/1963/1424 579/576/313 578/575/311 \nf 1989/1962/1423 579/576/313 1990/1963/1424 \nf 1990/1963/1424 578/575/311 582/579/316 \nf 1991/1964/1425 582/579/316 581/578/314 \nf 1990/1963/1424 582/579/316 1991/1964/1425 \nf 1991/1964/1425 581/578/314 586/583/319 \nf 1992/1965/1426 586/583/319 585/582/317 \nf 1991/1964/1425 586/583/319 1992/1965/1426 \nf 1992/1965/1426 585/582/317 589/586/322 \nf 1993/1966/1427 589/586/322 588/585/320 \nf 1992/1965/1426 589/586/322 1993/1966/1427 \nf 1993/1966/1427 588/585/320 593/590/325 \nf 1994/1967/1428 593/590/325 592/589/323 \nf 1993/1966/1427 593/590/325 1994/1967/1428 \nf 1995/1968/1429 592/589/323 597/594/328 \nf 1994/1967/1428 592/589/323 1995/1968/1429 \nf 1995/1968/1429 597/594/328 596/593/326 \nf 1996/1969/1430 596/593/326 601/598/331 \nf 1995/1968/1429 596/593/326 1996/1969/1430 \nf 1996/1969/1430 601/598/331 600/597/329 \nf 1997/1970/1431 600/597/329 604/601/334 \nf 1996/1969/1430 600/597/329 1997/1970/1431 \nf 1997/1970/1431 604/601/334 603/600/332 \nf 1998/1971/1432 603/600/332 608/605/337 \nf 1997/1970/1431 603/600/332 1998/1971/1432 \nf 1998/1971/1432 608/605/337 607/604/1433 \nf 1999/1972/1434 607/604/1433 612/609/1435 \nf 1998/1971/1432 607/604/1433 1999/1972/1434 \nf 1999/1972/1434 612/609/1435 611/608/338 \nf 2000/1973/1436 611/608/338 615/612/343 \nf 1999/1972/1434 611/608/338 2000/1973/1436 \nf 2001/1974/1437 615/612/343 614/611/341 \nf 2000/1973/1436 615/612/343 2001/1974/1437 \nf 2001/1974/1437 614/611/341 619/616/346 \nf 2002/1975/1438 619/616/346 618/615/344 \nf 2001/1974/1437 619/616/346 2002/1975/1438 \nf 2002/1975/1438 618/615/344 622/619/349 \nf 2003/1976/1439 622/619/349 621/618/347 \nf 2002/1975/1438 622/619/349 2003/1976/1439 \nf 2003/1976/1439 621/618/347 626/623/352 \nf 2004/1977/1440 626/623/352 625/622/350 \nf 2003/1976/1439 626/623/352 2004/1977/1440 \nf 2004/1977/1440 625/622/350 629/626/355 \nf 2005/1978/1441 629/626/355 628/625/353 \nf 2004/1977/1440 629/626/355 2005/1978/1441 \nf 2005/1978/1441 628/625/353 632/629/356 \nf 2006/1979/1442 632/629/356 635/632/360 \nf 2005/1978/1441 632/629/356 2006/1979/1442 \nf 2006/1979/1442 635/632/360 634/631/358 \nf 2007/1980/1443 634/631/358 638/635/363 \nf 2006/1979/1442 634/631/358 2007/1980/1443 \nf 2008/1981/1444 638/635/363 637/634/361 \nf 2007/1980/1443 638/635/363 2008/1981/1444 \nf 2008/1981/1444 637/634/361 642/639/366 \nf 2009/1982/1445 642/639/366 641/638/364 \nf 2008/1981/1444 642/639/366 2009/1982/1445 \nf 2009/1982/1445 641/638/364 645/642/369 \nf 2010/1983/1446 645/642/369 644/641/367 \nf 2009/1982/1445 645/642/369 2010/1983/1446 \nf 2010/1983/1446 644/641/367 648/645/372 \nf 2011/1984/1447 648/645/372 647/644/370 \nf 2010/1983/1446 648/645/372 2011/1984/1447 \nf 2011/1984/1447 647/644/370 651/648/375 \nf 2012/1985/1448 651/648/375 650/647/373 \nf 2011/1984/1447 651/648/375 2012/1985/1448 \nf 2012/1985/1448 650/647/373 654/651/378 \nf 1905/1878/1339 654/651/378 653/650/376 \nf 2012/1985/1448 654/651/378 1905/1878/1339 \nf 32/30/23 73/70/23 29/27/23 \nf 77/74/1366 29/27/23 73/70/23 \nf 2013/1986/1449 30/28/23 29/27/23 \nf 2014/1987/1450 2013/1986/1449 29/27/23 \nf 2014/1987/1451 29/27/23 77/74/1366 \nf 2013/1986/1449 26/24/1452 30/28/23 \nf 57/54/1 71/68/1 55/52/1 \nf 2015/1988/1453 55/52/1 71/68/1 \nf 2015/1988/1453 53/50/1454 55/52/1 \nf 59/56/1 62/59/1 71/68/1 \nf 57/54/1 59/56/1 71/68/1 \nf 1668/1646/1154 2015/1988/1455 71/68/1 \nf 2016/1989/1456 1890/1867/1385 1892/1869/1457 \nf 2016/1989/1456 1952/1924/1384 1890/1867/1385 \nf 1935/1907/1373 2017/1990/1458 2018/1991/1459 \nf 2016/1989/1456 1892/1869/1457 2019/1992/1460 \nf 2019/1992/1460 1892/1869/1457 1887/1864/1461 \nf 1936/1908/1376 1887/1864/1461 1887/1864/1374 \nf 2020/1993/1462 1887/1864/1461 1936/1908/1376 \nf 2019/1992/1460 1887/1864/1461 2020/1993/1462 \nf 2021/1994/1463 1883/1859/1302 1894/1846/1464 \nf 2022/1995/1465 1884/1860/1304 1883/1859/1302 \nf 2021/1994/1463 2022/1995/1465 1883/1859/1302 \nf 2023/1996/1466 1894/1846/1464 1891/1868/1387 \nf 2024/1997/1467 2021/1994/1463 1894/1846/1464 \nf 2023/1996/1466 2024/1997/1467 1894/1846/1464 \nf 2025/1998/1468 2023/1996/1466 1891/1868/1387 \nf 1953/1925/1386 2025/1998/1468 1891/1868/1387 \nf 2026/1999/1469 2027/2000/1470 334/331/141 \nf 2028/2001/1471 334/331/141 2027/2000/1470 \nf 92/89/59 2026/1999/1469 334/331/141 \nf 2028/2001/1471 333/330/140 334/331/141 \nf 2029/2002/1472 2030/2003/1473 2027/2000/1470 \nf 2031/2004/1474 2027/2000/1470 2030/2003/1473 \nf 2026/1999/1469 2029/2002/1472 2027/2000/1470 \nf 2031/2004/1474 2028/2001/1471 2027/2000/1470 \nf 2032/2005/1475 2033/2006/1476 2030/2003/1473 \nf 2034/2007/1477 2030/2003/1473 2033/2006/1476 \nf 2029/2002/1472 2032/2005/1475 2030/2003/1473 \nf 2034/2007/1477 2031/2004/1474 2030/2003/1473 \nf 2035/2008/1478 2036/2009/1479 2033/2006/1476 \nf 2037/2010/1480 2033/2006/1476 2036/2009/1479 \nf 2032/2005/1475 2035/2008/1478 2033/2006/1476 \nf 2037/2010/1480 2034/2007/1477 2033/2006/1476 \nf 2038/2011/1481 2039/2012/1482 2036/2009/1479 \nf 2040/2013/1483 2036/2009/1479 2039/2012/1482 \nf 2035/2008/1478 2038/2011/1481 2036/2009/1479 \nf 2040/2013/1483 2037/2010/1480 2036/2009/1479 \nf 2041/2014/1484 2042/2015/1485 2039/2012/1482 \nf 2043/2016/1486 2039/2012/1482 2042/2015/1485 \nf 2038/2011/1481 2041/2014/1484 2039/2012/1482 \nf 2043/2016/1486 2040/2013/1483 2039/2012/1482 \nf 2044/2017/1487 2045/2018/1158 2042/2015/1485 \nf 2046/2019/1488 2042/2015/1485 2045/2018/1158 \nf 2047/2020/1489 2044/2017/1487 2042/2015/1485 \nf 2041/2014/1484 2047/2020/1489 2042/2015/1485 \nf 2046/2019/1488 2043/2016/1486 2042/2015/1485 \nf 1850/1827/1185 1846/1823/1081 2045/2018/1158 \nf 1957/1930/1391 2045/2018/1158 1846/1823/1081 \nf 2044/2017/1487 1850/1827/1185 2045/2018/1158 \nf 1957/1930/1391 2046/2019/1488 2045/2018/1158 \nf 1852/1829/1275 1850/1827/1184 2044/2017/1490 \nf 2048/2021/1491 2044/2017/1490 2047/2020/1492 \nf 2048/2021/1491 1852/1829/1275 2044/2017/1490 \nf 2048/2021/1491 2047/2020/1492 2041/2014/1493 \nf 2049/2022/1494 2041/2014/1493 2038/2011/1495 \nf 2049/2022/1494 2048/2021/1491 2041/2014/1493 \nf 2050/2023/1496 2038/2011/1495 2035/2008/1497 \nf 2050/2023/1496 2049/2022/1494 2038/2011/1495 \nf 2051/2024/1498 2035/2008/1497 2032/2005/1499 \nf 2051/2024/1498 2050/2023/1496 2035/2008/1497 \nf 2052/2025/1500 2032/2005/1499 2029/2002/1501 \nf 2052/2025/1500 2051/2024/1498 2032/2005/1499 \nf 2053/2026/1502 2029/2002/1501 2026/1999/1503 \nf 2053/2026/1502 2052/2025/1500 2029/2002/1501 \nf 89/86/58 2026/1999/1503 92/89/60 \nf 89/86/58 2053/2026/1502 2026/1999/1503 \nf 281/278/115 280/277/114 286/283/117 \nf 2054/2027/1504 286/283/117 285/282/116 \nf 2055/2028/1505 281/278/115 286/283/117 \nf 2054/2027/1504 2055/2028/1505 286/283/117 \nf 2056/2029/1506 285/282/116 288/285/118 \nf 2056/2029/1506 2054/2027/1504 285/282/116 \nf 2057/2030/1507 288/285/118 290/287/119 \nf 2057/2030/1507 2056/2029/1506 288/285/118 \nf 2058/2031/1508 290/287/119 293/290/120 \nf 2058/2031/1508 2057/2030/1507 290/287/119 \nf 2059/2032/1509 293/290/120 295/292/121 \nf 2059/2032/1509 2058/2031/1508 293/290/120 \nf 2060/2033/1510 295/292/121 297/294/122 \nf 2060/2033/1510 2059/2032/1509 295/292/121 \nf 2061/2034/1511 297/294/122 299/296/123 \nf 2061/2034/1511 2060/2033/1510 297/294/122 \nf 2062/2035/1512 299/296/123 301/298/124 \nf 2062/2035/1512 2061/2034/1511 299/296/123 \nf 2063/2036/1513 301/298/124 303/300/125 \nf 2063/2036/1513 2062/2035/1512 301/298/124 \nf 2064/2037/1514 303/300/125 305/302/126 \nf 2064/2037/1514 2063/2036/1513 303/300/125 \nf 2065/2038/1515 305/302/126 307/304/127 \nf 2065/2038/1515 2064/2037/1514 305/302/126 \nf 2066/2039/1516 307/304/127 309/306/128 \nf 2066/2039/1516 2065/2038/1515 307/304/127 \nf 2067/2040/1517 309/306/128 311/308/129 \nf 2067/2040/1517 2066/2039/1516 309/306/128 \nf 2068/2041/1518 311/308/129 313/310/130 \nf 2068/2041/1518 2067/2040/1517 311/308/129 \nf 2069/2042/1519 313/310/130 315/312/131 \nf 2069/2042/1519 2068/2041/1518 313/310/130 \nf 2070/2043/1520 315/312/131 317/314/132 \nf 2070/2043/1520 2069/2042/1519 315/312/131 \nf 2071/2044/1521 317/314/132 319/316/133 \nf 2071/2044/1521 2070/2043/1520 317/314/132 \nf 2072/2045/1522 319/316/133 321/318/134 \nf 2072/2045/1522 2071/2044/1521 319/316/133 \nf 2073/2046/1523 321/318/134 323/320/135 \nf 2073/2046/1523 2072/2045/1522 321/318/134 \nf 2074/2047/1524 323/320/135 325/322/136 \nf 2074/2047/1524 2073/2046/1523 323/320/135 \nf 2075/2048/1525 325/322/136 327/324/137 \nf 2075/2048/1525 2074/2047/1524 325/322/136 \nf 2076/2049/1526 327/324/137 329/326/138 \nf 2076/2049/1526 2075/2048/1525 327/324/137 \nf 2077/2050/1527 329/326/138 331/328/139 \nf 2077/2050/1527 2076/2049/1526 329/326/138 \nf 2078/2051/1528 331/328/139 333/330/140 \nf 2078/2051/1528 2077/2050/1527 331/328/139 \nf 2028/2001/1471 2078/2051/1528 333/330/140 \nf 282/279/115 281/278/115 2055/2028/1505 \nf 2079/2052/1529 2055/2028/1505 2054/2027/1504 \nf 282/279/115 2055/2028/1505 2079/2052/1529 \nf 2080/2053/1530 2054/2027/1504 2056/2029/1506 \nf 2081/2054/1531 2079/2052/1529 2054/2027/1504 \nf 2080/2053/1530 2081/2054/1531 2054/2027/1504 \nf 2082/2055/1532 2056/2029/1506 2057/2030/1507 \nf 2082/2055/1532 2080/2053/1530 2056/2029/1506 \nf 2083/2056/1533 2057/2030/1507 2058/2031/1508 \nf 2083/2056/1533 2082/2055/1532 2057/2030/1507 \nf 2084/2057/1534 2058/2031/1508 2059/2032/1509 \nf 2084/2057/1534 2083/2056/1533 2058/2031/1508 \nf 2085/2058/1535 2059/2032/1509 2060/2033/1510 \nf 2085/2058/1535 2084/2057/1534 2059/2032/1509 \nf 2086/2059/1536 2060/2033/1510 2061/2034/1511 \nf 2086/2059/1536 2085/2058/1535 2060/2033/1510 \nf 2087/2060/1537 2061/2034/1511 2062/2035/1512 \nf 2087/2060/1537 2086/2059/1536 2061/2034/1511 \nf 2088/2061/1538 2062/2035/1512 2063/2036/1513 \nf 2088/2061/1538 2087/2060/1537 2062/2035/1512 \nf 2089/2062/1539 2063/2036/1513 2064/2037/1514 \nf 2089/2062/1539 2088/2061/1538 2063/2036/1513 \nf 2090/2063/1540 2064/2037/1514 2065/2038/1515 \nf 2090/2063/1540 2089/2062/1539 2064/2037/1514 \nf 2091/2064/1541 2065/2038/1515 2066/2039/1516 \nf 2091/2064/1541 2090/2063/1540 2065/2038/1515 \nf 2092/2065/1542 2066/2039/1516 2067/2040/1517 \nf 2092/2065/1542 2091/2064/1541 2066/2039/1516 \nf 2093/2066/1543 2067/2040/1517 2068/2041/1518 \nf 2093/2066/1543 2092/2065/1542 2067/2040/1517 \nf 2094/2067/1544 2068/2041/1518 2069/2042/1519 \nf 2094/2067/1544 2093/2066/1543 2068/2041/1518 \nf 2095/2068/1545 2069/2042/1519 2070/2043/1520 \nf 2095/2068/1545 2094/2067/1544 2069/2042/1519 \nf 2096/2069/1546 2070/2043/1520 2071/2044/1521 \nf 2096/2069/1546 2095/2068/1545 2070/2043/1520 \nf 2097/2070/1547 2071/2044/1521 2072/2045/1522 \nf 2097/2070/1547 2096/2069/1546 2071/2044/1521 \nf 2098/2071/1548 2072/2045/1522 2073/2046/1523 \nf 2098/2071/1548 2097/2070/1547 2072/2045/1522 \nf 2099/2072/1549 2073/2046/1523 2074/2047/1524 \nf 2099/2072/1549 2098/2071/1548 2073/2046/1523 \nf 2100/2073/1550 2074/2047/1524 2075/2048/1525 \nf 2100/2073/1550 2099/2072/1549 2074/2047/1524 \nf 2101/2074/1551 2075/2048/1525 2076/2049/1526 \nf 2101/2074/1551 2100/2073/1550 2075/2048/1525 \nf 2102/2075/1552 2076/2049/1526 2077/2050/1527 \nf 2102/2075/1552 2101/2074/1551 2076/2049/1526 \nf 2103/2076/1553 2077/2050/1527 2078/2051/1528 \nf 2103/2076/1553 2102/2075/1552 2077/2050/1527 \nf 2104/2077/1554 2078/2051/1528 2028/2001/1471 \nf 2104/2077/1554 2103/2076/1553 2078/2051/1528 \nf 2031/2004/1474 2104/2077/1554 2028/2001/1471 \nf 2105/2078/1555 2079/2052/1529 2081/2054/1531 \nf 2105/2078/1555 282/279/115 2079/2052/1529 \nf 2106/2079/1556 2081/2054/1531 2080/2053/1530 \nf 2105/2078/1555 2081/2054/1531 2106/2079/1556 \nf 2107/2080/1557 2080/2053/1530 2082/2055/1532 \nf 2108/2081/1558 2106/2079/1556 2080/2053/1530 \nf 2107/2080/1557 2108/2081/1558 2080/2053/1530 \nf 2109/2082/1559 2082/2055/1532 2083/2056/1533 \nf 2109/2082/1559 2107/2080/1557 2082/2055/1532 \nf 2110/2083/1560 2083/2056/1533 2084/2057/1534 \nf 2110/2083/1560 2109/2082/1559 2083/2056/1533 \nf 2111/2084/1561 2084/2057/1534 2085/2058/1535 \nf 2111/2084/1561 2110/2083/1560 2084/2057/1534 \nf 2112/2085/1562 2085/2058/1535 2086/2059/1536 \nf 2112/2085/1562 2111/2084/1561 2085/2058/1535 \nf 2113/2086/1563 2086/2059/1536 2087/2060/1537 \nf 2113/2086/1563 2112/2085/1562 2086/2059/1536 \nf 2114/2087/1564 2087/2060/1537 2088/2061/1538 \nf 2114/2087/1564 2113/2086/1563 2087/2060/1537 \nf 2115/2088/1565 2088/2061/1538 2089/2062/1539 \nf 2115/2088/1565 2114/2087/1564 2088/2061/1538 \nf 2116/2089/1566 2089/2062/1539 2090/2063/1540 \nf 2116/2089/1566 2115/2088/1565 2089/2062/1539 \nf 2117/2090/1567 2090/2063/1540 2091/2064/1541 \nf 2117/2090/1567 2116/2089/1566 2090/2063/1540 \nf 2118/2091/1568 2091/2064/1541 2092/2065/1542 \nf 2118/2091/1568 2117/2090/1567 2091/2064/1541 \nf 2119/2092/1569 2092/2065/1542 2093/2066/1543 \nf 2119/2092/1569 2118/2091/1568 2092/2065/1542 \nf 2120/2093/1570 2093/2066/1543 2094/2067/1544 \nf 2120/2093/1570 2119/2092/1569 2093/2066/1543 \nf 2121/2094/1571 2094/2067/1544 2095/2068/1545 \nf 2121/2094/1571 2120/2093/1570 2094/2067/1544 \nf 2122/2095/1572 2095/2068/1545 2096/2069/1546 \nf 2122/2095/1572 2121/2094/1571 2095/2068/1545 \nf 2123/2096/1573 2096/2069/1546 2097/2070/1547 \nf 2123/2096/1573 2122/2095/1572 2096/2069/1546 \nf 2124/2097/1574 2097/2070/1547 2098/2071/1548 \nf 2124/2097/1574 2123/2096/1573 2097/2070/1547 \nf 2125/2098/1575 2098/2071/1548 2099/2072/1549 \nf 2125/2098/1575 2124/2097/1574 2098/2071/1548 \nf 2126/2099/1576 2099/2072/1549 2100/2073/1550 \nf 2126/2099/1576 2125/2098/1575 2099/2072/1549 \nf 2127/2100/1577 2100/2073/1550 2101/2074/1551 \nf 2127/2100/1577 2126/2099/1576 2100/2073/1550 \nf 2128/2101/1578 2101/2074/1551 2102/2075/1552 \nf 2128/2101/1578 2127/2100/1577 2101/2074/1551 \nf 2129/2102/1579 2102/2075/1552 2103/2076/1553 \nf 2129/2102/1579 2128/2101/1578 2102/2075/1552 \nf 2130/2103/1580 2103/2076/1553 2104/2077/1554 \nf 2130/2103/1580 2129/2102/1579 2103/2076/1553 \nf 2131/2104/1581 2104/2077/1554 2031/2004/1474 \nf 2131/2104/1581 2130/2103/1580 2104/2077/1554 \nf 2034/2007/1477 2131/2104/1581 2031/2004/1474 \nf 2132/2105/1582 2106/2079/1556 2108/2081/1558 \nf 2132/2105/1582 2105/2078/1555 2106/2079/1556 \nf 2133/2106/1583 2108/2081/1558 2107/2080/1557 \nf 2132/2105/1582 2108/2081/1558 2133/2106/1583 \nf 2134/2107/1584 2107/2080/1557 2109/2082/1559 \nf 2135/2108/1585 2133/2106/1583 2107/2080/1557 \nf 2134/2107/1584 2135/2108/1585 2107/2080/1557 \nf 2136/2109/1586 2109/2082/1559 2110/2083/1560 \nf 2136/2109/1586 2134/2107/1584 2109/2082/1559 \nf 2137/2110/1587 2110/2083/1560 2111/2084/1561 \nf 2137/2110/1587 2136/2109/1586 2110/2083/1560 \nf 2138/2111/1588 2111/2084/1561 2112/2085/1562 \nf 2138/2111/1588 2137/2110/1587 2111/2084/1561 \nf 2139/2112/1589 2112/2085/1562 2113/2086/1563 \nf 2139/2112/1589 2138/2111/1588 2112/2085/1562 \nf 2140/2113/1590 2113/2086/1563 2114/2087/1564 \nf 2140/2113/1590 2139/2112/1589 2113/2086/1563 \nf 2141/2114/1591 2114/2087/1564 2115/2088/1565 \nf 2141/2114/1591 2140/2113/1590 2114/2087/1564 \nf 2142/2115/1592 2115/2088/1565 2116/2089/1566 \nf 2142/2115/1592 2141/2114/1591 2115/2088/1565 \nf 2143/2116/1593 2116/2089/1566 2117/2090/1567 \nf 2143/2116/1593 2142/2115/1592 2116/2089/1566 \nf 2144/2117/1594 2117/2090/1567 2118/2091/1568 \nf 2144/2117/1594 2143/2116/1593 2117/2090/1567 \nf 2145/2118/1595 2118/2091/1568 2119/2092/1569 \nf 2145/2118/1595 2144/2117/1594 2118/2091/1568 \nf 2146/2119/1596 2119/2092/1569 2120/2093/1570 \nf 2146/2119/1596 2145/2118/1595 2119/2092/1569 \nf 2147/2120/1597 2120/2093/1570 2121/2094/1571 \nf 2147/2120/1597 2146/2119/1596 2120/2093/1570 \nf 2148/2121/1598 2121/2094/1571 2122/2095/1572 \nf 2148/2121/1598 2147/2120/1597 2121/2094/1571 \nf 2149/2122/1599 2122/2095/1572 2123/2096/1573 \nf 2149/2122/1599 2148/2121/1598 2122/2095/1572 \nf 2150/2123/1600 2123/2096/1573 2124/2097/1574 \nf 2150/2123/1600 2149/2122/1599 2123/2096/1573 \nf 2151/2124/1601 2124/2097/1574 2125/2098/1575 \nf 2151/2124/1601 2150/2123/1600 2124/2097/1574 \nf 2152/2125/1602 2125/2098/1575 2126/2099/1576 \nf 2152/2125/1602 2151/2124/1601 2125/2098/1575 \nf 2153/2126/1603 2126/2099/1576 2127/2100/1577 \nf 2153/2126/1603 2152/2125/1602 2126/2099/1576 \nf 2154/2127/1604 2127/2100/1577 2128/2101/1578 \nf 2154/2127/1604 2153/2126/1603 2127/2100/1577 \nf 2155/2128/1605 2128/2101/1578 2129/2102/1579 \nf 2155/2128/1605 2154/2127/1604 2128/2101/1578 \nf 2156/2129/1606 2129/2102/1579 2130/2103/1580 \nf 2156/2129/1606 2155/2128/1605 2129/2102/1579 \nf 2157/2130/1607 2130/2103/1580 2131/2104/1581 \nf 2157/2130/1607 2156/2129/1606 2130/2103/1580 \nf 2158/2131/1608 2131/2104/1581 2034/2007/1477 \nf 2158/2131/1608 2157/2130/1607 2131/2104/1581 \nf 2037/2010/1480 2158/2131/1608 2034/2007/1477 \nf 2159/2132/1609 2133/2106/1583 2135/2108/1585 \nf 2159/2132/1609 2132/2105/1582 2133/2106/1583 \nf 2160/2133/1610 2135/2108/1585 2134/2107/1584 \nf 2159/2132/1609 2135/2108/1585 2160/2133/1610 \nf 2161/2134/1611 2134/2107/1584 2136/2109/1586 \nf 2162/2135/1612 2160/2133/1610 2134/2107/1584 \nf 2161/2134/1611 2162/2135/1612 2134/2107/1584 \nf 2163/2136/1613 2136/2109/1586 2137/2110/1587 \nf 2163/2136/1613 2161/2134/1611 2136/2109/1586 \nf 2164/2137/1614 2137/2110/1587 2138/2111/1588 \nf 2164/2137/1614 2163/2136/1613 2137/2110/1587 \nf 2165/2138/1615 2138/2111/1588 2139/2112/1589 \nf 2165/2138/1615 2164/2137/1614 2138/2111/1588 \nf 2166/2139/1616 2139/2112/1589 2140/2113/1590 \nf 2166/2139/1616 2165/2138/1615 2139/2112/1589 \nf 2167/2140/1617 2140/2113/1590 2141/2114/1591 \nf 2167/2140/1617 2166/2139/1616 2140/2113/1590 \nf 2168/2141/1618 2141/2114/1591 2142/2115/1592 \nf 2168/2141/1618 2167/2140/1617 2141/2114/1591 \nf 2169/2142/1619 2142/2115/1592 2143/2116/1593 \nf 2169/2142/1619 2168/2141/1618 2142/2115/1592 \nf 2170/2143/1620 2143/2116/1593 2144/2117/1594 \nf 2170/2143/1620 2169/2142/1619 2143/2116/1593 \nf 2171/2144/1621 2144/2117/1594 2145/2118/1595 \nf 2171/2144/1621 2170/2143/1620 2144/2117/1594 \nf 2172/2145/1622 2145/2118/1595 2146/2119/1596 \nf 2172/2145/1622 2171/2144/1621 2145/2118/1595 \nf 2173/2146/1623 2146/2119/1596 2147/2120/1597 \nf 2173/2146/1623 2172/2145/1622 2146/2119/1596 \nf 2174/2147/1624 2147/2120/1597 2148/2121/1598 \nf 2174/2147/1624 2173/2146/1623 2147/2120/1597 \nf 2175/2148/1625 2148/2121/1598 2149/2122/1599 \nf 2175/2148/1625 2174/2147/1624 2148/2121/1598 \nf 2176/2149/1626 2149/2122/1599 2150/2123/1600 \nf 2176/2149/1626 2175/2148/1625 2149/2122/1599 \nf 2177/2150/1627 2150/2123/1600 2151/2124/1601 \nf 2177/2150/1627 2176/2149/1626 2150/2123/1600 \nf 2178/2151/1628 2151/2124/1601 2152/2125/1602 \nf 2178/2151/1628 2177/2150/1627 2151/2124/1601 \nf 2179/2152/1629 2152/2125/1602 2153/2126/1603 \nf 2179/2152/1629 2178/2151/1628 2152/2125/1602 \nf 2180/2153/1630 2153/2126/1603 2154/2127/1604 \nf 2180/2153/1630 2179/2152/1629 2153/2126/1603 \nf 2181/2154/1631 2154/2127/1604 2155/2128/1605 \nf 2181/2154/1631 2180/2153/1630 2154/2127/1604 \nf 2182/2155/1632 2155/2128/1605 2156/2129/1606 \nf 2182/2155/1632 2181/2154/1631 2155/2128/1605 \nf 2183/2156/1633 2156/2129/1606 2157/2130/1607 \nf 2183/2156/1633 2182/2155/1632 2156/2129/1606 \nf 2184/2157/1634 2157/2130/1607 2158/2131/1608 \nf 2184/2157/1634 2183/2156/1633 2157/2130/1607 \nf 2185/2158/1635 2158/2131/1608 2037/2010/1480 \nf 2185/2158/1635 2184/2157/1634 2158/2131/1608 \nf 2040/2013/1483 2185/2158/1635 2037/2010/1480 \nf 2186/2159/1636 2160/2133/1610 2162/2135/1612 \nf 2186/2159/1636 2159/2132/1609 2160/2133/1610 \nf 2187/2160/1637 2162/2135/1612 2161/2134/1611 \nf 2186/2159/1636 2162/2135/1612 2187/2160/1637 \nf 2188/2161/1638 2161/2134/1611 2163/2136/1613 \nf 2189/2162/1639 2187/2160/1637 2161/2134/1611 \nf 2188/2161/1638 2189/2162/1639 2161/2134/1611 \nf 2190/2163/1640 2163/2136/1613 2164/2137/1614 \nf 2190/2163/1640 2188/2161/1638 2163/2136/1613 \nf 2191/2164/1641 2164/2137/1614 2165/2138/1615 \nf 2191/2164/1641 2190/2163/1640 2164/2137/1614 \nf 2192/2165/1642 2165/2138/1615 2166/2139/1616 \nf 2192/2165/1642 2191/2164/1641 2165/2138/1615 \nf 2193/2166/1643 2166/2139/1616 2167/2140/1617 \nf 2193/2166/1643 2192/2165/1642 2166/2139/1616 \nf 2194/2167/1644 2167/2140/1617 2168/2141/1618 \nf 2194/2167/1644 2193/2166/1643 2167/2140/1617 \nf 2195/2168/1645 2168/2141/1618 2169/2142/1619 \nf 2195/2168/1645 2194/2167/1644 2168/2141/1618 \nf 2196/2169/1646 2169/2142/1619 2170/2143/1620 \nf 2196/2169/1646 2195/2168/1645 2169/2142/1619 \nf 2197/2170/1647 2170/2143/1620 2171/2144/1621 \nf 2197/2170/1647 2196/2169/1646 2170/2143/1620 \nf 2198/2171/1648 2171/2144/1621 2172/2145/1622 \nf 2198/2171/1648 2197/2170/1647 2171/2144/1621 \nf 2199/2172/1649 2172/2145/1622 2173/2146/1623 \nf 2199/2172/1649 2198/2171/1648 2172/2145/1622 \nf 2200/2173/1650 2173/2146/1623 2174/2147/1624 \nf 2200/2173/1650 2199/2172/1649 2173/2146/1623 \nf 2201/2174/1651 2174/2147/1624 2175/2148/1625 \nf 2201/2174/1651 2200/2173/1650 2174/2147/1624 \nf 2202/2175/1652 2175/2148/1625 2176/2149/1626 \nf 2202/2175/1652 2201/2174/1651 2175/2148/1625 \nf 2203/2176/1653 2176/2149/1626 2177/2150/1627 \nf 2203/2176/1653 2202/2175/1652 2176/2149/1626 \nf 2204/2177/1654 2177/2150/1627 2178/2151/1628 \nf 2204/2177/1654 2203/2176/1653 2177/2150/1627 \nf 2205/2178/1655 2178/2151/1628 2179/2152/1629 \nf 2205/2178/1655 2204/2177/1654 2178/2151/1628 \nf 2206/2179/1656 2179/2152/1629 2180/2153/1630 \nf 2206/2179/1656 2205/2178/1655 2179/2152/1629 \nf 2207/2180/1657 2180/2153/1630 2181/2154/1631 \nf 2207/2180/1657 2206/2179/1656 2180/2153/1630 \nf 2208/2181/1658 2181/2154/1631 2182/2155/1632 \nf 2208/2181/1658 2207/2180/1657 2181/2154/1631 \nf 2209/2182/1659 2182/2155/1632 2183/2156/1633 \nf 2209/2182/1659 2208/2181/1658 2182/2155/1632 \nf 2210/2183/1660 2183/2156/1633 2184/2157/1634 \nf 2210/2183/1660 2209/2182/1659 2183/2156/1633 \nf 2211/2184/1661 2184/2157/1634 2185/2158/1635 \nf 2211/2184/1661 2210/2183/1660 2184/2157/1634 \nf 2212/2185/1662 2185/2158/1635 2040/2013/1483 \nf 2212/2185/1662 2211/2184/1661 2185/2158/1635 \nf 2043/2016/1486 2212/2185/1662 2040/2013/1483 \nf 2213/2186/1663 2187/2160/1637 2189/2162/1639 \nf 2213/2186/1663 2186/2159/1636 2187/2160/1637 \nf 2214/2187/1664 2189/2162/1639 2188/2161/1638 \nf 2213/2186/1663 2189/2162/1639 2214/2187/1664 \nf 2215/2188/1665 2188/2161/1638 2190/2163/1640 \nf 2216/2189/1666 2214/2187/1664 2188/2161/1638 \nf 2215/2188/1665 2216/2189/1666 2188/2161/1638 \nf 2217/2190/1667 2190/2163/1640 2191/2164/1641 \nf 2217/2190/1667 2215/2188/1665 2190/2163/1640 \nf 2218/2191/1668 2191/2164/1641 2192/2165/1642 \nf 2218/2191/1668 2217/2190/1667 2191/2164/1641 \nf 2219/2192/1669 2192/2165/1642 2193/2166/1643 \nf 2219/2192/1669 2218/2191/1668 2192/2165/1642 \nf 2220/2193/1670 2193/2166/1643 2194/2167/1644 \nf 2220/2193/1670 2219/2192/1669 2193/2166/1643 \nf 2221/2194/1671 2194/2167/1644 2195/2168/1645 \nf 2221/2194/1671 2220/2193/1670 2194/2167/1644 \nf 2222/2195/1672 2195/2168/1645 2196/2169/1646 \nf 2222/2195/1672 2221/2194/1671 2195/2168/1645 \nf 2223/2196/1673 2196/2169/1646 2197/2170/1647 \nf 2223/2196/1673 2222/2195/1672 2196/2169/1646 \nf 2224/2197/1674 2197/2170/1647 2198/2171/1648 \nf 2224/2197/1674 2223/2196/1673 2197/2170/1647 \nf 2225/2198/1675 2198/2171/1648 2199/2172/1649 \nf 2225/2198/1675 2224/2197/1674 2198/2171/1648 \nf 2226/2199/1676 2199/2172/1649 2200/2173/1650 \nf 2226/2199/1676 2225/2198/1675 2199/2172/1649 \nf 2227/2200/1677 2200/2173/1650 2201/2174/1651 \nf 2227/2200/1677 2226/2199/1676 2200/2173/1650 \nf 2228/2201/1678 2201/2174/1651 2202/2175/1652 \nf 2228/2201/1678 2227/2200/1677 2201/2174/1651 \nf 2229/2202/1679 2202/2175/1652 2203/2176/1653 \nf 2229/2202/1679 2228/2201/1678 2202/2175/1652 \nf 2230/2203/1680 2203/2176/1653 2204/2177/1654 \nf 2230/2203/1680 2229/2202/1679 2203/2176/1653 \nf 2231/2204/1681 2204/2177/1654 2205/2178/1655 \nf 2231/2204/1681 2230/2203/1680 2204/2177/1654 \nf 2232/2205/1682 2205/2178/1655 2206/2179/1656 \nf 2232/2205/1682 2231/2204/1681 2205/2178/1655 \nf 2233/2206/1683 2206/2179/1656 2207/2180/1657 \nf 2233/2206/1683 2232/2205/1682 2206/2179/1656 \nf 2234/2207/1684 2207/2180/1657 2208/2181/1658 \nf 2234/2207/1684 2233/2206/1683 2207/2180/1657 \nf 2235/2208/1685 2208/2181/1658 2209/2182/1659 \nf 2235/2208/1685 2234/2207/1684 2208/2181/1658 \nf 2236/2209/1686 2209/2182/1659 2210/2183/1660 \nf 2236/2209/1686 2235/2208/1685 2209/2182/1659 \nf 2237/2210/1687 2210/2183/1660 2211/2184/1661 \nf 2237/2210/1687 2236/2209/1686 2210/2183/1660 \nf 2238/2211/1688 2211/2184/1661 2212/2185/1662 \nf 2238/2211/1688 2237/2210/1687 2211/2184/1661 \nf 2239/2212/1689 2212/2185/1662 2043/2016/1486 \nf 2239/2212/1689 2238/2211/1688 2212/2185/1662 \nf 2046/2019/1488 2239/2212/1689 2043/2016/1486 \nf 2240/2213/1690 2214/2187/1664 2216/2189/1666 \nf 2240/2213/1690 2213/2186/1663 2214/2187/1664 \nf 2241/2214/1691 2216/2189/1666 2215/2188/1665 \nf 2240/2213/1690 2216/2189/1666 2241/2214/1691 \nf 1797/1775/1257 2215/2188/1665 2217/2190/1667 \nf 1798/1776/1692 2241/2214/1691 2215/2188/1665 \nf 1797/1775/1257 1798/1776/1692 2215/2188/1665 \nf 1979/1952/1413 2217/2190/1667 2218/2191/1668 \nf 1979/1952/1413 1797/1775/1257 2217/2190/1667 \nf 1978/1951/1412 2218/2191/1668 2219/2192/1669 \nf 1978/1951/1412 1979/1952/1413 2218/2191/1668 \nf 1977/1950/1411 2219/2192/1669 2220/2193/1670 \nf 1977/1950/1411 1978/1951/1412 2219/2192/1669 \nf 1976/1949/1410 2220/2193/1670 2221/2194/1671 \nf 1976/1949/1410 1977/1950/1411 2220/2193/1670 \nf 1975/1948/1409 2221/2194/1671 2222/2195/1672 \nf 1975/1948/1409 1976/1949/1410 2221/2194/1671 \nf 1974/1947/1408 2222/2195/1672 2223/2196/1673 \nf 1974/1947/1408 1975/1948/1409 2222/2195/1672 \nf 1973/1946/1407 2223/2196/1673 2224/2197/1674 \nf 1973/1946/1407 1974/1947/1408 2223/2196/1673 \nf 1972/1945/1406 2224/2197/1674 2225/2198/1675 \nf 1972/1945/1406 1973/1946/1407 2224/2197/1674 \nf 1971/1944/1405 2225/2198/1675 2226/2199/1676 \nf 1971/1944/1405 1972/1945/1406 2225/2198/1675 \nf 1970/1943/1404 2226/2199/1676 2227/2200/1677 \nf 1970/1943/1404 1971/1944/1405 2226/2199/1676 \nf 1969/1942/1403 2227/2200/1677 2228/2201/1678 \nf 1969/1942/1403 1970/1943/1404 2227/2200/1677 \nf 1968/1941/1402 2228/2201/1678 2229/2202/1679 \nf 1968/1941/1402 1969/1942/1403 2228/2201/1678 \nf 1967/1940/1401 2229/2202/1679 2230/2203/1680 \nf 1967/1940/1401 1968/1941/1402 2229/2202/1679 \nf 1966/1939/1400 2230/2203/1680 2231/2204/1681 \nf 1966/1939/1400 1967/1940/1401 2230/2203/1680 \nf 1965/1938/1399 2231/2204/1681 2232/2205/1682 \nf 1965/1938/1399 1966/1939/1400 2231/2204/1681 \nf 1964/1937/1398 2232/2205/1682 2233/2206/1683 \nf 1964/1937/1398 1965/1938/1399 2232/2205/1682 \nf 1963/1936/1397 2233/2206/1683 2234/2207/1684 \nf 1963/1936/1397 1964/1937/1398 2233/2206/1683 \nf 1962/1935/1396 2234/2207/1684 2235/2208/1685 \nf 1962/1935/1396 1963/1936/1397 2234/2207/1684 \nf 1961/1934/1395 2235/2208/1685 2236/2209/1686 \nf 1961/1934/1395 1962/1935/1396 2235/2208/1685 \nf 1960/1933/1394 2236/2209/1686 2237/2210/1687 \nf 1960/1933/1394 1961/1934/1395 2236/2209/1686 \nf 1959/1932/1393 2237/2210/1687 2238/2211/1688 \nf 1959/1932/1393 1960/1933/1394 2237/2210/1687 \nf 1958/1931/1392 2238/2211/1688 2239/2212/1689 \nf 1958/1931/1392 1959/1932/1393 2238/2211/1688 \nf 1956/1929/1390 2239/2212/1689 2046/2019/1488 \nf 1956/1929/1390 1958/1931/1392 2239/2212/1689 \nf 1957/1930/1391 1956/1929/1390 2046/2019/1488 \nf 2242/2215/1693 2241/2214/1691 1798/1776/1692 \nf 2242/2215/1693 2240/2213/1690 2241/2214/1691 \nf 1798/1776/1258 1798/1776/1692 1797/1775/1257 \nf 2242/2215/1693 1798/1776/1692 1798/1776/1258 \nf 1796/1774/1256 2242/2215/1693 1798/1776/1258 \nf 2243/2216/1694 282/279/115 2105/2078/1555 \nf 2243/2216/1694 277/274/113 282/279/115 \nf 2244/2217/1695 2105/2078/1555 2132/2105/1582 \nf 2244/2217/1695 2243/2216/1694 2105/2078/1555 \nf 2245/2218/1696 2132/2105/1582 2159/2132/1609 \nf 2245/2218/1696 2244/2217/1695 2132/2105/1582 \nf 2246/2219/1697 2159/2132/1609 2186/2159/1636 \nf 2246/2219/1697 2245/2218/1696 2159/2132/1609 \nf 2247/2220/1698 2186/2159/1636 2213/2186/1663 \nf 2247/2220/1698 2246/2219/1697 2186/2159/1636 \nf 2248/2221/1699 2213/2186/1663 2240/2213/1690 \nf 2248/2221/1699 2247/2220/1698 2213/2186/1663 \nf 2249/2222/1700 2240/2213/1690 2242/2215/1693 \nf 2249/2222/1700 2248/2221/1699 2240/2213/1690 \nf 1980/1953/1414 2242/2215/1693 1796/1774/1256 \nf 1980/1953/1414 2249/2222/1700 2242/2215/1693 \nf 2250/2223/1701 222/219/94 227/224/96 \nf 2250/2223/1701 223/220/95 222/219/94 \nf 2251/2224/1702 227/224/96 230/227/97 \nf 2251/2224/1702 2250/2223/1701 227/224/96 \nf 2252/2225/1703 230/227/97 232/229/98 \nf 2252/2225/1703 2251/2224/1702 230/227/97 \nf 2253/2226/1704 232/229/98 235/232/99 \nf 2253/2226/1704 2252/2225/1703 232/229/98 \nf 2254/2227/1705 235/232/99 238/235/100 \nf 2254/2227/1705 2253/2226/1704 235/232/99 \nf 2255/2228/1706 238/235/100 242/239/101 \nf 2255/2228/1706 2254/2227/1705 238/235/100 \nf 2256/2229/1707 242/239/101 245/242/102 \nf 2256/2229/1707 2255/2228/1706 242/239/101 \nf 2257/2230/1708 245/242/102 248/245/103 \nf 2257/2230/1708 2256/2229/1707 245/242/102 \nf 2258/2231/1709 248/245/103 251/248/104 \nf 2258/2231/1709 2257/2230/1708 248/245/103 \nf 2259/2232/1710 251/248/104 253/250/105 \nf 2259/2232/1710 2258/2231/1709 251/248/104 \nf 2260/2233/1711 253/250/105 256/253/106 \nf 2260/2233/1711 2259/2232/1710 253/250/105 \nf 2261/2234/1712 256/253/106 259/256/107 \nf 2261/2234/1712 2260/2233/1711 256/253/106 \nf 2262/2235/1713 259/256/107 262/259/108 \nf 2262/2235/1713 2261/2234/1712 259/256/107 \nf 2263/2236/1714 262/259/108 265/262/109 \nf 2263/2236/1714 2262/2235/1713 262/259/108 \nf 2264/2237/1715 265/262/109 268/265/110 \nf 2264/2237/1715 2263/2236/1714 265/262/109 \nf 2265/2238/1716 268/265/110 271/268/111 \nf 2265/2238/1716 2264/2237/1715 268/265/110 \nf 2266/2239/1717 271/268/111 274/271/112 \nf 2266/2239/1717 2265/2238/1716 271/268/111 \nf 2243/2216/1694 274/271/112 277/274/113 \nf 2243/2216/1694 2266/2239/1717 274/271/112 \nf 2267/2240/1718 184/181/77 191/188/80 \nf 185/182/78 184/181/77 2267/2240/1718 \nf 2268/2241/1719 191/188/80 190/187/79 \nf 2269/2242/1720 2267/2240/1718 191/188/80 \nf 2268/2241/1719 2269/2242/1720 191/188/80 \nf 2270/2243/1721 190/187/79 193/190/81 \nf 2270/2243/1721 2268/2241/1719 190/187/79 \nf 2271/2244/1722 193/190/81 195/192/82 \nf 2271/2244/1722 2270/2243/1721 193/190/81 \nf 2272/2245/1723 195/192/82 197/194/83 \nf 2272/2245/1723 2271/2244/1722 195/192/82 \nf 2273/2246/1724 197/194/83 199/196/84 \nf 2273/2246/1724 2272/2245/1723 197/194/83 \nf 2274/2247/1725 199/196/84 202/199/85 \nf 2274/2247/1725 2273/2246/1724 199/196/84 \nf 2275/2248/1726 202/199/85 204/201/86 \nf 2275/2248/1726 2274/2247/1725 202/199/85 \nf 2276/2249/1727 204/201/86 206/203/87 \nf 2276/2249/1727 2275/2248/1726 204/201/86 \nf 2277/2250/1728 206/203/87 208/205/88 \nf 2277/2250/1728 2276/2249/1727 206/203/87 \nf 2278/2251/1729 208/205/88 210/207/89 \nf 2278/2251/1729 2277/2250/1728 208/205/88 \nf 2279/2252/1730 210/207/89 213/210/90 \nf 2279/2252/1730 2278/2251/1729 210/207/89 \nf 2280/2253/1731 213/210/90 215/212/91 \nf 2280/2253/1731 2279/2252/1730 213/210/90 \nf 2281/2254/1732 215/212/91 217/214/92 \nf 2281/2254/1732 2280/2253/1731 215/212/91 \nf 2282/2255/1733 217/214/92 219/216/93 \nf 2282/2255/1733 2281/2254/1732 217/214/92 \nf 2283/2256/1734 219/216/93 223/220/95 \nf 2283/2256/1734 2282/2255/1733 219/216/93 \nf 2284/2257/1735 223/220/95 2250/2223/1701 \nf 2284/2257/1735 2283/2256/1734 223/220/95 \nf 2285/2258/1736 2250/2223/1701 2251/2224/1702 \nf 2285/2258/1736 2284/2257/1735 2250/2223/1701 \nf 2286/2259/1737 2251/2224/1702 2252/2225/1703 \nf 2286/2259/1737 2285/2258/1736 2251/2224/1702 \nf 2287/2260/1738 2252/2225/1703 2253/2226/1704 \nf 2287/2260/1738 2286/2259/1737 2252/2225/1703 \nf 2288/2261/1739 2253/2226/1704 2254/2227/1705 \nf 2288/2261/1739 2287/2260/1738 2253/2226/1704 \nf 2289/2262/1740 2254/2227/1705 2255/2228/1706 \nf 2289/2262/1740 2288/2261/1739 2254/2227/1705 \nf 2290/2263/1741 2255/2228/1706 2256/2229/1707 \nf 2290/2263/1741 2289/2262/1740 2255/2228/1706 \nf 2291/2264/1742 2256/2229/1707 2257/2230/1708 \nf 2291/2264/1742 2290/2263/1741 2256/2229/1707 \nf 2292/2265/1743 2257/2230/1708 2258/2231/1709 \nf 2292/2265/1743 2291/2264/1742 2257/2230/1708 \nf 2293/2266/1744 2258/2231/1709 2259/2232/1710 \nf 2293/2266/1744 2292/2265/1743 2258/2231/1709 \nf 2294/2267/1745 2259/2232/1710 2260/2233/1711 \nf 2294/2267/1745 2293/2266/1744 2259/2232/1710 \nf 2295/2268/1746 2260/2233/1711 2261/2234/1712 \nf 2295/2268/1746 2294/2267/1745 2260/2233/1711 \nf 2296/2269/1747 2261/2234/1712 2262/2235/1713 \nf 2296/2269/1747 2295/2268/1746 2261/2234/1712 \nf 2297/2270/1748 2262/2235/1713 2263/2236/1714 \nf 2297/2270/1748 2296/2269/1747 2262/2235/1713 \nf 2298/2271/1749 2263/2236/1714 2264/2237/1715 \nf 2298/2271/1749 2297/2270/1748 2263/2236/1714 \nf 2299/2272/1750 2264/2237/1715 2265/2238/1716 \nf 2299/2272/1750 2298/2271/1749 2264/2237/1715 \nf 2300/2273/1751 2265/2238/1716 2266/2239/1717 \nf 2300/2273/1751 2299/2272/1750 2265/2238/1716 \nf 2301/2274/1752 2266/2239/1717 2243/2216/1694 \nf 2301/2274/1752 2300/2273/1751 2266/2239/1717 \nf 2244/2217/1695 2301/2274/1752 2243/2216/1694 \nf 2302/2275/1718 2267/2240/1718 2269/2242/1720 \nf 2302/2275/1718 185/182/78 2267/2240/1718 \nf 2303/2276/1753 2269/2242/1720 2268/2241/1719 \nf 2304/2277/1754 2269/2242/1720 2303/2276/1753 \nf 2304/2277/1754 2302/2275/1718 2269/2242/1720 \nf 2305/2278/1755 2268/2241/1719 2270/2243/1721 \nf 2306/2279/1756 2303/2276/1753 2268/2241/1719 \nf 2305/2278/1755 2306/2279/1756 2268/2241/1719 \nf 2307/2280/1757 2270/2243/1721 2271/2244/1722 \nf 2307/2280/1757 2305/2278/1755 2270/2243/1721 \nf 2308/2281/1758 2271/2244/1722 2272/2245/1723 \nf 2308/2281/1758 2307/2280/1757 2271/2244/1722 \nf 2309/2282/1759 2272/2245/1723 2273/2246/1724 \nf 2309/2282/1759 2308/2281/1758 2272/2245/1723 \nf 2310/2283/1760 2273/2246/1724 2274/2247/1725 \nf 2310/2283/1760 2309/2282/1759 2273/2246/1724 \nf 2311/2284/1761 2274/2247/1725 2275/2248/1726 \nf 2311/2284/1761 2310/2283/1760 2274/2247/1725 \nf 2312/2285/1762 2275/2248/1726 2276/2249/1727 \nf 2312/2285/1762 2311/2284/1761 2275/2248/1726 \nf 2313/2286/1763 2276/2249/1727 2277/2250/1728 \nf 2313/2286/1763 2312/2285/1762 2276/2249/1727 \nf 2314/2287/1764 2277/2250/1728 2278/2251/1729 \nf 2314/2287/1764 2313/2286/1763 2277/2250/1728 \nf 2315/2288/1765 2278/2251/1729 2279/2252/1730 \nf 2315/2288/1765 2314/2287/1764 2278/2251/1729 \nf 2316/2289/1766 2279/2252/1730 2280/2253/1731 \nf 2316/2289/1766 2315/2288/1765 2279/2252/1730 \nf 2317/2290/1767 2280/2253/1731 2281/2254/1732 \nf 2317/2290/1767 2316/2289/1766 2280/2253/1731 \nf 2318/2291/1768 2281/2254/1732 2282/2255/1733 \nf 2318/2291/1768 2317/2290/1767 2281/2254/1732 \nf 2319/2292/1769 2282/2255/1733 2283/2256/1734 \nf 2319/2292/1769 2318/2291/1768 2282/2255/1733 \nf 2320/2293/1770 2283/2256/1734 2284/2257/1735 \nf 2320/2293/1770 2319/2292/1769 2283/2256/1734 \nf 2321/2294/1771 2284/2257/1735 2285/2258/1736 \nf 2321/2294/1771 2320/2293/1770 2284/2257/1735 \nf 2322/2295/1772 2285/2258/1736 2286/2259/1737 \nf 2322/2295/1772 2321/2294/1771 2285/2258/1736 \nf 2323/2296/1773 2286/2259/1737 2287/2260/1738 \nf 2323/2296/1773 2322/2295/1772 2286/2259/1737 \nf 2324/2297/1774 2287/2260/1738 2288/2261/1739 \nf 2324/2297/1774 2323/2296/1773 2287/2260/1738 \nf 2325/2298/1775 2288/2261/1739 2289/2262/1740 \nf 2325/2298/1775 2324/2297/1774 2288/2261/1739 \nf 2326/2299/1776 2289/2262/1740 2290/2263/1741 \nf 2326/2299/1776 2325/2298/1775 2289/2262/1740 \nf 2327/2300/1777 2290/2263/1741 2291/2264/1742 \nf 2327/2300/1777 2326/2299/1776 2290/2263/1741 \nf 2328/2301/1778 2291/2264/1742 2292/2265/1743 \nf 2328/2301/1778 2327/2300/1777 2291/2264/1742 \nf 2329/2302/1779 2292/2265/1743 2293/2266/1744 \nf 2329/2302/1779 2328/2301/1778 2292/2265/1743 \nf 2330/2303/1780 2293/2266/1744 2294/2267/1745 \nf 2330/2303/1780 2329/2302/1779 2293/2266/1744 \nf 2331/2304/1781 2294/2267/1745 2295/2268/1746 \nf 2331/2304/1781 2330/2303/1780 2294/2267/1745 \nf 2332/2305/1782 2295/2268/1746 2296/2269/1747 \nf 2332/2305/1782 2331/2304/1781 2295/2268/1746 \nf 2333/2306/1783 2296/2269/1747 2297/2270/1748 \nf 2333/2306/1783 2332/2305/1782 2296/2269/1747 \nf 2334/2307/1784 2297/2270/1748 2298/2271/1749 \nf 2334/2307/1784 2333/2306/1783 2297/2270/1748 \nf 2335/2308/1785 2298/2271/1749 2299/2272/1750 \nf 2335/2308/1785 2334/2307/1784 2298/2271/1749 \nf 2336/2309/1786 2299/2272/1750 2300/2273/1751 \nf 2336/2309/1786 2335/2308/1785 2299/2272/1750 \nf 2337/2310/1787 2300/2273/1751 2301/2274/1752 \nf 2337/2310/1787 2336/2309/1786 2300/2273/1751 \nf 2338/2311/1788 2301/2274/1752 2244/2217/1695 \nf 2338/2311/1788 2337/2310/1787 2301/2274/1752 \nf 2245/2218/1696 2338/2311/1788 2244/2217/1695 \nf 2339/2312/1753 2303/2276/1753 2306/2279/1756 \nf 2339/2312/1753 2304/2277/1754 2303/2276/1753 \nf 2340/2313/1789 2306/2279/1756 2305/2278/1755 \nf 2341/2314/1790 2306/2279/1756 2340/2313/1789 \nf 2341/2314/1790 2339/2312/1753 2306/2279/1756 \nf 2342/2315/1791 2305/2278/1755 2307/2280/1757 \nf 2343/2316/1792 2340/2313/1789 2305/2278/1755 \nf 2342/2315/1791 2343/2316/1792 2305/2278/1755 \nf 2344/2317/1793 2307/2280/1757 2308/2281/1758 \nf 2344/2317/1793 2342/2315/1791 2307/2280/1757 \nf 2345/2318/1794 2308/2281/1758 2309/2282/1759 \nf 2345/2318/1794 2344/2317/1793 2308/2281/1758 \nf 2346/2319/1795 2309/2282/1759 2310/2283/1760 \nf 2346/2319/1795 2345/2318/1794 2309/2282/1759 \nf 2347/2320/1796 2310/2283/1760 2311/2284/1761 \nf 2347/2320/1796 2346/2319/1795 2310/2283/1760 \nf 2348/2321/1797 2311/2284/1761 2312/2285/1762 \nf 2348/2321/1797 2347/2320/1796 2311/2284/1761 \nf 2349/2322/1798 2312/2285/1762 2313/2286/1763 \nf 2349/2322/1798 2348/2321/1797 2312/2285/1762 \nf 2350/2323/1799 2313/2286/1763 2314/2287/1764 \nf 2350/2323/1799 2349/2322/1798 2313/2286/1763 \nf 2351/2324/1800 2314/2287/1764 2315/2288/1765 \nf 2351/2324/1800 2350/2323/1799 2314/2287/1764 \nf 2352/2325/1801 2315/2288/1765 2316/2289/1766 \nf 2352/2325/1801 2351/2324/1800 2315/2288/1765 \nf 2353/2326/1802 2316/2289/1766 2317/2290/1767 \nf 2353/2326/1802 2352/2325/1801 2316/2289/1766 \nf 2354/2327/1803 2317/2290/1767 2318/2291/1768 \nf 2354/2327/1803 2353/2326/1802 2317/2290/1767 \nf 2355/2328/1804 2318/2291/1768 2319/2292/1769 \nf 2355/2328/1804 2354/2327/1803 2318/2291/1768 \nf 2356/2329/1805 2319/2292/1769 2320/2293/1770 \nf 2356/2329/1805 2355/2328/1804 2319/2292/1769 \nf 2357/2330/1806 2320/2293/1770 2321/2294/1771 \nf 2357/2330/1806 2356/2329/1805 2320/2293/1770 \nf 2358/2331/1807 2321/2294/1771 2322/2295/1772 \nf 2358/2331/1807 2357/2330/1806 2321/2294/1771 \nf 2359/2332/1808 2322/2295/1772 2323/2296/1773 \nf 2359/2332/1808 2358/2331/1807 2322/2295/1772 \nf 2360/2333/1809 2323/2296/1773 2324/2297/1774 \nf 2360/2333/1809 2359/2332/1808 2323/2296/1773 \nf 2361/2334/1810 2324/2297/1774 2325/2298/1775 \nf 2361/2334/1810 2360/2333/1809 2324/2297/1774 \nf 2362/2335/1811 2325/2298/1775 2326/2299/1776 \nf 2362/2335/1811 2361/2334/1810 2325/2298/1775 \nf 2363/2336/1812 2326/2299/1776 2327/2300/1777 \nf 2363/2336/1812 2362/2335/1811 2326/2299/1776 \nf 2364/2337/1813 2327/2300/1777 2328/2301/1778 \nf 2364/2337/1813 2363/2336/1812 2327/2300/1777 \nf 2365/2338/1814 2328/2301/1778 2329/2302/1779 \nf 2365/2338/1814 2364/2337/1813 2328/2301/1778 \nf 2366/2339/1815 2329/2302/1779 2330/2303/1780 \nf 2366/2339/1815 2365/2338/1814 2329/2302/1779 \nf 2367/2340/1816 2330/2303/1780 2331/2304/1781 \nf 2367/2340/1816 2366/2339/1815 2330/2303/1780 \nf 2368/2341/1817 2331/2304/1781 2332/2305/1782 \nf 2368/2341/1817 2367/2340/1816 2331/2304/1781 \nf 2369/2342/1818 2332/2305/1782 2333/2306/1783 \nf 2369/2342/1818 2368/2341/1817 2332/2305/1782 \nf 2370/2343/1819 2333/2306/1783 2334/2307/1784 \nf 2370/2343/1819 2369/2342/1818 2333/2306/1783 \nf 2371/2344/1820 2334/2307/1784 2335/2308/1785 \nf 2371/2344/1820 2370/2343/1819 2334/2307/1784 \nf 2372/2345/1821 2335/2308/1785 2336/2309/1786 \nf 2372/2345/1821 2371/2344/1820 2335/2308/1785 \nf 2373/2346/1822 2336/2309/1786 2337/2310/1787 \nf 2373/2346/1822 2372/2345/1821 2336/2309/1786 \nf 2374/2347/1823 2337/2310/1787 2338/2311/1788 \nf 2374/2347/1823 2373/2346/1822 2337/2310/1787 \nf 2375/2348/1824 2338/2311/1788 2245/2218/1696 \nf 2375/2348/1824 2374/2347/1823 2338/2311/1788 \nf 2246/2219/1697 2375/2348/1824 2245/2218/1696 \nf 2376/2314/1789 2340/2313/1789 2343/2316/1792 \nf 2376/2314/1789 2341/2314/1790 2340/2313/1789 \nf 2377/2349/1825 2343/2316/1792 2342/2315/1791 \nf 2378/2350/1826 2343/2316/1792 2377/2349/1825 \nf 2378/2350/1826 2376/2314/1789 2343/2316/1792 \nf 2379/2351/1827 2342/2315/1791 2344/2317/1793 \nf 2380/2352/1828 2377/2349/1825 2342/2315/1791 \nf 2379/2351/1827 2380/2352/1828 2342/2315/1791 \nf 2381/2353/1829 2344/2317/1793 2345/2318/1794 \nf 2381/2353/1829 2379/2351/1827 2344/2317/1793 \nf 2382/2354/1830 2345/2318/1794 2346/2319/1795 \nf 2382/2354/1830 2381/2353/1829 2345/2318/1794 \nf 2383/2355/1831 2346/2319/1795 2347/2320/1796 \nf 2383/2355/1831 2382/2354/1830 2346/2319/1795 \nf 2384/2356/1832 2347/2320/1796 2348/2321/1797 \nf 2384/2356/1832 2383/2355/1831 2347/2320/1796 \nf 2385/2357/1833 2348/2321/1797 2349/2322/1798 \nf 2385/2357/1833 2384/2356/1832 2348/2321/1797 \nf 2386/2358/1834 2349/2322/1798 2350/2323/1799 \nf 2386/2358/1834 2385/2357/1833 2349/2322/1798 \nf 2387/2359/1835 2350/2323/1799 2351/2324/1800 \nf 2387/2359/1835 2386/2358/1834 2350/2323/1799 \nf 2388/2360/1836 2351/2324/1800 2352/2325/1801 \nf 2388/2360/1836 2387/2359/1835 2351/2324/1800 \nf 2389/2361/1837 2352/2325/1801 2353/2326/1802 \nf 2389/2361/1837 2388/2360/1836 2352/2325/1801 \nf 2390/2362/1838 2353/2326/1802 2354/2327/1803 \nf 2390/2362/1838 2389/2361/1837 2353/2326/1802 \nf 2391/2363/1839 2354/2327/1803 2355/2328/1804 \nf 2391/2363/1839 2390/2362/1838 2354/2327/1803 \nf 2392/2364/1840 2355/2328/1804 2356/2329/1805 \nf 2392/2364/1840 2391/2363/1839 2355/2328/1804 \nf 2393/2365/1841 2356/2329/1805 2357/2330/1806 \nf 2393/2365/1841 2392/2364/1840 2356/2329/1805 \nf 2394/2366/1842 2357/2330/1806 2358/2331/1807 \nf 2394/2366/1842 2393/2365/1841 2357/2330/1806 \nf 2395/2367/1843 2358/2331/1807 2359/2332/1808 \nf 2395/2367/1843 2394/2366/1842 2358/2331/1807 \nf 2396/2368/1844 2359/2332/1808 2360/2333/1809 \nf 2396/2368/1844 2395/2367/1843 2359/2332/1808 \nf 2397/2369/1845 2360/2333/1809 2361/2334/1810 \nf 2397/2369/1845 2396/2368/1844 2360/2333/1809 \nf 2398/2370/1846 2361/2334/1810 2362/2335/1811 \nf 2398/2370/1846 2397/2369/1845 2361/2334/1810 \nf 2399/2371/1847 2362/2335/1811 2363/2336/1812 \nf 2399/2371/1847 2398/2370/1846 2362/2335/1811 \nf 2400/2372/1848 2363/2336/1812 2364/2337/1813 \nf 2400/2372/1848 2399/2371/1847 2363/2336/1812 \nf 2401/2373/1849 2364/2337/1813 2365/2338/1814 \nf 2401/2373/1849 2400/2372/1848 2364/2337/1813 \nf 2402/2374/1850 2365/2338/1814 2366/2339/1815 \nf 2402/2374/1850 2401/2373/1849 2365/2338/1814 \nf 2403/2375/1851 2366/2339/1815 2367/2340/1816 \nf 2403/2375/1851 2402/2374/1850 2366/2339/1815 \nf 2404/2376/1852 2367/2340/1816 2368/2341/1817 \nf 2404/2376/1852 2403/2375/1851 2367/2340/1816 \nf 2405/2377/1853 2368/2341/1817 2369/2342/1818 \nf 2405/2377/1853 2404/2376/1852 2368/2341/1817 \nf 2406/2378/1854 2369/2342/1818 2370/2343/1819 \nf 2406/2378/1854 2405/2377/1853 2369/2342/1818 \nf 2407/2379/1855 2370/2343/1819 2371/2344/1820 \nf 2407/2379/1855 2406/2378/1854 2370/2343/1819 \nf 2408/2380/1856 2371/2344/1820 2372/2345/1821 \nf 2408/2380/1856 2407/2379/1855 2371/2344/1820 \nf 2409/2381/1857 2372/2345/1821 2373/2346/1822 \nf 2409/2381/1857 2408/2380/1856 2372/2345/1821 \nf 2410/2382/1858 2373/2346/1822 2374/2347/1823 \nf 2410/2382/1858 2409/2381/1857 2373/2346/1822 \nf 2411/2383/1859 2374/2347/1823 2375/2348/1824 \nf 2411/2383/1859 2410/2382/1858 2374/2347/1823 \nf 2412/2384/1860 2375/2348/1824 2246/2219/1697 \nf 2412/2384/1860 2411/2383/1859 2375/2348/1824 \nf 2247/2220/1698 2412/2384/1860 2246/2219/1697 \nf 2413/2385/1825 2377/2349/1825 2380/2352/1828 \nf 2413/2385/1825 2378/2350/1826 2377/2349/1825 \nf 2414/2386/1861 2380/2352/1828 2379/2351/1827 \nf 2415/2387/1862 2380/2352/1828 2414/2386/1861 \nf 2415/2387/1862 2413/2385/1825 2380/2352/1828 \nf 2416/2388/1863 2379/2351/1827 2381/2353/1829 \nf 2417/2389/1864 2414/2386/1861 2379/2351/1827 \nf 2416/2388/1863 2417/2389/1864 2379/2351/1827 \nf 2418/2390/1865 2381/2353/1829 2382/2354/1830 \nf 2418/2390/1865 2416/2388/1863 2381/2353/1829 \nf 2419/2391/1866 2382/2354/1830 2383/2355/1831 \nf 2419/2391/1866 2418/2390/1865 2382/2354/1830 \nf 2420/2392/1867 2383/2355/1831 2384/2356/1832 \nf 2420/2392/1867 2419/2391/1866 2383/2355/1831 \nf 2421/2393/1868 2384/2356/1832 2385/2357/1833 \nf 2421/2393/1868 2420/2392/1867 2384/2356/1832 \nf 2422/2394/1869 2385/2357/1833 2386/2358/1834 \nf 2422/2394/1869 2421/2393/1868 2385/2357/1833 \nf 2423/2395/1870 2386/2358/1834 2387/2359/1835 \nf 2423/2395/1870 2422/2394/1869 2386/2358/1834 \nf 2424/2396/1871 2387/2359/1835 2388/2360/1836 \nf 2424/2396/1871 2423/2395/1870 2387/2359/1835 \nf 2425/2397/1872 2388/2360/1836 2389/2361/1837 \nf 2425/2397/1872 2424/2396/1871 2388/2360/1836 \nf 2426/2398/1873 2389/2361/1837 2390/2362/1838 \nf 2426/2398/1873 2425/2397/1872 2389/2361/1837 \nf 2427/2399/1874 2390/2362/1838 2391/2363/1839 \nf 2427/2399/1874 2426/2398/1873 2390/2362/1838 \nf 2428/2400/1875 2391/2363/1839 2392/2364/1840 \nf 2428/2400/1875 2427/2399/1874 2391/2363/1839 \nf 2429/2401/1876 2392/2364/1840 2393/2365/1841 \nf 2429/2401/1876 2428/2400/1875 2392/2364/1840 \nf 2430/2402/1877 2393/2365/1841 2394/2366/1842 \nf 2430/2402/1877 2429/2401/1876 2393/2365/1841 \nf 2431/2403/1878 2394/2366/1842 2395/2367/1843 \nf 2431/2403/1878 2430/2402/1877 2394/2366/1842 \nf 2432/2404/1879 2395/2367/1843 2396/2368/1844 \nf 2432/2404/1879 2431/2403/1878 2395/2367/1843 \nf 2433/2405/1880 2396/2368/1844 2397/2369/1845 \nf 2433/2405/1880 2432/2404/1879 2396/2368/1844 \nf 2434/2406/1881 2397/2369/1845 2398/2370/1846 \nf 2434/2406/1881 2433/2405/1880 2397/2369/1845 \nf 2435/2407/1882 2398/2370/1846 2399/2371/1847 \nf 2435/2407/1882 2434/2406/1881 2398/2370/1846 \nf 2436/2408/1883 2399/2371/1847 2400/2372/1848 \nf 2436/2408/1883 2435/2407/1882 2399/2371/1847 \nf 2437/2409/1884 2400/2372/1848 2401/2373/1849 \nf 2437/2409/1884 2436/2408/1883 2400/2372/1848 \nf 2438/2410/1885 2401/2373/1849 2402/2374/1850 \nf 2438/2410/1885 2437/2409/1884 2401/2373/1849 \nf 2439/2411/1886 2402/2374/1850 2403/2375/1851 \nf 2439/2411/1886 2438/2410/1885 2402/2374/1850 \nf 2440/2412/1887 2403/2375/1851 2404/2376/1852 \nf 2440/2412/1887 2439/2411/1886 2403/2375/1851 \nf 2441/2413/1888 2404/2376/1852 2405/2377/1853 \nf 2441/2413/1888 2440/2412/1887 2404/2376/1852 \nf 2442/2414/1889 2405/2377/1853 2406/2378/1854 \nf 2442/2414/1889 2441/2413/1888 2405/2377/1853 \nf 2443/2415/1890 2406/2378/1854 2407/2379/1855 \nf 2443/2415/1890 2442/2414/1889 2406/2378/1854 \nf 2444/2416/1891 2407/2379/1855 2408/2380/1856 \nf 2444/2416/1891 2443/2415/1890 2407/2379/1855 \nf 2445/2417/1892 2408/2380/1856 2409/2381/1857 \nf 2445/2417/1892 2444/2416/1891 2408/2380/1856 \nf 2446/2418/1893 2409/2381/1857 2410/2382/1858 \nf 2446/2418/1893 2445/2417/1892 2409/2381/1857 \nf 2447/2419/1894 2410/2382/1858 2411/2383/1859 \nf 2447/2419/1894 2446/2418/1893 2410/2382/1858 \nf 2448/2420/1895 2411/2383/1859 2412/2384/1860 \nf 2448/2420/1895 2447/2419/1894 2411/2383/1859 \nf 2449/2421/1896 2412/2384/1860 2247/2220/1698 \nf 2449/2421/1896 2448/2420/1895 2412/2384/1860 \nf 2248/2221/1699 2449/2421/1896 2247/2220/1698 \nf 2450/2422/1861 2414/2386/1861 2417/2389/1864 \nf 2450/2422/1861 2415/2387/1862 2414/2386/1861 \nf 2451/2423/1897 2417/2389/1864 2416/2388/1863 \nf 2452/2424/1898 2417/2389/1864 2451/2423/1897 \nf 2452/2424/1898 2450/2422/1861 2417/2389/1864 \nf 2453/2425/1899 2416/2388/1863 2418/2390/1865 \nf 2454/2423/1900 2451/2423/1897 2416/2388/1863 \nf 2453/2425/1899 2454/2423/1900 2416/2388/1863 \nf 2455/2426/1901 2418/2390/1865 2419/2391/1866 \nf 2455/2426/1901 2453/2425/1899 2418/2390/1865 \nf 2456/2427/1902 2419/2391/1866 2420/2392/1867 \nf 2456/2427/1902 2455/2426/1901 2419/2391/1866 \nf 2457/2428/1903 2420/2392/1867 2421/2393/1868 \nf 2457/2428/1903 2456/2427/1902 2420/2392/1867 \nf 2458/2429/1904 2421/2393/1868 2422/2394/1869 \nf 2458/2429/1904 2457/2428/1903 2421/2393/1868 \nf 2459/2430/1905 2422/2394/1869 2423/2395/1870 \nf 2459/2430/1905 2458/2429/1904 2422/2394/1869 \nf 2460/2431/1906 2423/2395/1870 2424/2396/1871 \nf 2460/2431/1906 2459/2430/1905 2423/2395/1870 \nf 2461/2432/1907 2424/2396/1871 2425/2397/1872 \nf 2461/2432/1907 2460/2431/1906 2424/2396/1871 \nf 2462/2433/1908 2425/2397/1872 2426/2398/1873 \nf 2462/2433/1908 2461/2432/1907 2425/2397/1872 \nf 2463/2434/1909 2426/2398/1873 2427/2399/1874 \nf 2463/2434/1909 2462/2433/1908 2426/2398/1873 \nf 2464/2435/1910 2427/2399/1874 2428/2400/1875 \nf 2464/2435/1910 2463/2434/1909 2427/2399/1874 \nf 2465/2436/1911 2428/2400/1875 2429/2401/1876 \nf 2465/2436/1911 2464/2435/1910 2428/2400/1875 \nf 2466/2437/1912 2429/2401/1876 2430/2402/1877 \nf 2466/2437/1912 2465/2436/1911 2429/2401/1876 \nf 2467/2438/1913 2430/2402/1877 2431/2403/1878 \nf 2467/2438/1913 2466/2437/1912 2430/2402/1877 \nf 2468/2439/1914 2431/2403/1878 2432/2404/1879 \nf 2468/2439/1914 2467/2438/1913 2431/2403/1878 \nf 2469/2440/1915 2432/2404/1879 2433/2405/1880 \nf 2469/2440/1915 2468/2439/1914 2432/2404/1879 \nf 2470/2441/1916 2433/2405/1880 2434/2406/1881 \nf 2470/2441/1916 2469/2440/1915 2433/2405/1880 \nf 2471/2442/1917 2434/2406/1881 2435/2407/1882 \nf 2471/2442/1917 2470/2441/1916 2434/2406/1881 \nf 2472/2443/1918 2435/2407/1882 2436/2408/1883 \nf 2472/2443/1918 2471/2442/1917 2435/2407/1882 \nf 2473/2444/1919 2436/2408/1883 2437/2409/1884 \nf 2473/2444/1919 2472/2443/1918 2436/2408/1883 \nf 2474/2445/1920 2437/2409/1884 2438/2410/1885 \nf 2474/2445/1920 2473/2444/1919 2437/2409/1884 \nf 2475/2446/1921 2438/2410/1885 2439/2411/1886 \nf 2475/2446/1921 2474/2445/1920 2438/2410/1885 \nf 2476/2447/1922 2439/2411/1886 2440/2412/1887 \nf 2476/2447/1922 2475/2446/1921 2439/2411/1886 \nf 2477/2448/1923 2440/2412/1887 2441/2413/1888 \nf 2477/2448/1923 2476/2447/1922 2440/2412/1887 \nf 2478/2449/1924 2441/2413/1888 2442/2414/1889 \nf 2478/2449/1924 2477/2448/1923 2441/2413/1888 \nf 2479/2450/1925 2442/2414/1889 2443/2415/1890 \nf 2479/2450/1925 2478/2449/1924 2442/2414/1889 \nf 2480/2451/1926 2443/2415/1890 2444/2416/1891 \nf 2480/2451/1926 2479/2450/1925 2443/2415/1890 \nf 2481/2452/1927 2444/2416/1891 2445/2417/1892 \nf 2481/2452/1927 2480/2451/1926 2444/2416/1891 \nf 2482/2453/1928 2445/2417/1892 2446/2418/1893 \nf 2482/2453/1928 2481/2452/1927 2445/2417/1892 \nf 2483/2454/1929 2446/2418/1893 2447/2419/1894 \nf 2483/2454/1929 2482/2453/1928 2446/2418/1893 \nf 2484/2455/1930 2447/2419/1894 2448/2420/1895 \nf 2484/2455/1930 2483/2454/1929 2447/2419/1894 \nf 2485/2456/1931 2448/2420/1895 2449/2421/1896 \nf 2485/2456/1931 2484/2455/1930 2448/2420/1895 \nf 2486/2457/1932 2449/2421/1896 2248/2221/1699 \nf 2486/2457/1932 2485/2456/1931 2449/2421/1896 \nf 2249/2222/1700 2486/2457/1932 2248/2221/1699 \nf 2452/2424/1898 2451/2423/1897 2454/2423/1900 \nf 1935/1907/1373 2018/1991/1459 1893/1870/1309 \nf 1906/2458/1933 2454/2423/1900 2453/2425/1899 \nf 1904/1877/1338 2454/2423/1900 1906/2458/1933 \nf 1904/1877/1338 2452/2424/1898 2454/2423/1900 \nf 1905/1878/1339 2453/2425/1899 2455/2426/1901 \nf 1906/1879/1340 1906/2458/1933 2453/2425/1899 \nf 1905/1878/1339 1906/1879/1340 2453/2425/1899 \nf 2012/1985/1448 2455/2426/1901 2456/2427/1902 \nf 2012/1985/1448 1905/1878/1339 2455/2426/1901 \nf 2011/1984/1447 2456/2427/1902 2457/2428/1903 \nf 2011/1984/1447 2012/1985/1448 2456/2427/1902 \nf 2010/1983/1446 2457/2428/1903 2458/2429/1904 \nf 2010/1983/1446 2011/1984/1447 2457/2428/1903 \nf 2009/1982/1445 2458/2429/1904 2459/2430/1905 \nf 2009/1982/1445 2010/1983/1446 2458/2429/1904 \nf 2008/1981/1444 2459/2430/1905 2460/2431/1906 \nf 2008/1981/1444 2009/1982/1445 2459/2430/1905 \nf 2007/1980/1443 2460/2431/1906 2461/2432/1907 \nf 2007/1980/1443 2008/1981/1444 2460/2431/1906 \nf 2006/1979/1442 2461/2432/1907 2462/2433/1908 \nf 2006/1979/1442 2007/1980/1443 2461/2432/1907 \nf 2005/1978/1441 2462/2433/1908 2463/2434/1909 \nf 2005/1978/1441 2006/1979/1442 2462/2433/1908 \nf 2004/1977/1440 2463/2434/1909 2464/2435/1910 \nf 2004/1977/1440 2005/1978/1441 2463/2434/1909 \nf 2003/1976/1439 2464/2435/1910 2465/2436/1911 \nf 2003/1976/1439 2004/1977/1440 2464/2435/1910 \nf 2002/1975/1438 2465/2436/1911 2466/2437/1912 \nf 2002/1975/1438 2003/1976/1439 2465/2436/1911 \nf 2001/1974/1437 2466/2437/1912 2467/2438/1913 \nf 2001/1974/1437 2002/1975/1438 2466/2437/1912 \nf 2000/1973/1436 2467/2438/1913 2468/2439/1914 \nf 2000/1973/1436 2001/1974/1437 2467/2438/1913 \nf 1999/1972/1434 2468/2439/1914 2469/2440/1915 \nf 1999/1972/1434 2000/1973/1436 2468/2439/1914 \nf 1998/1971/1432 2469/2440/1915 2470/2441/1916 \nf 1998/1971/1432 1999/1972/1434 2469/2440/1915 \nf 1997/1970/1431 2470/2441/1916 2471/2442/1917 \nf 1997/1970/1431 1998/1971/1432 2470/2441/1916 \nf 1996/1969/1430 2471/2442/1917 2472/2443/1918 \nf 1996/1969/1430 1997/1970/1431 2471/2442/1917 \nf 1995/1968/1429 2472/2443/1918 2473/2444/1919 \nf 1995/1968/1429 1996/1969/1430 2472/2443/1918 \nf 1994/1967/1428 2473/2444/1919 2474/2445/1920 \nf 1994/1967/1428 1995/1968/1429 2473/2444/1919 \nf 1993/1966/1427 2474/2445/1920 2475/2446/1921 \nf 1993/1966/1427 1994/1967/1428 2474/2445/1920 \nf 1992/1965/1426 2475/2446/1921 2476/2447/1922 \nf 1992/1965/1426 1993/1966/1427 2475/2446/1921 \nf 1991/1964/1425 2476/2447/1922 2477/2448/1923 \nf 1991/1964/1425 1992/1965/1426 2476/2447/1922 \nf 1990/1963/1424 2477/2448/1923 2478/2449/1924 \nf 1990/1963/1424 1991/1964/1425 2477/2448/1923 \nf 1989/1962/1423 2478/2449/1924 2479/2450/1925 \nf 1989/1962/1423 1990/1963/1424 2478/2449/1924 \nf 1988/1961/1422 2479/2450/1925 2480/2451/1926 \nf 1988/1961/1422 1989/1962/1423 2479/2450/1925 \nf 1987/1960/1421 2480/2451/1926 2481/2452/1927 \nf 1987/1960/1421 1988/1961/1422 2480/2451/1926 \nf 1986/1959/1420 2481/2452/1927 2482/2453/1928 \nf 1986/1959/1420 1987/1960/1421 2481/2452/1927 \nf 1985/1958/1419 2482/2453/1928 2483/2454/1929 \nf 1985/1958/1419 1986/1959/1420 2482/2453/1928 \nf 1984/1957/1418 2483/2454/1929 2484/2455/1930 \nf 1984/1957/1418 1985/1958/1419 2483/2454/1929 \nf 1983/1956/1417 2484/2455/1930 2485/2456/1931 \nf 1983/1956/1417 1984/1957/1418 2484/2455/1930 \nf 1982/1955/1416 2485/2456/1931 2486/2457/1932 \nf 1982/1955/1416 1983/1956/1417 2485/2456/1931 \nf 1981/1954/1415 2486/2457/1932 2249/2222/1700 \nf 1981/1954/1415 1982/1955/1416 2486/2457/1932 \nf 1980/1953/1414 1981/1954/1415 2249/2222/1700 \nf 1904/1877/1338 1906/2458/1933 1906/1879/1340 \nf 2017/1990/1458 2487/2459/1934 2018/1991/1459 \nf 2488/2460/1935 185/182/78 2302/2275/1718 \nf 2488/2460/1935 180/177/76 185/182/78 \nf 2488/2460/1935 2302/2275/1718 2304/2277/1754 \nf 2489/2461/1936 2304/2277/1754 2339/2312/1753 \nf 2488/2460/1935 2304/2277/1754 2489/2461/1936 \nf 2489/2461/1936 2339/2312/1753 2341/2314/1790 \nf 2490/2462/1937 2341/2314/1790 2376/2314/1789 \nf 2489/2461/1936 2341/2314/1790 2490/2462/1937 \nf 2490/2462/1937 2376/2314/1789 2378/2350/1826 \nf 2491/2463/1938 2378/2350/1826 2413/2385/1825 \nf 2490/2462/1937 2378/2350/1826 2491/2463/1938 \nf 2491/2463/1938 2413/2385/1825 2415/2387/1862 \nf 2492/2464/1939 2415/2387/1862 2450/2422/1861 \nf 2491/2463/1938 2415/2387/1862 2492/2464/1939 \nf 2492/2464/1939 2450/2422/1861 2452/2424/1898 \nf 2017/1990/1458 2493/2465/1940 2487/2459/1934 \nf 2492/2464/1939 2452/2424/1898 2494/2466/1941 \nf 2494/2466/1941 2452/2424/1898 1904/1877/1338 \nf 395/392/202 1785/1763/1242 2495/2467/1942 \nf 2494/2466/1941 1904/1877/1338 1907/1880/1341 \nf 2496/2468/1943 1852/1829/1275 2048/2021/1491 \nf 2496/2468/1943 1853/1830/1276 1852/1829/1275 \nf 2497/2469/1944 2048/2021/1491 2049/2022/1494 \nf 2497/2469/1944 2496/2468/1943 2048/2021/1491 \nf 2498/2470/1945 2049/2022/1494 2050/2023/1496 \nf 2498/2470/1945 2497/2469/1944 2049/2022/1494 \nf 2499/2471/1946 2050/2023/1496 2051/2024/1498 \nf 2499/2471/1946 2498/2470/1945 2050/2023/1496 \nf 2500/2472/1947 2051/2024/1498 2052/2025/1500 \nf 2500/2472/1947 2499/2471/1946 2051/2024/1498 \nf 2501/2473/1948 2052/2025/1500 2053/2026/1502 \nf 2500/2472/1947 2052/2025/1500 2501/2473/1948 \nf 156/153/63 2053/2026/1502 89/86/58 \nf 2501/2473/1948 2053/2026/1502 156/153/63 \nf 2494/2466/1941 1907/1880/1341 1912/1885/1347 \nf 2502/2474/1949 1912/1885/1347 1911/1884/1345 \nf 2502/2474/1949 2494/2466/1941 1912/1885/1347 \nf 2502/2474/1949 1911/1884/1345 1914/1887/1350 \nf 2503/2475/1950 1914/1887/1350 1913/1886/1348 \nf 2503/2475/1950 2502/2474/1949 1914/1887/1350 \nf 2504/2476/1951 1913/1886/1348 1916/1889/1353 \nf 2504/2476/1951 2503/2475/1950 1913/1886/1348 \nf 2504/2476/1951 1916/1889/1353 1915/1888/1351 \nf 2505/2477/1952 1915/1888/1351 1918/1891/1356 \nf 2505/2477/1952 2504/2476/1951 1915/1888/1351 \nf 2506/2478/1953 1918/1891/1356 1917/1890/1354 \nf 2506/2478/1953 2505/2477/1952 1918/1891/1356 \nf 2506/2478/1953 1917/1890/1354 1920/1893/1954 \nf 2507/2479/1955 1920/1893/1954 1919/1892/1956 \nf 2507/2479/1955 2506/2478/1953 1920/1893/1954 \nf 2508/2480/1957 1919/1892/1956 1922/1895/1958 \nf 2508/2480/1957 2507/2479/1955 1919/1892/1956 \nf 2509/2481/1959 1922/1895/1958 1921/1894/1359 \nf 2509/2481/1959 2508/2480/1957 1922/1895/1958 \nf 2509/2481/1959 1921/1894/1359 1924/1896/1363 \nf 2510/2482/1960 1924/1896/1363 1923/150/1361 \nf 2510/2482/1960 2509/2481/1959 1924/1896/1363 \nf 2511/153/1961 1923/150/1361 1925/1897/1364 \nf 2511/153/1961 2510/2482/1960 1923/150/1361 \nf 2511/153/1961 1925/1897/1364 1926/1898/1365 \nf 2512/2483/1962 1926/1898/1365 1856/1833/1277 \nf 2512/2483/1962 2511/153/1961 1926/1898/1365 \nf 1853/1830/1276 1856/1833/1277 1851/1828/1274 \nf 1853/1830/1276 2512/2483/1962 1856/1833/1277 \nf 2513/2484/1963 168/165/69 170/167/70 \nf 174/171/73 2513/2484/1963 170/167/70 \nf 2514/2485/1964 166/163/68 168/165/69 \nf 2513/2484/1963 2514/2485/1964 168/165/69 \nf 2515/2486/1965 164/161/67 166/163/68 \nf 2514/2485/1964 2515/2486/1965 166/163/68 \nf 2516/2487/1966 162/159/66 164/161/67 \nf 2515/2486/1965 2516/2487/1966 164/161/67 \nf 2517/2488/1967 160/157/65 162/159/66 \nf 2516/2487/1966 2517/2488/1967 162/159/66 \nf 2518/2489/1968 158/155/64 160/157/65 \nf 2517/2488/1967 2518/2489/1968 160/157/65 \nf 2519/2490/1969 155/152/61 158/155/64 \nf 2518/2489/1968 2519/2490/1969 158/155/64 \nf 2501/2473/1948 156/153/63 155/152/61 \nf 2519/2490/1969 2501/2473/1948 155/152/61 \nf 2500/2472/1947 2501/2473/1948 2519/2490/1969 \nf 2520/2491/1970 2519/2490/1969 2518/2489/1968 \nf 2500/2472/1947 2519/2490/1969 2520/2491/1970 \nf 2521/2492/1971 2518/2489/1968 2517/2488/1967 \nf 2520/2491/1970 2518/2489/1968 2521/2492/1971 \nf 2522/2493/1972 2517/2488/1967 2516/2487/1966 \nf 2521/2492/1971 2517/2488/1967 2522/2493/1972 \nf 2523/2494/1973 2516/2487/1966 2515/2486/1965 \nf 2522/2493/1972 2516/2487/1966 2523/2494/1973 \nf 2524/2495/1974 2515/2486/1965 2514/2485/1964 \nf 2523/2494/1973 2515/2486/1965 2524/2495/1974 \nf 2525/2496/1975 2514/2485/1964 2513/2484/1963 \nf 2524/2495/1974 2514/2485/1964 2525/2496/1975 \nf 2526/2497/1976 2513/2484/1963 174/171/73 \nf 2525/2496/1975 2513/2484/1963 2526/2497/1976 \nf 2527/2498/1977 174/171/73 173/170/72 \nf 2526/2497/1976 174/171/73 2527/2498/1977 \nf 2528/2499/1978 173/170/72 176/173/74 \nf 2527/2498/1977 173/170/72 2528/2499/1978 \nf 2529/2500/1979 176/173/74 178/175/75 \nf 2528/2499/1978 176/173/74 2529/2500/1979 \nf 2530/2501/1980 178/175/75 180/177/76 \nf 2529/2500/1979 178/175/75 2530/2501/1980 \nf 2530/2501/1980 180/177/76 2488/2460/1935 \nf 2492/2464/1939 2494/2466/1941 2502/2474/1949 \nf 2531/2502/1981 2502/2474/1949 2503/2475/1950 \nf 2531/2502/1981 2492/2464/1939 2502/2474/1949 \nf 2532/2503/1982 2503/2475/1950 2504/2476/1951 \nf 2532/2503/1982 2531/2502/1981 2503/2475/1950 \nf 2533/2504/1983 2504/2476/1951 2505/2477/1952 \nf 2533/2504/1983 2532/2503/1982 2504/2476/1951 \nf 2534/2505/1984 2505/2477/1952 2506/2478/1953 \nf 2534/2505/1984 2533/2504/1983 2505/2477/1952 \nf 2535/1886/1985 2506/2478/1953 2507/2479/1955 \nf 2535/1886/1985 2534/2505/1984 2506/2478/1953 \nf 2536/2478/1986 2507/2479/1955 2508/2480/1957 \nf 2536/2478/1986 2535/1886/1985 2507/2479/1955 \nf 2537/2506/1987 2508/2480/1957 2509/2481/1959 \nf 2537/2506/1987 2536/2478/1986 2508/2480/1957 \nf 2538/2507/1988 2509/2481/1959 2510/2482/1960 \nf 2538/2507/1988 2537/2506/1987 2509/2481/1959 \nf 2539/2508/1989 2510/2482/1960 2511/153/1961 \nf 2539/2508/1989 2538/2507/1988 2510/2482/1960 \nf 2540/2509/1990 2511/153/1961 2512/2483/1962 \nf 2540/2509/1990 2539/2508/1989 2511/153/1961 \nf 2541/2510/1991 2512/2483/1962 1853/1830/1276 \nf 2541/2510/1991 2540/2509/1990 2512/2483/1962 \nf 2496/2468/1943 2541/2510/1991 1853/1830/1276 \nf 2491/2463/1938 2492/2464/1939 2531/2502/1981 \nf 2542/2511/1992 2531/2502/1981 2532/2503/1982 \nf 2542/2511/1992 2491/2463/1938 2531/2502/1981 \nf 2543/2512/1993 2532/2503/1982 2533/2504/1983 \nf 2543/2512/1993 2542/2511/1992 2532/2503/1982 \nf 2544/2513/1994 2533/2504/1983 2534/2505/1984 \nf 2544/2513/1994 2543/2512/1993 2533/2504/1983 \nf 2545/2514/1995 2534/2505/1984 2535/1886/1985 \nf 2545/2514/1995 2544/2513/1994 2534/2505/1984 \nf 2546/2515/1996 2535/1886/1985 2536/2478/1986 \nf 2546/2515/1996 2545/2514/1995 2535/1886/1985 \nf 2547/2516/1997 2536/2478/1986 2537/2506/1987 \nf 2547/2516/1997 2546/2515/1996 2536/2478/1986 \nf 2548/2517/1998 2537/2506/1987 2538/2507/1988 \nf 2548/2517/1998 2547/2516/1997 2537/2506/1987 \nf 2549/2518/1999 2538/2507/1988 2539/2508/1989 \nf 2549/2518/1999 2548/2517/1998 2538/2507/1988 \nf 2550/2519/2000 2539/2508/1989 2540/2509/1990 \nf 2550/2519/2000 2549/2518/1999 2539/2508/1989 \nf 2551/2520/2001 2540/2509/1990 2541/2510/1991 \nf 2551/2520/2001 2550/2519/2000 2540/2509/1990 \nf 2552/2472/2002 2541/2510/1991 2496/2468/1943 \nf 2552/2472/2002 2551/2520/2001 2541/2510/1991 \nf 2497/2469/1944 2552/2472/2002 2496/2468/1943 \nf 2490/2462/1937 2491/2463/1938 2542/2511/1992 \nf 2553/2521/2003 2542/2511/1992 2543/2512/1993 \nf 2553/2521/2003 2490/2462/1937 2542/2511/1992 \nf 2554/2522/2004 2543/2512/1993 2544/2513/1994 \nf 2554/2522/2004 2553/2521/2003 2543/2512/1993 \nf 2555/2523/2005 2544/2513/1994 2545/2514/1995 \nf 2555/2523/2005 2554/2522/2004 2544/2513/1994 \nf 2556/2524/2006 2545/2514/1995 2546/2515/1996 \nf 2556/2524/2006 2555/2523/2005 2545/2514/1995 \nf 2557/2525/2007 2546/2515/1996 2547/2516/1997 \nf 2557/2525/2007 2556/2524/2006 2546/2515/1996 \nf 2558/2526/2008 2547/2516/1997 2548/2517/1998 \nf 2558/2526/2008 2557/2525/2007 2547/2516/1997 \nf 2559/2527/2009 2548/2517/1998 2549/2518/1999 \nf 2559/2527/2009 2558/2526/2008 2548/2517/1998 \nf 2560/2528/2010 2549/2518/1999 2550/2519/2000 \nf 2560/2528/2010 2559/2527/2009 2549/2518/1999 \nf 2561/2529/2011 2550/2519/2000 2551/2520/2001 \nf 2561/2529/2011 2560/2528/2010 2550/2519/2000 \nf 2562/2530/2012 2551/2520/2001 2552/2472/2002 \nf 2562/2530/2012 2561/2529/2011 2551/2520/2001 \nf 2563/2531/2013 2552/2472/2002 2497/2469/1944 \nf 2563/2531/2013 2562/2530/2012 2552/2472/2002 \nf 2498/2470/1945 2563/2531/2013 2497/2469/1944 \nf 2489/2461/1936 2490/2462/1937 2553/2521/2003 \nf 2564/2532/2014 2553/2521/2003 2554/2522/2004 \nf 2564/2532/2014 2489/2461/1936 2553/2521/2003 \nf 2565/2533/2015 2554/2522/2004 2555/2523/2005 \nf 2565/2533/2015 2564/2532/2014 2554/2522/2004 \nf 2566/2534/2016 2555/2523/2005 2556/2524/2006 \nf 2566/2534/2016 2565/2533/2015 2555/2523/2005 \nf 2567/2535/2017 2556/2524/2006 2557/2525/2007 \nf 2567/2535/2017 2566/2534/2016 2556/2524/2006 \nf 2568/2536/2018 2557/2525/2007 2558/2526/2008 \nf 2568/2536/2018 2567/2535/2017 2557/2525/2007 \nf 2569/2537/2019 2558/2526/2008 2559/2527/2009 \nf 2569/2537/2019 2568/2536/2018 2558/2526/2008 \nf 2570/2538/2020 2559/2527/2009 2560/2528/2010 \nf 2570/2538/2020 2569/2537/2019 2559/2527/2009 \nf 2571/2539/2021 2560/2528/2010 2561/2529/2011 \nf 2571/2539/2021 2570/2538/2020 2560/2528/2010 \nf 2572/2506/2022 2561/2529/2011 2562/2530/2012 \nf 2572/2506/2022 2571/2539/2021 2561/2529/2011 \nf 2573/2519/2023 2562/2530/2012 2563/2531/2013 \nf 2573/2519/2023 2572/2506/2022 2562/2530/2012 \nf 2574/2540/2024 2563/2531/2013 2498/2470/1945 \nf 2574/2540/2024 2573/2519/2023 2563/2531/2013 \nf 2499/2471/1946 2574/2540/2024 2498/2470/1945 \nf 2488/2460/1935 2489/2461/1936 2564/2532/2014 \nf 2530/2501/1980 2564/2532/2014 2565/2533/2015 \nf 2530/2501/1980 2488/2460/1935 2564/2532/2014 \nf 2529/2500/1979 2565/2533/2015 2566/2534/2016 \nf 2529/2500/1979 2530/2501/1980 2565/2533/2015 \nf 2528/2499/1978 2566/2534/2016 2567/2535/2017 \nf 2528/2499/1978 2529/2500/1979 2566/2534/2016 \nf 2527/2498/1977 2567/2535/2017 2568/2536/2018 \nf 2527/2498/1977 2528/2499/1978 2567/2535/2017 \nf 2526/2497/1976 2568/2536/2018 2569/2537/2019 \nf 2526/2497/1976 2527/2498/1977 2568/2536/2018 \nf 2525/2496/1975 2569/2537/2019 2570/2538/2020 \nf 2525/2496/1975 2526/2497/1976 2569/2537/2019 \nf 2524/2495/1974 2570/2538/2020 2571/2539/2021 \nf 2524/2495/1974 2525/2496/1975 2570/2538/2020 \nf 2523/2494/1973 2571/2539/2021 2572/2506/2022 \nf 2523/2494/1973 2524/2495/1974 2571/2539/2021 \nf 2522/2493/1972 2572/2506/2022 2573/2519/2023 \nf 2522/2493/1972 2523/2494/1973 2572/2506/2022 \nf 2521/2492/1971 2573/2519/2023 2574/2540/2024 \nf 2521/2492/1971 2522/2493/1972 2573/2519/2023 \nf 2520/2491/1970 2574/2540/2024 2499/2471/1946 \nf 2520/2491/1970 2521/2492/1971 2574/2540/2024 \nf 2500/2472/1947 2520/2491/1970 2499/2471/1946 \nf 2575/2541/2025 1814/1792/1260 1813/1791/1259 \nf 2575/2541/2025 1858/1835/1281 1814/1792/1260 \nf 2575/2541/2025 1813/1791/1259 1816/1794/2026 \nf 2576/2542/2027 1816/1794/2026 1818/1796/2028 \nf 2576/2542/2027 2575/2541/2025 1816/1794/2026 \nf 2577/2543/2029 1818/1796/2028 1820/1798/1263 \nf 2577/2543/2029 2576/2542/2027 1818/1796/2028 \nf 2577/2543/2029 1820/1798/1263 1823/1801/1265 \nf 2578/1810/2030 1823/1801/1265 1822/1800/1264 \nf 2578/1810/2030 2577/2543/2029 1823/1801/1265 \nf 2578/1810/2030 1822/1800/1264 1826/1803/2031 \nf 2579/2544/2032 1826/1803/2031 1825/1803/1266 \nf 2579/2544/2032 2578/1810/2030 1826/1803/2031 \nf 2580/2545/2033 1825/1803/1266 1828/1805/1268 \nf 2580/2545/2033 2579/2544/2032 1825/1803/1266 \nf 2581/2546/2034 1828/1805/1268 1831/1808/1270 \nf 2581/2546/2034 2580/2545/2033 1828/1805/1268 \nf 2581/2546/2034 1831/1808/1270 1830/1807/1269 \nf 2582/2547/2035 1830/1807/1269 1833/1810/1271 \nf 2582/2547/2035 2581/2546/2034 1830/1807/1269 \nf 2583/2548/2036 1833/1810/1271 1836/1813/1273 \nf 2583/2548/2036 2582/2547/2035 1833/1810/1271 \nf 1933/1905/1370 1836/1813/1273 1835/1812/1371 \nf 1933/1905/1370 2583/2548/2036 1836/1813/1273 \nf 1785/1763/1242 1788/1766/1245 2584/2549/2037 \nf 1785/1763/1242 2584/2549/2037 2495/2467/1942 \nf 1930/1902/1367 2585/2550/2038 1934/1906/1372 \nf 2586/2551/2039 2587/2552/2040 1934/1906/1372 \nf 2588/2553/2041 1934/1906/1372 2587/2552/2040 \nf 2585/2550/2038 2586/2551/2039 1934/1906/1372 \nf 2588/2553/2041 1933/1905/1370 1934/1906/1372 \nf 2589/2554/2042 2590/2552/2043 2587/2552/2040 \nf 2588/2553/2041 2587/2552/2040 2590/2552/2043 \nf 2586/2551/2039 2589/2554/2042 2587/2552/2040 \nf 2591/2555/2044 2592/2556/2045 2590/2552/2043 \nf 2593/2557/2046 2590/2552/2043 2592/2556/2045 \nf 2589/2554/2042 2591/2555/2044 2590/2552/2043 \nf 2593/2557/2046 2588/2553/2041 2590/2552/2043 \nf 2594/2558/2047 2595/2559/2048 2592/2556/2045 \nf 2593/2557/2046 2592/2556/2045 2595/2559/2048 \nf 2591/2555/2044 2594/2558/2047 2592/2556/2045 \nf 2596/2560/2049 2597/2561/2050 2595/2559/2048 \nf 2598/2562/2051 2595/2559/2048 2597/2561/2050 \nf 2594/2558/2047 2596/2560/2049 2595/2559/2048 \nf 2598/2562/2051 2593/2557/2046 2595/2559/2048 \nf 2599/2563/2052 2600/2561/2053 2597/2561/2050 \nf 2598/2562/2051 2597/2561/2050 2600/2561/2053 \nf 2596/2560/2049 2599/2563/2052 2597/2561/2050 \nf 2601/2564/2054 2602/2565/2055 2600/2561/2053 \nf 2603/2566/2056 2600/2561/2053 2602/2565/2055 \nf 2599/2563/2052 2601/2564/2054 2600/2561/2053 \nf 2603/2566/2056 2598/2562/2051 2600/2561/2053 \nf 2604/2567/2057 2602/2568/2058 2602/2565/2055 \nf 2603/2566/2056 2602/2565/2055 2602/2568/2058 \nf 2601/2564/2054 2604/2567/2057 2602/2565/2055 \nf 2605/2569/2059 2606/2570/2060 2602/2568/2058 \nf 2607/2571/2061 2602/2568/2058 2606/2570/2060 \nf 2604/2567/2057 2605/2569/2059 2602/2568/2058 \nf 2607/2571/2061 2603/2566/2056 2602/2568/2058 \nf 2608/2572/2062 2609/2573/2063 2606/2570/2060 \nf 2607/2571/2061 2606/2570/2060 2609/2573/2063 \nf 2605/2569/2059 2608/2572/2062 2606/2570/2060 \nf 2610/2574/2064 2611/2575/2065 2609/2573/2063 \nf 2612/2576/2066 2609/2573/2063 2611/2575/2065 \nf 2608/2572/2062 2610/2574/2064 2609/2573/2063 \nf 2612/2576/2066 2607/2571/2061 2609/2573/2063 \nf 2613/2577/2067 2614/2578/2068 2611/2575/2065 \nf 2612/2576/2066 2611/2575/2065 2614/2578/2068 \nf 2610/2574/2064 2613/2577/2067 2611/2575/2065 \nf 2615/2579/2069 2616/2580/2070 2614/2578/2068 \nf 2617/2581/2071 2614/2578/2068 2616/2580/2070 \nf 2613/2577/2067 2615/2579/2069 2614/2578/2068 \nf 2617/2581/2071 2612/2576/2066 2614/2578/2068 \nf 2618/2582/2072 2619/2583/2073 2616/2580/2070 \nf 2617/2581/2071 2616/2580/2070 2619/2583/2073 \nf 2615/2579/2069 2618/2582/2072 2616/2580/2070 \nf 2620/2584/2074 2621/2585/2075 2619/2583/2073 \nf 2622/2586/2076 2619/2583/2073 2621/2585/2075 \nf 2618/2582/2072 2620/2584/2074 2619/2583/2073 \nf 2622/2586/2076 2617/2581/2071 2619/2583/2073 \nf 2623/2587/2077 2624/2588/2078 2621/2585/2075 \nf 2622/2586/2076 2621/2585/2075 2624/2588/2078 \nf 2620/2584/2074 2623/2587/2077 2621/2585/2075 \nf 2625/2589/2079 2626/1912/2080 2624/2588/2078 \nf 1945/1917/1380 2624/2588/2078 2626/1912/2080 \nf 2623/2587/2077 2625/2589/2079 2624/2588/2078 \nf 2622/2586/2076 2624/2588/2078 1945/1917/1380 \nf 2627/2590/2081 1940/1912/1377 2626/1912/2080 \nf 1945/1917/1380 2626/1912/2080 1940/1912/1377 \nf 2625/2589/2079 2627/2590/2081 2626/1912/2080 \nf 2627/2590/2081 1942/1914/1379 1940/1912/1377 \nf 2628/2591/2082 1942/1914/1379 2627/2590/2081 \nf 2628/2591/2082 1941/1913/1378 1942/1914/1379 \nf 2628/2591/2082 2627/2590/2081 2625/2589/2079 \nf 2629/2592/2083 2625/2589/2079 2623/2587/2077 \nf 2629/2592/2083 2628/2591/2082 2625/2589/2079 \nf 2630/2593/2084 2623/2587/2077 2620/2584/2074 \nf 2630/2593/2084 2629/2592/2083 2623/2587/2077 \nf 2631/2594/2085 2620/2584/2074 2618/2582/2072 \nf 2631/2594/2085 2630/2593/2084 2620/2584/2074 \nf 2631/2594/2085 2618/2582/2072 2615/2579/2069 \nf 2632/2595/2086 2615/2579/2069 2613/2577/2067 \nf 2632/2595/2086 2631/2594/2085 2615/2579/2069 \nf 2633/2596/2087 2613/2577/2067 2610/2574/2064 \nf 2633/2596/2087 2632/2595/2086 2613/2577/2067 \nf 2633/2596/2087 2610/2574/2064 2608/2572/2062 \nf 2634/2597/2088 2608/2572/2062 2605/2569/2059 \nf 2634/2597/2088 2633/2596/2087 2608/2572/2062 \nf 2635/2598/2089 2605/2569/2059 2604/2567/2057 \nf 2635/2598/2089 2634/2597/2088 2605/2569/2059 \nf 2635/2598/2089 2604/2567/2057 2601/2564/2054 \nf 2636/2599/2090 2601/2564/2054 2599/2563/2052 \nf 2636/2599/2090 2635/2598/2089 2601/2564/2054 \nf 2637/2600/2091 2599/2563/2052 2596/2560/2049 \nf 2637/2600/2091 2636/2599/2090 2599/2563/2052 \nf 2637/2600/2091 2596/2560/2049 2594/2558/2047 \nf 2638/2601/2092 2594/2558/2047 2591/2555/2044 \nf 2638/2601/2092 2637/2600/2091 2594/2558/2047 \nf 2639/2602/2093 2591/2555/2044 2589/2554/2094 \nf 2639/2602/2093 2638/2601/2092 2591/2555/2044 \nf 2639/2602/2093 2589/2554/2094 2586/2551/2039 \nf 2640/2603/2095 2586/2551/2039 2585/2550/2038 \nf 2640/2603/2095 2639/2602/2093 2586/2551/2039 \nf 1931/1903/1368 2585/2550/2038 1930/1902/1367 \nf 1931/1903/1368 2640/2603/2095 2585/2550/2038 \nf 1696/1674/1194 1768/1746/2096 1767/1745/1233 \nf 2641/2604/2097 2642/2605/2098 1768/1746/2096 \nf 1765/1743/1232 1768/1746/1231 2642/2605/2099 \nf 1696/1674/1194 2641/2604/2097 1768/1746/2096 \nf 2643/2606/2100 2644/2607/2101 2642/2605/2098 \nf 2645/2608/2102 2642/2605/2099 2644/2607/2103 \nf 2641/2604/2097 2643/2606/2100 2642/2605/2098 \nf 2645/2608/2102 1765/1743/1232 2642/2605/2099 \nf 2646/2609/2104 2647/2610/2105 2644/2607/2101 \nf 2648/2611/2106 2644/2607/2103 2647/2610/2107 \nf 2643/2606/2100 2646/2609/2104 2644/2607/2101 \nf 2648/2611/2106 2645/2608/2102 2644/2607/2103 \nf 2649/2612/2108 2650/2613/2109 2647/2610/2105 \nf 2651/2614/2110 2647/2610/2107 2650/2613/2111 \nf 2646/2609/2104 2649/2612/2108 2647/2610/2105 \nf 2651/2614/2110 2648/2611/2106 2647/2610/2107 \nf 2649/2612/2108 2652/2615/2112 2650/2613/2109 \nf 2653/2616/2113 2650/2613/2111 2652/2615/2114 \nf 2653/2616/2113 2651/2614/2110 2650/2613/2111 \nf 2654/2617/2115 2655/2618/2116 2652/2615/2112 \nf 2656/2619/2117 2652/2615/2114 2655/2618/2118 \nf 2649/2612/2108 2654/2617/2115 2652/2615/2112 \nf 2656/2619/2117 2653/2616/2113 2652/2615/2114 \nf 2657/2620/2119 2658/2621/2120 2655/2618/2116 \nf 2659/2622/2121 2655/2618/2118 2658/2621/2122 \nf 2654/2617/2115 2657/2620/2119 2655/2618/2116 \nf 2660/2623/2123 2656/2619/2117 2655/2618/2118 \nf 2659/2622/2121 2660/2623/2123 2655/2618/2118 \nf 2661/2624/2124 2662/2625/2125 2658/2621/2120 \nf 2663/2626/2126 2658/2621/2122 2662/2625/2127 \nf 2657/2620/2119 2661/2624/2124 2658/2621/2120 \nf 2663/2626/2126 2659/2622/2121 2658/2621/2122 \nf 1932/1904/1369 1928/1900/1366 2662/2625/2125 \nf 1929/1901/53 2662/2625/2127 1928/1900/52 \nf 2661/2624/2124 1932/1904/1369 2662/2625/2125 \nf 1929/1901/53 2663/2626/2126 2662/2625/2127 \nf 2664/2627/2128 1932/1904/1369 2661/2624/2124 \nf 2664/2627/2128 1931/1903/1368 1932/1904/1369 \nf 2665/2628/2129 2661/2624/2124 2657/2620/2119 \nf 2665/2628/2129 2664/2627/2128 2661/2624/2124 \nf 2666/2629/2130 2657/2620/2119 2654/2617/2115 \nf 2666/2629/2130 2665/2628/2129 2657/2620/2119 \nf 2667/2630/2131 2654/2617/2115 2649/2612/2108 \nf 2667/2630/2131 2666/2629/2130 2654/2617/2115 \nf 2668/2631/2132 2649/2612/2108 2646/2609/2104 \nf 2668/2631/2132 2667/2630/2131 2649/2612/2108 \nf 2669/2632/2133 2646/2609/2104 2643/2606/2100 \nf 2669/2632/2133 2668/2631/2132 2646/2609/2104 \nf 2670/2633/2134 2643/2606/2100 2641/2604/2135 \nf 2669/2632/2133 2643/2606/2100 2670/2633/2134 \nf 1699/1677/1195 2641/2604/2135 1696/1674/1192 \nf 2670/2633/2134 2641/2604/2135 1699/1677/1195 \nf 1766/1744/1229 1765/1743/1228 2645/2608/2136 \nf 2671/2634/2137 2645/2608/2136 2648/2611/2138 \nf 2671/2634/2137 1766/1744/1229 2645/2608/2136 \nf 2672/2635/2139 2648/2611/2138 2651/2614/2140 \nf 2672/2635/2139 2671/2634/2137 2648/2611/2138 \nf 2673/2636/2141 2651/2614/2140 2653/2616/2142 \nf 2673/2636/2141 2672/2635/2139 2651/2614/2140 \nf 2674/2637/2143 2653/2616/2142 2656/2619/2144 \nf 2674/2637/2143 2673/2636/2141 2653/2616/2142 \nf 2675/2638/2145 2656/2619/2144 2660/2623/2146 \nf 2675/2638/2145 2674/2637/2143 2656/2619/2144 \nf 2675/2638/2145 2660/2623/2146 2659/2622/2147 \nf 2676/2639/2148 2659/2622/2147 2663/2626/2149 \nf 2676/2639/2148 2675/2638/2145 2659/2622/2147 \nf 1909/1882/1343 2663/2626/2149 1929/1901/51 \nf 1909/1882/1343 2676/2639/2148 2663/2626/2149 \nf 2677/2640/2150 1766/1744/1229 2671/2634/2137 \nf 2677/2640/2150 1763/1741/1227 1766/1744/1229 \nf 2678/2641/2151 2671/2634/2137 2672/2635/2139 \nf 2678/2641/2151 2677/2640/2150 2671/2634/2137 \nf 2679/2642/2152 2672/2635/2139 2673/2636/2141 \nf 2678/2641/2151 2672/2635/2139 2679/2642/2152 \nf 2680/2643/2153 2673/2636/2141 2674/2637/2143 \nf 2679/2642/2152 2673/2636/2141 2680/2643/2153 \nf 2681/2644/2154 2674/2637/2143 2675/2638/2145 \nf 2680/2643/2153 2674/2637/2143 2681/2644/2154 \nf 2682/2645/2155 2675/2638/2145 2676/2639/2148 \nf 2681/2644/2154 2675/2638/2145 2682/2645/2155 \nf 2683/2646/2156 2676/2639/2148 1909/1882/1343 \nf 2682/2645/2155 2676/2639/2148 2683/2646/2156 \nf 2683/2646/2156 1909/1882/1343 1910/1883/1344 \nf 1872/1848/1342 2684/2647/2157 1910/1883/1344 \nf 2683/2646/2156 1910/1883/1344 2684/2647/2157 \nf 1882/1858/2158 2685/2648/2159 2684/2647/2157 \nf 2686/2649/2160 2684/2647/2157 2685/2648/2159 \nf 1872/1848/1342 1882/1858/2158 2684/2647/2157 \nf 2686/2649/2160 2683/2646/2156 2684/2647/2157 \nf 1882/1858/2158 2687/2650/2161 2685/2648/2159 \nf 2686/2649/2160 2685/2648/2159 2687/2650/2161 \nf 1881/1857/2162 2688/2651/2163 2687/2650/2161 \nf 2689/2652/2164 2687/2650/2161 2688/2651/2163 \nf 1882/1858/2158 1881/1857/2162 2687/2650/2161 \nf 2689/2652/2164 2686/2649/2160 2687/2650/2161 \nf 1881/1857/2162 2690/2653/2165 2688/2651/2163 \nf 2691/2654/2166 2688/2651/2163 2690/2653/2165 \nf 2691/2654/2166 2689/2652/2164 2688/2651/2163 \nf 1880/1856/2167 2692/2655/2168 2690/2653/2165 \nf 2691/2654/2166 2690/2653/2165 2692/2655/2168 \nf 1881/1857/2162 1880/1856/2167 2690/2653/2165 \nf 1880/1856/2167 2693/2656/2169 2692/2655/2168 \nf 2694/2657/2170 2692/2655/2168 2693/2656/2171 \nf 2694/2657/2170 2691/2654/2166 2692/2655/2168 \nf 1879/1855/2172 2695/2658/2173 2693/2656/2169 \nf 2696/2659/2174 2693/2656/2171 2695/2658/2175 \nf 1880/1856/2167 1879/1855/2172 2693/2656/2169 \nf 2696/2659/2174 2694/2657/2170 2693/2656/2171 \nf 1879/1855/2172 2697/2660/2176 2695/2658/2173 \nf 2698/2661/2177 2695/2658/2175 2697/2660/2178 \nf 2698/2661/2177 2696/2659/2174 2695/2658/2175 \nf 1869/1846/1307 1886/1862/1306 2697/2660/2176 \nf 2698/2661/2177 2697/2660/2178 1886/1862/1306 \nf 1879/1855/2172 1869/1846/1307 2697/2660/2176 \nf 2699/1860/2179 1886/1862/1306 1885/1861/1305 \nf 2699/1860/2179 2698/2661/2177 1886/1862/1306 \nf 2700/2662/2180 1885/1861/1305 1884/1860/1304 \nf 2700/2662/2180 2699/1860/2179 1885/1861/1305 \nf 2700/2662/2180 1884/1860/1304 2022/1995/1465 \nf 2701/2663/2181 2022/1995/1465 2021/1994/1463 \nf 2701/2663/2181 2700/2662/2180 2022/1995/1465 \nf 2702/2664/2182 2021/1994/1463 2024/1997/1467 \nf 2702/2664/2182 2701/2663/2181 2021/1994/1463 \nf 2702/2664/2182 2024/1997/1467 2023/1996/1466 \nf 2703/2665/2183 2023/1996/1466 2025/1998/1468 \nf 2703/2665/2183 2702/2664/2182 2023/1996/1466 \nf 1954/1926/1388 2025/1998/1468 1953/1925/1386 \nf 1954/1926/1388 2703/2665/2183 2025/1998/1468 \nf 1788/1766/1245 1893/1870/1309 2704/2666/2184 \nf 1788/1766/1245 2704/2666/2184 2584/2549/2037 \nf 1941/1927/1389 2705/2667/2185 1955/1928/1389 \nf 2706/2668/2186 2707/2669/2186 1955/1928/1389 \nf 2708/2670/2187 1955/1928/1389 2707/2669/2186 \nf 2705/2667/2185 2706/2668/2186 1955/1928/1389 \nf 2708/2670/2187 1954/1926/1388 1955/1928/1389 \nf 1893/1870/1309 2018/1991/1459 2709/2671/2188 \nf 1893/1870/1309 2709/2671/2188 2704/2666/2184 \nf 2706/2668/2186 2710/2672/2189 2707/2669/2186 \nf 2711/2673/2190 2712/2674/2190 2707/2669/2186 \nf 2713/2675/2191 2707/2669/2186 2712/2674/2190 \nf 2710/2672/2189 2711/2673/2190 2707/2669/2186 \nf 2713/2675/2191 2708/2670/2187 2707/2669/2186 \nf 2714/2676/2192 2712/2674/2193 2712/2674/2190 \nf 2713/2675/2191 2712/2674/2190 2712/2674/2193 \nf 2711/2673/2190 2714/2676/2192 2712/2674/2190 \nf 2715/2677/2194 2716/2678/2194 2712/2674/2193 \nf 2717/2679/2195 2712/2674/2193 2716/2678/2194 \nf 2714/2676/2192 2715/2677/2194 2712/2674/2193 \nf 2717/2679/2195 2713/2675/2191 2712/2674/2193 \nf 2718/2680/2196 2716/2678/2197 2716/2678/2194 \nf 2717/2679/2195 2716/2678/2194 2716/2678/2197 \nf 2715/2677/2194 2718/2680/2196 2716/2678/2194 \nf 2719/2681/2198 2720/2682/2198 2716/2678/2197 \nf 2721/2683/2199 2716/2678/2197 2720/2682/2198 \nf 2718/2680/2196 2719/2681/2198 2716/2678/2197 \nf 2721/2683/2199 2717/2679/2195 2716/2678/2197 \nf 2722/2684/2200 2723/2685/2201 2720/2682/2198 \nf 2721/2683/2199 2720/2682/2198 2723/2685/2201 \nf 2719/2681/2198 2722/2684/2200 2720/2682/2198 \nf 2724/2686/2202 2725/2687/2202 2723/2685/2201 \nf 2726/2688/2203 2723/2685/2201 2725/2687/2202 \nf 2722/2684/2200 2724/2686/2202 2723/2685/2201 \nf 2726/2688/2203 2721/2683/2199 2723/2685/2201 \nf 2727/2689/2204 2728/2690/2205 2725/2687/2202 \nf 2726/2688/2203 2725/2687/2202 2728/2690/2205 \nf 2724/2686/2202 2727/2689/2204 2725/2687/2202 \nf 2729/2691/311 1731/2692/311 2728/2690/2205 \nf 1735/1713/1213 2728/2690/2205 1731/2692/311 \nf 2727/2689/2204 2729/2691/311 2728/2690/2205 \nf 2726/2688/2203 2728/2690/2205 1735/1713/1213 \nf 1732/1710/1212 1731/1709/1211 1731/2692/311 \nf 1735/1713/1213 1731/2692/311 1731/1709/1211 \nf 2729/2691/311 1732/1710/1212 1731/2692/311 \nf 2730/2693/2206 1732/1710/1212 2729/2691/311 \nf 2730/2693/2206 1727/1705/1210 1732/1710/1212 \nf 2730/2693/2206 2729/2691/311 2727/2689/2204 \nf 2731/2694/2207 2727/2689/2204 2724/2686/2202 \nf 2730/2693/2206 2727/2689/2204 2731/2694/2207 \nf 2731/2694/2207 2724/2686/2202 2722/2684/2200 \nf 2732/2695/2208 2722/2684/2200 2719/2681/2198 \nf 2731/2694/2207 2722/2684/2200 2732/2695/2208 \nf 2732/2695/2208 2719/2681/2198 2718/2680/2196 \nf 2733/2696/2209 2718/2680/2196 2715/2677/2194 \nf 2732/2695/2208 2718/2680/2196 2733/2696/2209 \nf 2733/2696/2209 2715/2677/2194 2714/2676/2192 \nf 2734/2697/2210 2714/2676/2192 2711/2673/2190 \nf 2733/2696/2209 2714/2676/2192 2734/2697/2210 \nf 2734/2697/2210 2711/2673/2190 2710/2672/2189 \nf 2735/2698/2211 2710/2672/2189 2706/2668/2186 \nf 2734/2697/2210 2710/2672/2189 2735/2698/2211 \nf 2735/2698/2211 2706/2668/2186 2705/2667/2185 \nf 2628/2591/2082 2705/2667/2185 1941/1927/1389 \nf 2735/2698/2211 2705/2667/2185 2628/2591/2082 \nf 2628/2591/2082 1941/1927/1389 1941/1913/1378 \nf 2736/2699/2212 1744/1722/1218 1748/1726/1220 \nf 2736/2699/2212 1745/1723/1219 1744/1722/1218 \nf 2737/2700/2213 1748/1726/1220 1750/1728/1221 \nf 2737/2700/2213 2736/2699/2212 1748/1726/1220 \nf 2738/2701/2214 1750/1728/1221 1752/1730/1222 \nf 2738/2701/2214 2737/2700/2213 1750/1728/1221 \nf 2739/2702/2215 1752/1730/1222 1754/1732/1223 \nf 2739/2702/2215 2738/2701/2214 1752/1730/1222 \nf 2740/2703/2216 1754/1732/1223 1756/1734/1224 \nf 2740/2703/2216 2739/2702/2215 1754/1732/1223 \nf 2741/2704/2217 1756/1734/1224 1759/1737/1225 \nf 2741/2704/2217 2740/2703/2216 1756/1734/1224 \nf 2742/2705/2218 1759/1737/1225 1761/1739/1226 \nf 2742/2705/2218 2741/2704/2217 1759/1737/1225 \nf 2677/2640/2150 1761/1739/1226 1763/1741/1227 \nf 2677/2640/2150 2742/2705/2218 1761/1739/1226 \nf 2726/2688/2203 1735/1713/1213 1737/1715/1214 \nf 2743/2706/2219 1737/1715/1214 1739/1717/1215 \nf 2726/2688/2203 1737/1715/1214 2743/2706/2219 \nf 2744/2707/2220 1739/1717/1215 1742/1720/1216 \nf 2743/2706/2219 1739/1717/1215 2744/2707/2220 \nf 2745/2708/2221 1742/1720/1216 1745/1723/1219 \nf 2744/2707/2220 1742/1720/1216 2745/2708/2221 \nf 2746/2709/2222 1745/1723/1219 2736/2699/2212 \nf 2745/2708/2221 1745/1723/1219 2746/2709/2222 \nf 2747/2710/2223 2736/2699/2212 2737/2700/2213 \nf 2746/2709/2222 2736/2699/2212 2747/2710/2223 \nf 2748/2711/2224 2737/2700/2213 2738/2701/2214 \nf 2747/2710/2223 2737/2700/2213 2748/2711/2224 \nf 2749/2712/2225 2738/2701/2214 2739/2702/2215 \nf 2748/2711/2224 2738/2701/2214 2749/2712/2225 \nf 2750/2713/2226 2739/2702/2215 2740/2703/2216 \nf 2749/2712/2225 2739/2702/2215 2750/2713/2226 \nf 2751/2714/2227 2740/2703/2216 2741/2704/2217 \nf 2750/2713/2226 2740/2703/2216 2751/2714/2227 \nf 2752/2715/2228 2741/2704/2217 2742/2705/2218 \nf 2751/2714/2227 2741/2704/2217 2752/2715/2228 \nf 2753/2716/2229 2742/2705/2218 2677/2640/2150 \nf 2752/2715/2228 2742/2705/2218 2753/2716/2229 \nf 2753/2716/2229 2677/2640/2150 2678/2641/2151 \nf 2682/2645/2155 2683/2646/2156 2686/2649/2160 \nf 2754/2717/2230 2686/2649/2160 2689/2652/2164 \nf 2754/2717/2230 2682/2645/2155 2686/2649/2160 \nf 2755/2718/2231 2689/2652/2164 2691/2654/2166 \nf 2755/2718/2231 2754/2717/2230 2689/2652/2164 \nf 2756/2719/2232 2691/2654/2166 2694/2657/2170 \nf 2756/2719/2232 2755/2718/2231 2691/2654/2166 \nf 2757/2720/2233 2694/2657/2170 2696/2659/2174 \nf 2757/2720/2233 2756/2719/2232 2694/2657/2170 \nf 2758/2721/2234 2696/2659/2174 2698/2661/2177 \nf 2758/2721/2234 2757/2720/2233 2696/2659/2174 \nf 2759/1860/2235 2698/2661/2177 2699/1860/2179 \nf 2759/1860/2235 2758/2721/2234 2698/2661/2177 \nf 2760/2662/2236 2699/1860/2179 2700/2662/2180 \nf 2760/2662/2236 2759/1860/2235 2699/1860/2179 \nf 2761/2722/2237 2700/2662/2180 2701/2663/2181 \nf 2761/2722/2237 2760/2662/2236 2700/2662/2180 \nf 2762/2723/2238 2701/2663/2181 2702/2664/2182 \nf 2762/2723/2238 2761/2722/2237 2701/2663/2181 \nf 2763/2724/2239 2702/2664/2182 2703/2665/2183 \nf 2763/2724/2239 2762/2723/2238 2702/2664/2182 \nf 2764/2725/2240 2703/2665/2183 1954/1926/1388 \nf 2764/2725/2240 2763/2724/2239 2703/2665/2183 \nf 2708/2670/2187 2764/2725/2240 1954/1926/1388 \nf 2681/2644/2154 2682/2645/2155 2754/2717/2230 \nf 2765/2641/2241 2754/2717/2230 2755/2718/2231 \nf 2765/2641/2241 2681/2644/2154 2754/2717/2230 \nf 2766/2726/2242 2755/2718/2231 2756/2719/2232 \nf 2766/2726/2242 2765/2641/2241 2755/2718/2231 \nf 2767/2727/2243 2756/2719/2232 2757/2720/2233 \nf 2767/2727/2243 2766/2726/2242 2756/2719/2232 \nf 2768/2728/2244 2757/2720/2233 2758/2721/2234 \nf 2768/2728/2244 2767/2727/2243 2757/2720/2233 \nf 2769/2729/2245 2758/2721/2234 2759/1860/2235 \nf 2769/2729/2245 2768/2728/2244 2758/2721/2234 \nf 2770/2730/2246 2759/1860/2235 2760/2662/2236 \nf 2770/2730/2246 2769/2729/2245 2759/1860/2235 \nf 2771/2731/2247 2760/2662/2236 2761/2722/2237 \nf 2771/2731/2247 2770/2730/2246 2760/2662/2236 \nf 2772/2732/2248 2761/2722/2237 2762/2723/2238 \nf 2772/2732/2248 2771/2731/2247 2761/2722/2237 \nf 2773/2733/2249 2762/2723/2238 2763/2724/2239 \nf 2773/2733/2249 2772/2732/2248 2762/2723/2238 \nf 2774/2734/2250 2763/2724/2239 2764/2725/2240 \nf 2774/2734/2250 2773/2733/2249 2763/2724/2239 \nf 2775/2735/2251 2764/2725/2240 2708/2670/2187 \nf 2775/2735/2251 2774/2734/2250 2764/2725/2240 \nf 2713/2675/2191 2775/2735/2251 2708/2670/2187 \nf 2680/2643/2153 2681/2644/2154 2765/2641/2241 \nf 2776/2736/2252 2765/2641/2241 2766/2726/2242 \nf 2776/2736/2252 2680/2643/2153 2765/2641/2241 \nf 2777/2737/2253 2766/2726/2242 2767/2727/2243 \nf 2777/2737/2253 2776/2736/2252 2766/2726/2242 \nf 2778/2738/2254 2767/2727/2243 2768/2728/2244 \nf 2778/2738/2254 2777/2737/2253 2767/2727/2243 \nf 2779/2739/2255 2768/2728/2244 2769/2729/2245 \nf 2779/2739/2255 2778/2738/2254 2768/2728/2244 \nf 2780/2740/2256 2769/2729/2245 2770/2730/2246 \nf 2780/2740/2256 2779/2739/2255 2769/2729/2245 \nf 2781/2741/2257 2770/2730/2246 2771/2731/2247 \nf 2781/2741/2257 2780/2740/2256 2770/2730/2246 \nf 2782/2742/2258 2771/2731/2247 2772/2732/2248 \nf 2782/2742/2258 2781/2741/2257 2771/2731/2247 \nf 2783/2743/2259 2772/2732/2248 2773/2733/2249 \nf 2783/2743/2259 2782/2742/2258 2772/2732/2248 \nf 2784/2744/2260 2773/2733/2249 2774/2734/2250 \nf 2784/2744/2260 2783/2743/2259 2773/2733/2249 \nf 2785/2745/2261 2774/2734/2250 2775/2735/2251 \nf 2785/2745/2261 2784/2744/2260 2774/2734/2250 \nf 2786/2746/2262 2775/2735/2251 2713/2675/2191 \nf 2786/2746/2262 2785/2745/2261 2775/2735/2251 \nf 2717/2679/2195 2786/2746/2262 2713/2675/2191 \nf 2679/2642/2152 2680/2643/2153 2776/2736/2252 \nf 2787/2747/2263 2776/2736/2252 2777/2737/2253 \nf 2787/2747/2263 2679/2642/2152 2776/2736/2252 \nf 2788/2727/2264 2777/2737/2253 2778/2738/2254 \nf 2788/2727/2264 2787/2747/2263 2777/2737/2253 \nf 2789/2748/2265 2778/2738/2254 2779/2739/2255 \nf 2789/2748/2265 2788/2727/2264 2778/2738/2254 \nf 2790/2749/2266 2779/2739/2255 2780/2740/2256 \nf 2790/2749/2266 2789/2748/2265 2779/2739/2255 \nf 2791/2750/2267 2780/2740/2256 2781/2741/2257 \nf 2791/2750/2267 2790/2749/2266 2780/2740/2256 \nf 2792/2751/2268 2781/2741/2257 2782/2742/2258 \nf 2792/2751/2268 2791/2750/2267 2781/2741/2257 \nf 2793/2752/2269 2782/2742/2258 2783/2743/2259 \nf 2793/2752/2269 2792/2751/2268 2782/2742/2258 \nf 2794/2753/2270 2783/2743/2259 2784/2744/2260 \nf 2794/2753/2270 2793/2752/2269 2783/2743/2259 \nf 2795/2754/2271 2784/2744/2260 2785/2745/2261 \nf 2795/2754/2271 2794/2753/2270 2784/2744/2260 \nf 2796/2755/2272 2785/2745/2261 2786/2746/2262 \nf 2796/2755/2272 2795/2754/2271 2785/2745/2261 \nf 2797/2756/2273 2786/2746/2262 2717/2679/2195 \nf 2797/2756/2273 2796/2755/2272 2786/2746/2262 \nf 2721/2683/2199 2797/2756/2273 2717/2679/2195 \nf 2678/2641/2151 2679/2642/2152 2787/2747/2263 \nf 2753/2716/2229 2787/2747/2263 2788/2727/2264 \nf 2753/2716/2229 2678/2641/2151 2787/2747/2263 \nf 2752/2715/2228 2788/2727/2264 2789/2748/2265 \nf 2752/2715/2228 2753/2716/2229 2788/2727/2264 \nf 2751/2714/2227 2789/2748/2265 2790/2749/2266 \nf 2751/2714/2227 2752/2715/2228 2789/2748/2265 \nf 2750/2713/2226 2790/2749/2266 2791/2750/2267 \nf 2750/2713/2226 2751/2714/2227 2790/2749/2266 \nf 2749/2712/2225 2791/2750/2267 2792/2751/2268 \nf 2749/2712/2225 2750/2713/2226 2791/2750/2267 \nf 2748/2711/2224 2792/2751/2268 2793/2752/2269 \nf 2748/2711/2224 2749/2712/2225 2792/2751/2268 \nf 2747/2710/2223 2793/2752/2269 2794/2753/2270 \nf 2747/2710/2223 2748/2711/2224 2793/2752/2269 \nf 2746/2709/2222 2794/2753/2270 2795/2754/2271 \nf 2746/2709/2222 2747/2710/2223 2794/2753/2270 \nf 2745/2708/2221 2795/2754/2271 2796/2755/2272 \nf 2745/2708/2221 2746/2709/2222 2795/2754/2271 \nf 2744/2707/2220 2796/2755/2272 2797/2756/2273 \nf 2744/2707/2220 2745/2708/2221 2796/2755/2272 \nf 2743/2706/2219 2797/2756/2273 2721/2683/2199 \nf 2743/2706/2219 2744/2707/2220 2797/2756/2273 \nf 2726/2688/2203 2743/2706/2219 2721/2683/2199 \nf 2798/2757/2274 1709/1687/1200 1711/1689/1201 \nf 1715/1693/1204 2798/2757/2274 1711/1689/1201 \nf 2799/2758/2275 1707/1685/1199 1709/1687/1200 \nf 2798/2757/2274 2799/2758/2275 1709/1687/1200 \nf 2800/2759/2276 1705/1683/1198 1707/1685/1199 \nf 2799/2758/2275 2800/2759/2276 1707/1685/1199 \nf 2801/2760/2277 1703/1681/1197 1705/1683/1198 \nf 2800/2759/2276 2801/2760/2277 1705/1683/1198 \nf 2802/2761/2278 1701/1679/1196 1703/1681/1197 \nf 2801/2760/2277 2802/2761/2278 1703/1681/1197 \nf 2670/2633/2134 1699/1677/1195 1701/1679/1196 \nf 2802/2761/2278 2670/2633/2134 1701/1679/1196 \nf 2669/2632/2133 2670/2633/2134 2802/2761/2278 \nf 2803/2762/2279 2802/2761/2278 2801/2760/2277 \nf 2669/2632/2133 2802/2761/2278 2803/2762/2279 \nf 2804/2763/2280 2801/2760/2277 2800/2759/2276 \nf 2803/2762/2279 2801/2760/2277 2804/2763/2280 \nf 2805/2764/2281 2800/2759/2276 2799/2758/2275 \nf 2804/2763/2280 2800/2759/2276 2805/2764/2281 \nf 2806/2765/2282 2799/2758/2275 2798/2757/2274 \nf 2805/2764/2281 2799/2758/2275 2806/2765/2282 \nf 2807/2766/2283 2798/2757/2274 1715/1693/1204 \nf 2806/2765/2282 2798/2757/2274 2807/2766/2283 \nf 2808/2767/2284 1715/1693/1204 1714/1692/1203 \nf 2807/2766/2283 1715/1693/1204 2808/2767/2284 \nf 2809/2768/2285 1714/1692/1203 1717/1695/1205 \nf 2808/2767/2284 1714/1692/1203 2809/2768/2285 \nf 2810/2769/2286 1717/1695/1205 1719/1697/1206 \nf 2809/2768/2285 1717/1695/1205 2810/2769/2286 \nf 2811/2770/2287 1719/1697/1206 1721/1699/1207 \nf 2810/2769/2286 1719/1697/1206 2811/2770/2287 \nf 2812/2771/2288 1721/1699/1207 1723/1701/1208 \nf 2811/2770/2287 1721/1699/1207 2812/2771/2288 \nf 2813/2772/2289 1723/1701/1208 1725/1703/1209 \nf 2812/2771/2288 1723/1701/1208 2813/2772/2289 \nf 2814/2773/2290 1725/1703/1209 1727/1705/1210 \nf 2813/2772/2289 1725/1703/1209 2814/2773/2290 \nf 2814/2773/2290 1727/1705/1210 2730/2693/2206 \nf 2735/2698/2211 2628/2591/2082 2629/2592/2083 \nf 2815/2774/2291 2629/2592/2083 2630/2593/2084 \nf 2815/2774/2291 2735/2698/2211 2629/2592/2083 \nf 2816/2775/2292 2630/2593/2084 2631/2594/2085 \nf 2816/2775/2292 2815/2774/2291 2630/2593/2084 \nf 2817/2776/2293 2631/2594/2085 2632/2595/2086 \nf 2817/2776/2293 2816/2775/2292 2631/2594/2085 \nf 2818/2777/2294 2632/2595/2086 2633/2596/2087 \nf 2818/2777/2294 2817/2776/2293 2632/2595/2086 \nf 2819/2778/2295 2633/2596/2087 2634/2597/2088 \nf 2819/2778/2295 2818/2777/2294 2633/2596/2087 \nf 2820/2779/2296 2634/2597/2088 2635/2598/2089 \nf 2820/2779/2296 2819/2778/2295 2634/2597/2088 \nf 2821/2780/2297 2635/2598/2089 2636/2599/2090 \nf 2821/2780/2297 2820/2779/2296 2635/2598/2089 \nf 2822/2781/2298 2636/2599/2090 2637/2600/2091 \nf 2822/2781/2298 2821/2780/2297 2636/2599/2090 \nf 2823/2782/2299 2637/2600/2091 2638/2601/2092 \nf 2823/2782/2299 2822/2781/2298 2637/2600/2091 \nf 2824/2783/2300 2638/2601/2092 2639/2602/2093 \nf 2824/2783/2300 2823/2782/2299 2638/2601/2092 \nf 2825/2784/2301 2639/2602/2093 2640/2603/2095 \nf 2825/2784/2301 2824/2783/2300 2639/2602/2093 \nf 2826/2785/2302 2640/2603/2095 1931/1903/1368 \nf 2826/2785/2302 2825/2784/2301 2640/2603/2095 \nf 2664/2627/2128 2826/2785/2302 1931/1903/1368 \nf 2734/2697/2210 2735/2698/2211 2815/2774/2291 \nf 2827/2786/2303 2815/2774/2291 2816/2775/2292 \nf 2827/2786/2303 2734/2697/2210 2815/2774/2291 \nf 2828/2787/2304 2816/2775/2292 2817/2776/2293 \nf 2828/2787/2304 2827/2786/2303 2816/2775/2292 \nf 2829/2788/2305 2817/2776/2293 2818/2777/2294 \nf 2829/2788/2305 2828/2787/2304 2817/2776/2293 \nf 2830/2789/2306 2818/2777/2294 2819/2778/2295 \nf 2830/2789/2306 2829/2788/2305 2818/2777/2294 \nf 2831/2790/2307 2819/2778/2295 2820/2779/2296 \nf 2831/2790/2307 2830/2789/2306 2819/2778/2295 \nf 2832/2791/2308 2820/2779/2296 2821/2780/2297 \nf 2832/2791/2308 2831/2790/2307 2820/2779/2296 \nf 2833/2792/2309 2821/2780/2297 2822/2781/2298 \nf 2833/2792/2309 2832/2791/2308 2821/2780/2297 \nf 2834/2793/2310 2822/2781/2298 2823/2782/2299 \nf 2834/2793/2310 2833/2792/2309 2822/2781/2298 \nf 2835/2794/2311 2823/2782/2299 2824/2783/2300 \nf 2835/2794/2311 2834/2793/2310 2823/2782/2299 \nf 2836/2795/2312 2824/2783/2300 2825/2784/2301 \nf 2836/2795/2312 2835/2794/2311 2824/2783/2300 \nf 2837/2796/2313 2825/2784/2301 2826/2785/2302 \nf 2837/2796/2313 2836/2795/2312 2825/2784/2301 \nf 2838/2797/2314 2826/2785/2302 2664/2627/2128 \nf 2838/2797/2314 2837/2796/2313 2826/2785/2302 \nf 2665/2628/2129 2838/2797/2314 2664/2627/2128 \nf 2733/2696/2209 2734/2697/2210 2827/2786/2303 \nf 2839/2798/2315 2827/2786/2303 2828/2787/2304 \nf 2839/2798/2315 2733/2696/2209 2827/2786/2303 \nf 2840/2799/2316 2828/2787/2304 2829/2788/2305 \nf 2840/2799/2316 2839/2798/2315 2828/2787/2304 \nf 2841/2800/2317 2829/2788/2305 2830/2789/2306 \nf 2841/2800/2317 2840/2799/2316 2829/2788/2305 \nf 2842/2801/2318 2830/2789/2306 2831/2790/2307 \nf 2842/2801/2318 2841/2800/2317 2830/2789/2306 \nf 2843/2802/2319 2831/2790/2307 2832/2791/2308 \nf 2843/2802/2319 2842/2801/2318 2831/2790/2307 \nf 2844/2803/2320 2832/2791/2308 2833/2792/2309 \nf 2844/2803/2320 2843/2802/2319 2832/2791/2308 \nf 2845/2804/2321 2833/2792/2309 2834/2793/2310 \nf 2845/2804/2321 2844/2803/2320 2833/2792/2309 \nf 2846/2805/2322 2834/2793/2310 2835/2794/2311 \nf 2846/2805/2322 2845/2804/2321 2834/2793/2310 \nf 2847/2806/2323 2835/2794/2311 2836/2795/2312 \nf 2847/2806/2323 2846/2805/2322 2835/2794/2311 \nf 2848/2807/2324 2836/2795/2312 2837/2796/2313 \nf 2848/2807/2324 2847/2806/2323 2836/2795/2312 \nf 2849/2808/2325 2837/2796/2313 2838/2797/2314 \nf 2849/2808/2325 2848/2807/2324 2837/2796/2313 \nf 2850/2809/2326 2838/2797/2314 2665/2628/2129 \nf 2850/2809/2326 2849/2808/2325 2838/2797/2314 \nf 2666/2629/2130 2850/2809/2326 2665/2628/2129 \nf 2732/2695/2208 2733/2696/2209 2839/2798/2315 \nf 2851/2810/2327 2839/2798/2315 2840/2799/2316 \nf 2851/2810/2327 2732/2695/2208 2839/2798/2315 \nf 2852/2811/2328 2840/2799/2316 2841/2800/2317 \nf 2852/2811/2328 2851/2810/2327 2840/2799/2316 \nf 2853/2812/2329 2841/2800/2317 2842/2801/2318 \nf 2853/2812/2329 2852/2811/2328 2841/2800/2317 \nf 2854/2813/2330 2842/2801/2318 2843/2802/2319 \nf 2854/2813/2330 2853/2812/2329 2842/2801/2318 \nf 2855/2814/2331 2843/2802/2319 2844/2803/2320 \nf 2855/2814/2331 2854/2813/2330 2843/2802/2319 \nf 2856/2815/2332 2844/2803/2320 2845/2804/2321 \nf 2856/2815/2332 2855/2814/2331 2844/2803/2320 \nf 2857/2816/2333 2845/2804/2321 2846/2805/2322 \nf 2857/2816/2333 2856/2815/2332 2845/2804/2321 \nf 2858/2817/2334 2846/2805/2322 2847/2806/2323 \nf 2858/2817/2334 2857/2816/2333 2846/2805/2322 \nf 2859/2818/2335 2847/2806/2323 2848/2807/2324 \nf 2859/2818/2335 2858/2817/2334 2847/2806/2323 \nf 2860/2819/2336 2848/2807/2324 2849/2808/2325 \nf 2860/2819/2336 2859/2818/2335 2848/2807/2324 \nf 2861/2820/2337 2849/2808/2325 2850/2809/2326 \nf 2861/2820/2337 2860/2819/2336 2849/2808/2325 \nf 2862/2821/2338 2850/2809/2326 2666/2629/2130 \nf 2862/2821/2338 2861/2820/2337 2850/2809/2326 \nf 2667/2630/2131 2862/2821/2338 2666/2629/2130 \nf 2731/2694/2207 2732/2695/2208 2851/2810/2327 \nf 2863/2822/2339 2851/2810/2327 2852/2811/2328 \nf 2863/2822/2339 2731/2694/2207 2851/2810/2327 \nf 2864/2823/2340 2852/2811/2328 2853/2812/2329 \nf 2864/2823/2340 2863/2822/2339 2852/2811/2328 \nf 2865/2824/2341 2853/2812/2329 2854/2813/2330 \nf 2865/2824/2341 2864/2823/2340 2853/2812/2329 \nf 2866/2825/2342 2854/2813/2330 2855/2814/2331 \nf 2866/2825/2342 2865/2824/2341 2854/2813/2330 \nf 2867/2826/2343 2855/2814/2331 2856/2815/2332 \nf 2867/2826/2343 2866/2825/2342 2855/2814/2331 \nf 2868/2827/2344 2856/2815/2332 2857/2816/2333 \nf 2868/2827/2344 2867/2826/2343 2856/2815/2332 \nf 2869/2828/2345 2857/2816/2333 2858/2817/2334 \nf 2869/2828/2345 2868/2827/2344 2857/2816/2333 \nf 2870/2829/2346 2858/2817/2334 2859/2818/2335 \nf 2870/2829/2346 2869/2828/2345 2858/2817/2334 \nf 2871/2830/2347 2859/2818/2335 2860/2819/2336 \nf 2871/2830/2347 2870/2829/2346 2859/2818/2335 \nf 2872/2831/2348 2860/2819/2336 2861/2820/2337 \nf 2872/2831/2348 2871/2830/2347 2860/2819/2336 \nf 2873/2832/2349 2861/2820/2337 2862/2821/2338 \nf 2873/2832/2349 2872/2831/2348 2861/2820/2337 \nf 2874/2833/2350 2862/2821/2338 2667/2630/2131 \nf 2874/2833/2350 2873/2832/2349 2862/2821/2338 \nf 2668/2631/2132 2874/2833/2350 2667/2630/2131 \nf 2730/2693/2206 2731/2694/2207 2863/2822/2339 \nf 2814/2773/2290 2863/2822/2339 2864/2823/2340 \nf 2814/2773/2290 2730/2693/2206 2863/2822/2339 \nf 2813/2772/2289 2864/2823/2340 2865/2824/2341 \nf 2813/2772/2289 2814/2773/2290 2864/2823/2340 \nf 2812/2771/2288 2865/2824/2341 2866/2825/2342 \nf 2812/2771/2288 2813/2772/2289 2865/2824/2341 \nf 2811/2770/2287 2866/2825/2342 2867/2826/2343 \nf 2811/2770/2287 2812/2771/2288 2866/2825/2342 \nf 2810/2769/2286 2867/2826/2343 2868/2827/2344 \nf 2810/2769/2286 2811/2770/2287 2867/2826/2343 \nf 2809/2768/2285 2868/2827/2344 2869/2828/2345 \nf 2809/2768/2285 2810/2769/2286 2868/2827/2344 \nf 2808/2767/2284 2869/2828/2345 2870/2829/2346 \nf 2808/2767/2284 2809/2768/2285 2869/2828/2345 \nf 2807/2766/2283 2870/2829/2346 2871/2830/2347 \nf 2807/2766/2283 2808/2767/2284 2870/2829/2346 \nf 2806/2765/2282 2871/2830/2347 2872/2831/2348 \nf 2806/2765/2282 2807/2766/2283 2871/2830/2347 \nf 2805/2764/2281 2872/2831/2348 2873/2832/2349 \nf 2805/2764/2281 2806/2765/2282 2872/2831/2348 \nf 2804/2763/2280 2873/2832/2349 2874/2833/2350 \nf 2804/2763/2280 2805/2764/2281 2873/2832/2349 \nf 2803/2762/2279 2874/2833/2350 2668/2631/2132 \nf 2803/2762/2279 2804/2763/2280 2874/2833/2350 \nf 2669/2632/2133 2803/2762/2279 2668/2631/2132 \nf 2622/2586/2076 1945/1917/1380 1947/1919/1381 \nf 2875/2834/2351 1947/1919/1381 1949/1921/1382 \nf 2622/2586/2076 1947/1919/1381 2875/2834/2351 \nf 2876/2835/2352 1949/1921/1382 1951/1923/1383 \nf 2875/2834/2351 1949/1921/1382 2876/2835/2352 \nf 2877/2836/2353 1951/1923/1383 1952/1924/1384 \nf 2876/2835/2352 1951/1923/1383 2877/2836/2353 \nf 2877/2836/2353 1952/1924/1384 2016/1989/1456 \nf 2878/2837/2354 1857/1834/1279 1858/1835/1281 \nf 2878/2837/2354 1864/1841/1300 1857/1834/1279 \nf 2879/1817/2355 1858/1835/1281 2575/2541/2025 \nf 2879/1817/2355 2878/2837/2354 1858/1835/1281 \nf 2880/2838/2356 2575/2541/2025 2576/2542/2027 \nf 2880/2838/2356 2879/1817/2355 2575/2541/2025 \nf 2881/2839/2357 2576/2542/2027 2577/2543/2029 \nf 2881/2839/2357 2880/2838/2356 2576/2542/2027 \nf 2882/2840/2358 2577/2543/2029 2578/1810/2030 \nf 2882/2840/2358 2881/2839/2357 2577/2543/2029 \nf 2883/2841/2359 2578/1810/2030 2579/2544/2032 \nf 2883/2841/2359 2882/2840/2358 2578/1810/2030 \nf 2884/2842/2360 2579/2544/2032 2580/2545/2033 \nf 2884/2842/2360 2883/2841/2359 2579/2544/2032 \nf 2885/2843/2361 2580/2545/2033 2581/2546/2034 \nf 2885/2843/2361 2884/2842/2360 2580/2545/2033 \nf 2886/2844/2362 2581/2546/2034 2582/2547/2035 \nf 2886/2844/2362 2885/2843/2361 2581/2546/2034 \nf 2887/2845/2363 2582/2547/2035 2583/2548/2036 \nf 2887/2845/2363 2886/2844/2362 2582/2547/2035 \nf 2888/2846/2364 2583/2548/2036 1933/1905/1370 \nf 2888/2846/2364 2887/2845/2363 2583/2548/2036 \nf 2588/2553/2041 2888/2846/2364 1933/1905/1370 \nf 2889/2847/2365 1862/1839/1294 1864/1841/1300 \nf 2889/2847/2365 1863/1840/1296 1862/1839/1294 \nf 2890/2848/2366 1864/1841/1300 2878/2837/2354 \nf 2890/2848/2366 2889/2847/2365 1864/1841/1300 \nf 2891/1906/2367 2878/2837/2354 2879/1817/2355 \nf 2891/1906/2367 2890/2848/2366 2878/2837/2354 \nf 2892/2849/2368 2879/1817/2355 2880/2838/2356 \nf 2892/2849/2368 2891/1906/2367 2879/1817/2355 \nf 2893/2850/2369 2880/2838/2356 2881/2839/2357 \nf 2893/2850/2369 2892/2849/2368 2880/2838/2356 \nf 2894/2845/2370 2881/2839/2357 2882/2840/2358 \nf 2894/2845/2370 2893/2850/2369 2881/2839/2357 \nf 2895/2851/2371 2882/2840/2358 2883/2841/2359 \nf 2895/2851/2371 2894/2845/2370 2882/2840/2358 \nf 2896/2852/2372 2883/2841/2359 2884/2842/2360 \nf 2896/2852/2372 2895/2851/2371 2883/2841/2359 \nf 2897/2853/2373 2884/2842/2360 2885/2843/2361 \nf 2897/2853/2373 2896/2852/2372 2884/2842/2360 \nf 2898/2854/2374 2885/2843/2361 2886/2844/2362 \nf 2898/2854/2374 2897/2853/2373 2885/2843/2361 \nf 2899/2855/2375 2886/2844/2362 2887/2845/2363 \nf 2899/2855/2375 2898/2854/2374 2886/2844/2362 \nf 2900/2856/2376 2887/2845/2363 2888/2846/2364 \nf 2900/2856/2376 2899/2855/2375 2887/2845/2363 \nf 2901/2857/2377 2888/2846/2364 2588/2553/2041 \nf 2901/2857/2377 2900/2856/2376 2888/2846/2364 \nf 2593/2557/2046 2901/2857/2377 2588/2553/2041 \nf 2902/2858/2378 1860/1837/1289 1863/1840/1296 \nf 2902/2858/2378 1861/1838/1291 1860/1837/1289 \nf 2903/2859/2379 1863/1840/1296 2889/2847/2365 \nf 2903/2859/2379 2902/2858/2378 1863/1840/1296 \nf 2904/2860/2380 2889/2847/2365 2890/2848/2366 \nf 2904/2860/2380 2903/2859/2379 2889/2847/2365 \nf 2905/2861/2381 2890/2848/2366 2891/1906/2367 \nf 2905/2861/2381 2904/2860/2380 2890/2848/2366 \nf 2906/2862/2382 2891/1906/2367 2892/2849/2368 \nf 2906/2862/2382 2905/2861/2381 2891/1906/2367 \nf 2907/2863/2383 2892/2849/2368 2893/2850/2369 \nf 2907/2863/2383 2906/2862/2382 2892/2849/2368 \nf 2908/2864/2384 2893/2850/2369 2894/2845/2370 \nf 2908/2864/2384 2907/2863/2383 2893/2850/2369 \nf 2909/2865/2385 2894/2845/2370 2895/2851/2371 \nf 2909/2865/2385 2908/2864/2384 2894/2845/2370 \nf 2910/2865/2386 2895/2851/2371 2896/2852/2372 \nf 2910/2865/2386 2909/2865/2385 2895/2851/2371 \nf 2911/2866/2387 2896/2852/2372 2897/2853/2373 \nf 2911/2866/2387 2910/2865/2386 2896/2852/2372 \nf 2912/2867/2388 2897/2853/2373 2898/2854/2374 \nf 2912/2867/2388 2911/2866/2387 2897/2853/2373 \nf 2913/2868/2389 2898/2854/2374 2899/2855/2375 \nf 2913/2868/2389 2912/2867/2388 2898/2854/2374 \nf 2914/2869/2390 2899/2855/2375 2900/2856/2376 \nf 2914/2869/2390 2913/2868/2389 2899/2855/2375 \nf 2915/2870/2391 2900/2856/2376 2901/2857/2377 \nf 2915/2870/2391 2914/2869/2390 2900/2856/2376 \nf 2598/2562/2051 2901/2857/2377 2593/2557/2046 \nf 2598/2562/2051 2915/2870/2391 2901/2857/2377 \nf 1903/670/1331 1861/1838/1291 2902/2858/2378 \nf 1902/1876/1329 2902/2858/2378 2903/2859/2379 \nf 1902/1876/1329 1903/670/1331 2902/2858/2378 \nf 1901/1875/1326 2903/2859/2379 2904/2860/2380 \nf 1901/1875/1326 1902/1876/1329 2903/2859/2379 \nf 1900/1874/1323 2904/2860/2380 2905/2861/2381 \nf 1900/1874/1323 1901/1875/1326 2904/2860/2380 \nf 2916/2857/2392 2905/2861/2381 2906/2862/2382 \nf 2916/2857/2392 1900/1874/1323 2905/2861/2381 \nf 2917/2871/2393 2906/2862/2382 2907/2863/2383 \nf 2917/2871/2393 2916/2857/2392 2906/2862/2382 \nf 2918/2872/2394 2907/2863/2383 2908/2864/2384 \nf 2918/2872/2394 2917/2871/2393 2907/2863/2383 \nf 2919/2873/2395 2908/2864/2384 2909/2865/2385 \nf 2919/2873/2395 2918/2872/2394 2908/2864/2384 \nf 2920/2874/2396 2909/2865/2385 2910/2865/2386 \nf 2920/2874/2396 2919/2873/2395 2909/2865/2385 \nf 2921/1873/2397 2910/2865/2386 2911/2866/2387 \nf 2921/1873/2397 2920/2874/2396 2910/2865/2386 \nf 2922/2875/2398 2911/2866/2387 2912/2867/2388 \nf 2922/2875/2398 2921/1873/2397 2911/2866/2387 \nf 2923/2876/2399 2912/2867/2388 2913/2868/2389 \nf 2923/2876/2399 2922/2875/2398 2912/2867/2388 \nf 2924/2877/2400 2913/2868/2389 2914/2869/2390 \nf 2924/2877/2400 2923/2876/2399 2913/2868/2389 \nf 2925/2878/2401 2914/2869/2390 2915/2870/2391 \nf 2925/2878/2401 2924/2877/2400 2914/2869/2390 \nf 2603/2566/2056 2915/2870/2391 2598/2562/2051 \nf 2603/2566/2056 2925/2878/2401 2915/2870/2391 \nf 1899/662/1319 1900/1874/1323 2916/2857/2392 \nf 1898/661/1317 2916/2857/2392 2917/2871/2393 \nf 1898/661/1317 1899/662/1319 2916/2857/2392 \nf 1897/1873/1315 2917/2871/2393 2918/2872/2394 \nf 1897/1873/1315 1898/661/1317 2917/2871/2393 \nf 1895/1871/1310 2918/2872/2394 2919/2873/2395 \nf 1895/1871/1310 1897/1873/1315 2918/2872/2394 \nf 1896/1872/1313 2919/2873/2395 2920/2874/2396 \nf 1896/1872/1313 1895/1871/1310 2919/2873/2395 \nf 2926/2879/2402 2920/2874/2396 2921/1873/2397 \nf 2926/2879/2402 1896/1872/1313 2920/2874/2396 \nf 2927/2880/2403 2921/1873/2397 2922/2875/2398 \nf 2927/2880/2403 2926/2879/2402 2921/1873/2397 \nf 2928/2881/2404 2922/2875/2398 2923/2876/2399 \nf 2928/2881/2404 2927/2880/2403 2922/2875/2398 \nf 2929/2882/2405 2923/2876/2399 2924/2877/2400 \nf 2929/2882/2405 2928/2881/2404 2923/2876/2399 \nf 2930/2883/2406 2924/2877/2400 2925/2878/2401 \nf 2930/2883/2406 2929/2882/2405 2924/2877/2400 \nf 2607/2571/2061 2925/2878/2401 2603/2566/2056 \nf 2607/2571/2061 2930/2883/2406 2925/2878/2401 \nf 1936/1908/1376 1896/1872/1313 2926/2879/2402 \nf 2020/1993/1462 2926/2879/2402 2927/2880/2403 \nf 2020/1993/1462 1936/1908/1376 2926/2879/2402 \nf 2931/2884/2407 2927/2880/2403 2928/2881/2404 \nf 2931/2884/2407 2020/1993/1462 2927/2880/2403 \nf 2932/2885/2408 2928/2881/2404 2929/2882/2405 \nf 2932/2885/2408 2931/2884/2407 2928/2881/2404 \nf 2933/2886/2409 2929/2882/2405 2930/2883/2406 \nf 2933/2886/2409 2932/2885/2408 2929/2882/2405 \nf 2934/2887/2410 2930/2883/2406 2607/2571/2061 \nf 2934/2887/2410 2933/2886/2409 2930/2883/2406 \nf 2612/2576/2066 2934/2887/2410 2607/2571/2061 \nf 2019/1992/1460 2020/1993/1462 2931/2884/2407 \nf 2935/2888/2411 2931/2884/2407 2932/2885/2408 \nf 2935/2888/2411 2019/1992/1460 2931/2884/2407 \nf 2936/2889/2412 2932/2885/2408 2933/2886/2409 \nf 2936/2889/2412 2935/2888/2411 2932/2885/2408 \nf 2937/2890/2413 2933/2886/2409 2934/2887/2410 \nf 2937/2890/2413 2936/2889/2412 2933/2886/2409 \nf 2938/2891/2414 2934/2887/2410 2612/2576/2066 \nf 2938/2891/2414 2937/2890/2413 2934/2887/2410 \nf 2617/2581/2071 2938/2891/2414 2612/2576/2066 \nf 2016/1989/1456 2019/1992/1460 2935/2888/2411 \nf 2877/2836/2353 2935/2888/2411 2936/2889/2412 \nf 2877/2836/2353 2016/1989/1456 2935/2888/2411 \nf 2876/2835/2352 2936/2889/2412 2937/2890/2413 \nf 2876/2835/2352 2877/2836/2353 2936/2889/2412 \nf 2875/2834/2351 2937/2890/2413 2938/2891/2414 \nf 2875/2834/2351 2876/2835/2352 2937/2890/2413 \nf 2622/2586/2076 2938/2891/2414 2617/2581/2071 \nf 2622/2586/2076 2875/2834/2351 2938/2891/2414 \nf 1691/1669/1187 15/15/1186 17/17/2415 \nf 2939/2892/2416 17/17/2415 19/19/2417 \nf 2495/2467/1942 2584/2549/2037 1677/1655/1166 \nf 2939/2892/2416 1691/1669/1187 17/17/2415 \nf 2940/2893/2418 19/19/2417 22/19/2419 \nf 2584/2549/2037 1675/1653/1163 1677/1655/1166 \nf 2940/2893/2418 2939/2892/2416 19/19/2417 \nf 2941/2894/2420 22/19/2419 21/19/2421 \nf 2940/2893/2422 2940/2893/2418 22/19/2419 \nf 2941/2894/2420 2940/2893/2422 22/19/2419 \nf 2942/2895/2423 21/19/2421 24/22/2424 \nf 2941/2894/2425 2941/2894/2420 21/19/2421 \nf 2942/2895/2423 2941/2894/2425 21/19/2421 \nf 2942/2895/2426 24/22/2424 26/24/1452 \nf 2942/2895/2426 2942/2895/2423 24/22/2424 \nf 2943/1986/2427 2942/2895/2426 26/24/1452 \nf 2013/1986/1449 2943/1986/2427 26/24/1452 \nf 2584/2549/2037 2704/2666/2184 1675/1653/1163 \nf 2944/2896/2428 1691/1669/1187 2939/2892/2416 \nf 2944/2896/2428 1692/1670/1188 1691/1669/1187 \nf 2017/1990/1458 2945/2897/2429 2493/2465/1940 \nf 2946/2898/2430 2939/2892/2416 2940/2893/2418 \nf 2946/2898/2430 2944/2896/2428 2939/2892/2416 \nf 2946/2898/2430 2940/2893/2418 2940/2893/2422 \nf 2947/2892/2431 2940/2893/2422 2941/2894/2420 \nf 2946/2898/2430 2940/2893/2422 2947/2892/2431 \nf 2947/2892/2431 2941/2894/2420 2941/2894/2425 \nf 2948/2899/2432 2941/2894/2425 2942/2895/2423 \nf 2947/2892/2431 2941/2894/2425 2948/2899/2432 \nf 2948/2899/2432 2942/2895/2423 2942/2895/2426 \nf 2949/2900/2433 2942/2895/2426 2943/1986/2427 \nf 2948/2899/2432 2942/2895/2426 2949/2900/2433 \nf 2949/2900/2433 2943/1986/2427 2013/1986/1449 \nf 2949/2900/2433 2013/1986/1449 2014/1987/1450 \nf 2950/2901/2434 1596/1574/1080 1678/1656/1168 \nf 1595/1573/1078 1596/1574/1080 2950/2901/2434 \nf 2951/2902/2435 1678/1656/1168 1679/1657/1170 \nf 2950/2901/2434 1678/1656/1168 2951/2902/2435 \nf 2952/2903/2436 1679/1657/1170 1680/1658/1172 \nf 2951/2902/2435 1679/1657/1170 2952/2903/2436 \nf 2953/2904/2437 1680/1658/1172 1681/1659/1174 \nf 2952/2903/2436 1680/1658/1172 2953/2904/2437 \nf 2954/2905/2438 1681/1659/1174 1682/1660/1176 \nf 2953/2904/2437 1681/1659/1174 2954/2905/2438 \nf 2955/2906/2439 1682/1660/1176 1683/1661/1178 \nf 2954/2905/2438 1682/1660/1176 2955/2906/2439 \nf 2956/2907/2440 1683/1661/1178 1684/1662/1180 \nf 2955/2906/2439 1683/1661/1178 2956/2907/2440 \nf 2957/2908/2441 1684/1662/1180 1685/1663/1182 \nf 2956/2907/2440 1684/1662/1180 2957/2908/2441 \nf 855/851/442 1685/1663/1182 853/849/440 \nf 2957/2908/2441 1685/1663/1182 855/851/442 \nf 2957/2908/2441 855/851/442 854/850/441 \nf 2958/2909/2442 854/850/441 856/852/443 \nf 2958/2909/2442 2957/2908/2441 854/850/441 \nf 2959/2910/2443 856/852/443 857/853/444 \nf 2959/2910/2443 2958/2909/2442 856/852/443 \nf 2960/2911/2444 857/853/444 858/854/445 \nf 2960/2911/2444 2959/2910/2443 857/853/444 \nf 2961/2912/2445 858/854/445 859/855/446 \nf 2961/2912/2445 2960/2911/2444 858/854/445 \nf 2962/2913/2446 859/855/446 860/856/447 \nf 2962/2913/2446 2961/2912/2445 859/855/446 \nf 2963/2914/2447 860/856/447 861/857/448 \nf 2963/2914/2447 2962/2913/2446 860/856/447 \nf 2964/2915/2448 861/857/448 862/858/449 \nf 2964/2915/2448 2963/2914/2447 861/857/448 \nf 2965/2916/2449 862/858/449 863/859/450 \nf 2965/2916/2449 2964/2915/2448 862/858/449 \nf 2966/2917/2450 863/859/450 864/860/451 \nf 2966/2917/2450 2965/2916/2449 863/859/450 \nf 2967/2918/2451 864/860/451 865/861/452 \nf 2967/2918/2451 2966/2917/2450 864/860/451 \nf 2968/2919/2452 865/861/452 866/862/453 \nf 2968/2919/2452 2967/2918/2451 865/861/452 \nf 2969/2920/2453 866/862/453 867/863/454 \nf 2969/2920/2453 2968/2919/2452 866/862/453 \nf 2970/2921/2454 867/863/454 868/864/455 \nf 2970/2921/2454 2969/2920/2453 867/863/454 \nf 2971/2922/2455 868/864/455 869/865/456 \nf 2971/2922/2455 2970/2921/2454 868/864/455 \nf 2972/2923/2456 869/865/456 870/866/457 \nf 2972/2923/2456 2971/2922/2455 869/865/456 \nf 2973/2924/2457 870/866/457 871/867/458 \nf 2973/2924/2457 2972/2923/2456 870/866/457 \nf 2974/2925/2458 871/867/458 872/868/459 \nf 2974/2925/2458 2973/2924/2457 871/867/458 \nf 2975/2926/2459 872/868/459 874/870/461 \nf 2975/2926/2459 2974/2925/2458 872/868/459 \nf 2976/2927/2460 874/870/461 873/869/460 \nf 2976/2927/2460 2975/2926/2459 874/870/461 \nf 2977/2928/2461 873/869/460 875/871/462 \nf 2977/2928/2461 2976/2927/2460 873/869/460 \nf 2978/2929/2462 875/871/462 876/872/463 \nf 2978/2929/2462 2977/2928/2461 875/871/462 \nf 2979/2930/2463 876/872/463 877/873/464 \nf 2979/2930/2463 2978/2929/2462 876/872/463 \nf 2980/2931/2464 877/873/464 878/874/465 \nf 2980/2931/2464 2979/2930/2463 877/873/464 \nf 2981/2932/2465 878/874/465 879/875/466 \nf 2981/2932/2465 2980/2931/2464 878/874/465 \nf 2982/2933/2466 879/875/466 880/876/467 \nf 2982/2933/2466 2981/2932/2465 879/875/466 \nf 2983/2934/2467 880/876/467 881/877/468 \nf 2983/2934/2467 2982/2933/2466 880/876/467 \nf 2984/2935/2468 881/877/468 882/878/469 \nf 2984/2935/2468 2983/2934/2467 881/877/468 \nf 2985/2936/2469 882/878/469 883/879/470 \nf 2985/2936/2469 2984/2935/2468 882/878/469 \nf 2986/2937/2470 883/879/470 884/880/471 \nf 2986/2937/2470 2985/2936/2469 883/879/470 \nf 2987/2938/2471 884/880/471 885/881/472 \nf 2987/2938/2471 2986/2937/2470 884/880/471 \nf 2988/2939/2472 885/881/472 886/882/473 \nf 2988/2939/2472 2987/2938/2471 885/881/472 \nf 2989/2940/2473 886/882/473 887/883/474 \nf 2989/2940/2473 2988/2939/2472 886/882/473 \nf 2990/2941/2474 887/883/474 888/884/475 \nf 2990/2941/2474 2989/2940/2473 887/883/474 \nf 2991/2942/2475 888/884/475 889/885/476 \nf 2991/2942/2475 2990/2941/2474 888/884/475 \nf 2992/2943/2476 889/885/476 890/886/477 \nf 2992/2943/2476 2991/2942/2475 889/885/476 \nf 2993/2944/2477 890/886/477 891/887/478 \nf 2993/2944/2477 2992/2943/2476 890/886/477 \nf 2994/2945/2478 891/887/478 892/888/479 \nf 2994/2945/2478 2993/2944/2477 891/887/478 \nf 2995/2946/2479 892/888/479 893/889/480 \nf 2995/2946/2479 2994/2945/2478 892/888/479 \nf 2996/2947/2480 893/889/480 894/890/481 \nf 2996/2947/2480 2995/2946/2479 893/889/480 \nf 2997/2948/2481 894/890/481 895/891/482 \nf 2997/2948/2481 2996/2947/2480 894/890/481 \nf 2998/2949/2482 895/891/482 896/892/483 \nf 2998/2949/2482 2997/2948/2481 895/891/482 \nf 2999/2950/2483 896/892/483 897/893/484 \nf 2999/2950/2483 2998/2949/2482 896/892/483 \nf 3000/2951/2484 897/893/484 898/894/485 \nf 3000/2951/2484 2999/2950/2483 897/893/484 \nf 3001/2952/2485 898/894/485 899/895/486 \nf 3001/2952/2485 3000/2951/2484 898/894/485 \nf 3002/2953/2486 899/895/486 900/896/487 \nf 3002/2953/2486 3001/2952/2485 899/895/486 \nf 3003/2954/2487 900/896/487 901/897/488 \nf 3003/2954/2487 3002/2953/2486 900/896/487 \nf 3004/2955/2488 901/897/488 902/898/489 \nf 3004/2955/2488 3003/2954/2487 901/897/488 \nf 3005/2956/2489 902/898/489 903/899/490 \nf 3005/2956/2489 3004/2955/2488 902/898/489 \nf 3006/2957/2490 903/899/490 904/900/491 \nf 3006/2957/2490 3005/2956/2489 903/899/490 \nf 3007/2958/2491 904/900/491 905/901/492 \nf 3007/2958/2491 3006/2957/2490 904/900/491 \nf 3008/2959/2492 905/901/492 906/902/493 \nf 3008/2959/2492 3007/2958/2491 905/901/492 \nf 3009/2960/2493 906/902/493 907/903/494 \nf 3009/2960/2493 3008/2959/2492 906/902/493 \nf 3010/2961/2494 907/903/494 908/904/495 \nf 3010/2961/2494 3009/2960/2493 907/903/494 \nf 3011/2962/2495 908/904/495 909/905/496 \nf 3011/2962/2495 3010/2961/2494 908/904/495 \nf 3012/2963/2496 909/905/496 910/906/497 \nf 3012/2963/2496 3011/2962/2495 909/905/496 \nf 3013/2964/2497 910/906/497 911/907/498 \nf 3013/2964/2497 3012/2963/2496 910/906/497 \nf 3014/2965/2498 911/907/498 912/908/499 \nf 3014/2965/2498 3013/2964/2497 911/907/498 \nf 3015/2966/2499 912/908/499 913/909/500 \nf 3015/2966/2499 3014/2965/2498 912/908/499 \nf 3016/2967/2500 913/909/500 914/910/501 \nf 3016/2967/2500 3015/2966/2499 913/909/500 \nf 3017/2968/2501 914/910/501 915/911/502 \nf 3017/2968/2501 3016/2967/2500 914/910/501 \nf 3018/2969/2502 915/911/502 916/912/503 \nf 3018/2969/2502 3017/2968/2501 915/911/502 \nf 3019/2970/2503 916/912/503 917/913/504 \nf 3019/2970/2503 3018/2969/2502 916/912/503 \nf 3020/2971/2504 917/913/504 918/914/505 \nf 3020/2971/2504 3019/2970/2503 917/913/504 \nf 3021/2972/2505 918/914/505 919/915/506 \nf 3021/2972/2505 3020/2971/2504 918/914/505 \nf 3022/2973/2506 919/915/506 920/916/507 \nf 3022/2973/2506 3021/2972/2505 919/915/506 \nf 3023/2974/2507 920/916/507 921/917/508 \nf 3023/2974/2507 3022/2973/2506 920/916/507 \nf 3024/2975/2508 921/917/508 922/918/509 \nf 3024/2975/2508 3023/2974/2507 921/917/508 \nf 3025/2976/2509 922/918/509 923/919/510 \nf 3025/2976/2509 3024/2975/2508 922/918/509 \nf 3026/2977/2510 923/919/510 924/920/511 \nf 3026/2977/2510 3025/2976/2509 923/919/510 \nf 926/922/512 926/922/2511 924/920/511 \nf 3027/2978/2512 924/920/511 926/922/2511 \nf 3027/2978/2512 3026/2977/2510 924/920/511 \nf 3028/2979/2513 926/922/2511 926/922/512 \nf 3029/2980/2514 3027/2978/2512 926/922/2511 \nf 3028/2979/2513 3029/2980/2514 926/922/2511 \nf 925/921/512 3028/2979/2513 926/922/512 \nf 2956/2907/2440 2957/2908/2441 2958/2909/2442 \nf 3030/2981/2515 2958/2909/2442 2959/2910/2443 \nf 3030/2981/2515 2956/2907/2440 2958/2909/2442 \nf 3031/2982/2516 2959/2910/2443 2960/2911/2444 \nf 3031/2982/2516 3030/2981/2515 2959/2910/2443 \nf 3032/2983/2517 2960/2911/2444 2961/2912/2445 \nf 3032/2983/2517 3031/2982/2516 2960/2911/2444 \nf 3033/2984/2518 2961/2912/2445 2962/2913/2446 \nf 3033/2984/2518 3032/2983/2517 2961/2912/2445 \nf 3034/2985/2519 2962/2913/2446 2963/2914/2447 \nf 3034/2985/2519 3033/2984/2518 2962/2913/2446 \nf 3035/2986/2520 2963/2914/2447 2964/2915/2448 \nf 3035/2986/2520 3034/2985/2519 2963/2914/2447 \nf 3036/2987/2521 2964/2915/2448 2965/2916/2449 \nf 3036/2987/2521 3035/2986/2520 2964/2915/2448 \nf 3037/2988/2522 2965/2916/2449 2966/2917/2450 \nf 3037/2988/2522 3036/2987/2521 2965/2916/2449 \nf 3038/2989/2523 2966/2917/2450 2967/2918/2451 \nf 3038/2989/2523 3037/2988/2522 2966/2917/2450 \nf 3039/2990/2524 2967/2918/2451 2968/2919/2452 \nf 3039/2990/2524 3038/2989/2523 2967/2918/2451 \nf 3040/2991/2525 2968/2919/2452 2969/2920/2453 \nf 3040/2991/2525 3039/2990/2524 2968/2919/2452 \nf 3041/2992/2526 2969/2920/2453 2970/2921/2454 \nf 3041/2992/2526 3040/2991/2525 2969/2920/2453 \nf 3042/2993/2527 2970/2921/2454 2971/2922/2455 \nf 3042/2993/2527 3041/2992/2526 2970/2921/2454 \nf 3043/2994/2528 2971/2922/2455 2972/2923/2456 \nf 3043/2994/2528 3042/2993/2527 2971/2922/2455 \nf 3044/2995/2529 2972/2923/2456 2973/2924/2457 \nf 3044/2995/2529 3043/2994/2528 2972/2923/2456 \nf 3045/2996/2530 2973/2924/2457 2974/2925/2458 \nf 3045/2996/2530 3044/2995/2529 2973/2924/2457 \nf 3046/2997/2531 2974/2925/2458 2975/2926/2459 \nf 3046/2997/2531 3045/2996/2530 2974/2925/2458 \nf 3047/2998/2532 2975/2926/2459 2976/2927/2460 \nf 3047/2998/2532 3046/2997/2531 2975/2926/2459 \nf 3048/2999/2533 2976/2927/2460 2977/2928/2461 \nf 3048/2999/2533 3047/2998/2532 2976/2927/2460 \nf 3049/3000/2534 2977/2928/2461 2978/2929/2462 \nf 3049/3000/2534 3048/2999/2533 2977/2928/2461 \nf 3050/3001/2535 2978/2929/2462 2979/2930/2463 \nf 3050/3001/2535 3049/3000/2534 2978/2929/2462 \nf 3051/3002/2536 2979/2930/2463 2980/2931/2464 \nf 3051/3002/2536 3050/3001/2535 2979/2930/2463 \nf 3052/3003/2537 2980/2931/2464 2981/2932/2465 \nf 3052/3003/2537 3051/3002/2536 2980/2931/2464 \nf 3053/3004/2538 2981/2932/2465 2982/2933/2466 \nf 3053/3004/2538 3052/3003/2537 2981/2932/2465 \nf 3054/3005/2539 2982/2933/2466 2983/2934/2467 \nf 3054/3005/2539 3053/3004/2538 2982/2933/2466 \nf 3055/3006/2540 2983/2934/2467 2984/2935/2468 \nf 3055/3006/2540 3054/3005/2539 2983/2934/2467 \nf 3056/3007/2541 2984/2935/2468 2985/2936/2469 \nf 3056/3007/2541 3055/3006/2540 2984/2935/2468 \nf 3057/3008/2542 2985/2936/2469 2986/2937/2470 \nf 3057/3008/2542 3056/3007/2541 2985/2936/2469 \nf 3058/3009/2543 2986/2937/2470 2987/2938/2471 \nf 3058/3009/2543 3057/3008/2542 2986/2937/2470 \nf 3059/3010/2544 2987/2938/2471 2988/2939/2472 \nf 3059/3010/2544 3058/3009/2543 2987/2938/2471 \nf 3060/3011/2545 2988/2939/2472 2989/2940/2473 \nf 3060/3011/2545 3059/3010/2544 2988/2939/2472 \nf 3061/3012/2546 2989/2940/2473 2990/2941/2474 \nf 3061/3012/2546 3060/3011/2545 2989/2940/2473 \nf 3062/3013/2547 2990/2941/2474 2991/2942/2475 \nf 3062/3013/2547 3061/3012/2546 2990/2941/2474 \nf 3063/3014/2548 2991/2942/2475 2992/2943/2476 \nf 3063/3014/2548 3062/3013/2547 2991/2942/2475 \nf 3064/3015/2549 2992/2943/2476 2993/2944/2477 \nf 3064/3015/2549 3063/3014/2548 2992/2943/2476 \nf 3065/3016/2550 2993/2944/2477 2994/2945/2478 \nf 3065/3016/2550 3064/3015/2549 2993/2944/2477 \nf 3066/3017/2551 2994/2945/2478 2995/2946/2479 \nf 3066/3017/2551 3065/3016/2550 2994/2945/2478 \nf 3067/3018/2552 2995/2946/2479 2996/2947/2480 \nf 3067/3018/2552 3066/3017/2551 2995/2946/2479 \nf 3068/3019/2553 2996/2947/2480 2997/2948/2481 \nf 3068/3019/2553 3067/3018/2552 2996/2947/2480 \nf 3069/3020/2554 2997/2948/2481 2998/2949/2482 \nf 3069/3020/2554 3068/3019/2553 2997/2948/2481 \nf 3070/3021/2555 2998/2949/2482 2999/2950/2483 \nf 3070/3021/2555 3069/3020/2554 2998/2949/2482 \nf 3071/3022/2556 2999/2950/2483 3000/2951/2484 \nf 3071/3022/2556 3070/3021/2555 2999/2950/2483 \nf 3072/3023/2557 3000/2951/2484 3001/2952/2485 \nf 3072/3023/2557 3071/3022/2556 3000/2951/2484 \nf 3073/3024/2558 3001/2952/2485 3002/2953/2486 \nf 3073/3024/2558 3072/3023/2557 3001/2952/2485 \nf 3074/3025/2559 3002/2953/2486 3003/2954/2487 \nf 3074/3025/2559 3073/3024/2558 3002/2953/2486 \nf 3075/3026/2560 3003/2954/2487 3004/2955/2488 \nf 3075/3026/2560 3074/3025/2559 3003/2954/2487 \nf 3076/3027/2561 3004/2955/2488 3005/2956/2489 \nf 3076/3027/2561 3075/3026/2560 3004/2955/2488 \nf 3077/3028/2562 3005/2956/2489 3006/2957/2490 \nf 3077/3028/2562 3076/3027/2561 3005/2956/2489 \nf 3078/3029/2563 3006/2957/2490 3007/2958/2491 \nf 3078/3029/2563 3077/3028/2562 3006/2957/2490 \nf 3079/3030/2564 3007/2958/2491 3008/2959/2492 \nf 3079/3030/2564 3078/3029/2563 3007/2958/2491 \nf 3080/3031/2565 3008/2959/2492 3009/2960/2493 \nf 3080/3031/2565 3079/3030/2564 3008/2959/2492 \nf 3081/3032/2566 3009/2960/2493 3010/2961/2494 \nf 3081/3032/2566 3080/3031/2565 3009/2960/2493 \nf 3082/3033/2567 3010/2961/2494 3011/2962/2495 \nf 3082/3033/2567 3081/3032/2566 3010/2961/2494 \nf 3083/3034/2568 3011/2962/2495 3012/2963/2496 \nf 3083/3034/2568 3082/3033/2567 3011/2962/2495 \nf 3084/3035/2569 3012/2963/2496 3013/2964/2497 \nf 3084/3035/2569 3083/3034/2568 3012/2963/2496 \nf 3085/3036/2570 3013/2964/2497 3014/2965/2498 \nf 3085/3036/2570 3084/3035/2569 3013/2964/2497 \nf 3086/3037/2571 3014/2965/2498 3015/2966/2499 \nf 3086/3037/2571 3085/3036/2570 3014/2965/2498 \nf 3087/3038/2572 3015/2966/2499 3016/2967/2500 \nf 3087/3038/2572 3086/3037/2571 3015/2966/2499 \nf 3088/3039/2573 3016/2967/2500 3017/2968/2501 \nf 3088/3039/2573 3087/3038/2572 3016/2967/2500 \nf 3089/3040/2574 3017/2968/2501 3018/2969/2502 \nf 3089/3040/2574 3088/3039/2573 3017/2968/2501 \nf 3090/3041/2575 3018/2969/2502 3019/2970/2503 \nf 3090/3041/2575 3089/3040/2574 3018/2969/2502 \nf 3091/3042/2576 3019/2970/2503 3020/2971/2504 \nf 3091/3042/2576 3090/3041/2575 3019/2970/2503 \nf 3092/3043/2577 3020/2971/2504 3021/2972/2505 \nf 3092/3043/2577 3091/3042/2576 3020/2971/2504 \nf 3093/3044/2578 3021/2972/2505 3022/2973/2506 \nf 3093/3044/2578 3092/3043/2577 3021/2972/2505 \nf 3094/3045/2579 3022/2973/2506 3023/2974/2507 \nf 3094/3045/2579 3093/3044/2578 3022/2973/2506 \nf 3095/3046/2580 3023/2974/2507 3024/2975/2508 \nf 3095/3046/2580 3094/3045/2579 3023/2974/2507 \nf 3096/3047/2581 3024/2975/2508 3025/2976/2509 \nf 3096/3047/2581 3095/3046/2580 3024/2975/2508 \nf 3097/3048/2582 3025/2976/2509 3026/2977/2510 \nf 3097/3048/2582 3096/3047/2581 3025/2976/2509 \nf 3098/3049/2583 3026/2977/2510 3027/2978/2512 \nf 3098/3049/2583 3097/3048/2582 3026/2977/2510 \nf 3029/2980/2514 3099/2980/2584 3027/2978/2512 \nf 3100/3050/2585 3027/2978/2512 3099/2980/2584 \nf 3100/3050/2585 3098/3049/2583 3027/2978/2512 \nf 3028/2979/2513 3099/2980/2584 3029/2980/2514 \nf 3101/3051/2586 3100/3050/2585 3099/2980/2584 \nf 3102/3052/2587 3101/3051/2586 3099/2980/2584 \nf 3028/2979/2513 3102/3052/2587 3099/2980/2584 \nf 2955/2906/2439 2956/2907/2440 3030/2981/2515 \nf 3103/3053/2588 3030/2981/2515 3031/2982/2516 \nf 3103/3053/2588 2955/2906/2439 3030/2981/2515 \nf 3104/3054/2589 3031/2982/2516 3032/2983/2517 \nf 3104/3054/2589 3103/3053/2588 3031/2982/2516 \nf 3105/3055/2590 3032/2983/2517 3033/2984/2518 \nf 3105/3055/2590 3104/3054/2589 3032/2983/2517 \nf 3106/3056/2591 3033/2984/2518 3034/2985/2519 \nf 3106/3056/2591 3105/3055/2590 3033/2984/2518 \nf 3107/3057/2592 3034/2985/2519 3035/2986/2520 \nf 3107/3057/2592 3106/3056/2591 3034/2985/2519 \nf 3108/3058/2593 3035/2986/2520 3036/2987/2521 \nf 3108/3058/2593 3107/3057/2592 3035/2986/2520 \nf 3109/3059/2594 3036/2987/2521 3037/2988/2522 \nf 3109/3059/2594 3108/3058/2593 3036/2987/2521 \nf 3110/3060/2595 3037/2988/2522 3038/2989/2523 \nf 3110/3060/2595 3109/3059/2594 3037/2988/2522 \nf 3111/3061/2596 3038/2989/2523 3039/2990/2524 \nf 3111/3061/2596 3110/3060/2595 3038/2989/2523 \nf 3112/3062/2597 3039/2990/2524 3040/2991/2525 \nf 3112/3062/2597 3111/3061/2596 3039/2990/2524 \nf 3113/3063/2598 3040/2991/2525 3041/2992/2526 \nf 3113/3063/2598 3112/3062/2597 3040/2991/2525 \nf 3114/3064/2599 3041/2992/2526 3042/2993/2527 \nf 3114/3064/2599 3113/3063/2598 3041/2992/2526 \nf 3115/3065/2600 3042/2993/2527 3043/2994/2528 \nf 3115/3065/2600 3114/3064/2599 3042/2993/2527 \nf 3116/3066/2601 3043/2994/2528 3044/2995/2529 \nf 3116/3066/2601 3115/3065/2600 3043/2994/2528 \nf 3117/3067/2602 3044/2995/2529 3045/2996/2530 \nf 3117/3067/2602 3116/3066/2601 3044/2995/2529 \nf 3118/3068/2603 3045/2996/2530 3046/2997/2531 \nf 3118/3068/2603 3117/3067/2602 3045/2996/2530 \nf 3119/3069/2604 3046/2997/2531 3047/2998/2532 \nf 3119/3069/2604 3118/3068/2603 3046/2997/2531 \nf 3120/3070/2605 3047/2998/2532 3048/2999/2533 \nf 3120/3070/2605 3119/3069/2604 3047/2998/2532 \nf 3121/3071/2606 3048/2999/2533 3049/3000/2534 \nf 3121/3071/2606 3120/3070/2605 3048/2999/2533 \nf 3122/3072/2607 3049/3000/2534 3050/3001/2535 \nf 3122/3072/2607 3121/3071/2606 3049/3000/2534 \nf 3123/3073/2608 3050/3001/2535 3051/3002/2536 \nf 3123/3073/2608 3122/3072/2607 3050/3001/2535 \nf 3124/3074/2609 3051/3002/2536 3052/3003/2537 \nf 3124/3074/2609 3123/3073/2608 3051/3002/2536 \nf 3125/3075/2610 3052/3003/2537 3053/3004/2538 \nf 3125/3075/2610 3124/3074/2609 3052/3003/2537 \nf 3126/3076/2611 3053/3004/2538 3054/3005/2539 \nf 3126/3076/2611 3125/3075/2610 3053/3004/2538 \nf 3127/3077/2612 3054/3005/2539 3055/3006/2540 \nf 3127/3077/2612 3126/3076/2611 3054/3005/2539 \nf 3128/3078/2613 3055/3006/2540 3056/3007/2541 \nf 3128/3078/2613 3127/3077/2612 3055/3006/2540 \nf 3129/3079/2614 3056/3007/2541 3057/3008/2542 \nf 3129/3079/2614 3128/3078/2613 3056/3007/2541 \nf 3130/3080/2615 3057/3008/2542 3058/3009/2543 \nf 3130/3080/2615 3129/3079/2614 3057/3008/2542 \nf 3131/3081/2616 3058/3009/2543 3059/3010/2544 \nf 3131/3081/2616 3130/3080/2615 3058/3009/2543 \nf 3132/3082/2617 3059/3010/2544 3060/3011/2545 \nf 3132/3082/2617 3131/3081/2616 3059/3010/2544 \nf 3133/3083/2618 3060/3011/2545 3061/3012/2546 \nf 3133/3083/2618 3132/3082/2617 3060/3011/2545 \nf 3134/3084/2619 3061/3012/2546 3062/3013/2547 \nf 3134/3084/2619 3133/3083/2618 3061/3012/2546 \nf 3135/3085/2620 3062/3013/2547 3063/3014/2548 \nf 3135/3085/2620 3134/3084/2619 3062/3013/2547 \nf 3136/3086/2621 3063/3014/2548 3064/3015/2549 \nf 3136/3086/2621 3135/3085/2620 3063/3014/2548 \nf 3137/3087/2622 3064/3015/2549 3065/3016/2550 \nf 3137/3087/2622 3136/3086/2621 3064/3015/2549 \nf 3138/3088/2623 3065/3016/2550 3066/3017/2551 \nf 3138/3088/2623 3137/3087/2622 3065/3016/2550 \nf 3139/3089/2624 3066/3017/2551 3067/3018/2552 \nf 3139/3089/2624 3138/3088/2623 3066/3017/2551 \nf 3140/3090/2625 3067/3018/2552 3068/3019/2553 \nf 3140/3090/2625 3139/3089/2624 3067/3018/2552 \nf 3141/3091/2626 3068/3019/2553 3069/3020/2554 \nf 3141/3091/2626 3140/3090/2625 3068/3019/2553 \nf 3142/3092/2627 3069/3020/2554 3070/3021/2555 \nf 3142/3092/2627 3141/3091/2626 3069/3020/2554 \nf 3143/3093/2628 3070/3021/2555 3071/3022/2556 \nf 3143/3093/2628 3142/3092/2627 3070/3021/2555 \nf 3144/3094/2629 3071/3022/2556 3072/3023/2557 \nf 3144/3094/2629 3143/3093/2628 3071/3022/2556 \nf 3145/3095/2630 3072/3023/2557 3073/3024/2558 \nf 3145/3095/2630 3144/3094/2629 3072/3023/2557 \nf 3146/3096/2631 3073/3024/2558 3074/3025/2559 \nf 3146/3096/2631 3145/3095/2630 3073/3024/2558 \nf 3147/3097/2632 3074/3025/2559 3075/3026/2560 \nf 3147/3097/2632 3146/3096/2631 3074/3025/2559 \nf 3148/3098/2633 3075/3026/2560 3076/3027/2561 \nf 3148/3098/2633 3147/3097/2632 3075/3026/2560 \nf 3149/3099/2634 3076/3027/2561 3077/3028/2562 \nf 3149/3099/2634 3148/3098/2633 3076/3027/2561 \nf 3150/3100/2635 3077/3028/2562 3078/3029/2563 \nf 3150/3100/2635 3149/3099/2634 3077/3028/2562 \nf 3151/3101/2636 3078/3029/2563 3079/3030/2564 \nf 3151/3101/2636 3150/3100/2635 3078/3029/2563 \nf 3152/3102/2637 3079/3030/2564 3080/3031/2565 \nf 3152/3102/2637 3151/3101/2636 3079/3030/2564 \nf 3153/3103/2638 3080/3031/2565 3081/3032/2566 \nf 3153/3103/2638 3152/3102/2637 3080/3031/2565 \nf 3154/3104/2639 3081/3032/2566 3082/3033/2567 \nf 3154/3104/2639 3153/3103/2638 3081/3032/2566 \nf 3155/3105/2640 3082/3033/2567 3083/3034/2568 \nf 3155/3105/2640 3154/3104/2639 3082/3033/2567 \nf 3156/3106/2641 3083/3034/2568 3084/3035/2569 \nf 3156/3106/2641 3155/3105/2640 3083/3034/2568 \nf 3157/3107/2642 3084/3035/2569 3085/3036/2570 \nf 3157/3107/2642 3156/3106/2641 3084/3035/2569 \nf 3158/3108/2643 3085/3036/2570 3086/3037/2571 \nf 3158/3108/2643 3157/3107/2642 3085/3036/2570 \nf 3159/3109/2644 3086/3037/2571 3087/3038/2572 \nf 3159/3109/2644 3158/3108/2643 3086/3037/2571 \nf 3160/3110/2645 3087/3038/2572 3088/3039/2573 \nf 3160/3110/2645 3159/3109/2644 3087/3038/2572 \nf 3161/3111/2646 3088/3039/2573 3089/3040/2574 \nf 3161/3111/2646 3160/3110/2645 3088/3039/2573 \nf 3162/3112/2647 3089/3040/2574 3090/3041/2575 \nf 3162/3112/2647 3161/3111/2646 3089/3040/2574 \nf 3163/3113/2648 3090/3041/2575 3091/3042/2576 \nf 3163/3113/2648 3162/3112/2647 3090/3041/2575 \nf 3164/3114/2649 3091/3042/2576 3092/3043/2577 \nf 3164/3114/2649 3163/3113/2648 3091/3042/2576 \nf 3165/3115/2650 3092/3043/2577 3093/3044/2578 \nf 3165/3115/2650 3164/3114/2649 3092/3043/2577 \nf 3166/3116/2651 3093/3044/2578 3094/3045/2579 \nf 3166/3116/2651 3165/3115/2650 3093/3044/2578 \nf 3167/3117/2652 3094/3045/2579 3095/3046/2580 \nf 3167/3117/2652 3166/3116/2651 3094/3045/2579 \nf 3168/3118/2653 3095/3046/2580 3096/3047/2581 \nf 3168/3118/2653 3167/3117/2652 3095/3046/2580 \nf 3169/3119/2654 3096/3047/2581 3097/3048/2582 \nf 3169/3119/2654 3168/3118/2653 3096/3047/2581 \nf 3170/3120/2655 3097/3048/2582 3098/3049/2583 \nf 3170/3120/2655 3169/3119/2654 3097/3048/2582 \nf 3171/3121/2656 3098/3049/2583 3100/3050/2585 \nf 3171/3121/2656 3170/3120/2655 3098/3049/2583 \nf 3101/3051/2586 3172/3122/2657 3100/3050/2585 \nf 3173/3123/2658 3100/3050/2585 3172/3122/2657 \nf 3173/3123/2658 3171/3121/2656 3100/3050/2585 \nf 3102/3052/2587 3172/3122/2657 3101/3051/2586 \nf 3174/3124/2659 3173/3123/2658 3172/3122/2657 \nf 3175/3125/2660 3174/3124/2659 3172/3122/2657 \nf 3102/3052/2587 3175/3125/2660 3172/3122/2657 \nf 2954/2905/2438 2955/2906/2439 3103/3053/2588 \nf 3176/3126/2661 3103/3053/2588 3104/3054/2589 \nf 3176/3126/2661 2954/2905/2438 3103/3053/2588 \nf 3177/3127/2662 3104/3054/2589 3105/3055/2590 \nf 3177/3127/2662 3176/3126/2661 3104/3054/2589 \nf 3178/3128/2663 3105/3055/2590 3106/3056/2591 \nf 3178/3128/2663 3177/3127/2662 3105/3055/2590 \nf 3179/3129/2664 3106/3056/2591 3107/3057/2592 \nf 3179/3129/2664 3178/3128/2663 3106/3056/2591 \nf 3180/3130/2665 3107/3057/2592 3108/3058/2593 \nf 3180/3130/2665 3179/3129/2664 3107/3057/2592 \nf 3181/3131/2666 3108/3058/2593 3109/3059/2594 \nf 3181/3131/2666 3180/3130/2665 3108/3058/2593 \nf 3182/3132/2667 3109/3059/2594 3110/3060/2595 \nf 3182/3132/2667 3181/3131/2666 3109/3059/2594 \nf 3183/3133/2668 3110/3060/2595 3111/3061/2596 \nf 3183/3133/2668 3182/3132/2667 3110/3060/2595 \nf 3184/3134/2669 3111/3061/2596 3112/3062/2597 \nf 3184/3134/2669 3183/3133/2668 3111/3061/2596 \nf 3185/3135/2670 3112/3062/2597 3113/3063/2598 \nf 3185/3135/2670 3184/3134/2669 3112/3062/2597 \nf 3186/3136/2671 3113/3063/2598 3114/3064/2599 \nf 3186/3136/2671 3185/3135/2670 3113/3063/2598 \nf 3187/3137/2672 3114/3064/2599 3115/3065/2600 \nf 3187/3137/2672 3186/3136/2671 3114/3064/2599 \nf 3188/3138/2673 3115/3065/2600 3116/3066/2601 \nf 3188/3138/2673 3187/3137/2672 3115/3065/2600 \nf 3189/3139/2674 3116/3066/2601 3117/3067/2602 \nf 3189/3139/2674 3188/3138/2673 3116/3066/2601 \nf 3190/3140/2675 3117/3067/2602 3118/3068/2603 \nf 3190/3140/2675 3189/3139/2674 3117/3067/2602 \nf 3191/3141/2676 3118/3068/2603 3119/3069/2604 \nf 3191/3141/2676 3190/3140/2675 3118/3068/2603 \nf 3192/3142/2677 3119/3069/2604 3120/3070/2605 \nf 3192/3142/2677 3191/3141/2676 3119/3069/2604 \nf 3193/3143/2678 3120/3070/2605 3121/3071/2606 \nf 3193/3143/2678 3192/3142/2677 3120/3070/2605 \nf 3194/3144/2679 3121/3071/2606 3122/3072/2607 \nf 3194/3144/2679 3193/3143/2678 3121/3071/2606 \nf 3195/3145/2680 3122/3072/2607 3123/3073/2608 \nf 3195/3145/2680 3194/3144/2679 3122/3072/2607 \nf 3196/3146/2681 3123/3073/2608 3124/3074/2609 \nf 3196/3146/2681 3195/3145/2680 3123/3073/2608 \nf 3197/3147/2682 3124/3074/2609 3125/3075/2610 \nf 3197/3147/2682 3196/3146/2681 3124/3074/2609 \nf 3198/3148/2683 3125/3075/2610 3126/3076/2611 \nf 3198/3148/2683 3197/3147/2682 3125/3075/2610 \nf 3199/3149/2684 3126/3076/2611 3127/3077/2612 \nf 3199/3149/2684 3198/3148/2683 3126/3076/2611 \nf 3200/3150/2685 3127/3077/2612 3128/3078/2613 \nf 3200/3150/2685 3199/3149/2684 3127/3077/2612 \nf 3201/3151/2686 3128/3078/2613 3129/3079/2614 \nf 3201/3151/2686 3200/3150/2685 3128/3078/2613 \nf 3202/3152/2687 3129/3079/2614 3130/3080/2615 \nf 3202/3152/2687 3201/3151/2686 3129/3079/2614 \nf 3203/3153/2688 3130/3080/2615 3131/3081/2616 \nf 3203/3153/2688 3202/3152/2687 3130/3080/2615 \nf 3204/3154/2689 3131/3081/2616 3132/3082/2617 \nf 3204/3154/2689 3203/3153/2688 3131/3081/2616 \nf 3205/3155/2690 3132/3082/2617 3133/3083/2618 \nf 3205/3155/2690 3204/3154/2689 3132/3082/2617 \nf 3206/3156/2691 3133/3083/2618 3134/3084/2619 \nf 3206/3156/2691 3205/3155/2690 3133/3083/2618 \nf 3207/3157/2692 3134/3084/2619 3135/3085/2620 \nf 3207/3157/2692 3206/3156/2691 3134/3084/2619 \nf 3208/3158/2693 3135/3085/2620 3136/3086/2621 \nf 3208/3158/2693 3207/3157/2692 3135/3085/2620 \nf 3209/3159/2694 3136/3086/2621 3137/3087/2622 \nf 3209/3159/2694 3208/3158/2693 3136/3086/2621 \nf 3210/3160/2695 3137/3087/2622 3138/3088/2623 \nf 3210/3160/2695 3209/3159/2694 3137/3087/2622 \nf 3211/3161/2696 3138/3088/2623 3139/3089/2624 \nf 3211/3161/2696 3210/3160/2695 3138/3088/2623 \nf 3212/3162/2697 3139/3089/2624 3140/3090/2625 \nf 3212/3162/2697 3211/3161/2696 3139/3089/2624 \nf 3213/3163/2698 3140/3090/2625 3141/3091/2626 \nf 3213/3163/2698 3212/3162/2697 3140/3090/2625 \nf 3214/3164/2699 3141/3091/2626 3142/3092/2627 \nf 3214/3164/2699 3213/3163/2698 3141/3091/2626 \nf 3215/3165/2700 3142/3092/2627 3143/3093/2628 \nf 3215/3165/2700 3214/3164/2699 3142/3092/2627 \nf 3216/3166/2701 3143/3093/2628 3144/3094/2629 \nf 3216/3166/2701 3215/3165/2700 3143/3093/2628 \nf 3217/3167/2702 3144/3094/2629 3145/3095/2630 \nf 3217/3167/2702 3216/3166/2701 3144/3094/2629 \nf 3218/3168/2703 3145/3095/2630 3146/3096/2631 \nf 3218/3168/2703 3217/3167/2702 3145/3095/2630 \nf 3219/3169/2704 3146/3096/2631 3147/3097/2632 \nf 3219/3169/2704 3218/3168/2703 3146/3096/2631 \nf 3220/3170/2705 3147/3097/2632 3148/3098/2633 \nf 3220/3170/2705 3219/3169/2704 3147/3097/2632 \nf 3221/3171/2706 3148/3098/2633 3149/3099/2634 \nf 3221/3171/2706 3220/3170/2705 3148/3098/2633 \nf 3222/3172/2707 3149/3099/2634 3150/3100/2635 \nf 3222/3172/2707 3221/3171/2706 3149/3099/2634 \nf 3223/3173/2708 3150/3100/2635 3151/3101/2636 \nf 3223/3173/2708 3222/3172/2707 3150/3100/2635 \nf 3224/3174/2709 3151/3101/2636 3152/3102/2637 \nf 3224/3174/2709 3223/3173/2708 3151/3101/2636 \nf 3225/3175/2710 3152/3102/2637 3153/3103/2638 \nf 3225/3175/2710 3224/3174/2709 3152/3102/2637 \nf 3226/3176/2711 3153/3103/2638 3154/3104/2639 \nf 3226/3176/2711 3225/3175/2710 3153/3103/2638 \nf 3227/3177/2712 3154/3104/2639 3155/3105/2640 \nf 3227/3177/2712 3226/3176/2711 3154/3104/2639 \nf 3228/3178/2713 3155/3105/2640 3156/3106/2641 \nf 3228/3178/2713 3227/3177/2712 3155/3105/2640 \nf 3229/3179/2714 3156/3106/2641 3157/3107/2642 \nf 3229/3179/2714 3228/3178/2713 3156/3106/2641 \nf 3230/3180/2715 3157/3107/2642 3158/3108/2643 \nf 3230/3180/2715 3229/3179/2714 3157/3107/2642 \nf 3231/3181/2716 3158/3108/2643 3159/3109/2644 \nf 3231/3181/2716 3230/3180/2715 3158/3108/2643 \nf 3232/3182/2717 3159/3109/2644 3160/3110/2645 \nf 3232/3182/2717 3231/3181/2716 3159/3109/2644 \nf 3233/3183/2718 3160/3110/2645 3161/3111/2646 \nf 3233/3183/2718 3232/3182/2717 3160/3110/2645 \nf 3234/3184/2719 3161/3111/2646 3162/3112/2647 \nf 3234/3184/2719 3233/3183/2718 3161/3111/2646 \nf 3235/3185/2720 3162/3112/2647 3163/3113/2648 \nf 3235/3185/2720 3234/3184/2719 3162/3112/2647 \nf 3236/3186/2721 3163/3113/2648 3164/3114/2649 \nf 3236/3186/2721 3235/3185/2720 3163/3113/2648 \nf 3237/3187/2722 3164/3114/2649 3165/3115/2650 \nf 3237/3187/2722 3236/3186/2721 3164/3114/2649 \nf 3238/3188/2723 3165/3115/2650 3166/3116/2651 \nf 3238/3188/2723 3237/3187/2722 3165/3115/2650 \nf 3239/3189/2724 3166/3116/2651 3167/3117/2652 \nf 3239/3189/2724 3238/3188/2723 3166/3116/2651 \nf 3240/3190/2725 3167/3117/2652 3168/3118/2653 \nf 3240/3190/2725 3239/3189/2724 3167/3117/2652 \nf 3241/3191/2726 3168/3118/2653 3169/3119/2654 \nf 3241/3191/2726 3240/3190/2725 3168/3118/2653 \nf 3242/3192/2727 3169/3119/2654 3170/3120/2655 \nf 3242/3192/2727 3241/3191/2726 3169/3119/2654 \nf 3243/3193/2728 3170/3120/2655 3171/3121/2656 \nf 3243/3193/2728 3242/3192/2727 3170/3120/2655 \nf 3244/3194/2729 3171/3121/2656 3173/3123/2658 \nf 3244/3194/2729 3243/3193/2728 3171/3121/2656 \nf 3174/3124/2659 3245/3195/2730 3173/3123/2658 \nf 3246/3196/2731 3173/3123/2658 3245/3195/2730 \nf 3246/3196/2731 3244/3194/2729 3173/3123/2658 \nf 3175/3125/2660 3245/3195/2730 3174/3124/2659 \nf 3247/3197/2732 3246/3196/2731 3245/3195/2730 \nf 3248/3198/2733 3247/3197/2732 3245/3195/2730 \nf 3175/3125/2660 3248/3198/2733 3245/3195/2730 \nf 2953/2904/2437 2954/2905/2438 3176/3126/2661 \nf 3249/3199/2734 3176/3126/2661 3177/3127/2662 \nf 3249/3199/2734 2953/2904/2437 3176/3126/2661 \nf 3250/3200/2735 3177/3127/2662 3178/3128/2663 \nf 3250/3200/2735 3249/3199/2734 3177/3127/2662 \nf 3251/3201/2736 3178/3128/2663 3179/3129/2664 \nf 3251/3201/2736 3250/3200/2735 3178/3128/2663 \nf 3252/3202/2737 3179/3129/2664 3180/3130/2665 \nf 3252/3202/2737 3251/3201/2736 3179/3129/2664 \nf 3253/3203/2738 3180/3130/2665 3181/3131/2666 \nf 3253/3203/2738 3252/3202/2737 3180/3130/2665 \nf 3254/3204/2739 3181/3131/2666 3182/3132/2667 \nf 3254/3204/2739 3253/3203/2738 3181/3131/2666 \nf 3255/3205/2740 3182/3132/2667 3183/3133/2668 \nf 3255/3205/2740 3254/3204/2739 3182/3132/2667 \nf 3256/3206/2741 3183/3133/2668 3184/3134/2669 \nf 3256/3206/2741 3255/3205/2740 3183/3133/2668 \nf 3257/3207/2742 3184/3134/2669 3185/3135/2670 \nf 3257/3207/2742 3256/3206/2741 3184/3134/2669 \nf 3258/3208/2743 3185/3135/2670 3186/3136/2671 \nf 3258/3208/2743 3257/3207/2742 3185/3135/2670 \nf 3259/3209/2744 3186/3136/2671 3187/3137/2672 \nf 3259/3209/2744 3258/3208/2743 3186/3136/2671 \nf 3260/3210/2745 3187/3137/2672 3188/3138/2673 \nf 3260/3210/2745 3259/3209/2744 3187/3137/2672 \nf 3261/3211/2746 3188/3138/2673 3189/3139/2674 \nf 3261/3211/2746 3260/3210/2745 3188/3138/2673 \nf 3262/3212/2747 3189/3139/2674 3190/3140/2675 \nf 3262/3212/2747 3261/3211/2746 3189/3139/2674 \nf 3263/3213/2748 3190/3140/2675 3191/3141/2676 \nf 3263/3213/2748 3262/3212/2747 3190/3140/2675 \nf 3264/3214/2749 3191/3141/2676 3192/3142/2677 \nf 3264/3214/2749 3263/3213/2748 3191/3141/2676 \nf 3265/3215/2750 3192/3142/2677 3193/3143/2678 \nf 3265/3215/2750 3264/3214/2749 3192/3142/2677 \nf 3266/3216/2751 3193/3143/2678 3194/3144/2679 \nf 3266/3216/2751 3265/3215/2750 3193/3143/2678 \nf 3267/3217/2752 3194/3144/2679 3195/3145/2680 \nf 3267/3217/2752 3266/3216/2751 3194/3144/2679 \nf 3268/3218/2753 3195/3145/2680 3196/3146/2681 \nf 3268/3218/2753 3267/3217/2752 3195/3145/2680 \nf 3269/3219/2754 3196/3146/2681 3197/3147/2682 \nf 3269/3219/2754 3268/3218/2753 3196/3146/2681 \nf 3270/3220/2755 3197/3147/2682 3198/3148/2683 \nf 3270/3220/2755 3269/3219/2754 3197/3147/2682 \nf 3271/3221/2756 3198/3148/2683 3199/3149/2684 \nf 3271/3221/2756 3270/3220/2755 3198/3148/2683 \nf 3272/3222/2757 3199/3149/2684 3200/3150/2685 \nf 3272/3222/2757 3271/3221/2756 3199/3149/2684 \nf 3273/3223/2758 3200/3150/2685 3201/3151/2686 \nf 3273/3223/2758 3272/3222/2757 3200/3150/2685 \nf 3274/3224/2759 3201/3151/2686 3202/3152/2687 \nf 3274/3224/2759 3273/3223/2758 3201/3151/2686 \nf 3275/3225/2760 3202/3152/2687 3203/3153/2688 \nf 3275/3225/2760 3274/3224/2759 3202/3152/2687 \nf 3276/3226/2761 3203/3153/2688 3204/3154/2689 \nf 3276/3226/2761 3275/3225/2760 3203/3153/2688 \nf 3277/3227/2762 3204/3154/2689 3205/3155/2690 \nf 3277/3227/2762 3276/3226/2761 3204/3154/2689 \nf 3278/3228/2763 3205/3155/2690 3206/3156/2691 \nf 3278/3228/2763 3277/3227/2762 3205/3155/2690 \nf 3279/3229/2764 3206/3156/2691 3207/3157/2692 \nf 3279/3229/2764 3278/3228/2763 3206/3156/2691 \nf 3280/3230/2765 3207/3157/2692 3208/3158/2693 \nf 3280/3230/2765 3279/3229/2764 3207/3157/2692 \nf 3281/3231/2766 3208/3158/2693 3209/3159/2694 \nf 3281/3231/2766 3280/3230/2765 3208/3158/2693 \nf 3282/3232/2767 3209/3159/2694 3210/3160/2695 \nf 3282/3232/2767 3281/3231/2766 3209/3159/2694 \nf 3283/3233/2768 3210/3160/2695 3211/3161/2696 \nf 3283/3233/2768 3282/3232/2767 3210/3160/2695 \nf 3284/3234/2769 3211/3161/2696 3212/3162/2697 \nf 3284/3234/2769 3283/3233/2768 3211/3161/2696 \nf 3285/3235/2770 3212/3162/2697 3213/3163/2698 \nf 3285/3235/2770 3284/3234/2769 3212/3162/2697 \nf 3286/3236/2771 3213/3163/2698 3214/3164/2699 \nf 3286/3236/2771 3285/3235/2770 3213/3163/2698 \nf 3287/3237/2772 3214/3164/2699 3215/3165/2700 \nf 3287/3237/2772 3286/3236/2771 3214/3164/2699 \nf 3288/3238/2773 3215/3165/2700 3216/3166/2701 \nf 3288/3238/2773 3287/3237/2772 3215/3165/2700 \nf 3289/3239/2774 3216/3166/2701 3217/3167/2702 \nf 3289/3239/2774 3288/3238/2773 3216/3166/2701 \nf 3290/3240/2775 3217/3167/2702 3218/3168/2703 \nf 3290/3240/2775 3289/3239/2774 3217/3167/2702 \nf 3291/3241/2776 3218/3168/2703 3219/3169/2704 \nf 3291/3241/2776 3290/3240/2775 3218/3168/2703 \nf 3292/3242/2777 3219/3169/2704 3220/3170/2705 \nf 3292/3242/2777 3291/3241/2776 3219/3169/2704 \nf 3293/3243/2778 3220/3170/2705 3221/3171/2706 \nf 3293/3243/2778 3292/3242/2777 3220/3170/2705 \nf 3294/3244/2779 3221/3171/2706 3222/3172/2707 \nf 3294/3244/2779 3293/3243/2778 3221/3171/2706 \nf 3295/3245/2780 3222/3172/2707 3223/3173/2708 \nf 3295/3245/2780 3294/3244/2779 3222/3172/2707 \nf 3296/3246/2781 3223/3173/2708 3224/3174/2709 \nf 3296/3246/2781 3295/3245/2780 3223/3173/2708 \nf 3297/3247/2782 3224/3174/2709 3225/3175/2710 \nf 3297/3247/2782 3296/3246/2781 3224/3174/2709 \nf 3298/3248/2783 3225/3175/2710 3226/3176/2711 \nf 3298/3248/2783 3297/3247/2782 3225/3175/2710 \nf 3299/3249/2784 3226/3176/2711 3227/3177/2712 \nf 3299/3249/2784 3298/3248/2783 3226/3176/2711 \nf 3300/3250/2785 3227/3177/2712 3228/3178/2713 \nf 3300/3250/2785 3299/3249/2784 3227/3177/2712 \nf 3301/3251/2786 3228/3178/2713 3229/3179/2714 \nf 3301/3251/2786 3300/3250/2785 3228/3178/2713 \nf 3302/3252/2787 3229/3179/2714 3230/3180/2715 \nf 3302/3252/2787 3301/3251/2786 3229/3179/2714 \nf 3303/3253/2788 3230/3180/2715 3231/3181/2716 \nf 3303/3253/2788 3302/3252/2787 3230/3180/2715 \nf 3304/3254/2789 3231/3181/2716 3232/3182/2717 \nf 3304/3254/2789 3303/3253/2788 3231/3181/2716 \nf 3305/3255/2790 3232/3182/2717 3233/3183/2718 \nf 3305/3255/2790 3304/3254/2789 3232/3182/2717 \nf 3306/3256/2791 3233/3183/2718 3234/3184/2719 \nf 3306/3256/2791 3305/3255/2790 3233/3183/2718 \nf 3307/3257/2792 3234/3184/2719 3235/3185/2720 \nf 3307/3257/2792 3306/3256/2791 3234/3184/2719 \nf 3308/3258/2793 3235/3185/2720 3236/3186/2721 \nf 3308/3258/2793 3307/3257/2792 3235/3185/2720 \nf 3309/3259/2794 3236/3186/2721 3237/3187/2722 \nf 3309/3259/2794 3308/3258/2793 3236/3186/2721 \nf 3310/3260/2795 3237/3187/2722 3238/3188/2723 \nf 3310/3260/2795 3309/3259/2794 3237/3187/2722 \nf 3311/3261/2796 3238/3188/2723 3239/3189/2724 \nf 3311/3261/2796 3310/3260/2795 3238/3188/2723 \nf 3312/3262/2797 3239/3189/2724 3240/3190/2725 \nf 3312/3262/2797 3311/3261/2796 3239/3189/2724 \nf 3313/3263/2798 3240/3190/2725 3241/3191/2726 \nf 3313/3263/2798 3312/3262/2797 3240/3190/2725 \nf 3314/3264/2799 3241/3191/2726 3242/3192/2727 \nf 3314/3264/2799 3313/3263/2798 3241/3191/2726 \nf 3315/3265/2800 3242/3192/2727 3243/3193/2728 \nf 3315/3265/2800 3314/3264/2799 3242/3192/2727 \nf 3316/3266/2801 3243/3193/2728 3244/3194/2729 \nf 3316/3266/2801 3315/3265/2800 3243/3193/2728 \nf 3317/3267/2802 3244/3194/2729 3246/3196/2731 \nf 3317/3267/2802 3316/3266/2801 3244/3194/2729 \nf 3247/3197/2732 3318/3268/2803 3246/3196/2731 \nf 3319/3269/2804 3246/3196/2731 3318/3268/2803 \nf 3319/3269/2804 3317/3267/2802 3246/3196/2731 \nf 3248/3198/2733 3318/3268/2803 3247/3197/2732 \nf 3320/3270/2805 3319/3269/2804 3318/3268/2803 \nf 3321/3271/2806 3320/3270/2805 3318/3268/2803 \nf 3248/3198/2733 3321/3271/2806 3318/3268/2803 \nf 2952/2903/2436 2953/2904/2437 3249/3199/2734 \nf 3322/3272/2807 3249/3199/2734 3250/3200/2735 \nf 3322/3272/2807 2952/2903/2436 3249/3199/2734 \nf 3323/3273/2808 3250/3200/2735 3251/3201/2736 \nf 3323/3273/2808 3322/3272/2807 3250/3200/2735 \nf 3324/3274/2809 3251/3201/2736 3252/3202/2737 \nf 3324/3274/2809 3323/3273/2808 3251/3201/2736 \nf 3325/3275/2810 3252/3202/2737 3253/3203/2738 \nf 3325/3275/2810 3324/3274/2809 3252/3202/2737 \nf 3326/3276/2811 3253/3203/2738 3254/3204/2739 \nf 3326/3276/2811 3325/3275/2810 3253/3203/2738 \nf 3327/3277/2812 3254/3204/2739 3255/3205/2740 \nf 3327/3277/2812 3326/3276/2811 3254/3204/2739 \nf 3328/3278/2813 3255/3205/2740 3256/3206/2741 \nf 3328/3278/2813 3327/3277/2812 3255/3205/2740 \nf 3329/3279/2814 3256/3206/2741 3257/3207/2742 \nf 3329/3279/2814 3328/3278/2813 3256/3206/2741 \nf 3330/3280/2815 3257/3207/2742 3258/3208/2743 \nf 3330/3280/2815 3329/3279/2814 3257/3207/2742 \nf 3331/3281/2816 3258/3208/2743 3259/3209/2744 \nf 3331/3281/2816 3330/3280/2815 3258/3208/2743 \nf 3332/3282/2817 3259/3209/2744 3260/3210/2745 \nf 3332/3282/2817 3331/3281/2816 3259/3209/2744 \nf 3333/3283/2818 3260/3210/2745 3261/3211/2746 \nf 3333/3283/2818 3332/3282/2817 3260/3210/2745 \nf 3334/3284/2819 3261/3211/2746 3262/3212/2747 \nf 3334/3284/2819 3333/3283/2818 3261/3211/2746 \nf 3335/3285/2820 3262/3212/2747 3263/3213/2748 \nf 3335/3285/2820 3334/3284/2819 3262/3212/2747 \nf 3336/3286/2821 3263/3213/2748 3264/3214/2749 \nf 3336/3286/2821 3335/3285/2820 3263/3213/2748 \nf 3337/3287/2822 3264/3214/2749 3265/3215/2750 \nf 3337/3287/2822 3336/3286/2821 3264/3214/2749 \nf 3338/3288/2823 3265/3215/2750 3266/3216/2751 \nf 3338/3288/2823 3337/3287/2822 3265/3215/2750 \nf 3339/3289/2824 3266/3216/2751 3267/3217/2752 \nf 3339/3289/2824 3338/3288/2823 3266/3216/2751 \nf 3340/3290/2825 3267/3217/2752 3268/3218/2753 \nf 3340/3290/2825 3339/3289/2824 3267/3217/2752 \nf 3341/3291/2826 3268/3218/2753 3269/3219/2754 \nf 3341/3291/2826 3340/3290/2825 3268/3218/2753 \nf 3342/3292/2827 3269/3219/2754 3270/3220/2755 \nf 3342/3292/2827 3341/3291/2826 3269/3219/2754 \nf 3343/3293/2828 3270/3220/2755 3271/3221/2756 \nf 3343/3293/2828 3342/3292/2827 3270/3220/2755 \nf 3344/3294/2829 3271/3221/2756 3272/3222/2757 \nf 3344/3294/2829 3343/3293/2828 3271/3221/2756 \nf 3345/3295/2830 3272/3222/2757 3273/3223/2758 \nf 3345/3295/2830 3344/3294/2829 3272/3222/2757 \nf 3346/3296/2831 3273/3223/2758 3274/3224/2759 \nf 3346/3296/2831 3345/3295/2830 3273/3223/2758 \nf 3347/3297/2832 3274/3224/2759 3275/3225/2760 \nf 3347/3297/2832 3346/3296/2831 3274/3224/2759 \nf 3348/3298/2833 3275/3225/2760 3276/3226/2761 \nf 3348/3298/2833 3347/3297/2832 3275/3225/2760 \nf 3349/3299/2834 3276/3226/2761 3277/3227/2762 \nf 3349/3299/2834 3348/3298/2833 3276/3226/2761 \nf 3350/3300/2835 3277/3227/2762 3278/3228/2763 \nf 3350/3300/2835 3349/3299/2834 3277/3227/2762 \nf 3351/3301/2836 3278/3228/2763 3279/3229/2764 \nf 3351/3301/2836 3350/3300/2835 3278/3228/2763 \nf 3352/3302/2837 3279/3229/2764 3280/3230/2765 \nf 3352/3302/2837 3351/3301/2836 3279/3229/2764 \nf 3353/3303/2838 3280/3230/2765 3281/3231/2766 \nf 3353/3303/2838 3352/3302/2837 3280/3230/2765 \nf 3354/3304/2839 3281/3231/2766 3282/3232/2767 \nf 3354/3304/2839 3353/3303/2838 3281/3231/2766 \nf 3355/3305/2840 3282/3232/2767 3283/3233/2768 \nf 3355/3305/2840 3354/3304/2839 3282/3232/2767 \nf 3356/3306/2841 3283/3233/2768 3284/3234/2769 \nf 3356/3306/2841 3355/3305/2840 3283/3233/2768 \nf 3357/3307/2842 3284/3234/2769 3285/3235/2770 \nf 3357/3307/2842 3356/3306/2841 3284/3234/2769 \nf 3358/3308/2843 3285/3235/2770 3286/3236/2771 \nf 3358/3308/2843 3357/3307/2842 3285/3235/2770 \nf 3359/3309/2844 3286/3236/2771 3287/3237/2772 \nf 3359/3309/2844 3358/3308/2843 3286/3236/2771 \nf 3360/3310/2845 3287/3237/2772 3288/3238/2773 \nf 3360/3310/2845 3359/3309/2844 3287/3237/2772 \nf 3361/3311/2846 3288/3238/2773 3289/3239/2774 \nf 3361/3311/2846 3360/3310/2845 3288/3238/2773 \nf 3362/3312/2847 3289/3239/2774 3290/3240/2775 \nf 3362/3312/2847 3361/3311/2846 3289/3239/2774 \nf 3363/3313/2848 3290/3240/2775 3291/3241/2776 \nf 3363/3313/2848 3362/3312/2847 3290/3240/2775 \nf 3364/3314/2849 3291/3241/2776 3292/3242/2777 \nf 3364/3314/2849 3363/3313/2848 3291/3241/2776 \nf 3365/3315/2850 3292/3242/2777 3293/3243/2778 \nf 3365/3315/2850 3364/3314/2849 3292/3242/2777 \nf 3366/3316/2851 3293/3243/2778 3294/3244/2779 \nf 3366/3316/2851 3365/3315/2850 3293/3243/2778 \nf 3367/3317/2852 3294/3244/2779 3295/3245/2780 \nf 3367/3317/2852 3366/3316/2851 3294/3244/2779 \nf 3368/3318/2853 3295/3245/2780 3296/3246/2781 \nf 3368/3318/2853 3367/3317/2852 3295/3245/2780 \nf 3369/3319/2854 3296/3246/2781 3297/3247/2782 \nf 3369/3319/2854 3368/3318/2853 3296/3246/2781 \nf 3370/3320/2855 3297/3247/2782 3298/3248/2783 \nf 3370/3320/2855 3369/3319/2854 3297/3247/2782 \nf 3371/3321/2856 3298/3248/2783 3299/3249/2784 \nf 3371/3321/2856 3370/3320/2855 3298/3248/2783 \nf 3372/3322/2857 3299/3249/2784 3300/3250/2785 \nf 3372/3322/2857 3371/3321/2856 3299/3249/2784 \nf 3373/3323/2858 3300/3250/2785 3301/3251/2786 \nf 3373/3323/2858 3372/3322/2857 3300/3250/2785 \nf 3374/3324/2859 3301/3251/2786 3302/3252/2787 \nf 3374/3324/2859 3373/3323/2858 3301/3251/2786 \nf 3375/3325/2860 3302/3252/2787 3303/3253/2788 \nf 3375/3325/2860 3374/3324/2859 3302/3252/2787 \nf 3376/3326/2861 3303/3253/2788 3304/3254/2789 \nf 3376/3326/2861 3375/3325/2860 3303/3253/2788 \nf 3377/3327/2862 3304/3254/2789 3305/3255/2790 \nf 3377/3327/2862 3376/3326/2861 3304/3254/2789 \nf 3378/3328/2863 3305/3255/2790 3306/3256/2791 \nf 3378/3328/2863 3377/3327/2862 3305/3255/2790 \nf 3379/3329/2864 3306/3256/2791 3307/3257/2792 \nf 3379/3329/2864 3378/3328/2863 3306/3256/2791 \nf 3380/3330/2865 3307/3257/2792 3308/3258/2793 \nf 3380/3330/2865 3379/3329/2864 3307/3257/2792 \nf 3381/3331/2866 3308/3258/2793 3309/3259/2794 \nf 3381/3331/2866 3380/3330/2865 3308/3258/2793 \nf 3382/3332/2867 3309/3259/2794 3310/3260/2795 \nf 3382/3332/2867 3381/3331/2866 3309/3259/2794 \nf 3383/3333/2868 3310/3260/2795 3311/3261/2796 \nf 3383/3333/2868 3382/3332/2867 3310/3260/2795 \nf 3384/3334/2869 3311/3261/2796 3312/3262/2797 \nf 3384/3334/2869 3383/3333/2868 3311/3261/2796 \nf 3385/3335/2870 3312/3262/2797 3313/3263/2798 \nf 3385/3335/2870 3384/3334/2869 3312/3262/2797 \nf 3386/3336/2871 3313/3263/2798 3314/3264/2799 \nf 3386/3336/2871 3385/3335/2870 3313/3263/2798 \nf 3387/3337/2872 3314/3264/2799 3315/3265/2800 \nf 3387/3337/2872 3386/3336/2871 3314/3264/2799 \nf 3388/3338/2873 3315/3265/2800 3316/3266/2801 \nf 3388/3338/2873 3387/3337/2872 3315/3265/2800 \nf 3389/3339/2874 3316/3266/2801 3317/3267/2802 \nf 3389/3339/2874 3388/3338/2873 3316/3266/2801 \nf 3390/3340/2875 3317/3267/2802 3319/3269/2804 \nf 3390/3340/2875 3389/3339/2874 3317/3267/2802 \nf 3320/3270/2805 3391/3341/2876 3319/3269/2804 \nf 3392/3342/2877 3319/3269/2804 3391/3341/2876 \nf 3392/3342/2877 3390/3340/2875 3319/3269/2804 \nf 3321/3271/2806 3391/3341/2876 3320/3270/2805 \nf 3393/3343/2878 3392/3342/2877 3391/3341/2876 \nf 3394/3344/2879 3393/3343/2878 3391/3341/2876 \nf 3321/3271/2806 3394/3344/2879 3391/3341/2876 \nf 2951/2902/2435 2952/2903/2436 3322/3272/2807 \nf 3395/3345/2880 3322/3272/2807 3323/3273/2808 \nf 3395/3345/2880 2951/2902/2435 3322/3272/2807 \nf 3396/3346/2881 3323/3273/2808 3324/3274/2809 \nf 3396/3346/2881 3395/3345/2880 3323/3273/2808 \nf 3397/3347/2882 3324/3274/2809 3325/3275/2810 \nf 3397/3347/2882 3396/3346/2881 3324/3274/2809 \nf 3398/3348/2883 3325/3275/2810 3326/3276/2811 \nf 3398/3348/2883 3397/3347/2882 3325/3275/2810 \nf 3399/3349/2884 3326/3276/2811 3327/3277/2812 \nf 3399/3349/2884 3398/3348/2883 3326/3276/2811 \nf 3400/3350/2885 3327/3277/2812 3328/3278/2813 \nf 3400/3350/2885 3399/3349/2884 3327/3277/2812 \nf 3401/3351/2886 3328/3278/2813 3329/3279/2814 \nf 3401/3351/2886 3400/3350/2885 3328/3278/2813 \nf 3402/3352/2887 3329/3279/2814 3330/3280/2815 \nf 3402/3352/2887 3401/3351/2886 3329/3279/2814 \nf 3403/3353/2888 3330/3280/2815 3331/3281/2816 \nf 3403/3353/2888 3402/3352/2887 3330/3280/2815 \nf 3404/3354/2889 3331/3281/2816 3332/3282/2817 \nf 3404/3354/2889 3403/3353/2888 3331/3281/2816 \nf 3405/3355/2890 3332/3282/2817 3333/3283/2818 \nf 3405/3355/2890 3404/3354/2889 3332/3282/2817 \nf 3406/3356/2891 3333/3283/2818 3334/3284/2819 \nf 3406/3356/2891 3405/3355/2890 3333/3283/2818 \nf 3407/3357/2892 3334/3284/2819 3335/3285/2820 \nf 3407/3357/2892 3406/3356/2891 3334/3284/2819 \nf 3408/3358/2893 3335/3285/2820 3336/3286/2821 \nf 3408/3358/2893 3407/3357/2892 3335/3285/2820 \nf 3409/3359/2894 3336/3286/2821 3337/3287/2822 \nf 3409/3359/2894 3408/3358/2893 3336/3286/2821 \nf 3410/3360/2895 3337/3287/2822 3338/3288/2823 \nf 3410/3360/2895 3409/3359/2894 3337/3287/2822 \nf 3411/3361/2896 3338/3288/2823 3339/3289/2824 \nf 3411/3361/2896 3410/3360/2895 3338/3288/2823 \nf 3412/3362/2897 3339/3289/2824 3340/3290/2825 \nf 3412/3362/2897 3411/3361/2896 3339/3289/2824 \nf 3413/3363/2898 3340/3290/2825 3341/3291/2826 \nf 3413/3363/2898 3412/3362/2897 3340/3290/2825 \nf 3414/3364/2899 3341/3291/2826 3342/3292/2827 \nf 3414/3364/2899 3413/3363/2898 3341/3291/2826 \nf 3415/3365/2900 3342/3292/2827 3343/3293/2828 \nf 3415/3365/2900 3414/3364/2899 3342/3292/2827 \nf 3416/3366/2901 3343/3293/2828 3344/3294/2829 \nf 3416/3366/2901 3415/3365/2900 3343/3293/2828 \nf 3417/3367/2902 3344/3294/2829 3345/3295/2830 \nf 3417/3367/2902 3416/3366/2901 3344/3294/2829 \nf 3418/3368/2903 3345/3295/2830 3346/3296/2831 \nf 3418/3368/2903 3417/3367/2902 3345/3295/2830 \nf 3419/3369/2904 3346/3296/2831 3347/3297/2832 \nf 3419/3369/2904 3418/3368/2903 3346/3296/2831 \nf 3420/3370/2905 3347/3297/2832 3348/3298/2833 \nf 3420/3370/2905 3419/3369/2904 3347/3297/2832 \nf 3421/3371/2906 3348/3298/2833 3349/3299/2834 \nf 3421/3371/2906 3420/3370/2905 3348/3298/2833 \nf 3422/3372/2907 3349/3299/2834 3350/3300/2835 \nf 3422/3372/2907 3421/3371/2906 3349/3299/2834 \nf 3423/3373/2908 3350/3300/2835 3351/3301/2836 \nf 3423/3373/2908 3422/3372/2907 3350/3300/2835 \nf 3424/3374/2909 3351/3301/2836 3352/3302/2837 \nf 3424/3374/2909 3423/3373/2908 3351/3301/2836 \nf 3425/3375/2910 3352/3302/2837 3353/3303/2838 \nf 3425/3375/2910 3424/3374/2909 3352/3302/2837 \nf 3426/3376/2911 3353/3303/2838 3354/3304/2839 \nf 3426/3376/2911 3425/3375/2910 3353/3303/2838 \nf 3427/3377/2912 3354/3304/2839 3355/3305/2840 \nf 3427/3377/2912 3426/3376/2911 3354/3304/2839 \nf 3428/3378/2913 3355/3305/2840 3356/3306/2841 \nf 3428/3378/2913 3427/3377/2912 3355/3305/2840 \nf 3429/3379/2914 3356/3306/2841 3357/3307/2842 \nf 3429/3379/2914 3428/3378/2913 3356/3306/2841 \nf 3430/3380/2915 3357/3307/2842 3358/3308/2843 \nf 3430/3380/2915 3429/3379/2914 3357/3307/2842 \nf 3431/3381/2916 3358/3308/2843 3359/3309/2844 \nf 3431/3381/2916 3430/3380/2915 3358/3308/2843 \nf 3432/3382/2917 3359/3309/2844 3360/3310/2845 \nf 3432/3382/2917 3431/3381/2916 3359/3309/2844 \nf 3433/3383/2918 3360/3310/2845 3361/3311/2846 \nf 3433/3383/2918 3432/3382/2917 3360/3310/2845 \nf 3434/3384/2919 3361/3311/2846 3362/3312/2847 \nf 3434/3384/2919 3433/3383/2918 3361/3311/2846 \nf 3435/3385/2920 3362/3312/2847 3363/3313/2848 \nf 3435/3385/2920 3434/3384/2919 3362/3312/2847 \nf 3436/3386/2921 3363/3313/2848 3364/3314/2849 \nf 3436/3386/2921 3435/3385/2920 3363/3313/2848 \nf 3437/3387/2922 3364/3314/2849 3365/3315/2850 \nf 3437/3387/2922 3436/3386/2921 3364/3314/2849 \nf 3438/3388/2923 3365/3315/2850 3366/3316/2851 \nf 3438/3388/2923 3437/3387/2922 3365/3315/2850 \nf 3439/3389/2924 3366/3316/2851 3367/3317/2852 \nf 3439/3389/2924 3438/3388/2923 3366/3316/2851 \nf 3440/3390/2925 3367/3317/2852 3368/3318/2853 \nf 3440/3390/2925 3439/3389/2924 3367/3317/2852 \nf 3441/3391/2926 3368/3318/2853 3369/3319/2854 \nf 3441/3391/2926 3440/3390/2925 3368/3318/2853 \nf 3442/3392/2927 3369/3319/2854 3370/3320/2855 \nf 3442/3392/2927 3441/3391/2926 3369/3319/2854 \nf 3443/3393/2928 3370/3320/2855 3371/3321/2856 \nf 3443/3393/2928 3442/3392/2927 3370/3320/2855 \nf 3444/3394/2929 3371/3321/2856 3372/3322/2857 \nf 3444/3394/2929 3443/3393/2928 3371/3321/2856 \nf 3445/3395/2930 3372/3322/2857 3373/3323/2858 \nf 3445/3395/2930 3444/3394/2929 3372/3322/2857 \nf 3446/3396/2931 3373/3323/2858 3374/3324/2859 \nf 3446/3396/2931 3445/3395/2930 3373/3323/2858 \nf 3447/3397/2932 3374/3324/2859 3375/3325/2860 \nf 3447/3397/2932 3446/3396/2931 3374/3324/2859 \nf 3448/3398/2933 3375/3325/2860 3376/3326/2861 \nf 3448/3398/2933 3447/3397/2932 3375/3325/2860 \nf 3449/3399/2934 3376/3326/2861 3377/3327/2862 \nf 3449/3399/2934 3448/3398/2933 3376/3326/2861 \nf 3450/3400/2935 3377/3327/2862 3378/3328/2863 \nf 3450/3400/2935 3449/3399/2934 3377/3327/2862 \nf 3451/3401/2936 3378/3328/2863 3379/3329/2864 \nf 3451/3401/2936 3450/3400/2935 3378/3328/2863 \nf 3452/3402/2937 3379/3329/2864 3380/3330/2865 \nf 3452/3402/2937 3451/3401/2936 3379/3329/2864 \nf 3453/3403/2938 3380/3330/2865 3381/3331/2866 \nf 3453/3403/2938 3452/3402/2937 3380/3330/2865 \nf 3454/3404/2939 3381/3331/2866 3382/3332/2867 \nf 3454/3404/2939 3453/3403/2938 3381/3331/2866 \nf 3455/3405/2940 3382/3332/2867 3383/3333/2868 \nf 3455/3405/2940 3454/3404/2939 3382/3332/2867 \nf 1376/1355/860 3383/3333/2868 3384/3334/2869 \nf 1376/1355/860 3455/3405/2940 3383/3333/2868 \nf 1371/1350/855 3384/3334/2869 3385/3335/2870 \nf 1371/1350/855 1376/1355/860 3384/3334/2869 \nf 1368/1347/852 3385/3335/2870 3386/3336/2871 \nf 1368/1347/852 1371/1350/855 3385/3335/2870 \nf 1364/1343/848 3386/3336/2871 3387/3337/2872 \nf 1364/1343/848 1368/1347/852 3386/3336/2871 \nf 1360/1339/844 3387/3337/2872 3388/3338/2873 \nf 1360/1339/844 1364/1343/848 3387/3337/2872 \nf 1356/1335/840 3388/3338/2873 3389/3339/2874 \nf 1356/1335/840 1360/1339/844 3388/3338/2873 \nf 1352/1331/836 3389/3339/2874 3390/3340/2875 \nf 1352/1331/836 1356/1335/840 3389/3339/2874 \nf 1348/1327/832 3390/3340/2875 3392/3342/2877 \nf 1348/1327/832 1352/1331/836 3390/3340/2875 \nf 3393/3343/2878 3456/3406/2941 3392/3342/2877 \nf 1344/1323/828 3392/3342/2877 3456/3406/2941 \nf 1344/1323/828 1348/1327/832 3392/3342/2877 \nf 3394/3344/2879 3456/3406/2941 3393/3343/2878 \nf 3457/3407/2942 1344/1323/828 3456/3406/2941 \nf 1282/1276/767 3457/3407/2942 3456/3406/2941 \nf 3394/3344/2879 1282/1276/767 3456/3406/2941 \nf 2950/2901/2434 2951/2902/2435 3395/3345/2880 \nf 3458/3408/2943 3395/3345/2880 3396/3346/2881 \nf 3458/3408/2943 2950/2901/2434 3395/3345/2880 \nf 3459/3409/2944 3396/3346/2881 3397/3347/2882 \nf 3459/3409/2944 3458/3408/2943 3396/3346/2881 \nf 3460/3410/2945 3397/3347/2882 3398/3348/2883 \nf 3460/3410/2945 3459/3409/2944 3397/3347/2882 \nf 3461/3411/2946 3398/3348/2883 3399/3349/2884 \nf 3461/3411/2946 3460/3410/2945 3398/3348/2883 \nf 3462/3412/2947 3399/3349/2884 3400/3350/2885 \nf 3462/3412/2947 3461/3411/2946 3399/3349/2884 \nf 3463/3413/2948 3400/3350/2885 3401/3351/2886 \nf 3463/3413/2948 3462/3412/2947 3400/3350/2885 \nf 3464/3414/2949 3401/3351/2886 3402/3352/2887 \nf 3464/3414/2949 3463/3413/2948 3401/3351/2886 \nf 3465/3415/2950 3402/3352/2887 3403/3353/2888 \nf 3465/3415/2950 3464/3414/2949 3402/3352/2887 \nf 3466/3416/2951 3403/3353/2888 3404/3354/2889 \nf 3466/3416/2951 3465/3415/2950 3403/3353/2888 \nf 3467/3417/2952 3404/3354/2889 3405/3355/2890 \nf 3467/3417/2952 3466/3416/2951 3404/3354/2889 \nf 3468/3418/2953 3405/3355/2890 3406/3356/2891 \nf 3468/3418/2953 3467/3417/2952 3405/3355/2890 \nf 3469/3419/2954 3406/3356/2891 3407/3357/2892 \nf 3469/3419/2954 3468/3418/2953 3406/3356/2891 \nf 3470/3420/2955 3407/3357/2892 3408/3358/2893 \nf 3470/3420/2955 3469/3419/2954 3407/3357/2892 \nf 3471/3421/2956 3408/3358/2893 3409/3359/2894 \nf 3471/3421/2956 3470/3420/2955 3408/3358/2893 \nf 3472/3422/2957 3409/3359/2894 3410/3360/2895 \nf 3472/3422/2957 3471/3421/2956 3409/3359/2894 \nf 3473/3423/2958 3410/3360/2895 3411/3361/2896 \nf 3473/3423/2958 3472/3422/2957 3410/3360/2895 \nf 3474/3424/2959 3411/3361/2896 3412/3362/2897 \nf 3474/3424/2959 3473/3423/2958 3411/3361/2896 \nf 3475/3425/2960 3412/3362/2897 3413/3363/2898 \nf 3475/3425/2960 3474/3424/2959 3412/3362/2897 \nf 3476/3426/2961 3413/3363/2898 3414/3364/2899 \nf 3476/3426/2961 3475/3425/2960 3413/3363/2898 \nf 3477/3427/2962 3414/3364/2899 3415/3365/2900 \nf 3477/3427/2962 3476/3426/2961 3414/3364/2899 \nf 3478/3428/2963 3415/3365/2900 3416/3366/2901 \nf 3478/3428/2963 3477/3427/2962 3415/3365/2900 \nf 3479/3429/2964 3416/3366/2901 3417/3367/2902 \nf 3479/3429/2964 3478/3428/2963 3416/3366/2901 \nf 3480/3430/2965 3417/3367/2902 3418/3368/2903 \nf 3480/3430/2965 3479/3429/2964 3417/3367/2902 \nf 3481/3431/2966 3418/3368/2903 3419/3369/2904 \nf 3481/3431/2966 3480/3430/2965 3418/3368/2903 \nf 3482/3432/2967 3419/3369/2904 3420/3370/2905 \nf 3482/3432/2967 3481/3431/2966 3419/3369/2904 \nf 3483/3433/2968 3420/3370/2905 3421/3371/2906 \nf 3483/3433/2968 3482/3432/2967 3420/3370/2905 \nf 3484/3434/2969 3421/3371/2906 3422/3372/2907 \nf 3484/3434/2969 3483/3433/2968 3421/3371/2906 \nf 3485/3435/2970 3422/3372/2907 3423/3373/2908 \nf 3485/3435/2970 3484/3434/2969 3422/3372/2907 \nf 3486/3436/2971 3423/3373/2908 3424/3374/2909 \nf 3486/3436/2971 3485/3435/2970 3423/3373/2908 \nf 3487/3437/2972 3424/3374/2909 3425/3375/2910 \nf 3487/3437/2972 3486/3436/2971 3424/3374/2909 \nf 3488/3438/2973 3425/3375/2910 3426/3376/2911 \nf 3488/3438/2973 3487/3437/2972 3425/3375/2910 \nf 3489/3439/2974 3426/3376/2911 3427/3377/2912 \nf 3489/3439/2974 3488/3438/2973 3426/3376/2911 \nf 3490/3440/2975 3427/3377/2912 3428/3378/2913 \nf 3490/3440/2975 3489/3439/2974 3427/3377/2912 \nf 3491/3441/2976 3428/3378/2913 3429/3379/2914 \nf 3491/3441/2976 3490/3440/2975 3428/3378/2913 \nf 3492/3442/2977 3429/3379/2914 3430/3380/2915 \nf 3492/3442/2977 3491/3441/2976 3429/3379/2914 \nf 3493/3443/2978 3430/3380/2915 3431/3381/2916 \nf 3493/3443/2978 3492/3442/2977 3430/3380/2915 \nf 3494/3444/2979 3431/3381/2916 3432/3382/2917 \nf 3494/3444/2979 3493/3443/2978 3431/3381/2916 \nf 3495/3445/2980 3432/3382/2917 3433/3383/2918 \nf 3495/3445/2980 3494/3444/2979 3432/3382/2917 \nf 3496/3446/2981 3433/3383/2918 3434/3384/2919 \nf 3496/3446/2981 3495/3445/2980 3433/3383/2918 \nf 1462/1440/947 3434/3384/2919 3435/3385/2920 \nf 1462/1440/947 3496/3446/2981 3434/3384/2919 \nf 1456/1434/941 3435/3385/2920 3436/3386/2921 \nf 1456/1434/941 1462/1440/947 3435/3385/2920 \nf 1452/1430/937 3436/3386/2921 3437/3387/2922 \nf 1452/1430/937 1456/1434/941 3436/3386/2921 \nf 1448/1426/932 3437/3387/2922 3438/3388/2923 \nf 1448/1426/932 1452/1430/937 3437/3387/2922 \nf 1444/1422/928 3438/3388/2923 3439/3389/2924 \nf 1444/1422/928 1448/1426/932 3438/3388/2923 \nf 1440/1418/924 3439/3389/2924 3440/3390/2925 \nf 1440/1418/924 1444/1422/928 3439/3389/2924 \nf 1436/1414/920 3440/3390/2925 3441/3391/2926 \nf 1436/1414/920 1440/1418/924 3440/3390/2925 \nf 1432/1410/916 3441/3391/2926 3442/3392/2927 \nf 1432/1410/916 1436/1414/920 3441/3391/2926 \nf 1430/1408/914 3442/3392/2927 3443/3393/2928 \nf 1430/1408/914 1432/1410/916 3442/3392/2927 \nf 1426/1404/910 3443/3393/2928 3444/3394/2929 \nf 1426/1404/910 1430/1408/914 3443/3393/2928 \nf 1422/1400/906 3444/3394/2929 3445/3395/2930 \nf 1422/1400/906 1426/1404/910 3444/3394/2929 \nf 1418/1396/902 3445/3395/2930 3446/3396/2931 \nf 1418/1396/902 1422/1400/906 3445/3395/2930 \nf 1414/1392/898 3446/3396/2931 3447/3397/2932 \nf 1414/1392/898 1418/1396/902 3446/3396/2931 \nf 1410/1388/894 3447/3397/2932 3448/3398/2933 \nf 1410/1388/894 1414/1392/898 3447/3397/2932 \nf 1406/1384/890 3448/3398/2933 3449/3399/2934 \nf 1406/1384/890 1410/1388/894 3448/3398/2933 \nf 1402/1380/886 3449/3399/2934 3450/3400/2935 \nf 1402/1380/886 1406/1384/890 3449/3399/2934 \nf 1398/1376/882 3450/3400/2935 3451/3401/2936 \nf 1398/1376/882 1402/1380/886 3450/3400/2935 \nf 1395/1372/879 3451/3401/2936 3452/3402/2937 \nf 1395/1372/879 1398/1376/882 3451/3401/2936 \nf 1391/1370/875 3452/3402/2937 3453/3403/2938 \nf 1391/1370/875 1395/1372/879 3452/3402/2937 \nf 1387/1366/871 3453/3403/2938 3454/3404/2939 \nf 1387/1366/871 1391/1370/875 3453/3403/2938 \nf 1383/1362/867 3454/3404/2939 3455/3405/2940 \nf 1383/1362/867 1387/1366/871 3454/3404/2939 \nf 1375/1354/859 3455/3405/2940 1376/1355/860 \nf 1375/1354/859 1383/1362/867 3455/3405/2940 \nf 3457/3407/2942 1281/1275/766 1344/1323/828 \nf 1282/1276/767 1281/1275/766 3457/3407/2942 \nf 1592/1570/1077 2950/2901/2434 3458/3408/2943 \nf 1592/1570/1077 1595/1573/1078 2950/2901/2434 \nf 1589/1567/1074 3458/3408/2943 3459/3409/2944 \nf 1589/1567/1074 1592/1570/1077 3458/3408/2943 \nf 1584/1562/1069 3459/3409/2944 3460/3410/2945 \nf 1584/1562/1069 1589/1567/1074 3459/3409/2944 \nf 1581/1559/1066 3460/3410/2945 3461/3411/2946 \nf 1581/1559/1066 1584/1562/1069 3460/3410/2945 \nf 1578/1556/1063 3461/3411/2946 3462/3412/2947 \nf 1578/1556/1063 1581/1559/1066 3461/3411/2946 \nf 1575/1553/1060 3462/3412/2947 3463/3413/2948 \nf 1575/1553/1060 1578/1556/1063 3462/3412/2947 \nf 1572/1550/1057 3463/3413/2948 3464/3414/2949 \nf 1572/1550/1057 1575/1553/1060 3463/3413/2948 \nf 1569/1547/1054 3464/3414/2949 3465/3415/2950 \nf 1569/1547/1054 1572/1550/1057 3464/3414/2949 \nf 1566/1544/1051 3465/3415/2950 3466/3416/2951 \nf 1566/1544/1051 1569/1547/1054 3465/3415/2950 \nf 1563/1541/1048 3466/3416/2951 3467/3417/2952 \nf 1563/1541/1048 1566/1544/1051 3466/3416/2951 \nf 1560/1538/1045 3467/3417/2952 3468/3418/2953 \nf 1560/1538/1045 1563/1541/1048 3467/3417/2952 \nf 1557/1535/1042 3468/3418/2953 3469/3419/2954 \nf 1557/1535/1042 1560/1538/1045 3468/3418/2953 \nf 1554/1532/1039 3469/3419/2954 3470/3420/2955 \nf 1554/1532/1039 1557/1535/1042 3469/3419/2954 \nf 1551/1529/1036 3470/3420/2955 3471/3421/2956 \nf 1551/1529/1036 1554/1532/1039 3470/3420/2955 \nf 1548/1526/1033 3471/3421/2956 3472/3422/2957 \nf 1548/1526/1033 1551/1529/1036 3471/3421/2956 \nf 1545/1523/1030 3472/3422/2957 3473/3423/2958 \nf 1545/1523/1030 1548/1526/1033 3472/3422/2957 \nf 1542/1520/1027 3473/3423/2958 3474/3424/2959 \nf 1542/1520/1027 1545/1523/1030 3473/3423/2958 \nf 1539/1517/1024 3474/3424/2959 3475/3425/2960 \nf 1539/1517/1024 1542/1520/1027 3474/3424/2959 \nf 1536/1514/1021 3475/3425/2960 3476/3426/2961 \nf 1536/1514/1021 1539/1517/1024 3475/3425/2960 \nf 1533/1511/1018 3476/3426/2961 3477/3427/2962 \nf 1533/1511/1018 1536/1514/1021 3476/3426/2961 \nf 1530/1508/1015 3477/3427/2962 3478/3428/2963 \nf 1530/1508/1015 1533/1511/1018 3477/3427/2962 \nf 1527/1505/1012 3478/3428/2963 3479/3429/2964 \nf 1527/1505/1012 1530/1508/1015 3478/3428/2963 \nf 1524/1502/1009 3479/3429/2964 3480/3430/2965 \nf 1524/1502/1009 1527/1505/1012 3479/3429/2964 \nf 1521/1499/1006 3480/3430/2965 3481/3431/2966 \nf 1521/1499/1006 1524/1502/1009 3480/3430/2965 \nf 1518/1496/1003 3481/3431/2966 3482/3432/2967 \nf 1518/1496/1003 1521/1499/1006 3481/3431/2966 \nf 1515/1493/1000 3482/3432/2967 3483/3433/2968 \nf 1515/1493/1000 1518/1496/1003 3482/3432/2967 \nf 1512/1490/997 3483/3433/2968 3484/3434/2969 \nf 1512/1490/997 1515/1493/1000 3483/3433/2968 \nf 1509/1487/994 3484/3434/2969 3485/3435/2970 \nf 1509/1487/994 1512/1490/997 3484/3434/2969 \nf 1507/1485/992 3485/3435/2970 3486/3436/2971 \nf 1507/1485/992 1509/1487/994 3485/3435/2970 \nf 1503/1481/988 3486/3436/2971 3487/3437/2972 \nf 1503/1481/988 1507/1485/992 3486/3436/2971 \nf 1499/1477/984 3487/3437/2972 3488/3438/2973 \nf 1499/1477/984 1503/1481/988 3487/3437/2972 \nf 1495/1473/980 3488/3438/2973 3489/3439/2974 \nf 1495/1473/980 1499/1477/984 3488/3438/2973 \nf 1492/1470/977 3489/3439/2974 3490/3440/2975 \nf 1492/1470/977 1495/1473/980 3489/3439/2974 \nf 1488/1466/973 3490/3440/2975 3491/3441/2976 \nf 1488/1466/973 1492/1470/977 3490/3440/2975 \nf 1484/1462/969 3491/3441/2976 3492/3442/2977 \nf 1484/1462/969 1488/1466/973 3491/3441/2976 \nf 1480/1458/965 3492/3442/2977 3493/3443/2978 \nf 1480/1458/965 1484/1462/969 3492/3442/2977 \nf 1476/1454/961 3493/3443/2978 3494/3444/2979 \nf 1476/1454/961 1480/1458/965 3493/3443/2978 \nf 1472/1450/957 3494/3444/2979 3495/3445/2980 \nf 1472/1450/957 1476/1454/961 3494/3444/2979 \nf 1468/1446/953 3495/3445/2980 3496/3446/2981 \nf 1468/1446/953 1472/1450/957 3495/3445/2980 \nf 1461/1439/946 3496/3446/2981 1462/1440/947 \nf 1461/1439/946 1468/1446/953 3496/3446/2981 \nf 3497/3447/2982 1282/1276/767 3394/3344/2879 \nf 1277/1271/764 1282/1276/767 3497/3447/2982 \nf 3498/3448/2983 3394/3344/2879 3321/3271/2806 \nf 3497/3447/2982 3394/3344/2879 3498/3448/2983 \nf 3499/3449/2984 3321/3271/2806 3248/3198/2733 \nf 3498/3448/2983 3321/3271/2806 3499/3449/2984 \nf 3500/3450/2985 3248/3198/2733 3175/3125/2660 \nf 3499/3449/2984 3248/3198/2733 3500/3450/2985 \nf 3501/3451/2986 3175/3125/2660 3102/3052/2587 \nf 3500/3450/2985 3175/3125/2660 3501/3451/2986 \nf 3502/3452/2987 3102/3052/2587 3028/2979/2513 \nf 3501/3451/2986 3102/3052/2587 3502/3452/2987 \nf 929/925/513 3028/2979/2513 925/921/512 \nf 3502/3452/2987 3028/2979/2513 929/925/513 \nf 3502/3452/2987 929/925/513 932/928/514 \nf 3503/3453/2988 932/928/514 935/931/515 \nf 3503/3453/2988 3502/3452/2987 932/928/514 \nf 3504/3454/2989 935/931/515 938/934/516 \nf 3504/3454/2989 3503/3453/2988 935/931/515 \nf 3505/3455/2990 938/934/516 941/937/517 \nf 3505/3455/2990 3504/3454/2989 938/934/516 \nf 3506/3456/2991 941/937/517 943/939/518 \nf 3506/3456/2991 3505/3455/2990 941/937/517 \nf 3507/3457/2992 943/939/518 946/942/519 \nf 3507/3457/2992 3506/3456/2991 943/939/518 \nf 3508/3458/2993 946/942/519 949/945/520 \nf 3508/3458/2993 3507/3457/2992 946/942/519 \nf 3509/3459/2994 949/945/520 952/948/521 \nf 3509/3459/2994 3508/3458/2993 949/945/520 \nf 3510/3460/2995 952/948/521 955/951/522 \nf 3510/3460/2995 3509/3459/2994 952/948/521 \nf 3511/3461/2996 955/951/522 958/954/523 \nf 3511/3461/2996 3510/3460/2995 955/951/522 \nf 3512/3462/2997 958/954/523 961/957/524 \nf 3512/3462/2997 3511/3461/2996 958/954/523 \nf 3513/3463/2998 961/957/524 963/959/525 \nf 3513/3463/2998 3512/3462/2997 961/957/524 \nf 3514/3464/2999 963/959/525 966/962/526 \nf 3514/3464/2999 3513/3463/2998 963/959/525 \nf 3515/3465/3000 966/962/526 969/965/527 \nf 3515/3465/3000 3514/3464/2999 966/962/526 \nf 3516/3466/3001 969/965/527 972/968/528 \nf 3516/3466/3001 3515/3465/3000 969/965/527 \nf 3517/3467/3002 972/968/528 975/971/529 \nf 3517/3467/3002 3516/3466/3001 972/968/528 \nf 3518/3468/3003 975/971/529 978/974/530 \nf 3518/3468/3003 3517/3467/3002 975/971/529 \nf 3519/3469/3004 978/974/530 981/977/531 \nf 3519/3469/3004 3518/3468/3003 978/974/530 \nf 3520/3470/3005 981/977/531 984/980/532 \nf 3520/3470/3005 3519/3469/3004 981/977/531 \nf 3521/3471/3006 984/980/532 987/983/533 \nf 3521/3471/3006 3520/3470/3005 984/980/532 \nf 3522/3472/3007 987/983/533 989/985/534 \nf 3522/3472/3007 3521/3471/3006 987/983/533 \nf 3523/3473/3008 989/985/534 992/988/535 \nf 3523/3473/3008 3522/3472/3007 989/985/534 \nf 3524/3474/3009 992/988/535 995/991/536 \nf 3524/3474/3009 3523/3473/3008 992/988/535 \nf 3525/3475/3010 995/991/536 998/994/537 \nf 3525/3475/3010 3524/3474/3009 995/991/536 \nf 3526/3476/3011 998/994/537 1001/997/538 \nf 3526/3476/3011 3525/3475/3010 998/994/537 \nf 3527/3477/3012 1001/997/538 1004/1000/539 \nf 3527/3477/3012 3526/3476/3011 1001/997/538 \nf 3528/3478/3013 1004/1000/539 1007/1003/540 \nf 3528/3478/3013 3527/3477/3012 1004/1000/539 \nf 3529/3479/3014 1007/1003/540 1010/1006/541 \nf 3529/3479/3014 3528/3478/3013 1007/1003/540 \nf 3530/3480/3015 1010/1006/541 1013/1009/542 \nf 3530/3480/3015 3529/3479/3014 1010/1006/541 \nf 3531/3481/3016 1013/1009/542 1016/1012/543 \nf 3531/3481/3016 3530/3480/3015 1013/1009/542 \nf 3532/3482/3017 1016/1012/543 1019/1015/544 \nf 3532/3482/3017 3531/3481/3016 1016/1012/543 \nf 3533/3483/3018 1019/1015/544 1022/1018/545 \nf 3533/3483/3018 3532/3482/3017 1019/1015/544 \nf 3534/3484/3019 1022/1018/545 1025/1021/546 \nf 3534/3484/3019 3533/3483/3018 1022/1018/545 \nf 3535/3485/3020 1025/1021/546 1027/1023/547 \nf 3535/3485/3020 3534/3484/3019 1025/1021/546 \nf 3536/3486/3021 1027/1023/547 1029/1025/548 \nf 3536/3486/3021 3535/3485/3020 1027/1023/547 \nf 3537/3487/3022 1029/1025/548 1031/1027/549 \nf 3537/3487/3022 3536/3486/3021 1029/1025/548 \nf 3538/3488/3023 1031/1027/549 1033/1029/550 \nf 3538/3488/3023 3537/3487/3022 1031/1027/549 \nf 3539/3489/3024 1033/1029/550 1036/1032/552 \nf 3539/3489/3024 3538/3488/3023 1033/1029/550 \nf 3540/3490/3025 1036/1032/552 1035/1031/551 \nf 3540/3490/3025 3539/3489/3024 1036/1032/552 \nf 3541/3491/3026 1035/1031/551 1038/1034/553 \nf 3541/3491/3026 3540/3490/3025 1035/1031/551 \nf 3542/3492/3027 1038/1034/553 1040/1036/554 \nf 3542/3492/3027 3541/3491/3026 1038/1034/553 \nf 3543/3493/3028 1040/1036/554 1042/1038/555 \nf 3543/3493/3028 3542/3492/3027 1040/1036/554 \nf 3544/3494/3029 1042/1038/555 1044/1040/556 \nf 3544/3494/3029 3543/3493/3028 1042/1038/555 \nf 3545/3495/3030 1044/1040/556 1046/1042/557 \nf 3545/3495/3030 3544/3494/3029 1044/1040/556 \nf 3546/3496/3031 1046/1042/557 1048/1044/558 \nf 3546/3496/3031 3545/3495/3030 1046/1042/557 \nf 3547/3497/3032 1048/1044/558 1050/1046/559 \nf 3547/3497/3032 3546/3496/3031 1048/1044/558 \nf 3548/3498/3033 1050/1046/559 1052/1048/560 \nf 3548/3498/3033 3547/3497/3032 1050/1046/559 \nf 3549/3499/3034 1052/1048/560 1054/1050/561 \nf 3549/3499/3034 3548/3498/3033 1052/1048/560 \nf 3550/3500/3035 1054/1050/561 1056/1052/562 \nf 3550/3500/3035 3549/3499/3034 1054/1050/561 \nf 3551/3501/3036 1056/1052/562 1058/1054/563 \nf 3551/3501/3036 3550/3500/3035 1056/1052/562 \nf 3552/3502/3037 1058/1054/563 1060/1056/564 \nf 3552/3502/3037 3551/3501/3036 1058/1054/563 \nf 3553/3503/3038 1060/1056/564 1062/1058/565 \nf 3553/3503/3038 3552/3502/3037 1060/1056/564 \nf 3554/3504/3039 1062/1058/565 1064/1060/566 \nf 3554/3504/3039 3553/3503/3038 1062/1058/565 \nf 3555/3505/3040 1064/1060/566 1067/1063/568 \nf 3555/3505/3040 3554/3504/3039 1064/1060/566 \nf 1067/1063/567 3555/3505/3040 1067/1063/568 \nf 1066/1062/567 1067/1063/567 1067/1063/568 \nf 3501/3451/2986 3502/3452/2987 3503/3453/2988 \nf 3556/3506/3041 3503/3453/2988 3504/3454/2989 \nf 3556/3506/3041 3501/3451/2986 3503/3453/2988 \nf 3557/3507/3042 3504/3454/2989 3505/3455/2990 \nf 3557/3507/3042 3556/3506/3041 3504/3454/2989 \nf 3558/3508/3043 3505/3455/2990 3506/3456/2991 \nf 3558/3508/3043 3557/3507/3042 3505/3455/2990 \nf 3559/3509/3044 3506/3456/2991 3507/3457/2992 \nf 3559/3509/3044 3558/3508/3043 3506/3456/2991 \nf 3560/3510/3045 3507/3457/2992 3508/3458/2993 \nf 3560/3510/3045 3559/3509/3044 3507/3457/2992 \nf 3561/3511/3046 3508/3458/2993 3509/3459/2994 \nf 3561/3511/3046 3560/3510/3045 3508/3458/2993 \nf 3562/3512/3047 3509/3459/2994 3510/3460/2995 \nf 3562/3512/3047 3561/3511/3046 3509/3459/2994 \nf 3563/3513/3048 3510/3460/2995 3511/3461/2996 \nf 3563/3513/3048 3562/3512/3047 3510/3460/2995 \nf 3564/3514/3049 3511/3461/2996 3512/3462/2997 \nf 3564/3514/3049 3563/3513/3048 3511/3461/2996 \nf 3565/3515/3050 3512/3462/2997 3513/3463/2998 \nf 3565/3515/3050 3564/3514/3049 3512/3462/2997 \nf 3566/3516/3051 3513/3463/2998 3514/3464/2999 \nf 3566/3516/3051 3565/3515/3050 3513/3463/2998 \nf 3567/3517/3052 3514/3464/2999 3515/3465/3000 \nf 3567/3517/3052 3566/3516/3051 3514/3464/2999 \nf 3568/3518/3053 3515/3465/3000 3516/3466/3001 \nf 3568/3518/3053 3567/3517/3052 3515/3465/3000 \nf 3569/3519/3054 3516/3466/3001 3517/3467/3002 \nf 3569/3519/3054 3568/3518/3053 3516/3466/3001 \nf 3570/3520/3055 3517/3467/3002 3518/3468/3003 \nf 3570/3520/3055 3569/3519/3054 3517/3467/3002 \nf 3571/3521/3056 3518/3468/3003 3519/3469/3004 \nf 3571/3521/3056 3570/3520/3055 3518/3468/3003 \nf 3572/3522/3057 3519/3469/3004 3520/3470/3005 \nf 3572/3522/3057 3571/3521/3056 3519/3469/3004 \nf 3573/3523/3058 3520/3470/3005 3521/3471/3006 \nf 3573/3523/3058 3572/3522/3057 3520/3470/3005 \nf 3574/3524/3059 3521/3471/3006 3522/3472/3007 \nf 3574/3524/3059 3573/3523/3058 3521/3471/3006 \nf 3575/3525/3060 3522/3472/3007 3523/3473/3008 \nf 3575/3525/3060 3574/3524/3059 3522/3472/3007 \nf 3576/3526/3061 3523/3473/3008 3524/3474/3009 \nf 3576/3526/3061 3575/3525/3060 3523/3473/3008 \nf 3577/3527/3062 3524/3474/3009 3525/3475/3010 \nf 3577/3527/3062 3576/3526/3061 3524/3474/3009 \nf 3578/3528/3063 3525/3475/3010 3526/3476/3011 \nf 3578/3528/3063 3577/3527/3062 3525/3475/3010 \nf 3579/3529/3064 3526/3476/3011 3527/3477/3012 \nf 3579/3529/3064 3578/3528/3063 3526/3476/3011 \nf 3580/3530/3065 3527/3477/3012 3528/3478/3013 \nf 3580/3530/3065 3579/3529/3064 3527/3477/3012 \nf 3581/3531/3066 3528/3478/3013 3529/3479/3014 \nf 3581/3531/3066 3580/3530/3065 3528/3478/3013 \nf 3582/3532/3067 3529/3479/3014 3530/3480/3015 \nf 3582/3532/3067 3581/3531/3066 3529/3479/3014 \nf 3583/3533/3068 3530/3480/3015 3531/3481/3016 \nf 3583/3533/3068 3582/3532/3067 3530/3480/3015 \nf 3584/3534/3069 3531/3481/3016 3532/3482/3017 \nf 3584/3534/3069 3583/3533/3068 3531/3481/3016 \nf 3585/3535/3070 3532/3482/3017 3533/3483/3018 \nf 3585/3535/3070 3584/3534/3069 3532/3482/3017 \nf 3586/3536/3071 3533/3483/3018 3534/3484/3019 \nf 3586/3536/3071 3585/3535/3070 3533/3483/3018 \nf 3587/3537/3072 3534/3484/3019 3535/3485/3020 \nf 3587/3537/3072 3586/3536/3071 3534/3484/3019 \nf 3588/3538/3073 3535/3485/3020 3536/3486/3021 \nf 3588/3538/3073 3587/3537/3072 3535/3485/3020 \nf 3589/3539/3074 3536/3486/3021 3537/3487/3022 \nf 3589/3539/3074 3588/3538/3073 3536/3486/3021 \nf 3590/3540/3075 3537/3487/3022 3538/3488/3023 \nf 3590/3540/3075 3589/3539/3074 3537/3487/3022 \nf 3591/3541/3076 3538/3488/3023 3539/3489/3024 \nf 3591/3541/3076 3590/3540/3075 3538/3488/3023 \nf 3592/3542/3077 3539/3489/3024 3540/3490/3025 \nf 3592/3542/3077 3591/3541/3076 3539/3489/3024 \nf 3593/3543/3078 3540/3490/3025 3541/3491/3026 \nf 3593/3543/3078 3592/3542/3077 3540/3490/3025 \nf 3594/3544/3079 3541/3491/3026 3542/3492/3027 \nf 3594/3544/3079 3593/3543/3078 3541/3491/3026 \nf 3595/3545/3080 3542/3492/3027 3543/3493/3028 \nf 3595/3545/3080 3594/3544/3079 3542/3492/3027 \nf 3596/3546/3081 3543/3493/3028 3544/3494/3029 \nf 3596/3546/3081 3595/3545/3080 3543/3493/3028 \nf 3597/3547/3082 3544/3494/3029 3545/3495/3030 \nf 3597/3547/3082 3596/3546/3081 3544/3494/3029 \nf 3598/3548/3083 3545/3495/3030 3546/3496/3031 \nf 3598/3548/3083 3597/3547/3082 3545/3495/3030 \nf 3599/3549/3084 3546/3496/3031 3547/3497/3032 \nf 3599/3549/3084 3598/3548/3083 3546/3496/3031 \nf 3600/3550/3085 3547/3497/3032 3548/3498/3033 \nf 3600/3550/3085 3599/3549/3084 3547/3497/3032 \nf 3601/3551/3086 3548/3498/3033 3549/3499/3034 \nf 3601/3551/3086 3600/3550/3085 3548/3498/3033 \nf 3602/3552/3087 3549/3499/3034 3550/3500/3035 \nf 3602/3552/3087 3601/3551/3086 3549/3499/3034 \nf 3603/3553/3088 3550/3500/3035 3551/3501/3036 \nf 3603/3553/3088 3602/3552/3087 3550/3500/3035 \nf 3604/3554/3089 3551/3501/3036 3552/3502/3037 \nf 3604/3554/3089 3603/3553/3088 3551/3501/3036 \nf 3605/3555/3090 3552/3502/3037 3553/3503/3038 \nf 3605/3555/3090 3604/3554/3089 3552/3502/3037 \nf 3606/3556/3091 3553/3503/3038 3554/3504/3039 \nf 3606/3556/3091 3605/3555/3090 3553/3503/3038 \nf 3607/3557/3092 3554/3504/3039 3555/3505/3040 \nf 3607/3557/3092 3606/3556/3091 3554/3504/3039 \nf 1067/1063/567 3608/3558/3093 3555/3505/3040 \nf 3609/3559/3094 3555/3505/3040 3608/3558/3093 \nf 3609/3559/3094 3607/3557/3092 3555/3505/3040 \nf 3610/3560/3095 3608/3558/3093 1067/1063/567 \nf 3608/3561/3096 3609/3559/3094 3608/3558/3093 \nf 3610/3560/3095 3608/3561/3096 3608/3558/3093 \nf 1066/1062/567 3610/3560/3095 1067/1063/567 \nf 3500/3450/2985 3501/3451/2986 3556/3506/3041 \nf 3611/3562/3097 3556/3506/3041 3557/3507/3042 \nf 3611/3562/3097 3500/3450/2985 3556/3506/3041 \nf 3612/3563/3098 3557/3507/3042 3558/3508/3043 \nf 3612/3563/3098 3611/3562/3097 3557/3507/3042 \nf 3613/3564/3099 3558/3508/3043 3559/3509/3044 \nf 3613/3564/3099 3612/3563/3098 3558/3508/3043 \nf 3614/3565/3100 3559/3509/3044 3560/3510/3045 \nf 3614/3565/3100 3613/3564/3099 3559/3509/3044 \nf 3615/3566/3101 3560/3510/3045 3561/3511/3046 \nf 3615/3566/3101 3614/3565/3100 3560/3510/3045 \nf 3616/3567/3102 3561/3511/3046 3562/3512/3047 \nf 3616/3567/3102 3615/3566/3101 3561/3511/3046 \nf 3617/3568/3103 3562/3512/3047 3563/3513/3048 \nf 3617/3568/3103 3616/3567/3102 3562/3512/3047 \nf 3618/3569/3104 3563/3513/3048 3564/3514/3049 \nf 3618/3569/3104 3617/3568/3103 3563/3513/3048 \nf 3619/3570/3105 3564/3514/3049 3565/3515/3050 \nf 3619/3570/3105 3618/3569/3104 3564/3514/3049 \nf 3620/3571/3106 3565/3515/3050 3566/3516/3051 \nf 3620/3571/3106 3619/3570/3105 3565/3515/3050 \nf 3621/3572/3107 3566/3516/3051 3567/3517/3052 \nf 3621/3572/3107 3620/3571/3106 3566/3516/3051 \nf 3622/3573/3108 3567/3517/3052 3568/3518/3053 \nf 3622/3573/3108 3621/3572/3107 3567/3517/3052 \nf 3623/3574/3109 3568/3518/3053 3569/3519/3054 \nf 3623/3574/3109 3622/3573/3108 3568/3518/3053 \nf 3624/3575/3110 3569/3519/3054 3570/3520/3055 \nf 3624/3575/3110 3623/3574/3109 3569/3519/3054 \nf 3625/3576/3111 3570/3520/3055 3571/3521/3056 \nf 3625/3576/3111 3624/3575/3110 3570/3520/3055 \nf 3626/3577/3112 3571/3521/3056 3572/3522/3057 \nf 3626/3577/3112 3625/3576/3111 3571/3521/3056 \nf 3627/3578/3113 3572/3522/3057 3573/3523/3058 \nf 3627/3578/3113 3626/3577/3112 3572/3522/3057 \nf 3628/3579/3114 3573/3523/3058 3574/3524/3059 \nf 3628/3579/3114 3627/3578/3113 3573/3523/3058 \nf 3629/3580/3115 3574/3524/3059 3575/3525/3060 \nf 3629/3580/3115 3628/3579/3114 3574/3524/3059 \nf 3630/3581/3116 3575/3525/3060 3576/3526/3061 \nf 3630/3581/3116 3629/3580/3115 3575/3525/3060 \nf 3631/3582/3117 3576/3526/3061 3577/3527/3062 \nf 3631/3582/3117 3630/3581/3116 3576/3526/3061 \nf 3632/3583/3118 3577/3527/3062 3578/3528/3063 \nf 3632/3583/3118 3631/3582/3117 3577/3527/3062 \nf 3633/3584/3119 3578/3528/3063 3579/3529/3064 \nf 3633/3584/3119 3632/3583/3118 3578/3528/3063 \nf 3634/3585/3120 3579/3529/3064 3580/3530/3065 \nf 3634/3585/3120 3633/3584/3119 3579/3529/3064 \nf 3635/3586/3121 3580/3530/3065 3581/3531/3066 \nf 3635/3586/3121 3634/3585/3120 3580/3530/3065 \nf 3636/3587/3122 3581/3531/3066 3582/3532/3067 \nf 3636/3587/3122 3635/3586/3121 3581/3531/3066 \nf 3637/3588/3123 3582/3532/3067 3583/3533/3068 \nf 3637/3588/3123 3636/3587/3122 3582/3532/3067 \nf 3638/3589/3124 3583/3533/3068 3584/3534/3069 \nf 3638/3589/3124 3637/3588/3123 3583/3533/3068 \nf 3639/3590/3125 3584/3534/3069 3585/3535/3070 \nf 3639/3590/3125 3638/3589/3124 3584/3534/3069 \nf 3640/3591/3126 3585/3535/3070 3586/3536/3071 \nf 3640/3591/3126 3639/3590/3125 3585/3535/3070 \nf 3641/3592/3127 3586/3536/3071 3587/3537/3072 \nf 3641/3592/3127 3640/3591/3126 3586/3536/3071 \nf 3642/3593/3128 3587/3537/3072 3588/3538/3073 \nf 3642/3593/3128 3641/3592/3127 3587/3537/3072 \nf 3643/3594/3129 3588/3538/3073 3589/3539/3074 \nf 3643/3594/3129 3642/3593/3128 3588/3538/3073 \nf 3644/3595/3130 3589/3539/3074 3590/3540/3075 \nf 3644/3595/3130 3643/3594/3129 3589/3539/3074 \nf 3645/3596/3131 3590/3540/3075 3591/3541/3076 \nf 3645/3596/3131 3644/3595/3130 3590/3540/3075 \nf 3646/3597/3132 3591/3541/3076 3592/3542/3077 \nf 3646/3597/3132 3645/3596/3131 3591/3541/3076 \nf 3647/3598/3133 3592/3542/3077 3593/3543/3078 \nf 3647/3598/3133 3646/3597/3132 3592/3542/3077 \nf 3648/3599/3134 3593/3543/3078 3594/3544/3079 \nf 3648/3599/3134 3647/3598/3133 3593/3543/3078 \nf 3649/3600/3135 3594/3544/3079 3595/3545/3080 \nf 3649/3600/3135 3648/3599/3134 3594/3544/3079 \nf 3650/3601/3136 3595/3545/3080 3596/3546/3081 \nf 3650/3601/3136 3649/3600/3135 3595/3545/3080 \nf 3651/3602/3137 3596/3546/3081 3597/3547/3082 \nf 3651/3602/3137 3650/3601/3136 3596/3546/3081 \nf 3652/3603/3138 3597/3547/3082 3598/3548/3083 \nf 3652/3603/3138 3651/3602/3137 3597/3547/3082 \nf 3653/3604/3139 3598/3548/3083 3599/3549/3084 \nf 3653/3604/3139 3652/3603/3138 3598/3548/3083 \nf 3654/3605/3140 3599/3549/3084 3600/3550/3085 \nf 3654/3605/3140 3653/3604/3139 3599/3549/3084 \nf 3655/3606/3141 3600/3550/3085 3601/3551/3086 \nf 3655/3606/3141 3654/3605/3140 3600/3550/3085 \nf 3656/3607/3142 3601/3551/3086 3602/3552/3087 \nf 3656/3607/3142 3655/3606/3141 3601/3551/3086 \nf 3657/3608/3143 3602/3552/3087 3603/3553/3088 \nf 3657/3608/3143 3656/3607/3142 3602/3552/3087 \nf 3658/3609/3144 3603/3553/3088 3604/3554/3089 \nf 3658/3609/3144 3657/3608/3143 3603/3553/3088 \nf 3659/3610/3145 3604/3554/3089 3605/3555/3090 \nf 3659/3610/3145 3658/3609/3144 3604/3554/3089 \nf 3660/3611/3146 3605/3555/3090 3606/3556/3091 \nf 3660/3611/3146 3659/3610/3145 3605/3555/3090 \nf 3661/3612/3147 3606/3556/3091 3607/3557/3092 \nf 3661/3612/3147 3660/3611/3146 3606/3556/3091 \nf 3662/3613/3148 3607/3557/3092 3609/3559/3094 \nf 3662/3613/3148 3661/3612/3147 3607/3557/3092 \nf 3608/3561/3096 3663/3614/3149 3609/3559/3094 \nf 3664/3615/3150 3609/3559/3094 3663/3614/3149 \nf 3664/3615/3150 3662/3613/3148 3609/3559/3094 \nf 3610/3560/3095 3663/3614/3149 3608/3561/3096 \nf 3665/3614/3151 3664/3615/3150 3663/3614/3149 \nf 3666/3616/3152 3665/3614/3151 3663/3614/3149 \nf 3610/3560/3095 3666/3616/3152 3663/3614/3149 \nf 3499/3449/2984 3500/3450/2985 3611/3562/3097 \nf 3667/3617/3153 3611/3562/3097 3612/3563/3098 \nf 3667/3617/3153 3499/3449/2984 3611/3562/3097 \nf 3668/3618/3154 3612/3563/3098 3613/3564/3099 \nf 3668/3618/3154 3667/3617/3153 3612/3563/3098 \nf 3669/3619/3155 3613/3564/3099 3614/3565/3100 \nf 3669/3619/3155 3668/3618/3154 3613/3564/3099 \nf 3670/3620/3156 3614/3565/3100 3615/3566/3101 \nf 3670/3620/3156 3669/3619/3155 3614/3565/3100 \nf 3671/3621/3157 3615/3566/3101 3616/3567/3102 \nf 3671/3621/3157 3670/3620/3156 3615/3566/3101 \nf 3672/3622/3158 3616/3567/3102 3617/3568/3103 \nf 3672/3622/3158 3671/3621/3157 3616/3567/3102 \nf 3673/3623/3159 3617/3568/3103 3618/3569/3104 \nf 3673/3623/3159 3672/3622/3158 3617/3568/3103 \nf 3674/3624/3160 3618/3569/3104 3619/3570/3105 \nf 3674/3624/3160 3673/3623/3159 3618/3569/3104 \nf 3675/3625/3161 3619/3570/3105 3620/3571/3106 \nf 3675/3625/3161 3674/3624/3160 3619/3570/3105 \nf 3676/3626/3162 3620/3571/3106 3621/3572/3107 \nf 3676/3626/3162 3675/3625/3161 3620/3571/3106 \nf 3677/3627/3163 3621/3572/3107 3622/3573/3108 \nf 3677/3627/3163 3676/3626/3162 3621/3572/3107 \nf 3678/3628/3164 3622/3573/3108 3623/3574/3109 \nf 3678/3628/3164 3677/3627/3163 3622/3573/3108 \nf 3679/3629/3165 3623/3574/3109 3624/3575/3110 \nf 3679/3629/3165 3678/3628/3164 3623/3574/3109 \nf 3680/3630/3166 3624/3575/3110 3625/3576/3111 \nf 3680/3630/3166 3679/3629/3165 3624/3575/3110 \nf 3681/3631/3167 3625/3576/3111 3626/3577/3112 \nf 3681/3631/3167 3680/3630/3166 3625/3576/3111 \nf 3682/3632/3168 3626/3577/3112 3627/3578/3113 \nf 3682/3632/3168 3681/3631/3167 3626/3577/3112 \nf 3683/3633/3169 3627/3578/3113 3628/3579/3114 \nf 3683/3633/3169 3682/3632/3168 3627/3578/3113 \nf 3684/3634/3170 3628/3579/3114 3629/3580/3115 \nf 3684/3634/3170 3683/3633/3169 3628/3579/3114 \nf 3685/3635/3171 3629/3580/3115 3630/3581/3116 \nf 3685/3635/3171 3684/3634/3170 3629/3580/3115 \nf 3686/3636/3172 3630/3581/3116 3631/3582/3117 \nf 3686/3636/3172 3685/3635/3171 3630/3581/3116 \nf 3687/3637/3173 3631/3582/3117 3632/3583/3118 \nf 3687/3637/3173 3686/3636/3172 3631/3582/3117 \nf 3688/3638/3174 3632/3583/3118 3633/3584/3119 \nf 3688/3638/3174 3687/3637/3173 3632/3583/3118 \nf 3689/3639/3175 3633/3584/3119 3634/3585/3120 \nf 3689/3639/3175 3688/3638/3174 3633/3584/3119 \nf 3690/3640/3176 3634/3585/3120 3635/3586/3121 \nf 3690/3640/3176 3689/3639/3175 3634/3585/3120 \nf 3691/3641/3177 3635/3586/3121 3636/3587/3122 \nf 3691/3641/3177 3690/3640/3176 3635/3586/3121 \nf 3692/3642/3178 3636/3587/3122 3637/3588/3123 \nf 3692/3642/3178 3691/3641/3177 3636/3587/3122 \nf 3693/3643/3179 3637/3588/3123 3638/3589/3124 \nf 3693/3643/3179 3692/3642/3178 3637/3588/3123 \nf 3694/3644/3180 3638/3589/3124 3639/3590/3125 \nf 3694/3644/3180 3693/3643/3179 3638/3589/3124 \nf 3695/3645/3181 3639/3590/3125 3640/3591/3126 \nf 3695/3645/3181 3694/3644/3180 3639/3590/3125 \nf 3696/3646/3182 3640/3591/3126 3641/3592/3127 \nf 3696/3646/3182 3695/3645/3181 3640/3591/3126 \nf 3697/3647/3183 3641/3592/3127 3642/3593/3128 \nf 3697/3647/3183 3696/3646/3182 3641/3592/3127 \nf 3698/3648/3184 3642/3593/3128 3643/3594/3129 \nf 3698/3648/3184 3697/3647/3183 3642/3593/3128 \nf 3699/3649/3185 3643/3594/3129 3644/3595/3130 \nf 3699/3649/3185 3698/3648/3184 3643/3594/3129 \nf 3700/3650/3186 3644/3595/3130 3645/3596/3131 \nf 3700/3650/3186 3699/3649/3185 3644/3595/3130 \nf 3701/3651/3187 3645/3596/3131 3646/3597/3132 \nf 3701/3651/3187 3700/3650/3186 3645/3596/3131 \nf 3702/3652/3188 3646/3597/3132 3647/3598/3133 \nf 3702/3652/3188 3701/3651/3187 3646/3597/3132 \nf 3703/3653/3189 3647/3598/3133 3648/3599/3134 \nf 3703/3653/3189 3702/3652/3188 3647/3598/3133 \nf 3704/3654/3190 3648/3599/3134 3649/3600/3135 \nf 3704/3654/3190 3703/3653/3189 3648/3599/3134 \nf 3705/3655/3191 3649/3600/3135 3650/3601/3136 \nf 3705/3655/3191 3704/3654/3190 3649/3600/3135 \nf 3706/3656/3192 3650/3601/3136 3651/3602/3137 \nf 3706/3656/3192 3705/3655/3191 3650/3601/3136 \nf 3707/3657/3193 3651/3602/3137 3652/3603/3138 \nf 3707/3657/3193 3706/3656/3192 3651/3602/3137 \nf 3708/3658/3194 3652/3603/3138 3653/3604/3139 \nf 3708/3658/3194 3707/3657/3193 3652/3603/3138 \nf 3709/3659/3195 3653/3604/3139 3654/3605/3140 \nf 3709/3659/3195 3708/3658/3194 3653/3604/3139 \nf 3710/3660/3196 3654/3605/3140 3655/3606/3141 \nf 3710/3660/3196 3709/3659/3195 3654/3605/3140 \nf 3711/3661/3197 3655/3606/3141 3656/3607/3142 \nf 3711/3661/3197 3710/3660/3196 3655/3606/3141 \nf 3712/3662/3198 3656/3607/3142 3657/3608/3143 \nf 3712/3662/3198 3711/3661/3197 3656/3607/3142 \nf 3713/3663/3199 3657/3608/3143 3658/3609/3144 \nf 3713/3663/3199 3712/3662/3198 3657/3608/3143 \nf 3714/3664/3200 3658/3609/3144 3659/3610/3145 \nf 3714/3664/3200 3713/3663/3199 3658/3609/3144 \nf 3715/3665/3201 3659/3610/3145 3660/3611/3146 \nf 3715/3665/3201 3714/3664/3200 3659/3610/3145 \nf 3716/3666/3202 3660/3611/3146 3661/3612/3147 \nf 3716/3666/3202 3715/3665/3201 3660/3611/3146 \nf 3717/3667/3203 3661/3612/3147 3662/3613/3148 \nf 3717/3667/3203 3716/3666/3202 3661/3612/3147 \nf 3718/3668/3204 3662/3613/3148 3664/3615/3150 \nf 3718/3668/3204 3717/3667/3203 3662/3613/3148 \nf 3665/3614/3151 3719/3669/3205 3664/3615/3150 \nf 3720/3670/3206 3664/3615/3150 3719/3669/3205 \nf 3720/3670/3206 3718/3668/3204 3664/3615/3150 \nf 3666/3616/3152 3719/3669/3205 3665/3614/3151 \nf 3721/3671/3207 3720/3670/3206 3719/3669/3205 \nf 3722/3672/3208 3721/3671/3207 3719/3669/3205 \nf 3666/3616/3152 3722/3672/3208 3719/3669/3205 \nf 3498/3448/2983 3499/3449/2984 3667/3617/3153 \nf 3723/3673/3209 3667/3617/3153 3668/3618/3154 \nf 3723/3673/3209 3498/3448/2983 3667/3617/3153 \nf 3724/3674/3210 3668/3618/3154 3669/3619/3155 \nf 3724/3674/3210 3723/3673/3209 3668/3618/3154 \nf 3725/3675/3211 3669/3619/3155 3670/3620/3156 \nf 3725/3675/3211 3724/3674/3210 3669/3619/3155 \nf 3726/3676/3212 3670/3620/3156 3671/3621/3157 \nf 3726/3676/3212 3725/3675/3211 3670/3620/3156 \nf 3727/3677/3213 3671/3621/3157 3672/3622/3158 \nf 3727/3677/3213 3726/3676/3212 3671/3621/3157 \nf 3728/3678/3214 3672/3622/3158 3673/3623/3159 \nf 3728/3678/3214 3727/3677/3213 3672/3622/3158 \nf 3729/3679/3215 3673/3623/3159 3674/3624/3160 \nf 3729/3679/3215 3728/3678/3214 3673/3623/3159 \nf 3730/3680/3216 3674/3624/3160 3675/3625/3161 \nf 3730/3680/3216 3729/3679/3215 3674/3624/3160 \nf 3731/3681/3217 3675/3625/3161 3676/3626/3162 \nf 3731/3681/3217 3730/3680/3216 3675/3625/3161 \nf 3732/3682/3218 3676/3626/3162 3677/3627/3163 \nf 3732/3682/3218 3731/3681/3217 3676/3626/3162 \nf 3733/3683/3219 3677/3627/3163 3678/3628/3164 \nf 3733/3683/3219 3732/3682/3218 3677/3627/3163 \nf 3734/3684/3220 3678/3628/3164 3679/3629/3165 \nf 3734/3684/3220 3733/3683/3219 3678/3628/3164 \nf 3735/3685/3221 3679/3629/3165 3680/3630/3166 \nf 3735/3685/3221 3734/3684/3220 3679/3629/3165 \nf 3736/3686/3222 3680/3630/3166 3681/3631/3167 \nf 3736/3686/3222 3735/3685/3221 3680/3630/3166 \nf 3737/3687/3223 3681/3631/3167 3682/3632/3168 \nf 3737/3687/3223 3736/3686/3222 3681/3631/3167 \nf 3738/3688/3224 3682/3632/3168 3683/3633/3169 \nf 3738/3688/3224 3737/3687/3223 3682/3632/3168 \nf 3739/3689/3225 3683/3633/3169 3684/3634/3170 \nf 3739/3689/3225 3738/3688/3224 3683/3633/3169 \nf 3740/3690/3226 3684/3634/3170 3685/3635/3171 \nf 3740/3690/3226 3739/3689/3225 3684/3634/3170 \nf 3741/3691/3227 3685/3635/3171 3686/3636/3172 \nf 3741/3691/3227 3740/3690/3226 3685/3635/3171 \nf 3742/3692/3228 3686/3636/3172 3687/3637/3173 \nf 3742/3692/3228 3741/3691/3227 3686/3636/3172 \nf 3743/3693/3229 3687/3637/3173 3688/3638/3174 \nf 3743/3693/3229 3742/3692/3228 3687/3637/3173 \nf 3744/3694/3230 3688/3638/3174 3689/3639/3175 \nf 3744/3694/3230 3743/3693/3229 3688/3638/3174 \nf 3745/3695/3231 3689/3639/3175 3690/3640/3176 \nf 3745/3695/3231 3744/3694/3230 3689/3639/3175 \nf 3746/3696/3232 3690/3640/3176 3691/3641/3177 \nf 3746/3696/3232 3745/3695/3231 3690/3640/3176 \nf 3747/3697/3233 3691/3641/3177 3692/3642/3178 \nf 3747/3697/3233 3746/3696/3232 3691/3641/3177 \nf 3748/3698/3234 3692/3642/3178 3693/3643/3179 \nf 3748/3698/3234 3747/3697/3233 3692/3642/3178 \nf 3749/3699/3235 3693/3643/3179 3694/3644/3180 \nf 3749/3699/3235 3748/3698/3234 3693/3643/3179 \nf 3750/3700/3236 3694/3644/3180 3695/3645/3181 \nf 3750/3700/3236 3749/3699/3235 3694/3644/3180 \nf 3751/3701/3237 3695/3645/3181 3696/3646/3182 \nf 3751/3701/3237 3750/3700/3236 3695/3645/3181 \nf 3752/3702/3238 3696/3646/3182 3697/3647/3183 \nf 3752/3702/3238 3751/3701/3237 3696/3646/3182 \nf 3753/3703/3239 3697/3647/3183 3698/3648/3184 \nf 3753/3703/3239 3752/3702/3238 3697/3647/3183 \nf 3754/3704/3240 3698/3648/3184 3699/3649/3185 \nf 3754/3704/3240 3753/3703/3239 3698/3648/3184 \nf 3755/3705/3241 3699/3649/3185 3700/3650/3186 \nf 3755/3705/3241 3754/3704/3240 3699/3649/3185 \nf 3756/3706/3242 3700/3650/3186 3701/3651/3187 \nf 3756/3706/3242 3755/3705/3241 3700/3650/3186 \nf 3757/3707/3243 3701/3651/3187 3702/3652/3188 \nf 3757/3707/3243 3756/3706/3242 3701/3651/3187 \nf 3758/3708/3244 3702/3652/3188 3703/3653/3189 \nf 3758/3708/3244 3757/3707/3243 3702/3652/3188 \nf 3759/3709/3245 3703/3653/3189 3704/3654/3190 \nf 3759/3709/3245 3758/3708/3244 3703/3653/3189 \nf 3760/3710/3246 3704/3654/3190 3705/3655/3191 \nf 3760/3710/3246 3759/3709/3245 3704/3654/3190 \nf 3761/3711/3247 3705/3655/3191 3706/3656/3192 \nf 3761/3711/3247 3760/3710/3246 3705/3655/3191 \nf 3762/3712/3248 3706/3656/3192 3707/3657/3193 \nf 3762/3712/3248 3761/3711/3247 3706/3656/3192 \nf 3763/3713/3249 3707/3657/3193 3708/3658/3194 \nf 3763/3713/3249 3762/3712/3248 3707/3657/3193 \nf 3764/3714/3250 3708/3658/3194 3709/3659/3195 \nf 3764/3714/3250 3763/3713/3249 3708/3658/3194 \nf 3765/3715/3251 3709/3659/3195 3710/3660/3196 \nf 3765/3715/3251 3764/3714/3250 3709/3659/3195 \nf 3766/3716/3252 3710/3660/3196 3711/3661/3197 \nf 3766/3716/3252 3765/3715/3251 3710/3660/3196 \nf 3767/3717/3253 3711/3661/3197 3712/3662/3198 \nf 3767/3717/3253 3766/3716/3252 3711/3661/3197 \nf 3768/3718/3254 3712/3662/3198 3713/3663/3199 \nf 3768/3718/3254 3767/3717/3253 3712/3662/3198 \nf 3769/3719/3255 3713/3663/3199 3714/3664/3200 \nf 3769/3719/3255 3768/3718/3254 3713/3663/3199 \nf 3770/3720/3256 3714/3664/3200 3715/3665/3201 \nf 3770/3720/3256 3769/3719/3255 3714/3664/3200 \nf 3771/3721/3257 3715/3665/3201 3716/3666/3202 \nf 3771/3721/3257 3770/3720/3256 3715/3665/3201 \nf 3772/3722/3258 3716/3666/3202 3717/3667/3203 \nf 3772/3722/3258 3771/3721/3257 3716/3666/3202 \nf 3773/3723/3259 3717/3667/3203 3718/3668/3204 \nf 3773/3723/3259 3772/3722/3258 3717/3667/3203 \nf 3774/3724/3260 3718/3668/3204 3720/3670/3206 \nf 3774/3724/3260 3773/3723/3259 3718/3668/3204 \nf 3721/3671/3207 3775/3725/3261 3720/3670/3206 \nf 3776/3726/3262 3720/3670/3206 3775/3725/3261 \nf 3776/3726/3262 3774/3724/3260 3720/3670/3206 \nf 3722/3672/3208 3775/3725/3261 3721/3671/3207 \nf 3777/3727/3263 3776/3726/3262 3775/3725/3261 \nf 3778/3728/3264 3777/3727/3263 3775/3725/3261 \nf 3722/3672/3208 3778/3728/3264 3775/3725/3261 \nf 3497/3447/2982 3498/3448/2983 3723/3673/3209 \nf 3779/3729/3265 3723/3673/3209 3724/3674/3210 \nf 3779/3729/3265 3497/3447/2982 3723/3673/3209 \nf 3780/3730/3266 3724/3674/3210 3725/3675/3211 \nf 3780/3730/3266 3779/3729/3265 3724/3674/3210 \nf 3781/3731/3267 3725/3675/3211 3726/3676/3212 \nf 3781/3731/3267 3780/3730/3266 3725/3675/3211 \nf 3782/3732/3268 3726/3676/3212 3727/3677/3213 \nf 3782/3732/3268 3781/3731/3267 3726/3676/3212 \nf 3783/3733/3269 3727/3677/3213 3728/3678/3214 \nf 3783/3733/3269 3782/3732/3268 3727/3677/3213 \nf 3784/3734/3270 3728/3678/3214 3729/3679/3215 \nf 3784/3734/3270 3783/3733/3269 3728/3678/3214 \nf 3785/3735/3271 3729/3679/3215 3730/3680/3216 \nf 3785/3735/3271 3784/3734/3270 3729/3679/3215 \nf 3786/3736/3272 3730/3680/3216 3731/3681/3217 \nf 3786/3736/3272 3785/3735/3271 3730/3680/3216 \nf 3787/3737/3273 3731/3681/3217 3732/3682/3218 \nf 3787/3737/3273 3786/3736/3272 3731/3681/3217 \nf 3788/3738/3274 3732/3682/3218 3733/3683/3219 \nf 3788/3738/3274 3787/3737/3273 3732/3682/3218 \nf 3789/3739/3275 3733/3683/3219 3734/3684/3220 \nf 3789/3739/3275 3788/3738/3274 3733/3683/3219 \nf 3790/3740/3276 3734/3684/3220 3735/3685/3221 \nf 3790/3740/3276 3789/3739/3275 3734/3684/3220 \nf 3791/3741/3277 3735/3685/3221 3736/3686/3222 \nf 3791/3741/3277 3790/3740/3276 3735/3685/3221 \nf 3792/3742/3278 3736/3686/3222 3737/3687/3223 \nf 3792/3742/3278 3791/3741/3277 3736/3686/3222 \nf 3793/3743/3279 3737/3687/3223 3738/3688/3224 \nf 3793/3743/3279 3792/3742/3278 3737/3687/3223 \nf 3794/3744/3280 3738/3688/3224 3739/3689/3225 \nf 3794/3744/3280 3793/3743/3279 3738/3688/3224 \nf 3795/3745/3281 3739/3689/3225 3740/3690/3226 \nf 3795/3745/3281 3794/3744/3280 3739/3689/3225 \nf 3796/3746/3282 3740/3690/3226 3741/3691/3227 \nf 3796/3746/3282 3795/3745/3281 3740/3690/3226 \nf 3797/3747/3283 3741/3691/3227 3742/3692/3228 \nf 3797/3747/3283 3796/3746/3282 3741/3691/3227 \nf 3798/3748/3284 3742/3692/3228 3743/3693/3229 \nf 3798/3748/3284 3797/3747/3283 3742/3692/3228 \nf 1195/1190/683 3743/3693/3229 3744/3694/3230 \nf 1195/1190/683 3798/3748/3284 3743/3693/3229 \nf 1190/1185/678 3744/3694/3230 3745/3695/3231 \nf 1190/1185/678 1195/1190/683 3744/3694/3230 \nf 1186/1181/674 3745/3695/3231 3746/3696/3232 \nf 1186/1181/674 1190/1185/678 3745/3695/3231 \nf 1182/1177/670 3746/3696/3232 3747/3697/3233 \nf 1182/1177/670 1186/1181/674 3746/3696/3232 \nf 1180/1175/668 3747/3697/3233 3748/3698/3234 \nf 1180/1175/668 1182/1177/670 3747/3697/3233 \nf 1177/1172/665 3748/3698/3234 3749/3699/3235 \nf 1177/1172/665 1180/1175/668 3748/3698/3234 \nf 1174/1169/662 3749/3699/3235 3750/3700/3236 \nf 1174/1169/662 1177/1172/665 3749/3699/3235 \nf 1171/1166/659 3750/3700/3236 3751/3701/3237 \nf 1171/1166/659 1174/1169/662 3750/3700/3236 \nf 1168/1163/656 3751/3701/3237 3752/3702/3238 \nf 1168/1163/656 1171/1166/659 3751/3701/3237 \nf 1165/1160/653 3752/3702/3238 3753/3703/3239 \nf 1165/1160/653 1168/1163/656 3752/3702/3238 \nf 1162/1157/649 3753/3703/3239 3754/3704/3240 \nf 1162/1157/649 1165/1160/653 3753/3703/3239 \nf 1159/1154/646 3754/3704/3240 3755/3705/3241 \nf 1159/1154/646 1162/1157/649 3754/3704/3240 \nf 1156/1151/643 3755/3705/3241 3756/3706/3242 \nf 1156/1151/643 1159/1154/646 3755/3705/3241 \nf 1153/1148/640 3756/3706/3242 3757/3707/3243 \nf 1153/1148/640 1156/1151/643 3756/3706/3242 \nf 1150/1145/637 3757/3707/3243 3758/3708/3244 \nf 1150/1145/637 1153/1148/640 3757/3707/3243 \nf 1147/1142/634 3758/3708/3244 3759/3709/3245 \nf 1147/1142/634 1150/1145/637 3758/3708/3244 \nf 1144/1139/631 3759/3709/3245 3760/3710/3246 \nf 1144/1139/631 1147/1142/634 3759/3709/3245 \nf 1141/1136/628 3760/3710/3246 3761/3711/3247 \nf 1141/1136/628 1144/1139/631 3760/3710/3246 \nf 1138/1133/625 3761/3711/3247 3762/3712/3248 \nf 1138/1133/625 1141/1136/628 3761/3711/3247 \nf 1135/1130/622 3762/3712/3248 3763/3713/3249 \nf 1135/1130/622 1138/1133/625 3762/3712/3248 \nf 1132/1127/619 3763/3713/3249 3764/3714/3250 \nf 1132/1127/619 1135/1130/622 3763/3713/3249 \nf 1129/1124/616 3764/3714/3250 3765/3715/3251 \nf 1129/1124/616 1132/1127/619 3764/3714/3250 \nf 1126/1121/613 3765/3715/3251 3766/3716/3252 \nf 1126/1121/613 1129/1124/616 3765/3715/3251 \nf 1123/1118/610 3766/3716/3252 3767/3717/3253 \nf 1123/1118/610 1126/1121/613 3766/3716/3252 \nf 1120/1115/607 3767/3717/3253 3768/3718/3254 \nf 1120/1115/607 1123/1118/610 3767/3717/3253 \nf 1117/1112/604 3768/3718/3254 3769/3719/3255 \nf 1117/1112/604 1120/1115/607 3768/3718/3254 \nf 1114/1109/601 3769/3719/3255 3770/3720/3256 \nf 1114/1109/601 1117/1112/604 3769/3719/3255 \nf 1111/1106/598 3770/3720/3256 3771/3721/3257 \nf 1111/1106/598 1114/1109/601 3770/3720/3256 \nf 1108/1103/595 3771/3721/3257 3772/3722/3258 \nf 1108/1103/595 1111/1106/598 3771/3721/3257 \nf 1105/1100/592 3772/3722/3258 3773/3723/3259 \nf 1105/1100/592 1108/1103/595 3772/3722/3258 \nf 1102/1097/589 3773/3723/3259 3774/3724/3260 \nf 1102/1097/589 1105/1100/592 3773/3723/3259 \nf 1099/1094/586 3774/3724/3260 3776/3726/3262 \nf 1099/1094/586 1102/1097/589 3774/3724/3260 \nf 3777/3727/3263 3799/3749/3285 3776/3726/3262 \nf 1096/1085/583 3776/3726/3262 3799/3749/3285 \nf 1096/1085/583 1099/1094/586 3776/3726/3262 \nf 3778/3728/3264 3799/3749/3285 3777/3727/3263 \nf 3800/3750/3286 1096/1085/583 3799/3749/3285 \nf 1792/1770/1250 3800/3750/3286 3799/3749/3285 \nf 3778/3728/3264 1792/1770/1250 3799/3749/3285 \nf 1273/1267/760 3497/3447/2982 3779/3729/3265 \nf 1273/1267/760 1277/1271/764 3497/3447/2982 \nf 1269/1263/756 3779/3729/3265 3780/3730/3266 \nf 1269/1263/756 1273/1267/760 3779/3729/3265 \nf 1265/1259/752 3780/3730/3266 3781/3731/3267 \nf 1265/1259/752 1269/1263/756 3780/3730/3266 \nf 1261/1255/748 3781/3731/3267 3782/3732/3268 \nf 1261/1255/748 1265/1259/752 3781/3731/3267 \nf 1259/1253/746 3782/3732/3268 3783/3733/3269 \nf 1259/1253/746 1261/1255/748 3782/3732/3268 \nf 1255/1249/742 3783/3733/3269 3784/3734/3270 \nf 1255/1249/742 1259/1253/746 3783/3733/3269 \nf 1251/1245/738 3784/3734/3270 3785/3735/3271 \nf 1251/1245/738 1255/1249/742 3784/3734/3270 \nf 1247/1241/734 3785/3735/3271 3786/3736/3272 \nf 1247/1241/734 1251/1245/738 3785/3735/3271 \nf 1243/1237/730 3786/3736/3272 3787/3737/3273 \nf 1243/1237/730 1247/1241/734 3786/3736/3272 \nf 1239/1233/726 3787/3737/3273 3788/3738/3274 \nf 1239/1233/726 1243/1237/730 3787/3737/3273 \nf 1235/1229/722 3788/3738/3274 3789/3739/3275 \nf 1235/1229/722 1239/1233/726 3788/3738/3274 \nf 1232/1226/719 3789/3739/3275 3790/3740/3276 \nf 1232/1226/719 1235/1229/722 3789/3739/3275 \nf 1228/1222/715 3790/3740/3276 3791/3741/3277 \nf 1228/1222/715 1232/1226/719 3790/3740/3276 \nf 1224/1218/711 3791/3741/3277 3792/3742/3278 \nf 1224/1218/711 1228/1222/715 3791/3741/3277 \nf 1220/1214/707 3792/3742/3278 3793/3743/3279 \nf 1220/1214/707 1224/1218/711 3792/3742/3278 \nf 1216/1210/703 3793/3743/3279 3794/3744/3280 \nf 1216/1210/703 1220/1214/707 3793/3743/3279 \nf 1212/1206/699 3794/3744/3280 3795/3745/3281 \nf 1212/1206/699 1216/1210/703 3794/3744/3280 \nf 1208/1202/695 3795/3745/3281 3796/3746/3282 \nf 1208/1202/695 1212/1206/699 3795/3745/3281 \nf 1204/1198/691 3796/3746/3282 3797/3747/3283 \nf 1204/1198/691 1208/1202/695 3796/3746/3282 \nf 1202/1194/689 3797/3747/3283 3798/3748/3284 \nf 1202/1194/689 1204/1198/691 3797/3747/3283 \nf 1194/1189/682 3798/3748/3284 1195/1190/683 \nf 1194/1189/682 1202/1194/689 3798/3748/3284 \nf 3800/3750/3286 1091/1087/581 1096/1085/583 \nf 1792/1770/1250 1091/1087/581 3800/3750/3286 \nf 3801/3672/3287 1792/1770/1250 3778/3728/3264 \nf 1793/1771/1251 1792/1770/1250 3801/3672/3287 \nf 3802/3751/3288 3778/3728/3264 3722/3672/3208 \nf 3801/3672/3287 3778/3728/3264 3802/3751/3288 \nf 3803/3752/3289 3722/3672/3208 3666/3616/3152 \nf 3802/3751/3288 3722/3672/3208 3803/3752/3289 \nf 3804/3753/3290 3666/3616/3152 3610/3560/3095 \nf 3803/3752/3289 3666/3616/3152 3804/3753/3290 \nf 3805/3754/3291 3610/3560/3095 1066/1062/567 \nf 3804/3753/3290 3610/3560/3095 3805/3754/3291 \nf 3805/3754/3291 1066/1062/567 1070/1066/570 \nf 1772/1750/1234 3806/3755/3292 1774/1752/1235 \nf 3807/3756/3293 1774/1752/1236 3806/3755/3292 \nf 3807/3756/3293 1773/1751/311 1774/1752/1236 \nf 3808/3757/3294 3809/3758/3295 3806/3755/3292 \nf 3810/3759/3296 3806/3755/3292 3809/3758/3297 \nf 3811/3760/3298 3808/3757/3294 3806/3755/3292 \nf 1772/1750/1234 3811/3760/3298 3806/3755/3292 \nf 3807/3756/3293 3806/3755/3292 3810/3759/3296 \nf 3812/3757/3299 3813/3761/3300 3809/3758/3295 \nf 3810/3759/3296 3809/3758/3297 3813/3761/3301 \nf 3808/3757/3294 3812/3757/3299 3809/3758/3295 \nf 3814/3762/3302 3815/3763/3303 3813/3761/3300 \nf 3816/3764/3304 3813/3761/3301 3815/3763/3303 \nf 3812/3757/3299 3814/3762/3302 3813/3761/3300 \nf 3810/3759/3296 3813/3761/3301 3816/3764/3304 \nf 3817/3765/3305 3818/3766/3306 3815/3763/3303 \nf 3816/3764/3304 3815/3763/3303 3818/3766/3307 \nf 3819/3767/3308 3817/3765/3305 3815/3763/3303 \nf 3814/3762/3302 3819/3767/3308 3815/3763/3303 \nf 3820/3768/3309 3818/3766/3310 3818/3766/3306 \nf 3821/3769/3311 3818/3766/3307 3818/3766/3310 \nf 3817/3765/3305 3820/3768/3309 3818/3766/3306 \nf 3822/3770/3312 3818/3766/3307 3821/3769/3311 \nf 3816/3764/3304 3818/3766/3307 3822/3770/3312 \nf 3823/3771/3313 3824/3772/3314 3818/3766/3310 \nf 3825/3773/3315 3818/3766/3310 3824/3772/3314 \nf 3826/3774/3316 3823/3771/3313 3818/3766/3310 \nf 3820/3768/3309 3826/3774/3316 3818/3766/3310 \nf 3821/3769/3311 3818/3766/3310 3825/3773/3315 \nf 3827/3775/3317 3828/3776/3318 3824/3772/3314 \nf 3825/3773/3315 3824/3772/3314 3828/3776/3319 \nf 3829/3777/3320 3827/3775/3317 3824/3772/3314 \nf 3823/3771/3313 3829/3777/3320 3824/3772/3314 \nf 3830/3778/3321 3831/3779/3322 3828/3776/3318 \nf 3832/3780/3323 3828/3776/3319 3831/3779/3324 \nf 3827/3775/3317 3830/3778/3321 3828/3776/3318 \nf 3825/3773/3315 3828/3776/3319 3832/3780/3323 \nf 3833/3781/3325 3834/3782/3326 3831/3779/3322 \nf 3835/3783/3327 3831/3779/3324 3834/3782/3326 \nf 3836/3784/3328 3833/3781/3325 3831/3779/3322 \nf 3830/3778/3321 3836/3784/3328 3831/3779/3322 \nf 3832/3780/3323 3831/3779/3324 3835/3783/3327 \nf 3837/3785/3329 3838/3786/3330 3834/3782/3326 \nf 3835/3783/3327 3834/3782/3326 3838/3786/3331 \nf 3839/3787/3332 3837/3785/3329 3834/3782/3326 \nf 3833/3781/3325 3839/3787/3332 3834/3782/3326 \nf 3840/3788/3333 3841/3789/3334 3838/3786/3330 \nf 3842/3790/3335 3838/3786/3331 3841/3789/3334 \nf 3837/3785/3329 3840/3788/3333 3838/3786/3330 \nf 3843/3791/3336 3838/3786/3331 3842/3790/3335 \nf 3835/3783/3327 3838/3786/3331 3843/3791/3336 \nf 3844/3792/3337 336/333/143 3841/3789/3334 \nf 3842/3790/3335 3841/3789/3334 336/333/143 \nf 3840/3788/3333 3844/3792/3337 3841/3789/3334 \nf 2493/2465/1940 2945/2897/2429 3845/3793/3338 \nf 3846/3794/3339 540/537/277 336/333/143 \nf 3844/3792/3337 3846/3794/3339 336/333/143 \nf 3847/3795/3340 336/333/143 337/334/144 \nf 3842/3790/3335 336/333/143 3847/3795/3340 \nf 3844/3792/3341 540/537/279 3846/3794/3342 \nf 541/538/278 540/537/279 3844/3792/3341 \nf 3848/3796/3343 3844/3792/3341 3840/3788/3344 \nf 3848/3796/3343 541/538/278 3844/3792/3341 \nf 3845/3793/3338 2945/2897/2429 3849/3797/3345 \nf 3850/3798/3346 3840/3788/3344 3837/3785/3347 \nf 3848/3796/3343 3840/3788/3344 3850/3798/3346 \nf 3833/3781/3348 3837/3785/3347 3839/3787/3332 \nf 3851/3799/3349 3837/3785/3347 3833/3781/3348 \nf 3850/3798/3346 3837/3785/3347 3851/3799/3349 \nf 3830/3778/3350 3833/3781/3348 3836/3784/3328 \nf 3852/3800/3351 3833/3781/3348 3830/3778/3350 \nf 3851/3799/3349 3833/3781/3348 3852/3800/3351 \nf 3829/3777/3352 3830/3778/3350 3827/3775/3353 \nf 3823/3771/3354 3830/3778/3350 3829/3777/3352 \nf 3853/3801/3355 3830/3778/3350 3823/3771/3354 \nf 3852/3800/3351 3830/3778/3350 3853/3801/3355 \nf 3820/3768/3356 3823/3771/3354 3826/3774/3357 \nf 3817/3765/3358 3823/3771/3354 3820/3768/3356 \nf 3854/3802/3359 3823/3771/3354 3817/3765/3358 \nf 3853/3801/3355 3823/3771/3354 3854/3802/3359 \nf 3814/3762/3302 3817/3765/3358 3819/3767/3308 \nf 3855/3803/3360 3817/3765/3358 3814/3762/3302 \nf 3854/3802/3359 3817/3765/3358 3855/3803/3360 \nf 3855/3803/3360 3814/3762/3302 3812/3757/3361 \nf 3855/3803/3360 3812/3757/3361 3808/3757/3362 \nf 1772/1750/1238 3808/3757/3362 3811/3760/3363 \nf 1776/1754/1237 3808/3757/3362 1772/1750/1238 \nf 3855/3803/3360 3808/3757/3362 1776/1754/1237 \nf 3856/3804/1503 3857/3805/1503 536/533/60 \nf 3858/3806/3364 536/533/59 3857/3805/1469 \nf 538/535/60 3856/3804/1503 536/533/60 \nf 3858/3806/3364 534/531/276 536/533/59 \nf 3859/3807/1501 3860/3808/1501 3857/3805/1503 \nf 3861/3809/3365 3857/3805/1469 3860/3808/1472 \nf 3856/3804/1503 3859/3807/1501 3857/3805/1503 \nf 3861/3809/3365 3858/3806/3364 3857/3805/1469 \nf 3862/3810/1499 3863/3811/1499 3860/3808/1501 \nf 3864/3812/3366 3860/3808/1472 3863/3811/1475 \nf 3859/3807/1501 3862/3810/1499 3860/3808/1501 \nf 3864/3812/3366 3861/3809/3365 3860/3808/1472 \nf 3865/3813/1497 3866/3814/1497 3863/3811/1499 \nf 3867/3815/3367 3863/3811/1475 3866/3814/1478 \nf 3862/3810/1499 3865/3813/1497 3863/3811/1499 \nf 3867/3815/3367 3864/3812/3366 3863/3811/1475 \nf 3868/3816/1495 3869/3817/1495 3866/3814/1497 \nf 3870/3818/3368 3866/3814/1478 3869/3817/1481 \nf 3865/3813/1497 3868/3816/1495 3866/3814/1497 \nf 3870/3818/3368 3867/3815/3367 3866/3814/1478 \nf 3871/3819/1493 3872/3820/1493 3869/3817/1495 \nf 3870/3818/3368 3869/3817/1481 3872/3820/1484 \nf 3868/3816/1495 3871/3819/1493 3869/3817/1495 \nf 3873/3821/1492 3874/3822/1492 3872/3820/1493 \nf 3875/3823/3369 3872/3820/1484 3874/3822/1489 \nf 3871/3819/1493 3873/3821/1492 3872/3820/1493 \nf 3875/3823/3369 3870/3818/3368 3872/3820/1484 \nf 3876/3824/1490 3877/3825/1490 3874/3822/1492 \nf 3878/3826/3370 3874/3822/1489 3877/3825/1487 \nf 3873/3821/1492 3876/3824/1490 3874/3822/1492 \nf 3878/3826/3370 3875/3823/3369 3874/3822/1489 \nf 1690/1668/1184 1688/1666/1184 3877/3825/1490 \nf 3879/3827/3371 3877/3825/1487 1688/1666/1185 \nf 3876/3824/1490 1690/1668/1184 3877/3825/1490 \nf 3879/3827/3371 3878/3826/3370 3877/3825/1487 \nf 1674/1652/1160 3879/3827/3371 1688/1666/1185 \nf 3880/3828/1156 1690/1668/1185 3876/3824/1487 \nf 3880/3828/1156 1689/1667/1154 1690/1668/1185 \nf 3880/3828/1156 3876/3824/1487 3873/3821/1489 \nf 3881/3829/3372 3873/3821/1489 3871/3819/1484 \nf 3881/3829/3372 3880/3828/1156 3873/3821/1489 \nf 3882/3830/3373 3871/3819/1484 3868/3816/1481 \nf 3882/3830/3373 3881/3829/3372 3871/3819/1484 \nf 3883/3831/3374 3868/3816/1481 3865/3813/1478 \nf 3883/3831/3374 3882/3830/3373 3868/3816/1481 \nf 3884/3832/3375 3865/3813/1478 3862/3810/1475 \nf 3884/3832/3375 3883/3831/3374 3865/3813/1478 \nf 3885/3833/3376 3862/3810/1475 3859/3807/1472 \nf 3885/3833/3376 3884/3832/3375 3862/3810/1475 \nf 3886/3834/3377 3859/3807/1472 3856/3804/1469 \nf 3886/3834/3377 3885/3833/3376 3859/3807/1472 \nf 539/536/141 3856/3804/1469 538/535/59 \nf 539/536/141 3886/3834/3377 3856/3804/1469 \nf 535/532/3378 534/531/272 3858/3806/3379 \nf 535/532/3378 535/532/273 534/531/272 \nf 3887/3835/3380 3858/3806/3379 3861/3809/3381 \nf 3888/3836/3382 535/532/3378 3858/3806/3379 \nf 3887/3835/3380 3888/3836/3382 3858/3806/3379 \nf 3889/3837/3383 3861/3809/3381 3864/3812/3384 \nf 3889/3837/3383 3887/3835/3380 3861/3809/3381 \nf 3890/3838/3385 3864/3812/3384 3867/3815/3386 \nf 3890/3838/3385 3889/3837/3383 3864/3812/3384 \nf 3891/3839/3387 3867/3815/3386 3870/3818/3388 \nf 3890/3838/3389 3890/3838/3385 3867/3815/3386 \nf 3891/3839/3387 3890/3838/3389 3867/3815/3386 \nf 3892/3840/3390 3870/3818/3388 3875/3823/3391 \nf 3892/3840/3390 3891/3839/3387 3870/3818/3388 \nf 3893/68/3392 3875/3823/3391 3878/3826/3393 \nf 3894/3841/3394 3892/3840/3390 3875/3823/3391 \nf 3893/68/3392 3894/3841/3394 3875/3823/3391 \nf 3895/3842/3395 3878/3826/3393 3879/3827/3396 \nf 3895/3842/3395 3893/68/3392 3878/3826/3393 \nf 1673/1651/1159 3879/3827/3396 1674/1652/1161 \nf 3896/3843/3397 3895/3842/3395 3879/3827/3396 \nf 1673/1651/1159 3896/3843/3397 3879/3827/3396 \nf 3897/3844/3398 535/532/274 3888/3836/3382 \nf 3897/3844/3398 533/530/141 535/532/274 \nf 3897/3844/3398 3888/3836/3382 3887/3835/3399 \nf 3845/3793/3338 3887/3835/3399 3889/3837/3400 \nf 3897/3844/3398 3887/3835/3399 3849/3797/3345 \nf 3845/3793/3338 3849/3797/3345 3887/3835/3399 \nf 3845/3793/3338 3889/3837/3400 3890/3838/3385 \nf 3845/3793/3338 3890/3838/3385 3890/3838/3401 \nf 2487/2459/1934 3890/3838/3401 3891/3839/3387 \nf 2493/2465/1940 3890/3838/3401 2487/2459/1934 \nf 2493/2465/1940 3845/3793/3338 3890/3838/3401 \nf 2487/2459/1934 3891/3839/3387 3892/3840/3390 \nf 2487/2459/1934 3892/3840/3390 3894/3841/3394 \nf 2709/2671/2188 3894/3841/3394 3893/68/3392 \nf 2018/1991/1459 3894/3841/3394 2709/2671/2188 \nf 2018/1991/1459 2487/2459/1934 3894/3841/3394 \nf 2709/2671/2188 3893/68/3392 3895/3842/3395 \nf 2709/2671/2188 3895/3842/3395 3896/3843/3402 \nf 1675/1653/1163 3896/3843/3402 1673/1651/1164 \nf 2704/2666/2184 3896/3843/3402 1675/1653/1163 \nf 2704/2666/2184 2709/2671/2188 3896/3843/3402 \nf 3898/1654/3403 49/46/1162 50/47/3404 \nf 3898/1654/3403 1676/1654/1165 49/46/1162 \nf 3899/3845/3405 50/47/3404 51/48/3406 \nf 3900/3846/3407 3898/1654/3403 50/47/3404 \nf 3899/3845/3405 3900/3846/3407 50/47/3404 \nf 3901/3847/3408 51/48/3406 52/49/3409 \nf 3902/3848/3410 3899/3845/3405 51/48/3406 \nf 3901/3847/3408 3902/3848/3410 51/48/3406 \nf 3903/3842/3411 52/49/3409 53/50/1454 \nf 3904/3849/3412 3901/3847/3408 52/49/3409 \nf 3903/3842/3411 3904/3849/3412 52/49/3409 \nf 3905/1988/3413 3903/3842/3411 53/50/1454 \nf 2015/1988/1453 3905/1988/3413 53/50/1454 \nf 1677/1655/1166 1676/1654/1165 3898/1654/3414 \nf 2495/2467/1942 3898/1654/3414 3900/3846/3415 \nf 2495/2467/1942 1677/1655/1166 3898/1654/3414 \nf 2495/2467/1942 3900/3846/3415 3899/3845/3416 \nf 395/392/202 3899/3845/3416 3902/3848/3410 \nf 395/392/202 2495/2467/1942 3899/3845/3416 \nf 395/392/202 3902/3848/3410 3901/3847/3417 \nf 393/390/200 3901/3847/3417 3904/3849/3418 \nf 393/390/200 395/392/202 3901/3847/3417 \nf 393/390/200 3904/3849/3418 3903/3842/3419 \nf 3906/3850/3420 3903/3842/3419 3905/1988/3421 \nf 393/390/200 3903/3842/3419 3906/3850/3420 \nf 3906/3850/3420 3905/1988/3421 2015/1988/1455 \nf 3906/3850/3420 2015/1988/1455 1668/1646/1154 \nf 3907/1870/3422 1668/1646/1154 1669/1647/1156 \nf 3907/1870/3422 3906/3850/3420 1668/1646/1154 \nf 3908/3851/3423 3909/3852/3372 1669/1647/1156 \nf 3910/3853/3424 1669/1647/1156 3909/3852/3372 \nf 1670/1648/1157 3908/3851/3423 1669/1647/1156 \nf 3910/3853/3424 3907/1870/3422 1669/1647/1156 \nf 3911/3854/3425 3912/3855/3373 3909/3852/3372 \nf 3913/3856/3426 3909/3852/3372 3912/3855/3373 \nf 3914/3854/3427 3911/3854/3425 3909/3852/3372 \nf 3908/3851/3423 3914/3854/3427 3909/3852/3372 \nf 3913/3856/3426 3910/3853/3424 3909/3852/3372 \nf 3915/3854/3428 3916/3857/3374 3912/3855/3373 \nf 3917/3858/3429 3912/3855/3373 3916/3857/3374 \nf 3911/3854/3425 3915/3854/3428 3912/3855/3373 \nf 3917/3858/3429 3913/3856/3426 3912/3855/3373 \nf 3918/3859/3430 3919/3860/3375 3916/3857/3374 \nf 3920/3861/3431 3916/3857/3374 3919/3860/3375 \nf 3921/3854/3432 3918/3859/3430 3916/3857/3374 \nf 3915/3854/3428 3921/3854/3432 3916/3857/3374 \nf 3920/3861/3431 3917/3858/3429 3916/3857/3374 \nf 3922/3862/3433 3923/3863/3376 3919/3860/3375 \nf 2945/2897/2429 3919/3860/3375 3923/3863/3376 \nf 3918/3859/3430 3922/3862/3433 3919/3860/3375 \nf 2945/2897/2429 3920/3861/3431 3919/3860/3375 \nf 3924/3864/3434 3925/3865/3377 3923/3863/3376 \nf 3849/3797/3345 3923/3863/3376 3925/3865/3377 \nf 3922/3862/3433 3924/3864/3434 3923/3863/3376 \nf 3849/3797/3345 2945/2897/2429 3923/3863/3376 \nf 3926/3866/3435 533/530/141 3925/3865/3377 \nf 3897/3844/3398 3925/3865/3377 533/530/141 \nf 3927/3867/3436 3926/3866/3435 3925/3865/3377 \nf 3924/3864/3434 3927/3867/3436 3925/3865/3377 \nf 3897/3844/3398 3849/3797/3345 3925/3865/3377 \nf 3926/3866/3435 532/529/270 533/530/141 \nf 528/525/271 532/529/271 3926/3866/3437 \nf 3928/3868/3437 3926/3866/3437 3927/3867/3438 \nf 3928/3868/3437 528/525/271 3926/3866/3437 \nf 3929/3869/3438 3927/3867/3438 3924/3864/3439 \nf 3929/3869/3438 3928/3868/3437 3927/3867/3438 \nf 3930/3870/3439 3924/3864/3439 3922/3862/3440 \nf 3930/3870/3439 3929/3869/3438 3924/3864/3439 \nf 3931/3871/3440 3922/3862/3440 3918/3859/3441 \nf 3931/3871/3440 3930/3870/3439 3922/3862/3440 \nf 3932/1645/3441 3918/3859/3441 3921/3854/3442 \nf 3932/1645/3441 3931/3871/3440 3918/3859/3441 \nf 3933/3872/3442 3921/3854/3442 3915/3854/3443 \nf 3933/3872/3442 3932/1645/3441 3921/3854/3442 \nf 3934/3873/3443 3915/3854/3443 3911/3854/3444 \nf 3934/3873/3443 3933/3872/3442 3915/3854/3443 \nf 3935/3874/3444 3911/3854/3444 3914/3854/3445 \nf 3935/3874/3444 3934/3873/3443 3911/3854/3444 \nf 3936/3874/3445 3914/3854/3445 3908/3851/3446 \nf 3936/3874/3445 3935/3874/3444 3914/3854/3445 \nf 3937/3875/3446 3908/3851/3446 1670/1648/1153 \nf 3937/3875/3446 3936/3874/3445 3908/3851/3446 \nf 1667/1645/1153 3937/3875/3446 1670/1648/1153 \nf 529/526/141 528/525/270 3928/3868/3435 \nf 529/526/141 3928/3868/3435 3929/3869/3436 \nf 3938/3876/1470 3929/3869/3436 3930/3870/3434 \nf 3938/3876/1470 529/526/141 3929/3869/3436 \nf 3939/3877/1473 3930/3870/3434 3931/3871/3433 \nf 3939/3877/1473 3938/3876/1470 3930/3870/3434 \nf 3940/3878/1476 3931/3871/3433 3932/1645/3430 \nf 3940/3878/1476 3939/3877/1473 3931/3871/3433 \nf 3940/3878/1476 3932/1645/3430 3933/3872/3432 \nf 3941/3879/1479 3933/3872/3432 3934/3873/3428 \nf 3941/3879/1479 3940/3878/1476 3933/3872/3432 \nf 3942/3880/1482 3934/3873/3428 3935/3874/3425 \nf 3942/3880/1482 3941/3879/1479 3934/3873/3428 \nf 3942/3880/1482 3935/3874/3425 3936/3874/3427 \nf 3943/3881/1485 3936/3874/3427 3937/3875/3423 \nf 3943/3881/1485 3942/3880/1482 3936/3874/3427 \nf 3943/3881/1485 3937/3875/3423 1667/1645/1157 \nf 1671/1649/1158 3943/3881/1485 1667/1645/1157 \nf 3944/3882/1933 3945/3883/1933 1338/1088/822 \nf 3946/3884/3447 1338/1088/822 3945/3883/1933 \nf 1337/1317/821 3944/3882/1933 1338/1088/822 \nf 1336/1316/820 1338/1088/822 3946/3884/3447 \nf 3947/3885/3448 3948/3886/3449 3945/3883/1933 \nf 3946/3884/3447 3945/3883/1933 3948/3886/3449 \nf 3944/3882/1933 3947/3885/3448 3945/3883/1933 \nf 3949/3887/3450 3950/3888/1897 3948/3886/3449 \nf 3951/3889/3451 3948/3886/3449 3950/3888/1897 \nf 3947/3885/3448 3949/3887/3450 3948/3886/3449 \nf 3946/3884/3447 3948/3886/3449 3951/3889/3451 \nf 3952/3890/3452 3953/3891/3453 3950/3888/1897 \nf 3951/3889/3451 3950/3888/1897 3953/3891/3453 \nf 3949/3887/3450 3952/3890/3452 3950/3888/1897 \nf 3954/3892/3454 3955/3893/1861 3953/3891/3453 \nf 3956/3894/3455 3953/3891/3453 3955/3893/1861 \nf 3952/3890/3452 3954/3892/3454 3953/3891/3453 \nf 3951/3889/3451 3953/3891/3453 3956/3894/3455 \nf 3957/3895/3456 3955/3896/3457 3955/3893/1861 \nf 3956/3894/3455 3955/3893/1861 3955/3896/3457 \nf 3954/3892/3454 3957/3895/3456 3955/3893/1861 \nf 3958/3897/3458 3959/3898/1825 3955/3896/3457 \nf 3960/3899/3459 3955/3896/3457 3959/3898/1825 \nf 3961/3900/3460 3958/3897/3458 3955/3896/3457 \nf 3957/3895/3456 3961/3900/3460 3955/3896/3457 \nf 3956/3894/3455 3955/3896/3457 3960/3899/3459 \nf 3962/3901/3461 3963/3898/3462 3959/3898/1825 \nf 3960/3899/3459 3959/3898/1825 3963/3898/3462 \nf 3958/3897/3458 3962/3901/3461 3959/3898/1825 \nf 3964/3902/1789 3965/3903/1789 3963/3898/3462 \nf 3966/3904/3463 3963/3898/3462 3965/3903/1789 \nf 3962/3901/3461 3964/3902/1789 3963/3898/3462 \nf 3960/3899/3459 3963/3898/3462 3966/3904/3463 \nf 3967/3905/3464 3965/3906/3465 3965/3903/1789 \nf 3966/3904/3463 3965/3903/1789 3965/3906/3465 \nf 3964/3902/1789 3967/3905/3464 3965/3903/1789 \nf 3968/3907/1753 3969/3908/1753 3965/3906/3465 \nf 3970/3909/3466 3965/3906/3465 3969/3908/1753 \nf 3967/3905/3464 3968/3907/1753 3965/3906/3465 \nf 3966/3904/3463 3965/3906/3465 3970/3909/3466 \nf 3971/3910/1718 3972/3908/3467 3969/3908/1753 \nf 3970/3909/3466 3969/3908/1753 3972/3908/3467 \nf 3968/3907/1753 3971/3910/1718 3969/3908/1753 \nf 3971/3910/1718 335/332/142 3972/3908/3467 \nf 338/335/146 3972/3908/3467 335/332/142 \nf 3970/3909/3466 3972/3908/3467 338/335/146 \nf 2017/1990/1458 3920/3861/3431 2945/2897/2429 \nf 1935/1907/1373 3920/3861/3431 2017/1990/1458 \nf 3971/3910/1718 337/334/145 335/332/142 \nf 3847/3795/3340 337/334/144 3971/3910/1718 \nf 3847/3795/3340 3971/3910/1718 3968/3907/1753 \nf 3847/3795/3340 3968/3907/1753 3967/3905/3468 \nf 3973/3911/3469 3967/3905/3468 3964/3902/1789 \nf 3974/3912/3470 3967/3905/3468 3973/3911/3469 \nf 3974/3912/3470 3847/3795/3340 3967/3905/3468 \nf 3973/3911/3469 3964/3902/1789 3962/3901/3461 \nf 3975/3913/3471 3962/3901/3461 3958/3897/3458 \nf 3975/3913/3471 3973/3911/3469 3962/3901/3461 \nf 3975/3913/3471 3958/3897/3458 3961/3900/3472 \nf 3976/3914/3473 3961/3900/3472 3957/3895/3456 \nf 3977/3915/3474 3961/3900/3472 3976/3914/3473 \nf 3977/3915/3474 3975/3913/3471 3961/3900/3472 \nf 3976/3914/3473 3957/3895/3456 3954/3892/3454 \nf 3976/3914/3473 3954/3892/3454 3952/3890/3475 \nf 3978/3916/3476 3952/3890/3475 3949/3887/3450 \nf 3978/3916/3476 3976/3914/3473 3952/3890/3475 \nf 3979/3917/3477 3949/3887/3450 3947/3885/3478 \nf 3979/3917/3477 3978/3916/3476 3949/3887/3450 \nf 3980/3918/3479 3947/3885/3478 3944/3882/3480 \nf 3980/3918/3479 3979/3917/3477 3947/3885/3478 \nf 1794/1772/1253 3944/3882/3480 1337/1317/1254 \nf 1794/1772/1253 3980/3918/3479 3944/3882/3480 \nf 3970/3909/3466 338/335/146 339/336/147 \nf 3981/3919/3481 339/336/147 340/337/148 \nf 3981/3919/3481 3970/3909/3466 339/336/147 \nf 3982/3920/3482 340/337/148 341/338/149 \nf 3982/3920/3482 3981/3919/3481 340/337/148 \nf 3983/3921/3483 341/338/149 342/339/150 \nf 3983/3921/3483 3982/3920/3482 341/338/149 \nf 3984/3922/3484 342/339/150 343/340/151 \nf 3984/3922/3484 3983/3921/3483 342/339/150 \nf 3985/3923/3485 343/340/151 344/341/152 \nf 3985/3923/3485 3984/3922/3484 343/340/151 \nf 3986/3924/3486 344/341/152 345/342/153 \nf 3986/3924/3486 3985/3923/3485 344/341/152 \nf 3987/3925/3487 345/342/153 346/343/154 \nf 3987/3925/3487 3986/3924/3486 345/342/153 \nf 3988/3926/3488 346/343/154 347/344/155 \nf 3988/3926/3488 3987/3925/3487 346/343/154 \nf 3989/3927/3489 347/344/155 348/345/156 \nf 3989/3927/3489 3988/3926/3488 347/344/155 \nf 3990/3928/3490 348/345/156 349/346/157 \nf 3990/3928/3490 3989/3927/3489 348/345/156 \nf 3991/3929/3491 349/346/157 350/347/158 \nf 3991/3929/3491 3990/3928/3490 349/346/157 \nf 3992/3930/3492 350/347/158 351/348/159 \nf 3992/3930/3492 3991/3929/3491 350/347/158 \nf 3993/3931/3493 351/348/159 352/349/160 \nf 3993/3931/3493 3992/3930/3492 351/348/159 \nf 3994/3932/3494 352/349/160 353/350/161 \nf 3994/3932/3494 3993/3931/3493 352/349/160 \nf 3995/3933/3495 353/350/161 354/351/162 \nf 3995/3933/3495 3994/3932/3494 353/350/161 \nf 3996/3934/3496 354/351/162 355/352/163 \nf 3996/3934/3496 3995/3933/3495 354/351/162 \nf 3997/3935/3497 355/352/163 356/353/164 \nf 3997/3935/3497 3996/3934/3496 355/352/163 \nf 3998/3936/3498 356/353/164 357/354/165 \nf 3998/3936/3498 3997/3935/3497 356/353/164 \nf 3999/3937/3499 357/354/165 358/355/166 \nf 3999/3937/3499 3998/3936/3498 357/354/165 \nf 4000/3938/3500 358/355/166 359/356/167 \nf 4000/3938/3500 3999/3937/3499 358/355/166 \nf 4001/3939/3501 359/356/167 360/357/168 \nf 4001/3939/3501 4000/3938/3500 359/356/167 \nf 4002/3940/3502 360/357/168 361/358/169 \nf 4002/3940/3502 4001/3939/3501 360/357/168 \nf 4003/3941/3503 361/358/169 362/359/170 \nf 4003/3941/3503 4002/3940/3502 361/358/169 \nf 4004/3942/3504 362/359/170 363/360/171 \nf 4004/3942/3504 4003/3941/3503 362/359/170 \nf 4005/3943/3505 363/360/171 364/361/172 \nf 4005/3943/3505 4004/3942/3504 363/360/171 \nf 4006/3944/3506 364/361/172 365/362/173 \nf 4006/3944/3506 4005/3943/3505 364/361/172 \nf 4007/3945/3507 365/362/173 366/363/174 \nf 4007/3945/3507 4006/3944/3506 365/362/173 \nf 4008/3946/3508 366/363/174 367/364/175 \nf 4008/3946/3508 4007/3945/3507 366/363/174 \nf 4009/3947/3509 367/364/175 368/365/176 \nf 4009/3947/3509 4008/3946/3508 367/364/175 \nf 4010/3948/3510 368/365/176 369/366/177 \nf 4010/3948/3510 4009/3947/3509 368/365/176 \nf 4011/3949/3511 369/366/177 370/367/178 \nf 4011/3949/3511 4010/3948/3510 369/366/177 \nf 4012/3950/3512 370/367/178 371/368/179 \nf 4012/3950/3512 4011/3949/3511 370/367/178 \nf 4013/3951/3513 371/368/179 372/369/180 \nf 4013/3951/3513 4012/3950/3512 371/368/179 \nf 4014/3952/3514 372/369/180 373/370/181 \nf 4014/3952/3514 4013/3951/3513 372/369/180 \nf 4015/3953/3515 373/370/181 374/371/182 \nf 4015/3953/3515 4014/3952/3514 373/370/181 \nf 4016/3954/3516 374/371/182 375/372/183 \nf 4016/3954/3516 4015/3953/3515 374/371/182 \nf 4017/3955/3517 375/372/183 376/373/184 \nf 4017/3955/3517 4016/3954/3516 375/372/183 \nf 4018/3956/3518 376/373/184 377/374/185 \nf 4018/3956/3518 4017/3955/3517 376/373/184 \nf 4019/3957/3519 377/374/185 378/375/186 \nf 4019/3957/3519 4018/3956/3518 377/374/185 \nf 4020/3958/3520 378/375/186 379/376/187 \nf 4020/3958/3520 4019/3957/3519 378/375/186 \nf 4021/3959/3521 379/376/187 380/377/188 \nf 4021/3959/3521 4020/3958/3520 379/376/187 \nf 4022/3960/3522 380/377/188 381/378/189 \nf 4022/3960/3522 4021/3959/3521 380/377/188 \nf 4023/3961/3523 381/378/189 382/379/190 \nf 4023/3961/3523 4022/3960/3522 381/378/189 \nf 4024/3962/3524 382/379/190 383/380/191 \nf 4024/3962/3524 4023/3961/3523 382/379/190 \nf 4025/3963/3525 383/380/191 384/381/192 \nf 4025/3963/3525 4024/3962/3524 383/380/191 \nf 4026/3964/3526 384/381/192 385/382/193 \nf 4026/3964/3526 4025/3963/3525 384/381/192 \nf 4027/3965/3527 385/382/193 386/383/194 \nf 4027/3965/3527 4026/3964/3526 385/382/193 \nf 4028/3966/3528 386/383/194 387/384/195 \nf 4028/3966/3528 4027/3965/3527 386/383/194 \nf 4029/3967/3529 387/384/195 388/385/196 \nf 4029/3967/3529 4028/3966/3528 387/384/195 \nf 4030/3968/3530 388/385/196 389/386/197 \nf 4030/3968/3530 4029/3967/3529 388/385/196 \nf 4031/3969/3531 389/386/197 391/388/198 \nf 4031/3969/3531 4030/3968/3530 389/386/197 \nf 4032/3970/3532 4031/3969/3531 391/388/198 \nf 4033/3971/3533 4032/3970/3532 391/388/198 \nf 390/387/198 4033/3971/3533 391/388/198 \nf 394/391/201 1786/1764/1243 1785/1763/1242 \nf 3966/3904/3463 3970/3909/3466 3981/3919/3481 \nf 4034/3972/3534 3981/3919/3481 3982/3920/3482 \nf 4034/3972/3534 3966/3904/3463 3981/3919/3481 \nf 4035/3973/3535 3982/3920/3482 3983/3921/3483 \nf 4035/3973/3535 4034/3972/3534 3982/3920/3482 \nf 4036/3974/3536 3983/3921/3483 3984/3922/3484 \nf 4036/3974/3536 4035/3973/3535 3983/3921/3483 \nf 4037/3975/3537 3984/3922/3484 3985/3923/3485 \nf 4037/3975/3537 4036/3974/3536 3984/3922/3484 \nf 4038/3976/3538 3985/3923/3485 3986/3924/3486 \nf 4038/3976/3538 4037/3975/3537 3985/3923/3485 \nf 4039/3977/3539 3986/3924/3486 3987/3925/3487 \nf 4039/3977/3539 4038/3976/3538 3986/3924/3486 \nf 4040/3978/3540 3987/3925/3487 3988/3926/3488 \nf 4040/3978/3540 4039/3977/3539 3987/3925/3487 \nf 4041/3979/3541 3988/3926/3488 3989/3927/3489 \nf 4041/3979/3541 4040/3978/3540 3988/3926/3488 \nf 4042/3980/3542 3989/3927/3489 3990/3928/3490 \nf 4042/3980/3542 4041/3979/3541 3989/3927/3489 \nf 4043/3981/3543 3990/3928/3490 3991/3929/3491 \nf 4043/3981/3543 4042/3980/3542 3990/3928/3490 \nf 4044/3982/3544 3991/3929/3491 3992/3930/3492 \nf 4044/3982/3544 4043/3981/3543 3991/3929/3491 \nf 4045/3983/3545 3992/3930/3492 3993/3931/3493 \nf 4045/3983/3545 4044/3982/3544 3992/3930/3492 \nf 4046/3984/3546 3993/3931/3493 3994/3932/3494 \nf 4046/3984/3546 4045/3983/3545 3993/3931/3493 \nf 4047/3985/3547 3994/3932/3494 3995/3933/3495 \nf 4047/3985/3547 4046/3984/3546 3994/3932/3494 \nf 4048/3986/3548 3995/3933/3495 3996/3934/3496 \nf 4048/3986/3548 4047/3985/3547 3995/3933/3495 \nf 4049/3987/3549 3996/3934/3496 3997/3935/3497 \nf 4049/3987/3549 4048/3986/3548 3996/3934/3496 \nf 4050/3988/3550 3997/3935/3497 3998/3936/3498 \nf 4050/3988/3550 4049/3987/3549 3997/3935/3497 \nf 4051/3989/3551 3998/3936/3498 3999/3937/3499 \nf 4051/3989/3551 4050/3988/3550 3998/3936/3498 \nf 4052/3990/3552 3999/3937/3499 4000/3938/3500 \nf 4052/3990/3552 4051/3989/3551 3999/3937/3499 \nf 4053/3991/3553 4000/3938/3500 4001/3939/3501 \nf 4053/3991/3553 4052/3990/3552 4000/3938/3500 \nf 4054/3992/3554 4001/3939/3501 4002/3940/3502 \nf 4054/3992/3554 4053/3991/3553 4001/3939/3501 \nf 4055/3993/3555 4002/3940/3502 4003/3941/3503 \nf 4055/3993/3555 4054/3992/3554 4002/3940/3502 \nf 4056/3994/3556 4003/3941/3503 4004/3942/3504 \nf 4056/3994/3556 4055/3993/3555 4003/3941/3503 \nf 4057/3995/3557 4004/3942/3504 4005/3943/3505 \nf 4057/3995/3557 4056/3994/3556 4004/3942/3504 \nf 4058/3996/3558 4005/3943/3505 4006/3944/3506 \nf 4058/3996/3558 4057/3995/3557 4005/3943/3505 \nf 4059/3997/3559 4006/3944/3506 4007/3945/3507 \nf 4059/3997/3559 4058/3996/3558 4006/3944/3506 \nf 4060/3998/3560 4007/3945/3507 4008/3946/3508 \nf 4060/3998/3560 4059/3997/3559 4007/3945/3507 \nf 4061/3999/3561 4008/3946/3508 4009/3947/3509 \nf 4061/3999/3561 4060/3998/3560 4008/3946/3508 \nf 4062/4000/3562 4009/3947/3509 4010/3948/3510 \nf 4062/4000/3562 4061/3999/3561 4009/3947/3509 \nf 4063/4001/3563 4010/3948/3510 4011/3949/3511 \nf 4063/4001/3563 4062/4000/3562 4010/3948/3510 \nf 4064/4002/3564 4011/3949/3511 4012/3950/3512 \nf 4064/4002/3564 4063/4001/3563 4011/3949/3511 \nf 4065/4003/3565 4012/3950/3512 4013/3951/3513 \nf 4065/4003/3565 4064/4002/3564 4012/3950/3512 \nf 4066/4004/3566 4013/3951/3513 4014/3952/3514 \nf 4066/4004/3566 4065/4003/3565 4013/3951/3513 \nf 4067/4005/3567 4014/3952/3514 4015/3953/3515 \nf 4067/4005/3567 4066/4004/3566 4014/3952/3514 \nf 4068/4006/3568 4015/3953/3515 4016/3954/3516 \nf 4068/4006/3568 4067/4005/3567 4015/3953/3515 \nf 4069/4007/3569 4016/3954/3516 4017/3955/3517 \nf 4069/4007/3569 4068/4006/3568 4016/3954/3516 \nf 4070/4008/3570 4017/3955/3517 4018/3956/3518 \nf 4070/4008/3570 4069/4007/3569 4017/3955/3517 \nf 4071/4009/3571 4018/3956/3518 4019/3957/3519 \nf 4071/4009/3571 4070/4008/3570 4018/3956/3518 \nf 4072/4010/3572 4019/3957/3519 4020/3958/3520 \nf 4072/4010/3572 4071/4009/3571 4019/3957/3519 \nf 4073/4011/3573 4020/3958/3520 4021/3959/3521 \nf 4073/4011/3573 4072/4010/3572 4020/3958/3520 \nf 4074/4012/3574 4021/3959/3521 4022/3960/3522 \nf 4074/4012/3574 4073/4011/3573 4021/3959/3521 \nf 4075/4013/3575 4022/3960/3522 4023/3961/3523 \nf 4075/4013/3575 4074/4012/3574 4022/3960/3522 \nf 4076/4014/3576 4023/3961/3523 4024/3962/3524 \nf 4076/4014/3576 4075/4013/3575 4023/3961/3523 \nf 4077/4015/3577 4024/3962/3524 4025/3963/3525 \nf 4077/4015/3577 4076/4014/3576 4024/3962/3524 \nf 4078/4016/3578 4025/3963/3525 4026/3964/3526 \nf 4078/4016/3578 4077/4015/3577 4025/3963/3525 \nf 4079/4017/3579 4026/3964/3526 4027/3965/3527 \nf 4079/4017/3579 4078/4016/3578 4026/3964/3526 \nf 4080/4018/3580 4027/3965/3527 4028/3966/3528 \nf 4080/4018/3580 4079/4017/3579 4027/3965/3527 \nf 4081/4019/3581 4028/3966/3528 4029/3967/3529 \nf 4081/4019/3581 4080/4018/3580 4028/3966/3528 \nf 4082/4020/3582 4029/3967/3529 4030/3968/3530 \nf 4082/4020/3582 4081/4019/3581 4029/3967/3529 \nf 4083/4021/3583 4030/3968/3530 4031/3969/3531 \nf 4083/4021/3583 4082/4020/3582 4030/3968/3530 \nf 4084/4022/3584 4031/3969/3531 4032/3970/3532 \nf 4084/4022/3584 4083/4021/3583 4031/3969/3531 \nf 4085/4023/3585 4084/4022/3584 4032/3970/3532 \nf 4086/4024/3586 4085/4023/3585 4032/3970/3532 \nf 4033/3971/3587 4086/4024/3586 4032/3970/3532 \nf 4033/3971/3533 4033/3971/3587 4032/3970/3532 \nf 3960/3899/3459 3966/3904/3463 4034/3972/3534 \nf 4087/4025/3588 4034/3972/3534 4035/3973/3535 \nf 4087/4025/3588 3960/3899/3459 4034/3972/3534 \nf 4088/4026/3589 4035/3973/3535 4036/3974/3536 \nf 4088/4026/3589 4087/4025/3588 4035/3973/3535 \nf 4089/4027/3590 4036/3974/3536 4037/3975/3537 \nf 4089/4027/3590 4088/4026/3589 4036/3974/3536 \nf 4090/4028/3591 4037/3975/3537 4038/3976/3538 \nf 4090/4028/3591 4089/4027/3590 4037/3975/3537 \nf 4091/4029/3592 4038/3976/3538 4039/3977/3539 \nf 4091/4029/3592 4090/4028/3591 4038/3976/3538 \nf 4092/4030/3593 4039/3977/3539 4040/3978/3540 \nf 4092/4030/3593 4091/4029/3592 4039/3977/3539 \nf 4093/4031/3594 4040/3978/3540 4041/3979/3541 \nf 4093/4031/3594 4092/4030/3593 4040/3978/3540 \nf 4094/4032/3595 4041/3979/3541 4042/3980/3542 \nf 4094/4032/3595 4093/4031/3594 4041/3979/3541 \nf 4095/4033/3596 4042/3980/3542 4043/3981/3543 \nf 4095/4033/3596 4094/4032/3595 4042/3980/3542 \nf 4096/4034/3597 4043/3981/3543 4044/3982/3544 \nf 4096/4034/3597 4095/4033/3596 4043/3981/3543 \nf 4097/4035/3598 4044/3982/3544 4045/3983/3545 \nf 4097/4035/3598 4096/4034/3597 4044/3982/3544 \nf 4098/4036/3599 4045/3983/3545 4046/3984/3546 \nf 4098/4036/3599 4097/4035/3598 4045/3983/3545 \nf 4099/4037/3600 4046/3984/3546 4047/3985/3547 \nf 4099/4037/3600 4098/4036/3599 4046/3984/3546 \nf 4100/4038/3601 4047/3985/3547 4048/3986/3548 \nf 4100/4038/3601 4099/4037/3600 4047/3985/3547 \nf 4101/4039/3602 4048/3986/3548 4049/3987/3549 \nf 4101/4039/3602 4100/4038/3601 4048/3986/3548 \nf 4102/4040/3603 4049/3987/3549 4050/3988/3550 \nf 4102/4040/3603 4101/4039/3602 4049/3987/3549 \nf 4103/4041/3604 4050/3988/3550 4051/3989/3551 \nf 4103/4041/3604 4102/4040/3603 4050/3988/3550 \nf 4104/4042/3605 4051/3989/3551 4052/3990/3552 \nf 4104/4042/3605 4103/4041/3604 4051/3989/3551 \nf 4105/4043/3606 4052/3990/3552 4053/3991/3553 \nf 4105/4043/3606 4104/4042/3605 4052/3990/3552 \nf 4106/4044/3607 4053/3991/3553 4054/3992/3554 \nf 4106/4044/3607 4105/4043/3606 4053/3991/3553 \nf 4107/4045/3608 4054/3992/3554 4055/3993/3555 \nf 4107/4045/3608 4106/4044/3607 4054/3992/3554 \nf 4108/4046/3609 4055/3993/3555 4056/3994/3556 \nf 4108/4046/3609 4107/4045/3608 4055/3993/3555 \nf 4109/4047/3610 4056/3994/3556 4057/3995/3557 \nf 4109/4047/3610 4108/4046/3609 4056/3994/3556 \nf 4110/4048/3611 4057/3995/3557 4058/3996/3558 \nf 4110/4048/3611 4109/4047/3610 4057/3995/3557 \nf 4111/4049/3612 4058/3996/3558 4059/3997/3559 \nf 4111/4049/3612 4110/4048/3611 4058/3996/3558 \nf 4112/4050/3613 4059/3997/3559 4060/3998/3560 \nf 4112/4050/3613 4111/4049/3612 4059/3997/3559 \nf 4113/4051/3614 4060/3998/3560 4061/3999/3561 \nf 4113/4051/3614 4112/4050/3613 4060/3998/3560 \nf 4114/4052/3615 4061/3999/3561 4062/4000/3562 \nf 4114/4052/3615 4113/4051/3614 4061/3999/3561 \nf 4115/4053/3616 4062/4000/3562 4063/4001/3563 \nf 4115/4053/3616 4114/4052/3615 4062/4000/3562 \nf 4116/4054/3617 4063/4001/3563 4064/4002/3564 \nf 4116/4054/3617 4115/4053/3616 4063/4001/3563 \nf 4117/4055/3618 4064/4002/3564 4065/4003/3565 \nf 4117/4055/3618 4116/4054/3617 4064/4002/3564 \nf 4118/4056/3619 4065/4003/3565 4066/4004/3566 \nf 4118/4056/3619 4117/4055/3618 4065/4003/3565 \nf 4119/4057/3620 4066/4004/3566 4067/4005/3567 \nf 4119/4057/3620 4118/4056/3619 4066/4004/3566 \nf 4120/4058/3621 4067/4005/3567 4068/4006/3568 \nf 4120/4058/3621 4119/4057/3620 4067/4005/3567 \nf 4121/4059/3622 4068/4006/3568 4069/4007/3569 \nf 4121/4059/3622 4120/4058/3621 4068/4006/3568 \nf 4122/4060/3623 4069/4007/3569 4070/4008/3570 \nf 4122/4060/3623 4121/4059/3622 4069/4007/3569 \nf 4123/4061/3624 4070/4008/3570 4071/4009/3571 \nf 4123/4061/3624 4122/4060/3623 4070/4008/3570 \nf 4124/4062/3625 4071/4009/3571 4072/4010/3572 \nf 4124/4062/3625 4123/4061/3624 4071/4009/3571 \nf 4125/4063/3626 4072/4010/3572 4073/4011/3573 \nf 4125/4063/3626 4124/4062/3625 4072/4010/3572 \nf 4126/4064/3627 4073/4011/3573 4074/4012/3574 \nf 4126/4064/3627 4125/4063/3626 4073/4011/3573 \nf 4127/4065/3628 4074/4012/3574 4075/4013/3575 \nf 4127/4065/3628 4126/4064/3627 4074/4012/3574 \nf 4128/4066/3629 4075/4013/3575 4076/4014/3576 \nf 4128/4066/3629 4127/4065/3628 4075/4013/3575 \nf 4129/4067/3630 4076/4014/3576 4077/4015/3577 \nf 4129/4067/3630 4128/4066/3629 4076/4014/3576 \nf 4130/4068/3631 4077/4015/3577 4078/4016/3578 \nf 4130/4068/3631 4129/4067/3630 4077/4015/3577 \nf 4131/4069/3632 4078/4016/3578 4079/4017/3579 \nf 4131/4069/3632 4130/4068/3631 4078/4016/3578 \nf 4132/4070/3633 4079/4017/3579 4080/4018/3580 \nf 4132/4070/3633 4131/4069/3632 4079/4017/3579 \nf 4133/4071/3634 4080/4018/3580 4081/4019/3581 \nf 4133/4071/3634 4132/4070/3633 4080/4018/3580 \nf 4134/4072/3635 4081/4019/3581 4082/4020/3582 \nf 4134/4072/3635 4133/4071/3634 4081/4019/3581 \nf 4135/4073/3636 4082/4020/3582 4083/4021/3583 \nf 4135/4073/3636 4134/4072/3635 4082/4020/3582 \nf 4136/4074/3637 4083/4021/3583 4084/4022/3584 \nf 4136/4074/3637 4135/4073/3636 4083/4021/3583 \nf 4137/4075/3638 4084/4022/3584 4085/4023/3585 \nf 4137/4075/3638 4136/4074/3637 4084/4022/3584 \nf 4138/4076/3639 4137/4075/3638 4085/4023/3585 \nf 4139/4077/3640 4138/4076/3639 4085/4023/3585 \nf 4086/4024/3641 4139/4077/3640 4085/4023/3585 \nf 4086/4024/3586 4086/4024/3641 4085/4023/3585 \nf 3956/3894/3455 3960/3899/3459 4087/4025/3588 \nf 4140/4078/3642 4087/4025/3588 4088/4026/3589 \nf 4140/4078/3642 3956/3894/3455 4087/4025/3588 \nf 4141/4079/3643 4088/4026/3589 4089/4027/3590 \nf 4141/4079/3643 4140/4078/3642 4088/4026/3589 \nf 4142/4080/3644 4089/4027/3590 4090/4028/3591 \nf 4142/4080/3644 4141/4079/3643 4089/4027/3590 \nf 4143/4081/3645 4090/4028/3591 4091/4029/3592 \nf 4143/4081/3645 4142/4080/3644 4090/4028/3591 \nf 4144/4082/3646 4091/4029/3592 4092/4030/3593 \nf 4144/4082/3646 4143/4081/3645 4091/4029/3592 \nf 4145/4083/3647 4092/4030/3593 4093/4031/3594 \nf 4145/4083/3647 4144/4082/3646 4092/4030/3593 \nf 4146/4084/3648 4093/4031/3594 4094/4032/3595 \nf 4146/4084/3648 4145/4083/3647 4093/4031/3594 \nf 4147/4085/3649 4094/4032/3595 4095/4033/3596 \nf 4147/4085/3649 4146/4084/3648 4094/4032/3595 \nf 4148/4086/3650 4095/4033/3596 4096/4034/3597 \nf 4148/4086/3650 4147/4085/3649 4095/4033/3596 \nf 4149/4087/3651 4096/4034/3597 4097/4035/3598 \nf 4149/4087/3651 4148/4086/3650 4096/4034/3597 \nf 4150/4088/3652 4097/4035/3598 4098/4036/3599 \nf 4150/4088/3652 4149/4087/3651 4097/4035/3598 \nf 4151/4089/3653 4098/4036/3599 4099/4037/3600 \nf 4151/4089/3653 4150/4088/3652 4098/4036/3599 \nf 4152/4090/3654 4099/4037/3600 4100/4038/3601 \nf 4152/4090/3654 4151/4089/3653 4099/4037/3600 \nf 4153/4091/3655 4100/4038/3601 4101/4039/3602 \nf 4153/4091/3655 4152/4090/3654 4100/4038/3601 \nf 4154/4092/3656 4101/4039/3602 4102/4040/3603 \nf 4154/4092/3656 4153/4091/3655 4101/4039/3602 \nf 4155/4093/3657 4102/4040/3603 4103/4041/3604 \nf 4155/4093/3657 4154/4092/3656 4102/4040/3603 \nf 4156/4094/3658 4103/4041/3604 4104/4042/3605 \nf 4156/4094/3658 4155/4093/3657 4103/4041/3604 \nf 4157/4095/3659 4104/4042/3605 4105/4043/3606 \nf 4157/4095/3659 4156/4094/3658 4104/4042/3605 \nf 4158/4096/3660 4105/4043/3606 4106/4044/3607 \nf 4158/4096/3660 4157/4095/3659 4105/4043/3606 \nf 4159/4097/3661 4106/4044/3607 4107/4045/3608 \nf 4159/4097/3661 4158/4096/3660 4106/4044/3607 \nf 4160/4098/3662 4107/4045/3608 4108/4046/3609 \nf 4160/4098/3662 4159/4097/3661 4107/4045/3608 \nf 4161/4099/3663 4108/4046/3609 4109/4047/3610 \nf 4161/4099/3663 4160/4098/3662 4108/4046/3609 \nf 4162/4100/3664 4109/4047/3610 4110/4048/3611 \nf 4162/4100/3664 4161/4099/3663 4109/4047/3610 \nf 4163/4101/3665 4110/4048/3611 4111/4049/3612 \nf 4163/4101/3665 4162/4100/3664 4110/4048/3611 \nf 4164/4102/3666 4111/4049/3612 4112/4050/3613 \nf 4164/4102/3666 4163/4101/3665 4111/4049/3612 \nf 4165/4103/3667 4112/4050/3613 4113/4051/3614 \nf 4165/4103/3667 4164/4102/3666 4112/4050/3613 \nf 4166/4104/3668 4113/4051/3614 4114/4052/3615 \nf 4166/4104/3668 4165/4103/3667 4113/4051/3614 \nf 4167/4105/3669 4114/4052/3615 4115/4053/3616 \nf 4167/4105/3669 4166/4104/3668 4114/4052/3615 \nf 4168/4106/3670 4115/4053/3616 4116/4054/3617 \nf 4168/4106/3670 4167/4105/3669 4115/4053/3616 \nf 4169/4107/3671 4116/4054/3617 4117/4055/3618 \nf 4169/4107/3671 4168/4106/3670 4116/4054/3617 \nf 4170/4108/3672 4117/4055/3618 4118/4056/3619 \nf 4170/4108/3672 4169/4107/3671 4117/4055/3618 \nf 4171/4109/3673 4118/4056/3619 4119/4057/3620 \nf 4171/4109/3673 4170/4108/3672 4118/4056/3619 \nf 4172/4110/3674 4119/4057/3620 4120/4058/3621 \nf 4172/4110/3674 4171/4109/3673 4119/4057/3620 \nf 4173/4111/3675 4120/4058/3621 4121/4059/3622 \nf 4173/4111/3675 4172/4110/3674 4120/4058/3621 \nf 4174/4112/3676 4121/4059/3622 4122/4060/3623 \nf 4174/4112/3676 4173/4111/3675 4121/4059/3622 \nf 4175/4113/3677 4122/4060/3623 4123/4061/3624 \nf 4175/4113/3677 4174/4112/3676 4122/4060/3623 \nf 4176/4114/3678 4123/4061/3624 4124/4062/3625 \nf 4176/4114/3678 4175/4113/3677 4123/4061/3624 \nf 4177/4115/3679 4124/4062/3625 4125/4063/3626 \nf 4177/4115/3679 4176/4114/3678 4124/4062/3625 \nf 4178/4116/3680 4125/4063/3626 4126/4064/3627 \nf 4178/4116/3680 4177/4115/3679 4125/4063/3626 \nf 4179/4117/3681 4126/4064/3627 4127/4065/3628 \nf 4179/4117/3681 4178/4116/3680 4126/4064/3627 \nf 4180/4118/3682 4127/4065/3628 4128/4066/3629 \nf 4180/4118/3682 4179/4117/3681 4127/4065/3628 \nf 4181/4119/3683 4128/4066/3629 4129/4067/3630 \nf 4181/4119/3683 4180/4118/3682 4128/4066/3629 \nf 4182/4120/3684 4129/4067/3630 4130/4068/3631 \nf 4182/4120/3684 4181/4119/3683 4129/4067/3630 \nf 4183/4121/3685 4130/4068/3631 4131/4069/3632 \nf 4183/4121/3685 4182/4120/3684 4130/4068/3631 \nf 4184/4122/3686 4131/4069/3632 4132/4070/3633 \nf 4184/4122/3686 4183/4121/3685 4131/4069/3632 \nf 4185/4123/3687 4132/4070/3633 4133/4071/3634 \nf 4185/4123/3687 4184/4122/3686 4132/4070/3633 \nf 4186/4124/3688 4133/4071/3634 4134/4072/3635 \nf 4186/4124/3688 4185/4123/3687 4133/4071/3634 \nf 4187/4125/3689 4134/4072/3635 4135/4073/3636 \nf 4187/4125/3689 4186/4124/3688 4134/4072/3635 \nf 4188/4126/3690 4135/4073/3636 4136/4074/3637 \nf 4188/4126/3690 4187/4125/3689 4135/4073/3636 \nf 4189/4127/3691 4136/4074/3637 4137/4075/3638 \nf 4189/4127/3691 4188/4126/3690 4136/4074/3637 \nf 4190/4128/3692 4137/4075/3638 4138/4076/3639 \nf 4190/4128/3692 4189/4127/3691 4137/4075/3638 \nf 4191/4129/3693 4190/4128/3692 4138/4076/3639 \nf 4192/4130/3694 4191/4129/3693 4138/4076/3639 \nf 4139/4077/3695 4192/4130/3694 4138/4076/3639 \nf 4139/4077/3640 4139/4077/3695 4138/4076/3639 \nf 3951/3889/3451 3956/3894/3455 4140/4078/3642 \nf 4193/4131/3696 4140/4078/3642 4141/4079/3643 \nf 4193/4131/3696 3951/3889/3451 4140/4078/3642 \nf 4194/4132/3697 4141/4079/3643 4142/4080/3644 \nf 4194/4132/3697 4193/4131/3696 4141/4079/3643 \nf 4195/4133/3698 4142/4080/3644 4143/4081/3645 \nf 4195/4133/3698 4194/4132/3697 4142/4080/3644 \nf 4196/4134/3699 4143/4081/3645 4144/4082/3646 \nf 4196/4134/3699 4195/4133/3698 4143/4081/3645 \nf 4197/4135/3700 4144/4082/3646 4145/4083/3647 \nf 4197/4135/3700 4196/4134/3699 4144/4082/3646 \nf 4198/4136/3701 4145/4083/3647 4146/4084/3648 \nf 4198/4136/3701 4197/4135/3700 4145/4083/3647 \nf 4199/4137/3702 4146/4084/3648 4147/4085/3649 \nf 4199/4137/3702 4198/4136/3701 4146/4084/3648 \nf 4200/4138/3703 4147/4085/3649 4148/4086/3650 \nf 4200/4138/3703 4199/4137/3702 4147/4085/3649 \nf 4201/4139/3704 4148/4086/3650 4149/4087/3651 \nf 4201/4139/3704 4200/4138/3703 4148/4086/3650 \nf 4202/4140/3705 4149/4087/3651 4150/4088/3652 \nf 4202/4140/3705 4201/4139/3704 4149/4087/3651 \nf 4203/4141/3706 4150/4088/3652 4151/4089/3653 \nf 4203/4141/3706 4202/4140/3705 4150/4088/3652 \nf 4204/4142/3707 4151/4089/3653 4152/4090/3654 \nf 4204/4142/3707 4203/4141/3706 4151/4089/3653 \nf 4205/4143/3708 4152/4090/3654 4153/4091/3655 \nf 4205/4143/3708 4204/4142/3707 4152/4090/3654 \nf 4206/4144/3709 4153/4091/3655 4154/4092/3656 \nf 4206/4144/3709 4205/4143/3708 4153/4091/3655 \nf 4207/4145/3710 4154/4092/3656 4155/4093/3657 \nf 4207/4145/3710 4206/4144/3709 4154/4092/3656 \nf 4208/4146/3711 4155/4093/3657 4156/4094/3658 \nf 4208/4146/3711 4207/4145/3710 4155/4093/3657 \nf 4209/4147/3712 4156/4094/3658 4157/4095/3659 \nf 4209/4147/3712 4208/4146/3711 4156/4094/3658 \nf 4210/4148/3713 4157/4095/3659 4158/4096/3660 \nf 4210/4148/3713 4209/4147/3712 4157/4095/3659 \nf 4211/4149/3714 4158/4096/3660 4159/4097/3661 \nf 4211/4149/3714 4210/4148/3713 4158/4096/3660 \nf 4212/4150/3715 4159/4097/3661 4160/4098/3662 \nf 4212/4150/3715 4211/4149/3714 4159/4097/3661 \nf 4213/4151/3716 4160/4098/3662 4161/4099/3663 \nf 4213/4151/3716 4212/4150/3715 4160/4098/3662 \nf 4214/4152/3717 4161/4099/3663 4162/4100/3664 \nf 4214/4152/3717 4213/4151/3716 4161/4099/3663 \nf 4215/4153/3718 4162/4100/3664 4163/4101/3665 \nf 4215/4153/3718 4214/4152/3717 4162/4100/3664 \nf 4216/4154/3719 4163/4101/3665 4164/4102/3666 \nf 4216/4154/3719 4215/4153/3718 4163/4101/3665 \nf 4217/4155/3720 4164/4102/3666 4165/4103/3667 \nf 4217/4155/3720 4216/4154/3719 4164/4102/3666 \nf 4218/4156/3721 4165/4103/3667 4166/4104/3668 \nf 4218/4156/3721 4217/4155/3720 4165/4103/3667 \nf 4219/4157/3722 4166/4104/3668 4167/4105/3669 \nf 4219/4157/3722 4218/4156/3721 4166/4104/3668 \nf 4220/4158/3723 4167/4105/3669 4168/4106/3670 \nf 4220/4158/3723 4219/4157/3722 4167/4105/3669 \nf 4221/4159/3724 4168/4106/3670 4169/4107/3671 \nf 4221/4159/3724 4220/4158/3723 4168/4106/3670 \nf 4222/4160/3725 4169/4107/3671 4170/4108/3672 \nf 4222/4160/3725 4221/4159/3724 4169/4107/3671 \nf 4223/4161/3726 4170/4108/3672 4171/4109/3673 \nf 4223/4161/3726 4222/4160/3725 4170/4108/3672 \nf 4224/4162/3727 4171/4109/3673 4172/4110/3674 \nf 4224/4162/3727 4223/4161/3726 4171/4109/3673 \nf 4225/4163/3728 4172/4110/3674 4173/4111/3675 \nf 4225/4163/3728 4224/4162/3727 4172/4110/3674 \nf 4226/4164/3729 4173/4111/3675 4174/4112/3676 \nf 4226/4164/3729 4225/4163/3728 4173/4111/3675 \nf 4227/4165/3730 4174/4112/3676 4175/4113/3677 \nf 4227/4165/3730 4226/4164/3729 4174/4112/3676 \nf 4228/4166/3731 4175/4113/3677 4176/4114/3678 \nf 4228/4166/3731 4227/4165/3730 4175/4113/3677 \nf 4229/4167/3732 4176/4114/3678 4177/4115/3679 \nf 4229/4167/3732 4228/4166/3731 4176/4114/3678 \nf 4230/4168/3733 4177/4115/3679 4178/4116/3680 \nf 4230/4168/3733 4229/4167/3732 4177/4115/3679 \nf 4231/4169/3734 4178/4116/3680 4179/4117/3681 \nf 4231/4169/3734 4230/4168/3733 4178/4116/3680 \nf 4232/4170/3735 4179/4117/3681 4180/4118/3682 \nf 4232/4170/3735 4231/4169/3734 4179/4117/3681 \nf 4233/4171/3736 4180/4118/3682 4181/4119/3683 \nf 4233/4171/3736 4232/4170/3735 4180/4118/3682 \nf 4234/4172/3737 4181/4119/3683 4182/4120/3684 \nf 4234/4172/3737 4233/4171/3736 4181/4119/3683 \nf 4235/4173/3738 4182/4120/3684 4183/4121/3685 \nf 4235/4173/3738 4234/4172/3737 4182/4120/3684 \nf 4236/4174/3739 4183/4121/3685 4184/4122/3686 \nf 4236/4174/3739 4235/4173/3738 4183/4121/3685 \nf 4237/4175/3740 4184/4122/3686 4185/4123/3687 \nf 4237/4175/3740 4236/4174/3739 4184/4122/3686 \nf 4238/4176/3741 4185/4123/3687 4186/4124/3688 \nf 4238/4176/3741 4237/4175/3740 4185/4123/3687 \nf 4239/4177/3742 4186/4124/3688 4187/4125/3689 \nf 4239/4177/3742 4238/4176/3741 4186/4124/3688 \nf 4240/4178/3743 4187/4125/3689 4188/4126/3690 \nf 4240/4178/3743 4239/4177/3742 4187/4125/3689 \nf 4241/4179/3744 4188/4126/3690 4189/4127/3691 \nf 4241/4179/3744 4240/4178/3743 4188/4126/3690 \nf 4242/4180/3745 4189/4127/3691 4190/4128/3692 \nf 4242/4180/3745 4241/4179/3744 4189/4127/3691 \nf 4243/4181/3746 4190/4128/3692 4191/4129/3693 \nf 4243/4181/3746 4242/4180/3745 4190/4128/3692 \nf 4244/4182/3747 4243/4181/3746 4191/4129/3693 \nf 4245/4183/3748 4244/4182/3747 4191/4129/3693 \nf 4192/4184/3749 4245/4183/3748 4191/4129/3693 \nf 4192/4130/3694 4192/4184/3749 4191/4129/3693 \nf 3946/3884/3447 3951/3889/3451 4193/4131/3696 \nf 4246/4185/3750 4193/4131/3696 4194/4132/3697 \nf 4246/4185/3750 3946/3884/3447 4193/4131/3696 \nf 4247/4186/3751 4194/4132/3697 4195/4133/3698 \nf 4247/4186/3751 4246/4185/3750 4194/4132/3697 \nf 4248/4187/3752 4195/4133/3698 4196/4134/3699 \nf 4248/4187/3752 4247/4186/3751 4195/4133/3698 \nf 4249/4188/3753 4196/4134/3699 4197/4135/3700 \nf 4249/4188/3753 4248/4187/3752 4196/4134/3699 \nf 4250/4189/3754 4197/4135/3700 4198/4136/3701 \nf 4250/4189/3754 4249/4188/3753 4197/4135/3700 \nf 4251/4190/3755 4198/4136/3701 4199/4137/3702 \nf 4251/4190/3755 4250/4189/3754 4198/4136/3701 \nf 4252/4191/3756 4199/4137/3702 4200/4138/3703 \nf 4252/4191/3756 4251/4190/3755 4199/4137/3702 \nf 4253/4192/3757 4200/4138/3703 4201/4139/3704 \nf 4253/4192/3757 4252/4191/3756 4200/4138/3703 \nf 4254/4193/3758 4201/4139/3704 4202/4140/3705 \nf 4254/4193/3758 4253/4192/3757 4201/4139/3704 \nf 4255/4194/3759 4202/4140/3705 4203/4141/3706 \nf 4255/4194/3759 4254/4193/3758 4202/4140/3705 \nf 4256/4195/3760 4203/4141/3706 4204/4142/3707 \nf 4256/4195/3760 4255/4194/3759 4203/4141/3706 \nf 4257/4196/3761 4204/4142/3707 4205/4143/3708 \nf 4257/4196/3761 4256/4195/3760 4204/4142/3707 \nf 4258/4197/3762 4205/4143/3708 4206/4144/3709 \nf 4258/4197/3762 4257/4196/3761 4205/4143/3708 \nf 4259/4198/3763 4206/4144/3709 4207/4145/3710 \nf 4259/4198/3763 4258/4197/3762 4206/4144/3709 \nf 4260/4199/3764 4207/4145/3710 4208/4146/3711 \nf 4260/4199/3764 4259/4198/3763 4207/4145/3710 \nf 4261/4200/3765 4208/4146/3711 4209/4147/3712 \nf 4261/4200/3765 4260/4199/3764 4208/4146/3711 \nf 4262/4201/3766 4209/4147/3712 4210/4148/3713 \nf 4262/4201/3766 4261/4200/3765 4209/4147/3712 \nf 4263/4202/3767 4210/4148/3713 4211/4149/3714 \nf 4263/4202/3767 4262/4201/3766 4210/4148/3713 \nf 4264/4203/3768 4211/4149/3714 4212/4150/3715 \nf 4264/4203/3768 4263/4202/3767 4211/4149/3714 \nf 4265/4204/3769 4212/4150/3715 4213/4151/3716 \nf 4265/4204/3769 4264/4203/3768 4212/4150/3715 \nf 4266/4205/3770 4213/4151/3716 4214/4152/3717 \nf 4266/4205/3770 4265/4204/3769 4213/4151/3716 \nf 4267/4206/3771 4214/4152/3717 4215/4153/3718 \nf 4267/4206/3771 4266/4205/3770 4214/4152/3717 \nf 4268/4207/3772 4215/4153/3718 4216/4154/3719 \nf 4268/4207/3772 4267/4206/3771 4215/4153/3718 \nf 4269/4208/3773 4216/4154/3719 4217/4155/3720 \nf 4269/4208/3773 4268/4207/3772 4216/4154/3719 \nf 4270/4209/3774 4217/4155/3720 4218/4156/3721 \nf 4270/4209/3774 4269/4208/3773 4217/4155/3720 \nf 4271/4210/3775 4218/4156/3721 4219/4157/3722 \nf 4271/4210/3775 4270/4209/3774 4218/4156/3721 \nf 4272/4211/3776 4219/4157/3722 4220/4158/3723 \nf 4272/4211/3776 4271/4210/3775 4219/4157/3722 \nf 4273/4212/3777 4220/4158/3723 4221/4159/3724 \nf 4273/4212/3777 4272/4211/3776 4220/4158/3723 \nf 4274/4213/3778 4221/4159/3724 4222/4160/3725 \nf 4274/4213/3778 4273/4212/3777 4221/4159/3724 \nf 4275/4214/3779 4222/4160/3725 4223/4161/3726 \nf 4275/4214/3779 4274/4213/3778 4222/4160/3725 \nf 4276/4215/3780 4223/4161/3726 4224/4162/3727 \nf 4276/4215/3780 4275/4214/3779 4223/4161/3726 \nf 4277/4216/3781 4224/4162/3727 4225/4163/3728 \nf 4277/4216/3781 4276/4215/3780 4224/4162/3727 \nf 4278/4217/3782 4225/4163/3728 4226/4164/3729 \nf 4278/4217/3782 4277/4216/3781 4225/4163/3728 \nf 4279/4218/3783 4226/4164/3729 4227/4165/3730 \nf 4279/4218/3783 4278/4217/3782 4226/4164/3729 \nf 4280/4219/3784 4227/4165/3730 4228/4166/3731 \nf 4280/4219/3784 4279/4218/3783 4227/4165/3730 \nf 4281/4220/3785 4228/4166/3731 4229/4167/3732 \nf 4281/4220/3785 4280/4219/3784 4228/4166/3731 \nf 4282/4221/3786 4229/4167/3732 4230/4168/3733 \nf 4282/4221/3786 4281/4220/3785 4229/4167/3732 \nf 4283/4222/3787 4230/4168/3733 4231/4169/3734 \nf 4283/4222/3787 4282/4221/3786 4230/4168/3733 \nf 4284/4223/3788 4231/4169/3734 4232/4170/3735 \nf 4284/4223/3788 4283/4222/3787 4231/4169/3734 \nf 4285/4224/3789 4232/4170/3735 4233/4171/3736 \nf 4285/4224/3789 4284/4223/3788 4232/4170/3735 \nf 4286/4225/3790 4233/4171/3736 4234/4172/3737 \nf 4286/4225/3790 4285/4224/3789 4233/4171/3736 \nf 4287/4226/3791 4234/4172/3737 4235/4173/3738 \nf 4287/4226/3791 4286/4225/3790 4234/4172/3737 \nf 4288/4227/3792 4235/4173/3738 4236/4174/3739 \nf 4288/4227/3792 4287/4226/3791 4235/4173/3738 \nf 4289/4228/3793 4236/4174/3739 4237/4175/3740 \nf 4289/4228/3793 4288/4227/3792 4236/4174/3739 \nf 4290/4229/3794 4237/4175/3740 4238/4176/3741 \nf 4290/4229/3794 4289/4228/3793 4237/4175/3740 \nf 4291/4230/3795 4238/4176/3741 4239/4177/3742 \nf 4291/4230/3795 4290/4229/3794 4238/4176/3741 \nf 4292/4231/3796 4239/4177/3742 4240/4178/3743 \nf 4292/4231/3796 4291/4230/3795 4239/4177/3742 \nf 4293/4232/3797 4240/4178/3743 4241/4179/3744 \nf 4293/4232/3797 4292/4231/3796 4240/4178/3743 \nf 4294/4233/3798 4241/4179/3744 4242/4180/3745 \nf 4294/4233/3798 4293/4232/3797 4241/4179/3744 \nf 4295/4234/3799 4242/4180/3745 4243/4181/3746 \nf 4295/4234/3799 4294/4233/3798 4242/4180/3745 \nf 4296/4235/3800 4243/4181/3746 4244/4182/3747 \nf 4296/4235/3800 4295/4234/3799 4243/4181/3746 \nf 4297/4236/3801 4296/4235/3800 4244/4182/3747 \nf 4298/4237/3802 4297/4236/3801 4244/4182/3747 \nf 4299/4183/3803 4298/4237/3802 4244/4182/3747 \nf 4245/4183/3748 4299/4183/3803 4244/4182/3747 \nf 1336/1316/820 3946/3884/3447 4246/4185/3750 \nf 1335/1092/819 4246/4185/3750 4247/4186/3751 \nf 1335/1092/819 1336/1316/820 4246/4185/3750 \nf 1334/1315/818 4247/4186/3751 4248/4187/3752 \nf 1334/1315/818 1335/1092/819 4247/4186/3751 \nf 1333/1098/817 4248/4187/3752 4249/4188/3753 \nf 1333/1098/817 1334/1315/818 4248/4187/3752 \nf 1332/1314/816 4249/4188/3753 4250/4189/3754 \nf 1332/1314/816 1333/1098/817 4249/4188/3753 \nf 1331/1104/815 4250/4189/3754 4251/4190/3755 \nf 1331/1104/815 1332/1314/816 4250/4189/3754 \nf 1330/1313/814 4251/4190/3755 4252/4191/3756 \nf 1330/1313/814 1331/1104/815 4251/4190/3755 \nf 1329/1312/813 4252/4191/3756 4253/4192/3757 \nf 1329/1312/813 1330/1313/814 4252/4191/3756 \nf 1328/1311/812 4253/4192/3757 4254/4193/3758 \nf 1328/1311/812 1329/1312/813 4253/4192/3757 \nf 1327/1310/811 4254/4193/3758 4255/4194/3759 \nf 1327/1310/811 1328/1311/812 4254/4193/3758 \nf 1326/1119/810 4255/4194/3759 4256/4195/3760 \nf 1326/1119/810 1327/1310/811 4255/4194/3759 \nf 1325/1309/809 4256/4195/3760 4257/4196/3761 \nf 1325/1309/809 1326/1119/810 4256/4195/3760 \nf 1324/1308/808 4257/4196/3761 4258/4197/3762 \nf 1324/1308/808 1325/1309/809 4257/4196/3761 \nf 1323/1128/807 4258/4197/3762 4259/4198/3763 \nf 1323/1128/807 1324/1308/808 4258/4197/3762 \nf 1322/1307/806 4259/4198/3763 4260/4199/3764 \nf 1322/1307/806 1323/1128/807 4259/4198/3763 \nf 1321/1134/805 4260/4199/3764 4261/4200/3765 \nf 1321/1134/805 1322/1307/806 4260/4199/3764 \nf 1320/1137/804 4261/4200/3765 4262/4201/3766 \nf 1320/1137/804 1321/1134/805 4261/4200/3765 \nf 1319/1140/803 4262/4201/3766 4263/4202/3767 \nf 1319/1140/803 1320/1137/804 4262/4201/3766 \nf 1318/1143/802 4263/4202/3767 4264/4203/3768 \nf 1318/1143/802 1319/1140/803 4263/4202/3767 \nf 1317/1146/801 4264/4203/3768 4265/4204/3769 \nf 1317/1146/801 1318/1143/802 4264/4203/3768 \nf 1316/1306/800 4265/4204/3769 4266/4205/3770 \nf 1316/1306/800 1317/1146/801 4265/4204/3769 \nf 1315/1152/799 4266/4205/3770 4267/4206/3771 \nf 1315/1152/799 1316/1306/800 4266/4205/3770 \nf 1314/1155/798 4267/4206/3771 4268/4207/3772 \nf 1314/1155/798 1315/1152/799 4267/4206/3771 \nf 1313/1305/797 4268/4207/3772 4269/4208/3773 \nf 1313/1305/797 1314/1155/798 4268/4207/3772 \nf 1312/1161/796 4269/4208/3773 4270/4209/3774 \nf 1312/1161/796 1313/1305/797 4269/4208/3773 \nf 1311/1304/795 4270/4209/3774 4271/4210/3775 \nf 1311/1304/795 1312/1161/796 4270/4209/3774 \nf 1310/1167/794 4271/4210/3775 4272/4211/3776 \nf 1310/1167/794 1311/1304/795 4271/4210/3775 \nf 1309/1303/793 4272/4211/3776 4273/4212/3777 \nf 1309/1303/793 1310/1167/794 4272/4211/3776 \nf 1308/1302/792 4273/4212/3777 4274/4213/3778 \nf 1308/1302/792 1309/1303/793 4273/4212/3777 \nf 1307/1301/791 4274/4213/3778 4275/4214/3779 \nf 1307/1301/791 1308/1302/792 4274/4213/3778 \nf 1306/1300/790 4275/4214/3779 4276/4215/3780 \nf 1306/1300/790 1307/1301/791 4275/4214/3779 \nf 1305/1299/789 4276/4215/3780 4277/4216/3781 \nf 1305/1299/789 1306/1300/790 4276/4215/3780 \nf 1304/1298/788 4277/4216/3781 4278/4217/3782 \nf 1304/1298/788 1305/1299/789 4277/4216/3781 \nf 1303/1297/787 4278/4217/3782 4279/4218/3783 \nf 1303/1297/787 1304/1298/788 4278/4217/3782 \nf 1302/1296/786 4279/4218/3783 4280/4219/3784 \nf 1302/1296/786 1303/1297/787 4279/4218/3783 \nf 1301/1295/785 4280/4219/3784 4281/4220/3785 \nf 1301/1295/785 1302/1296/786 4280/4219/3784 \nf 1300/1294/784 4281/4220/3785 4282/4221/3786 \nf 1300/1294/784 1301/1295/785 4281/4220/3785 \nf 1299/1293/783 4282/4221/3786 4283/4222/3787 \nf 1299/1293/783 1300/1294/784 4282/4221/3786 \nf 1298/1292/782 4283/4222/3787 4284/4223/3788 \nf 1298/1292/782 1299/1293/783 4283/4222/3787 \nf 1297/1291/781 4284/4223/3788 4285/4224/3789 \nf 1297/1291/781 1298/1292/782 4284/4223/3788 \nf 1296/1290/780 4285/4224/3789 4286/4225/3790 \nf 1296/1290/780 1297/1291/781 4285/4224/3789 \nf 1295/1289/779 4286/4225/3790 4287/4226/3791 \nf 1295/1289/779 1296/1290/780 4286/4225/3790 \nf 1294/1288/778 4287/4226/3791 4288/4227/3792 \nf 1294/1288/778 1295/1289/779 4287/4226/3791 \nf 1293/1287/777 4288/4227/3792 4289/4228/3793 \nf 1293/1287/777 1294/1288/778 4288/4227/3792 \nf 1292/1286/776 4289/4228/3793 4290/4229/3794 \nf 1292/1286/776 1293/1287/777 4289/4228/3793 \nf 1291/1285/775 4290/4229/3794 4291/4230/3795 \nf 1291/1285/775 1292/1286/776 4290/4229/3794 \nf 1290/1284/774 4291/4230/3795 4292/4231/3796 \nf 1290/1284/774 1291/1285/775 4291/4230/3795 \nf 1289/1283/773 4292/4231/3796 4293/4232/3797 \nf 1289/1283/773 1290/1284/774 4292/4231/3796 \nf 1288/1282/772 4293/4232/3797 4294/4233/3798 \nf 1288/1282/772 1289/1283/773 4293/4232/3797 \nf 1287/1281/771 4294/4233/3798 4295/4234/3799 \nf 1287/1281/771 1288/1282/772 4294/4233/3798 \nf 1285/1279/769 4295/4234/3799 4296/4235/3800 \nf 1285/1279/769 1287/1281/771 4295/4234/3799 \nf 1286/1280/770 4296/4235/3800 4297/4236/3801 \nf 1286/1280/770 1285/1279/769 4296/4235/3800 \nf 1283/1277/768 1286/1280/770 4297/4236/3801 \nf 4300/4238/3804 1283/1277/768 4297/4236/3801 \nf 4301/4239/3805 4300/4238/3804 4297/4236/3801 \nf 4298/4237/3802 4301/4239/3805 4297/4236/3801 \nf 4300/4238/3804 1342/1321/826 1283/1277/768 \nf 4302/4240/3806 1342/1321/826 4300/4238/3804 \nf 1341/1320/825 1342/1321/826 4302/4240/3806 \nf 4302/4240/3806 4300/4238/3804 4301/4239/3805 \nf 4303/4241/3807 4301/4239/3805 4298/4237/3802 \nf 4302/4240/3806 4301/4239/3805 4303/4241/3807 \nf 4303/4241/3807 4298/4237/3802 4299/4183/3803 \nf 4304/4242/3808 4299/4183/3803 4245/4183/3748 \nf 4303/4241/3807 4299/4183/3803 4304/4242/3808 \nf 4304/4242/3808 4245/4183/3748 4192/4184/3749 \nf 4305/4243/3809 4192/4184/3749 4192/4130/3810 \nf 4304/4242/3808 4192/4184/3749 4305/4243/3809 \nf 4305/4243/3809 4192/4130/3810 4139/4077/3695 \nf 4306/4244/3811 4139/4077/3695 4139/4077/3640 \nf 4305/4243/3809 4139/4077/3695 4306/4244/3811 \nf 4306/4244/3811 4139/4077/3640 4086/4024/3641 \nf 4307/4245/3812 4086/4024/3641 4086/4024/3586 \nf 4306/4244/3811 4086/4024/3641 4307/4245/3812 \nf 4307/4245/3812 4086/4024/3586 4033/3971/3587 \nf 392/389/199 4033/3971/3587 4033/3971/3533 \nf 4307/4245/3812 4033/3971/3587 392/389/199 \nf 392/389/199 4033/3971/3533 390/387/198 \nf 4307/4245/3812 392/389/199 396/393/203 \nf 4308/4246/3813 396/393/203 397/394/204 \nf 4308/4246/3813 4307/4245/3812 396/393/203 \nf 4309/4247/3814 397/394/204 398/395/205 \nf 4309/4247/3814 4308/4246/3813 397/394/204 \nf 4310/4248/3815 398/395/205 399/396/206 \nf 4310/4248/3815 4309/4247/3814 398/395/205 \nf 4311/4249/3816 399/396/206 400/397/207 \nf 4311/4249/3816 4310/4248/3815 399/396/206 \nf 4312/4250/3817 400/397/207 402/399/208 \nf 4312/4250/3817 4311/4249/3816 400/397/207 \nf 4313/4251/3818 402/399/208 404/401/209 \nf 4313/4251/3818 4312/4250/3817 402/399/208 \nf 4314/4252/3819 404/401/209 406/403/210 \nf 4314/4252/3819 4313/4251/3818 404/401/209 \nf 4315/4253/3820 406/403/210 408/405/211 \nf 4315/4253/3820 4314/4252/3819 406/403/210 \nf 4316/4254/3821 408/405/211 410/407/212 \nf 4316/4254/3821 4315/4253/3820 408/405/211 \nf 4317/4255/3822 410/407/212 412/409/213 \nf 4317/4255/3822 4316/4254/3821 410/407/212 \nf 4318/4256/3823 412/409/213 414/411/214 \nf 4318/4256/3823 4317/4255/3822 412/409/213 \nf 4319/4257/3824 414/411/214 416/413/215 \nf 4319/4257/3824 4318/4256/3823 414/411/214 \nf 4320/4258/3825 416/413/215 418/415/216 \nf 4320/4258/3825 4319/4257/3824 416/413/215 \nf 4321/4259/3826 418/415/216 420/417/217 \nf 4321/4259/3826 4320/4258/3825 418/415/216 \nf 4322/4260/3827 420/417/217 422/419/218 \nf 4322/4260/3827 4321/4259/3826 420/417/217 \nf 4323/4261/3828 422/419/218 424/421/219 \nf 4323/4261/3828 4322/4260/3827 422/419/218 \nf 4324/4262/3829 424/421/219 426/423/220 \nf 4324/4262/3829 4323/4261/3828 424/421/219 \nf 4325/4263/3830 426/423/220 428/425/221 \nf 4325/4263/3830 4324/4262/3829 426/423/220 \nf 4326/4264/3831 428/425/221 430/427/222 \nf 4326/4264/3831 4325/4263/3830 428/425/221 \nf 4327/4265/3832 430/427/222 432/429/223 \nf 4327/4265/3832 4326/4264/3831 430/427/222 \nf 4328/4266/3833 432/429/223 434/431/224 \nf 4328/4266/3833 4327/4265/3832 432/429/223 \nf 4329/4267/3834 434/431/224 436/433/225 \nf 4329/4267/3834 4328/4266/3833 434/431/224 \nf 4330/4268/3835 436/433/225 438/435/226 \nf 4330/4268/3835 4329/4267/3834 436/433/225 \nf 4331/4269/3836 438/435/226 440/437/227 \nf 4331/4269/3836 4330/4268/3835 438/435/226 \nf 4332/4270/3837 440/437/227 442/439/228 \nf 4332/4270/3837 4331/4269/3836 440/437/227 \nf 4333/4271/3838 442/439/228 444/441/229 \nf 4333/4271/3838 4332/4270/3837 442/439/228 \nf 4334/4272/3839 444/441/229 446/443/230 \nf 4334/4272/3839 4333/4271/3838 444/441/229 \nf 4335/4273/3840 446/443/230 448/445/231 \nf 4335/4273/3840 4334/4272/3839 446/443/230 \nf 4336/4274/3841 448/445/231 450/447/232 \nf 4336/4274/3841 4335/4273/3840 448/445/231 \nf 4337/4275/3842 450/447/232 452/449/233 \nf 4337/4275/3842 4336/4274/3841 450/447/232 \nf 4338/4276/3843 452/449/233 454/451/234 \nf 4338/4276/3843 4337/4275/3842 452/449/233 \nf 4339/4277/3844 454/451/234 456/453/235 \nf 4339/4277/3844 4338/4276/3843 454/451/234 \nf 4340/4278/3845 456/453/235 458/455/236 \nf 4340/4278/3845 4339/4277/3844 456/453/235 \nf 4341/4279/3846 458/455/236 460/457/237 \nf 4341/4279/3846 4340/4278/3845 458/455/236 \nf 4342/4280/3847 460/457/237 462/459/238 \nf 4342/4280/3847 4341/4279/3846 460/457/237 \nf 4343/4281/3848 462/459/238 464/461/239 \nf 4343/4281/3848 4342/4280/3847 462/459/238 \nf 4344/4282/3849 464/461/239 466/463/240 \nf 4344/4282/3849 4343/4281/3848 464/461/239 \nf 4345/4283/3850 466/463/240 468/465/241 \nf 4345/4283/3850 4344/4282/3849 466/463/240 \nf 4346/4284/3851 468/465/241 470/467/242 \nf 4346/4284/3851 4345/4283/3850 468/465/241 \nf 4347/4285/3852 470/467/242 472/469/243 \nf 4347/4285/3852 4346/4284/3851 470/467/242 \nf 4348/4286/3853 472/469/243 474/471/244 \nf 4348/4286/3853 4347/4285/3852 472/469/243 \nf 4349/4287/3854 474/471/244 476/473/245 \nf 4349/4287/3854 4348/4286/3853 474/471/244 \nf 4350/4288/3855 476/473/245 478/475/246 \nf 4350/4288/3855 4349/4287/3854 476/473/245 \nf 4351/4289/3856 478/475/246 480/477/247 \nf 4351/4289/3856 4350/4288/3855 478/475/246 \nf 4352/4290/3857 480/477/247 482/479/248 \nf 4352/4290/3857 4351/4289/3856 480/477/247 \nf 4353/4291/3858 482/479/248 484/481/249 \nf 4353/4291/3858 4352/4290/3857 482/479/248 \nf 4354/4292/3859 484/481/249 486/483/250 \nf 4354/4292/3859 4353/4291/3858 484/481/249 \nf 4355/4293/3860 486/483/250 488/485/251 \nf 4355/4293/3860 4354/4292/3859 486/483/250 \nf 4356/4294/3861 488/485/251 491/488/252 \nf 4356/4294/3861 4355/4293/3860 488/485/251 \nf 4357/4295/3862 491/488/252 493/490/253 \nf 4357/4295/3862 4356/4294/3861 491/488/252 \nf 4358/4296/3863 493/490/253 495/492/254 \nf 4358/4296/3863 4357/4295/3862 493/490/253 \nf 4359/4297/3864 495/492/254 497/494/255 \nf 4359/4297/3864 4358/4296/3863 495/492/254 \nf 4360/4298/3865 497/494/255 499/496/256 \nf 4360/4298/3865 4359/4297/3864 497/494/255 \nf 4361/4299/3866 499/496/256 501/498/257 \nf 4361/4299/3866 4360/4298/3865 499/496/256 \nf 4362/4300/3867 501/498/257 503/500/258 \nf 4362/4300/3867 4361/4299/3866 501/498/257 \nf 4363/4301/3868 503/500/258 505/502/259 \nf 4363/4301/3868 4362/4300/3867 503/500/258 \nf 4364/4302/3869 505/502/259 507/504/260 \nf 4364/4302/3869 4363/4301/3868 505/502/259 \nf 4365/4303/3870 507/504/260 509/506/261 \nf 4365/4303/3870 4364/4302/3869 507/504/260 \nf 4366/4304/3871 509/506/261 511/508/262 \nf 4366/4304/3871 4365/4303/3870 509/506/261 \nf 4367/4305/3872 511/508/262 513/510/263 \nf 4367/4305/3872 4366/4304/3871 511/508/262 \nf 4368/4306/3873 513/510/263 515/512/264 \nf 4368/4306/3873 4367/4305/3872 513/510/263 \nf 4369/4307/3874 515/512/264 517/514/265 \nf 4369/4307/3874 4368/4306/3873 515/512/264 \nf 4370/4308/3875 517/514/265 519/516/266 \nf 4370/4308/3875 4369/4307/3874 517/514/265 \nf 4371/4309/3876 519/516/266 521/518/267 \nf 4371/4309/3876 4370/4308/3875 519/516/266 \nf 4372/4310/3877 521/518/267 523/520/268 \nf 4372/4310/3877 4371/4309/3876 521/518/267 \nf 4373/4311/3878 523/520/268 527/524/269 \nf 4373/4311/3878 4372/4310/3877 523/520/268 \nf 4374/4312/3879 527/524/269 529/526/141 \nf 4374/4312/3879 4373/4311/3878 527/524/269 \nf 3938/3876/1470 4374/4312/3879 529/526/141 \nf 4306/4244/3811 4307/4245/3812 4308/4246/3813 \nf 4375/4313/3880 4308/4246/3813 4309/4247/3814 \nf 4375/4313/3880 4306/4244/3811 4308/4246/3813 \nf 4376/4314/3881 4309/4247/3814 4310/4248/3815 \nf 4376/4314/3881 4375/4313/3880 4309/4247/3814 \nf 4377/4315/3882 4310/4248/3815 4311/4249/3816 \nf 4377/4315/3882 4376/4314/3881 4310/4248/3815 \nf 4378/4316/3883 4311/4249/3816 4312/4250/3817 \nf 4378/4316/3883 4377/4315/3882 4311/4249/3816 \nf 4379/4317/3884 4312/4250/3817 4313/4251/3818 \nf 4379/4317/3884 4378/4316/3883 4312/4250/3817 \nf 4380/4318/3885 4313/4251/3818 4314/4252/3819 \nf 4380/4318/3885 4379/4317/3884 4313/4251/3818 \nf 4381/4319/3886 4314/4252/3819 4315/4253/3820 \nf 4381/4319/3886 4380/4318/3885 4314/4252/3819 \nf 4382/4320/3887 4315/4253/3820 4316/4254/3821 \nf 4382/4320/3887 4381/4319/3886 4315/4253/3820 \nf 4383/4321/3888 4316/4254/3821 4317/4255/3822 \nf 4383/4321/3888 4382/4320/3887 4316/4254/3821 \nf 4384/4322/3889 4317/4255/3822 4318/4256/3823 \nf 4384/4322/3889 4383/4321/3888 4317/4255/3822 \nf 4385/4323/3890 4318/4256/3823 4319/4257/3824 \nf 4385/4323/3890 4384/4322/3889 4318/4256/3823 \nf 4386/4324/3891 4319/4257/3824 4320/4258/3825 \nf 4386/4324/3891 4385/4323/3890 4319/4257/3824 \nf 4387/4325/3892 4320/4258/3825 4321/4259/3826 \nf 4387/4325/3892 4386/4324/3891 4320/4258/3825 \nf 4388/4326/3893 4321/4259/3826 4322/4260/3827 \nf 4388/4326/3893 4387/4325/3892 4321/4259/3826 \nf 4389/4327/3894 4322/4260/3827 4323/4261/3828 \nf 4389/4327/3894 4388/4326/3893 4322/4260/3827 \nf 4390/4328/3895 4323/4261/3828 4324/4262/3829 \nf 4390/4328/3895 4389/4327/3894 4323/4261/3828 \nf 4391/4329/3896 4324/4262/3829 4325/4263/3830 \nf 4391/4329/3896 4390/4328/3895 4324/4262/3829 \nf 4392/4330/3897 4325/4263/3830 4326/4264/3831 \nf 4392/4330/3897 4391/4329/3896 4325/4263/3830 \nf 4393/4331/3898 4326/4264/3831 4327/4265/3832 \nf 4393/4331/3898 4392/4330/3897 4326/4264/3831 \nf 4394/4332/3899 4327/4265/3832 4328/4266/3833 \nf 4394/4332/3899 4393/4331/3898 4327/4265/3832 \nf 4395/4333/3900 4328/4266/3833 4329/4267/3834 \nf 4395/4333/3900 4394/4332/3899 4328/4266/3833 \nf 4396/4334/3901 4329/4267/3834 4330/4268/3835 \nf 4396/4334/3901 4395/4333/3900 4329/4267/3834 \nf 4397/4335/3902 4330/4268/3835 4331/4269/3836 \nf 4397/4335/3902 4396/4334/3901 4330/4268/3835 \nf 4398/4336/3903 4331/4269/3836 4332/4270/3837 \nf 4398/4336/3903 4397/4335/3902 4331/4269/3836 \nf 4399/4337/3904 4332/4270/3837 4333/4271/3838 \nf 4399/4337/3904 4398/4336/3903 4332/4270/3837 \nf 4400/4338/3905 4333/4271/3838 4334/4272/3839 \nf 4400/4338/3905 4399/4337/3904 4333/4271/3838 \nf 4401/4339/3906 4334/4272/3839 4335/4273/3840 \nf 4401/4339/3906 4400/4338/3905 4334/4272/3839 \nf 4402/4340/3907 4335/4273/3840 4336/4274/3841 \nf 4402/4340/3907 4401/4339/3906 4335/4273/3840 \nf 4403/4341/3908 4336/4274/3841 4337/4275/3842 \nf 4403/4341/3908 4402/4340/3907 4336/4274/3841 \nf 4404/4342/3909 4337/4275/3842 4338/4276/3843 \nf 4404/4342/3909 4403/4341/3908 4337/4275/3842 \nf 4405/4343/3910 4338/4276/3843 4339/4277/3844 \nf 4405/4343/3910 4404/4342/3909 4338/4276/3843 \nf 4406/4344/3911 4339/4277/3844 4340/4278/3845 \nf 4406/4344/3911 4405/4343/3910 4339/4277/3844 \nf 4407/4345/3912 4340/4278/3845 4341/4279/3846 \nf 4407/4345/3912 4406/4344/3911 4340/4278/3845 \nf 4408/4346/3913 4341/4279/3846 4342/4280/3847 \nf 4408/4346/3913 4407/4345/3912 4341/4279/3846 \nf 4409/4347/3914 4342/4280/3847 4343/4281/3848 \nf 4409/4347/3914 4408/4346/3913 4342/4280/3847 \nf 4410/4348/3915 4343/4281/3848 4344/4282/3849 \nf 4410/4348/3915 4409/4347/3914 4343/4281/3848 \nf 4411/4349/3916 4344/4282/3849 4345/4283/3850 \nf 4411/4349/3916 4410/4348/3915 4344/4282/3849 \nf 4412/4350/3917 4345/4283/3850 4346/4284/3851 \nf 4412/4350/3917 4411/4349/3916 4345/4283/3850 \nf 4413/4351/3918 4346/4284/3851 4347/4285/3852 \nf 4413/4351/3918 4412/4350/3917 4346/4284/3851 \nf 4414/4352/3919 4347/4285/3852 4348/4286/3853 \nf 4414/4352/3919 4413/4351/3918 4347/4285/3852 \nf 4415/4353/3920 4348/4286/3853 4349/4287/3854 \nf 4415/4353/3920 4414/4352/3919 4348/4286/3853 \nf 4416/4354/3921 4349/4287/3854 4350/4288/3855 \nf 4416/4354/3921 4415/4353/3920 4349/4287/3854 \nf 4417/4355/3922 4350/4288/3855 4351/4289/3856 \nf 4417/4355/3922 4416/4354/3921 4350/4288/3855 \nf 4418/4356/3923 4351/4289/3856 4352/4290/3857 \nf 4418/4356/3923 4417/4355/3922 4351/4289/3856 \nf 4419/4357/3924 4352/4290/3857 4353/4291/3858 \nf 4419/4357/3924 4418/4356/3923 4352/4290/3857 \nf 4420/4358/3925 4353/4291/3858 4354/4292/3859 \nf 4420/4358/3925 4419/4357/3924 4353/4291/3858 \nf 4421/4359/3926 4354/4292/3859 4355/4293/3860 \nf 4421/4359/3926 4420/4358/3925 4354/4292/3859 \nf 4422/4360/3927 4355/4293/3860 4356/4294/3861 \nf 4422/4360/3927 4421/4359/3926 4355/4293/3860 \nf 4423/4361/3928 4356/4294/3861 4357/4295/3862 \nf 4423/4361/3928 4422/4360/3927 4356/4294/3861 \nf 4424/4362/3929 4357/4295/3862 4358/4296/3863 \nf 4424/4362/3929 4423/4361/3928 4357/4295/3862 \nf 4425/4363/3930 4358/4296/3863 4359/4297/3864 \nf 4425/4363/3930 4424/4362/3929 4358/4296/3863 \nf 4426/4364/3931 4359/4297/3864 4360/4298/3865 \nf 4426/4364/3931 4425/4363/3930 4359/4297/3864 \nf 4427/4365/3932 4360/4298/3865 4361/4299/3866 \nf 4427/4365/3932 4426/4364/3931 4360/4298/3865 \nf 4428/4366/3933 4361/4299/3866 4362/4300/3867 \nf 4428/4366/3933 4427/4365/3932 4361/4299/3866 \nf 4429/4367/3934 4362/4300/3867 4363/4301/3868 \nf 4429/4367/3934 4428/4366/3933 4362/4300/3867 \nf 4430/4368/3935 4363/4301/3868 4364/4302/3869 \nf 4430/4368/3935 4429/4367/3934 4363/4301/3868 \nf 4431/4369/3936 4364/4302/3869 4365/4303/3870 \nf 4431/4369/3936 4430/4368/3935 4364/4302/3869 \nf 4432/4370/3937 4365/4303/3870 4366/4304/3871 \nf 4432/4370/3937 4431/4369/3936 4365/4303/3870 \nf 4433/4371/3938 4366/4304/3871 4367/4305/3872 \nf 4433/4371/3938 4432/4370/3937 4366/4304/3871 \nf 4434/4372/3939 4367/4305/3872 4368/4306/3873 \nf 4434/4372/3939 4433/4371/3938 4367/4305/3872 \nf 4435/4373/3940 4368/4306/3873 4369/4307/3874 \nf 4435/4373/3940 4434/4372/3939 4368/4306/3873 \nf 4436/4374/3941 4369/4307/3874 4370/4308/3875 \nf 4436/4374/3941 4435/4373/3940 4369/4307/3874 \nf 4437/4375/3942 4370/4308/3875 4371/4309/3876 \nf 4437/4375/3942 4436/4374/3941 4370/4308/3875 \nf 4438/4376/3943 4371/4309/3876 4372/4310/3877 \nf 4438/4376/3943 4437/4375/3942 4371/4309/3876 \nf 4439/4377/3944 4372/4310/3877 4373/4311/3878 \nf 4439/4377/3944 4438/4376/3943 4372/4310/3877 \nf 4440/4378/3945 4373/4311/3878 4374/4312/3879 \nf 4440/4378/3945 4439/4377/3944 4373/4311/3878 \nf 4441/4379/3946 4374/4312/3879 3938/3876/1470 \nf 4441/4379/3946 4440/4378/3945 4374/4312/3879 \nf 3939/3877/1473 4441/4379/3946 3938/3876/1470 \nf 4305/4243/3809 4306/4244/3811 4375/4313/3880 \nf 4442/4380/3947 4375/4313/3880 4376/4314/3881 \nf 4442/4380/3947 4305/4243/3809 4375/4313/3880 \nf 4443/4381/3948 4376/4314/3881 4377/4315/3882 \nf 4443/4381/3948 4442/4380/3947 4376/4314/3881 \nf 4444/4382/3949 4377/4315/3882 4378/4316/3883 \nf 4444/4382/3949 4443/4381/3948 4377/4315/3882 \nf 4445/4383/3950 4378/4316/3883 4379/4317/3884 \nf 4445/4383/3950 4444/4382/3949 4378/4316/3883 \nf 4446/4384/3951 4379/4317/3884 4380/4318/3885 \nf 4446/4384/3951 4445/4383/3950 4379/4317/3884 \nf 4447/4385/3952 4380/4318/3885 4381/4319/3886 \nf 4447/4385/3952 4446/4384/3951 4380/4318/3885 \nf 4448/4386/3953 4381/4319/3886 4382/4320/3887 \nf 4448/4386/3953 4447/4385/3952 4381/4319/3886 \nf 4449/4387/3954 4382/4320/3887 4383/4321/3888 \nf 4449/4387/3954 4448/4386/3953 4382/4320/3887 \nf 4450/4388/3955 4383/4321/3888 4384/4322/3889 \nf 4450/4388/3955 4449/4387/3954 4383/4321/3888 \nf 4451/4389/3956 4384/4322/3889 4385/4323/3890 \nf 4451/4389/3956 4450/4388/3955 4384/4322/3889 \nf 4452/4390/3957 4385/4323/3890 4386/4324/3891 \nf 4452/4390/3957 4451/4389/3956 4385/4323/3890 \nf 4453/4324/3958 4386/4324/3891 4387/4325/3892 \nf 4453/4324/3958 4452/4390/3957 4386/4324/3891 \nf 4454/4391/3959 4387/4325/3892 4388/4326/3893 \nf 4454/4391/3959 4453/4324/3958 4387/4325/3892 \nf 4455/4326/3960 4388/4326/3893 4389/4327/3894 \nf 4455/4326/3960 4454/4391/3959 4388/4326/3893 \nf 4456/4392/3961 4389/4327/3894 4390/4328/3895 \nf 4456/4392/3961 4455/4326/3960 4389/4327/3894 \nf 4457/4328/3962 4390/4328/3895 4391/4329/3896 \nf 4457/4328/3962 4456/4392/3961 4390/4328/3895 \nf 4458/4393/3963 4391/4329/3896 4392/4330/3897 \nf 4458/4393/3963 4457/4328/3962 4391/4329/3896 \nf 4459/4330/3964 4392/4330/3897 4393/4331/3898 \nf 4459/4330/3964 4458/4393/3963 4392/4330/3897 \nf 4460/4394/3965 4393/4331/3898 4394/4332/3899 \nf 4460/4394/3965 4459/4330/3964 4393/4331/3898 \nf 4461/4332/3966 4394/4332/3899 4395/4333/3900 \nf 4461/4332/3966 4460/4394/3965 4394/4332/3899 \nf 4462/4333/3967 4395/4333/3900 4396/4334/3901 \nf 4462/4333/3967 4461/4332/3966 4395/4333/3900 \nf 4463/4334/3968 4396/4334/3901 4397/4335/3902 \nf 4463/4334/3968 4462/4333/3967 4396/4334/3901 \nf 4464/4335/3969 4397/4335/3902 4398/4336/3903 \nf 4464/4335/3969 4463/4334/3968 4397/4335/3902 \nf 4465/4336/3970 4398/4336/3903 4399/4337/3904 \nf 4465/4336/3970 4464/4335/3969 4398/4336/3903 \nf 4466/4337/3971 4399/4337/3904 4400/4338/3905 \nf 4466/4337/3971 4465/4336/3970 4399/4337/3904 \nf 4467/4338/3972 4400/4338/3905 4401/4339/3906 \nf 4467/4338/3972 4466/4337/3971 4400/4338/3905 \nf 4468/4395/3973 4401/4339/3906 4402/4340/3907 \nf 4468/4395/3973 4467/4338/3972 4401/4339/3906 \nf 4469/4340/3974 4402/4340/3907 4403/4341/3908 \nf 4469/4340/3974 4468/4395/3973 4402/4340/3907 \nf 4470/4396/3975 4403/4341/3908 4404/4342/3909 \nf 4470/4396/3975 4469/4340/3974 4403/4341/3908 \nf 4471/4397/3976 4404/4342/3909 4405/4343/3910 \nf 4471/4397/3976 4470/4396/3975 4404/4342/3909 \nf 4472/4398/3977 4405/4343/3910 4406/4344/3911 \nf 4472/4398/3977 4471/4397/3976 4405/4343/3910 \nf 4473/4399/3978 4406/4344/3911 4407/4345/3912 \nf 4473/4399/3978 4472/4398/3977 4406/4344/3911 \nf 4474/4400/3979 4407/4345/3912 4408/4346/3913 \nf 4474/4400/3979 4473/4399/3978 4407/4345/3912 \nf 4475/4401/3980 4408/4346/3913 4409/4347/3914 \nf 4475/4401/3980 4474/4400/3979 4408/4346/3913 \nf 4476/4402/3981 4409/4347/3914 4410/4348/3915 \nf 4476/4402/3981 4475/4401/3980 4409/4347/3914 \nf 4477/4403/3982 4410/4348/3915 4411/4349/3916 \nf 4477/4403/3982 4476/4402/3981 4410/4348/3915 \nf 4478/4404/3983 4411/4349/3916 4412/4350/3917 \nf 4478/4404/3983 4477/4403/3982 4411/4349/3916 \nf 4479/4405/3984 4412/4350/3917 4413/4351/3918 \nf 4479/4405/3984 4478/4404/3983 4412/4350/3917 \nf 4480/4406/3985 4413/4351/3918 4414/4352/3919 \nf 4480/4406/3985 4479/4405/3984 4413/4351/3918 \nf 4481/4407/3986 4414/4352/3919 4415/4353/3920 \nf 4481/4407/3986 4480/4406/3985 4414/4352/3919 \nf 4482/4408/3987 4415/4353/3920 4416/4354/3921 \nf 4482/4408/3987 4481/4407/3986 4415/4353/3920 \nf 4483/4409/3988 4416/4354/3921 4417/4355/3922 \nf 4483/4409/3988 4482/4408/3987 4416/4354/3921 \nf 4484/4410/3989 4417/4355/3922 4418/4356/3923 \nf 4484/4410/3989 4483/4409/3988 4417/4355/3922 \nf 4485/4411/3990 4418/4356/3923 4419/4357/3924 \nf 4485/4411/3990 4484/4410/3989 4418/4356/3923 \nf 4486/4412/3991 4419/4357/3924 4420/4358/3925 \nf 4486/4412/3991 4485/4411/3990 4419/4357/3924 \nf 4487/4413/3992 4420/4358/3925 4421/4359/3926 \nf 4487/4413/3992 4486/4412/3991 4420/4358/3925 \nf 4488/4414/3993 4421/4359/3926 4422/4360/3927 \nf 4488/4414/3993 4487/4413/3992 4421/4359/3926 \nf 4489/4415/3994 4422/4360/3927 4423/4361/3928 \nf 4489/4415/3994 4488/4414/3993 4422/4360/3927 \nf 4490/4416/3995 4423/4361/3928 4424/4362/3929 \nf 4490/4416/3995 4489/4415/3994 4423/4361/3928 \nf 4491/4417/3996 4424/4362/3929 4425/4363/3930 \nf 4491/4417/3996 4490/4416/3995 4424/4362/3929 \nf 4492/4418/3997 4425/4363/3930 4426/4364/3931 \nf 4492/4418/3997 4491/4417/3996 4425/4363/3930 \nf 4493/4419/3998 4426/4364/3931 4427/4365/3932 \nf 4493/4419/3998 4492/4418/3997 4426/4364/3931 \nf 4494/4420/3999 4427/4365/3932 4428/4366/3933 \nf 4494/4420/3999 4493/4419/3998 4427/4365/3932 \nf 4495/4421/4000 4428/4366/3933 4429/4367/3934 \nf 4495/4421/4000 4494/4420/3999 4428/4366/3933 \nf 4496/4422/4001 4429/4367/3934 4430/4368/3935 \nf 4496/4422/4001 4495/4421/4000 4429/4367/3934 \nf 4497/4423/4002 4430/4368/3935 4431/4369/3936 \nf 4497/4423/4002 4496/4422/4001 4430/4368/3935 \nf 4498/4424/4003 4431/4369/3936 4432/4370/3937 \nf 4498/4424/4003 4497/4423/4002 4431/4369/3936 \nf 4499/4425/4004 4432/4370/3937 4433/4371/3938 \nf 4499/4425/4004 4498/4424/4003 4432/4370/3937 \nf 4500/4426/4005 4433/4371/3938 4434/4372/3939 \nf 4500/4426/4005 4499/4425/4004 4433/4371/3938 \nf 4501/4427/4006 4434/4372/3939 4435/4373/3940 \nf 4501/4427/4006 4500/4426/4005 4434/4372/3939 \nf 4502/4428/4007 4435/4373/3940 4436/4374/3941 \nf 4502/4428/4007 4501/4427/4006 4435/4373/3940 \nf 4503/4429/4008 4436/4374/3941 4437/4375/3942 \nf 4503/4429/4008 4502/4428/4007 4436/4374/3941 \nf 4504/4430/4009 4437/4375/3942 4438/4376/3943 \nf 4504/4430/4009 4503/4429/4008 4437/4375/3942 \nf 4505/4431/4010 4438/4376/3943 4439/4377/3944 \nf 4505/4431/4010 4504/4430/4009 4438/4376/3943 \nf 4506/4432/4011 4439/4377/3944 4440/4378/3945 \nf 4506/4432/4011 4505/4431/4010 4439/4377/3944 \nf 4507/4433/4012 4440/4378/3945 4441/4379/3946 \nf 4507/4433/4012 4506/4432/4011 4440/4378/3945 \nf 4508/4434/4013 4441/4379/3946 3939/3877/1473 \nf 4508/4434/4013 4507/4433/4012 4441/4379/3946 \nf 3940/3878/1476 4508/4434/4013 3939/3877/1473 \nf 4304/4242/3808 4305/4243/3809 4442/4380/3947 \nf 4509/4435/4014 4442/4380/3947 4443/4381/3948 \nf 4509/4435/4014 4304/4242/3808 4442/4380/3947 \nf 4510/4436/4015 4443/4381/3948 4444/4382/3949 \nf 4510/4436/4015 4509/4435/4014 4443/4381/3948 \nf 4511/4437/4016 4444/4382/3949 4445/4383/3950 \nf 4511/4437/4016 4510/4436/4015 4444/4382/3949 \nf 4512/4438/4017 4445/4383/3950 4446/4384/3951 \nf 4512/4438/4017 4511/4437/4016 4445/4383/3950 \nf 4513/4439/4018 4446/4384/3951 4447/4385/3952 \nf 4513/4439/4018 4512/4438/4017 4446/4384/3951 \nf 4514/4440/4019 4447/4385/3952 4448/4386/3953 \nf 4514/4440/4019 4513/4439/4018 4447/4385/3952 \nf 4515/4441/4020 4448/4386/3953 4449/4387/3954 \nf 4515/4441/4020 4514/4440/4019 4448/4386/3953 \nf 4516/4442/4021 4449/4387/3954 4450/4388/3955 \nf 4516/4442/4021 4515/4441/4020 4449/4387/3954 \nf 4517/4443/4022 4450/4388/3955 4451/4389/3956 \nf 4517/4443/4022 4516/4442/4021 4450/4388/3955 \nf 4518/4444/4023 4451/4389/3956 4452/4390/3957 \nf 4518/4444/4023 4517/4443/4022 4451/4389/3956 \nf 4519/4445/4024 4452/4390/3957 4453/4324/3958 \nf 4519/4445/4024 4518/4444/4023 4452/4390/3957 \nf 4520/4446/4025 4453/4324/3958 4454/4391/3959 \nf 4520/4446/4025 4519/4445/4024 4453/4324/3958 \nf 4521/4447/4026 4454/4391/3959 4455/4326/3960 \nf 4521/4447/4026 4520/4446/4025 4454/4391/3959 \nf 4522/4448/4027 4455/4326/3960 4456/4392/3961 \nf 4522/4448/4027 4521/4447/4026 4455/4326/3960 \nf 4523/4449/4028 4456/4392/3961 4457/4328/3962 \nf 4523/4449/4028 4522/4448/4027 4456/4392/3961 \nf 4524/4450/4029 4457/4328/3962 4458/4393/3963 \nf 4524/4450/4029 4523/4449/4028 4457/4328/3962 \nf 4525/4451/4030 4458/4393/3963 4459/4330/3964 \nf 4525/4451/4030 4524/4450/4029 4458/4393/3963 \nf 4526/4263/4031 4459/4330/3964 4460/4394/3965 \nf 4526/4263/4031 4525/4451/4030 4459/4330/3964 \nf 4527/4452/4032 4460/4394/3965 4461/4332/3966 \nf 4527/4452/4032 4526/4263/4031 4460/4394/3965 \nf 4528/4265/4033 4461/4332/3966 4462/4333/3967 \nf 4528/4265/4033 4527/4452/4032 4461/4332/3966 \nf 4529/4266/4034 4462/4333/3967 4463/4334/3968 \nf 4529/4266/4034 4528/4265/4033 4462/4333/3967 \nf 4530/4453/4035 4463/4334/3968 4464/4335/3969 \nf 4530/4453/4035 4529/4266/4034 4463/4334/3968 \nf 4531/4335/4036 4464/4335/3969 4465/4336/3970 \nf 4531/4335/4036 4530/4453/4035 4464/4335/3969 \nf 4532/4454/4037 4465/4336/3970 4466/4337/3971 \nf 4532/4454/4037 4531/4335/4036 4465/4336/3970 \nf 4533/4455/4038 4466/4337/3971 4467/4338/3972 \nf 4533/4455/4038 4532/4454/4037 4466/4337/3971 \nf 4534/4456/4039 4467/4338/3972 4468/4395/3973 \nf 4534/4456/4039 4533/4455/4038 4467/4338/3972 \nf 4535/4457/4040 4468/4395/3973 4469/4340/3974 \nf 4535/4457/4040 4534/4456/4039 4468/4395/3973 \nf 4536/4458/4041 4469/4340/3974 4470/4396/3975 \nf 4536/4458/4041 4535/4457/4040 4469/4340/3974 \nf 4537/4459/4042 4470/4396/3975 4471/4397/3976 \nf 4537/4459/4042 4536/4458/4041 4470/4396/3975 \nf 4538/4460/4043 4471/4397/3976 4472/4398/3977 \nf 4538/4460/4043 4537/4459/4042 4471/4397/3976 \nf 4539/4461/4044 4472/4398/3977 4473/4399/3978 \nf 4539/4461/4044 4538/4460/4043 4472/4398/3977 \nf 4540/4462/4045 4473/4399/3978 4474/4400/3979 \nf 4540/4462/4045 4539/4461/4044 4473/4399/3978 \nf 4541/4463/4046 4474/4400/3979 4475/4401/3980 \nf 4541/4463/4046 4540/4462/4045 4474/4400/3979 \nf 4542/4464/4047 4475/4401/3980 4476/4402/3981 \nf 4542/4464/4047 4541/4463/4046 4475/4401/3980 \nf 4543/4465/4048 4476/4402/3981 4477/4403/3982 \nf 4543/4465/4048 4542/4464/4047 4476/4402/3981 \nf 4544/4466/4049 4477/4403/3982 4478/4404/3983 \nf 4544/4466/4049 4543/4465/4048 4477/4403/3982 \nf 4545/4467/4050 4478/4404/3983 4479/4405/3984 \nf 4545/4467/4050 4544/4466/4049 4478/4404/3983 \nf 4546/4468/4051 4479/4405/3984 4480/4406/3985 \nf 4546/4468/4051 4545/4467/4050 4479/4405/3984 \nf 4547/4469/4052 4480/4406/3985 4481/4407/3986 \nf 4547/4469/4052 4546/4468/4051 4480/4406/3985 \nf 4548/4470/4053 4481/4407/3986 4482/4408/3987 \nf 4548/4470/4053 4547/4469/4052 4481/4407/3986 \nf 4549/4471/4054 4482/4408/3987 4483/4409/3988 \nf 4549/4471/4054 4548/4470/4053 4482/4408/3987 \nf 4550/4472/4055 4483/4409/3988 4484/4410/3989 \nf 4550/4472/4055 4549/4471/4054 4483/4409/3988 \nf 4551/4473/4056 4484/4410/3989 4485/4411/3990 \nf 4551/4473/4056 4550/4472/4055 4484/4410/3989 \nf 4552/4474/4057 4485/4411/3990 4486/4412/3991 \nf 4552/4474/4057 4551/4473/4056 4485/4411/3990 \nf 4553/4475/4058 4486/4412/3991 4487/4413/3992 \nf 4553/4475/4058 4552/4474/4057 4486/4412/3991 \nf 4554/4476/4059 4487/4413/3992 4488/4414/3993 \nf 4554/4476/4059 4553/4475/4058 4487/4413/3992 \nf 4555/4477/4060 4488/4414/3993 4489/4415/3994 \nf 4555/4477/4060 4554/4476/4059 4488/4414/3993 \nf 4556/4478/4061 4489/4415/3994 4490/4416/3995 \nf 4556/4478/4061 4555/4477/4060 4489/4415/3994 \nf 4557/4479/4062 4490/4416/3995 4491/4417/3996 \nf 4557/4479/4062 4556/4478/4061 4490/4416/3995 \nf 4558/4480/4063 4491/4417/3996 4492/4418/3997 \nf 4558/4480/4063 4557/4479/4062 4491/4417/3996 \nf 4559/4481/4064 4492/4418/3997 4493/4419/3998 \nf 4559/4481/4064 4558/4480/4063 4492/4418/3997 \nf 4560/4482/4065 4493/4419/3998 4494/4420/3999 \nf 4560/4482/4065 4559/4481/4064 4493/4419/3998 \nf 4561/4483/4066 4494/4420/3999 4495/4421/4000 \nf 4561/4483/4066 4560/4482/4065 4494/4420/3999 \nf 4562/4484/4067 4495/4421/4000 4496/4422/4001 \nf 4562/4484/4067 4561/4483/4066 4495/4421/4000 \nf 4563/4485/4068 4496/4422/4001 4497/4423/4002 \nf 4563/4485/4068 4562/4484/4067 4496/4422/4001 \nf 4564/4486/4069 4497/4423/4002 4498/4424/4003 \nf 4564/4486/4069 4563/4485/4068 4497/4423/4002 \nf 4565/4487/4070 4498/4424/4003 4499/4425/4004 \nf 4565/4487/4070 4564/4486/4069 4498/4424/4003 \nf 4566/4488/4071 4499/4425/4004 4500/4426/4005 \nf 4566/4488/4071 4565/4487/4070 4499/4425/4004 \nf 4567/4489/4072 4500/4426/4005 4501/4427/4006 \nf 4567/4489/4072 4566/4488/4071 4500/4426/4005 \nf 4568/4490/4073 4501/4427/4006 4502/4428/4007 \nf 4568/4490/4073 4567/4489/4072 4501/4427/4006 \nf 4569/4491/4074 4502/4428/4007 4503/4429/4008 \nf 4569/4491/4074 4568/4490/4073 4502/4428/4007 \nf 4570/4492/4075 4503/4429/4008 4504/4430/4009 \nf 4570/4492/4075 4569/4491/4074 4503/4429/4008 \nf 4571/4493/4076 4504/4430/4009 4505/4431/4010 \nf 4571/4493/4076 4570/4492/4075 4504/4430/4009 \nf 4572/4494/4077 4505/4431/4010 4506/4432/4011 \nf 4572/4494/4077 4571/4493/4076 4505/4431/4010 \nf 4573/4495/4078 4506/4432/4011 4507/4433/4012 \nf 4573/4495/4078 4572/4494/4077 4506/4432/4011 \nf 4574/4496/4079 4507/4433/4012 4508/4434/4013 \nf 4574/4496/4079 4573/4495/4078 4507/4433/4012 \nf 4575/4497/4080 4508/4434/4013 3940/3878/1476 \nf 4575/4497/4080 4574/4496/4079 4508/4434/4013 \nf 3941/3879/1479 4575/4497/4080 3940/3878/1476 \nf 4303/4241/3807 4304/4242/3808 4509/4435/4014 \nf 4576/4498/4081 4509/4435/4014 4510/4436/4015 \nf 4576/4498/4081 4303/4241/3807 4509/4435/4014 \nf 4577/4499/4082 4510/4436/4015 4511/4437/4016 \nf 4577/4499/4082 4576/4498/4081 4510/4436/4015 \nf 4578/4500/4083 4511/4437/4016 4512/4438/4017 \nf 4578/4500/4083 4577/4499/4082 4511/4437/4016 \nf 4579/4501/4084 4512/4438/4017 4513/4439/4018 \nf 4579/4501/4084 4578/4500/4083 4512/4438/4017 \nf 4580/4502/4085 4513/4439/4018 4514/4440/4019 \nf 4580/4502/4085 4579/4501/4084 4513/4439/4018 \nf 4581/4503/4086 4514/4440/4019 4515/4441/4020 \nf 4581/4503/4086 4580/4502/4085 4514/4440/4019 \nf 4582/4504/4087 4515/4441/4020 4516/4442/4021 \nf 4582/4504/4087 4581/4503/4086 4515/4441/4020 \nf 4583/4505/4088 4516/4442/4021 4517/4443/4022 \nf 4583/4505/4088 4582/4504/4087 4516/4442/4021 \nf 4584/4506/4089 4517/4443/4022 4518/4444/4023 \nf 4584/4506/4089 4583/4505/4088 4517/4443/4022 \nf 4585/4507/4090 4518/4444/4023 4519/4445/4024 \nf 4585/4507/4090 4584/4506/4089 4518/4444/4023 \nf 4586/4508/4091 4519/4445/4024 4520/4446/4025 \nf 4586/4508/4091 4585/4507/4090 4519/4445/4024 \nf 4587/4509/4092 4520/4446/4025 4521/4447/4026 \nf 4587/4509/4092 4586/4508/4091 4520/4446/4025 \nf 4588/4510/4093 4521/4447/4026 4522/4448/4027 \nf 4588/4510/4093 4587/4509/4092 4521/4447/4026 \nf 4589/4511/4094 4522/4448/4027 4523/4449/4028 \nf 4589/4511/4094 4588/4510/4093 4522/4448/4027 \nf 4590/4512/4095 4523/4449/4028 4524/4450/4029 \nf 4590/4512/4095 4589/4511/4094 4523/4449/4028 \nf 4591/4513/4096 4524/4450/4029 4525/4451/4030 \nf 4591/4513/4096 4590/4512/4095 4524/4450/4029 \nf 4592/4514/4097 4525/4451/4030 4526/4263/4031 \nf 4592/4514/4097 4591/4513/4096 4525/4451/4030 \nf 4593/4515/4098 4526/4263/4031 4527/4452/4032 \nf 4593/4515/4098 4592/4514/4097 4526/4263/4031 \nf 4594/425/4099 4527/4452/4032 4528/4265/4033 \nf 4594/425/4099 4593/4515/4098 4527/4452/4032 \nf 4595/427/4100 4528/4265/4033 4529/4266/4034 \nf 4595/427/4100 4594/425/4099 4528/4265/4033 \nf 4596/429/4101 4529/4266/4034 4530/4453/4035 \nf 4596/429/4101 4595/427/4100 4529/4266/4034 \nf 4597/4516/4102 4530/4453/4035 4531/4335/4036 \nf 4597/4516/4102 4596/429/4101 4530/4453/4035 \nf 4598/4517/4103 4531/4335/4036 4532/4454/4037 \nf 4598/4517/4103 4597/4516/4102 4531/4335/4036 \nf 4599/4518/4104 4532/4454/4037 4533/4455/4038 \nf 4599/4518/4104 4598/4517/4103 4532/4454/4037 \nf 4600/4519/4105 4533/4455/4038 4534/4456/4039 \nf 4600/4519/4105 4599/4518/4104 4533/4455/4038 \nf 4601/4520/4106 4534/4456/4039 4535/4457/4040 \nf 4601/4520/4106 4600/4519/4105 4534/4456/4039 \nf 4602/4521/4107 4535/4457/4040 4536/4458/4041 \nf 4602/4521/4107 4601/4520/4106 4535/4457/4040 \nf 4603/4522/4108 4536/4458/4041 4537/4459/4042 \nf 4603/4522/4108 4602/4521/4107 4536/4458/4041 \nf 4604/4523/4109 4537/4459/4042 4538/4460/4043 \nf 4604/4523/4109 4603/4522/4108 4537/4459/4042 \nf 4605/4524/4110 4538/4460/4043 4539/4461/4044 \nf 4605/4524/4110 4604/4523/4109 4538/4460/4043 \nf 4606/4525/4111 4539/4461/4044 4540/4462/4045 \nf 4606/4525/4111 4605/4524/4110 4539/4461/4044 \nf 4607/4526/4112 4540/4462/4045 4541/4463/4046 \nf 4607/4526/4112 4606/4525/4111 4540/4462/4045 \nf 4608/4527/4113 4541/4463/4046 4542/4464/4047 \nf 4608/4527/4113 4607/4526/4112 4541/4463/4046 \nf 4609/4528/4114 4542/4464/4047 4543/4465/4048 \nf 4609/4528/4114 4608/4527/4113 4542/4464/4047 \nf 4610/4529/4115 4543/4465/4048 4544/4466/4049 \nf 4610/4529/4115 4609/4528/4114 4543/4465/4048 \nf 4611/4530/4116 4544/4466/4049 4545/4467/4050 \nf 4611/4530/4116 4610/4529/4115 4544/4466/4049 \nf 4612/4531/4117 4545/4467/4050 4546/4468/4051 \nf 4612/4531/4117 4611/4530/4116 4545/4467/4050 \nf 4613/4532/4118 4546/4468/4051 4547/4469/4052 \nf 4613/4532/4118 4612/4531/4117 4546/4468/4051 \nf 4614/4533/4119 4547/4469/4052 4548/4470/4053 \nf 4614/4533/4119 4613/4532/4118 4547/4469/4052 \nf 4615/4534/4120 4548/4470/4053 4549/4471/4054 \nf 4615/4534/4120 4614/4533/4119 4548/4470/4053 \nf 4616/4535/4121 4549/4471/4054 4550/4472/4055 \nf 4616/4535/4121 4615/4534/4120 4549/4471/4054 \nf 4617/4536/4122 4550/4472/4055 4551/4473/4056 \nf 4617/4536/4122 4616/4535/4121 4550/4472/4055 \nf 4618/4537/4123 4551/4473/4056 4552/4474/4057 \nf 4618/4537/4123 4617/4536/4122 4551/4473/4056 \nf 4619/4538/4124 4552/4474/4057 4553/4475/4058 \nf 4619/4538/4124 4618/4537/4123 4552/4474/4057 \nf 4620/4539/4125 4553/4475/4058 4554/4476/4059 \nf 4620/4539/4125 4619/4538/4124 4553/4475/4058 \nf 4621/4540/4126 4554/4476/4059 4555/4477/4060 \nf 4621/4540/4126 4620/4539/4125 4554/4476/4059 \nf 4622/4541/4127 4555/4477/4060 4556/4478/4061 \nf 4622/4541/4127 4621/4540/4126 4555/4477/4060 \nf 4623/4542/4128 4556/4478/4061 4557/4479/4062 \nf 4623/4542/4128 4622/4541/4127 4556/4478/4061 \nf 4624/4543/4129 4557/4479/4062 4558/4480/4063 \nf 4624/4543/4129 4623/4542/4128 4557/4479/4062 \nf 4625/4544/4130 4558/4480/4063 4559/4481/4064 \nf 4625/4544/4130 4624/4543/4129 4558/4480/4063 \nf 4626/4545/4131 4559/4481/4064 4560/4482/4065 \nf 4626/4545/4131 4625/4544/4130 4559/4481/4064 \nf 4627/4546/4132 4560/4482/4065 4561/4483/4066 \nf 4627/4546/4132 4626/4545/4131 4560/4482/4065 \nf 4628/4547/4133 4561/4483/4066 4562/4484/4067 \nf 4628/4547/4133 4627/4546/4132 4561/4483/4066 \nf 4629/4548/4134 4562/4484/4067 4563/4485/4068 \nf 4629/4548/4134 4628/4547/4133 4562/4484/4067 \nf 4630/4549/4135 4563/4485/4068 4564/4486/4069 \nf 4630/4549/4135 4629/4548/4134 4563/4485/4068 \nf 4631/4550/4136 4564/4486/4069 4565/4487/4070 \nf 4631/4550/4136 4630/4549/4135 4564/4486/4069 \nf 4632/4551/4137 4565/4487/4070 4566/4488/4071 \nf 4632/4551/4137 4631/4550/4136 4565/4487/4070 \nf 4633/4552/4138 4566/4488/4071 4567/4489/4072 \nf 4633/4552/4138 4632/4551/4137 4566/4488/4071 \nf 4634/4553/4139 4567/4489/4072 4568/4490/4073 \nf 4634/4553/4139 4633/4552/4138 4567/4489/4072 \nf 4635/4554/4140 4568/4490/4073 4569/4491/4074 \nf 4635/4554/4140 4634/4553/4139 4568/4490/4073 \nf 4636/4555/4141 4569/4491/4074 4570/4492/4075 \nf 4636/4555/4141 4635/4554/4140 4569/4491/4074 \nf 4637/4556/4142 4570/4492/4075 4571/4493/4076 \nf 4637/4556/4142 4636/4555/4141 4570/4492/4075 \nf 4638/4557/4143 4571/4493/4076 4572/4494/4077 \nf 4638/4557/4143 4637/4556/4142 4571/4493/4076 \nf 4639/4558/4144 4572/4494/4077 4573/4495/4078 \nf 4639/4558/4144 4638/4557/4143 4572/4494/4077 \nf 4640/4559/4145 4573/4495/4078 4574/4496/4079 \nf 4640/4559/4145 4639/4558/4144 4573/4495/4078 \nf 4641/4560/4146 4574/4496/4079 4575/4497/4080 \nf 4641/4560/4146 4640/4559/4145 4574/4496/4079 \nf 4642/4561/4147 4575/4497/4080 3941/3879/1479 \nf 4642/4561/4147 4641/4560/4146 4575/4497/4080 \nf 3942/3880/1482 4642/4561/4147 3941/3879/1479 \nf 4302/4240/3806 4303/4241/3807 4576/4498/4081 \nf 4643/4562/4148 4576/4498/4081 4577/4499/4082 \nf 4643/4562/4148 4302/4240/3806 4576/4498/4081 \nf 4644/4563/4149 4577/4499/4082 4578/4500/4083 \nf 4644/4563/4149 4643/4562/4148 4577/4499/4082 \nf 4645/4564/4150 4578/4500/4083 4579/4501/4084 \nf 4645/4564/4150 4644/4563/4149 4578/4500/4083 \nf 4646/4565/4151 4579/4501/4084 4580/4502/4085 \nf 4646/4565/4151 4645/4564/4150 4579/4501/4084 \nf 4647/4566/4152 4580/4502/4085 4581/4503/4086 \nf 4647/4566/4152 4646/4565/4151 4580/4502/4085 \nf 4648/4567/4153 4581/4503/4086 4582/4504/4087 \nf 4648/4567/4153 4647/4566/4152 4581/4503/4086 \nf 4649/4568/4154 4582/4504/4087 4583/4505/4088 \nf 4649/4568/4154 4648/4567/4153 4582/4504/4087 \nf 4650/4569/4155 4583/4505/4088 4584/4506/4089 \nf 4650/4569/4155 4649/4568/4154 4583/4505/4088 \nf 4651/4570/4156 4584/4506/4089 4585/4507/4090 \nf 4651/4570/4156 4650/4569/4155 4584/4506/4089 \nf 4652/4571/4157 4585/4507/4090 4586/4508/4091 \nf 4652/4571/4157 4651/4570/4156 4585/4507/4090 \nf 4653/4572/4158 4586/4508/4091 4587/4509/4092 \nf 4653/4572/4158 4652/4571/4157 4586/4508/4091 \nf 4654/4573/4159 4587/4509/4092 4588/4510/4093 \nf 4654/4573/4159 4653/4572/4158 4587/4509/4092 \nf 4655/4574/4160 4588/4510/4093 4589/4511/4094 \nf 4655/4574/4160 4654/4573/4159 4588/4510/4093 \nf 4656/4575/4161 4589/4511/4094 4590/4512/4095 \nf 4656/4575/4161 4655/4574/4160 4589/4511/4094 \nf 4657/4576/4162 4590/4512/4095 4591/4513/4096 \nf 4657/4576/4162 4656/4575/4161 4590/4512/4095 \nf 4658/4577/4163 4591/4513/4096 4592/4514/4097 \nf 4658/4577/4163 4657/4576/4162 4591/4513/4096 \nf 4659/4578/4164 4592/4514/4097 4593/4515/4098 \nf 4659/4578/4164 4658/4577/4163 4592/4514/4097 \nf 4660/4579/4165 4593/4515/4098 4594/425/4099 \nf 4660/4579/4165 4659/4578/4164 4593/4515/4098 \nf 4661/4580/4166 4594/425/4099 4595/427/4100 \nf 4661/4580/4166 4660/4579/4165 4594/425/4099 \nf 4662/4581/4167 4595/427/4100 4596/429/4101 \nf 4662/4581/4167 4661/4580/4166 4595/427/4100 \nf 4663/4582/4168 4596/429/4101 4597/4516/4102 \nf 4663/4582/4168 4662/4581/4167 4596/429/4101 \nf 4664/4583/4169 4597/4516/4102 4598/4517/4103 \nf 4664/4583/4169 4663/4582/4168 4597/4516/4102 \nf 4665/4584/4170 4598/4517/4103 4599/4518/4104 \nf 4665/4584/4170 4664/4583/4169 4598/4517/4103 \nf 4666/4585/4171 4599/4518/4104 4600/4519/4105 \nf 4666/4585/4171 4665/4584/4170 4599/4518/4104 \nf 4667/4586/4172 4600/4519/4105 4601/4520/4106 \nf 4667/4586/4172 4666/4585/4171 4600/4519/4105 \nf 4668/4587/4173 4601/4520/4106 4602/4521/4107 \nf 4668/4587/4173 4667/4586/4172 4601/4520/4106 \nf 4669/4588/4174 4602/4521/4107 4603/4522/4108 \nf 4669/4588/4174 4668/4587/4173 4602/4521/4107 \nf 4670/4589/4175 4603/4522/4108 4604/4523/4109 \nf 4670/4589/4175 4669/4588/4174 4603/4522/4108 \nf 4671/4590/4176 4604/4523/4109 4605/4524/4110 \nf 4671/4590/4176 4670/4589/4175 4604/4523/4109 \nf 4672/4591/4177 4605/4524/4110 4606/4525/4111 \nf 4672/4591/4177 4671/4590/4176 4605/4524/4110 \nf 4673/4592/4178 4606/4525/4111 4607/4526/4112 \nf 4673/4592/4178 4672/4591/4177 4606/4525/4111 \nf 4674/4593/4179 4607/4526/4112 4608/4527/4113 \nf 4674/4593/4179 4673/4592/4178 4607/4526/4112 \nf 4675/4594/4180 4608/4527/4113 4609/4528/4114 \nf 4675/4594/4180 4674/4593/4179 4608/4527/4113 \nf 4676/4595/4181 4609/4528/4114 4610/4529/4115 \nf 4676/4595/4181 4675/4594/4180 4609/4528/4114 \nf 4677/4596/4182 4610/4529/4115 4611/4530/4116 \nf 4677/4596/4182 4676/4595/4181 4610/4529/4115 \nf 4678/4597/4183 4611/4530/4116 4612/4531/4117 \nf 4678/4597/4183 4677/4596/4182 4611/4530/4116 \nf 4679/4598/4184 4612/4531/4117 4613/4532/4118 \nf 4679/4598/4184 4678/4597/4183 4612/4531/4117 \nf 4680/4599/4185 4613/4532/4118 4614/4533/4119 \nf 4680/4599/4185 4679/4598/4184 4613/4532/4118 \nf 4681/4600/4186 4614/4533/4119 4615/4534/4120 \nf 4681/4600/4186 4680/4599/4185 4614/4533/4119 \nf 4682/4601/4187 4615/4534/4120 4616/4535/4121 \nf 4682/4601/4187 4681/4600/4186 4615/4534/4120 \nf 4683/4602/4188 4616/4535/4121 4617/4536/4122 \nf 4683/4602/4188 4682/4601/4187 4616/4535/4121 \nf 4684/4603/4189 4617/4536/4122 4618/4537/4123 \nf 4684/4603/4189 4683/4602/4188 4617/4536/4122 \nf 4685/4604/4190 4618/4537/4123 4619/4538/4124 \nf 4685/4604/4190 4684/4603/4189 4618/4537/4123 \nf 4686/4605/4191 4619/4538/4124 4620/4539/4125 \nf 4686/4605/4191 4685/4604/4190 4619/4538/4124 \nf 4687/4606/4192 4620/4539/4125 4621/4540/4126 \nf 4687/4606/4192 4686/4605/4191 4620/4539/4125 \nf 4688/4607/4193 4621/4540/4126 4622/4541/4127 \nf 4688/4607/4193 4687/4606/4192 4621/4540/4126 \nf 4689/4608/4194 4622/4541/4127 4623/4542/4128 \nf 4689/4608/4194 4688/4607/4193 4622/4541/4127 \nf 4690/4609/4195 4623/4542/4128 4624/4543/4129 \nf 4690/4609/4195 4689/4608/4194 4623/4542/4128 \nf 4691/4610/4196 4624/4543/4129 4625/4544/4130 \nf 4691/4610/4196 4690/4609/4195 4624/4543/4129 \nf 4692/4611/4197 4625/4544/4130 4626/4545/4131 \nf 4692/4611/4197 4691/4610/4196 4625/4544/4130 \nf 4693/4612/4198 4626/4545/4131 4627/4546/4132 \nf 4693/4612/4198 4692/4611/4197 4626/4545/4131 \nf 4694/4613/4199 4627/4546/4132 4628/4547/4133 \nf 4694/4613/4199 4693/4612/4198 4627/4546/4132 \nf 4695/4614/4200 4628/4547/4133 4629/4548/4134 \nf 4695/4614/4200 4694/4613/4199 4628/4547/4133 \nf 4696/4615/4201 4629/4548/4134 4630/4549/4135 \nf 4696/4615/4201 4695/4614/4200 4629/4548/4134 \nf 4697/4616/4202 4630/4549/4135 4631/4550/4136 \nf 4697/4616/4202 4696/4615/4201 4630/4549/4135 \nf 4698/4617/4203 4631/4550/4136 4632/4551/4137 \nf 4698/4617/4203 4697/4616/4202 4631/4550/4136 \nf 4699/4618/4204 4632/4551/4137 4633/4552/4138 \nf 4699/4618/4204 4698/4617/4203 4632/4551/4137 \nf 4700/4619/4205 4633/4552/4138 4634/4553/4139 \nf 4700/4619/4205 4699/4618/4204 4633/4552/4138 \nf 4701/4620/4206 4634/4553/4139 4635/4554/4140 \nf 4701/4620/4206 4700/4619/4205 4634/4553/4139 \nf 4702/4621/4207 4635/4554/4140 4636/4555/4141 \nf 4702/4621/4207 4701/4620/4206 4635/4554/4140 \nf 4703/4622/4208 4636/4555/4141 4637/4556/4142 \nf 4703/4622/4208 4702/4621/4207 4636/4555/4141 \nf 4704/4623/4209 4637/4556/4142 4638/4557/4143 \nf 4704/4623/4209 4703/4622/4208 4637/4556/4142 \nf 4705/4624/4210 4638/4557/4143 4639/4558/4144 \nf 4705/4624/4210 4704/4623/4209 4638/4557/4143 \nf 4706/4625/4211 4639/4558/4144 4640/4559/4145 \nf 4706/4625/4211 4705/4624/4210 4639/4558/4144 \nf 4707/4626/4212 4640/4559/4145 4641/4560/4146 \nf 4707/4626/4212 4706/4625/4211 4640/4559/4145 \nf 4708/4627/4213 4641/4560/4146 4642/4561/4147 \nf 4708/4627/4213 4707/4626/4212 4641/4560/4146 \nf 4709/4628/4214 4642/4561/4147 3942/3880/1482 \nf 4709/4628/4214 4708/4627/4213 4642/4561/4147 \nf 3943/3881/1485 4709/4628/4214 3942/3880/1482 \nf 1341/1320/825 4302/4240/3806 4643/4562/4148 \nf 1664/1642/1148 4643/4562/4148 4644/4563/4149 \nf 1664/1642/1148 1341/1320/825 4643/4562/4148 \nf 1663/1641/1147 4644/4563/4149 4645/4564/4150 \nf 1663/1641/1147 1664/1642/1148 4644/4563/4149 \nf 1662/1640/1146 4645/4564/4150 4646/4565/4151 \nf 1662/1640/1146 1663/1641/1147 4645/4564/4150 \nf 1661/1639/1145 4646/4565/4151 4647/4566/4152 \nf 1661/1639/1145 1662/1640/1146 4646/4565/4151 \nf 1660/1638/1144 4647/4566/4152 4648/4567/4153 \nf 1660/1638/1144 1661/1639/1145 4647/4566/4152 \nf 1659/1637/1143 4648/4567/4153 4649/4568/4154 \nf 1659/1637/1143 1660/1638/1144 4648/4567/4153 \nf 1657/1635/1141 4649/4568/4154 4650/4569/4155 \nf 1657/1635/1141 1659/1637/1143 4649/4568/4154 \nf 1658/1636/1142 4650/4569/4155 4651/4570/4156 \nf 1658/1636/1142 1657/1635/1141 4650/4569/4155 \nf 4710/4629/4215 4651/4570/4156 4652/4571/4157 \nf 4710/4629/4215 1658/1636/1142 4651/4570/4156 \nf 4711/4630/4216 4652/4571/4157 4653/4572/4158 \nf 4711/4630/4216 4710/4629/4215 4652/4571/4157 \nf 4712/4631/4217 4653/4572/4158 4654/4573/4159 \nf 4712/4631/4217 4711/4630/4216 4653/4572/4158 \nf 4713/4632/4218 4654/4573/4159 4655/4574/4160 \nf 4713/4632/4218 4712/4631/4217 4654/4573/4159 \nf 4714/4633/4219 4655/4574/4160 4656/4575/4161 \nf 4714/4633/4219 4713/4632/4218 4655/4574/4160 \nf 4715/4634/4220 4656/4575/4161 4657/4576/4162 \nf 4715/4634/4220 4714/4633/4219 4656/4575/4161 \nf 4716/4635/4221 4657/4576/4162 4658/4577/4163 \nf 4716/4635/4221 4715/4634/4220 4657/4576/4162 \nf 4717/4636/4222 4658/4577/4163 4659/4578/4164 \nf 4717/4636/4222 4716/4635/4221 4658/4577/4163 \nf 4718/4637/4223 4659/4578/4164 4660/4579/4165 \nf 4718/4637/4223 4717/4636/4222 4659/4578/4164 \nf 4719/4638/4224 4660/4579/4165 4661/4580/4166 \nf 4719/4638/4224 4718/4637/4223 4660/4579/4165 \nf 4720/4639/4225 4661/4580/4166 4662/4581/4167 \nf 4720/4639/4225 4719/4638/4224 4661/4580/4166 \nf 4721/4640/4226 4662/4581/4167 4663/4582/4168 \nf 4721/4640/4226 4720/4639/4225 4662/4581/4167 \nf 4722/4641/4227 4663/4582/4168 4664/4583/4169 \nf 4722/4641/4227 4721/4640/4226 4663/4582/4168 \nf 4723/4642/4228 4664/4583/4169 4665/4584/4170 \nf 4723/4642/4228 4722/4641/4227 4664/4583/4169 \nf 4724/4643/4229 4665/4584/4170 4666/4585/4171 \nf 4724/4643/4229 4723/4642/4228 4665/4584/4170 \nf 4725/4644/4230 4666/4585/4171 4667/4586/4172 \nf 4725/4644/4230 4724/4643/4229 4666/4585/4171 \nf 4726/4645/4231 4667/4586/4172 4668/4587/4173 \nf 4726/4645/4231 4725/4644/4230 4667/4586/4172 \nf 4727/4646/4232 4668/4587/4173 4669/4588/4174 \nf 4727/4646/4232 4726/4645/4231 4668/4587/4173 \nf 4728/4647/4233 4669/4588/4174 4670/4589/4175 \nf 4728/4647/4233 4727/4646/4232 4669/4588/4174 \nf 4729/4648/4234 4670/4589/4175 4671/4590/4176 \nf 4729/4648/4234 4728/4647/4233 4670/4589/4175 \nf 4730/4649/4235 4671/4590/4176 4672/4591/4177 \nf 4730/4649/4235 4729/4648/4234 4671/4590/4176 \nf 4731/4650/4236 4672/4591/4177 4673/4592/4178 \nf 4731/4650/4236 4730/4649/4235 4672/4591/4177 \nf 4732/4651/4237 4673/4592/4178 4674/4593/4179 \nf 4732/4651/4237 4731/4650/4236 4673/4592/4178 \nf 4733/4652/4238 4674/4593/4179 4675/4594/4180 \nf 4733/4652/4238 4732/4651/4237 4674/4593/4179 \nf 4734/4653/4239 4675/4594/4180 4676/4595/4181 \nf 4734/4653/4239 4733/4652/4238 4675/4594/4180 \nf 4735/4654/4240 4676/4595/4181 4677/4596/4182 \nf 4735/4654/4240 4734/4653/4239 4676/4595/4181 \nf 4736/4655/4241 4677/4596/4182 4678/4597/4183 \nf 4736/4655/4241 4735/4654/4240 4677/4596/4182 \nf 4737/4656/4242 4678/4597/4183 4679/4598/4184 \nf 4737/4656/4242 4736/4655/4241 4678/4597/4183 \nf 4738/4657/4243 4679/4598/4184 4680/4599/4185 \nf 4738/4657/4243 4737/4656/4242 4679/4598/4184 \nf 4739/4658/4244 4680/4599/4185 4681/4600/4186 \nf 4739/4658/4244 4738/4657/4243 4680/4599/4185 \nf 4740/4659/4245 4681/4600/4186 4682/4601/4187 \nf 4740/4659/4245 4739/4658/4244 4681/4600/4186 \nf 4741/4660/4246 4682/4601/4187 4683/4602/4188 \nf 4741/4660/4246 4740/4659/4245 4682/4601/4187 \nf 4742/4661/4247 4683/4602/4188 4684/4603/4189 \nf 4742/4661/4247 4741/4660/4246 4683/4602/4188 \nf 4743/4662/4248 4684/4603/4189 4685/4604/4190 \nf 4743/4662/4248 4742/4661/4247 4684/4603/4189 \nf 4744/4663/4249 4685/4604/4190 4686/4605/4191 \nf 4744/4663/4249 4743/4662/4248 4685/4604/4190 \nf 4745/4664/4250 4686/4605/4191 4687/4606/4192 \nf 4745/4664/4250 4744/4663/4249 4686/4605/4191 \nf 4746/4665/4251 4687/4606/4192 4688/4607/4193 \nf 4746/4665/4251 4745/4664/4250 4687/4606/4192 \nf 4747/4666/4252 4688/4607/4193 4689/4608/4194 \nf 4747/4666/4252 4746/4665/4251 4688/4607/4193 \nf 4748/4667/4253 4689/4608/4194 4690/4609/4195 \nf 4748/4667/4253 4747/4666/4252 4689/4608/4194 \nf 4749/4668/4254 4690/4609/4195 4691/4610/4196 \nf 4749/4668/4254 4748/4667/4253 4690/4609/4195 \nf 4750/4669/4255 4691/4610/4196 4692/4611/4197 \nf 4750/4669/4255 4749/4668/4254 4691/4610/4196 \nf 4751/4670/4256 4692/4611/4197 4693/4612/4198 \nf 4751/4670/4256 4750/4669/4255 4692/4611/4197 \nf 4752/4671/4257 4693/4612/4198 4694/4613/4199 \nf 4752/4671/4257 4751/4670/4256 4693/4612/4198 \nf 4753/4672/4258 4694/4613/4199 4695/4614/4200 \nf 4753/4672/4258 4752/4671/4257 4694/4613/4199 \nf 4754/4673/4259 4695/4614/4200 4696/4615/4201 \nf 4754/4673/4259 4753/4672/4258 4695/4614/4200 \nf 4755/4674/4260 4696/4615/4201 4697/4616/4202 \nf 4755/4674/4260 4754/4673/4259 4696/4615/4201 \nf 4756/4675/4261 4697/4616/4202 4698/4617/4203 \nf 4756/4675/4261 4755/4674/4260 4697/4616/4202 \nf 4757/4676/4262 4698/4617/4203 4699/4618/4204 \nf 4757/4676/4262 4756/4675/4261 4698/4617/4203 \nf 4758/4677/4263 4699/4618/4204 4700/4619/4205 \nf 4758/4677/4263 4757/4676/4262 4699/4618/4204 \nf 4759/4678/4264 4700/4619/4205 4701/4620/4206 \nf 4759/4678/4264 4758/4677/4263 4700/4619/4205 \nf 4760/4679/4265 4701/4620/4206 4702/4621/4207 \nf 4760/4679/4265 4759/4678/4264 4701/4620/4206 \nf 4761/4680/4266 4702/4621/4207 4703/4622/4208 \nf 4761/4680/4266 4760/4679/4265 4702/4621/4207 \nf 4762/4681/4267 4703/4622/4208 4704/4623/4209 \nf 4762/4681/4267 4761/4680/4266 4703/4622/4208 \nf 4763/4682/4268 4704/4623/4209 4705/4624/4210 \nf 4763/4682/4268 4762/4681/4267 4704/4623/4209 \nf 4764/4683/4269 4705/4624/4210 4706/4625/4211 \nf 4764/4683/4269 4763/4682/4268 4705/4624/4210 \nf 4765/4684/4270 4706/4625/4211 4707/4626/4212 \nf 4765/4684/4270 4764/4683/4269 4706/4625/4211 \nf 4766/4685/4271 4707/4626/4212 4708/4627/4213 \nf 4766/4685/4271 4765/4684/4270 4707/4626/4212 \nf 4767/4686/4272 4708/4627/4213 4709/4628/4214 \nf 4767/4686/4272 4766/4685/4271 4708/4627/4213 \nf 4768/4687/4273 4709/4628/4214 3943/3881/1485 \nf 4768/4687/4273 4767/4686/4272 4709/4628/4214 \nf 1671/1649/1158 4768/4687/4273 3943/3881/1485 \nf 1656/1634/1140 1658/1636/1142 4710/4629/4215 \nf 1655/1633/1139 4710/4629/4215 4711/4630/4216 \nf 1655/1633/1139 1656/1634/1140 4710/4629/4215 \nf 1654/1632/1138 4711/4630/4216 4712/4631/4217 \nf 1654/1632/1138 1655/1633/1139 4711/4630/4216 \nf 1653/1631/1137 4712/4631/4217 4713/4632/4218 \nf 1653/1631/1137 1654/1632/1138 4712/4631/4217 \nf 1652/1630/1136 4713/4632/4218 4714/4633/4219 \nf 1652/1630/1136 1653/1631/1137 4713/4632/4218 \nf 1651/1629/1135 4714/4633/4219 4715/4634/4220 \nf 1651/1629/1135 1652/1630/1136 4714/4633/4219 \nf 1650/1628/1134 4715/4634/4220 4716/4635/4221 \nf 1650/1628/1134 1651/1629/1135 4715/4634/4220 \nf 1649/1627/1133 4716/4635/4221 4717/4636/4222 \nf 1649/1627/1133 1650/1628/1134 4716/4635/4221 \nf 1648/1626/1132 4717/4636/4222 4718/4637/4223 \nf 1648/1626/1132 1649/1627/1133 4717/4636/4222 \nf 1647/1625/1131 4718/4637/4223 4719/4638/4224 \nf 1647/1625/1131 1648/1626/1132 4718/4637/4223 \nf 1646/1624/1130 4719/4638/4224 4720/4639/4225 \nf 1646/1624/1130 1647/1625/1131 4719/4638/4224 \nf 1645/1623/1129 4720/4639/4225 4721/4640/4226 \nf 1645/1623/1129 1646/1624/1130 4720/4639/4225 \nf 1644/1622/1128 4721/4640/4226 4722/4641/4227 \nf 1644/1622/1128 1645/1623/1129 4721/4640/4226 \nf 1643/1621/1127 4722/4641/4227 4723/4642/4228 \nf 1643/1621/1127 1644/1622/1128 4722/4641/4227 \nf 1642/1620/1126 4723/4642/4228 4724/4643/4229 \nf 1642/1620/1126 1643/1621/1127 4723/4642/4228 \nf 1641/1619/1125 4724/4643/4229 4725/4644/4230 \nf 1641/1619/1125 1642/1620/1126 4724/4643/4229 \nf 1640/1618/1124 4725/4644/4230 4726/4645/4231 \nf 1640/1618/1124 1641/1619/1125 4725/4644/4230 \nf 1639/1617/1123 4726/4645/4231 4727/4646/4232 \nf 1639/1617/1123 1640/1618/1124 4726/4645/4231 \nf 1638/1616/1122 4727/4646/4232 4728/4647/4233 \nf 1638/1616/1122 1639/1617/1123 4727/4646/4232 \nf 1637/1615/1121 4728/4647/4233 4729/4648/4234 \nf 1637/1615/1121 1638/1616/1122 4728/4647/4233 \nf 1636/1614/1120 4729/4648/4234 4730/4649/4235 \nf 1636/1614/1120 1637/1615/1121 4729/4648/4234 \nf 1635/1613/1119 4730/4649/4235 4731/4650/4236 \nf 1635/1613/1119 1636/1614/1120 4730/4649/4235 \nf 1634/1612/1118 4731/4650/4236 4732/4651/4237 \nf 1634/1612/1118 1635/1613/1119 4731/4650/4236 \nf 1633/1611/1117 4732/4651/4237 4733/4652/4238 \nf 1633/1611/1117 1634/1612/1118 4732/4651/4237 \nf 1632/1610/1116 4733/4652/4238 4734/4653/4239 \nf 1632/1610/1116 1633/1611/1117 4733/4652/4238 \nf 1631/1609/1115 4734/4653/4239 4735/4654/4240 \nf 1631/1609/1115 1632/1610/1116 4734/4653/4239 \nf 1630/1608/1114 4735/4654/4240 4736/4655/4241 \nf 1630/1608/1114 1631/1609/1115 4735/4654/4240 \nf 1629/1607/1113 4736/4655/4241 4737/4656/4242 \nf 1629/1607/1113 1630/1608/1114 4736/4655/4241 \nf 1628/1606/1112 4737/4656/4242 4738/4657/4243 \nf 1628/1606/1112 1629/1607/1113 4737/4656/4242 \nf 1627/1605/1111 4738/4657/4243 4739/4658/4244 \nf 1627/1605/1111 1628/1606/1112 4738/4657/4243 \nf 1626/1604/1110 4739/4658/4244 4740/4659/4245 \nf 1626/1604/1110 1627/1605/1111 4739/4658/4244 \nf 1625/1603/1109 4740/4659/4245 4741/4660/4246 \nf 1625/1603/1109 1626/1604/1110 4740/4659/4245 \nf 1624/1602/1108 4741/4660/4246 4742/4661/4247 \nf 1624/1602/1108 1625/1603/1109 4741/4660/4246 \nf 1623/1601/1107 4742/4661/4247 4743/4662/4248 \nf 1623/1601/1107 1624/1602/1108 4742/4661/4247 \nf 1622/1600/1106 4743/4662/4248 4744/4663/4249 \nf 1622/1600/1106 1623/1601/1107 4743/4662/4248 \nf 1621/1599/1105 4744/4663/4249 4745/4664/4250 \nf 1621/1599/1105 1622/1600/1106 4744/4663/4249 \nf 1620/1598/1104 4745/4664/4250 4746/4665/4251 \nf 1620/1598/1104 1621/1599/1105 4745/4664/4250 \nf 1619/1597/1103 4746/4665/4251 4747/4666/4252 \nf 1619/1597/1103 1620/1598/1104 4746/4665/4251 \nf 1618/1596/1102 4747/4666/4252 4748/4667/4253 \nf 1618/1596/1102 1619/1597/1103 4747/4666/4252 \nf 1617/1595/1101 4748/4667/4253 4749/4668/4254 \nf 1617/1595/1101 1618/1596/1102 4748/4667/4253 \nf 1616/1594/1100 4749/4668/4254 4750/4669/4255 \nf 1616/1594/1100 1617/1595/1101 4749/4668/4254 \nf 1615/1593/1099 4750/4669/4255 4751/4670/4256 \nf 1615/1593/1099 1616/1594/1100 4750/4669/4255 \nf 1614/1592/1098 4751/4670/4256 4752/4671/4257 \nf 1614/1592/1098 1615/1593/1099 4751/4670/4256 \nf 1613/1591/1097 4752/4671/4257 4753/4672/4258 \nf 1613/1591/1097 1614/1592/1098 4752/4671/4257 \nf 1612/1590/1096 4753/4672/4258 4754/4673/4259 \nf 1612/1590/1096 1613/1591/1097 4753/4672/4258 \nf 1611/1589/1095 4754/4673/4259 4755/4674/4260 \nf 1611/1589/1095 1612/1590/1096 4754/4673/4259 \nf 1610/1588/1094 4755/4674/4260 4756/4675/4261 \nf 1610/1588/1094 1611/1589/1095 4755/4674/4260 \nf 1609/1587/1093 4756/4675/4261 4757/4676/4262 \nf 1609/1587/1093 1610/1588/1094 4756/4675/4261 \nf 1608/1586/1092 4757/4676/4262 4758/4677/4263 \nf 1608/1586/1092 1609/1587/1093 4757/4676/4262 \nf 1607/1585/1091 4758/4677/4263 4759/4678/4264 \nf 1607/1585/1091 1608/1586/1092 4758/4677/4263 \nf 1606/1584/1090 4759/4678/4264 4760/4679/4265 \nf 1606/1584/1090 1607/1585/1091 4759/4678/4264 \nf 1605/1583/1089 4760/4679/4265 4761/4680/4266 \nf 1605/1583/1089 1606/1584/1090 4760/4679/4265 \nf 1604/1582/1088 4761/4680/4266 4762/4681/4267 \nf 1604/1582/1088 1605/1583/1089 4761/4680/4266 \nf 1603/1581/1087 4762/4681/4267 4763/4682/4268 \nf 1603/1581/1087 1604/1582/1088 4762/4681/4267 \nf 1602/1580/1086 4763/4682/4268 4764/4683/4269 \nf 1602/1580/1086 1603/1581/1087 4763/4682/4268 \nf 1601/1579/1085 4764/4683/4269 4765/4684/4270 \nf 1601/1579/1085 1602/1580/1086 4764/4683/4269 \nf 1600/1578/1084 4765/4684/4270 4766/4685/4271 \nf 1600/1578/1084 1601/1579/1085 4765/4684/4270 \nf 1599/1577/1083 4766/4685/4271 4767/4686/4272 \nf 1599/1577/1083 1600/1578/1084 4766/4685/4271 \nf 1598/1576/1082 4767/4686/4272 4768/4687/4273 \nf 1598/1576/1082 1599/1577/1083 4767/4686/4272 \nf 1598/1576/1082 4768/4687/4273 1671/1649/1158 \nf 1597/1575/1081 1598/1576/1082 1671/1649/1158 \nf 4769/4688/4274 4770/4689/4275 1795/1773/1255 \nf 4771/4690/4276 1795/1773/1255 4770/4689/4275 \nf 4772/4691/1389 4769/4688/4274 1795/1773/1255 \nf 1791/1769/1249 4772/4691/1389 1795/1773/1255 \nf 4771/4690/4276 1794/1772/1253 1795/1773/1255 \nf 4773/4692/4277 4774/4693/4278 4770/4689/4275 \nf 4775/4694/4279 4770/4689/4275 4774/4693/4278 \nf 4776/4695/2186 4773/4692/4277 4770/4689/4275 \nf 4769/4688/4274 4776/4695/2186 4770/4689/4275 \nf 4775/4694/4279 4771/4690/4276 4770/4689/4275 \nf 4777/4696/4280 4778/4697/4281 4774/4693/4278 \nf 4779/4698/4282 4774/4693/4278 4778/4697/4281 \nf 4780/4699/2190 4777/4696/4280 4774/4693/4278 \nf 4773/4692/4277 4780/4699/2190 4774/4693/4278 \nf 4779/4698/4282 4775/4694/4279 4774/4693/4278 \nf 4781/4700/4283 4782/4701/4284 4778/4697/4281 \nf 4783/4702/4285 4778/4697/4281 4782/4701/4284 \nf 4784/4703/4286 4781/4700/4283 4778/4697/4281 \nf 4785/4704/4287 4784/4703/4286 4778/4697/4281 \nf 4777/4696/4280 4785/4704/4287 4778/4697/4281 \nf 4783/4702/4285 4779/4698/4282 4778/4697/4281 \nf 4786/4705/2198 4787/4706/4288 4782/4701/4284 \nf 4788/4707/4289 4782/4701/4284 4787/4706/4288 \nf 4781/4700/4283 4786/4705/2198 4782/4701/4284 \nf 4788/4707/4289 4783/4702/4285 4782/4701/4284 \nf 1790/1768/311 1773/1751/311 4787/4706/4288 \nf 3807/3756/3293 4787/4706/4288 1773/1751/311 \nf 4789/4708/4290 1790/1768/311 4787/4706/4288 \nf 4790/4709/2202 4789/4708/4290 4787/4706/4288 \nf 4786/4705/2198 4790/4709/2202 4787/4706/4288 \nf 3807/3756/3293 4788/4707/4289 4787/4706/4288 \nf 4791/4710/4291 1790/1768/311 4789/4708/4292 \nf 4791/4710/4291 1789/1767/1248 1790/1768/311 \nf 4792/4711/4293 4789/4708/4292 4790/4709/2202 \nf 4791/4710/4291 4789/4708/4292 4793/4712/4294 \nf 4792/4711/4293 4793/4712/4294 4789/4708/4292 \nf 4792/4711/4293 4790/4709/2202 4786/4705/2198 \nf 4792/4711/4293 4786/4705/2198 4781/4700/4283 \nf 4794/3754/4295 4781/4700/4283 4784/4703/4296 \nf 4792/4711/4293 4781/4700/4283 4794/3754/4295 \nf 4777/4696/4297 4784/4703/4296 4785/4704/4287 \nf 4795/4713/4298 4784/4703/4296 4777/4696/4297 \nf 4794/3754/4295 4784/4703/4296 4796/4714/4299 \nf 4795/4713/4298 4796/4714/4299 4784/4703/4296 \nf 4795/4713/4298 4777/4696/4297 4780/4699/2190 \nf 4797/4715/4300 4780/4699/2190 4773/4692/4277 \nf 4797/4715/4300 4795/4713/4298 4780/4699/2190 \nf 4798/4716/4301 4773/4692/4277 4776/4695/2186 \nf 4798/4716/4301 4797/4715/4300 4773/4692/4277 \nf 4798/4716/4301 4776/4695/2186 4769/4688/4274 \nf 4799/4717/4302 4769/4688/4274 4772/4691/1389 \nf 4799/4717/4302 4798/4716/4301 4769/4688/4274 \nf 1793/1771/1251 4772/4691/1389 1791/1769/1252 \nf 1793/1771/1251 4799/4717/4302 4772/4691/1389 \nf 4800/4718/4303 4801/4719/4304 1784/1762/1247 \nf 4802/4720/1308 1784/1762/1241 4801/4719/4305 \nf 1789/1767/1246 4800/4718/4303 1784/1762/1247 \nf 4802/4720/1308 1782/1760/1191 1784/1762/1241 \nf 4803/4721/4306 4804/4722/4307 4801/4719/4304 \nf 4805/4723/4308 4801/4719/4305 4804/4722/4309 \nf 4806/4721/4310 4803/4721/4306 4801/4719/4304 \nf 4800/4718/4303 4806/4721/4310 4801/4719/4304 \nf 4805/4723/4308 4802/4720/1308 4801/4719/4305 \nf 4807/4724/4311 4808/4725/4312 4804/4722/4307 \nf 4809/4726/4313 4804/4722/4309 4808/4725/4314 \nf 4803/4721/4306 4807/4724/4311 4804/4722/4307 \nf 4809/4726/4313 4805/4723/4308 4804/4722/4309 \nf 4810/4727/4315 4811/4728/4316 4808/4725/4312 \nf 4812/4729/4317 4808/4725/4314 4811/4728/4318 \nf 4807/4724/4311 4810/4727/4315 4808/4725/4312 \nf 4812/4729/4317 4809/4726/4313 4808/4725/4314 \nf 4813/4727/4319 4814/4730/4320 4811/4728/4316 \nf 4815/4731/4321 4811/4728/4318 4814/4730/4322 \nf 4810/4727/4315 4813/4727/4319 4811/4728/4316 \nf 4816/4732/4323 4812/4729/4317 4811/4728/4318 \nf 4815/4731/4321 4816/4732/4323 4811/4728/4318 \nf 4817/4733/4324 4818/4730/4325 4814/4730/4320 \nf 4819/4734/4326 4814/4730/4322 4818/4730/4327 \nf 4813/4727/4319 4817/4733/4324 4814/4730/4320 \nf 4819/4734/4326 4815/4731/4321 4814/4730/4322 \nf 4820/4735/4328 4821/4736/4329 4818/4730/4325 \nf 4822/4737/4330 4818/4730/4327 4821/4736/4331 \nf 4823/4738/4332 4820/4735/4328 4818/4730/4325 \nf 4817/4733/4324 4823/4738/4332 4818/4730/4325 \nf 4822/4737/4330 4819/4734/4326 4818/4730/4327 \nf 4824/4739/4333 4825/4736/4334 4821/4736/4329 \nf 4826/4740/4335 4821/4736/4331 4825/4736/4336 \nf 4820/4735/4328 4824/4739/4333 4821/4736/4329 \nf 4826/4740/4335 4822/4737/4330 4821/4736/4331 \nf 4827/4741/4337 4828/4742/4338 4825/4736/4334 \nf 4829/4743/4339 4825/4736/4336 4828/4742/4340 \nf 4824/4739/4333 4827/4741/4337 4825/4736/4334 \nf 4829/4743/4339 4826/4740/4335 4825/4736/4336 \nf 4830/4744/4341 4831/4745/4342 4828/4742/4338 \nf 4832/4746/4343 4828/4742/4340 4831/4745/4344 \nf 4827/4741/4337 4830/4744/4341 4828/4742/4338 \nf 4833/4747/4345 4829/4743/4339 4828/4742/4340 \nf 4832/4746/4343 4833/4747/4345 4828/4742/4340 \nf 4834/4748/4346 1069/1065/569 4831/4745/4342 \nf 4835/4749/4347 4831/4745/4344 1069/1065/576 \nf 4830/4744/4341 4834/4748/4346 4831/4745/4342 \nf 4835/4749/4347 4832/4746/4343 4831/4745/4344 \nf 4834/4748/4346 1070/1066/571 1069/1065/569 \nf 1074/1070/575 4835/4749/4347 1069/1065/576 \nf 3805/3754/3291 1070/1066/570 4834/4748/4348 \nf 3805/3754/3291 4834/4748/4348 4830/4744/4349 \nf 4836/4750/4350 4830/4744/4349 4827/4741/4337 \nf 4836/4750/4350 3805/3754/3291 4830/4744/4349 \nf 4837/4751/4351 4827/4741/4337 4824/4739/4333 \nf 4837/4751/4351 4836/4750/4350 4827/4741/4337 \nf 4837/4751/4351 4824/4739/4333 4820/4735/4352 \nf 4837/4751/4351 4820/4735/4352 4823/4738/4353 \nf 4838/4752/4354 4823/4738/4353 4817/4733/4324 \nf 4839/4753/4355 4837/4751/4351 4823/4738/4353 \nf 4838/4752/4354 4839/4753/4355 4823/4738/4353 \nf 4840/4738/4356 4817/4733/4324 4813/4727/4357 \nf 4840/4738/4356 4838/4752/4354 4817/4733/4324 \nf 4840/4738/4356 4813/4727/4357 4810/4727/4358 \nf 4841/4735/4359 4810/4727/4358 4807/4724/4360 \nf 4841/4735/4359 4840/4738/4356 4810/4727/4358 \nf 4842/4754/4361 4807/4724/4360 4803/4721/4306 \nf 4842/4754/4361 4841/4735/4359 4807/4724/4360 \nf 4842/4754/4361 4803/4721/4306 4806/4721/4362 \nf 4791/4710/4291 4806/4721/4362 4800/4718/4363 \nf 4793/4712/4294 4842/4754/4361 4806/4721/4362 \nf 4791/4710/4291 4793/4712/4294 4806/4721/4362 \nf 4791/4710/4291 4800/4718/4363 1789/1767/1248 \nf 4843/4755/4364 1782/1760/1191 4802/4720/1308 \nf 4843/4755/4364 1783/1761/1194 1782/1760/1191 \nf 4843/4755/4364 4802/4720/1308 4805/4723/4365 \nf 4844/4756/4366 4805/4723/4365 4809/4726/4313 \nf 4843/4755/4364 4805/4723/4365 4845/4757/4367 \nf 4844/4756/4366 4845/4757/4367 4805/4723/4365 \nf 4844/4756/4366 4809/4726/4313 4812/4729/4317 \nf 4844/4756/4366 4812/4729/4317 4816/4732/4368 \nf 4846/4758/4369 4816/4732/4368 4815/4731/4321 \nf 4847/4759/4370 4816/4732/4368 4846/4758/4369 \nf 4847/4759/4370 4844/4756/4366 4816/4732/4368 \nf 4846/4758/4369 4815/4731/4321 4819/4734/4326 \nf 4848/4760/4371 4819/4734/4326 4822/4737/4372 \nf 4848/4760/4371 4846/4758/4369 4819/4734/4326 \nf 4829/4743/4339 4822/4737/4372 4826/4740/4373 \nf 4849/4747/4374 4822/4737/4372 4829/4743/4339 \nf 4850/4761/4375 4822/4737/4372 4849/4747/4374 \nf 4850/4761/4375 4848/4760/4371 4822/4737/4372 \nf 4849/4747/4374 4829/4743/4339 4833/4747/4345 \nf 4849/4747/4374 4833/4747/4345 4832/4746/4376 \nf 4851/4762/4377 4832/4746/4376 4835/4749/4347 \nf 4851/4762/4377 4849/4747/4374 4832/4746/4376 \nf 4852/4763/4378 4835/4749/4347 1074/1070/575 \nf 4852/4763/4378 4851/4762/4377 4835/4749/4347 \nf 4852/4763/4378 1074/1070/575 1073/1069/572 \nf 1692/1670/1188 1073/1069/572 1076/1072/1189 \nf 1692/1670/1188 4852/4763/4378 1073/1069/572 \nf 1783/1761/1194 1781/1759/2096 1780/1758/1233 \nf 4853/4764/4379 4854/4765/2098 1781/1759/2096 \nf 1779/1757/1232 1781/1759/1231 4854/4765/2099 \nf 4853/4764/4380 4853/4764/4379 1781/1759/2096 \nf 1783/1761/1194 4853/4764/4380 1781/1759/2096 \nf 4855/4766/4381 4856/4767/2101 4854/4765/2098 \nf 4857/4768/2102 4854/4765/2099 4856/4767/2103 \nf 4853/4764/4379 4855/4766/4381 4854/4765/2098 \nf 4857/4768/2102 1779/1757/1232 4854/4765/2099 \nf 4858/4769/4382 4859/4770/2105 4856/4767/2101 \nf 4860/4771/2106 4856/4767/2103 4859/4770/2107 \nf 4855/4766/4381 4858/4769/4382 4856/4767/2101 \nf 4860/4771/2106 4857/4768/2102 4856/4767/2103 \nf 4861/4769/4383 4862/4772/2109 4859/4770/2105 \nf 4863/4773/2110 4859/4770/2107 4862/4772/2111 \nf 4858/4769/4382 4861/4769/4383 4859/4770/2105 \nf 4863/4773/2110 4860/4771/2106 4859/4770/2107 \nf 4864/4774/4384 4865/4775/2112 4862/4772/2109 \nf 4866/4776/2113 4862/4772/2111 4865/4775/2114 \nf 4867/4777/4385 4864/4774/4384 4862/4772/2109 \nf 4861/4769/4383 4867/4777/4385 4862/4772/2109 \nf 4866/4776/2113 4863/4773/2110 4862/4772/2111 \nf 4868/4778/4386 4869/4779/2116 4865/4775/2112 \nf 4870/4780/2117 4865/4775/2114 4869/4779/2118 \nf 4871/4781/4387 4868/4778/4386 4865/4775/2112 \nf 4864/4774/4384 4871/4781/4387 4865/4775/2112 \nf 4870/4780/2117 4866/4776/2113 4865/4775/2114 \nf 4872/4782/4388 4873/4783/2120 4869/4779/2116 \nf 4874/4784/2121 4869/4779/2118 4873/4783/2122 \nf 4875/4785/4389 4872/4782/4388 4869/4779/2116 \nf 4868/4778/4386 4875/4785/4389 4869/4779/2116 \nf 4876/4786/2123 4870/4780/2117 4869/4779/2118 \nf 4874/4784/2121 4876/4786/2123 4869/4779/2118 \nf 4877/4787/4390 4878/4788/2125 4873/4783/2120 \nf 4879/4789/2126 4873/4783/2122 4878/4788/2127 \nf 4872/4782/4388 4877/4787/4390 4873/4783/2120 \nf 4879/4789/2126 4874/4784/2121 4873/4783/2122 \nf 4880/4790/4391 77/74/1366 4878/4788/2125 \nf 78/75/53 4878/4788/2127 77/74/52 \nf 4881/4791/4392 4880/4790/4391 4878/4788/2125 \nf 4877/4787/4390 4881/4791/4392 4878/4788/2125 \nf 78/75/53 4879/4789/2126 4878/4788/2127 \nf 4880/4790/4391 2014/1987/1451 77/74/1366 \nf 2949/2900/2433 2014/1987/1450 4880/4790/4393 \nf 2949/2900/2433 4880/4790/4393 4881/4791/4394 \nf 4882/4792/4395 4881/4791/4394 4877/4787/4390 \nf 4882/4792/4395 2949/2900/2433 4881/4791/4394 \nf 4883/4793/4396 4877/4787/4390 4872/4782/4388 \nf 4883/4793/4396 4882/4792/4395 4877/4787/4390 \nf 4883/4793/4396 4872/4782/4388 4875/4785/4397 \nf 4884/4794/4398 4875/4785/4397 4868/4778/4386 \nf 4884/4794/4398 4883/4793/4396 4875/4785/4397 \nf 4884/4794/4398 4868/4778/4386 4871/4781/4399 \nf 4885/4795/4400 4871/4781/4399 4864/4774/4401 \nf 4885/4795/4400 4884/4794/4398 4871/4781/4399 \nf 4886/4796/4402 4864/4774/4401 4867/4777/4385 \nf 4886/4796/4402 4885/4795/4400 4864/4774/4401 \nf 4886/4796/4402 4867/4777/4385 4861/4769/4403 \nf 4887/4797/4404 4861/4769/4403 4858/4769/4382 \nf 4888/4798/4405 4886/4796/4402 4861/4769/4403 \nf 4887/4797/4404 4888/4798/4405 4861/4769/4403 \nf 4889/4799/4406 4858/4769/4382 4855/4766/4381 \nf 4889/4799/4406 4887/4797/4404 4858/4769/4382 \nf 4889/4799/4406 4855/4766/4381 4853/4764/4379 \nf 4889/4799/4406 4853/4764/4379 4853/4764/4407 \nf 4843/4755/4364 4853/4764/4407 1783/1761/1194 \nf 4845/4757/4367 4889/4799/4406 4853/4764/4407 \nf 4843/4755/4364 4845/4757/4367 4853/4764/4407 \nf 1775/1753/1228 1779/1757/1228 4857/4768/2136 \nf 4890/4800/2136 4857/4768/2136 4860/4771/2138 \nf 4890/4800/2136 1775/1753/1228 4857/4768/2136 \nf 4891/4801/2138 4860/4771/2138 4863/4773/2140 \nf 4891/4801/2138 4890/4800/2136 4860/4771/2138 \nf 4892/4802/2140 4863/4773/2140 4866/4776/2142 \nf 4892/4802/2140 4891/4801/2138 4863/4773/2140 \nf 4893/4803/2142 4866/4776/2142 4870/4780/2144 \nf 4893/4803/2142 4892/4802/2140 4866/4776/2142 \nf 4894/4804/2144 4870/4780/2144 4876/4786/2146 \nf 4894/4804/2144 4893/4803/2142 4870/4780/2144 \nf 4895/4805/2146 4876/4786/2146 4874/4784/2147 \nf 4895/4805/2146 4894/4804/2144 4876/4786/2146 \nf 4896/4806/2147 4874/4784/2147 4879/4789/2149 \nf 4896/4806/2147 4895/4805/2146 4874/4784/2147 \nf 4897/4807/2149 4879/4789/2149 78/75/51 \nf 4897/4807/2149 4896/4806/2147 4879/4789/2149 \nf 76/73/51 4897/4807/2149 78/75/51 \nf 1777/1755/1239 1775/1753/1232 4890/4800/2102 \nf 4898/4808/4408 4890/4800/2102 4891/4801/2106 \nf 4899/4809/4409 1777/1755/1239 4890/4800/2102 \nf 4898/4808/4408 4899/4809/4409 4890/4800/2102 \nf 4900/4810/4410 4891/4801/2106 4892/4802/2110 \nf 4900/4810/4410 4898/4808/4408 4891/4801/2106 \nf 4901/4811/4411 4892/4802/2110 4893/4803/2113 \nf 4900/4810/4412 4900/4810/4410 4892/4802/2110 \nf 4901/4811/4411 4900/4810/4412 4892/4802/2110 \nf 4902/4812/4413 4893/4803/2113 4894/4804/2117 \nf 4903/4813/4414 4901/4811/4411 4893/4803/2113 \nf 4902/4812/4413 4903/4813/4414 4893/4803/2113 \nf 4904/4814/4415 4894/4804/2117 4895/4805/2123 \nf 4905/4815/4416 4902/4812/4413 4894/4804/2117 \nf 4904/4814/4415 4905/4815/4416 4894/4804/2117 \nf 4906/4816/4417 4895/4805/2123 4896/4806/2121 \nf 4906/4816/4417 4904/4814/4415 4895/4805/2123 \nf 4907/4817/4418 4896/4806/2121 4897/4807/2126 \nf 4908/4818/4419 4906/4816/4417 4896/4806/2121 \nf 4907/4817/4418 4908/4818/4419 4896/4806/2121 \nf 4909/4819/4420 4897/4807/2126 76/73/53 \nf 4909/4819/4420 4907/4817/4418 4897/4807/2126 \nf 1787/1765/1244 3917/3858/3429 1935/1907/1373 \nf 80/77/55 4909/4819/4420 76/73/53 \nf 1778/1756/1240 1777/1755/1239 4899/4809/4421 \nf 4910/4820/4422 4899/4809/4421 4898/4808/4408 \nf 4911/4821/4423 1778/1756/1240 4899/4809/4421 \nf 4910/4820/4422 4911/4821/4423 4899/4809/4421 \nf 4910/4820/4422 4898/4808/4408 4900/4810/4424 \nf 4912/4822/4425 4900/4810/4424 4900/4810/4412 \nf 4912/4822/4425 4910/4820/4422 4900/4810/4424 \nf 4912/4822/4425 4900/4810/4412 4901/4811/4411 \nf 4912/4822/4425 4901/4811/4411 4903/4813/4426 \nf 4913/4814/4427 4903/4813/4426 4902/4812/4413 \nf 4913/4814/4427 4912/4822/4425 4903/4813/4426 \nf 4913/4814/4427 4902/4812/4413 4905/4815/4428 \nf 4914/4823/4429 4905/4815/4428 4904/4814/4430 \nf 4914/4823/4429 4913/4814/4427 4905/4815/4428 \nf 4914/4823/4429 4904/4814/4430 4906/4816/4431 \nf 4915/4824/4432 4906/4816/4431 4908/4818/4419 \nf 4915/4824/4432 4914/4823/4429 4906/4816/4431 \nf 4915/4824/4432 4908/4818/4419 4907/4817/4433 \nf 4916/4825/4434 4907/4817/4433 4909/4819/4420 \nf 4916/4825/4434 4915/4824/4432 4907/4817/4433 \nf 1935/1907/1373 3917/3858/3429 3920/3861/3431 \nf 4917/4826/4435 4909/4819/4420 80/77/4436 \nf 4917/4826/4435 4916/4825/4434 4909/4819/4420 \nf 4918/4827/4437 80/77/4436 81/78/4438 \nf 4917/4826/4435 80/77/4436 4918/4827/4437 \nf 4918/4827/4437 81/78/4438 79/76/1190 \nf 4918/4827/4437 79/76/1190 1689/1667/1154 \nf 4918/4827/4437 1689/1667/1154 3880/3828/1156 \nf 4919/4828/4439 3880/3828/1156 3881/3829/3372 \nf 4919/4828/4439 4918/4827/4437 3880/3828/1156 \nf 4920/4829/4440 3881/3829/3372 3882/3830/3373 \nf 4920/4829/4440 4919/4828/4439 3881/3829/3372 \nf 4921/4830/4441 3882/3830/3373 3883/3831/3374 \nf 4921/4830/4441 4920/4829/4440 3882/3830/3373 \nf 4922/4831/4442 3883/3831/3374 3884/3832/3375 \nf 4922/4831/4442 4921/4830/4441 3883/3831/3374 \nf 4923/4832/4443 3884/3832/3375 3885/3833/3376 \nf 4923/4832/4443 4922/4831/4442 3884/3832/3375 \nf 4924/4833/4444 3885/3833/3376 3886/3834/3377 \nf 4924/4833/4444 4923/4832/4443 3885/3833/3376 \nf 4925/4834/4445 3886/3834/3377 539/536/141 \nf 4925/4834/4445 4924/4833/4444 3886/3834/3377 \nf 541/538/278 4925/4834/4445 539/536/141 \nf 4917/4826/4435 4918/4827/4437 4919/4828/4439 \nf 4926/4835/4446 4919/4828/4439 4920/4829/4440 \nf 4917/4826/4435 4919/4828/4439 4926/4835/4446 \nf 4927/4836/4447 4920/4829/4440 4921/4830/4441 \nf 4926/4835/4446 4920/4829/4440 4927/4836/4447 \nf 4928/4837/4448 4921/4830/4441 4922/4831/4442 \nf 4927/4836/4447 4921/4830/4441 4928/4837/4448 \nf 4929/4838/4449 4922/4831/4442 4923/4832/4443 \nf 4928/4837/4448 4922/4831/4442 4929/4838/4449 \nf 4930/4839/4450 4923/4832/4443 4924/4833/4444 \nf 4929/4838/4449 4923/4832/4443 4930/4839/4450 \nf 4931/4840/4451 4924/4833/4444 4925/4834/4445 \nf 4930/4839/4450 4924/4833/4444 4931/4840/4451 \nf 4932/4841/4452 4925/4834/4445 541/538/278 \nf 4931/4840/4451 4925/4834/4445 4932/4841/4452 \nf 4932/4841/4452 541/538/278 3848/3796/3343 \nf 4933/4842/4453 1776/1754/1237 1778/1756/1240 \nf 4933/4842/4453 3855/3803/3360 1776/1754/1237 \nf 4911/4821/4423 4933/4842/4453 1778/1756/1240 \nf 4934/4843/4454 3855/3803/3360 4933/4842/4453 \nf 4934/4843/4454 3854/3802/3359 3855/3803/3360 \nf 4935/4844/4455 4933/4842/4453 4911/4821/4423 \nf 4935/4844/4455 4934/4843/4454 4933/4842/4453 \nf 4936/4845/4456 4911/4821/4423 4910/4820/4422 \nf 4936/4845/4456 4935/4844/4455 4911/4821/4423 \nf 4912/4822/4425 4936/4845/4456 4910/4820/4422 \nf 4937/4846/4457 3854/3802/3359 4934/4843/4454 \nf 4937/4846/4457 3853/3801/3355 3854/3802/3359 \nf 4938/4847/4458 4934/4843/4454 4935/4844/4455 \nf 4938/4847/4458 4937/4846/4457 4934/4843/4454 \nf 4939/4848/4459 4935/4844/4455 4936/4845/4456 \nf 4939/4848/4459 4938/4847/4458 4935/4844/4455 \nf 4940/4849/4460 4936/4845/4456 4912/4822/4425 \nf 4940/4849/4460 4939/4848/4459 4936/4845/4456 \nf 4941/4850/4461 4940/4849/4460 4912/4822/4425 \nf 4913/4814/4427 4941/4850/4461 4912/4822/4425 \nf 4942/4851/4462 3853/3801/3355 4937/4846/4457 \nf 4942/4851/4462 3852/3800/3351 3853/3801/3355 \nf 4943/4852/4463 4937/4846/4457 4938/4847/4458 \nf 4943/4852/4463 4942/4851/4462 4937/4846/4457 \nf 4944/4853/4464 4938/4847/4458 4939/4848/4459 \nf 4944/4853/4464 4943/4852/4463 4938/4847/4458 \nf 4945/77/4465 4939/4848/4459 4940/4849/4460 \nf 4945/77/4465 4944/4853/4464 4939/4848/4459 \nf 4946/4819/4466 4940/4849/4460 4941/4850/4461 \nf 4946/4819/4466 4945/77/4465 4940/4849/4460 \nf 4947/4854/4467 4941/4850/4461 4913/4814/4427 \nf 4947/4854/4467 4946/4819/4466 4941/4850/4461 \nf 4914/4823/4429 4947/4854/4467 4913/4814/4427 \nf 4948/4855/4468 3852/3800/3351 4942/4851/4462 \nf 4948/4855/4468 3851/3799/3349 3852/3800/3351 \nf 4949/4856/4469 4942/4851/4462 4943/4852/4463 \nf 4949/4856/4469 4948/4855/4468 4942/4851/4462 \nf 4949/4856/4469 4943/4852/4463 4944/4853/4464 \nf 4950/4857/4470 4944/4853/4464 4945/77/4465 \nf 4950/4857/4470 4949/4856/4469 4944/4853/4464 \nf 4951/4858/4471 4945/77/4465 4946/4819/4466 \nf 4951/4858/4471 4950/4857/4470 4945/77/4465 \nf 4952/4859/4472 4946/4819/4466 4947/4854/4467 \nf 4952/4859/4472 4951/4858/4471 4946/4819/4466 \nf 4953/4860/4473 4947/4854/4467 4914/4823/4429 \nf 4953/4860/4473 4952/4859/4472 4947/4854/4467 \nf 4915/4824/4432 4953/4860/4473 4914/4823/4429 \nf 4954/4861/4474 3851/3799/3349 4948/4855/4468 \nf 4954/4861/4474 3850/3798/3346 3851/3799/3349 \nf 4955/4862/4475 4948/4855/4468 4949/4856/4469 \nf 4955/4862/4475 4954/4861/4474 4948/4855/4468 \nf 4956/4863/4476 4949/4856/4469 4950/4857/4470 \nf 4956/4863/4476 4955/4862/4475 4949/4856/4469 \nf 4957/4864/4477 4950/4857/4470 4951/4858/4471 \nf 4957/4864/4477 4956/4863/4476 4950/4857/4470 \nf 4958/4865/4478 4951/4858/4471 4952/4859/4472 \nf 4958/4865/4478 4957/4864/4477 4951/4858/4471 \nf 4959/4866/4479 4952/4859/4472 4953/4860/4473 \nf 4959/4866/4479 4958/4865/4478 4952/4859/4472 \nf 4960/4867/4480 4953/4860/4473 4915/4824/4432 \nf 4960/4867/4480 4959/4866/4479 4953/4860/4473 \nf 4916/4825/4434 4960/4867/4480 4915/4824/4432 \nf 4932/4841/4452 3850/3798/3346 4954/4861/4474 \nf 4932/4841/4452 3848/3796/3343 3850/3798/3346 \nf 4932/4841/4452 4954/4861/4474 4955/4862/4475 \nf 4931/4840/4451 4955/4862/4475 4956/4863/4476 \nf 4931/4840/4451 4932/4841/4452 4955/4862/4475 \nf 4930/4839/4450 4956/4863/4476 4957/4864/4477 \nf 4930/4839/4450 4931/4840/4451 4956/4863/4476 \nf 4929/4838/4449 4957/4864/4477 4958/4865/4478 \nf 4929/4838/4449 4930/4839/4450 4957/4864/4477 \nf 4928/4837/4448 4958/4865/4478 4959/4866/4479 \nf 4928/4837/4448 4929/4838/4449 4958/4865/4478 \nf 4927/4836/4447 4959/4866/4479 4960/4867/4480 \nf 4927/4836/4447 4928/4837/4448 4959/4866/4479 \nf 4926/4835/4446 4960/4867/4480 4916/4825/4434 \nf 4926/4835/4446 4927/4836/4447 4960/4867/4480 \nf 4917/4826/4435 4926/4835/4446 4916/4825/4434 \nf 2948/2899/2432 2949/2900/2433 4882/4792/4395 \nf 4961/4868/4481 4882/4792/4395 4883/4793/4396 \nf 4961/4868/4481 2948/2899/2432 4882/4792/4395 \nf 4962/4869/4482 4883/4793/4396 4884/4794/4398 \nf 4962/4869/4482 4961/4868/4481 4883/4793/4396 \nf 4963/4870/4483 4884/4794/4398 4885/4795/4400 \nf 4963/4870/4483 4962/4869/4482 4884/4794/4398 \nf 4964/4871/4484 4885/4795/4400 4886/4796/4402 \nf 4964/4871/4484 4963/4870/4483 4885/4795/4400 \nf 4888/4798/4405 4964/4871/4484 4886/4796/4402 \nf 2947/2892/2431 2948/2899/2432 4961/4868/4481 \nf 4965/4872/4485 4961/4868/4481 4962/4869/4482 \nf 4965/4872/4485 2947/2892/2431 4961/4868/4481 \nf 4966/4873/4486 4962/4869/4482 4963/4870/4483 \nf 4966/4873/4486 4965/4872/4485 4962/4869/4482 \nf 4967/1070/4487 4963/4870/4483 4964/4871/4484 \nf 4967/1070/4487 4966/4873/4486 4963/4870/4483 \nf 4968/4874/4488 4964/4871/4484 4888/4798/4405 \nf 4968/4874/4488 4967/1070/4487 4964/4871/4484 \nf 4969/4875/4489 4888/4798/4405 4887/4797/4404 \nf 4969/4875/4489 4968/4874/4488 4888/4798/4405 \nf 4970/4876/4490 4887/4797/4404 4889/4799/4406 \nf 4970/4876/4490 4969/4875/4489 4887/4797/4404 \nf 4845/4757/4367 4970/4876/4490 4889/4799/4406 \nf 4971/4877/4491 2947/2892/2431 4965/4872/4485 \nf 2946/2898/2430 2947/2892/2431 4971/4877/4491 \nf 4972/4878/4492 4965/4872/4485 4966/4873/4486 \nf 4971/4877/4491 4965/4872/4485 4972/4878/4492 \nf 4973/4879/4493 4966/4873/4486 4967/1070/4487 \nf 4972/4878/4492 4966/4873/4486 4973/4879/4493 \nf 4974/4880/4494 4967/1070/4487 4968/4874/4488 \nf 4973/4879/4493 4967/1070/4487 4974/4880/4494 \nf 4975/4881/4495 4968/4874/4488 4969/4875/4489 \nf 4974/4880/4494 4968/4874/4488 4975/4881/4495 \nf 4847/4759/4370 4969/4875/4489 4970/4876/4490 \nf 4975/4881/4495 4969/4875/4489 4847/4759/4370 \nf 4844/4756/4366 4970/4876/4490 4845/4757/4367 \nf 4847/4759/4370 4970/4876/4490 4844/4756/4366 \nf 4976/4882/4496 4849/4747/4374 4851/4762/4377 \nf 4976/4882/4496 4850/4761/4375 4849/4747/4374 \nf 4977/4883/4497 4851/4762/4377 4852/4763/4378 \nf 4977/4883/4497 4976/4882/4496 4851/4762/4377 \nf 2944/2896/2428 4852/4763/4378 1692/1670/1188 \nf 2944/2896/2428 4977/4883/4497 4852/4763/4378 \nf 4975/4881/4495 4846/4758/4369 4848/4760/4371 \nf 4975/4881/4495 4847/4759/4370 4846/4758/4369 \nf 4974/4880/4494 4848/4760/4371 4850/4761/4375 \nf 4974/4880/4494 4975/4881/4495 4848/4760/4371 \nf 4973/4879/4493 4850/4761/4375 4976/4882/4496 \nf 4973/4879/4493 4974/4880/4494 4850/4761/4375 \nf 4972/4878/4492 4976/4882/4496 4977/4883/4497 \nf 4972/4878/4492 4973/4879/4493 4976/4882/4496 \nf 4971/4877/4491 4977/4883/4497 2944/2896/2428 \nf 4971/4877/4491 4972/4878/4492 4977/4883/4497 \nf 2946/2898/2430 4971/4877/4491 2944/2896/2428 \nf 3804/3753/3290 3805/3754/3291 4836/4750/4350 \nf 4978/4884/4498 4836/4750/4350 4837/4751/4351 \nf 4978/4884/4498 3804/3753/3290 4836/4750/4350 \nf 4839/4753/4355 4978/4884/4498 4837/4751/4351 \nf 4979/4885/4499 3804/3753/3290 4978/4884/4498 \nf 4979/4885/4499 3803/3752/3289 3804/3753/3290 \nf 4980/4886/4500 4978/4884/4498 4839/4753/4355 \nf 4980/4886/4500 4979/4885/4499 4978/4884/4498 \nf 4981/4887/4501 4839/4753/4355 4838/4752/4354 \nf 4981/4887/4501 4980/4886/4500 4839/4753/4355 \nf 4982/4888/4502 4838/4752/4354 4840/4738/4356 \nf 4982/4888/4502 4981/4887/4501 4838/4752/4354 \nf 4841/4735/4359 4982/4888/4502 4840/4738/4356 \nf 3802/3751/3288 3803/3752/3289 4979/4885/4499 \nf 4983/4889/4503 4979/4885/4499 4980/4886/4500 \nf 4983/4889/4503 3802/3751/3288 4979/4885/4499 \nf 4984/4885/4504 4980/4886/4500 4981/4887/4501 \nf 4984/4885/4504 4983/4889/4503 4980/4886/4500 \nf 4985/4884/4505 4981/4887/4501 4982/4888/4502 \nf 4985/4884/4505 4984/4885/4504 4981/4887/4501 \nf 4986/4890/4506 4982/4888/4502 4841/4735/4359 \nf 4986/4890/4506 4985/4884/4505 4982/4888/4502 \nf 4987/4741/4507 4841/4735/4359 4842/4754/4361 \nf 4987/4741/4507 4986/4890/4506 4841/4735/4359 \nf 4793/4712/4294 4987/4741/4507 4842/4754/4361 \nf 4988/3751/4508 3802/3751/3288 4983/4889/4503 \nf 4988/3751/4508 3801/3672/3287 3802/3751/3288 \nf 4989/4891/4509 4983/4889/4503 4984/4885/4504 \nf 4989/4891/4509 4988/3751/4508 4983/4889/4503 \nf 4990/4892/4510 4984/4885/4504 4985/4884/4505 \nf 4990/4892/4510 4989/4891/4509 4984/4885/4504 \nf 4796/4714/4299 4985/4884/4505 4986/4890/4506 \nf 4796/4714/4299 4990/4892/4510 4985/4884/4505 \nf 4794/3754/4295 4986/4890/4506 4987/4741/4507 \nf 4794/3754/4295 4796/4714/4299 4986/4890/4506 \nf 4792/4711/4293 4987/4741/4507 4793/4712/4294 \nf 4792/4711/4293 4794/3754/4295 4987/4741/4507 \nf 4799/4717/4302 3801/3672/3287 4988/3751/4508 \nf 1793/1771/1251 3801/3672/3287 4799/4717/4302 \nf 4798/4716/4301 4988/3751/4508 4989/4891/4509 \nf 4799/4717/4302 4988/3751/4508 4798/4716/4301 \nf 4797/4715/4300 4989/4891/4509 4990/4892/4510 \nf 4798/4716/4301 4989/4891/4509 4797/4715/4300 \nf 4795/4713/4298 4990/4892/4510 4796/4714/4299 \nf 4797/4715/4300 4990/4892/4510 4795/4713/4298 \nf 4991/4893/4511 3976/3914/3473 3978/3916/3476 \nf 4991/4893/4511 3977/3915/3474 3976/3914/3473 \nf 4992/4894/4512 3978/3916/3476 3979/3917/3477 \nf 4992/4894/4512 4991/4893/4511 3978/3916/3476 \nf 4993/4895/4513 3979/3917/3477 3980/3918/3479 \nf 4993/4895/4513 4992/4894/4512 3979/3917/3477 \nf 4771/4690/4276 3980/3918/3479 1794/1772/1253 \nf 4771/4690/4276 4993/4895/4513 3980/3918/3479 \nf 4994/4896/4514 3973/3911/3469 3975/3913/3471 \nf 4994/4896/4514 3974/3912/3470 3973/3911/3469 \nf 4995/4897/4515 3975/3913/3471 3977/3915/3474 \nf 4995/4897/4515 4994/4896/4514 3975/3913/3471 \nf 4996/4898/4516 3977/3915/3474 4991/4893/4511 \nf 4996/4898/4516 4995/4897/4515 3977/3915/3474 \nf 4997/4899/4517 4991/4893/4511 4992/4894/4512 \nf 4997/4899/4517 4996/4898/4516 4991/4893/4511 \nf 4998/4900/4518 4992/4894/4512 4993/4895/4513 \nf 4998/4900/4518 4997/4899/4517 4992/4894/4512 \nf 4775/4694/4279 4993/4895/4513 4771/4690/4276 \nf 4775/4694/4279 4998/4900/4518 4993/4895/4513 \nf 3842/3790/3335 3847/3795/3340 3974/3912/3470 \nf 3843/3791/3336 3974/3912/3470 4994/4896/4514 \nf 3843/3791/3336 3842/3790/3335 3974/3912/3470 \nf 4999/4901/4519 4994/4896/4514 4995/4897/4515 \nf 4999/4901/4519 3843/3791/3336 4994/4896/4514 \nf 5000/4902/4520 4995/4897/4515 4996/4898/4516 \nf 5000/4902/4520 4999/4901/4519 4995/4897/4515 \nf 5001/4903/4521 4996/4898/4516 4997/4899/4517 \nf 5001/4903/4521 5000/4902/4520 4996/4898/4516 \nf 5002/4904/4522 4997/4899/4517 4998/4900/4518 \nf 5002/4904/4522 5001/4903/4521 4997/4899/4517 \nf 5003/4905/4523 4998/4900/4518 4775/4694/4279 \nf 5003/4905/4523 5002/4904/4522 4998/4900/4518 \nf 4779/4698/4282 5003/4905/4523 4775/4694/4279 \nf 3835/3783/3327 3843/3791/3336 4999/4901/4519 \nf 3832/3780/3323 4999/4901/4519 5000/4902/4520 \nf 3832/3780/3323 3835/3783/3327 4999/4901/4519 \nf 5004/4906/4524 5000/4902/4520 5001/4903/4521 \nf 5004/4906/4524 3832/3780/3323 5000/4902/4520 \nf 5005/4907/4525 5001/4903/4521 5002/4904/4522 \nf 5005/4907/4525 5004/4906/4524 5001/4903/4521 \nf 5006/4908/4526 5002/4904/4522 5003/4905/4523 \nf 5006/4908/4526 5005/4907/4525 5002/4904/4522 \nf 4783/4702/4285 5003/4905/4523 4779/4698/4282 \nf 4783/4702/4285 5006/4908/4526 5003/4905/4523 \nf 3825/3773/3315 3832/3780/3323 5004/4906/4524 \nf 3821/3769/3311 5004/4906/4524 5005/4907/4525 \nf 3821/3769/3311 3825/3773/3315 5004/4906/4524 \nf 3822/3770/3312 5005/4907/4525 5006/4908/4526 \nf 3822/3770/3312 3821/3769/3311 5005/4907/4525 \nf 5007/4909/4527 5006/4908/4526 4783/4702/4285 \nf 5007/4909/4527 3822/3770/3312 5006/4908/4526 \nf 4788/4707/4289 5007/4909/4527 4783/4702/4285 \nf 3816/3764/3304 3822/3770/3312 5007/4909/4527 \nf 3810/3759/3296 5007/4909/4527 4788/4707/4289 \nf 3810/3759/3296 3816/3764/3304 5007/4909/4527 \nf 3807/3756/3293 3810/3759/3296 4788/4707/4289 \nf 393/390/200 3906/3850/3420 3907/1870/3422 \nf 394/391/201 3907/1870/3422 3910/3853/3424 \nf 393/390/200 3907/1870/3422 394/391/201 \nf 1786/1764/1243 3910/3853/3424 3913/3856/3426 \nf 394/391/201 3910/3853/3424 1786/1764/1243 \nf 1787/1765/1244 3913/3856/3426 3917/3858/3429 \nf 1786/1764/1243 3913/3856/3426 1787/1765/1244 \n# 10074 faces\n\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/assets/blub.obj",
    "content": "v 0.30383 -0.334455 -0.339867\nv 0.407015 -0.335278 0.283284\nv 0.311802 0.281543 -0.353833\nv 0.363848 0.295688 0.319229\nv 0.201652 -0.150107 0.905069\nv 0.201652 0.049485 0.905069\nv 0.0716987 -0.155458 -0.811811\nv 0.0756873 0.0703828 -0.819499\nv 0 -0.455494 -0.350968\nv 0 -0.441442 0.299839\nv 0 -0.47588 -0.0209292\nv 0.366719 0.313819 -0.0234852\nv 0.49754 -0.0402774 0.30809\nv 0.400612 -0.0375791 -0.343536\nv 4.33681e-19 0.488471 0.399766\nv 0.304147 -0.249668 0.71379\nv 0 -0.14533 0.935144\nv 0 -0.322592 0.716751\nv 0.304147 0.182874 0.718698\nv 0.232157 -0.058285 0.935144\nv 0.412605 -0.0399979 0.716751\nv 0 0.0541512 0.935144\nv 0 0.293339 0.73685\nv 0 -0.0626395 0.997318\nv 0.207178 0.19576 -0.647838\nv 2.1684e-19 0.0883131 -0.858929\nv 0.180955 -0.273419 -0.642093\nv 0.0885117 -0.042324 -0.818201\nv 0.243561 -0.030447 -0.643532\nv 0 -0.183612 -0.819188\nv 0 -0.360839 -0.643532\nv 0 -0.0162403 -1.61128\nv 0.113139 0.459091 -0.374516\nv 0 0.614018 0.174524\nv 0.108009 0.573507 -0.0136262\nv 0.162845 0.27825 -0.69236\nv 2.1684e-19 0.240384 -0.919161\nv 0.0516932 0.688835 -0.483912\nv 0 1.00763 0.0319146\nv 0.0604302 0.943036 -0.121851\nv 0.0830123 0.441986 -0.775361\nv -2.1684e-19 0.376153 -0.908911\nv 0.0261295 -0.144958 -1.01487\nv 0.0313438 0.0347166 -1.02902\nv 0 0.0836219 -1.039\nv 0.0416476 -0.0660913 -1.01448\nv 0 -0.18438 -1.04012\nv 0.0311898 -0.220198 -1.19232\nv 0.0429241 0.116215 -1.22935\nv 0 0.232124 -1.34016\nv 0.0554778 0.000627617 -1.28859\nv 0 -0.313756 -1.30218\nv 0 0.327055 -1.89369\nv 0.0996455 0.273452 -1.51279\nv 0 0.470384 -1.75546\nv 0.104926 0.1875 -1.55025\nv 0 -0.257039 -1.65046\nv 0.0676659 -0.207683 -1.2396\nv 0.07204 -0.101465 -1.25726\nv 0 -0.418569 -1.52422\nv 0.440646 -0.374272 -0.00924983\nv 0.601292 -0.378551 0.00250401\nv 0.610971 -0.576469 -0.483016\nv 0.696806 -0.574979 -0.469607\nv 0.690906 -0.148398 -0.503363\nv 0.621193 -0.148828 -0.51413\nv 0.540789 -0.10824 -0.0494785\nv 0 0.48304 -0.792035\nv 0 0.741905 -0.511172\nv 0 1.02863 -0.152178\nv -0.30383 -0.334455 -0.339867\nv -0.407015 -0.335278 0.283284\nv -0.311802 0.281543 -0.353833\nv -0.363848 0.295688 0.319229\nv -0.201652 -0.150107 0.905069\nv -0.201652 0.049485 0.905069\nv -0.0716987 -0.155458 -0.811811\nv -0.0756873 0.0703828 -0.819499\nv -0.366719 0.313819 -0.0234852\nv -0.49754 -0.0402774 0.30809\nv -0.400612 -0.0375791 -0.343536\nv -0.304147 -0.249668 0.71379\nv -0.304147 0.182874 0.718698\nv -0.232157 -0.058285 0.935144\nv -0.412605 -0.0399979 0.716751\nv -0.207178 0.19576 -0.647838\nv -0.180955 -0.273419 -0.642093\nv -0.0885117 -0.042324 -0.818201\nv -0.243561 -0.030447 -0.643532\nv -0.113139 0.459091 -0.374516\nv -0.108009 0.573507 -0.0136262\nv -0.162845 0.27825 -0.69236\nv -0.0516932 0.688835 -0.483912\nv -0.0604302 0.943036 -0.121851\nv -0.0830123 0.441986 -0.775361\nv -0.0261295 -0.144958 -1.01487\nv -0.0313438 0.0347166 -1.02902\nv -0.0416476 -0.0660913 -1.01448\nv -0.0311898 -0.220198 -1.19232\nv -0.0429241 0.116215 -1.22935\nv -0.0554778 0.000627617 -1.28859\nv -0.0996455 0.273452 -1.51279\nv -0.104926 0.1875 -1.55025\nv -0.0676659 -0.207683 -1.2396\nv -0.07204 -0.101465 -1.25726\nv -0.440646 -0.374272 -0.00924983\nv -0.601292 -0.378551 0.00250401\nv -0.610971 -0.576469 -0.483016\nv -0.696806 -0.574979 -0.469607\nv -0.690906 -0.148398 -0.503363\nv -0.621193 -0.148828 -0.51413\nv -0.540789 -0.10824 -0.0494785\nv 0.208574 -0.412345 0.301751\nv 0.34796 -0.297318 0.511946\nv 0.167148 -0.305141 0.715271\nv 0 -0.39433 0.513465\nv 0.190415 -0.369912 0.513247\nv 0.250623 -0.193475 0.843459\nv 0.117873 -0.147917 0.925139\nv 0 -0.229562 0.853901\nv 0.139191 -0.222771 0.84904\nv 0.482817 -0.197561 0.311304\nv 0.465064 -0.0350359 0.514448\nv 0.386267 -0.155621 0.715271\nv 0.437869 -0.178295 0.514338\nv 0.462576 0.129959 0.303545\nv 0.343571 0.249678 0.527402\nv 0.386267 0.0775058 0.715855\nv 0.435489 0.111687 0.515157\nv 0.250623 0.105965 0.844044\nv 0.222488 -0.00113809 0.925139\nv 0.332913 -0.049563 0.853901\nv 0.313397 0.0344231 0.849109\nv 0.222488 -0.11051 0.925139\nv 0.313397 -0.131043 0.84904\nv 0.195658 0.431948 0.365784\nv 0 0.410903 0.574424\nv 0.167148 0.261838 0.729644\nv 0.188537 0.362868 0.556225\nv 0 0.165095 0.856294\nv 0.117873 0.0519363 0.925139\nv 0.139191 0.149775 0.850751\nv 0 -0.0186605 0.981722\nv 0.11904 -0.0620723 0.981722\nv 0.116249 -0.0159106 0.967391\nv 0 -0.0959138 0.981722\nv 0.116249 -0.0996045 0.967391\nv 0.378225 0.135867 -0.350008\nv 0.327544 -0.0293116 -0.510129\nv 0.231771 0.101195 -0.643496\nv 0.266496 0.246238 -0.511117\nv 0.310512 0.126816 -0.510806\nv 0.379282 -0.200918 -0.339129\nv 0.244733 -0.315054 -0.509521\nv 0.228649 -0.163913 -0.642812\nv 0.30816 -0.185744 -0.509519\nv 0.120666 -0.210751 -0.732623\nv 0.0857657 -0.106668 -0.814896\nv 0.158297 -0.0361976 -0.736897\nv 0.149978 -0.133431 -0.734747\nv 0.086191 0.0227038 -0.815903\nv 0.134375 0.131756 -0.749794\nv 0.151604 0.0607583 -0.736802\nv 0.168655 -0.423296 -0.346478\nv 0 -0.422762 -0.511014\nv 0.099748 -0.33948 -0.642812\nv 0.135181 -0.395663 -0.510394\nv 0 -0.265805 -0.737015\nv 0.0407757 -0.178572 -0.815595\nv 0.0671614 -0.253491 -0.73483\nv 0 0.522437 0.255061\nv 0.366845 0.315704 0.140774\nv 0.222277 0.446187 -0.0036015\nv 0.0766666 0.599646 0.122394\nv 0.18013 0.471399 0.184491\nv 0.347443 0.30275 -0.189022\nv 0.207792 0.373814 -0.354845\nv 0.107346 0.529623 -0.191512\nv 0.219164 0.417972 -0.181967\nv 0.183793 0.234957 -0.662621\nv 0.149252 0.362644 -0.536889\nv 0.20689 0.307443 -0.51397\nv 0.0497412 0.0877609 -0.839765\nv 0 0.161144 -0.86807\nv 0.102731 0.242137 -0.845395\nv 0.102077 0.167228 -0.80184\nv 0.0676805 0.765828 -0.0645255\nv 0.0402072 0.996322 -0.0065238\nv 0 0.81328 0.102477\nv 0.0443788 0.803601 0.0578596\nv 0.0691318 0.579805 -0.428344\nv 0.0554137 0.831721 -0.295723\nv 0.0647854 0.688466 -0.240715\nv 0.126821 0.360621 -0.737186\nv 0.0708903 0.549128 -0.645345\nv 0.105867 0.457605 -0.591138\nv 0 0.315478 -0.931389\nv 0.055742 0.388366 -0.871735\nv 0.0835812 0.32046 -0.870314\nv 0.0410841 0.0425437 -0.911861\nv 0.0138992 0.0732733 -1.03085\nv 0 0.0639116 -0.924988\nv 0.0240133 0.0607176 -0.918715\nv 0.0493405 -0.0479073 -0.914559\nv 0.0421493 -0.0180423 -1.01288\nv 0.0484446 0.00270438 -0.912014\nv 0.040307 -0.134942 -0.909352\nv 0.035753 -0.108779 -1.01239\nv 0.04784 -0.0971068 -0.911414\nv 0 -0.159342 -0.92002\nv 0.0137684 -0.172874 -1.02986\nv 0.023028 -0.154358 -0.915201\nv 0.0286558 0.0663989 -1.12307\nv 0.022823 0.19387 -1.29908\nv 0 0.135633 -1.17269\nv 0.0126932 0.114866 -1.15183\nv 0.0578733 -0.113461 -1.10909\nv 0.0769689 -0.160366 -1.25565\nv 0.0588067 -0.0221349 -1.11065\nv 0.0637908 -0.0675919 -1.10717\nv 0.0261424 -0.176212 -1.11252\nv 0.0481225 -0.220168 -1.21301\nv 0.0429943 -0.145581 -1.10505\nv 0 -0.239653 -1.17204\nv 0.0180914 -0.27557 -1.25798\nv 0.0122601 -0.217033 -1.1482\nv 0.0790873 0.19661 -1.37391\nv 0.0674442 0.392885 -1.65972\nv 0 0.371835 -1.55138\nv 0.045723 0.310189 -1.48534\nv 0.0565581 0.0462316 -1.20562\nv 0.0864215 0.089215 -1.4064\nv 0.116987 0.225287 -1.51831\nv 0.09561 0.115474 -1.3296\nv 0.0337351 -0.0153172 -1.48896\nv 0 0.155181 -1.75112\nv 0.0724031 0.268173 -1.75246\nv 0.0522754 0.124254 -1.61766\nv 0 0.447848 -1.88894\nv 0.0791531 0.368408 -1.7576\nv 0.0561148 -0.0548638 -1.25233\nv 0.0476093 -0.203302 -1.50684\nv 0 -0.147708 -1.60982\nv 0.0363069 -0.117808 -1.47699\nv 0.0486806 0.00842863 -1.13887\nv 0 -0.389738 -1.41876\nv 0.0443241 -0.344077 -1.42354\nv 0.0308875 -0.329098 -1.34698\nv 0 -0.361494 -1.61542\nv 0.0508481 -0.290825 -1.48591\nv 0.552548 -0.423353 -0.00165644\nv 0.525189 -0.315443 0.164743\nv 0.400229 -0.3727 0.152951\nv 0.503104 -0.354163 0.133794\nv 0.356116 -0.340815 -0.154481\nv 0.216523 -0.436032 -0.0039601\nv 0 -0.472085 -0.182738\nv 0.196477 -0.433373 -0.169902\nv 0 -0.467045 0.129327\nv 0.215913 -0.43229 0.141399\nv 0.557794 -0.524935 -0.282399\nv 0.662185 -0.653601 -0.519178\nv 0.667793 -0.524578 -0.265547\nv 0.616269 -0.606752 -0.274147\nv 0.612282 -0.376291 -0.536574\nv 0.667 -0.0865711 -0.564161\nv 0.711463 -0.374999 -0.521171\nv 0.678763 -0.395959 -0.616022\nv 0.462778 0.123401 -0.0192716\nv 0.460201 -0.0604436 -0.167262\nv 0.42904 0.131062 -0.180452\nv 0.519844 -0.061392 0.148862\nv 0.471209 0.129881 0.133939\nv 0.598809 -0.253267 -0.0103535\nv 0.536354 -0.213615 0.165216\nv 0.495441 -0.2533 -0.106803\nv 0.437985 -0.21721 -0.161814\nv 0.65107 -0.097695 -0.32785\nv 0.675141 -0.317621 -0.282972\nv 0.585556 -0.0977332 -0.339795\nv 0.552812 -0.318558 -0.309614\nv 0.636614 -0.0089103 -0.421602\nv 0 0.419526 -0.868897\nv 0.0419472 0.478728 -0.7887\nv 0.0346713 0.424165 -0.85665\nv 0 0.594403 -0.671541\nv 0.0289381 0.735368 -0.50793\nv 0.0360395 0.588875 -0.668292\nv 0 0.901129 -0.323284\nv 0.0384101 1.01785 -0.150567\nv 0.0336478 0.892608 -0.320231\nv 0 1.07769 -0.0384892\nv 0.0310937 1.06523 -0.0523842\nv -0.167148 -0.305141 0.715271\nv -0.34796 -0.297318 0.511946\nv -0.208574 -0.412345 0.301751\nv -0.190415 -0.369912 0.513247\nv -0.117873 -0.147917 0.925139\nv -0.250623 -0.193475 0.843459\nv -0.139191 -0.222771 0.84904\nv -0.386267 -0.155621 0.715271\nv -0.465064 -0.0350359 0.514448\nv -0.482817 -0.197561 0.311304\nv -0.437869 -0.178295 0.514338\nv -0.386267 0.0775058 0.715855\nv -0.343571 0.249678 0.527402\nv -0.462576 0.129959 0.303545\nv -0.435489 0.111687 0.515157\nv -0.332913 -0.049563 0.853901\nv -0.222488 -0.00113809 0.925139\nv -0.250623 0.105965 0.844044\nv -0.313397 0.0344231 0.849109\nv -0.222488 -0.11051 0.925139\nv -0.313397 -0.131043 0.84904\nv -0.167148 0.261838 0.729644\nv -0.195658 0.431948 0.365784\nv -0.188537 0.362868 0.556225\nv -0.117873 0.0519363 0.925139\nv -0.139191 0.149775 0.850751\nv -0.11904 -0.0620723 0.981722\nv -0.116249 -0.0159106 0.967391\nv -0.116249 -0.0996045 0.967391\nv -0.266496 0.246238 -0.511117\nv -0.231771 0.101195 -0.643496\nv -0.327544 -0.0293116 -0.510129\nv -0.378225 0.135867 -0.350008\nv -0.310512 0.126816 -0.510806\nv -0.228649 -0.163913 -0.642812\nv -0.244733 -0.315054 -0.509521\nv -0.379282 -0.200918 -0.339129\nv -0.30816 -0.185744 -0.509519\nv -0.158297 -0.0361976 -0.736897\nv -0.0857657 -0.106668 -0.814896\nv -0.120666 -0.210751 -0.732623\nv -0.149978 -0.133431 -0.734747\nv -0.134375 0.131756 -0.749794\nv -0.086191 0.0227038 -0.815903\nv -0.151604 0.0607583 -0.736802\nv -0.099748 -0.33948 -0.642812\nv -0.168655 -0.423296 -0.346478\nv -0.135181 -0.395663 -0.510394\nv -0.0407757 -0.178572 -0.815595\nv -0.0671614 -0.253491 -0.73483\nv -0.0766666 0.599646 0.122394\nv -0.222277 0.446187 -0.0036015\nv -0.366845 0.315704 0.140774\nv -0.18013 0.471399 0.184491\nv -0.107346 0.529623 -0.191512\nv -0.207792 0.373814 -0.354845\nv -0.347443 0.30275 -0.189022\nv -0.219164 0.417972 -0.181967\nv -0.149252 0.362644 -0.536889\nv -0.183793 0.234957 -0.662621\nv -0.20689 0.307443 -0.51397\nv -0.102731 0.242137 -0.845395\nv -0.0497412 0.0877609 -0.839765\nv -0.102077 0.167228 -0.80184\nv -0.0402072 0.996322 -0.0065238\nv -0.0676805 0.765828 -0.0645255\nv -0.0443788 0.803601 0.0578596\nv -0.0554137 0.831721 -0.295723\nv -0.0691318 0.579805 -0.428344\nv -0.0647854 0.688466 -0.240715\nv -0.0708903 0.549128 -0.645345\nv -0.126821 0.360621 -0.737186\nv -0.105867 0.457605 -0.591138\nv -0.055742 0.388366 -0.871735\nv -0.0835812 0.32046 -0.870314\nv -0.0138992 0.0732733 -1.03085\nv -0.0410841 0.0425437 -0.911861\nv -0.0240133 0.0607176 -0.918715\nv -0.0421493 -0.0180423 -1.01288\nv -0.0493405 -0.0479073 -0.914559\nv -0.0484446 0.00270438 -0.912014\nv -0.035753 -0.108779 -1.01239\nv -0.040307 -0.134942 -0.909352\nv -0.04784 -0.0971068 -0.911414\nv -0.0137684 -0.172874 -1.02986\nv -0.023028 -0.154358 -0.915201\nv -0.022823 0.19387 -1.29908\nv -0.0286558 0.0663989 -1.12307\nv -0.0126932 0.114866 -1.15183\nv -0.0565581 0.0462316 -1.20562\nv -0.0561148 -0.0548638 -1.25233\nv -0.0588067 -0.0221349 -1.11065\nv -0.0486806 0.00842863 -1.13887\nv -0.0578733 -0.113461 -1.10909\nv -0.0481225 -0.220168 -1.21301\nv -0.0261424 -0.176212 -1.11252\nv -0.0429943 -0.145581 -1.10505\nv -0.0180914 -0.27557 -1.25798\nv -0.0122601 -0.217033 -1.1482\nv -0.0674442 0.392885 -1.65972\nv -0.0790873 0.19661 -1.37391\nv -0.045723 0.310189 -1.48534\nv -0.116987 0.225287 -1.51831\nv -0.0864215 0.089215 -1.4064\nv -0.09561 0.115474 -1.3296\nv -0.0724031 0.268173 -1.75246\nv -0.0337351 -0.0153172 -1.48896\nv -0.0522754 0.124254 -1.61766\nv -0.0791531 0.368408 -1.7576\nv -0.0476093 -0.203302 -1.50684\nv -0.0363069 -0.117808 -1.47699\nv -0.0769689 -0.160366 -1.25565\nv -0.0637908 -0.0675919 -1.10717\nv -0.0443241 -0.344077 -1.42354\nv -0.0308875 -0.329098 -1.34698\nv -0.0508481 -0.290825 -1.48591\nv -0.400229 -0.3727 0.152951\nv -0.525189 -0.315443 0.164743\nv -0.552548 -0.423353 -0.00165644\nv -0.503104 -0.354163 0.133794\nv -0.216523 -0.436032 -0.0039601\nv -0.356116 -0.340815 -0.154481\nv -0.196477 -0.433373 -0.169902\nv -0.215913 -0.43229 0.141399\nv -0.667793 -0.524578 -0.265547\nv -0.662185 -0.653601 -0.519178\nv -0.557794 -0.524935 -0.282399\nv -0.616269 -0.606752 -0.274147\nv -0.711463 -0.374999 -0.521171\nv -0.667 -0.0865711 -0.564161\nv -0.612282 -0.376291 -0.536574\nv -0.678763 -0.395959 -0.616022\nv -0.460201 -0.0604436 -0.167262\nv -0.462778 0.123401 -0.0192716\nv -0.42904 0.131062 -0.180452\nv -0.519844 -0.061392 0.148862\nv -0.471209 0.129881 0.133939\nv -0.598809 -0.253267 -0.0103535\nv -0.536354 -0.213615 0.165216\nv -0.495441 -0.2533 -0.106803\nv -0.437985 -0.21721 -0.161814\nv -0.65107 -0.097695 -0.32785\nv -0.675141 -0.317621 -0.282972\nv -0.585556 -0.0977332 -0.339795\nv -0.552812 -0.318558 -0.309614\nv -0.636614 -0.0089103 -0.421602\nv -0.0419472 0.478728 -0.7887\nv -0.0346713 0.424165 -0.85665\nv -0.0289381 0.735368 -0.50793\nv -0.0360395 0.588875 -0.668292\nv -0.0384101 1.01785 -0.150567\nv -0.0336478 0.892608 -0.320231\nv -0.0310937 1.06523 -0.0523842\nv 0.105401 -0.43361 0.300937\nv 0.200592 -0.393989 0.403582\nv 0.0970934 -0.388165 0.513513\nv 0 -0.420793 0.403519\nv 0.101702 -0.413843 0.4039\nv 0.307696 -0.380244 0.298586\nv 0.372029 -0.317263 0.399091\nv 0.275924 -0.33978 0.512358\nv 0.293281 -0.362213 0.401134\nv 0.3265 -0.274887 0.619475\nv 0.2413 -0.282441 0.714261\nv 0.179391 -0.340304 0.620205\nv 0.259055 -0.313226 0.619707\nv 0.0854581 -0.318336 0.71628\nv 0 -0.361711 0.620826\nv 0.0916961 -0.356397 0.62064\nv 0.15331 -0.264848 0.791002\nv 0.0713388 -0.228137 0.85242\nv 0 -0.277238 0.793892\nv 0.0784191 -0.27434 0.792979\nv 0.278412 -0.221717 0.78804\nv 0.200083 -0.211918 0.8453\nv 0.221148 -0.247684 0.788989\nv 0.223094 -0.167948 0.882444\nv 0.167553 -0.149425 0.914834\nv 0.126522 -0.182679 0.892589\nv 0.180498 -0.178416 0.886096\nv 0.0607136 -0.146192 0.932405\nv 0 -0.184086 0.899934\nv 0.0651112 -0.184008 0.897815\nv 0.455667 -0.267845 0.304989\nv 0.45994 -0.188726 0.40744\nv 0.40159 -0.242476 0.51299\nv 0.426019 -0.257718 0.403443\nv 0.496326 -0.121356 0.311241\nv 0.483156 -0.036029 0.406957\nv 0.458697 -0.108222 0.514735\nv 0.478499 -0.114104 0.408181\nv 0.441976 -0.0365937 0.620924\nv 0.406126 -0.0991948 0.71628\nv 0.414096 -0.167269 0.620314\nv 0.435156 -0.103392 0.620762\nv 0.352462 -0.206653 0.714261\nv 0.37813 -0.225399 0.619771\nv 0.486909 0.0442324 0.304627\nv 0.451586 0.123116 0.40624\nv 0.457579 0.038761 0.514122\nv 0.474583 0.0435819 0.405629\nv 0.422303 0.214559 0.30752\nv 0.356295 0.275705 0.421594\nv 0.397813 0.18243 0.519075\nv 0.412659 0.201011 0.41087\nv 0.326061 0.218453 0.62899\nv 0.352462 0.132502 0.716306\nv 0.413858 0.096281 0.621344\nv 0.377752 0.1594 0.6237\nv 0.406126 0.0194756 0.716339\nv 0.435044 0.0304866 0.620796\nv 0.352478 0.0561841 0.791245\nv 0.328131 -0.00698769 0.852427\nv 0.375969 -0.0445477 0.793892\nv 0.370214 0.0065349 0.793003\nv 0.278412 0.144178 0.790085\nv 0.288059 0.0728825 0.845544\nv 0.32212 0.102665 0.789841\nv 0.223094 0.0723567 0.882502\nv 0.211974 0.0272307 0.914834\nv 0.269992 0.0145434 0.892596\nv 0.25155 0.0465227 0.88612\nv 0.229584 -0.030028 0.932405\nv 0.284592 -0.0543676 0.899934\nv 0.280928 -0.0196544 0.897816\nv 0.352478 -0.143289 0.791002\nv 0.288059 -0.165851 0.8453\nv 0.32212 -0.186254 0.788989\nv 0.328131 -0.0915783 0.85242\nv 0.370214 -0.0952565 0.792979\nv 0.229584 -0.0852659 0.932405\nv 0.269992 -0.119795 0.892589\nv 0.280928 -0.0882249 0.897815\nv 0.211974 -0.133305 0.914834\nv 0.25155 -0.147415 0.886096\nv 0.286195 0.370382 0.340272\nv 0.194304 0.402629 0.460353\nv 0.27249 0.311562 0.540945\nv 0.281896 0.344974 0.439561\nv 0.099166 0.473274 0.389155\nv 0 0.456538 0.486231\nv 0.096317 0.397848 0.568968\nv 0.0990131 0.441903 0.478341\nv 0 0.355269 0.659559\nv 0.0854581 0.284934 0.734685\nv 0.179203 0.315119 0.647842\nv 0.0916185 0.344422 0.656071\nv 0.2413 0.226876 0.723668\nv 0.258712 0.271683 0.637841\nv 0.15331 0.205609 0.79699\nv 0.200083 0.131529 0.84642\nv 0.221148 0.178969 0.792908\nv 0 0.228784 0.802266\nv 0.0713388 0.161138 0.854611\nv 0.0784191 0.222709 0.800647\nv 0 0.10573 0.900173\nv 0.0607136 0.0534416 0.932405\nv 0.126522 0.0976841 0.89276\nv 0.0651112 0.10361 0.898034\nv 0.167553 0.0504215 0.914834\nv 0.180498 0.0881331 0.886208\nv 0.115229 0.01448 0.949828\nv 0.171051 -0.0108322 0.949828\nv 0.166672 0.0180176 0.935287\nv 0 0.0131321 0.962286\nv 0.0588068 -0.0181561 0.978088\nv 0.0588806 0.0132807 0.959029\nv 0 -0.0432449 0.993412\nv 0.0598901 -0.0625688 0.993412\nv 0.11807 -0.0409459 0.978088\nv 0.0594504 -0.0428033 0.989568\nv 0.176709 -0.0607708 0.962286\nv 0.175037 -0.036951 0.959029\nv 0.11807 -0.0808318 0.978088\nv 0.171051 -0.103948 0.949828\nv 0.175037 -0.0827737 0.959029\nv 0 -0.0790606 0.993412\nv 0.0588068 -0.0968833 0.978088\nv 0.0594504 -0.0795375 0.989568\nv 0 -0.116802 0.962286\nv 0.115229 -0.120975 0.949828\nv 0.0588806 -0.117968 0.959029\nv 0.166672 -0.125483 0.935287\nv 0.35069 0.214801 -0.352569\nv 0.346245 0.133312 -0.432725\nv 0.291262 0.193518 -0.511033\nv 0.290472 0.265761 -0.434142\nv 0.322665 0.206063 -0.433729\nv 0.394751 0.0499894 -0.346785\nv 0.365943 -0.031963 -0.430059\nv 0.323016 0.0509379 -0.510488\nv 0.360806 0.0523551 -0.431408\nv 0.286416 -0.029011 -0.581902\nv 0.240246 0.0376708 -0.643371\nv 0.272022 0.116177 -0.581861\nv 0.282468 0.0459668 -0.581864\nv 0.220094 0.15545 -0.644715\nv 0.239017 0.222922 -0.582951\nv 0.256924 0.176777 -0.582141\nv 0.39591 -0.122001 -0.340859\nv 0.345284 -0.193835 -0.428214\nv 0.322906 -0.109332 -0.509783\nv 0.361148 -0.11505 -0.428941\nv 0.349123 -0.272384 -0.338686\nv 0.275382 -0.327222 -0.428513\nv 0.282403 -0.255376 -0.509408\nv 0.317109 -0.265498 -0.428024\nv 0.212914 -0.297327 -0.581259\nv 0.209168 -0.223138 -0.642322\nv 0.268939 -0.175989 -0.58155\nv 0.246068 -0.241447 -0.58134\nv 0.239934 -0.0986978 -0.643303\nv 0.282172 -0.104122 -0.581775\nv 0.188419 -0.149184 -0.692582\nv 0.156366 -0.0861195 -0.736211\nv 0.200143 -0.0330181 -0.693965\nv 0.197327 -0.0925171 -0.693525\nv 0.14988 -0.243325 -0.691201\nv 0.138341 -0.175764 -0.73329\nv 0.172808 -0.200345 -0.691639\nv 0.0942822 -0.18002 -0.77121\nv 0.0806714 -0.133892 -0.812716\nv 0.115151 -0.118608 -0.773966\nv 0.107163 -0.152559 -0.772055\nv 0.0880298 -0.0755557 -0.817131\nv 0.120321 -0.039471 -0.776814\nv 0.119213 -0.0802256 -0.7759\nv 0.190916 0.0820042 -0.694106\nv 0.144048 0.101185 -0.740454\nv 0.170858 0.164905 -0.703995\nv 0.181548 0.129517 -0.696971\nv 0.156526 0.0138421 -0.736422\nv 0.197576 0.0264611 -0.693678\nv 0.0880463 -0.00881348 -0.81728\nv 0.116077 0.0400116 -0.775668\nv 0.119295 0.00150673 -0.77609\nv 0.0822899 0.0498839 -0.815999\nv 0.102236 0.098455 -0.785189\nv 0.11046 0.0732567 -0.777913\nv 0.24252 -0.385251 -0.342814\nv 0.152484 -0.412371 -0.431276\nv 0.194763 -0.361985 -0.509899\nv 0.21948 -0.376467 -0.429744\nv 0.0864201 -0.44718 -0.349611\nv 0 -0.441823 -0.433156\nv 0.0691923 -0.415964 -0.510825\nv 0.0780911 -0.434351 -0.432588\nv 0 -0.396403 -0.581991\nv 0.0510328 -0.355567 -0.643303\nv 0.117388 -0.371817 -0.581637\nv 0.0600607 -0.390281 -0.581879\nv 0.143828 -0.312218 -0.642322\nv 0.169251 -0.340877 -0.581389\nv 0.0828686 -0.298255 -0.69259\nv 0.0964742 -0.236451 -0.733335\nv 0.119347 -0.275872 -0.691644\nv 0 -0.315297 -0.693977\nv 0.0344342 -0.262924 -0.736321\nv 0.0424254 -0.311166 -0.693536\nv 0 -0.219523 -0.777225\nv 0.0210037 -0.182625 -0.818051\nv 0.0530044 -0.211494 -0.774257\nv 0.0272351 -0.217768 -0.776283\nv 0.0580846 -0.170001 -0.813091\nv 0.075842 -0.19936 -0.772211\nv 0 0.555121 0.209729\nv 0.0854758 0.510213 0.238229\nv 0.11613 0.531313 0.149439\nv 0.0419588 0.609571 0.160922\nv 0.0631311 0.547497 0.194089\nv 0.191723 0.450379 0.276636\nv 0 0.505602 0.320204\nv 0.0958828 0.491168 0.306593\nv 0.36634 0.308939 0.2265\nv 0.28467 0.394746 0.160266\nv 0.285385 0.386698 0.248249\nv 0.296536 0.385477 -0.013714\nv 0.210893 0.457925 0.0852632\nv 0.367985 0.316628 0.0582102\nv 0.291587 0.392514 0.072741\nv 0.0981409 0.58799 0.0623452\nv 0.156978 0.504374 -0.00291675\nv 0.14503 0.517666 0.0797182\nv 0.223653 0.433363 -0.0927896\nv 0.156581 0.469507 -0.18234\nv 0.109451 0.554413 -0.0997597\nv 0.159173 0.488853 -0.0913601\nv 0.359702 0.309263 -0.106007\nv 0.28603 0.365394 -0.185976\nv 0.294185 0.376584 -0.100079\nv 0.331092 0.293702 -0.271855\nv 0.262137 0.332477 -0.353656\nv 0.21261 0.398596 -0.269772\nv 0.274529 0.350995 -0.270727\nv 0.155787 0.413403 -0.360699\nv 0.106854 0.498171 -0.284544\nv 0.153889 0.444852 -0.273054\nv 0.237601 0.281865 -0.51134\nv 0.207344 0.342717 -0.436086\nv 0.250618 0.309172 -0.434085\nv 0.194813 0.21936 -0.653631\nv 0.200887 0.270641 -0.589236\nv 0.22002 0.251585 -0.584746\nv 0.174198 0.252531 -0.675313\nv 0.163256 0.316038 -0.614068\nv 0.176768 0.331634 -0.521613\nv 0.182219 0.289513 -0.598348\nv 0.129618 0.412263 -0.457984\nv 0.16543 0.374421 -0.443075\nv 0.151092 0.202194 -0.734206\nv 0.104476 0.206743 -0.823061\nv 0.141144 0.254062 -0.772777\nv 0.146812 0.22459 -0.753061\nv 0.12241 0.150715 -0.767596\nv 0.160179 0.185977 -0.716636\nv 0.065526 0.0824367 -0.827865\nv 0.0709358 0.120962 -0.820166\nv 0.0906101 0.113603 -0.799462\nv 0 0.121156 -0.854668\nv 0.0494217 0.162015 -0.850997\nv 0.026843 0.0887421 -0.852595\nv 0.0383211 0.121767 -0.843561\nv 0.0539219 0.239591 -0.898355\nv 0 0.20114 -0.893979\nv 0.0539668 0.201276 -0.87408\nv 0.0543922 0.694541 0.0915102\nv 0.0236145 0.811128 0.09096\nv 0 0.705052 0.138925\nv 0.0293212 0.702266 0.126611\nv 0.0800885 0.664297 -0.0356592\nv 0.0596152 0.789183 0.00519197\nv 0.0714932 0.682387 0.0362365\nv 0.0635422 0.863581 -0.0949984\nv 0.0536836 0.976565 -0.0551929\nv 0.0413945 0.909852 0.0242468\nv 0.0558858 0.892527 -0.0266604\nv 0.021465 1.00549 0.0224198\nv 0 0.920281 0.0663996\nv 0.0219564 0.918191 0.0556646\nv 0.0784163 0.605442 -0.212486\nv 0.0679409 0.731871 -0.148293\nv 0.0808404 0.638682 -0.120269\nv 0.0853808 0.516692 -0.398505\nv 0.0634403 0.637236 -0.335996\nv 0.0781514 0.564729 -0.307\nv 0.0595249 0.639997 -0.458617\nv 0.0513069 0.761976 -0.391112\nv 0.0594516 0.767593 -0.270395\nv 0.0565492 0.706162 -0.365908\nv 0.0598444 0.893573 -0.203913\nv 0.0633949 0.821122 -0.178088\nv 0.125895 0.406601 -0.561452\nv 0.0854199 0.518273 -0.51297\nv 0.103663 0.462217 -0.482712\nv 0.146691 0.31608 -0.713932\nv 0.122368 0.40324 -0.665119\nv 0.143197 0.355878 -0.637575\nv 0.105004 0.404911 -0.758777\nv 0.0804434 0.489726 -0.714054\nv 0.087941 0.507749 -0.620813\nv 0.10128 0.450423 -0.692135\nv 0.0595684 0.616671 -0.568782\nv 0.0717637 0.572427 -0.543434\nv 0.0952706 0.280813 -0.861248\nv 0.112762 0.333996 -0.808174\nv 0.12935 0.291982 -0.791623\nv 0 0.278944 -0.931271\nv 0.0443129 0.315837 -0.914418\nv 0.0503326 0.278325 -0.911612\nv 0 0.348406 -0.922831\nv 0.0297661 0.378581 -0.899181\nv 0.0697195 0.357502 -0.873507\nv 0.0370588 0.349973 -0.9094\nv 0.0743222 0.408707 -0.829134\nv 0.0936588 0.374705 -0.821116\nv 0.0344491 0.068218 -0.873149\nv 0.0124838 0.0634216 -0.922945\nv 0 0.0695194 -0.883593\nv 0.0182739 0.0696159 -0.880178\nv 0.0553202 0.0523534 -0.861951\nv 0.0337034 0.0542003 -0.914634\nv 0.046748 0.0631171 -0.866449\nv 0.0328881 0.0379407 -0.967103\nv 0.0214803 0.0592409 -1.02638\nv 0.0175333 0.0630017 -0.97271\nv 0.0257045 0.0532575 -0.9694\nv 0.00684994 0.0811311 -1.03631\nv 0 0.0693318 -0.978373\nv 0.00888025 0.0679732 -0.976478\nv 0.0635302 0.011067 -0.86189\nv 0.0458675 0.024869 -0.91115\nv 0.0606725 0.0344986 -0.860803\nv 0.0648426 -0.0445618 -0.864668\nv 0.0493536 -0.0220738 -0.913648\nv 0.0646584 -0.0159423 -0.863703\nv 0.041708 -0.054403 -0.965341\nv 0.042836 -0.0424851 -1.01351\nv 0.0411355 -0.00566946 -0.963528\nv 0.042084 -0.0299755 -0.964487\nv 0.038834 0.00678625 -1.01561\nv 0.0381429 0.0175151 -0.964367\nv 0.0633707 -0.0993508 -0.861284\nv 0.0490028 -0.0733298 -0.913502\nv 0.0646556 -0.0728862 -0.863555\nv 0.0537345 -0.140669 -0.858367\nv 0.0451692 -0.118043 -0.909597\nv 0.0600448 -0.122448 -0.859129\nv 0.031183 -0.136848 -0.962332\nv 0.0313502 -0.127701 -1.01221\nv 0.038769 -0.100171 -0.962659\nv 0.0357144 -0.120015 -0.961497\nv 0.0392236 -0.08823 -1.01372\nv 0.0406619 -0.0780548 -0.96441\nv 0.0307948 -0.159949 -0.862798\nv 0.0327455 -0.14686 -0.911622\nv 0.0437375 -0.152856 -0.859941\nv 0 -0.164012 -0.866816\nv 0.0118733 -0.158248 -0.918522\nv 0.0158883 -0.163238 -0.865552\nv 0 -0.166998 -0.978042\nv 0.00697216 -0.181279 -1.03702\nv 0.0173833 -0.15945 -0.971368\nv 0.00891564 -0.16511 -0.975999\nv 0.0202128 -0.160367 -1.02152\nv 0.0249551 -0.150027 -0.966147\nv 0.0121764 0.0902089 -1.08974\nv 0.00616477 0.12998 -1.16635\nv 0 0.105169 -1.10311\nv 0.00588829 0.101287 -1.09889\nv 0.0286884 0.0499154 -1.07842\nv 0.0199849 0.0927786 -1.13518\nv 0.0193758 0.0727161 -1.08058\nv 0.0327249 0.0876722 -1.17198\nv 0.0333839 0.156594 -1.26294\nv 0.0160103 0.148768 -1.2205\nv 0.0242279 0.120091 -1.19468\nv 0.0115816 0.221296 -1.32807\nv 0 0.177217 -1.25071\nv 0.00796339 0.169279 -1.24173\nv 0.0513125 -0.0381578 -1.05807\nv 0.0625768 -0.0434132 -1.10696\nv 0.0449458 0.00775057 -1.06906\nv 0.0490429 -0.0139267 -1.05966\nv 0.0483439 -0.0850392 -1.06059\nv 0.0621821 -0.091762 -1.1086\nv 0.0509825 -0.0623557 -1.05933\nv 0.0657944 -0.153596 -1.16657\nv 0.0739712 -0.187605 -1.24936\nv 0.0740449 -0.107669 -1.1699\nv 0.0714817 -0.132794 -1.16929\nv 0.0764086 -0.13023 -1.25833\nv 0.0691895 -0.0579209 -1.16965\nv 0.0733219 -0.0815774 -1.1696\nv 0.03806 -0.123367 -1.05881\nv 0.0511606 -0.13087 -1.10719\nv 0.0438527 -0.10515 -1.05986\nv 0.0247975 -0.158055 -1.0649\nv 0.034394 -0.159822 -1.10556\nv 0.0315285 -0.140664 -1.05971\nv 0.0289079 -0.199027 -1.15744\nv 0.0383382 -0.220149 -1.20056\nv 0.0474799 -0.177258 -1.15508\nv 0.0377263 -0.186187 -1.15189\nv 0.0585021 -0.217421 -1.2268\nv 0.0573276 -0.167569 -1.16105\nv 0.0120911 -0.192453 -1.08926\nv 0.0188428 -0.196523 -1.12853\nv 0.0183236 -0.176085 -1.07593\nv 0 -0.209059 -1.10537\nv 0.00604459 -0.233061 -1.16487\nv 0.00600871 -0.20438 -1.10053\nv 0 -0.274954 -1.23827\nv 0.00925904 -0.302251 -1.28895\nv 0.0142158 -0.245461 -1.20519\nv 0.00711115 -0.266118 -1.22829\nv 0.0259373 -0.244201 -1.22102\nv 0.0213502 -0.220689 -1.17819\nv 0.0334405 0.250637 -1.38948\nv 0.0237758 0.353949 -1.53192\nv 0 0.30067 -1.44262\nv 0.0171491 0.286349 -1.42702\nv 0.0602457 0.153617 -1.29793\nv 0.0642403 0.253628 -1.42737\nv 0.048039 0.203198 -1.34234\nv 0.0932533 0.240353 -1.45128\nv 0.0892314 0.326842 -1.5778\nv 0.0573579 0.361784 -1.57863\nv 0.0779293 0.299545 -1.51033\nv 0.0362008 0.447335 -1.72706\nv 0 0.43271 -1.65836\nv 0.0304248 0.411778 -1.63469\nv 0.0510009 0.0787887 -1.20774\nv 0.0744607 0.0762212 -1.25994\nv 0.0900401 0.149894 -1.33945\nv 0.0693526 0.110459 -1.26793\nv 0.0584366 0.0197693 -1.23017\nv 0.0692201 0.0408073 -1.33827\nv 0.0943595 0.0942404 -1.34915\nv 0.0746657 0.0524256 -1.28094\nv 0.0994924 0.142736 -1.48501\nv 0.113658 0.202116 -1.53316\nv 0.112017 0.164642 -1.41497\nv 0.109287 0.144829 -1.43329\nv 0.110427 0.252333 -1.51259\nv 0.105644 0.196401 -1.42077\nv 0.046855 -0.0104203 -1.38339\nv 0.0412591 0.0510245 -1.54272\nv 0.0722122 0.102071 -1.50507\nv 0.0576794 0.0421209 -1.43443\nv 0.0176171 -0.0164587 -1.57502\nv 0 0.0661306 -1.66909\nv 0.0274283 0.145468 -1.71122\nv 0.0214764 0.0611561 -1.63153\nv 0 0.244344 -1.83384\nv 0.0390686 0.309033 -1.85089\nv 0.0632979 0.198895 -1.69499\nv 0.0337984 0.230221 -1.79185\nv 0.0948772 0.221834 -1.63809\nv 0.0849046 0.164981 -1.58133\nv 0.075201 0.39327 -1.71987\nv 0.042315 0.424552 -1.85053\nv 0 0.474284 -1.83474\nv 0.0402987 0.450396 -1.80108\nv 0.105287 0.29718 -1.63901\nv 0.0996338 0.321865 -1.61678\nv 0.0780221 0.32567 -1.77138\nv 0.102822 0.264238 -1.65112\nv 0 0.396847 -1.91096\nv 0.0419443 0.375631 -1.86938\nv 0.0326656 -0.0706618 -1.47051\nv 0.0191846 -0.139321 -1.57068\nv 0 -0.0866688 -1.59597\nv 0.0171713 -0.0824096 -1.55889\nv 0.0519151 -0.0301939 -1.26176\nv 0.0493044 -0.0880338 -1.36034\nv 0.0448059 -0.0527988 -1.36131\nv 0.0641366 -0.0773111 -1.2532\nv 0.0641706 -0.152999 -1.37882\nv 0.0421308 -0.160705 -1.49392\nv 0.0569071 -0.120107 -1.36975\nv 0.0252533 -0.24158 -1.60837\nv 0 -0.203212 -1.63418\nv 0.0223232 -0.191081 -1.59298\nv 0.048644 0.0246445 -1.16617\nv 0.0552514 -0.0225399 -1.17959\nv 0.0527475 -0.00413087 -1.19761\nv 0.0389517 0.0381198 -1.1222\nv 0.0413774 0.0554725 -1.16005\nv 0.0531875 -0.00587659 -1.12084\nv 0.0409321 0.0236613 -1.09145\nv 0.0620331 -0.0392069 -1.17169\nv 0.0239144 -0.304784 -1.30475\nv 0.0421545 -0.274309 -1.28075\nv 0.0331923 -0.261842 -1.2533\nv 0 -0.35412 -1.36221\nv 0.0162706 -0.372039 -1.39797\nv 0.0124677 -0.339497 -1.34535\nv 0 -0.413567 -1.47252\nv 0.0234734 -0.396977 -1.49502\nv 0.0380539 -0.34407 -1.38645\nv 0.0201247 -0.393398 -1.44764\nv 0.0599292 -0.275701 -1.33125\nv 0.051588 -0.280477 -1.3069\nv 0.0505573 -0.248293 -1.50359\nv 0.0269695 -0.341047 -1.57765\nv 0 -0.311684 -1.64313\nv 0.0268228 -0.293378 -1.60233\nv 0.0685449 -0.225655 -1.36899\nv 0.0681153 -0.18954 -1.37842\nv 0.0486983 -0.324789 -1.45788\nv 0.065727 -0.256118 -1.35258\nv 0 -0.39946 -1.57367\nv 0.0258132 -0.377832 -1.53999\nv 0.507061 -0.41238 -0.00323545\nv 0.524645 -0.372024 0.0877404\nv 0.46491 -0.357056 0.147726\nv 0.412527 -0.377023 0.0866423\nv 0.479582 -0.372689 0.0879622\nv 0.565203 -0.333718 0.0970017\nv 0.514458 -0.340389 0.15258\nv 0.583663 -0.412194 0.00127949\nv 0.551267 -0.360475 0.0930814\nv 0.398829 -0.362789 0.211675\nv 0.47612 -0.31729 0.218873\nv 0.465555 -0.343165 0.189764\nv 0.329657 -0.337795 -0.246045\nv 0.284173 -0.391992 -0.160116\nv 0.183197 -0.429807 -0.258322\nv 0.263412 -0.389518 -0.251394\nv 0.387884 -0.348386 -0.0734579\nv 0.323024 -0.400128 0.00609786\nv 0.208528 -0.435322 -0.0843218\nv 0.306214 -0.395392 -0.07365\nv 0.108788 -0.464341 -0.0155168\nv 0 -0.475511 -0.100185\nv 0.100256 -0.461546 -0.178797\nv 0.105391 -0.464191 -0.0951969\nv 0 -0.46546 -0.266896\nv 0.093866 -0.456032 -0.264299\nv 0.314989 -0.400839 0.149453\nv 0.218035 -0.435493 0.0698575\nv 0.321286 -0.402419 0.0806735\nv 0.213177 -0.424882 0.216194\nv 0.312071 -0.39377 0.218106\nv 0 -0.456659 0.209538\nv 0.10964 -0.456963 0.133191\nv 0.108058 -0.447725 0.211942\nv 0 -0.473239 0.0541796\nv 0.110055 -0.462191 0.0591496\nv 0.584638 -0.51314 -0.129838\nv 0.646234 -0.585277 -0.26847\nv 0.636971 -0.451586 -0.125881\nv 0.616459 -0.49804 -0.126639\nv 0.514914 -0.448624 -0.143169\nv 0.583325 -0.585395 -0.277007\nv 0.545935 -0.496222 -0.133325\nv 0.589722 -0.569453 -0.404822\nv 0.63357 -0.62775 -0.509058\nv 0.642619 -0.66432 -0.409896\nv 0.613202 -0.638065 -0.407606\nv 0.685352 -0.626824 -0.500968\nv 0.68848 -0.567841 -0.3894\nv 0.668972 -0.637104 -0.398997\nv 0.6105 -0.500543 -0.515922\nv 0.646545 -0.391348 -0.59825\nv 0.674176 -0.552875 -0.587697\nv 0.643003 -0.535419 -0.571841\nv 0.616617 -0.243176 -0.531841\nv 0.642464 -0.1083 -0.547927\nv 0.676272 -0.225995 -0.607191\nv 0.647273 -0.235308 -0.589249\nv 0.683788 -0.10806 -0.54155\nv 0.703398 -0.24234 -0.518405\nv 0.702403 -0.390588 -0.589581\nv 0.696644 -0.234789 -0.581607\nv 0.707738 -0.499021 -0.500772\nv 0.697691 -0.534551 -0.563327\nv 0.421231 0.22524 -0.024\nv 0.448672 0.126105 -0.0983997\nv 0.395003 0.223066 -0.186627\nv 0.410627 0.224368 -0.10438\nv 0.497234 0.0130816 -0.0173049\nv 0.491993 -0.0793899 -0.0947487\nv 0.450989 0.0336862 -0.173155\nv 0.476719 0.0211303 -0.0931061\nv 0.431094 -0.0468022 -0.25328\nv 0.405667 0.134791 -0.265071\nv 0.424189 0.0436811 -0.259142\nv 0.37491 0.220189 -0.269751\nv 0.468913 0.131851 0.214153\nv 0.427977 0.226262 0.132847\nv 0.426952 0.222695 0.215834\nv 0.509455 -0.0484891 0.22489\nv 0.500641 0.0317177 0.140101\nv 0.495379 0.0401519 0.218205\nv 0.529683 -0.0797763 0.0675924\nv 0.469759 0.125755 0.0572788\nv 0.502729 0.0202649 0.0624294\nv 0.426522 0.226445 0.0541046\nv 0.508557 -0.204416 0.234493\nv 0.53179 -0.143295 0.157993\nv 0.513811 -0.13049 0.231195\nv 0.53334 -0.272298 0.16824\nv 0.494089 -0.268613 0.231964\nv 0.606145 -0.322964 -0.00147935\nv 0.565511 -0.229648 0.0884027\nv 0.569946 -0.288718 0.095179\nv 0.579402 -0.178457 -0.0239389\nv 0.551618 -0.160909 0.0782513\nv 0.515926 -0.17874 -0.101527\nv 0.466607 -0.231495 -0.105793\nv 0.455837 -0.143815 -0.164486\nv 0.48583 -0.161296 -0.104388\nv 0.472797 -0.321486 -0.0824385\nv 0.406221 -0.282603 -0.156734\nv 0.437143 -0.293835 -0.0915168\nv 0.409544 -0.207902 -0.245579\nv 0.377923 -0.276992 -0.244351\nv 0.426682 -0.131039 -0.248655\nv 0.637998 -0.283987 -0.140558\nv 0.664208 -0.200618 -0.298361\nv 0.60681 -0.104541 -0.199073\nv 0.622518 -0.188305 -0.157983\nv 0.677134 -0.430765 -0.271313\nv 0.643735 -0.376279 -0.13046\nv 0.701325 -0.349425 -0.414851\nv 0.6999 -0.469185 -0.400022\nv 0.678773 -0.115455 -0.435245\nv 0.692207 -0.224061 -0.422088\nv 0.524213 -0.284046 -0.18652\nv 0.548794 -0.431529 -0.295508\nv 0.51244 -0.374742 -0.167685\nv 0.567308 -0.104574 -0.210733\nv 0.565043 -0.201157 -0.319389\nv 0.541512 -0.188649 -0.192095\nv 0.605058 -0.115682 -0.446801\nv 0.581467 -0.35081 -0.434249\nv 0.589632 -0.224837 -0.438542\nv 0.580384 -0.470905 -0.419091\nv 0.642032 -0.0278017 -0.378417\nv 0.613536 -0.0277264 -0.382982\nv 0.605738 -0.0498552 -0.284875\nv 0.651864 -0.0153435 -0.492793\nv 0.666975 -0.0421751 -0.469488\nv 0.628622 -0.0421959 -0.475409\nv 0.043547 0.410269 -0.865753\nv 0.0392496 0.443743 -0.831646\nv 0.0622517 0.466092 -0.78445\nv 0.0565659 0.431498 -0.831525\nv 0 0.398113 -0.89201\nv 0.0199921 0.420946 -0.865388\nv 0.0236299 0.400526 -0.885576\nv 0.0211444 0.482863 -0.791155\nv 0 0.446352 -0.835871\nv 0.0202621 0.446677 -0.834291\nv 0.0403071 0.527902 -0.733813\nv 0.053641 0.575327 -0.660584\nv 0.0602434 0.514848 -0.727257\nv 0 0.532948 -0.737091\nv 0.0181078 0.593821 -0.67116\nv 0.0202125 0.532509 -0.736543\nv 0 0.664892 -0.596022\nv 0.0148555 0.741189 -0.510849\nv 0.0314735 0.658935 -0.592782\nv 0.0159493 0.664236 -0.595697\nv 0.041475 0.719549 -0.499818\nv 0.0461498 0.644553 -0.584686\nv 0.0467131 0.871952 -0.311907\nv 0.037109 0.962144 -0.229843\nv 0.0521111 0.992561 -0.140534\nv 0.0510125 0.938917 -0.220941\nv 0.0301997 0.815073 -0.415127\nv 0.0424536 0.797039 -0.407007\nv 0 0.822497 -0.418353\nv 0.0175799 0.900198 -0.323071\nv 0.0156695 0.821691 -0.418038\nv 0 0.971832 -0.232411\nv 0.0203418 1.02734 -0.152818\nv 0.0194997 0.970737 -0.232486\nv 0.0358437 1.05382 -0.088932\nv 0.0364035 1.04823 -0.0322404\nv 0.0472441 1.02843 -0.0766387\nv 0 1.06567 -0.0879382\nv 0.0184136 1.07561 -0.042742\nv 0.0193969 1.06408 -0.0896716\nv 0 1.05972 -0.000866534\nv 0.0198357 1.0577 -0.00821232\nv -0.0970934 -0.388165 0.513513\nv -0.200592 -0.393989 0.403582\nv -0.105401 -0.43361 0.300937\nv -0.101702 -0.413843 0.4039\nv -0.0854581 -0.318336 0.71628\nv -0.179391 -0.340304 0.620205\nv -0.0916961 -0.356397 0.62064\nv -0.2413 -0.282441 0.714261\nv -0.3265 -0.274887 0.619475\nv -0.275924 -0.33978 0.512358\nv -0.259055 -0.313226 0.619707\nv -0.372029 -0.317263 0.399091\nv -0.307696 -0.380244 0.298586\nv -0.293281 -0.362213 0.401134\nv -0.0713388 -0.228137 0.85242\nv -0.15331 -0.264848 0.791002\nv -0.0784191 -0.27434 0.792979\nv -0.0607136 -0.146192 0.932405\nv -0.126522 -0.182679 0.892589\nv -0.0651112 -0.184008 0.897815\nv -0.167553 -0.149425 0.914834\nv -0.223094 -0.167948 0.882444\nv -0.200083 -0.211918 0.8453\nv -0.180498 -0.178416 0.886096\nv -0.278412 -0.221717 0.78804\nv -0.221148 -0.247684 0.788989\nv -0.40159 -0.242476 0.51299\nv -0.45994 -0.188726 0.40744\nv -0.455667 -0.267845 0.304989\nv -0.426019 -0.257718 0.403443\nv -0.352462 -0.206653 0.714261\nv -0.414096 -0.167269 0.620314\nv -0.37813 -0.225399 0.619771\nv -0.406126 -0.0991948 0.71628\nv -0.441976 -0.0365937 0.620924\nv -0.458697 -0.108222 0.514735\nv -0.435156 -0.103392 0.620762\nv -0.483156 -0.036029 0.406957\nv -0.496326 -0.121356 0.311241\nv -0.478499 -0.114104 0.408181\nv -0.457579 0.038761 0.514122\nv -0.451586 0.123116 0.40624\nv -0.486909 0.0442324 0.304627\nv -0.474583 0.0435819 0.405629\nv -0.406126 0.0194756 0.716339\nv -0.413858 0.096281 0.621344\nv -0.435044 0.0304866 0.620796\nv -0.352462 0.132502 0.716306\nv -0.326061 0.218453 0.62899\nv -0.397813 0.18243 0.519075\nv -0.377752 0.1594 0.6237\nv -0.356295 0.275705 0.421594\nv -0.422303 0.214559 0.30752\nv -0.412659 0.201011 0.41087\nv -0.375969 -0.0445477 0.793892\nv -0.328131 -0.00698769 0.852427\nv -0.352478 0.0561841 0.791245\nv -0.370214 0.0065349 0.793003\nv -0.284592 -0.0543676 0.899934\nv -0.229584 -0.030028 0.932405\nv -0.269992 0.0145434 0.892596\nv -0.280928 -0.0196544 0.897816\nv -0.211974 0.0272307 0.914834\nv -0.223094 0.0723567 0.882502\nv -0.288059 0.0728825 0.845544\nv -0.25155 0.0465227 0.88612\nv -0.278412 0.144178 0.790085\nv -0.32212 0.102665 0.789841\nv -0.288059 -0.165851 0.8453\nv -0.352478 -0.143289 0.791002\nv -0.32212 -0.186254 0.788989\nv -0.211974 -0.133305 0.914834\nv -0.269992 -0.119795 0.892589\nv -0.25155 -0.147415 0.886096\nv -0.229584 -0.0852659 0.932405\nv -0.328131 -0.0915783 0.85242\nv -0.280928 -0.0882249 0.897815\nv -0.370214 -0.0952565 0.792979\nv -0.27249 0.311562 0.540945\nv -0.194304 0.402629 0.460353\nv -0.286195 0.370382 0.340272\nv -0.281896 0.344974 0.439561\nv -0.2413 0.226876 0.723668\nv -0.179203 0.315119 0.647842\nv -0.258712 0.271683 0.637841\nv -0.0854581 0.284934 0.734685\nv -0.096317 0.397848 0.568968\nv -0.0916185 0.344422 0.656071\nv -0.099166 0.473274 0.389155\nv -0.0990131 0.441903 0.478341\nv -0.200083 0.131529 0.84642\nv -0.15331 0.205609 0.79699\nv -0.221148 0.178969 0.792908\nv -0.167553 0.0504215 0.914834\nv -0.126522 0.0976841 0.89276\nv -0.180498 0.0881331 0.886208\nv -0.0607136 0.0534416 0.932405\nv -0.0713388 0.161138 0.854611\nv -0.0651112 0.10361 0.898034\nv -0.0784191 0.222709 0.800647\nv -0.171051 -0.0108322 0.949828\nv -0.115229 0.01448 0.949828\nv -0.166672 0.0180176 0.935287\nv -0.176709 -0.0607708 0.962286\nv -0.11807 -0.0409459 0.978088\nv -0.175037 -0.036951 0.959029\nv -0.0598901 -0.0625688 0.993412\nv -0.0588068 -0.0181561 0.978088\nv -0.0594504 -0.0428033 0.989568\nv -0.0588806 0.0132807 0.959029\nv -0.171051 -0.103948 0.949828\nv -0.11807 -0.0808318 0.978088\nv -0.175037 -0.0827737 0.959029\nv -0.115229 -0.120975 0.949828\nv -0.166672 -0.125483 0.935287\nv -0.0588068 -0.0968833 0.978088\nv -0.0588806 -0.117968 0.959029\nv -0.0594504 -0.0795375 0.989568\nv -0.290472 0.265761 -0.434142\nv -0.291262 0.193518 -0.511033\nv -0.346245 0.133312 -0.432725\nv -0.35069 0.214801 -0.352569\nv -0.322665 0.206063 -0.433729\nv -0.239017 0.222922 -0.582951\nv -0.220094 0.15545 -0.644715\nv -0.272022 0.116177 -0.581861\nv -0.256924 0.176777 -0.582141\nv -0.240246 0.0376708 -0.643371\nv -0.286416 -0.029011 -0.581902\nv -0.323016 0.0509379 -0.510488\nv -0.282468 0.0459668 -0.581864\nv -0.365943 -0.031963 -0.430059\nv -0.394751 0.0499894 -0.346785\nv -0.360806 0.0523551 -0.431408\nv -0.322906 -0.109332 -0.509783\nv -0.345284 -0.193835 -0.428214\nv -0.39591 -0.122001 -0.340859\nv -0.361148 -0.11505 -0.428941\nv -0.239934 -0.0986978 -0.643303\nv -0.268939 -0.175989 -0.58155\nv -0.282172 -0.104122 -0.581775\nv -0.209168 -0.223138 -0.642322\nv -0.212914 -0.297327 -0.581259\nv -0.282403 -0.255376 -0.509408\nv -0.246068 -0.241447 -0.58134\nv -0.275382 -0.327222 -0.428513\nv -0.349123 -0.272384 -0.338686\nv -0.317109 -0.265498 -0.428024\nv -0.200143 -0.0330181 -0.693965\nv -0.156366 -0.0861195 -0.736211\nv -0.188419 -0.149184 -0.692582\nv -0.197327 -0.0925171 -0.693525\nv -0.120321 -0.039471 -0.776814\nv -0.0880298 -0.0755557 -0.817131\nv -0.115151 -0.118608 -0.773966\nv -0.119213 -0.0802256 -0.7759\nv -0.0806714 -0.133892 -0.812716\nv -0.0942822 -0.18002 -0.77121\nv -0.138341 -0.175764 -0.73329\nv -0.107163 -0.152559 -0.772055\nv -0.14988 -0.243325 -0.691201\nv -0.172808 -0.200345 -0.691639\nv -0.170858 0.164905 -0.703995\nv -0.144048 0.101185 -0.740454\nv -0.190916 0.0820042 -0.694106\nv -0.181548 0.129517 -0.696971\nv -0.102236 0.098455 -0.785189\nv -0.0822899 0.0498839 -0.815999\nv -0.116077 0.0400116 -0.775668\nv -0.11046 0.0732567 -0.777913\nv -0.0880463 -0.00881348 -0.81728\nv -0.156526 0.0138421 -0.736422\nv -0.119295 0.00150673 -0.77609\nv -0.197576 0.0264611 -0.693678\nv -0.194763 -0.361985 -0.509899\nv -0.152484 -0.412371 -0.431276\nv -0.24252 -0.385251 -0.342814\nv -0.21948 -0.376467 -0.429744\nv -0.143828 -0.312218 -0.642322\nv -0.117388 -0.371817 -0.581637\nv -0.169251 -0.340877 -0.581389\nv -0.0510328 -0.355567 -0.643303\nv -0.0691923 -0.415964 -0.510825\nv -0.0600607 -0.390281 -0.581879\nv -0.0864201 -0.44718 -0.349611\nv -0.0780911 -0.434351 -0.432588\nv -0.0964742 -0.236451 -0.733335\nv -0.0828686 -0.298255 -0.69259\nv -0.119347 -0.275872 -0.691644\nv -0.0580846 -0.170001 -0.813091\nv -0.0530044 -0.211494 -0.774257\nv -0.075842 -0.19936 -0.772211\nv -0.0210037 -0.182625 -0.818051\nv -0.0344342 -0.262924 -0.736321\nv -0.0272351 -0.217768 -0.776283\nv -0.0424254 -0.311166 -0.693536\nv -0.0419588 0.609571 0.160922\nv -0.11613 0.531313 0.149439\nv -0.0854758 0.510213 0.238229\nv -0.0631311 0.547497 0.194089\nv -0.156978 0.504374 -0.00291675\nv -0.210893 0.457925 0.0852632\nv -0.0981409 0.58799 0.0623452\nv -0.14503 0.517666 0.0797182\nv -0.367985 0.316628 0.0582102\nv -0.28467 0.394746 0.160266\nv -0.296536 0.385477 -0.013714\nv -0.291587 0.392514 0.072741\nv -0.191723 0.450379 0.276636\nv -0.36634 0.308939 0.2265\nv -0.285385 0.386698 0.248249\nv -0.0958828 0.491168 0.306593\nv -0.109451 0.554413 -0.0997597\nv -0.156581 0.469507 -0.18234\nv -0.223653 0.433363 -0.0927896\nv -0.159173 0.488853 -0.0913601\nv -0.106854 0.498171 -0.284544\nv -0.155787 0.413403 -0.360699\nv -0.21261 0.398596 -0.269772\nv -0.153889 0.444852 -0.273054\nv -0.262137 0.332477 -0.353656\nv -0.331092 0.293702 -0.271855\nv -0.28603 0.365394 -0.185976\nv -0.274529 0.350995 -0.270727\nv -0.359702 0.309263 -0.106007\nv -0.294185 0.376584 -0.100079\nv -0.207344 0.342717 -0.436086\nv -0.237601 0.281865 -0.51134\nv -0.250618 0.309172 -0.434085\nv -0.129618 0.412263 -0.457984\nv -0.176768 0.331634 -0.521613\nv -0.16543 0.374421 -0.443075\nv -0.163256 0.316038 -0.614068\nv -0.174198 0.252531 -0.675313\nv -0.200887 0.270641 -0.589236\nv -0.182219 0.289513 -0.598348\nv -0.194813 0.21936 -0.653631\nv -0.22002 0.251585 -0.584746\nv -0.141144 0.254062 -0.772777\nv -0.104476 0.206743 -0.823061\nv -0.151092 0.202194 -0.734206\nv -0.146812 0.22459 -0.753061\nv -0.0494217 0.162015 -0.850997\nv -0.0539219 0.239591 -0.898355\nv -0.0539668 0.201276 -0.87408\nv -0.026843 0.0887421 -0.852595\nv -0.0709358 0.120962 -0.820166\nv -0.0383211 0.121767 -0.843561\nv -0.12241 0.150715 -0.767596\nv -0.065526 0.0824367 -0.827865\nv -0.0906101 0.113603 -0.799462\nv -0.160179 0.185977 -0.716636\nv -0.0236145 0.811128 0.09096\nv -0.0543922 0.694541 0.0915102\nv -0.0293212 0.702266 0.126611\nv -0.021465 1.00549 0.0224198\nv -0.0413945 0.909852 0.0242468\nv -0.0219564 0.918191 0.0556646\nv -0.0536836 0.976565 -0.0551929\nv -0.0635422 0.863581 -0.0949984\nv -0.0596152 0.789183 0.00519197\nv -0.0558858 0.892527 -0.0266604\nv -0.0800885 0.664297 -0.0356592\nv -0.0714932 0.682387 0.0362365\nv -0.0679409 0.731871 -0.148293\nv -0.0784163 0.605442 -0.212486\nv -0.0808404 0.638682 -0.120269\nv -0.0598444 0.893573 -0.203913\nv -0.0594516 0.767593 -0.270395\nv -0.0633949 0.821122 -0.178088\nv -0.0513069 0.761976 -0.391112\nv -0.0595249 0.639997 -0.458617\nv -0.0634403 0.637236 -0.335996\nv -0.0565492 0.706162 -0.365908\nv -0.0853808 0.516692 -0.398505\nv -0.0781514 0.564729 -0.307\nv -0.0854199 0.518273 -0.51297\nv -0.125895 0.406601 -0.561452\nv -0.103663 0.462217 -0.482712\nv -0.0595684 0.616671 -0.568782\nv -0.087941 0.507749 -0.620813\nv -0.0717637 0.572427 -0.543434\nv -0.0804434 0.489726 -0.714054\nv -0.105004 0.404911 -0.758777\nv -0.122368 0.40324 -0.665119\nv -0.10128 0.450423 -0.692135\nv -0.146691 0.31608 -0.713932\nv -0.143197 0.355878 -0.637575\nv -0.112762 0.333996 -0.808174\nv -0.0952706 0.280813 -0.861248\nv -0.12935 0.291982 -0.791623\nv -0.0743222 0.408707 -0.829134\nv -0.0697195 0.357502 -0.873507\nv -0.0936588 0.374705 -0.821116\nv -0.0297661 0.378581 -0.899181\nv -0.0443129 0.315837 -0.914418\nv -0.0370588 0.349973 -0.9094\nv -0.0503326 0.278325 -0.911612\nv -0.0124838 0.0634216 -0.922945\nv -0.0344491 0.068218 -0.873149\nv -0.0182739 0.0696159 -0.880178\nv -0.00684994 0.0811311 -1.03631\nv -0.0175333 0.0630017 -0.97271\nv -0.00888025 0.0679732 -0.976478\nv -0.0214803 0.0592409 -1.02638\nv -0.0328881 0.0379407 -0.967103\nv -0.0337034 0.0542003 -0.914634\nv -0.0257045 0.0532575 -0.9694\nv -0.0553202 0.0523534 -0.861951\nv -0.046748 0.0631171 -0.866449\nv -0.0458675 0.024869 -0.91115\nv -0.0635302 0.011067 -0.86189\nv -0.0606725 0.0344986 -0.860803\nv -0.038834 0.00678625 -1.01561\nv -0.0411355 -0.00566946 -0.963528\nv -0.0381429 0.0175151 -0.964367\nv -0.042836 -0.0424851 -1.01351\nv -0.041708 -0.054403 -0.965341\nv -0.0493536 -0.0220738 -0.913648\nv -0.042084 -0.0299755 -0.964487\nv -0.0648426 -0.0445618 -0.864668\nv -0.0646584 -0.0159423 -0.863703\nv -0.0490028 -0.0733298 -0.913502\nv -0.0633707 -0.0993508 -0.861284\nv -0.0646556 -0.0728862 -0.863555\nv -0.0392236 -0.08823 -1.01372\nv -0.038769 -0.100171 -0.962659\nv -0.0406619 -0.0780548 -0.96441\nv -0.0313502 -0.127701 -1.01221\nv -0.031183 -0.136848 -0.962332\nv -0.0451692 -0.118043 -0.909597\nv -0.0357144 -0.120015 -0.961497\nv -0.0537345 -0.140669 -0.858367\nv -0.0600448 -0.122448 -0.859129\nv -0.0327455 -0.14686 -0.911622\nv -0.0307948 -0.159949 -0.862798\nv -0.0437375 -0.152856 -0.859941\nv -0.0202128 -0.160367 -1.02152\nv -0.0173833 -0.15945 -0.971368\nv -0.0249551 -0.150027 -0.966147\nv -0.00697216 -0.181279 -1.03702\nv -0.0118733 -0.158248 -0.918522\nv -0.00891564 -0.16511 -0.975999\nv -0.0158883 -0.163238 -0.865552\nv -0.00616477 0.12998 -1.16635\nv -0.0121764 0.0902089 -1.08974\nv -0.00588829 0.101287 -1.09889\nv -0.0115816 0.221296 -1.32807\nv -0.0160103 0.148768 -1.2205\nv -0.00796339 0.169279 -1.24173\nv -0.0333839 0.156594 -1.26294\nv -0.0327249 0.0876722 -1.17198\nv -0.0199849 0.0927786 -1.13518\nv -0.0242279 0.120091 -1.19468\nv -0.0286884 0.0499154 -1.07842\nv -0.0193758 0.0727161 -1.08058\nv -0.0389517 0.0381198 -1.1222\nv -0.0531875 -0.00587659 -1.12084\nv -0.0449458 0.00775057 -1.06906\nv -0.0409321 0.0236613 -1.09145\nv -0.0510009 0.0787887 -1.20774\nv -0.048644 0.0246445 -1.16617\nv -0.0413774 0.0554725 -1.16005\nv -0.0584366 0.0197693 -1.23017\nv -0.0519151 -0.0301939 -1.26176\nv -0.0552514 -0.0225399 -1.17959\nv -0.0527475 -0.00413087 -1.19761\nv -0.0641366 -0.0773111 -1.2532\nv -0.0691895 -0.0579209 -1.16965\nv -0.0620331 -0.0392069 -1.17169\nv -0.0483439 -0.0850392 -1.06059\nv -0.0511606 -0.13087 -1.10719\nv -0.03806 -0.123367 -1.05881\nv -0.0438527 -0.10515 -1.05986\nv -0.0657944 -0.153596 -1.16657\nv -0.0585021 -0.217421 -1.2268\nv -0.0474799 -0.177258 -1.15508\nv -0.0573276 -0.167569 -1.16105\nv -0.0383382 -0.220149 -1.20056\nv -0.0289079 -0.199027 -1.15744\nv -0.034394 -0.159822 -1.10556\nv -0.0377263 -0.186187 -1.15189\nv -0.0247975 -0.158055 -1.0649\nv -0.0315285 -0.140664 -1.05971\nv -0.0188428 -0.196523 -1.12853\nv -0.0120911 -0.192453 -1.08926\nv -0.0183236 -0.176085 -1.07593\nv -0.0259373 -0.244201 -1.22102\nv -0.0142158 -0.245461 -1.20519\nv -0.0213502 -0.220689 -1.17819\nv -0.00925904 -0.302251 -1.28895\nv -0.00604459 -0.233061 -1.16487\nv -0.00711115 -0.266118 -1.22829\nv -0.00600871 -0.20438 -1.10053\nv -0.0237758 0.353949 -1.53192\nv -0.0334405 0.250637 -1.38948\nv -0.0171491 0.286349 -1.42702\nv -0.0362008 0.447335 -1.72706\nv -0.0573579 0.361784 -1.57863\nv -0.0304248 0.411778 -1.63469\nv -0.0892314 0.326842 -1.5778\nv -0.0932533 0.240353 -1.45128\nv -0.0642403 0.253628 -1.42737\nv -0.0779293 0.299545 -1.51033\nv -0.0602457 0.153617 -1.29793\nv -0.048039 0.203198 -1.34234\nv -0.0900401 0.149894 -1.33945\nv -0.0744607 0.0762212 -1.25994\nv -0.0693526 0.110459 -1.26793\nv -0.110427 0.252333 -1.51259\nv -0.112017 0.164642 -1.41497\nv -0.105644 0.196401 -1.42077\nv -0.113658 0.202116 -1.53316\nv -0.0994924 0.142736 -1.48501\nv -0.0943595 0.0942404 -1.34915\nv -0.109287 0.144829 -1.43329\nv -0.0692201 0.0408073 -1.33827\nv -0.0746657 0.0524256 -1.28094\nv -0.0722122 0.102071 -1.50507\nv -0.0412591 0.0510245 -1.54272\nv -0.046855 -0.0104203 -1.38339\nv -0.0576794 0.0421209 -1.43443\nv -0.0948772 0.221834 -1.63809\nv -0.0632979 0.198895 -1.69499\nv -0.0849046 0.164981 -1.58133\nv -0.0390686 0.309033 -1.85089\nv -0.0274283 0.145468 -1.71122\nv -0.0337984 0.230221 -1.79185\nv -0.0176171 -0.0164587 -1.57502\nv -0.0214764 0.0611561 -1.63153\nv -0.042315 0.424552 -1.85053\nv -0.075201 0.39327 -1.71987\nv -0.0402987 0.450396 -1.80108\nv -0.0780221 0.32567 -1.77138\nv -0.0419443 0.375631 -1.86938\nv -0.105287 0.29718 -1.63901\nv -0.102822 0.264238 -1.65112\nv -0.0996338 0.321865 -1.61678\nv -0.0191846 -0.139321 -1.57068\nv -0.0326656 -0.0706618 -1.47051\nv -0.0171713 -0.0824096 -1.55889\nv -0.0252533 -0.24158 -1.60837\nv -0.0421308 -0.160705 -1.49392\nv -0.0223232 -0.191081 -1.59298\nv -0.0641706 -0.152999 -1.37882\nv -0.0493044 -0.0880338 -1.36034\nv -0.0569071 -0.120107 -1.36975\nv -0.0448059 -0.0527988 -1.36131\nv -0.0625768 -0.0434132 -1.10696\nv -0.0513125 -0.0381578 -1.05807\nv -0.0490429 -0.0139267 -1.05966\nv -0.0764086 -0.13023 -1.25833\nv -0.0740449 -0.107669 -1.1699\nv -0.0733219 -0.0815774 -1.1696\nv -0.0739712 -0.187605 -1.24936\nv -0.0621821 -0.091762 -1.1086\nv -0.0714817 -0.132794 -1.16929\nv -0.0509825 -0.0623557 -1.05933\nv -0.0421545 -0.274309 -1.28075\nv -0.0239144 -0.304784 -1.30475\nv -0.0331923 -0.261842 -1.2533\nv -0.0599292 -0.275701 -1.33125\nv -0.0380539 -0.34407 -1.38645\nv -0.051588 -0.280477 -1.3069\nv -0.0234734 -0.396977 -1.49502\nv -0.0162706 -0.372039 -1.39797\nv -0.0201247 -0.393398 -1.44764\nv -0.0124677 -0.339497 -1.34535\nv -0.0269695 -0.341047 -1.57765\nv -0.0505573 -0.248293 -1.50359\nv -0.0268228 -0.293378 -1.60233\nv -0.0486983 -0.324789 -1.45788\nv -0.0258132 -0.377832 -1.53999\nv -0.0685449 -0.225655 -1.36899\nv -0.065727 -0.256118 -1.35258\nv -0.0681153 -0.18954 -1.37842\nv -0.412527 -0.377023 0.0866423\nv -0.46491 -0.357056 0.147726\nv -0.524645 -0.372024 0.0877404\nv -0.507061 -0.41238 -0.00323545\nv -0.479582 -0.372689 0.0879622\nv -0.47612 -0.31729 0.218873\nv -0.514458 -0.340389 0.15258\nv -0.398829 -0.362789 0.211675\nv -0.465555 -0.343165 0.189764\nv -0.583663 -0.412194 0.00127949\nv -0.565203 -0.333718 0.0970017\nv -0.551267 -0.360475 0.0930814\nv -0.183197 -0.429807 -0.258322\nv -0.284173 -0.391992 -0.160116\nv -0.329657 -0.337795 -0.246045\nv -0.263412 -0.389518 -0.251394\nv -0.100256 -0.461546 -0.178797\nv -0.093866 -0.456032 -0.264299\nv -0.108788 -0.464341 -0.0155168\nv -0.208528 -0.435322 -0.0843218\nv -0.105391 -0.464191 -0.0951969\nv -0.323024 -0.400128 0.00609786\nv -0.387884 -0.348386 -0.0734579\nv -0.306214 -0.395392 -0.07365\nv -0.218035 -0.435493 0.0698575\nv -0.314989 -0.400839 0.149453\nv -0.321286 -0.402419 0.0806735\nv -0.10964 -0.456963 0.133191\nv -0.110055 -0.462191 0.0591496\nv -0.213177 -0.424882 0.216194\nv -0.108058 -0.447725 0.211942\nv -0.312071 -0.39377 0.218106\nv -0.636971 -0.451586 -0.125881\nv -0.646234 -0.585277 -0.26847\nv -0.584638 -0.51314 -0.129838\nv -0.616459 -0.49804 -0.126639\nv -0.68848 -0.567841 -0.3894\nv -0.685352 -0.626824 -0.500968\nv -0.642619 -0.66432 -0.409896\nv -0.668972 -0.637104 -0.398997\nv -0.63357 -0.62775 -0.509058\nv -0.589722 -0.569453 -0.404822\nv -0.583325 -0.585395 -0.277007\nv -0.613202 -0.638065 -0.407606\nv -0.514914 -0.448624 -0.143169\nv -0.545935 -0.496222 -0.133325\nv -0.674176 -0.552875 -0.587697\nv -0.646545 -0.391348 -0.59825\nv -0.6105 -0.500543 -0.515922\nv -0.643003 -0.535419 -0.571841\nv -0.707738 -0.499021 -0.500772\nv -0.702403 -0.390588 -0.589581\nv -0.697691 -0.534551 -0.563327\nv -0.703398 -0.24234 -0.518405\nv -0.683788 -0.10806 -0.54155\nv -0.676272 -0.225995 -0.607191\nv -0.696644 -0.234789 -0.581607\nv -0.642464 -0.1083 -0.547927\nv -0.616617 -0.243176 -0.531841\nv -0.647273 -0.235308 -0.589249\nv -0.395003 0.223066 -0.186627\nv -0.448672 0.126105 -0.0983997\nv -0.421231 0.22524 -0.024\nv -0.410627 0.224368 -0.10438\nv -0.405667 0.134791 -0.265071\nv -0.37491 0.220189 -0.269751\nv -0.431094 -0.0468022 -0.25328\nv -0.450989 0.0336862 -0.173155\nv -0.424189 0.0436811 -0.259142\nv -0.491993 -0.0793899 -0.0947487\nv -0.497234 0.0130816 -0.0173049\nv -0.476719 0.0211303 -0.0931061\nv -0.427977 0.226262 0.132847\nv -0.468913 0.131851 0.214153\nv -0.426952 0.222695 0.215834\nv -0.469759 0.125755 0.0572788\nv -0.426522 0.226445 0.0541046\nv -0.529683 -0.0797763 0.0675924\nv -0.500641 0.0317177 0.140101\nv -0.502729 0.0202649 0.0624294\nv -0.509455 -0.0484891 0.22489\nv -0.495379 0.0401519 0.218205\nv -0.53179 -0.143295 0.157993\nv -0.508557 -0.204416 0.234493\nv -0.513811 -0.13049 0.231195\nv -0.579402 -0.178457 -0.0239389\nv -0.565511 -0.229648 0.0884027\nv -0.551618 -0.160909 0.0782513\nv -0.606145 -0.322964 -0.00147935\nv -0.53334 -0.272298 0.16824\nv -0.569946 -0.288718 0.095179\nv -0.494089 -0.268613 0.231964\nv -0.455837 -0.143815 -0.164486\nv -0.466607 -0.231495 -0.105793\nv -0.515926 -0.17874 -0.101527\nv -0.48583 -0.161296 -0.104388\nv -0.409544 -0.207902 -0.245579\nv -0.426682 -0.131039 -0.248655\nv -0.406221 -0.282603 -0.156734\nv -0.377923 -0.276992 -0.244351\nv -0.472797 -0.321486 -0.0824385\nv -0.437143 -0.293835 -0.0915168\nv -0.60681 -0.104541 -0.199073\nv -0.664208 -0.200618 -0.298361\nv -0.637998 -0.283987 -0.140558\nv -0.622518 -0.188305 -0.157983\nv -0.678773 -0.115455 -0.435245\nv -0.701325 -0.349425 -0.414851\nv -0.692207 -0.224061 -0.422088\nv -0.677134 -0.430765 -0.271313\nv -0.6999 -0.469185 -0.400022\nv -0.643735 -0.376279 -0.13046\nv -0.548794 -0.431529 -0.295508\nv -0.524213 -0.284046 -0.18652\nv -0.51244 -0.374742 -0.167685\nv -0.581467 -0.35081 -0.434249\nv -0.580384 -0.470905 -0.419091\nv -0.605058 -0.115682 -0.446801\nv -0.565043 -0.201157 -0.319389\nv -0.589632 -0.224837 -0.438542\nv -0.567308 -0.104574 -0.210733\nv -0.541512 -0.188649 -0.192095\nv -0.613536 -0.0277264 -0.382982\nv -0.642032 -0.0278017 -0.378417\nv -0.605738 -0.0498552 -0.284875\nv -0.651864 -0.0153435 -0.492793\nv -0.628622 -0.0421959 -0.475409\nv -0.666975 -0.0421751 -0.469488\nv -0.0622517 0.466092 -0.78445\nv -0.0392496 0.443743 -0.831646\nv -0.043547 0.410269 -0.865753\nv -0.0565659 0.431498 -0.831525\nv -0.0199921 0.420946 -0.865388\nv -0.0211444 0.482863 -0.791155\nv -0.0202621 0.446677 -0.834291\nv -0.0236299 0.400526 -0.885576\nv -0.053641 0.575327 -0.660584\nv -0.0403071 0.527902 -0.733813\nv -0.0602434 0.514848 -0.727257\nv -0.041475 0.719549 -0.499818\nv -0.0314735 0.658935 -0.592782\nv -0.0461498 0.644553 -0.584686\nv -0.0148555 0.741189 -0.510849\nv -0.0181078 0.593821 -0.67116\nv -0.0159493 0.664236 -0.595697\nv -0.0202125 0.532509 -0.736543\nv -0.0521111 0.992561 -0.140534\nv -0.037109 0.962144 -0.229843\nv -0.0467131 0.871952 -0.311907\nv -0.0510125 0.938917 -0.220941\nv -0.0203418 1.02734 -0.152818\nv -0.0175799 0.900198 -0.323071\nv -0.0194997 0.970737 -0.232486\nv -0.0301997 0.815073 -0.415127\nv -0.0156695 0.821691 -0.418038\nv -0.0424536 0.797039 -0.407007\nv -0.0364035 1.04823 -0.0322404\nv -0.0358437 1.05382 -0.088932\nv -0.0472441 1.02843 -0.0766387\nv -0.0184136 1.07561 -0.042742\nv -0.0198357 1.0577 -0.00821232\nv -0.0193969 1.06408 -0.0896716\nv 0.0528396 -0.439391 0.300217\nv 0.103674 -0.424454 0.351015\nv 0.0510265 -0.419014 0.403675\nv 0 -0.431823 0.350343\nv 0.0519863 -0.429916 0.350595\nv 0.157405 -0.42447 0.301586\nv 0.204959 -0.403897 0.351014\nv 0.151674 -0.405446 0.40395\nv 0.154765 -0.415695 0.351267\nv 0.195676 -0.382651 0.458109\nv 0.144461 -0.38053 0.513453\nv 0.0995018 -0.401754 0.458448\nv 0.148213 -0.393724 0.458418\nv 0.0487824 -0.392779 0.513494\nv 0 -0.40831 0.458262\nv 0.0499589 -0.406647 0.458346\nv 0.258628 -0.397607 0.301017\nv 0.30142 -0.371766 0.347728\nv 0.248104 -0.379637 0.402554\nv 0.253959 -0.389316 0.349922\nv 0.355902 -0.360246 0.29366\nv 0.386817 -0.326323 0.342574\nv 0.335193 -0.341537 0.399592\nv 0.346997 -0.351057 0.344172\nv 0.359332 -0.307595 0.455788\nv 0.313997 -0.320126 0.512009\nv 0.284654 -0.351531 0.456523\nv 0.324259 -0.331229 0.455888\nv 0.234483 -0.356352 0.512827\nv 0.241475 -0.368629 0.45737\nv 0.267475 -0.32702 0.567105\nv 0.220487 -0.328155 0.619945\nv 0.185014 -0.355799 0.567653\nv 0.227541 -0.342865 0.567382\nv 0.337146 -0.286429 0.56685\nv 0.294569 -0.295482 0.619536\nv 0.304211 -0.308222 0.566901\nv 0.31563 -0.262647 0.668797\nv 0.274372 -0.267349 0.713925\nv 0.250414 -0.298375 0.669111\nv 0.284734 -0.28187 0.668887\nv 0.205402 -0.295015 0.714732\nv 0.173463 -0.323421 0.669784\nv 0.213161 -0.312209 0.669425\nv 0.0944948 -0.373055 0.567951\nv 0.0460981 -0.360389 0.620774\nv 0 -0.378812 0.568022\nv 0.0474959 -0.377372 0.568008\nv 0.136294 -0.34971 0.620443\nv 0.1405 -0.365863 0.567838\nv 0.127009 -0.312891 0.715809\nv 0.0886872 -0.338165 0.670457\nv 0.131808 -0.332058 0.670143\nv 0.0429646 -0.321546 0.716617\nv 0 -0.342986 0.670771\nv 0.0445881 -0.341792 0.670681\nv 0.0819987 -0.296882 0.756987\nv 0.03943 -0.276547 0.793632\nv 0 -0.300488 0.75766\nv 0.0412265 -0.299612 0.757468\nv 0.160364 -0.285457 0.755545\nv 0.116526 -0.270485 0.79206\nv 0.121863 -0.292198 0.756314\nv 0.146186 -0.243793 0.822035\nv 0.105919 -0.226038 0.850878\nv 0.0748291 -0.251247 0.824656\nv 0.111159 -0.248262 0.823447\nv 0.0358873 -0.229251 0.853486\nv 0 -0.253408 0.825841\nv 0.0376315 -0.252908 0.825506\nv 0.231462 -0.265402 0.754103\nv 0.188331 -0.257295 0.789932\nv 0.197048 -0.276559 0.754776\nv 0.291659 -0.235906 0.75343\nv 0.251321 -0.235872 0.788312\nv 0.26315 -0.251885 0.753622\nv 0.264652 -0.207455 0.817942\nv 0.226858 -0.203782 0.843994\nv 0.210605 -0.229713 0.81927\nv 0.239139 -0.219706 0.818325\nv 0.17072 -0.218156 0.847081\nv 0.179478 -0.237676 0.820575\nv 0.189829 -0.194724 0.867431\nv 0.154684 -0.181088 0.889281\nv 0.132523 -0.202263 0.87241\nv 0.162286 -0.199189 0.869826\nv 0.236572 -0.180133 0.864915\nv 0.203467 -0.174258 0.883554\nv 0.214732 -0.188496 0.865651\nv 0.210782 -0.15744 0.896178\nv 0.187692 -0.149878 0.909411\nv 0.172742 -0.163279 0.901728\nv 0.193767 -0.161478 0.897958\nv 0.144008 -0.148745 0.920204\nv 0.121526 -0.164426 0.910018\nv 0.148422 -0.164169 0.905917\nv 0.0680582 -0.205548 0.876671\nv 0.0327869 -0.184112 0.899357\nv 0 -0.206266 0.878467\nv 0.0342537 -0.206134 0.877971\nv 0.0965104 -0.183591 0.895496\nv 0.100964 -0.20432 0.874754\nv 0.0899596 -0.147018 0.929259\nv 0.0626217 -0.164046 0.916258\nv 0.0927707 -0.16433 0.913524\nv 0.0305789 -0.145582 0.93442\nv 0 -0.163585 0.918694\nv 0.0315432 -0.163742 0.918041\nv 0.435618 -0.300919 0.297505\nv 0.439849 -0.263836 0.351658\nv 0.401976 -0.289043 0.400798\nv 0.417005 -0.296701 0.346252\nv 0.471193 -0.233426 0.309306\nv 0.471119 -0.193416 0.357279\nv 0.44514 -0.224127 0.405761\nv 0.457637 -0.229372 0.35524\nv 0.448962 -0.183637 0.46029\nv 0.42177 -0.211331 0.513721\nv 0.41344 -0.250468 0.457787\nv 0.433314 -0.218007 0.459158\nv 0.377072 -0.271286 0.512336\nv 0.388919 -0.280503 0.456542\nv 0.49116 -0.16015 0.311833\nv 0.487549 -0.11754 0.357874\nv 0.471019 -0.151969 0.40817\nv 0.48105 -0.156072 0.358056\nv 0.498418 -0.0813437 0.309877\nv 0.490731 -0.0377022 0.355843\nv 0.482504 -0.0753751 0.4077\nv 0.490736 -0.078017 0.357035\nv 0.474654 -0.0351695 0.460227\nv 0.463636 -0.0718508 0.514644\nv 0.468955 -0.11101 0.460892\nv 0.473533 -0.0733442 0.460646\nv 0.450143 -0.143814 0.514655\nv 0.460804 -0.147873 0.460821\nv 0.447503 -0.1057 0.56844\nv 0.426447 -0.135872 0.620563\nv 0.426344 -0.172848 0.568089\nv 0.438775 -0.139826 0.568318\nv 0.454225 -0.0355399 0.568415\nv 0.440305 -0.0701817 0.620889\nv 0.452623 -0.0708212 0.568468\nv 0.428157 -0.038109 0.670771\nv 0.411003 -0.0697787 0.716617\nv 0.421436 -0.101241 0.670457\nv 0.426495 -0.0698588 0.670681\nv 0.397905 -0.127918 0.715809\nv 0.400834 -0.161535 0.669784\nv 0.412907 -0.131915 0.670143\nv 0.389946 -0.23413 0.567358\nv 0.354321 -0.251405 0.619569\nv 0.365673 -0.2616 0.567032\nv 0.398023 -0.197233 0.620034\nv 0.410119 -0.204414 0.567739\nv 0.371143 -0.181975 0.714732\nv 0.365762 -0.216251 0.669111\nv 0.385144 -0.189762 0.669425\nv 0.330154 -0.229327 0.713925\nv 0.342615 -0.24066 0.668887\nv 0.493797 0.00167891 0.306228\nv 0.481278 0.0444732 0.353609\nv 0.480579 0.00368844 0.40618\nv 0.487655 0.0032059 0.354603\nv 0.476595 0.08709 0.303621\nv 0.457693 0.127149 0.353556\nv 0.464982 0.0834561 0.405562\nv 0.471367 0.0858655 0.353161\nv 0.444203 0.117937 0.46048\nv 0.448421 0.0754149 0.514374\nv 0.466719 0.0416479 0.459521\nv 0.45736 0.0799448 0.45968\nv 0.463086 0.0018894 0.51421\nv 0.472433 0.00321883 0.459777\nv 0.444572 0.172546 0.304733\nv 0.41813 0.20845 0.358061\nv 0.434208 0.162366 0.407923\nv 0.440024 0.168088 0.35509\nv 0.395488 0.255703 0.31224\nv 0.360742 0.286504 0.369502\nv 0.386751 0.238856 0.41534\nv 0.39178 0.248 0.362766\nv 0.350556 0.263394 0.474546\nv 0.372825 0.216573 0.522592\nv 0.405887 0.192313 0.464893\nv 0.380425 0.228352 0.468953\nv 0.418661 0.147414 0.51666\nv 0.427096 0.15545 0.462143\nv 0.388436 0.171435 0.572362\nv 0.397712 0.128262 0.622226\nv 0.425392 0.104443 0.569151\nv 0.408875 0.138327 0.570384\nv 0.335391 0.234663 0.579202\nv 0.353897 0.189522 0.625908\nv 0.363974 0.203602 0.575248\nv 0.31563 0.201155 0.675808\nv 0.330154 0.158366 0.717197\nv 0.365762 0.146398 0.672032\nv 0.342615 0.174415 0.673561\nv 0.371143 0.105483 0.715901\nv 0.400834 0.0872765 0.670619\nv 0.385144 0.11729 0.671094\nv 0.447056 0.0350107 0.568268\nv 0.44025 -0.00297966 0.620846\nv 0.452403 -0.000207534 0.568294\nv 0.426274 0.0636314 0.620915\nv 0.438086 0.0699494 0.5685\nv 0.397905 0.0487705 0.716043\nv 0.421436 0.0252784 0.67054\nv 0.412907 0.0565441 0.670477\nv 0.411003 -0.0101802 0.716617\nv 0.426495 -0.00633465 0.670681\nv 0.389008 0.0131678 0.757026\nv 0.374549 -0.018935 0.793632\nv 0.395161 -0.0421723 0.75766\nv 0.393641 -0.014424 0.757468\nv 0.370103 0.067045 0.755935\nv 0.362883 0.0316465 0.792157\nv 0.381186 0.0403939 0.75647\nv 0.333531 0.0452134 0.822174\nv 0.32204 0.0139683 0.850906\nv 0.349877 -0.000243515 0.82467\nv 0.343124 0.0227605 0.823503\nv 0.331734 -0.0282348 0.853486\nv 0.355171 -0.0470394 0.825841\nv 0.353867 -0.0235823 0.825506\nv 0.337851 0.117785 0.755466\nv 0.338921 0.0799323 0.790419\nv 0.355682 0.0929119 0.755555\nv 0.291659 0.163715 0.756702\nv 0.301981 0.124156 0.789675\nv 0.316535 0.141456 0.755804\nv 0.264652 0.124762 0.81911\nv 0.270955 0.0902541 0.844383\nv 0.305459 0.0875581 0.819757\nv 0.286714 0.106932 0.819104\nv 0.302138 0.0541666 0.84722\nv 0.32102 0.0668989 0.820853\nv 0.27011 0.0590555 0.867528\nv 0.26182 0.0310238 0.889295\nv 0.292213 0.0241032 0.872438\nv 0.282434 0.0420904 0.869882\nv 0.236572 0.0882871 0.865149\nv 0.238881 0.060528 0.883593\nv 0.254927 0.0745904 0.865807\nv 0.210782 0.0588023 0.896178\nv 0.206277 0.0399883 0.909411\nv 0.232314 0.0357298 0.901728\nv 0.223068 0.0486539 0.897958\nv 0.217504 0.0133337 0.920204\nv 0.246747 0.00603315 0.910018\nv 0.240207 0.0213203 0.905917\nv 0.305107 -0.0135179 0.876674\nv 0.283674 -0.0370317 0.899357\nv 0.309339 -0.0520339 0.878467\nv 0.308289 -0.0327616 0.877971\nv 0.276365 -0.00240602 0.895499\nv 0.29976 0.0055021 0.874766\nv 0.22655 -0.0156201 0.929259\nv 0.255714 -0.0252177 0.916258\nv 0.251935 -0.00952408 0.913524\nv 0.231488 -0.0442777 0.93442\nv 0.258817 -0.0564795 0.918694\nv 0.258027 -0.0409141 0.918041\nv 0.337851 -0.196574 0.754103\nv 0.301981 -0.205076 0.788312\nv 0.316535 -0.217365 0.753622\nv 0.370103 -0.149501 0.755545\nv 0.338921 -0.165557 0.789932\nv 0.355682 -0.173848 0.754776\nv 0.333531 -0.137099 0.822035\nv 0.302138 -0.149182 0.847081\nv 0.305459 -0.175933 0.81927\nv 0.32102 -0.157276 0.820575\nv 0.270955 -0.180723 0.843994\nv 0.286714 -0.192761 0.818325\nv 0.389008 -0.0971972 0.756987\nv 0.362883 -0.119757 0.79206\nv 0.381186 -0.123846 0.756314\nv 0.374549 -0.0700875 0.793632\nv 0.393641 -0.069868 0.757468\nv 0.331734 -0.0707623 0.853486\nv 0.349877 -0.0933809 0.824656\nv 0.353867 -0.0703986 0.825506\nv 0.32204 -0.111757 0.850878\nv 0.343124 -0.115707 0.823447\nv 0.305107 -0.0898567 0.876671\nv 0.276365 -0.104386 0.895496\nv 0.292213 -0.125234 0.87241\nv 0.29976 -0.107962 0.874754\nv 0.283674 -0.071492 0.899357\nv 0.308289 -0.0711397 0.877971\nv 0.231488 -0.0719656 0.93442\nv 0.255714 -0.0866916 0.916258\nv 0.258027 -0.0717803 0.918041\nv 0.22655 -0.098132 0.929259\nv 0.246747 -0.114847 0.910018\nv 0.251935 -0.101089 0.913524\nv 0.27011 -0.156247 0.867431\nv 0.238881 -0.158821 0.883554\nv 0.254927 -0.169263 0.865651\nv 0.26182 -0.134273 0.889281\nv 0.282434 -0.14145 0.869826\nv 0.217504 -0.122347 0.920204\nv 0.232314 -0.139646 0.901728\nv 0.240207 -0.127841 0.905917\nv 0.206277 -0.143046 0.909411\nv 0.223068 -0.149837 0.897958\nv 0.327103 0.334219 0.32882\nv 0.28473 0.358775 0.389243\nv 0.321104 0.311363 0.42989\nv 0.324786 0.323728 0.378567\nv 0.242066 0.403263 0.35284\nv 0.195585 0.418747 0.412558\nv 0.23939 0.375682 0.449938\nv 0.241391 0.390747 0.400813\nv 0.191919 0.3839 0.508473\nv 0.23183 0.338898 0.54863\nv 0.277785 0.329173 0.490403\nv 0.236168 0.358316 0.499462\nv 0.309932 0.281582 0.533694\nv 0.316129 0.297267 0.481897\nv 0.147913 0.455522 0.378359\nv 0.0994412 0.459381 0.433258\nv 0.147356 0.42496 0.470136\nv 0.148132 0.441879 0.42376\nv 0.0497501 0.484494 0.396761\nv 0 0.474448 0.442484\nv 0.0497392 0.452686 0.484022\nv 0.0499267 0.470491 0.439887\nv 0 0.435201 0.530411\nv 0.0484146 0.407465 0.572909\nv 0.0979492 0.421254 0.523785\nv 0.0492233 0.431528 0.528564\nv 0.143195 0.38275 0.563206\nv 0.14568 0.405129 0.516835\nv 0.0941843 0.3721 0.613271\nv 0.136167 0.331807 0.652363\nv 0.184263 0.339838 0.602913\nv 0.139993 0.358188 0.608599\nv 0 0.384105 0.617673\nv 0.0460614 0.352422 0.658594\nv 0.0473487 0.380947 0.616453\nv 0 0.32486 0.699484\nv 0.0429646 0.29115 0.736248\nv 0.0886872 0.315228 0.696749\nv 0.0445881 0.32234 0.698726\nv 0.127009 0.275046 0.732402\nv 0.173463 0.289016 0.690317\nv 0.131808 0.303971 0.693848\nv 0.266101 0.292335 0.590365\nv 0.294162 0.246022 0.63309\nv 0.302585 0.264452 0.584389\nv 0.220222 0.294897 0.64288\nv 0.226479 0.317675 0.596687\nv 0.205402 0.245664 0.726652\nv 0.250414 0.2498 0.682549\nv 0.213161 0.27081 0.686453\nv 0.274372 0.205829 0.720936\nv 0.284734 0.226433 0.678903\nv 0.231462 0.203105 0.760374\nv 0.251321 0.162507 0.791233\nv 0.26315 0.184353 0.758297\nv 0.160364 0.233891 0.765127\nv 0.188331 0.193394 0.794898\nv 0.197048 0.219706 0.762722\nv 0.146186 0.177426 0.825457\nv 0.17072 0.14153 0.8485\nv 0.210605 0.154949 0.82151\nv 0.179478 0.167183 0.823413\nv 0.226858 0.119699 0.844829\nv 0.239139 0.140788 0.819994\nv 0.0819987 0.253953 0.769257\nv 0.116526 0.215443 0.798974\nv 0.121863 0.245395 0.767376\nv 0 0.26117 0.771059\nv 0.03943 0.227219 0.801812\nv 0.0412265 0.259299 0.770555\nv 0 0.196615 0.830626\nv 0.0358873 0.164084 0.855824\nv 0.0748291 0.191629 0.829038\nv 0.0376315 0.195337 0.83018\nv 0.105919 0.15634 0.852854\nv 0.111159 0.185617 0.827398\nv 0.0680582 0.13166 0.877547\nv 0.0965104 0.101086 0.895694\nv 0.132523 0.123092 0.873095\nv 0.100964 0.128038 0.875545\nv 0 0.134656 0.879425\nv 0.0327869 0.105182 0.899591\nv 0.0342537 0.133889 0.878906\nv 0 0.0787515 0.918694\nv 0.0305789 0.0539478 0.93442\nv 0.0626217 0.0773993 0.916258\nv 0.0315432 0.0783918 0.918041\nv 0.0899596 0.0527364 0.929259\nv 0.121526 0.0738625 0.910018\nv 0.0927707 0.0758606 0.913524\nv 0.189829 0.10919 0.867879\nv 0.203467 0.0813259 0.883637\nv 0.214732 0.0997375 0.865985\nv 0.154684 0.0934761 0.889423\nv 0.162286 0.116892 0.870394\nv 0.144008 0.0511453 0.920204\nv 0.172742 0.0685609 0.901728\nv 0.148422 0.0714913 0.905917\nv 0.187692 0.0498232 0.909411\nv 0.193767 0.0648846 0.897958\nv 0.165923 0.0336636 0.92592\nv 0.190101 0.0215793 0.92592\nv 0.187297 0.0355513 0.918459\nv 0.115901 0.0322152 0.938395\nv 0.141662 0.0157874 0.943236\nv 0.141951 0.0326459 0.932614\nv 0.115472 -0.00148885 0.95948\nv 0.144031 -0.0138297 0.95948\nv 0.16862 0.00321359 0.943236\nv 0.142551 0.000364153 0.952161\nv 0.19723 -0.00668079 0.938395\nv 0.193623 0.00741744 0.932614\nv 0.0595108 0.0321495 0.946663\nv 0.0875295 0.0136863 0.955124\nv 0.0882911 0.0320889 0.943121\nv 0 0.0323622 0.949676\nv 0.0295986 0.0131379 0.961448\nv 0.0299504 0.0322797 0.94889\nv 0 -0.00379138 0.97297\nv 0.0294887 -0.0185649 0.980805\nv 0.0586902 -0.003407 0.969505\nv 0.0294644 -0.00372716 0.972088\nv 0.0877836 -0.017312 0.973606\nv 0.087439 -0.0027034 0.965281\nv 0.0590978 -0.0312089 0.984779\nv 0.0889159 -0.042096 0.984779\nv 0.117175 -0.0290045 0.973606\nv 0.0883277 -0.0303714 0.98011\nv 0 -0.0317276 0.988537\nv 0.0297771 -0.0431567 0.992449\nv 0.0296127 -0.0316249 0.987593\nv 0 -0.0534648 0.99634\nv 0.0299913 -0.0626337 0.99634\nv 0.059752 -0.0531773 0.992449\nv 0.029923 -0.0534098 0.995366\nv 0.0896038 -0.0623975 0.988537\nv 0.118752 -0.0519101 0.980805\nv 0.089393 -0.0526999 0.987593\nv 0.173247 -0.0242039 0.955124\nv 0.20266 -0.0339057 0.946663\nv 0.20029 -0.0204619 0.943121\nv 0.146808 -0.0392644 0.969505\nv 0.145512 -0.027 0.965281\nv 0.148106 -0.0615459 0.97297\nv 0.176248 -0.0491235 0.961448\nv 0.147735 -0.0507404 0.972088\nv 0.204757 -0.0596997 0.949676\nv 0.204197 -0.0469917 0.94889\nv 0.176248 -0.0719429 0.961448\nv 0.20266 -0.0839563 0.946663\nv 0.204197 -0.0720092 0.94889\nv 0.118752 -0.0716079 0.980805\nv 0.146808 -0.0817287 0.969505\nv 0.147735 -0.0717985 0.972088\nv 0.117175 -0.090059 0.973606\nv 0.144031 -0.101544 0.95948\nv 0.173247 -0.0933975 0.955124\nv 0.145512 -0.091567 0.965281\nv 0.19723 -0.106907 0.938395\nv 0.20029 -0.0955771 0.943121\nv 0.059752 -0.0712157 0.992449\nv 0.0889159 -0.0800938 0.984779\nv 0.089393 -0.071403 0.987593\nv 0 -0.0710213 0.99634\nv 0.0297771 -0.0791855 0.992449\nv 0.029923 -0.0710778 0.995366\nv 0 -0.087208 0.988537\nv 0.0294887 -0.0961639 0.980805\nv 0.0590978 -0.0879535 0.984779\nv 0.0296127 -0.0873998 0.987593\nv 0.0877836 -0.0980405 0.973606\nv 0.0883277 -0.0888472 0.98011\nv 0.0586902 -0.106746 0.969505\nv 0.0875295 -0.119282 0.955124\nv 0.115472 -0.109783 0.95948\nv 0.087439 -0.108051 0.965281\nv 0 -0.105628 0.97297\nv 0.0295986 -0.117114 0.961448\nv 0.0294644 -0.105921 0.972088\nv 0 -0.129886 0.949676\nv 0.0595108 -0.130975 0.946663\nv 0.0299504 -0.130187 0.94889\nv 0.115901 -0.13356 0.938395\nv 0.0882911 -0.132137 0.943121\nv 0.16862 -0.114561 0.943236\nv 0.190101 -0.128757 0.92592\nv 0.193623 -0.117983 0.932614\nv 0.141662 -0.122966 0.943236\nv 0.142551 -0.11189 0.952161\nv 0.165923 -0.136965 0.92592\nv 0.141951 -0.135131 0.932614\nv 0.187297 -0.13918 0.918459\nv 0.332687 0.250025 -0.353403\nv 0.337128 0.210883 -0.393485\nv 0.30762 0.237846 -0.434027\nv 0.301414 0.274116 -0.394292\nv 0.32053 0.244384 -0.394026\nv 0.365855 0.17653 -0.351411\nv 0.362766 0.135069 -0.391796\nv 0.335557 0.171016 -0.433283\nv 0.351206 0.174237 -0.392724\nv 0.328785 0.130569 -0.472494\nv 0.301653 0.161614 -0.510934\nv 0.307358 0.20029 -0.473009\nv 0.319006 0.166823 -0.472787\nv 0.279492 0.221926 -0.511096\nv 0.278869 0.256471 -0.473159\nv 0.293945 0.230373 -0.47314\nv 0.387843 0.0934676 -0.34844\nv 0.378327 0.0516594 -0.389654\nv 0.354678 0.0935566 -0.432088\nv 0.371806 0.0940024 -0.390755\nv 0.398993 0.00608835 -0.345124\nv 0.383807 -0.0343621 -0.387489\nv 0.364578 0.0103134 -0.43072\nv 0.382327 0.00866357 -0.388548\nv 0.347147 -0.0303051 -0.471016\nv 0.326354 0.0110593 -0.510311\nv 0.342324 0.0521051 -0.471776\nv 0.345877 0.0110934 -0.471391\nv 0.317684 0.0897238 -0.510656\nv 0.336592 0.0921303 -0.472151\nv 0.303019 0.0488823 -0.547274\nv 0.277942 0.0819708 -0.581842\nv 0.29155 0.122027 -0.547362\nv 0.298089 0.0863372 -0.547315\nv 0.307259 -0.0289058 -0.547168\nv 0.28537 0.0087711 -0.581894\nv 0.306141 0.0102666 -0.547228\nv 0.265142 -0.0295503 -0.6141\nv 0.242671 0.00389388 -0.643467\nv 0.261498 0.0422201 -0.613986\nv 0.264169 0.0066283 -0.614057\nv 0.236531 0.0702994 -0.643348\nv 0.252054 0.109242 -0.614006\nv 0.257378 0.0766248 -0.613949\nv 0.274432 0.185696 -0.547508\nv 0.248206 0.201959 -0.582465\nv 0.253248 0.235058 -0.54779\nv 0.26425 0.212468 -0.547627\nv 0.264939 0.147981 -0.58195\nv 0.283598 0.155348 -0.547422\nv 0.22621 0.129773 -0.643919\nv 0.238793 0.166711 -0.614641\nv 0.245777 0.139471 -0.614216\nv 0.213669 0.17764 -0.645988\nv 0.223696 0.209825 -0.616376\nv 0.23135 0.190363 -0.615341\nv 0.399651 -0.0803567 -0.3421\nv 0.379026 -0.118327 -0.385704\nv 0.364852 -0.0738683 -0.42946\nv 0.382766 -0.0767945 -0.386532\nv 0.389187 -0.162269 -0.339854\nv 0.362738 -0.197461 -0.384551\nv 0.354677 -0.155157 -0.42852\nv 0.372409 -0.158651 -0.385034\nv 0.327048 -0.189957 -0.469933\nv 0.316853 -0.148187 -0.509637\nv 0.342401 -0.112082 -0.470368\nv 0.336117 -0.151698 -0.470118\nv 0.326432 -0.0695741 -0.509951\nv 0.346033 -0.0714907 -0.470671\nv 0.365994 -0.237704 -0.338725\nv 0.333519 -0.26931 -0.384255\nv 0.332813 -0.230733 -0.428043\nv 0.349834 -0.23445 -0.384282\nv 0.328469 -0.304715 -0.339052\nv 0.289946 -0.331416 -0.385043\nv 0.298017 -0.297779 -0.428174\nv 0.313616 -0.301735 -0.3845\nv 0.260269 -0.321794 -0.470074\nv 0.265114 -0.286658 -0.509432\nv 0.300026 -0.260878 -0.469804\nv 0.281806 -0.292777 -0.469883\nv 0.296714 -0.221606 -0.50944\nv 0.315062 -0.226477 -0.469824\nv 0.264373 -0.248923 -0.546649\nv 0.258749 -0.209717 -0.581436\nv 0.288747 -0.181116 -0.546787\nv 0.277899 -0.216045 -0.546706\nv 0.228905 -0.306925 -0.546651\nv 0.230817 -0.270782 -0.581276\nv 0.248073 -0.27935 -0.546628\nv 0.196887 -0.286185 -0.613141\nv 0.196187 -0.249581 -0.642158\nv 0.227623 -0.232875 -0.613293\nv 0.213478 -0.260883 -0.613184\nv 0.219967 -0.194459 -0.642551\nv 0.248863 -0.170282 -0.61362\nv 0.239394 -0.202547 -0.613446\nv 0.302789 -0.106708 -0.546986\nv 0.285377 -0.0667739 -0.581858\nv 0.306173 -0.068031 -0.547084\nv 0.276719 -0.140659 -0.581667\nv 0.297012 -0.144537 -0.546884\nv 0.235282 -0.131869 -0.643074\nv 0.261179 -0.101482 -0.613948\nv 0.256101 -0.136466 -0.613795\nv 0.242671 -0.0647673 -0.643467\nv 0.264169 -0.0657151 -0.614057\nv 0.21856 -0.0956796 -0.66964\nv 0.199458 -0.0629545 -0.69384\nv 0.221799 -0.0316244 -0.669967\nv 0.221007 -0.0638428 -0.669873\nv 0.208425 -0.156799 -0.668939\nv 0.193673 -0.121372 -0.693085\nv 0.214389 -0.126782 -0.669313\nv 0.168861 -0.141313 -0.714324\nv 0.153779 -0.11025 -0.735527\nv 0.176506 -0.0893004 -0.715526\nv 0.173386 -0.115805 -0.714965\nv 0.15784 -0.0613369 -0.7367\nv 0.17888 -0.034564 -0.716089\nv 0.178308 -0.0621149 -0.715928\nv 0.190839 -0.212162 -0.668238\nv 0.18149 -0.17562 -0.692079\nv 0.200598 -0.185376 -0.668565\nv 0.165245 -0.258952 -0.667911\nv 0.162297 -0.223025 -0.691326\nv 0.179078 -0.236805 -0.668004\nv 0.13498 -0.227078 -0.71257\nv 0.130307 -0.194324 -0.732809\nv 0.15525 -0.18808 -0.713124\nv 0.145991 -0.208708 -0.712726\nv 0.144865 -0.155368 -0.733969\nv 0.162845 -0.16551 -0.713684\nv 0.122254 -0.163792 -0.752734\nv 0.111708 -0.136266 -0.772942\nv 0.131998 -0.125781 -0.754434\nv 0.127752 -0.145513 -0.753525\nv 0.10706 -0.194885 -0.751968\nv 0.101395 -0.167229 -0.771434\nv 0.115393 -0.180341 -0.752177\nv 0.0824548 -0.166698 -0.790956\nv 0.0767353 -0.145492 -0.812028\nv 0.0932445 -0.14246 -0.791849\nv 0.0884602 -0.155457 -0.791183\nv 0.0836378 -0.120876 -0.813722\nv 0.0996638 -0.112155 -0.793926\nv 0.0969362 -0.127947 -0.792811\nv 0.137179 -0.0830646 -0.756146\nv 0.120076 -0.0600162 -0.77655\nv 0.138682 -0.0378547 -0.756952\nv 0.138335 -0.0606331 -0.75672\nv 0.117612 -0.0998418 -0.774995\nv 0.135104 -0.104873 -0.755346\nv 0.0871861 -0.0914872 -0.816083\nv 0.10274 -0.0776926 -0.796039\nv 0.101556 -0.0953242 -0.795049\nv 0.088428 -0.0590942 -0.817888\nv 0.103502 -0.0409822 -0.797043\nv 0.103346 -0.059499 -0.796751\nv 0.200884 0.142944 -0.672071\nv 0.176282 0.148983 -0.699856\nv 0.189354 0.18072 -0.677111\nv 0.19515 0.163753 -0.674138\nv 0.211295 0.0920121 -0.670034\nv 0.186484 0.10702 -0.695126\nv 0.206338 0.118846 -0.670755\nv 0.170923 0.0714825 -0.7162\nv 0.148123 0.0819932 -0.738068\nv 0.162474 0.11549 -0.719678\nv 0.166971 0.0946256 -0.717431\nv 0.139444 0.117913 -0.744262\nv 0.152321 0.148517 -0.728289\nv 0.157551 0.133609 -0.723208\nv 0.218847 0.0323476 -0.669749\nv 0.194671 0.0549806 -0.693695\nv 0.215537 0.0629948 -0.669751\nv 0.199458 -0.00304234 -0.69384\nv 0.221007 0.000623463 -0.669873\nv 0.157838 -0.0109977 -0.736704\nv 0.176711 0.0202224 -0.715716\nv 0.178308 -0.00696293 -0.715929\nv 0.154426 0.037901 -0.736354\nv 0.174209 0.0465261 -0.715717\nv 0.137298 0.00753115 -0.756355\nv 0.117973 0.0212425 -0.775694\nv 0.133247 0.0501429 -0.756401\nv 0.135598 0.0293747 -0.756143\nv 0.120069 -0.0188472 -0.776562\nv 0.138331 -0.015006 -0.756727\nv 0.0884118 -0.0254661 -0.817918\nv 0.102788 -0.00401389 -0.796206\nv 0.103335 -0.0223808 -0.796771\nv 0.0873334 0.00734081 -0.816528\nv 0.100317 0.0307401 -0.795278\nv 0.101802 0.0137994 -0.795618\nv 0.126656 0.0869249 -0.759561\nv 0.106687 0.0870359 -0.780774\nv 0.117651 0.114822 -0.768307\nv 0.122447 0.102175 -0.763081\nv 0.113581 0.0574659 -0.776309\nv 0.130262 0.0694536 -0.757437\nv 0.0845372 0.0369825 -0.815646\nv 0.0956175 0.0607274 -0.796421\nv 0.0982752 0.0464891 -0.795455\nv 0.0793673 0.061115 -0.817203\nv 0.0882194 0.0833953 -0.8018\nv 0.0922852 0.0731358 -0.798446\nv 0.275006 -0.361358 -0.341173\nv 0.231265 -0.381513 -0.387008\nv 0.249049 -0.353476 -0.429058\nv 0.262331 -0.358049 -0.385914\nv 0.206895 -0.405955 -0.344635\nv 0.160751 -0.418472 -0.38945\nv 0.187138 -0.396123 -0.430505\nv 0.197241 -0.401694 -0.388221\nv 0.143934 -0.404825 -0.471682\nv 0.165973 -0.380488 -0.510143\nv 0.207276 -0.369996 -0.470787\nv 0.176683 -0.389102 -0.471231\nv 0.22115 -0.340168 -0.509685\nv 0.235282 -0.347547 -0.470388\nv 0.128322 -0.437096 -0.348189\nv 0.0823478 -0.441352 -0.391539\nv 0.115981 -0.425138 -0.431992\nv 0.122289 -0.43173 -0.390591\nv 0.0434716 -0.453372 -0.35059\nv 0 -0.449213 -0.392443\nv 0.0392767 -0.439937 -0.432997\nv 0.0414205 -0.447219 -0.392191\nv 0 -0.433086 -0.472786\nv 0.0347964 -0.421058 -0.510961\nv 0.0736919 -0.425961 -0.472452\nv 0.0370615 -0.431294 -0.472692\nv 0.102787 -0.407493 -0.510629\nv 0.10946 -0.417124 -0.472102\nv 0.0646346 -0.404143 -0.547403\nv 0.089237 -0.382601 -0.581767\nv 0.126306 -0.384717 -0.547137\nv 0.0960258 -0.396051 -0.547281\nv 0 -0.410614 -0.547522\nv 0.0302011 -0.394876 -0.581959\nv 0.0325025 -0.408996 -0.547489\nv 0 -0.37989 -0.6141\nv 0.0256613 -0.359532 -0.643467\nv 0.0555127 -0.374162 -0.613948\nv 0.0279136 -0.378466 -0.614057\nv 0.075825 -0.348898 -0.643074\nv 0.108509 -0.356795 -0.61362\nv 0.0824827 -0.366948 -0.613795\nv 0.182051 -0.352317 -0.546846\nv 0.192278 -0.320687 -0.581302\nv 0.206774 -0.331246 -0.546729\nv 0.144174 -0.357915 -0.581506\nv 0.155104 -0.37014 -0.546987\nv 0.122512 -0.327268 -0.642551\nv 0.156473 -0.327549 -0.613293\nv 0.133277 -0.343672 -0.613446\nv 0.163405 -0.294283 -0.642158\nv 0.177781 -0.308397 -0.613184\nv 0.131426 -0.294767 -0.668238\nv 0.135481 -0.260912 -0.691328\nv 0.149272 -0.278251 -0.668004\nv 0.0911854 -0.319704 -0.668939\nv 0.101727 -0.28829 -0.692086\nv 0.111975 -0.308563 -0.668565\nv 0.0748448 -0.275921 -0.714357\nv 0.0823513 -0.245987 -0.734034\nv 0.10767 -0.256208 -0.713142\nv 0.0918322 -0.267187 -0.71371\nv 0.109317 -0.224749 -0.732831\nv 0.122129 -0.242875 -0.712735\nv 0.0466631 -0.33428 -0.66964\nv 0.0630187 -0.305851 -0.693095\nv 0.0693256 -0.328255 -0.669313\nv 0 -0.339009 -0.669967\nv 0.0213366 -0.314286 -0.693851\nv 0.0234653 -0.337843 -0.669873\nv 0 -0.290597 -0.716136\nv 0.0173238 -0.265118 -0.736817\nv 0.0383418 -0.287092 -0.71557\nv 0.0192858 -0.289748 -0.715974\nv 0.0511179 -0.259092 -0.735626\nv 0.0569381 -0.28252 -0.715004\nv 0.0307247 -0.239527 -0.756365\nv 0.0403946 -0.21528 -0.775339\nv 0.0598654 -0.231752 -0.7546\nv 0.0455921 -0.236401 -0.755543\nv 0 -0.241815 -0.757187\nv 0.0137092 -0.219126 -0.776956\nv 0.0154613 -0.241281 -0.756953\nv 0 -0.199824 -0.797701\nv 0.0105788 -0.183411 -0.818864\nv 0.0239874 -0.198512 -0.796652\nv 0.0120781 -0.19954 -0.797402\nv 0.0311206 -0.181072 -0.816908\nv 0.0466254 -0.193505 -0.794392\nv 0.0355594 -0.196559 -0.7956\nv 0.0858384 -0.217276 -0.752824\nv 0.0857034 -0.190674 -0.771513\nv 0.0971419 -0.207146 -0.752222\nv 0.0648813 -0.206244 -0.77317\nv 0.0733469 -0.225428 -0.753655\nv 0.049815 -0.174943 -0.814269\nv 0.0665643 -0.183376 -0.7921\nv 0.0570166 -0.18917 -0.793176\nv 0.0654305 -0.163567 -0.812219\nv 0.0751 -0.175945 -0.79131\nv 0 0.580706 0.191623\nv 0.032119 0.55297 0.20572\nv 0.0517772 0.574901 0.177045\nv 0.0214326 0.612764 0.171028\nv 0.0264835 0.579032 0.187869\nv 0 0.53609 0.230367\nv 0.0424428 0.519349 0.250809\nv 0.0751025 0.526093 0.213735\nv 0.0376639 0.533451 0.226169\nv 0.129689 0.495157 0.217492\nv 0.143295 0.502693 0.164329\nv 0.0919292 0.539682 0.175235\nv 0.112091 0.514578 0.193221\nv 0.0940367 0.562813 0.135922\nv 0.0606722 0.605009 0.144583\nv 0.0746915 0.569198 0.159584\nv 0.0981197 0.483168 0.346652\nv 0.0479374 0.501882 0.316391\nv 0 0.498143 0.358677\nv 0.0491738 0.494246 0.355248\nv 0.194416 0.441923 0.320725\nv 0.143844 0.473905 0.292452\nv 0.14661 0.465523 0.334581\nv 0.187442 0.459019 0.23277\nv 0.0920354 0.499377 0.269816\nv 0.139239 0.482692 0.251996\nv 0 0.512987 0.285336\nv 0.0457805 0.509538 0.281231\nv 0.365565 0.303149 0.271732\nv 0.32805 0.349176 0.236224\nv 0.286199 0.379603 0.293469\nv 0.327982 0.342691 0.281542\nv 0.366618 0.313108 0.183018\nv 0.328258 0.3563 0.149432\nv 0.284396 0.391924 0.204027\nv 0.327933 0.353702 0.192357\nv 0.236604 0.431849 0.172148\nv 0.239423 0.420871 0.261811\nv 0.236697 0.427897 0.217139\nv 0.241311 0.412982 0.306775\nv 0.333011 0.35149 -0.0193341\nv 0.294768 0.389345 0.0294321\nv 0.331389 0.356178 0.0647418\nv 0.367902 0.315544 0.017381\nv 0.33275 0.354216 0.0226969\nv 0.259042 0.416726 -0.00800859\nv 0.218201 0.452081 0.0405712\nv 0.250473 0.426328 0.0804567\nv 0.255928 0.421708 0.0359393\nv 0.199535 0.463955 0.131331\nv 0.287644 0.394628 0.116428\nv 0.242614 0.430517 0.126223\nv 0.367467 0.31678 0.0992565\nv 0.329651 0.356999 0.10694\nv 0.104345 0.581221 0.0259771\nv 0.119073 0.550395 0.0722588\nv 0.152619 0.511164 0.0394776\nv 0.130051 0.536678 -0.00680558\nv 0.126008 0.543831 0.034173\nv 0.0890355 0.594052 0.0947326\nv 0.133348 0.524179 0.116986\nv 0.108623 0.556634 0.106494\nv 0.175691 0.487607 0.084535\nv 0.163382 0.494231 0.126759\nv 0.187988 0.474807 -0.00187647\nv 0.183558 0.48124 0.0416805\nv 0.158967 0.496998 -0.0466461\nv 0.131948 0.519642 -0.0941171\nv 0.109497 0.564612 -0.0557193\nv 0.131824 0.528669 -0.0497193\nv 0.223936 0.440007 -0.0481118\nv 0.190088 0.460581 -0.0910605\nv 0.189985 0.467984 -0.0462077\nv 0.221904 0.426077 -0.137465\nv 0.186763 0.443274 -0.18132\nv 0.158182 0.479751 -0.136708\nv 0.188835 0.452408 -0.136182\nv 0.129735 0.497885 -0.18556\nv 0.108519 0.54279 -0.145205\nv 0.131045 0.509435 -0.139548\nv 0.296239 0.381261 -0.0569125\nv 0.258829 0.405735 -0.0961191\nv 0.259877 0.411451 -0.0520665\nv 0.363938 0.31175 -0.0646427\nv 0.328286 0.344798 -0.103698\nv 0.33145 0.348379 -0.061491\nv 0.354156 0.306287 -0.147495\nv 0.318034 0.335888 -0.187963\nv 0.290679 0.371333 -0.143128\nv 0.323741 0.340663 -0.145881\nv 0.252663 0.392384 -0.183748\nv 0.256293 0.399428 -0.140051\nv 0.280545 0.358652 -0.228537\nv 0.243704 0.375486 -0.269973\nv 0.215907 0.408871 -0.226126\nv 0.248335 0.384452 -0.227094\nv 0.339707 0.298579 -0.230503\nv 0.304016 0.324081 -0.271524\nv 0.311386 0.330389 -0.229869\nv 0.321743 0.288047 -0.312993\nv 0.287993 0.3087 -0.35378\nv 0.268291 0.342308 -0.312462\nv 0.296145 0.31688 -0.312853\nv 0.235111 0.353855 -0.353874\nv 0.209746 0.386969 -0.312735\nv 0.239164 0.365336 -0.312272\nv 0.154954 0.457936 -0.227906\nv 0.128381 0.470103 -0.277526\nv 0.106575 0.51479 -0.23814\nv 0.12864 0.484828 -0.231703\nv 0.182318 0.421367 -0.270635\nv 0.184412 0.432991 -0.226222\nv 0.181058 0.393337 -0.356983\nv 0.153971 0.43007 -0.317435\nv 0.181021 0.408212 -0.314306\nv 0.132854 0.434994 -0.366406\nv 0.108827 0.479645 -0.330184\nv 0.129579 0.453546 -0.322577\nv 0.271272 0.289202 -0.43404\nv 0.256373 0.321389 -0.394225\nv 0.27978 0.299457 -0.39423\nv 0.25243 0.265854 -0.51109\nv 0.244489 0.295954 -0.473151\nv 0.262234 0.277984 -0.473047\nv 0.222318 0.295364 -0.512192\nv 0.207464 0.325437 -0.475402\nv 0.22911 0.326676 -0.434645\nv 0.226082 0.311425 -0.47382\nv 0.207222 0.358953 -0.395931\nv 0.231939 0.340893 -0.394664\nv 0.229588 0.23906 -0.583632\nv 0.229573 0.267033 -0.548566\nv 0.241626 0.252863 -0.548006\nv 0.200866 0.209224 -0.650365\nv 0.208561 0.235652 -0.619796\nv 0.216079 0.224497 -0.617806\nv 0.189096 0.227495 -0.657696\nv 0.194073 0.252493 -0.626117\nv 0.210419 0.261708 -0.586535\nv 0.201205 0.24456 -0.622512\nv 0.204929 0.289067 -0.551885\nv 0.217277 0.278718 -0.549762\nv 0.191528 0.279593 -0.593091\nv 0.180704 0.31021 -0.560079\nv 0.191626 0.319194 -0.517002\nv 0.192718 0.299232 -0.555224\nv 0.178982 0.243072 -0.668465\nv 0.180366 0.2701 -0.636675\nv 0.187227 0.260724 -0.630778\nv 0.168974 0.264027 -0.68325\nv 0.165401 0.295679 -0.652898\nv 0.172836 0.301346 -0.605257\nv 0.173191 0.281469 -0.643988\nv 0.157507 0.338602 -0.575517\nv 0.162563 0.345778 -0.528133\nv 0.168947 0.323001 -0.566744\nv 0.18592 0.3583 -0.438774\nv 0.159922 0.394668 -0.402494\nv 0.182968 0.376551 -0.398413\nv 0.171361 0.353224 -0.482697\nv 0.189083 0.339032 -0.478244\nv 0.13959 0.38744 -0.497829\nv 0.146465 0.392077 -0.449356\nv 0.154723 0.369022 -0.489109\nv 0.120435 0.436389 -0.416997\nv 0.13883 0.414286 -0.40856\nv 0.162766 0.237365 -0.714519\nv 0.14453 0.238325 -0.762905\nv 0.154489 0.264476 -0.732809\nv 0.159146 0.249675 -0.723361\nv 0.169354 0.218362 -0.698838\nv 0.148654 0.212484 -0.74352\nv 0.165964 0.227083 -0.706329\nv 0.129345 0.185938 -0.768161\nv 0.103771 0.188709 -0.811765\nv 0.127078 0.214191 -0.789712\nv 0.127536 0.199003 -0.779188\nv 0.104233 0.22428 -0.834639\nv 0.123621 0.246714 -0.810795\nv 0.125951 0.229889 -0.800469\nv 0.165451 0.176774 -0.709605\nv 0.178392 0.202839 -0.686167\nv 0.183714 0.193291 -0.681147\nv 0.128906 0.142294 -0.757352\nv 0.141056 0.16866 -0.744268\nv 0.146905 0.159749 -0.735189\nv 0.11426 0.158209 -0.781184\nv 0.155163 0.193904 -0.72504\nv 0.134527 0.176606 -0.755889\nv 0.173551 0.210739 -0.692091\nv 0.071168 0.0773944 -0.823128\nv 0.0772557 0.0968129 -0.813063\nv 0.0970829 0.107166 -0.791453\nv 0.0833614 0.0911869 -0.806753\nv 0.0584782 0.0857965 -0.833486\nv 0.0594789 0.102778 -0.828784\nv 0.0822015 0.118201 -0.809113\nv 0.0694467 0.100576 -0.820488\nv 0.0844006 0.141885 -0.81231\nv 0.105628 0.131966 -0.78515\nv 0.0969787 0.138077 -0.797468\nv 0.112281 0.124484 -0.775546\nv 0 0.103329 -0.854353\nv 0.0194786 0.121401 -0.851505\nv 0.0323538 0.10384 -0.845874\nv 0.0136681 0.0885148 -0.857088\nv 0.0165037 0.103565 -0.851885\nv 0 0.140769 -0.859399\nv 0.0246564 0.161283 -0.863583\nv 0.0443595 0.141572 -0.845167\nv 0.0222954 0.140986 -0.85554\nv 0.0744048 0.163653 -0.83119\nv 0.0558912 0.121886 -0.832382\nv 0.0659611 0.142461 -0.829483\nv 0.0390318 0.0886167 -0.846477\nv 0.0468967 0.103722 -0.83771\nv 0.0272805 0.239981 -0.913565\nv 0.0544314 0.220439 -0.886988\nv 0.0271901 0.200978 -0.888648\nv 0 0.220837 -0.907572\nv 0.0275051 0.220528 -0.902034\nv 0.0792852 0.240036 -0.875107\nv 0.079917 0.202818 -0.851701\nv 0.0802003 0.22141 -0.864001\nv 0.0524605 0.181859 -0.861359\nv 0.078521 0.183669 -0.83968\nv 0 0.181255 -0.880204\nv 0.0262642 0.181255 -0.875225\nv 0.0345935 0.652775 0.14404\nv 0.0149263 0.704329 0.13577\nv 0 0.656235 0.156907\nv 0.0176416 0.655292 0.153605\nv 0.0636698 0.644262 0.107473\nv 0.0426536 0.698968 0.111755\nv 0.0501661 0.648995 0.128549\nv 0.0481798 0.748362 0.0748555\nv 0.034531 0.808126 0.076987\nv 0.0257816 0.755799 0.108847\nv 0.0376151 0.752741 0.0944763\nv 0.0119854 0.812786 0.0995372\nv 0 0.758168 0.120731\nv 0.0131023 0.75759 0.117691\nv 0.0825571 0.632648 0.0501658\nv 0.0640056 0.689091 0.0661828\nv 0.0744148 0.638889 0.081151\nv 0.0916572 0.616652 -0.0234619\nv 0.0768544 0.674199 0.00213464\nv 0.0882526 0.625311 0.0151005\nv 0.0723981 0.714628 -0.0495649\nv 0.0646362 0.778756 -0.0276981\nv 0.0641218 0.735226 0.0210732\nv 0.0692744 0.725982 -0.0123288\nv 0.0528015 0.797376 0.0338196\nv 0.0570529 0.742604 0.0502612\nv 0.0571458 0.842278 -0.0108912\nv 0.0493821 0.902479 0.0011097\nv 0.042335 0.858139 0.0408732\nv 0.0504963 0.851352 0.0172913\nv 0.0650303 0.816085 -0.0798878\nv 0.0606807 0.87967 -0.0587882\nv 0.0620637 0.83062 -0.0433818\nv 0.0623106 0.906503 -0.109204\nv 0.0579784 0.961716 -0.0864028\nv 0.0550076 0.93795 -0.0415996\nv 0.059611 0.924003 -0.0733258\nv 0.0477064 0.98797 -0.0284802\nv 0.0409032 0.956621 0.00833092\nv 0.0487038 0.948703 -0.0142919\nv 0.0224595 0.866007 0.0731619\nv 0.0111356 0.919844 0.063683\nv 0 0.868085 0.0843154\nv 0.0113912 0.867634 0.0814782\nv 0.0321476 0.914975 0.0424755\nv 0.0328817 0.862933 0.0595618\nv 0.0313467 1.00201 0.0104174\nv 0.021745 0.965433 0.0386799\nv 0.0318092 0.962063 0.0260024\nv 0.0109027 1.00721 0.02956\nv 0 0.967565 0.0488817\nv 0.0110342 0.967133 0.0463206\nv 0.0927221 0.594629 -0.108716\nv 0.0811949 0.652452 -0.0766817\nv 0.0929269 0.606445 -0.0649382\nv 0.0905311 0.565938 -0.200729\nv 0.0796919 0.623006 -0.165758\nv 0.0917033 0.581146 -0.154184\nv 0.0701261 0.646748 -0.226056\nv 0.0664635 0.711248 -0.193784\nv 0.0728865 0.684965 -0.133701\nv 0.0715802 0.666872 -0.179201\nv 0.0685643 0.750132 -0.104965\nv 0.0733807 0.70092 -0.0902555\nv 0.0903681 0.530111 -0.294603\nv 0.0776805 0.58601 -0.259787\nv 0.0898659 0.548946 -0.24774\nv 0.097517 0.486675 -0.385441\nv 0.0804959 0.541616 -0.353461\nv 0.0926983 0.509373 -0.340708\nv 0.0761219 0.548086 -0.413032\nv 0.0650798 0.609194 -0.382899\nv 0.0694326 0.600834 -0.321032\nv 0.0715222 0.575261 -0.367754\nv 0.0635599 0.663728 -0.28836\nv 0.0691888 0.624699 -0.273566\nv 0.059403 0.672743 -0.351189\nv 0.057568 0.737668 -0.318127\nv 0.0615189 0.729211 -0.255736\nv 0.0599632 0.701812 -0.303452\nv 0.0638022 0.610794 -0.443764\nv 0.057 0.673474 -0.412989\nv 0.0604715 0.642303 -0.398207\nv 0.0556913 0.666363 -0.472225\nv 0.0506779 0.725549 -0.438222\nv 0.0541077 0.736304 -0.37945\nv 0.0539679 0.701594 -0.426557\nv 0.0530592 0.797554 -0.343356\nv 0.0577082 0.802226 -0.283966\nv 0.0555436 0.77001 -0.331667\nv 0.0650836 0.777793 -0.163328\nv 0.0642453 0.843933 -0.135015\nv 0.0658258 0.798375 -0.120117\nv 0.0615954 0.795543 -0.223465\nv 0.0634368 0.754638 -0.208781\nv 0.0578491 0.863915 -0.248985\nv 0.0619551 0.860251 -0.191856\nv 0.0600345 0.832468 -0.237109\nv 0.0608785 0.920134 -0.161278\nv 0.0629029 0.885091 -0.148967\nv 0.115481 0.435977 -0.469324\nv 0.0934731 0.489974 -0.44147\nv 0.105485 0.461958 -0.428191\nv 0.137081 0.383248 -0.548209\nv 0.11484 0.434175 -0.522587\nv 0.126387 0.409488 -0.509208\nv 0.115541 0.431716 -0.575975\nv 0.09563 0.487491 -0.552719\nv 0.0937727 0.489983 -0.497482\nv 0.104679 0.460506 -0.53731\nv 0.0762495 0.549271 -0.471606\nv 0.0838962 0.519418 -0.456165\nv 0.153355 0.334537 -0.625031\nv 0.135717 0.380251 -0.599662\nv 0.146443 0.358012 -0.586694\nv 0.155343 0.295891 -0.702726\nv 0.147225 0.334236 -0.675546\nv 0.156695 0.313578 -0.663586\nv 0.13711 0.337947 -0.725558\nv 0.126607 0.380123 -0.70125\nv 0.132847 0.3791 -0.651128\nv 0.137145 0.356728 -0.688269\nv 0.115117 0.429295 -0.62851\nv 0.125288 0.404339 -0.613805\nv 0.111825 0.427336 -0.678979\nv 0.0953888 0.477888 -0.657145\nv 0.0967178 0.483278 -0.606298\nv 0.105164 0.454138 -0.643161\nv 0.116045 0.383233 -0.748399\nv 0.104768 0.425912 -0.725955\nv 0.115764 0.403493 -0.713981\nv 0.0939195 0.424785 -0.767904\nv 0.0829268 0.464178 -0.745605\nv 0.0907983 0.471541 -0.704017\nv 0.093771 0.446449 -0.736665\nv 0.0762139 0.518189 -0.680653\nv 0.079383 0.530028 -0.634043\nv 0.085752 0.499566 -0.669847\nv 0.0782139 0.546088 -0.528508\nv 0.0647285 0.606129 -0.502041\nv 0.0700284 0.578515 -0.487121\nv 0.0797836 0.539447 -0.582967\nv 0.0874224 0.514136 -0.568157\nv 0.0651245 0.582102 -0.608073\nv 0.0656789 0.596288 -0.55708\nv 0.0724417 0.562434 -0.596492\nv 0.054874 0.652395 -0.527414\nv 0.0598452 0.631096 -0.515695\nv 0.135989 0.272173 -0.782405\nv 0.140485 0.302163 -0.753089\nv 0.14818 0.282232 -0.742819\nv 0.0996581 0.26113 -0.854226\nv 0.114031 0.285033 -0.828141\nv 0.119554 0.265282 -0.820027\nv 0.089826 0.300739 -0.866572\nv 0.0997471 0.325848 -0.840926\nv 0.121513 0.312815 -0.800268\nv 0.107335 0.305408 -0.835114\nv 0.121996 0.345416 -0.773211\nv 0.131668 0.323485 -0.763319\nv 0.0525058 0.258976 -0.906454\nv 0.0738131 0.278818 -0.88955\nv 0.0770857 0.259289 -0.883545\nv 0 0.259819 -0.926922\nv 0.0255035 0.278608 -0.925997\nv 0.0265875 0.259413 -0.921423\nv 0 0.297563 -0.932622\nv 0.0224718 0.31542 -0.926863\nv 0.0475518 0.297368 -0.914157\nv 0.0241058 0.297349 -0.92768\nv 0.064893 0.31732 -0.89519\nv 0.0696785 0.298278 -0.893354\nv 0.0407655 0.333461 -0.912723\nv 0.0542138 0.352757 -0.893894\nv 0.0767933 0.33953 -0.872588\nv 0.0596677 0.335595 -0.895293\nv 0 0.332491 -0.927988\nv 0.0188043 0.34868 -0.91929\nv 0.0206788 0.332602 -0.923936\nv 0 0.363026 -0.916334\nv 0.01512 0.376656 -0.906406\nv 0.0333426 0.365103 -0.904776\nv 0.0169256 0.363437 -0.913316\nv 0.0434647 0.382345 -0.887527\nv 0.0626167 0.37393 -0.873184\nv 0.0487425 0.368456 -0.891228\nv 0.103382 0.354851 -0.815178\nv 0.101143 0.387978 -0.790775\nv 0.111732 0.367175 -0.782463\nv 0.083026 0.364682 -0.84897\nv 0.0915502 0.345792 -0.845552\nv 0.066124 0.39706 -0.852095\nv 0.0838772 0.392882 -0.825823\nv 0.0744566 0.381958 -0.851159\nv 0.0800478 0.423589 -0.80338\nv 0.0904932 0.407043 -0.797847\nv 0.0221743 0.0774254 -0.864213\nv 0.00926811 0.0696138 -0.882606\nv 0 0.0771331 -0.868873\nv 0.0112693 0.077288 -0.867522\nv 0.041434 0.0763382 -0.854706\nv 0.026755 0.0692444 -0.876848\nv 0.0323506 0.0772179 -0.859693\nv 0.0286782 0.0631084 -0.894638\nv 0.0184275 0.0624492 -0.920945\nv 0.0150683 0.0650394 -0.899939\nv 0.0221467 0.0644151 -0.897434\nv 0.00630153 0.0638405 -0.924398\nv 0 0.0652021 -0.902496\nv 0.00762528 0.0652216 -0.901758\nv 0.0553822 0.0713135 -0.845779\nv 0.0410938 0.0662555 -0.86962\nv 0.0490601 0.0744589 -0.849998\nv 0.0647275 0.0601576 -0.839647\nv 0.0514705 0.058563 -0.863829\nv 0.0605536 0.0666352 -0.842259\nv 0.0474456 0.0466041 -0.88612\nv 0.0377075 0.0490944 -0.913025\nv 0.0395472 0.0575214 -0.88952\nv 0.0438711 0.0528315 -0.887523\nv 0.029122 0.0580213 -0.916571\nv 0.0344806 0.0608788 -0.891946\nv 0.0291405 0.0528274 -0.941437\nv 0.0217037 0.0587879 -0.970922\nv 0.020346 0.0607537 -0.944921\nv 0.0249191 0.0573756 -0.943091\nv 0.0362158 0.039806 -0.938884\nv 0.0294798 0.0462959 -0.968238\nv 0.032932 0.0470054 -0.940017\nv 0.0311482 0.0364974 -0.996432\nv 0.0258155 0.049124 -1.02608\nv 0.0232415 0.0553451 -0.997994\nv 0.0272858 0.0466971 -0.997427\nv 0.0175609 0.0671713 -1.02819\nv 0.0154321 0.0672466 -1.00154\nv 0.0193071 0.0621043 -0.999483\nv 0.0104468 0.0644884 -0.948645\nv 0.00445433 0.0690294 -0.977819\nv 0 0.0653781 -0.950478\nv 0.00525763 0.0652 -0.949946\nv 0.0132494 0.0660137 -0.974668\nv 0.0154991 0.0630654 -0.946871\nv 0.0103372 0.0779051 -1.0337\nv 0.007707 0.0736096 -1.00589\nv 0.0115662 0.0710437 -1.00379\nv 0.00341251 0.0830153 -1.03822\nv 0 0.075503 -1.00808\nv 0.00385237 0.0750581 -1.00744\nv 0.0706368 0.0412733 -0.837559\nv 0.0583557 0.0442484 -0.861004\nv 0.0680572 0.0516139 -0.838152\nv 0.0739228 0.0162781 -0.838215\nv 0.0623656 0.0233546 -0.861161\nv 0.0725606 0.029405 -0.837652\nv 0.0550315 0.00667443 -0.886598\nv 0.0474004 0.0142273 -0.911428\nv 0.0524113 0.0291629 -0.885433\nv 0.0539721 0.0184294 -0.885857\nv 0.0437831 0.0343882 -0.911265\nv 0.0502641 0.0386345 -0.885472\nv 0.0753386 -0.0126748 -0.839888\nv 0.0642616 -0.00211374 -0.862803\nv 0.0748173 0.00216178 -0.839033\nv 0.0756377 -0.0434321 -0.840848\nv 0.0648191 -0.0301734 -0.864391\nv 0.0755806 -0.0279625 -0.840565\nv 0.0560893 -0.0459684 -0.889344\nv 0.0494136 -0.0349527 -0.914295\nv 0.0559989 -0.0189605 -0.888399\nv 0.0561044 -0.0324023 -0.889074\nv 0.0490631 -0.00945871 -0.912821\nv 0.0556742 -0.00586187 -0.887509\nv 0.0447156 -0.0256267 -0.939124\nv 0.0418249 -0.0177498 -0.963888\nv 0.0437874 -0.00123921 -0.937811\nv 0.0444364 -0.0132804 -0.938408\nv 0.0445592 -0.0506337 -0.939997\nv 0.0420121 -0.0422315 -0.96506\nv 0.0447237 -0.038128 -0.93973\nv 0.0407499 -0.0594704 -0.990275\nv 0.0424315 -0.0544375 -1.01412\nv 0.0414578 -0.0354762 -0.989395\nv 0.0412556 -0.0475669 -0.989963\nv 0.0427717 -0.0303235 -1.01299\nv 0.0405644 -0.0110995 -0.988704\nv 0.0412597 -0.0232898 -0.988876\nv 0.0410556 0.0212201 -0.937656\nv 0.0357879 0.0282294 -0.965662\nv 0.0389139 0.0311254 -0.938097\nv 0.0399169 0.00615045 -0.963672\nv 0.0426703 0.0103464 -0.93756\nv 0.0408796 -0.00573091 -1.01351\nv 0.0372973 0.013053 -0.990702\nv 0.039275 0.00100339 -0.989183\nv 0.0358836 0.0196847 -1.01991\nv 0.0345368 0.0250835 -0.993654\nv 0.075352 -0.0739048 -0.839743\nv 0.0648274 -0.0588622 -0.864336\nv 0.0756039 -0.0588145 -0.840522\nv 0.0736849 -0.10239 -0.837458\nv 0.0642093 -0.0864452 -0.862485\nv 0.0747547 -0.0884982 -0.838669\nv 0.0547726 -0.09758 -0.886045\nv 0.0485672 -0.0854987 -0.912505\nv 0.0558896 -0.0726458 -0.888248\nv 0.0554976 -0.0854161 -0.887205\nv 0.0492321 -0.0607495 -0.91424\nv 0.0560522 -0.0594398 -0.889015\nv 0.0696186 -0.127248 -0.835251\nv 0.0620218 -0.111414 -0.860112\nv 0.0720153 -0.115375 -0.836266\nv 0.062135 -0.146841 -0.834383\nv 0.0573216 -0.132262 -0.858494\nv 0.0663675 -0.137805 -0.834571\nv 0.0464682 -0.136762 -0.883458\nv 0.0430547 -0.127072 -0.909196\nv 0.0519087 -0.119407 -0.88402\nv 0.0495624 -0.128729 -0.883475\nv 0.0467358 -0.108005 -0.91039\nv 0.0536109 -0.108967 -0.88493\nv 0.0397848 -0.118273 -0.935532\nv 0.0374066 -0.110423 -0.961917\nv 0.0425224 -0.0979607 -0.937061\nv 0.0413499 -0.108499 -0.936162\nv 0.0352216 -0.135031 -0.935745\nv 0.033653 -0.128854 -0.961577\nv 0.0377633 -0.127158 -0.935337\nv 0.028162 -0.140217 -0.98881\nv 0.0288349 -0.13654 -1.01308\nv 0.0329166 -0.123185 -0.987166\nv 0.0306886 -0.132025 -0.987598\nv 0.033661 -0.118445 -1.01205\nv 0.0365294 -0.103767 -0.98788\nv 0.0348592 -0.113748 -0.987323\nv 0.0439439 -0.0750841 -0.938995\nv 0.0412711 -0.0663748 -0.965066\nv 0.0443205 -0.0629937 -0.939696\nv 0.039841 -0.089351 -0.963549\nv 0.0433658 -0.086781 -0.938061\nv 0.0376119 -0.0987055 -1.01302\nv 0.0391055 -0.0823881 -0.989425\nv 0.0379405 -0.0932965 -0.988644\nv 0.0405736 -0.077357 -1.01428\nv 0.0400376 -0.0710951 -0.990033\nv 0.050482 -0.159911 -0.835788\nv 0.0491656 -0.14748 -0.858907\nv 0.0567936 -0.154151 -0.834844\nv 0.0355027 -0.167485 -0.838457\nv 0.0375729 -0.156959 -0.861296\nv 0.0433389 -0.164297 -0.837047\nv 0.0266404 -0.155672 -0.888439\nv 0.0281113 -0.151111 -0.913346\nv 0.0378317 -0.148589 -0.885302\nv 0.0325021 -0.152655 -0.8868\nv 0.0368406 -0.141505 -0.910226\nv 0.0425225 -0.143337 -0.884127\nv 0.0183057 -0.170973 -0.841058\nv 0.0235256 -0.161989 -0.864274\nv 0.0271121 -0.169652 -0.839849\nv 0 -0.171783 -0.842258\nv 0.00800552 -0.163859 -0.866457\nv 0.00922217 -0.171625 -0.841916\nv 0 -0.159973 -0.892769\nv 0.00598158 -0.159094 -0.919597\nv 0.013746 -0.159103 -0.891413\nv 0.00692621 -0.15979 -0.892384\nv 0.0175854 -0.156703 -0.916991\nv 0.0203528 -0.157775 -0.890037\nv 0.010265 -0.160356 -0.946757\nv 0.0132335 -0.162751 -0.973882\nv 0.0199462 -0.155716 -0.942903\nv 0.0152151 -0.158465 -0.944988\nv 0 -0.161792 -0.948476\nv 0.00448582 -0.166526 -0.977469\nv 0.005169 -0.161447 -0.947992\nv 0 -0.174636 -1.00862\nv 0.00349707 -0.183567 -1.03926\nv 0.00781981 -0.17219 -1.00613\nv 0.00392939 -0.174007 -1.00793\nv 0.0104033 -0.177664 -1.03377\nv 0.0153279 -0.165267 -1.00041\nv 0.0116323 -0.169253 -1.00352\nv 0.0284597 -0.147422 -0.938653\nv 0.028265 -0.143906 -0.963939\nv 0.0320961 -0.141767 -0.936923\nv 0.0213092 -0.155208 -0.968706\nv 0.0243854 -0.152053 -0.940719\nv 0.0170456 -0.167058 -1.02566\nv 0.0222125 -0.154424 -0.993853\nv 0.0188676 -0.160301 -0.997092\nv 0.0232481 -0.15295 -1.01781\nv 0.0253236 -0.147706 -0.990994\nv 0.00623196 0.0902711 -1.06718\nv 0.00291915 0.104175 -1.10191\nv 0 0.0934189 -1.07056\nv 0.0030955 0.0926303 -1.06959\nv 0.0127915 0.0808668 -1.06011\nv 0.00895739 0.0966004 -1.09465\nv 0.00945033 0.0863477 -1.06386\nv 0.0121212 0.101481 -1.12017\nv 0.00936079 0.123452 -1.15974\nv 0.00585415 0.114438 -1.13182\nv 0.00891026 0.108892 -1.12647\nv 0.00305966 0.134143 -1.17092\nv 0 0.119149 -1.13703\nv 0.00290127 0.117922 -1.13556\nv 0.0201494 0.0650953 -1.05372\nv 0.0155954 0.0822074 -1.08477\nv 0.0162966 0.0738349 -1.05646\nv 0.0297234 0.0425491 -1.05572\nv 0.0236789 0.0618552 -1.07806\nv 0.024534 0.0544915 -1.0527\nv 0.0282665 0.0577386 -1.10059\nv 0.0241072 0.079956 -1.12813\nv 0.0192862 0.081911 -1.10754\nv 0.0234876 0.0702704 -1.10293\nv 0.0162074 0.104528 -1.14336\nv 0.0155386 0.0924011 -1.11358\nv 0.0215762 0.105417 -1.16407\nv 0.0200912 0.135174 -1.20769\nv 0.0139596 0.130543 -1.18513\nv 0.0176829 0.118701 -1.17458\nv 0.0300548 0.0762768 -1.14671\nv 0.0284344 0.104072 -1.18246\nv 0.025685 0.0911305 -1.15448\nv 0.0369275 0.100885 -1.19937\nv 0.0383028 0.136371 -1.24522\nv 0.0281079 0.137062 -1.22748\nv 0.0325692 0.11906 -1.21254\nv 0.0282098 0.176042 -1.2813\nv 0.0189349 0.169793 -1.25835\nv 0.0235582 0.154203 -1.24311\nv 0.00685536 0.148172 -1.20286\nv 0.00397648 0.175095 -1.24823\nv 0 0.154897 -1.21046\nv 0.00341212 0.15311 -1.20835\nv 0.0119712 0.16032 -1.23217\nv 0.0103608 0.140509 -1.19484\nv 0.0172661 0.209236 -1.31508\nv 0.00952633 0.193565 -1.28334\nv 0.0142527 0.183143 -1.27212\nv 0.00581208 0.229206 -1.33683\nv 0 0.202867 -1.29382\nv 0.00477052 0.200369 -1.29093\nv 0.0430684 -0.00233264 -1.03805\nv 0.0471119 -0.00250356 -1.06297\nv 0.0379721 0.0211541 -1.05062\nv 0.040551 0.0100302 -1.04225\nv 0.0459658 -0.0270111 -1.03559\nv 0.0504744 -0.0259121 -1.05824\nv 0.0448657 -0.0146886 -1.03608\nv 0.057488 -0.0516341 -1.08152\nv 0.063524 -0.0553265 -1.10675\nv 0.0557995 -0.0276189 -1.08213\nv 0.0569467 -0.0394439 -1.08134\nv 0.0609906 -0.032225 -1.10814\nv 0.0520586 -0.00658676 -1.0885\nv 0.0541392 -0.0165397 -1.08435\nv 0.0462175 -0.0513583 -1.03649\nv 0.0514636 -0.0503618 -1.05854\nv 0.0463918 -0.0392737 -1.03584\nv 0.044364 -0.0745209 -1.03765\nv 0.0499242 -0.073971 -1.06012\nv 0.045517 -0.0631467 -1.0372\nv 0.053032 -0.097926 -1.08413\nv 0.0603535 -0.10307 -1.10909\nv 0.0565107 -0.075737 -1.08304\nv 0.0550656 -0.0871865 -1.08378\nv 0.0633356 -0.0798366 -1.10787\nv 0.0573304 -0.063809 -1.08218\nv 0.0673767 -0.110691 -1.13702\nv 0.0731643 -0.120562 -1.16979\nv 0.0695195 -0.0861832 -1.13624\nv 0.0688228 -0.098666 -1.13672\nv 0.0623125 -0.131925 -1.1363\nv 0.069018 -0.143944 -1.16827\nv 0.0652002 -0.121897 -1.13695\nv 0.067764 -0.178755 -1.20073\nv 0.0712164 -0.198806 -1.2449\nv 0.0738841 -0.158341 -1.20641\nv 0.0712193 -0.169489 -1.20395\nv 0.0758992 -0.174614 -1.25294\nv 0.0767378 -0.132309 -1.20931\nv 0.0757323 -0.14579 -1.20817\nv 0.0686132 -0.0613133 -1.13568\nv 0.0716892 -0.0692318 -1.1695\nv 0.0646861 -0.039171 -1.13725\nv 0.0670239 -0.0497062 -1.13607\nv 0.0741022 -0.0945317 -1.16979\nv 0.0694473 -0.0736023 -1.13582\nv 0.0771492 -0.145393 -1.25745\nv 0.076116 -0.104464 -1.21005\nv 0.0768743 -0.118375 -1.20992\nv 0.074716 -0.11541 -1.25827\nv 0.0718098 -0.0786103 -1.20921\nv 0.0744365 -0.0910502 -1.20979\nv 0.0409649 -0.0957265 -1.03698\nv 0.0462964 -0.095392 -1.06041\nv 0.0428326 -0.0853628 -1.03749\nv 0.0363891 -0.115235 -1.03587\nv 0.0410836 -0.114435 -1.05924\nv 0.038803 -0.105666 -1.03636\nv 0.0403877 -0.133405 -1.08171\nv 0.047193 -0.138428 -1.10598\nv 0.0474102 -0.116774 -1.08305\nv 0.0440236 -0.12527 -1.08225\nv 0.0547649 -0.122638 -1.10834\nv 0.0504466 -0.107724 -1.08378\nv 0.0309739 -0.133479 -1.0363\nv 0.0348527 -0.132068 -1.05887\nv 0.0337654 -0.124488 -1.03577\nv 0.0250564 -0.150891 -1.04022\nv 0.0281545 -0.149284 -1.06162\nv 0.0280568 -0.142262 -1.0377\nv 0.0252079 -0.166483 -1.08898\nv 0.0301782 -0.167581 -1.10799\nv 0.032755 -0.149397 -1.0827\nv 0.0289282 -0.157693 -1.085\nv 0.038697 -0.152601 -1.10475\nv 0.0366031 -0.141375 -1.08173\nv 0.0361866 -0.172081 -1.12856\nv 0.0425304 -0.181554 -1.15282\nv 0.0455021 -0.160125 -1.12934\nv 0.0408147 -0.165937 -1.1283\nv 0.027456 -0.187279 -1.13557\nv 0.0331649 -0.191716 -1.15303\nv 0.0317047 -0.179035 -1.13076\nv 0.0302575 -0.2108 -1.17742\nv 0.0341797 -0.220034 -1.19559\nv 0.0386069 -0.202152 -1.17577\nv 0.034216 -0.205283 -1.1745\nv 0.0430523 -0.220307 -1.20647\nv 0.0484971 -0.197199 -1.1828\nv 0.0434182 -0.199621 -1.17873\nv 0.0546271 -0.147711 -1.13297\nv 0.061832 -0.16133 -1.16405\nv 0.0587328 -0.140413 -1.13485\nv 0.052478 -0.172737 -1.15794\nv 0.0501615 -0.154166 -1.13101\nv 0.0533492 -0.219391 -1.21988\nv 0.0587799 -0.190715 -1.1921\nv 0.0536909 -0.194395 -1.18737\nv 0.063351 -0.213703 -1.23347\nv 0.0635442 -0.185666 -1.19667\nv 0.0189367 -0.167607 -1.04891\nv 0.0215245 -0.167104 -1.06986\nv 0.0220146 -0.159421 -1.0441\nv 0.0126933 -0.181977 -1.05954\nv 0.015183 -0.18465 -1.08258\nv 0.0158279 -0.175206 -1.0542\nv 0.0119505 -0.204179 -1.11888\nv 0.0154853 -0.207043 -1.13832\nv 0.0183125 -0.185743 -1.1025\nv 0.0150794 -0.195294 -1.11067\nv 0.0223796 -0.186053 -1.11965\nv 0.021679 -0.175986 -1.09504\nv 0.00636728 -0.192058 -1.06856\nv 0.00903611 -0.199147 -1.09543\nv 0.00953802 -0.187675 -1.06447\nv 0 -0.195905 -1.07245\nv 0.00299975 -0.207801 -1.10402\nv 0.00318622 -0.194882 -1.07137\nv 0 -0.223692 -1.13865\nv 0.00301161 -0.237849 -1.17005\nv 0.00589997 -0.218097 -1.1327\nv 0.00294057 -0.222174 -1.13699\nv 0.00912028 -0.225914 -1.15732\nv 0.00889702 -0.21194 -1.12644\nv 0.00644607 -0.249123 -1.19681\nv 0.0106647 -0.25678 -1.21781\nv 0.0130083 -0.230891 -1.17707\nv 0.0097054 -0.24093 -1.18786\nv 0 -0.256791 -1.20533\nv 0.00355598 -0.272502 -1.23549\nv 0.00321578 -0.254675 -1.20296\nv 0 -0.293993 -1.27063\nv 0.00465619 -0.310553 -1.29851\nv 0.00804657 -0.283883 -1.25908\nv 0.00403515 -0.291178 -1.26742\nv 0.0137552 -0.290155 -1.27496\nv 0.0159033 -0.260451 -1.23226\nv 0.0120105 -0.273257 -1.24693\nv 0.0198538 -0.208367 -1.15393\nv 0.0250173 -0.209002 -1.16632\nv 0.0235275 -0.197291 -1.14364\nv 0.0177637 -0.233137 -1.19156\nv 0.0163692 -0.219802 -1.16542\nv 0.0222142 -0.259801 -1.23946\nv 0.023337 -0.232907 -1.20079\nv 0.0197012 -0.246614 -1.21638\nv 0.0290741 -0.23012 -1.20425\nv 0.0267434 -0.220488 -1.18699\nv 0.0141667 0.252735 -1.3763\nv 0.00862818 0.296788 -1.43833\nv 0 0.265263 -1.3901\nv 0.00711894 0.261877 -1.3863\nv 0.0277644 0.221253 -1.34312\nv 0.0254557 0.270562 -1.41023\nv 0.0210723 0.238855 -1.36145\nv 0.0395329 0.280718 -1.43721\nv 0.0350922 0.334478 -1.51104\nv 0.0203963 0.320599 -1.47923\nv 0.0302008 0.302916 -1.46042\nv 0.0120022 0.366951 -1.54602\nv 0 0.336732 -1.49672\nv 0.0102769 0.332344 -1.49191\nv 0.0402239 0.178951 -1.3015\nv 0.0409965 0.227784 -1.36634\nv 0.034172 0.200946 -1.32268\nv 0.0509761 0.133962 -1.26241\nv 0.0544836 0.178077 -1.31902\nv 0.0458489 0.156284 -1.28096\nv 0.0698954 0.17467 -1.3353\nv 0.0721234 0.224413 -1.39908\nv 0.0562407 0.228402 -1.38457\nv 0.0634831 0.201027 -1.35864\nv 0.0554396 0.282729 -1.45678\nv 0.0482351 0.255422 -1.41135\nv 0.0714489 0.277944 -1.46986\nv 0.0684238 0.331221 -1.5447\nv 0.0516924 0.337745 -1.53289\nv 0.0621617 0.308573 -1.50172\nv 0.0869837 0.21893 -1.41316\nv 0.0860594 0.268638 -1.4782\nv 0.0796807 0.247512 -1.43958\nv 0.0975647 0.259607 -1.4865\nv 0.0960039 0.296056 -1.54004\nv 0.0837438 0.316626 -1.54705\nv 0.0911638 0.286103 -1.51303\nv 0.0796578 0.360007 -1.61888\nv 0.0626362 0.380698 -1.62132\nv 0.0742484 0.348943 -1.58424\nv 0.0271549 0.384864 -1.58408\nv 0.0154306 0.426943 -1.65182\nv 0 0.404366 -1.6056\nv 0.013741 0.399016 -1.59966\nv 0.044546 0.389347 -1.60946\nv 0.0399144 0.363808 -1.56109\nv 0.052752 0.422811 -1.69677\nv 0.0334764 0.433124 -1.68269\nv 0.0488657 0.409534 -1.65506\nv 0.0184102 0.464009 -1.74762\nv 0 0.455254 -1.70865\nv 0.017008 0.449139 -1.70147\nv 0.0472051 0.0969698 -1.21656\nv 0.0594027 0.0935854 -1.23631\nv 0.0652408 0.131016 -1.28061\nv 0.0555341 0.113003 -1.24722\nv 0.0541669 0.0618249 -1.20379\nv 0.0645907 0.0600996 -1.23087\nv 0.0724647 0.0921321 -1.26075\nv 0.0624617 0.0758909 -1.23055\nv 0.0851424 0.0946585 -1.29285\nv 0.0936041 0.131114 -1.33119\nv 0.0798864 0.129274 -1.30238\nv 0.083178 0.110542 -1.29432\nv 0.0851303 0.171749 -1.35386\nv 0.075411 0.150701 -1.3163\nv 0.0580296 0.032162 -1.21411\nv 0.0655777 0.0349479 -1.25328\nv 0.0752245 0.0629119 -1.26637\nv 0.0656695 0.0463919 -1.23814\nv 0.0576343 0.00920675 -1.25469\nv 0.0614013 0.0195731 -1.31074\nv 0.0726943 0.0449836 -1.3046\nv 0.0641951 0.0259482 -1.27718\nv 0.0779037 0.0640985 -1.3704\nv 0.0912018 0.0894906 -1.3725\nv 0.0846199 0.0721928 -1.31296\nv 0.0820554 0.0662015 -1.33652\nv 0.0958454 0.103042 -1.33522\nv 0.0856359 0.081777 -1.29874\nv 0.102804 0.118559 -1.3893\nv 0.111717 0.152965 -1.42069\nv 0.104838 0.13873 -1.3702\nv 0.104794 0.126763 -1.37577\nv 0.0937432 0.115925 -1.4455\nv 0.105083 0.140979 -1.45393\nv 0.0990568 0.11474 -1.41211\nv 0.103293 0.168152 -1.52223\nv 0.109318 0.193254 -1.54239\nv 0.113142 0.172729 -1.48098\nv 0.108742 0.16724 -1.49659\nv 0.116421 0.212923 -1.52485\nv 0.116336 0.193422 -1.46423\nv 0.115848 0.181677 -1.47029\nv 0.0988496 0.172184 -1.37889\nv 0.0999499 0.216545 -1.4325\nv 0.0934845 0.19385 -1.39289\nv 0.109829 0.17911 -1.41496\nv 0.102745 0.153841 -1.37129\nv 0.114735 0.238821 -1.51441\nv 0.109751 0.222801 -1.46512\nv 0.114083 0.207308 -1.46255\nv 0.104823 0.264634 -1.51225\nv 0.104003 0.23937 -1.47182\nv 0.0518222 -0.00581491 -1.33275\nv 0.051411 0.014692 -1.40569\nv 0.064153 0.040118 -1.38286\nv 0.0570762 0.016003 -1.35486\nv 0.0407635 -0.0134879 -1.43672\nv 0.0368264 0.0166639 -1.51205\nv 0.0499859 0.0460213 -1.48903\nv 0.0445972 0.0150942 -1.45937\nv 0.0465648 0.0871071 -1.57868\nv 0.0629244 0.112638 -1.56167\nv 0.0648749 0.0714021 -1.46806\nv 0.0563036 0.0787253 -1.52377\nv 0.0800681 0.0938359 -1.45195\nv 0.0721259 0.0661792 -1.4156\nv 0.0259571 -0.0162077 -1.53632\nv 0.0191789 0.0211221 -1.599\nv 0.0316853 0.0563357 -1.59155\nv 0.0282898 0.0188551 -1.55988\nv 0.00890222 -0.0163698 -1.60127\nv 0 0.0236999 -1.63568\nv 0.0108441 0.0646873 -1.6587\nv 0.00968516 0.022919 -1.62555\nv 0 0.110231 -1.70855\nv 0.0138755 0.152422 -1.74005\nv 0.024297 0.102864 -1.66986\nv 0.0122754 0.108125 -1.69784\nv 0.0403358 0.135638 -1.66896\nv 0.0358114 0.0955059 -1.62876\nv 0.0306575 0.188187 -1.75282\nv 0.0493542 0.215788 -1.74786\nv 0.0579224 0.161808 -1.65738\nv 0.0449261 0.176003 -1.70959\nv 0 0.200159 -1.79386\nv 0.0171679 0.240353 -1.82213\nv 0.0155408 0.196768 -1.78245\nv 0 0.286917 -1.86809\nv 0.0198927 0.321999 -1.88174\nv 0.0366642 0.27077 -1.82548\nv 0.018653 0.282367 -1.85619\nv 0.056811 0.290357 -1.80613\nv 0.0681941 0.234642 -1.72763\nv 0.0533918 0.254177 -1.78097\nv 0.0789058 0.133663 -1.54391\nv 0.0929021 0.151417 -1.52889\nv 0.0870528 0.122737 -1.49079\nv 0.0750923 0.181383 -1.63809\nv 0.0692223 0.147191 -1.6008\nv 0.0851281 0.244684 -1.69489\nv 0.0901573 0.194827 -1.61408\nv 0.0804293 0.214214 -1.67048\nv 0.101542 0.201571 -1.58677\nv 0.0974382 0.17841 -1.56303\nv 0.0384889 0.452847 -1.76677\nv 0.0204866 0.467706 -1.8255\nv 0 0.476487 -1.79779\nv 0.0195744 0.46996 -1.78925\nv 0.0716988 0.396739 -1.69258\nv 0.0587617 0.424776 -1.76477\nv 0.0560837 0.427617 -1.7335\nv 0.0777521 0.38349 -1.74156\nv 0.061761 0.399441 -1.80902\nv 0.0415881 0.440718 -1.82924\nv 0.0606871 0.41511 -1.7901\nv 0.0214998 0.441451 -1.87841\nv 0 0.464497 -1.86542\nv 0.0211331 0.457964 -1.85551\nv 0.0947312 0.327848 -1.60033\nv 0.0889421 0.358303 -1.66968\nv 0.0846744 0.362681 -1.64715\nv 0.106925 0.285948 -1.56378\nv 0.10159 0.294646 -1.55523\nv 0.113159 0.260451 -1.57751\nv 0.10333 0.311113 -1.62931\nv 0.111012 0.274036 -1.57087\nv 0.0938068 0.333743 -1.69999\nv 0.092105 0.348211 -1.68708\nv 0.104971 0.281654 -1.64699\nv 0.0920277 0.295614 -1.71236\nv 0.0792053 0.349034 -1.76795\nv 0.0936916 0.316238 -1.70901\nv 0.110125 0.232846 -1.59063\nv 0.112672 0.246733 -1.58467\nv 0.0992778 0.244635 -1.6493\nv 0.106093 0.218754 -1.59365\nv 0.0757169 0.298616 -1.76663\nv 0.0890838 0.27179 -1.70825\nv 0.0424374 0.402634 -1.86419\nv 0.0213388 0.390973 -1.89945\nv 0 0.425057 -1.90442\nv 0.021573 0.418882 -1.89334\nv 0.0610832 0.353103 -1.82521\nv 0.0618844 0.378592 -1.82104\nv 0.040825 0.344208 -1.86523\nv 0.0593834 0.323511 -1.82056\nv 0 0.363939 -1.90768\nv 0.0207833 0.35844 -1.89587\nv 0.0170034 -0.0508072 -1.56238\nv 0.00869046 -0.0855611 -1.58575\nv 0 -0.0528693 -1.59882\nv 0.0085988 -0.0523687 -1.58877\nv 0.0324535 -0.0442612 -1.47572\nv 0.0252329 -0.0773859 -1.51921\nv 0.0250197 -0.0481247 -1.52344\nv 0.0340554 -0.0950127 -1.47154\nv 0.0281324 -0.129901 -1.52868\nv 0.0179539 -0.111752 -1.56239\nv 0.026352 -0.104481 -1.52163\nv 0.0097212 -0.145459 -1.59905\nv 0 -0.118121 -1.60042\nv 0.00909275 -0.11643 -1.58994\nv 0.0447967 -0.0327513 -1.36904\nv 0.0392598 -0.0624089 -1.41661\nv 0.0391105 -0.0391567 -1.42299\nv 0.0524799 -0.0157977 -1.27256\nv 0.0490942 -0.0420033 -1.30842\nv 0.0493179 -0.0249849 -1.31763\nv 0.0532909 -0.0430522 -1.25531\nv 0.0536119 -0.0715693 -1.30328\nv 0.0464519 -0.0710604 -1.35885\nv 0.0506819 -0.057366 -1.304\nv 0.0434501 -0.103649 -1.41956\nv 0.0408325 -0.0837409 -1.41599\nv 0.0529329 -0.104217 -1.36442\nv 0.0503051 -0.141182 -1.43293\nv 0.039104 -0.13954 -1.48505\nv 0.0467339 -0.122631 -1.42573\nv 0.0598942 -0.0661197 -1.25192\nv 0.0616224 -0.0984821 -1.30847\nv 0.0574151 -0.0851093 -1.30514\nv 0.0683494 -0.0889291 -1.25527\nv 0.0693729 -0.126711 -1.31517\nv 0.0607965 -0.136201 -1.375\nv 0.0657647 -0.112184 -1.31219\nv 0.0567954 -0.178979 -1.44408\nv 0.0450712 -0.181794 -1.50179\nv 0.0537852 -0.159799 -1.43957\nv 0.0206966 -0.165601 -1.58161\nv 0.0113188 -0.199929 -1.62286\nv 0 -0.175911 -1.62185\nv 0.0104914 -0.173131 -1.61078\nv 0.0326987 -0.177672 -1.54864\nv 0.0303295 -0.154134 -1.53836\nv 0.0369745 -0.224619 -1.56298\nv 0.0238977 -0.216245 -1.60263\nv 0.0349952 -0.201004 -1.55752\nv 0.0128077 -0.252837 -1.63891\nv 0 -0.230094 -1.6445\nv 0.0121191 -0.226336 -1.633\nv 0.0543231 0.00689893 -1.21179\nv 0.053059 -0.0175425 -1.22513\nv 0.0540884 -0.00512954 -1.23758\nv 0.0513883 0.0345546 -1.18418\nv 0.0512019 0.00995881 -1.17827\nv 0.0533632 0.0201672 -1.1943\nv 0.0478873 0.0160773 -1.1512\nv 0.0525205 -0.00689333 -1.15574\nv 0.0532201 -0.0137879 -1.18706\nv 0.0510772 0.0010882 -1.16557\nv 0.0565554 -0.0385254 -1.21144\nv 0.0540475 -0.0285138 -1.21665\nv 0.0451113 0.0662048 -1.18246\nv 0.045295 0.0398443 -1.1604\nv 0.0485779 0.0499407 -1.18054\nv 0.0371133 0.0714437 -1.16421\nv 0.041168 0.0832264 -1.18904\nv 0.0337123 0.0524465 -1.12083\nv 0.039443 0.0462312 -1.1401\nv 0.0347313 0.0612932 -1.14162\nv 0.0440494 0.0234401 -1.12795\nv 0.0439188 0.0311421 -1.143\nv 0.0395472 0.0307774 -1.10594\nv 0.0472741 0.00932703 -1.10386\nv 0.0505864 0.00127447 -1.1288\nv 0.0452874 0.0163445 -1.11487\nv 0.0345882 0.0371875 -1.08293\nv 0.0337467 0.0445748 -1.10139\nv 0.0428087 0.016229 -1.07886\nv 0.0359906 0.0297936 -1.06509\nv 0.0560666 -0.0135159 -1.11483\nv 0.0496507 0.00185939 -1.09503\nv 0.0583516 -0.0308548 -1.17464\nv 0.0641351 -0.0575965 -1.20801\nv 0.0600841 -0.048059 -1.20879\nv 0.0582455 -0.0220107 -1.14304\nv 0.0550634 -0.0144344 -1.14835\nv 0.0658082 -0.0480707 -1.17021\nv 0.0616065 -0.0300977 -1.13946\nv 0.0682099 -0.0676196 -1.20838\nv 0.0292745 -0.253755 -1.23819\nv 0.0364299 -0.24035 -1.22666\nv 0.0323776 -0.236268 -1.2167\nv 0.0208007 -0.290524 -1.28206\nv 0.0289357 -0.283711 -1.27973\nv 0.0253353 -0.272264 -1.26044\nv 0.0273156 -0.317819 -1.32631\nv 0.0370589 -0.302395 -1.3149\nv 0.0375343 -0.268735 -1.26733\nv 0.0328865 -0.293851 -1.29774\nv 0.0459254 -0.246386 -1.24622\nv 0.041007 -0.243783 -1.23646\nv 0.0107553 -0.321058 -1.31767\nv 0.0183825 -0.323888 -1.32718\nv 0.0159111 -0.307265 -1.30166\nv 0 -0.334092 -1.33268\nv 0.00629768 -0.350083 -1.35758\nv 0.00542202 -0.330476 -1.32853\nv 0 -0.372963 -1.39088\nv 0.00823868 -0.38489 -1.41309\nv 0.0143287 -0.356759 -1.37208\nv 0.00724822 -0.368509 -1.38573\nv 0.0238891 -0.352877 -1.3753\nv 0.0210737 -0.339326 -1.35168\nv 0.0182259 -0.384527 -1.42313\nv 0.0295009 -0.371447 -1.42046\nv 0.0345132 -0.338091 -1.36702\nv 0.0267331 -0.363844 -1.39821\nv 0 -0.403566 -1.44594\nv 0.0101996 -0.408059 -1.46574\nv 0.00923411 -0.398361 -1.43973\nv 0 -0.418862 -1.49859\nv 0.0119006 -0.412677 -1.51625\nv 0.0218971 -0.397824 -1.47158\nv 0.0111 -0.413119 -1.49122\nv 0.0343905 -0.373451 -1.46323\nv 0.0413705 -0.346308 -1.40529\nv 0.0320883 -0.374909 -1.44211\nv 0.0469066 -0.278439 -1.29398\nv 0.0560119 -0.247957 -1.2658\nv 0.0510013 -0.247979 -1.25608\nv 0.0455092 -0.313131 -1.34786\nv 0.0413241 -0.309049 -1.33162\nv 0.0529463 -0.310834 -1.37865\nv 0.0559964 -0.27978 -1.31937\nv 0.0494409 -0.313954 -1.36355\nv 0.064945 -0.240658 -1.284\nv 0.0607341 -0.245718 -1.27519\nv 0.0262233 -0.267573 -1.60804\nv 0.0136044 -0.306697 -1.63195\nv 0 -0.284527 -1.64974\nv 0.0133003 -0.279913 -1.6383\nv 0.0494289 -0.225723 -1.50727\nv 0.0392691 -0.273363 -1.55824\nv 0.038392 -0.249009 -1.56301\nv 0.0510213 -0.270248 -1.4963\nv 0.0394884 -0.318731 -1.53673\nv 0.0270665 -0.318151 -1.59197\nv 0.0396274 -0.296874 -1.54927\nv 0.013678 -0.355919 -1.60508\nv 0 -0.337631 -1.63143\nv 0.0137277 -0.332322 -1.62062\nv 0.0665991 -0.170996 -1.37987\nv 0.0603014 -0.219806 -1.44234\nv 0.0589571 -0.199218 -1.44487\nv 0.0736131 -0.159135 -1.31577\nv 0.0719778 -0.142559 -1.31632\nv 0.0741092 -0.192099 -1.31007\nv 0.0687528 -0.207978 -1.3747\nv 0.0743124 -0.175846 -1.31364\nv 0.0606624 -0.259182 -1.4288\nv 0.0608595 -0.24003 -1.43685\nv 0.0675252 -0.24192 -1.36153\nv 0.0581277 -0.29142 -1.40655\nv 0.0500648 -0.30926 -1.47294\nv 0.0597415 -0.276549 -1.41857\nv 0.0711302 -0.220855 -1.29913\nv 0.0730373 -0.207299 -1.30519\nv 0.0631839 -0.267596 -1.3424\nv 0.0684216 -0.232172 -1.29203\nv 0.0467757 -0.33665 -1.44124\nv 0.0558522 -0.303086 -1.39312\nv 0.0265468 -0.361222 -1.56009\nv 0.0130896 -0.39356 -1.56446\nv 0 -0.382396 -1.5959\nv 0.0134627 -0.376621 -1.5861\nv 0.0378048 -0.354251 -1.50341\nv 0.0388737 -0.338127 -1.52124\nv 0.0247838 -0.390032 -1.51807\nv 0.0363032 -0.366296 -1.48387\nv 0 -0.41181 -1.54951\nv 0.0125664 -0.405868 -1.54092\nv 0.478366 -0.398115 -0.00448525\nv 0.491718 -0.387707 0.0471224\nv 0.449087 -0.373041 0.0877671\nv 0.423318 -0.377999 0.0456594\nv 0.461155 -0.380725 0.0463378\nv 0.531705 -0.420712 -0.00247492\nv 0.538011 -0.39275 0.048317\nv 0.504652 -0.372975 0.0875016\nv 0.517175 -0.391937 0.0475864\nv 0.512393 -0.359809 0.116551\nv 0.488131 -0.354454 0.140938\nv 0.470439 -0.36341 0.120857\nv 0.494293 -0.361722 0.11783\nv 0.43544 -0.363145 0.151621\nv 0.4049 -0.375323 0.121742\nv 0.440559 -0.367643 0.122201\nv 0.583435 -0.352401 0.0538529\nv 0.559547 -0.349249 0.0955824\nv 0.567614 -0.38185 0.0517469\nv 0.594117 -0.398226 0.00236393\nv 0.577074 -0.369583 0.0532616\nv 0.545989 -0.321674 0.133461\nv 0.520088 -0.329768 0.15982\nv 0.533896 -0.347045 0.126248\nv 0.540798 -0.336289 0.130658\nv 0.508335 -0.348622 0.142917\nv 0.539908 -0.367962 0.0900339\nv 0.525011 -0.354901 0.120451\nv 0.569837 -0.420541 -0.000232802\nv 0.554708 -0.38948 0.0499013\nv 0.401485 -0.352909 0.243189\nv 0.434682 -0.351158 0.202649\nv 0.469711 -0.332583 0.206148\nv 0.446067 -0.32408 0.246859\nv 0.438328 -0.340609 0.22681\nv 0.398307 -0.368954 0.182263\nv 0.463619 -0.350815 0.170493\nv 0.4336 -0.35816 0.178012\nv 0.491913 -0.339335 0.173413\nv 0.488201 -0.347448 0.159196\nv 0.502196 -0.314196 0.192357\nv 0.496678 -0.328751 0.184401\nv 0.316906 -0.336415 -0.29319\nv 0.298587 -0.364923 -0.248363\nv 0.253134 -0.387795 -0.2974\nv 0.286952 -0.363499 -0.295056\nv 0.342566 -0.339096 -0.199464\nv 0.322594 -0.367425 -0.156455\nv 0.273657 -0.390793 -0.205423\nv 0.310328 -0.366081 -0.201895\nv 0.241813 -0.41411 -0.164815\nv 0.189963 -0.431865 -0.213943\nv 0.224745 -0.411255 -0.254819\nv 0.233289 -0.412849 -0.209591\nv 0.176116 -0.427012 -0.302634\nv 0.216005 -0.40905 -0.300001\nv 0.37079 -0.343452 -0.112129\nv 0.350301 -0.372767 -0.0714449\nv 0.295263 -0.393488 -0.116101\nv 0.3358 -0.369408 -0.112842\nv 0.408695 -0.356995 -0.0395205\nv 0.377334 -0.383575 0.00563385\nv 0.316311 -0.397816 -0.0330337\nv 0.36645 -0.378237 -0.0326527\nv 0.269666 -0.418218 0.00217227\nv 0.213239 -0.435818 -0.0433476\nv 0.258547 -0.416427 -0.0783814\nv 0.265198 -0.417407 -0.0372402\nv 0.202803 -0.434516 -0.126601\nv 0.250493 -0.415315 -0.120993\nv 0.157382 -0.451526 -0.0901543\nv 0.103007 -0.463203 -0.136632\nv 0.149123 -0.449377 -0.174725\nv 0.153507 -0.450716 -0.13201\nv 0.162853 -0.451757 -0.0101165\nv 0.10734 -0.464556 -0.0547414\nv 0.16056 -0.451856 -0.0494313\nv 0.0544597 -0.472733 -0.0193811\nv 0 -0.476069 -0.0600396\nv 0.0528363 -0.472469 -0.0987679\nv 0.05376 -0.472949 -0.0585275\nv 0 -0.474189 -0.141155\nv 0.0503799 -0.469306 -0.181631\nv 0.0517043 -0.471264 -0.139877\nv 0.139382 -0.444847 -0.261582\nv 0.0902658 -0.452053 -0.307111\nv 0.134019 -0.441431 -0.305078\nv 0.0972022 -0.459175 -0.221441\nv 0.144415 -0.447458 -0.218023\nv 0 -0.469181 -0.224722\nv 0.0472165 -0.463017 -0.266171\nv 0.0488787 -0.466567 -0.223804\nv 0 -0.460904 -0.309048\nv 0.0454089 -0.458628 -0.308508\nv 0.369261 -0.387628 0.084314\nv 0.323821 -0.401694 0.044095\nv 0.376037 -0.386537 0.0455138\nv 0.359782 -0.385701 0.152046\nv 0.318005 -0.402209 0.115549\nv 0.363705 -0.387352 0.119362\nv 0.266737 -0.416805 0.145721\nv 0.217195 -0.434327 0.105588\nv 0.270598 -0.41896 0.0756123\nv 0.268826 -0.418374 0.110794\nv 0.217966 -0.435993 0.0335582\nv 0.271172 -0.418822 0.0395973\nv 0.357534 -0.377531 0.21645\nv 0.31325 -0.398088 0.183117\nv 0.357903 -0.382669 0.183756\nv 0.310733 -0.3877 0.255987\nv 0.358141 -0.369563 0.252085\nv 0.211231 -0.419306 0.257137\nv 0.263715 -0.409895 0.217778\nv 0.2617 -0.404449 0.257381\nv 0.214656 -0.429176 0.177941\nv 0.265213 -0.413996 0.18097\nv 0.161169 -0.437712 0.214084\nv 0.108985 -0.4529 0.171634\nv 0.163408 -0.445986 0.137034\nv 0.162441 -0.442412 0.174654\nv 0.106863 -0.441331 0.254811\nv 0.159515 -0.43177 0.256127\nv 0 -0.449694 0.253113\nv 0.0542129 -0.45426 0.210263\nv 0.0535873 -0.447476 0.253653\nv 0 -0.462416 0.168485\nv 0.0550301 -0.464292 0.130434\nv 0.0546994 -0.459836 0.169403\nv 0.164434 -0.450261 0.0641365\nv 0.109668 -0.463592 0.0222259\nv 0.164074 -0.451278 0.0275155\nv 0.110021 -0.46002 0.0959171\nv 0.164142 -0.44855 0.100419\nv 0 -0.470626 0.0914343\nv 0.0551571 -0.470208 0.0555972\nv 0.0551883 -0.467719 0.0927124\nv 0 -0.474964 0.0169345\nv 0.0549199 -0.471849 0.0184466\nv 0.600142 -0.452531 -0.0592857\nv 0.628319 -0.478673 -0.125746\nv 0.619378 -0.412997 -0.058556\nv 0.611415 -0.436113 -0.0584422\nv 0.568315 -0.465197 -0.0621172\nv 0.601771 -0.509568 -0.128142\nv 0.585721 -0.462233 -0.0606546\nv 0.600847 -0.562039 -0.20159\nv 0.632015 -0.601219 -0.271427\nv 0.63202 -0.543895 -0.19747\nv 0.617399 -0.557559 -0.199473\nv 0.658352 -0.559528 -0.266202\nv 0.65335 -0.490163 -0.196027\nv 0.644181 -0.521335 -0.196136\nv 0.525826 -0.450623 -0.0646838\nv 0.565441 -0.508638 -0.131307\nv 0.548086 -0.461402 -0.0632415\nv 0.485969 -0.408562 -0.0754035\nv 0.527875 -0.476051 -0.136666\nv 0.502324 -0.432633 -0.0671001\nv 0.538323 -0.488959 -0.213272\nv 0.568931 -0.559743 -0.278938\nv 0.565311 -0.542962 -0.205261\nv 0.549865 -0.520142 -0.208342\nv 0.599571 -0.601271 -0.275709\nv 0.582895 -0.557051 -0.203265\nv 0.599345 -0.618071 -0.345077\nv 0.627786 -0.657405 -0.409936\nv 0.630233 -0.642136 -0.344282\nv 0.614595 -0.635929 -0.345232\nv 0.574926 -0.551918 -0.347237\nv 0.600084 -0.608208 -0.404875\nv 0.585712 -0.589691 -0.345264\nv 0.602184 -0.577083 -0.45219\nv 0.620391 -0.60161 -0.496131\nv 0.624726 -0.642453 -0.462726\nv 0.61192 -0.613519 -0.455329\nv 0.647958 -0.646326 -0.517289\nv 0.653309 -0.669432 -0.468894\nv 0.638967 -0.662077 -0.467921\nv 0.658506 -0.617361 -0.336329\nv 0.679668 -0.606864 -0.392534\nv 0.67958 -0.550676 -0.330995\nv 0.670183 -0.588681 -0.332533\nv 0.656485 -0.656904 -0.405517\nv 0.64503 -0.635563 -0.340779\nv 0.674882 -0.64584 -0.513082\nv 0.677766 -0.641462 -0.454423\nv 0.666422 -0.661559 -0.463623\nv 0.692895 -0.60033 -0.484804\nv 0.694265 -0.575453 -0.437791\nv 0.686802 -0.612147 -0.443611\nv 0.610545 -0.547598 -0.498937\nv 0.626591 -0.518378 -0.549059\nv 0.639387 -0.590472 -0.545224\nv 0.624666 -0.568467 -0.526789\nv 0.611058 -0.441925 -0.52902\nv 0.629255 -0.385162 -0.572854\nv 0.645241 -0.467391 -0.589527\nv 0.628014 -0.455633 -0.564698\nv 0.663324 -0.394923 -0.61267\nv 0.677374 -0.478749 -0.606693\nv 0.659143 -0.547893 -0.584781\nv 0.661955 -0.475622 -0.603522\nv 0.669127 -0.612954 -0.558652\nv 0.654581 -0.606529 -0.556139\nv 0.614232 -0.308184 -0.536926\nv 0.63174 -0.241398 -0.565288\nv 0.647359 -0.31225 -0.597974\nv 0.630634 -0.311893 -0.572675\nv 0.619143 -0.186834 -0.523088\nv 0.630258 -0.129262 -0.530503\nv 0.645881 -0.165733 -0.572624\nv 0.632162 -0.179246 -0.551817\nv 0.655173 -0.0929063 -0.560165\nv 0.672465 -0.149737 -0.589767\nv 0.662429 -0.229155 -0.603487\nv 0.65971 -0.15469 -0.585906\nv 0.678383 -0.309888 -0.616066\nv 0.663558 -0.311 -0.612533\nv 0.687865 -0.228883 -0.59955\nv 0.700685 -0.311598 -0.589709\nv 0.692036 -0.394528 -0.608215\nv 0.690988 -0.31066 -0.608282\nv 0.676564 -0.0927844 -0.556864\nv 0.69083 -0.165356 -0.565677\nv 0.68296 -0.154493 -0.582313\nv 0.688597 -0.128913 -0.521497\nv 0.696824 -0.186233 -0.511078\nv 0.702046 -0.240681 -0.554404\nv 0.695715 -0.178721 -0.541992\nv 0.708609 -0.307107 -0.522292\nv 0.709125 -0.384093 -0.560455\nv 0.706787 -0.310986 -0.56087\nv 0.687262 -0.547444 -0.580405\nv 0.692193 -0.589579 -0.536989\nv 0.681907 -0.606064 -0.551878\nv 0.70125 -0.466563 -0.580822\nv 0.690716 -0.475195 -0.599053\nv 0.710967 -0.440484 -0.51348\nv 0.704752 -0.517145 -0.536888\nv 0.708244 -0.454458 -0.552224\nv 0.702392 -0.546066 -0.484606\nv 0.699257 -0.567216 -0.515155\nv 0.395914 0.271517 -0.0247834\nv 0.416593 0.224784 -0.0638963\nv 0.386999 0.268867 -0.106036\nv 0.392133 0.270317 -0.0652086\nv 0.443307 0.175649 -0.0219057\nv 0.456549 0.124233 -0.0584674\nv 0.431035 0.176528 -0.101636\nv 0.437879 0.175855 -0.0614134\nv 0.439413 0.128541 -0.139063\nv 0.413601 0.178187 -0.183845\nv 0.403406 0.223844 -0.14533\nv 0.4229 0.177395 -0.142478\nv 0.373025 0.264865 -0.188465\nv 0.380601 0.267078 -0.147157\nv 0.480282 0.0691545 -0.0168688\nv 0.48836 0.0156939 -0.0552772\nv 0.463986 0.0738602 -0.0952684\nv 0.473162 0.0706204 -0.055766\nv 0.515055 -0.0446466 -0.0231875\nv 0.511435 -0.0912149 -0.0672201\nv 0.486611 -0.0307477 -0.0927772\nv 0.502782 -0.039872 -0.0589691\nv 0.475289 -0.0691835 -0.128606\nv 0.457249 -0.0143404 -0.169877\nv 0.464116 0.0274079 -0.132357\nv 0.471576 -0.0221383 -0.129903\nv 0.441544 0.0825242 -0.176785\nv 0.453273 0.0780896 -0.13555\nv 0.437775 0.0391241 -0.215627\nv 0.416416 0.0895558 -0.26218\nv 0.41782 0.133191 -0.222561\nv 0.42932 0.0863798 -0.219147\nv 0.445609 -0.0530181 -0.209189\nv 0.429057 -0.00203694 -0.256121\nv 0.4432 -0.00765053 -0.212231\nv 0.416235 -0.0416909 -0.298431\nv 0.409943 0.0473164 -0.303071\nv 0.414445 0.0025321 -0.3007\nv 0.392497 0.135729 -0.30766\nv 0.402652 0.0919519 -0.30543\nv 0.385492 0.221885 -0.228151\nv 0.354688 0.258815 -0.271208\nv 0.364358 0.262139 -0.229851\nv 0.391868 0.178592 -0.26765\nv 0.403262 0.17863 -0.225642\nv 0.363297 0.217866 -0.311274\nv 0.379404 0.177937 -0.309646\nv 0.344102 0.254806 -0.312428\nv 0.425178 0.219263 0.260303\nv 0.399176 0.266624 0.219839\nv 0.397852 0.261882 0.264776\nv 0.46629 0.131471 0.257327\nv 0.450066 0.177615 0.214075\nv 0.447879 0.175668 0.257943\nv 0.470526 0.131265 0.173273\nv 0.451569 0.178634 0.132528\nv 0.42782 0.224984 0.17354\nv 0.451256 0.17855 0.172485\nv 0.39991 0.272156 0.135421\nv 0.399761 0.270019 0.176898\nv 0.491584 0.0427697 0.259846\nv 0.483888 0.0858653 0.215657\nv 0.480746 0.0870464 0.258085\nv 0.503744 -0.0438425 0.2649\nv 0.503772 -0.00479708 0.221411\nv 0.499138 -0.000984854 0.262241\nv 0.514785 -0.0543084 0.186672\nv 0.511303 -0.0159136 0.144296\nv 0.498372 0.0364457 0.178643\nv 0.507796 -0.00976944 0.182506\nv 0.487421 0.0806125 0.136556\nv 0.48609 0.0836771 0.175446\nv 0.502261 0.0260347 0.101517\nv 0.487231 0.0730713 0.0598469\nv 0.471042 0.127865 0.0954029\nv 0.487949 0.0768019 0.098095\nv 0.524745 -0.0698313 0.110074\nv 0.516828 -0.0314425 0.0646199\nv 0.514389 -0.0232413 0.10555\nv 0.53485 -0.0913769 0.0187024\nv 0.501539 0.0152762 0.0223764\nv 0.518394 -0.0402072 0.0198581\nv 0.467093 0.124087 0.0191822\nv 0.484823 0.0702468 0.0215972\nv 0.427618 0.22666 0.0931794\nv 0.399484 0.27317 0.0548977\nv 0.399927 0.273122 0.0948739\nv 0.449734 0.177093 0.0551315\nv 0.451127 0.17803 0.0935601\nv 0.424467 0.225883 0.0151893\nv 0.447193 0.17618 0.0167928\nv 0.398255 0.272551 0.0151319\nv 0.50505 -0.125589 0.269554\nv 0.512815 -0.0904315 0.228258\nv 0.505738 -0.0854287 0.267453\nv 0.49535 -0.201015 0.271008\nv 0.512405 -0.168529 0.23338\nv 0.501611 -0.164169 0.270854\nv 0.522278 -0.208403 0.199861\nv 0.535035 -0.179866 0.161986\nv 0.522695 -0.136308 0.194547\nv 0.523545 -0.173629 0.19767\nv 0.5267 -0.103828 0.153523\nv 0.519763 -0.0965114 0.190784\nv 0.474206 -0.268769 0.265998\nv 0.502227 -0.238014 0.234214\nv 0.486197 -0.235972 0.269668\nv 0.484817 -0.295502 0.227164\nv 0.459428 -0.299136 0.259158\nv 0.529726 -0.296097 0.167452\nv 0.513938 -0.269387 0.200168\nv 0.508167 -0.29417 0.197479\nv 0.535669 -0.244615 0.167398\nv 0.518859 -0.24056 0.200828\nv 0.551883 -0.278557 0.13381\nv 0.568907 -0.260604 0.0923155\nv 0.550625 -0.220691 0.128659\nv 0.552236 -0.251185 0.131809\nv 0.56869 -0.313315 0.0968042\nv 0.549743 -0.302242 0.134436\nv 0.605278 -0.353087 0.00118322\nv 0.587907 -0.303336 0.0506487\nv 0.587044 -0.330027 0.0529287\nv 0.603966 -0.289313 -0.00536462\nv 0.581432 -0.240501 0.042661\nv 0.586034 -0.273202 0.0471729\nv 0.541184 -0.1517 0.119916\nv 0.541447 -0.122462 0.0725208\nv 0.533742 -0.11254 0.114971\nv 0.559693 -0.196527 0.08363\nv 0.546876 -0.18764 0.124587\nv 0.590747 -0.215956 -0.0163269\nv 0.563833 -0.170311 0.030934\nv 0.574109 -0.206107 0.037273\nv 0.564398 -0.141843 -0.0338433\nv 0.550372 -0.133407 0.0235691\nv 0.52674 -0.141993 -0.0861597\nv 0.501186 -0.170632 -0.0926807\nv 0.491198 -0.122412 -0.0994877\nv 0.509323 -0.133473 -0.080409\nv 0.505674 -0.216236 -0.108073\nv 0.481016 -0.2413 -0.0972202\nv 0.477496 -0.197522 -0.106845\nv 0.491761 -0.206681 -0.0981799\nv 0.452251 -0.22357 -0.128623\nv 0.448582 -0.181624 -0.163375\nv 0.4707 -0.15216 -0.129684\nv 0.463046 -0.189067 -0.129949\nv 0.45972 -0.103511 -0.165624\nv 0.474889 -0.112362 -0.128885\nv 0.484685 -0.288747 -0.0987227\nv 0.454332 -0.304729 -0.0767621\nv 0.453578 -0.263619 -0.100169\nv 0.468918 -0.27417 -0.0901148\nv 0.459165 -0.350423 -0.0565559\nv 0.416038 -0.322083 -0.0813809\nv 0.436124 -0.332415 -0.0570605\nv 0.383779 -0.312567 -0.154846\nv 0.421198 -0.28693 -0.11956\nv 0.398919 -0.315994 -0.114877\nv 0.424077 -0.250843 -0.159329\nv 0.438639 -0.256157 -0.124651\nv 0.391931 -0.279443 -0.19888\nv 0.395675 -0.24345 -0.244675\nv 0.423847 -0.212099 -0.201469\nv 0.409868 -0.246741 -0.199968\nv 0.35601 -0.308463 -0.244758\nv 0.369632 -0.310222 -0.198586\nv 0.363789 -0.274792 -0.291502\nv 0.342444 -0.306793 -0.292026\nv 0.394787 -0.204287 -0.292136\nv 0.381162 -0.240571 -0.291559\nv 0.441283 -0.136849 -0.204713\nv 0.430373 -0.0898189 -0.250785\nv 0.445016 -0.0960528 -0.206728\nv 0.419809 -0.170416 -0.246913\nv 0.434272 -0.175499 -0.203005\nv 0.411676 -0.126164 -0.294607\nv 0.404884 -0.166099 -0.293172\nv 0.415386 -0.0846425 -0.29638\nv 0.599896 -0.183896 -0.0882706\nv 0.613604 -0.143752 -0.173764\nv 0.578694 -0.110979 -0.129081\nv 0.587405 -0.14424 -0.101675\nv 0.618063 -0.267962 -0.0724279\nv 0.631025 -0.235666 -0.147594\nv 0.61023 -0.225654 -0.0790127\nv 0.657423 -0.30074 -0.211741\nv 0.670416 -0.258506 -0.289683\nv 0.644469 -0.19336 -0.228998\nv 0.651598 -0.246461 -0.218881\nv 0.657448 -0.146249 -0.310565\nv 0.630981 -0.0990647 -0.26559\nv 0.637206 -0.14353 -0.243948\nv 0.625038 -0.348157 -0.0629035\nv 0.642313 -0.331417 -0.134836\nv 0.623051 -0.30927 -0.0670423\nv 0.642032 -0.416895 -0.127464\nv 0.623866 -0.383206 -0.0600589\nv 0.673985 -0.481029 -0.267427\nv 0.661384 -0.404694 -0.200984\nv 0.658997 -0.450666 -0.197698\nv 0.67745 -0.375668 -0.276671\nv 0.660772 -0.354102 -0.20572\nv 0.690135 -0.451856 -0.338281\nv 0.701969 -0.411113 -0.407958\nv 0.689961 -0.33403 -0.351248\nv 0.69137 -0.394463 -0.344664\nv 0.695314 -0.521688 -0.392866\nv 0.686218 -0.504498 -0.333318\nv 0.705944 -0.48397 -0.454668\nv 0.700891 -0.533217 -0.443569\nv 0.708677 -0.363262 -0.472064\nv 0.708689 -0.426245 -0.46481\nv 0.680194 -0.211635 -0.363121\nv 0.685548 -0.166393 -0.426537\nv 0.666939 -0.103576 -0.385069\nv 0.673569 -0.154585 -0.371951\nv 0.697768 -0.286073 -0.418877\nv 0.685946 -0.272269 -0.35681\nv 0.70003 -0.235548 -0.474075\nv 0.705462 -0.298244 -0.474499\nv 0.68676 -0.132078 -0.476374\nv 0.693368 -0.179533 -0.472753\nv 0.492565 -0.34598 -0.115689\nv 0.510707 -0.414438 -0.154673\nv 0.485152 -0.379541 -0.094507\nv 0.509843 -0.26781 -0.138437\nv 0.517298 -0.330784 -0.178712\nv 0.500903 -0.30829 -0.130226\nv 0.538539 -0.301224 -0.245447\nv 0.549527 -0.376577 -0.302981\nv 0.531224 -0.404302 -0.229601\nv 0.533597 -0.354218 -0.238268\nv 0.551316 -0.481589 -0.288285\nv 0.532454 -0.44978 -0.220813\nv 0.529209 -0.184189 -0.137894\nv 0.532116 -0.236008 -0.189877\nv 0.519064 -0.22588 -0.140641\nv 0.556865 -0.11102 -0.139228\nv 0.552906 -0.14395 -0.196488\nv 0.540922 -0.144426 -0.13125\nv 0.576553 -0.0990864 -0.277671\nv 0.574209 -0.146513 -0.327117\nv 0.553316 -0.193789 -0.254448\nv 0.563732 -0.143747 -0.26268\nv 0.557947 -0.259295 -0.314319\nv 0.545015 -0.247015 -0.249772\nv 0.577116 -0.212299 -0.381354\nv 0.584702 -0.287168 -0.437141\nv 0.56702 -0.335264 -0.373417\nv 0.571097 -0.273243 -0.377509\nv 0.595272 -0.103692 -0.396858\nv 0.596301 -0.166865 -0.4407\nv 0.58515 -0.154944 -0.387091\nv 0.614273 -0.132421 -0.487563\nv 0.60269 -0.236392 -0.489148\nv 0.60741 -0.180101 -0.486041\nv 0.596453 -0.364663 -0.489504\nv 0.599001 -0.299379 -0.491014\nv 0.565028 -0.453291 -0.359479\nv 0.58341 -0.523418 -0.410527\nv 0.568215 -0.505883 -0.352444\nv 0.579882 -0.412712 -0.427615\nv 0.564814 -0.395849 -0.366938\nv 0.59532 -0.485687 -0.471919\nv 0.595155 -0.427844 -0.482484\nv 0.597157 -0.534953 -0.459771\nv 0.604658 -0.0732063 -0.238044\nv 0.585727 -0.0731881 -0.242509\nv 0.579701 -0.0884036 -0.180343\nv 0.646006 -0.0572485 -0.351773\nv 0.624919 -0.0346398 -0.330891\nv 0.626965 -0.0620584 -0.29578\nv 0.638922 -0.0122465 -0.403861\nv 0.627 -0.012205 -0.405693\nv 0.608638 -0.0345947 -0.333763\nv 0.624607 -0.0189376 -0.367295\nv 0.599193 -0.0571868 -0.359716\nv 0.592071 -0.0620066 -0.302627\nv 0.676064 -0.0676644 -0.508861\nv 0.672863 -0.0736294 -0.451235\nv 0.681493 -0.0950642 -0.490781\nv 0.659913 -0.0419556 -0.530742\nv 0.660265 -0.0223494 -0.484987\nv 0.668971 -0.0490516 -0.523499\nv 0.643512 -0.00618802 -0.453596\nv 0.655841 -0.0296005 -0.425311\nv 0.650528 -0.0117323 -0.4441\nv 0.66117 -0.0610648 -0.404245\nv 0.616252 -0.0737162 -0.460029\nv 0.636308 -0.067783 -0.514987\nv 0.624388 -0.0952684 -0.499586\nv 0.620615 -0.0295519 -0.430802\nv 0.607554 -0.0610562 -0.412795\nv 0.640904 -0.0223486 -0.487966\nv 0.63307 -0.0116952 -0.446783\nv 0.648588 -0.0491057 -0.526639\nv 0.0652789 0.421506 -0.830886\nv 0.0603753 0.44704 -0.809411\nv 0.0725038 0.455642 -0.78073\nv 0.0700722 0.436832 -0.807073\nv 0.0493524 0.400363 -0.869273\nv 0.0509656 0.419304 -0.85038\nv 0.0583102 0.409428 -0.851756\nv 0.0384244 0.418432 -0.861129\nv 0.0368617 0.431734 -0.84704\nv 0.0480019 0.438905 -0.831498\nv 0.0440406 0.426928 -0.848205\nv 0.041054 0.459413 -0.811952\nv 0.0521137 0.473675 -0.78696\nv 0.0507662 0.454478 -0.810876\nv 0 0.38759 -0.900977\nv 0.0120475 0.398621 -0.890418\nv 0.0264791 0.390139 -0.892942\nv 0.0134649 0.38812 -0.89895\nv 0 0.4085 -0.88149\nv 0.0102742 0.419905 -0.868003\nv 0.0213674 0.410492 -0.876599\nv 0.0109549 0.408952 -0.880279\nv 0.0285973 0.422553 -0.861118\nv 0.0342824 0.404209 -0.877419\nv 0.0306953 0.413303 -0.870405\nv 0.0385918 0.394076 -0.883026\nv 0.0105936 0.483146 -0.791807\nv 0.020821 0.463216 -0.814204\nv 0.0102153 0.446583 -0.835406\nv 0 0.463201 -0.815332\nv 0.0104473 0.463365 -0.815003\nv 0.0316099 0.481591 -0.790108\nv 0.0299715 0.446032 -0.832807\nv 0.0310478 0.462112 -0.813125\nv 0.0198047 0.432798 -0.851319\nv 0.0287554 0.433154 -0.848696\nv 0 0.431968 -0.853708\nv 0.0100927 0.432273 -0.853059\nv 0.0620534 0.488819 -0.757055\nv 0.0702792 0.504015 -0.721675\nv 0.0723875 0.47817 -0.752267\nv 0.0416012 0.50167 -0.762626\nv 0.0502735 0.522664 -0.731178\nv 0.0518246 0.496521 -0.760373\nv 0.0383562 0.557083 -0.702342\nv 0.0448843 0.583432 -0.665208\nv 0.0572849 0.543809 -0.69509\nv 0.0478352 0.551752 -0.699435\nv 0.0623096 0.56406 -0.654078\nv 0.0667346 0.532779 -0.688948\nv 0.0208949 0.506068 -0.765239\nv 0.0302819 0.531001 -0.735542\nv 0.0312834 0.504663 -0.764218\nv 0 0.506394 -0.765929\nv 0.0101136 0.532975 -0.736999\nv 0.0104593 0.506454 -0.765779\nv 0 0.562389 -0.705602\nv 0.00906493 0.594391 -0.671517\nv 0.0192368 0.561867 -0.705155\nv 0.00962574 0.562393 -0.705551\nv 0.0271067 0.59216 -0.67018\nv 0.0288185 0.560276 -0.704167\nv 0.0169654 0.628051 -0.634645\nv 0.0237911 0.662443 -0.594725\nv 0.0336483 0.622939 -0.631746\nv 0.0253598 0.626326 -0.633671\nv 0 0.628675 -0.634988\nv 0.00800121 0.664867 -0.596022\nv 0.00850035 0.628654 -0.63498\nv 0 0.70274 -0.554724\nv 0.00747605 0.741879 -0.511173\nv 0.0151994 0.702055 -0.554403\nv 0.00763671 0.702714 -0.554725\nv 0.0220417 0.739223 -0.509877\nv 0.0298064 0.696525 -0.551484\nv 0.022614 0.700185 -0.553431\nv 0.0497749 0.609033 -0.623772\nv 0.0530418 0.632575 -0.577874\nv 0.0575601 0.597459 -0.617056\nv 0.0389434 0.653155 -0.589546\nv 0.0417955 0.61735 -0.628557\nv 0.0354481 0.729014 -0.504686\nv 0.0432287 0.681515 -0.543357\nv 0.0367027 0.690494 -0.548234\nv 0.0469222 0.706359 -0.493002\nv 0.0493105 0.669009 -0.536525\nv 0.0561431 0.919481 -0.213542\nv 0.0521645 0.96774 -0.179016\nv 0.0569956 0.971365 -0.132286\nv 0.0572523 0.947348 -0.171253\nv 0.0516927 0.854691 -0.304941\nv 0.0490603 0.906764 -0.265506\nv 0.0541345 0.888388 -0.258367\nv 0.0406422 0.884319 -0.316908\nv 0.0355126 0.928741 -0.274061\nv 0.044614 0.952824 -0.226309\nv 0.0427965 0.919922 -0.270653\nv 0.0381654 0.992089 -0.188404\nv 0.0458812 1.0077 -0.14662\nv 0.0457554 0.982318 -0.184692\nv 0.0473755 0.781987 -0.400191\nv 0.0443758 0.835154 -0.359342\nv 0.0492843 0.819017 -0.352478\nv 0.0413516 0.75828 -0.4541\nv 0.0464327 0.744227 -0.447295\nv 0.0291598 0.775128 -0.462203\nv 0.0366816 0.807834 -0.411879\nv 0.0355542 0.768363 -0.458962\nv 0.0317863 0.854476 -0.367528\nv 0.0384908 0.846721 -0.364256\nv 0.0231482 0.819459 -0.417071\nv 0.0165556 0.861567 -0.370416\nv 0.0258973 0.897635 -0.322163\nv 0.0244193 0.859175 -0.369468\nv 0.0150575 0.781316 -0.465122\nv 0.0222877 0.779228 -0.464149\nv 0 0.782073 -0.465447\nv 0.00790594 0.822471 -0.418356\nv 0.00758845 0.782047 -0.465446\nv 0 0.862431 -0.370697\nv 0.00888444 0.901096 -0.323323\nv 0.00836058 0.862403 -0.370712\nv 0.0286588 0.96782 -0.231743\nv 0.0201234 1.00115 -0.190879\nv 0.0298023 1.02408 -0.152402\nv 0.0295347 0.998063 -0.190276\nv 0.0186065 0.936836 -0.276822\nv 0.0273784 0.934097 -0.27598\nv 0 0.937845 -0.276921\nv 0.00986799 0.971779 -0.232549\nv 0.00940955 0.937804 -0.276999\nv 0 1.00234 -0.190562\nv 0.010313 1.02854 -0.152512\nv 0.0101918 1.00227 -0.190784\nv 0.0504474 1.01271 -0.106298\nv 0.0510862 1.00639 -0.0669243\nv 0.0549067 0.990907 -0.0974278\nv 0.0375715 1.03869 -0.117159\nv 0.0421862 1.04371 -0.0841809\nv 0.0446518 1.02826 -0.112909\nv 0.0334209 1.06245 -0.0666377\nv 0.0336245 1.06059 -0.0435868\nv 0.0425723 1.03998 -0.0518895\nv 0.038603 1.05374 -0.0610557\nv 0.0386526 1.02684 -0.0199668\nv 0.0456346 1.01823 -0.0410219\nv 0 1.04996 -0.118066\nv 0.00988793 1.06552 -0.0885951\nv 0.0200191 1.04854 -0.119122\nv 0.0101637 1.04984 -0.118544\nv 0 1.07513 -0.0615082\nv 0.00953305 1.07745 -0.0396251\nv 0.0187171 1.07326 -0.0643509\nv 0.0096297 1.07493 -0.0623834\nv 0.0259893 1.07104 -0.0475488\nv 0.0281481 1.0604 -0.090273\nv 0.0267199 1.06903 -0.0667525\nv 0.0292578 1.04514 -0.118945\nv 0.0207562 1.03611 0.00709619\nv 0.0101266 1.05937 -0.00263345\nv 0 1.03819 0.0156508\nv 0.0105568 1.0378 0.0135704\nv 0.0287097 1.05406 -0.0178813\nv 0.0302406 1.03263 -0.00400516\nv 0.0189207 1.07064 -0.0244271\nv 0.0269726 1.06646 -0.0318271\nv 0 1.07272 -0.0185942\nv 0.00974202 1.07243 -0.0200369\nv -0.0510265 -0.419014 0.403675\nv -0.103674 -0.424454 0.351015\nv -0.0528396 -0.439391 0.300217\nv -0.0519863 -0.429916 0.350595\nv -0.0487824 -0.392779 0.513494\nv -0.0995018 -0.401754 0.458448\nv -0.0499589 -0.406647 0.458346\nv -0.144461 -0.38053 0.513453\nv -0.195676 -0.382651 0.458109\nv -0.151674 -0.405446 0.40395\nv -0.148213 -0.393724 0.458418\nv -0.204959 -0.403897 0.351014\nv -0.157405 -0.42447 0.301586\nv -0.154765 -0.415695 0.351267\nv -0.0460981 -0.360389 0.620774\nv -0.0944948 -0.373055 0.567951\nv -0.0474959 -0.377372 0.568008\nv -0.0429646 -0.321546 0.716617\nv -0.0886872 -0.338165 0.670457\nv -0.0445881 -0.341792 0.670681\nv -0.127009 -0.312891 0.715809\nv -0.173463 -0.323421 0.669784\nv -0.136294 -0.34971 0.620443\nv -0.131808 -0.332058 0.670143\nv -0.185014 -0.355799 0.567653\nv -0.1405 -0.365863 0.567838\nv -0.220487 -0.328155 0.619945\nv -0.267475 -0.32702 0.567105\nv -0.234483 -0.356352 0.512827\nv -0.227541 -0.342865 0.567382\nv -0.205402 -0.295015 0.714732\nv -0.250414 -0.298375 0.669111\nv -0.213161 -0.312209 0.669425\nv -0.274372 -0.267349 0.713925\nv -0.31563 -0.262647 0.668797\nv -0.294569 -0.295482 0.619536\nv -0.284734 -0.28187 0.668887\nv -0.337146 -0.286429 0.56685\nv -0.313997 -0.320126 0.512009\nv -0.304211 -0.308222 0.566901\nv -0.248104 -0.379637 0.402554\nv -0.30142 -0.371766 0.347728\nv -0.258628 -0.397607 0.301017\nv -0.253959 -0.389316 0.349922\nv -0.284654 -0.351531 0.456523\nv -0.241475 -0.368629 0.45737\nv -0.359332 -0.307595 0.455788\nv -0.335193 -0.341537 0.399592\nv -0.324259 -0.331229 0.455888\nv -0.386817 -0.326323 0.342574\nv -0.355902 -0.360246 0.29366\nv -0.346997 -0.351057 0.344172\nv -0.03943 -0.276547 0.793632\nv -0.0819987 -0.296882 0.756987\nv -0.0412265 -0.299612 0.757468\nv -0.0358873 -0.229251 0.853486\nv -0.0748291 -0.251247 0.824656\nv -0.0376315 -0.252908 0.825506\nv -0.105919 -0.226038 0.850878\nv -0.146186 -0.243793 0.822035\nv -0.116526 -0.270485 0.79206\nv -0.111159 -0.248262 0.823447\nv -0.160364 -0.285457 0.755545\nv -0.121863 -0.292198 0.756314\nv -0.0327869 -0.184112 0.899357\nv -0.0680582 -0.205548 0.876671\nv -0.0342537 -0.206134 0.877971\nv -0.0305789 -0.145582 0.93442\nv -0.0626217 -0.164046 0.916258\nv -0.0315432 -0.163742 0.918041\nv -0.0899596 -0.147018 0.929259\nv -0.121526 -0.164426 0.910018\nv -0.0965104 -0.183591 0.895496\nv -0.0927707 -0.16433 0.913524\nv -0.132523 -0.202263 0.87241\nv -0.100964 -0.20432 0.874754\nv -0.154684 -0.181088 0.889281\nv -0.189829 -0.194724 0.867431\nv -0.17072 -0.218156 0.847081\nv -0.162286 -0.199189 0.869826\nv -0.144008 -0.148745 0.920204\nv -0.172742 -0.163279 0.901728\nv -0.148422 -0.164169 0.905917\nv -0.187692 -0.149878 0.909411\nv -0.210782 -0.15744 0.896178\nv -0.203467 -0.174258 0.883554\nv -0.193767 -0.161478 0.897958\nv -0.236572 -0.180133 0.864915\nv -0.226858 -0.203782 0.843994\nv -0.214732 -0.188496 0.865651\nv -0.188331 -0.257295 0.789932\nv -0.231462 -0.265402 0.754103\nv -0.197048 -0.276559 0.754776\nv -0.210605 -0.229713 0.81927\nv -0.179478 -0.237676 0.820575\nv -0.264652 -0.207455 0.817942\nv -0.251321 -0.235872 0.788312\nv -0.239139 -0.219706 0.818325\nv -0.291659 -0.235906 0.75343\nv -0.26315 -0.251885 0.753622\nv -0.401976 -0.289043 0.400798\nv -0.439849 -0.263836 0.351658\nv -0.435618 -0.300919 0.297505\nv -0.417005 -0.296701 0.346252\nv -0.377072 -0.271286 0.512336\nv -0.41344 -0.250468 0.457787\nv -0.388919 -0.280503 0.456542\nv -0.42177 -0.211331 0.513721\nv -0.448962 -0.183637 0.46029\nv -0.44514 -0.224127 0.405761\nv -0.433314 -0.218007 0.459158\nv -0.471119 -0.193416 0.357279\nv -0.471193 -0.233426 0.309306\nv -0.457637 -0.229372 0.35524\nv -0.354321 -0.251405 0.619569\nv -0.389946 -0.23413 0.567358\nv -0.365673 -0.2616 0.567032\nv -0.330154 -0.229327 0.713925\nv -0.365762 -0.216251 0.669111\nv -0.342615 -0.24066 0.668887\nv -0.371143 -0.181975 0.714732\nv -0.400834 -0.161535 0.669784\nv -0.398023 -0.197233 0.620034\nv -0.385144 -0.189762 0.669425\nv -0.426344 -0.172848 0.568089\nv -0.410119 -0.204414 0.567739\nv -0.426447 -0.135872 0.620563\nv -0.447503 -0.1057 0.56844\nv -0.450143 -0.143814 0.514655\nv -0.438775 -0.139826 0.568318\nv -0.397905 -0.127918 0.715809\nv -0.421436 -0.101241 0.670457\nv -0.412907 -0.131915 0.670143\nv -0.411003 -0.0697787 0.716617\nv -0.428157 -0.038109 0.670771\nv -0.440305 -0.0701817 0.620889\nv -0.426495 -0.0698588 0.670681\nv -0.454225 -0.0355399 0.568415\nv -0.463636 -0.0718508 0.514644\nv -0.452623 -0.0708212 0.568468\nv -0.471019 -0.151969 0.40817\nv -0.487549 -0.11754 0.357874\nv -0.49116 -0.16015 0.311833\nv -0.48105 -0.156072 0.358056\nv -0.468955 -0.11101 0.460892\nv -0.460804 -0.147873 0.460821\nv -0.474654 -0.0351695 0.460227\nv -0.482504 -0.0753751 0.4077\nv -0.473533 -0.0733442 0.460646\nv -0.490731 -0.0377022 0.355843\nv -0.498418 -0.0813437 0.309877\nv -0.490736 -0.078017 0.357035\nv -0.480579 0.00368844 0.40618\nv -0.481278 0.0444732 0.353609\nv -0.493797 0.00167891 0.306228\nv -0.487655 0.0032059 0.354603\nv -0.463086 0.0018894 0.51421\nv -0.466719 0.0416479 0.459521\nv -0.472433 0.00321883 0.459777\nv -0.448421 0.0754149 0.514374\nv -0.444203 0.117937 0.46048\nv -0.464982 0.0834561 0.405562\nv -0.45736 0.0799448 0.45968\nv -0.457693 0.127149 0.353556\nv -0.476595 0.08709 0.303621\nv -0.471367 0.0858655 0.353161\nv -0.44025 -0.00297966 0.620846\nv -0.447056 0.0350107 0.568268\nv -0.452403 -0.000207534 0.568294\nv -0.411003 -0.0101802 0.716617\nv -0.421436 0.0252784 0.67054\nv -0.426495 -0.00633465 0.670681\nv -0.397905 0.0487705 0.716043\nv -0.400834 0.0872765 0.670619\nv -0.426274 0.0636314 0.620915\nv -0.412907 0.0565441 0.670477\nv -0.425392 0.104443 0.569151\nv -0.438086 0.0699494 0.5685\nv -0.397712 0.128262 0.622226\nv -0.388436 0.171435 0.572362\nv -0.418661 0.147414 0.51666\nv -0.408875 0.138327 0.570384\nv -0.371143 0.105483 0.715901\nv -0.365762 0.146398 0.672032\nv -0.385144 0.11729 0.671094\nv -0.330154 0.158366 0.717197\nv -0.31563 0.201155 0.675808\nv -0.353897 0.189522 0.625908\nv -0.342615 0.174415 0.673561\nv -0.335391 0.234663 0.579202\nv -0.372825 0.216573 0.522592\nv -0.363974 0.203602 0.575248\nv -0.434208 0.162366 0.407923\nv -0.41813 0.20845 0.358061\nv -0.444572 0.172546 0.304733\nv -0.440024 0.168088 0.35509\nv -0.405887 0.192313 0.464893\nv -0.427096 0.15545 0.462143\nv -0.350556 0.263394 0.474546\nv -0.386751 0.238856 0.41534\nv -0.380425 0.228352 0.468953\nv -0.360742 0.286504 0.369502\nv -0.395488 0.255703 0.31224\nv -0.39178 0.248 0.362766\nv -0.395161 -0.0421723 0.75766\nv -0.374549 -0.018935 0.793632\nv -0.389008 0.0131678 0.757026\nv -0.393641 -0.014424 0.757468\nv -0.355171 -0.0470394 0.825841\nv -0.331734 -0.0282348 0.853486\nv -0.349877 -0.000243515 0.82467\nv -0.353867 -0.0235823 0.825506\nv -0.32204 0.0139683 0.850906\nv -0.333531 0.0452134 0.822174\nv -0.362883 0.0316465 0.792157\nv -0.343124 0.0227605 0.823503\nv -0.370103 0.067045 0.755935\nv -0.381186 0.0403939 0.75647\nv -0.309339 -0.0520339 0.878467\nv -0.283674 -0.0370317 0.899357\nv -0.305107 -0.0135179 0.876674\nv -0.308289 -0.0327616 0.877971\nv -0.258817 -0.0564795 0.918694\nv -0.231488 -0.0442777 0.93442\nv -0.255714 -0.0252177 0.916258\nv -0.258027 -0.0409141 0.918041\nv -0.22655 -0.0156201 0.929259\nv -0.246747 0.00603315 0.910018\nv -0.276365 -0.00240602 0.895499\nv -0.251935 -0.00952408 0.913524\nv -0.292213 0.0241032 0.872438\nv -0.29976 0.0055021 0.874766\nv -0.26182 0.0310238 0.889295\nv -0.27011 0.0590555 0.867528\nv -0.302138 0.0541666 0.84722\nv -0.282434 0.0420904 0.869882\nv -0.217504 0.0133337 0.920204\nv -0.232314 0.0357298 0.901728\nv -0.240207 0.0213203 0.905917\nv -0.206277 0.0399883 0.909411\nv -0.210782 0.0588023 0.896178\nv -0.238881 0.060528 0.883593\nv -0.223068 0.0486539 0.897958\nv -0.236572 0.0882871 0.865149\nv -0.270955 0.0902541 0.844383\nv -0.254927 0.0745904 0.865807\nv -0.338921 0.0799323 0.790419\nv -0.337851 0.117785 0.755466\nv -0.355682 0.0929119 0.755555\nv -0.305459 0.0875581 0.819757\nv -0.32102 0.0668989 0.820853\nv -0.264652 0.124762 0.81911\nv -0.301981 0.124156 0.789675\nv -0.286714 0.106932 0.819104\nv -0.291659 0.163715 0.756702\nv -0.316535 0.141456 0.755804\nv -0.301981 -0.205076 0.788312\nv -0.337851 -0.196574 0.754103\nv -0.316535 -0.217365 0.753622\nv -0.270955 -0.180723 0.843994\nv -0.305459 -0.175933 0.81927\nv -0.286714 -0.192761 0.818325\nv -0.302138 -0.149182 0.847081\nv -0.333531 -0.137099 0.822035\nv -0.338921 -0.165557 0.789932\nv -0.32102 -0.157276 0.820575\nv -0.370103 -0.149501 0.755545\nv -0.355682 -0.173848 0.754776\nv -0.238881 -0.158821 0.883554\nv -0.27011 -0.156247 0.867431\nv -0.254927 -0.169263 0.865651\nv -0.206277 -0.143046 0.909411\nv -0.232314 -0.139646 0.901728\nv -0.223068 -0.149837 0.897958\nv -0.217504 -0.122347 0.920204\nv -0.246747 -0.114847 0.910018\nv -0.26182 -0.134273 0.889281\nv -0.240207 -0.127841 0.905917\nv -0.292213 -0.125234 0.87241\nv -0.282434 -0.14145 0.869826\nv -0.276365 -0.104386 0.895496\nv -0.305107 -0.0898567 0.876671\nv -0.32204 -0.111757 0.850878\nv -0.29976 -0.107962 0.874754\nv -0.22655 -0.098132 0.929259\nv -0.255714 -0.0866916 0.916258\nv -0.251935 -0.101089 0.913524\nv -0.231488 -0.0719656 0.93442\nv -0.283674 -0.071492 0.899357\nv -0.258027 -0.0717803 0.918041\nv -0.331734 -0.0707623 0.853486\nv -0.308289 -0.0711397 0.877971\nv -0.362883 -0.119757 0.79206\nv -0.389008 -0.0971972 0.756987\nv -0.381186 -0.123846 0.756314\nv -0.349877 -0.0933809 0.824656\nv -0.343124 -0.115707 0.823447\nv -0.374549 -0.0700875 0.793632\nv -0.353867 -0.0703986 0.825506\nv -0.393641 -0.069868 0.757468\nv -0.321104 0.311363 0.42989\nv -0.28473 0.358775 0.389243\nv -0.327103 0.334219 0.32882\nv -0.324786 0.323728 0.378567\nv -0.309932 0.281582 0.533694\nv -0.277785 0.329173 0.490403\nv -0.316129 0.297267 0.481897\nv -0.23183 0.338898 0.54863\nv -0.191919 0.3839 0.508473\nv -0.23939 0.375682 0.449938\nv -0.236168 0.358316 0.499462\nv -0.195585 0.418747 0.412558\nv -0.242066 0.403263 0.35284\nv -0.241391 0.390747 0.400813\nv -0.294162 0.246022 0.63309\nv -0.266101 0.292335 0.590365\nv -0.302585 0.264452 0.584389\nv -0.274372 0.205829 0.720936\nv -0.250414 0.2498 0.682549\nv -0.284734 0.226433 0.678903\nv -0.205402 0.245664 0.726652\nv -0.173463 0.289016 0.690317\nv -0.220222 0.294897 0.64288\nv -0.213161 0.27081 0.686453\nv -0.184263 0.339838 0.602913\nv -0.226479 0.317675 0.596687\nv -0.136167 0.331807 0.652363\nv -0.0941843 0.3721 0.613271\nv -0.143195 0.38275 0.563206\nv -0.139993 0.358188 0.608599\nv -0.127009 0.275046 0.732402\nv -0.0886872 0.315228 0.696749\nv -0.131808 0.303971 0.693848\nv -0.0429646 0.29115 0.736248\nv -0.0460614 0.352422 0.658594\nv -0.0445881 0.32234 0.698726\nv -0.0484146 0.407465 0.572909\nv -0.0473487 0.380947 0.616453\nv -0.147356 0.42496 0.470136\nv -0.0994412 0.459381 0.433258\nv -0.147913 0.455522 0.378359\nv -0.148132 0.441879 0.42376\nv -0.0979492 0.421254 0.523785\nv -0.14568 0.405129 0.516835\nv -0.0497392 0.452686 0.484022\nv -0.0492233 0.431528 0.528564\nv -0.0497501 0.484494 0.396761\nv -0.0499267 0.470491 0.439887\nv -0.251321 0.162507 0.791233\nv -0.231462 0.203105 0.760374\nv -0.26315 0.184353 0.758297\nv -0.226858 0.119699 0.844829\nv -0.210605 0.154949 0.82151\nv -0.239139 0.140788 0.819994\nv -0.17072 0.14153 0.8485\nv -0.146186 0.177426 0.825457\nv -0.188331 0.193394 0.794898\nv -0.179478 0.167183 0.823413\nv -0.160364 0.233891 0.765127\nv -0.197048 0.219706 0.762722\nv -0.203467 0.0813259 0.883637\nv -0.189829 0.10919 0.867879\nv -0.214732 0.0997375 0.865985\nv -0.187692 0.0498232 0.909411\nv -0.172742 0.0685609 0.901728\nv -0.193767 0.0648846 0.897958\nv -0.144008 0.0511453 0.920204\nv -0.121526 0.0738625 0.910018\nv -0.154684 0.0934761 0.889423\nv -0.148422 0.0714913 0.905917\nv -0.132523 0.123092 0.873095\nv -0.162286 0.116892 0.870394\nv -0.0965104 0.101086 0.895694\nv -0.0680582 0.13166 0.877547\nv -0.105919 0.15634 0.852854\nv -0.100964 0.128038 0.875545\nv -0.0899596 0.0527364 0.929259\nv -0.0626217 0.0773993 0.916258\nv -0.0927707 0.0758606 0.913524\nv -0.0305789 0.0539478 0.93442\nv -0.0327869 0.105182 0.899591\nv -0.0315432 0.0783918 0.918041\nv -0.0358873 0.164084 0.855824\nv -0.0342537 0.133889 0.878906\nv -0.116526 0.215443 0.798974\nv -0.0819987 0.253953 0.769257\nv -0.121863 0.245395 0.767376\nv -0.0748291 0.191629 0.829038\nv -0.111159 0.185617 0.827398\nv -0.03943 0.227219 0.801812\nv -0.0376315 0.195337 0.83018\nv -0.0412265 0.259299 0.770555\nv -0.190101 0.0215793 0.92592\nv -0.165923 0.0336636 0.92592\nv -0.187297 0.0355513 0.918459\nv -0.19723 -0.00668079 0.938395\nv -0.16862 0.00321359 0.943236\nv -0.193623 0.00741744 0.932614\nv -0.144031 -0.0138297 0.95948\nv -0.115472 -0.00148885 0.95948\nv -0.141662 0.0157874 0.943236\nv -0.142551 0.000364153 0.952161\nv -0.115901 0.0322152 0.938395\nv -0.141951 0.0326459 0.932614\nv -0.20266 -0.0339057 0.946663\nv -0.173247 -0.0242039 0.955124\nv -0.20029 -0.0204619 0.943121\nv -0.204757 -0.0596997 0.949676\nv -0.176248 -0.0491235 0.961448\nv -0.204197 -0.0469917 0.94889\nv -0.148106 -0.0615459 0.97297\nv -0.118752 -0.0519101 0.980805\nv -0.146808 -0.0392644 0.969505\nv -0.147735 -0.0507404 0.972088\nv -0.117175 -0.0290045 0.973606\nv -0.145512 -0.027 0.965281\nv -0.0889159 -0.042096 0.984779\nv -0.0590978 -0.0312089 0.984779\nv -0.0877836 -0.017312 0.973606\nv -0.0883277 -0.0303714 0.98011\nv -0.0896038 -0.0623975 0.988537\nv -0.059752 -0.0531773 0.992449\nv -0.089393 -0.0526999 0.987593\nv -0.0299913 -0.0626337 0.99634\nv -0.0297771 -0.0431567 0.992449\nv -0.029923 -0.0534098 0.995366\nv -0.0294887 -0.0185649 0.980805\nv -0.0296127 -0.0316249 0.987593\nv -0.0875295 0.0136863 0.955124\nv -0.0595108 0.0321495 0.946663\nv -0.0882911 0.0320889 0.943121\nv -0.0586902 -0.003407 0.969505\nv -0.087439 -0.0027034 0.965281\nv -0.0295986 0.0131379 0.961448\nv -0.0294644 -0.00372716 0.972088\nv -0.0299504 0.0322797 0.94889\nv -0.20266 -0.0839563 0.946663\nv -0.176248 -0.0719429 0.961448\nv -0.204197 -0.0720092 0.94889\nv -0.19723 -0.106907 0.938395\nv -0.173247 -0.0933975 0.955124\nv -0.20029 -0.0955771 0.943121\nv -0.144031 -0.101544 0.95948\nv -0.117175 -0.090059 0.973606\nv -0.146808 -0.0817287 0.969505\nv -0.145512 -0.091567 0.965281\nv -0.118752 -0.0716079 0.980805\nv -0.147735 -0.0717985 0.972088\nv -0.190101 -0.128757 0.92592\nv -0.16862 -0.114561 0.943236\nv -0.193623 -0.117983 0.932614\nv -0.165923 -0.136965 0.92592\nv -0.187297 -0.13918 0.918459\nv -0.115901 -0.13356 0.938395\nv -0.141662 -0.122966 0.943236\nv -0.141951 -0.135131 0.932614\nv -0.115472 -0.109783 0.95948\nv -0.142551 -0.11189 0.952161\nv -0.0875295 -0.119282 0.955124\nv -0.0586902 -0.106746 0.969505\nv -0.0877836 -0.0980405 0.973606\nv -0.087439 -0.108051 0.965281\nv -0.0595108 -0.130975 0.946663\nv -0.0882911 -0.132137 0.943121\nv -0.0295986 -0.117114 0.961448\nv -0.0299504 -0.130187 0.94889\nv -0.0294887 -0.0961639 0.980805\nv -0.0294644 -0.105921 0.972088\nv -0.0889159 -0.0800938 0.984779\nv -0.059752 -0.0712157 0.992449\nv -0.089393 -0.071403 0.987593\nv -0.0590978 -0.0879535 0.984779\nv -0.0883277 -0.0888472 0.98011\nv -0.0297771 -0.0791855 0.992449\nv -0.0296127 -0.0873998 0.987593\nv -0.029923 -0.0710778 0.995366\nv -0.301414 0.274116 -0.394292\nv -0.30762 0.237846 -0.434027\nv -0.337128 0.210883 -0.393485\nv -0.332687 0.250025 -0.353403\nv -0.32053 0.244384 -0.394026\nv -0.278869 0.256471 -0.473159\nv -0.279492 0.221926 -0.511096\nv -0.307358 0.20029 -0.473009\nv -0.293945 0.230373 -0.47314\nv -0.301653 0.161614 -0.510934\nv -0.328785 0.130569 -0.472494\nv -0.335557 0.171016 -0.433283\nv -0.319006 0.166823 -0.472787\nv -0.362766 0.135069 -0.391796\nv -0.365855 0.17653 -0.351411\nv -0.351206 0.174237 -0.392724\nv -0.253248 0.235058 -0.54779\nv -0.248206 0.201959 -0.582465\nv -0.274432 0.185696 -0.547508\nv -0.26425 0.212468 -0.547627\nv -0.223696 0.209825 -0.616376\nv -0.213669 0.17764 -0.645988\nv -0.238793 0.166711 -0.614641\nv -0.23135 0.190363 -0.615341\nv -0.22621 0.129773 -0.643919\nv -0.252054 0.109242 -0.614006\nv -0.264939 0.147981 -0.58195\nv -0.245777 0.139471 -0.614216\nv -0.29155 0.122027 -0.547362\nv -0.283598 0.155348 -0.547422\nv -0.277942 0.0819708 -0.581842\nv -0.303019 0.0488823 -0.547274\nv -0.317684 0.0897238 -0.510656\nv -0.298089 0.0863372 -0.547315\nv -0.236531 0.0702994 -0.643348\nv -0.261498 0.0422201 -0.613986\nv -0.257378 0.0766248 -0.613949\nv -0.242671 0.00389388 -0.643467\nv -0.265142 -0.0295503 -0.6141\nv -0.28537 0.0087711 -0.581894\nv -0.264169 0.0066283 -0.614057\nv -0.307259 -0.0289058 -0.547168\nv -0.326354 0.0110593 -0.510311\nv -0.306141 0.0102666 -0.547228\nv -0.354678 0.0935566 -0.432088\nv -0.378327 0.0516594 -0.389654\nv -0.387843 0.0934676 -0.34844\nv -0.371806 0.0940024 -0.390755\nv -0.342324 0.0521051 -0.471776\nv -0.336592 0.0921303 -0.472151\nv -0.347147 -0.0303051 -0.471016\nv -0.364578 0.0103134 -0.43072\nv -0.345877 0.0110934 -0.471391\nv -0.383807 -0.0343621 -0.387489\nv -0.398993 0.00608835 -0.345124\nv -0.382327 0.00866357 -0.388548\nv -0.364852 -0.0738683 -0.42946\nv -0.379026 -0.118327 -0.385704\nv -0.399651 -0.0803567 -0.3421\nv -0.382766 -0.0767945 -0.386532\nv -0.326432 -0.0695741 -0.509951\nv -0.342401 -0.112082 -0.470368\nv -0.346033 -0.0714907 -0.470671\nv -0.316853 -0.148187 -0.509637\nv -0.327048 -0.189957 -0.469933\nv -0.354677 -0.155157 -0.42852\nv -0.336117 -0.151698 -0.470118\nv -0.362738 -0.197461 -0.384551\nv -0.389187 -0.162269 -0.339854\nv -0.372409 -0.158651 -0.385034\nv -0.285377 -0.0667739 -0.581858\nv -0.302789 -0.106708 -0.546986\nv -0.306173 -0.068031 -0.547084\nv -0.242671 -0.0647673 -0.643467\nv -0.261179 -0.101482 -0.613948\nv -0.264169 -0.0657151 -0.614057\nv -0.235282 -0.131869 -0.643074\nv -0.248863 -0.170282 -0.61362\nv -0.276719 -0.140659 -0.581667\nv -0.256101 -0.136466 -0.613795\nv -0.288747 -0.181116 -0.546787\nv -0.297012 -0.144537 -0.546884\nv -0.258749 -0.209717 -0.581436\nv -0.264373 -0.248923 -0.546649\nv -0.296714 -0.221606 -0.50944\nv -0.277899 -0.216045 -0.546706\nv -0.219967 -0.194459 -0.642551\nv -0.227623 -0.232875 -0.613293\nv -0.239394 -0.202547 -0.613446\nv -0.196187 -0.249581 -0.642158\nv -0.196887 -0.286185 -0.613141\nv -0.230817 -0.270782 -0.581276\nv -0.213478 -0.260883 -0.613184\nv -0.228905 -0.306925 -0.546651\nv -0.265114 -0.286658 -0.509432\nv -0.248073 -0.27935 -0.546628\nv -0.332813 -0.230733 -0.428043\nv -0.333519 -0.26931 -0.384255\nv -0.365994 -0.237704 -0.338725\nv -0.349834 -0.23445 -0.384282\nv -0.300026 -0.260878 -0.469804\nv -0.315062 -0.226477 -0.469824\nv -0.260269 -0.321794 -0.470074\nv -0.298017 -0.297779 -0.428174\nv -0.281806 -0.292777 -0.469883\nv -0.289946 -0.331416 -0.385043\nv -0.328469 -0.304715 -0.339052\nv -0.313616 -0.301735 -0.3845\nv -0.221799 -0.0316244 -0.669967\nv -0.199458 -0.0629545 -0.69384\nv -0.21856 -0.0956796 -0.66964\nv -0.221007 -0.0638428 -0.669873\nv -0.17888 -0.034564 -0.716089\nv -0.15784 -0.0613369 -0.7367\nv -0.176506 -0.0893004 -0.715526\nv -0.178308 -0.0621149 -0.715928\nv -0.153779 -0.11025 -0.735527\nv -0.168861 -0.141313 -0.714324\nv -0.193673 -0.121372 -0.693085\nv -0.173386 -0.115805 -0.714965\nv -0.208425 -0.156799 -0.668939\nv -0.214389 -0.126782 -0.669313\nv -0.138682 -0.0378547 -0.756952\nv -0.120076 -0.0600162 -0.77655\nv -0.137179 -0.0830646 -0.756146\nv -0.138335 -0.0606331 -0.75672\nv -0.103502 -0.0409822 -0.797043\nv -0.088428 -0.0590942 -0.817888\nv -0.10274 -0.0776926 -0.796039\nv -0.103346 -0.059499 -0.796751\nv -0.0871861 -0.0914872 -0.816083\nv -0.0996638 -0.112155 -0.793926\nv -0.117612 -0.0998418 -0.774995\nv -0.101556 -0.0953242 -0.795049\nv -0.131998 -0.125781 -0.754434\nv -0.135104 -0.104873 -0.755346\nv -0.111708 -0.136266 -0.772942\nv -0.122254 -0.163792 -0.752734\nv -0.144865 -0.155368 -0.733969\nv -0.127752 -0.145513 -0.753525\nv -0.0836378 -0.120876 -0.813722\nv -0.0932445 -0.14246 -0.791849\nv -0.0969362 -0.127947 -0.792811\nv -0.0767353 -0.145492 -0.812028\nv -0.0824548 -0.166698 -0.790956\nv -0.101395 -0.167229 -0.771434\nv -0.0884602 -0.155457 -0.791183\nv -0.10706 -0.194885 -0.751968\nv -0.130307 -0.194324 -0.732809\nv -0.115393 -0.180341 -0.752177\nv -0.18149 -0.17562 -0.692079\nv -0.190839 -0.212162 -0.668238\nv -0.200598 -0.185376 -0.668565\nv -0.15525 -0.18808 -0.713124\nv -0.162845 -0.16551 -0.713684\nv -0.13498 -0.227078 -0.71257\nv -0.162297 -0.223025 -0.691326\nv -0.145991 -0.208708 -0.712726\nv -0.165245 -0.258952 -0.667911\nv -0.179078 -0.236805 -0.668004\nv -0.189354 0.18072 -0.677111\nv -0.176282 0.148983 -0.699856\nv -0.200884 0.142944 -0.672071\nv -0.19515 0.163753 -0.674138\nv -0.152321 0.148517 -0.728289\nv -0.139444 0.117913 -0.744262\nv -0.162474 0.11549 -0.719678\nv -0.157551 0.133609 -0.723208\nv -0.148123 0.0819932 -0.738068\nv -0.170923 0.0714825 -0.7162\nv -0.186484 0.10702 -0.695126\nv -0.166971 0.0946256 -0.717431\nv -0.211295 0.0920121 -0.670034\nv -0.206338 0.118846 -0.670755\nv -0.117651 0.114822 -0.768307\nv -0.106687 0.0870359 -0.780774\nv -0.126656 0.0869249 -0.759561\nv -0.122447 0.102175 -0.763081\nv -0.0882194 0.0833953 -0.8018\nv -0.0793673 0.061115 -0.817203\nv -0.0956175 0.0607274 -0.796421\nv -0.0922852 0.0731358 -0.798446\nv -0.0845372 0.0369825 -0.815646\nv -0.100317 0.0307401 -0.795278\nv -0.113581 0.0574659 -0.776309\nv -0.0982752 0.0464891 -0.795455\nv -0.133247 0.0501429 -0.756401\nv -0.130262 0.0694536 -0.757437\nv -0.117973 0.0212425 -0.775694\nv -0.137298 0.00753115 -0.756355\nv -0.154426 0.037901 -0.736354\nv -0.135598 0.0293747 -0.756143\nv -0.0873334 0.00734081 -0.816528\nv -0.102788 -0.00401389 -0.796206\nv -0.101802 0.0137994 -0.795618\nv -0.0884118 -0.0254661 -0.817918\nv -0.120069 -0.0188472 -0.776562\nv -0.103335 -0.0223808 -0.796771\nv -0.157838 -0.0109977 -0.736704\nv -0.138331 -0.015006 -0.756727\nv -0.194671 0.0549806 -0.693695\nv -0.218847 0.0323476 -0.669749\nv -0.215537 0.0629948 -0.669751\nv -0.176711 0.0202224 -0.715716\nv -0.174209 0.0465261 -0.715717\nv -0.199458 -0.00304234 -0.69384\nv -0.178308 -0.00696293 -0.715929\nv -0.221007 0.000623463 -0.669873\nv -0.249049 -0.353476 -0.429058\nv -0.231265 -0.381513 -0.387008\nv -0.275006 -0.361358 -0.341173\nv -0.262331 -0.358049 -0.385914\nv -0.22115 -0.340168 -0.509685\nv -0.207276 -0.369996 -0.470787\nv -0.235282 -0.347547 -0.470388\nv -0.165973 -0.380488 -0.510143\nv -0.143934 -0.404825 -0.471682\nv -0.187138 -0.396123 -0.430505\nv -0.176683 -0.389102 -0.471231\nv -0.160751 -0.418472 -0.38945\nv -0.206895 -0.405955 -0.344635\nv -0.197241 -0.401694 -0.388221\nv -0.192278 -0.320687 -0.581302\nv -0.182051 -0.352317 -0.546846\nv -0.206774 -0.331246 -0.546729\nv -0.163405 -0.294283 -0.642158\nv -0.156473 -0.327549 -0.613293\nv -0.177781 -0.308397 -0.613184\nv -0.122512 -0.327268 -0.642551\nv -0.108509 -0.356795 -0.61362\nv -0.144174 -0.357915 -0.581506\nv -0.133277 -0.343672 -0.613446\nv -0.126306 -0.384717 -0.547137\nv -0.155104 -0.37014 -0.546987\nv -0.089237 -0.382601 -0.581767\nv -0.0646346 -0.404143 -0.547403\nv -0.102787 -0.407493 -0.510629\nv -0.0960258 -0.396051 -0.547281\nv -0.075825 -0.348898 -0.643074\nv -0.0555127 -0.374162 -0.613948\nv -0.0824827 -0.366948 -0.613795\nv -0.0256613 -0.359532 -0.643467\nv -0.0302011 -0.394876 -0.581959\nv -0.0279136 -0.378466 -0.614057\nv -0.0347964 -0.421058 -0.510961\nv -0.0325025 -0.408996 -0.547489\nv -0.115981 -0.425138 -0.431992\nv -0.0823478 -0.441352 -0.391539\nv -0.128322 -0.437096 -0.348189\nv -0.122289 -0.43173 -0.390591\nv -0.0736919 -0.425961 -0.472452\nv -0.10946 -0.417124 -0.472102\nv -0.0392767 -0.439937 -0.432997\nv -0.0370615 -0.431294 -0.472692\nv -0.0434716 -0.453372 -0.35059\nv -0.0414205 -0.447219 -0.392191\nv -0.135481 -0.260912 -0.691328\nv -0.131426 -0.294767 -0.668238\nv -0.149272 -0.278251 -0.668004\nv -0.109317 -0.224749 -0.732831\nv -0.10767 -0.256208 -0.713142\nv -0.122129 -0.242875 -0.712735\nv -0.0823513 -0.245987 -0.734034\nv -0.0748448 -0.275921 -0.714357\nv -0.101727 -0.28829 -0.692086\nv -0.0918322 -0.267187 -0.71371\nv -0.0911854 -0.319704 -0.668939\nv -0.111975 -0.308563 -0.668565\nv -0.0857034 -0.190674 -0.771513\nv -0.0858384 -0.217276 -0.752824\nv -0.0971419 -0.207146 -0.752222\nv -0.0654305 -0.163567 -0.812219\nv -0.0665643 -0.183376 -0.7921\nv -0.0751 -0.175945 -0.79131\nv -0.049815 -0.174943 -0.814269\nv -0.0466254 -0.193505 -0.794392\nv -0.0648813 -0.206244 -0.77317\nv -0.0570166 -0.18917 -0.793176\nv -0.0598654 -0.231752 -0.7546\nv -0.0733469 -0.225428 -0.753655\nv -0.0403946 -0.21528 -0.775339\nv -0.0307247 -0.239527 -0.756365\nv -0.0511179 -0.259092 -0.735626\nv -0.0455921 -0.236401 -0.755543\nv -0.0311206 -0.181072 -0.816908\nv -0.0239874 -0.198512 -0.796652\nv -0.0355594 -0.196559 -0.7956\nv -0.0105788 -0.183411 -0.818864\nv -0.0137092 -0.219126 -0.776956\nv -0.0120781 -0.19954 -0.797402\nv -0.0173238 -0.265118 -0.736817\nv -0.0154613 -0.241281 -0.756953\nv -0.0630187 -0.305851 -0.693095\nv -0.0466631 -0.33428 -0.66964\nv -0.0693256 -0.328255 -0.669313\nv -0.0383418 -0.287092 -0.71557\nv -0.0569381 -0.28252 -0.715004\nv -0.0213366 -0.314286 -0.693851\nv -0.0192858 -0.289748 -0.715974\nv -0.0234653 -0.337843 -0.669873\nv -0.0214326 0.612764 0.171028\nv -0.0517772 0.574901 0.177045\nv -0.032119 0.55297 0.20572\nv -0.0264835 0.579032 0.187869\nv -0.0606722 0.605009 0.144583\nv -0.0940367 0.562813 0.135922\nv -0.0919292 0.539682 0.175235\nv -0.0746915 0.569198 0.159584\nv -0.143295 0.502693 0.164329\nv -0.129689 0.495157 0.217492\nv -0.0751025 0.526093 0.213735\nv -0.112091 0.514578 0.193221\nv -0.0424428 0.519349 0.250809\nv -0.0376639 0.533451 0.226169\nv -0.130051 0.536678 -0.00680558\nv -0.152619 0.511164 0.0394776\nv -0.119073 0.550395 0.0722588\nv -0.104345 0.581221 0.0259771\nv -0.126008 0.543831 0.034173\nv -0.187988 0.474807 -0.00187647\nv -0.218201 0.452081 0.0405712\nv -0.175691 0.487607 0.084535\nv -0.183558 0.48124 0.0416805\nv -0.199535 0.463955 0.131331\nv -0.133348 0.524179 0.116986\nv -0.163382 0.494231 0.126759\nv -0.0890355 0.594052 0.0947326\nv -0.108623 0.556634 0.106494\nv -0.367902 0.315544 0.017381\nv -0.331389 0.356178 0.0647418\nv -0.294768 0.389345 0.0294321\nv -0.333011 0.35149 -0.0193341\nv -0.33275 0.354216 0.0226969\nv -0.367467 0.31678 0.0992565\nv -0.328258 0.3563 0.149432\nv -0.287644 0.394628 0.116428\nv -0.329651 0.356999 0.10694\nv -0.236604 0.431849 0.172148\nv -0.250473 0.426328 0.0804567\nv -0.242614 0.430517 0.126223\nv -0.259042 0.416726 -0.00800859\nv -0.255928 0.421708 0.0359393\nv -0.286199 0.379603 0.293469\nv -0.32805 0.349176 0.236224\nv -0.365565 0.303149 0.271732\nv -0.327982 0.342691 0.281542\nv -0.194416 0.441923 0.320725\nv -0.239423 0.420871 0.261811\nv -0.241311 0.412982 0.306775\nv -0.187442 0.459019 0.23277\nv -0.284396 0.391924 0.204027\nv -0.236697 0.427897 0.217139\nv -0.366618 0.313108 0.183018\nv -0.327933 0.353702 0.192357\nv -0.0479374 0.501882 0.316391\nv -0.0981197 0.483168 0.346652\nv -0.0491738 0.494246 0.355248\nv -0.0920354 0.499377 0.269816\nv -0.0457805 0.509538 0.281231\nv -0.143844 0.473905 0.292452\nv -0.139239 0.482692 0.251996\nv -0.14661 0.465523 0.334581\nv -0.109497 0.564612 -0.0557193\nv -0.131948 0.519642 -0.0941171\nv -0.158967 0.496998 -0.0466461\nv -0.131824 0.528669 -0.0497193\nv -0.108519 0.54279 -0.145205\nv -0.129735 0.497885 -0.18556\nv -0.158182 0.479751 -0.136708\nv -0.131045 0.509435 -0.139548\nv -0.186763 0.443274 -0.18132\nv -0.221904 0.426077 -0.137465\nv -0.190088 0.460581 -0.0910605\nv -0.188835 0.452408 -0.136182\nv -0.223936 0.440007 -0.0481118\nv -0.189985 0.467984 -0.0462077\nv -0.106575 0.51479 -0.23814\nv -0.128381 0.470103 -0.277526\nv -0.154954 0.457936 -0.227906\nv -0.12864 0.484828 -0.231703\nv -0.108827 0.479645 -0.330184\nv -0.132854 0.434994 -0.366406\nv -0.153971 0.43007 -0.317435\nv -0.129579 0.453546 -0.322577\nv -0.181058 0.393337 -0.356983\nv -0.209746 0.386969 -0.312735\nv -0.182318 0.421367 -0.270635\nv -0.181021 0.408212 -0.314306\nv -0.215907 0.408871 -0.226126\nv -0.184412 0.432991 -0.226222\nv -0.243704 0.375486 -0.269973\nv -0.280545 0.358652 -0.228537\nv -0.252663 0.392384 -0.183748\nv -0.248335 0.384452 -0.227094\nv -0.235111 0.353855 -0.353874\nv -0.268291 0.342308 -0.312462\nv -0.239164 0.365336 -0.312272\nv -0.287993 0.3087 -0.35378\nv -0.321743 0.288047 -0.312993\nv -0.304016 0.324081 -0.271524\nv -0.296145 0.31688 -0.312853\nv -0.339707 0.298579 -0.230503\nv -0.318034 0.335888 -0.187963\nv -0.311386 0.330389 -0.229869\nv -0.258829 0.405735 -0.0961191\nv -0.296239 0.381261 -0.0569125\nv -0.259877 0.411451 -0.0520665\nv -0.290679 0.371333 -0.143128\nv -0.256293 0.399428 -0.140051\nv -0.354156 0.306287 -0.147495\nv -0.328286 0.344798 -0.103698\nv -0.323741 0.340663 -0.145881\nv -0.363938 0.31175 -0.0646427\nv -0.33145 0.348379 -0.061491\nv -0.256373 0.321389 -0.394225\nv -0.271272 0.289202 -0.43404\nv -0.27978 0.299457 -0.39423\nv -0.207222 0.358953 -0.395931\nv -0.22911 0.326676 -0.434645\nv -0.231939 0.340893 -0.394664\nv -0.207464 0.325437 -0.475402\nv -0.222318 0.295364 -0.512192\nv -0.244489 0.295954 -0.473151\nv -0.226082 0.311425 -0.47382\nv -0.25243 0.265854 -0.51109\nv -0.262234 0.277984 -0.473047\nv -0.159922 0.394668 -0.402494\nv -0.18592 0.3583 -0.438774\nv -0.182968 0.376551 -0.398413\nv -0.120435 0.436389 -0.416997\nv -0.146465 0.392077 -0.449356\nv -0.13883 0.414286 -0.40856\nv -0.13959 0.38744 -0.497829\nv -0.162563 0.345778 -0.528133\nv -0.171361 0.353224 -0.482697\nv -0.154723 0.369022 -0.489109\nv -0.191626 0.319194 -0.517002\nv -0.189083 0.339032 -0.478244\nv -0.180704 0.31021 -0.560079\nv -0.191528 0.279593 -0.593091\nv -0.204929 0.289067 -0.551885\nv -0.192718 0.299232 -0.555224\nv -0.157507 0.338602 -0.575517\nv -0.172836 0.301346 -0.605257\nv -0.168947 0.323001 -0.566744\nv -0.165401 0.295679 -0.652898\nv -0.168974 0.264027 -0.68325\nv -0.180366 0.2701 -0.636675\nv -0.173191 0.281469 -0.643988\nv -0.178982 0.243072 -0.668465\nv -0.194073 0.252493 -0.626117\nv -0.187227 0.260724 -0.630778\nv -0.229573 0.267033 -0.548566\nv -0.229588 0.23906 -0.583632\nv -0.241626 0.252863 -0.548006\nv -0.210419 0.261708 -0.586535\nv -0.217277 0.278718 -0.549762\nv -0.189096 0.227495 -0.657696\nv -0.208561 0.235652 -0.619796\nv -0.201205 0.24456 -0.622512\nv -0.200866 0.209224 -0.650365\nv -0.216079 0.224497 -0.617806\nv -0.154489 0.264476 -0.732809\nv -0.14453 0.238325 -0.762905\nv -0.162766 0.237365 -0.714519\nv -0.159146 0.249675 -0.723361\nv -0.123621 0.246714 -0.810795\nv -0.104233 0.22428 -0.834639\nv -0.127078 0.214191 -0.789712\nv -0.125951 0.229889 -0.800469\nv -0.103771 0.188709 -0.811765\nv -0.129345 0.185938 -0.768161\nv -0.148654 0.212484 -0.74352\nv -0.127536 0.199003 -0.779188\nv -0.169354 0.218362 -0.698838\nv -0.165964 0.227083 -0.706329\nv -0.0271901 0.200978 -0.888648\nv -0.0544314 0.220439 -0.886988\nv -0.0272805 0.239981 -0.913565\nv -0.0275051 0.220528 -0.902034\nv -0.0246564 0.161283 -0.863583\nv -0.0524605 0.181859 -0.861359\nv -0.0262642 0.181255 -0.875225\nv -0.0744048 0.163653 -0.83119\nv -0.079917 0.202818 -0.851701\nv -0.078521 0.183669 -0.83968\nv -0.0792852 0.240036 -0.875107\nv -0.0802003 0.22141 -0.864001\nv -0.0136681 0.0885148 -0.857088\nv -0.0323538 0.10384 -0.845874\nv -0.0194786 0.121401 -0.851505\nv -0.0165037 0.103565 -0.851885\nv -0.0390318 0.0886167 -0.846477\nv -0.0594789 0.102778 -0.828784\nv -0.0558912 0.121886 -0.832382\nv -0.0468967 0.103722 -0.83771\nv -0.0844006 0.141885 -0.81231\nv -0.0443595 0.141572 -0.845167\nv -0.0659611 0.142461 -0.829483\nv -0.0222954 0.140986 -0.85554\nv -0.0970829 0.107166 -0.791453\nv -0.0772557 0.0968129 -0.813063\nv -0.071168 0.0773944 -0.823128\nv -0.0833614 0.0911869 -0.806753\nv -0.128906 0.142294 -0.757352\nv -0.105628 0.131966 -0.78515\nv -0.112281 0.124484 -0.775546\nv -0.11426 0.158209 -0.781184\nv -0.0822015 0.118201 -0.809113\nv -0.0969787 0.138077 -0.797468\nv -0.0584782 0.0857965 -0.833486\nv -0.0694467 0.100576 -0.820488\nv -0.178392 0.202839 -0.686167\nv -0.165451 0.176774 -0.709605\nv -0.183714 0.193291 -0.681147\nv -0.155163 0.193904 -0.72504\nv -0.173551 0.210739 -0.692091\nv -0.141056 0.16866 -0.744268\nv -0.134527 0.176606 -0.755889\nv -0.146905 0.159749 -0.735189\nv -0.0149263 0.704329 0.13577\nv -0.0345935 0.652775 0.14404\nv -0.0176416 0.655292 0.153605\nv -0.0119854 0.812786 0.0995372\nv -0.0257816 0.755799 0.108847\nv -0.0131023 0.75759 0.117691\nv -0.034531 0.808126 0.076987\nv -0.0481798 0.748362 0.0748555\nv -0.0426536 0.698968 0.111755\nv -0.0376151 0.752741 0.0944763\nv -0.0636698 0.644262 0.107473\nv -0.0501661 0.648995 0.128549\nv -0.0111356 0.919844 0.063683\nv -0.0224595 0.866007 0.0731619\nv -0.0113912 0.867634 0.0814782\nv -0.0109027 1.00721 0.02956\nv -0.021745 0.965433 0.0386799\nv -0.0110342 0.967133 0.0463206\nv -0.0313467 1.00201 0.0104174\nv -0.0409032 0.956621 0.00833092\nv -0.0321476 0.914975 0.0424755\nv -0.0318092 0.962063 0.0260024\nv -0.042335 0.858139 0.0408732\nv -0.0328817 0.862933 0.0595618\nv -0.0493821 0.902479 0.0011097\nv -0.0571458 0.842278 -0.0108912\nv -0.0528015 0.797376 0.0338196\nv -0.0504963 0.851352 0.0172913\nv -0.0477064 0.98797 -0.0284802\nv -0.0550076 0.93795 -0.0415996\nv -0.0487038 0.948703 -0.0142919\nv -0.0579784 0.961716 -0.0864028\nv -0.0623106 0.906503 -0.109204\nv -0.0606807 0.87967 -0.0587882\nv -0.059611 0.924003 -0.0733258\nv -0.0650303 0.816085 -0.0798878\nv -0.0646362 0.778756 -0.0276981\nv -0.0620637 0.83062 -0.0433818\nv -0.0640056 0.689091 0.0661828\nv -0.0825571 0.632648 0.0501658\nv -0.0744148 0.638889 0.081151\nv -0.0641218 0.735226 0.0210732\nv -0.0570529 0.742604 0.0502612\nv -0.0723981 0.714628 -0.0495649\nv -0.0768544 0.674199 0.00213464\nv -0.0692744 0.725982 -0.0123288\nv -0.0916572 0.616652 -0.0234619\nv -0.0882526 0.625311 0.0151005\nv -0.0811949 0.652452 -0.0766817\nv -0.0927221 0.594629 -0.108716\nv -0.0929269 0.606445 -0.0649382\nv -0.0685643 0.750132 -0.104965\nv -0.0728865 0.684965 -0.133701\nv -0.0733807 0.70092 -0.0902555\nv -0.0664635 0.711248 -0.193784\nv -0.0701261 0.646748 -0.226056\nv -0.0796919 0.623006 -0.165758\nv -0.0715802 0.666872 -0.179201\nv -0.0905311 0.565938 -0.200729\nv -0.0917033 0.581146 -0.154184\nv -0.0642453 0.843933 -0.135015\nv -0.0650836 0.777793 -0.163328\nv -0.0658258 0.798375 -0.120117\nv -0.0608785 0.920134 -0.161278\nv -0.0619551 0.860251 -0.191856\nv -0.0629029 0.885091 -0.148967\nv -0.0578491 0.863915 -0.248985\nv -0.0577082 0.802226 -0.283966\nv -0.0615954 0.795543 -0.223465\nv -0.0600345 0.832468 -0.237109\nv -0.0615189 0.729211 -0.255736\nv -0.0634368 0.754638 -0.208781\nv -0.057568 0.737668 -0.318127\nv -0.059403 0.672743 -0.351189\nv -0.0635599 0.663728 -0.28836\nv -0.0599632 0.701812 -0.303452\nv -0.0530592 0.797554 -0.343356\nv -0.0541077 0.736304 -0.37945\nv -0.0555436 0.77001 -0.331667\nv -0.0506779 0.725549 -0.438222\nv -0.0556913 0.666363 -0.472225\nv -0.057 0.673474 -0.412989\nv -0.0539679 0.701594 -0.426557\nv -0.0638022 0.610794 -0.443764\nv -0.0650798 0.609194 -0.382899\nv -0.0604715 0.642303 -0.398207\nv -0.0776805 0.58601 -0.259787\nv -0.0903681 0.530111 -0.294603\nv -0.0898659 0.548946 -0.24774\nv -0.0694326 0.600834 -0.321032\nv -0.0691888 0.624699 -0.273566\nv -0.0761219 0.548086 -0.413032\nv -0.0804959 0.541616 -0.353461\nv -0.0715222 0.575261 -0.367754\nv -0.097517 0.486675 -0.385441\nv -0.0926983 0.509373 -0.340708\nv -0.0934731 0.489974 -0.44147\nv -0.115481 0.435977 -0.469324\nv -0.105485 0.461958 -0.428191\nv -0.0762495 0.549271 -0.471606\nv -0.0937727 0.489983 -0.497482\nv -0.0838962 0.519418 -0.456165\nv -0.09563 0.487491 -0.552719\nv -0.115541 0.431716 -0.575975\nv -0.11484 0.434175 -0.522587\nv -0.104679 0.460506 -0.53731\nv -0.137081 0.383248 -0.548209\nv -0.126387 0.409488 -0.509208\nv -0.0647285 0.606129 -0.502041\nv -0.0782139 0.546088 -0.528508\nv -0.0700284 0.578515 -0.487121\nv -0.054874 0.652395 -0.527414\nv -0.0656789 0.596288 -0.55708\nv -0.0598452 0.631096 -0.515695\nv -0.0651245 0.582102 -0.608073\nv -0.079383 0.530028 -0.634043\nv -0.0797836 0.539447 -0.582967\nv -0.0724417 0.562434 -0.596492\nv -0.0967178 0.483278 -0.606298\nv -0.0874224 0.514136 -0.568157\nv -0.0953888 0.477888 -0.657145\nv -0.111825 0.427336 -0.678979\nv -0.115117 0.429295 -0.62851\nv -0.105164 0.454138 -0.643161\nv -0.0762139 0.518189 -0.680653\nv -0.0907983 0.471541 -0.704017\nv -0.085752 0.499566 -0.669847\nv -0.0829268 0.464178 -0.745605\nv -0.0939195 0.424785 -0.767904\nv -0.104768 0.425912 -0.725955\nv -0.093771 0.446449 -0.736665\nv -0.116045 0.383233 -0.748399\nv -0.126607 0.380123 -0.70125\nv -0.115764 0.403493 -0.713981\nv -0.135717 0.380251 -0.599662\nv -0.153355 0.334537 -0.625031\nv -0.146443 0.358012 -0.586694\nv -0.132847 0.3791 -0.651128\nv -0.125288 0.404339 -0.613805\nv -0.13711 0.337947 -0.725558\nv -0.147225 0.334236 -0.675546\nv -0.137145 0.356728 -0.688269\nv -0.155343 0.295891 -0.702726\nv -0.156695 0.313578 -0.663586\nv -0.140485 0.302163 -0.753089\nv -0.135989 0.272173 -0.782405\nv -0.14818 0.282232 -0.742819\nv -0.121996 0.345416 -0.773211\nv -0.121513 0.312815 -0.800268\nv -0.131668 0.323485 -0.763319\nv -0.0997471 0.325848 -0.840926\nv -0.089826 0.300739 -0.866572\nv -0.114031 0.285033 -0.828141\nv -0.107335 0.305408 -0.835114\nv -0.0996581 0.26113 -0.854226\nv -0.119554 0.265282 -0.820027\nv -0.101143 0.387978 -0.790775\nv -0.103382 0.354851 -0.815178\nv -0.111732 0.367175 -0.782463\nv -0.0800478 0.423589 -0.80338\nv -0.0838772 0.392882 -0.825823\nv -0.0904932 0.407043 -0.797847\nv -0.066124 0.39706 -0.852095\nv -0.0626167 0.37393 -0.873184\nv -0.083026 0.364682 -0.84897\nv -0.0744566 0.381958 -0.851159\nv -0.0767933 0.33953 -0.872588\nv -0.0915502 0.345792 -0.845552\nv -0.0542138 0.352757 -0.893894\nv -0.0407655 0.333461 -0.912723\nv -0.064893 0.31732 -0.89519\nv -0.0596677 0.335595 -0.895293\nv -0.0434647 0.382345 -0.887527\nv -0.0333426 0.365103 -0.904776\nv -0.0487425 0.368456 -0.891228\nv -0.01512 0.376656 -0.906406\nv -0.0188043 0.34868 -0.91929\nv -0.0169256 0.363437 -0.913316\nv -0.0224718 0.31542 -0.926863\nv -0.0206788 0.332602 -0.923936\nv -0.0738131 0.278818 -0.88955\nv -0.0525058 0.258976 -0.906454\nv -0.0770857 0.259289 -0.883545\nv -0.0475518 0.297368 -0.914157\nv -0.0696785 0.298278 -0.893354\nv -0.0255035 0.278608 -0.925997\nv -0.0241058 0.297349 -0.92768\nv -0.0265875 0.259413 -0.921423\nv -0.00926811 0.0696138 -0.882606\nv -0.0221743 0.0774254 -0.864213\nv -0.0112693 0.077288 -0.867522\nv -0.00630153 0.0638405 -0.924398\nv -0.0150683 0.0650394 -0.899939\nv -0.00762528 0.0652216 -0.901758\nv -0.0184275 0.0624492 -0.920945\nv -0.0286782 0.0631084 -0.894638\nv -0.026755 0.0692444 -0.876848\nv -0.0221467 0.0644151 -0.897434\nv -0.041434 0.0763382 -0.854706\nv -0.0323506 0.0772179 -0.859693\nv -0.00445433 0.0690294 -0.977819\nv -0.0104468 0.0644884 -0.948645\nv -0.00525763 0.0652 -0.949946\nv -0.00341251 0.0830153 -1.03822\nv -0.007707 0.0736096 -1.00589\nv -0.00385237 0.0750581 -1.00744\nv -0.0103372 0.0779051 -1.0337\nv -0.0154321 0.0672466 -1.00154\nv -0.0132494 0.0660137 -0.974668\nv -0.0115662 0.0710437 -1.00379\nv -0.020346 0.0607537 -0.944921\nv -0.0154991 0.0630654 -0.946871\nv -0.0217037 0.0587879 -0.970922\nv -0.0291405 0.0528274 -0.941437\nv -0.029122 0.0580213 -0.916571\nv -0.0249191 0.0573756 -0.943091\nv -0.0175609 0.0671713 -1.02819\nv -0.0232415 0.0553451 -0.997994\nv -0.0193071 0.0621043 -0.999483\nv -0.0258155 0.049124 -1.02608\nv -0.0311482 0.0364974 -0.996432\nv -0.0294798 0.0462959 -0.968238\nv -0.0272858 0.0466971 -0.997427\nv -0.0362158 0.039806 -0.938884\nv -0.0377075 0.0490944 -0.913025\nv -0.032932 0.0470054 -0.940017\nv -0.0410938 0.0662555 -0.86962\nv -0.0553822 0.0713135 -0.845779\nv -0.0490601 0.0744589 -0.849998\nv -0.0395472 0.0575214 -0.88952\nv -0.0344806 0.0608788 -0.891946\nv -0.0474456 0.0466041 -0.88612\nv -0.0514705 0.058563 -0.863829\nv -0.0438711 0.0528315 -0.887523\nv -0.0647275 0.0601576 -0.839647\nv -0.0605536 0.0666352 -0.842259\nv -0.0583557 0.0442484 -0.861004\nv -0.0706368 0.0412733 -0.837559\nv -0.0680572 0.0516139 -0.838152\nv -0.0437831 0.0343882 -0.911265\nv -0.0524113 0.0291629 -0.885433\nv -0.0502641 0.0386345 -0.885472\nv -0.0474004 0.0142273 -0.911428\nv -0.0550315 0.00667443 -0.886598\nv -0.0623656 0.0233546 -0.861161\nv -0.0539721 0.0184294 -0.885857\nv -0.0739228 0.0162781 -0.838215\nv -0.0725606 0.029405 -0.837652\nv -0.0357879 0.0282294 -0.965662\nv -0.0410556 0.0212201 -0.937656\nv -0.0389139 0.0311254 -0.938097\nv -0.0358836 0.0196847 -1.01991\nv -0.0372973 0.013053 -0.990702\nv -0.0345368 0.0250835 -0.993654\nv -0.0408796 -0.00573091 -1.01351\nv -0.0405644 -0.0110995 -0.988704\nv -0.0399169 0.00615045 -0.963672\nv -0.039275 0.00100339 -0.989183\nv -0.0437874 -0.00123921 -0.937811\nv -0.0426703 0.0103464 -0.93756\nv -0.0418249 -0.0177498 -0.963888\nv -0.0447156 -0.0256267 -0.939124\nv -0.0490631 -0.00945871 -0.912821\nv -0.0444364 -0.0132804 -0.938408\nv -0.0427717 -0.0303235 -1.01299\nv -0.0414578 -0.0354762 -0.989395\nv -0.0412597 -0.0232898 -0.988876\nv -0.0424315 -0.0544375 -1.01412\nv -0.0407499 -0.0594704 -0.990275\nv -0.0420121 -0.0422315 -0.96506\nv -0.0412556 -0.0475669 -0.989963\nv -0.0445592 -0.0506337 -0.939997\nv -0.0494136 -0.0349527 -0.914295\nv -0.0447237 -0.038128 -0.93973\nv -0.0642616 -0.00211374 -0.862803\nv -0.0753386 -0.0126748 -0.839888\nv -0.0748173 0.00216178 -0.839033\nv -0.0559989 -0.0189605 -0.888399\nv -0.0556742 -0.00586187 -0.887509\nv -0.0560893 -0.0459684 -0.889344\nv -0.0648191 -0.0301734 -0.864391\nv -0.0561044 -0.0324023 -0.889074\nv -0.0756377 -0.0434321 -0.840848\nv -0.0755806 -0.0279625 -0.840565\nv -0.0648274 -0.0588622 -0.864336\nv -0.075352 -0.0739048 -0.839743\nv -0.0756039 -0.0588145 -0.840522\nv -0.0492321 -0.0607495 -0.91424\nv -0.0558896 -0.0726458 -0.888248\nv -0.0560522 -0.0594398 -0.889015\nv -0.0485672 -0.0854987 -0.912505\nv -0.0547726 -0.09758 -0.886045\nv -0.0642093 -0.0864452 -0.862485\nv -0.0554976 -0.0854161 -0.887205\nv -0.0736849 -0.10239 -0.837458\nv -0.0747547 -0.0884982 -0.838669\nv -0.0412711 -0.0663748 -0.965066\nv -0.0439439 -0.0750841 -0.938995\nv -0.0443205 -0.0629937 -0.939696\nv -0.0405736 -0.077357 -1.01428\nv -0.0391055 -0.0823881 -0.989425\nv -0.0400376 -0.0710951 -0.990033\nv -0.0376119 -0.0987055 -1.01302\nv -0.0365294 -0.103767 -0.98788\nv -0.039841 -0.089351 -0.963549\nv -0.0379405 -0.0932965 -0.988644\nv -0.0425224 -0.0979607 -0.937061\nv -0.0433658 -0.086781 -0.938061\nv -0.0374066 -0.110423 -0.961917\nv -0.0397848 -0.118273 -0.935532\nv -0.0467358 -0.108005 -0.91039\nv -0.0413499 -0.108499 -0.936162\nv -0.033661 -0.118445 -1.01205\nv -0.0329166 -0.123185 -0.987166\nv -0.0348592 -0.113748 -0.987323\nv -0.0288349 -0.13654 -1.01308\nv -0.028162 -0.140217 -0.98881\nv -0.033653 -0.128854 -0.961577\nv -0.0306886 -0.132025 -0.987598\nv -0.0352216 -0.135031 -0.935745\nv -0.0430547 -0.127072 -0.909196\nv -0.0377633 -0.127158 -0.935337\nv -0.0620218 -0.111414 -0.860112\nv -0.0696186 -0.127248 -0.835251\nv -0.0720153 -0.115375 -0.836266\nv -0.0519087 -0.119407 -0.88402\nv -0.0536109 -0.108967 -0.88493\nv -0.0464682 -0.136762 -0.883458\nv -0.0573216 -0.132262 -0.858494\nv -0.0495624 -0.128729 -0.883475\nv -0.062135 -0.146841 -0.834383\nv -0.0663675 -0.137805 -0.834571\nv -0.0491656 -0.14748 -0.858907\nv -0.050482 -0.159911 -0.835788\nv -0.0567936 -0.154151 -0.834844\nv -0.0368406 -0.141505 -0.910226\nv -0.0378317 -0.148589 -0.885302\nv -0.0425225 -0.143337 -0.884127\nv -0.0281113 -0.151111 -0.913346\nv -0.0266404 -0.155672 -0.888439\nv -0.0375729 -0.156959 -0.861296\nv -0.0325021 -0.152655 -0.8868\nv -0.0355027 -0.167485 -0.838457\nv -0.0433389 -0.164297 -0.837047\nv -0.028265 -0.143906 -0.963939\nv -0.0284597 -0.147422 -0.938653\nv -0.0320961 -0.141767 -0.936923\nv -0.0232481 -0.15295 -1.01781\nv -0.0222125 -0.154424 -0.993853\nv -0.0253236 -0.147706 -0.990994\nv -0.0170456 -0.167058 -1.02566\nv -0.0153279 -0.165267 -1.00041\nv -0.0213092 -0.155208 -0.968706\nv -0.0188676 -0.160301 -0.997092\nv -0.0199462 -0.155716 -0.942903\nv -0.0243854 -0.152053 -0.940719\nv -0.0132335 -0.162751 -0.973882\nv -0.010265 -0.160356 -0.946757\nv -0.0175854 -0.156703 -0.916991\nv -0.0152151 -0.158465 -0.944988\nv -0.0104033 -0.177664 -1.03377\nv -0.00781981 -0.17219 -1.00613\nv -0.0116323 -0.169253 -1.00352\nv -0.00349707 -0.183567 -1.03926\nv -0.00448582 -0.166526 -0.977469\nv -0.00392939 -0.174007 -1.00793\nv -0.00598158 -0.159094 -0.919597\nv -0.005169 -0.161447 -0.947992\nv -0.0235256 -0.161989 -0.864274\nv -0.0183057 -0.170973 -0.841058\nv -0.0271121 -0.169652 -0.839849\nv -0.013746 -0.159103 -0.891413\nv -0.0203528 -0.157775 -0.890037\nv -0.00800552 -0.163859 -0.866457\nv -0.00692621 -0.15979 -0.892384\nv -0.00922217 -0.171625 -0.841916\nv -0.00291915 0.104175 -1.10191\nv -0.00623196 0.0902711 -1.06718\nv -0.0030955 0.0926303 -1.06959\nv -0.00305966 0.134143 -1.17092\nv -0.00585415 0.114438 -1.13182\nv -0.00290127 0.117922 -1.13556\nv -0.00936079 0.123452 -1.15974\nv -0.0121212 0.101481 -1.12017\nv -0.00895739 0.0966004 -1.09465\nv -0.00891026 0.108892 -1.12647\nv -0.0127915 0.0808668 -1.06011\nv -0.00945033 0.0863477 -1.06386\nv -0.00397648 0.175095 -1.24823\nv -0.00685536 0.148172 -1.20286\nv -0.00341212 0.15311 -1.20835\nv -0.00581208 0.229206 -1.33683\nv -0.00952633 0.193565 -1.28334\nv -0.00477052 0.200369 -1.29093\nv -0.0172661 0.209236 -1.31508\nv -0.0189349 0.169793 -1.25835\nv -0.0119712 0.16032 -1.23217\nv -0.0142527 0.183143 -1.27212\nv -0.0139596 0.130543 -1.18513\nv -0.0103608 0.140509 -1.19484\nv -0.0200912 0.135174 -1.20769\nv -0.0215762 0.105417 -1.16407\nv -0.0162074 0.104528 -1.14336\nv -0.0176829 0.118701 -1.17458\nv -0.0282098 0.176042 -1.2813\nv -0.0281079 0.137062 -1.22748\nv -0.0235582 0.154203 -1.24311\nv -0.0383028 0.136371 -1.24522\nv -0.0369275 0.100885 -1.19937\nv -0.0284344 0.104072 -1.18246\nv -0.0325692 0.11906 -1.21254\nv -0.0300548 0.0762768 -1.14671\nv -0.0241072 0.079956 -1.12813\nv -0.025685 0.0911305 -1.15448\nv -0.0155954 0.0822074 -1.08477\nv -0.0201494 0.0650953 -1.05372\nv -0.0162966 0.0738349 -1.05646\nv -0.0192862 0.081911 -1.10754\nv -0.0155386 0.0924011 -1.11358\nv -0.0282665 0.0577386 -1.10059\nv -0.0236789 0.0618552 -1.07806\nv -0.0234876 0.0702704 -1.10293\nv -0.0297234 0.0425491 -1.05572\nv -0.024534 0.0544915 -1.0527\nv -0.0345882 0.0371875 -1.08293\nv -0.0428087 0.016229 -1.07886\nv -0.0379721 0.0211541 -1.05062\nv -0.0359906 0.0297936 -1.06509\nv -0.0337123 0.0524465 -1.12083\nv -0.0395472 0.0307774 -1.10594\nv -0.0337467 0.0445748 -1.10139\nv -0.0440494 0.0234401 -1.12795\nv -0.0505864 0.00127447 -1.1288\nv -0.0472741 0.00932703 -1.10386\nv -0.0452874 0.0163445 -1.11487\nv -0.0560666 -0.0135159 -1.11483\nv -0.0520586 -0.00658676 -1.0885\nv -0.0496507 0.00185939 -1.09503\nv -0.0371133 0.0714437 -1.16421\nv -0.039443 0.0462312 -1.1401\nv -0.0347313 0.0612932 -1.14162\nv -0.0472051 0.0969698 -1.21656\nv -0.0451113 0.0662048 -1.18246\nv -0.041168 0.0832264 -1.18904\nv -0.0541669 0.0618249 -1.20379\nv -0.0513883 0.0345546 -1.18418\nv -0.045295 0.0398443 -1.1604\nv -0.0485779 0.0499407 -1.18054\nv -0.0478873 0.0160773 -1.1512\nv -0.0439188 0.0311421 -1.143\nv -0.0512019 0.00995881 -1.17827\nv -0.0532201 -0.0137879 -1.18706\nv -0.0525205 -0.00689333 -1.15574\nv -0.0510772 0.0010882 -1.16557\nv -0.0580296 0.032162 -1.21411\nv -0.0543231 0.00689893 -1.21179\nv -0.0533632 0.0201672 -1.1943\nv -0.0576343 0.00920675 -1.25469\nv -0.0524799 -0.0157977 -1.27256\nv -0.053059 -0.0175425 -1.22513\nv -0.0540884 -0.00512954 -1.23758\nv -0.0532909 -0.0430522 -1.25531\nv -0.0565554 -0.0385254 -1.21144\nv -0.0540475 -0.0285138 -1.21665\nv -0.0582455 -0.0220107 -1.14304\nv -0.0658082 -0.0480707 -1.17021\nv -0.0646861 -0.039171 -1.13725\nv -0.0616065 -0.0300977 -1.13946\nv -0.0583516 -0.0308548 -1.17464\nv -0.0550634 -0.0144344 -1.14835\nv -0.0598942 -0.0661197 -1.25192\nv -0.0641351 -0.0575965 -1.20801\nv -0.0600841 -0.048059 -1.20879\nv -0.0683494 -0.0889291 -1.25527\nv -0.0718098 -0.0786103 -1.20921\nv -0.0682099 -0.0676196 -1.20838\nv -0.044364 -0.0745209 -1.03765\nv -0.0462964 -0.095392 -1.06041\nv -0.0409649 -0.0957265 -1.03698\nv -0.0428326 -0.0853628 -1.03749\nv -0.053032 -0.097926 -1.08413\nv -0.0547649 -0.122638 -1.10834\nv -0.0474102 -0.116774 -1.08305\nv -0.0504466 -0.107724 -1.08378\nv -0.047193 -0.138428 -1.10598\nv -0.0403877 -0.133405 -1.08171\nv -0.0410836 -0.114435 -1.05924\nv -0.0440236 -0.12527 -1.08225\nv -0.0363891 -0.115235 -1.03587\nv -0.038803 -0.105666 -1.03636\nv -0.0623125 -0.131925 -1.1363\nv -0.061832 -0.16133 -1.16405\nv -0.0546271 -0.147711 -1.13297\nv -0.0587328 -0.140413 -1.13485\nv -0.067764 -0.178755 -1.20073\nv -0.063351 -0.213703 -1.23347\nv -0.0587799 -0.190715 -1.1921\nv -0.0635442 -0.185666 -1.19667\nv -0.0533492 -0.219391 -1.21988\nv -0.0484971 -0.197199 -1.1828\nv -0.052478 -0.172737 -1.15794\nv -0.0536909 -0.194395 -1.18737\nv -0.0455021 -0.160125 -1.12934\nv -0.0501615 -0.154166 -1.13101\nv -0.0425304 -0.181554 -1.15282\nv -0.0361866 -0.172081 -1.12856\nv -0.038697 -0.152601 -1.10475\nv -0.0408147 -0.165937 -1.1283\nv -0.0430523 -0.220307 -1.20647\nv -0.0386069 -0.202152 -1.17577\nv -0.0434182 -0.199621 -1.17873\nv -0.0341797 -0.220034 -1.19559\nv -0.0302575 -0.2108 -1.17742\nv -0.0331649 -0.191716 -1.15303\nv -0.034216 -0.205283 -1.1745\nv -0.027456 -0.187279 -1.13557\nv -0.0301782 -0.167581 -1.10799\nv -0.0317047 -0.179035 -1.13076\nv -0.0348527 -0.132068 -1.05887\nv -0.0309739 -0.133479 -1.0363\nv -0.0337654 -0.124488 -1.03577\nv -0.032755 -0.149397 -1.0827\nv -0.0366031 -0.141375 -1.08173\nv -0.0252079 -0.166483 -1.08898\nv -0.0281545 -0.149284 -1.06162\nv -0.0289282 -0.157693 -1.085\nv -0.0250564 -0.150891 -1.04022\nv -0.0280568 -0.142262 -1.0377\nv -0.0215245 -0.167104 -1.06986\nv -0.0189367 -0.167607 -1.04891\nv -0.0220146 -0.159421 -1.0441\nv -0.0223796 -0.186053 -1.11965\nv -0.0183125 -0.185743 -1.1025\nv -0.021679 -0.175986 -1.09504\nv -0.0154853 -0.207043 -1.13832\nv -0.0119505 -0.204179 -1.11888\nv -0.015183 -0.18465 -1.08258\nv -0.0150794 -0.195294 -1.11067\nv -0.0126933 -0.181977 -1.05954\nv -0.0158279 -0.175206 -1.0542\nv -0.0250173 -0.209002 -1.16632\nv -0.0198538 -0.208367 -1.15393\nv -0.0235275 -0.197291 -1.14364\nv -0.0290741 -0.23012 -1.20425\nv -0.023337 -0.232907 -1.20079\nv -0.0267434 -0.220488 -1.18699\nv -0.0222142 -0.259801 -1.23946\nv -0.0159033 -0.260451 -1.23226\nv -0.0177637 -0.233137 -1.19156\nv -0.0197012 -0.246614 -1.21638\nv -0.0130083 -0.230891 -1.17707\nv -0.0163692 -0.219802 -1.16542\nv -0.0106647 -0.25678 -1.21781\nv -0.00644607 -0.249123 -1.19681\nv -0.00912028 -0.225914 -1.15732\nv -0.0097054 -0.24093 -1.18786\nv -0.0137552 -0.290155 -1.27496\nv -0.00804657 -0.283883 -1.25908\nv -0.0120105 -0.273257 -1.24693\nv -0.00465619 -0.310553 -1.29851\nv -0.00355598 -0.272502 -1.23549\nv -0.00403515 -0.291178 -1.26742\nv -0.00301161 -0.237849 -1.17005\nv -0.00321578 -0.254675 -1.20296\nv -0.00903611 -0.199147 -1.09543\nv -0.00636728 -0.192058 -1.06856\nv -0.00953802 -0.187675 -1.06447\nv -0.00589997 -0.218097 -1.1327\nv -0.00889702 -0.21194 -1.12644\nv -0.00299975 -0.207801 -1.10402\nv -0.00294057 -0.222174 -1.13699\nv -0.00318622 -0.194882 -1.07137\nv -0.00862818 0.296788 -1.43833\nv -0.0141667 0.252735 -1.3763\nv -0.00711894 0.261877 -1.3863\nv -0.0120022 0.366951 -1.54602\nv -0.0203963 0.320599 -1.47923\nv -0.0102769 0.332344 -1.49191\nv -0.0350922 0.334478 -1.51104\nv -0.0395329 0.280718 -1.43721\nv -0.0254557 0.270562 -1.41023\nv -0.0302008 0.302916 -1.46042\nv -0.0277644 0.221253 -1.34312\nv -0.0210723 0.238855 -1.36145\nv -0.0154306 0.426943 -1.65182\nv -0.0271549 0.384864 -1.58408\nv -0.013741 0.399016 -1.59966\nv -0.0184102 0.464009 -1.74762\nv -0.0334764 0.433124 -1.68269\nv -0.017008 0.449139 -1.70147\nv -0.052752 0.422811 -1.69677\nv -0.0626362 0.380698 -1.62132\nv -0.044546 0.389347 -1.60946\nv -0.0488657 0.409534 -1.65506\nv -0.0516924 0.337745 -1.53289\nv -0.0399144 0.363808 -1.56109\nv -0.0684238 0.331221 -1.5447\nv -0.0714489 0.277944 -1.46986\nv -0.0554396 0.282729 -1.45678\nv -0.0621617 0.308573 -1.50172\nv -0.0796578 0.360007 -1.61888\nv -0.0837438 0.316626 -1.54705\nv -0.0742484 0.348943 -1.58424\nv -0.0960039 0.296056 -1.54004\nv -0.0975647 0.259607 -1.4865\nv -0.0860594 0.268638 -1.4782\nv -0.0911638 0.286103 -1.51303\nv -0.0869837 0.21893 -1.41316\nv -0.0721234 0.224413 -1.39908\nv -0.0796807 0.247512 -1.43958\nv -0.0409965 0.227784 -1.36634\nv -0.0402239 0.178951 -1.3015\nv -0.034172 0.200946 -1.32268\nv -0.0562407 0.228402 -1.38457\nv -0.0482351 0.255422 -1.41135\nv -0.0698954 0.17467 -1.3353\nv -0.0544836 0.178077 -1.31902\nv -0.0634831 0.201027 -1.35864\nv -0.0509761 0.133962 -1.26241\nv -0.0458489 0.156284 -1.28096\nv -0.0652408 0.131016 -1.28061\nv -0.0594027 0.0935854 -1.23631\nv -0.0555341 0.113003 -1.24722\nv -0.0851303 0.171749 -1.35386\nv -0.0798864 0.129274 -1.30238\nv -0.075411 0.150701 -1.3163\nv -0.0936041 0.131114 -1.33119\nv -0.0851424 0.0946585 -1.29285\nv -0.0724647 0.0921321 -1.26075\nv -0.083178 0.110542 -1.29432\nv -0.0645907 0.0600996 -1.23087\nv -0.0624617 0.0758909 -1.23055\nv -0.0999499 0.216545 -1.4325\nv -0.0988496 0.172184 -1.37889\nv -0.0934845 0.19385 -1.39289\nv -0.104823 0.264634 -1.51225\nv -0.109751 0.222801 -1.46512\nv -0.104003 0.23937 -1.47182\nv -0.114735 0.238821 -1.51441\nv -0.116336 0.193422 -1.46423\nv -0.109829 0.17911 -1.41496\nv -0.114083 0.207308 -1.46255\nv -0.104838 0.13873 -1.3702\nv -0.102745 0.153841 -1.37129\nv -0.111717 0.152965 -1.42069\nv -0.102804 0.118559 -1.3893\nv -0.0958454 0.103042 -1.33522\nv -0.104794 0.126763 -1.37577\nv -0.116421 0.212923 -1.52485\nv -0.113142 0.172729 -1.48098\nv -0.115848 0.181677 -1.47029\nv -0.109318 0.193254 -1.54239\nv -0.103293 0.168152 -1.52223\nv -0.105083 0.140979 -1.45393\nv -0.108742 0.16724 -1.49659\nv -0.0937432 0.115925 -1.4455\nv -0.0912018 0.0894906 -1.3725\nv -0.0990568 0.11474 -1.41211\nv -0.0752245 0.0629119 -1.26637\nv -0.0655777 0.0349479 -1.25328\nv -0.0656695 0.0463919 -1.23814\nv -0.0846199 0.0721928 -1.31296\nv -0.0856359 0.081777 -1.29874\nv -0.0779037 0.0640985 -1.3704\nv -0.0726943 0.0449836 -1.3046\nv -0.0820554 0.0662015 -1.33652\nv -0.0614013 0.0195731 -1.31074\nv -0.0641951 0.0259482 -1.27718\nv -0.064153 0.040118 -1.38286\nv -0.051411 0.014692 -1.40569\nv -0.0518222 -0.00581491 -1.33275\nv -0.0570762 0.016003 -1.35486\nv -0.0800681 0.0938359 -1.45195\nv -0.0648749 0.0714021 -1.46806\nv -0.0721259 0.0661792 -1.4156\nv -0.0629244 0.112638 -1.56167\nv -0.0465648 0.0871071 -1.57868\nv -0.0499859 0.0460213 -1.48903\nv -0.0563036 0.0787253 -1.52377\nv -0.0368264 0.0166639 -1.51205\nv -0.0407635 -0.0134879 -1.43672\nv -0.0445972 0.0150942 -1.45937\nv -0.0929021 0.151417 -1.52889\nv -0.0789058 0.133663 -1.54391\nv -0.0870528 0.122737 -1.49079\nv -0.101542 0.201571 -1.58677\nv -0.0901573 0.194827 -1.61408\nv -0.0974382 0.17841 -1.56303\nv -0.0851281 0.244684 -1.69489\nv -0.0681941 0.234642 -1.72763\nv -0.0750923 0.181383 -1.63809\nv -0.0804293 0.214214 -1.67048\nv -0.0579224 0.161808 -1.65738\nv -0.0692223 0.147191 -1.6008\nv -0.0493542 0.215788 -1.74786\nv -0.0306575 0.188187 -1.75282\nv -0.0403358 0.135638 -1.66896\nv -0.0449261 0.176003 -1.70959\nv -0.056811 0.290357 -1.80613\nv -0.0366642 0.27077 -1.82548\nv -0.0533918 0.254177 -1.78097\nv -0.0198927 0.321999 -1.88174\nv -0.0171679 0.240353 -1.82213\nv -0.018653 0.282367 -1.85619\nv -0.0138755 0.152422 -1.74005\nv -0.0155408 0.196768 -1.78245\nv -0.0316853 0.0563357 -1.59155\nv -0.0191789 0.0211221 -1.599\nv -0.0259571 -0.0162077 -1.53632\nv -0.0282898 0.0188551 -1.55988\nv -0.024297 0.102864 -1.66986\nv -0.0358114 0.0955059 -1.62876\nv -0.0108441 0.0646873 -1.6587\nv -0.0122754 0.108125 -1.69784\nv -0.00890222 -0.0163698 -1.60127\nv -0.00968516 0.022919 -1.62555\nv -0.0204866 0.467706 -1.8255\nv -0.0384889 0.452847 -1.76677\nv -0.0195744 0.46996 -1.78925\nv -0.0214998 0.441451 -1.87841\nv -0.0415881 0.440718 -1.82924\nv -0.0211331 0.457964 -1.85551\nv -0.061761 0.399441 -1.80902\nv -0.0777521 0.38349 -1.74156\nv -0.0587617 0.424776 -1.76477\nv -0.0606871 0.41511 -1.7901\nv -0.0716988 0.396739 -1.69258\nv -0.0560837 0.427617 -1.7335\nv -0.0213388 0.390973 -1.89945\nv -0.0424374 0.402634 -1.86419\nv -0.021573 0.418882 -1.89334\nv -0.040825 0.344208 -1.86523\nv -0.0207833 0.35844 -1.89587\nv -0.0757169 0.298616 -1.76663\nv -0.0610832 0.353103 -1.82521\nv -0.0593834 0.323511 -1.82056\nv -0.0792053 0.349034 -1.76795\nv -0.0618844 0.378592 -1.82104\nv -0.0920277 0.295614 -1.71236\nv -0.104971 0.281654 -1.64699\nv -0.0938068 0.333743 -1.69999\nv -0.0936916 0.316238 -1.70901\nv -0.0992778 0.244635 -1.6493\nv -0.0890838 0.27179 -1.70825\nv -0.110125 0.232846 -1.59063\nv -0.106093 0.218754 -1.59365\nv -0.113159 0.260451 -1.57751\nv -0.112672 0.246733 -1.58467\nv -0.0889421 0.358303 -1.66968\nv -0.0947312 0.327848 -1.60033\nv -0.0846744 0.362681 -1.64715\nv -0.10333 0.311113 -1.62931\nv -0.092105 0.348211 -1.68708\nv -0.106925 0.285948 -1.56378\nv -0.111012 0.274036 -1.57087\nv -0.10159 0.294646 -1.55523\nv -0.00869046 -0.0855611 -1.58575\nv -0.0170034 -0.0508072 -1.56238\nv -0.0085988 -0.0523687 -1.58877\nv -0.0097212 -0.145459 -1.59905\nv -0.0179539 -0.111752 -1.56239\nv -0.00909275 -0.11643 -1.58994\nv -0.0281324 -0.129901 -1.52868\nv -0.0340554 -0.0950127 -1.47154\nv -0.0252329 -0.0773859 -1.51921\nv -0.026352 -0.104481 -1.52163\nv -0.0324535 -0.0442612 -1.47572\nv -0.0250197 -0.0481247 -1.52344\nv -0.0113188 -0.199929 -1.62286\nv -0.0206966 -0.165601 -1.58161\nv -0.0104914 -0.173131 -1.61078\nv -0.0128077 -0.252837 -1.63891\nv -0.0238977 -0.216245 -1.60263\nv -0.0121191 -0.226336 -1.633\nv -0.0369745 -0.224619 -1.56298\nv -0.0450712 -0.181794 -1.50179\nv -0.0326987 -0.177672 -1.54864\nv -0.0349952 -0.201004 -1.55752\nv -0.039104 -0.13954 -1.48505\nv -0.0303295 -0.154134 -1.53836\nv -0.0503051 -0.141182 -1.43293\nv -0.0529329 -0.104217 -1.36442\nv -0.0434501 -0.103649 -1.41956\nv -0.0467339 -0.122631 -1.42573\nv -0.0567954 -0.178979 -1.44408\nv -0.0607965 -0.136201 -1.375\nv -0.0537852 -0.159799 -1.43957\nv -0.0693729 -0.126711 -1.31517\nv -0.0616224 -0.0984821 -1.30847\nv -0.0657647 -0.112184 -1.31219\nv -0.0536119 -0.0715693 -1.30328\nv -0.0574151 -0.0851093 -1.30514\nv -0.0392598 -0.0624089 -1.41661\nv -0.0447967 -0.0327513 -1.36904\nv -0.0391105 -0.0391567 -1.42299\nv -0.0464519 -0.0710604 -1.35885\nv -0.0408325 -0.0837409 -1.41599\nv -0.0490942 -0.0420033 -1.30842\nv -0.0506819 -0.057366 -1.304\nv -0.0493179 -0.0249849 -1.31763\nv -0.0471119 -0.00250356 -1.06297\nv -0.0430684 -0.00233264 -1.03805\nv -0.040551 0.0100302 -1.04225\nv -0.0609906 -0.032225 -1.10814\nv -0.0557995 -0.0276189 -1.08213\nv -0.0541392 -0.0165397 -1.08435\nv -0.063524 -0.0553265 -1.10675\nv -0.057488 -0.0516341 -1.08152\nv -0.0504744 -0.0259121 -1.05824\nv -0.0569467 -0.0394439 -1.08134\nv -0.0459658 -0.0270111 -1.03559\nv -0.0448657 -0.0146886 -1.03608\nv -0.0716892 -0.0692318 -1.1695\nv -0.0686132 -0.0613133 -1.13568\nv -0.0670239 -0.0497062 -1.13607\nv -0.074716 -0.11541 -1.25827\nv -0.076116 -0.104464 -1.21005\nv -0.0744365 -0.0910502 -1.20979\nv -0.0771492 -0.145393 -1.25745\nv -0.0767378 -0.132309 -1.20931\nv -0.0741022 -0.0945317 -1.16979\nv -0.0768743 -0.118375 -1.20992\nv -0.0695195 -0.0861832 -1.13624\nv -0.0694473 -0.0736023 -1.13582\nv -0.0731643 -0.120562 -1.16979\nv -0.0673767 -0.110691 -1.13702\nv -0.0633356 -0.0798366 -1.10787\nv -0.0688228 -0.098666 -1.13672\nv -0.0758992 -0.174614 -1.25294\nv -0.0738841 -0.158341 -1.20641\nv -0.0757323 -0.14579 -1.20817\nv -0.0712164 -0.198806 -1.2449\nv -0.069018 -0.143944 -1.16827\nv -0.0712193 -0.169489 -1.20395\nv -0.0603535 -0.10307 -1.10909\nv -0.0652002 -0.121897 -1.13695\nv -0.0514636 -0.0503618 -1.05854\nv -0.0462175 -0.0513583 -1.03649\nv -0.0463918 -0.0392737 -1.03584\nv -0.0565107 -0.075737 -1.08304\nv -0.0573304 -0.063809 -1.08218\nv -0.0499242 -0.073971 -1.06012\nv -0.0550656 -0.0871865 -1.08378\nv -0.045517 -0.0631467 -1.0372\nv -0.0364299 -0.24035 -1.22666\nv -0.0292745 -0.253755 -1.23819\nv -0.0323776 -0.236268 -1.2167\nv -0.0459254 -0.246386 -1.24622\nv -0.0375343 -0.268735 -1.26733\nv -0.041007 -0.243783 -1.23646\nv -0.0370589 -0.302395 -1.3149\nv -0.0273156 -0.317819 -1.32631\nv -0.0289357 -0.283711 -1.27973\nv -0.0328865 -0.293851 -1.29774\nv -0.0208007 -0.290524 -1.28206\nv -0.0253353 -0.272264 -1.26044\nv -0.0560119 -0.247957 -1.2658\nv -0.0469066 -0.278439 -1.29398\nv -0.0510013 -0.247979 -1.25608\nv -0.064945 -0.240658 -1.284\nv -0.0559964 -0.27978 -1.31937\nv -0.0607341 -0.245718 -1.27519\nv -0.0529463 -0.310834 -1.37865\nv -0.0413705 -0.346308 -1.40529\nv -0.0455092 -0.313131 -1.34786\nv -0.0494409 -0.313954 -1.36355\nv -0.0345132 -0.338091 -1.36702\nv -0.0413241 -0.309049 -1.33162\nv -0.0295009 -0.371447 -1.42046\nv -0.0182259 -0.384527 -1.42313\nv -0.0238891 -0.352877 -1.3753\nv -0.0267331 -0.363844 -1.39821\nv -0.0343905 -0.373451 -1.46323\nv -0.0218971 -0.397824 -1.47158\nv -0.0320883 -0.374909 -1.44211\nv -0.0119006 -0.412677 -1.51625\nv -0.0101996 -0.408059 -1.46574\nv -0.0111 -0.413119 -1.49122\nv -0.00823868 -0.38489 -1.41309\nv -0.00923411 -0.398361 -1.43973\nv -0.0183825 -0.323888 -1.32718\nv -0.0107553 -0.321058 -1.31767\nv -0.0159111 -0.307265 -1.30166\nv -0.0143287 -0.356759 -1.37208\nv -0.0210737 -0.339326 -1.35168\nv -0.00629768 -0.350083 -1.35758\nv -0.00724822 -0.368509 -1.38573\nv -0.00542202 -0.330476 -1.32853\nv -0.0136044 -0.306697 -1.63195\nv -0.0262233 -0.267573 -1.60804\nv -0.0133003 -0.279913 -1.6383\nv -0.013678 -0.355919 -1.60508\nv -0.0270665 -0.318151 -1.59197\nv -0.0137277 -0.332322 -1.62062\nv -0.0394884 -0.318731 -1.53673\nv -0.0510213 -0.270248 -1.4963\nv -0.0392691 -0.273363 -1.55824\nv -0.0396274 -0.296874 -1.54927\nv -0.0494289 -0.225723 -1.50727\nv -0.038392 -0.249009 -1.56301\nv -0.0130896 -0.39356 -1.56446\nv -0.0265468 -0.361222 -1.56009\nv -0.0134627 -0.376621 -1.5861\nv -0.0247838 -0.390032 -1.51807\nv -0.0125664 -0.405868 -1.54092\nv -0.0467757 -0.33665 -1.44124\nv -0.0378048 -0.354251 -1.50341\nv -0.0363032 -0.366296 -1.48387\nv -0.0500648 -0.30926 -1.47294\nv -0.0388737 -0.338127 -1.52124\nv -0.0581277 -0.29142 -1.40655\nv -0.0675252 -0.24192 -1.36153\nv -0.0606624 -0.259182 -1.4288\nv -0.0597415 -0.276549 -1.41857\nv -0.0631839 -0.267596 -1.3424\nv -0.0558522 -0.303086 -1.39312\nv -0.0711302 -0.220855 -1.29913\nv -0.0684216 -0.232172 -1.29203\nv -0.0741092 -0.192099 -1.31007\nv -0.0730373 -0.207299 -1.30519\nv -0.0603014 -0.219806 -1.44234\nv -0.0665991 -0.170996 -1.37987\nv -0.0589571 -0.199218 -1.44487\nv -0.0687528 -0.207978 -1.3747\nv -0.0608595 -0.24003 -1.43685\nv -0.0736131 -0.159135 -1.31577\nv -0.0743124 -0.175846 -1.31364\nv -0.0719778 -0.142559 -1.31632\nv -0.423318 -0.377999 0.0456594\nv -0.449087 -0.373041 0.0877671\nv -0.491718 -0.387707 0.0471224\nv -0.478366 -0.398115 -0.00448525\nv -0.461155 -0.380725 0.0463378\nv -0.4049 -0.375323 0.121742\nv -0.43544 -0.363145 0.151621\nv -0.470439 -0.36341 0.120857\nv -0.440559 -0.367643 0.122201\nv -0.488131 -0.354454 0.140938\nv -0.512393 -0.359809 0.116551\nv -0.504652 -0.372975 0.0875016\nv -0.494293 -0.361722 0.11783\nv -0.538011 -0.39275 0.048317\nv -0.531705 -0.420712 -0.00247492\nv -0.517175 -0.391937 0.0475864\nv -0.446067 -0.32408 0.246859\nv -0.469711 -0.332583 0.206148\nv -0.434682 -0.351158 0.202649\nv -0.401485 -0.352909 0.243189\nv -0.438328 -0.340609 0.22681\nv -0.502196 -0.314196 0.192357\nv -0.520088 -0.329768 0.15982\nv -0.491913 -0.339335 0.173413\nv -0.496678 -0.328751 0.184401\nv -0.508335 -0.348622 0.142917\nv -0.463619 -0.350815 0.170493\nv -0.488201 -0.347448 0.159196\nv -0.398307 -0.368954 0.182263\nv -0.4336 -0.35816 0.178012\nv -0.594117 -0.398226 0.00236393\nv -0.567614 -0.38185 0.0517469\nv -0.559547 -0.349249 0.0955824\nv -0.583435 -0.352401 0.0538529\nv -0.577074 -0.369583 0.0532616\nv -0.569837 -0.420541 -0.000232802\nv -0.539908 -0.367962 0.0900339\nv -0.554708 -0.38948 0.0499013\nv -0.533896 -0.347045 0.126248\nv -0.525011 -0.354901 0.120451\nv -0.545989 -0.321674 0.133461\nv -0.540798 -0.336289 0.130658\nv -0.253134 -0.387795 -0.2974\nv -0.298587 -0.364923 -0.248363\nv -0.316906 -0.336415 -0.29319\nv -0.286952 -0.363499 -0.295056\nv -0.176116 -0.427012 -0.302634\nv -0.224745 -0.411255 -0.254819\nv -0.216005 -0.40905 -0.300001\nv -0.189963 -0.431865 -0.213943\nv -0.241813 -0.41411 -0.164815\nv -0.273657 -0.390793 -0.205423\nv -0.233289 -0.412849 -0.209591\nv -0.322594 -0.367425 -0.156455\nv -0.342566 -0.339096 -0.199464\nv -0.310328 -0.366081 -0.201895\nv -0.0902658 -0.452053 -0.307111\nv -0.139382 -0.444847 -0.261582\nv -0.134019 -0.441431 -0.305078\nv -0.0472165 -0.463017 -0.266171\nv -0.0454089 -0.458628 -0.308508\nv -0.0503799 -0.469306 -0.181631\nv -0.0972022 -0.459175 -0.221441\nv -0.0488787 -0.466567 -0.223804\nv -0.149123 -0.449377 -0.174725\nv -0.144415 -0.447458 -0.218023\nv -0.103007 -0.463203 -0.136632\nv -0.157382 -0.451526 -0.0901543\nv -0.202803 -0.434516 -0.126601\nv -0.153507 -0.450716 -0.13201\nv -0.0528363 -0.472469 -0.0987679\nv -0.0517043 -0.471264 -0.139877\nv -0.0544597 -0.472733 -0.0193811\nv -0.10734 -0.464556 -0.0547414\nv -0.05376 -0.472949 -0.0585275\nv -0.162853 -0.451757 -0.0101165\nv -0.213239 -0.435818 -0.0433476\nv -0.16056 -0.451856 -0.0494313\nv -0.295263 -0.393488 -0.116101\nv -0.350301 -0.372767 -0.0714449\nv -0.37079 -0.343452 -0.112129\nv -0.3358 -0.369408 -0.112842\nv -0.258547 -0.416427 -0.0783814\nv -0.250493 -0.415315 -0.120993\nv -0.269666 -0.418218 0.00217227\nv -0.316311 -0.397816 -0.0330337\nv -0.265198 -0.417407 -0.0372402\nv -0.377334 -0.383575 0.00563385\nv -0.408695 -0.356995 -0.0395205\nv -0.36645 -0.378237 -0.0326527\nv -0.323821 -0.401694 0.044095\nv -0.369261 -0.387628 0.084314\nv -0.376037 -0.386537 0.0455138\nv -0.217966 -0.435993 0.0335582\nv -0.270598 -0.41896 0.0756123\nv -0.271172 -0.418822 0.0395973\nv -0.217195 -0.434327 0.105588\nv -0.266737 -0.416805 0.145721\nv -0.318005 -0.402209 0.115549\nv -0.268826 -0.418374 0.110794\nv -0.359782 -0.385701 0.152046\nv -0.363705 -0.387352 0.119362\nv -0.109668 -0.463592 0.0222259\nv -0.164434 -0.450261 0.0641365\nv -0.164074 -0.451278 0.0275155\nv -0.0551571 -0.470208 0.0555972\nv -0.0549199 -0.471849 0.0184466\nv -0.0550301 -0.464292 0.130434\nv -0.110021 -0.46002 0.0959171\nv -0.0551883 -0.467719 0.0927124\nv -0.163408 -0.445986 0.137034\nv -0.164142 -0.44855 0.100419\nv -0.108985 -0.4529 0.171634\nv -0.161169 -0.437712 0.214084\nv -0.214656 -0.429176 0.177941\nv -0.162441 -0.442412 0.174654\nv -0.0542129 -0.45426 0.210263\nv -0.0546994 -0.459836 0.169403\nv -0.106863 -0.441331 0.254811\nv -0.0535873 -0.447476 0.253653\nv -0.211231 -0.419306 0.257137\nv -0.159515 -0.43177 0.256127\nv -0.31325 -0.398088 0.183117\nv -0.357534 -0.377531 0.21645\nv -0.357903 -0.382669 0.183756\nv -0.263715 -0.409895 0.217778\nv -0.265213 -0.413996 0.18097\nv -0.310733 -0.3877 0.255987\nv -0.2617 -0.404449 0.257381\nv -0.358141 -0.369563 0.252085\nv -0.619378 -0.412997 -0.058556\nv -0.628319 -0.478673 -0.125746\nv -0.600142 -0.452531 -0.0592857\nv -0.611415 -0.436113 -0.0584422\nv -0.65335 -0.490163 -0.196027\nv -0.658352 -0.559528 -0.266202\nv -0.63202 -0.543895 -0.19747\nv -0.644181 -0.521335 -0.196136\nv -0.632015 -0.601219 -0.271427\nv -0.600847 -0.562039 -0.20159\nv -0.601771 -0.509568 -0.128142\nv -0.617399 -0.557559 -0.199473\nv -0.568315 -0.465197 -0.0621172\nv -0.585721 -0.462233 -0.0606546\nv -0.67958 -0.550676 -0.330995\nv -0.679668 -0.606864 -0.392534\nv -0.658506 -0.617361 -0.336329\nv -0.670183 -0.588681 -0.332533\nv -0.694265 -0.575453 -0.437791\nv -0.692895 -0.60033 -0.484804\nv -0.677766 -0.641462 -0.454423\nv -0.686802 -0.612147 -0.443611\nv -0.674882 -0.64584 -0.513082\nv -0.653309 -0.669432 -0.468894\nv -0.656485 -0.656904 -0.405517\nv -0.666422 -0.661559 -0.463623\nv -0.630233 -0.642136 -0.344282\nv -0.64503 -0.635563 -0.340779\nv -0.627786 -0.657405 -0.409936\nv -0.599345 -0.618071 -0.345077\nv -0.599571 -0.601271 -0.275709\nv -0.614595 -0.635929 -0.345232\nv -0.647958 -0.646326 -0.517289\nv -0.624726 -0.642453 -0.462726\nv -0.638967 -0.662077 -0.467921\nv -0.620391 -0.60161 -0.496131\nv -0.602184 -0.577083 -0.45219\nv -0.600084 -0.608208 -0.404875\nv -0.61192 -0.613519 -0.455329\nv -0.574926 -0.551918 -0.347237\nv -0.568931 -0.559743 -0.278938\nv -0.585712 -0.589691 -0.345264\nv -0.565441 -0.508638 -0.131307\nv -0.525826 -0.450623 -0.0646838\nv -0.548086 -0.461402 -0.0632415\nv -0.565311 -0.542962 -0.205261\nv -0.582895 -0.557051 -0.203265\nv -0.538323 -0.488959 -0.213272\nv -0.527875 -0.476051 -0.136666\nv -0.549865 -0.520142 -0.208342\nv -0.485969 -0.408562 -0.0754035\nv -0.502324 -0.432633 -0.0671001\nv -0.639387 -0.590472 -0.545224\nv -0.626591 -0.518378 -0.549059\nv -0.610545 -0.547598 -0.498937\nv -0.624666 -0.568467 -0.526789\nv -0.669127 -0.612954 -0.558652\nv -0.659143 -0.547893 -0.584781\nv -0.654581 -0.606529 -0.556139\nv -0.677374 -0.478749 -0.606693\nv -0.663324 -0.394923 -0.61267\nv -0.645241 -0.467391 -0.589527\nv -0.661955 -0.475622 -0.603522\nv -0.629255 -0.385162 -0.572854\nv -0.611058 -0.441925 -0.52902\nv -0.628014 -0.455633 -0.564698\nv -0.692193 -0.589579 -0.536989\nv -0.687262 -0.547444 -0.580405\nv -0.681907 -0.606064 -0.551878\nv -0.702392 -0.546066 -0.484606\nv -0.704752 -0.517145 -0.536888\nv -0.699257 -0.567216 -0.515155\nv -0.710967 -0.440484 -0.51348\nv -0.709125 -0.384093 -0.560455\nv -0.70125 -0.466563 -0.580822\nv -0.708244 -0.454458 -0.552224\nv -0.692036 -0.394528 -0.608215\nv -0.690716 -0.475195 -0.599053\nv -0.700685 -0.311598 -0.589709\nv -0.687865 -0.228883 -0.59955\nv -0.678383 -0.309888 -0.616066\nv -0.690988 -0.31066 -0.608282\nv -0.708609 -0.307107 -0.522292\nv -0.702046 -0.240681 -0.554404\nv -0.706787 -0.310986 -0.56087\nv -0.696824 -0.186233 -0.511078\nv -0.688597 -0.128913 -0.521497\nv -0.69083 -0.165356 -0.565677\nv -0.695715 -0.178721 -0.541992\nv -0.676564 -0.0927844 -0.556864\nv -0.672465 -0.149737 -0.589767\nv -0.68296 -0.154493 -0.582313\nv -0.647359 -0.31225 -0.597974\nv -0.63174 -0.241398 -0.565288\nv -0.614232 -0.308184 -0.536926\nv -0.630634 -0.311893 -0.572675\nv -0.662429 -0.229155 -0.603487\nv -0.663558 -0.311 -0.612533\nv -0.655173 -0.0929063 -0.560165\nv -0.645881 -0.165733 -0.572624\nv -0.65971 -0.15469 -0.585906\nv -0.630258 -0.129262 -0.530503\nv -0.619143 -0.186834 -0.523088\nv -0.632162 -0.179246 -0.551817\nv -0.386999 0.268867 -0.106036\nv -0.416593 0.224784 -0.0638963\nv -0.395914 0.271517 -0.0247834\nv -0.392133 0.270317 -0.0652086\nv -0.373025 0.264865 -0.188465\nv -0.403406 0.223844 -0.14533\nv -0.380601 0.267078 -0.147157\nv -0.413601 0.178187 -0.183845\nv -0.439413 0.128541 -0.139063\nv -0.431035 0.176528 -0.101636\nv -0.4229 0.177395 -0.142478\nv -0.456549 0.124233 -0.0584674\nv -0.443307 0.175649 -0.0219057\nv -0.437879 0.175855 -0.0614134\nv -0.354688 0.258815 -0.271208\nv -0.385492 0.221885 -0.228151\nv -0.364358 0.262139 -0.229851\nv -0.363297 0.217866 -0.311274\nv -0.344102 0.254806 -0.312428\nv -0.392497 0.135729 -0.30766\nv -0.391868 0.178592 -0.26765\nv -0.379404 0.177937 -0.309646\nv -0.41782 0.133191 -0.222561\nv -0.403262 0.17863 -0.225642\nv -0.416416 0.0895558 -0.26218\nv -0.437775 0.0391241 -0.215627\nv -0.441544 0.0825242 -0.176785\nv -0.42932 0.0863798 -0.219147\nv -0.409943 0.0473164 -0.303071\nv -0.402652 0.0919519 -0.30543\nv -0.416235 -0.0416909 -0.298431\nv -0.429057 -0.00203694 -0.256121\nv -0.414445 0.0025321 -0.3007\nv -0.445609 -0.0530181 -0.209189\nv -0.457249 -0.0143404 -0.169877\nv -0.4432 -0.00765053 -0.212231\nv -0.463986 0.0738602 -0.0952684\nv -0.48836 0.0156939 -0.0552772\nv -0.480282 0.0691545 -0.0168688\nv -0.473162 0.0706204 -0.055766\nv -0.464116 0.0274079 -0.132357\nv -0.453273 0.0780896 -0.13555\nv -0.475289 -0.0691835 -0.128606\nv -0.486611 -0.0307477 -0.0927772\nv -0.471576 -0.0221383 -0.129903\nv -0.511435 -0.0912149 -0.0672201\nv -0.515055 -0.0446466 -0.0231875\nv -0.502782 -0.039872 -0.0589691\nv -0.399176 0.266624 0.219839\nv -0.425178 0.219263 0.260303\nv -0.397852 0.261882 0.264776\nv -0.39991 0.272156 0.135421\nv -0.42782 0.224984 0.17354\nv -0.399761 0.270019 0.176898\nv -0.451569 0.178634 0.132528\nv -0.470526 0.131265 0.173273\nv -0.450066 0.177615 0.214075\nv -0.451256 0.17855 0.172485\nv -0.46629 0.131471 0.257327\nv -0.447879 0.175668 0.257943\nv -0.399484 0.27317 0.0548977\nv -0.427618 0.22666 0.0931794\nv -0.399927 0.273122 0.0948739\nv -0.424467 0.225883 0.0151893\nv -0.398255 0.272551 0.0151319\nv -0.467093 0.124087 0.0191822\nv -0.449734 0.177093 0.0551315\nv -0.447193 0.17618 0.0167928\nv -0.471042 0.127865 0.0954029\nv -0.451127 0.17803 0.0935601\nv -0.487231 0.0730713 0.0598469\nv -0.502261 0.0260347 0.101517\nv -0.487421 0.0806125 0.136556\nv -0.487949 0.0768019 0.098095\nv -0.501539 0.0152762 0.0223764\nv -0.484823 0.0702468 0.0215972\nv -0.53485 -0.0913769 0.0187024\nv -0.516828 -0.0314425 0.0646199\nv -0.518394 -0.0402072 0.0198581\nv -0.524745 -0.0698313 0.110074\nv -0.511303 -0.0159136 0.144296\nv -0.514389 -0.0232413 0.10555\nv -0.483888 0.0858653 0.215657\nv -0.491584 0.0427697 0.259846\nv -0.480746 0.0870464 0.258085\nv -0.498372 0.0364457 0.178643\nv -0.48609 0.0836771 0.175446\nv -0.514785 -0.0543084 0.186672\nv -0.503772 -0.00479708 0.221411\nv -0.507796 -0.00976944 0.182506\nv -0.503744 -0.0438425 0.2649\nv -0.499138 -0.000984854 0.262241\nv -0.512815 -0.0904315 0.228258\nv -0.50505 -0.125589 0.269554\nv -0.505738 -0.0854287 0.267453\nv -0.5267 -0.103828 0.153523\nv -0.522695 -0.136308 0.194547\nv -0.519763 -0.0965114 0.190784\nv -0.535035 -0.179866 0.161986\nv -0.522278 -0.208403 0.199861\nv -0.512405 -0.168529 0.23338\nv -0.523545 -0.173629 0.19767\nv -0.49535 -0.201015 0.271008\nv -0.501611 -0.164169 0.270854\nv -0.541447 -0.122462 0.0725208\nv -0.541184 -0.1517 0.119916\nv -0.533742 -0.11254 0.114971\nv -0.564398 -0.141843 -0.0338433\nv -0.563833 -0.170311 0.030934\nv -0.550372 -0.133407 0.0235691\nv -0.590747 -0.215956 -0.0163269\nv -0.581432 -0.240501 0.042661\nv -0.559693 -0.196527 0.08363\nv -0.574109 -0.206107 0.037273\nv -0.550625 -0.220691 0.128659\nv -0.546876 -0.18764 0.124587\nv -0.568907 -0.260604 0.0923155\nv -0.551883 -0.278557 0.13381\nv -0.535669 -0.244615 0.167398\nv -0.552236 -0.251185 0.131809\nv -0.603966 -0.289313 -0.00536462\nv -0.587907 -0.303336 0.0506487\nv -0.586034 -0.273202 0.0471729\nv -0.605278 -0.353087 0.00118322\nv -0.56869 -0.313315 0.0968042\nv -0.587044 -0.330027 0.0529287\nv -0.529726 -0.296097 0.167452\nv -0.549743 -0.302242 0.134436\nv -0.502227 -0.238014 0.234214\nv -0.474206 -0.268769 0.265998\nv -0.486197 -0.235972 0.269668\nv -0.513938 -0.269387 0.200168\nv -0.518859 -0.24056 0.200828\nv -0.484817 -0.295502 0.227164\nv -0.508167 -0.29417 0.197479\nv -0.459428 -0.299136 0.259158\nv -0.491198 -0.122412 -0.0994877\nv -0.501186 -0.170632 -0.0926807\nv -0.52674 -0.141993 -0.0861597\nv -0.509323 -0.133473 -0.080409\nv -0.45972 -0.103511 -0.165624\nv -0.4707 -0.15216 -0.129684\nv -0.474889 -0.112362 -0.128885\nv -0.448582 -0.181624 -0.163375\nv -0.452251 -0.22357 -0.128623\nv -0.477496 -0.197522 -0.106845\nv -0.463046 -0.189067 -0.129949\nv -0.481016 -0.2413 -0.0972202\nv -0.505674 -0.216236 -0.108073\nv -0.491761 -0.206681 -0.0981799\nv -0.430373 -0.0898189 -0.250785\nv -0.441283 -0.136849 -0.204713\nv -0.445016 -0.0960528 -0.206728\nv -0.411676 -0.126164 -0.294607\nv -0.415386 -0.0846425 -0.29638\nv -0.394787 -0.204287 -0.292136\nv -0.419809 -0.170416 -0.246913\nv -0.404884 -0.166099 -0.293172\nv -0.423847 -0.212099 -0.201469\nv -0.434272 -0.175499 -0.203005\nv -0.395675 -0.24345 -0.244675\nv -0.391931 -0.279443 -0.19888\nv -0.424077 -0.250843 -0.159329\nv -0.409868 -0.246741 -0.199968\nv -0.363789 -0.274792 -0.291502\nv -0.381162 -0.240571 -0.291559\nv -0.35601 -0.308463 -0.244758\nv -0.342444 -0.306793 -0.292026\nv -0.383779 -0.312567 -0.154846\nv -0.369632 -0.310222 -0.198586\nv -0.453578 -0.263619 -0.100169\nv -0.454332 -0.304729 -0.0767621\nv -0.484685 -0.288747 -0.0987227\nv -0.468918 -0.27417 -0.0901148\nv -0.421198 -0.28693 -0.11956\nv -0.438639 -0.256157 -0.124651\nv -0.416038 -0.322083 -0.0813809\nv -0.398919 -0.315994 -0.114877\nv -0.459165 -0.350423 -0.0565559\nv -0.436124 -0.332415 -0.0570605\nv -0.578694 -0.110979 -0.129081\nv -0.613604 -0.143752 -0.173764\nv -0.599896 -0.183896 -0.0882706\nv -0.587405 -0.14424 -0.101675\nv -0.630981 -0.0990647 -0.26559\nv -0.657448 -0.146249 -0.310565\nv -0.644469 -0.19336 -0.228998\nv -0.637206 -0.14353 -0.243948\nv -0.670416 -0.258506 -0.289683\nv -0.657423 -0.30074 -0.211741\nv -0.631025 -0.235666 -0.147594\nv -0.651598 -0.246461 -0.218881\nv -0.618063 -0.267962 -0.0724279\nv -0.61023 -0.225654 -0.0790127\nv -0.666939 -0.103576 -0.385069\nv -0.685548 -0.166393 -0.426537\nv -0.680194 -0.211635 -0.363121\nv -0.673569 -0.154585 -0.371951\nv -0.68676 -0.132078 -0.476374\nv -0.70003 -0.235548 -0.474075\nv -0.693368 -0.179533 -0.472753\nv -0.708677 -0.363262 -0.472064\nv -0.697768 -0.286073 -0.418877\nv -0.705462 -0.298244 -0.474499\nv -0.689961 -0.33403 -0.351248\nv -0.685946 -0.272269 -0.35681\nv -0.701969 -0.411113 -0.407958\nv -0.690135 -0.451856 -0.338281\nv -0.67745 -0.375668 -0.276671\nv -0.69137 -0.394463 -0.344664\nv -0.705944 -0.48397 -0.454668\nv -0.708689 -0.426245 -0.46481\nv -0.695314 -0.521688 -0.392866\nv -0.700891 -0.533217 -0.443569\nv -0.673985 -0.481029 -0.267427\nv -0.686218 -0.504498 -0.333318\nv -0.642313 -0.331417 -0.134836\nv -0.625038 -0.348157 -0.0629035\nv -0.623051 -0.30927 -0.0670423\nv -0.661384 -0.404694 -0.200984\nv -0.660772 -0.354102 -0.20572\nv -0.642032 -0.416895 -0.127464\nv -0.658997 -0.450666 -0.197698\nv -0.623866 -0.383206 -0.0600589\nv -0.510707 -0.414438 -0.154673\nv -0.492565 -0.34598 -0.115689\nv -0.485152 -0.379541 -0.094507\nv -0.551316 -0.481589 -0.288285\nv -0.531224 -0.404302 -0.229601\nv -0.532454 -0.44978 -0.220813\nv -0.549527 -0.376577 -0.302981\nv -0.538539 -0.301224 -0.245447\nv -0.517298 -0.330784 -0.178712\nv -0.533597 -0.354218 -0.238268\nv -0.509843 -0.26781 -0.138437\nv -0.500903 -0.30829 -0.130226\nv -0.58341 -0.523418 -0.410527\nv -0.565028 -0.453291 -0.359479\nv -0.568215 -0.505883 -0.352444\nv -0.59532 -0.485687 -0.471919\nv -0.597157 -0.534953 -0.459771\nv -0.596453 -0.364663 -0.489504\nv -0.579882 -0.412712 -0.427615\nv -0.595155 -0.427844 -0.482484\nv -0.56702 -0.335264 -0.373417\nv -0.564814 -0.395849 -0.366938\nv -0.584702 -0.287168 -0.437141\nv -0.577116 -0.212299 -0.381354\nv -0.557947 -0.259295 -0.314319\nv -0.571097 -0.273243 -0.377509\nv -0.60269 -0.236392 -0.489148\nv -0.599001 -0.299379 -0.491014\nv -0.614273 -0.132421 -0.487563\nv -0.596301 -0.166865 -0.4407\nv -0.60741 -0.180101 -0.486041\nv -0.595272 -0.103692 -0.396858\nv -0.574209 -0.146513 -0.327117\nv -0.58515 -0.154944 -0.387091\nv -0.532116 -0.236008 -0.189877\nv -0.529209 -0.184189 -0.137894\nv -0.519064 -0.22588 -0.140641\nv -0.553316 -0.193789 -0.254448\nv -0.545015 -0.247015 -0.249772\nv -0.576553 -0.0990864 -0.277671\nv -0.552906 -0.14395 -0.196488\nv -0.563732 -0.143747 -0.26268\nv -0.556865 -0.11102 -0.139228\nv -0.540922 -0.144426 -0.13125\nv -0.585727 -0.0731881 -0.242509\nv -0.604658 -0.0732063 -0.238044\nv -0.579701 -0.0884036 -0.180343\nv -0.599193 -0.0571868 -0.359716\nv -0.608638 -0.0345947 -0.333763\nv -0.592071 -0.0620066 -0.302627\nv -0.627 -0.012205 -0.405693\nv -0.638922 -0.0122465 -0.403861\nv -0.624919 -0.0346398 -0.330891\nv -0.624607 -0.0189376 -0.367295\nv -0.646006 -0.0572485 -0.351773\nv -0.626965 -0.0620584 -0.29578\nv -0.636308 -0.067783 -0.514987\nv -0.616252 -0.0737162 -0.460029\nv -0.624388 -0.0952684 -0.499586\nv -0.659913 -0.0419556 -0.530742\nv -0.640904 -0.0223486 -0.487966\nv -0.648588 -0.0491057 -0.526639\nv -0.643512 -0.00618802 -0.453596\nv -0.620615 -0.0295519 -0.430802\nv -0.63307 -0.0116952 -0.446783\nv -0.607554 -0.0610562 -0.412795\nv -0.672863 -0.0736294 -0.451235\nv -0.676064 -0.0676644 -0.508861\nv -0.681493 -0.0950642 -0.490781\nv -0.655841 -0.0296005 -0.425311\nv -0.66117 -0.0610648 -0.404245\nv -0.660265 -0.0223494 -0.484987\nv -0.650528 -0.0117323 -0.4441\nv -0.668971 -0.0490516 -0.523499\nv -0.0725038 0.455642 -0.78073\nv -0.0603753 0.44704 -0.809411\nv -0.0652789 0.421506 -0.830886\nv -0.0700722 0.436832 -0.807073\nv -0.0521137 0.473675 -0.78696\nv -0.041054 0.459413 -0.811952\nv -0.0480019 0.438905 -0.831498\nv -0.0507662 0.454478 -0.810876\nv -0.0368617 0.431734 -0.84704\nv -0.0384244 0.418432 -0.861129\nv -0.0509656 0.419304 -0.85038\nv -0.0440406 0.426928 -0.848205\nv -0.0493524 0.400363 -0.869273\nv -0.0583102 0.409428 -0.851756\nv -0.0102153 0.446583 -0.835406\nv -0.020821 0.463216 -0.814204\nv -0.0105936 0.483146 -0.791807\nv -0.0104473 0.463365 -0.815003\nv -0.0102742 0.419905 -0.868003\nv -0.0198047 0.432798 -0.851319\nv -0.0100927 0.432273 -0.853059\nv -0.0285973 0.422553 -0.861118\nv -0.0299715 0.446032 -0.832807\nv -0.0287554 0.433154 -0.848696\nv -0.0316099 0.481591 -0.790108\nv -0.0310478 0.462112 -0.813125\nv -0.0264791 0.390139 -0.892942\nv -0.0120475 0.398621 -0.890418\nv -0.0134649 0.38812 -0.89895\nv -0.0342824 0.404209 -0.877419\nv -0.0385918 0.394076 -0.883026\nv -0.0213674 0.410492 -0.876599\nv -0.0306953 0.413303 -0.870405\nv -0.0109549 0.408952 -0.880279\nv -0.0702792 0.504015 -0.721675\nv -0.0620534 0.488819 -0.757055\nv -0.0723875 0.47817 -0.752267\nv -0.0623096 0.56406 -0.654078\nv -0.0572849 0.543809 -0.69509\nv -0.0667346 0.532779 -0.688948\nv -0.0448843 0.583432 -0.665208\nv -0.0383562 0.557083 -0.702342\nv -0.0502735 0.522664 -0.731178\nv -0.0478352 0.551752 -0.699435\nv -0.0416012 0.50167 -0.762626\nv -0.0518246 0.496521 -0.760373\nv -0.0530418 0.632575 -0.577874\nv -0.0497749 0.609033 -0.623772\nv -0.0575601 0.597459 -0.617056\nv -0.0469222 0.706359 -0.493002\nv -0.0432287 0.681515 -0.543357\nv -0.0493105 0.669009 -0.536525\nv -0.0354481 0.729014 -0.504686\nv -0.0298064 0.696525 -0.551484\nv -0.0389434 0.653155 -0.589546\nv -0.0367027 0.690494 -0.548234\nv -0.0336483 0.622939 -0.631746\nv -0.0417955 0.61735 -0.628557\nv -0.0237911 0.662443 -0.594725\nv -0.0169654 0.628051 -0.634645\nv -0.0271067 0.59216 -0.67018\nv -0.0253598 0.626326 -0.633671\nv -0.0220417 0.739223 -0.509877\nv -0.0151994 0.702055 -0.554403\nv -0.022614 0.700185 -0.553431\nv -0.00747605 0.741879 -0.511173\nv -0.00800121 0.664867 -0.596022\nv -0.00763671 0.702714 -0.554725\nv -0.00906493 0.594391 -0.671517\nv -0.00850035 0.628654 -0.63498\nv -0.0302819 0.531001 -0.735542\nv -0.0208949 0.506068 -0.765239\nv -0.0312834 0.504663 -0.764218\nv -0.0192368 0.561867 -0.705155\nv -0.0288185 0.560276 -0.704167\nv -0.0101136 0.532975 -0.736999\nv -0.00962574 0.562393 -0.705551\nv -0.0104593 0.506454 -0.765779\nv -0.0569956 0.971365 -0.132286\nv -0.0521645 0.96774 -0.179016\nv -0.0561431 0.919481 -0.213542\nv -0.0572523 0.947348 -0.171253\nv -0.0458812 1.0077 -0.14662\nv -0.0381654 0.992089 -0.188404\nv -0.044614 0.952824 -0.226309\nv -0.0457554 0.982318 -0.184692\nv -0.0355126 0.928741 -0.274061\nv -0.0406422 0.884319 -0.316908\nv -0.0490603 0.906764 -0.265506\nv -0.0427965 0.919922 -0.270653\nv -0.0516927 0.854691 -0.304941\nv -0.0541345 0.888388 -0.258367\nv -0.0298023 1.02408 -0.152402\nv -0.0201234 1.00115 -0.190879\nv -0.0286588 0.96782 -0.231743\nv -0.0295347 0.998063 -0.190276\nv -0.010313 1.02854 -0.152512\nv -0.00986799 0.971779 -0.232549\nv -0.0101918 1.00227 -0.190784\nv -0.00888444 0.901096 -0.323323\nv -0.0186065 0.936836 -0.276822\nv -0.00940955 0.937804 -0.276999\nv -0.0258973 0.897635 -0.322163\nv -0.0273784 0.934097 -0.27598\nv -0.0165556 0.861567 -0.370416\nv -0.0231482 0.819459 -0.417071\nv -0.0317863 0.854476 -0.367528\nv -0.0244193 0.859175 -0.369468\nv -0.00790594 0.822471 -0.418356\nv -0.00836058 0.862403 -0.370712\nv -0.0150575 0.781316 -0.465122\nv -0.00758845 0.782047 -0.465446\nv -0.0291598 0.775128 -0.462203\nv -0.0222877 0.779228 -0.464149\nv -0.0443758 0.835154 -0.359342\nv -0.0473755 0.781987 -0.400191\nv -0.0492843 0.819017 -0.352478\nv -0.0366816 0.807834 -0.411879\nv -0.0384908 0.846721 -0.364256\nv -0.0413516 0.75828 -0.4541\nv -0.0355542 0.768363 -0.458962\nv -0.0464327 0.744227 -0.447295\nv -0.0510862 1.00639 -0.0669243\nv -0.0504474 1.01271 -0.106298\nv -0.0549067 0.990907 -0.0974278\nv -0.0386526 1.02684 -0.0199668\nv -0.0425723 1.03998 -0.0518895\nv -0.0456346 1.01823 -0.0410219\nv -0.0336245 1.06059 -0.0435868\nv -0.0334209 1.06245 -0.0666377\nv -0.0421862 1.04371 -0.0841809\nv -0.038603 1.05374 -0.0610557\nv -0.0375715 1.03869 -0.117159\nv -0.0446518 1.02826 -0.112909\nv -0.0101266 1.05937 -0.00263345\nv -0.0207562 1.03611 0.00709619\nv -0.0105568 1.0378 0.0135704\nv -0.00953305 1.07745 -0.0396251\nv -0.0189207 1.07064 -0.0244271\nv -0.00974202 1.07243 -0.0200369\nv -0.0259893 1.07104 -0.0475488\nv -0.0287097 1.05406 -0.0178813\nv -0.0269726 1.06646 -0.0318271\nv -0.0302406 1.03263 -0.00400516\nv -0.0200191 1.04854 -0.119122\nv -0.00988793 1.06552 -0.0885951\nv -0.0101637 1.04984 -0.118544\nv -0.0281481 1.0604 -0.090273\nv -0.0292578 1.04514 -0.118945\nv -0.0187171 1.07326 -0.0643509\nv -0.0267199 1.06903 -0.0667525\nv -0.0096297 1.07493 -0.0623834\nvt 0.581714 0.398452\nvt 0.573583 0.418104\nvt 0.55643 0.390276\nvt 0.55047 0.410884\nvt 0.523292 0.425874\nvt 0.519598 0.445824\nvt 0.501704 0.422526\nvt 0.499875 0.443049\nvt 0.677064 0.437955\nvt 0.658435 0.456569\nvt 0.655585 0.425717\nvt 0.639432 0.444701\nvt 0.606044 0.452703\nvt 0.594337 0.469769\nvt 0.586274 0.444385\nvt 0.576644 0.462046\nvt 0.612259 0.502723\nvt 0.599294 0.515624\nvt 0.598482 0.493684\nvt 0.586982 0.507606\nvt 0.56459 0.513992\nvt 0.556506 0.52614\nvt 0.551795 0.508516\nvt 0.544986 0.521445\nvt 0.551003 0.4728\nvt 0.544372 0.488984\nvt 0.533766 0.467985\nvt 0.528804 0.48475\nvt 0.509743 0.4974\nvt 0.506975 0.51178\nvt 0.49497 0.495661\nvt 0.493584 0.510309\nvt 0.527953 0.529607\nvt 0.523693 0.540346\nvt 0.516427 0.526878\nvt 0.513205 0.538166\nvt 0.500476 0.546889\nvt 0.498861 0.555978\nvt 0.490308 0.54609\nvt 0.489486 0.555447\nvt 0.567734 0.546928\nvt 0.559568 0.554873\nvt 0.558973 0.541675\nvt 0.551736 0.550468\nvt 0.537608 0.554867\nvt 0.532885 0.56201\nvt 0.52909 0.552057\nvt 0.525135 0.559783\nvt 0.540749 0.572558\nvt 0.536107 0.576574\nvt 0.535213 0.570156\nvt 0.531258 0.574796\nvt 0.522853 0.577972\nvt 0.52103 0.58182\nvt 0.516769 0.577532\nvt 0.515171 0.581863\nvt 0.514092 0.565361\nvt 0.51185 0.571761\nvt 0.505962 0.564554\nvt 0.504267 0.571317\nvt 0.495422 0.576969\nvt 0.494708 0.58203\nvt 0.487725 0.576906\nvt 0.487357 0.582144\nvt 0.722055 0.493159\nvt 0.735057 0.513175\nvt 0.701784 0.504541\nvt 0.713557 0.522488\nvt 0.656781 0.486134\nvt 0.670182 0.50032\nvt 0.640143 0.500033\nvt 0.652361 0.512588\nvt 0.770011 0.574186\nvt 0.775952 0.595183\nvt 0.741685 0.578129\nvt 0.745777 0.597367\nvt 0.702204 0.547872\nvt 0.710069 0.56466\nvt 0.680885 0.554694\nvt 0.687383 0.569767\nvt 0.672446 0.602158\nvt 0.652131 0.603315\nvt 0.670335 0.588221\nvt 0.650378 0.590999\nvt 0.629562 0.582779\nvt 0.613815 0.586153\nvt 0.625585 0.572362\nvt 0.610374 0.577044\nvt 0.645513 0.535707\nvt 0.653916 0.548145\nvt 0.629004 0.544653\nvt 0.636397 0.555591\nvt 0.606241 0.543634\nvt 0.593569 0.551903\nvt 0.597458 0.535139\nvt 0.585801 0.544552\nvt 0.750122 0.683761\nvt 0.726782 0.677137\nvt 0.759018 0.661496\nvt 0.734619 0.657125\nvt 0.716014 0.634872\nvt 0.69254 0.63266\nvt 0.718838 0.616951\nvt 0.69477 0.616665\nvt 0.719138 0.749097\nvt 0.703532 0.768031\nvt 0.695577 0.734666\nvt 0.680112 0.751363\nvt 0.686182 0.70534\nvt 0.665794 0.695048\nvt 0.696051 0.688302\nvt 0.675096 0.68002\nvt 0.636789 0.698241\nvt 0.624684 0.710234\nvt 0.620496 0.687948\nvt 0.609585 0.698622\nvt 0.614019 0.668625\nvt 0.599952 0.661277\nvt 0.62082 0.658352\nvt 0.605937 0.652248\nvt 0.662256 0.658559\nvt 0.643402 0.652984\nvt 0.667394 0.644583\nvt 0.647905 0.640686\nvt 0.632671 0.626115\nvt 0.616367 0.624057\nvt 0.633878 0.615172\nvt 0.61737 0.614496\nvt 0.596874 0.638622\nvt 0.584732 0.634697\nvt 0.599869 0.630402\nvt 0.587284 0.627508\nvt 0.577566 0.618553\nvt 0.567441 0.617004\nvt 0.578268 0.612177\nvt 0.568007 0.6114\nvt 0.573433 0.66938\nvt 0.564136 0.661471\nvt 0.581064 0.662136\nvt 0.570893 0.655142\nvt 0.566938 0.643235\nvt 0.558517 0.638632\nvt 0.570935 0.637321\nvt 0.561932 0.633474\nvt 0.54751 0.638926\nvt 0.542996 0.642869\nvt 0.541639 0.635089\nvt 0.537896 0.638432\nvt 0.533309 0.623286\nvt 0.539796 0.62501\nvt 0.532492 0.626826\nvt 0.538356 0.628706\nvt 0.555945 0.625399\nvt 0.548123 0.623061\nvt 0.557374 0.62053\nvt 0.549223 0.618711\nvt 0.542192 0.613301\nvt 0.534848 0.612472\nvt 0.542439 0.609408\nvt 0.535018 0.608925\nvt 0.592994 0.573399\nvt 0.581614 0.577778\nvt 0.588134 0.566101\nvt 0.577422 0.571461\nvt 0.563637 0.570834\nvt 0.55592 0.575301\nvt 0.558465 0.566067\nvt 0.551472 0.57124\nvt 0.60268 0.605431\nvt 0.589809 0.605699\nvt 0.601677 0.597173\nvt 0.588917 0.598502\nvt 0.576253 0.593338\nvt 0.566424 0.594898\nvt 0.574262 0.58727\nvt 0.564801 0.589578\nvt 0.558759 0.605777\nvt 0.5503 0.605682\nvt 0.558335 0.600942\nvt 0.54997 0.601407\nvt 0.541755 0.598058\nvt 0.534532 0.598754\nvt 0.541031 0.594439\nvt 0.534035 0.595491\nvt 0.554449 0.58708\nvt 0.546979 0.589225\nvt 0.552082 0.582918\nvt 0.545179 0.585534\nvt 0.537109 0.584525\nvt 0.531508 0.586322\nvt 0.535122 0.581809\nvt 0.530487 0.583708\nvt 0.625515 0.806675\nvt 0.596779 0.817718\nvt 0.612643 0.789232\nvt 0.586809 0.799438\nvt 0.64204 0.749761\nvt 0.622044 0.761646\nvt 0.625578 0.735049\nvt 0.607769 0.746036\nvt 0.509348 0.846804\nvt 0.48 0.8508\nvt 0.507 0.822906\nvt 0.480002 0.82531\nvt 0.553443 0.790011\nvt 0.529239 0.796747\nvt 0.546648 0.771917\nvt 0.524755 0.777636\nvt 0.500381 0.763234\nvt 0.480033 0.764393\nvt 0.498401 0.746404\nvt 0.480052 0.747349\nvt 0.512865 0.72818\nvt 0.509541 0.713867\nvt 0.528781 0.724091\nvt 0.523827 0.710223\nvt 0.577634 0.740438\nvt 0.559346 0.748303\nvt 0.567712 0.725915\nvt 0.551383 0.733027\nvt 0.584889 0.696819\nvt 0.572368 0.704989\nvt 0.574068 0.686036\nvt 0.56289 0.69328\nvt 0.543581 0.688202\nvt 0.531837 0.693187\nvt 0.537387 0.6777\nvt 0.526815 0.682014\nvt 0.54896 0.659417\nvt 0.540909 0.664031\nvt 0.542726 0.652424\nvt 0.535479 0.656268\nvt 0.493419 0.702678\nvt 0.480071 0.703424\nvt 0.492117 0.690071\nvt 0.480053 0.690679\nvt 0.512338 0.674822\nvt 0.5018 0.677032\nvt 0.509515 0.665031\nvt 0.499899 0.666778\nvt 0.489206 0.658378\nvt 0.479996 0.658704\nvt 0.488534 0.649873\nvt 0.479985 0.650169\nvt 0.503576 0.64114\nvt 0.495896 0.641834\nvt 0.502355 0.634941\nvt 0.495065 0.635398\nvt 0.523555 0.652033\nvt 0.515595 0.654316\nvt 0.520358 0.645204\nvt 0.513005 0.646864\nvt 0.529498 0.636707\nvt 0.524102 0.638012\nvt 0.527224 0.632853\nvt 0.522016 0.633346\nvt 0.514804 0.629026\nvt 0.508287 0.629227\nvt 0.514128 0.624687\nvt 0.50761 0.624663\nvt 0.520438 0.617806\nvt 0.527187 0.618537\nvt 0.520349 0.621256\nvt 0.526838 0.622051\nvt 0.487245 0.629833\nvt 0.479978 0.629919\nvt 0.487012 0.624789\nvt 0.479983 0.624897\nvt 0.493519 0.616745\nvt 0.500259 0.616883\nvt 0.493695 0.620417\nvt 0.500484 0.620502\nvt 0.480004 0.610625\nvt 0.486682 0.610586\nvt 0.480001 0.613464\nvt 0.486704 0.613439\nvt 0.500102 0.60806\nvt 0.493373 0.608055\nvt 0.50011 0.605668\nvt 0.493379 0.605738\nvt 0.51369 0.614069\nvt 0.506898 0.613828\nvt 0.513711 0.610994\nvt 0.506883 0.610818\nvt 0.527779 0.608567\nvt 0.520696 0.608321\nvt 0.527782 0.605436\nvt 0.520704 0.605468\nvt 0.513616 0.600359\nvt 0.513697 0.602935\nvt 0.506824 0.600735\nvt 0.506861 0.603175\nvt 0.526723 0.593454\nvt 0.527134 0.596399\nvt 0.520099 0.594342\nvt 0.520307 0.597148\nvt 0.486676 0.601418\nvt 0.486678 0.603606\nvt 0.480002 0.60145\nvt 0.480005 0.603643\nvt 0.500149 0.59602\nvt 0.500079 0.598617\nvt 0.493451 0.59637\nvt 0.49338 0.59894\nvt 0.486905 0.590461\nvt 0.486789 0.593726\nvt 0.479945 0.590443\nvt 0.479966 0.593765\nvt 0.49418 0.586513\nvt 0.501113 0.586299\nvt 0.501853 0.581994\nvt 0.506955 0.592741\nvt 0.507262 0.589592\nvt 0.513476 0.592211\nvt 0.51367 0.589169\nvt 0.520131 0.585338\nvt 0.525527 0.584774\nvt 0.526092 0.581807\nvt 0.567396 0.116259\nvt 0.548301 0.110687\nvt 0.57204 0.0968793\nvt 0.552803 0.0919056\nvt 0.541798 0.0502111\nvt 0.53786 0.0687108\nvt 0.522271 0.0464429\nvt 0.518774 0.0645765\nvt 0.545361 0.191827\nvt 0.525697 0.183001\nvt 0.552297 0.173682\nvt 0.532662 0.165668\nvt 0.519803 0.140967\nvt 0.501841 0.134671\nvt 0.524915 0.123319\nvt 0.506761 0.117678\nvt 0.479518 0.144817\nvt 0.473622 0.160216\nvt 0.463692 0.13902\nvt 0.458265 0.153785\nvt 0.456963 0.104144\nvt 0.453225 0.119312\nvt 0.442359 0.101208\nvt 0.43907 0.115718\nvt 0.496814 0.0783217\nvt 0.493306 0.0956438\nvt 0.479203 0.0746868\nvt 0.476239 0.0916247\nvt 0.465263 0.0365723\nvt 0.464353 0.0547124\nvt 0.448514 0.035571\nvt 0.448458 0.0535785\nvt 0.512817 0.240177\nvt 0.500868 0.255555\nvt 0.496707 0.230358\nvt 0.485647 0.245061\nvt 0.490582 0.206107\nvt 0.474618 0.197429\nvt 0.49941 0.190806\nvt 0.482702 0.182678\nvt 0.463669 0.299604\nvt 0.449602 0.311582\nvt 0.450004 0.28544\nvt 0.436585 0.296241\nvt 0.460186 0.24829\nvt 0.448978 0.260893\nvt 0.446613 0.237658\nvt 0.436118 0.24942\nvt 0.413841 0.248761\nvt 0.403215 0.257657\nvt 0.403362 0.23813\nvt 0.393697 0.246469\nvt 0.402258 0.219337\nvt 0.392913 0.210701\nvt 0.410375 0.209457\nvt 0.400215 0.201389\nvt 0.451468 0.202811\nvt 0.44286 0.215613\nvt 0.437883 0.19463\nvt 0.429995 0.206822\nvt 0.43825 0.161632\nvt 0.43203 0.174671\nvt 0.425459 0.15597\nvt 0.419873 0.168387\nvt 0.397346 0.184411\nvt 0.388575 0.178307\nvt 0.403208 0.173976\nvt 0.393726 0.168484\nvt 0.393398 0.143384\nvt 0.389475 0.153761\nvt 0.384706 0.140389\nvt 0.381355 0.150081\nvt 0.370481 0.217631\nvt 0.364623 0.209405\nvt 0.377627 0.210729\nvt 0.370986 0.203027\nvt 0.370641 0.189098\nvt 0.364958 0.183101\nvt 0.37588 0.18135\nvt 0.369591 0.175882\nvt 0.351034 0.188571\nvt 0.347541 0.182734\nvt 0.355601 0.183576\nvt 0.351629 0.178194\nvt 0.351446 0.168259\nvt 0.347911 0.164137\nvt 0.354477 0.162507\nvt 0.350575 0.158862\nvt 0.367654 0.163523\nvt 0.362085 0.159611\nvt 0.370983 0.15547\nvt 0.364935 0.152125\nvt 0.361842 0.141737\nvt 0.356866 0.139691\nvt 0.363827 0.133946\nvt 0.358464 0.132516\nvt 0.433286 0.0700776\nvt 0.431378 0.0849802\nvt 0.420681 0.0709736\nvt 0.418926 0.0848497\nvt 0.411891 0.0465642\nvt 0.410621 0.0597477\nvt 0.401067 0.0514741\nvt 0.399906 0.0633619\nvt 0.422376 0.126119\nvt 0.418319 0.138821\nvt 0.410721 0.123386\nvt 0.407178 0.135378\nvt 0.405405 0.0977856\nvt 0.402907 0.109723\nvt 0.395191 0.0980003\nvt 0.392998 0.109033\nvt 0.381851 0.118709\nvt 0.379525 0.128419\nvt 0.3741 0.118015\nvt 0.372187 0.126976\nvt 0.369852 0.100868\nvt 0.368684 0.109311\nvt 0.363245 0.10231\nvt 0.362432 0.109974\nvt 0.388639 0.0778134\nvt 0.387422 0.0883125\nvt 0.379403 0.0807309\nvt 0.378604 0.0902239\nvt 0.370423 0.0667688\nvt 0.37103 0.0752748\nvt 0.361706 0.0719678\nvt 0.363152 0.0793928\nvt 0.397497 0.331345\nvt 0.379292 0.336333\nvt 0.389805 0.317199\nvt 0.373233 0.322055\nvt 0.411169 0.290735\nvt 0.39701 0.297649\nvt 0.401281 0.277635\nvt 0.388461 0.284323\nvt 0.324361 0.349053\nvt 0.305998 0.350766\nvt 0.322882 0.332606\nvt 0.306004 0.333638\nvt 0.352182 0.312056\nvt 0.336847 0.315166\nvt 0.348005 0.298138\nvt 0.33408 0.300863\nvt 0.318814 0.288763\nvt 0.306112 0.28925\nvt 0.317642 0.275641\nvt 0.306184 0.27604\nvt 0.336979 0.260028\nvt 0.326812 0.262033\nvt 0.333991 0.248543\nvt 0.324824 0.250351\nvt 0.368585 0.277119\nvt 0.356425 0.281436\nvt 0.362414 0.264948\nvt 0.351485 0.268989\nvt 0.375874 0.242927\nvt 0.366472 0.248666\nvt 0.369027 0.232844\nvt 0.360611 0.238128\nvt 0.339545 0.235414\nvt 0.336551 0.225572\nvt 0.347564 0.232319\nvt 0.343827 0.222833\nvt 0.347117 0.210834\nvt 0.343816 0.203004\nvt 0.353413 0.206808\nvt 0.349528 0.199412\nvt 0.306243 0.240501\nvt 0.306184 0.22994\nvt 0.314678 0.240224\nvt 0.31388 0.229697\nvt 0.320195 0.219222\nvt 0.319061 0.210194\nvt 0.32715 0.218102\nvt 0.325492 0.209276\nvt 0.312054 0.202165\nvt 0.306 0.202257\nvt 0.311617 0.194368\nvt 0.305975 0.194462\nvt 0.321626 0.186903\nvt 0.316478 0.187233\nvt 0.320605 0.180847\nvt 0.315796 0.18111\nvt 0.329857 0.199972\nvt 0.328145 0.192763\nvt 0.335482 0.198244\nvt 0.333358 0.191308\nvt 0.336088 0.183203\nvt 0.334011 0.177714\nvt 0.340425 0.180721\nvt 0.338002 0.175528\nvt 0.825016 0.153365\nvt 0.820748 0.160054\nvt 0.804746 0.15055\nvt 0.802825 0.157376\nvt 0.821849 0.173394\nvt 0.829818 0.169397\nvt 0.832058 0.178423\nvt 0.842397 0.175242\nvt 0.850518 0.126214\nvt 0.872683 0.129542\nvt 0.85036 0.137636\nvt 0.873006 0.141476\nvt 0.805914 0.141937\nvt 0.827284 0.144521\nvt 0.950979 0.178035\nvt 0.925834 0.173877\nvt 0.947195 0.16523\nvt 0.922493 0.161281\nvt 0.896313 0.145121\nvt 0.895127 0.132894\nvt 0.918049 0.207002\nvt 0.898307 0.203742\nvt 0.912843 0.195007\nvt 0.892266 0.192314\nvt 0.955238 0.190852\nvt 0.930557 0.186459\nvt 0.840446 0.184757\nvt 0.852278 0.18265\nvt 0.874765 0.191175\nvt 0.880961 0.201685\nvt 0.888349 0.222659\nvt 0.904922 0.225885\nvt 0.890067 0.233054\nvt 0.905997 0.236723\nvt 0.863737 0.237358\nvt 0.876619 0.240042\nvt 0.86436 0.246924\nvt 0.876847 0.249969\nvt 0.964357 0.240027\nvt 0.986457 0.245675\nvt 0.960795 0.251033\nvt 0.980423 0.256469\nvt 0.922114 0.25185\nvt 0.939072 0.256705\nvt 0.920017 0.262492\nvt 0.93574 0.267413\nvt 0.94704 0.283323\nvt 0.962322 0.288849\nvt 0.941917 0.29383\nvt 0.956288 0.299642\nvt 0.909902 0.292474\nvt 0.923092 0.298016\nvt 0.905626 0.301576\nvt 0.91814 0.307166\nvt 0.889202 0.26364\nvt 0.90291 0.268057\nvt 0.887276 0.273369\nvt 0.900254 0.277885\nvt 0.862046 0.275213\nvt 0.87306 0.278765\nvt 0.860193 0.284298\nvt 0.870687 0.287889\nvt 0.901509 0.330114\nvt 0.91237 0.334812\nvt 0.895528 0.337184\nvt 0.905897 0.341416\nvt 0.889496 0.305109\nvt 0.900998 0.309999\nvt 0.885157 0.313274\nvt 0.896066 0.317933\nvt 0.885958 0.361553\nvt 0.879169 0.368814\nvt 0.876554 0.358926\nvt 0.869941 0.366777\nvt 0.870257 0.336799\nvt 0.879652 0.340523\nvt 0.864645 0.344711\nvt 0.873646 0.348142\nvt 0.850678 0.349454\nvt 0.84497 0.358061\nvt 0.843187 0.345887\nvt 0.838002 0.354425\nvt 0.837669 0.323026\nvt 0.844899 0.3261\nvt 0.834066 0.331081\nvt 0.840756 0.334194\nvt 0.861038 0.313274\nvt 0.870544 0.317089\nvt 0.8571 0.32141\nvt 0.866092 0.325096\nvt 0.855209 0.301529\nvt 0.846501 0.298476\nvt 0.857902 0.293043\nvt 0.848668 0.28996\nvt 0.832536 0.376313\nvt 0.838963 0.367047\nvt 0.83943 0.379977\nvt 0.846256 0.37045\nvt 0.810306 0.382462\nvt 0.816039 0.375514\nvt 0.81391 0.387912\nvt 0.820465 0.380449\nvt 0.858843 0.393849\nvt 0.852305 0.402562\nvt 0.849538 0.393295\nvt 0.843111 0.402769\nvt 0.847475 0.382441\nvt 0.854388 0.373121\nvt 0.824121 0.424233\nvt 0.819897 0.434718\nvt 0.816186 0.426748\nvt 0.812891 0.437797\nvt 0.846017 0.411338\nvt 0.837356 0.41242\nvt 0.793297 0.415692\nvt 0.801909 0.41303\nvt 0.793145 0.425024\nvt 0.801522 0.422581\nvt 0.805902 0.441104\nvt 0.808252 0.429971\nvt 0.804281 0.388182\nvt 0.806903 0.393901\nvt 0.793014 0.40775\nvt 0.80113 0.405044\nvt 0.815971 0.184598\nvt 0.809767 0.187886\nvt 0.80904 0.180707\nvt 0.804121 0.184415\nvt 0.790162 0.184797\nvt 0.795227 0.186042\nvt 0.789021 0.188923\nvt 0.793001 0.190024\nvt 0.831308 0.201925\nvt 0.834863 0.209243\nvt 0.822811 0.203246\nvt 0.826071 0.210013\nvt 0.808747 0.195015\nvt 0.812371 0.199523\nvt 0.803846 0.197964\nvt 0.80689 0.201985\nvt 0.806733 0.214069\nvt 0.802331 0.215797\nvt 0.804643 0.208857\nvt 0.800561 0.21091\nvt 0.791986 0.207992\nvt 0.794013 0.205806\nvt 0.793336 0.210997\nvt 0.79569 0.209007\nvt 0.79422 0.195419\nvt 0.797129 0.197789\nvt 0.792097 0.198571\nvt 0.794413 0.20064\nvt 0.786867 0.199715\nvt 0.788675 0.200343\nvt 0.786442 0.202571\nvt 0.787844 0.203092\nvt 0.842674 0.242747\nvt 0.833566 0.241612\nvt 0.841617 0.233894\nvt 0.832384 0.233065\nvt 0.82275 0.225002\nvt 0.815912 0.225584\nvt 0.820808 0.217736\nvt 0.81413 0.218688\nvt 0.841601 0.278714\nvt 0.833602 0.276706\nvt 0.842555 0.269804\nvt 0.834159 0.267914\nvt 0.826595 0.257863\nvt 0.819724 0.257087\nvt 0.826294 0.24938\nvt 0.81933 0.248899\nvt 0.808673 0.26425\nvt 0.813931 0.26473\nvt 0.808976 0.272295\nvt 0.814071 0.272959\nvt 0.799265 0.248861\nvt 0.803105 0.248653\nvt 0.799821 0.256208\nvt 0.803661 0.256196\nvt 0.812379 0.240882\nvt 0.806997 0.241075\nvt 0.811299 0.233386\nvt 0.806047 0.233931\nvt 0.800817 0.228332\nvt 0.797396 0.229311\nvt 0.79982 0.222577\nvt 0.796566 0.223786\nvt 0.833913 0.312269\nvt 0.827554 0.309959\nvt 0.836369 0.304115\nvt 0.829536 0.301839\nvt 0.824675 0.291785\nvt 0.818826 0.290314\nvt 0.825672 0.283513\nvt 0.819475 0.282146\nvt 0.824608 0.336224\nvt 0.820991 0.344208\nvt 0.819701 0.333701\nvt 0.816617 0.341578\nvt 0.817784 0.323743\nvt 0.813559 0.321962\nvt 0.819977 0.315927\nvt 0.81532 0.314223\nvt 0.805318 0.32661\nvt 0.808251 0.328008\nvt 0.803895 0.333986\nvt 0.806458 0.335502\nvt 0.80113 0.309597\nvt 0.804071 0.310456\nvt 0.800816 0.317032\nvt 0.8035 0.317992\nvt 0.812196 0.304978\nvt 0.808078 0.303793\nvt 0.81298 0.297085\nvt 0.80855 0.296001\nvt 0.800973 0.279155\nvt 0.804693 0.279631\nvt 0.801215 0.286835\nvt 0.804754 0.287411\nvt 0.808824 0.36727\nvt 0.80438 0.373717\nvt 0.805915 0.363936\nvt 0.802012 0.370149\nvt 0.809831 0.346893\nvt 0.806719 0.354214\nvt 0.806896 0.344739\nvt 0.804208 0.351858\nvt 0.790109 0.38585\nvt 0.785182 0.386784\nvt 0.789464 0.382019\nvt 0.785139 0.382805\nvt 0.796387 0.372111\nvt 0.792678 0.376108\nvt 0.795085 0.36917\nvt 0.791788 0.373022\nvt 0.78804 0.372645\nvt 0.785021 0.373405\nvt 0.787719 0.370006\nvt 0.785015 0.370633\nvt 0.789846 0.365272\nvt 0.789357 0.362535\nvt 0.792173 0.361974\nvt 0.79143 0.359564\nvt 0.799501 0.356177\nvt 0.796806 0.361814\nvt 0.797923 0.354271\nvt 0.79553 0.359696\nvt 0.798362 0.338312\nvt 0.800188 0.339705\nvt 0.79692 0.344681\nvt 0.798479 0.346347\nvt 0.330218 0.0664261\nvt 0.328129 0.0707093\nvt 0.324229 0.0657082\nvt 0.322727 0.06988\nvt 0.316272 0.0733017\nvt 0.315347 0.0772123\nvt 0.31119 0.0729084\nvt 0.310742 0.0768041\nvt 0.351867 0.072293\nvt 0.34658 0.0779631\nvt 0.347343 0.069632\nvt 0.342872 0.0750467\nvt 0.328275 0.0802421\nvt 0.330767 0.0760754\nvt 0.332053 0.0819921\nvt 0.335097 0.0776764\nvt 0.32939 0.0919511\nvt 0.332265 0.0882344\nvt 0.33162 0.0946492\nvt 0.334785 0.090964\nvt 0.320167 0.0940065\nvt 0.321948 0.0910547\nvt 0.322344 0.095943\nvt 0.324493 0.0929929\nvt 0.322362 0.0827162\nvt 0.32068 0.0862722\nvt 0.318505 0.0816505\nvt 0.317252 0.0851693\nvt 0.312852 0.0877075\nvt 0.312132 0.0907148\nvt 0.30951 0.0872934\nvt 0.309163 0.0903009\nvt 0.357415 0.0900892\nvt 0.357676 0.0969275\nvt 0.351965 0.093156\nvt 0.352443 0.0992381\nvt 0.342067 0.0945822\nvt 0.340429 0.0905357\nvt 0.346188 0.0911047\nvt 0.34449 0.0865964\nvt 0.356024 0.117694\nvt 0.354966 0.124574\nvt 0.351466 0.117985\nvt 0.350681 0.124263\nvt 0.348066 0.107086\nvt 0.347909 0.112722\nvt 0.344247 0.10877\nvt 0.344257 0.113836\nvt 0.340871 0.119626\nvt 0.340539 0.124282\nvt 0.338021 0.120348\nvt 0.337783 0.124532\nvt 0.334919 0.113791\nvt 0.335275 0.117431\nvt 0.332224 0.115487\nvt 0.332626 0.118716\nvt 0.337216 0.108155\nvt 0.336358 0.104372\nvt 0.340405 0.106013\nvt 0.339607 0.101766\nvt 0.327864 0.104133\nvt 0.330559 0.100876\nvt 0.329439 0.106654\nvt 0.332175 0.103766\nvt 0.349098 0.150141\nvt 0.345659 0.147621\nvt 0.350873 0.144236\nvt 0.347202 0.142222\nvt 0.345099 0.135219\nvt 0.34205 0.134187\nvt 0.346073 0.129751\nvt 0.342886 0.129239\nvt 0.339072 0.168149\nvt 0.336638 0.164088\nvt 0.342048 0.164666\nvt 0.339366 0.160936\nvt 0.339055 0.154019\nvt 0.336552 0.15125\nvt 0.340944 0.149928\nvt 0.338295 0.147527\nvt 0.332361 0.151739\nvt 0.330231 0.154188\nvt 0.330289 0.149285\nvt 0.3283 0.151519\nvt 0.33129 0.141914\nvt 0.3299 0.144661\nvt 0.329115 0.140484\nvt 0.327815 0.142939\nvt 0.33834 0.137621\nvt 0.337202 0.141659\nvt 0.335855 0.136536\nvt 0.334785 0.140175\nvt 0.334853 0.12857\nvt 0.334274 0.132167\nvt 0.332414 0.128603\nvt 0.331873 0.131802\nvt 0.328141 0.174172\nvt 0.323979 0.17504\nvt 0.326592 0.169592\nvt 0.322725 0.170376\nvt 0.331572 0.162705\nvt 0.32847 0.164371\nvt 0.329655 0.159229\nvt 0.32678 0.160783\nvt 0.310588 0.175636\nvt 0.305978 0.175598\nvt 0.310292 0.170901\nvt 0.306001 0.170931\nvt 0.317791 0.166629\nvt 0.313947 0.166772\nvt 0.316916 0.162998\nvt 0.313368 0.163192\nvt 0.309456 0.160095\nvt 0.306058 0.160122\nvt 0.309185 0.157292\nvt 0.306066 0.157339\nvt 0.314521 0.154298\nvt 0.311754 0.154616\nvt 0.313766 0.151921\nvt 0.311253 0.152266\nvt 0.322321 0.158643\nvt 0.319268 0.159353\nvt 0.321026 0.155711\nvt 0.318221 0.156426\nvt 0.320718 0.149739\nvt 0.322777 0.148528\nvt 0.322174 0.152095\nvt 0.324414 0.150799\nvt 0.313147 0.0965392\nvt 0.314021 0.0941342\nvt 0.31521 0.0975087\nvt 0.316389 0.0951732\nvt 0.308152 0.0997757\nvt 0.308364 0.0977245\nvt 0.30994 0.10012\nvt 0.310407 0.0980901\nvt 0.319753 0.102283\nvt 0.321853 0.100574\nvt 0.320233 0.104508\nvt 0.322494 0.103217\nvt 0.31706 0.102168\nvt 0.315665 0.103792\nvt 0.315743 0.100766\nvt 0.314552 0.102547\nvt 0.315455 0.108122\nvt 0.314266 0.109244\nvt 0.315135 0.10661\nvt 0.314002 0.107876\nvt 0.312522 0.108003\nvt 0.3117 0.109267\nvt 0.311826 0.107083\nvt 0.31111 0.108429\nvt 0.310441 0.10417\nvt 0.310995 0.102511\nvt 0.311608 0.104832\nvt 0.312339 0.103247\nvt 0.307463 0.10662\nvt 0.307608 0.105066\nvt 0.308499 0.106848\nvt 0.308807 0.105314\nvt 0.328093 0.111836\nvt 0.328949 0.114432\nvt 0.325652 0.114196\nvt 0.326434 0.116443\nvt 0.321505 0.113426\nvt 0.322482 0.114774\nvt 0.319581 0.115961\nvt 0.320403 0.117135\nvt 0.330218 0.122917\nvt 0.330185 0.125845\nvt 0.327653 0.123857\nvt 0.327638 0.126427\nvt 0.322525 0.123834\nvt 0.322183 0.121971\nvt 0.324938 0.12259\nvt 0.324559 0.12043\nvt 0.318356 0.128969\nvt 0.318293 0.127539\nvt 0.320476 0.128341\nvt 0.320426 0.126671\nvt 0.314484 0.127927\nvt 0.314301 0.126888\nvt 0.316198 0.127095\nvt 0.315988 0.125891\nvt 0.317535 0.123409\nvt 0.317095 0.122209\nvt 0.319534 0.121891\nvt 0.319027 0.12049\nvt 0.313408 0.124157\nvt 0.312997 0.12345\nvt 0.314904 0.122779\nvt 0.314426 0.121976\nvt 0.328818 0.134286\nvt 0.32797 0.136862\nvt 0.326498 0.13384\nvt 0.32574 0.136109\nvt 0.322389 0.131485\nvt 0.322647 0.129606\nvt 0.324697 0.131426\nvt 0.325015 0.129259\nvt 0.324418 0.143407\nvt 0.322881 0.145094\nvt 0.322551 0.141904\nvt 0.321161 0.143403\nvt 0.322774 0.137363\nvt 0.321841 0.139072\nvt 0.320788 0.136652\nvt 0.32 0.138151\nvt 0.317536 0.138555\nvt 0.316651 0.139556\nvt 0.316151 0.137793\nvt 0.315455 0.138642\nvt 0.315289 0.136318\nvt 0.314009 0.136011\nvt 0.315598 0.135312\nvt 0.314157 0.135091\nvt 0.319875 0.133171\nvt 0.319444 0.134667\nvt 0.317899 0.133116\nvt 0.317584 0.134412\nvt 0.316251 0.131957\nvt 0.314568 0.132131\nvt 0.316359 0.130771\nvt 0.314622 0.131111\nvt 0.314325 0.147121\nvt 0.316206 0.146495\nvt 0.31524 0.149178\nvt 0.317341 0.148498\nvt 0.318189 0.143041\nvt 0.316715 0.143946\nvt 0.316842 0.141612\nvt 0.315541 0.142393\nvt 0.308474 0.150216\nvt 0.306148 0.150273\nvt 0.30828 0.148083\nvt 0.306205 0.148138\nvt 0.309557 0.144075\nvt 0.311135 0.143839\nvt 0.309932 0.145915\nvt 0.311727 0.145639\nvt 0.306464 0.140984\nvt 0.307698 0.140944\nvt 0.306403 0.142535\nvt 0.307817 0.142499\nvt 0.309727 0.139325\nvt 0.308664 0.139451\nvt 0.309409 0.13809\nvt 0.308459 0.138193\nvt 0.313246 0.141518\nvt 0.311943 0.141903\nvt 0.312462 0.140165\nvt 0.311313 0.140464\nvt 0.313725 0.138373\nvt 0.312809 0.138686\nvt 0.313142 0.137537\nvt 0.312265 0.137685\nvt 0.308712 0.109984\nvt 0.309071 0.108632\nvt 0.309354 0.110402\nvt 0.309827 0.109103\nvt 0.307061 0.112169\nvt 0.307144 0.110879\nvt 0.307597 0.112297\nvt 0.307786 0.111026\nvt 0.311507 0.11234\nvt 0.310772 0.113277\nvt 0.311338 0.111334\nvt 0.31064 0.112374\nvt 0.309772 0.11267\nvt 0.309269 0.113686\nvt 0.309401 0.1121\nvt 0.308954 0.113204\nvt 0.309101 0.115698\nvt 0.308701 0.116354\nvt 0.30902 0.115111\nvt 0.30863 0.115878\nvt 0.308155 0.11632\nvt 0.307897 0.117089\nvt 0.307952 0.116115\nvt 0.307709 0.116974\nvt 0.308231 0.113925\nvt 0.307954 0.114964\nvt 0.307849 0.113679\nvt 0.307632 0.114777\nvt 0.307152 0.115712\nvt 0.30704 0.116707\nvt 0.306849 0.115651\nvt 0.306794 0.116667\nvt 0.310488 0.117192\nvt 0.309892 0.117644\nvt 0.310933 0.115922\nvt 0.310277 0.116498\nvt 0.30955 0.115751\nvt 0.310108 0.115045\nvt 0.309415 0.116615\nvt 0.309955 0.116016\nvt 0.308872 0.120739\nvt 0.308376 0.121683\nvt 0.308505 0.120843\nvt 0.308095 0.121675\nvt 0.308992 0.119071\nvt 0.30859 0.120043\nvt 0.308604 0.119329\nvt 0.308275 0.120184\nvt 0.307748 0.120972\nvt 0.307511 0.121549\nvt 0.307584 0.120963\nvt 0.307401 0.121444\nvt 0.30743 0.12056\nvt 0.307537 0.120082\nvt 0.307594 0.120476\nvt 0.307746 0.119934\nvt 0.308387 0.11836\nvt 0.308764 0.117961\nvt 0.308194 0.119074\nvt 0.30853 0.118769\nvt 0.308074 0.117723\nvt 0.308339 0.117414\nvt 0.307943 0.118308\nvt 0.308218 0.118031\nvt 0.307385 0.123449\nvt 0.307174 0.123758\nvt 0.307236 0.12329\nvt 0.30706 0.123564\nvt 0.307551 0.122286\nvt 0.30731 0.122762\nvt 0.307407 0.122173\nvt 0.307205 0.12259\nvt 0.306568 0.123952\nvt 0.306668 0.123942\nvt 0.306568 0.124196\nvt 0.306694 0.124181\nvt 0.306848 0.123529\nvt 0.306737 0.123648\nvt 0.306804 0.123283\nvt 0.306708 0.123396\nvt 0.306571 0.12287\nvt 0.306615 0.122871\nvt 0.30657 0.123177\nvt 0.306622 0.123173\nvt 0.306721 0.122442\nvt 0.30666 0.122504\nvt 0.306724 0.122061\nvt 0.306663 0.122107\nvt 0.306822 0.122633\nvt 0.30693 0.122452\nvt 0.306862 0.122889\nvt 0.306976 0.122691\nvt 0.307045 0.121616\nvt 0.307168 0.121423\nvt 0.30704 0.121934\nvt 0.307177 0.121669\nvt 0.307326 0.117728\nvt 0.307185 0.11852\nvt 0.307137 0.117676\nvt 0.307023 0.118503\nvt 0.306801 0.119252\nvt 0.306753 0.119949\nvt 0.306676 0.11924\nvt 0.306652 0.119949\nvt 0.307866 0.117836\nvt 0.307712 0.118471\nvt 0.307119 0.119859\nvt 0.307219 0.119231\nvt 0.307273 0.119794\nvt 0.30738 0.119195\nvt 0.307347 0.120226\nvt 0.307264 0.120696\nvt 0.306936 0.121418\nvt 0.307065 0.121261\nvt 0.306916 0.121812\nvt 0.306806 0.120561\nvt 0.306914 0.120509\nvt 0.306762 0.121132\nvt 0.306861 0.121059\nvt 0.306616 0.121685\nvt 0.306669 0.121671\nvt 0.306613 0.122135\nvt 0.307199 0.124436\nvt 0.307466 0.124165\nvt 0.307324 0.124694\nvt 0.307643 0.12439\nvt 0.307138 0.12517\nvt 0.307234 0.125478\nvt 0.306845 0.125272\nvt 0.306891 0.125593\nvt 0.308588 0.12254\nvt 0.309137 0.121626\nvt 0.308964 0.122602\nvt 0.30961 0.121584\nvt 0.30854 0.124391\nvt 0.308267 0.124163\nvt 0.30911 0.123716\nvt 0.308764 0.123537\nvt 0.310618 0.123296\nvt 0.310211 0.123017\nvt 0.311621 0.122038\nvt 0.311117 0.121806\nvt 0.309565 0.125831\nvt 0.309313 0.125403\nvt 0.310424 0.125069\nvt 0.310099 0.124645\nvt 0.307896 0.125959\nvt 0.307762 0.125581\nvt 0.308441 0.125567\nvt 0.308251 0.125203\nvt 0.307511 0.126592\nvt 0.307604 0.12701\nvt 0.307031 0.126712\nvt 0.307075 0.127137\nvt 0.311245 0.117726\nvt 0.311927 0.116209\nvt 0.311987 0.117374\nvt 0.312762 0.115719\nvt 0.312571 0.118629\nvt 0.311553 0.120254\nvt 0.311851 0.118752\nvt 0.310941 0.120277\nvt 0.314249 0.110744\nvt 0.313214 0.111685\nvt 0.313245 0.110315\nvt 0.315059 0.111569\nvt 0.316279 0.110815\nvt 0.314451 0.113413\nvt 0.315557 0.112846\nvt 0.318388 0.105743\nvt 0.318252 0.107852\nvt 0.31998 0.106953\nvt 0.322146 0.109572\nvt 0.320415 0.1125\nvt 0.32068 0.109273\nvt 0.319233 0.112085\nvt 0.31668 0.11451\nvt 0.315339 0.116737\nvt 0.315646 0.114601\nvt 0.314473 0.116703\nvt 0.314719 0.119043\nvt 0.315401 0.119521\nvt 0.313343 0.120853\nvt 0.313905 0.121325\nvt 0.310985 0.136794\nvt 0.310065 0.136883\nvt 0.310788 0.135834\nvt 0.309885 0.135895\nvt 0.312865 0.134972\nvt 0.311717 0.13493\nvt 0.312942 0.134073\nvt 0.311744 0.134078\nvt 0.306576 0.136071\nvt 0.307373 0.136047\nvt 0.306571 0.137113\nvt 0.307432 0.137092\nvt 0.308927 0.135027\nvt 0.308107 0.135068\nvt 0.308888 0.134185\nvt 0.308074 0.134224\nvt 0.306627 0.132768\nvt 0.307335 0.132755\nvt 0.306601 0.133484\nvt 0.307317 0.133471\nvt 0.30886 0.131982\nvt 0.308078 0.132051\nvt 0.308863 0.131322\nvt 0.308083 0.131411\nvt 0.310681 0.133298\nvt 0.309731 0.133357\nvt 0.310682 0.13252\nvt 0.309721 0.132607\nvt 0.311835 0.130777\nvt 0.313125 0.130472\nvt 0.311818 0.1316\nvt 0.313117 0.131385\nvt 0.308418 0.12775\nvt 0.308304 0.127244\nvt 0.309161 0.127392\nvt 0.308999 0.126869\nvt 0.307189 0.128585\nvt 0.307832 0.128484\nvt 0.307229 0.129117\nvt 0.307904 0.129021\nvt 0.312087 0.125306\nvt 0.311761 0.124654\nvt 0.310365 0.128127\nvt 0.310193 0.127488\nvt 0.311413 0.127572\nvt 0.311197 0.126867\nvt 0.312974 0.128618\nvt 0.31283 0.127706\nvt 0.310656 0.130282\nvt 0.311773 0.129967\nvt 0.310701 0.131018\nvt 0.30872 0.129424\nvt 0.309557 0.129168\nvt 0.308776 0.130051\nvt 0.309629 0.129838\nvt 0.307344 0.130845\nvt 0.308058 0.130789\nvt 0.307359 0.131458\nvt 0.139096 0.903949\nvt 0.13935 0.908058\nvt 0.134195 0.901237\nvt 0.134577 0.905902\nvt 0.131293 0.91039\nvt 0.134417 0.916914\nvt 0.125781 0.910193\nvt 0.129384 0.917933\nvt 0.149009 0.917325\nvt 0.154065 0.919928\nvt 0.148473 0.921539\nvt 0.153633 0.924761\nvt 0.144029 0.906639\nvt 0.144132 0.910537\nvt 0.134421 0.925656\nvt 0.139023 0.923355\nvt 0.15272 0.92977\nvt 0.147147 0.9256\nvt 0.112575 0.851304\nvt 0.101196 0.850787\nvt 0.115176 0.843851\nvt 0.103734 0.843021\nvt 0.0949692 0.834236\nvt 0.0831936 0.833131\nvt 0.0979736 0.82631\nvt 0.0859812 0.824842\nvt 0.107914 0.883317\nvt 0.096786 0.883912\nvt 0.108181 0.874745\nvt 0.0967947 0.875132\nvt 0.0862863 0.86694\nvt 0.0749071 0.867161\nvt 0.0877733 0.858551\nvt 0.0763631 0.858462\nvt 0.0623407 0.886006\nvt 0.0500999 0.886673\nvt 0.0624228 0.876561\nvt 0.0503828 0.876998\nvt 0.0395431 0.867776\nvt 0.0275564 0.867992\nvt 0.0413637 0.85824\nvt 0.0296423 0.858208\nvt 0.0667415 0.849528\nvt 0.0550607 0.849129\nvt 0.0689497 0.84075\nvt 0.0572193 0.840018\nvt 0.0477215 0.829905\nvt 0.0358998 0.828857\nvt 0.0499867 0.820507\nvt 0.0379856 0.819074\nvt 0.104491 0.921619\nvt 0.100917 0.911893\nvt 0.114385 0.920297\nvt 0.110604 0.910968\nvt 0.0748939 0.894749\nvt 0.0862133 0.893782\nvt 0.0764646 0.904478\nvt 0.0877784 0.903305\nvt 0.134297 0.949331\nvt 0.143367 0.959541\nvt 0.121426 0.95145\nvt 0.12835 0.961612\nvt 0.0854682 0.934755\nvt 0.0977763 0.9331\nvt 0.0894549 0.945022\nvt 0.102573 0.943229\nvt 0.065268 0.959275\nvt 0.0795992 0.957313\nvt 0.0682843 0.969893\nvt 0.0833008 0.967823\nvt 0.0326764 0.941606\nvt 0.046129 0.93985\nvt 0.0345347 0.952415\nvt 0.048463 0.95054\nvt 0.0543934 0.917147\nvt 0.0668206 0.915777\nvt 0.0568249 0.927608\nvt 0.0695712 0.92607\nvt 0.0397903 0.907988\nvt 0.0271014 0.909178\nvt 0.0381335 0.897502\nvt 0.025243 0.898368\nvt 0.140457 0.89769\nvt 0.142148 0.895798\nvt 0.144939 0.900364\nvt 0.14611 0.898197\nvt 0.153077 0.896863\nvt 0.156834 0.898023\nvt 0.151625 0.898352\nvt 0.155872 0.899706\nvt 0.129725 0.883978\nvt 0.135546 0.884898\nvt 0.129554 0.887578\nvt 0.134367 0.887351\nvt 0.139229 0.889727\nvt 0.142872 0.889691\nvt 0.141289 0.892103\nvt 0.144355 0.891615\nvt 0.147301 0.887123\nvt 0.150263 0.887713\nvt 0.146072 0.888294\nvt 0.149186 0.888644\nvt 0.155926 0.890828\nvt 0.153028 0.890956\nvt 0.155123 0.88993\nvt 0.152207 0.889896\nvt 0.151731 0.894412\nvt 0.149258 0.892906\nvt 0.153887 0.893703\nvt 0.15179 0.892423\nvt 0.160551 0.893621\nvt 0.162249 0.894352\nvt 0.158405 0.894161\nvt 0.160663 0.894943\nvt 0.163553 0.889416\nvt 0.162655 0.888686\nvt 0.166525 0.889217\nvt 0.165736 0.888533\nvt 0.161613 0.890402\nvt 0.162687 0.891182\nvt 0.158778 0.890637\nvt 0.159892 0.891486\nvt 0.175047 0.888376\nvt 0.177599 0.888277\nvt 0.175548 0.888797\nvt 0.17829 0.888625\nvt 0.170275 0.889653\nvt 0.173199 0.889438\nvt 0.171087 0.890242\nvt 0.173898 0.889945\nvt 0.178059 0.890514\nvt 0.177324 0.890086\nvt 0.180527 0.890144\nvt 0.179955 0.88975\nvt 0.174036 0.891975\nvt 0.176508 0.891425\nvt 0.175225 0.892514\nvt 0.177643 0.891861\nvt 0.170374 0.891878\nvt 0.167792 0.892323\nvt 0.16928 0.891217\nvt 0.166588 0.891594\nvt 0.164266 0.893912\nvt 0.16656 0.893514\nvt 0.165296 0.894634\nvt 0.167626 0.894269\nvt 0.251152 0.889321\nvt 0.251616 0.881396\nvt 0.261794 0.891202\nvt 0.262173 0.883167\nvt 0.272672 0.876865\nvt 0.272469 0.868821\nvt 0.283028 0.878508\nvt 0.282692 0.87028\nvt 0.207199 0.881175\nvt 0.208557 0.874023\nvt 0.218481 0.883549\nvt 0.219553 0.875974\nvt 0.2309 0.870351\nvt 0.231259 0.863052\nvt 0.2414 0.871986\nvt 0.241612 0.864496\nvt 0.210866 0.85334\nvt 0.211384 0.846521\nvt 0.221207 0.85459\nvt 0.221508 0.84761\nvt 0.231669 0.841541\nvt 0.23165 0.834455\nvt 0.241662 0.842366\nvt 0.241537 0.835066\nvt 0.251895 0.858314\nvt 0.251812 0.850729\nvt 0.262066 0.859557\nvt 0.261873 0.85177\nvt 0.271563 0.844854\nvt 0.271197 0.8369\nvt 0.281508 0.845691\nvt 0.281084 0.837512\nvt 0.241832 0.948396\nvt 0.251454 0.949771\nvt 0.239758 0.956997\nvt 0.249361 0.9583\nvt 0.273164 0.944439\nvt 0.263284 0.942818\nvt 0.275367 0.936174\nvt 0.265347 0.934443\nvt 0.211655 0.953493\nvt 0.203372 0.952649\nvt 0.214217 0.945011\nvt 0.206054 0.944354\nvt 0.226614 0.928591\nvt 0.235923 0.929784\nvt 0.225023 0.937297\nvt 0.234245 0.938458\nvt 0.218572 0.918919\nvt 0.209998 0.918704\nvt 0.218837 0.909908\nvt 0.209827 0.909849\nvt 0.229037 0.893625\nvt 0.239911 0.895495\nvt 0.228821 0.902115\nvt 0.239234 0.903823\nvt 0.258797 0.915892\nvt 0.257185 0.924317\nvt 0.248529 0.914103\nvt 0.247153 0.922635\nvt 0.282944 0.903285\nvt 0.281552 0.9115\nvt 0.27191 0.90129\nvt 0.270743 0.909505\nvt 0.185133 0.951659\nvt 0.179683 0.951437\nvt 0.186283 0.943888\nvt 0.180518 0.943883\nvt 0.200497 0.935798\nvt 0.193652 0.935946\nvt 0.201605 0.927541\nvt 0.194594 0.928087\nvt 0.157299 0.947012\nvt 0.157862 0.939514\nvt 0.163607 0.949759\nvt 0.163817 0.942052\nvt 0.175424 0.936598\nvt 0.169795 0.936242\nvt 0.175825 0.929761\nvt 0.170134 0.92964\nvt 0.15949 0.917049\nvt 0.164908 0.917961\nvt 0.159392 0.922002\nvt 0.16481 0.923184\nvt 0.17035 0.908948\nvt 0.175836 0.90793\nvt 0.170462 0.913177\nvt 0.176123 0.912347\nvt 0.188387 0.921483\nvt 0.182094 0.92262\nvt 0.188433 0.914725\nvt 0.1822 0.916402\nvt 0.200928 0.902842\nvt 0.194373 0.906084\nvt 0.198821 0.896537\nvt 0.193006 0.90076\nvt 0.163844 0.871704\nvt 0.164872 0.866541\nvt 0.17469 0.872951\nvt 0.175905 0.867824\nvt 0.188049 0.863576\nvt 0.189118 0.857223\nvt 0.198848 0.865275\nvt 0.199706 0.85869\nvt 0.119555 0.874052\nvt 0.120269 0.866429\nvt 0.130793 0.872665\nvt 0.131392 0.865971\nvt 0.143978 0.859495\nvt 0.145903 0.852994\nvt 0.155102 0.860032\nvt 0.156818 0.853795\nvt 0.137378 0.84552\nvt 0.126431 0.844697\nvt 0.140223 0.83866\nvt 0.129484 0.837611\nvt 0.163183 0.834096\nvt 0.153396 0.832973\nvt 0.165537 0.827404\nvt 0.156269 0.826239\nvt 0.169322 0.848399\nvt 0.171065 0.841846\nvt 0.179794 0.849534\nvt 0.181178 0.842995\nvt 0.192304 0.837547\nvt 0.19334 0.830901\nvt 0.201988 0.838708\nvt 0.202608 0.832067\nvt 0.17969 0.899996\nvt 0.184557 0.897875\nvt 0.180693 0.902656\nvt 0.186061 0.900335\nvt 0.186685 0.894304\nvt 0.184449 0.893608\nvt 0.189667 0.892441\nvt 0.187134 0.892133\nvt 0.159998 0.902756\nvt 0.164886 0.903014\nvt 0.159707 0.905499\nvt 0.164889 0.905837\nvt 0.174055 0.899375\nvt 0.169522 0.900302\nvt 0.173289 0.897692\nvt 0.169228 0.898485\nvt 0.165294 0.897417\nvt 0.161613 0.897323\nvt 0.165519 0.896296\nvt 0.162386 0.896229\nvt 0.171044 0.894517\nvt 0.168296 0.895068\nvt 0.170083 0.89378\nvt 0.179481 0.894259\nvt 0.176104 0.895413\nvt 0.177983 0.893585\nvt 0.174978 0.894532\nvt 0.181127 0.891487\nvt 0.179058 0.892228\nvt 0.1797 0.891277\nvt 0.162634 0.879165\nvt 0.162473 0.881465\nvt 0.153115 0.878852\nvt 0.154067 0.881274\nvt 0.148855 0.883424\nvt 0.151444 0.884714\nvt 0.143585 0.884294\nvt 0.146963 0.885372\nvt 0.189947 0.884782\nvt 0.19569 0.88736\nvt 0.185768 0.885279\nvt 0.190576 0.886863\nvt 0.168984 0.884939\nvt 0.169807 0.883834\nvt 0.17474 0.885491\nvt 0.176596 0.884712\nvt 0.177916 0.886664\nvt 0.181522 0.887164\nvt 0.176505 0.887111\nvt 0.179625 0.887454\nvt 0.172093 0.88736\nvt 0.171946 0.887898\nvt 0.168282 0.887219\nvt 0.168546 0.887843\nvt 0.163261 0.8856\nvt 0.163773 0.886424\nvt 0.15818 0.885549\nvt 0.159441 0.886434\nvt 0.15729 0.8874\nvt 0.158739 0.888138\nvt 0.154534 0.887699\nvt 0.156155 0.888344\nvt 0.18948 0.889201\nvt 0.191317 0.888886\nvt 0.189672 0.889872\nvt 0.191993 0.889656\nvt 0.187679 0.887908\nvt 0.186428 0.887461\nvt 0.190201 0.888032\nvt 0.189324 0.887476\nvt 0.18203 0.889086\nvt 0.18442 0.88885\nvt 0.182579 0.889453\nvt 0.184968 0.889209\nvt 0.187501 0.889418\nvt 0.187421 0.89002\nvt 0.183986 0.887586\nvt 0.185414 0.88797\nvt 0.181508 0.88873\nvt 0.18392 0.888497\nvt 0.792466 0.353354\nvt 0.791596 0.351143\nvt 0.794047 0.348648\nvt 0.792884 0.346835\nvt 0.791471 0.333908\nvt 0.793144 0.334656\nvt 0.791082 0.339461\nvt 0.792529 0.340323\nvt 0.786631 0.354562\nvt 0.786539 0.350223\nvt 0.788183 0.353462\nvt 0.787996 0.349408\nvt 0.790742 0.357144\nvt 0.790123 0.354523\nvt 0.789836 0.333574\nvt 0.789604 0.339249\nvt 0.786524 0.345221\nvt 0.787993 0.344758\nvt 0.791917 0.314397\nvt 0.793899 0.31486\nvt 0.791893 0.321163\nvt 0.793824 0.32173\nvt 0.798452 0.308863\nvt 0.796026 0.308252\nvt 0.798422 0.301416\nvt 0.79591 0.300898\nvt 0.785002 0.320556\nvt 0.785007 0.313785\nvt 0.786665 0.32057\nvt 0.786649 0.313822\nvt 0.789998 0.307132\nvt 0.78826 0.30698\nvt 0.78986 0.299983\nvt 0.788169 0.299859\nvt 0.78656 0.292554\nvt 0.785121 0.292547\nvt 0.786538 0.285188\nvt 0.785198 0.285179\nvt 0.789204 0.277887\nvt 0.787777 0.277816\nvt 0.788956 0.270503\nvt 0.787613 0.270453\nvt 0.793416 0.293102\nvt 0.791434 0.292848\nvt 0.793103 0.285654\nvt 0.791153 0.285443\nvt 0.794722 0.270932\nvt 0.797413 0.271166\nvt 0.795061 0.278433\nvt 0.797778 0.278756\nvt 0.792483 0.236169\nvt 0.794996 0.23581\nvt 0.79296 0.242438\nvt 0.795524 0.242175\nvt 0.788337 0.226017\nvt 0.789745 0.225725\nvt 0.788646 0.231039\nvt 0.790116 0.230778\nvt 0.794246 0.263453\nvt 0.796976 0.263597\nvt 0.789573 0.249328\nvt 0.791256 0.249234\nvt 0.789855 0.256137\nvt 0.791602 0.256131\nvt 0.787401 0.263168\nvt 0.788665 0.263201\nvt 0.786028 0.249308\nvt 0.786164 0.256089\nvt 0.785148 0.249332\nvt 0.785206 0.256117\nvt 0.786706 0.236788\nvt 0.787717 0.236764\nvt 0.786851 0.242863\nvt 0.787962 0.24287\nvt 0.785331 0.22637\nvt 0.785895 0.226348\nvt 0.785258 0.231375\nvt 0.785898 0.231302\nvt 0.788884 0.217552\nvt 0.787728 0.218005\nvt 0.788411 0.214509\nvt 0.787446 0.215083\nvt 0.788958 0.211116\nvt 0.788217 0.209243\nvt 0.790293 0.209728\nvt 0.789244 0.207626\nvt 0.786051 0.212923\nvt 0.785589 0.212853\nvt 0.786085 0.21087\nvt 0.785568 0.210683\nvt 0.786882 0.218253\nvt 0.786692 0.21531\nvt 0.78819 0.206197\nvt 0.787415 0.207985\nvt 0.786268 0.209024\nvt 0.785651 0.208755\nvt 0.436715 0.425872\nvt 0.458305 0.422526\nvt 0.44042 0.445824\nvt 0.460147 0.443049\nvt 0.409531 0.410883\nvt 0.386418 0.418102\nvt 0.40357 0.390276\nvt 0.378286 0.398452\nvt 0.450328 0.497392\nvt 0.465123 0.495661\nvt 0.453102 0.511766\nvt 0.466519 0.510309\nvt 0.409009 0.472753\nvt 0.426258 0.467966\nvt 0.415645 0.488915\nvt 0.431231 0.484723\nvt 0.415022 0.521255\nvt 0.403499 0.525849\nvt 0.408212 0.508343\nvt 0.395413 0.513721\nvt 0.347741 0.502534\nvt 0.361518 0.493512\nvt 0.360705 0.515326\nvt 0.37302 0.507335\nvt 0.383359 0.462\nvt 0.36566 0.469691\nvt 0.373727 0.444365\nvt 0.353956 0.452676\nvt 0.320568 0.444692\nvt 0.301567 0.456559\nvt 0.304415 0.425717\nvt 0.282936 0.437955\nvt 0.470507 0.555447\nvt 0.461132 0.555962\nvt 0.469727 0.54609\nvt 0.45955 0.546882\nvt 0.446829 0.538137\nvt 0.436324 0.540262\nvt 0.443617 0.526845\nvt 0.432066 0.529522\nvt 0.472495 0.582144\nvt 0.465181 0.582005\nvt 0.47214 0.576906\nvt 0.464474 0.576956\nvt 0.455682 0.571267\nvt 0.448123 0.57163\nvt 0.454009 0.564515\nvt 0.445893 0.565266\nvt 0.444815 0.581517\nvt 0.438958 0.581274\nvt 0.443217 0.577213\nvt 0.437137 0.577472\nvt 0.428735 0.574291\nvt 0.423885 0.576029\nvt 0.424783 0.569812\nvt 0.419247 0.57219\nvt 0.434864 0.559653\nvt 0.427116 0.561808\nvt 0.430914 0.551934\nvt 0.422393 0.554686\nvt 0.408266 0.550187\nvt 0.400435 0.55456\nvt 0.40103 0.541325\nvt 0.392269 0.546543\nvt 0.303218 0.486102\nvt 0.319856 0.499949\nvt 0.289818 0.500293\nvt 0.307638 0.512518\nvt 0.237945 0.493159\nvt 0.258216 0.504537\nvt 0.224943 0.513175\nvt 0.246446 0.522484\nvt 0.353761 0.543365\nvt 0.362545 0.534789\nvt 0.366434 0.551615\nvt 0.374202 0.544168\nvt 0.314487 0.535617\nvt 0.330997 0.544517\nvt 0.306084 0.548095\nvt 0.323605 0.555516\nvt 0.330439 0.58275\nvt 0.334417 0.572322\nvt 0.346188 0.586119\nvt 0.349629 0.577005\nvt 0.287546 0.602137\nvt 0.28966 0.588203\nvt 0.30786 0.603287\nvt 0.309621 0.590976\nvt 0.257796 0.547865\nvt 0.279114 0.554679\nvt 0.24993 0.564656\nvt 0.272605 0.569754\nvt 0.189989 0.574186\nvt 0.218314 0.578128\nvt 0.184048 0.595183\nvt 0.214223 0.597365\nvt 0.243984 0.634869\nvt 0.241156 0.616945\nvt 0.267456 0.632653\nvt 0.265222 0.616652\nvt 0.209878 0.683761\nvt 0.200982 0.661496\nvt 0.23322 0.677136\nvt 0.225381 0.657124\nvt 0.327329 0.626093\nvt 0.326122 0.615144\nvt 0.343633 0.624032\nvt 0.342631 0.614465\nvt 0.297743 0.658554\nvt 0.292605 0.644575\nvt 0.316591 0.652974\nvt 0.312095 0.640674\nvt 0.345985 0.668621\nvt 0.339181 0.658346\nvt 0.36005 0.661271\nvt 0.354063 0.65224\nvt 0.323209 0.698242\nvt 0.339508 0.687945\nvt 0.33531 0.710236\nvt 0.350411 0.698622\nvt 0.273817 0.70534\nvt 0.263948 0.688301\nvt 0.2942 0.695054\nvt 0.284904 0.680018\nvt 0.240863 0.749097\nvt 0.264423 0.734667\nvt 0.256469 0.768031\nvt 0.279892 0.751364\nvt 0.382434 0.618548\nvt 0.381732 0.612166\nvt 0.392557 0.617012\nvt 0.391992 0.611404\nvt 0.363125 0.638612\nvt 0.36013 0.630386\nvt 0.375264 0.634696\nvt 0.372716 0.627498\nvt 0.417805 0.613365\nvt 0.417559 0.609482\nvt 0.425147 0.612541\nvt 0.42498 0.609006\nvt 0.404054 0.625474\nvt 0.402625 0.620573\nvt 0.411876 0.623174\nvt 0.410775 0.618774\nvt 0.426682 0.623558\nvt 0.427503 0.627273\nvt 0.420198 0.625267\nvt 0.421642 0.629117\nvt 0.41249 0.639187\nvt 0.41836 0.635501\nvt 0.417005 0.643149\nvt 0.422106 0.638877\nvt 0.393064 0.643271\nvt 0.389065 0.637345\nvt 0.401485 0.638739\nvt 0.398068 0.633542\nvt 0.386574 0.669375\nvt 0.378941 0.662131\nvt 0.395867 0.661486\nvt 0.389111 0.655149\nvt 0.408528 0.571024\nvt 0.404084 0.575109\nvt 0.401536 0.565851\nvt 0.396363 0.570653\nvt 0.36701 0.573319\nvt 0.371869 0.565933\nvt 0.378386 0.577696\nvt 0.38258 0.571317\nvt 0.422884 0.584029\nvt 0.424869 0.581202\nvt 0.428486 0.58579\nvt 0.429504 0.583065\nvt 0.40555 0.586995\nvt 0.407916 0.582736\nvt 0.413025 0.589109\nvt 0.414818 0.585281\nvt 0.418243 0.598103\nvt 0.418968 0.594429\nvt 0.425465 0.598796\nvt 0.425964 0.595489\nvt 0.401239 0.605807\nvt 0.401663 0.600972\nvt 0.409698 0.605739\nvt 0.410028 0.601462\nvt 0.383748 0.593325\nvt 0.385739 0.587241\nvt 0.393575 0.594895\nvt 0.3952 0.589557\nvt 0.35732 0.6054\nvt 0.358324 0.597144\nvt 0.370196 0.605675\nvt 0.371084 0.59848\nvt 0.317955 0.749763\nvt 0.334415 0.735052\nvt 0.337955 0.761646\nvt 0.352231 0.746039\nvt 0.334486 0.806675\nvt 0.347358 0.789232\nvt 0.363221 0.817718\nvt 0.373196 0.799436\nvt 0.375117 0.696815\nvt 0.385938 0.686031\nvt 0.387638 0.704986\nvt 0.397117 0.69328\nvt 0.382374 0.740438\nvt 0.392299 0.725914\nvt 0.400671 0.748303\nvt 0.408641 0.733039\nvt 0.447234 0.72818\nvt 0.43128 0.724094\nvt 0.450567 0.713862\nvt 0.436239 0.710226\nvt 0.45968 0.763234\nvt 0.461698 0.746404\nvt 0.406564 0.790011\nvt 0.413368 0.771917\nvt 0.430771 0.796747\nvt 0.435271 0.777626\nvt 0.450652 0.846804\nvt 0.453003 0.822906\nvt 0.411043 0.659454\nvt 0.417275 0.652537\nvt 0.419095 0.664068\nvt 0.424524 0.65637\nvt 0.416432 0.688202\nvt 0.422624 0.677706\nvt 0.428192 0.69319\nvt 0.43321 0.682024\nvt 0.430501 0.63721\nvt 0.432774 0.633385\nvt 0.435896 0.638426\nvt 0.437982 0.633784\nvt 0.436444 0.652171\nvt 0.439639 0.645415\nvt 0.444404 0.654386\nvt 0.446988 0.646965\nvt 0.456405 0.641181\nvt 0.457625 0.634981\nvt 0.464073 0.641845\nvt 0.464901 0.635424\nvt 0.470787 0.658378\nvt 0.471438 0.649873\nvt 0.447693 0.674827\nvt 0.450497 0.665046\nvt 0.458247 0.677034\nvt 0.460118 0.666794\nvt 0.46671 0.702678\nvt 0.467981 0.690071\nvt 0.439561 0.617917\nvt 0.439648 0.62147\nvt 0.432805 0.618654\nvt 0.433156 0.622308\nvt 0.445193 0.62929\nvt 0.445869 0.624899\nvt 0.451704 0.629345\nvt 0.452381 0.624775\nvt 0.432219 0.60864\nvt 0.432215 0.605516\nvt 0.439303 0.608376\nvt 0.439295 0.605523\nvt 0.446309 0.614114\nvt 0.446289 0.611028\nvt 0.453101 0.613849\nvt 0.453118 0.61083\nvt 0.459902 0.60806\nvt 0.459895 0.605667\nvt 0.466634 0.608055\nvt 0.466627 0.60574\nvt 0.473324 0.610586\nvt 0.473297 0.613439\nvt 0.466474 0.616757\nvt 0.46629 0.620423\nvt 0.459736 0.616897\nvt 0.459505 0.620529\nvt 0.472715 0.629833\nvt 0.472957 0.624789\nvt 0.433275 0.593336\nvt 0.439899 0.594231\nvt 0.432864 0.596389\nvt 0.439692 0.59713\nvt 0.446383 0.600378\nvt 0.453177 0.600739\nvt 0.446302 0.602965\nvt 0.45314 0.603184\nvt 0.433899 0.581165\nvt 0.434464 0.584167\nvt 0.439859 0.584839\nvt 0.453027 0.592659\nvt 0.446515 0.592047\nvt 0.452711 0.589468\nvt 0.446317 0.588914\nvt 0.458077 0.581943\nvt 0.458823 0.586247\nvt 0.465716 0.5865\nvt 0.472991 0.590461\nvt 0.473148 0.593726\nvt 0.459834 0.596005\nvt 0.466524 0.596352\nvt 0.459916 0.598614\nvt 0.466613 0.59894\nvt 0.473328 0.601418\nvt 0.473331 0.603606\nvt 0.0702003 0.0502138\nvt 0.0897271 0.0464456\nvt 0.0741383 0.0687133\nvt 0.0932253 0.0645784\nvt 0.059196 0.0919077\nvt 0.0636966 0.110689\nvt 0.0399591 0.0968812\nvt 0.0446031 0.116261\nvt 0.146735 0.0365751\nvt 0.163483 0.0355739\nvt 0.147645 0.0547153\nvt 0.163544 0.0535793\nvt 0.115184 0.078325\nvt 0.132795 0.0746902\nvt 0.118693 0.095648\nvt 0.135762 0.0916297\nvt 0.155039 0.104152\nvt 0.169643 0.101217\nvt 0.158776 0.119325\nvt 0.17293 0.115732\nvt 0.132478 0.144828\nvt 0.148308 0.139033\nvt 0.138371 0.160228\nvt 0.153732 0.153802\nvt 0.105237 0.117682\nvt 0.110149 0.13468\nvt 0.0870839 0.123321\nvt 0.0921943 0.14097\nvt 0.0793363 0.16567\nvt 0.0862986 0.183003\nvt 0.0597022 0.173683\nvt 0.0666379 0.191828\nvt 0.12929 0.182685\nvt 0.137381 0.197436\nvt 0.112584 0.19081\nvt 0.121416 0.206109\nvt 0.0991817 0.240177\nvt 0.115292 0.230359\nvt 0.11113 0.255554\nvt 0.126349 0.24506\nvt 0.173751 0.161648\nvt 0.186543 0.155988\nvt 0.179971 0.174686\nvt 0.192133 0.168406\nvt 0.160531 0.202819\nvt 0.174117 0.194643\nvt 0.169139 0.215627\nvt 0.182011 0.206849\nvt 0.211797 0.201436\nvt 0.219102 0.210771\nvt 0.201635 0.2095\nvt 0.209755 0.2194\nvt 0.198159 0.248798\nvt 0.208649 0.238192\nvt 0.208782 0.257697\nvt 0.21831 0.246537\nvt 0.151811 0.248295\nvt 0.165385 0.237669\nvt 0.163019 0.260898\nvt 0.175872 0.249435\nvt 0.148329 0.299603\nvt 0.161991 0.28544\nvt 0.162395 0.311581\nvt 0.175409 0.296238\nvt 0.218605 0.143397\nvt 0.227302 0.140404\nvt 0.222527 0.153774\nvt 0.230651 0.150099\nvt 0.218275 0.168499\nvt 0.223422 0.178331\nvt 0.208795 0.173993\nvt 0.21466 0.184438\nvt 0.25019 0.141768\nvt 0.248207 0.133977\nvt 0.255182 0.139728\nvt 0.253588 0.132551\nvt 0.247083 0.15216\nvt 0.249933 0.159683\nvt 0.241027 0.155497\nvt 0.244356 0.163569\nvt 0.260581 0.168485\nvt 0.257548 0.162653\nvt 0.26413 0.164381\nvt 0.261466 0.15902\nvt 0.260971 0.188724\nvt 0.256405 0.183719\nvt 0.264477 0.182977\nvt 0.260386 0.178419\nvt 0.242415 0.175934\nvt 0.247048 0.183171\nvt 0.236125 0.181388\nvt 0.241365 0.189151\nvt 0.241027 0.203094\nvt 0.247387 0.209476\nvt 0.23439 0.21081\nvt 0.241538 0.21772\nvt 0.200106 0.0465668\nvt 0.210931 0.0514767\nvt 0.201377 0.0597507\nvt 0.2121 0.0633625\nvt 0.178713 0.0700808\nvt 0.191318 0.0709773\nvt 0.180624 0.0849851\nvt 0.193069 0.0848564\nvt 0.241584 0.0667721\nvt 0.250316 0.0719726\nvt 0.240988 0.0752798\nvt 0.248888 0.0793983\nvt 0.223367 0.0778186\nvt 0.23261 0.080737\nvt 0.224587 0.0883203\nvt 0.233423 0.0902316\nvt 0.242181 0.100887\nvt 0.248806 0.102331\nvt 0.243351 0.109337\nvt 0.249615 0.110005\nvt 0.230162 0.118729\nvt 0.237921 0.118041\nvt 0.232489 0.12844\nvt 0.239838 0.127004\nvt 0.206596 0.0977937\nvt 0.216814 0.0980091\nvt 0.209095 0.109734\nvt 0.219002 0.109046\nvt 0.189625 0.126135\nvt 0.201281 0.123401\nvt 0.193683 0.138839\nvt 0.204829 0.135394\nvt 0.200822 0.29074\nvt 0.21071 0.27765\nvt 0.214988 0.297654\nvt 0.223542 0.28434\nvt 0.2145 0.331344\nvt 0.222193 0.317199\nvt 0.232705 0.336332\nvt 0.238766 0.32205\nvt 0.236144 0.243007\nvt 0.242992 0.232932\nvt 0.245549 0.248729\nvt 0.251416 0.238198\nvt 0.243439 0.277139\nvt 0.249622 0.26498\nvt 0.25563 0.281446\nvt 0.260599 0.269008\nvt 0.27523 0.260038\nvt 0.278234 0.248556\nvt 0.285527 0.262036\nvt 0.287539 0.250353\nvt 0.293393 0.288763\nvt 0.294697 0.275641\nvt 0.259837 0.312057\nvt 0.264048 0.298141\nvt 0.275181 0.315166\nvt 0.278 0.300858\nvt 0.287635 0.349052\nvt 0.289122 0.332606\nvt 0.264894 0.210886\nvt 0.258593 0.206867\nvt 0.268194 0.203076\nvt 0.262474 0.199489\nvt 0.272549 0.235438\nvt 0.264475 0.232362\nvt 0.275532 0.225589\nvt 0.268209 0.222869\nvt 0.275935 0.183426\nvt 0.2716 0.181011\nvt 0.278028 0.177951\nvt 0.274039 0.175845\nvt 0.28215 0.200013\nvt 0.276525 0.198322\nvt 0.283856 0.192812\nvt 0.27865 0.191421\nvt 0.290354 0.186928\nvt 0.291388 0.180873\nvt 0.295475 0.187239\nvt 0.296167 0.181126\nvt 0.299947 0.202165\nvt 0.300334 0.194368\nvt 0.291968 0.219225\nvt 0.284957 0.218111\nvt 0.293009 0.210206\nvt 0.286555 0.209288\nvt 0.297763 0.240224\nvt 0.298459 0.229698\nvt 0.748155 0.173391\nvt 0.737949 0.178419\nvt 0.740184 0.169396\nvt 0.7276 0.175251\nvt 0.744986 0.153379\nvt 0.765255 0.15055\nvt 0.749253 0.160054\nvt 0.767176 0.157376\nvt 0.67169 0.20376\nvt 0.677733 0.192318\nvt 0.689037 0.201696\nvt 0.695235 0.191177\nvt 0.717724 0.182649\nvt 0.72956 0.184753\nvt 0.614762 0.190852\nvt 0.619021 0.178035\nvt 0.639444 0.186459\nvt 0.644162 0.173885\nvt 0.651949 0.207015\nvt 0.657156 0.19501\nvt 0.697318 0.129541\nvt 0.696991 0.141479\nvt 0.674873 0.132893\nvt 0.673687 0.145121\nvt 0.647507 0.161281\nvt 0.622805 0.165229\nvt 0.764087 0.141937\nvt 0.742717 0.144521\nvt 0.719483 0.126213\nvt 0.719641 0.137636\nvt 0.706266 0.237357\nvt 0.705643 0.246924\nvt 0.693382 0.240042\nvt 0.69315 0.249972\nvt 0.681649 0.22267\nvt 0.679933 0.233057\nvt 0.665075 0.225903\nvt 0.664001 0.236731\nvt 0.707955 0.275214\nvt 0.709808 0.284299\nvt 0.696939 0.278768\nvt 0.699308 0.287895\nvt 0.680798 0.263643\nvt 0.682723 0.273372\nvt 0.66709 0.26806\nvt 0.669743 0.277889\nvt 0.660094 0.292483\nvt 0.664367 0.301589\nvt 0.646907 0.298019\nvt 0.651859 0.30717\nvt 0.62296 0.283324\nvt 0.628083 0.293831\nvt 0.607678 0.288849\nvt 0.613712 0.299643\nvt 0.647886 0.251852\nvt 0.649983 0.262495\nvt 0.630928 0.256706\nvt 0.63426 0.267415\nvt 0.605643 0.240027\nvt 0.609205 0.251034\nvt 0.583543 0.245676\nvt 0.589577 0.256469\nvt 0.680497 0.305121\nvt 0.684843 0.313272\nvt 0.668997 0.310008\nvt 0.673934 0.317934\nvt 0.668491 0.330114\nvt 0.674471 0.337183\nvt 0.657631 0.334813\nvt 0.664103 0.341417\nvt 0.721333 0.28996\nvt 0.723504 0.298462\nvt 0.712099 0.293044\nvt 0.714793 0.301522\nvt 0.708965 0.313243\nvt 0.712907 0.321322\nvt 0.699457 0.317068\nvt 0.703911 0.325042\nvt 0.732345 0.3228\nvt 0.735951 0.330715\nvt 0.725113 0.325891\nvt 0.729258 0.333855\nvt 0.719327 0.349248\nvt 0.726825 0.345548\nvt 0.725034 0.35784\nvt 0.73201 0.354064\nvt 0.699745 0.336744\nvt 0.705354 0.344631\nvt 0.69035 0.340502\nvt 0.696355 0.348112\nvt 0.684043 0.361554\nvt 0.693447 0.358919\nvt 0.690832 0.368815\nvt 0.700057 0.366769\nvt 0.759769 0.382347\nvt 0.756158 0.387827\nvt 0.753995 0.37529\nvt 0.749566 0.380277\nvt 0.737475 0.376145\nvt 0.730574 0.379889\nvt 0.731042 0.36684\nvt 0.723743 0.370361\nvt 0.777144 0.40775\nvt 0.776774 0.415692\nvt 0.768998 0.405039\nvt 0.768156 0.413018\nvt 0.765878 0.388134\nvt 0.763225 0.393866\nvt 0.764099 0.441105\nvt 0.757111 0.437798\nvt 0.761754 0.42997\nvt 0.753822 0.426744\nvt 0.768503 0.42258\nvt 0.776881 0.425024\nvt 0.717697 0.402563\nvt 0.726891 0.402767\nvt 0.723984 0.411338\nvt 0.732646 0.412419\nvt 0.745882 0.424233\nvt 0.750105 0.434719\nvt 0.722528 0.382411\nvt 0.715611 0.373092\nvt 0.711159 0.39385\nvt 0.720464 0.393291\nvt 0.779857 0.184797\nvt 0.781016 0.188923\nvt 0.774784 0.186043\nvt 0.777025 0.190025\nvt 0.754036 0.184594\nvt 0.760965 0.180704\nvt 0.760233 0.187894\nvt 0.765882 0.184415\nvt 0.783227 0.199715\nvt 0.783661 0.202571\nvt 0.7814 0.200347\nvt 0.782242 0.203094\nvt 0.775809 0.195432\nvt 0.777944 0.198588\nvt 0.772892 0.19782\nvt 0.775625 0.200676\nvt 0.778056 0.208114\nvt 0.776706 0.211197\nvt 0.776023 0.20592\nvt 0.774349 0.209194\nvt 0.769474 0.211097\nvt 0.767712 0.215992\nvt 0.765376 0.208975\nvt 0.763287 0.214196\nvt 0.761259 0.195027\nvt 0.766166 0.197995\nvt 0.757634 0.19954\nvt 0.763118 0.202034\nvt 0.738694 0.201923\nvt 0.747191 0.203249\nvt 0.735139 0.209241\nvt 0.743923 0.210027\nvt 0.755877 0.218742\nvt 0.754104 0.225623\nvt 0.749194 0.217755\nvt 0.747254 0.225019\nvt 0.737618 0.233068\nvt 0.736429 0.241623\nvt 0.728386 0.233893\nvt 0.727328 0.242747\nvt 0.773485 0.224054\nvt 0.772651 0.229507\nvt 0.770226 0.222821\nvt 0.769221 0.22852\nvt 0.763974 0.234026\nvt 0.763026 0.241125\nvt 0.758715 0.233449\nvt 0.757631 0.240919\nvt 0.770759 0.248893\nvt 0.770203 0.256248\nvt 0.766917 0.248686\nvt 0.766363 0.256228\nvt 0.761348 0.264278\nvt 0.761047 0.272323\nvt 0.756077 0.26475\nvt 0.755936 0.272982\nvt 0.750676 0.248911\nvt 0.750274 0.257102\nvt 0.743708 0.249385\nvt 0.743407 0.257868\nvt 0.735841 0.267916\nvt 0.736393 0.276713\nvt 0.727446 0.269804\nvt 0.7284 0.278714\nvt 0.750523 0.282159\nvt 0.751184 0.290309\nvt 0.744326 0.283519\nvt 0.745328 0.291781\nvt 0.740467 0.301806\nvt 0.742448 0.30987\nvt 0.733637 0.304082\nvt 0.736096 0.312175\nvt 0.769059 0.279194\nvt 0.768814 0.286842\nvt 0.765336 0.279666\nvt 0.76527 0.287423\nvt 0.761464 0.295955\nvt 0.761932 0.303634\nvt 0.75703 0.297046\nvt 0.757811 0.304866\nvt 0.768884 0.309177\nvt 0.769195 0.316352\nvt 0.765941 0.310067\nvt 0.766514 0.31736\nvt 0.764695 0.32597\nvt 0.766121 0.333293\nvt 0.761757 0.327586\nvt 0.763549 0.33505\nvt 0.754686 0.314063\nvt 0.756449 0.321716\nvt 0.75003 0.315774\nvt 0.752224 0.323516\nvt 0.745409 0.335783\nvt 0.750312 0.333347\nvt 0.749027 0.343722\nvt 0.753395 0.341194\nvt 0.760177 0.346623\nvt 0.76311 0.344472\nvt 0.763294 0.353986\nvt 0.765805 0.35162\nvt 0.761209 0.367046\nvt 0.764117 0.363752\nvt 0.765695 0.373602\nvt 0.768055 0.37005\nvt 0.771656 0.337407\nvt 0.773094 0.344008\nvt 0.769828 0.338883\nvt 0.771535 0.345712\nvt 0.770511 0.355945\nvt 0.772087 0.353948\nvt 0.77321 0.361693\nvt 0.774484 0.359549\nvt 0.778583 0.359489\nvt 0.780662 0.362489\nvt 0.77784 0.361902\nvt 0.780172 0.365254\nvt 0.782001 0.372645\nvt 0.782305 0.370006\nvt 0.7737 0.372075\nvt 0.774963 0.369131\nvt 0.777453 0.376099\nvt 0.778282 0.372986\nvt 0.780222 0.38585\nvt 0.780792 0.382019\nvt 0.295844 0.0733074\nvt 0.300925 0.0729113\nvt 0.296804 0.0772194\nvt 0.301405 0.0768077\nvt 0.281819 0.0664303\nvt 0.287808 0.0657115\nvt 0.28395 0.0707181\nvt 0.289351 0.0698858\nvt 0.299405 0.0877183\nvt 0.302725 0.0872988\nvt 0.300179 0.0907253\nvt 0.303123 0.0903065\nvt 0.289848 0.0827346\nvt 0.293692 0.0816639\nvt 0.291573 0.086291\nvt 0.294985 0.0851847\nvt 0.292225 0.0940405\nvt 0.290063 0.0959865\nvt 0.290381 0.0910868\nvt 0.287848 0.0930344\nvt 0.282896 0.0919927\nvt 0.280671 0.0946918\nvt 0.279964 0.0882676\nvt 0.277447 0.0909993\nvt 0.283896 0.0802604\nvt 0.280122 0.0820146\nvt 0.281358 0.076089\nvt 0.277029 0.0776923\nvt 0.260174 0.0723001\nvt 0.264695 0.0696384\nvt 0.265506 0.0779776\nvt 0.26921 0.0750585\nvt 0.270115 0.094605\nvt 0.265946 0.0911229\nvt 0.271751 0.0905617\nvt 0.267642 0.0866152\nvt 0.254652 0.0901007\nvt 0.260134 0.0931706\nvt 0.254396 0.0969426\nvt 0.25966 0.0992574\nvt 0.284568 0.104187\nvt 0.282984 0.106698\nvt 0.281797 0.100926\nvt 0.280176 0.103809\nvt 0.275071 0.108182\nvt 0.271826 0.106037\nvt 0.275928 0.104404\nvt 0.272624 0.101793\nvt 0.277428 0.113817\nvt 0.280192 0.115514\nvt 0.277069 0.117456\nvt 0.279787 0.118744\nvt 0.271359 0.119645\nvt 0.274263 0.12037\nvt 0.271692 0.124299\nvt 0.274504 0.12455\nvt 0.264075 0.107107\nvt 0.267937 0.10879\nvt 0.264231 0.112744\nvt 0.26793 0.113858\nvt 0.256052 0.117729\nvt 0.260639 0.118014\nvt 0.25711 0.124609\nvt 0.261422 0.124293\nvt 0.267037 0.135236\nvt 0.266066 0.12977\nvt 0.270128 0.134201\nvt 0.269295 0.129254\nvt 0.262967 0.150216\nvt 0.261195 0.144277\nvt 0.266437 0.147683\nvt 0.264897 0.142255\nvt 0.277488 0.128585\nvt 0.279993 0.12862\nvt 0.278062 0.132178\nvt 0.28053 0.131813\nvt 0.273879 0.137629\nvt 0.276417 0.136543\nvt 0.275015 0.141671\nvt 0.277483 0.140186\nvt 0.28103 0.141929\nvt 0.283271 0.140501\nvt 0.282417 0.144686\nvt 0.284568 0.142966\nvt 0.279846 0.151772\nvt 0.281967 0.149314\nvt 0.281975 0.154221\nvt 0.283954 0.151554\nvt 0.273071 0.154128\nvt 0.271185 0.150001\nvt 0.275615 0.151309\nvt 0.273874 0.147566\nvt 0.272992 0.168465\nvt 0.270017 0.164953\nvt 0.275453 0.164321\nvt 0.272726 0.161156\nvt 0.28055 0.162839\nvt 0.282506 0.159291\nvt 0.283647 0.164478\nvt 0.285372 0.160837\nvt 0.283913 0.174311\nvt 0.285487 0.1697\nvt 0.288062 0.175105\nvt 0.289344 0.170428\nvt 0.291647 0.149762\nvt 0.290128 0.152117\nvt 0.289594 0.148563\nvt 0.287892 0.150831\nvt 0.289868 0.15866\nvt 0.29121 0.155721\nvt 0.292909 0.159359\nvt 0.293998 0.156425\nvt 0.297718 0.154293\nvt 0.298534 0.151915\nvt 0.300446 0.154611\nvt 0.301006 0.152261\nvt 0.302666 0.160092\nvt 0.302955 0.157289\nvt 0.294294 0.16664\nvt 0.295208 0.163002\nvt 0.298121 0.166773\nvt 0.29874 0.163194\nvt 0.301378 0.175635\nvt 0.301717 0.1709\nvt 0.304469 0.0997811\nvt 0.302688 0.100131\nvt 0.304176 0.0977301\nvt 0.302145 0.0981015\nvt 0.299343 0.0965571\nvt 0.297304 0.0975344\nvt 0.298391 0.0941518\nvt 0.296052 0.0951979\nvt 0.305343 0.106624\nvt 0.304332 0.106857\nvt 0.305156 0.10507\nvt 0.30398 0.105323\nvt 0.302324 0.104185\nvt 0.301177 0.104854\nvt 0.301713 0.102527\nvt 0.300389 0.10327\nvt 0.300356 0.108048\nvt 0.301037 0.107116\nvt 0.301224 0.109311\nvt 0.301802 0.108461\nvt 0.297348 0.108169\nvt 0.297646 0.106654\nvt 0.298591 0.109296\nvt 0.298837 0.107926\nvt 0.295564 0.102206\nvt 0.296862 0.100797\nvt 0.29703 0.103828\nvt 0.298126 0.102577\nvt 0.292821 0.102331\nvt 0.292376 0.104559\nvt 0.290645 0.100626\nvt 0.290039 0.103272\nvt 0.296041 0.108869\nvt 0.296535 0.110855\nvt 0.294464 0.107896\nvt 0.295091 0.110126\nvt 0.293501 0.112125\nvt 0.294771 0.112114\nvt 0.295104 0.114684\nvt 0.296153 0.114542\nvt 0.299994 0.113198\nvt 0.299713 0.11174\nvt 0.300927 0.113978\nvt 0.300673 0.112652\nvt 0.298448 0.113448\nvt 0.299502 0.114067\nvt 0.299272 0.115291\nvt 0.300209 0.115749\nvt 0.301779 0.117745\nvt 0.302478 0.11811\nvt 0.30253 0.119184\nvt 0.303126 0.119415\nvt 0.303468 0.121595\nvt 0.302968 0.121612\nvt 0.302708 0.120379\nvt 0.302099 0.120292\nvt 0.298446 0.11673\nvt 0.299336 0.116851\nvt 0.299675 0.118652\nvt 0.300418 0.118653\nvt 0.30093 0.122413\nvt 0.299638 0.120876\nvt 0.301415 0.122058\nvt 0.300239 0.120555\nvt 0.290326 0.131486\nvt 0.287938 0.131428\nvt 0.290073 0.129611\nvt 0.287624 0.129266\nvt 0.283653 0.134291\nvt 0.286051 0.133841\nvt 0.284494 0.136869\nvt 0.286805 0.136111\nvt 0.296687 0.131961\nvt 0.296584 0.130779\nvt 0.298426 0.132136\nvt 0.298378 0.13112\nvt 0.292915 0.13317\nvt 0.294966 0.133117\nvt 0.293339 0.134668\nvt 0.295272 0.134416\nvt 0.297613 0.136359\nvt 0.297314 0.135334\nvt 0.298941 0.136058\nvt 0.298807 0.135117\nvt 0.295229 0.138576\nvt 0.296682 0.137833\nvt 0.296109 0.139579\nvt 0.297371 0.138687\nvt 0.289846 0.137365\nvt 0.291912 0.136654\nvt 0.290775 0.139079\nvt 0.292693 0.138158\nvt 0.288034 0.143437\nvt 0.28998 0.141924\nvt 0.289566 0.145128\nvt 0.291366 0.143426\nvt 0.294413 0.143049\nvt 0.29584 0.141619\nvt 0.295886 0.143952\nvt 0.297141 0.142399\nvt 0.298169 0.147118\nvt 0.297173 0.149176\nvt 0.296304 0.146498\nvt 0.29509 0.148506\nvt 0.29916 0.138426\nvt 0.299788 0.137594\nvt 0.300086 0.138727\nvt 0.300681 0.137731\nvt 0.299518 0.141524\nvt 0.300378 0.14018\nvt 0.300827 0.141901\nvt 0.301542 0.140466\nvt 0.303232 0.139321\nvt 0.303612 0.138087\nvt 0.304331 0.139446\nvt 0.304601 0.13819\nvt 0.305225 0.140941\nvt 0.304987 0.142495\nvt 0.303119 0.144071\nvt 0.302623 0.145908\nvt 0.301542 0.143832\nvt 0.300844 0.145632\nvt 0.303834 0.150212\nvt 0.304138 0.148079\nvt 0.305956 0.112172\nvt 0.305422 0.112301\nvt 0.305827 0.110881\nvt 0.305195 0.111031\nvt 0.304242 0.109994\nvt 0.30362 0.110419\nvt 0.303838 0.108644\nvt 0.303109 0.109121\nvt 0.305928 0.115714\nvt 0.306231 0.115652\nvt 0.306049 0.116708\nvt 0.306295 0.116668\nvt 0.304822 0.113929\nvt 0.305202 0.113683\nvt 0.305114 0.114964\nvt 0.305436 0.11478\nvt 0.304921 0.116304\nvt 0.305125 0.116106\nvt 0.305185 0.11707\nvt 0.305374 0.116963\nvt 0.303966 0.115695\nvt 0.304043 0.115109\nvt 0.304372 0.116338\nvt 0.304441 0.115864\nvt 0.303254 0.112693\nvt 0.303617 0.112118\nvt 0.303775 0.113697\nvt 0.304086 0.113214\nvt 0.30148 0.112393\nvt 0.301639 0.111383\nvt 0.302245 0.113319\nvt 0.302368 0.112413\nvt 0.303513 0.115763\nvt 0.303656 0.116628\nvt 0.302939 0.115071\nvt 0.303102 0.116039\nvt 0.30256 0.117214\nvt 0.302098 0.115954\nvt 0.303172 0.117661\nvt 0.302775 0.116524\nvt 0.305011 0.1177\nvt 0.305149 0.118291\nvt 0.304744 0.117394\nvt 0.304871 0.118015\nvt 0.304706 0.118357\nvt 0.304907 0.119076\nvt 0.304323 0.117965\nvt 0.304564 0.118774\nvt 0.305683 0.12056\nvt 0.305519 0.120477\nvt 0.305575 0.120085\nvt 0.305364 0.119937\nvt 0.305366 0.120974\nvt 0.305531 0.120964\nvt 0.305607 0.121549\nvt 0.305718 0.121445\nvt 0.304096 0.119082\nvt 0.304492 0.119338\nvt 0.304509 0.120051\nvt 0.30483 0.12019\nvt 0.304221 0.120746\nvt 0.304595 0.120849\nvt 0.304727 0.121688\nvt 0.305014 0.121678\nvt 0.305569 0.122289\nvt 0.305715 0.122175\nvt 0.305815 0.122764\nvt 0.305922 0.122593\nvt 0.30574 0.123449\nvt 0.305892 0.123292\nvt 0.305955 0.123757\nvt 0.306072 0.123566\nvt 0.306078 0.121616\nvt 0.306084 0.121933\nvt 0.305951 0.121421\nvt 0.305944 0.121668\nvt 0.306309 0.122634\nvt 0.30627 0.12289\nvt 0.306198 0.122452\nvt 0.306153 0.122691\nvt 0.306413 0.122442\nvt 0.306408 0.122061\nvt 0.306478 0.122504\nvt 0.306472 0.122106\nvt 0.306525 0.122871\nvt 0.306518 0.123173\nvt 0.306286 0.12353\nvt 0.306329 0.123284\nvt 0.306398 0.123649\nvt 0.306428 0.123395\nvt 0.306468 0.123942\nvt 0.306442 0.124181\nvt 0.306464 0.119949\nvt 0.306362 0.119949\nvt 0.306433 0.119241\nvt 0.306307 0.119253\nvt 0.305766 0.117725\nvt 0.305957 0.117676\nvt 0.305914 0.118517\nvt 0.306078 0.118503\nvt 0.306519 0.121685\nvt 0.306527 0.122135\nvt 0.306463 0.121671\nvt 0.306313 0.120562\nvt 0.306362 0.121133\nvt 0.306203 0.12051\nvt 0.306261 0.12106\nvt 0.306186 0.121417\nvt 0.306208 0.12181\nvt 0.306054 0.12126\nvt 0.305765 0.120227\nvt 0.305851 0.120695\nvt 0.305991 0.119858\nvt 0.305835 0.11979\nvt 0.305886 0.119226\nvt 0.305722 0.119187\nvt 0.305221 0.117814\nvt 0.305382 0.118453\nvt 0.306252 0.125595\nvt 0.305904 0.125482\nvt 0.306296 0.125273\nvt 0.305999 0.125172\nvt 0.305933 0.124437\nvt 0.305809 0.124697\nvt 0.305661 0.124165\nvt 0.305484 0.124393\nvt 0.306074 0.127139\nvt 0.30554 0.127014\nvt 0.306117 0.126714\nvt 0.305632 0.126596\nvt 0.305239 0.125964\nvt 0.304686 0.125577\nvt 0.305372 0.125586\nvt 0.304874 0.12521\nvt 0.303544 0.125843\nvt 0.302662 0.125082\nvt 0.303797 0.125414\nvt 0.30299 0.124658\nvt 0.30245 0.123311\nvt 0.302864 0.123031\nvt 0.301929 0.121824\nvt 0.304575 0.124398\nvt 0.303988 0.123723\nvt 0.304851 0.12417\nvt 0.304342 0.123545\nvt 0.304514 0.122546\nvt 0.304132 0.12261\nvt 0.303951 0.121633\nvt 0.291174 0.113464\nvt 0.293177 0.115992\nvt 0.290182 0.114808\nvt 0.292341 0.117165\nvt 0.284402 0.111871\nvt 0.286921 0.11423\nvt 0.283543 0.114461\nvt 0.286135 0.116471\nvt 0.299597 0.124172\nvt 0.29805 0.122798\nvt 0.300015 0.123469\nvt 0.298534 0.121997\nvt 0.295345 0.123426\nvt 0.293274 0.12191\nvt 0.295789 0.122228\nvt 0.293785 0.120512\nvt 0.298517 0.12794\nvt 0.296748 0.12711\nvt 0.298699 0.126901\nvt 0.296957 0.125905\nvt 0.29452 0.12898\nvt 0.292326 0.12835\nvt 0.294586 0.127553\nvt 0.292377 0.126684\nvt 0.290198 0.123849\nvt 0.287706 0.122609\nvt 0.290544 0.12199\nvt 0.288086 0.120452\nvt 0.282268 0.122941\nvt 0.28491 0.123877\nvt 0.282299 0.125865\nvt 0.284923 0.126444\nvt 0.300139 0.134996\nvt 0.300076 0.134081\nvt 0.301318 0.13495\nvt 0.301308 0.134085\nvt 0.302019 0.136819\nvt 0.30225 0.135853\nvt 0.302963 0.136889\nvt 0.303175 0.135901\nvt 0.301247 0.130785\nvt 0.301259 0.131605\nvt 0.299922 0.130483\nvt 0.299926 0.131393\nvt 0.30241 0.133298\nvt 0.30242 0.13252\nvt 0.303386 0.133355\nvt 0.303414 0.132604\nvt 0.304332 0.131981\nvt 0.304337 0.131322\nvt 0.305165 0.13205\nvt 0.305171 0.13141\nvt 0.305907 0.132754\nvt 0.305879 0.13347\nvt 0.304182 0.135025\nvt 0.304236 0.134182\nvt 0.305026 0.135065\nvt 0.305073 0.134221\nvt 0.305771 0.136044\nvt 0.305698 0.13709\nvt 0.305966 0.128586\nvt 0.305946 0.129118\nvt 0.305318 0.128486\nvt 0.305263 0.129024\nvt 0.304717 0.127755\nvt 0.30396 0.127398\nvt 0.304832 0.127249\nvt 0.304124 0.126878\nvt 0.305942 0.130845\nvt 0.30594 0.131458\nvt 0.30519 0.13079\nvt 0.304446 0.129427\nvt 0.304409 0.130053\nvt 0.303579 0.129173\nvt 0.303518 0.129843\nvt 0.302456 0.130288\nvt 0.302409 0.131023\nvt 0.301309 0.129976\nvt 0.300073 0.128631\nvt 0.300214 0.127717\nvt 0.30274 0.128134\nvt 0.301665 0.12758\nvt 0.302911 0.127496\nvt 0.301882 0.126877\nvt 0.300962 0.12532\nvt 0.301291 0.124669\nvt 0.870917 0.916429\nvt 0.864881 0.915134\nvt 0.875831 0.907596\nvt 0.869182 0.907723\nvt 0.860047 0.900547\nvt 0.86628 0.89732\nvt 0.859497 0.90517\nvt 0.86551 0.90264\nvt 0.84158 0.929099\nvt 0.840804 0.923576\nvt 0.848664 0.924684\nvt 0.847332 0.920178\nvt 0.864243 0.925127\nvt 0.858775 0.922343\nvt 0.853766 0.903699\nvt 0.853406 0.908036\nvt 0.846946 0.915547\nvt 0.84057 0.918296\nvt 0.923598 0.811096\nvt 0.926354 0.820716\nvt 0.910191 0.811659\nvt 0.913283 0.820952\nvt 0.903329 0.830351\nvt 0.906008 0.839499\nvt 0.890498 0.83056\nvt 0.893281 0.839376\nvt 0.977069 0.809072\nvt 0.978471 0.820142\nvt 0.963714 0.809558\nvt 0.965475 0.820245\nvt 0.954452 0.830724\nvt 0.956272 0.841149\nvt 0.94165 0.830555\nvt 0.943664 0.840667\nvt 0.971655 0.863357\nvt 0.970307 0.852482\nvt 0.984075 0.864425\nvt 0.982674 0.853354\nvt 0.960151 0.873187\nvt 0.960535 0.884471\nvt 0.947585 0.871912\nvt 0.947713 0.882947\nvt 0.933021 0.850099\nvt 0.934443 0.860192\nvt 0.920671 0.84937\nvt 0.922197 0.85914\nvt 0.910641 0.867949\nvt 0.910484 0.878218\nvt 0.898017 0.866798\nvt 0.89815 0.87682\nvt 0.934401 0.892441\nvt 0.932877 0.90391\nvt 0.922005 0.890522\nvt 0.920208 0.901703\nvt 0.900601 0.9223\nvt 0.888825 0.920011\nvt 0.90504 0.910984\nvt 0.893754 0.909239\nvt 0.973346 0.910671\nvt 0.97364 0.898022\nvt 0.9872 0.912963\nvt 0.987039 0.899765\nvt 0.958441 0.920782\nvt 0.95696 0.933342\nvt 0.94426 0.918188\nvt 0.94194 0.930443\nvt 0.987682 0.952559\nvt 0.987843 0.965758\nvt 0.971409 0.949238\nvt 0.97055 0.962187\nvt 0.951315 0.971369\nvt 0.949219 0.984122\nvt 0.933095 0.967605\nvt 0.929746 0.980106\nvt 0.923713 0.939632\nvt 0.919578 0.951716\nvt 0.908736 0.936573\nvt 0.903217 0.948347\nvt 0.863423 0.952757\nvt 0.879827 0.956504\nvt 0.851853 0.96404\nvt 0.871326 0.968057\nvt 0.843362 0.892764\nvt 0.844952 0.894487\nvt 0.83882 0.894191\nvt 0.839757 0.896099\nvt 0.858698 0.893451\nvt 0.852993 0.896661\nvt 0.856696 0.891284\nvt 0.851674 0.894198\nvt 0.835254 0.889177\nvt 0.837525 0.889711\nvt 0.833307 0.890141\nvt 0.834935 0.890736\nvt 0.84513 0.889818\nvt 0.842663 0.88901\nvt 0.848163 0.887929\nvt 0.845203 0.887388\nvt 0.840554 0.885497\nvt 0.841529 0.884287\nvt 0.843837 0.885576\nvt 0.844872 0.884184\nvt 0.84858 0.882508\nvt 0.847461 0.881246\nvt 0.852373 0.88205\nvt 0.851061 0.880479\nvt 0.860669 0.883877\nvt 0.857966 0.886836\nvt 0.856168 0.883841\nvt 0.854205 0.886265\nvt 0.872851 0.876702\nvt 0.872798 0.881164\nvt 0.86567 0.877744\nvt 0.866901 0.880874\nvt 0.834417 0.885233\nvt 0.837436 0.885384\nvt 0.833243 0.886366\nvt 0.836177 0.886561\nvt 0.832401 0.883909\nvt 0.829246 0.883719\nvt 0.833363 0.882756\nvt 0.830023 0.882571\nvt 0.831226 0.889788\nvt 0.829977 0.890679\nvt 0.828855 0.889522\nvt 0.82752 0.890424\nvt 0.825123 0.887894\nvt 0.826378 0.886947\nvt 0.827777 0.888246\nvt 0.829135 0.887223\nvt 0.821098 0.888211\nvt 0.819509 0.888805\nvt 0.818477 0.8876\nvt 0.81692 0.888041\nvt 0.816981 0.886449\nvt 0.814133 0.885875\nvt 0.817883 0.885797\nvt 0.814878 0.885284\nvt 0.825357 0.884633\nvt 0.824558 0.885665\nvt 0.822238 0.884405\nvt 0.821579 0.885362\nvt 0.819714 0.882197\nvt 0.81942 0.883135\nvt 0.816786 0.881964\nvt 0.816258 0.882785\nvt 0.704744 0.8559\nvt 0.715063 0.854684\nvt 0.704026 0.864481\nvt 0.7144 0.863075\nvt 0.724481 0.869973\nvt 0.735119 0.868441\nvt 0.72445 0.878398\nvt 0.735114 0.876776\nvt 0.707984 0.821753\nvt 0.718338 0.821452\nvt 0.707143 0.830275\nvt 0.717453 0.829728\nvt 0.726938 0.837235\nvt 0.737356 0.836453\nvt 0.726186 0.84534\nvt 0.736661 0.844341\nvt 0.7494 0.820548\nvt 0.759754 0.820247\nvt 0.748597 0.828087\nvt 0.759099 0.827517\nvt 0.769301 0.833942\nvt 0.780347 0.832881\nvt 0.768976 0.841164\nvt 0.780304 0.839966\nvt 0.746644 0.851054\nvt 0.757484 0.849792\nvt 0.746152 0.858888\nvt 0.757073 0.857454\nvt 0.768295 0.863732\nvt 0.780369 0.861978\nvt 0.76855 0.871911\nvt 0.780811 0.869811\nvt 0.711912 0.933781\nvt 0.709865 0.92505\nvt 0.721885 0.932451\nvt 0.719907 0.923596\nvt 0.733836 0.940212\nvt 0.743668 0.939186\nvt 0.735957 0.949236\nvt 0.745838 0.948278\nvt 0.703107 0.890374\nvt 0.714053 0.888634\nvt 0.70425 0.899013\nvt 0.714958 0.897271\nvt 0.726655 0.904385\nvt 0.736919 0.902909\nvt 0.728176 0.913291\nvt 0.738241 0.911941\nvt 0.757058 0.882183\nvt 0.756899 0.891182\nvt 0.746 0.883677\nvt 0.746387 0.892485\nvt 0.767295 0.909654\nvt 0.766997 0.900088\nvt 0.776269 0.91019\nvt 0.77646 0.900815\nvt 0.759096 0.919266\nvt 0.760808 0.928445\nvt 0.749598 0.91998\nvt 0.751366 0.929146\nvt 0.774884 0.945983\nvt 0.772111 0.937152\nvt 0.78355 0.945761\nvt 0.78067 0.937186\nvt 0.786527 0.92912\nvt 0.785293 0.920429\nvt 0.793933 0.930253\nvt 0.792914 0.921977\nvt 0.803248 0.947888\nvt 0.802014 0.939675\nvt 0.809245 0.948792\nvt 0.808423 0.940754\nvt 0.786072 0.894389\nvt 0.788671 0.888049\nvt 0.793366 0.898913\nvt 0.795238 0.893612\nvt 0.799863 0.91602\nvt 0.799916 0.908943\nvt 0.807041 0.918214\nvt 0.807091 0.911706\nvt 0.821514 0.905494\nvt 0.821071 0.909931\nvt 0.815055 0.90381\nvt 0.814399 0.908361\nvt 0.83409 0.914941\nvt 0.83394 0.920299\nvt 0.827467 0.915548\nvt 0.827323 0.921131\nvt 0.814336 0.933998\nvt 0.814085 0.926699\nvt 0.820826 0.934512\nvt 0.820711 0.927397\nvt 0.834781 0.948\nvt 0.827242 0.950204\nvt 0.834691 0.939529\nvt 0.827502 0.941651\nvt 0.792132 0.845676\nvt 0.804323 0.844163\nvt 0.792299 0.852737\nvt 0.804825 0.851067\nvt 0.818548 0.856005\nvt 0.831778 0.85489\nvt 0.819473 0.861787\nvt 0.83259 0.860769\nvt 0.79112 0.817822\nvt 0.801778 0.815998\nvt 0.791362 0.824667\nvt 0.802439 0.82306\nvt 0.81472 0.82864\nvt 0.826466 0.827173\nvt 0.815773 0.835804\nvt 0.828002 0.834513\nvt 0.836051 0.818174\nvt 0.833753 0.810528\nvt 0.847357 0.816619\nvt 0.844411 0.808704\nvt 0.865186 0.831524\nvt 0.862205 0.823365\nvt 0.877737 0.830954\nvt 0.874492 0.822443\nvt 0.855005 0.83999\nvt 0.85698 0.847505\nvt 0.842216 0.840695\nvt 0.843849 0.847807\nvt 0.88436 0.856498\nvt 0.885137 0.865357\nvt 0.871526 0.85543\nvt 0.872076 0.863204\nvt 0.804439 0.886836\nvt 0.807327 0.888675\nvt 0.800873 0.886404\nvt 0.804113 0.888773\nvt 0.811427 0.895292\nvt 0.809796 0.897764\nvt 0.805844 0.892459\nvt 0.803594 0.894554\nvt 0.812764 0.887409\nvt 0.814695 0.887319\nvt 0.814983 0.888328\nvt 0.813411 0.890054\nvt 0.815616 0.889658\nvt 0.817127 0.891427\nvt 0.818869 0.890732\nvt 0.823567 0.890828\nvt 0.824934 0.890047\nvt 0.826527 0.891315\nvt 0.829218 0.893691\nvt 0.829275 0.892502\nvt 0.833441 0.893497\nvt 0.832802 0.892294\nvt 0.818377 0.895343\nvt 0.819745 0.893759\nvt 0.823592 0.896601\nvt 0.824356 0.894757\nvt 0.834525 0.899486\nvt 0.83459 0.902497\nvt 0.828656 0.899651\nvt 0.828329 0.902654\nvt 0.851747 0.8781\nvt 0.846507 0.877058\nvt 0.855981 0.876751\nvt 0.849747 0.875417\nvt 0.843672 0.872435\nvt 0.833524 0.872294\nvt 0.844998 0.869518\nvt 0.833475 0.869469\nvt 0.837676 0.881849\nvt 0.839377 0.880757\nvt 0.84055 0.882129\nvt 0.842485 0.881209\nvt 0.836982 0.879253\nvt 0.831981 0.879081\nvt 0.83849 0.877985\nvt 0.832543 0.877845\nvt 0.826765 0.881299\nvt 0.822936 0.881265\nvt 0.826903 0.880193\nvt 0.822555 0.880254\nvt 0.815471 0.878769\nvt 0.817329 0.879611\nvt 0.811408 0.879505\nvt 0.813858 0.880161\nvt 0.825732 0.87658\nvt 0.818914 0.877069\nvt 0.824664 0.87497\nvt 0.816529 0.875781\nvt 0.800189 0.874827\nvt 0.805364 0.875918\nvt 0.793249 0.877827\nvt 0.79971 0.877889\nvt 0.804392 0.880828\nvt 0.801078 0.880676\nvt 0.805589 0.879851\nvt 0.80179 0.879491\nvt 0.802494 0.883227\nvt 0.802021 0.884044\nvt 0.79985 0.882163\nvt 0.798749 0.883007\nvt 0.812306 0.884005\nvt 0.809275 0.883405\nvt 0.812718 0.883166\nvt 0.809695 0.8826\nvt 0.807387 0.881208\nvt 0.808775 0.880331\nvt 0.805141 0.884833\nvt 0.805248 0.884056\nvt 0.811712 0.884711\nvt 0.80868 0.8841\nvt 0.778535 0.333732\nvt 0.778925 0.339309\nvt 0.776865 0.334264\nvt 0.777479 0.340007\nvt 0.777126 0.346516\nvt 0.778414 0.350974\nvt 0.775964 0.348247\nvt 0.777544 0.353163\nvt 0.783466 0.350223\nvt 0.78201 0.349388\nvt 0.783479 0.345221\nvt 0.782011 0.344745\nvt 0.780169 0.333512\nvt 0.7804 0.339187\nvt 0.779271 0.357072\nvt 0.779888 0.354459\nvt 0.783379 0.354562\nvt 0.781827 0.353449\nvt 0.771561 0.308475\nvt 0.771592 0.301249\nvt 0.773985 0.30794\nvt 0.774105 0.300747\nvt 0.778091 0.314238\nvt 0.778113 0.320987\nvt 0.77611 0.314547\nvt 0.776185 0.321338\nvt 0.775316 0.270961\nvt 0.774971 0.278461\nvt 0.772619 0.271206\nvt 0.772251 0.278791\nvt 0.776618 0.293068\nvt 0.776944 0.285658\nvt 0.778633 0.292829\nvt 0.778944 0.285444\nvt 0.781025 0.277893\nvt 0.78129 0.270511\nvt 0.782589 0.277818\nvt 0.782778 0.270458\nvt 0.783664 0.292554\nvt 0.783827 0.285188\nvt 0.780031 0.30709\nvt 0.780205 0.299961\nvt 0.781777 0.306969\nvt 0.781923 0.299852\nvt 0.783339 0.32057\nvt 0.783363 0.313822\nvt 0.781801 0.226073\nvt 0.781488 0.231087\nvt 0.780323 0.225844\nvt 0.779947 0.230872\nvt 0.777548 0.236264\nvt 0.777062 0.242497\nvt 0.775032 0.235927\nvt 0.774499 0.242231\nvt 0.784706 0.226348\nvt 0.784575 0.231302\nvt 0.783561 0.236791\nvt 0.783364 0.242868\nvt 0.782463 0.236777\nvt 0.782181 0.242878\nvt 0.784249 0.249308\nvt 0.784214 0.256089\nvt 0.782965 0.26317\nvt 0.781564 0.263208\nvt 0.780513 0.249341\nvt 0.780247 0.256152\nvt 0.778788 0.249256\nvt 0.778446 0.256148\nvt 0.775785 0.263481\nvt 0.773052 0.263633\nvt 0.780797 0.207676\nvt 0.781825 0.209285\nvt 0.779744 0.209842\nvt 0.781079 0.21121\nvt 0.781184 0.217671\nvt 0.781653 0.214603\nvt 0.78241 0.218061\nvt 0.782681 0.215135\nvt 0.784056 0.210874\nvt 0.783817 0.209028\nvt 0.784597 0.210683\nvt 0.784451 0.208755\nvt 0.781866 0.206213\nvt 0.782637 0.208003\nvt 0.783407 0.218274\nvt 0.783545 0.215329\nvt 0.784192 0.212927\nvt 0.784716 0.212853\nvt 0.531022 0.382737\nvt 0.527101 0.404838\nvt 0.480005 0.421265\nvt 0.480012 0.442039\nvt 0.63154 0.415987\nvt 0.618427 0.434757\nvt 0.565691 0.437159\nvt 0.558127 0.455459\nvt 0.583549 0.485698\nvt 0.57361 0.500397\nvt 0.5383 0.503888\nvt 0.532814 0.517431\nvt 0.516093 0.464374\nvt 0.512788 0.481538\nvt 0.480051 0.495047\nvt 0.480057 0.509771\nvt 0.504516 0.524856\nvt 0.502363 0.536362\nvt 0.48002 0.545787\nvt 0.479996 0.555209\nvt 0.549341 0.537036\nvt 0.543086 0.546408\nvt 0.519984 0.549754\nvt 0.5168 0.557983\nvt 0.528841 0.568221\nvt 0.525474 0.57337\nvt 0.510053 0.577238\nvt 0.508707 0.581896\nvt 0.497487 0.564034\nvt 0.496347 0.57079\nvt 0.479926 0.576883\nvt 0.479919 0.582154\nvt 0.708456 0.473527\nvt 0.688869 0.487278\nvt 0.641676 0.473331\nvt 0.626391 0.488605\nvt 0.759434 0.553678\nvt 0.734078 0.559283\nvt 0.692723 0.531473\nvt 0.672756 0.540056\nvt 0.666431 0.574522\nvt 0.647187 0.578839\nvt 0.620364 0.562299\nvt 0.605884 0.56823\nvt 0.635754 0.523911\nvt 0.620353 0.534206\nvt 0.587559 0.527316\nvt 0.577031 0.537745\nvt 0.767046 0.639214\nvt 0.740837 0.637062\nvt 0.718949 0.599208\nvt 0.694723 0.600782\nvt 0.730521 0.727793\nvt 0.707712 0.716262\nvt 0.704188 0.670698\nvt 0.682575 0.664487\nvt 0.647019 0.685519\nvt 0.629709 0.676761\nvt 0.626189 0.647788\nvt 0.610662 0.643005\nvt 0.67085 0.630445\nvt 0.650911 0.628258\nvt 0.633752 0.604256\nvt 0.617289 0.60496\nvt 0.601799 0.622092\nvt 0.589095 0.620278\nvt 0.578281 0.605831\nvt 0.568042 0.60584\nvt 0.587485 0.654548\nvt 0.5766 0.648646\nvt 0.574012 0.63122\nvt 0.564524 0.628155\nvt 0.551088 0.634626\nvt 0.54444 0.63142\nvt 0.540886 0.621141\nvt 0.533993 0.619662\nvt 0.558267 0.61559\nvt 0.549979 0.614401\nvt 0.542441 0.60556\nvt 0.53502 0.60547\nvt 0.582294 0.559223\nvt 0.572438 0.565378\nvt 0.552415 0.561776\nvt 0.54618 0.567616\nvt 0.599729 0.589036\nvt 0.587433 0.591344\nvt 0.571539 0.581441\nvt 0.562587 0.584478\nvt 0.557482 0.596187\nvt 0.549382 0.597202\nvt 0.540029 0.590945\nvt 0.533358 0.592313\nvt 0.549059 0.579074\nvt 0.542843 0.582055\nvt 0.532285 0.579735\nvt 0.529633 0.581759\nvt 0.653605 0.79508\nvt 0.63727 0.777977\nvt 0.659617 0.736427\nvt 0.641335 0.722836\nvt 0.538635 0.838198\nvt 0.53386 0.816837\nvt 0.577156 0.781633\nvt 0.567947 0.764501\nvt 0.520519 0.759996\nvt 0.516522 0.743385\nvt 0.544128 0.718738\nvt 0.537595 0.705433\nvt 0.594815 0.731414\nvt 0.582967 0.717721\nvt 0.596092 0.687955\nvt 0.584048 0.678226\nvt 0.554533 0.682514\nvt 0.547248 0.672883\nvt 0.556039 0.654392\nvt 0.549032 0.648219\nvt 0.506599 0.700609\nvt 0.504037 0.688318\nvt 0.522461 0.671874\nvt 0.518741 0.662686\nvt 0.498292 0.657491\nvt 0.496974 0.64933\nvt 0.510926 0.640255\nvt 0.509362 0.634448\nvt 0.530871 0.649347\nvt 0.527072 0.643427\nvt 0.533732 0.634874\nvt 0.53087 0.632586\nvt 0.520903 0.628969\nvt 0.520448 0.625102\nvt 0.494437 0.629649\nvt 0.494005 0.624856\nvt 0.506993 0.617134\nvt 0.507198 0.620661\nvt 0.493389 0.610681\nvt 0.493415 0.613456\nvt 0.506886 0.608096\nvt 0.506894 0.605598\nvt 0.52054 0.614456\nvt 0.520646 0.611387\nvt 0.520625 0.602663\nvt 0.520493 0.599889\nvt 0.49337 0.601237\nvt 0.493367 0.603509\nvt 0.506826 0.595528\nvt 0.506793 0.59819\nvt 0.493583 0.593558\nvt 0.493824 0.59015\nvt 0.507808 0.586026\nvt 0.519895 0.59151\nvt 0.519839 0.588439\nvt 0.576613 0.0774487\nvt 0.557176 0.07303\nvt 0.545676 0.0316602\nvt 0.525693 0.0282384\nvt 0.557675 0.15474\nvt 0.538473 0.147692\nvt 0.529522 0.105333\nvt 0.511159 0.100291\nvt 0.484703 0.1289\nvt 0.468562 0.123799\nvt 0.460083 0.0883689\nvt 0.445095 0.0861096\nvt 0.499958 0.0606636\nvt 0.481784 0.0573222\nvt 0.465745 0.0179732\nvt 0.445762 0.0145515\nvt 0.524474 0.224539\nvt 0.507252 0.215142\nvt 0.507292 0.174841\nvt 0.489986 0.167266\nvt 0.476396 0.285461\nvt 0.462452 0.272855\nvt 0.470853 0.234819\nvt 0.45656 0.224951\nvt 0.423978 0.238718\nvt 0.412774 0.228596\nvt 0.418078 0.198674\nvt 0.407206 0.191174\nvt 0.459487 0.189272\nvt 0.445363 0.181652\nvt 0.443889 0.14802\nvt 0.430576 0.143016\nvt 0.408671 0.162839\nvt 0.398722 0.158004\nvt 0.39698 0.132542\nvt 0.387812 0.130267\nvt 0.384496 0.202851\nvt 0.377266 0.195595\nvt 0.380801 0.172812\nvt 0.373919 0.167887\nvt 0.359876 0.177693\nvt 0.355453 0.172674\nvt 0.357211 0.156106\nvt 0.35294 0.152949\nvt 0.374025 0.146885\nvt 0.367677 0.144112\nvt 0.365626 0.125886\nvt 0.359933 0.125108\nvt 0.434504 0.0544055\nvt 0.42217 0.056715\nvt 0.413098 0.0332929\nvt 0.40221 0.03954\nvt 0.425906 0.112942\nvt 0.414032 0.111057\nvt 0.407538 0.0854733\nvt 0.39713 0.0867118\nvt 0.383929 0.108762\nvt 0.376007 0.108918\nvt 0.370683 0.0923615\nvt 0.36374 0.0946366\nvt 0.389615 0.0671913\nvt 0.380028 0.071207\nvt 0.369546 0.0582814\nvt 0.358658 0.0645285\nvt 0.415513 0.325904\nvt 0.406066 0.311447\nvt 0.424631 0.28237\nvt 0.413567 0.269599\nvt 0.342708 0.345339\nvt 0.339743 0.329948\nvt 0.36738 0.30804\nvt 0.361766 0.294437\nvt 0.331464 0.287295\nvt 0.32906 0.27428\nvt 0.347008 0.257154\nvt 0.343036 0.245928\nvt 0.380474 0.271781\nvt 0.373219 0.259784\nvt 0.384999 0.236134\nvt 0.377259 0.226511\nvt 0.355406 0.228372\nvt 0.351053 0.219217\nvt 0.359458 0.201865\nvt 0.354989 0.194913\nvt 0.323055 0.239324\nvt 0.32155 0.228958\nvt 0.333983 0.216394\nvt 0.331796 0.207858\nvt 0.318076 0.201812\nvt 0.31723 0.194263\nvt 0.326641 0.186206\nvt 0.325274 0.180312\nvt 0.340902 0.195832\nvt 0.338361 0.18919\nvt 0.344448 0.177446\nvt 0.341659 0.172577\nvt 0.800437 0.162896\nvt 0.815475 0.165534\nvt 0.823392 0.181513\nvt 0.814933 0.177057\nvt 0.828562 0.123124\nvt 0.828222 0.134287\nvt 0.785 0.141062\nvt 0.785 0.149689\nvt 0.943766 0.152434\nvt 0.92002 0.148781\nvt 0.89393 0.120753\nvt 0.872144 0.117701\nvt 0.939923 0.211262\nvt 0.935662 0.199076\nvt 0.98004 0.195517\nvt 0.97589 0.182395\nvt 0.847233 0.192187\nvt 0.860005 0.191586\nvt 0.885378 0.212212\nvt 0.902453 0.214932\nvt 0.873405 0.220215\nvt 0.875603 0.230292\nvt 0.852071 0.235325\nvt 0.852969 0.244548\nvt 0.94301 0.234678\nvt 0.941601 0.245866\nvt 0.905927 0.247401\nvt 0.90486 0.257905\nvt 0.931937 0.277939\nvt 0.927693 0.288185\nvt 0.897106 0.287431\nvt 0.893497 0.296549\nvt 0.876244 0.259725\nvt 0.875004 0.269432\nvt 0.851844 0.272218\nvt 0.850475 0.281238\nvt 0.907297 0.322901\nvt 0.918738 0.328116\nvt 0.883067 0.351493\nvt 0.892688 0.354725\nvt 0.875584 0.329018\nvt 0.885412 0.333047\nvt 0.856102 0.34115\nvt 0.848207 0.33767\nvt 0.840985 0.314968\nvt 0.848712 0.318012\nvt 0.864686 0.305087\nvt 0.874642 0.308965\nvt 0.82672 0.371986\nvt 0.832461 0.363222\nvt 0.807146 0.377745\nvt 0.81219 0.37108\nvt 0.865551 0.385248\nvt 0.856375 0.384052\nvt 0.861035 0.364347\nvt 0.852662 0.361459\nvt 0.832054 0.422125\nvt 0.826917 0.431809\nvt 0.861367 0.402233\nvt 0.854571 0.410248\nvt 0.792665 0.435593\nvt 0.800385 0.433112\nvt 0.803444 0.452258\nvt 0.809592 0.448664\nvt 0.79804 0.392484\nvt 0.799682 0.398105\nvt 0.785085 0.40867\nvt 0.785036 0.416592\nvt 0.8014 0.177885\nvt 0.798059 0.18222\nvt 0.785012 0.184416\nvt 0.785024 0.188618\nvt 0.827016 0.195276\nvt 0.819199 0.19753\nvt 0.80469 0.191292\nvt 0.800558 0.194723\nvt 0.798766 0.2069\nvt 0.802302 0.20437\nvt 0.792263 0.2033\nvt 0.790615 0.205694\nvt 0.791182 0.193725\nvt 0.789832 0.197265\nvt 0.785052 0.199536\nvt 0.785057 0.202434\nvt 0.839968 0.225287\nvt 0.830922 0.225113\nvt 0.818467 0.211042\nvt 0.812095 0.212473\nvt 0.843072 0.260766\nvt 0.834494 0.25919\nvt 0.825601 0.24104\nvt 0.818632 0.240903\nvt 0.813581 0.256555\nvt 0.808387 0.256372\nvt 0.798705 0.241873\nvt 0.802452 0.241432\nvt 0.809963 0.226318\nvt 0.805132 0.227442\nvt 0.798649 0.217414\nvt 0.795653 0.218886\nvt 0.838472 0.29582\nvt 0.831313 0.293669\nvt 0.826349 0.275097\nvt 0.819879 0.273882\nvt 0.822663 0.325911\nvt 0.827981 0.328263\nvt 0.821882 0.308017\nvt 0.816817 0.306395\nvt 0.809789 0.320411\nvt 0.806493 0.319123\nvt 0.801269 0.302057\nvt 0.80445 0.302829\nvt 0.813532 0.289103\nvt 0.808953 0.288188\nvt 0.800667 0.271465\nvt 0.804488 0.27181\nvt 0.813079 0.360026\nvt 0.80973 0.356895\nvt 0.81273 0.339236\nvt 0.809375 0.337239\nvt 0.794974 0.383232\nvt 0.793757 0.379209\nvt 0.799988 0.366927\nvt 0.798282 0.364095\nvt 0.79103 0.370389\nvt 0.790399 0.367516\nvt 0.794408 0.35761\nvt 0.793404 0.355446\nvt 0.802028 0.349832\nvt 0.800148 0.347918\nvt 0.799497 0.331436\nvt 0.80161 0.33265\nvt 0.318188 0.0650969\nvt 0.317212 0.069269\nvt 0.306057 0.0727807\nvt 0.306073 0.0766809\nvt 0.34188 0.0682707\nvt 0.338353 0.073136\nvt 0.326097 0.0748964\nvt 0.324158 0.0789241\nvt 0.326761 0.0896834\nvt 0.329316 0.0859638\nvt 0.317682 0.0925478\nvt 0.319123 0.0895598\nvt 0.314469 0.0809239\nvt 0.313619 0.0844511\nvt 0.306113 0.0871707\nvt 0.306138 0.0901775\nvt 0.356511 0.0834695\nvt 0.350967 0.0874508\nvt 0.338229 0.0870591\nvt 0.3421 0.0827969\nvt 0.356878 0.110766\nvt 0.352173 0.111719\nvt 0.347886 0.101553\nvt 0.343933 0.103831\nvt 0.34098 0.114984\nvt 0.338011 0.116212\nvt 0.331561 0.112373\nvt 0.334295 0.110271\nvt 0.335118 0.100886\nvt 0.338423 0.0977849\nvt 0.325578 0.101872\nvt 0.328689 0.0981336\nvt 0.352416 0.137947\nvt 0.348595 0.136458\nvt 0.34687 0.124125\nvt 0.343542 0.124147\nvt 0.344694 0.16045\nvt 0.341741 0.157007\nvt 0.342563 0.14537\nvt 0.33977 0.143373\nvt 0.331985 0.146576\nvt 0.334229 0.148804\nvt 0.332476 0.138886\nvt 0.330214 0.137781\nvt 0.339269 0.133345\nvt 0.336688 0.132676\nvt 0.335215 0.124879\nvt 0.332716 0.125323\nvt 0.332075 0.172794\nvt 0.330187 0.168329\nvt 0.33438 0.160455\nvt 0.332241 0.157145\nvt 0.315157 0.175635\nvt 0.314526 0.171011\nvt 0.321517 0.166256\nvt 0.320353 0.162619\nvt 0.312815 0.159987\nvt 0.312265 0.157195\nvt 0.3172 0.153794\nvt 0.316199 0.1514\nvt 0.325196 0.157583\nvt 0.323624 0.154676\nvt 0.324652 0.147\nvt 0.326459 0.149144\nvt 0.310913 0.0958802\nvt 0.311497 0.0934219\nvt 0.306308 0.0996694\nvt 0.306267 0.0976107\nvt 0.320407 0.0983381\nvt 0.318584 0.100407\nvt 0.314132 0.0996223\nvt 0.313165 0.101531\nvt 0.314481 0.105282\nvt 0.313406 0.106707\nvt 0.310951 0.106325\nvt 0.310354 0.107749\nvt 0.309137 0.103721\nvt 0.309524 0.101977\nvt 0.306398 0.10655\nvt 0.306377 0.104986\nvt 0.326982 0.109472\nvt 0.324642 0.112249\nvt 0.318672 0.115116\nvt 0.330026 0.120008\nvt 0.327417 0.121318\nvt 0.321704 0.120201\nvt 0.324016 0.118371\nvt 0.318153 0.126095\nvt 0.32025 0.125017\nvt 0.314068 0.125891\nvt 0.315701 0.12475\nvt 0.316611 0.121124\nvt 0.31843 0.119254\nvt 0.312564 0.122851\nvt 0.329482 0.131567\nvt 0.327036 0.131449\nvt 0.322753 0.127687\nvt 0.325162 0.127043\nvt 0.325781 0.141454\nvt 0.323753 0.140161\nvt 0.323563 0.135501\nvt 0.321447 0.135024\nvt 0.316734 0.136784\nvt 0.31829 0.137388\nvt 0.315868 0.134229\nvt 0.314322 0.13412\nvt 0.320198 0.131609\nvt 0.318161 0.131768\nvt 0.314641 0.130066\nvt 0.316393 0.129558\nvt 0.319328 0.147612\nvt 0.317971 0.145676\nvt 0.319544 0.141933\nvt 0.318029 0.140652\nvt 0.310783 0.150025\nvt 0.31034 0.147905\nvt 0.313469 0.14523\nvt 0.31267 0.143492\nvt 0.308926 0.140865\nvt 0.309217 0.142384\nvt 0.31078 0.139155\nvt 0.310365 0.137971\nvt 0.31448 0.141012\nvt 0.31358 0.139792\nvt 0.314472 0.137911\nvt 0.313826 0.137425\nvt 0.307992 0.109708\nvt 0.308234 0.108299\nvt 0.306508 0.11213\nvt 0.306483 0.110832\nvt 0.310987 0.110455\nvt 0.310326 0.111608\nvt 0.308931 0.111638\nvt 0.308554 0.112818\nvt 0.308839 0.114626\nvt 0.308466 0.115504\nvt 0.30771 0.115944\nvt 0.307501 0.116864\nvt 0.307431 0.113501\nvt 0.307282 0.114638\nvt 0.306545 0.116651\nvt 0.30654 0.115629\nvt 0.311273 0.114669\nvt 0.310562 0.115367\nvt 0.310138 0.114146\nvt 0.309579 0.114957\nvt 0.309416 0.119648\nvt 0.308988 0.119829\nvt 0.309375 0.118049\nvt 0.308925 0.118418\nvt 0.308003 0.120307\nvt 0.307793 0.120375\nvt 0.307661 0.119533\nvt 0.307905 0.119333\nvt 0.308556 0.117628\nvt 0.308951 0.117162\nvt 0.308173 0.117275\nvt 0.308384 0.116901\nvt 0.307645 0.123019\nvt 0.307481 0.122862\nvt 0.307848 0.121672\nvt 0.30766 0.121624\nvt 0.306831 0.124115\nvt 0.306785 0.123868\nvt 0.306978 0.123346\nvt 0.306919 0.123112\nvt 0.306682 0.123135\nvt 0.306672 0.12282\nvt 0.306807 0.121963\nvt 0.306803 0.12233\nvt 0.307077 0.122167\nvt 0.307117 0.122414\nvt 0.307272 0.121252\nvt 0.307317 0.121346\nvt 0.306943 0.117634\nvt 0.306868 0.118464\nvt 0.306555 0.119231\nvt 0.306558 0.11994\nvt 0.307527 0.118516\nvt 0.307687 0.117832\nvt 0.306988 0.119892\nvt 0.307074 0.119238\nvt 0.30718 0.12035\nvt 0.307121 0.120816\nvt 0.306823 0.121548\nvt 0.306713 0.120591\nvt 0.306692 0.121142\nvt 0.306568 0.121684\nvt 0.30657 0.122136\nvt 0.306966 0.124607\nvt 0.307056 0.124862\nvt 0.306573 0.125616\nvt 0.306571 0.125294\nvt 0.308138 0.123251\nvt 0.308466 0.123342\nvt 0.308062 0.124872\nvt 0.307849 0.124617\nvt 0.309801 0.124239\nvt 0.309439 0.123975\nvt 0.308832 0.126381\nvt 0.308637 0.125959\nvt 0.307428 0.126175\nvt 0.307325 0.125826\nvt 0.306574 0.126741\nvt 0.306575 0.127166\nvt 0.310518 0.11917\nvt 0.311178 0.118914\nvt 0.310616 0.121654\nvt 0.310099 0.121599\nvt 0.313923 0.112373\nvt 0.312955 0.113151\nvt 0.314627 0.114878\nvt 0.313665 0.115263\nvt 0.317672 0.110085\nvt 0.319103 0.109574\nvt 0.317699 0.114652\nvt 0.313292 0.118629\nvt 0.314028 0.118739\nvt 0.312096 0.122393\nvt 0.311925 0.136727\nvt 0.311806 0.135829\nvt 0.308194 0.136023\nvt 0.308294 0.137039\nvt 0.309793 0.134984\nvt 0.309763 0.134148\nvt 0.308059 0.133441\nvt 0.308079 0.132729\nvt 0.309725 0.131885\nvt 0.309728 0.13119\nvt 0.311758 0.133237\nvt 0.31183 0.132411\nvt 0.30777 0.127949\nvt 0.307681 0.127478\nvt 0.306579 0.128608\nvt 0.306589 0.129137\nvt 0.310993 0.126172\nvt 0.310698 0.125609\nvt 0.309465 0.128523\nvt 0.309322 0.127942\nvt 0.311721 0.129123\nvt 0.311563 0.12835\nvt 0.309687 0.130513\nvt 0.307963 0.129593\nvt 0.308026 0.130172\nvt 0.306651 0.13086\nvt 0.306658 0.131471\nvt 0.129129 0.898373\nvt 0.129698 0.90423\nvt 0.119001 0.91038\nvt 0.122814 0.919083\nvt 0.149129 0.913086\nvt 0.154201 0.915372\nvt 0.144248 0.903151\nvt 0.139456 0.900376\nvt 0.140991 0.933351\nvt 0.14469 0.929454\nvt 0.158545 0.933098\nvt 0.159112 0.927356\nvt 0.118232 0.836498\nvt 0.106719 0.835381\nvt 0.10111 0.818426\nvt 0.0889022 0.816599\nvt 0.108883 0.866605\nvt 0.0977722 0.86684\nvt 0.0898102 0.850349\nvt 0.0783608 0.849946\nvt 0.0632565 0.867351\nvt 0.0515326 0.867595\nvt 0.0433827 0.848763\nvt 0.0317281 0.848424\nvt 0.0713718 0.832036\nvt 0.0595703 0.830974\nvt 0.0522792 0.811117\nvt 0.0400715 0.80929\nvt 0.108312 0.901672\nvt 0.0985762 0.902431\nvt 0.0854873 0.884541\nvt 0.0741371 0.885296\nvt 0.114897 0.941377\nvt 0.126058 0.939316\nvt 0.0819002 0.924564\nvt 0.0936168 0.923053\nvt 0.0623125 0.948689\nvt 0.0760116 0.946835\nvt 0.030818 0.930797\nvt 0.043877 0.929186\nvt 0.0523764 0.906836\nvt 0.0645932 0.905625\nvt 0.037346 0.887254\nvt 0.0233847 0.887559\nvt 0.150621 0.900264\nvt 0.149654 0.902633\nvt 0.160903 0.898721\nvt 0.16036 0.900525\nvt 0.132485 0.891376\nvt 0.136036 0.890326\nvt 0.144323 0.894454\nvt 0.146828 0.89357\nvt 0.146096 0.889709\nvt 0.149399 0.889835\nvt 0.157141 0.89178\nvt 0.154394 0.892067\nvt 0.154658 0.895716\nvt 0.156544 0.894823\nvt 0.163056 0.895395\nvt 0.16354 0.894808\nvt 0.159777 0.888873\nvt 0.160744 0.889636\nvt 0.172162 0.888416\nvt 0.172603 0.888931\nvt 0.168263 0.890549\nvt 0.167344 0.889883\nvt 0.175532 0.890952\nvt 0.174671 0.890451\nvt 0.171482 0.892532\nvt 0.172633 0.893176\nvt 0.165291 0.892733\nvt 0.163926 0.891968\nvt 0.272519 0.893097\nvt 0.272684 0.884973\nvt 0.293361 0.880159\nvt 0.292883 0.871752\nvt 0.229722 0.885518\nvt 0.230277 0.877863\nvt 0.251838 0.873616\nvt 0.251896 0.865945\nvt 0.23151 0.855821\nvt 0.23161 0.848663\nvt 0.251644 0.84319\nvt 0.251424 0.835678\nvt 0.272215 0.860805\nvt 0.271896 0.852825\nvt 0.291449 0.84653\nvt 0.290971 0.838123\nvt 0.261169 0.951233\nvt 0.25901 0.959641\nvt 0.283073 0.946099\nvt 0.285417 0.937955\nvt 0.220819 0.954568\nvt 0.223078 0.945992\nvt 0.245537 0.931241\nvt 0.243758 0.939817\nvt 0.227739 0.919747\nvt 0.228391 0.911003\nvt 0.25047 0.897416\nvt 0.24962 0.905675\nvt 0.269141 0.917796\nvt 0.267333 0.926085\nvt 0.29245 0.913524\nvt 0.294795 0.90538\nvt 0.190752 0.951885\nvt 0.192365 0.94393\nvt 0.207954 0.935917\nvt 0.209232 0.927376\nvt 0.16899 0.95067\nvt 0.169382 0.943223\nvt 0.181204 0.936505\nvt 0.18174 0.929392\nvt 0.170476 0.91806\nvt 0.170366 0.923597\nvt 0.181457 0.906228\nvt 0.181969 0.910859\nvt 0.195069 0.920256\nvt 0.194952 0.912947\nvt 0.208595 0.900534\nvt 0.204227 0.889538\nvt 0.186793 0.869587\nvt 0.185487 0.875022\nvt 0.209583 0.867035\nvt 0.210245 0.860192\nvt 0.141911 0.871418\nvt 0.142759 0.865735\nvt 0.166179 0.860875\nvt 0.167691 0.854773\nvt 0.148121 0.846381\nvt 0.150672 0.839697\nvt 0.172908 0.83523\nvt 0.174805 0.82857\nvt 0.190197 0.850747\nvt 0.191249 0.844167\nvt 0.211749 0.839788\nvt 0.211876 0.833232\nvt 0.18879 0.89557\nvt 0.191198 0.897382\nvt 0.191523 0.890829\nvt 0.188908 0.890855\nvt 0.169841 0.902589\nvt 0.170124 0.905446\nvt 0.178503 0.897995\nvt 0.177253 0.89654\nvt 0.16898 0.897078\nvt 0.16869 0.895947\nvt 0.173812 0.893813\nvt 0.182488 0.893038\nvt 0.180602 0.892628\nvt 0.182535 0.890834\nvt 0.181071 0.890877\nvt 0.146553 0.881808\nvt 0.143899 0.879469\nvt 0.140044 0.885674\nvt 0.143938 0.886455\nvt 0.178704 0.883641\nvt 0.18134 0.882035\nvt 0.162567 0.883249\nvt 0.162871 0.88458\nvt 0.173465 0.886184\nvt 0.172551 0.886801\nvt 0.164346 0.887158\nvt 0.16502 0.887847\nvt 0.1536 0.885746\nvt 0.155701 0.886656\nvt 0.152664 0.88819\nvt 0.154445 0.888544\nvt 0.192233 0.888511\nvt 0.194249 0.889291\nvt 0.186824 0.88674\nvt 0.183834 0.886914\nvt 0.185199 0.889657\nvt 0.18298 0.889852\nvt 0.186577 0.890836\nvt 0.181827 0.887802\nvt 0.183023 0.888154\nvt 0.179339 0.889369\nvt 0.178835 0.888992\nvt 0.793938 0.341513\nvt 0.795437 0.343143\nvt 0.791751 0.32767\nvt 0.793584 0.328338\nvt 0.786783 0.358323\nvt 0.788497 0.356608\nvt 0.788221 0.333507\nvt 0.788089 0.339284\nvt 0.785002 0.350449\nvt 0.785001 0.345381\nvt 0.796032 0.315448\nvt 0.795869 0.322475\nvt 0.788351 0.320648\nvt 0.788331 0.313885\nvt 0.791851 0.307384\nvt 0.791689 0.300181\nvt 0.788051 0.292594\nvt 0.787948 0.285224\nvt 0.790846 0.278008\nvt 0.790535 0.2706\nvt 0.795678 0.293452\nvt 0.795476 0.285969\nvt 0.792142 0.230542\nvt 0.794431 0.229954\nvt 0.78806 0.221688\nvt 0.789352 0.221316\nvt 0.79392 0.256207\nvt 0.796502 0.256166\nvt 0.789317 0.242857\nvt 0.790912 0.242674\nvt 0.787233 0.256157\nvt 0.788384 0.256101\nvt 0.785124 0.24291\nvt 0.785927 0.242872\nvt 0.786645 0.231378\nvt 0.787479 0.231153\nvt 0.785364 0.222053\nvt 0.785863 0.222034\nvt 0.790385 0.216864\nvt 0.789762 0.213742\nvt 0.786158 0.215503\nvt 0.785672 0.215389\nvt 0.78711 0.221887\nvt 0.787137 0.205324\nvt 0.786657 0.207286\nvt 0.785055 0.208705\nvt 0.785089 0.210656\nvt 0.456406 0.40029\nvt 0.432902 0.404838\nvt 0.397536 0.369358\nvt 0.370048 0.378524\nvt 0.447266 0.481528\nvt 0.46358 0.479593\nvt 0.40188 0.455432\nvt 0.420944 0.449974\nvt 0.386393 0.500192\nvt 0.400644 0.494124\nvt 0.333607 0.488514\nvt 0.348958 0.47847\nvt 0.36361 0.425946\nvt 0.341573 0.434746\nvt 0.287584 0.406025\nvt 0.260096 0.415192\nvt 0.46881 0.535497\nvt 0.457688 0.536349\nvt 0.439951 0.514174\nvt 0.427205 0.517339\nvt 0.4717 0.570787\nvt 0.463577 0.570771\nvt 0.451992 0.55677\nvt 0.443197 0.557914\nvt 0.441018 0.572259\nvt 0.434518 0.572979\nvt 0.420055 0.564386\nvt 0.41382 0.567394\nvt 0.426327 0.543059\nvt 0.416918 0.546186\nvt 0.392785 0.531243\nvt 0.382972 0.537322\nvt 0.285284 0.471001\nvt 0.271132 0.487268\nvt 0.217379 0.481579\nvt 0.20314 0.503708\nvt 0.339648 0.534002\nvt 0.349572 0.524301\nvt 0.296734 0.525919\nvt 0.287243 0.540028\nvt 0.312812 0.578812\nvt 0.317554 0.567013\nvt 0.265264 0.600765\nvt 0.267833 0.585122\nvt 0.235436 0.540729\nvt 0.225921 0.55928\nvt 0.160424 0.570094\nvt 0.146185 0.592223\nvt 0.219163 0.637061\nvt 0.21491 0.617074\nvt 0.176199 0.66591\nvt 0.186204 0.690473\nvt 0.309087 0.628241\nvt 0.307725 0.615745\nvt 0.277423 0.664484\nvt 0.271535 0.648647\nvt 0.330291 0.676758\nvt 0.32265 0.665011\nvt 0.305313 0.709423\nvt 0.318654 0.722841\nvt 0.241963 0.696979\nvt 0.252288 0.716263\nvt 0.216218 0.764161\nvt 0.226223 0.788723\nvt 0.370906 0.620264\nvt 0.370241 0.61295\nvt 0.349335 0.642994\nvt 0.345902 0.633565\nvt 0.410019 0.614454\nvt 0.40973 0.61005\nvt 0.395475 0.62819\nvt 0.393695 0.622641\nvt 0.415559 0.631737\nvt 0.413435 0.627482\nvt 0.405748 0.643679\nvt 0.41097 0.648335\nvt 0.383402 0.648658\nvt 0.378874 0.641709\nvt 0.375959 0.67822\nvt 0.367355 0.669928\nvt 0.387564 0.565157\nvt 0.393571 0.559675\nvt 0.35412 0.568148\nvt 0.359751 0.559676\nvt 0.417153 0.581667\nvt 0.420084 0.578587\nvt 0.397413 0.584415\nvt 0.400373 0.579607\nvt 0.410617 0.597225\nvt 0.41165 0.593131\nvt 0.391957 0.605842\nvt 0.392511 0.600338\nvt 0.372568 0.591318\nvt 0.375143 0.584443\nvt 0.342712 0.604926\nvt 0.343927 0.595469\nvt 0.299706 0.765618\nvt 0.322731 0.777977\nvt 0.321389 0.824334\nvt 0.353112 0.836204\nvt 0.362956 0.708572\nvt 0.377038 0.717721\nvt 0.37153 0.755882\nvt 0.392061 0.764502\nvt 0.443552 0.743385\nvt 0.42578 0.738991\nvt 0.457539 0.781452\nvt 0.480014 0.782813\nvt 0.399476 0.808921\nvt 0.426144 0.816836\nvt 0.448278 0.871815\nvt 0.48 0.883685\nvt 0.403806 0.667338\nvt 0.412758 0.672896\nvt 0.409341 0.699745\nvt 0.422434 0.705438\nvt 0.427011 0.641496\nvt 0.432927 0.643741\nvt 0.432562 0.659773\nvt 0.441265 0.662721\nvt 0.454826 0.648203\nvt 0.463006 0.649346\nvt 0.470003 0.667888\nvt 0.480012 0.668303\nvt 0.44441 0.685583\nvt 0.456037 0.688321\nvt 0.465242 0.716259\nvt 0.480078 0.717107\nvt 0.439549 0.625418\nvt 0.433445 0.626025\nvt 0.444006 0.63415\nvt 0.45063 0.634569\nvt 0.432325 0.611851\nvt 0.439352 0.61144\nvt 0.453004 0.617171\nvt 0.446286 0.617443\nvt 0.4599 0.610669\nvt 0.466615 0.610684\nvt 0.479996 0.616742\nvt 0.473236 0.616702\nvt 0.459113 0.62467\nvt 0.465972 0.624872\nvt 0.472389 0.635652\nvt 0.479976 0.635783\nvt 0.432546 0.599416\nvt 0.439506 0.599914\nvt 0.446252 0.605548\nvt 0.453107 0.605604\nvt 0.440153 0.58806\nvt 0.43421 0.587135\nvt 0.453165 0.59549\nvt 0.446522 0.594936\nvt 0.459328 0.589976\nvt 0.466099 0.590132\nvt 0.479986 0.596591\nvt 0.473251 0.59656\nvt 0.459931 0.601052\nvt 0.466632 0.601235\nvt 0.473327 0.605783\nvt 0.480005 0.605808\nvt 0.0548234 0.0730323\nvt 0.0505658 0.0540709\nvt 0.0206036 0.101943\nvt 0.0253466 0.121948\nvt 0.128172 0.0394456\nvt 0.130215 0.0573249\nvt 0.0968839 0.0825594\nvt 0.100839 0.100295\nvt 0.139367 0.107954\nvt 0.143436 0.12381\nvt 0.122003 0.167275\nvt 0.115686 0.151241\nvt 0.0684031 0.129321\nvt 0.0735242 0.147694\nvt 0.0395757 0.181962\nvt 0.0443187 0.201967\nvt 0.0949317 0.199447\nvt 0.104746 0.215143\nvt 0.0957049 0.266156\nvt 0.0828583 0.250109\nvt 0.159924 0.168026\nvt 0.166637 0.181665\nvt 0.146098 0.211546\nvt 0.155438 0.224958\nvt 0.190468 0.218251\nvt 0.199234 0.228644\nvt 0.186848 0.260173\nvt 0.198418 0.269614\nvt 0.137723 0.259363\nvt 0.149544 0.272856\nvt 0.134244 0.314299\nvt 0.147091 0.330346\nvt 0.208954 0.146934\nvt 0.213279 0.158019\nvt 0.198267 0.180159\nvt 0.204803 0.191203\nvt 0.244343 0.144141\nvt 0.242078 0.135728\nvt 0.234226 0.159286\nvt 0.238086 0.167918\nvt 0.253135 0.166653\nvt 0.256564 0.172847\nvt 0.251906 0.189551\nvt 0.257012 0.19499\nvt 0.229024 0.187437\nvt 0.234742 0.195651\nvt 0.22682 0.219206\nvt 0.234763 0.226608\nvt 0.18888 0.0419583\nvt 0.189828 0.0567177\nvt 0.1648 0.0703183\nvt 0.166908 0.0861142\nvt 0.231752 0.0616198\nvt 0.231983 0.0712107\nvt 0.213367 0.0751371\nvt 0.214875 0.0867182\nvt 0.234666 0.0996226\nvt 0.236015 0.108939\nvt 0.221486 0.119808\nvt 0.224198 0.130284\nvt 0.1954 0.0981562\nvt 0.197969 0.111069\nvt 0.176908 0.12962\nvt 0.181426 0.143036\nvt 0.190205 0.304754\nvt 0.205931 0.311447\nvt 0.206681 0.345626\nvt 0.226544 0.35072\nvt 0.228449 0.25381\nvt 0.2388 0.259831\nvt 0.236743 0.289919\nvt 0.25026 0.294443\nvt 0.271843 0.272149\nvt 0.283194 0.274282\nvt 0.292009 0.302593\nvt 0.306046 0.303176\nvt 0.255471 0.326417\nvt 0.272265 0.329947\nvt 0.286135 0.366\nvt 0.305998 0.371094\nvt 0.260966 0.219271\nvt 0.254128 0.214898\nvt 0.269061 0.245956\nvt 0.260148 0.242541\nvt 0.273653 0.189359\nvt 0.268917 0.186643\nvt 0.280231 0.207885\nvt 0.27412 0.205857\nvt 0.289232 0.19368\nvt 0.294743 0.194271\nvt 0.299518 0.210677\nvt 0.306047 0.210827\nvt 0.290702 0.228962\nvt 0.283085 0.2276\nvt 0.296915 0.2514\nvt 0.306268 0.251727\nvt 0.759707 0.169755\nvt 0.754525 0.165536\nvt 0.785 0.156541\nvt 0.704193 0.200664\nvt 0.709996 0.191585\nvt 0.73952 0.187045\nvt 0.746618 0.181508\nvt 0.610407 0.203629\nvt 0.634337 0.199078\nvt 0.648445 0.218649\nvt 0.667541 0.214959\nvt 0.652219 0.136262\nvt 0.64998 0.148781\nvt 0.598261 0.169273\nvt 0.59411 0.182395\nvt 0.763483 0.131821\nvt 0.741778 0.134288\nvt 0.719643 0.114648\nvt 0.697856 0.1177\nvt 0.707693 0.227854\nvt 0.694399 0.230291\nvt 0.684619 0.21223\nvt 0.706597 0.265896\nvt 0.694996 0.269434\nvt 0.679595 0.253664\nvt 0.665139 0.25791\nvt 0.656225 0.282847\nvt 0.642307 0.288187\nvt 0.618061 0.272653\nvt 0.601645 0.278056\nvt 0.646756 0.240977\nvt 0.628399 0.245869\nvt 0.604197 0.22856\nvt 0.577509 0.234882\nvt 0.657149 0.315358\nvt 0.662703 0.322902\nvt 0.646656 0.339585\nvt 0.653615 0.345703\nvt 0.702154 0.296609\nvt 0.705315 0.305077\nvt 0.689466 0.3212\nvt 0.694417 0.328991\nvt 0.717239 0.3293\nvt 0.721803 0.337416\nvt 0.711224 0.352815\nvt 0.717335 0.36137\nvt 0.680632 0.344258\nvt 0.686933 0.351484\nvt 0.674491 0.364058\nvt 0.68145 0.370176\nvt 0.748522 0.367333\nvt 0.743298 0.371731\nvt 0.777831 0.400985\nvt 0.77051 0.39809\nvt 0.768309 0.383248\nvt 0.762931 0.377616\nvt 0.771074 0.444351\nvt 0.769626 0.43311\nvt 0.785013 0.42593\nvt 0.730083 0.420161\nvt 0.737949 0.422125\nvt 0.754262 0.445072\nvt 0.76041 0.448665\nvt 0.713626 0.384041\nvt 0.706848 0.375189\nvt 0.708634 0.402234\nvt 0.701838 0.394219\nvt 0.778426 0.18053\nvt 0.771946 0.18222\nvt 0.755074 0.177053\nvt 0.782664 0.196429\nvt 0.780228 0.19727\nvt 0.773133 0.192005\nvt 0.769456 0.194738\nvt 0.773467 0.203424\nvt 0.771265 0.207039\nvt 0.760381 0.206881\nvt 0.75791 0.21253\nvt 0.755292 0.192111\nvt 0.750802 0.197538\nvt 0.728783 0.200994\nvt 0.724884 0.209053\nvt 0.741367 0.217153\nvt 0.73908 0.225118\nvt 0.717932 0.235324\nvt 0.717034 0.244547\nvt 0.766297 0.221405\nvt 0.764899 0.227582\nvt 0.752588 0.23305\nvt 0.751373 0.240923\nvt 0.762343 0.248549\nvt 0.761631 0.2564\nvt 0.750083 0.26547\nvt 0.750115 0.273898\nvt 0.73583 0.250255\nvt 0.735506 0.259194\nvt 0.718157 0.272219\nvt 0.719526 0.281239\nvt 0.737432 0.285235\nvt 0.738689 0.293657\nvt 0.726096 0.30675\nvt 0.729027 0.314871\nvt 0.761031 0.280276\nvt 0.761065 0.288186\nvt 0.752061 0.298373\nvt 0.753188 0.306313\nvt 0.76264 0.311172\nvt 0.763518 0.318636\nvt 0.75843 0.329364\nvt 0.760629 0.336965\nvt 0.744809 0.317749\nvt 0.747348 0.325635\nvt 0.739879 0.338625\nvt 0.744021 0.346727\nvt 0.756786 0.349021\nvt 0.760289 0.356618\nvt 0.757843 0.370832\nvt 0.767855 0.340558\nvt 0.769865 0.347434\nvt 0.768697 0.358151\nvt 0.771747 0.364005\nvt 0.779624 0.36749\nvt 0.777008 0.364286\nvt 0.781655 0.375429\nvt 0.785044 0.376198\nvt 0.772204 0.375402\nvt 0.776437 0.379189\nvt 0.779525 0.390189\nvt 0.7852 0.391132\nvt 0.294865 0.069273\nvt 0.30043 0.0688405\nvt 0.279667 0.0621023\nvt 0.28625 0.0614953\nvt 0.298599 0.0844607\nvt 0.302305 0.0840285\nvt 0.288008 0.0789387\nvt 0.292323 0.0779227\nvt 0.288381 0.0877781\nvt 0.28552 0.0897183\nvt 0.276765 0.0842503\nvt 0.273951 0.0870858\nvt 0.278673 0.0717254\nvt 0.273729 0.0731469\nvt 0.253337 0.0645302\nvt 0.25992 0.0639232\nvt 0.262878 0.0822186\nvt 0.261129 0.0874647\nvt 0.248289 0.0869807\nvt 0.248308 0.0946498\nvt 0.278716 0.0976236\nvt 0.277171 0.100923\nvt 0.268957 0.0990669\nvt 0.268251 0.103852\nvt 0.274275 0.116236\nvt 0.274519 0.112124\nvt 0.268182 0.119003\nvt 0.268643 0.124165\nvt 0.259675 0.105447\nvt 0.259933 0.111746\nvt 0.250795 0.117615\nvt 0.252119 0.125147\nvt 0.263507 0.136485\nvt 0.262435 0.130471\nvt 0.2591 0.15303\nvt 0.257038 0.146576\nvt 0.27493 0.12867\nvt 0.27559 0.132687\nvt 0.272403 0.143396\nvt 0.271165 0.138926\nvt 0.278743 0.143571\nvt 0.280276 0.146601\nvt 0.277622 0.154543\nvt 0.279923 0.157209\nvt 0.270354 0.157173\nvt 0.268253 0.152725\nvt 0.270383 0.172927\nvt 0.267092 0.169083\nvt 0.278492 0.166781\nvt 0.281899 0.168492\nvt 0.282271 0.179452\nvt 0.286747 0.180383\nvt 0.288621 0.154697\nvt 0.286151 0.15335\nvt 0.288479 0.16194\nvt 0.291787 0.162635\nvt 0.296892 0.156885\nvt 0.299902 0.157192\nvt 0.302366 0.163246\nvt 0.306048 0.163267\nvt 0.293344 0.170777\nvt 0.297501 0.171018\nvt 0.301035 0.181089\nvt 0.305963 0.181062\nvt 0.303852 0.0954881\nvt 0.301555 0.095892\nvt 0.297353 0.091474\nvt 0.294691 0.0925717\nvt 0.304952 0.103426\nvt 0.303604 0.10373\nvt 0.301024 0.100728\nvt 0.299496 0.101554\nvt 0.299415 0.106748\nvt 0.300178 0.105696\nvt 0.295935 0.107006\nvt 0.296273 0.105311\nvt 0.293968 0.100448\nvt 0.29545 0.0988159\nvt 0.286872 0.101931\nvt 0.288229 0.0984483\nvt 0.292674 0.107002\nvt 0.29361 0.109618\nvt 0.292287 0.11254\nvt 0.294106 0.115148\nvt 0.298985 0.112416\nvt 0.298632 0.110794\nvt 0.2973 0.112881\nvt 0.298275 0.114907\nvt 0.301013 0.117395\nvt 0.301851 0.118931\nvt 0.30244 0.12167\nvt 0.301471 0.120273\nvt 0.297553 0.116765\nvt 0.298918 0.118763\nvt 0.300454 0.12287\nvt 0.299064 0.121347\nvt 0.285099 0.128977\nvt 0.285519 0.131455\nvt 0.281247 0.134881\nvt 0.282176 0.13779\nvt 0.294579 0.130396\nvt 0.294708 0.131771\nvt 0.291258 0.135023\nvt 0.290724 0.133294\nvt 0.295663 0.135656\nvt 0.296105 0.136813\nvt 0.293606 0.139498\nvt 0.294654 0.140659\nvt 0.287696 0.138235\nvt 0.288782 0.140175\nvt 0.286038 0.145165\nvt 0.287722 0.147041\nvt 0.29288 0.144681\nvt 0.294548 0.145688\nvt 0.296141 0.1514\nvt 0.29383 0.1507\nvt 0.298255 0.139331\nvt 0.29925 0.13982\nvt 0.298536 0.143015\nvt 0.300008 0.143487\nvt 0.303972 0.140861\nvt 0.302755 0.140681\nvt 0.306336 0.144246\nvt 0.304721 0.144201\nvt 0.302105 0.147899\nvt 0.300103 0.147581\nvt 0.303533 0.152451\nvt 0.306104 0.152508\nvt 0.30568 0.109527\nvt 0.304941 0.109715\nvt 0.303387 0.107231\nvt 0.302538 0.107769\nvt 0.306155 0.114561\nvt 0.305784 0.11464\nvt 0.304479 0.112826\nvt 0.304928 0.11252\nvt 0.304603 0.115495\nvt 0.304831 0.1152\nvt 0.303477 0.114968\nvt 0.303567 0.114279\nvt 0.302672 0.11164\nvt 0.303081 0.110957\nvt 0.300625 0.111412\nvt 0.300815 0.110291\nvt 0.302476 0.1154\nvt 0.302278 0.11432\nvt 0.30186 0.116731\nvt 0.301328 0.115344\nvt 0.304411 0.116942\nvt 0.304529 0.117621\nvt 0.303876 0.11752\nvt 0.304162 0.118429\nvt 0.305318 0.120378\nvt 0.30512 0.119768\nvt 0.305159 0.120964\nvt 0.305456 0.121626\nvt 0.303634 0.118794\nvt 0.304101 0.119838\nvt 0.30378 0.120625\nvt 0.304369 0.121662\nvt 0.305381 0.122376\nvt 0.305642 0.122864\nvt 0.305556 0.123604\nvt 0.305812 0.123943\nvt 0.306048 0.122168\nvt 0.3059 0.121862\nvt 0.306086 0.1229\nvt 0.306213 0.123112\nvt 0.306402 0.122768\nvt 0.306465 0.12282\nvt 0.30657 0.12345\nvt 0.306506 0.123445\nvt 0.306228 0.123765\nvt 0.30635 0.123869\nvt 0.306568 0.124444\nvt 0.306412 0.124427\nvt 0.306395 0.118462\nvt 0.306234 0.118465\nvt 0.305584 0.116861\nvt 0.30581 0.116777\nvt 0.306507 0.121173\nvt 0.306435 0.121143\nvt 0.306249 0.119929\nvt 0.306124 0.119892\nvt 0.306144 0.120965\nvt 0.305996 0.120815\nvt 0.305659 0.119691\nvt 0.305446 0.119535\nvt 0.305752 0.118536\nvt 0.305569 0.118503\nvt 0.305023 0.117175\nvt 0.304909 0.117252\nvt 0.306337 0.124973\nvt 0.306079 0.124864\nvt 0.306041 0.124191\nvt 0.306161 0.126316\nvt 0.305713 0.126179\nvt 0.305507 0.125243\nvt 0.305063 0.124878\nvt 0.30406 0.125039\nvt 0.30329 0.124252\nvt 0.303285 0.122826\nvt 0.305117 0.123976\nvt 0.304643 0.123348\nvt 0.304853 0.122492\nvt 0.289091 0.11064\nvt 0.287941 0.112289\nvt 0.281752 0.109435\nvt 0.280858 0.112402\nvt 0.296279 0.121145\nvt 0.296881 0.120258\nvt 0.291026 0.120223\nvt 0.291625 0.118591\nvt 0.294724 0.12611\nvt 0.295004 0.124744\nvt 0.289968 0.127695\nvt 0.290008 0.125764\nvt 0.285148 0.121341\nvt 0.285523 0.118845\nvt 0.279612 0.122032\nvt 0.279694 0.125346\nvt 0.300157 0.135899\nvt 0.301206 0.135861\nvt 0.301639 0.137855\nvt 0.302617 0.137976\nvt 0.299965 0.132291\nvt 0.301241 0.132413\nvt 0.302385 0.134107\nvt 0.303335 0.134147\nvt 0.304325 0.132671\nvt 0.305131 0.132727\nvt 0.30658 0.134265\nvt 0.305847 0.134248\nvt 0.304083 0.135946\nvt 0.304924 0.136021\nvt 0.306553 0.138275\nvt 0.305588 0.138248\nvt 0.305996 0.128078\nvt 0.305374 0.127952\nvt 0.304954 0.126777\nvt 0.304293 0.12639\nvt 0.30594 0.130251\nvt 0.305194 0.130173\nvt 0.304502 0.128827\nvt 0.303661 0.128528\nvt 0.302533 0.129558\nvt 0.30136 0.129133\nvt 0.300408 0.126846\nvt 0.298931 0.125903\nvt 0.303111 0.126904\nvt 0.302086 0.126183\nvt 0.301651 0.124112\nvt 0.878741 0.898798\nvt 0.871546 0.900675\nvt 0.865831 0.892894\nvt 0.859801 0.896501\nvt 0.842972 0.935112\nvt 0.851399 0.929046\nvt 0.871918 0.927946\nvt 0.878765 0.918061\nvt 0.847393 0.90653\nvt 0.847069 0.910863\nvt 0.833984 0.926105\nvt 0.896806 0.812276\nvt 0.900162 0.821321\nvt 0.880476 0.839424\nvt 0.950354 0.810053\nvt 0.952433 0.820381\nvt 0.928841 0.830431\nvt 0.931057 0.840232\nvt 0.957912 0.851638\nvt 0.959159 0.862335\nvt 0.935158 0.870581\nvt 0.935119 0.881337\nvt 0.908259 0.848725\nvt 0.909597 0.858288\nvt 0.883748 0.875855\nvt 0.909928 0.888801\nvt 0.907976 0.899946\nvt 0.883888 0.908072\nvt 0.960335 0.896235\nvt 0.959556 0.908435\nvt 0.930499 0.915661\nvt 0.92738 0.927625\nvt 0.955239 0.945958\nvt 0.953347 0.95866\nvt 0.915022 0.963875\nvt 0.910272 0.976089\nvt 0.894787 0.933604\nvt 0.887838 0.945032\nvt 0.83238 0.960024\nvt 0.850858 0.948146\nvt 0.846038 0.896642\nvt 0.840443 0.898471\nvt 0.853692 0.899798\nvt 0.836312 0.891589\nvt 0.839552 0.890433\nvt 0.847473 0.890905\nvt 0.851077 0.888696\nvt 0.848223 0.884067\nvt 0.847224 0.885688\nvt 0.856668 0.881572\nvt 0.855225 0.87963\nvt 0.864608 0.884565\nvt 0.861443 0.887927\nvt 0.877527 0.883697\nvt 0.835393 0.884093\nvt 0.838461 0.884232\nvt 0.834405 0.881596\nvt 0.830721 0.881411\nvt 0.830331 0.888503\nvt 0.832864 0.88882\nvt 0.827474 0.885908\nvt 0.830372 0.886145\nvt 0.822454 0.887483\nvt 0.819697 0.886949\nvt 0.818619 0.885017\nvt 0.815534 0.884563\nvt 0.825992 0.883548\nvt 0.822667 0.883355\nvt 0.819617 0.881297\nvt 0.817379 0.881361\nvt 0.703416 0.873089\nvt 0.713984 0.871544\nvt 0.724798 0.886947\nvt 0.735432 0.885308\nvt 0.706315 0.838803\nvt 0.71662 0.838024\nvt 0.72551 0.853492\nvt 0.736051 0.852292\nvt 0.747847 0.835663\nvt 0.758534 0.834847\nvt 0.768685 0.848527\nvt 0.780258 0.84718\nvt 0.745835 0.866894\nvt 0.757035 0.865409\nvt 0.768563 0.880699\nvt 0.78288 0.87934\nvt 0.72394 0.941353\nvt 0.713996 0.942528\nvt 0.738139 0.95828\nvt 0.748095 0.957393\nvt 0.705976 0.907664\nvt 0.716383 0.906017\nvt 0.72995 0.92226\nvt 0.73988 0.921055\nvt 0.75727 0.900642\nvt 0.747068 0.90152\nvt 0.768367 0.919\nvt 0.777176 0.919372\nvt 0.762942 0.937612\nvt 0.753406 0.938268\nvt 0.777964 0.954733\nvt 0.787921 0.953846\nvt 0.78833 0.937712\nvt 0.795361 0.938654\nvt 0.804593 0.956163\nvt 0.810151 0.956935\nvt 0.784721 0.902928\nvt 0.792636 0.906053\nvt 0.800269 0.92368\nvt 0.807327 0.92536\nvt 0.820822 0.915046\nvt 0.814016 0.913766\nvt 0.827304 0.927316\nvt 0.814698 0.941685\nvt 0.821028 0.942059\nvt 0.826823 0.959252\nvt 0.79266 0.859766\nvt 0.805616 0.857693\nvt 0.820556 0.866642\nvt 0.833146 0.865733\nvt 0.791615 0.831573\nvt 0.803117 0.83012\nvt 0.816754 0.842827\nvt 0.829419 0.84166\nvt 0.838273 0.825784\nvt 0.850134 0.824513\nvt 0.867756 0.839596\nvt 0.84508 0.854481\nvt 0.858126 0.85473\nvt 0.870664 0.869547\nvt 0.796908 0.886035\nvt 0.801102 0.889403\nvt 0.808518 0.901248\nvt 0.801789 0.897878\nvt 0.81035 0.887323\nvt 0.812779 0.888478\nvt 0.81102 0.890548\nvt 0.815296 0.89231\nvt 0.82226 0.891633\nvt 0.825755 0.892201\nvt 0.829144 0.895216\nvt 0.833995 0.895041\nvt 0.817061 0.897452\nvt 0.822842 0.898906\nvt 0.834503 0.906046\nvt 0.827997 0.906273\nvt 0.860834 0.875122\nvt 0.852675 0.873444\nvt 0.845753 0.865655\nvt 0.841289 0.879681\nvt 0.845045 0.880286\nvt 0.840148 0.876514\nvt 0.832992 0.876399\nvt 0.826813 0.879075\nvt 0.821848 0.879279\nvt 0.812972 0.877887\nvt 0.808402 0.878867\nvt 0.823351 0.872913\nvt 0.813911 0.874202\nvt 0.795696 0.872243\nvt 0.798338 0.880991\nvt 0.797471 0.879476\nvt 0.798986 0.884393\nvt 0.802639 0.88524\nvt 0.81044 0.881733\nvt 0.813236 0.882291\nvt 0.808103 0.885438\nvt 0.808268 0.884737\nvt 0.775163 0.335074\nvt 0.776074 0.341037\nvt 0.774751 0.350035\nvt 0.776607 0.355242\nvt 0.783446 0.33964\nvt 0.781915 0.339261\nvt 0.779997 0.327259\nvt 0.778255 0.327487\nvt 0.781113 0.359904\nvt 0.781517 0.356582\nvt 0.785005 0.3549\nvt 0.77398 0.314974\nvt 0.77168 0.315559\nvt 0.776426 0.327915\nvt 0.771953 0.286354\nvt 0.774555 0.285969\nvt 0.776345 0.300384\nvt 0.778348 0.300128\nvt 0.780753 0.2853\nvt 0.782328 0.285223\nvt 0.78352 0.299817\nvt 0.785051 0.299806\nvt 0.779938 0.314033\nvt 0.781684 0.313864\nvt 0.785002 0.32716\nvt 0.783349 0.32715\nvt 0.778488 0.225472\nvt 0.777904 0.230683\nvt 0.771968 0.235449\nvt 0.771321 0.24193\nvt 0.783952 0.226293\nvt 0.783718 0.231386\nvt 0.781125 0.23672\nvt 0.780763 0.242876\nvt 0.783229 0.249288\nvt 0.783059 0.256159\nvt 0.779936 0.263271\nvt 0.779577 0.270615\nvt 0.776666 0.249131\nvt 0.776112 0.256235\nvt 0.769779 0.263807\nvt 0.769368 0.271508\nvt 0.77873 0.212678\nvt 0.780285 0.213883\nvt 0.782083 0.221749\nvt 0.780716 0.221445\nvt 0.784258 0.206886\nvt 0.783419 0.207291\nvt 0.780839 0.20411\nvt 0.779433 0.205743\nvt 0.784203 0.218372\nvt 0.784195 0.21551\nvt 0.785166 0.21284\nvt 0.589952 0.378524\nvt 0.562464 0.369358\nvt 0.503596 0.40029\nvt 0.699904 0.415192\nvt 0.672416 0.406025\nvt 0.59639 0.425951\nvt 0.611041 0.478554\nvt 0.559363 0.49426\nvt 0.539068 0.449986\nvt 0.496492 0.479593\nvt 0.520096 0.51421\nvt 0.49126 0.535497\nvt 0.567218 0.531628\nvt 0.53368 0.543203\nvt 0.539945 0.564602\nvt 0.518969 0.572519\nvt 0.508003 0.556798\nvt 0.488199 0.570787\nvt 0.742621 0.481579\nvt 0.75686 0.503708\nvt 0.674716 0.47101\nvt 0.799576 0.570094\nvt 0.813815 0.592223\nvt 0.724563 0.54073\nvt 0.692159 0.585135\nvt 0.642447 0.567049\nvt 0.663266 0.525966\nvt 0.61043 0.524571\nvt 0.783801 0.66591\nvt 0.773796 0.690473\nvt 0.745088 0.617075\nvt 0.743783 0.764161\nvt 0.733778 0.788723\nvt 0.718037 0.696979\nvt 0.654681 0.70942\nvt 0.637352 0.665016\nvt 0.688464 0.648652\nvt 0.652274 0.615768\nvt 0.614096 0.633582\nvt 0.58976 0.612971\nvt 0.592651 0.669933\nvt 0.581128 0.641706\nvt 0.554254 0.643566\nvt 0.546564 0.627269\nvt 0.566304 0.622624\nvt 0.550269 0.609995\nvt 0.600252 0.559857\nvt 0.566431 0.559956\nvt 0.616073 0.5955\nvt 0.584858 0.584479\nvt 0.567488 0.600334\nvt 0.548349 0.593151\nvt 0.559627 0.579734\nvt 0.539909 0.579093\nvt 0.638611 0.824334\nvt 0.606889 0.836204\nvt 0.660293 0.765617\nvt 0.511722 0.871815\nvt 0.560526 0.808921\nvt 0.502489 0.781452\nvt 0.534269 0.73899\nvt 0.588474 0.755882\nvt 0.597048 0.708575\nvt 0.550671 0.699744\nvt 0.556198 0.667332\nvt 0.494899 0.716259\nvt 0.515639 0.685581\nvt 0.490019 0.667888\nvt 0.505161 0.648163\nvt 0.527442 0.659704\nvt 0.532988 0.641084\nvt 0.515991 0.633866\nvt 0.526553 0.625614\nvt 0.487566 0.635652\nvt 0.500872 0.624631\nvt 0.486757 0.616702\nvt 0.500102 0.610664\nvt 0.513712 0.617366\nvt 0.527672 0.611787\nvt 0.513748 0.605517\nvt 0.527453 0.599371\nvt 0.486682 0.605783\nvt 0.50007 0.60105\nvt 0.486722 0.59656\nvt 0.50062 0.590024\nvt 0.513473 0.595011\nvt 0.525783 0.587631\nvt 0.586653 0.121946\nvt 0.591396 0.101941\nvt 0.561433 0.0540682\nvt 0.567681 0.201967\nvt 0.572424 0.181962\nvt 0.543596 0.12932\nvt 0.496306 0.151233\nvt 0.472633 0.107947\nvt 0.515114 0.0825565\nvt 0.483825 0.0394428\nvt 0.516294 0.266158\nvt 0.52914 0.25011\nvt 0.517066 0.199446\nvt 0.477753 0.3143\nvt 0.464906 0.330348\nvt 0.474275 0.259362\nvt 0.425143 0.260158\nvt 0.421538 0.218218\nvt 0.4659 0.21154\nvt 0.452076 0.168013\nvt 0.413738 0.18014\nvt 0.403047 0.146919\nvt 0.3852 0.219117\nvt 0.382982 0.187399\nvt 0.360097 0.189474\nvt 0.358882 0.166536\nvt 0.377778 0.159267\nvt 0.369942 0.135702\nvt 0.447201 0.0703154\nvt 0.423117 0.0419556\nvt 0.435093 0.129602\nvt 0.4166 0.0981477\nvt 0.390522 0.119793\nvt 0.377353 0.0996072\nvt 0.398635 0.0751327\nvt 0.38025 0.061617\nvt 0.405316 0.345628\nvt 0.385452 0.350721\nvt 0.421791 0.304754\nvt 0.325862 0.366001\nvt 0.356531 0.326417\nvt 0.320081 0.302593\nvt 0.340324 0.272142\nvt 0.375268 0.289909\nvt 0.383562 0.253748\nvt 0.35189 0.242493\nvt 0.357884 0.214831\nvt 0.315571 0.2514\nvt 0.329081 0.227592\nvt 0.312567 0.210677\nvt 0.322751 0.193658\nvt 0.337894 0.205808\nvt 0.343097 0.186418\nvt 0.810294 0.169755\nvt 0.850359 0.114648\nvt 0.806518 0.131821\nvt 0.971739 0.169274\nvt 0.917781 0.136263\nvt 0.921552 0.218631\nvt 0.959593 0.203629\nvt 0.830487 0.18705\nvt 0.865808 0.200662\nvt 0.862308 0.227855\nvt 0.965804 0.22856\nvt 0.992491 0.234882\nvt 0.923244 0.240973\nvt 0.951939 0.272653\nvt 0.968356 0.278055\nvt 0.913774 0.282844\nvt 0.890404 0.253661\nvt 0.863404 0.265895\nvt 0.923344 0.339584\nvt 0.916386 0.345702\nvt 0.91285 0.315355\nvt 0.89551 0.364057\nvt 0.888551 0.370175\nvt 0.889369 0.344263\nvt 0.858776 0.352903\nvt 0.852768 0.329467\nvt 0.880535 0.32121\nvt 0.867845 0.296607\nvt 0.821498 0.367676\nvt 0.868163 0.394219\nvt 0.863153 0.375196\nvt 0.81574 0.445071\nvt 0.839919 0.42016\nvt 0.798928 0.44435\nvt 0.801863 0.383301\nvt 0.792424 0.400985\nvt 0.791579 0.18053\nvt 0.841219 0.200997\nvt 0.845118 0.209056\nvt 0.814711 0.192109\nvt 0.809626 0.206826\nvt 0.79656 0.203331\nvt 0.796883 0.191998\nvt 0.787411 0.196429\nvt 0.828634 0.217149\nvt 0.834171 0.250254\nvt 0.819915 0.265457\nvt 0.807673 0.248518\nvt 0.817419 0.233018\nvt 0.803738 0.221217\nvt 0.843911 0.306782\nvt 0.832568 0.285233\nvt 0.830139 0.339111\nvt 0.825999 0.347261\nvt 0.8252 0.317928\nvt 0.811576 0.329631\nvt 0.80737 0.311489\nvt 0.817945 0.298403\nvt 0.80899 0.280248\nvt 0.813228 0.349375\nvt 0.790839 0.390189\nvt 0.797925 0.375441\nvt 0.788428 0.375429\nvt 0.793007 0.36435\nvt 0.801319 0.358316\nvt 0.802158 0.341198\nvt 0.332327 0.0621015\nvt 0.325745 0.0614947\nvt 0.311647 0.0688385\nvt 0.352075 0.0639217\nvt 0.333407 0.0717162\nvt 0.335413 0.0842253\nvt 0.32389 0.0877493\nvt 0.319836 0.0779118\nvt 0.309894 0.0840236\nvt 0.363754 0.0869718\nvt 0.349211 0.0822056\nvt 0.361258 0.117579\nvt 0.352429 0.105426\nvt 0.344001 0.118983\nvt 0.337765 0.112099\nvt 0.343226 0.0990447\nvt 0.333573 0.0975813\nvt 0.355006 0.146532\nvt 0.349668 0.130446\nvt 0.344952 0.168765\nvt 0.343841 0.152613\nvt 0.334543 0.154481\nvt 0.33352 0.143557\nvt 0.34101 0.138912\nvt 0.33735 0.128656\nvt 0.329763 0.179299\nvt 0.333596 0.166563\nvt 0.310902 0.18109\nvt 0.318703 0.170758\nvt 0.309733 0.163248\nvt 0.315301 0.156889\nvt 0.32367 0.161905\nvt 0.326098 0.153322\nvt 0.314989 0.0914571\nvt 0.308597 0.0954824\nvt 0.324195 0.0983948\nvt 0.317083 0.0987829\nvt 0.316808 0.106963\nvt 0.316443 0.10527\nvt 0.312629 0.105664\nvt 0.311621 0.100712\nvt 0.307771 0.103422\nvt 0.330668 0.109399\nvt 0.323505 0.110594\nvt 0.332799 0.122007\nvt 0.327043 0.11882\nvt 0.322715 0.125751\nvt 0.317875 0.124728\nvt 0.32111 0.118566\nvt 0.316019 0.120234\nvt 0.33115 0.134873\nvt 0.32746 0.128966\nvt 0.326339 0.145129\nvt 0.324844 0.138228\nvt 0.319082 0.139491\nvt 0.317187 0.13564\nvt 0.321987 0.133296\nvt 0.318295 0.13039\nvt 0.318529 0.150689\nvt 0.319643 0.144662\nvt 0.308689 0.152454\nvt 0.312366 0.147588\nvt 0.307952 0.144205\nvt 0.310123 0.140685\nvt 0.314145 0.143015\nvt 0.314573 0.139291\nvt 0.309475 0.107218\nvt 0.307235 0.109524\nvt 0.312326 0.111353\nvt 0.312124 0.110237\nvt 0.309908 0.110933\nvt 0.309483 0.114267\nvt 0.308237 0.115204\nvt 0.308099 0.112513\nvt 0.306913 0.114559\nvt 0.311165 0.116708\nvt 0.311677 0.115309\nvt 0.310749 0.11428\nvt 0.309302 0.120617\nvt 0.308728 0.121656\nvt 0.309444 0.118781\nvt 0.307951 0.120961\nvt 0.307986 0.119765\nvt 0.309203 0.117508\nvt 0.308668 0.116955\nvt 0.307567 0.123604\nvt 0.307315 0.123946\nvt 0.307737 0.122373\nvt 0.306724 0.124427\nvt 0.306906 0.123764\nvt 0.306633 0.123444\nvt 0.306733 0.122768\nvt 0.307043 0.122899\nvt 0.307222 0.121863\nvt 0.307276 0.116776\nvt 0.306707 0.118461\nvt 0.308059 0.117198\nvt 0.307345 0.118544\nvt 0.30745 0.119691\nvt 0.306975 0.120965\nvt 0.306864 0.119929\nvt 0.306623 0.121172\nvt 0.307091 0.124193\nvt 0.3068 0.124972\nvt 0.308255 0.122488\nvt 0.308003 0.123971\nvt 0.309797 0.122813\nvt 0.309052 0.125029\nvt 0.307625 0.125238\nvt 0.306984 0.126314\nvt 0.310567 0.118094\nvt 0.310347 0.120366\nvt 0.312294 0.112597\nvt 0.313437 0.114031\nvt 0.316736 0.108826\nvt 0.318001 0.112075\nvt 0.31361 0.116827\nvt 0.312755 0.120533\nvt 0.31132 0.137829\nvt 0.31283 0.135856\nvt 0.307506 0.138251\nvt 0.309009 0.135948\nvt 0.307311 0.13425\nvt 0.30885 0.132673\nvt 0.310691 0.134104\nvt 0.313073 0.132287\nvt 0.308182 0.12677\nvt 0.307152 0.128077\nvt 0.311405 0.124096\nvt 0.309993 0.126895\nvt 0.312636 0.126836\nvt 0.31058 0.129551\nvt 0.308646 0.128824\nvt 0.307312 0.13025\nvt 0.134741 0.897372\nvt 0.123818 0.902577\nvt 0.149052 0.909116\nvt 0.128039 0.927803\nvt 0.151261 0.935128\nvt 0.123864 0.851854\nvt 0.109916 0.827785\nvt 0.120639 0.883074\nvt 0.0990923 0.858667\nvt 0.0741334 0.876091\nvt 0.053076 0.858287\nvt 0.08064 0.841498\nvt 0.0619869 0.821944\nvt 0.0971181 0.892942\nvt 0.158383 0.957471\nvt 0.144276 0.946157\nvt 0.109229 0.931423\nvt 0.0938029 0.955364\nvt 0.0983172 0.965752\nvt 0.0594861 0.938115\nvt 0.0788375 0.91443\nvt 0.0508158 0.896618\nvt 0.155128 0.901813\nvt 0.125564 0.889706\nvt 0.138448 0.893043\nvt 0.142594 0.887918\nvt 0.150127 0.891088\nvt 0.149715 0.895351\nvt 0.159314 0.895721\nvt 0.1617 0.887953\nvt 0.157888 0.889819\nvt 0.174897 0.887958\nvt 0.176895 0.888004\nvt 0.169566 0.889059\nvt 0.176632 0.889654\nvt 0.172963 0.891413\nvt 0.165451 0.890866\nvt 0.162835 0.893169\nvt 0.261113 0.899336\nvt 0.283276 0.886757\nvt 0.217801 0.891691\nvt 0.241054 0.879608\nvt 0.22079 0.861631\nvt 0.24174 0.849691\nvt 0.262194 0.86738\nvt 0.281923 0.853876\nvt 0.237618 0.965614\nvt 0.247223 0.966843\nvt 0.270935 0.952718\nvt 0.208802 0.961928\nvt 0.199197 0.960699\nvt 0.232324 0.947102\nvt 0.217632 0.927742\nvt 0.2384 0.912359\nvt 0.255372 0.932794\nvt 0.279614 0.919704\nvt 0.183892 0.959489\nvt 0.17879 0.959085\nvt 0.198849 0.944006\nvt 0.163485 0.957875\nvt 0.174919 0.943769\nvt 0.164591 0.92893\nvt 0.176222 0.917525\nvt 0.187973 0.92875\nvt 0.202078 0.910979\nvt 0.1631 0.876\nvt 0.173454 0.877172\nvt 0.197767 0.871743\nvt 0.131838 0.878135\nvt 0.153756 0.865875\nvt 0.134933 0.852384\nvt 0.160902 0.840754\nvt 0.178456 0.855922\nvt 0.201317 0.845361\nvt 0.187258 0.903875\nvt 0.192542 0.892938\nvt 0.159564 0.908772\nvt 0.164914 0.909241\nvt 0.174788 0.901559\nvt 0.16506 0.898855\nvt 0.171875 0.895352\nvt 0.181086 0.895118\nvt 0.182904 0.891654\nvt 0.152681 0.875564\nvt 0.139714 0.882944\nvt 0.193824 0.882843\nvt 0.170879 0.882315\nvt 0.179835 0.886208\nvt 0.16824 0.886555\nvt 0.156831 0.884468\nvt 0.152405 0.887035\nvt 0.19263 0.887824\nvt 0.185222 0.890147\nvt 0.180821 0.888387\nvt 0.79526 0.350473\nvt 0.794851 0.335707\nvt 0.788904 0.359922\nvt 0.790008 0.32732\nvt 0.786557 0.33964\nvt 0.798334 0.316191\nvt 0.786656 0.32715\nvt 0.790072 0.314092\nvt 0.78658 0.299817\nvt 0.789431 0.285299\nvt 0.793676 0.300484\nvt 0.798071 0.286342\nvt 0.798064 0.235325\nvt 0.791559 0.225283\nvt 0.800253 0.263768\nvt 0.793358 0.2491\nvt 0.790172 0.263259\nvt 0.786998 0.249287\nvt 0.788974 0.236687\nvt 0.786512 0.226287\nvt 0.791309 0.212491\nvt 0.78626 0.218367\nvt 0.789223 0.204095\nvt 0.785829 0.206886\nvt 0.428978 0.382737\nvt 0.443943 0.464369\nvt 0.421719 0.503804\nvt 0.376453 0.485562\nvt 0.394311 0.437147\nvt 0.32846 0.415987\nvt 0.455556 0.524848\nvt 0.462468 0.564025\nvt 0.451261 0.581746\nvt 0.449916 0.577093\nvt 0.431154 0.567941\nvt 0.440025 0.54969\nvt 0.410662 0.536766\nvt 0.318323 0.473296\nvt 0.251544 0.473527\nvt 0.372444 0.526931\nvt 0.324247 0.523776\nvt 0.339639 0.562219\nvt 0.293568 0.574505\nvt 0.267276 0.53146\nvt 0.200566 0.553678\nvt 0.241043 0.599199\nvt 0.192954 0.639214\nvt 0.326248 0.604225\nvt 0.289148 0.630433\nvt 0.33381 0.647779\nvt 0.312982 0.685518\nvt 0.255811 0.670696\nvt 0.22948 0.727793\nvt 0.381718 0.605816\nvt 0.358201 0.62207\nvt 0.417556 0.605641\nvt 0.424977 0.605558\nvt 0.401732 0.615621\nvt 0.419106 0.621257\nvt 0.425995 0.619774\nvt 0.408912 0.634837\nvt 0.385988 0.63123\nvt 0.372519 0.654544\nvt 0.407587 0.561548\nvt 0.377708 0.558954\nvt 0.427706 0.579092\nvt 0.430358 0.581105\nvt 0.410938 0.578795\nvt 0.419969 0.590827\nvt 0.42664 0.592195\nvt 0.402518 0.596202\nvt 0.388462 0.581377\nvt 0.360272 0.589007\nvt 0.300376 0.736431\nvt 0.306396 0.79508\nvt 0.363915 0.68795\nvt 0.365188 0.731414\nvt 0.4159 0.718741\nvt 0.43953 0.759996\nvt 0.382847 0.781634\nvt 0.421366 0.838198\nvt 0.403964 0.654426\nvt 0.405474 0.682511\nvt 0.426266 0.635406\nvt 0.429128 0.633128\nvt 0.429129 0.649557\nvt 0.449065 0.640372\nvt 0.461702 0.657498\nvt 0.437556 0.671888\nvt 0.4535 0.700609\nvt 0.439095 0.629382\nvt 0.439458 0.61452\nvt 0.453115 0.608105\nvt 0.466585 0.613458\nvt 0.452796 0.620731\nvt 0.465532 0.62966\nvt 0.439374 0.602718\nvt 0.4401 0.591261\nvt 0.452162 0.585881\nvt 0.466366 0.59355\nvt 0.453204 0.598182\nvt 0.46664 0.603509\nvt 0.0663222 0.0316632\nvt 0.0863048 0.0282414\nvt 0.0353858 0.077451\nvt 0.146252 0.0179763\nvt 0.166235 0.0145546\nvt 0.11204 0.0606664\nvt 0.151918 0.0883737\nvt 0.127296 0.128908\nvt 0.0824769 0.105336\nvt 0.0543245 0.154741\nvt 0.104701 0.174846\nvt 0.087525 0.224539\nvt 0.168113 0.148037\nvt 0.152511 0.189281\nvt 0.193928 0.198699\nvt 0.188025 0.238749\nvt 0.141145 0.234822\nvt 0.135602 0.28546\nvt 0.215025 0.132557\nvt 0.20333 0.162854\nvt 0.246409 0.12592\nvt 0.237985 0.146904\nvt 0.254815 0.156183\nvt 0.252133 0.177811\nvt 0.231201 0.172836\nvt 0.227517 0.202914\nvt 0.198898 0.0332954\nvt 0.209786 0.0395424\nvt 0.177494 0.0544083\nvt 0.242449 0.0582833\nvt 0.222388 0.0671948\nvt 0.241347 0.0923729\nvt 0.228082 0.108778\nvt 0.204463 0.085479\nvt 0.186095 0.112956\nvt 0.187357 0.282374\nvt 0.196484 0.325903\nvt 0.227021 0.236222\nvt 0.231535 0.271811\nvt 0.265087 0.257178\nvt 0.280703 0.287296\nvt 0.244628 0.308043\nvt 0.269288 0.345338\nvt 0.252548 0.201925\nvt 0.256615 0.228435\nvt 0.267578 0.177765\nvt 0.271105 0.195949\nvt 0.285365 0.186273\nvt 0.293928 0.201816\nvt 0.278072 0.216414\nvt 0.289284 0.239327\nvt 0.769564 0.162896\nvt 0.722769 0.192185\nvt 0.58996 0.195517\nvt 0.630076 0.211265\nvt 0.67607 0.120752\nvt 0.626234 0.152433\nvt 0.741439 0.123123\nvt 0.696595 0.220217\nvt 0.693757 0.259726\nvt 0.672887 0.287443\nvt 0.676491 0.296567\nvt 0.638063 0.27794\nvt 0.664073 0.247403\nvt 0.62699 0.234681\nvt 0.651263 0.328117\nvt 0.695357 0.308962\nvt 0.721297 0.317918\nvt 0.713904 0.340983\nvt 0.684588 0.333037\nvt 0.677313 0.354726\nvt 0.737552 0.362884\nvt 0.772215 0.392472\nvt 0.766558 0.452258\nvt 0.777344 0.435593\nvt 0.715431 0.410248\nvt 0.743085 0.43181\nvt 0.708962 0.36432\nvt 0.704451 0.385249\nvt 0.768602 0.177885\nvt 0.778858 0.193729\nvt 0.777778 0.203349\nvt 0.767717 0.204463\nvt 0.765318 0.191298\nvt 0.742987 0.195273\nvt 0.751533 0.211061\nvt 0.730034 0.225286\nvt 0.774403 0.219181\nvt 0.771401 0.217682\nvt 0.760055 0.226412\nvt 0.76757 0.241488\nvt 0.75643 0.256573\nvt 0.744402 0.241048\nvt 0.726929 0.260766\nvt 0.743645 0.275105\nvt 0.73153 0.295812\nvt 0.765544 0.27185\nvt 0.756479 0.289106\nvt 0.768746 0.301884\nvt 0.765564 0.302661\nvt 0.76022 0.320066\nvt 0.748123 0.307939\nvt 0.742033 0.327924\nvt 0.757278 0.338952\nvt 0.756941 0.359684\nvt 0.770522 0.330441\nvt 0.768407 0.331745\nvt 0.767981 0.349487\nvt 0.775601 0.357419\nvt 0.779004 0.370377\nvt 0.770059 0.366844\nvt 0.775281 0.38322\nvt 0.293849 0.0650992\nvt 0.297714 0.0809326\nvt 0.293189 0.0895829\nvt 0.282908 0.0859929\nvt 0.286025 0.0749074\nvt 0.270158 0.0682765\nvt 0.270031 0.082816\nvt 0.25555 0.0834791\nvt 0.28367 0.0981863\nvt 0.273807 0.0978158\nvt 0.278054 0.110299\nvt 0.27125 0.115005\nvt 0.264254 0.101572\nvt 0.255198 0.110795\nvt 0.265272 0.124148\nvt 0.259657 0.137977\nvt 0.277128 0.1249\nvt 0.272954 0.133354\nvt 0.279848 0.138895\nvt 0.27798 0.148834\nvt 0.269569 0.145411\nvt 0.267371 0.160673\nvt 0.277745 0.160599\nvt 0.279984 0.173015\nvt 0.285849 0.149181\nvt 0.287001 0.157611\nvt 0.295075 0.153794\nvt 0.299321 0.159983\nvt 0.290585 0.166289\nvt 0.29683 0.175639\nvt 0.300887 0.0934335\nvt 0.303167 0.101988\nvt 0.301892 0.106347\nvt 0.29828 0.105321\nvt 0.298456 0.0996462\nvt 0.292071 0.0983819\nvt 0.294289 0.105789\nvt 0.291982 0.109321\nvt 0.299662 0.110373\nvt 0.297804 0.111611\nvt 0.301072 0.116234\nvt 0.301158 0.118771\nvt 0.297221 0.114632\nvt 0.298209 0.119068\nvt 0.287479 0.127055\nvt 0.282995 0.131576\nvt 0.298362 0.130079\nvt 0.296552 0.129571\nvt 0.292598 0.13161\nvt 0.297053 0.134235\nvt 0.298653 0.134127\nvt 0.294482 0.137404\nvt 0.289062 0.1355\nvt 0.286675 0.141476\nvt 0.29306 0.141943\nvt 0.293112 0.147632\nvt 0.29841 0.137967\nvt 0.29909 0.137484\nvt 0.29828 0.141027\nvt 0.302146 0.139159\nvt 0.303577 0.142378\nvt 0.299116 0.145224\nvt 0.301555 0.150019\nvt 0.304648 0.108306\nvt 0.305619 0.113505\nvt 0.305368 0.115942\nvt 0.304221 0.114626\nvt 0.304076 0.111651\nvt 0.30198 0.110496\nvt 0.302901 0.114173\nvt 0.301742 0.114711\nvt 0.304694 0.116879\nvt 0.304129 0.117162\nvt 0.3052 0.119334\nvt 0.305106 0.120311\nvt 0.303703 0.118064\nvt 0.303663 0.119658\nvt 0.305266 0.121675\nvt 0.305476 0.123021\nvt 0.305847 0.12125\nvt 0.305802 0.121345\nvt 0.306009 0.122415\nvt 0.306321 0.121962\nvt 0.306327 0.12233\nvt 0.306455 0.123135\nvt 0.306154 0.123347\nvt 0.306304 0.124116\nvt 0.306152 0.117635\nvt 0.306408 0.120592\nvt 0.306302 0.121547\nvt 0.305934 0.120349\nvt 0.306032 0.119237\nvt 0.305402 0.117814\nvt 0.306169 0.124609\nvt 0.305814 0.125829\nvt 0.304489 0.125968\nvt 0.303658 0.123986\nvt 0.305278 0.124622\nvt 0.304976 0.123256\nvt 0.285519 0.109516\nvt 0.29439 0.119279\nvt 0.297243 0.124764\nvt 0.292554 0.125033\nvt 0.288633 0.118396\nvt 0.28246 0.120033\nvt 0.30106 0.13677\nvt 0.301305 0.133239\nvt 0.303418 0.131885\nvt 0.303417 0.131191\nvt 0.305119 0.133439\nvt 0.303289 0.134986\nvt 0.304808 0.137035\nvt 0.305461 0.127481\nvt 0.30523 0.129594\nvt 0.303461 0.130516\nvt 0.301517 0.128359\nvt 0.3038 0.127948\nvt 0.302385 0.125621\nvt 0.872666 0.893909\nvt 0.834318 0.932396\nvt 0.855668 0.933626\nvt 0.840667 0.913341\nvt 0.920698 0.801529\nvt 0.906955 0.802411\nvt 0.887247 0.821763\nvt 0.975668 0.798001\nvt 0.961925 0.798883\nvt 0.939422 0.820519\nvt 0.981273 0.842283\nvt 0.9688 0.841696\nvt 0.946833 0.861224\nvt 0.918565 0.839808\nvt 0.897302 0.857303\nvt 0.922871 0.879687\nvt 0.896901 0.898405\nvt 0.973524 0.885817\nvt 0.986878 0.886566\nvt 0.946073 0.906118\nvt 0.987522 0.93936\nvt 0.972183 0.936323\nvt 0.936315 0.955143\nvt 0.913512 0.924859\nvt 0.873929 0.941614\nvt 0.834355 0.897039\nvt 0.847043 0.899338\nvt 0.83224 0.891387\nvt 0.831834 0.890751\nvt 0.841605 0.891451\nvt 0.839141 0.886767\nvt 0.842198 0.887019\nvt 0.852191 0.883887\nvt 0.854096 0.889731\nvt 0.868961 0.885788\nvt 0.836474 0.882956\nvt 0.831869 0.887475\nvt 0.823762 0.888757\nvt 0.822246 0.889496\nvt 0.820775 0.886245\nvt 0.828429 0.884831\nvt 0.822938 0.882308\nvt 0.694494 0.857128\nvt 0.693711 0.865897\nvt 0.713753 0.88004\nvt 0.69763 0.822054\nvt 0.696846 0.830823\nvt 0.715796 0.846334\nvt 0.739046 0.82085\nvt 0.738167 0.828634\nvt 0.757933 0.842259\nvt 0.735477 0.860298\nvt 0.756836 0.873529\nvt 0.701928 0.935163\nvt 0.699814 0.926571\nvt 0.726042 0.950245\nvt 0.693473 0.900794\nvt 0.691359 0.892202\nvt 0.718028 0.914763\nvt 0.735998 0.894013\nvt 0.757855 0.909887\nvt 0.741688 0.930121\nvt 0.765381 0.946608\nvt 0.778598 0.928364\nvt 0.797108 0.946997\nvt 0.777815 0.890932\nvt 0.792384 0.91371\nvt 0.807593 0.905952\nvt 0.820673 0.92095\nvt 0.807789 0.932904\nvt 0.821139 0.950179\nvt 0.780138 0.854443\nvt 0.806429 0.863732\nvt 0.780462 0.819645\nvt 0.780425 0.826021\nvt 0.803715 0.837173\nvt 0.824807 0.819782\nvt 0.823094 0.812351\nvt 0.852752 0.832303\nvt 0.830703 0.848503\nvt 0.858919 0.861283\nvt 0.797722 0.890605\nvt 0.811305 0.886583\nvt 0.813164 0.886766\nvt 0.81014 0.88858\nvt 0.820597 0.890128\nvt 0.825049 0.893359\nvt 0.813312 0.893519\nvt 0.822107 0.901875\nvt 0.860094 0.878662\nvt 0.856081 0.870649\nvt 0.844564 0.881899\nvt 0.842467 0.882394\nvt 0.84383 0.878427\nvt 0.831394 0.880258\nvt 0.820601 0.878208\nvt 0.833362 0.874587\nvt 0.810694 0.871983\nvt 0.804506 0.87824\nvt 0.795568 0.881683\nvt 0.815921 0.883699\nvt 0.811559 0.880887\nvt 0.805878 0.885848\nvt 0.811167 0.885333\nvt 0.774576 0.342508\nvt 0.781783 0.333492\nvt 0.783234 0.358324\nvt 0.774144 0.321842\nvt 0.774342 0.293407\nvt 0.779262 0.278021\nvt 0.782132 0.292592\nvt 0.778167 0.30728\nvt 0.781653 0.320632\nvt 0.775606 0.230142\nvt 0.784798 0.222034\nvt 0.782761 0.231172\nvt 0.78431 0.242872\nvt 0.781809 0.256106\nvt 0.77913 0.24271\nvt 0.773522 0.256198\nvt 0.779662 0.217053\nvt 0.782938 0.205328\nvt 0.783203 0.221909\nvt 0.784795 0.215389\nvt 0.505532 0.376136\nvt 0.544659 0.43087\nvt 0.606833 0.40696\nvt 0.624637 0.462269\nvt 0.56766 0.47872\nvt 0.576557 0.520263\nvt 0.498133 0.462064\nvt 0.524235 0.500162\nvt 0.492349 0.523579\nvt 0.510407 0.54807\nvt 0.538963 0.533003\nvt 0.545423 0.558075\nvt 0.52176 0.566603\nvt 0.52811 0.578581\nvt 0.488784 0.563656\nvt 0.502901 0.577065\nvt 0.694073 0.454509\nvt 0.682106 0.515527\nvt 0.747649 0.533345\nvt 0.715838 0.581775\nvt 0.660923 0.561123\nvt 0.632299 0.593434\nvt 0.624676 0.512858\nvt 0.613897 0.552705\nvt 0.773827 0.616984\nvt 0.710986 0.652838\nvt 0.740736 0.705937\nvt 0.674184 0.721501\nvt 0.655487 0.672248\nvt 0.605789 0.678525\nvt 0.672576 0.616268\nvt 0.630123 0.637015\nvt 0.602729 0.613753\nvt 0.576185 0.624932\nvt 0.592751 0.64669\nvt 0.562002 0.648962\nvt 0.553875 0.630107\nvt 0.53651 0.6321\nvt 0.531619 0.63009\nvt 0.558733 0.610666\nvt 0.541679 0.617225\nvt 0.534506 0.616038\nvt 0.575501 0.552805\nvt 0.567997 0.575961\nvt 0.596846 0.581077\nvt 0.577601 0.599538\nvt 0.556218 0.591534\nvt 0.542219 0.601771\nvt 0.534861 0.602079\nvt 0.545323 0.575576\nvt 0.538733 0.587605\nvt 0.532499 0.589235\nvt 0.680649 0.782779\nvt 0.60022 0.772224\nvt 0.567799 0.828364\nvt 0.504704 0.801232\nvt 0.480005 0.802912\nvt 0.540241 0.754921\nvt 0.496567 0.73079\nvt 0.480071 0.731726\nvt 0.610595 0.721319\nvt 0.558719 0.712332\nvt 0.564536 0.676206\nvt 0.53203 0.66823\nvt 0.519457 0.697384\nvt 0.490987 0.678464\nvt 0.480033 0.678985\nvt 0.507131 0.656136\nvt 0.487992 0.642315\nvt 0.479978 0.642501\nvt 0.5374 0.646317\nvt 0.51784 0.639204\nvt 0.526462 0.629185\nvt 0.513811 0.620853\nvt 0.501474 0.629441\nvt 0.47999 0.620494\nvt 0.486855 0.620449\nvt 0.500143 0.613604\nvt 0.48668 0.608072\nvt 0.480005 0.608086\nvt 0.527469 0.615113\nvt 0.513741 0.608174\nvt 0.527671 0.602377\nvt 0.513531 0.597723\nvt 0.50009 0.603366\nvt 0.479997 0.599133\nvt 0.486687 0.599097\nvt 0.500314 0.59321\nvt 0.487089 0.586631\nvt 0.479926 0.586666\nvt 0.526227 0.590528\nvt 0.514186 0.585731\nvt 0.58114 0.0579846\nvt 0.533802 0.0871079\nvt 0.562658 0.135572\nvt 0.514009 0.158185\nvt 0.489284 0.112506\nvt 0.448874 0.133925\nvt 0.502888 0.0427932\nvt 0.462587 0.0719349\nvt 0.535704 0.208601\nvt 0.481023 0.220768\nvt 0.488761 0.270714\nvt 0.43718 0.272337\nvt 0.433674 0.227626\nvt 0.393797 0.22825\nvt 0.466909 0.175054\nvt 0.425301 0.187049\nvt 0.413729 0.151091\nvt 0.385304 0.163593\nvt 0.391089 0.194057\nvt 0.365184 0.19595\nvt 0.363922 0.17097\nvt 0.348112 0.173266\nvt 0.376895 0.137839\nvt 0.359651 0.149154\nvt 0.434895 0.0378283\nvt 0.409223 0.0727557\nvt 0.428912 0.0992488\nvt 0.400124 0.121315\nvt 0.38582 0.0986294\nvt 0.36726 0.117662\nvt 0.390493 0.0565052\nvt 0.371096 0.083818\nvt 0.433216 0.319833\nvt 0.382368 0.303328\nvt 0.361023 0.341048\nvt 0.321446 0.317164\nvt 0.306014 0.317884\nvt 0.344026 0.28484\nvt 0.31656 0.263196\nvt 0.306243 0.263567\nvt 0.392055 0.265312\nvt 0.356845 0.253388\nvt 0.363059 0.223494\nvt 0.34064 0.214001\nvt 0.33136 0.237735\nvt 0.313176 0.219851\nvt 0.306115 0.220043\nvt 0.324033 0.201122\nvt 0.311239 0.187338\nvt 0.305961 0.187334\nvt 0.34611 0.192632\nvt 0.331477 0.185002\nvt 0.797866 0.167593\nvt 0.838867 0.164746\nvt 0.846336 0.158264\nvt 0.854872 0.171605\nvt 0.871669 0.16657\nvt 0.806747 0.120487\nvt 0.872914 0.153504\nvt 0.849566 0.148774\nvt 0.940575 0.139644\nvt 0.900214 0.170038\nvt 0.897478 0.157523\nvt 0.963665 0.216313\nvt 0.906117 0.182609\nvt 0.884042 0.180364\nvt 0.852639 0.200505\nvt 0.866453 0.180781\nvt 0.860041 0.218519\nvt 0.890722 0.243427\nvt 0.92317 0.229927\nvt 0.95659 0.261899\nvt 0.974389 0.267262\nvt 0.917191 0.272837\nvt 0.936595 0.304092\nvt 0.950254 0.310436\nvt 0.930981 0.313445\nvt 0.94422 0.321229\nvt 0.864212 0.256451\nvt 0.884786 0.282849\nvt 0.881806 0.291974\nvt 0.924985 0.321223\nvt 0.890877 0.325566\nvt 0.899335 0.348034\nvt 0.867447 0.356052\nvt 0.861259 0.333074\nvt 0.836336 0.342385\nvt 0.831648 0.35073\nvt 0.878411 0.300636\nvt 0.852147 0.309837\nvt 0.826701 0.359288\nvt 0.817961 0.394242\nvt 0.825566 0.385761\nvt 0.822829 0.40232\nvt 0.831959 0.390165\nvt 0.872347 0.376808\nvt 0.840263 0.392372\nvt 0.833636 0.402768\nvt 0.833946 0.429014\nvt 0.819462 0.415363\nvt 0.828478 0.413486\nvt 0.791962 0.447247\nvt 0.810385 0.418877\nvt 0.811209 0.408773\nvt 0.791655 0.395182\nvt 0.809631 0.400606\nvt 0.793312 0.176216\nvt 0.800126 0.188254\nvt 0.821933 0.189477\nvt 0.815632 0.204918\nvt 0.79981 0.200727\nvt 0.797254 0.212884\nvt 0.794548 0.214607\nvt 0.788117 0.192816\nvt 0.790479 0.201508\nvt 0.837733 0.217051\nvt 0.824383 0.232842\nvt 0.843136 0.251726\nvt 0.826635 0.266491\nvt 0.813102 0.248606\nvt 0.804133 0.263957\nvt 0.808474 0.219884\nvt 0.801692 0.234637\nvt 0.840229 0.287369\nvt 0.82343 0.299962\nvt 0.8311 0.320298\nvt 0.815375 0.331516\nvt 0.811118 0.312744\nvt 0.800296 0.32433\nvt 0.802697 0.325401\nvt 0.813916 0.281072\nvt 0.801279 0.294464\nvt 0.804675 0.295145\nvt 0.817141 0.35224\nvt 0.803435 0.360927\nvt 0.799747 0.379113\nvt 0.788903 0.37855\nvt 0.785089 0.379382\nvt 0.793968 0.366665\nvt 0.787447 0.367322\nvt 0.785012 0.368035\nvt 0.787206 0.364536\nvt 0.785013 0.365177\nvt 0.804366 0.342858\nvt 0.796531 0.352358\nvt 0.312112 0.0646016\nvt 0.321253 0.0739681\nvt 0.336136 0.0672412\nvt 0.338922 0.0798703\nvt 0.325991 0.0841392\nvt 0.326704 0.0954292\nvt 0.310307 0.0805182\nvt 0.316073 0.0884535\nvt 0.354792 0.0772215\nvt 0.34729 0.096158\nvt 0.357463 0.103832\nvt 0.347496 0.118425\nvt 0.340843 0.110433\nvt 0.335365 0.121146\nvt 0.336827 0.0941659\nvt 0.3334 0.106914\nvt 0.353771 0.131359\nvt 0.343939 0.140446\nvt 0.347041 0.155577\nvt 0.336871 0.157544\nvt 0.335837 0.145415\nvt 0.328289 0.147085\nvt 0.340003 0.128877\nvt 0.333477 0.135622\nvt 0.335733 0.170823\nvt 0.325097 0.165529\nvt 0.319636 0.175482\nvt 0.310009 0.166811\nvt 0.306027 0.166804\nvt 0.316093 0.15977\nvt 0.308928 0.154779\nvt 0.306079 0.154821\nvt 0.327837 0.156117\nvt 0.31976 0.153077\nvt 0.308861 0.0930192\nvt 0.312342 0.0987265\nvt 0.318552 0.0965561\nvt 0.317966 0.103838\nvt 0.313525 0.104166\nvt 0.313005 0.109084\nvt 0.307953 0.101667\nvt 0.309933 0.105735\nvt 0.325569 0.107435\nvt 0.323321 0.116454\nvt 0.329598 0.117168\nvt 0.325138 0.124807\nvt 0.319947 0.123412\nvt 0.314587 0.129002\nvt 0.316336 0.128325\nvt 0.317745 0.11823\nvt 0.313759 0.124984\nvt 0.315334 0.123708\nvt 0.329938 0.128741\nvt 0.324208 0.133514\nvt 0.326962 0.139262\nvt 0.320763 0.140603\nvt 0.318921 0.136082\nvt 0.314953 0.137205\nvt 0.313884 0.136829\nvt 0.320399 0.129992\nvt 0.316087 0.13311\nvt 0.314453 0.133137\nvt 0.32118 0.146486\nvt 0.315136 0.144671\nvt 0.313046 0.149683\nvt 0.306268 0.14612\nvt 0.308106 0.146072\nvt 0.310597 0.142189\nvt 0.306517 0.13956\nvt 0.307595 0.139532\nvt 0.315624 0.140367\nvt 0.311817 0.138944\nvt 0.307341 0.108106\nvt 0.308387 0.111279\nvt 0.310474 0.109711\nvt 0.310022 0.113353\nvt 0.308569 0.114236\nvt 0.308311 0.116559\nvt 0.306984 0.113397\nvt 0.307441 0.11581\nvt 0.311475 0.113463\nvt 0.309703 0.117024\nvt 0.309968 0.11845\nvt 0.308201 0.120917\nvt 0.30827 0.119562\nvt 0.307334 0.120975\nvt 0.307454 0.120948\nvt 0.309071 0.116395\nvt 0.307799 0.118931\nvt 0.308068 0.118684\nvt 0.307971 0.122436\nvt 0.307126 0.123103\nvt 0.30699 0.123977\nvt 0.306569 0.123707\nvt 0.306648 0.123699\nvt 0.306763 0.123039\nvt 0.306571 0.12253\nvt 0.306612 0.122528\nvt 0.307298 0.122031\nvt 0.306912 0.122158\nvt 0.306746 0.117604\nvt 0.306934 0.119248\nvt 0.307508 0.117788\nvt 0.307572 0.119098\nvt 0.307036 0.120442\nvt 0.307201 0.121096\nvt 0.306634 0.120593\nvt 0.306736 0.121629\nvt 0.30676 0.12469\nvt 0.307473 0.124952\nvt 0.307771 0.123782\nvt 0.309374 0.122684\nvt 0.308798 0.124685\nvt 0.31102 0.123649\nvt 0.306938 0.125941\nvt 0.308041 0.126349\nvt 0.309797 0.120486\nvt 0.312778 0.117062\nvt 0.312512 0.114671\nvt 0.315412 0.10979\nvt 0.316758 0.112365\nvt 0.321935 0.106217\nvt 0.323878 0.106193\nvt 0.312158 0.120337\nvt 0.316183 0.116973\nvt 0.31699 0.117456\nvt 0.312883 0.136704\nvt 0.310708 0.134943\nvt 0.30917 0.136967\nvt 0.306576 0.13512\nvt 0.307331 0.135104\nvt 0.308861 0.133404\nvt 0.307353 0.132089\nvt 0.306648 0.1321\nvt 0.313013 0.133181\nvt 0.310699 0.131762\nvt 0.307114 0.127593\nvt 0.308539 0.128271\nvt 0.309787 0.126336\nvt 0.312383 0.126035\nvt 0.310488 0.128823\nvt 0.313074 0.129545\nvt 0.307272 0.129673\nvt 0.30883 0.13068\nvt 0.123699 0.895227\nvt 0.140086 0.912228\nvt 0.140827 0.915509\nvt 0.135889 0.910954\nvt 0.138365 0.91609\nvt 0.154222 0.911191\nvt 0.144405 0.914555\nvt 0.144043 0.918207\nvt 0.149189 0.941006\nvt 0.142239 0.921006\nvt 0.121761 0.82926\nvt 0.0922284 0.842246\nvt 0.110412 0.858839\nvt 0.085518 0.875598\nvt 0.0647699 0.858368\nvt 0.0380099 0.877397\nvt 0.0254706 0.877775\nvt 0.0739853 0.823388\nvt 0.0455111 0.839321\nvt 0.0338139 0.838641\nvt 0.107686 0.892374\nvt 0.0902652 0.913092\nvt 0.119479 0.929692\nvt 0.107837 0.953436\nvt 0.113334 0.963682\nvt 0.0726519 0.936422\nvt 0.0363931 0.963225\nvt 0.0508518 0.961248\nvt 0.0382514 0.974034\nvt 0.0532679 0.971964\nvt 0.063082 0.895697\nvt 0.0289597 0.919987\nvt 0.0417345 0.918557\nvt 0.154603 0.904388\nvt 0.147772 0.896569\nvt 0.136213 0.89472\nvt 0.138703 0.887534\nvt 0.147269 0.891292\nvt 0.151987 0.888948\nvt 0.154598 0.889115\nvt 0.15801 0.896721\nvt 0.158751 0.892741\nvt 0.156251 0.893169\nvt 0.157143 0.889053\nvt 0.164463 0.890141\nvt 0.168982 0.888456\nvt 0.176059 0.889223\nvt 0.171982 0.890832\nvt 0.178765 0.890932\nvt 0.180913 0.890542\nvt 0.161311 0.892345\nvt 0.168978 0.89305\nvt 0.283383 0.895026\nvt 0.262268 0.875239\nvt 0.240537 0.887434\nvt 0.220281 0.868713\nvt 0.241725 0.857066\nvt 0.22167 0.840707\nvt 0.221763 0.833843\nvt 0.282321 0.862071\nvt 0.26161 0.84402\nvt 0.26131 0.836289\nvt 0.268689 0.961007\nvt 0.25346 0.941274\nvt 0.230215 0.955744\nvt 0.216194 0.936433\nvt 0.237302 0.921049\nvt 0.21825 0.900655\nvt 0.277534 0.927929\nvt 0.260111 0.907566\nvt 0.196618 0.952164\nvt 0.187251 0.936235\nvt 0.174325 0.951168\nvt 0.164202 0.935165\nvt 0.176107 0.923367\nvt 0.159521 0.912655\nvt 0.164931 0.913298\nvt 0.202218 0.91924\nvt 0.188053 0.908764\nvt 0.196262 0.878048\nvt 0.17716 0.862083\nvt 0.152923 0.871145\nvt 0.132855 0.859206\nvt 0.121683 0.859031\nvt 0.158766 0.847345\nvt 0.143503 0.831854\nvt 0.133095 0.830647\nvt 0.147001 0.825073\nvt 0.137733 0.823908\nvt 0.200542 0.852037\nvt 0.184072 0.829736\nvt 0.182613 0.836384\nvt 0.19581 0.893769\nvt 0.182838 0.89623\nvt 0.175386 0.904373\nvt 0.164934 0.900704\nvt 0.172593 0.896381\nvt 0.165617 0.895398\nvt 0.184893 0.89187\nvt 0.176552 0.893027\nvt 0.135305 0.881226\nvt 0.155382 0.883094\nvt 0.172139 0.880194\nvt 0.182425 0.88575\nvt 0.168468 0.885821\nvt 0.178084 0.887768\nvt 0.175441 0.88754\nvt 0.149892 0.886273\nvt 0.160621 0.887219\nvt 0.196303 0.888694\nvt 0.187443 0.888627\nvt 0.187758 0.888341\nvt 0.188451 0.888818\nvt 0.189732 0.888483\nvt 0.183059 0.890301\nvt 0.186173 0.888719\nvt 0.186894 0.889029\nvt 0.179779 0.888059\nvt 0.185911 0.888357\nvt 0.796586 0.336952\nvt 0.79061 0.343802\nvt 0.791762 0.344982\nvt 0.790229 0.346845\nvt 0.790797 0.348692\nvt 0.78698 0.361593\nvt 0.789588 0.351512\nvt 0.789283 0.348032\nvt 0.78661 0.333561\nvt 0.789354 0.344006\nvt 0.798023 0.323348\nvt 0.793843 0.307758\nvt 0.790081 0.320824\nvt 0.786615 0.306905\nvt 0.785017 0.306887\nvt 0.789661 0.292685\nvt 0.786495 0.277788\nvt 0.785261 0.277784\nvt 0.78642 0.270422\nvt 0.785287 0.27042\nvt 0.79829 0.293902\nvt 0.792774 0.278187\nvt 0.792414 0.270736\nvt 0.793823 0.224662\nvt 0.790519 0.236475\nvt 0.796022 0.248993\nvt 0.792006 0.263341\nvt 0.788166 0.24932\nvt 0.785261 0.263158\nvt 0.786302 0.263158\nvt 0.787293 0.226191\nvt 0.785175 0.236874\nvt 0.785896 0.23684\nvt 0.792265 0.215909\nvt 0.787277 0.212975\nvt 0.787169 0.211639\nvt 0.788005 0.212259\nvt 0.787551 0.210676\nvt 0.785776 0.218416\nvt 0.78662 0.21308\nvt 0.786693 0.211281\nvt 0.786094 0.204893\nvt 0.786937 0.209631\nvt 0.454468 0.376136\nvt 0.415346 0.430864\nvt 0.461914 0.462064\nvt 0.435809 0.50013\nvt 0.392345 0.478631\nvt 0.383445 0.519913\nvt 0.353167 0.40696\nvt 0.335362 0.462237\nvt 0.467744 0.523579\nvt 0.44961 0.548044\nvt 0.47116 0.563656\nvt 0.457034 0.577013\nvt 0.438233 0.566417\nvt 0.431881 0.577974\nvt 0.421044 0.53283\nvt 0.414578 0.557859\nvt 0.265927 0.454509\nvt 0.277894 0.515508\nvt 0.335325 0.512685\nvt 0.346106 0.552537\nvt 0.299077 0.561096\nvt 0.327702 0.593406\nvt 0.212351 0.533345\nvt 0.244156 0.581769\nvt 0.186173 0.616984\nvt 0.249013 0.652836\nvt 0.287419 0.61625\nvt 0.329876 0.636999\nvt 0.304514 0.672245\nvt 0.354217 0.67852\nvt 0.219265 0.705937\nvt 0.285812 0.721503\nvt 0.357272 0.613725\nvt 0.383815 0.624933\nvt 0.401266 0.610695\nvt 0.418315 0.61729\nvt 0.425485 0.616099\nvt 0.406124 0.630247\nvt 0.423489 0.632603\nvt 0.42838 0.630621\nvt 0.36725 0.646684\nvt 0.398001 0.648999\nvt 0.384502 0.552455\nvt 0.392004 0.575838\nvt 0.414674 0.575232\nvt 0.421262 0.587298\nvt 0.427497 0.588906\nvt 0.403782 0.591513\nvt 0.417778 0.601844\nvt 0.425137 0.60216\nvt 0.363156 0.581038\nvt 0.382399 0.599526\nvt 0.279352 0.782779\nvt 0.359782 0.772224\nvt 0.349402 0.72132\nvt 0.401293 0.712333\nvt 0.419792 0.754921\nvt 0.463562 0.73079\nvt 0.392202 0.828364\nvt 0.455306 0.801232\nvt 0.39547 0.676201\nvt 0.427978 0.668257\nvt 0.4226 0.646578\nvt 0.442157 0.639467\nvt 0.452865 0.656164\nvt 0.471968 0.642315\nvt 0.440604 0.697386\nvt 0.469073 0.678464\nvt 0.433537 0.629687\nvt 0.446186 0.620994\nvt 0.432524 0.615179\nvt 0.446258 0.608204\nvt 0.459857 0.613613\nvt 0.473329 0.608072\nvt 0.458506 0.629482\nvt 0.473126 0.620449\nvt 0.432327 0.60245\nvt 0.446467 0.597707\nvt 0.433768 0.590221\nvt 0.4458 0.585411\nvt 0.459652 0.593177\nvt 0.472776 0.586631\nvt 0.459914 0.603366\nvt 0.473306 0.599097\nvt 0.0308597 0.0579872\nvt 0.078196 0.0871104\nvt 0.10911 0.042796\nvt 0.149413 0.0719381\nvt 0.122715 0.112512\nvt 0.163127 0.133942\nvt 0.0493415 0.135574\nvt 0.0979852 0.158189\nvt 0.0762946 0.208601\nvt 0.130974 0.22077\nvt 0.145086 0.175064\nvt 0.186702 0.187066\nvt 0.178328 0.227648\nvt 0.218221 0.22833\nvt 0.123237 0.270713\nvt 0.174812 0.272342\nvt 0.198272 0.151107\nvt 0.226697 0.163609\nvt 0.235118 0.137858\nvt 0.252377 0.149195\nvt 0.248087 0.171051\nvt 0.263915 0.173556\nvt 0.220921 0.194101\nvt 0.246822 0.196008\nvt 0.177102 0.0378311\nvt 0.202776 0.0727597\nvt 0.221507 0.0565079\nvt 0.240929 0.0838253\nvt 0.226191 0.098641\nvt 0.244775 0.117694\nvt 0.183089 0.0992578\nvt 0.21188 0.121328\nvt 0.178781 0.319831\nvt 0.229634 0.303332\nvt 0.219945 0.265349\nvt 0.255195 0.25343\nvt 0.268083 0.284844\nvt 0.295882 0.263196\nvt 0.250973 0.341048\nvt 0.290583 0.317164\nvt 0.248958 0.223575\nvt 0.271386 0.214037\nvt 0.265895 0.192775\nvt 0.280541 0.185143\nvt 0.287973 0.201138\nvt 0.300692 0.187338\nvt 0.280849 0.237745\nvt 0.299033 0.219852\nvt 0.772135 0.167593\nvt 0.731134 0.164747\nvt 0.715129 0.171605\nvt 0.723665 0.158265\nvt 0.698332 0.166572\nvt 0.717362 0.200502\nvt 0.685958 0.180364\nvt 0.703548 0.180781\nvt 0.606335 0.216313\nvt 0.663883 0.18261\nvt 0.669786 0.170039\nvt 0.629425 0.139643\nvt 0.697087 0.153504\nvt 0.672523 0.157523\nvt 0.763255 0.120487\nvt 0.720434 0.148774\nvt 0.70996 0.218517\nvt 0.679278 0.243429\nvt 0.70579 0.256451\nvt 0.68521 0.282858\nvt 0.688187 0.291987\nvt 0.652809 0.272839\nvt 0.633405 0.304093\nvt 0.639019 0.313446\nvt 0.619746 0.310436\nvt 0.62578 0.32123\nvt 0.646828 0.22994\nvt 0.61341 0.261899\nvt 0.595611 0.267263\nvt 0.645015 0.321224\nvt 0.679123 0.325563\nvt 0.691585 0.300645\nvt 0.717858 0.309804\nvt 0.708746 0.332964\nvt 0.733681 0.341944\nvt 0.73837 0.350245\nvt 0.670665 0.348035\nvt 0.702552 0.356022\nvt 0.743316 0.358846\nvt 0.752082 0.394188\nvt 0.747188 0.402299\nvt 0.744455 0.385652\nvt 0.738051 0.39011\nvt 0.778676 0.395182\nvt 0.758833 0.408763\nvt 0.760453 0.400584\nvt 0.77804 0.447248\nvt 0.759632 0.418874\nvt 0.750547 0.415357\nvt 0.736056 0.429015\nvt 0.736369 0.402758\nvt 0.741526 0.413482\nvt 0.697655 0.376809\nvt 0.729741 0.39235\nvt 0.776688 0.176216\nvt 0.769882 0.188257\nvt 0.78194 0.192816\nvt 0.779577 0.201525\nvt 0.770208 0.200788\nvt 0.775503 0.214876\nvt 0.772792 0.213127\nvt 0.748072 0.189474\nvt 0.754369 0.204937\nvt 0.732269 0.217049\nvt 0.74562 0.232855\nvt 0.761546 0.220002\nvt 0.768337 0.234754\nvt 0.756909 0.248628\nvt 0.765896 0.263993\nvt 0.726866 0.251726\nvt 0.743362 0.266498\nvt 0.729773 0.28737\nvt 0.746574 0.299931\nvt 0.756092 0.281093\nvt 0.76874 0.294421\nvt 0.765343 0.2951\nvt 0.758889 0.312516\nvt 0.769722 0.323426\nvt 0.767319 0.324579\nvt 0.738912 0.320089\nvt 0.754633 0.331246\nvt 0.752876 0.351799\nvt 0.766589 0.36077\nvt 0.765642 0.342436\nvt 0.773479 0.351957\nvt 0.776058 0.366615\nvt 0.782574 0.367322\nvt 0.782817 0.364537\nvt 0.770412 0.379065\nvt 0.781261 0.37855\nvt 0.299924 0.0646027\nvt 0.290866 0.0739764\nvt 0.301866 0.0805225\nvt 0.296211 0.0884698\nvt 0.286228 0.0841631\nvt 0.285649 0.0954784\nvt 0.275901 0.0672462\nvt 0.273207 0.0798882\nvt 0.257258 0.0772296\nvt 0.264848 0.0961761\nvt 0.275404 0.0941999\nvt 0.278949 0.106949\nvt 0.271387 0.110455\nvt 0.276979 0.121171\nvt 0.254611 0.103853\nvt 0.264645 0.118449\nvt 0.258303 0.13139\nvt 0.268195 0.14047\nvt 0.272224 0.12889\nvt 0.278854 0.135629\nvt 0.276376 0.145436\nvt 0.284024 0.147118\nvt 0.265024 0.155721\nvt 0.275255 0.157678\nvt 0.276329 0.171109\nvt 0.287014 0.165598\nvt 0.284364 0.156149\nvt 0.292533 0.153087\nvt 0.296064 0.15977\nvt 0.303242 0.154776\nvt 0.29238 0.175505\nvt 0.302048 0.166809\nvt 0.3035 0.093025\nvt 0.300227 0.0987438\nvt 0.304725 0.101672\nvt 0.302882 0.105749\nvt 0.29922 0.104197\nvt 0.299887 0.109138\nvt 0.293909 0.0965902\nvt 0.294681 0.103881\nvt 0.290656 0.10627\nvt 0.296056 0.112401\nvt 0.297419 0.109836\nvt 0.300462 0.114707\nvt 0.300195 0.117085\nvt 0.303272 0.120496\nvt 0.296685 0.117001\nvt 0.300851 0.120357\nvt 0.282543 0.128756\nvt 0.288422 0.133514\nvt 0.2924 0.129997\nvt 0.296844 0.133111\nvt 0.298533 0.133138\nvt 0.293857 0.13609\nvt 0.297936 0.137258\nvt 0.299049 0.136887\nvt 0.285498 0.139275\nvt 0.291847 0.140612\nvt 0.291265 0.146516\nvt 0.297458 0.14467\nvt 0.297135 0.140387\nvt 0.301089 0.138966\nvt 0.302186 0.142183\nvt 0.305428 0.139528\nvt 0.299331 0.149677\nvt 0.304436 0.146068\nvt 0.305519 0.108109\nvt 0.304606 0.111288\nvt 0.306064 0.113399\nvt 0.305638 0.115811\nvt 0.304488 0.114238\nvt 0.304765 0.116539\nvt 0.30248 0.10974\nvt 0.30301 0.113379\nvt 0.301525 0.113513\nvt 0.303364 0.117043\nvt 0.304002 0.116393\nvt 0.305301 0.118923\nvt 0.305029 0.118678\nvt 0.304832 0.119568\nvt 0.305783 0.120974\nvt 0.305662 0.120947\nvt 0.303095 0.118465\nvt 0.304905 0.120922\nvt 0.305142 0.12244\nvt 0.306003 0.123105\nvt 0.305824 0.122032\nvt 0.306214 0.122157\nvt 0.306371 0.123039\nvt 0.306529 0.122528\nvt 0.306143 0.123977\nvt 0.306489 0.123699\nvt 0.30635 0.117605\nvt 0.306173 0.119248\nvt 0.306488 0.120594\nvt 0.306392 0.121629\nvt 0.306078 0.120441\nvt 0.305917 0.121095\nvt 0.305583 0.117777\nvt 0.305529 0.119089\nvt 0.306376 0.124691\nvt 0.30566 0.124956\nvt 0.306207 0.125943\nvt 0.305095 0.126355\nvt 0.304315 0.124694\nvt 0.302041 0.123666\nvt 0.30535 0.123783\nvt 0.303715 0.122694\nvt 0.286944 0.107486\nvt 0.289333 0.116484\nvt 0.295087 0.118256\nvt 0.299243 0.124997\nvt 0.297613 0.123724\nvt 0.292858 0.123429\nvt 0.298417 0.129017\nvt 0.29661 0.12834\nvt 0.28289 0.117194\nvt 0.287505 0.124823\nvt 0.30008 0.136759\nvt 0.302351 0.134954\nvt 0.300016 0.133183\nvt 0.302408 0.131764\nvt 0.304288 0.133401\nvt 0.305928 0.132089\nvt 0.303895 0.136965\nvt 0.305816 0.135102\nvt 0.306033 0.127595\nvt 0.304599 0.128275\nvt 0.30594 0.129674\nvt 0.304368 0.130681\nvt 0.302621 0.12883\nvt 0.299973 0.129558\nvt 0.303319 0.126346\nvt 0.300662 0.126046\nvt 0.879407 0.890203\nvt 0.860123 0.914144\nvt 0.857142 0.913505\nvt 0.863541 0.908363\nvt 0.858289 0.909841\nvt 0.845052 0.941862\nvt 0.855005 0.919642\nvt 0.852994 0.916523\nvt 0.840885 0.908794\nvt 0.852805 0.912482\nvt 0.883486 0.812968\nvt 0.916088 0.830336\nvt 0.936984 0.810563\nvt 0.979872 0.831213\nvt 0.96718 0.830954\nvt 0.945459 0.850849\nvt 0.972794 0.874365\nvt 0.985477 0.875495\nvt 0.895636 0.848227\nvt 0.922933 0.869236\nvt 0.898072 0.887477\nvt 0.917357 0.913192\nvt 0.947217 0.89436\nvt 0.987361 0.926162\nvt 0.972845 0.923453\nvt 0.939277 0.942758\nvt 0.988004 0.978956\nvt 0.988165 0.992155\nvt 0.969635 0.975157\nvt 0.968692 0.988139\nvt 0.882307 0.93075\nvt 0.897146 0.960192\nvt 0.890799 0.972073\nvt 0.840868 0.901338\nvt 0.849745 0.892323\nvt 0.837639 0.892714\nvt 0.837295 0.888027\nvt 0.84002 0.888435\nvt 0.850652 0.8859\nvt 0.845237 0.882925\nvt 0.842206 0.883177\nvt 0.864141 0.889855\nvt 0.861518 0.881095\nvt 0.839354 0.883142\nvt 0.831432 0.88504\nvt 0.834584 0.887725\nvt 0.826357 0.889187\nvt 0.823599 0.886624\nvt 0.816009 0.886977\nvt 0.813537 0.8864\nvt 0.826462 0.882427\nvt 0.819093 0.884102\nvt 0.702969 0.881726\nvt 0.724888 0.861687\nvt 0.705511 0.847343\nvt 0.728692 0.821151\nvt 0.72779 0.82918\nvt 0.747203 0.843316\nvt 0.770108 0.819946\nvt 0.769689 0.826899\nvt 0.7458 0.875152\nvt 0.768399 0.855994\nvt 0.716105 0.951288\nvt 0.731835 0.931227\nvt 0.707867 0.916344\nvt 0.725531 0.895606\nvt 0.748152 0.910728\nvt 0.767733 0.890264\nvt 0.755672 0.947388\nvt 0.769956 0.928162\nvt 0.79075 0.946193\nvt 0.801004 0.931585\nvt 0.784576 0.911654\nvt 0.800561 0.902785\nvt 0.813945 0.919917\nvt 0.834301 0.910232\nvt 0.827701 0.910583\nvt 0.815174 0.949632\nvt 0.827443 0.934089\nvt 0.793489 0.866745\nvt 0.81766 0.849623\nvt 0.791888 0.838598\nvt 0.812436 0.814174\nvt 0.813596 0.821421\nvt 0.840343 0.833322\nvt 0.858755 0.81514\nvt 0.855069 0.80688\nvt 0.870659 0.813876\nvt 0.865727 0.805057\nvt 0.845748 0.860536\nvt 0.869978 0.847563\nvt 0.882858 0.847848\nvt 0.792562 0.885924\nvt 0.808408 0.891237\nvt 0.807587 0.887137\nvt 0.817665 0.889265\nvt 0.821012 0.892567\nvt 0.829428 0.891541\nvt 0.815948 0.900225\nvt 0.828942 0.897187\nvt 0.866322 0.87312\nvt 0.841965 0.874716\nvt 0.848117 0.879264\nvt 0.835616 0.880443\nvt 0.826436 0.87791\nvt 0.818767 0.880445\nvt 0.815857 0.880831\nvt 0.821915 0.870244\nvt 0.809614 0.876937\nvt 0.792722 0.880034\nvt 0.805136 0.882481\nvt 0.803854 0.88274\nvt 0.804567 0.881788\nvt 0.801977 0.881783\nvt 0.814148 0.88148\nvt 0.806913 0.882895\nvt 0.807059 0.882101\nvt 0.810902 0.885924\nvt 0.806074 0.883478\nvt 0.77343 0.33613\nvt 0.779395 0.343682\nvt 0.779777 0.346753\nvt 0.778245 0.344765\nvt 0.779209 0.348572\nvt 0.783394 0.333561\nvt 0.78065 0.343953\nvt 0.780723 0.347986\nvt 0.783041 0.361593\nvt 0.78042 0.351459\nvt 0.771993 0.322526\nvt 0.77617 0.307553\nvt 0.771728 0.293857\nvt 0.777276 0.278207\nvt 0.777637 0.27076\nvt 0.780463 0.292677\nvt 0.78398 0.277788\nvt 0.784102 0.270422\nvt 0.779923 0.320761\nvt 0.783422 0.306905\nvt 0.776224 0.224906\nvt 0.779533 0.236539\nvt 0.782997 0.226212\nvt 0.784431 0.23684\nvt 0.781989 0.249325\nvt 0.784173 0.263158\nvt 0.774 0.249026\nvt 0.778045 0.263362\nvt 0.777781 0.216152\nvt 0.782825 0.21301\nvt 0.782054 0.212323\nvt 0.782916 0.211666\nvt 0.782506 0.210711\nvt 0.784 0.204893\nvt 0.783131 0.209646\nvt 0.783414 0.211294\nvt 0.784825 0.218416\nvt 0.78355 0.213095\nvt 0.534976 0.360191\nvt 0.48 0.398454\nvt 0.644928 0.396858\nvt 0.480038 0.478891\nvt 0.480038 0.535072\nvt 0.479946 0.570629\nvt 0.728382 0.45945\nvt 0.785337 0.547965\nvt 0.793806 0.641348\nvt 0.753787 0.739598\nvt 0.670334 0.812464\nvt 0.543445 0.859944\nvt 0.596139 0.0819358\nvt 0.565659 0.0350819\nvt 0.577167 0.161957\nvt 0.485728 0.021395\nvt 0.541987 0.234062\nvt 0.4906 0.298253\nvt 0.423986 0.0270457\nvt 0.380434 0.0520343\nvt 0.425179 0.340535\nvt 0.345725 0.360907\nvt 0.785 0.162165\nvt 0.805472 0.173932\nvt 0.828573 0.111596\nvt 0.784997 0.13086\nvt 0.967589 0.156152\nvt 0.915716 0.123805\nvt 0.942685 0.223241\nvt 0.98419 0.208639\nvt 0.836401 0.193676\nvt 0.870269 0.210488\nvt 0.850526 0.226345\nvt 0.852787 0.263072\nvt 0.930303 0.333466\nvt 0.902468 0.357938\nvt 0.817041 0.363588\nvt 0.874959 0.386204\nvt 0.821887 0.441478\nvt 0.847775 0.418262\nvt 0.785005 0.436606\nvt 0.797297 0.455851\nvt 0.79641 0.387443\nvt 0.785137 0.401841\nvt 0.785007 0.180155\nvt 0.785045 0.196215\nvt 0.319162 0.0608879\nvt 0.306037 0.0686892\nvt 0.345493 0.063315\nvt 0.306096 0.0839047\nvt 0.306221 0.095365\nvt 0.306357 0.10334\nvt 0.306454 0.109476\nvt 0.306533 0.11453\nvt 0.312057 0.113932\nvt 0.309938 0.119403\nvt 0.307882 0.123116\nvt 0.306896 0.124346\nvt 0.306552 0.118446\nvt 0.306565 0.121164\nvt 0.30657 0.124991\nvt 0.306574 0.126339\nvt 0.306576 0.1281\nvt 0.306632 0.130265\nvt 0.130241 0.893971\nvt 0.117015 0.901716\nvt 0.149222 0.905584\nvt 0.135046 0.93676\nvt 0.113318 0.820253\nvt 0.0644869 0.812945\nvt 0.293839 0.888566\nvt 0.291927 0.854937\nvt 0.256828 0.968072\nvt 0.280728 0.954242\nvt 0.218407 0.963157\nvt 0.290106 0.921668\nvt 0.188993 0.959892\nvt 0.168586 0.958278\nvt 0.183628 0.879378\nvt 0.142382 0.876212\nvt 0.194424 0.890782\nvt 0.184424 0.890832\nvt 0.795474 0.329222\nvt 0.785008 0.358654\nvt 0.788318 0.327173\nvt 0.785001 0.339684\nvt 0.791062 0.220791\nvt 0.786418 0.222041\nvt 0.785253 0.215435\nvt 0.785051 0.206812\nvt 0.425024 0.360191\nvt 0.315072 0.396858\nvt 0.231618 0.45945\nvt 0.174663 0.547965\nvt 0.166194 0.641348\nvt 0.206214 0.739598\nvt 0.289667 0.812464\nvt 0.416556 0.859944\nvt 0.0463397 0.0350849\nvt 0.0158606 0.081938\nvt 0.12627 0.021398\nvt 0.0348327 0.161957\nvt 0.0700118 0.234062\nvt 0.121398 0.298251\nvt 0.18801 0.0270485\nvt 0.231561 0.0520363\nvt 0.186818 0.340533\nvt 0.266271 0.360907\nvt 0.764528 0.173929\nvt 0.699741 0.210468\nvt 0.733596 0.193682\nvt 0.58581 0.208638\nvt 0.627309 0.223253\nvt 0.654284 0.123804\nvt 0.602411 0.156152\nvt 0.741429 0.111596\nvt 0.719478 0.226337\nvt 0.717216 0.263071\nvt 0.639697 0.333467\nvt 0.667533 0.357939\nvt 0.752983 0.363225\nvt 0.773864 0.387406\nvt 0.772705 0.455851\nvt 0.722227 0.418263\nvt 0.748114 0.441478\nvt 0.695042 0.386205\nvt 0.292832 0.0608884\nvt 0.266502 0.0633163\nvt 0.290479 0.10962\nvt 0.297511 0.119546\nvt 0.305233 0.123117\nvt 0.306239 0.124347\nvt 0.886811 0.898001\nvt 0.871554 0.888814\nvt 0.862819 0.937916\nvt 0.847398 0.90262\nvt 0.893212 0.803293\nvt 0.948183 0.799765\nvt 0.692927 0.874665\nvt 0.696062 0.839591\nvt 0.704041 0.943756\nvt 0.728182 0.959167\nvt 0.695586 0.909387\nvt 0.768008 0.955619\nvt 0.799036 0.95539\nvt 0.821265 0.95848\nvt 0.808177 0.868744\nvt 0.858103 0.866852\nvt 0.795027 0.88336\nvt 0.808793 0.88628\nvt 0.774539 0.328548\nvt 0.781687 0.327144\nvt 0.778996 0.220988\nvt 0.78408 0.222053\nvt 0.48 0.341857\nvt 0.507488 0.351024\nvt 0.48 0.373071\nvt 0.61744 0.387691\nvt 0.480025 0.461234\nvt 0.480051 0.523127\nvt 0.47997 0.563503\nvt 0.714143 0.437321\nvt 0.771098 0.525836\nvt 0.80381 0.616786\nvt 0.763792 0.715035\nvt 0.702056 0.800593\nvt 0.575167 0.848074\nvt 0.600882 0.0619306\nvt 0.605625 0.0419254\nvt 0.585642 0.0385037\nvt 0.58191 0.141951\nvt 0.505711 0.0248167\nvt 0.554834 0.218015\nvt 0.503447 0.282205\nvt 0.434874 0.0207986\nvt 0.391322 0.0457871\nvt 0.445042 0.335441\nvt 0.365588 0.355814\nvt 0.795396 0.171892\nvt 0.785 0.166882\nvt 0.785 0.171267\nvt 0.785001 0.105492\nvt 0.806787 0.108544\nvt 0.785001 0.119282\nvt 0.963438 0.143031\nvt 0.959288 0.129909\nvt 0.937502 0.126857\nvt 0.988341 0.22176\nvt 0.856848 0.209389\nvt 0.848178 0.217491\nvt 0.853159 0.253793\nvt 0.937261 0.327347\nvt 0.909427 0.35182\nvt 0.821617 0.355531\nvt 0.881755 0.37819\nvt 0.840979 0.426277\nvt 0.834183 0.434291\nvt 0.828035 0.437884\nvt 0.785001 0.463038\nvt 0.785001 0.448609\nvt 0.791149 0.459445\nvt 0.785182 0.396131\nvt 0.785 0.17567\nvt 0.785033 0.192558\nvt 0.31258 0.0602812\nvt 0.305997 0.0596744\nvt 0.306018 0.0643831\nvt 0.33891 0.0627082\nvt 0.306084 0.0803966\nvt 0.306176 0.0928966\nvt 0.306337 0.101568\nvt 0.306425 0.108044\nvt 0.306524 0.113364\nvt 0.306548 0.117592\nvt 0.306562 0.120587\nvt 0.306568 0.12471\nvt 0.306573 0.125967\nvt 0.306574 0.127622\nvt 0.30661 0.129691\nvt 0.11689 0.892871\nvt 0.1543 0.907493\nvt 0.125525 0.822081\nvt 0.0766946 0.814772\nvt 0.294317 0.896973\nvt 0.292405 0.863344\nvt 0.276039 0.97053\nvt 0.266434 0.969301\nvt 0.278383 0.962386\nvt 0.228013 0.964386\nvt 0.287762 0.929811\nvt 0.194095 0.960296\nvt 0.173688 0.958681\nvt 0.198107 0.890529\nvt 0.79746 0.330285\nvt 0.785012 0.362151\nvt 0.785002 0.333618\nvt 0.793118 0.219969\nvt 0.785331 0.218424\nvt 0.785052 0.204788\nvt 0.452512 0.351024\nvt 0.34256 0.387691\nvt 0.245857 0.437321\nvt 0.188902 0.525836\nvt 0.15619 0.616786\nvt 0.196209 0.715035\nvt 0.257945 0.800593\nvt 0.384834 0.848074\nvt 0.0111176 0.0619331\nvt 0.00637457 0.0419283\nvt 0.0263571 0.0385066\nvt 0.106287 0.0248197\nvt 0.0300897 0.141952\nvt 0.0571652 0.218014\nvt 0.108551 0.282204\nvt 0.177123 0.0208015\nvt 0.220674 0.0457893\nvt 0.166954 0.33544\nvt 0.246408 0.355814\nvt 0.774605 0.171892\nvt 0.713154 0.209386\nvt 0.581659 0.22176\nvt 0.632498 0.126856\nvt 0.610712 0.129908\nvt 0.606562 0.14303\nvt 0.763215 0.108544\nvt 0.721824 0.217488\nvt 0.716844 0.253793\nvt 0.632739 0.327348\nvt 0.660574 0.351821\nvt 0.748401 0.355045\nvt 0.778853 0.459445\nvt 0.729023 0.426277\nvt 0.735819 0.434292\nvt 0.741967 0.437885\nvt 0.688246 0.37819\nvt 0.299415 0.0602814\nvt 0.273085 0.0627093\nvt 0.288662 0.106249\nvt 0.295858 0.117484\nvt 0.887533 0.887595\nvt 0.84102 0.904758\nvt 0.87947 0.804175\nvt 0.93444 0.800647\nvt 0.692143 0.883434\nvt 0.695278 0.84836\nvt 0.708269 0.96094\nvt 0.706155 0.952348\nvt 0.718225 0.960053\nvt 0.6977 0.917979\nvt 0.758052 0.956506\nvt 0.793478 0.954618\nvt 0.815708 0.957707\nvt 0.7902 0.881929\nvt 0.772557 0.32938\nvt 0.776933 0.220237\nf 1785/1 448/2 1787/3\nf 1786/4 1787/3 448/2\nf 1790/5 449/6 1794/7\nf 1792/8 1794/7 449/6\nf 1800/9 453/10 1802/11\nf 1801/12 1802/11 453/10\nf 1805/13 454/14 1808/15\nf 1807/16 1808/15 454/14\nf 1813/17 456/18 1815/19\nf 1814/20 1815/19 456/18\nf 1818/21 457/22 1822/23\nf 1820/24 1822/23 457/22\nf 1811/25 458/26 1828/27\nf 1827/28 1828/27 458/26\nf 1830/29 460/30 1834/31\nf 1832/32 1834/31 460/30\nf 1839/33 463/34 1841/35\nf 1840/36 1841/35 463/34\nf 1844/37 464/38 1848/39\nf 1846/40 1848/39 464/38\nf 1852/41 467/42 1854/43\nf 1853/44 1854/43 467/42\nf 1857/45 468/46 1860/47\nf 1859/48 1860/47 468/46\nf 1865/49 470/50 1867/51\nf 1866/52 1867/51 470/50\nf 1870/53 471/54 1874/55\nf 1872/56 1874/55 471/54\nf 1863/57 472/58 1880/59\nf 1879/60 1880/59 472/58\nf 1882/61 474/62 1886/63\nf 1884/64 1886/63 474/62\nf 1894/65 1892/66 1893/67\nf 478/68 1893/67 1892/66\nf 1900/69 1897/70 1899/71\nf 479/72 1899/71 1897/70\nf 1908/73 1906/74 1907/75\nf 482/76 1907/75 1906/74\nf 1914/77 1911/78 1913/79\nf 483/80 1913/79 1911/78\nf 1919/81 485/82 1921/83\nf 1920/84 1921/83 485/82\nf 1924/85 486/86 1928/87\nf 1926/88 1928/87 486/86\nf 1933/89 1917/90 1932/91\nf 487/92 1932/91 1917/90\nf 1935/93 489/94 1938/95\nf 1937/96 1938/95 489/94\nf 1944/97 492/98 1946/99\nf 1945/100 1946/99 492/98\nf 1949/101 493/102 1952/103\nf 1951/104 1952/103 493/102\nf 1960/105 1958/106 1959/107\nf 496/108 1959/107 1958/106\nf 1963/109 497/110 1966/111\nf 1965/112 1966/111 497/110\nf 1973/113 1971/114 1972/115\nf 499/116 1972/115 1971/114\nf 1976/117 500/118 1980/119\nf 1978/120 1980/119 500/118\nf 1969/121 501/122 1985/123\nf 1984/124 1985/123 501/122\nf 1987/125 503/126 1990/127\nf 1989/128 1990/127 503/126\nf 1995/129 505/130 1997/131\nf 1996/132 1997/131 505/130\nf 2000/133 506/134 2004/135\nf 2002/136 2004/135 506/134\nf 2008/137 509/138 2010/139\nf 2009/140 2010/139 509/138\nf 2013/141 510/142 2016/143\nf 2015/144 2016/143 510/142\nf 2023/145 2021/146 2022/147\nf 512/148 2022/147 2021/146\nf 2028/149 2030/150 513/151\nf 2026/152 513/151 2030/150\nf 2019/153 514/154 2036/155\nf 2035/156 2036/155 514/154\nf 2038/157 516/158 2042/159\nf 2040/160 2042/159 516/158\nf 2046/161 519/162 2048/163\nf 2047/164 2048/163 519/162\nf 2051/165 520/166 2054/167\nf 2053/168 2054/167 520/166\nf 1993/169 507/170 2059/171\nf 2058/172 2059/171 507/170\nf 2061/173 522/174 2064/175\nf 2063/176 2064/175 522/174\nf 2033/177 517/178 2070/179\nf 2069/180 2070/179 517/178\nf 2072/181 524/182 2076/183\nf 2074/184 2076/183 524/182\nf 2067/185 525/186 2081/187\nf 2080/188 2081/187 525/186\nf 2083/189 527/190 2086/191\nf 2085/192 2086/191 527/190\nf 2094/193 2092/194 2093/195\nf 530/196 2093/195 2092/194\nf 2100/197 2097/198 2099/199\nf 531/200 2099/199 2097/198\nf 2108/201 2106/202 2107/203\nf 534/204 2107/203 2106/202\nf 2114/205 2111/206 2113/207\nf 535/208 2113/207 2111/206\nf 2121/209 2119/210 2120/211\nf 537/212 2120/211 2119/210\nf 2124/213 538/214 2128/215\nf 2126/216 2128/215 538/214\nf 2133/217 2117/218 2132/219\nf 539/220 2132/219 2117/218\nf 2138/221 2135/222 2137/223\nf 541/224 2137/223 2135/222\nf 2144/225 2142/226 2143/227\nf 543/228 2143/227 2142/226\nf 2150/229 2147/230 2149/231\nf 544/232 2149/231 2147/230\nf 2156/233 2154/234 2155/235\nf 546/236 2155/235 2154/234\nf 2162/237 2159/238 2161/239\nf 547/240 2161/239 2159/238\nf 2169/241 2167/242 2168/243\nf 549/244 2168/243 2167/242\nf 2176/245 2172/246 2174/247\nf 550/248 2174/247 2172/246\nf 2181/249 2165/250 2180/251\nf 551/252 2180/251 2165/250\nf 2186/253 2183/254 2185/255\nf 553/256 2185/255 2183/254\nf 2192/257 2190/258 2191/259\nf 555/260 2191/259 2190/258\nf 556/261 2197/262 2195/263\nf 2198/264 2195/263 2197/262\nf 2204/265 2202/266 2203/267\nf 558/268 2203/267 2202/266\nf 559/269 2209/270 2207/271\nf 2210/272 2207/271 2209/270\nf 561/273 2216/274 2215/275\nf 2217/276 2215/275 2216/274\nf 2224/277 2220/278 2222/279\nf 562/280 2222/279 2220/278\nf 2229/281 2213/282 2228/283\nf 563/284 2228/283 2213/282\nf 2234/285 2231/286 2233/287\nf 565/288 2233/287 2231/286\nf 2239/289 2240/290 567/291\nf 2238/292 567/291 2240/290\nf 2245/293 2246/294 568/295\nf 2243/296 568/295 2246/294\nf 2251/297 2252/298 570/299\nf 2250/300 570/299 2252/298\nf 2257/301 2258/302 571/303\nf 2255/304 571/303 2258/302\nf 2264/305 2265/306 573/307\nf 2263/308 573/307 2265/306\nf 2267/309 474/62 2270/310\nf 1881/311 2270/310 474/62\nf 2261/312 574/313 2275/314\nf 2274/315 2275/314 574/313\nf 2276/316 471/54 2278/317\nf 1869/318 2278/317 471/54\nf 2285/319 578/320 2287/321\nf 2286/322 2287/321 578/320\nf 2294/323 2290/324 2292/325\nf 579/326 2292/325 2290/324\nf 2300/327 583/328 2302/329\nf 2301/330 2302/329 583/328\nf 2305/331 584/332 2308/333\nf 2307/334 2308/333 584/332\nf 2315/335 2313/336 2314/337\nf 586/338 2314/337 2313/336\nf 2322/339 2318/340 2320/341\nf 587/342 2320/341 2318/340\nf 2328/343 2311/344 2327/345\nf 588/346 2327/345 2311/344\nf 2334/347 2330/348 2332/349\nf 590/350 2332/349 2330/348\nf 2342/351 2340/352 2341/353\nf 594/354 2341/353 2340/352\nf 2345/355 595/356 2348/357\nf 2347/358 2348/357 595/356\nf 2356/359 2354/360 2355/361\nf 598/362 2355/361 2354/360\nf 2362/363 2359/364 2361/365\nf 599/366 2361/365 2359/364\nf 2369/367 2367/368 2368/369\nf 601/370 2368/369 2367/368\nf 2372/371 602/372 2376/373\nf 2374/374 2376/373 602/372\nf 2381/375 2365/376 2380/377\nf 603/378 2380/377 2365/376\nf 2386/379 2383/380 2385/381\nf 605/382 2385/381 2383/380\nf 2391/383 607/384 2393/385\nf 2392/386 2393/385 607/384\nf 2400/387 2396/388 2398/389\nf 608/390 2398/389 2396/388\nf 2404/391 611/392 2406/393\nf 2405/394 2406/393 611/392\nf 2409/395 612/396 2412/397\nf 2411/398 2412/397 612/396\nf 2417/399 614/400 2419/401\nf 2418/402 2419/401 614/400\nf 2422/403 615/404 2426/405\nf 2424/406 2426/405 615/404\nf 2415/407 616/408 2432/409\nf 2431/410 2432/409 616/408\nf 2434/411 618/412 2438/413\nf 2436/414 2438/413 618/412\nf 2445/415 2443/416 2444/417\nf 621/418 2444/417 2443/416\nf 2452/419 2448/420 2450/421\nf 622/422 2450/421 2448/420\nf 2457/423 2389/424 2456/425\nf 609/426 2456/425 2389/424\nf 2462/427 2459/428 2461/429\nf 625/430 2461/429 2459/428\nf 2468/431 2429/432 2467/433\nf 619/434 2467/433 2429/432\nf 2474/435 2470/436 2472/437\nf 627/438 2472/437 2470/436\nf 2480/439 2465/440 2479/441\nf 628/442 2479/441 2465/440\nf 2486/443 2482/444 2484/445\nf 630/446 2484/445 2482/444\nf 2494/447 2492/448 2493/449\nf 634/450 2493/449 2492/448\nf 2500/451 2497/452 2499/453\nf 635/454 2499/453 2497/452\nf 2508/455 2506/456 2507/457\nf 638/458 2507/457 2506/456\nf 2514/459 2511/460 2513/461\nf 639/462 2513/461 2511/460\nf 2521/463 2519/464 2520/465\nf 641/466 2520/465 2519/464\nf 2528/467 2524/468 2526/469\nf 642/470 2526/469 2524/468\nf 2533/471 2517/472 2532/473\nf 643/474 2532/473 2517/472\nf 2538/475 2535/476 2537/477\nf 645/478 2537/477 2535/476\nf 2542/479 647/480 2544/481\nf 2543/482 2544/481 647/480\nf 2547/483 648/484 2550/485\nf 2549/486 2550/485 648/484\nf 2554/487 650/488 2556/489\nf 2555/490 2556/489 650/488\nf 2559/491 651/492 2562/493\nf 2561/494 2562/493 651/492\nf 2569/495 2567/496 2568/497\nf 653/498 2568/497 2567/496\nf 2576/499 2572/500 2574/501\nf 654/502 2574/501 2572/500\nf 2565/503 655/504 2581/505\nf 2580/506 2581/505 655/504\nf 2583/507 657/508 2586/509\nf 2585/510 2586/509 657/508\nf 660/511 2594/512 2593/513\nf 2595/514 2593/513 2594/512\nf 2602/515 2598/516 2600/517\nf 661/518 2600/517 2598/516\nf 2609/519 2607/520 2608/521\nf 664/522 2608/521 2607/520\nf 2614/523 2611/524 2593/513\nf 660/511 2593/513 2611/524\nf 2620/525 668/526 2622/527\nf 2621/528 2622/527 668/526\nf 2624/529 664/522 2626/530\nf 2607/520 2626/530 664/522\nf 2635/531 2633/532 2634/533\nf 671/534 2634/533 2633/532\nf 2640/535 2637/536 2620/525\nf 668/526 2620/525 2637/536\nf 2600/517 661/518 2648/537\nf 2647/538 2648/537 661/518\nf 2649/539 671/534 2652/540\nf 2633/532 2652/540 671/534\nf 2659/541 2657/542 2658/543\nf 677/544 2658/543 2657/542\nf 2666/545 2662/546 2664/547\nf 678/548 2664/547 2662/546\nf 2672/549 2670/550 2671/551\nf 681/552 2671/551 2670/550\nf 2678/553 2675/554 2677/555\nf 682/556 2677/555 2675/554\nf 2685/557 2683/558 2684/559\nf 684/560 2684/559 2683/558\nf 2692/561 2688/562 2690/563\nf 685/564 2690/563 2688/562\nf 2698/565 2681/566 2697/567\nf 686/568 2697/567 2681/566\nf 2704/569 2700/570 2702/571\nf 688/572 2702/571 2700/570\nf 2709/573 2710/574 691/575\nf 2708/576 691/575 2710/574\nf 2715/577 2716/578 692/579\nf 2713/580 692/579 2716/578\nf 2722/581 2720/582 2721/583\nf 694/584 2721/583 2720/582\nf 2727/585 2728/586 695/587\nf 2725/588 695/587 2728/586\nf 2735/589 2733/590 2734/591\nf 697/592 2734/591 2733/590\nf 2740/593 2742/594 698/595\nf 2738/596 698/595 2742/594\nf 2746/597 2747/598 699/599\nf 2731/600 699/599 2747/598\nf 2749/601 701/602 2752/603\nf 2751/604 2752/603 701/602\nf 2758/605 2759/606 703/607\nf 2757/608 703/607 2759/606\nf 2764/609 2766/610 704/611\nf 2762/612 704/611 2766/610\nf 2772/613 2770/614 2771/615\nf 707/616 2771/615 2770/614\nf 703/607 2757/608 2774/617\nf 2776/618 2774/617 2757/608\nf 2783/619 2784/620 710/621\nf 2782/622 710/621 2784/620\nf 2770/614 2788/623 707/616\nf 2786/624 707/616 2788/623\nf 2795/625 713/626 2797/627\nf 2796/628 2797/627 713/626\nf 2802/629 2799/630 2782/622\nf 710/621 2782/622 2799/630\nf 2810/631 2764/609 2809/632\nf 704/611 2809/632 2764/609\nf 2814/633 2811/634 2795/625\nf 713/626 2795/625 2811/634\nf 2819/635 719/636 2821/637\nf 2820/638 2821/637 719/636\nf 2828/639 2824/640 2826/641\nf 720/642 2826/641 2824/640\nf 2834/643 2832/644 2833/645\nf 723/646 2833/645 2832/644\nf 2840/647 2837/648 2839/649\nf 724/650 2839/649 2837/648\nf 2845/651 726/652 2847/653\nf 2846/654 2847/653 726/652\nf 2852/655 2854/656 727/657\nf 2850/658 727/657 2854/656\nf 2860/659 2843/660 2859/661\nf 728/662 2859/661 2843/660\nf 2866/663 2862/664 2864/665\nf 730/666 2864/665 2862/664\nf 2870/667 733/668 2872/669\nf 2871/670 2872/669 733/668\nf 2875/671 734/672 2878/673\nf 2877/674 2878/673 734/672\nf 2882/675 736/676 2884/677\nf 2883/678 2884/677 736/676\nf 2887/679 737/680 2890/681\nf 2889/682 2890/681 737/680\nf 2896/683 2897/684 739/685\nf 2895/686 739/685 2897/684\nf 2902/687 2904/688 740/689\nf 2900/690 740/689 2904/688\nf 2893/691 741/692 2909/693\nf 2908/694 2909/693 741/692\nf 2911/695 743/696 2914/697\nf 2913/698 2914/697 743/696\nf 2918/699 745/700 2920/701\nf 2919/702 2920/701 745/700\nf 2923/703 746/704 2926/705\nf 2925/706 2926/705 746/704\nf 2932/707 2930/708 2931/709\nf 748/710 2931/709 2930/708\nf 2935/711 749/712 2938/713\nf 2937/714 2938/713 749/712\nf 2944/715 2945/716 751/717\nf 2943/718 751/717 2945/716\nf 2950/719 2952/720 752/721\nf 2948/722 752/721 2952/720\nf 2941/723 753/724 2957/725\nf 2956/726 2957/725 753/724\nf 2961/727 2962/728 755/729\nf 2959/730 755/729 2962/728\nf 2968/731 2966/732 2967/733\nf 757/734 2967/733 2966/732\nf 2974/735 2971/736 2973/737\nf 758/738 2973/737 2971/736\nf 2980/739 2978/740 2979/741\nf 760/742 2979/741 2978/740\nf 2986/743 2983/744 2985/745\nf 761/746 2985/745 2983/744\nf 2993/747 2991/748 2992/749\nf 763/750 2992/749 2991/748\nf 2996/751 764/752 3000/753\nf 2998/754 3000/753 764/752\nf 3005/755 2989/756 3004/757\nf 765/758 3004/757 2989/756\nf 3009/759 3010/760 767/761\nf 3007/762 767/761 3010/760\nf 3015/763 769/764 3017/765\nf 3016/766 3017/765 769/764\nf 3020/767 770/768 3024/769\nf 3022/770 3024/769 770/768\nf 3028/771 773/772 3030/773\nf 3029/774 3030/773 773/772\nf 3035/775 3036/776 774/777\nf 3033/778 774/777 3036/776\nf 3042/779 3043/780 776/781\nf 3041/782 776/781 3043/780\nf 3048/783 3050/784 777/785\nf 3046/786 777/785 3050/784\nf 3039/787 778/788 3056/789\nf 3055/790 3056/789 778/788\nf 3058/791 780/792 3062/793\nf 3060/794 3062/793 780/792\nf 3068/795 3066/796 3067/797\nf 783/798 3067/797 3066/796\nf 784/799 3073/800 3071/801\nf 3074/802 3071/801 3073/800\nf 3080/803 3078/804 3079/805\nf 786/806 3079/805 3078/804\nf 3086/807 3083/808 3085/809\nf 787/810 3085/809 3083/808\nf 3093/811 3091/812 3092/813\nf 789/814 3092/813 3091/812\nf 3100/815 3096/816 3098/817\nf 790/818 3098/817 3096/816\nf 791/819 3104/820 3089/821\nf 3105/822 3089/821 3104/820\nf 3109/823 3110/824 793/825\nf 3107/826 793/825 3110/824\nf 3114/827 795/828 3116/829\nf 3115/830 3116/829 795/828\nf 3119/831 796/832 3122/833\nf 3121/834 3122/833 796/832\nf 3126/835 798/836 3128/837\nf 3127/838 3128/837 798/836\nf 3131/839 799/840 3134/841\nf 3133/842 3134/841 799/840\nf 3141/843 3139/844 3140/845\nf 801/846 3140/845 3139/844\nf 3148/847 3144/848 3146/849\nf 802/850 3146/849 3144/848\nf 3153/851 3137/852 3152/853\nf 803/854 3152/853 3137/852\nf 3158/855 3155/856 3157/857\nf 805/858 3157/857 3155/856\nf 3164/859 3162/860 3163/861\nf 807/862 3163/861 3162/860\nf 3170/863 3167/864 3169/865\nf 808/866 3169/865 3167/864\nf 3176/867 3174/868 3175/869\nf 810/870 3175/869 3174/868\nf 3182/871 3179/872 3181/873\nf 811/874 3181/873 3179/872\nf 3189/875 3187/876 3188/877\nf 813/878 3188/877 3187/876\nf 3196/879 3192/880 3194/881\nf 814/882 3194/881 3192/880\nf 3201/883 3185/884 3200/885\nf 815/886 3200/885 3185/884\nf 817/887 3205/888 3203/889\nf 3206/890 3203/889 3205/888\nf 3212/891 3213/892 819/893\nf 3211/894 819/893 3213/892\nf 3218/895 3220/896 820/897\nf 3216/898 820/897 3220/896\nf 3225/899 3226/900 823/901\nf 3224/902 823/901 3226/900\nf 3229/903 824/904 3232/905\nf 3231/906 3232/905 824/904\nf 3237/907 826/908 3239/909\nf 3238/910 3239/909 826/908\nf 3242/911 827/912 3246/913\nf 3244/914 3246/913 827/912\nf 3251/915 3252/916 828/917\nf 3235/918 828/917 3252/916\nf 3256/919 3258/920 830/921\nf 3254/922 830/921 3258/920\nf 3265/923 3263/924 3264/925\nf 833/926 3264/925 3263/924\nf 3272/927 3268/928 3270/929\nf 834/930 3270/929 3268/928\nf 3278/931 3276/932 3277/933\nf 837/934 3277/933 3276/932\nf 838/935 3283/936 3281/937\nf 3284/938 3281/937 3283/936\nf 840/939 3290/940 3289/941\nf 3291/942 3289/941 3290/940\nf 841/943 3296/944 3294/945\nf 3298/946 3294/945 3296/944\nf 842/947 3303/948 3287/949\nf 3304/950 3287/949 3303/948\nf 844/951 3308/952 3306/953\nf 3310/954 3306/953 3308/952\nf 3316/955 3314/956 3315/957\nf 847/958 3315/957 3314/956\nf 848/959 3321/960 3319/961\nf 3322/962 3319/961 3321/960\nf 3328/963 3326/964 3327/965\nf 850/966 3327/965 3326/964\nf 3334/967 3331/968 3333/969\nf 851/970 3333/969 3331/968\nf 3341/971 3339/972 3340/973\nf 853/974 3340/973 3339/972\nf 3344/975 854/976 3348/977\nf 3346/978 3348/977 854/976\nf 3353/979 3337/980 3352/981\nf 855/982 3352/981 3337/980\nf 3355/983 857/984 3358/985\nf 3357/986 3358/985 857/984\nf 859/987 3363/988 3362/989\nf 3364/990 3362/989 3363/988\nf 3370/991 3367/992 3369/993\nf 860/994 3369/993 3367/992\nf 3376/995 3374/996 3375/997\nf 862/998 3375/997 3374/996\nf 863/999 3381/1000 3379/1001\nf 3382/1002 3379/1001 3381/1000\nf 865/1003 3388/1004 3387/1005\nf 3389/1006 3387/1005 3388/1004\nf 3396/1007 3392/1008 3394/1009\nf 866/1010 3394/1009 3392/1008\nf 3401/1011 3385/1012 3400/1013\nf 867/1014 3400/1013 3385/1012\nf 3406/1015 3403/1016 3405/1017\nf 869/1018 3405/1017 3403/1016\nf 3412/1019 3413/1020 871/1021\nf 3411/1022 871/1021 3413/1020\nf 3418/1023 3420/1024 872/1025\nf 3416/1026 872/1025 3420/1024\nf 3424/1027 875/1028 3426/1029\nf 3425/1030 3426/1029 875/1028\nf 3429/1031 876/1032 3432/1033\nf 3431/1034 3432/1033 876/1032\nf 3437/1035 878/1036 3439/1037\nf 3438/1038 3439/1037 878/1036\nf 3442/1039 879/1040 3446/1041\nf 3444/1042 3446/1041 879/1040\nf 3435/1043 880/1044 3452/1045\nf 3451/1046 3452/1045 880/1044\nf 3454/1047 882/1048 3458/1049\nf 3456/1050 3458/1049 882/1048\nf 3464/1051 886/1052 3466/1053\nf 3465/1054 3466/1053 886/1052\nf 3471/1055 3472/1056 887/1057\nf 3469/1058 887/1057 3472/1056\nf 3480/1059 3478/1060 3479/1061\nf 890/1062 3479/1061 3478/1060\nf 3486/1063 3483/1064 3485/1065\nf 891/1066 3485/1065 3483/1064\nf 3493/1067 3491/1068 3492/1069\nf 893/1070 3492/1069 3491/1068\nf 894/1071 3498/1072 3496/1073\nf 3500/1074 3496/1073 3498/1072\nf 3504/1075 3505/1076 895/1077\nf 3489/1078 895/1077 3505/1076\nf 3509/1079 3510/1080 897/1081\nf 3507/1082 897/1081 3510/1080\nf 3518/1083 3516/1084 3517/1085\nf 900/1086 3517/1085 3516/1084\nf 3524/1087 3521/1088 3523/1089\nf 901/1090 3523/1089 3521/1088\nf 904/1091 3531/1092 3530/1093\nf 3532/1094 3530/1093 3531/1092\nf 3538/1095 3535/1096 3537/1097\nf 905/1098 3537/1097 3535/1096\nf 907/1099 3544/1100 3543/1101\nf 3545/1102 3543/1101 3544/1100\nf 3552/1103 3548/1104 3550/1105\nf 908/1106 3550/1105 3548/1104\nf 909/1107 3556/1108 3541/1109\nf 3557/1110 3541/1109 3556/1108\nf 911/1111 3561/1112 3559/1113\nf 3562/1114 3559/1113 3561/1112\nf 3567/1115 913/1116 3569/1117\nf 3568/1118 3569/1117 913/1116\nf 3572/1119 914/1120 3576/1121\nf 3574/1122 3576/1121 914/1120\nf 3581/1123 3509/1079 3580/1124\nf 897/1081 3580/1124 3509/1079\nf 3585/1125 3586/1126 917/1127\nf 3583/1128 917/1127 3586/1126\nf 3592/1129 3498/1072 3591/1130\nf 894/1071 3591/1130 3498/1072\nf 3596/1131 3593/1132 3558/1133\nf 911/1111 3558/1133 3593/1132\nf 3602/1134 3589/1135 3601/1136\nf 919/1137 3601/1136 3589/1135\nf 3606/1138 3603/1139 3547/1140\nf 908/1106 3547/1140 3603/1139\nf 3613/1141 3611/1142 3612/1143\nf 923/1144 3612/1143 3611/1142\nf 3616/1145 924/1146 3620/1147\nf 3618/1148 3620/1147 924/1146\nf 3626/1149 3624/1150 3625/1151\nf 927/1152 3625/1151 3624/1150\nf 3631/1153 3632/1154 928/1155\nf 3629/1156 928/1155 3632/1154\nf 3638/1157 3639/1158 930/1159\nf 3637/1160 930/1159 3639/1158\nf 3644/1161 3646/1162 931/1163\nf 3642/1164 931/1163 3646/1162\nf 3651/1165 3652/1166 932/1167\nf 3635/1168 932/1167 3652/1166\nf 3654/1169 934/1170 3658/1171\nf 3656/1172 3658/1171 934/1170\nf 3664/1173 3662/1174 3663/1175\nf 937/1176 3663/1175 3662/1174\nf 938/1177 3669/1178 3667/1179\nf 3670/1180 3667/1179 3669/1178\nf 3674/1181 3675/1182 826/908\nf 3240/1183 826/908 3675/1182\nf 3677/1184 940/1185 3680/1186\nf 3679/1187 3680/1186 940/1185\nf 3227/1188 823/901 3686/1189\nf 3685/1190 3686/1189 823/901\nf 835/1191 3271/1192 3687/1193\nf 3690/1194 3687/1193 3271/1192\nf 942/1195 3694/1196 3683/1197\nf 3695/1198 3683/1197 3694/1196\nf 3696/1199 845/1200 3698/1201\nf 3309/1202 3698/1201 845/1200\nf 3704/1203 3702/1204 3703/1205\nf 945/1206 3703/1205 3702/1204\nf 3710/1207 3707/1208 3709/1209\nf 946/1210 3709/1209 3707/1208\nf 948/1211 3715/1212 3714/1213\nf 3716/1214 3714/1213 3715/1212\nf 3722/1215 3719/1216 3721/1217\nf 949/1218 3721/1217 3719/1216\nf 951/1219 3728/1220 3727/1221\nf 3729/1222 3727/1221 3728/1220\nf 3736/1223 3732/1224 3734/1225\nf 952/1226 3734/1225 3732/1224\nf 3741/1227 3725/1228 3740/1229\nf 953/1230 3740/1229 3725/1228\nf 955/1231 3745/1232 3743/1233\nf 3746/1234 3743/1233 3745/1232\nf 3752/1235 3753/1236 957/1237\nf 3751/1238 957/1237 3753/1236\nf 3760/1239 3756/1240 3758/1241\nf 958/1242 3758/1241 3756/1240\nf 3764/1243 3765/1244 844/951\nf 3308/952 844/951 3765/1244\nf 3769/1245 3770/1246 961/1247\nf 3767/1248 961/1247 3770/1246\nf 3775/1249 3776/1250 841/943\nf 3296/944 841/943 3776/1250\nf 3780/1251 3777/1252 3742/1253\nf 955/1231 3742/1253 3777/1252\nf 3786/1254 3773/1255 3785/1256\nf 963/1257 3785/1256 3773/1255\nf 3790/1258 3787/1259 3731/1260\nf 952/1226 3731/1260 3787/1259\nf 3797/1261 968/1262 3799/1263\nf 3798/1264 3799/1263 968/1262\nf 3802/1265 969/1266 3806/1267\nf 3804/1268 3806/1267 969/1266\nf 3814/1269 3815/1270 973/1271\nf 3813/1272 973/1271 3815/1270\nf 3820/1273 3817/1274 3797/1261\nf 968/1262 3797/1261 3817/1274\nf 3828/1275 3804/1268 3827/1276\nf 969/1266 3827/1276 3804/1268\nf 3832/1277 3829/1278 3813/1272\nf 973/1271 3813/1272 3829/1278\nf 3838/1279 980/1280 3840/1281\nf 3839/1282 3840/1281 980/1280\nf 3843/1283 981/1284 3846/1285\nf 3845/1286 3846/1285 981/1284\nf 3852/1287 984/1288 3854/1289\nf 3853/1290 3854/1289 984/1288\nf 3857/1291 985/1292 3860/1293\nf 3859/1294 3860/1293 985/1292\nf 3865/1295 987/1296 3867/1297\nf 3866/1298 3867/1297 987/1296\nf 3870/1299 988/1300 3874/1301\nf 3872/1302 3874/1301 988/1300\nf 3863/1303 989/1304 3879/1305\nf 3878/1306 3879/1305 989/1304\nf 3881/1307 991/1308 3884/1309\nf 3883/1310 3884/1309 991/1308\nf 993/1311 3889/1312 3888/1313\nf 3890/1314 3888/1313 3889/1312\nf 3895/1315 3896/1316 994/1317\nf 3893/1318 994/1317 3896/1316\nf 3901/1319 1799/1320 3900/1321\nf 452/1322 3900/1321 1799/1320\nf 3905/1323 3906/1324 996/1325\nf 3903/1326 996/1325 3906/1324\nf 3911/1327 3912/1328 447/1329\nf 1784/1330 447/1329 3912/1328\nf 3916/1331 3918/1332 998/1333\nf 3914/1334 998/1333 3918/1332\nf 3922/1335 3923/1336 999/1337\nf 3909/1338 999/1337 3923/1336\nf 3925/1339 1001/1340 3928/1341\nf 3927/1342 3928/1341 1001/1340\nf 3933/1343 1003/1344 3935/1345\nf 3934/1346 3935/1345 1003/1344\nf 1004/1347 3940/1348 3938/1349\nf 3942/1350 3938/1349 3940/1348\nf 3946/1351 1007/1352 3948/1353\nf 3947/1354 3948/1353 1007/1352\nf 3951/1355 1008/1356 3954/1357\nf 3953/1358 3954/1357 1008/1356\nf 3959/1359 1010/1360 3961/1361\nf 3960/1362 3961/1361 1010/1360\nf 3966/1363 3968/1364 1011/1365\nf 3964/1366 1011/1365 3968/1364\nf 3974/1367 3957/1368 3973/1369\nf 1012/1370 3973/1369 3957/1368\nf 1014/1371 3978/1372 3976/1373\nf 3980/1374 3976/1373 3978/1372\nf 3987/1375 3988/1376 1018/1377\nf 3986/1378 1018/1377 3988/1376\nf 3991/1379 1019/1380 3994/1381\nf 3993/1382 3994/1381 1019/1380\nf 4002/1383 4000/1384 4001/1385\nf 1022/1386 4001/1385 4000/1384\nf 4008/1387 4005/1388 4007/1389\nf 1023/1390 4007/1389 4005/1388\nf 4014/1391 4015/1392 1025/1393\nf 4013/1394 1025/1393 4015/1392\nf 4022/1395 4018/1396 4020/1397\nf 1026/1398 4020/1397 4018/1396\nf 1027/1399 4026/1400 4011/1401\nf 4027/1402 4011/1401 4026/1400\nf 4032/1403 4029/1404 4031/1405\nf 1029/1406 4031/1405 4029/1404\nf 4038/1407 1032/1408 4040/1409\nf 4039/1410 4040/1409 1032/1408\nf 4043/1411 1033/1412 4046/1413\nf 4045/1414 4046/1413 1033/1412\nf 4052/1415 1036/1416 4054/1417\nf 4053/1418 4054/1417 1036/1416\nf 4057/1419 1037/1420 4060/1421\nf 4059/1422 4060/1421 1037/1420\nf 4065/1423 1039/1424 4067/1425\nf 4066/1426 4067/1425 1039/1424\nf 4069/1427 582/1428 4072/1429\nf 2295/1430 4072/1429 582/1428\nf 4063/1431 1040/1432 4077/1433\nf 4076/1434 4077/1433 1040/1432\nf 4078/1435 577/1436 4080/1437\nf 2279/1438 4080/1437 577/1436\nf 1043/1439 4085/1440 4084/1441\nf 4086/1442 4084/1441 4085/1440\nf 4092/1443 4089/1444 4091/1445\nf 1044/1446 4091/1445 4089/1444\nf 4098/1447 4096/1448 4097/1449\nf 1046/1450 4097/1449 4096/1448\nf 1047/1451 4103/1452 4101/1453\nf 4104/1454 4101/1453 4103/1452\nf 4111/1455 4109/1456 4110/1457\nf 1049/1458 4110/1457 4109/1456\nf 1035/1459 4047/1460 4113/1461\nf 4116/1462 4113/1461 4047/1460\nf 4120/1463 4121/1464 1050/1465\nf 4107/1466 1050/1465 4121/1464\nf 4033/1467 4124/1468 1031/1469\nf 4122/1470 1031/1469 4124/1468\nf 4130/1471 4128/1472 4129/1473\nf 1053/1474 4129/1473 4128/1472\nf 4136/1475 4133/1476 4135/1477\nf 1054/1478 4135/1477 4133/1476\nf 3824/1479 977/1480 4141/1481\nf 4140/1482 4141/1481 977/1480\nf 4146/1483 4143/1484 4145/1485\nf 1056/1486 4145/1485 4143/1484\nf 972/1487 4151/1488 3812/1489\nf 4152/1490 3812/1489 4151/1488\nf 1058/1491 4156/1492 4154/1493\nf 4158/1494 4154/1493 4156/1492\nf 4163/1495 4149/1496 4162/1497\nf 1059/1498 4162/1497 4149/1496\nf 4168/1499 4165/1500 4167/1501\nf 1061/1502 4167/1501 4165/1500\nf 4174/1503 1064/1504 4176/1505\nf 4175/1506 4176/1505 1064/1504\nf 4179/1507 1065/1508 4182/1509\nf 4181/1510 4182/1509 1065/1508\nf 3851/1511 983/1512 4189/1513\nf 4188/1514 4189/1513 983/1512\nf 4191/1515 1068/1516 4194/1517\nf 4193/1518 4194/1517 1068/1516\nf 4200/1519 3837/1520 4199/1521\nf 979/1522 4199/1521 3837/1520\nf 4204/1523 4201/1524 2349/1525\nf 597/1526 2349/1525 4201/1524\nf 4197/1527 1070/1528 4209/1529\nf 4208/1530 4209/1529 1070/1528\nf 4210/1531 593/1532 4212/1533\nf 2335/1534 4212/1533 593/1532\nf 1073/1535 4218/1536 4217/1537\nf 4219/1538 4217/1537 4218/1536\nf 4222/1539 1074/1540 4226/1541\nf 4224/1542 4226/1541 1074/1540\nf 1005/1543 4230/1544 3931/1545\nf 4231/1546 3931/1545 4230/1544\nf 4236/1547 4233/1548 4235/1549\nf 1077/1550 4235/1549 4233/1548\nf 4242/1551 3971/1552 4241/1553\nf 1015/1554 4241/1553 3971/1552\nf 4246/1555 4243/1556 4028/1557\nf 1029/1406 4028/1557 4243/1556\nf 4252/1558 4239/1559 4251/1560\nf 1079/1561 4251/1560 4239/1559\nf 4256/1562 4253/1563 4017/1564\nf 1026/1398 4017/1564 4253/1563\nf 4260/1565 1083/1566 4262/1567\nf 4261/1568 4262/1567 1083/1566\nf 4265/1569 1084/1570 4268/1571\nf 4267/1572 4268/1571 1084/1570\nf 4274/1573 4272/1574 4273/1575\nf 1086/1576 4273/1575 4272/1574\nf 4279/1577 4280/1578 1087/1579\nf 4277/1580 1087/1579 4280/1578\nf 4287/1581 4285/1582 4286/1583\nf 1089/1584 4286/1583 4285/1582\nf 4289/1585 1021/1586 4292/1587\nf 3995/1588 4292/1587 1021/1586\nf 4283/1589 1090/1590 4297/1591\nf 4296/1592 4297/1591 1090/1590\nf 4298/1593 1017/1594 4300/1595\nf 3981/1596 4300/1595 1017/1594\nf 1093/1597 4305/1598 4304/1599\nf 4306/1600 4304/1599 4305/1598\nf 1094/1601 4311/1602 4309/1603\nf 4312/1604 4309/1603 4311/1602\nf 4316/1605 1096/1606 4318/1607\nf 4317/1608 4318/1607 1096/1606\nf 4320/1609 1093/1597 4322/1610\nf 4304/1599 4322/1610 1093/1597\nf 4311/1602 1094/1601 4327/1611\nf 4326/1612 4327/1611 1094/1601\nf 4316/1605 4330/1613 1096/1606\nf 4328/1614 1096/1606 4330/1613\nf 4335/1615 1099/1616 4337/1617\nf 4336/1618 4337/1617 1099/1616\nf 4342/1619 4344/1620 1100/1621\nf 4340/1622 1100/1621 4344/1620\nf 4352/1623 4350/1624 4351/1625\nf 1104/1626 4351/1625 4350/1624\nf 4356/1627 4354/1628 4335/1615\nf 1099/1616 4335/1615 4354/1628\nf 4364/1629 4342/1619 4363/1630\nf 1100/1621 4363/1630 4342/1619\nf 4350/1624 4368/1631 1104/1626\nf 4365/1632 1104/1626 4368/1631\nf 1109/1633 4373/1634 4372/1635\nf 4374/1636 4372/1635 4373/1634\nf 4380/1637 4377/1638 4379/1639\nf 1110/1640 4379/1639 4377/1638\nf 4384/1641 1112/1642 4386/1643\nf 4385/1644 4386/1643 1112/1642\nf 4392/1645 4389/1646 4391/1647\nf 1113/1648 4391/1647 4389/1646\nf 4399/1649 4397/1650 4398/1651\nf 1115/1652 4398/1651 4397/1650\nf 4406/1653 4402/1654 4404/1655\nf 1116/1656 4404/1655 4402/1654\nf 4411/1657 4395/1658 4410/1659\nf 1117/1660 4410/1659 4395/1658\nf 1119/1661 4415/1662 4413/1663\nf 4416/1664 4413/1663 4415/1662\nf 4422/1665 4423/1666 1121/1667\nf 4421/1668 1121/1667 4423/1666\nf 4428/1669 4430/1670 1122/1671\nf 4426/1672 1122/1671 4430/1670\nf 4434/1673 4435/1674 1119/1661\nf 4415/1662 1119/1661 4435/1674\nf 4439/1675 4440/1676 1125/1677\nf 4437/1678 1125/1677 4440/1676\nf 4445/1679 4446/1680 1116/1656\nf 4404/1655 1116/1656 4446/1680\nf 4452/1681 4448/1682 4450/1683\nf 1127/1684 4450/1683 4448/1682\nf 4457/1685 4458/1686 1128/1687\nf 4443/1688 1128/1687 4458/1686\nf 4462/1689 4464/1690 1130/1691\nf 4460/1692 1130/1691 4464/1690\nf 4470/1693 4468/1694 4469/1695\nf 1133/1696 4469/1695 4468/1694\nf 4473/1697 1134/1698 4476/1699\nf 4475/1700 4476/1699 1134/1698\nf 4483/1701 4484/1702 1137/1703\nf 4482/1704 1137/1703 4484/1702\nf 4468/1694 4488/1705 1133/1696\nf 4486/1706 1133/1696 4488/1705\nf 4494/1707 4475/1700 4493/1708\nf 1134/1698 4493/1708 4475/1700\nf 1137/1703 4482/1704 4495/1709\nf 4498/1710 4495/1709 4482/1704\nf 4504/1711 4505/1712 1141/1713\nf 4503/1714 1141/1713 4505/1712\nf 4508/1715 1142/1716 4512/1717\nf 4510/1718 4512/1717 1142/1716\nf 4517/1719 4518/1720 1145/1721\nf 4516/1722 1145/1721 4518/1720\nf 4523/1723 4524/1724 1146/1725\nf 4521/1726 1146/1725 4524/1724\nf 4529/1727 1148/1728 4531/1729\nf 4530/1730 4531/1729 1148/1728\nf 4536/1731 4538/1732 1149/1733\nf 4534/1734 1149/1733 4538/1732\nf 4527/1735 1150/1736 4544/1737\nf 4543/1738 4544/1737 1150/1736\nf 4546/1739 1152/1740 4550/1741\nf 4548/1742 4550/1741 1152/1740\nf 4554/1743 1155/1744 4556/1745\nf 4555/1746 4556/1745 1155/1744\nf 4559/1747 1156/1748 4562/1749\nf 4561/1750 4562/1749 1156/1748\nf 4566/1751 1158/1752 4568/1753\nf 4567/1754 4568/1753 1158/1752\nf 4571/1755 1159/1756 4574/1757\nf 4573/1758 4574/1757 1159/1756\nf 4579/1759 1161/1760 4581/1761\nf 4580/1762 4581/1761 1161/1760\nf 4584/1763 1162/1764 4588/1765\nf 4586/1766 4588/1765 1162/1764\nf 4577/1767 1163/1768 4593/1769\nf 4592/1770 4593/1769 1163/1768\nf 4595/1771 1165/1772 4598/1773\nf 4597/1774 4598/1773 1165/1772\nf 4605/1775 4603/1776 4604/1777\nf 1167/1778 4604/1777 4603/1776\nf 4612/1779 4608/1780 4610/1781\nf 1168/1782 4610/1781 4608/1780\nf 4617/1783 4618/1784 1171/1785\nf 4616/1786 1171/1785 4618/1784\nf 4624/1787 4621/1788 4623/1789\nf 1172/1790 4623/1789 4621/1788\nf 4630/1791 4631/1792 1174/1793\nf 4629/1794 1174/1793 4631/1792\nf 4636/1795 4638/1796 1175/1797\nf 4634/1798 1175/1797 4638/1796\nf 4644/1799 4627/1800 4643/1801\nf 1176/1802 4643/1801 4627/1800\nf 4650/1803 4646/1804 4648/1805\nf 1178/1806 4648/1805 4646/1804\nf 4656/1807 4657/1808 1181/1809\nf 4655/1810 1181/1809 4657/1808\nf 4662/1811 4664/1812 1182/1813\nf 4660/1814 1182/1813 4664/1812\nf 4669/1815 4670/1816 1185/1817\nf 4668/1818 1185/1817 4670/1816\nf 4675/1819 4676/1820 1186/1821\nf 4673/1822 1186/1821 4676/1820\nf 4682/1823 4683/1824 1188/1825\nf 4681/1826 1188/1825 4683/1824\nf 4690/1827 4686/1828 4688/1829\nf 1189/1830 4688/1829 4686/1828\nf 4695/1831 4696/1832 1190/1833\nf 4679/1834 1190/1833 4696/1832\nf 4702/1835 4698/1836 4700/1837\nf 1192/1838 4700/1837 4698/1836\nf 4709/1839 4710/1840 1196/1841\nf 4708/1842 1196/1841 4710/1840\nf 4715/1843 4716/1844 1197/1845\nf 4713/1846 1197/1845 4716/1844\nf 4723/1847 4724/1848 1200/1849\nf 4722/1850 1200/1849 4724/1848\nf 4729/1851 4730/1852 1201/1853\nf 4727/1854 1201/1853 4730/1852\nf 4735/1855 1203/1856 4737/1857\nf 4736/1858 4737/1857 1203/1856\nf 4744/1859 4740/1860 4742/1861\nf 1204/1862 4742/1861 4740/1860\nf 4748/1863 4749/1864 1205/1865\nf 4733/1866 1205/1865 4749/1864\nf 4753/1867 4754/1868 1207/1869\nf 4751/1870 1207/1869 4754/1868\nf 4758/1871 1209/1872 4760/1873\nf 4759/1874 4760/1873 1209/1872\nf 4765/1875 4766/1876 1210/1877\nf 4763/1878 1210/1877 4766/1876\nf 4771/1879 4772/1880 1212/1881\nf 4770/1882 1212/1881 4772/1880\nf 4777/1883 4778/1884 1213/1885\nf 4775/1886 1213/1885 4778/1884\nf 4784/1887 4785/1888 1215/1889\nf 4783/1890 1215/1889 4785/1888\nf 4717/1891 4790/1892 1199/1893\nf 4787/1894 1199/1893 4790/1892\nf 4794/1895 4795/1896 1216/1897\nf 4781/1898 1216/1897 4795/1896\nf 4703/1899 4798/1900 1195/1901\nf 4796/1902 1195/1901 4798/1900\nf 4805/1903 4803/1904 4804/1905\nf 1219/1906 4804/1905 4803/1904\nf 4812/1907 4808/1908 4810/1909\nf 1220/1910 4810/1909 4808/1908\nf 4818/1911 4816/1912 4817/1913\nf 1223/1914 4817/1913 4816/1912\nf 4824/1915 4821/1916 4823/1917\nf 1224/1918 4823/1917 4821/1916\nf 4830/1919 4831/1920 1226/1921\nf 4829/1922 1226/1921 4831/1920\nf 4836/1923 4833/1924 2119/210\nf 537/212 2119/210 4833/1924\nf 4842/1925 4827/1926 4841/1927\nf 1227/1928 4841/1927 4827/1926\nf 4846/1929 4843/1930 2106/202\nf 534/204 2106/202 4843/1930\nf 4852/1931 4850/1932 4851/1933\nf 1231/1934 4851/1933 4850/1932\nf 4858/1935 4855/1936 4857/1937\nf 1232/1938 4857/1937 4855/1936\nf 4864/1939 4862/1940 4863/1941\nf 1234/1942 4863/1941 4862/1940\nf 4870/1943 4867/1944 4869/1945\nf 1235/1946 4869/1945 4867/1944\nf 4877/1947 4875/1948 4876/1949\nf 1237/1950 4876/1949 4875/1948\nf 4882/1951 4879/1952 2167/242\nf 549/244 2167/242 4879/1952\nf 4887/1953 4873/1954 4886/1955\nf 1238/1956 4886/1955 4873/1954\nf 4890/1957 4888/1958 2154/234\nf 546/236 2154/234 4888/1958\nf 1241/1959 4895/1960 4894/1961\nf 4896/1962 4894/1961 4895/1960\nf 4902/1963 4899/1964 4901/1965\nf 1242/1966 4901/1965 4899/1964\nf 4908/1967 4906/1968 4907/1969\nf 1244/1970 4907/1969 4906/1968\nf 4914/1971 4911/1972 4913/1973\nf 1245/1974 4913/1973 4911/1972\nf 4921/1975 4919/1976 4920/1977\nf 1247/1978 4920/1977 4919/1976\nf 561/273 2215/275 4923/1979\nf 4926/1980 4923/1979 2215/275\nf 1248/1981 4930/1982 4917/1983\nf 4931/1984 4917/1983 4930/1982\nf 4934/1985 4932/1986 2202/266\nf 558/268 2202/266 4932/1986\nf 4938/1987 1251/1988 4940/1989\nf 4939/1990 4940/1989 1251/1988\nf 4943/1991 1252/1992 4946/1993\nf 4945/1994 4946/1993 1252/1992\nf 4582/1995 1161/1760 4951/1996\nf 4950/1997 4951/1996 1161/1760\nf 4955/1998 4956/1999 1254/2000\nf 4953/2001 1254/2000 4956/1999\nf 4569/2002 1158/1752 4962/2003\nf 4961/2004 4962/2003 1158/1752\nf 4963/2005 573/307 4966/2006\nf 2263/308 4966/2006 573/307\nf 4959/2007 1256/2008 4971/2009\nf 4970/2010 4971/2009 1256/2008\nf 4972/2011 570/299 4974/2012\nf 2250/300 4974/2012 570/299\nf 4983/2013 4981/2014 4982/2015\nf 1260/2016 4982/2015 4981/2014\nf 4986/2017 1261/2018 4990/2019\nf 4988/2020 4990/2019 1261/2018\nf 4998/2021 4996/2022 4997/2023\nf 1265/2024 4997/2023 4996/2022\nf 5004/2025 5001/2026 5003/2027\nf 1266/2028 5003/2027 5001/2026\nf 5011/2029 5009/2030 5010/2031\nf 1268/2032 5010/2031 5009/2030\nf 5018/2033 5014/2034 5016/2035\nf 1269/2036 5016/2035 5014/2034\nf 5007/2037 1270/2038 5024/2039\nf 5023/2040 5024/2039 1270/2038\nf 5026/2041 1272/2042 5030/2043\nf 5028/2044 5030/2043 1272/2042\nf 5035/2045 1275/2046 5037/2047\nf 5036/2048 5037/2047 1275/2046\nf 5044/2049 5040/2050 5042/2051\nf 1276/2052 5042/2051 5040/2050\nf 5050/2053 5048/2054 5049/2055\nf 1279/2056 5049/2055 5048/2054\nf 5056/2057 5053/2058 5055/2059\nf 1280/2060 5055/2059 5053/2058\nf 5061/2061 1282/2062 5063/2063\nf 5062/2064 5063/2063 1282/2062\nf 5070/2065 5066/2066 5068/2067\nf 1283/2068 5068/2067 5066/2066\nf 5076/2069 5059/2070 5075/2071\nf 1284/2072 5075/2071 5059/2070\nf 5082/2073 5078/2074 5080/2075\nf 1286/2076 5080/2075 5078/2074\nf 5090/2077 5088/2078 5089/2079\nf 1290/2080 5089/2079 5088/2078\nf 5093/2081 1291/2082 5096/2083\nf 5095/2084 5096/2083 1291/2082\nf 5103/2085 5104/2086 1294/2087\nf 5102/2088 1294/2087 5104/2086\nf 5107/2089 1295/2090 5110/2091\nf 5109/2092 5110/2091 1295/2090\nf 5116/2093 5117/2094 1297/2095\nf 5115/2096 1297/2095 5117/2094\nf 5122/2097 5124/2098 1298/2099\nf 5120/2100 1298/2099 5124/2098\nf 5113/2101 1299/2102 5129/2103\nf 5128/2104 5129/2103 1299/2102\nf 5131/2105 1301/2106 5134/2107\nf 5133/2108 5134/2107 1301/2106\nf 5142/2109 5140/2110 5141/2111\nf 1304/2112 5141/2111 5140/2110\nf 5148/2113 5145/2114 5147/2115\nf 1305/2116 5147/2115 5145/2114\nf 5156/2117 5154/2118 5155/2119\nf 1308/2120 5155/2119 5154/2118\nf 5162/2121 5159/2122 5161/2123\nf 1309/2124 5161/2123 5159/2122\nf 5169/2125 5167/2126 5168/2127\nf 1311/2128 5168/2127 5167/2126\nf 5174/2129 5171/2130 5097/2131\nf 1293/2132 5097/2131 5171/2130\nf 5179/2133 5165/2134 5178/2135\nf 1312/2136 5178/2135 5165/2134\nf 5182/2137 5180/2138 5083/2139\nf 1289/2140 5083/2139 5180/2138\nf 5189/2141 5187/2142 5188/2143\nf 1315/2144 5188/2143 5187/2142\nf 5196/2145 5192/2146 5194/2147\nf 1316/2148 5194/2147 5192/2146\nf 5202/2149 5200/2150 5201/2151\nf 1319/2152 5201/2151 5200/2150\nf 5208/2153 5205/2154 5207/2155\nf 1320/2156 5207/2155 5205/2154\nf 5215/2157 5213/2158 5214/2159\nf 1322/2160 5214/2159 5213/2158\nf 5220/2161 5217/2162 2519/464\nf 641/466 2519/464 5217/2162\nf 5226/2163 5211/2164 5225/2165\nf 1323/2166 5225/2165 5211/2164\nf 5230/2167 5227/2168 2506/456\nf 638/458 2506/456 5227/2168\nf 5235/2169 5236/2170 1327/2171\nf 5234/2172 1327/2171 5236/2170\nf 5241/2173 5242/2174 1328/2175\nf 5239/2176 1328/2175 5242/2174\nf 5247/2177 5248/2178 1330/2179\nf 5246/2180 1330/2179 5248/2178\nf 5253/2181 5254/2182 1331/2183\nf 5251/2184 1331/2183 5254/2182\nf 5261/2185 5259/2186 5260/2187\nf 1333/2188 5260/2187 5259/2186\nf 5266/2189 5263/2190 2567/496\nf 653/498 2567/496 5263/2190\nf 5270/2191 5271/2192 1334/2193\nf 5257/2194 1334/2193 5271/2192\nf 2554/487 5274/2195 650/488\nf 5272/2196 650/488 5274/2195\nf 5282/2197 5280/2198 5281/2199\nf 1338/2200 5281/2199 5280/2198\nf 1339/2201 5287/2202 5285/2203\nf 5288/2204 5285/2203 5287/2202\nf 5295/2205 1342/2206 5297/2207\nf 5296/2208 5297/2207 1342/2206\nf 5299/2209 1338/2200 5302/2210\nf 5280/2198 5302/2210 1338/2200\nf 5311/2211 5309/2212 5310/2213\nf 1346/2214 5310/2213 5309/2212\nf 5316/2215 5313/2216 5295/2205\nf 1342/2206 5295/2205 5313/2216\nf 5321/2217 1349/2218 5323/2219\nf 5322/2220 5323/2219 1349/2218\nf 5325/2221 1346/2214 5328/2222\nf 5309/2212 5328/2222 1346/2214\nf 5333/2223 5287/2202 5332/2224\nf 1339/2201 5332/2224 5287/2202\nf 5336/2225 5334/2226 5321/2217\nf 1349/2218 5321/2217 5334/2226\nf 5344/2227 5342/2228 5343/2229\nf 1354/2230 5343/2229 5342/2228\nf 5350/2231 5347/2232 5349/2233\nf 1355/2234 5349/2233 5347/2232\nf 5358/2235 5356/2236 5357/2237\nf 1358/2238 5357/2237 5356/2236\nf 5364/2239 5361/2240 5363/2241\nf 1359/2242 5363/2241 5361/2240\nf 5371/2243 5369/2244 5370/2245\nf 1361/2246 5370/2245 5369/2244\nf 5378/2247 5374/2248 5376/2249\nf 1362/2250 5376/2249 5374/2248\nf 5383/2251 5367/2252 5382/2253\nf 1363/2254 5382/2253 5367/2252\nf 5388/2255 5385/2256 5387/2257\nf 1365/2258 5387/2257 5385/2256\nf 5392/2259 1367/2260 5394/2261\nf 5393/2262 5394/2261 1367/2260\nf 5397/2263 1368/2264 5400/2265\nf 5399/2266 5400/2265 1368/2264\nf 5404/2267 1370/2268 5406/2269\nf 5405/2270 5406/2269 1370/2268\nf 5409/2271 1371/2272 5412/2273\nf 5411/2274 5412/2273 1371/2272\nf 5417/2275 1373/2276 5419/2277\nf 5418/2278 5419/2277 1373/2276\nf 5426/2279 5422/2280 5424/2281\nf 1374/2282 5424/2281 5422/2280\nf 5415/2283 1375/2284 5431/2285\nf 5430/2286 5431/2285 1375/2284\nf 5436/2287 5433/2288 5435/2289\nf 1377/2290 5435/2289 5433/2288\nf 5442/2291 1380/2292 5444/2293\nf 5443/2294 5444/2293 1380/2292\nf 5447/2295 1381/2296 5450/2297\nf 5449/2298 5450/2297 1381/2296\nf 5457/2299 5455/2300 5456/2301\nf 1383/2302 5456/2301 5455/2300\nf 5462/2303 5459/2304 5442/2291\nf 1380/2292 5442/2291 5459/2304\nf 5470/2305 5468/2306 5469/2307\nf 1387/2308 5469/2307 5468/2306\nf 1383/2302 5455/2300 5472/2309\nf 5474/2310 5472/2309 5455/2300\nf 5479/2311 1389/2312 5481/2313\nf 5480/2314 5481/2313 1389/2312\nf 5483/2315 1387/2308 5486/2316\nf 5468/2306 5486/2316 1387/2308\nf 1381/2296 5490/2317 5449/2298\nf 5491/2318 5449/2298 5490/2317\nf 5494/2319 5492/2320 5479/2311\nf 1389/2312 5479/2311 5492/2320\nf 5500/2321 5498/2322 5499/2323\nf 1393/2324 5499/2323 5498/2322\nf 5505/2325 5506/2326 1394/2327\nf 5503/2328 1394/2327 5506/2326\nf 5512/2329 5510/2330 5511/2331\nf 1396/2332 5511/2331 5510/2330\nf 5518/2333 5515/2334 5517/2335\nf 1397/2336 5517/2335 5515/2334\nf 5523/2337 1399/2338 5525/2339\nf 5524/2340 5525/2339 1399/2338\nf 5528/2341 1400/2342 5532/2343\nf 5530/2344 5532/2343 1400/2342\nf 5537/2345 5521/2346 5536/2347\nf 1401/2348 5536/2347 5521/2346\nf 5542/2349 5539/2350 5541/2351\nf 1403/2352 5541/2351 5539/2350\nf 5546/2353 1405/2354 5548/2355\nf 5547/2356 5548/2355 1405/2354\nf 5551/2357 1406/2358 5554/2359\nf 5553/2360 5554/2359 1406/2358\nf 5558/2361 1408/2362 5560/2363\nf 5559/2364 5560/2363 1408/2362\nf 5563/2365 1409/2366 5566/2367\nf 5565/2368 5566/2367 1409/2366\nf 5571/2369 1411/2370 5573/2371\nf 5572/2372 5573/2371 1411/2370\nf 5576/2373 1412/2374 5580/2375\nf 5578/2376 5580/2375 1412/2374\nf 5569/2377 1413/2378 5585/2379\nf 5584/2380 5585/2379 1413/2378\nf 5587/2381 1415/2382 5590/2383\nf 5589/2384 5590/2383 1415/2382\nf 5594/2385 1417/2386 5596/2387\nf 5595/2388 5596/2387 1417/2386\nf 5599/2389 1418/2390 5602/2391\nf 5601/2392 5602/2391 1418/2390\nf 5606/2393 1420/2394 5608/2395\nf 5607/2396 5608/2395 1420/2394\nf 5611/2397 1421/2398 5614/2399\nf 5613/2400 5614/2399 1421/2398\nf 5619/2401 1423/2402 5621/2403\nf 5620/2404 5621/2403 1423/2402\nf 5624/2405 1424/2406 5628/2407\nf 5626/2408 5628/2407 1424/2406\nf 5617/2409 1425/2410 5633/2411\nf 5632/2412 5633/2411 1425/2410\nf 5638/2413 5635/2414 5637/2415\nf 1427/2416 5637/2415 5635/2414\nf 5644/2417 5642/2418 5643/2419\nf 1429/2420 5643/2419 5642/2418\nf 5650/2421 5647/2422 5649/2423\nf 1430/2424 5649/2423 5647/2422\nf 5654/2425 1432/2426 5656/2427\nf 5655/2428 5656/2427 1432/2426\nf 5662/2429 5659/2430 5661/2431\nf 1433/2432 5661/2431 5659/2430\nf 5667/2433 1435/2434 5669/2435\nf 5668/2436 5669/2435 1435/2434\nf 5674/2437 5671/2438 2991/748\nf 763/750 2991/748 5671/2438\nf 5679/2439 5665/2440 5678/2441\nf 1436/2442 5678/2441 5665/2440\nf 5682/2443 5680/2444 2978/740\nf 760/742 2978/740 5680/2444\nf 5687/2445 5688/2446 1439/2447\nf 5686/2448 1439/2447 5688/2446\nf 5693/2449 5694/2450 1440/2451\nf 5691/2452 1440/2451 5694/2450\nf 5699/2453 5700/2454 1442/2455\nf 5698/2456 1442/2455 5700/2454\nf 5705/2457 5706/2458 1443/2459\nf 5703/2460 1443/2459 5706/2458\nf 5711/2461 1445/2462 5713/2463\nf 5712/2464 5713/2463 1445/2462\nf 5716/2465 1446/2466 5720/2467\nf 5718/2468 5720/2467 1446/2466\nf 5709/2469 1447/2470 5725/2471\nf 5724/2472 5725/2471 1447/2470\nf 5729/2473 5730/2474 1449/2475\nf 5727/2476 1449/2475 5730/2474\nf 1451/2477 5735/2478 5734/2479\nf 5736/2480 5734/2479 5735/2478\nf 5742/2481 5739/2482 5741/2483\nf 1452/2484 5741/2483 5739/2482\nf 5746/2485 1454/2486 5748/2487\nf 5747/2488 5748/2487 1454/2486\nf 1455/2489 5753/2490 5751/2491\nf 5754/2492 5751/2491 5753/2490\nf 5761/2493 5759/2494 5760/2495\nf 1457/2496 5760/2495 5759/2494\nf 5768/2497 5764/2498 5766/2499\nf 1458/2500 5766/2499 5764/2498\nf 5773/2501 5757/2502 5772/2503\nf 1459/2504 5772/2503 5757/2502\nf 5778/2505 5775/2506 5777/2507\nf 1461/2508 5777/2507 5775/2506\nf 5783/2509 5784/2510 1463/2511\nf 5782/2512 1463/2511 5784/2510\nf 5789/2513 5790/2514 1464/2515\nf 5787/2516 1464/2515 5790/2514\nf 5796/2517 5794/2518 5795/2519\nf 1466/2520 5795/2519 5794/2518\nf 5802/2521 5799/2522 5801/2523\nf 1467/2524 5801/2523 5799/2522\nf 5809/2525 5807/2526 5808/2527\nf 1469/2528 5808/2527 5807/2526\nf 5816/2529 5812/2530 5814/2531\nf 1470/2532 5814/2531 5812/2530\nf 5820/2533 5821/2534 1471/2535\nf 5805/2536 1471/2535 5821/2534\nf 5825/2537 5826/2538 1473/2539\nf 5823/2540 1473/2539 5826/2538\nf 5832/2541 5830/2542 5831/2543\nf 1475/2544 5831/2543 5830/2542\nf 5838/2545 5835/2546 5837/2547\nf 1476/2548 5837/2547 5835/2546\nf 1478/2549 5843/2550 5842/2551\nf 5844/2552 5842/2551 5843/2550\nf 5850/2553 5847/2554 5849/2555\nf 1479/2556 5849/2555 5847/2554\nf 5857/2557 5855/2558 5856/2559\nf 1481/2560 5856/2559 5855/2558\nf 5862/2561 5859/2562 3187/876\nf 813/878 3187/876 5859/2562\nf 5867/2563 5853/2564 5866/2565\nf 1482/2566 5866/2565 5853/2564\nf 5870/2567 5868/2568 3174/868\nf 810/870 3174/868 5868/2568\nf 5874/2569 1485/2570 5876/2571\nf 5875/2572 5876/2571 1485/2570\nf 5879/2573 1486/2574 5882/2575\nf 5881/2576 5882/2575 1486/2574\nf 5886/2577 1488/2578 5888/2579\nf 5887/2580 5888/2579 1488/2578\nf 5891/2581 1489/2582 5894/2583\nf 5893/2584 5894/2583 1489/2582\nf 5900/2585 5901/2586 1491/2587\nf 5899/2588 1491/2587 5901/2586\nf 5906/2589 5908/2590 1492/2591\nf 5904/2592 1492/2591 5908/2590\nf 5912/2593 5913/2594 1493/2595\nf 5897/2596 1493/2595 5913/2594\nf 5915/2597 1495/2598 5918/2599\nf 5917/2600 5918/2599 1495/2598\nf 5923/2601 1497/2602 5925/2603\nf 5924/2604 5925/2603 1497/2602\nf 5932/2605 5928/2606 5930/2607\nf 1498/2608 5930/2607 5928/2606\nf 5937/2609 5938/2610 1501/2611\nf 5936/2612 1501/2611 5938/2610\nf 5944/2613 5941/2614 5943/2615\nf 1502/2616 5943/2615 5941/2614\nf 5951/2617 5949/2618 5950/2619\nf 1504/2620 5950/2619 5949/2618\nf 1505/2621 5956/2622 5954/2623\nf 5958/2624 5954/2623 5956/2622\nf 5964/2625 5947/2626 5963/2627\nf 1506/2628 5963/2627 5947/2626\nf 5968/2629 5970/2630 1508/2631\nf 5966/2632 1508/2631 5970/2630\nf 1512/2633 5977/2634 5976/2635\nf 5978/2636 5976/2635 5977/2634\nf 5984/2637 5981/2638 5983/2639\nf 1513/2640 5983/2639 5981/2638\nf 5991/2641 5992/2642 1516/2643\nf 5990/2644 1516/2643 5992/2642\nf 5998/2645 5995/2646 5997/2647\nf 1517/2648 5997/2647 5995/2646\nf 6004/2649 6005/2650 1519/2651\nf 6003/2652 1519/2651 6005/2650\nf 6012/2653 6008/2654 6010/2655\nf 1520/2656 6010/2655 6008/2654\nf 6017/2657 6001/2658 6016/2659\nf 1521/2660 6016/2659 6001/2658\nf 6022/2661 6019/2662 6021/2663\nf 1523/2664 6021/2663 6019/2662\nf 6028/2665 6026/2666 6027/2667\nf 1525/2668 6027/2667 6026/2666\nf 1526/2669 6033/2670 6031/2671\nf 6034/2672 6031/2671 6033/2670\nf 6040/2673 6038/2674 6039/2675\nf 1528/2676 6039/2675 6038/2674\nf 6046/2677 6043/2678 6045/2679\nf 1529/2680 6045/2679 6043/2678\nf 6053/2681 6051/2682 6052/2683\nf 1531/2684 6052/2683 6051/2682\nf 865/1003 3387/1005 6055/2685\nf 6058/2686 6055/2685 3387/1005\nf 1532/2687 6062/2688 6049/2689\nf 6063/2690 6049/2689 6062/2688\nf 6066/2691 6064/2692 3374/996\nf 862/998 3374/996 6064/2692\nf 6070/2693 1535/2694 6072/2695\nf 6071/2696 6072/2695 1535/2694\nf 6075/2697 1536/2698 6078/2699\nf 6077/2700 6078/2699 1536/2698\nf 6083/2701 6084/2702 1538/2703\nf 6082/2704 1538/2703 6084/2702\nf 6089/2705 6090/2706 1539/2707\nf 6087/2708 1539/2707 6090/2706\nf 6096/2709 6097/2710 1541/2711\nf 6095/2712 1541/2711 6097/2710\nf 6102/2713 6104/2714 1542/2715\nf 6100/2716 1542/2715 6104/2714\nf 6108/2717 6109/2718 1543/2719\nf 6093/2720 1543/2719 6109/2718\nf 6113/2721 6114/2722 1545/2723\nf 6111/2724 1545/2723 6114/2722\nf 6118/2725 1547/2726 6120/2727\nf 6119/2728 6120/2727 1547/2726\nf 6125/2729 6126/2730 1548/2731\nf 6123/2732 1548/2731 6126/2730\nf 6130/2733 1550/2734 6132/2735\nf 6131/2736 6132/2735 1550/2734\nf 6135/2737 1551/2738 6138/2739\nf 6137/2740 6138/2739 1551/2738\nf 1553/2741 6144/2742 6143/2743\nf 6145/2744 6143/2743 6144/2742\nf 6152/2745 6148/2746 6150/2747\nf 1554/2748 6150/2747 6148/2746\nf 6157/2749 6141/2750 6156/2751\nf 1555/2752 6156/2751 6141/2750\nf 6162/2753 6159/2754 6161/2755\nf 1557/2756 6161/2755 6159/2754\nf 6169/2757 6167/2758 6168/2759\nf 1559/2760 6168/2759 6167/2758\nf 6176/2761 6172/2762 6174/2763\nf 1560/2764 6174/2763 6172/2762\nf 1563/2765 6181/2766 6180/2767\nf 6182/2768 6180/2767 6181/2766\nf 1564/2769 6187/2770 6185/2771\nf 6188/2772 6185/2771 6187/2770\nf 6195/2773 6193/2774 6194/2775\nf 1566/2776 6194/2775 6193/2774\nf 907/1099 3543/1101 6197/2777\nf 6200/2778 6197/2777 3543/1101\nf 6206/2779 6191/2780 6205/2781\nf 1567/2782 6205/2781 6191/2780\nf 904/1091 3530/1093 6207/2783\nf 6210/2784 6207/2783 3530/1093\nf 6214/2785 1571/2786 6216/2787\nf 6215/2788 6216/2787 1571/2786\nf 6221/2789 6222/2790 1572/2791\nf 6219/2792 1572/2791 6222/2790\nf 6227/2793 6196/2794 6226/2795\nf 1566/2776 6226/2795 6196/2794\nf 6232/2796 6229/2797 6231/2798\nf 1574/2799 6231/2798 6229/2797\nf 6238/2800 6183/2801 6237/2802\nf 1563/2765 6237/2802 6183/2801\nf 6242/2803 6239/2804 6143/2743\nf 1553/2741 6143/2743 6239/2804\nf 6235/2805 1576/2806 6247/2807\nf 6246/2808 6247/2807 1576/2806\nf 6250/2809 6248/2810 6130/2733\nf 1550/2734 6130/2733 6248/2810\nf 6254/2811 1579/2812 6256/2813\nf 6255/2814 6256/2813 1579/2812\nf 6262/2815 6259/2816 6261/2817\nf 1580/2818 6261/2817 6259/2816\nf 6266/2819 1582/2820 6268/2821\nf 6267/2822 6268/2821 1582/2820\nf 6271/2823 1583/2824 6274/2825\nf 6273/2826 6274/2825 1583/2824\nf 6279/2827 1585/2828 6281/2829\nf 6280/2830 6281/2829 1585/2828\nf 6283/2831 1508/2631 6286/2832\nf 5965/2833 6286/2832 1508/2631\nf 6277/2834 1586/2835 6291/2836\nf 6290/2837 6291/2836 1586/2835\nf 6294/2838 6292/2839 5953/2840\nf 1505/2621 5953/2840 6292/2839\nf 6300/2841 6298/2842 6299/2843\nf 1589/2844 6299/2843 6298/2842\nf 6306/2845 6303/2846 6305/2847\nf 1590/2848 6305/2847 6303/2846\nf 1592/2849 6311/2850 6310/2851\nf 6312/2852 6310/2851 6311/2850\nf 1593/2853 6317/2854 6315/2855\nf 6318/2856 6315/2855 6317/2854\nf 1595/2857 6324/2858 6323/2859\nf 6325/2860 6323/2859 6324/2858\nf 1515/2861 5985/2862 6327/2863\nf 6330/2864 6327/2863 5985/2862\nf 1596/2865 6334/2866 6321/2867\nf 6335/2868 6321/2867 6334/2866\nf 6338/2869 6336/2870 5971/2871\nf 1511/2872 5971/2871 6336/2870\nf 6344/2873 6342/2874 6343/2875\nf 1599/2876 6343/2875 6342/2874\nf 6350/2877 6347/2878 6349/2879\nf 1600/2880 6349/2879 6347/2878\nf 1602/2881 6355/2882 6354/2883\nf 6356/2884 6354/2883 6355/2882\nf 6362/2885 6359/2886 6361/2887\nf 1603/2888 6361/2887 6359/2886\nf 6369/2889 6367/2890 6368/2891\nf 1605/2892 6368/2891 6367/2890\nf 951/1219 3727/1221 6371/2893\nf 6374/2894 6371/2893 3727/1221\nf 6379/2895 6365/2896 6378/2897\nf 1606/2898 6378/2897 6365/2896\nf 948/1211 3714/1213 6380/2899\nf 6382/2900 6380/2899 3714/1213\nf 6388/2901 6386/2902 6387/2903\nf 1609/2904 6387/2903 6386/2902\nf 6391/2905 1610/2906 6394/2907\nf 6393/2908 6394/2907 1610/2906\nf 6399/2909 6370/2910 6398/2911\nf 1605/2892 6398/2911 6370/2910\nf 6404/2912 6401/2913 6403/2914\nf 1612/2915 6403/2914 6401/2913\nf 6410/2916 6357/2917 6409/2918\nf 1602/2881 6409/2918 6357/2917\nf 6411/2919 1595/2857 6414/2920\nf 6323/2859 6414/2920 1595/2857\nf 6407/2921 1614/2922 6419/2923\nf 6418/2924 6419/2923 1614/2922\nf 6420/2925 1592/2849 6422/2926\nf 6310/2851 6422/2926 1592/2849\nf 6429/2927 1618/2928 6431/2929\nf 6430/2930 6431/2929 1618/2928\nf 6436/2931 6438/2932 1619/2933\nf 6434/2934 1619/2933 6438/2932\nf 6447/2935 6445/2936 6446/2937\nf 1623/2938 6446/2937 6445/2936\nf 6452/2939 6449/2940 6429/2927\nf 1618/2928 6429/2927 6449/2940\nf 6460/2941 6436/2931 6459/2942\nf 1619/2933 6459/2942 6436/2931\nf 6461/2943 1623/2938 6464/2944\nf 6445/2936 6464/2944 1623/2938\nf 6469/2945 1629/2946 6471/2947\nf 6470/2948 6471/2947 1629/2946\nf 6474/2949 1630/2950 6478/2951\nf 6476/2952 6478/2951 1630/2950\nf 3883/2953 991/2954 6483/2955\nf 6482/2956 6483/2955 991/2954\nf 6485/2957 1633/2958 6488/2959\nf 6487/2960 6488/2959 1633/2958\nf 6493/2961 6494/2962 988/2963\nf 3872/2964 988/2963 6494/2962\nf 6496/2965 1635/2966 6500/2967\nf 6498/2968 6500/2967 1635/2966\nf 6491/2969 1636/2970 6506/2971\nf 6505/2972 6506/2971 1636/2970\nf 6508/2973 1638/2974 6512/2975\nf 6510/2976 6512/2975 1638/2974\nf 6516/2977 1641/2978 6518/2979\nf 6517/2980 6518/2979 1641/2978\nf 1642/2981 6523/2982 6521/2983\nf 6524/2984 6521/2983 6523/2982\nf 6528/2985 6529/2986 1001/2987\nf 3927/2988 1001/2987 6529/2986\nf 6531/2989 1644/2990 6534/2991\nf 6533/2992 6534/2991 1644/2990\nf 3916/2993 998/2994 6540/2995\nf 6539/2996 6540/2995 998/2994\nf 6541/2997 1143/2998 6544/2999\nf 4511/3000 6544/2999 1143/2998\nf 6537/3001 1646/3002 6549/3003\nf 6548/3004 6549/3003 1646/3002\nf 6552/3005 6550/3006 4549/3007\nf 1153/3008 4549/3007 6550/3006\nf 1650/3009 6559/3010 6558/3011\nf 6560/3012 6558/3011 6559/3010\nf 6565/3013 6566/3014 1651/3015\nf 6563/3016 1651/3015 6566/3014\nf 1654/3017 6573/3018 6572/3019\nf 6574/3020 6572/3019 6573/3018\nf 6580/3021 6577/3022 6579/3023\nf 1655/3024 6579/3023 6577/3022\nf 6585/3025 1657/3026 6587/3027\nf 6586/3028 6587/3027 1657/3026\nf 6590/3029 1658/3030 6594/3031\nf 6592/3032 6594/3031 1658/3030\nf 6598/3033 6599/3034 1659/3035\nf 6583/3036 1659/3035 6599/3034\nf 6603/3037 6604/3038 1661/3039\nf 6601/3040 1661/3039 6604/3038\nf 6610/3041 6611/3042 1663/3043\nf 6609/3044 1663/3043 6611/3042\nf 6614/3045 1664/3046 6618/3047\nf 6616/3048 6618/3047 1664/3046\nf 6624/3049 6622/3050 6623/3051\nf 1667/3052 6623/3051 6622/3050\nf 1668/3053 6629/3054 6627/3055\nf 6630/3056 6627/3055 6629/3054\nf 6637/3057 6635/3058 6636/3059\nf 1670/3060 6636/3059 6635/3058\nf 6640/3061 1671/3062 6644/3063\nf 6642/3064 6644/3063 1671/3062\nf 6650/3065 6633/3066 6649/3067\nf 1672/3068 6649/3067 6633/3066\nf 6656/3069 6652/3070 6654/3071\nf 1674/3072 6654/3071 6652/3070\nf 6661/3073 1677/3074 6663/3075\nf 6662/3076 6663/3075 1677/3074\nf 6666/3077 1678/3078 6670/3079\nf 6668/3080 6670/3079 1678/3078\nf 4978/3081 1262/3082 6675/3083\nf 6674/3084 6675/3083 1262/3082\nf 6677/3085 1681/3086 6680/3087\nf 6679/3088 6680/3087 1681/3086\nf 5021/3089 1273/3090 6686/3091\nf 6685/3092 6686/3091 1273/3090\nf 6688/3093 1683/3094 6692/3095\nf 6690/3096 6692/3095 1683/3094\nf 6683/3097 1684/3098 6698/3099\nf 6697/3100 6698/3099 1684/3098\nf 6700/3101 1686/3102 6704/3103\nf 6702/3104 6704/3103 1686/3102\nf 6710/3105 6708/3106 6709/3107\nf 1689/3108 6709/3107 6708/3106\nf 6713/3109 1690/3110 6716/3111\nf 6715/3112 6716/3111 1690/3110\nf 6659/3113 1679/3114 6721/3115\nf 6720/3116 6721/3115 1679/3114\nf 6723/3117 1692/3118 6726/3119\nf 6725/3120 6726/3119 1692/3118\nf 1687/3121 6731/3122 6695/3123\nf 6732/3124 6695/3123 6731/3122\nf 6738/3125 6734/3126 6736/3127\nf 1694/3128 6736/3127 6734/3126\nf 1695/3129 6742/3130 6729/3131\nf 6743/3132 6729/3131 6742/3130\nf 6748/3133 6745/3134 6747/3135\nf 1697/3136 6747/3135 6745/3134\nf 6754/3137 6752/3138 6753/3139\nf 1699/3140 6753/3139 6752/3138\nf 6760/3141 6757/3142 6759/3143\nf 1700/3144 6759/3143 6757/3142\nf 6766/3145 6764/3146 6765/3147\nf 1702/3148 6765/3147 6764/3146\nf 6772/3149 6769/3150 6771/3151\nf 1703/3152 6771/3151 6769/3150\nf 1705/3153 6778/3154 6777/3155\nf 6779/3156 6777/3155 6778/3154\nf 1627/3157 6463/3158 6781/3159\nf 6784/3160 6781/3159 6463/3158\nf 6789/3161 6775/3162 6788/3163\nf 1706/3164 6788/3163 6775/3162\nf 6439/3165 6792/3166 1622/3167\nf 6790/3168 1622/3167 6792/3166\nf 6797/3169 1709/3170 6799/3171\nf 6798/3172 6799/3171 1709/3170\nf 6802/3173 1710/3174 6806/3175\nf 6804/3176 6806/3175 1710/3174\nf 5033/3177 1277/3178 6811/3179\nf 6810/3180 6811/3179 1277/3178\nf 6813/3181 1713/3182 6816/3183\nf 6815/3184 6816/3183 1713/3182\nf 6822/3185 5073/3186 6821/3187\nf 1287/3188 6821/3187 5073/3186\nf 6826/3189 6823/3190 6477/3191\nf 1631/3192 6477/3191 6823/3190\nf 1715/3193 6831/3194 6819/3195\nf 6832/3196 6819/3195 6831/3194\nf 1639/3197 6511/3198 6833/3199\nf 6836/3200 6833/3199 6511/3198\nf 6842/3201 1720/3202 6844/3203\nf 6843/3204 6844/3203 1720/3202\nf 1721/3205 6849/3206 6847/3207\nf 6850/3208 6847/3207 6849/3206\nf 6857/3209 6638/3210 6856/3211\nf 1670/3060 6856/3211 6638/3210\nf 6862/3212 6859/3213 6861/3214\nf 1724/3215 6861/3214 6859/3213\nf 6868/3216 6625/3217 6867/3218\nf 1667/3052 6867/3218 6625/3217\nf 6872/3219 6869/3220 6567/3221\nf 1653/3222 6567/3221 6869/3220\nf 6877/3223 6865/3224 6876/3225\nf 1726/3226 6876/3225 6865/3224\nf 1649/3227 6553/3228 6878/3229\nf 6880/3230 6878/3229 6553/3228\nf 6884/3231 1729/3232 6886/3233\nf 6885/3234 6886/3233 1729/3232\nf 6889/3235 1730/3236 6892/3237\nf 6891/3238 6892/3237 1730/3236\nf 1665/3239 6896/3240 6607/3241\nf 6897/3242 6607/3241 6896/3240\nf 6899/3243 1732/3244 6902/3245\nf 6901/3246 6902/3245 1732/3244\nf 6647/3247 1675/3248 6908/3249\nf 6907/3250 6908/3249 1675/3248\nf 6914/3251 6910/3252 6912/3253\nf 1734/3254 6912/3253 6910/3252\nf 6905/3255 1735/3256 6919/3257\nf 6918/3258 6919/3257 1735/3256\nf 6924/3259 6921/3260 6923/3261\nf 1737/3262 6923/3261 6921/3260\nf 1739/3263 6929/3264 6928/3265\nf 6930/3266 6928/3265 6929/3264\nf 1740/3267 6935/3268 6933/3269\nf 6936/3270 6933/3269 6935/3268\nf 6940/3271 1742/3272 6942/3273\nf 6941/3274 6942/3273 1742/3272\nf 6944/3275 1739/3263 6946/3276\nf 6928/3265 6946/3276 1739/3263\nf 6935/3268 1740/3267 6951/3277\nf 6950/3278 6951/3277 1740/3267\nf 6940/3271 6954/3279 1742/3272\nf 6952/3280 1742/3272 6954/3279\nf 6960/3281 1746/3282 6962/3283\nf 6961/3284 6962/3283 1746/3282\nf 6965/3285 1747/3286 6968/3287\nf 6967/3288 6968/3287 1747/3286\nf 6973/3289 1749/3290 6975/3291\nf 6974/3292 6975/3291 1749/3290\nf 6980/3293 6977/3294 6960/3281\nf 1746/3282 6960/3281 6977/3294\nf 6985/3295 6967/3288 6984/3296\nf 1747/3286 6984/3296 6967/3288\nf 6988/3297 6986/3298 6973/3289\nf 1749/3290 6973/3289 6986/3298\nf 6994/3299 6992/3300 6993/3301\nf 1753/3302 6993/3301 6992/3300\nf 1754/3303 6999/3304 6997/3305\nf 7000/3306 6997/3305 6999/3304\nf 1756/3307 7005/3308 7004/3309\nf 7006/3310 7004/3309 7005/3308\nf 7012/3311 7009/3312 7011/3313\nf 1757/3314 7011/3313 7009/3312\nf 7019/3315 7017/3316 7018/3317\nf 1759/3318 7018/3317 7017/3316\nf 7024/3319 7021/3320 4397/1650\nf 1115/1652 4397/1650 7021/3320\nf 7029/3321 7015/3322 7028/3323\nf 1760/3324 7028/3323 7015/3322\nf 4384/1641 7032/3325 1112/1642\nf 7030/3326 1112/1642 7032/3325\nf 7038/3327 1764/3328 7040/3329\nf 7039/3330 7040/3329 1764/3328\nf 7043/3331 1765/3332 7046/3333\nf 7045/3334 7046/3333 1765/3332\nf 4462/1689 1130/1691 7053/3335\nf 7052/3336 7053/3335 1130/1691\nf 7055/3337 1768/3338 7058/3339\nf 7057/3340 7058/3339 1768/3338\nf 7064/3341 4450/1683 7063/3342\nf 1127/1684 7063/3342 4450/1683\nf 7065/3343 1759/3318 7068/3344\nf 7017/3316 7068/3344 1759/3318\nf 7061/3345 1770/3346 7073/3347\nf 7072/3348 7073/3347 1770/3346\nf 7074/3349 1756/3307 7076/3350\nf 7004/3309 7076/3350 1756/3307\nf 7080/3351 1773/3352 7082/3353\nf 7081/3354 7082/3353 1773/3352\nf 7088/3355 7085/3356 7087/3357\nf 1774/3358 7087/3357 7085/3356\nf 1776/3359 7093/3360 7092/3361\nf 7094/3362 7092/3361 7093/3360\nf 7098/3363 7096/3364 7080/3351\nf 1773/3352 7080/3351 7096/3364\nf 7087/3357 1774/3358 7103/3365\nf 7102/3366 7103/3365 1774/3358\nf 7104/3367 1776/3359 7106/3368\nf 7092/3361 7106/3368 1776/3359\nf 1780/3369 1787/3 451/3370\nf 1786/4 451/3370 1787/3\nf 1793/3371 1794/7 116/3372\nf 1792/8 116/3372 1794/7\nf 1802/11 1801/12 1796/3373\nf 455/3374 1796/3373 1801/12\nf 1808/15 1807/16 1788/3375\nf 117/3376 1788/3375 1807/16\nf 1815/19 1814/20 1809/3377\nf 459/3378 1809/3377 1814/20\nf 1822/23 1820/24 1821/3379\nf 115/3380 1821/3379 1820/24\nf 1828/27 1827/28 1823/3381\nf 462/3382 1823/3381 1827/28\nf 1833/3383 1834/31 18/3384\nf 1832/32 18/3384 1834/31\nf 1841/35 1840/36 1835/3385\nf 466/3386 1835/3385 1840/36\nf 1847/3387 1848/39 120/3388\nf 1846/40 120/3388 1848/39\nf 1854/43 1853/44 1849/3389\nf 469/3390 1849/3389 1853/44\nf 1860/47 1859/48 1842/3391\nf 121/3392 1842/3391 1859/48\nf 1867/51 1866/52 1861/3393\nf 473/3394 1861/3393 1866/52\nf 1874/55 1872/56 1873/3395\nf 119/3396 1873/3395 1872/56\nf 1880/59 1879/60 1875/3397\nf 476/3398 1875/3397 1879/60\nf 1886/63 1884/64 1885/3399\nf 17/3400 1885/3399 1884/64\nf 1888/3401 1894/65 480/3402\nf 1893/67 480/3402 1894/65\nf 1900/69 1899/71 1803/3403\nf 114/3404 1803/3403 1899/71\nf 1902/3405 1908/73 484/3406\nf 1907/75 484/3406 1908/73\nf 1895/3407 1914/77 125/3408\nf 1913/79 125/3408 1914/77\nf 1921/83 1920/84 1915/3409\nf 488/3410 1915/3409 1920/84\nf 1928/87 1926/88 1927/3411\nf 124/3412 1927/3411 1926/88\nf 1929/3413 1933/89 490/3414\nf 1932/91 490/3414 1933/89\nf 1938/95 1937/96 1816/3415\nf 16/3416 1816/3415 1937/96\nf 1946/99 1945/100 1940/3417\nf 494/3418 1940/3417 1945/100\nf 1952/103 1951/104 1909/3419\nf 123/3420 1909/3419 1951/104\nf 1954/3421 1960/105 498/3422\nf 1959/107 498/3422 1960/105\nf 1966/111 1965/112 1947/3423\nf 129/3424 1947/3423 1965/112\nf 1973/113 1972/115 1967/3425\nf 502/3426 1967/3425 1972/115\nf 1980/119 1978/120 1979/3427\nf 128/3428 1979/3427 1978/120\nf 1985/123 1984/124 1981/3429\nf 504/3430 1981/3429 1984/124\nf 1990/127 1989/128 1922/3431\nf 21/3432 1922/3431 1989/128\nf 1997/131 1996/132 1991/3433\nf 508/3434 1991/3433 1996/132\nf 2004/135 2002/136 2003/3435\nf 132/3436 2003/3435 2002/136\nf 2010/139 2009/140 2005/3437\nf 511/3438 2005/3437 2009/140\nf 2016/143 2015/144 1998/3439\nf 133/3440 1998/3439 2015/144\nf 2017/3441 2023/145 515/3442\nf 2022/147 515/3442 2023/145\nf 2030/150 2028/149 2029/3443\nf 131/3444 2029/3443 2028/149\nf 2036/155 2035/156 2031/3445\nf 518/3446 2031/3445 2035/156\nf 2042/159 2040/160 2041/3447\nf 20/3448 2041/3447 2040/160\nf 2048/163 2047/164 2043/3449\nf 521/3450 2043/3449 2047/164\nf 2054/167 2053/168 1855/3451\nf 118/3452 1855/3451 2053/168\nf 2059/171 2058/172 2055/3453\nf 523/3454 2055/3453 2058/172\nf 2064/175 2063/176 2049/3455\nf 135/3456 2049/3455 2063/176\nf 2070/179 2069/180 2065/3457\nf 526/3458 2065/3457 2069/180\nf 2076/183 2074/184 2075/3459\nf 134/3460 2075/3459 2074/184\nf 2081/187 2080/188 2077/3461\nf 528/3462 2077/3461 2080/188\nf 2086/191 2085/192 1868/3463\nf 5/3464 1868/3463 2085/192\nf 2088/3465 2094/193 532/3466\nf 2093/195 532/3466 2094/193\nf 1961/3467 2100/197 127/3468\nf 2099/199 127/3468 2100/197\nf 2102/3469 2108/201 536/3470\nf 2107/203 536/3470 2108/201\nf 2095/3471 2114/205 139/3472\nf 2113/207 139/3472 2114/205\nf 2115/3473 2121/209 540/3474\nf 2120/211 540/3474 2121/209\nf 2128/215 2126/216 2127/3475\nf 138/3476 2127/3475 2126/216\nf 2129/3477 2133/217 542/3478\nf 2132/219 542/3478 2133/217\nf 2138/221 2137/223 1974/3479\nf 19/3480 1974/3479 2137/223\nf 2139/3481 2144/225 545/3482\nf 2143/227 545/3482 2144/225\nf 2011/3483 2150/229 130/3484\nf 2149/231 130/3484 2150/229\nf 2151/3485 2156/233 548/3486\nf 2155/235 548/3486 2156/233\nf 2145/3487 2162/237 142/3488\nf 2161/239 142/3488 2162/237\nf 2163/3489 2169/241 552/3490\nf 2168/243 552/3490 2169/241\nf 2175/3491 2176/245 141/3492\nf 2174/247 141/3492 2176/245\nf 2177/3493 2181/249 554/3494\nf 2180/251 554/3494 2181/249\nf 2024/3495 2186/253 6/3496\nf 2185/255 6/3496 2186/253\nf 2187/3497 2192/257 557/3498\nf 2191/259 557/3498 2192/257\nf 2197/262 131/3444 2198/264\nf 2028/149 2198/264 131/3444\nf 2199/3499 2204/265 560/3500\nf 2203/267 560/3500 2204/265\nf 2209/270 145/3501 2210/272\nf 2193/3502 2210/272 145/3501\nf 2216/274 564/3503 2217/276\nf 2211/3504 2217/276 564/3503\nf 2223/3505 2224/277 144/3506\nf 2222/279 144/3506 2224/277\nf 2225/3507 2229/281 566/3508\nf 2228/283 566/3508 2229/281\nf 2040/160 2234/285 20/3448\nf 2233/287 20/3448 2234/285\nf 2235/3509 2240/290 569/3510\nf 2239/289 569/3510 2240/290\nf 2074/184 2246/294 134/3460\nf 2245/293 134/3460 2246/294\nf 572/3511 2247/3512 2251/297\nf 2252/298 2251/297 2247/3512\nf 147/3513 2241/3514 2257/301\nf 2258/302 2257/301 2241/3514\nf 2265/306 2264/305 2259/3515\nf 575/3516 2259/3515 2264/305\nf 2270/310 1881/311 2269/3517\nf 119/3396 2269/3517 1881/311\nf 2275/314 2274/315 2271/3518\nf 576/3519 2271/3518 2274/315\nf 2278/317 1869/318 2085/192\nf 5/3464 2085/192 1869/318\nf 2287/321 2286/322 2280/3520\nf 581/3521 2280/3520 2286/322\nf 2293/3522 2294/323 151/3523\nf 2292/325 151/3523 2294/323\nf 2302/329 2301/330 2296/3524\nf 585/3525 2296/3524 2301/330\nf 2308/333 2307/334 2288/3526\nf 152/3527 2288/3526 2307/334\nf 2309/3528 2315/335 589/3529\nf 2314/337 589/3529 2315/335\nf 2321/3530 2322/339 150/3531\nf 2320/341 150/3531 2322/339\nf 2323/3532 2328/343 592/3533\nf 2327/345 592/3533 2328/343\nf 2333/3534 2334/347 25/3535\nf 2332/349 25/3535 2334/347\nf 2342/351 2341/353 2336/3536\nf 596/3537 2336/3536 2341/353\nf 2348/357 2347/358 2303/3538\nf 149/3539 2303/3538 2347/358\nf 2350/3540 2356/359 600/3541\nf 2355/361 600/3541 2356/359\nf 2343/3542 2362/363 156/3543\nf 2361/365 156/3543 2362/363\nf 2363/3544 2369/367 604/3545\nf 2368/369 604/3545 2369/367\nf 2376/373 2374/374 2375/3546\nf 155/3547 2375/3546 2374/374\nf 2377/3548 2381/375 606/3549\nf 2380/377 606/3549 2381/375\nf 2316/3550 2386/379 29/3551\nf 2385/381 29/3551 2386/379\nf 2393/385 2392/386 2387/3552\nf 610/3553 2387/3552 2392/386\nf 2399/3554 2400/387 159/3555\nf 2398/389 159/3555 2400/387\nf 2406/393 2405/394 2401/3556\nf 613/3557 2401/3556 2405/394\nf 2412/397 2411/398 2394/3558\nf 160/3559 2394/3558 2411/398\nf 2419/401 2418/402 2413/3560\nf 617/3561 2413/3560 2418/402\nf 2426/405 2424/406 2425/3562\nf 158/3563 2425/3562 2424/406\nf 2432/409 2431/410 2427/3564\nf 620/3565 2427/3564 2431/410\nf 2437/3566 2438/413 28/3567\nf 2436/414 28/3567 2438/413\nf 2439/3568 2445/415 624/3569\nf 2444/417 624/3569 2445/415\nf 2451/3570 2452/419 162/3571\nf 2450/421 162/3571 2452/419\nf 2453/3572 2457/423 626/3573\nf 2456/425 626/3573 2457/423\nf 2446/3574 2462/427 163/3575\nf 2461/429 163/3575 2462/427\nf 2463/3576 2468/431 629/3577\nf 2467/433 629/3577 2468/431\nf 2473/3578 2474/435 161/3579\nf 2472/437 161/3579 2474/435\nf 2475/3580 2480/439 632/3581\nf 2479/441 632/3581 2480/439\nf 2485/3582 2486/443 8/3583\nf 2484/445 8/3583 2486/443\nf 2488/3584 2494/447 636/3585\nf 2493/449 636/3585 2494/447\nf 2357/3586 2500/451 154/3587\nf 2499/453 154/3587 2500/451\nf 2502/3588 2508/455 640/3589\nf 2507/457 640/3589 2508/455\nf 2495/3590 2514/459 167/3591\nf 2513/461 167/3591 2514/459\nf 2515/3592 2521/463 644/3593\nf 2520/465 644/3593 2521/463\nf 2527/3594 2528/467 166/3595\nf 2526/469 166/3595 2528/467\nf 2529/3596 2533/471 646/3597\nf 2532/473 646/3597 2533/471\nf 2370/3598 2538/475 27/3599\nf 2537/477 27/3599 2538/475\nf 2544/481 2543/482 2539/3600\nf 649/3601 2539/3600 2543/482\nf 2550/485 2549/486 2407/3602\nf 157/3603 2407/3602 2549/486\nf 2556/489 2555/490 2551/3604\nf 652/3605 2551/3604 2555/490\nf 2562/493 2561/494 2545/3606\nf 170/3607 2545/3606 2561/494\nf 2563/3608 2569/495 656/3609\nf 2568/497 656/3609 2569/495\nf 2575/3610 2576/499 169/3611\nf 2574/501 169/3611 2576/499\nf 2581/505 2580/506 2577/3612\nf 658/3613 2577/3612 2580/506\nf 2586/509 2585/510 2420/3614\nf 7/3615 2420/3614 2585/510\nf 2588/3616 2595/514 663/3617\nf 2594/512 663/3617 2595/514\nf 2600/517 174/3618 2602/515\nf 2601/3619 2602/515 174/3618\nf 2603/3620 2609/519 666/3621\nf 2608/521 666/3621 2609/519\nf 2613/3622 2614/523 171/3623\nf 2593/513 171/3623 2614/523\nf 2622/527 2621/528 2616/3624\nf 669/3625 2616/3624 2621/528\nf 2626/530 2607/520 2091/3626\nf 136/3627 2091/3626 2607/520\nf 2628/3628 2635/531 673/3629\nf 2634/533 673/3629 2635/531\nf 2639/3630 2640/535 172/3631\nf 2620/525 172/3631 2640/535\nf 2648/537 2647/538 2642/3632\nf 676/3633 2642/3632 2647/538\nf 2652/540 2633/532 2651/3634\nf 173/3635 2651/3634 2633/532\nf 2653/3636 2659/541 680/3637\nf 2658/543 680/3637 2659/541\nf 2665/3638 2666/545 178/3639\nf 2664/547 178/3639 2666/545\nf 2667/3640 2672/549 683/3641\nf 2671/551 683/3641 2672/549\nf 2660/3642 2678/553 179/3643\nf 2677/555 179/3643 2678/553\nf 2679/3644 2685/557 687/3645\nf 2684/559 687/3645 2685/557\nf 2691/3646 2692/561 177/3647\nf 2690/563 177/3647 2692/561\nf 2693/3648 2698/565 690/3649\nf 2697/567 690/3649 2698/565\nf 2703/3650 2704/569 33/3651\nf 2702/571 33/3651 2704/569\nf 693/3652 2705/3653 2709/573\nf 2710/574 2709/573 2705/3653\nf 2716/578 2715/577 2690/563\nf 177/3647 2690/563 2715/577\nf 696/3654 2717/3655 2721/583\nf 2722/581 2721/583 2717/3655\nf 182/3656 2711/3657 2727/585\nf 2728/586 2727/585 2711/3657\nf 2729/3658 2735/589 700/3659\nf 2734/591 700/3659 2735/589\nf 181/3660 2741/3661 2740/593\nf 2742/594 2740/593 2741/3661\nf 702/3662 2743/3663 2746/597\nf 2747/598 2746/597 2743/3663\nf 2752/603 2751/604 2702/571\nf 33/3651 2702/571 2751/604\nf 706/3664 2753/3665 2758/605\nf 2759/606 2758/605 2753/3665\nf 185/3666 2765/3667 2764/609\nf 2766/610 2764/609 2765/3667\nf 2767/3668 2772/613 708/3669\nf 2771/615 708/3669 2772/613\nf 2723/3670 2776/618 180/3671\nf 2757/608 180/3671 2776/618\nf 711/3672 2778/3673 2783/619\nf 2784/620 2783/619 2778/3673\nf 162/3674 2477/3675 2770/614\nf 2788/623 2770/614 2477/3675\nf 2790/3676 2797/627 715/3677\nf 2796/628 715/3677 2797/627\nf 2801/3678 2802/629 183/3679\nf 2782/622 183/3679 2802/629\nf 2804/3680 2810/631 718/3681\nf 2809/632 718/3681 2810/631\nf 2813/3682 2814/633 184/3683\nf 2795/625 184/3683 2814/633\nf 2821/637 2820/638 2815/3684\nf 722/3685 2815/3684 2820/638\nf 2827/3686 2828/639 189/3687\nf 2826/641 189/3687 2828/639\nf 2829/3688 2834/643 725/3689\nf 2833/645 725/3689 2834/643\nf 2822/3690 2840/647 190/3691\nf 2839/649 190/3691 2840/647\nf 729/3692 2841/3693 2846/654\nf 2847/653 2846/654 2841/3693\nf 2853/3694 2854/656 188/3695\nf 2852/655 188/3695 2854/656\nf 2855/3696 2860/659 732/3697\nf 2859/661 732/3697 2860/659\nf 2865/3698 2866/663 39/3699\nf 2864/665 39/3699 2866/663\nf 2872/669 2871/670 2867/3700\nf 735/3701 2867/3700 2871/670\nf 2878/673 2877/674 2835/3702\nf 187/3703 2835/3702 2877/674\nf 2884/677 2883/678 2879/3704\nf 738/3705 2879/3704 2883/678\nf 2890/681 2889/682 2873/3706\nf 193/3707 2873/3706 2889/682\nf 2897/684 2896/683 2891/3708\nf 742/3709 2891/3708 2896/683\nf 192/3710 2903/3711 2902/687\nf 2904/688 2902/687 2903/3711\nf 2909/693 2908/694 2905/3712\nf 744/3713 2905/3712 2908/694\nf 2914/697 2913/698 2848/3714\nf 40/3715 2848/3714 2913/698\nf 2920/701 2919/702 2915/3716\nf 747/3717 2915/3716 2919/702\nf 2926/705 2925/706 2885/3718\nf 191/3719 2885/3718 2925/706\nf 750/3720 2927/3721 2931/709\nf 2932/707 2931/709 2927/3721\nf 2938/713 2937/714 2921/3722\nf 196/3723 2921/3722 2937/714\nf 2945/716 2944/715 2939/3724\nf 754/3725 2939/3724 2944/715\nf 195/3726 2951/3727 2950/719\nf 2952/720 2950/719 2951/3727\nf 2957/725 2956/726 2953/3728\nf 756/3729 2953/3728 2956/726\nf 38/3730 2898/3731 2961/727\nf 2962/728 2961/727 2898/3731\nf 2963/3732 2968/731 759/3733\nf 2967/733 759/3733 2968/731\nf 2933/3734 2974/735 194/3735\nf 2973/737 194/3735 2974/735\nf 2975/3736 2980/739 762/3737\nf 2979/741 762/3737 2980/739\nf 2969/3738 2986/743 199/3739\nf 2985/745 199/3739 2986/743\nf 2987/3740 2993/747 766/3741\nf 2992/749 766/3741 2993/747\nf 3000/753 2998/754 2999/3742\nf 198/3743 2999/3742 2998/754\nf 3001/3744 3005/755 768/3745\nf 3004/757 768/3745 3005/755\nf 41/3746 2946/3747 3009/759\nf 3010/760 3009/759 2946/3747\nf 3017/765 3016/766 3011/3748\nf 772/3749 3011/3748 3016/766\nf 3024/769 3022/770 3023/3750\nf 202/3751 3023/3750 3022/770\nf 3030/773 3029/774 3025/3752\nf 775/3753 3025/3752 3029/774\nf 3036/776 3035/775 3018/3754\nf 203/3755 3018/3754 3035/775\nf 779/3756 3037/3757 3042/779\nf 3043/780 3042/779 3037/3757\nf 201/3758 3049/3759 3048/783\nf 3050/784 3048/783 3049/3759\nf 3056/789 3055/790 3051/3760\nf 782/3761 3051/3760 3055/790\nf 3062/793 3060/794 3061/3762\nf 45/3763 3061/3762 3060/794\nf 3063/3764 3068/795 785/3765\nf 3067/797 785/3765 3068/795\nf 3073/800 200/3766 3074/802\nf 3031/3767 3074/802 200/3766\nf 3075/3768 3080/803 788/3769\nf 3079/805 788/3769 3080/803\nf 3069/3770 3086/807 206/3771\nf 3085/809 206/3771 3086/807\nf 3087/3772 3093/811 792/3773\nf 3092/813 792/3773 3093/811\nf 3098/817 205/3774 3100/815\nf 3099/3775 3100/815 205/3774\nf 3104/820 794/3776 3105/822\nf 3101/3777 3105/822 794/3776\nf 44/3778 3044/3779 3109/823\nf 3110/824 3109/823 3044/3779\nf 3116/829 3115/830 3111/3780\nf 797/3781 3111/3780 3115/830\nf 3081/3782 3122/833 204/3783\nf 3121/834 204/3783 3122/833\nf 3128/837 3127/838 3123/3784\nf 800/3785 3123/3784 3127/838\nf 3134/841 3133/842 3117/3786\nf 209/3787 3117/3786 3133/842\nf 3140/845 804/3788 3141/843\nf 3135/3789 3141/843 804/3788\nf 3147/3790 3148/847 208/3791\nf 3146/849 208/3791 3148/847\nf 3149/3792 3153/851 806/3793\nf 3152/853 806/3793 3153/851\nf 3094/3794 3158/855 46/3795\nf 3157/857 46/3795 3158/855\nf 3159/3796 3164/859 809/3797\nf 3163/861 809/3797 3164/859\nf 3129/3798 3170/863 207/3799\nf 3169/865 207/3799 3170/863\nf 3171/3800 3176/867 812/3801\nf 3175/869 812/3801 3176/867\nf 3165/3802 3182/871 212/3803\nf 3181/873 212/3803 3182/871\nf 3183/3804 3189/875 816/3805\nf 3188/877 816/3805 3189/875\nf 3195/3806 3196/879 211/3807\nf 3194/881 211/3807 3196/879\nf 3197/3808 3201/883 818/3809\nf 3200/885 818/3809 3201/883\nf 3205/888 43/3810 3206/890\nf 3142/3811 3206/890 43/3810\nf 822/3812 3207/3813 3212/891\nf 3213/892 3212/891 3207/3813\nf 215/3814 3219/3815 3218/895\nf 3220/896 3218/895 3219/3815\nf 3226/900 3225/899 3221/3816\nf 825/3817 3221/3816 3225/899\nf 3232/905 3231/906 3214/3818\nf 216/3819 3214/3818 3231/906\nf 3239/909 3238/910 3233/3820\nf 829/3821 3233/3820 3238/910\nf 3246/913 3244/914 3245/3822\nf 214/3823 3245/3822 3244/914\nf 832/3824 3247/3825 3251/915\nf 3252/916 3251/915 3247/3825\nf 50/3826 3257/3827 3256/919\nf 3258/920 3256/919 3257/3827\nf 3259/3828 3265/923 836/3829\nf 3264/925 836/3829 3265/923\nf 3271/1192 3272/927 219/3830\nf 3270/929 219/3830 3272/927\nf 3273/3831 3278/931 839/3832\nf 3277/933 839/3832 3278/931\nf 3283/936 220/3833 3284/938\nf 3266/3834 3284/938 220/3833\nf 3290/940 843/3835 3291/942\nf 3285/3836 3291/942 843/3835\nf 3296/944 218/3837 3298/946\nf 3297/3838 3298/946 218/3837\nf 3303/948 846/3839 3304/950\nf 3299/3840 3304/950 846/3839\nf 3308/952 59/3841 3310/954\nf 3309/1202 3310/954 59/3841\nf 3311/3842 3316/955 849/3843\nf 3315/957 849/3843 3316/955\nf 3321/960 217/3844 3322/962\nf 3279/3845 3322/962 217/3844\nf 3323/3846 3328/963 852/3847\nf 3327/965 852/3847 3328/963\nf 3317/3848 3334/967 223/3849\nf 3333/969 223/3849 3334/967\nf 3340/973 856/3850 3341/971\nf 3335/3851 3341/971 856/3850\nf 3348/977 3346/978 3347/3852\nf 222/3853 3347/3852 3346/978\nf 3349/3854 3353/979 858/3855\nf 3352/981 858/3855 3353/979\nf 58/3856 3292/3857 3357/986\nf 3358/985 3357/986 3292/3857\nf 3359/3858 3364/990 861/3859\nf 3363/988 861/3859 3364/990\nf 3329/3860 3370/991 221/3861\nf 3369/993 221/3861 3370/991\nf 3371/3862 3376/995 864/3863\nf 3375/997 864/3863 3376/995\nf 3365/3864 3382/1002 226/3865\nf 3381/1000 226/3865 3382/1002\nf 3388/1004 868/3866 3389/1006\nf 3383/3867 3389/1006 868/3866\nf 3395/3868 3396/1007 225/3869\nf 3394/1009 225/3869 3396/1007\nf 3397/3870 3401/1011 870/3871\nf 3400/1013 870/3871 3401/1011\nf 3342/3872 3406/1015 48/3873\nf 3405/1017 48/3873 3406/1015\nf 874/3874 3407/3875 3412/1019\nf 3413/1020 3412/1019 3407/3875\nf 229/3876 3419/3877 3418/1023\nf 3420/1024 3418/1023 3419/3877\nf 3426/1029 3425/1030 3421/3878\nf 877/3879 3421/3878 3425/1030\nf 3432/1033 3431/1034 3414/3880\nf 230/3881 3414/3880 3431/1034\nf 3439/1037 3438/1038 3433/3882\nf 881/3883 3433/3882 3438/1038\nf 3446/1041 3444/1042 3445/3884\nf 228/3885 3445/3884 3444/1042\nf 3452/1045 3451/1046 3447/3886\nf 884/3887 3447/3886 3451/1046\nf 55/3888 3457/3889 3456/1050\nf 3458/1049 3456/1050 3457/3889\nf 3466/1053 3465/1054 3460/3890\nf 888/3891 3460/3890 3465/1054\nf 3472/1056 3471/1055 3427/3892\nf 227/3893 3427/3892 3471/1055\nf 3474/3894 3480/1059 892/3895\nf 3479/1061 892/3895 3480/1059\nf 3486/1063 3485/1065 3467/3896\nf 234/3897 3467/3896 3485/1065\nf 3487/3898 3493/1067 896/3899\nf 3492/1069 896/3899 3493/1067\nf 233/3900 3499/3901 3498/1072\nf 3500/1074 3498/1072 3499/3901\nf 898/3902 3501/3903 3504/1075\nf 3505/1076 3504/1075 3501/3903\nf 54/3904 3440/3905 3509/1079\nf 3510/1080 3509/1079 3440/3905\nf 3512/3906 3518/1083 902/3907\nf 3517/1085 902/3907 3518/1083\nf 3481/3908 3524/1087 232/3909\nf 3523/1089 232/3909 3524/1087\nf 3526/3910 3532/1094 906/3911\nf 3531/1092 906/3911 3532/1094\nf 3519/3912 3538/1095 238/3913\nf 3537/1097 238/3913 3538/1095\nf 3539/3914 3545/1102 910/3915\nf 3544/1100 910/3915 3545/1102\nf 3550/1105 237/3916 3552/1103\nf 3551/3917 3552/1103 237/3916\nf 3556/1108 912/3918 3557/1110\nf 3553/3919 3557/1110 912/3918\nf 3561/1112 56/3920 3562/1114\nf 3494/3921 3562/1114 56/3920\nf 3569/1117 3568/1118 3563/3922\nf 916/3923 3563/3922 3568/1118\nf 3576/1121 3574/1122 3575/3924\nf 239/3925 3575/3924 3574/1122\nf 918/3926 3577/3927 3580/1124\nf 3581/1123 3580/1124 3577/3927\nf 240/3928 3570/3929 3585/1125\nf 3586/1126 3585/1125 3570/3929\nf 3587/3930 3592/1129 920/3931\nf 3591/1130 920/3931 3592/1129\nf 3595/3932 3596/1131 237/3916\nf 3558/1133 237/3916 3596/1131\nf 3597/3933 3602/1134 922/3934\nf 3601/1136 922/3934 3602/1134\nf 3605/3935 3606/1138 53/3936\nf 3547/1140 53/3936 3606/1138\nf 3607/3937 3613/1141 926/3938\nf 3612/1143 926/3938 3613/1141\nf 243/3939 3619/3940 3618/1148\nf 3620/1147 3618/1148 3619/3940\nf 3621/3941 3626/1149 929/3942\nf 3625/1151 929/3942 3626/1149\nf 244/3943 3614/3944 3631/1153\nf 3632/1154 3631/1153 3614/3944\nf 933/3945 3633/3946 3638/1157\nf 3639/1158 3638/1157 3633/3946\nf 242/3947 3645/3948 3644/1161\nf 3646/1162 3644/1161 3645/3948\nf 936/3949 3647/3950 3651/1165\nf 3652/1166 3651/1165 3647/3950\nf 3658/1171 3656/1172 3657/3951\nf 57/3952 3657/3951 3656/1172\nf 3659/3953 3664/1173 939/3954\nf 3663/1175 939/3954 3664/1173\nf 241/3955 3627/3956 3669/1178\nf 3670/1180 3669/1178 3627/3956\nf 941/3957 3671/3958 3674/1181\nf 3675/1182 3674/1181 3671/3958\nf 3679/1187 245/3959 3680/1186\nf 3665/3960 3680/1186 245/3959\nf 3686/1189 3685/1190 3681/3961\nf 943/3962 3681/3961 3685/1190\nf 3690/1194 3271/1192 3689/3963\nf 219/3830 3689/3963 3271/1192\nf 3695/1198 3694/1196 3691/3964\nf 944/3965 3691/3964 3694/1196\nf 59/3841 3640/3966 3309/1202\nf 3698/1201 3309/1202 3640/3966\nf 3699/3967 3704/1203 947/3968\nf 3703/1205 947/3968 3704/1203\nf 3346/978 3710/1207 222/3853\nf 3709/1209 222/3853 3710/1207\nf 3715/1212 950/3969 3716/1214\nf 3711/3970 3716/1214 950/3969\nf 3705/3971 3722/1215 248/3972\nf 3721/1217 248/3972 3722/1215\nf 3723/3973 3729/1222 954/3974\nf 3728/1220 954/3974 3729/1222\nf 3735/3975 3736/1223 247/3976\nf 3734/1225 247/3976 3736/1223\nf 3737/3977 3741/1227 956/3978\nf 3740/1229 956/3978 3741/1227\nf 3745/1232 58/3856 3746/1234\nf 3357/986 3746/1234 58/3856\nf 960/3979 3747/3980 3752/1235\nf 3753/1236 3752/1235 3747/3980\nf 3759/3981 3760/1239 249/3982\nf 3758/1241 249/3982 3760/1239\nf 962/3983 3761/3984 3764/1243\nf 3765/1244 3764/1243 3761/3984\nf 250/3985 3754/3986 3769/1245\nf 3770/1246 3769/1245 3754/3986\nf 964/3987 3771/3988 3775/1249\nf 3776/1250 3775/1249 3771/3988\nf 3779/3989 3780/1251 247/3976\nf 3742/1253 247/3976 3780/1251\nf 3781/3990 3786/1254 966/3991\nf 3785/1256 966/3991 3786/1254\nf 3789/3992 3790/1258 60/3993\nf 3731/1260 60/3993 3790/1258\nf 3799/1263 3798/1264 3792/3994\nf 971/3995 3792/3994 3798/1264\nf 3806/1267 3804/1268 3805/3996\nf 253/3997 3805/3996 3804/1268\nf 975/3998 3808/3999 3814/1269\nf 3815/1270 3814/1269 3808/3999\nf 3819/4000 3820/1273 251/4001\nf 3797/1261 251/4001 3820/1273\nf 3822/4002 3828/1275 978/4003\nf 3827/1276 978/4003 3828/1275\nf 3831/4004 3832/1277 252/4005\nf 3813/1272 252/4005 3832/1277\nf 3840/1281 3839/1282 3834/4006\nf 982/4007 3834/4006 3839/1282\nf 3846/1285 3845/1286 2491/4008\nf 164/4009 2491/4008 3845/1286\nf 3854/1289 3853/1290 3848/4010\nf 986/4011 3848/4010 3853/1290\nf 3860/1293 3859/1294 3841/4012\nf 258/4013 3841/4012 3859/1294\nf 3867/1297 3866/1298 3861/4014\nf 990/4015 3861/4014 3866/1298\nf 3874/1301 3872/1302 3873/4016\nf 257/4017 3873/4016 3872/1302\nf 3879/1305 3878/1306 3875/4018\nf 992/4019 3875/4018 3878/1306\nf 3884/1309 3883/1310 2505/4020\nf 9/4021 2505/4020 3883/1310\nf 3885/4022 3890/1314 995/4023\nf 3889/1312 995/4023 3890/1314\nf 3896/1316 3895/1315 3855/4024\nf 256/4025 3855/4024 3895/1315\nf 3900/1321 997/4026 3901/1319\nf 3897/4027 3901/1319 997/4026\nf 260/4028 3891/4029 3905/1323\nf 3906/1324 3905/1323 3891/4029\nf 1000/4030 3907/4031 3911/1327\nf 3912/1328 3911/1327 3907/4031\nf 259/4032 3917/4033 3916/1331\nf 3918/1332 3916/1331 3917/4033\nf 1002/4034 3919/4035 3922/1335\nf 3923/1336 3922/1335 3919/4035\nf 3928/1341 3927/1342 3868/4036\nf 11/4037 3868/4036 3927/1342\nf 3934/1346 1006/4038 3935/1345\nf 3929/4039 3935/1345 1006/4038\nf 3940/1348 263/4040 3942/1350\nf 3941/4041 3942/1350 263/4040\nf 3948/1353 3947/1354 3943/4042\nf 1009/4043 3943/4042 3947/1354\nf 3954/1357 3953/1358 3936/4044\nf 264/4045 3936/4044 3953/1358\nf 3961/1361 3960/1362 3955/4046\nf 1013/4047 3955/4046 3960/1362\nf 262/4048 3967/4049 3966/1363\nf 3968/1364 3966/1363 3967/4049\nf 3969/4050 3974/1367 1016/4051\nf 3973/1369 1016/4051 3974/1367\nf 3979/4052 3980/1374 64/4053\nf 3978/1372 64/4053 3980/1374\nf 3988/1376 3987/1375 3982/4054\nf 1020/4055 3982/4054 3987/1375\nf 262/4048 3966/1363 3993/1382\nf 3994/1381 3993/1382 3966/1363\nf 3996/4056 4002/1383 1024/4057\nf 4001/1385 1024/4057 4002/1383\nf 268/4058 3989/4059 4007/1389\nf 4008/1387 4007/1389 3989/4059\nf 1028/4060 4009/4061 4014/1391\nf 4015/1392 4014/1391 4009/4061\nf 4021/4062 4022/1395 267/4063\nf 4020/1397 267/4063 4022/1395\nf 4026/1400 1030/4064 4027/1402\nf 4023/4065 4027/1402 1030/4064\nf 3978/1372 4032/1403 64/4053\nf 4031/1405 64/4053 4032/1403\nf 4040/1409 4039/1410 4034/4066\nf 1034/4067 4034/4066 4039/1410\nf 4046/1413 4045/1414 2673/4068\nf 176/4069 2673/4068 4045/1414\nf 4054/1417 4053/1418 4048/4070\nf 1038/4071 4048/4070 4053/1418\nf 4060/1421 4059/1422 4041/4072\nf 271/4073 4041/4072 4059/1422\nf 4067/1425 4066/1426 4061/4074\nf 1041/4075 4061/4074 4066/1426\nf 4072/1429 2295/1430 4071/4076\nf 148/4077 4071/4076 2295/1430\nf 4077/1433 4076/1434 4073/4078\nf 1042/4079 4073/4078 4076/1434\nf 4080/1437 2279/1438 2686/4080\nf 3/4081 2686/4080 2279/1438\nf 4085/1440 1045/4082 4086/1442\nf 4081/4083 4086/1442 1045/4082\nf 2619/4084 4092/1443 172/4085\nf 4091/1445 172/4085 4092/1443\nf 4093/4086 4098/1447 1048/4087\nf 4097/1449 1048/4087 4098/1447\nf 4103/1452 273/4088 4104/1454\nf 4087/4089 4104/1454 273/4088\nf 4105/4090 4111/1455 1051/4091\nf 4110/1457 1051/4091 4111/1455\nf 269/4092 4115/4093 4047/1460\nf 4116/1462 4047/1460 4115/4093\nf 1052/4094 4117/4095 4120/1463\nf 4121/1464 4120/1463 4117/4095\nf 2630/4096 4124/1468 12/4097\nf 4033/1467 12/4097 4124/1468\nf 4125/4098 4130/1471 1055/4099\nf 4129/1473 1055/4099 4130/1471\nf 4099/4100 4136/1475 272/4101\nf 4135/1477 272/4101 4136/1475\nf 4141/1481 4140/1482 4137/4102\nf 1057/4103 4137/4102 4140/1482\nf 4131/4104 4146/1483 275/4105\nf 4145/1485 275/4105 4146/1483\nf 4151/1488 1060/4106 4152/1490\nf 4147/4107 4152/1490 1060/4106\nf 4156/1492 274/4108 4158/1494\nf 4157/4109 4158/1494 274/4108\nf 4159/4110 4163/1495 1062/4111\nf 4162/1497 1062/4111 4163/1495\nf 4112/4112 4168/1499 67/4113\nf 4167/1501 67/4113 4168/1499\nf 1066/4114 4170/4115 4175/1506\nf 4176/1505 4175/1506 4170/4115\nf 4182/1509 4181/1510 4055/4116\nf 270/4117 4055/4116 4181/1510\nf 4189/1513 4188/1514 4184/4118\nf 1069/4119 4184/4118 4188/1514\nf 4194/1517 4193/1518 4177/4120\nf 277/4121 4177/4120 4193/1518\nf 4195/4122 4200/1519 1071/4123\nf 4199/1521 1071/4123 4200/1519\nf 4203/4124 4204/1523 153/4125\nf 2349/1525 153/4125 4204/1523\nf 4209/1529 4208/1530 4205/4126\nf 1072/4127 4205/4126 4208/1530\nf 4212/1533 2335/1534 4068/4128\nf 14/4129 4068/4128 2335/1534\nf 1076/4130 4213/4131 4218/1536\nf 4219/1538 4218/1536 4213/4131\nf 4226/1541 4224/1542 4225/4132\nf 278/4133 4225/4132 4224/1542\nf 4230/1544 1078/4134 4231/1546\nf 4227/4135 4231/1546 1078/4134\nf 4220/4136 4236/1547 279/4137\nf 4235/1549 279/4137 4236/1547\nf 4237/4138 4242/1551 1080/4139\nf 4241/1553 1080/4139 4242/1551\nf 4245/4140 4246/1555 267/4063\nf 4028/1557 267/4063 4246/1555\nf 4247/4141 4252/1558 1082/4142\nf 4251/1560 1082/4142 4252/1558\nf 4255/4143 4256/1562 65/4144\nf 4017/1564 65/4144 4256/1562\nf 1085/4145 4257/4146 4261/1568\nf 4262/1567 4261/1568 4257/4146\nf 4268/1571 4267/1572 3949/4147\nf 261/4148 3949/4147 4267/1572\nf 4273/1575 1088/4149 4274/1573\nf 4269/4150 4274/1573 1088/4149\nf 4280/1578 4279/1577 4263/4151\nf 281/4152 4263/4151 4279/1577\nf 4287/1581 4286/1583 4281/4153\nf 1091/4154 4281/4153 4286/1583\nf 4292/1587 3995/1588 4291/4155\nf 265/4156 4291/4155 3995/1588\nf 4297/1591 4296/1592 4293/4157\nf 1092/4158 4293/4157 4296/1592\nf 3962/4159 4300/1595 63/4160\nf 3981/1596 63/4160 4300/1595\nf 4305/1598 1095/4161 4306/1600\nf 4301/4162 4306/1600 1095/4161\nf 4275/4163 4312/1604 280/4164\nf 4311/1602 280/4164 4312/1604\nf 1097/4165 4313/4166 4317/1608\nf 4318/1607 4317/1608 4313/4166\nf 4322/1610 4304/1599 4249/4167\nf 278/4133 4249/4167 4304/1599\nf 4327/1611 4326/1612 4323/4168\nf 1098/4169 4323/4168 4326/1612\nf 4316/1605 266/4170 4330/1613\nf 4003/4171 4330/1613 266/4170\nf 1102/4172 4331/4173 4336/1618\nf 4337/1617 4336/1618 4331/4173\nf 284/4174 4343/4175 4342/1619\nf 4344/1620 4342/1619 4343/4175\nf 4346/4176 4352/1623 1105/4177\nf 4351/1625 1105/4177 4352/1623\nf 2998/754 4356/1627 198/3743\nf 4335/1615 198/3743 4356/1627\nf 4364/1629 4363/1630 4358/4178\nf 1108/4179 4358/4178 4363/1630\nf 283/4180 4367/4181 4350/1624\nf 4368/1631 4350/1624 4367/4181\nf 4373/1634 1111/4182 4374/1636\nf 4369/4183 4374/1636 1111/4182\nf 4379/1639 195/3726 4380/1637\nf 2950/719 4380/1637 195/3726\nf 4381/4184 4386/1643 1114/4185\nf 4385/1644 1114/4185 4386/1643\nf 4375/4186 4392/1645 288/4187\nf 4391/1647 288/4187 4392/1645\nf 4393/4188 4399/1649 1118/4189\nf 4398/1651 1118/4189 4399/1649\nf 4405/4190 4406/1653 287/4191\nf 4404/1655 287/4191 4406/1653\nf 4407/4192 4411/1657 1120/4193\nf 4410/1659 1120/4193 4411/1657\nf 4415/1662 38/3730 4416/1664\nf 2961/727 4416/1664 38/3730\nf 1124/4194 4417/4195 4422/1665\nf 4423/1666 4422/1665 4417/4195\nf 290/4196 4429/4197 4428/1669\nf 4430/1670 4428/1669 4429/4197\nf 1126/4198 4431/4199 4434/1673\nf 4435/1674 4434/1673 4431/4199\nf 291/4200 4424/4201 4439/1675\nf 4440/1676 4439/1675 4424/4201\nf 1129/4202 4441/4203 4445/1679\nf 4446/1680 4445/1679 4441/4203\nf 289/4204 4451/4205 4450/1683\nf 4452/1681 4450/1683 4451/4205\nf 1132/4206 4453/4207 4457/1685\nf 4458/1686 4457/1685 4453/4207\nf 70/4208 4463/4209 4462/1689\nf 4464/1690 4462/1689 4463/4209\nf 4465/4210 4470/1693 1135/4211\nf 4469/1695 1135/4211 4470/1693\nf 188/3695 2852/655 4475/1700\nf 4476/1699 4475/1700 2852/655\nf 1138/4212 4478/4213 4483/1701\nf 4484/1702 4483/1701 4478/4213\nf 290/4196 4455/4214 4468/1694\nf 4488/1705 4468/1694 4455/4214\nf 4489/4215 4494/1707 1140/4216\nf 4493/1708 1140/4216 4494/1707\nf 4497/4217 4498/1710 292/4218\nf 4482/1704 292/4218 4498/1710\nf 4499/4219 4505/1712 1144/4220\nf 4504/1711 1144/4220 4505/1712\nf 4512/1717 4510/1718 4511/4221\nf 296/4222 4511/4221 4510/1718\nf 1147/4223 4513/4224 4517/1719\nf 4518/1720 4517/1719 4513/4224\nf 297/4225 4506/4226 4523/1723\nf 4524/1724 4523/1723 4506/4226\nf 1151/4227 4525/4228 4530/1730\nf 4531/1729 4530/1730 4525/4228\nf 295/4229 4537/4230 4536/1731\nf 4538/1732 4536/1731 4537/4230\nf 4544/1737 4543/1738 4539/4231\nf 1154/4232 4539/4231 4543/1738\nf 4550/1741 4548/1742 4549/4233\nf 72/4234 4549/4233 4548/1742\nf 4556/1745 4555/1746 4551/4235\nf 1157/4236 4551/4235 4555/1746\nf 4562/1749 4561/1750 4519/4237\nf 294/4238 4519/4237 4561/1750\nf 4568/1753 4567/1754 4563/4239\nf 1160/4240 4563/4239 4567/1754\nf 4574/1757 4573/1758 4557/4241\nf 300/4242 4557/4241 4573/1758\nf 4581/1761 4580/1762 4575/4243\nf 1164/4244 4575/4243 4580/1762\nf 4588/1765 4586/1766 4587/4245\nf 299/4246 4587/4245 4586/1766\nf 4593/1769 4592/1770 4589/4247\nf 1166/4248 4589/4247 4592/1770\nf 4598/1773 4597/1774 4532/4249\nf 82/4250 4532/4249 4597/1774\nf 4599/4251 4605/1775 1170/4252\nf 4604/1777 1170/4252 4605/1775\nf 4611/4253 4612/1779 303/4254\nf 4610/1781 303/4254 4612/1779\nf 1173/4255 4613/4256 4617/1783\nf 4618/1784 4617/1783 4613/4256\nf 4606/4257 4624/1787 304/4258\nf 4623/1789 304/4258 4624/1787\nf 1177/4259 4625/4260 4630/1791\nf 4631/1792 4630/1791 4625/4260\nf 302/4261 4637/4262 4636/1795\nf 4638/1796 4636/1795 4637/4262\nf 4639/4263 4644/1799 1180/4264\nf 4643/1801 1180/4264 4644/1799\nf 4649/4265 4650/1803 80/4266\nf 4648/1805 80/4266 4650/1803\nf 1184/4267 4651/4268 4656/1807\nf 4657/1808 4656/1807 4651/4268\nf 4663/4269 4664/1812 307/4270\nf 4662/1811 307/4270 4664/1812\nf 1187/4271 4665/4272 4669/1815\nf 4670/1816 4669/1815 4665/4272\nf 308/4273 4658/4274 4675/1819\nf 4676/1820 4675/1819 4658/4274\nf 1191/4275 4677/4276 4682/1823\nf 4683/1824 4682/1823 4677/4276\nf 4689/4277 4690/1827 306/4278\nf 4688/1829 306/4278 4690/1827\nf 4691/4279 4696/1832 1194/4280\nf 4695/1831 1194/4280 4696/1832\nf 4701/4281 4702/1835 74/4282\nf 4700/1837 74/4282 4702/1835\nf 1198/4283 4704/4284 4709/1839\nf 4710/1840 4709/1839 4704/4284\nf 305/4285 4671/4286 4715/1843\nf 4716/1844 4715/1843 4671/4286\nf 1202/4287 4718/4288 4723/1847\nf 4724/1848 4723/1847 4718/4288\nf 312/4289 4711/4290 4729/1851\nf 4730/1852 4729/1851 4711/4290\nf 1206/4291 4731/4292 4736/1858\nf 4737/1857 4736/1858 4731/4292\nf 4743/4293 4744/1859 311/4294\nf 4742/1861 311/4294 4744/1859\nf 1208/4295 4745/4296 4748/1863\nf 4749/1864 4748/1863 4745/4296\nf 83/4297 4684/4298 4753/1867\nf 4754/1868 4753/1867 4684/4298\nf 1211/4299 4755/4300 4759/1874\nf 4760/1873 4759/1874 4755/4300\nf 301/4301 4619/4302 4765/1875\nf 4766/1876 4765/1875 4619/4302\nf 1214/4303 4767/4304 4771/1879\nf 4772/1880 4771/1879 4767/4304\nf 314/4305 4761/4306 4777/1883\nf 4778/1884 4777/1883 4761/4306\nf 1217/4307 4779/4308 4784/1887\nf 4785/1888 4784/1887 4779/4308\nf 309/4309 4789/4310 4717/1891\nf 4790/1892 4717/1891 4789/4310\nf 1218/4311 4791/4312 4794/1895\nf 4795/1896 4794/1895 4791/4312\nf 85/4313 4632/4314 4703/1899\nf 4798/1900 4703/1899 4632/4314\nf 4799/4315 4805/1903 1222/4316\nf 4804/1905 1222/4316 4805/1903\nf 4811/4317 4812/1907 316/4318\nf 4810/1909 316/4318 4812/1907\nf 4813/4319 4818/1911 1225/4320\nf 4817/1913 1225/4320 4818/1911\nf 4806/4321 4824/1915 317/4322\nf 4823/1917 317/4322 4824/1915\nf 1228/4323 4825/4324 4830/1919\nf 4831/1920 4830/1919 4825/4324\nf 4835/4325 4836/1923 137/4326\nf 2119/210 137/4326 4836/1923\nf 4837/4327 4842/1925 1230/4328\nf 4841/1927 1230/4328 4842/1925\nf 4845/4329 4846/1929 15/4330\nf 2106/202 15/4330 4846/1929\nf 4847/4331 4852/1931 1233/4332\nf 4851/1933 1233/4332 4852/1931\nf 4819/4333 4858/1935 315/4334\nf 4857/1937 315/4334 4858/1935\nf 4859/4335 4864/1939 1236/4336\nf 4863/1941 1236/4336 4864/1939\nf 4853/4337 4870/1943 319/4338\nf 4869/1945 319/4338 4870/1943\nf 4871/4339 4877/1947 1239/4340\nf 4876/1949 1239/4340 4877/1947\nf 4881/4341 4882/1951 140/4342\nf 2167/242 140/4342 4882/1951\nf 4883/4343 4887/1953 1240/4344\nf 4886/1955 1240/4344 4887/1953\nf 4832/4345 4890/1957 23/4346\nf 2154/234 23/4346 4890/1957\nf 4895/1960 1243/4347 4896/1962\nf 4891/4348 4896/1962 1243/4347\nf 4865/4349 4902/1963 318/4350\nf 4901/1965 318/4350 4902/1963\nf 4903/4351 4908/1967 1246/4352\nf 4907/1969 1246/4352 4908/1967\nf 4913/1973 321/4353 4914/1971\nf 4897/4354 4914/1971 321/4353\nf 4915/4355 4921/1975 1249/4356\nf 4920/1977 1249/4356 4921/1975\nf 2215/275 143/4357 4926/1980\nf 4925/4358 4926/1980 143/4357\nf 4927/4359 4931/1984 1250/4360\nf 4930/1982 1250/4360 4931/1984\nf 4878/4361 4934/1985 22/4362\nf 2202/266 22/4362 4934/1985\nf 4940/1989 4939/1990 4935/4363\nf 1253/4364 4935/4363 4939/1990\nf 4909/4365 4946/1993 320/4366\nf 4945/1994 320/4366 4946/1993\nf 1255/4367 4947/4368 4950/1997\nf 4951/1996 4950/1997 4947/4368\nf 322/4369 4941/4370 4955/1998\nf 4956/1999 4955/1998 4941/4370\nf 4962/2003 4961/2004 4957/4371\nf 1257/4372 4957/4371 4961/2004\nf 146/4373 4965/4374 2263/308\nf 4966/2006 2263/308 4965/4374\nf 4971/2009 4970/2010 4967/4375\nf 1258/4376 4967/4375 4970/2010\nf 4922/4377 4974/2012 24/4378\nf 2250/300 24/4378 4974/2012\nf 1263/4379 4976/4380 4982/2015\nf 4983/2013 4982/2015 4976/4380\nf 4990/2019 4988/2020 4989/4381\nf 326/4382 4989/4381 4988/2020\nf 4992/4383 4998/2021 1267/4384\nf 4997/2023 1267/4384 4998/2021\nf 4984/4385 5004/2025 327/4386\nf 5003/2027 327/4386 5004/2025\nf 5005/4387 5011/2029 1271/4388\nf 5010/2031 1271/4388 5011/2029\nf 325/4389 5017/4390 5016/2035\nf 5018/2033 5016/2035 5017/4390\nf 5024/2039 5023/2040 5019/4391\nf 1274/4392 5019/4391 5023/2040\nf 5030/2043 5028/2044 5029/4393\nf 81/4394 5029/4393 5028/2044\nf 5037/2047 5036/2048 5031/4395\nf 1278/4396 5031/4395 5036/2048\nf 5042/2051 330/4397 5044/2049\nf 5043/4398 5044/2049 330/4397\nf 5045/4399 5050/2053 1281/4400\nf 5049/2055 1281/4400 5050/2053\nf 5038/4401 5056/2057 331/4402\nf 5055/2059 331/4402 5056/2057\nf 5057/4403 5063/2063 1285/4404\nf 5062/2064 1285/4404 5063/2063\nf 5069/4405 5070/2065 329/4406\nf 5068/2067 329/4406 5070/2065\nf 5071/4407 5076/2069 1288/4408\nf 5075/2071 1288/4408 5076/2069\nf 5081/4409 5082/2073 71/4410\nf 5080/2075 71/4410 5082/2073\nf 5084/4411 5090/2077 1292/4412\nf 5089/2079 1292/4412 5090/2077\nf 5096/2083 5095/2084 5051/4413\nf 328/4414 5051/4413 5095/2084\nf 1296/4415 5098/4416 5103/2085\nf 5104/2086 5103/2085 5098/4416\nf 5110/2091 5109/2092 5091/4417\nf 335/4418 5091/4417 5109/2092\nf 5117/2094 5116/2093 5111/4419\nf 1300/4420 5111/4419 5116/2093\nf 5124/2098 5122/2097 5123/4421\nf 334/4422 5123/4421 5122/2097\nf 5129/2103 5128/2104 5125/4423\nf 1302/4424 5125/4423 5128/2104\nf 5134/2107 5133/2108 5064/4425\nf 87/4426 5064/4425 5133/2108\nf 5136/4427 5142/2109 1306/4428\nf 5141/2111 1306/4428 5142/2109\nf 4999/4429 5148/2113 324/4430\nf 5147/2115 324/4430 5148/2113\nf 5150/4431 5156/2117 1310/4432\nf 5155/2119 1310/4432 5156/2117\nf 5143/4433 5162/2121 338/4434\nf 5161/2123 338/4434 5162/2121\nf 5163/4435 5169/2125 1313/4436\nf 5168/2127 1313/4436 5169/2125\nf 5173/4437 5174/2129 332/4438\nf 5097/2131 332/4438 5174/2129\nf 5175/4439 5179/2133 1314/4440\nf 5178/2135 1314/4440 5179/2133\nf 5012/4441 5182/2137 89/4442\nf 5083/2139 89/4442 5182/2137\nf 5183/4443 5189/2141 1318/4444\nf 5188/2143 1318/4444 5189/2141\nf 5195/4445 5196/2145 340/4446\nf 5194/2147 340/4446 5196/2145\nf 5197/4447 5202/2149 1321/4448\nf 5201/2151 1321/4448 5202/2149\nf 5190/4449 5208/2153 341/4450\nf 5207/2155 341/4450 5208/2153\nf 5209/4451 5215/2157 1324/4452\nf 5214/2159 1324/4452 5215/2157\nf 5219/4453 5220/2161 165/4454\nf 2519/464 165/4454 5220/2161\nf 5221/4455 5226/2163 1326/4456\nf 5225/2165 1326/4456 5226/2163\nf 5229/4457 5230/2167 9/4458\nf 2506/456 9/4458 5230/2167\nf 1329/4459 5231/4460 5235/2169\nf 5236/2170 5235/2169 5231/4460\nf 339/4461 5203/4462 5241/2173\nf 5242/2174 5241/2173 5203/4462\nf 1332/4463 5243/4464 5247/2177\nf 5248/2178 5247/2177 5243/4464\nf 343/4465 5237/4466 5253/2181\nf 5254/2182 5253/2181 5237/4466\nf 5255/4467 5261/2185 1335/4468\nf 5260/2187 1335/4468 5261/2185\nf 5265/4469 5266/2189 168/4470\nf 2567/496 168/4470 5266/2189\nf 1336/4471 5267/4472 5270/2191\nf 5271/2192 5270/2191 5267/4472\nf 5216/4473 5274/2195 31/4474\nf 2554/487 31/4474 5274/2195\nf 5276/4475 5282/2197 1340/4476\nf 5281/2199 1340/4476 5282/2197\nf 5287/2202 171/3623 5288/2204\nf 2592/4477 5288/2204 171/3623\nf 5297/2207 5296/2208 5290/4478\nf 1344/4479 5290/4478 5296/2208\nf 5302/2210 5280/2198 5301/4480\nf 344/4481 5301/4480 5280/2198\nf 5304/4482 5311/2211 1348/4483\nf 5310/2213 1348/4483 5311/2211\nf 5315/4484 5316/2215 345/4485\nf 5295/2205 345/4485 5316/2215\nf 5323/2219 5322/2220 5317/4486\nf 1351/4487 5317/4486 5322/2220\nf 5328/2222 5309/2212 5327/4488\nf 346/4489 5327/4488 5309/2212\nf 5329/4490 5333/2223 1352/4491\nf 5332/2224 1352/4491 5333/2223\nf 4839/4492 5336/2225 316/4493\nf 5321/2217 316/4493 5336/2225\nf 5338/4494 5344/2227 1356/4495\nf 5343/2229 1356/4495 5344/2227\nf 5294/4496 5350/2231 345/4485\nf 5349/2233 345/4485 5350/2231\nf 5352/4497 5358/2235 1360/4498\nf 5357/2237 1360/4498 5358/2235\nf 5345/4499 5364/2239 351/4500\nf 5363/2241 351/4500 5364/2239\nf 5365/4501 5371/2243 1364/4502\nf 5370/2245 1364/4502 5371/2243\nf 5377/4503 5378/2247 350/4504\nf 5376/2249 350/4504 5378/2247\nf 5379/4505 5383/2251 1366/4506\nf 5382/2253 1366/4506 5383/2251\nf 5306/4507 5388/2255 79/4508\nf 5387/2257 79/4508 5388/2255\nf 5394/2261 5393/2262 5389/4509\nf 1369/4510 5389/4509 5393/2262\nf 5400/2265 5399/2266 4980/4511\nf 323/4512 4980/4511 5399/2266\nf 5406/2269 5405/2270 5401/4513\nf 1372/4514 5401/4513 5405/2270\nf 5412/2273 5411/2274 5395/4515\nf 354/4516 5395/4515 5411/2274\nf 5419/2277 5418/2278 5413/4517\nf 1376/4518 5413/4517 5418/2278\nf 5425/4519 5426/2279 353/4520\nf 5424/2281 353/4520 5426/2279\nf 5431/2285 5430/2286 5427/4521\nf 1378/4522 5427/4521 5430/2286\nf 5436/2287 5435/2289 4995/4523\nf 86/4524 4995/4523 5435/2289\nf 5444/2293 5443/2294 5438/4525\nf 1382/4526 5438/4525 5443/2294\nf 5450/2297 5449/2298 5424/2281\nf 353/4520 5424/2281 5449/2298\nf 5451/4527 5457/2299 1385/4528\nf 5456/2301 1385/4528 5457/2299\nf 5461/4529 5462/2303 355/4530\nf 5442/2291 355/4530 5462/2303\nf 5464/4531 5470/2305 1388/4532\nf 5469/2307 1388/4532 5470/2305\nf 5455/2300 184/3683 5474/2310\nf 2794/4533 5474/2310 184/3683\nf 5481/2313 5480/2314 5475/4534\nf 1391/4535 5475/4534 5480/2314\nf 5486/2316 5468/2306 5485/4536\nf 356/4537 5485/4536 5468/2306\nf 5490/2317 1392/4538 5491/2318\nf 5487/4539 5491/2318 1392/4538\nf 5479/2311 336/4540 5494/2319\nf 5139/4541 5494/2319 336/4540\nf 5495/4542 5500/2321 1395/4543\nf 5499/2323 1395/4543 5500/2321\nf 344/4481 5279/4544 5505/2325\nf 5506/2326 5505/2325 5279/4544\nf 5507/4545 5512/2329 1398/4546\nf 5511/2331 1398/4546 5512/2329\nf 5501/4547 5518/2333 360/4548\nf 5517/2335 360/4548 5518/2333\nf 5525/2339 5524/2340 5519/4549\nf 1402/4550 5519/4549 5524/2340\nf 5532/2343 5530/2344 5531/4551\nf 359/4552 5531/4551 5530/2344\nf 5533/4553 5537/2345 1404/4554\nf 5536/2347 1404/4554 5537/2345\nf 5292/4555 5542/2349 91/4556\nf 5541/2351 91/4556 5542/2349\nf 5548/2355 5547/2356 5543/4557\nf 1407/4558 5543/4557 5547/2356\nf 5554/2359 5553/2360 5341/4559\nf 348/4560 5341/4559 5553/2360\nf 5560/2363 5559/2364 5555/4561\nf 1410/4562 5555/4561 5559/2364\nf 5566/2367 5565/2368 5549/4563\nf 363/4564 5549/4563 5565/2368\nf 5573/2371 5572/2372 5567/4565\nf 1414/4566 5567/4565 5572/2372\nf 5580/2375 5578/2376 5579/4567\nf 362/4568 5579/4567 5578/2376\nf 5585/2379 5584/2380 5581/4569\nf 1416/4570 5581/4569 5584/2380\nf 5590/2383 5589/2384 5355/4571\nf 90/4572 5355/4571 5589/2384\nf 5596/2387 5595/2388 5591/4573\nf 1419/4574 5591/4573 5595/2388\nf 5602/2391 5601/2392 5407/4575\nf 352/4576 5407/4575 5601/2392\nf 5608/2395 5607/2396 5603/4577\nf 1422/4578 5603/4577 5607/2396\nf 5614/2399 5613/2400 5597/4579\nf 366/4580 5597/4579 5613/2400\nf 5621/2403 5620/2404 5615/4581\nf 1426/4582 5615/4581 5620/2404\nf 5628/2407 5626/2408 5627/4583\nf 365/4584 5627/4583 5626/2408\nf 5633/2411 5632/2412 5629/4585\nf 1428/4586 5629/4585 5632/2412\nf 5420/4587 5638/2413 92/4588\nf 5637/2415 92/4588 5638/2413\nf 5639/4589 5644/2417 1431/4590\nf 5643/2419 1431/4590 5644/2417\nf 5649/2423 355/4530 5650/2421\nf 5441/4591 5650/2421 355/4530\nf 5651/4592 5656/2427 1434/4593\nf 5655/2428 1434/4593 5656/2427\nf 5645/4594 5662/2429 368/4595\nf 5661/2431 368/4595 5662/2429\nf 1437/4596 5663/4597 5668/2436\nf 5669/2435 5668/2436 5663/4597\nf 5673/4598 5674/2437 197/4599\nf 2991/748 197/4599 5674/2437\nf 5675/4600 5679/2439 1438/4601\nf 5678/2441 1438/4601 5679/2439\nf 5453/4602 5682/2443 37/4603\nf 2978/740 37/4603 5682/2443\nf 1441/4604 5683/4605 5687/2445\nf 5688/2446 5687/2445 5683/4605\nf 356/4606 5467/4607 5693/2449\nf 5694/2450 5693/2449 5467/4607\nf 1444/4608 5695/4609 5699/2453\nf 5700/2454 5699/2453 5695/4609\nf 371/4610 5689/4611 5705/2457\nf 5706/2458 5705/2457 5689/4611\nf 5713/2463 5712/2464 5707/4612\nf 1448/4613 5707/4612 5712/2464\nf 5720/2467 5718/2468 5719/4614\nf 370/4615 5719/4614 5718/2468\nf 5725/2471 5724/2472 5721/4616\nf 1450/4617 5721/4616 5724/2472\nf 78/4618 5477/4619 5729/2473\nf 5730/2474 5729/2473 5477/4619\nf 5731/4620 5736/2480 1453/4621\nf 5735/2478 1453/4621 5736/2480\nf 5157/4622 5742/2481 337/4623\nf 5741/2483 337/4623 5742/2481\nf 5748/2487 5747/2488 5743/4624\nf 1456/4625 5743/4624 5747/2488\nf 5737/4626 5754/2492 374/4627\nf 5753/2490 374/4627 5754/2492\nf 5760/2495 1460/4628 5761/2493\nf 5755/4629 5761/2493 1460/4628\nf 5767/4630 5768/2497 373/4631\nf 5766/2499 373/4631 5768/2497\nf 5769/4632 5773/2501 1462/4633\nf 5772/2503 1462/4633 5773/2501\nf 5170/4634 5778/2505 88/4635\nf 5777/2507 88/4635 5778/2505\nf 1465/4636 5779/4637 5783/2509\nf 5784/2510 5783/2509 5779/4637\nf 333/4638 5105/4639 5789/2513\nf 5790/2514 5789/2513 5105/4639\nf 5791/4640 5796/2517 1468/4641\nf 5795/2519 1468/4641 5796/2517\nf 377/4642 5785/4643 5801/2523\nf 5802/2521 5801/2523 5785/4643\nf 5803/4644 5809/2525 1472/4645\nf 5808/2527 1472/4645 5809/2525\nf 5815/4646 5816/2529 376/4647\nf 5814/2531 376/4647 5816/2529\nf 1474/4648 5817/4649 5820/2533\nf 5821/2534 5820/2533 5817/4649\nf 77/4650 5118/4651 5825/2537\nf 5826/2538 5825/2537 5118/4651\nf 5827/4652 5832/2541 1477/4653\nf 5831/2543 1477/4653 5832/2541\nf 5249/4654 5838/2545 342/4655\nf 5837/2547 342/4655 5838/2545\nf 5843/2550 1480/4656 5844/2552\nf 5839/4657 5844/2552 1480/4656\nf 5833/4658 5850/2553 379/4659\nf 5849/2555 379/4659 5850/2553\nf 5851/4660 5857/2557 1483/4661\nf 5856/2559 1483/4661 5857/2557\nf 5861/4662 5862/2561 210/4663\nf 3187/876 210/4663 5862/2561\nf 5863/4664 5867/2563 1484/4665\nf 5866/2565 1484/4665 5867/2563\nf 5262/4666 5870/2567 30/4667\nf 3174/868 30/4667 5870/2567\nf 5876/2571 5875/2572 5871/4668\nf 1487/4669 5871/4668 5875/2572\nf 5882/2575 5881/2576 5701/4670\nf 369/4671 5701/4670 5881/2576\nf 5888/2579 5887/2580 5883/4672\nf 1490/4673 5883/4672 5887/2580\nf 5894/2583 5893/2584 5877/4674\nf 382/4675 5877/4674 5893/2584\nf 1494/4676 5895/4677 5900/2585\nf 5901/2586 5900/2585 5895/4677\nf 381/4678 5907/4679 5906/2589\nf 5908/2590 5906/2589 5907/4679\nf 1496/4680 5909/4681 5912/2593\nf 5913/2594 5912/2593 5909/4681\nf 97/4682 5714/4683 5917/2600\nf 5918/2599 5917/2600 5714/4683\nf 5919/4684 5925/2603 1500/4685\nf 5924/2604 1500/4685 5925/2603\nf 5932/2605 5930/2607 5931/4686\nf 385/4687 5931/4686 5930/2607\nf 1503/4688 5933/4689 5937/2609\nf 5938/2610 5937/2609 5933/4689\nf 5926/4690 5944/2613 386/4691\nf 5943/2615 386/4691 5944/2613\nf 5945/4692 5951/2617 1507/4693\nf 5950/2619 1507/4693 5951/2617\nf 384/4694 5957/4695 5956/2622\nf 5958/2624 5956/2622 5957/4695\nf 5964/2625 5963/2627 5959/4696\nf 1510/4697 5959/4696 5963/2627\nf 105/4698 5969/4699 5968/2629\nf 5970/2630 5968/2629 5969/4699\nf 5972/4700 5978/2636 1514/4701\nf 5977/2634 1514/4701 5978/2636\nf 5797/4702 5984/2637 375/4703\nf 5983/2639 375/4703 5984/2637\nf 5992/2642 5991/2641 5986/4704\nf 1518/4705 5986/4704 5991/2641\nf 5997/2647 390/4706 5998/2645\nf 5979/4707 5998/2645 390/4706\nf 5999/4708 6005/2650 1522/4709\nf 6004/2649 1522/4709 6005/2650\nf 6011/4710 6012/2653 389/4711\nf 6010/2655 389/4711 6012/2653\nf 6013/4712 6017/2657 1524/4713\nf 6016/2659 1524/4713 6017/2657\nf 5810/4714 6022/2661 96/4715\nf 6021/2663 96/4715 6022/2661\nf 6023/4716 6028/2665 1527/4717\nf 6027/2667 1527/4717 6028/2665\nf 6033/2670 378/4718 6034/2672\nf 5845/4719 6034/2672 378/4718\nf 6035/4720 6040/2673 1530/4721\nf 6039/2675 1530/4721 6040/2673\nf 6029/4722 6046/2677 392/4723\nf 6045/2679 392/4723 6046/2677\nf 6052/2683 1533/4724 6053/2681\nf 6047/4725 6053/2681 1533/4724\nf 3387/1005 224/4726 6058/2686\nf 6057/4727 6058/2686 224/4726\nf 6062/2688 1534/4728 6063/2690\nf 6059/4729 6063/2690 1534/4728\nf 5858/4730 6066/2691 47/4731\nf 3374/996 47/4731 6066/2691\nf 6072/2695 6071/2696 6067/4732\nf 1537/4733 6067/4732 6071/2696\nf 6078/2699 6077/2700 5889/4734\nf 380/4735 5889/4734 6077/2700\nf 6084/2702 6083/2701 6079/4736\nf 1540/4737 6079/4736 6083/2701\nf 395/4738 6073/4739 6089/2705\nf 6090/2706 6089/2705 6073/4739\nf 1544/4740 6091/4741 6096/2709\nf 6097/2710 6096/2709 6091/4741\nf 394/4742 6103/4743 6102/2713\nf 6104/2714 6102/2713 6103/4743\nf 1546/4744 6105/4745 6108/2717\nf 6109/2718 6108/2717 6105/4745\nf 100/4746 5902/4747 6113/2721\nf 6114/2722 6113/2721 5902/4747\nf 1549/4748 6115/4749 6119/2728\nf 6120/2727 6119/2728 6115/4749\nf 383/4750 5939/4751 6125/2729\nf 6126/2730 6125/2729 5939/4751\nf 6132/2735 6131/2736 6127/4752\nf 1552/4753 6127/4752 6131/2736\nf 6138/2739 6137/2740 6121/4754\nf 398/4755 6121/4754 6137/2740\nf 6144/2742 1556/4756 6145/2744\nf 6139/4757 6145/2744 1556/4756\nf 6151/4758 6152/2745 397/4759\nf 6150/2747 397/4759 6152/2745\nf 6153/4760 6157/2749 1558/4761\nf 6156/2751 1558/4761 6157/2749\nf 5952/4762 6162/2753 101/4763\nf 6161/2755 101/4763 6162/2753\nf 6163/4764 6169/2757 1562/4765\nf 6168/2759 1562/4765 6169/2757\nf 6175/4766 6176/2761 400/4767\nf 6174/2763 400/4767 6176/2761\nf 6181/2766 1565/4768 6182/2768\nf 6177/4769 6182/2768 1565/4768\nf 6170/4770 6188/2772 401/4771\nf 6187/2770 401/4771 6188/2772\nf 6189/4772 6195/2773 1568/4773\nf 6194/2775 1568/4773 6195/2773\nf 3543/1101 236/4774 6200/2778\nf 6199/4775 6200/2778 236/4774\nf 6201/4776 6206/2779 1570/4777\nf 6205/2781 1570/4777 6206/2779\nf 3530/1093 32/4778 6210/2784\nf 6209/4779 6210/2784 32/4778\nf 6216/2787 6215/2788 6211/4780\nf 1573/4781 6211/4780 6215/2788\nf 393/4782 6085/4783 6221/2789\nf 6222/2790 6221/2789 6085/4783\nf 6223/4784 6227/2793 1575/4785\nf 6226/2795 1575/4785 6227/2793\nf 6217/4786 6232/2796 402/4787\nf 6231/2798 402/4787 6232/2796\nf 6233/4788 6238/2800 1577/4789\nf 6237/2802 1577/4789 6238/2800\nf 6241/4790 6242/2803 396/4791\nf 6143/2743 396/4791 6242/2803\nf 6247/2807 6246/2808 6243/4792\nf 1578/4793 6243/4792 6246/2808\nf 6250/2809 6130/2733 6098/4794\nf 102/4795 6098/4794 6130/2733\nf 6256/2813 6255/2814 6251/4796\nf 1581/4797 6251/4796 6255/2814\nf 6203/4798 6262/2815 400/4767\nf 6261/2817 400/4767 6262/2815\nf 6268/2821 6267/2822 6263/4799\nf 1584/4800 6263/4799 6267/2822\nf 6274/2825 6273/2826 6257/4801\nf 404/4802 6257/4801 6273/2826\nf 6281/2829 6280/2830 6275/4803\nf 1587/4804 6275/4803 6280/2830\nf 6286/2832 5965/2833 6285/4805\nf 384/4694 6285/4805 5965/2833\nf 6291/2836 6290/2837 6287/4806\nf 1588/4807 6287/4806 6290/2837\nf 6165/4808 6294/2838 101/4763\nf 5953/2840 101/4763 6294/2838\nf 6295/4809 6300/2841 1591/4810\nf 6299/2843 1591/4810 6300/2841\nf 5749/4811 6306/2845 372/4812\nf 6305/2847 372/4812 6306/2845\nf 6311/2850 1594/4813 6312/2852\nf 6307/4814 6312/2852 1594/4813\nf 6317/2854 406/4815 6318/2856\nf 6301/4816 6318/2856 406/4815\nf 6324/2858 1597/4817 6325/2860\nf 6319/4818 6325/2860 1597/4817\nf 5985/2862 387/4819 6330/2864\nf 6329/4820 6330/2864 387/4819\nf 6334/2866 1598/4821 6335/2868\nf 6331/4822 6335/2868 1598/4821\nf 5762/4823 6338/2869 98/4824\nf 5971/2871 98/4824 6338/2869\nf 6339/4825 6344/2873 1601/4826\nf 6343/2875 1601/4826 6344/2873\nf 6041/4827 6350/2877 391/4828\nf 6349/2879 391/4828 6350/2877\nf 6351/4829 6356/2884 1604/4830\nf 6355/2882 1604/4830 6356/2884\nf 6345/4831 6362/2885 408/4832\nf 6361/2887 408/4832 6362/2885\nf 6363/4833 6369/2889 1607/4834\nf 6368/2891 1607/4834 6369/2889\nf 3727/1221 246/4835 6374/2894\nf 6373/4836 6374/2894 246/4835\nf 6375/4837 6379/2895 1608/4838\nf 6378/2897 1608/4838 6379/2895\nf 3714/1213 52/4839 6382/2900\nf 6054/4840 6382/2900 52/4839\nf 6388/2901 6387/2903 6383/4841\nf 1611/4842 6383/4841 6387/2903\nf 6394/2907 6393/2908 6269/4843\nf 403/4844 6269/4843 6393/2908\nf 6395/4845 6399/2909 1613/4846\nf 6398/2911 1613/4846 6399/2909\nf 6389/4847 6404/2912 409/4848\nf 6403/2914 409/4848 6404/2912\nf 6405/4849 6410/2916 1615/4850\nf 6409/2918 1615/4850 6410/2916\nf 6414/2920 6323/2859 6413/4851\nf 405/4852 6413/4851 6323/2859\nf 6419/2923 6418/2924 6415/4853\nf 1616/4854 6415/4853 6418/2924\nf 6422/2926 6310/2851 6282/4855\nf 105/4698 6282/4855 6310/2851\nf 6431/2929 6430/2930 6424/4856\nf 1621/4857 6424/4856 6430/2930\nf 6438/2932 6436/2931 6437/4858\nf 412/4859 6437/4858 6436/2931\nf 6440/4860 6447/2935 1625/4861\nf 6446/2937 1625/4861 6447/2935\nf 6451/4862 6452/2939 410/4863\nf 6429/2927 410/4863 6452/2939\nf 6460/2941 6459/2942 6454/4864\nf 1628/4865 6454/4864 6459/2942\nf 411/4866 6463/3158 6445/2936\nf 6464/2944 6445/2936 6463/3158\nf 6471/2947 6470/2948 6465/4867\nf 1632/4868 6465/4867 6470/2948\nf 6478/2951 6476/2952 6477/3191\nf 415/4869 6477/3191 6476/2952\nf 6483/2955 6482/2956 6479/4870\nf 1634/4871 6479/4870 6482/2956\nf 6488/2959 6487/2960 6472/4872\nf 416/4873 6472/4872 6487/2960\nf 6494/2962 6493/2961 6489/4874\nf 1637/4875 6489/4874 6493/2961\nf 6500/2967 6498/2968 6499/4876\nf 414/4877 6499/4876 6498/2968\nf 6506/2971 6505/2972 6501/4878\nf 1640/4879 6501/4878 6505/2972\nf 6512/2975 6510/2976 6511/3198\nf 106/4880 6511/3198 6510/2976\nf 6518/2979 6517/2980 6513/4881\nf 1643/4882 6513/4881 6517/2980\nf 6428/4883 6524/2984 410/4863\nf 6523/2982 410/4863 6524/2984\nf 6529/2986 6528/2985 6525/4884\nf 1645/4885 6525/4884 6528/2985\nf 6534/2991 6533/2992 6519/4886\nf 417/4887 6519/4886 6533/2992\nf 6540/2995 6539/2996 6535/4888\nf 1647/4889 6535/4888 6539/2996\nf 6544/2999 4511/3000 6543/4890\nf 296/4891 6543/4890 4511/3000\nf 6549/3003 6548/3004 6545/4892\nf 1648/4893 6545/4892 6548/3004\nf 4549/3007 72/4894 6552/3005\nf 6442/4895 6552/3005 72/4894\nf 6559/3010 1652/4896 6560/3012\nf 6554/4897 6560/3012 1652/4896\nf 6566/3014 6565/3013 6458/4898\nf 412/4859 6458/4898 6565/3013\nf 6568/4899 6574/3020 1656/4900\nf 6573/3018 1656/4900 6574/3020\nf 6561/4901 6580/3021 421/4902\nf 6579/3023 421/4902 6580/3021\nf 1660/4903 6581/4904 6586/3028\nf 6587/3027 6586/3028 6581/4904\nf 6594/3031 6592/3032 6593/4905\nf 420/4906 6593/4905 6592/3032\nf 1662/4907 6595/4908 6598/3033\nf 6599/3034 6598/3033 6595/4908\nf 106/4880 6426/4909 6603/3037\nf 6604/3038 6603/3037 6426/4909\nf 1666/4910 6605/4911 6610/3041\nf 6611/3042 6610/3041 6605/4911\nf 6618/3047 6616/3048 6617/4912\nf 424/4913 6617/4912 6616/3048\nf 6623/3051 1669/4914 6624/3049\nf 6619/4915 6624/3049 1669/4914\nf 6629/3054 425/4916 6630/3056\nf 6612/4917 6630/3056 425/4916\nf 6631/4918 6637/3057 1673/4919\nf 6636/3059 1673/4919 6637/3057\nf 6644/3063 6642/3064 6643/4920\nf 423/4921 6643/4920 6642/3064\nf 6645/4922 6650/3065 1676/4923\nf 6649/3067 1676/4923 6650/3065\nf 6655/4924 6656/3069 111/4925\nf 6654/3071 111/4925 6656/3069\nf 6663/3075 6662/3076 6657/4926\nf 1680/4927 6657/4926 6662/3076\nf 6670/3079 6668/3080 6669/4928\nf 427/4929 6669/4928 6668/3080\nf 6675/3083 6674/3084 6671/4930\nf 1682/4931 6671/4930 6674/3084\nf 6680/3087 6679/3088 6664/4932\nf 428/4933 6664/4932 6679/3088\nf 6686/3091 6685/3092 6681/4934\nf 1685/4935 6681/4934 6685/3092\nf 6692/3095 6690/3096 6691/4936\nf 426/4937 6691/4936 6690/3096\nf 6698/3099 6697/3100 6693/4938\nf 1688/4939 6693/4938 6697/3100\nf 6704/3103 6702/3104 6703/4940\nf 112/4941 6703/4940 6702/3104\nf 6709/3107 1691/4942 6710/3105\nf 6705/4943 6710/3105 1691/4942\nf 6716/3111 6715/3112 4693/4944\nf 307/4945 4693/4944 6715/3112\nf 6717/4946 6721/3115 1693/4947\nf 6720/3116 1693/4947 6721/3115\nf 6726/3119 6725/3120 6711/4948\nf 430/4949 6711/4948 6725/3120\nf 6731/3122 1696/4950 6732/3124\nf 6727/4951 6732/3124 1696/4950\nf 6737/4952 6738/3125 429/4953\nf 6736/3127 429/4953 6738/3125\nf 6742/3130 1698/4954 6743/3132\nf 6739/4955 6743/3132 1698/4954\nf 4653/4956 6748/3133 80/4957\nf 6747/3135 80/4957 6748/3133\nf 6749/4958 6754/3137 1701/4959\nf 6753/3139 1701/4959 6754/3137\nf 4641/4960 6760/3141 303/4961\nf 6759/3143 303/4961 6760/3141\nf 6761/4962 6766/3145 1704/4963\nf 6765/3147 1704/4963 6766/3145\nf 6755/4964 6772/3149 432/4965\nf 6771/3151 432/4965 6772/3149\nf 6778/3154 1707/4966 6779/3156\nf 6773/4967 6779/3156 1707/4966\nf 6783/4968 6784/3160 411/4866\nf 6463/3158 411/4866 6784/3160\nf 6785/4969 6789/3161 1708/4970\nf 6788/3163 1708/4970 6789/3161\nf 72/4894 4601/4971 6439/3165\nf 6792/3166 6439/3165 4601/4971\nf 6799/3171 6798/3172 6793/4972\nf 1712/4973 6793/4972 6798/3172\nf 6806/3175 6804/3176 6805/4974\nf 433/4975 6805/4974 6804/3176\nf 6811/3179 6810/3180 6807/4976\nf 1714/4977 6807/4976 6810/3180\nf 6816/3183 6815/3184 6800/4978\nf 434/4979 6800/4978 6815/3184\nf 6817/4980 6822/3185 1716/4981\nf 6821/3187 1716/4981 6822/3185\nf 6825/4982 6826/3189 415/4869\nf 6477/3191 415/4869 6826/3189\nf 6832/3196 6831/3194 6827/4983\nf 1718/4984 6827/4983 6831/3194\nf 106/4880 6835/4985 6511/3198\nf 6836/3200 6511/3198 6835/4985\nf 6844/3203 6843/3204 6838/4986\nf 1722/4987 6838/4986 6843/3204\nf 6849/3206 431/4988 6850/3208\nf 6767/4989 6850/3208 431/4988\nf 6852/4990 6857/3209 1725/4991\nf 6856/3211 1725/4991 6857/3209\nf 6845/4992 6862/3212 436/4993\nf 6861/3214 436/4993 6862/3212\nf 6863/4994 6868/3216 1727/4995\nf 6867/3218 1727/4995 6868/3216\nf 6871/4996 6872/3219 418/4997\nf 6567/3221 418/4997 6872/3219\nf 6873/4998 6877/3223 1728/4999\nf 6876/3225 1728/4999 6877/3223\nf 6553/3228 107/5000 6880/3230\nf 6780/5001 6880/3230 107/5000\nf 6886/3233 6885/3234 6881/5002\nf 1731/5003 6881/5002 6885/3234\nf 6892/3237 6891/3238 6829/5004\nf 433/4975 6829/5004 6891/3238\nf 1733/5005 6893/5006 6896/3240\nf 6897/3242 6896/3240 6893/5006\nf 6902/3245 6901/3246 6887/5007\nf 438/5008 6887/5007 6901/3246\nf 6908/3249 6907/3250 6903/5009\nf 1736/5010 6903/5009 6907/3250\nf 6913/5011 6914/3251 437/5012\nf 6912/3253 437/5012 6914/3251\nf 6919/3257 6918/3258 6915/5013\nf 1738/5014 6915/5013 6918/3258\nf 112/4941 6795/5015 6923/3261\nf 6924/3259 6923/3261 6795/5015\nf 6929/3264 1741/5016 6930/3266\nf 6925/5017 6930/3266 1741/5016\nf 6841/5018 6936/3270 435/5019\nf 6935/3268 435/5019 6936/3270\nf 1743/5020 6937/5021 6941/3274\nf 6942/3273 6941/3274 6937/5021\nf 6946/3276 6928/3265 6912/3253\nf 437/5012 6912/3253 6928/3265\nf 6951/3277 6950/3278 6947/5022\nf 1744/5023 6947/5022 6950/3278\nf 6642/3064 6954/3279 423/4921\nf 6940/3271 423/4921 6954/3279\nf 6962/3283 6961/3284 6956/5024\nf 1748/5025 6956/5024 6961/3284\nf 6968/3287 6967/3288 5657/5026\nf 367/5027 5657/5026 6967/3288\nf 6975/3291 6974/3292 6969/5028\nf 1751/5029 6969/5028 6974/3292\nf 6979/5030 6980/3293 440/5031\nf 6960/3281 440/5031 6980/3293\nf 6981/5032 6985/3295 1752/5033\nf 6984/3296 1752/5033 6985/3295\nf 4349/5034 6988/3297 283/4180\nf 6973/3289 283/4180 6988/3297\nf 6993/3301 1755/5035 6994/3299\nf 6989/5036 6994/3299 1755/5035\nf 6999/3304 440/5031 7000/3306\nf 6959/5037 7000/3306 440/5031\nf 7001/5038 7006/3310 1758/5039\nf 7005/3308 1758/5039 7006/3310\nf 6995/5040 7012/3311 443/5041\nf 7011/3313 443/5041 7012/3311\nf 7013/5042 7019/3315 1761/5043\nf 7018/3317 1761/5043 7019/3315\nf 7023/5044 7024/3319 286/5045\nf 4397/1650 286/5045 7024/3319\nf 7025/5046 7029/3321 1762/5047\nf 7028/3323 1762/5047 7029/3321\nf 68/5048 6971/5049 4384/1641\nf 7032/3325 4384/1641 6971/5049\nf 7040/3329 7039/3330 7034/5050\nf 1766/5051 7034/5050 7039/3330\nf 7046/3333 7045/3334 5561/5052\nf 361/5053 5561/5052 7045/3334\nf 7053/3335 7052/3336 7048/5054\nf 1769/5055 7048/5054 7052/3336\nf 7058/3339 7057/3340 7041/5056\nf 445/5057 7041/5056 7057/3340\nf 7064/3341 7063/3342 7059/5058\nf 1771/5059 7059/5058 7063/3342\nf 7068/3344 7017/3316 7067/5060\nf 442/5061 7067/5060 7017/3316\nf 7073/3347 7072/3348 7069/5062\nf 1772/5063 7069/5062 7072/3348\nf 7076/3350 7004/3309 5574/5064\nf 93/5065 5574/5064 7004/3309\nf 7077/5066 7082/3353 1775/5067\nf 7081/3354 1775/5067 7082/3353\nf 7087/3357 444/5068 7088/3355\nf 7037/5069 7088/3355 444/5068\nf 7089/5070 7094/3362 1777/5071\nf 7093/3360 1777/5071 7094/3362\nf 5513/5072 7098/3363 358/5073\nf 7080/3351 358/5073 7098/3363\nf 7103/3365 7102/3366 7099/5074\nf 1778/5075 7099/5074 7102/3366\nf 292/4218 4481/5076 7092/3361\nf 7106/3368 7092/3361 4481/5076\nf 113/5077 1785/1 1784/5078\nf 1787/3 1784/5078 1785/1\nf 1781/5079 451/3370 1794/7\nf 1790/5 1794/7 451/3370\nf 2/5080 1800/9 1799/5081\nf 1802/11 1799/5081 1800/9\nf 455/3374 1805/13 1797/5082\nf 1808/15 1797/5082 1805/13\nf 114/3404 1813/17 1804/5083\nf 1815/19 1804/5083 1813/17\nf 459/3378 1818/21 1810/5084\nf 1822/23 1810/5084 1818/21\nf 117/3376 1811/25 1789/5085\nf 1828/27 1789/5085 1811/25\nf 462/3382 1830/29 1824/5086\nf 1834/31 1824/5086 1830/29\nf 115/3380 1839/33 1829/5087\nf 1841/35 1829/5087 1839/33\nf 466/3386 1844/37 1836/5088\nf 1848/39 1836/5088 1844/37\nf 16/3416 1852/41 1817/5089\nf 1854/43 1817/5089 1852/41\nf 469/3390 1857/45 1850/5090\nf 1860/47 1850/5090 1857/45\nf 118/3452 1865/49 1856/5091\nf 1867/51 1856/5091 1865/49\nf 473/3394 1870/53 1862/5092\nf 1874/55 1862/5092 1870/53\nf 121/3392 1863/57 1843/5093\nf 1880/59 1843/5093 1863/57\nf 476/3398 1882/61 1876/5094\nf 1886/63 1876/5094 1882/61\nf 1891/5095 122/5096 1894/65\nf 1892/66 1894/65 122/5096\nf 1889/5097 480/3402 1900/69\nf 1897/70 1900/69 480/3402\nf 1905/5098 13/5099 1908/73\nf 1906/74 1908/73 13/5099\nf 1903/5100 484/3406 1914/77\nf 1911/78 1914/77 484/3406\nf 123/3420 1919/81 1910/5101\nf 1921/83 1910/5101 1919/81\nf 488/3410 1924/85 1916/5102\nf 1928/87 1916/5102 1924/85\nf 1896/5103 125/3408 1933/89\nf 1917/90 1933/89 125/3408\nf 490/3414 1935/93 1930/5104\nf 1938/95 1930/5104 1935/93\nf 1943/5105 126/5106 1946/99\nf 1944/97 1946/99 126/5106\nf 494/3418 1949/101 1941/5107\nf 1952/103 1941/5107 1949/101\nf 1957/5108 4/5109 1960/105\nf 1958/106 1960/105 4/5109\nf 1955/5110 498/3422 1966/111\nf 1963/109 1966/111 498/3422\nf 1962/5111 127/3468 1973/113\nf 1971/114 1973/113 127/3468\nf 502/3426 1976/117 1968/5112\nf 1980/119 1968/5112 1976/117\nf 129/3424 1969/121 1948/5113\nf 1985/123 1948/5113 1969/121\nf 504/3430 1987/125 1982/5114\nf 1990/127 1982/5114 1987/125\nf 128/3428 1995/129 1986/5115\nf 1997/131 1986/5115 1995/129\nf 508/3434 2000/133 1992/5116\nf 2004/135 1992/5116 2000/133\nf 19/3480 2008/137 1975/5117\nf 2010/139 1975/5117 2008/137\nf 511/3438 2013/141 2006/5118\nf 2016/143 2006/5118 2013/141\nf 2012/5119 130/3484 2023/145\nf 2021/146 2023/145 130/3484\nf 515/3442 2026/152 2018/5120\nf 2030/150 2018/5120 2026/152\nf 133/3440 2019/153 1999/5121\nf 2036/155 1999/5121 2019/153\nf 518/3446 2038/157 2032/5122\nf 2042/159 2032/5122 2038/157\nf 124/3412 2046/161 1934/5123\nf 2048/163 1934/5123 2046/161\nf 521/3450 2051/165 2044/5124\nf 2054/167 2044/5124 2051/165\nf 21/3432 1993/169 1923/5125\nf 2059/171 1923/5125 1993/169\nf 523/3454 2061/173 2056/5126\nf 2064/175 2056/5126 2061/173\nf 132/3436 2033/177 2060/5127\nf 2070/179 2060/5127 2033/177\nf 526/3458 2072/181 2066/5128\nf 2076/183 2066/5128 2072/181\nf 135/3456 2067/185 2050/5129\nf 2081/187 2050/5129 2067/185\nf 528/3462 2083/189 2078/5130\nf 2086/191 2078/5130 2083/189\nf 2091/5131 136/5132 2094/193\nf 2092/194 2094/193 136/5132\nf 2089/5133 532/3466 2100/197\nf 2097/198 2100/197 532/3466\nf 2105/5134 15/4330 2108/201\nf 2106/202 2108/201 15/4330\nf 2103/5135 536/3470 2114/205\nf 2111/206 2114/205 536/3470\nf 2110/5136 137/4326 2121/209\nf 2119/210 2121/209 137/4326\nf 540/3474 2124/213 2116/5137\nf 2128/215 2116/5137 2124/213\nf 2096/5138 139/3472 2133/217\nf 2117/218 2133/217 139/3472\nf 2130/5139 542/3478 2138/221\nf 2135/222 2138/221 542/3478\nf 2134/5140 138/3476 2144/225\nf 2142/226 2144/225 138/3476\nf 2140/5141 545/3482 2150/229\nf 2147/230 2150/229 545/3482\nf 2123/5142 23/4346 2156/233\nf 2154/234 2156/233 23/4346\nf 2152/5143 548/3486 2162/237\nf 2159/238 2162/237 548/3486\nf 2158/5144 140/4342 2169/241\nf 2167/242 2169/241 140/4342\nf 2164/5145 552/3490 2176/245\nf 2172/246 2176/245 552/3490\nf 2146/5146 142/3488 2181/249\nf 2165/250 2181/249 142/3488\nf 2178/5147 554/3494 2186/253\nf 2183/254 2186/253 554/3494\nf 2182/5148 141/3492 2192/257\nf 2190/258 2192/257 141/3492\nf 2195/263 2198/264 557/3498\nf 2188/5149 557/3498 2198/264\nf 2171/5150 22/4362 2204/265\nf 2202/266 2204/265 22/4362\nf 2200/5151 560/3500 2210/272\nf 2207/271 2210/272 560/3500\nf 2215/275 2217/276 143/4357\nf 2206/5152 143/4357 2217/276\nf 2212/5153 564/3503 2224/277\nf 2220/278 2224/277 564/3503\nf 2213/282 2229/281 145/3501\nf 2194/5154 145/3501 2229/281\nf 2226/5155 566/3508 2234/285\nf 2231/286 2234/285 566/3508\nf 2230/5156 144/3506 2240/290\nf 2238/292 2240/290 144/3506\nf 2246/294 2236/5157 2243/296\nf 569/3510 2243/296 2236/5157\nf 2219/5158 24/4378 2252/298\nf 2250/300 2252/298 24/4378\nf 2258/302 2248/5159 2255/304\nf 572/3511 2255/304 2248/5159\nf 146/4373 2263/308 2254/5160\nf 2265/306 2254/5160 2263/308\nf 575/3516 2267/309 2260/5161\nf 2270/310 2260/5161 2267/309\nf 147/3513 2261/312 2242/5162\nf 2275/314 2242/5162 2261/312\nf 576/3519 2276/316 2272/5163\nf 2278/317 2272/5163 2276/316\nf 148/5164 2285/319 2284/5165\nf 2287/321 2284/5165 2285/319\nf 581/3521 2290/324 2281/5166\nf 2294/323 2281/5166 2290/324\nf 14/5167 2300/327 2299/5168\nf 2302/329 2299/5168 2300/327\nf 585/3525 2305/331 2297/5169\nf 2308/333 2297/5169 2305/331\nf 149/3539 2313/336 2304/5170\nf 2315/335 2304/5170 2313/336\nf 2310/5171 589/3529 2322/339\nf 2318/340 2322/339 589/3529\nf 2289/5172 152/3527 2328/343\nf 2311/344 2328/343 152/3527\nf 2324/5173 592/3533 2334/347\nf 2330/348 2334/347 592/3533\nf 2340/352 2342/351 153/5174\nf 2339/5175 153/5174 2342/351\nf 596/3537 2345/355 2337/5176\nf 2348/357 2337/5176 2345/355\nf 2353/5177 1/5178 2356/359\nf 2354/360 2356/359 1/5178\nf 2351/5179 600/3541 2362/363\nf 2359/364 2362/363 600/3541\nf 2358/5180 154/3587 2369/367\nf 2367/368 2369/367 154/3587\nf 2364/5181 604/3545 2376/373\nf 2372/371 2376/373 604/3545\nf 2344/5182 156/3543 2381/375\nf 2365/376 2381/375 156/3543\nf 2378/5183 606/3549 2386/379\nf 2383/380 2386/379 606/3549\nf 155/3547 2391/383 2382/5184\nf 2393/385 2382/5184 2391/383\nf 2388/5185 610/3553 2400/387\nf 2396/388 2400/387 610/3553\nf 27/3599 2404/391 2371/5186\nf 2406/393 2371/5186 2404/391\nf 613/3557 2409/395 2402/5187\nf 2412/397 2402/5187 2409/395\nf 157/3603 2417/399 2408/5188\nf 2419/401 2408/5188 2417/399\nf 617/3561 2422/403 2414/5189\nf 2426/405 2414/5189 2422/403\nf 160/3559 2415/407 2395/5190\nf 2432/409 2395/5190 2415/407\nf 620/3565 2434/411 2428/5191\nf 2438/413 2428/5191 2434/411\nf 2329/5192 150/3531 2445/415\nf 2443/416 2445/415 150/3531\nf 2440/5193 624/3569 2452/419\nf 2448/420 2452/419 624/3569\nf 2317/5194 29/3551 2457/423\nf 2389/424 2457/423 29/3551\nf 2454/5195 626/3573 2462/427\nf 2459/428 2462/427 626/3573\nf 2458/5196 159/3555 2468/431\nf 2429/432 2468/431 159/3555\nf 2464/5197 629/3577 2474/435\nf 2470/436 2474/435 629/3577\nf 2447/5198 163/3575 2480/439\nf 2465/440 2480/439 163/3575\nf 2476/5199 632/3581 2486/443\nf 2482/444 2486/443 632/3581\nf 2491/5200 164/5201 2494/447\nf 2492/448 2494/447 164/5201\nf 2489/5202 636/3585 2500/451\nf 2497/452 2500/451 636/3585\nf 2505/5203 9/4458 2508/455\nf 2506/456 2508/455 9/4458\nf 2503/5204 640/3589 2514/459\nf 2511/460 2514/459 640/3589\nf 2510/5205 165/4454 2521/463\nf 2519/464 2521/463 165/4454\nf 2516/5206 644/3593 2528/467\nf 2524/468 2528/467 644/3593\nf 2496/5207 167/3591 2533/471\nf 2517/472 2533/471 167/3591\nf 2530/5208 646/3597 2538/475\nf 2535/476 2538/475 646/3597\nf 166/3595 2542/479 2534/5209\nf 2544/481 2534/5209 2542/479\nf 649/3601 2547/483 2540/5210\nf 2550/485 2540/5210 2547/483\nf 2523/5211 31/4474 2556/489\nf 2554/487 2556/489 31/4474\nf 652/3605 2559/491 2552/5212\nf 2562/493 2552/5212 2559/491\nf 2558/5213 168/4470 2569/495\nf 2567/496 2569/495 168/4470\nf 2564/5214 656/3609 2576/499\nf 2572/500 2576/499 656/3609\nf 170/3607 2565/503 2546/5215\nf 2581/505 2546/5215 2565/503\nf 658/3613 2583/507 2578/5216\nf 2586/509 2578/5216 2583/507\nf 2593/513 2595/514 171/3623\nf 2592/4477 171/3623 2595/514\nf 2589/5217 663/3617 2602/515\nf 2598/516 2602/515 663/3617\nf 2101/5218 136/3627 2609/519\nf 2607/520 2609/519 136/3627\nf 2604/5219 666/3621 2614/523\nf 2611/524 2614/523 666/3621\nf 172/3631 2620/525 2619/5220\nf 2622/527 2619/5220 2620/525\nf 669/3625 2624/529 2617/5221\nf 2626/530 2617/5221 2624/529\nf 2632/5222 173/3635 2635/531\nf 2633/532 2635/531 173/3635\nf 2629/5223 673/3629 2640/535\nf 2637/536 2640/535 673/3629\nf 2648/537 2646/5224 2600/517\nf 174/3618 2600/517 2646/5224\nf 676/3633 2649/539 2643/5225\nf 2652/540 2643/5225 2649/539\nf 2651/3634 173/3635 2659/541\nf 2657/542 2659/541 173/3635\nf 2654/5226 680/3637 2666/545\nf 2662/546 2666/545 680/3637\nf 2627/5227 12/5228 2672/549\nf 2670/550 2672/549 12/5228\nf 2668/5229 683/3641 2678/553\nf 2675/554 2678/553 683/3641\nf 2674/5230 176/5231 2685/557\nf 2683/558 2685/557 176/5231\nf 2680/5232 687/3645 2692/561\nf 2688/562 2692/561 687/3645\nf 2661/5233 179/3643 2698/565\nf 2681/566 2698/565 179/3643\nf 2694/5234 690/3649 2704/569\nf 2700/570 2704/569 690/3649\nf 2710/574 2293/5235 2708/576\nf 151/5236 2708/576 2293/5235\nf 2716/578 2706/5237 2713/580\nf 693/3652 2713/580 2706/5237\nf 2722/581 2333/5238 2720/582\nf 25/5239 2720/582 2333/5238\nf 2728/586 2718/5240 2725/588\nf 696/3654 2725/588 2718/5240\nf 2724/5241 180/3671 2735/589\nf 2733/590 2735/589 180/3671\nf 2742/594 2730/5242 2738/596\nf 700/3659 2738/596 2730/5242\nf 2747/598 2712/5243 2731/600\nf 182/3656 2731/600 2712/5243\nf 702/3662 2749/601 2744/5244\nf 2752/603 2744/5244 2749/601\nf 2759/606 2733/590 2757/608\nf 180/3671 2757/608 2733/590\nf 2766/610 2754/5245 2762/612\nf 706/3664 2762/612 2754/5245\nf 2770/614 2772/613 162/3674\nf 2451/5246 162/3674 2772/613\nf 2774/617 2776/618 708/3669\nf 2768/5247 708/3669 2776/618\nf 2784/620 2781/5248 2782/622\nf 183/3679 2782/622 2781/5248\nf 2788/623 2779/5249 2786/624\nf 711/3672 2786/624 2779/5249\nf 184/3683 2795/625 2794/4533\nf 2797/627 2794/4533 2795/625\nf 2791/5250 715/3677 2802/629\nf 2799/630 2802/629 715/3677\nf 2808/5251 185/3666 2810/631\nf 2764/609 2810/631 185/3666\nf 2805/5252 718/3681 2814/633\nf 2811/634 2814/633 718/3681\nf 174/3618 2819/635 2601/3619\nf 2821/637 2601/3619 2819/635\nf 2816/5253 722/3685 2828/639\nf 2824/640 2828/639 722/3685\nf 2641/5254 35/5255 2834/643\nf 2832/644 2834/643 35/5255\nf 2830/5256 725/3689 2840/647\nf 2837/648 2840/647 725/3689\nf 2847/653 2836/5257 2845/651\nf 187/3703 2845/651 2836/5257\nf 2854/656 2842/5258 2850/658\nf 729/3692 2850/658 2842/5258\nf 2823/5259 190/3691 2860/659\nf 2843/660 2860/659 190/3691\nf 2856/5260 732/3697 2866/663\nf 2862/664 2866/663 732/3697\nf 178/3639 2870/667 2665/3638\nf 2872/669 2665/3638 2870/667\nf 735/3701 2875/671 2868/5261\nf 2878/673 2868/5261 2875/671\nf 33/3651 2882/675 2703/3650\nf 2884/677 2703/3650 2882/675\nf 738/3705 2887/679 2880/5262\nf 2890/681 2880/5262 2887/679\nf 191/3719 2895/686 2886/5263\nf 2897/684 2886/5263 2895/686\nf 2904/688 2892/5264 2900/690\nf 742/3709 2900/690 2892/5264\nf 193/3707 2893/691 2874/5265\nf 2909/693 2874/5265 2893/691\nf 744/3713 2911/695 2906/5266\nf 2914/697 2906/5266 2911/695\nf 2920/701 2748/5267 2918/699\nf 181/3660 2918/699 2748/5267\nf 747/3717 2923/703 2916/5268\nf 2926/705 2916/5268 2923/703\nf 2737/5269 36/5270 2932/707\nf 2930/708 2932/707 36/5270\nf 2938/713 2928/5271 2935/711\nf 750/3720 2935/711 2928/5271\nf 2945/716 2934/5272 2943/718\nf 194/3735 2943/718 2934/5272\nf 754/3725 2948/722 2940/5273\nf 2952/720 2940/5273 2948/722\nf 196/3723 2941/723 2922/5274\nf 2957/725 2922/5274 2941/723\nf 2962/728 2954/5275 2959/730\nf 756/3729 2959/730 2954/5275\nf 2966/732 2968/731 185/3666\nf 2765/3667 185/3666 2968/731\nf 2964/5276 759/3733 2974/735\nf 2971/736 2974/735 759/3733\nf 2803/5277 37/4603 2980/739\nf 2978/740 2980/739 37/4603\nf 2976/5278 762/3737 2986/743\nf 2983/744 2986/743 762/3737\nf 2982/5279 197/4599 2993/747\nf 2991/748 2993/747 197/4599\nf 766/3741 2996/751 2988/5280\nf 3000/753 2988/5280 2996/751\nf 2970/5281 199/3739 3005/755\nf 2989/756 3005/755 199/3739\nf 3002/5282 768/3745 3010/760\nf 3007/762 3010/760 768/3745\nf 183/5283 3015/763 2801/5284\nf 3017/765 2801/5284 3015/763\nf 772/3749 3020/767 3012/5285\nf 3024/769 3012/5285 3020/767\nf 8/3583 3028/771 2777/5286\nf 3030/773 2777/5286 3028/771\nf 3036/776 3026/5287 3033/778\nf 775/3753 3033/778 3026/5287\nf 3043/780 3032/5288 3041/782\nf 200/3766 3041/782 3032/5288\nf 3050/784 3038/5289 3046/786\nf 779/3756 3046/786 3038/5289\nf 203/3755 3039/787 3019/5290\nf 3056/789 3019/5290 3039/787\nf 782/3761 3058/791 3052/5291\nf 3062/793 3052/5291 3058/791\nf 2481/5292 161/3579 3068/795\nf 3066/796 3068/795 161/3579\nf 3064/5293 785/3765 3074/802\nf 3071/801 3074/802 785/3765\nf 2469/5294 28/3567 3080/803\nf 3078/804 3080/803 28/3567\nf 3076/5295 788/3769 3086/807\nf 3083/808 3086/807 788/3769\nf 3082/5296 204/3783 3093/811\nf 3091/812 3093/811 204/3783\nf 3096/816 3100/815 792/3773\nf 3088/5297 792/3773 3100/815\nf 3070/5298 206/3771 3105/822\nf 3089/821 3105/822 206/3771\nf 3110/824 3102/5299 3107/826\nf 794/3776 3107/826 3102/5299\nf 158/3563 3114/827 2433/5300\nf 3116/829 2433/5300 3114/827\nf 797/3781 3119/831 3112/5301\nf 3122/833 3112/5301 3119/831\nf 7/3615 3126/835 2421/5302\nf 3128/837 2421/5302 3126/835\nf 800/3785 3131/839 3124/5303\nf 3134/841 3124/5303 3131/839\nf 3130/5304 207/3799 3141/843\nf 3139/844 3141/843 207/3799\nf 3136/5305 804/3788 3148/847\nf 3144/848 3148/847 804/3788\nf 209/3787 3137/852 3118/5306\nf 3153/851 3118/5306 3137/852\nf 3150/5307 806/3793 3158/855\nf 3155/856 3158/855 806/3793\nf 2582/5308 169/3611 3164/859\nf 3162/860 3164/859 169/3611\nf 3160/5309 809/3797 3170/863\nf 3167/864 3170/863 809/3797\nf 2571/5310 30/4667 3176/867\nf 3174/868 3176/867 30/4667\nf 3172/5311 812/3801 3182/871\nf 3179/872 3182/871 812/3801\nf 3178/5312 210/4663 3189/875\nf 3187/876 3189/875 210/4663\nf 3184/5313 816/3805 3196/879\nf 3192/880 3196/879 816/3805\nf 3166/5314 212/3803 3201/883\nf 3185/884 3201/883 212/3803\nf 3203/889 3206/890 818/3809\nf 3198/5315 818/3809 3206/890\nf 3213/892 3057/5316 3211/894\nf 201/3758 3211/894 3057/5316\nf 3220/896 3208/5317 3216/898\nf 822/3812 3216/898 3208/5317\nf 44/3778 3224/902 3045/5318\nf 3226/900 3045/5318 3224/902\nf 825/3817 3229/903 3222/5319\nf 3232/905 3222/5319 3229/903\nf 213/5320 3237/907 3228/5321\nf 3239/909 3228/5321 3237/907\nf 829/3821 3242/911 3234/5322\nf 3246/913 3234/5322 3242/911\nf 3252/916 3215/5323 3235/918\nf 216/3819 3235/918 3215/5323\nf 3258/920 3248/5324 3254/922\nf 832/3824 3254/922 3248/5324\nf 3106/5325 205/3774 3265/923\nf 3263/924 3265/923 205/3774\nf 3260/5326 836/3829 3272/927\nf 3268/928 3272/927 836/3829\nf 3095/5327 46/3795 3278/931\nf 3276/932 3278/931 46/3795\nf 3281/937 3284/938 839/3832\nf 3274/5328 839/3832 3284/938\nf 3289/941 3291/942 217/3844\nf 3280/5329 217/3844 3291/942\nf 3294/945 3298/946 843/3835\nf 3286/5330 843/3835 3298/946\nf 3287/949 3304/950 220/3833\nf 3267/5331 220/3833 3304/950\nf 3306/953 3310/954 846/3839\nf 3300/5332 846/3839 3310/954\nf 3154/5333 208/3791 3316/955\nf 3314/956 3316/955 208/3791\nf 3312/5334 849/3843 3322/962\nf 3319/961 3322/962 849/3843\nf 3143/5335 43/3810 3328/963\nf 3326/964 3328/963 43/3810\nf 3324/5336 852/3847 3334/967\nf 3331/968 3334/967 852/3847\nf 3330/5337 221/3861 3341/971\nf 3339/972 3341/971 221/3861\nf 3336/5338 856/3850 3348/977\nf 3344/975 3348/977 856/3850\nf 3337/980 3353/979 223/3849\nf 3318/5339 223/3849 3353/979\nf 3358/985 3350/5340 3355/983\nf 858/3855 3355/983 3350/5340\nf 3362/989 3364/990 211/3807\nf 3202/5341 211/3807 3364/990\nf 3360/5342 861/3859 3370/991\nf 3367/992 3370/991 861/3859\nf 3191/5343 47/4731 3376/995\nf 3374/996 3376/995 47/4731\nf 3379/1001 3382/1002 864/3863\nf 3372/5344 864/3863 3382/1002\nf 3387/1005 3389/1006 224/4726\nf 3378/5345 224/4726 3389/1006\nf 3392/1008 3396/1007 868/3866\nf 3384/5346 868/3866 3396/1007\nf 3366/5347 226/3865 3401/1011\nf 3385/1012 3401/1011 226/3865\nf 3398/5348 870/3871 3406/1015\nf 3403/1016 3406/1015 870/3871\nf 3413/1020 3253/5349 3411/1022\nf 214/3823 3411/1022 3253/5349\nf 3420/1024 3408/5350 3416/1026\nf 874/3874 3416/1026 3408/5350\nf 49/5351 3424/1027 3241/5352\nf 3426/1029 3241/5352 3424/1027\nf 877/3879 3429/1031 3422/5353\nf 3432/1033 3422/5353 3429/1031\nf 227/3893 3437/1035 3428/5354\nf 3439/1037 3428/5354 3437/1035\nf 881/3883 3442/1039 3434/5355\nf 3446/1041 3434/5355 3442/1039\nf 230/3881 3435/1043 3415/5356\nf 3452/1045 3415/5356 3435/1043\nf 3458/1049 3448/5357 3454/1047\nf 884/3887 3454/1047 3448/5357\nf 231/5358 3464/1051 3463/5359\nf 3466/1053 3463/5359 3464/1051\nf 888/3891 3469/1058 3461/5360\nf 3472/1056 3461/5360 3469/1058\nf 3477/5361 51/5362 3480/1059\nf 3478/1060 3480/1059 51/5362\nf 3475/5363 892/3895 3486/1063\nf 3483/1064 3486/1063 892/3895\nf 3482/5364 232/3909 3493/1067\nf 3491/1068 3493/1067 232/3909\nf 3496/1073 3500/1074 896/3899\nf 3488/5365 896/3899 3500/1074\nf 3505/1076 3468/5366 3489/1078\nf 234/3897 3489/1078 3468/5366\nf 3510/1080 3502/5367 3507/1082\nf 898/3902 3507/1082 3502/5367\nf 3515/5368 235/5369 3518/1083\nf 3516/1084 3518/1083 235/5369\nf 3513/5370 902/3907 3524/1087\nf 3521/1088 3524/1087 902/3907\nf 3530/1093 3532/1094 32/4778\nf 3529/5371 32/4778 3532/1094\nf 3527/5372 906/3911 3538/1095\nf 3535/1096 3538/1095 906/3911\nf 3543/1101 3545/1102 236/4774\nf 3534/5373 236/4774 3545/1102\nf 3540/5374 910/3915 3552/1103\nf 3548/1104 3552/1103 910/3915\nf 3520/5375 238/3913 3557/1110\nf 3541/1109 3557/1110 238/3913\nf 3559/1113 3562/1114 912/3918\nf 3554/5376 912/3918 3562/1114\nf 228/3885 3567/1115 3453/5377\nf 3569/1117 3453/5377 3567/1115\nf 916/3923 3572/1119 3564/5378\nf 3576/1121 3564/5378 3572/1119\nf 3581/1123 3441/5379 3509/1079\nf 54/3904 3509/1079 3441/5379\nf 3586/1126 3578/5380 3583/1128\nf 918/3926 3583/1128 3578/5380\nf 3582/5381 233/3900 3592/1129\nf 3498/1072 3592/1129 233/3900\nf 3588/5382 920/3931 3596/1131\nf 3593/1132 3596/1131 920/3931\nf 3571/5383 240/3928 3602/1134\nf 3589/1135 3602/1134 240/3928\nf 3598/5384 922/3934 3606/1138\nf 3603/1139 3606/1138 922/3934\nf 3525/5385 235/5369 3613/1141\nf 3611/1142 3613/1141 235/5369\nf 926/3938 3616/1145 3608/5386\nf 3620/1147 3608/5386 3616/1145\nf 3511/5387 51/5362 3626/1149\nf 3624/1150 3626/1149 51/5362\nf 3632/1154 3622/5388 3629/1156\nf 929/3942 3629/1156 3622/5388\nf 3639/1158 3628/5389 3637/1160\nf 241/3955 3637/1160 3628/5389\nf 3646/1162 3634/5390 3642/1164\nf 933/3945 3642/1164 3634/5390\nf 3652/1166 3615/5391 3635/1168\nf 244/3943 3635/1168 3615/5391\nf 936/3949 3654/1169 3648/5392\nf 3658/1171 3648/5392 3654/1169\nf 3662/1174 3664/1173 231/5358\nf 3473/5393 231/5358 3664/1173\nf 3660/5394 939/3954 3670/1180\nf 3667/1179 3670/1180 939/3954\nf 3675/1182 3459/5395 3240/1183\nf 49/5351 3240/1183 3459/5395\nf 941/3957 3677/1184 3672/5396\nf 3680/1186 3672/5396 3677/1184\nf 213/5320 3227/1188 3676/5397\nf 3686/1189 3676/5397 3227/1188\nf 3687/1193 3690/1194 943/3962\nf 3682/5398 943/3962 3690/1194\nf 3683/1197 3695/1198 245/3959\nf 3666/5399 245/3959 3695/1198\nf 944/3965 3696/1199 3692/5400\nf 3698/1201 3692/5400 3696/1199\nf 3402/5401 225/3869 3704/1203\nf 3702/1204 3704/1203 225/3869\nf 3700/5402 947/3968 3710/1207\nf 3707/1208 3710/1207 947/3968\nf 3714/1213 3716/1214 52/4839\nf 3391/5403 52/4839 3716/1214\nf 3712/5404 950/3969 3722/1215\nf 3719/1216 3722/1215 950/3969\nf 3727/1221 3729/1222 246/4835\nf 3718/5405 246/4835 3729/1222\nf 3724/5406 954/3974 3736/1223\nf 3732/1224 3736/1223 954/3974\nf 3706/5407 248/3972 3741/1227\nf 3725/1228 3741/1227 248/3972\nf 3738/5408 956/3978 3746/1234\nf 3743/1233 3746/1234 956/3978\nf 3753/1236 3653/5409 3751/1238\nf 242/3947 3751/1238 3653/5409\nf 3760/1239 3748/5410 3756/1240\nf 960/3979 3756/1240 3748/5410\nf 3765/1244 3641/5411 3308/952\nf 59/3841 3308/952 3641/5411\nf 3770/1246 3762/5412 3767/1248\nf 962/3983 3767/1248 3762/5412\nf 3776/1250 3766/5413 3296/944\nf 218/3837 3296/944 3766/5413\nf 3772/5414 964/3987 3780/1251\nf 3777/1252 3780/1251 964/3987\nf 3755/5415 250/3985 3786/1254\nf 3773/1255 3786/1254 250/3985\nf 3782/5416 966/3991 3790/1258\nf 3787/1259 3790/1258 966/3991\nf 3799/1263 3796/5417 3797/1261\nf 251/4001 3797/1261 3796/5417\nf 971/3995 3802/1265 3793/5418\nf 3806/1267 3793/5418 3802/1265\nf 252/4005 3813/1272 3812/1489\nf 3815/1270 3812/1489 3813/1272\nf 3820/1273 3809/5419 3817/1274\nf 975/3998 3817/1274 3809/5419\nf 3826/5420 253/3997 3828/1275\nf 3804/1268 3828/1275 253/3997\nf 3823/5421 978/4003 3832/1277\nf 3829/1278 3832/1277 978/4003\nf 255/5422 3838/1279 3837/1520\nf 3840/1281 3837/1520 3838/1279\nf 982/4007 3843/1283 3835/5423\nf 3846/1285 3835/5423 3843/1283\nf 61/5424 3852/1287 3851/1511\nf 3854/1289 3851/1511 3852/1287\nf 986/4011 3857/1291 3849/5425\nf 3860/1293 3849/5425 3857/1291\nf 256/4025 3865/1295 3856/5426\nf 3867/1297 3856/5426 3865/1295\nf 990/4015 3870/1299 3862/5427\nf 3874/1301 3862/5427 3870/1299\nf 258/4013 3863/1303 3842/5428\nf 3879/1305 3842/5428 3863/1303\nf 992/4019 3881/1307 3876/5429\nf 3884/1309 3876/5429 3881/1307\nf 3805/3996 253/3997 3890/1314\nf 3888/1313 3890/1314 253/3997\nf 3896/1316 3886/5430 3893/1318\nf 995/4023 3893/1318 3886/5430\nf 2/5431 1799/1320 3821/5432\nf 3901/1319 3821/5432 1799/1320\nf 3906/1324 3898/5433 3903/1326\nf 997/4026 3903/1326 3898/5433\nf 3912/1328 3902/5434 1784/1330\nf 113/5435 1784/1330 3902/5434\nf 3918/1332 3908/5436 3914/1334\nf 1000/4030 3914/1334 3908/5436\nf 3923/1336 3892/5437 3909/1338\nf 260/4028 3909/1338 3892/5437\nf 3928/1341 3920/5438 3925/1339\nf 1002/4034 3925/1339 3920/5438\nf 3935/1345 3819/4000 3933/1343\nf 251/4001 3933/1343 3819/4000\nf 3938/1349 3942/1350 1006/4038\nf 3930/5439 1006/4038 3942/1350\nf 61/5424 3946/1351 3791/5440\nf 3948/1353 3791/5440 3946/1351\nf 1009/4043 3951/1355 3944/5441\nf 3954/1357 3944/5441 3951/1355\nf 3961/1361 3950/5442 3959/1359\nf 261/4148 3959/1359 3950/5442\nf 1013/4047 3964/1366 3956/5443\nf 3968/1364 3956/5443 3964/1366\nf 3937/5444 264/4045 3974/1367\nf 3957/1368 3974/1367 264/4045\nf 3970/5445 1016/4051 3980/1374\nf 3976/1373 3980/1374 1016/4051\nf 3988/1376 3985/5446 3986/1378\nf 265/4156 3986/1378 3985/5446\nf 1020/4055 3991/1379 3983/5447\nf 3994/1381 3983/5447 3991/1379\nf 3999/5448 66/5449 4002/1383\nf 4000/1384 4002/1383 66/5449\nf 3997/5450 1024/4057 4008/1387\nf 4005/1388 4008/1387 1024/4057\nf 4015/1392 4004/5451 4013/1394\nf 266/4170 4013/1394 4004/5451\nf 4010/5452 1028/4060 4022/1395\nf 4018/1396 4022/1395 1028/4060\nf 4011/1401 4027/1402 268/4058\nf 3990/5453 268/4058 4027/1402\nf 4029/1404 4032/1403 1030/4064\nf 4024/5454 1030/4064 4032/1403\nf 269/4092 4038/1407 4037/5455\nf 4040/1409 4037/5455 4038/1407\nf 1034/4067 4043/1411 4035/5456\nf 4046/1413 4035/5456 4043/1411\nf 4054/1417 4051/5457 4052/1415\nf 67/4113 4052/1415 4051/5457\nf 1038/4071 4057/1419 4049/5458\nf 4060/1421 4049/5458 4057/1419\nf 270/4117 4065/1423 4056/5459\nf 4067/1425 4056/5459 4065/1423\nf 1041/4075 4069/1427 4062/5460\nf 4072/1429 4062/5460 4069/1427\nf 271/4073 4063/1431 4042/5461\nf 4077/1433 4042/5461 4063/1431\nf 1042/4079 4078/1435 4074/5462\nf 4080/1437 4074/5462 4078/1435\nf 4084/1441 4086/1442 126/5463\nf 1953/5464 126/5463 4086/1442\nf 4089/1444 4092/1443 1045/4082\nf 4082/5465 1045/4082 4092/1443\nf 1939/5466 13/5467 4098/1447\nf 4096/1448 4098/1447 13/5467\nf 4101/1453 4104/1454 1048/4087\nf 4094/5468 1048/4087 4104/1454\nf 4100/5469 272/4101 4111/1455\nf 4109/1456 4111/1455 272/4101\nf 4113/1461 4116/1462 1051/4091\nf 4106/5470 1051/4091 4116/1462\nf 4121/1464 4088/5471 4107/1466\nf 273/4088 4107/1466 4088/5471\nf 4118/5472 1052/4094 4124/1468\nf 4122/1470 4124/1468 1052/4094\nf 1901/5473 122/5474 4130/1471\nf 4128/1472 4130/1471 122/5474\nf 4126/5475 1055/4099 4136/1475\nf 4133/1476 4136/1475 1055/4099\nf 2/5431 3824/1479 1887/5476\nf 4141/1481 1887/5476 3824/1479\nf 4138/5477 1057/4103 4146/1483\nf 4143/1484 4146/1483 1057/4103\nf 4142/5478 252/4005 4152/1490\nf 3812/1489 4152/1490 252/4005\nf 4154/1493 4158/1494 1060/4106\nf 4148/5479 1060/4106 4158/1494\nf 4132/5480 275/4105 4163/1495\nf 4149/1496 4163/1495 275/4105\nf 4160/5481 1062/4111 4168/1499\nf 4165/1500 4168/1499 1062/4111\nf 276/5482 4174/1503 4173/5483\nf 4176/1505 4173/5483 4174/1503\nf 1066/4114 4179/1507 4171/5484\nf 4182/1509 4171/5484 4179/1507\nf 61/5424 3851/1511 4187/5485\nf 4189/1513 4187/5485 3851/1511\nf 1069/4119 4191/1515 4185/5486\nf 4194/1517 4185/5486 4191/1515\nf 4190/5487 255/5422 4200/1519\nf 3837/1520 4200/1519 255/5422\nf 4196/5488 1071/4123 4204/1523\nf 4201/1524 4204/1523 1071/4123\nf 277/4121 4197/1527 4178/5489\nf 4209/1529 4178/5489 4197/1527\nf 1072/4127 4210/1531 4206/5490\nf 4212/1533 4206/5490 4210/1531\nf 4217/1537 4219/1538 274/4108\nf 4164/5491 274/4108 4219/1538\nf 1076/4130 4222/1539 4214/5492\nf 4226/1541 4214/5492 4222/1539\nf 3931/1545 4231/1546 62/5493\nf 4153/5494 62/5493 4231/1546\nf 4228/5495 1078/4134 4236/1547\nf 4233/1548 4236/1547 1078/4134\nf 4232/5496 263/4040 4242/1551\nf 3971/1552 4242/1551 263/4040\nf 4238/5497 1080/4139 4246/1555\nf 4243/1556 4246/1555 1080/4139\nf 4221/5498 279/4137 4252/1558\nf 4239/1559 4252/1558 279/4137\nf 4248/5499 1082/4142 4256/1562\nf 4253/1563 4256/1562 1082/4142\nf 276/5482 4260/1565 4183/5500\nf 4262/1567 4183/5500 4260/1565\nf 4268/1571 4258/5501 4265/1569\nf 1085/4145 4265/1569 4258/5501\nf 67/4113 4272/1574 4169/5502\nf 4274/1573 4169/5502 4272/1574\nf 4277/1580 4280/1578 1088/4149\nf 4270/5503 1088/4149 4280/1578\nf 4276/5504 280/4164 4287/1581\nf 4285/1582 4287/1581 280/4164\nf 1091/4154 4289/1585 4282/5505\nf 4292/1587 4282/5505 4289/1585\nf 281/4152 4283/1589 4264/5506\nf 4297/1591 4264/5506 4283/1589\nf 1092/4158 4298/1593 4294/5507\nf 4300/1595 4294/5507 4298/1593\nf 4225/4132 278/4133 4306/1600\nf 4304/1599 4306/1600 278/4133\nf 4309/1603 4312/1604 1095/4161\nf 4302/5508 1095/4161 4312/1604\nf 4013/1394 266/4170 4318/1607\nf 4316/1605 4318/1607 266/4170\nf 1097/4165 4320/1609 4314/5509\nf 4322/1610 4314/5509 4320/1609\nf 280/4164 4311/1602 4285/1582\nf 4327/1611 4285/1582 4311/1602\nf 1098/4169 4328/1614 4324/5510\nf 4330/1613 4324/5510 4328/1614\nf 198/3743 4335/1615 3006/5511\nf 4337/1617 3006/5511 4335/1615\nf 4344/1620 4332/5512 4340/1622\nf 1102/4172 4340/1622 4332/5512\nf 4349/5034 283/4180 4352/1623\nf 4350/1624 4352/1623 283/4180\nf 4347/5513 1105/4177 4356/1627\nf 4354/1628 4356/1627 1105/4177\nf 4362/5514 284/4174 4364/1629\nf 4342/1619 4364/1629 284/4174\nf 4368/1631 4359/5515 4365/1632\nf 1108/4179 4365/1632 4359/5515\nf 4372/1635 4374/1636 284/4174\nf 4343/4175 284/4174 4374/1636\nf 4377/1638 4380/1637 1111/4182\nf 4370/5516 1111/4182 4380/1637\nf 68/5048 4384/1641 4357/5517\nf 4386/1643 4357/5517 4384/1641\nf 4382/5518 1114/4185 4392/1645\nf 4389/1646 4392/1645 1114/4185\nf 4388/5519 286/5045 4399/1649\nf 4397/1650 4399/1649 286/5045\nf 4394/5520 1118/4189 4406/1653\nf 4402/1654 4406/1653 1118/4189\nf 4376/5521 288/4187 4411/1657\nf 4395/1658 4411/1657 288/4187\nf 4408/5522 1120/4193 4416/1664\nf 4413/1663 4416/1664 1120/4193\nf 4423/1666 2910/5523 4421/1668\nf 192/3710 4421/1668 2910/5523\nf 4430/1670 4418/5524 4426/1672\nf 1124/4194 4426/1672 4418/5524\nf 4435/1674 2899/5525 4415/1662\nf 38/3730 4415/1662 2899/5525\nf 4440/1676 4432/5526 4437/1678\nf 1126/4198 4437/1678 4432/5526\nf 4446/1680 4436/5527 4404/1655\nf 287/4191 4404/1655 4436/5527\nf 4452/1681 4442/5528 4448/1682\nf 1129/4202 4448/1682 4442/5528\nf 4458/1686 4425/5529 4443/1688\nf 291/4200 4443/1688 4425/5529\nf 4464/1690 4454/5530 4460/1692\nf 1132/4206 4460/1692 4454/5530\nf 4468/1694 4470/1693 290/4196\nf 4429/4197 290/4196 4470/1693\nf 4466/5531 1135/4211 4476/1699\nf 4473/1697 4476/1699 1135/4211\nf 292/4218 4482/1704 4481/5076\nf 4484/1702 4481/5076 4482/1704\nf 4488/1705 4479/5532 4486/1706\nf 1138/4212 4486/1706 4479/5532\nf 2861/5533 188/3695 4494/1707\nf 4475/1700 4494/1707 188/3695\nf 4490/5534 1140/4216 4498/1710\nf 4495/1709 4498/1710 1140/4216\nf 1793/3371 116/3372 4505/1712\nf 4503/1714 4505/1712 116/3372\nf 4500/5535 1144/4220 4512/1717\nf 4508/1715 4512/1717 1144/4220\nf 1833/3383 18/3384 4518/1720\nf 4516/1722 4518/1720 18/3384\nf 4524/1724 4514/5536 4521/1726\nf 1147/4223 4521/1726 4514/5536\nf 294/4238 4529/1727 4520/5537\nf 4531/1729 4520/5537 4529/1727\nf 4538/1732 4526/5538 4534/1734\nf 1151/4227 4534/1734 4526/5538\nf 297/4225 4527/1735 4507/5539\nf 4544/1737 4507/5539 4527/1735\nf 1154/4232 4546/1739 4540/5540\nf 4550/1741 4540/5540 4546/1739\nf 1847/3387 120/3388 4556/1745\nf 4554/1743 4556/1745 120/3388\nf 1157/4236 4559/1747 4552/5541\nf 4562/1749 4552/5541 4559/1747\nf 4568/1753 1885/3399 4566/1751\nf 17/3400 4566/1751 1885/3399\nf 1160/4240 4571/1755 4564/5542\nf 4574/1757 4564/5542 4571/1755\nf 298/5543 4579/1759 4570/5544\nf 4581/1761 4570/5544 4579/1759\nf 1164/4244 4584/1763 4576/5545\nf 4588/1765 4576/5545 4584/1763\nf 300/4242 4577/1767 4558/5546\nf 4593/1769 4558/5546 4577/1767\nf 1166/4248 4595/1771 4590/5547\nf 4598/1773 4590/5547 4595/1771\nf 4605/1775 4545/5548 4603/1776\nf 295/4229 4603/1776 4545/5548\nf 4600/5549 1170/4252 4612/1779\nf 4608/1780 4612/1779 1170/4252\nf 4618/1784 4533/5550 4616/1786\nf 82/4250 4616/1786 4533/5550\nf 4614/5551 1173/4255 4624/1787\nf 4621/1788 4624/1787 1173/4255\nf 4631/1792 4620/5552 4629/1794\nf 301/4301 4629/1794 4620/5552\nf 4638/1796 4626/5553 4634/1798\nf 1177/4259 4634/1798 4626/5553\nf 4607/5554 304/4258 4644/1799\nf 4627/1800 4644/1799 304/4258\nf 4640/5555 1180/4264 4650/1803\nf 4646/1804 4650/1803 1180/4264\nf 4657/1808 4645/5556 4655/1810\nf 302/4261 4655/1810 4645/5556\nf 4664/1812 4652/5557 4660/1814\nf 1184/4267 4660/1814 4652/5557\nf 4670/1816 4633/5558 4668/1818\nf 85/4313 4668/1818 4633/5558\nf 4676/1820 4666/5559 4673/1822\nf 1187/4271 4673/1822 4666/5559\nf 4683/1824 4672/5560 4681/1826\nf 305/4285 4681/1826 4672/5560\nf 4690/1827 4678/5561 4686/1828\nf 1191/4275 4686/1828 4678/5561\nf 4696/1832 4659/5562 4679/1834\nf 308/4273 4679/1834 4659/5562\nf 4692/5563 1194/4280 4702/1835\nf 4698/1836 4702/1835 1194/4280\nf 4710/1840 4707/5564 4708/1842\nf 309/4309 4708/1842 4707/5564\nf 4716/1844 4705/5565 4713/1846\nf 1198/4283 4713/1846 4705/5565\nf 4724/1848 4721/5566 4722/1850\nf 84/5567 4722/1850 4721/5566\nf 4730/1852 4719/5568 4727/1854\nf 1202/4287 4727/1854 4719/5568\nf 4737/1857 4726/5569 4735/1855\nf 310/5570 4735/1855 4726/5569\nf 4732/5571 1206/4291 4744/1859\nf 4740/1860 4744/1859 1206/4291\nf 4749/1864 4712/5572 4733/1866\nf 312/4289 4733/1866 4712/5572\nf 4754/1868 4746/5573 4751/1870\nf 1208/4295 4751/1870 4746/5573\nf 299/4246 4758/1871 4594/5574\nf 4760/1873 4594/5574 4758/1871\nf 4766/1876 4756/5575 4763/1878\nf 1211/4299 4763/1878 4756/5575\nf 4772/1880 4583/5576 4770/1882\nf 75/5577 4770/1882 4583/5576\nf 4778/1884 4768/5578 4775/1886\nf 1214/4303 4775/1886 4768/5578\nf 4785/1888 4774/5579 4783/1890\nf 313/5580 4783/1890 4774/5579\nf 4790/1892 4780/5581 4787/1894\nf 1217/4307 4787/1894 4780/5581\nf 4795/1896 4762/5582 4781/1898\nf 314/4305 4781/1898 4762/5582\nf 4798/1900 4792/5583 4796/1902\nf 1218/4311 4796/1902 4792/5583\nf 4697/5584 306/4278 4805/1903\nf 4803/1904 4805/1903 306/4278\nf 4800/5585 1222/4316 4812/1907\nf 4808/1908 4812/1907 1222/4316\nf 4818/1911 4685/5586 4816/1912\nf 83/4297 4816/1912 4685/5586\nf 4814/5587 1225/4320 4824/1915\nf 4821/1916 4824/1915 1225/4320\nf 4831/1920 4820/5588 4829/1922\nf 315/4334 4829/1922 4820/5588\nf 4826/5589 1228/4323 4836/1923\nf 4833/1924 4836/1923 1228/4323\nf 4807/5590 317/4322 4842/1925\nf 4827/1926 4842/1925 317/4322\nf 4838/5591 1230/4328 4846/1929\nf 4843/1930 4846/1929 1230/4328\nf 4750/5592 311/4294 4852/1931\nf 4850/1932 4852/1931 311/4294\nf 4848/5593 1233/4332 4858/1935\nf 4855/1936 4858/1935 1233/4332\nf 4739/5594 76/5595 4864/1939\nf 4862/1940 4864/1939 76/5595\nf 4860/5596 1236/4336 4870/1943\nf 4867/1944 4870/1943 1236/4336\nf 4866/5597 318/4350 4877/1947\nf 4875/1948 4877/1947 318/4350\nf 4872/5598 1239/4340 4882/1951\nf 4879/1952 4882/1951 1239/4340\nf 4854/5599 319/4338 4887/1953\nf 4873/1954 4887/1953 319/4338\nf 4884/5600 1240/4344 4890/1957\nf 4888/1958 4890/1957 1240/4344\nf 4894/1961 4896/1962 310/5570\nf 4735/1855 310/5570 4896/1962\nf 4892/5601 1243/4347 4902/1963\nf 4899/1964 4902/1963 1243/4347\nf 4722/1850 84/5567 4908/1967\nf 4906/1968 4908/1967 84/5567\nf 4904/5602 1246/4352 4914/1971\nf 4911/1972 4914/1971 1246/4352\nf 4910/5603 320/4366 4921/1975\nf 4919/1976 4921/1975 320/4366\nf 4923/1979 4926/1980 1249/4356\nf 4916/5604 1249/4356 4926/1980\nf 4917/1983 4931/1984 321/4353\nf 4898/5605 321/4353 4931/1984\nf 4928/5606 1250/4360 4934/1985\nf 4932/1986 4934/1985 1250/4360\nf 4783/1890 313/5580 4940/1989\nf 4938/1987 4940/1989 313/5580\nf 4936/5607 1253/4364 4946/1993\nf 4943/1991 4946/1993 1253/4364\nf 4951/1996 4770/1882 4582/1995\nf 75/5577 4582/1995 4770/1882\nf 4956/1999 4948/5608 4953/2001\nf 1255/4367 4953/2001 4948/5608\nf 298/5543 4569/2002 4952/5609\nf 4962/2003 4952/5609 4569/2002\nf 4966/2006 4958/5610 4963/2005\nf 1257/4372 4963/2005 4958/5610\nf 322/4369 4959/2007 4942/5611\nf 4971/2009 4942/5611 4959/2007\nf 1258/4376 4972/2011 4968/5612\nf 4974/2012 4968/5612 4972/2011\nf 4980/5613 323/5614 4983/2013\nf 4981/2014 4983/2013 323/5614\nf 1263/4379 4986/2017 4977/5615\nf 4990/2019 4977/5615 4986/2017\nf 4995/5616 86/5617 4998/2021\nf 4996/2022 4998/2021 86/5617\nf 4993/5618 1267/4384 5004/2025\nf 5001/2026 5004/2025 1267/4384\nf 5000/5619 324/4430 5011/2029\nf 5009/2030 5011/2029 324/4430\nf 5006/5620 1271/4388 5018/2033\nf 5014/2034 5018/2033 1271/4388\nf 5024/2039 4985/5621 5007/2037\nf 327/4386 5007/2037 4985/5621\nf 1274/4392 5026/2041 5020/5622\nf 5030/2043 5020/5622 5026/2041\nf 325/4389 5035/2045 5025/5623\nf 5037/2047 5025/5623 5035/2045\nf 1278/4396 5040/2050 5032/5624\nf 5044/2049 5032/5624 5040/2050\nf 5013/5625 89/4442 5050/2053\nf 5048/2054 5050/2053 89/4442\nf 5046/5626 1281/4400 5056/2057\nf 5053/2058 5056/2057 1281/4400\nf 328/4414 5061/2061 5052/5627\nf 5063/2063 5052/5627 5061/2061\nf 5058/5628 1285/4404 5070/2065\nf 5066/2066 5070/2065 1285/4404\nf 5039/5629 331/4402 5076/2069\nf 5059/2070 5076/2069 331/4402\nf 5072/5630 1288/4408 5082/2073\nf 5078/2074 5082/2073 1288/4408\nf 5087/5631 332/4438 5090/2077\nf 5088/2078 5090/2077 332/4438\nf 1292/4412 5093/2081 5085/5632\nf 5096/2083 5085/5632 5093/2081\nf 5101/5633 88/4635 5104/2086\nf 5102/2088 5104/2086 88/4635\nf 1296/4415 5107/2089 5099/5634\nf 5110/2091 5099/5634 5107/2089\nf 333/4638 5115/2096 5106/5635\nf 5117/2094 5106/5635 5115/2096\nf 1300/4420 5120/2100 5112/5636\nf 5124/2098 5112/5636 5120/2100\nf 335/4418 5113/2101 5092/5637\nf 5129/2103 5092/5637 5113/2101\nf 1302/4424 5131/2105 5126/5638\nf 5134/2107 5126/5638 5131/2105\nf 5139/5639 336/5640 5142/2109\nf 5140/2110 5142/2109 336/5640\nf 5137/5641 1306/4428 5148/2113\nf 5145/2114 5148/2113 1306/4428\nf 5153/5642 78/4618 5156/2117\nf 5154/2118 5156/2117 78/4618\nf 5151/5643 1310/4432 5162/2121\nf 5159/2122 5162/2121 1310/4432\nf 5158/5644 337/4623 5169/2125\nf 5167/2126 5169/2125 337/4623\nf 5164/5645 1313/4436 5174/2129\nf 5171/2130 5174/2129 1313/4436\nf 5144/5646 338/4434 5179/2133\nf 5165/2134 5179/2133 338/4434\nf 5176/5647 1314/4440 5182/2137\nf 5180/2138 5182/2137 1314/4440\nf 5077/5648 329/4406 5189/2141\nf 5187/2142 5189/2141 329/4406\nf 5184/5649 1318/4444 5196/2145\nf 5192/2146 5196/2145 1318/4444\nf 5065/5650 87/4426 5202/2149\nf 5200/2150 5202/2149 87/4426\nf 5198/5651 1321/4448 5208/2153\nf 5205/2154 5208/2153 1321/4448\nf 5204/5652 339/4461 5215/2157\nf 5213/2158 5215/2157 339/4461\nf 5210/5653 1324/4452 5220/2161\nf 5217/2162 5220/2161 1324/4452\nf 5191/5654 341/4450 5226/2163\nf 5211/2164 5226/2163 341/4450\nf 5222/5655 1326/4456 5230/2167\nf 5227/2168 5230/2167 1326/4456\nf 5236/2170 5130/5656 5234/2172\nf 334/4422 5234/2172 5130/5656\nf 5242/2174 5232/5657 5239/2176\nf 1329/4459 5239/2176 5232/5657\nf 5248/2178 5119/5658 5246/2180\nf 77/4650 5246/2180 5119/5658\nf 5254/2182 5244/5659 5251/2184\nf 1332/4463 5251/2184 5244/5659\nf 5250/5660 342/4655 5261/2185\nf 5259/2186 5261/2185 342/4655\nf 5256/5661 1335/4468 5266/2189\nf 5263/2190 5266/2189 1335/4468\nf 5271/2192 5238/5662 5257/2194\nf 343/4465 5257/2194 5238/5662\nf 5274/2195 5268/5663 5272/2196\nf 1336/4471 5272/2196 5268/5663\nf 5280/2198 5282/2197 344/4481\nf 5279/4544 344/4481 5282/2197\nf 5277/5664 1340/4476 5288/2204\nf 5285/2203 5288/2204 1340/4476\nf 345/4485 5295/2205 5294/4496\nf 5297/2207 5294/4496 5295/2205\nf 1344/4479 5299/2209 5291/5665\nf 5302/2210 5291/5665 5299/2209\nf 5308/5666 346/4489 5311/2211\nf 5309/2212 5311/2211 346/4489\nf 5305/5667 1348/4483 5316/2215\nf 5313/2216 5316/2215 1348/4483\nf 316/4493 5321/2217 4811/5668\nf 5323/2219 4811/5668 5321/2217\nf 1351/4487 5325/2221 5318/5669\nf 5328/2222 5318/5669 5325/2221\nf 2613/3622 171/3623 5333/2223\nf 5287/2202 5333/2223 171/3623\nf 5330/5670 1352/4491 5336/2225\nf 5334/2226 5336/2225 1352/4491\nf 5341/4559 348/4560 5344/2227\nf 5342/2228 5344/2227 348/4560\nf 5339/5671 1356/4495 5350/2231\nf 5347/2232 5350/2231 1356/4495\nf 5355/4571 90/4572 5358/2235\nf 5356/2236 5358/2235 90/4572\nf 5353/5672 1360/4498 5364/2239\nf 5361/2240 5364/2239 1360/4498\nf 5360/5673 349/5674 5371/2243\nf 5369/2244 5371/2243 349/5674\nf 5366/5675 1364/4502 5378/2247\nf 5374/2248 5378/2247 1364/4502\nf 5346/5676 351/4500 5383/2251\nf 5367/2252 5383/2251 351/4500\nf 5380/5677 1366/4506 5388/2255\nf 5385/2256 5388/2255 1366/4506\nf 349/5674 5392/2259 5369/2244\nf 5394/2261 5369/2244 5392/2259\nf 1369/4510 5397/2263 5390/5678\nf 5400/2265 5390/5678 5397/2263\nf 90/4572 5404/2267 5356/2236\nf 5406/2269 5356/2236 5404/2267\nf 1372/4514 5409/2271 5402/5679\nf 5412/2273 5402/5679 5409/2271\nf 352/4576 5417/2275 5408/5680\nf 5419/2277 5408/5680 5417/2275\nf 5414/5681 1376/4518 5426/2279\nf 5422/2280 5426/2279 1376/4518\nf 354/4516 5415/2283 5396/5682\nf 5431/2285 5396/5682 5415/2283\nf 1378/4522 5433/2288 5428/5683\nf 5436/2287 5428/5683 5433/2288\nf 355/4530 5442/2291 5441/4591\nf 5444/2293 5441/4591 5442/2291\nf 1382/4526 5447/2295 5439/5684\nf 5450/2297 5439/5684 5447/2295\nf 2813/3682 184/3683 5457/2299\nf 5455/2300 5457/2299 184/3683\nf 5452/5685 1385/4528 5462/2303\nf 5459/2304 5462/2303 1385/4528\nf 5467/5686 356/4537 5470/2305\nf 5468/2306 5470/2305 356/4537\nf 5465/5687 1388/4532 5474/2310\nf 5472/2309 5474/2310 1388/4532\nf 336/4540 5479/2311 5149/5688\nf 5481/2313 5149/5688 5479/2311\nf 1391/4535 5483/2315 5476/5689\nf 5486/2316 5476/5689 5483/2315\nf 5432/5690 353/4520 5491/2318\nf 5449/2298 5491/2318 353/4520\nf 5488/5691 1392/4538 5494/2319\nf 5492/2320 5494/2319 1392/4538\nf 2827/3686 189/3687 5500/2321\nf 5498/2322 5500/2321 189/3687\nf 5506/2326 5496/5692 5503/2328\nf 1395/4543 5503/2328 5496/5692\nf 2865/3698 39/3699 5512/2329\nf 5510/2330 5512/2329 39/3699\nf 5508/5693 1398/4546 5518/2333\nf 5515/2334 5518/2333 1398/4546\nf 5514/5694 358/5073 5525/2339\nf 5523/2337 5525/2339 358/5073\nf 1402/4550 5528/2341 5520/5695\nf 5532/2343 5520/5695 5528/2341\nf 5502/5696 360/4548 5537/2345\nf 5521/2346 5537/2345 360/4548\nf 5534/5697 1404/4554 5542/2349\nf 5539/2350 5542/2349 1404/4554\nf 359/4552 5546/2353 5538/5698\nf 5548/2355 5538/5698 5546/2353\nf 1407/4558 5551/2357 5544/5699\nf 5554/2359 5544/5699 5551/2357\nf 94/5700 5558/2361 5527/5701\nf 5560/2363 5527/5701 5558/2361\nf 1410/4562 5563/2365 5556/5702\nf 5566/2367 5556/5702 5563/2365\nf 361/5053 5571/2369 5562/5703\nf 5573/2371 5562/5703 5571/2369\nf 1414/4566 5576/2373 5568/5704\nf 5580/2375 5568/5704 5576/2373\nf 363/4564 5569/2377 5550/5705\nf 5585/2379 5550/5705 5569/2377\nf 1416/4570 5587/2381 5582/5706\nf 5590/2383 5582/5706 5587/2381\nf 362/4568 5594/2385 5586/5707\nf 5596/2387 5586/5707 5594/2385\nf 1419/4574 5599/2389 5592/5708\nf 5602/2391 5592/5708 5599/2389\nf 93/5065 5606/2393 5575/5709\nf 5608/2395 5575/5709 5606/2393\nf 1422/4578 5611/2397 5604/5710\nf 5614/2399 5604/5710 5611/2397\nf 364/5711 5619/2401 5610/5712\nf 5621/2403 5610/5712 5619/2401\nf 1426/4582 5624/2405 5616/5713\nf 5628/2407 5616/5713 5624/2405\nf 366/4580 5617/2409 5598/5714\nf 5633/2411 5598/5714 5617/2409\nf 1428/4586 5635/2414 5630/5715\nf 5638/2413 5630/5715 5635/2414\nf 5634/5716 365/4584 5644/2417\nf 5642/2418 5644/2417 365/4584\nf 5640/5717 1431/4590 5650/2421\nf 5647/2422 5650/2421 1431/4590\nf 95/5718 5654/2425 5623/5719\nf 5656/2427 5623/5719 5654/2425\nf 5652/5720 1434/4593 5662/2429\nf 5659/2430 5662/2429 1434/4593\nf 367/5027 5667/2433 5658/5721\nf 5669/2435 5658/5721 5667/2433\nf 5664/5722 1437/4596 5674/2437\nf 5671/2438 5674/2437 1437/4596\nf 5646/5723 368/4595 5679/2439\nf 5665/2440 5679/2439 368/4595\nf 5676/5724 1438/4601 5682/2443\nf 5680/2444 5682/2443 1438/4601\nf 5688/2446 3023/3750 5686/2448\nf 202/3751 5686/2448 3023/3750\nf 5694/2450 5684/5725 5691/2452\nf 1441/4604 5691/2452 5684/5725\nf 5700/2454 3061/3762 5698/2456\nf 45/3763 5698/2456 3061/3762\nf 5706/2458 5696/5726 5703/2460\nf 1444/4608 5703/2460 5696/5726\nf 369/4671 5711/2461 5702/5727\nf 5713/2463 5702/5727 5711/2461\nf 1448/4613 5716/2465 5708/5728\nf 5720/2467 5708/5728 5716/2465\nf 5725/2471 5690/5729 5709/2469\nf 371/4610 5709/2469 5690/5729\nf 5730/2474 5722/5730 5727/2476\nf 1450/4617 5727/2476 5722/5730\nf 5734/2479 5736/2480 370/4615\nf 5726/5731 370/4615 5736/2480\nf 5732/5732 1453/4621 5742/2481\nf 5739/2482 5742/2481 1453/4621\nf 97/4682 5746/2485 5715/5733\nf 5748/2487 5715/5733 5746/2485\nf 5751/2491 5754/2492 1456/4625\nf 5744/5734 1456/4625 5754/2492\nf 5759/2494 5761/2493 372/4812\nf 5750/5735 372/4812 5761/2493\nf 5756/5736 1460/4628 5768/2497\nf 5764/2498 5768/2497 1460/4628\nf 5738/5737 374/4627 5773/2501\nf 5757/2502 5773/2501 374/4627\nf 5770/5738 1462/4633 5778/2505\nf 5775/2506 5778/2505 1462/4633\nf 5774/5739 373/4631 5784/2510\nf 5782/2512 5784/2510 373/4631\nf 5790/2514 5780/5740 5787/2516\nf 1465/4636 5787/2516 5780/5740\nf 5763/5741 98/4824 5796/2517\nf 5794/2518 5796/2517 98/4824\nf 5792/5742 1468/4641 5802/2521\nf 5799/2522 5802/2521 1468/4641\nf 5798/5743 375/4703 5809/2525\nf 5807/2526 5809/2525 375/4703\nf 5812/2530 5816/2529 1472/4645\nf 5804/5744 1472/4645 5816/2529\nf 5821/2534 5786/5745 5805/2536\nf 377/4642 5805/2536 5786/5745\nf 5826/2538 5818/5746 5823/2540\nf 1474/4648 5823/2540 5818/5746\nf 5822/5747 376/4647 5832/2541\nf 5830/2542 5832/2541 376/4647\nf 5828/5748 1477/4653 5838/2545\nf 5835/2546 5838/2545 1477/4653\nf 5842/2551 5844/2552 96/4715\nf 5811/5749 96/4715 5844/2552\nf 5840/5750 1480/4656 5850/2553\nf 5847/2554 5850/2553 1480/4656\nf 5846/5751 378/4718 5857/2557\nf 5855/2558 5857/2557 378/4718\nf 5852/5752 1483/4661 5862/2561\nf 5859/2562 5862/2561 1483/4661\nf 5834/5753 379/4659 5867/2563\nf 5853/2564 5867/2563 379/4659\nf 5864/5754 1484/4665 5870/2567\nf 5868/2568 5870/2567 1484/4665\nf 215/3814 5874/2569 3219/3815\nf 5876/2571 3219/3815 5874/2569\nf 1487/4669 5879/2573 5872/5755\nf 5882/2575 5872/5755 5879/2573\nf 50/3826 5886/2577 3257/3827\nf 5888/2579 3257/3827 5886/2577\nf 1490/4673 5891/2581 5884/5756\nf 5894/2583 5884/5756 5891/2581\nf 5901/2586 5890/5757 5899/2588\nf 380/4735 5899/2588 5890/5757\nf 5908/2590 5896/5758 5904/2592\nf 1494/4676 5904/2592 5896/5758\nf 5913/2594 5878/5759 5897/2596\nf 382/4675 5897/2596 5878/5759\nf 5918/2599 5910/5760 5915/2597\nf 1496/4680 5915/2597 5910/5760\nf 381/4678 5923/2601 5914/5761\nf 5925/2603 5914/5761 5923/2601\nf 5920/5762 1500/4685 5932/2605\nf 5928/2606 5932/2605 1500/4685\nf 5938/2610 5903/5763 5936/2612\nf 100/4746 5936/2612 5903/5763\nf 1503/4688 5941/2614 5934/5764\nf 5944/2613 5934/5764 5941/2614\nf 5940/5765 383/4750 5951/2617\nf 5949/2618 5951/2617 383/4750\nf 5954/2623 5958/2624 1507/4693\nf 5946/5766 1507/4693 5958/2624\nf 5927/5767 386/4691 5964/2625\nf 5947/2626 5964/2625 386/4691\nf 1510/4697 5966/2632 5960/5768\nf 5970/2630 5960/5768 5966/2632\nf 5976/2635 5978/2636 387/4819\nf 5975/5769 387/4819 5978/2636\nf 5973/5770 1514/4701 5984/2637\nf 5981/2638 5984/2637 1514/4701\nf 104/5771 5990/2644 5989/5772\nf 5992/2642 5989/5772 5990/2644\nf 5987/5773 1518/4705 5998/2645\nf 5995/2646 5998/2645 1518/4705\nf 6005/2650 5994/5774 6003/2652\nf 388/5775 6003/2652 5994/5774\nf 6008/2654 6012/2653 1522/4709\nf 6000/5776 1522/4709 6012/2653\nf 5980/5777 390/4706 6017/2657\nf 6001/2658 6017/2657 390/4706\nf 6014/5778 1524/4713 6022/2661\nf 6019/2662 6022/2661 1524/4713\nf 6018/5779 389/4711 6028/2665\nf 6026/2666 6028/2665 389/4711\nf 6024/5780 1527/4717 6034/2672\nf 6031/2671 6034/2672 1527/4717\nf 6007/5781 99/5782 6040/2673\nf 6038/2674 6040/2673 99/5782\nf 6036/5783 1530/4721 6046/2677\nf 6043/2678 6046/2677 1530/4721\nf 6042/5784 391/4828 6053/2681\nf 6051/2682 6053/2681 391/4828\nf 6055/2685 6058/2686 1533/4724\nf 6048/5785 1533/4724 6058/2686\nf 6030/5786 392/4723 6063/2690\nf 6049/2689 6063/2690 392/4723\nf 6060/5787 1534/4728 6066/2691\nf 6064/2692 6066/2691 1534/4728\nf 229/3876 6070/2693 3419/3877\nf 6072/2695 3419/3877 6070/2693\nf 1537/4733 6075/2697 6068/5788\nf 6078/2699 6068/5788 6075/2697\nf 55/3888 6082/2704 3457/3889\nf 6084/2702 3457/3889 6082/2704\nf 6090/2706 6080/5789 6087/2708\nf 1540/4737 6087/2708 6080/5789\nf 6097/2710 6086/5790 6095/2712\nf 393/4782 6095/2712 6086/5790\nf 6104/2714 6092/5791 6100/2716\nf 1544/4740 6100/2716 6092/5791\nf 6109/2718 6074/5792 6093/2720\nf 395/4738 6093/2720 6074/5792\nf 6114/2722 6106/5793 6111/2724\nf 1546/4744 6111/2724 6106/5793\nf 6120/2727 6110/5794 6118/2725\nf 394/4742 6118/2725 6110/5794\nf 6126/2730 6116/5795 6123/2732\nf 1549/4748 6123/2732 6116/5795\nf 102/4795 6130/2733 6099/5796\nf 6132/2735 6099/5796 6130/2733\nf 1552/4753 6135/2737 6128/5797\nf 6138/2739 6128/5797 6135/2737\nf 396/4791 6143/2743 6134/5798\nf 6145/2744 6134/5798 6143/2743\nf 6140/5799 1556/4756 6152/2745\nf 6148/2746 6152/2745 1556/4756\nf 6157/2749 6122/5800 6141/2750\nf 398/4755 6141/2750 6122/5800\nf 6154/5801 1558/4761 6162/2753\nf 6159/2754 6162/2753 1558/4761\nf 6158/5802 397/4759 6169/2757\nf 6167/2758 6169/2757 397/4759\nf 6164/5803 1562/4765 6176/2761\nf 6172/2762 6176/2761 1562/4765\nf 6180/2767 6182/2768 103/5804\nf 6147/5805 103/5804 6182/2768\nf 6185/2771 6188/2772 1565/4768\nf 6178/5806 1565/4768 6188/2772\nf 6193/2774 6195/2773 399/5807\nf 6184/5808 399/5807 6195/2773\nf 6190/5809 1568/4773 6200/2778\nf 6197/2777 6200/2778 1568/4773\nf 6171/5810 401/4771 6206/2779\nf 6191/2780 6206/2779 401/4771\nf 6202/5811 1570/4777 6210/2784\nf 6207/2783 6210/2784 1570/4777\nf 239/3925 6214/2785 3575/3924\nf 6216/2787 3575/3924 6214/2785\nf 1573/4781 6219/2792 6212/5812\nf 6222/2790 6212/5812 6219/2792\nf 3605/3935 53/3936 6227/2793\nf 6196/2794 6227/2793 53/3936\nf 6224/5813 1575/4785 6232/2796\nf 6229/2797 6232/2796 1575/4785\nf 6228/5814 399/5807 6238/2800\nf 6183/2801 6238/2800 399/5807\nf 6234/5815 1577/4789 6242/2803\nf 6239/2804 6242/2803 1577/4789\nf 402/4787 6235/2805 6218/5816\nf 6247/2807 6218/5816 6235/2805\nf 1578/4793 6248/2810 6244/5817\nf 6250/2809 6244/5817 6248/2810\nf 243/3939 6254/2811 3619/3940\nf 6256/2813 3619/3940 6254/2811\nf 6252/5818 1581/4797 6262/2815\nf 6259/2816 6262/2815 1581/4797\nf 57/3952 6266/2819 3657/3951\nf 6268/2821 3657/3951 6266/2819\nf 1584/4800 6271/2823 6264/5819\nf 6274/2825 6264/5819 6271/2823\nf 403/4844 6279/2827 6270/5820\nf 6281/2829 6270/5820 6279/2827\nf 1587/4804 6283/2831 6276/5821\nf 6286/2832 6276/5821 6283/2831\nf 404/4802 6277/2834 6258/5822\nf 6291/2836 6258/5822 6277/2834\nf 6288/5823 1588/4807 6294/2838\nf 6292/2839 6294/2838 1588/4807\nf 5931/4686 385/4687 6300/2841\nf 6298/2842 6300/2841 385/4687\nf 6296/5824 1591/4810 6306/2845\nf 6303/2846 6306/2845 1591/4810\nf 6310/2851 6312/2852 105/4698\nf 5969/4699 105/4698 6312/2852\nf 6315/2855 6318/2856 1594/4813\nf 6308/5825 1594/4813 6318/2856\nf 6323/2859 6325/2860 405/4852\nf 6314/5826 405/4852 6325/2860\nf 6327/2863 6330/2864 1597/4817\nf 6320/5827 1597/4817 6330/2864\nf 6321/2867 6335/2868 406/4815\nf 6302/5828 406/4815 6335/2868\nf 6332/5829 1598/4821 6338/2869\nf 6336/2870 6338/2869 1598/4821\nf 6003/2652 388/5775 6344/2873\nf 6342/2874 6344/2873 388/5775\nf 6340/5830 1601/4826 6350/2877\nf 6347/2878 6350/2877 1601/4826\nf 6354/2883 6356/2884 104/5771\nf 5990/2644 104/5771 6356/2884\nf 6352/5831 1604/4830 6362/2885\nf 6359/2886 6362/2885 1604/4830\nf 6358/5832 407/5833 6369/2889\nf 6367/2890 6369/2889 407/5833\nf 6364/5834 1607/4834 6374/2894\nf 6371/2893 6374/2894 1607/4834\nf 6346/5835 408/4832 6379/2895\nf 6365/2896 6379/2895 408/4832\nf 6380/2899 6382/2900 1608/4838\nf 6376/5836 1608/4838 6382/2900\nf 3759/3981 249/3982 6388/2901\nf 6386/2902 6388/2901 249/3982\nf 1611/4842 6391/2905 6384/5837\nf 6394/2907 6384/5837 6391/2905\nf 3789/3992 60/3993 6399/2909\nf 6370/2910 6399/2909 60/3993\nf 6396/5838 1613/4846 6404/2912\nf 6401/2913 6404/2912 1613/4846\nf 6400/5839 407/5833 6410/2916\nf 6357/2917 6410/2916 407/5833\nf 1615/4850 6411/2919 6406/5840\nf 6414/2920 6406/5840 6411/2919\nf 409/4848 6407/2921 6390/5841\nf 6419/2923 6390/5841 6407/2921\nf 1616/4854 6420/2925 6416/5842\nf 6422/2926 6416/5842 6420/2925\nf 410/4863 6429/2927 6428/4883\nf 6431/2929 6428/4883 6429/2927\nf 1621/4857 6434/2934 6425/5843\nf 6438/2932 6425/5843 6434/2934\nf 6444/5844 411/4866 6447/2935\nf 6445/2936 6447/2935 411/4866\nf 6441/5845 1625/4861 6452/2939\nf 6449/2940 6452/2939 1625/4861\nf 6458/4898 412/4859 6460/2941\nf 6436/2931 6460/2941 412/4859\nf 1628/4865 6461/2943 6455/5846\nf 6464/2944 6455/5846 6461/2943\nf 340/5847 6469/2945 5195/5848\nf 6471/2947 5195/5848 6469/2945\nf 1632/4868 6474/2949 6466/5849\nf 6478/2951 6466/5849 6474/2949\nf 9/5850 3883/2953 5229/5851\nf 6483/2955 5229/5851 3883/2953\nf 1634/4871 6485/2957 6480/5852\nf 6488/2959 6480/5852 6485/2957\nf 257/5853 3872/2964 6484/5854\nf 6494/2962 6484/5854 3872/2964\nf 1637/4875 6496/2965 6490/5855\nf 6500/2967 6490/5855 6496/2965\nf 416/4873 6491/2969 6473/5856\nf 6506/2971 6473/5856 6491/2969\nf 1640/4879 6508/2973 6502/5857\nf 6512/2975 6502/5857 6508/2973\nf 414/4877 6516/2977 6507/5858\nf 6518/2979 6507/5858 6516/2977\nf 6514/5859 1643/4882 6524/2984\nf 6521/2983 6524/2984 1643/4882\nf 6529/2986 6495/5860 3927/2988\nf 11/5861 3927/2988 6495/5860\nf 1645/4885 6531/2989 6526/5862\nf 6534/2991 6526/5862 6531/2989\nf 259/5863 3916/2993 6530/5864\nf 6540/2995 6530/5864 3916/2993\nf 1647/4889 6541/2997 6536/5865\nf 6544/2999 6536/5865 6541/2997\nf 417/4887 6537/3001 6520/5866\nf 6549/3003 6520/5866 6537/3001\nf 6550/3006 6552/3005 1648/4893\nf 6546/5867 1648/4893 6552/3005\nf 6558/3011 6560/3012 418/4997\nf 6557/5868 418/4997 6560/3012\nf 6563/3016 6566/3014 1652/4896\nf 6555/5869 1652/4896 6566/3014\nf 6571/5870 109/5871 6574/3020\nf 6572/3019 6574/3020 109/5871\nf 6569/5872 1656/4900 6580/3021\nf 6577/3022 6580/3021 1656/4900\nf 419/5873 6585/3025 6576/5874\nf 6587/3027 6576/5874 6585/3025\nf 6594/3031 6582/5875 6590/3029\nf 1660/4903 6590/3029 6582/5875\nf 6599/3034 6562/5876 6583/3036\nf 421/4902 6583/3036 6562/5876\nf 6604/3038 6596/5877 6601/3040\nf 1662/4907 6601/3040 6596/5877\nf 419/5873 6609/3044 6585/3025\nf 6611/3042 6585/3025 6609/3044\nf 6618/3047 6606/5878 6614/3045\nf 1666/4910 6614/3045 6606/5878\nf 6572/3019 109/5871 6624/3049\nf 6622/3050 6624/3049 109/5871\nf 6627/3055 6630/3056 1669/4914\nf 6620/5879 1669/4914 6630/3056\nf 6626/5880 422/5881 6637/3057\nf 6635/3058 6637/3057 422/5881\nf 1673/4919 6640/3061 6632/5882\nf 6644/3063 6632/5882 6640/3061\nf 425/4916 6633/3066 6613/5883\nf 6650/3065 6613/5883 6633/3066\nf 6646/5884 1676/4923 6656/3069\nf 6652/3070 6656/3069 1676/4923\nf 350/5885 6661/3073 5384/5886\nf 6663/3075 5384/5886 6661/3073\nf 1680/4927 6666/3077 6658/5887\nf 6670/3079 6658/5887 6666/3077\nf 73/5888 4978/3081 5373/5889\nf 6675/3083 5373/5889 4978/3081\nf 1682/4931 6677/3085 6672/5890\nf 6680/3087 6672/5890 6677/3085\nf 326/5891 5021/3089 6676/5892\nf 6686/3091 6676/5892 5021/3089\nf 1685/4935 6688/3093 6682/5893\nf 6692/3095 6682/5893 6688/3093\nf 428/4933 6683/3097 6665/5894\nf 6698/3099 6665/5894 6683/3097\nf 1688/4939 6700/3101 6694/5895\nf 6704/3103 6694/5895 6700/3101\nf 5327/5896 346/5897 6710/3105\nf 6708/3106 6710/3105 346/5897\nf 1691/4942 6713/3109 6706/5898\nf 6716/3111 6706/5898 6713/3109\nf 5303/5899 79/5900 6721/3115\nf 6659/3113 6721/3115 79/5900\nf 1693/4947 6723/3117 6718/5901\nf 6726/3119 6718/5901 6723/3117\nf 427/4929 6695/3123 6722/5902\nf 6732/3124 6722/5902 6695/3123\nf 6728/5903 1696/4950 6738/3125\nf 6734/3126 6738/3125 1696/4950\nf 6729/3131 6743/3132 430/4949\nf 6712/5904 430/4949 6743/3132\nf 6740/5905 1698/4954 6748/3133\nf 6745/3134 6748/3133 1698/4954\nf 6744/5906 429/4953 6754/3137\nf 6752/3138 6754/3137 429/4953\nf 6750/5907 1701/4959 6760/3141\nf 6757/3142 6760/3141 1701/4959\nf 6733/5908 112/4941 6766/3145\nf 6764/3146 6766/3145 112/4941\nf 6762/5909 1704/4963 6772/3149\nf 6769/3150 6772/3149 1704/4963\nf 6777/3155 6779/3156 431/4988\nf 6768/5910 431/4988 6779/3156\nf 6781/3159 6784/3160 1707/4966\nf 6774/5911 1707/4966 6784/3160\nf 6756/5912 432/4965 6789/3161\nf 6775/3162 6789/3161 432/4965\nf 6792/3166 6786/5913 6790/3168\nf 1708/4970 6790/3168 6786/5913\nf 426/4937 6797/3169 6699/5914\nf 6799/3171 6699/5914 6797/3169\nf 1712/4973 6802/3173 6794/5915\nf 6806/3175 6794/5915 6802/3173\nf 81/5916 5033/3177 6687/5917\nf 6811/3179 6687/5917 5033/3177\nf 1714/4977 6813/3181 6808/5918\nf 6816/3183 6808/5918 6813/3181\nf 6812/5919 330/5920 6822/3185\nf 5073/3186 6822/3185 330/5920\nf 6818/5921 1716/4981 6826/3189\nf 6823/3190 6826/3189 1716/4981\nf 434/4979 6819/3195 6801/5922\nf 6832/3196 6801/5922 6819/3195\nf 1718/4984 6833/3199 6828/5923\nf 6836/3200 6828/5923 6833/3199\nf 435/5019 6842/3201 6841/5018\nf 6844/3203 6841/5018 6842/3201\nf 1722/4987 6847/3207 6839/5924\nf 6850/3208 6839/5924 6847/3207\nf 6855/5925 110/5926 6857/3209\nf 6638/3210 6857/3209 110/5926\nf 6853/5927 1725/4991 6862/3212\nf 6859/3213 6862/3212 1725/4991\nf 6858/5928 422/5881 6868/3216\nf 6625/3217 6868/3216 422/5881\nf 6864/5929 1727/4995 6872/3219\nf 6869/3220 6872/3219 1727/4995\nf 6846/5930 436/4993 6877/3223\nf 6865/3224 6877/3223 436/4993\nf 6878/3229 6880/3230 1728/4999\nf 6874/5931 1728/4999 6880/3230\nf 420/4906 6884/3231 6600/5932\nf 6886/3233 6600/5932 6884/3231\nf 1731/5003 6889/3235 6882/5933\nf 6892/3237 6882/5933 6889/3235\nf 6589/5934 108/5935 6897/3242\nf 6607/3241 6897/3242 108/5935\nf 1733/5005 6899/3243 6894/5936\nf 6902/3245 6894/5936 6899/3243\nf 424/4913 6647/3247 6898/5937\nf 6908/3249 6898/5937 6647/3247\nf 1736/5010 6910/3252 6904/5938\nf 6914/3251 6904/5938 6910/3252\nf 438/5008 6905/3255 6888/5939\nf 6919/3257 6888/5939 6905/3255\nf 6921/3260 6924/3259 1738/5014\nf 6916/5940 1738/5014 6924/3259\nf 6920/5941 437/5012 6930/3266\nf 6928/3265 6930/3266 437/5012\nf 6933/3269 6936/3270 1741/5016\nf 6926/5942 1741/5016 6936/3270\nf 6940/3271 6942/3273 423/4921\nf 6651/5943 423/4921 6942/3273\nf 1743/5020 6944/3275 6938/5944\nf 6946/3276 6938/5944 6944/3275\nf 435/5019 6935/3268 6851/5945\nf 6951/3277 6851/5945 6935/3268\nf 1744/5023 6952/3280 6948/5946\nf 6954/3279 6948/5946 6952/3280\nf 440/5031 6960/3281 6959/5037\nf 6962/3283 6959/5037 6960/3281\nf 1748/5025 6965/3285 6957/5947\nf 6968/3287 6957/5947 6965/3285\nf 283/4180 6973/3289 4367/4181\nf 6975/3291 4367/4181 6973/3289\nf 6980/3293 6970/5948 6977/3294\nf 1751/5029 6977/3294 6970/5948\nf 5667/2433 367/5027 6985/3295\nf 6967/3288 6985/3295 367/5027\nf 6982/5949 1752/5033 6988/3297\nf 6986/3298 6988/3297 1752/5033\nf 6992/3300 6994/3299 364/5711\nf 5619/2401 364/5711 6994/3299\nf 6997/3305 7000/3306 1755/5035\nf 6990/5950 1755/5035 7000/3306\nf 7004/3309 7006/3310 93/5065\nf 5606/2393 93/5065 7006/3310\nf 7002/5951 1758/5039 7012/3311\nf 7009/3312 7012/3311 1758/5039\nf 7008/5952 442/5061 7019/3315\nf 7017/3316 7019/3315 442/5061\nf 7014/5953 1761/5043 7024/3319\nf 7021/3320 7024/3319 1761/5043\nf 6996/5954 443/5041 7029/3321\nf 7015/3322 7029/3321 443/5041\nf 7026/5955 1762/5047 7032/3325\nf 7030/3326 7032/3325 1762/5047\nf 444/5068 7038/3327 7037/5069\nf 7040/3329 7037/5069 7038/3327\nf 1766/5051 7043/3331 7035/5956\nf 7046/3333 7035/5956 7043/3331\nf 70/4208 4462/1689 7051/5957\nf 7053/3335 7051/5957 4462/1689\nf 1769/5055 7055/3337 7049/5958\nf 7058/3339 7049/5958 7055/3337\nf 289/4204 4450/1683 7054/5959\nf 7064/3341 7054/5959 4450/1683\nf 1771/5059 7065/3343 7060/5960\nf 7068/3344 7060/5960 7065/3343\nf 445/5057 7061/3345 7042/5961\nf 7073/3347 7042/5961 7061/3345\nf 1772/5063 7074/3349 7070/5962\nf 7076/3350 7070/5962 7074/3349\nf 358/5073 7080/3351 5523/2337\nf 7082/3353 5523/2337 7080/3351\nf 7078/5963 1775/5067 7088/3355\nf 7085/3356 7088/3355 1775/5067\nf 4497/4217 292/4218 7094/3362\nf 7092/3361 7094/3362 292/4218\nf 7090/5964 1777/5071 7098/3363\nf 7096/3364 7098/3363 1777/5071\nf 444/5068 7087/3357 7047/5965\nf 7103/3365 7047/5965 7087/3357\nf 1778/5075 7104/3367 7100/5966\nf 7106/3368 7100/5966 7104/3367\nf 1783/5967 1780/3369 1781/5079\nf 451/3370 1781/5079 1780/3369\nf 1788/3375 117/3376 1791/5968\nf 1789/5085 1791/5968 117/3376\nf 1796/3373 455/3374 1798/5969\nf 1797/5082 1798/5969 455/3374\nf 1803/3403 114/3404 1806/5970\nf 1804/5083 1806/5970 114/3404\nf 1809/3377 459/3378 1812/5971\nf 1810/5084 1812/5971 459/3378\nf 1816/3415 16/3416 1819/5972\nf 1817/5089 1819/5972 16/3416\nf 1823/3381 462/3382 1826/5973\nf 1824/5086 1826/5973 462/3382\nf 1821/3379 115/3380 1831/5974\nf 1829/5087 1831/5974 115/3380\nf 1835/3385 466/3386 1838/5975\nf 1836/5088 1838/5975 466/3386\nf 1842/3391 121/3392 1845/5976\nf 1843/5093 1845/5976 121/3392\nf 1849/3389 469/3390 1851/5977\nf 1850/5090 1851/5977 469/3390\nf 1855/3451 118/3452 1858/5978\nf 1856/5091 1858/5978 118/3452\nf 1861/3393 473/3394 1864/5979\nf 1862/5092 1864/5979 473/3394\nf 1868/3463 5/3464 1871/5980\nf 1869/318 1871/5980 5/3464\nf 1875/3397 476/3398 1878/5981\nf 1876/5094 1878/5981 476/3398\nf 1873/3395 119/3396 1883/5982\nf 1881/311 1883/5982 119/3396\nf 1890/5983 1888/3401 1889/5097\nf 480/3402 1889/5097 1888/3401\nf 1898/5984 1895/3407 1896/5103\nf 125/3408 1896/5103 1895/3407\nf 1904/5985 1902/3405 1903/5100\nf 484/3406 1903/5100 1902/3405\nf 1909/3419 123/3420 1912/5986\nf 1910/5101 1912/5986 123/3420\nf 1918/5987 1915/3409 1916/5102\nf 488/3410 1916/5102 1915/3409\nf 1922/3431 21/3432 1925/5988\nf 1923/5125 1925/5988 21/3432\nf 1929/3413 490/3414 1931/5989\nf 1930/5104 1931/5989 490/3414\nf 1927/3411 124/3412 1936/5990\nf 1934/5123 1936/5990 124/3412\nf 1940/3417 494/3418 1942/5991\nf 1941/5107 1942/5991 494/3418\nf 1947/3423 129/3424 1950/5992\nf 1948/5113 1950/5992 129/3424\nf 1956/5993 1954/3421 1955/5110\nf 498/3422 1955/5110 1954/3421\nf 1964/5994 1961/3467 1962/5111\nf 127/3468 1962/5111 1961/3467\nf 1967/3425 502/3426 1970/5995\nf 1968/5112 1970/5995 502/3426\nf 1974/3479 19/3480 1977/5996\nf 1975/5117 1977/5996 19/3480\nf 1981/3429 504/3430 1983/5997\nf 1982/5114 1983/5997 504/3430\nf 1979/3427 128/3428 1988/5998\nf 1986/5115 1988/5998 128/3428\nf 1991/3433 508/3434 1994/5999\nf 1992/5116 1994/5999 508/3434\nf 1998/3439 133/3440 2001/6000\nf 1999/5121 2001/6000 133/3440\nf 2005/3437 511/3438 2007/6001\nf 2006/5118 2007/6001 511/3438\nf 2014/6002 2011/3483 2012/5119\nf 130/3484 2012/5119 2011/3483\nf 2017/3441 515/3442 2020/6003\nf 2018/5120 2020/6003 515/3442\nf 2027/6004 2024/3495 2025/6005\nf 6/3496 2025/6005 2024/3495\nf 2031/3445 518/3446 2034/6006\nf 2032/5122 2034/6006 518/3446\nf 2029/3443 131/3444 2039/6007\nf 2037/6008 2039/6007 131/3444\nf 2043/3449 521/3450 2045/6009\nf 2044/5124 2045/6009 521/3450\nf 2049/3455 135/3456 2052/6010\nf 2050/5129 2052/6010 135/3456\nf 2055/3453 523/3454 2057/6011\nf 2056/5126 2057/6011 523/3454\nf 2003/3435 132/3436 2062/6012\nf 2060/5127 2062/6012 132/3436\nf 2065/3457 526/3458 2068/6013\nf 2066/5128 2068/6013 526/3458\nf 2041/3447 20/3448 2073/6014\nf 2071/6015 2073/6014 20/3448\nf 2077/3461 528/3462 2079/6016\nf 2078/5130 2079/6016 528/3462\nf 2075/3459 134/3460 2084/6017\nf 2082/6018 2084/6017 134/3460\nf 2090/6019 2088/3465 2089/5133\nf 532/3466 2089/5133 2088/3465\nf 2098/6020 2095/3471 2096/5138\nf 139/3472 2096/5138 2095/3471\nf 2104/6021 2102/3469 2103/5135\nf 536/3470 2103/5135 2102/3469\nf 2112/6022 2109/6023 2110/5136\nf 137/4326 2110/5136 2109/6023\nf 2118/6024 2115/3473 2116/5137\nf 540/3474 2116/5137 2115/3473\nf 2125/6025 2122/6026 2123/5142\nf 23/4346 2123/5142 2122/6026\nf 2131/6027 2129/3477 2130/5139\nf 542/3478 2130/5139 2129/3477\nf 2127/3475 138/3476 2136/6028\nf 2134/5140 2136/6028 138/3476\nf 2141/6029 2139/3481 2140/5141\nf 545/3482 2140/5141 2139/3481\nf 2148/6030 2145/3487 2146/5146\nf 142/3488 2146/5146 2145/3487\nf 2153/6031 2151/3485 2152/5143\nf 548/3486 2152/5143 2151/3485\nf 2160/6032 2157/6033 2158/5144\nf 140/4342 2158/5144 2157/6033\nf 2166/6034 2163/3489 2164/5145\nf 552/3490 2164/5145 2163/3489\nf 2173/6035 2170/6036 2171/5150\nf 22/4362 2171/5150 2170/6036\nf 2179/6037 2177/3493 2178/5147\nf 554/3494 2178/5147 2177/3493\nf 2184/6038 2175/3491 2182/5148\nf 141/3492 2182/5148 2175/3491\nf 557/3498 2188/5149 2187/3497\nf 2189/6039 2187/3497 2188/5149\nf 145/3501 2194/5154 2193/3502\nf 2196/6040 2193/3502 2194/5154\nf 2201/6041 2199/3499 2200/5151\nf 560/3500 2200/5151 2199/3499\nf 143/4357 2206/5152 2205/6042\nf 2208/6043 2205/6042 2206/5152\nf 564/3503 2212/5153 2211/3504\nf 2214/6044 2211/3504 2212/5153\nf 2219/5158 2221/6045 24/4378\nf 2218/6046 24/4378 2221/6045\nf 2227/6047 2225/3507 2226/5155\nf 566/3508 2226/5155 2225/3507\nf 2232/6048 2223/3505 2230/5156\nf 144/3506 2230/5156 2223/3505\nf 2237/6049 2235/3509 2236/5157\nf 569/3510 2236/5157 2235/3509\nf 2242/5162 2244/6050 147/3513\nf 2241/3514 147/3513 2244/6050\nf 2248/5159 2249/6051 572/3511\nf 2247/3512 572/3511 2249/6051\nf 2253/6052 146/4373 2256/6053\nf 2254/5160 2256/6053 146/4373\nf 2259/3515 575/3516 2262/6054\nf 2260/5161 2262/6054 575/3516\nf 1884/64 2268/6055 17/3400\nf 2266/6056 17/3400 2268/6055\nf 2271/3518 576/3519 2273/6057\nf 2272/5163 2273/6057 576/3519\nf 2269/3517 119/3396 2277/6058\nf 1872/56 2277/6058 119/3396\nf 2280/3520 581/3521 2283/6059\nf 2281/5166 2283/6059 581/3521\nf 2288/3526 152/3527 2291/6060\nf 2289/5172 2291/6060 152/3527\nf 2296/3524 585/3525 2298/6061\nf 2297/5169 2298/6061 585/3525\nf 2303/3538 149/3539 2306/6062\nf 2304/5170 2306/6062 149/3539\nf 2312/6063 2309/3528 2310/5171\nf 589/3529 2310/5171 2309/3528\nf 2319/6064 2316/3550 2317/5194\nf 29/3551 2317/5194 2316/3550\nf 2326/6065 2323/3532 2324/5173\nf 592/3533 2324/5173 2323/3532\nf 2331/6066 2321/3530 2329/5192\nf 150/3531 2329/5192 2321/3530\nf 2336/3536 596/3537 2338/6067\nf 2337/5176 2338/6067 596/3537\nf 2346/6068 2343/3542 2344/5182\nf 156/3543 2344/5182 2343/3542\nf 2352/6069 2350/3540 2351/5179\nf 600/3541 2351/5179 2350/3540\nf 2360/6070 2357/3586 2358/5180\nf 154/3587 2358/5180 2357/3586\nf 2366/6071 2363/3544 2364/5181\nf 604/3545 2364/5181 2363/3544\nf 2370/3598 27/3599 2373/6072\nf 2371/5186 2373/6072 27/3599\nf 2379/6073 2377/3548 2378/5183\nf 606/3549 2378/5183 2377/3548\nf 2375/3546 155/3547 2384/6074\nf 2382/5184 2384/6074 155/3547\nf 2390/6075 2387/3552 2388/5185\nf 610/3553 2388/5185 2387/3552\nf 2394/3558 160/3559 2397/6076\nf 2395/5190 2397/6076 160/3559\nf 2401/3556 613/3557 2403/6077\nf 2402/5187 2403/6077 613/3557\nf 2407/3602 157/3603 2410/6078\nf 2408/5188 2410/6078 157/3603\nf 2413/3560 617/3561 2416/6079\nf 2414/5189 2416/6079 617/3561\nf 2420/3614 7/3615 2423/6080\nf 2421/5302 2423/6080 7/3615\nf 2427/3564 620/3565 2430/6081\nf 2428/5191 2430/6081 620/3565\nf 2425/3562 158/3563 2435/6082\nf 2433/5300 2435/6082 158/3563\nf 2442/6083 2439/3568 2440/5193\nf 624/3569 2440/5193 2439/3568\nf 2449/6084 2446/3574 2447/5198\nf 163/3575 2447/5198 2446/3574\nf 2455/6085 2453/3572 2454/5195\nf 626/3573 2454/5195 2453/3572\nf 2460/6086 2399/3554 2458/5196\nf 159/3555 2458/5196 2399/3554\nf 2466/6087 2463/3576 2464/5197\nf 629/3577 2464/5197 2463/3576\nf 2471/6088 2437/3566 2469/5294\nf 28/3567 2469/5294 2437/3566\nf 2478/6089 2475/3580 2476/5199\nf 632/3581 2476/5199 2475/3580\nf 2483/6090 2473/3578 2481/5292\nf 161/3579 2481/5292 2473/3578\nf 2490/6091 2488/3584 2489/5202\nf 636/3585 2489/5202 2488/3584\nf 2498/6092 2495/3590 2496/5207\nf 167/3591 2496/5207 2495/3590\nf 2504/6093 2502/3588 2503/5204\nf 640/3589 2503/5204 2502/3588\nf 2512/6094 2509/6095 2510/5205\nf 165/4454 2510/5205 2509/6095\nf 2518/6096 2515/3592 2516/5206\nf 644/3593 2516/5206 2515/3592\nf 2525/6097 2522/6098 2523/5211\nf 31/4474 2523/5211 2522/6098\nf 2531/6099 2529/3596 2530/5208\nf 646/3597 2530/5208 2529/3596\nf 2536/6100 2527/3594 2534/5209\nf 166/3595 2534/5209 2527/3594\nf 2539/3600 649/3601 2541/6101\nf 2540/5210 2541/6101 649/3601\nf 2545/3606 170/3607 2548/6102\nf 2546/5215 2548/6102 170/3607\nf 2551/3604 652/3605 2553/6103\nf 2552/5212 2553/6103 652/3605\nf 2560/6104 2557/6105 2558/5213\nf 168/4470 2558/5213 2557/6105\nf 2566/6106 2563/3608 2564/5214\nf 656/3609 2564/5214 2563/3608\nf 2573/6107 2570/6108 2571/5310\nf 30/4667 2571/5310 2570/6108\nf 2577/3612 658/3613 2579/6109\nf 2578/5216 2579/6109 658/3613\nf 2584/6110 2575/3610 2582/5308\nf 169/3611 2582/5308 2575/3610\nf 2591/6111 2588/3616 2589/5217\nf 663/3617 2589/5217 2588/3616\nf 2599/6112 2596/6113 2597/6114\nf 175/6115 2597/6114 2596/6113\nf 2606/6116 2603/3620 2604/5219\nf 666/3621 2604/5219 2603/3620\nf 175/6115 2596/6113 2610/6117\nf 2612/6118 2610/6117 2596/6113\nf 2616/3624 669/3625 2618/6119\nf 2617/5221 2618/6119 669/3625\nf 2623/6120 175/6115 2625/6121\nf 2610/6117 2625/6121 175/6115\nf 2631/6122 2628/3628 2629/5223\nf 673/3629 2629/5223 2628/3628\nf 2638/6123 2636/6124 2623/6120\nf 175/6115 2623/6120 2636/6124\nf 2642/3632 676/3633 2645/6125\nf 2643/5225 2645/6125 676/3633\nf 2597/6114 175/6115 2650/6126\nf 2636/6124 2650/6126 175/6115\nf 2656/6127 2653/3636 2654/5226\nf 680/3637 2654/5226 2653/3636\nf 2663/6128 2660/3642 2661/5233\nf 179/3643 2661/5233 2660/3642\nf 2669/6129 2667/3640 2668/5229\nf 683/3641 2668/5229 2667/3640\nf 2676/6130 2673/6131 2674/5230\nf 176/5231 2674/5230 2673/6131\nf 2682/6132 2679/3644 2680/5232\nf 687/3645 2680/5232 2679/3644\nf 2689/6133 2686/6134 2687/6135\nf 3/6136 2687/6135 2686/6134\nf 2696/6137 2693/3648 2694/5234\nf 690/3649 2694/5234 2693/3648\nf 2701/6138 2691/3646 2699/6139\nf 177/3647 2699/6139 2691/3646\nf 2706/5237 2707/6140 693/3652\nf 2705/3653 693/3652 2707/6140\nf 2712/5243 2714/6141 182/3656\nf 2711/3657 182/3656 2714/6141\nf 2718/5240 2719/6142 696/3654\nf 2717/3655 696/3654 2719/6142\nf 2726/6143 2723/3670 2724/5241\nf 180/3671 2724/5241 2723/3670\nf 2730/5242 2732/6144 700/3659\nf 2729/3658 700/3659 2732/6144\nf 2739/6145 2736/6146 2737/5269\nf 36/5270 2737/5269 2736/6146\nf 2743/3663 702/3662 2745/6147\nf 2744/5244 2745/6147 702/3662\nf 2748/5267 2750/6148 181/3660\nf 2741/3661 181/3660 2750/6148\nf 2754/5245 2756/6149 706/3664\nf 2753/3665 706/3664 2756/6149\nf 2761/6150 2763/6151 186/6152\nf 2760/6153 186/6152 2763/6151\nf 2769/6154 2767/3668 2768/5247\nf 708/3669 2768/5247 2767/3668\nf 2775/6155 2773/6156 2760/6153\nf 186/6152 2760/6153 2773/6156\nf 2779/5249 2780/6157 711/3672\nf 2778/3673 711/3672 2780/6157\nf 2785/6158 186/6152 2787/6159\nf 2773/6156 2787/6159 186/6152\nf 2793/6160 2790/3676 2791/5250\nf 715/3677 2791/5250 2790/3676\nf 2800/6161 2798/6162 2785/6158\nf 186/6152 2785/6158 2798/6162\nf 2807/6163 2804/3680 2805/5252\nf 718/3681 2805/5252 2804/3680\nf 186/6152 2798/6162 2761/6150\nf 2812/6164 2761/6150 2798/6162\nf 2815/3684 722/3685 2818/6165\nf 2816/5253 2818/6165 722/3685\nf 2825/6166 2822/3690 2823/5259\nf 190/3691 2823/5259 2822/3690\nf 2831/6167 2829/3688 2830/5256\nf 725/3689 2830/5256 2829/3688\nf 2836/5257 2838/6168 187/3703\nf 2835/3702 187/3703 2838/6168\nf 2842/5258 2844/6169 729/3692\nf 2841/3693 729/3692 2844/6169\nf 2848/3714 40/3715 2851/6170\nf 2849/6171 2851/6170 40/3715\nf 2858/6172 2855/3696 2856/5260\nf 732/3697 2856/5260 2855/3696\nf 2863/6173 2853/3694 2861/5533\nf 188/3695 2861/5533 2853/3694\nf 2867/3700 735/3701 2869/6174\nf 2868/5261 2869/6174 735/3701\nf 2873/3706 193/3707 2876/6175\nf 2874/5265 2876/6175 193/3707\nf 2879/3704 738/3705 2881/6176\nf 2880/5262 2881/6176 738/3705\nf 2885/3718 191/3719 2888/6177\nf 2886/5263 2888/6177 191/3719\nf 2891/3708 742/3709 2894/6178\nf 2892/5264 2894/6178 742/3709\nf 2899/5525 2901/6179 38/3730\nf 2898/3731 38/3730 2901/6179\nf 2905/3712 744/3713 2907/6180\nf 2906/5266 2907/6180 744/3713\nf 2903/3711 192/3710 2912/6181\nf 2910/5523 2912/6181 192/3710\nf 2915/3716 747/3717 2917/6182\nf 2916/5268 2917/6182 747/3717\nf 2921/3722 196/3723 2924/6183\nf 2922/5274 2924/6183 196/3723\nf 2928/5271 2929/6184 750/3720\nf 2927/3721 750/3720 2929/6184\nf 2936/6185 2933/3734 2934/5272\nf 194/3735 2934/5272 2933/3734\nf 2939/3724 754/3725 2942/6186\nf 2940/5273 2942/6186 754/3725\nf 2947/6187 2949/6188 41/3746\nf 2946/3747 41/3746 2949/6188\nf 2953/3728 756/3729 2955/6189\nf 2954/5275 2955/6189 756/3729\nf 2958/6190 2960/6191 195/3726\nf 2951/3727 195/3726 2960/6191\nf 2965/6192 2963/3732 2964/5276\nf 759/3733 2964/5276 2963/3732\nf 2972/6193 2969/3738 2970/5281\nf 199/3739 2970/5281 2969/3738\nf 2977/6194 2975/3736 2976/5278\nf 762/3737 2976/5278 2975/3736\nf 2984/6195 2981/6196 2982/5279\nf 197/4599 2982/5279 2981/6196\nf 2990/6197 2987/3740 2988/5280\nf 766/3741 2988/5280 2987/3740\nf 2997/6198 2994/6199 2995/6200\nf 42/6201 2995/6200 2994/6199\nf 3003/6202 3001/3744 3002/5282\nf 768/3745 3002/5282 3001/3744\nf 2999/3742 198/3743 3008/6203\nf 3006/5511 3008/6203 198/3743\nf 3011/3748 772/3749 3014/6204\nf 3012/5285 3014/6204 772/3749\nf 3018/3754 203/3755 3021/6205\nf 3019/5290 3021/6205 203/3755\nf 3025/3752 775/3753 3027/6206\nf 3026/5287 3027/6206 775/3753\nf 3032/5288 3034/6207 200/3766\nf 3031/3767 200/3766 3034/6207\nf 3038/5289 3040/6208 779/3756\nf 3037/3757 779/3756 3040/6208\nf 44/3778 3045/5318 3044/3779\nf 3047/6209 3044/3779 3045/5318\nf 3051/3760 782/3761 3054/6210\nf 3052/5291 3054/6210 782/3761\nf 3057/5316 3059/6211 201/3758\nf 3049/3759 201/3758 3059/6211\nf 3065/6212 3063/3764 3064/5293\nf 785/3765 3064/5293 3063/3764\nf 3072/6213 3069/3770 3070/5298\nf 206/3771 3070/5298 3069/3770\nf 3077/6214 3075/3768 3076/5295\nf 788/3769 3076/5295 3075/3768\nf 3084/6215 3081/3782 3082/5296\nf 204/3783 3082/5296 3081/3782\nf 3090/6216 3087/3772 3088/5297\nf 792/3773 3088/5297 3087/3772\nf 3097/6217 3094/3794 3095/5327\nf 46/3795 3095/5327 3094/3794\nf 3102/5299 3103/6218 794/3776\nf 3101/3777 794/3776 3103/6218\nf 205/3774 3106/5325 3099/3775\nf 3108/6219 3099/3775 3106/5325\nf 3111/3780 797/3781 3113/6220\nf 3112/5301 3113/6220 797/3781\nf 3117/3786 209/3787 3120/6221\nf 3118/5306 3120/6221 209/3787\nf 3123/3784 800/3785 3125/6222\nf 3124/5303 3125/6222 800/3785\nf 3132/6223 3129/3798 3130/5304\nf 207/3799 3130/5304 3129/3798\nf 3138/6224 3135/3789 3136/5305\nf 804/3788 3136/5305 3135/3789\nf 3145/6225 3142/3811 3143/5335\nf 43/3810 3143/5335 3142/3811\nf 3151/6226 3149/3792 3150/5307\nf 806/3793 3150/5307 3149/3792\nf 3156/6227 3147/3790 3154/5333\nf 208/3791 3154/5333 3147/3790\nf 3161/6228 3159/3796 3160/5309\nf 809/3797 3160/5309 3159/3796\nf 3168/6229 3165/3802 3166/5314\nf 212/3803 3166/5314 3165/3802\nf 3173/6230 3171/3800 3172/5311\nf 812/3801 3172/5311 3171/3800\nf 3180/6231 3177/6232 3178/5312\nf 210/4663 3178/5312 3177/6232\nf 3186/6233 3183/3804 3184/5313\nf 816/3805 3184/5313 3183/3804\nf 3193/6234 3190/6235 3191/5343\nf 47/4731 3191/5343 3190/6235\nf 818/3809 3198/5315 3197/3808\nf 3199/6236 3197/3808 3198/5315\nf 211/3807 3202/5341 3195/3806\nf 3204/6237 3195/3806 3202/5341\nf 3207/3813 822/3812 3210/6238\nf 3208/5317 3210/6238 822/3812\nf 3215/5323 3217/6239 216/3819\nf 3214/3818 216/3819 3217/6239\nf 3221/3816 825/3817 3223/6240\nf 3222/5319 3223/6240 825/3817\nf 3227/1188 213/5320 3230/6241\nf 3228/5321 3230/6241 213/5320\nf 3233/3820 829/3821 3236/6242\nf 3234/5322 3236/6242 829/3821\nf 3240/1183 49/5351 3243/6243\nf 3241/5352 3243/6243 49/5351\nf 3248/5324 3250/6244 832/3824\nf 3247/3825 832/3824 3250/6244\nf 3253/5349 3255/6245 214/3823\nf 3245/3822 214/3823 3255/6245\nf 3262/6246 3259/3828 3260/5326\nf 836/3829 3260/5326 3259/3828\nf 3269/6247 3266/3834 3267/5331\nf 220/3833 3267/5331 3266/3834\nf 3275/6248 3273/3831 3274/5328\nf 839/3832 3274/5328 3273/3831\nf 217/3844 3280/5329 3279/3845\nf 3282/6249 3279/3845 3280/5329\nf 843/3835 3286/5330 3285/3836\nf 3288/6250 3285/3836 3286/5330\nf 58/3856 3293/6251 3292/3857\nf 3295/6252 3292/3857 3293/6251\nf 846/3839 3300/5332 3299/3840\nf 3302/6253 3299/3840 3300/5332\nf 218/3837 3305/6254 3297/3838\nf 3307/6255 3297/3838 3305/6254\nf 3313/6256 3311/3842 3312/5334\nf 849/3843 3312/5334 3311/3842\nf 3320/6257 3317/3848 3318/5339\nf 223/3849 3318/5339 3317/3848\nf 3325/6258 3323/3846 3324/5336\nf 852/3847 3324/5336 3323/3846\nf 3332/6259 3329/3860 3330/5337\nf 221/3861 3330/5337 3329/3860\nf 856/3850 3336/5338 3335/3851\nf 3338/6260 3335/3851 3336/5338\nf 3345/6261 3342/3872 3343/6262\nf 48/3873 3343/6262 3342/3872\nf 858/3855 3350/5340 3349/3854\nf 3351/6263 3349/3854 3350/5340\nf 3347/3852 222/3853 3356/6264\nf 3354/6265 3356/6264 222/3853\nf 3361/6266 3359/3858 3360/5342\nf 861/3859 3360/5342 3359/3858\nf 3368/6267 3365/3864 3366/5347\nf 226/3865 3366/5347 3365/3864\nf 3373/6268 3371/3862 3372/5344\nf 864/3863 3372/5344 3371/3862\nf 224/4726 3378/5345 3377/6269\nf 3380/6270 3377/6269 3378/5345\nf 868/3866 3384/5346 3383/3867\nf 3386/6271 3383/3867 3384/5346\nf 52/4839 3391/5403 3390/6272\nf 3393/6273 3390/6272 3391/5403\nf 3399/6274 3397/3870 3398/5348\nf 870/3871 3398/5348 3397/3870\nf 3404/6275 3395/3868 3402/5401\nf 225/3869 3402/5401 3395/3868\nf 3408/5350 3410/6276 874/3874\nf 3407/3875 874/3874 3410/6276\nf 3414/3880 230/3881 3417/6277\nf 3415/5356 3417/6277 230/3881\nf 3421/3878 877/3879 3423/6278\nf 3422/5353 3423/6278 877/3879\nf 3427/3892 227/3893 3430/6279\nf 3428/5354 3430/6279 227/3893\nf 3433/3882 881/3883 3436/6280\nf 3434/5355 3436/6280 881/3883\nf 3441/5379 3443/6281 54/3904\nf 3440/3905 54/3904 3443/6281\nf 3448/5357 3450/6282 884/3887\nf 3447/3886 884/3887 3450/6282\nf 3445/3884 228/3885 3455/6283\nf 3453/5377 3455/6283 228/3885\nf 3460/3890 888/3891 3462/6284\nf 3461/5360 3462/6284 888/3891\nf 3467/3896 234/3897 3470/6285\nf 3468/5366 3470/6285 234/3897\nf 3476/6286 3474/3894 3475/5363\nf 892/3895 3475/5363 3474/3894\nf 3484/6287 3481/3908 3482/5364\nf 232/3909 3482/5364 3481/3908\nf 3490/6288 3487/3898 3488/5365\nf 896/3899 3488/5365 3487/3898\nf 56/3920 3495/6289 3494/3921\nf 3497/6290 3494/3921 3495/6289\nf 3502/5367 3503/6291 898/3902\nf 3501/3903 898/3902 3503/6291\nf 3506/6292 3508/6293 233/3900\nf 3499/3901 233/3900 3508/6293\nf 3514/6294 3512/3906 3513/5370\nf 902/3907 3513/5370 3512/3906\nf 3522/6295 3519/3912 3520/5375\nf 238/3913 3520/5375 3519/3912\nf 3528/6296 3526/3910 3527/5372\nf 906/3911 3527/5372 3526/3910\nf 236/4774 3534/5373 3533/6297\nf 3536/6298 3533/6297 3534/5373\nf 3542/6299 3539/3914 3540/5374\nf 910/3915 3540/5374 3539/3914\nf 53/3936 3547/1140 3546/6300\nf 3549/6301 3546/6300 3547/1140\nf 912/3918 3554/5376 3553/3919\nf 3555/6302 3553/3919 3554/5376\nf 237/3916 3558/1133 3551/3917\nf 3560/6303 3551/3917 3558/1133\nf 3563/3922 916/3923 3566/6304\nf 3564/5378 3566/6304 916/3923\nf 3571/5383 3573/6305 240/3928\nf 3570/3929 240/3928 3573/6305\nf 3578/5380 3579/6306 918/3926\nf 3577/3927 918/3926 3579/6306\nf 3584/6307 3506/6292 3582/5381\nf 233/3900 3582/5381 3506/6292\nf 3590/6308 3587/3930 3588/5382\nf 920/3931 3588/5382 3587/3930\nf 3594/6309 3495/6289 3561/1112\nf 56/3920 3561/1112 3495/6289\nf 3600/6310 3597/3933 3598/5384\nf 922/3934 3598/5384 3597/3933\nf 3604/6311 3595/3932 3550/1105\nf 237/3916 3550/1105 3595/3932\nf 3610/6312 3607/3937 3608/5386\nf 926/3938 3608/5386 3607/3937\nf 3615/5391 3617/6313 244/3943\nf 3614/3944 244/3943 3617/6313\nf 3623/6314 3621/3941 3622/5388\nf 929/3942 3622/5388 3621/3941\nf 3628/5389 3630/6315 241/3955\nf 3627/3956 241/3955 3630/6315\nf 3634/5390 3636/6316 933/3945\nf 3633/3946 933/3945 3636/6316\nf 3641/5411 3643/6317 59/3841\nf 3640/3966 59/3841 3643/6317\nf 3647/3950 936/3949 3650/6318\nf 3648/5392 3650/6318 936/3949\nf 3653/5409 3655/6319 242/3947\nf 3645/3948 242/3947 3655/6319\nf 3661/6320 3659/3953 3660/5394\nf 939/3954 3660/5394 3659/3953\nf 245/3959 3666/5399 3665/3960\nf 3668/6321 3665/3960 3666/5399\nf 3671/3958 941/3957 3673/6322\nf 3672/5396 3673/6322 941/3957\nf 3237/907 213/5320 3678/6323\nf 3676/5397 3678/6323 213/5320\nf 943/3962 3682/5398 3681/3961\nf 3684/6324 3681/3961 3682/5398\nf 3688/6325 3224/902 3261/6326\nf 44/3778 3261/6326 3224/902\nf 3691/3964 944/3965 3693/6327\nf 3692/5400 3693/6327 944/3965\nf 3689/3963 219/3830 3697/6328\nf 3301/6329 3697/6328 219/3830\nf 3701/6330 3699/3967 3700/5402\nf 947/3968 3700/5402 3699/3967\nf 3708/6331 3705/3971 3706/5407\nf 248/3972 3706/5407 3705/3971\nf 3713/6332 3711/3970 3712/5404\nf 950/3969 3712/5404 3711/3970\nf 246/4835 3718/5405 3717/6333\nf 3720/6334 3717/6333 3718/5405\nf 3726/6335 3723/3973 3724/5406\nf 954/3974 3724/5406 3723/3973\nf 3733/6336 3730/6337 3731/1260\nf 60/3993 3731/1260 3730/6337\nf 3739/6338 3737/3977 3738/5408\nf 956/3978 3738/5408 3737/3977\nf 247/3976 3742/1253 3735/3975\nf 3744/6339 3735/3975 3742/1253\nf 3747/3980 960/3979 3750/6340\nf 3748/5410 3750/6340 960/3979\nf 3757/6341 3754/3986 3755/5415\nf 250/3985 3755/5415 3754/3986\nf 3762/5412 3763/6342 962/3983\nf 3761/3984 962/3983 3763/6342\nf 3766/5413 3768/6343 218/3837\nf 3305/6254 218/3837 3768/6343\nf 3774/6344 3771/3988 3772/5414\nf 964/3987 3772/5414 3771/3988\nf 3778/6345 3293/6251 3745/1232\nf 58/3856 3745/1232 3293/6251\nf 3784/6346 3781/3990 3782/5416\nf 966/3991 3782/5416 3781/3990\nf 3788/6347 3779/3989 3734/1225\nf 247/3976 3734/1225 3779/3989\nf 3792/3994 971/3995 3795/6348\nf 3793/5418 3795/6348 971/3995\nf 3800/6349 254/6350 3803/6351\nf 3801/6352 3803/6351 254/6350\nf 3809/5419 3811/6353 975/3998\nf 3808/3999 975/3998 3811/6353\nf 3818/6354 3816/6355 3800/6349\nf 254/6350 3800/6349 3816/6355\nf 3825/6356 3822/4002 3823/5421\nf 978/4003 3823/5421 3822/4002\nf 3830/6357 3801/6352 3816/6355\nf 254/6350 3816/6355 3801/6352\nf 3834/4006 982/4007 3836/6358\nf 3835/5423 3836/6358 982/4007\nf 3841/4012 258/4013 3844/6359\nf 3842/5428 3844/6359 258/4013\nf 3848/4010 986/4011 3850/6360\nf 3849/5425 3850/6360 986/4011\nf 3855/4024 256/4025 3858/6361\nf 3856/5426 3858/6361 256/4025\nf 3861/4014 990/4015 3864/6362\nf 3862/5427 3864/6362 990/4015\nf 3868/4036 11/4037 3871/6363\nf 3869/6364 3871/6363 11/4037\nf 3875/4018 992/4019 3877/6365\nf 3876/5429 3877/6365 992/4019\nf 3873/4016 257/4017 3882/6366\nf 3880/6367 3882/6366 257/4017\nf 3887/6368 3885/4022 3886/5430\nf 995/4023 3886/5430 3885/4022\nf 3892/5437 3894/6369 260/4028\nf 3891/4029 260/4028 3894/6369\nf 3898/5433 3899/6370 997/4026\nf 3897/4027 997/4026 3899/6370\nf 3904/6371 1795/6372 3902/5434\nf 113/5435 3902/5434 1795/6372\nf 3908/5436 3910/6373 1000/4030\nf 3907/4031 1000/4030 3910/6373\nf 3913/6374 3915/6375 10/6376\nf 1779/6377 10/6376 3915/6375\nf 3919/4035 1002/4034 3921/6378\nf 3920/5438 3921/6378 1002/4034\nf 3924/6379 3926/6380 259/4032\nf 3917/4033 259/4032 3926/6380\nf 1006/4038 3930/5439 3929/4039\nf 3932/6381 3929/4039 3930/5439\nf 3939/6382 3936/4044 3937/5444\nf 264/4045 3937/5444 3936/4044\nf 3943/4042 1009/4043 3945/6383\nf 3944/5441 3945/6383 1009/4043\nf 3950/5442 3952/6384 261/4148\nf 3949/4147 261/4148 3952/6384\nf 3955/4046 1013/4047 3958/6385\nf 3956/5443 3958/6385 1013/4047\nf 3965/6386 3962/4159 3963/6387\nf 63/4160 3963/6387 3962/4159\nf 3972/6388 3969/4050 3970/5445\nf 1016/4051 3970/5445 3969/4050\nf 262/4048 3975/6389 3967/4049\nf 3977/6390 3967/4049 3975/6389\nf 3982/4054 1020/4055 3984/6391\nf 3983/5447 3984/6391 1020/4055\nf 3990/5453 3992/6392 268/4058\nf 3989/4059 268/4058 3992/6392\nf 3997/5450 3998/6393 1024/4057\nf 3996/4056 1024/4057 3998/6393\nf 4006/6394 4003/4171 4004/5451\nf 266/4170 4004/5451 4003/4171\nf 4010/5452 4012/6395 1028/4060\nf 4009/4061 1028/4060 4012/6395\nf 4017/1564 4019/6396 65/4144\nf 4016/6397 65/4144 4019/6396\nf 1030/4064 4024/5454 4023/4065\nf 4025/6398 4023/4065 4024/5454\nf 4030/6399 4021/4062 4028/1557\nf 267/4063 4028/1557 4021/4062\nf 4034/4066 1034/4067 4036/6400\nf 4035/5456 4036/6400 1034/4067\nf 4041/4072 271/4073 4044/6401\nf 4042/5461 4044/6401 271/4073\nf 4048/4070 1038/4071 4050/6402\nf 4049/5458 4050/6402 1038/4071\nf 4055/4116 270/4117 4058/6403\nf 4056/5459 4058/6403 270/4117\nf 4061/4074 1041/4075 4064/6404\nf 4062/5460 4064/6404 1041/4075\nf 4068/4128 14/4129 4070/6405\nf 2299/6406 4070/6405 14/4129\nf 4073/4078 1042/4079 4075/6407\nf 4074/5462 4075/6407 1042/4079\nf 4071/4076 148/4077 4079/6408\nf 2284/6409 4079/6408 148/4077\nf 4083/6410 4081/4083 4082/5465\nf 1045/4082 4082/5465 4081/4083\nf 4088/5471 4090/6411 273/4088\nf 4087/4089 273/4088 4090/6411\nf 4095/6412 4093/4086 4094/5468\nf 1048/4087 4094/5468 4093/4086\nf 4102/6413 4099/4100 4100/5469\nf 272/4101 4100/5469 4099/4100\nf 1051/4091 4106/5470 4105/4090\nf 4108/6414 4105/4090 4106/5470\nf 4114/6415 4112/4112 4051/5457\nf 67/4113 4051/5457 4112/4112\nf 4119/6416 4117/4095 4118/5472\nf 1052/4094 4118/5472 4117/4095\nf 4037/5455 4123/6417 269/4092\nf 4115/4093 269/4092 4123/6417\nf 4127/6418 4125/4098 4126/5475\nf 1055/4099 4126/5475 4125/4098\nf 4134/6419 4131/4104 4132/5480\nf 275/4105 4132/5480 4131/4104\nf 4137/4102 1057/4103 4139/6420\nf 4138/5477 4139/6420 1057/4103\nf 4144/6421 3831/4004 4142/5478\nf 252/4005 4142/5478 3831/4004\nf 4150/6422 4147/4107 4148/5479\nf 1060/4106 4148/5479 4147/4107\nf 62/5493 4153/5494 3807/6423\nf 4155/6424 3807/6423 4153/5494\nf 4161/6425 4159/4110 4160/5481\nf 1062/4111 4160/5481 4159/4110\nf 274/4108 4164/5491 4157/4109\nf 4166/6426 4157/4109 4164/5491\nf 4171/5484 4172/6427 1066/4114\nf 4170/4115 1066/4114 4172/6427\nf 4177/4120 277/4121 4180/6428\nf 4178/5489 4180/6428 277/4121\nf 4184/4118 1069/4119 4186/6429\nf 4185/5486 4186/6429 1069/4119\nf 4192/6430 3847/6431 4190/5487\nf 255/5422 4190/5487 3847/6431\nf 4198/6432 4195/4122 4196/5488\nf 1071/4123 4196/5488 4195/4122\nf 4202/6433 3833/6434 2353/6435\nf 1/6436 2353/6435 3833/6434\nf 4205/4126 1072/4127 4207/6437\nf 4206/5490 4207/6437 1072/4127\nf 2339/6438 4211/6439 153/4125\nf 4203/4124 153/4125 4211/6439\nf 4214/5492 4216/6440 1076/4130\nf 4213/4131 1076/4130 4216/6440\nf 4223/6441 4220/4136 4221/5498\nf 279/4137 4221/5498 4220/4136\nf 1078/4134 4228/5495 4227/4135\nf 4229/6442 4227/4135 4228/5495\nf 263/4040 4232/5496 3941/4041\nf 4234/6443 3941/4041 4232/5496\nf 4240/6444 4237/4138 4238/5497\nf 1080/4139 4238/5497 4237/4138\nf 4244/6445 3979/4052 4031/1405\nf 64/4053 4031/1405 3979/4052\nf 4250/6446 4247/4141 4248/5499\nf 1082/4142 4248/5499 4247/4141\nf 4254/6447 4245/4140 4020/1397\nf 267/4063 4020/1397 4245/4140\nf 4258/5501 4259/6448 1085/4145\nf 4257/4146 1085/4145 4259/6448\nf 4263/4151 281/4152 4266/6449\nf 4264/5506 4266/6449 281/4152\nf 4269/4150 1088/4149 4271/6450\nf 4270/5503 4271/6450 1088/4149\nf 4278/6451 4275/4163 4276/5504\nf 280/4164 4276/5504 4275/4163\nf 4281/4153 1091/4154 4284/6452\nf 4282/5505 4284/6452 1091/4154\nf 4288/6453 66/5449 4290/6454\nf 3999/5448 4290/6454 66/5449\nf 4293/4157 1092/4158 4295/6455\nf 4294/5507 4295/6455 1092/4158\nf 4291/4155 265/4156 4299/6456\nf 3985/5446 4299/6456 265/4156\nf 1095/4161 4302/5508 4301/4162\nf 4303/6457 4301/4162 4302/5508\nf 282/6458 4308/6459 4307/6460\nf 4310/6461 4307/6460 4308/6459\nf 1097/4165 4314/5509 4313/4166\nf 4315/6462 4313/4166 4314/5509\nf 4319/6463 282/6458 4321/6464\nf 4307/6460 4321/6464 282/6458\nf 1098/4169 4324/5510 4323/4168\nf 4325/6465 4323/4168 4324/5510\nf 4319/6463 4329/6466 282/6458\nf 4308/6459 282/6458 4329/6466\nf 4332/5512 4334/6467 1102/4172\nf 4331/4173 1102/4172 4334/6467\nf 4339/6468 4341/6469 285/6470\nf 4338/6471 285/6470 4341/6469\nf 4348/6472 4346/4176 4347/5513\nf 1105/4177 4347/5513 4346/4176\nf 4355/6473 4353/6474 4338/6471\nf 285/6470 4338/6471 4353/6474\nf 4358/4178 1108/4179 4361/6475\nf 4359/5515 4361/6475 1108/4179\nf 4339/6468 285/6470 4366/6476\nf 4353/6474 4366/6476 285/6470\nf 1111/4182 4370/5516 4369/4183\nf 4371/6477 4369/4183 4370/5516\nf 4378/6478 4375/4186 4376/5521\nf 288/4187 4376/5521 4375/4186\nf 4383/6479 4381/4184 4382/5518\nf 1114/4185 4382/5518 4381/4184\nf 4390/6480 4387/6481 4388/5519\nf 286/5045 4388/5519 4387/6481\nf 4396/6482 4393/4188 4394/5520\nf 1118/4189 4394/5520 4393/4188\nf 4403/6483 4400/6484 4401/6485\nf 69/6486 4401/6485 4400/6484\nf 4409/6487 4407/4192 4408/5522\nf 1120/4193 4408/5522 4407/4192\nf 4414/6488 4405/4190 4412/6489\nf 287/4191 4412/6489 4405/4190\nf 4418/5524 4420/6490 1124/4194\nf 4417/4195 1124/4194 4420/6490\nf 4425/5529 4427/6491 291/4200\nf 4424/4201 291/4200 4427/6491\nf 4432/5526 4433/6492 1126/4198\nf 4431/4199 1126/4198 4433/6492\nf 4436/5527 4438/6493 287/4191\nf 4412/6489 287/4191 4438/6493\nf 4442/5528 4444/6494 1129/4202\nf 4441/4203 1129/4202 4444/6494\nf 4447/6495 4449/6496 69/6486\nf 4401/6485 69/6486 4449/6496\nf 4454/5530 4456/6497 1132/4206\nf 4453/4207 1132/4206 4456/6497\nf 4459/6498 4461/6499 289/4204\nf 4451/4205 289/4204 4461/6499\nf 4467/6500 4465/4210 4466/5531\nf 1135/4211 4466/5531 4465/4210\nf 4471/6501 293/6502 4474/6503\nf 4472/6504 4474/6503 293/6502\nf 4479/5532 4480/6505 1138/4212\nf 4478/4213 1138/4212 4480/6505\nf 4471/6501 4487/6506 293/6502\nf 4485/6507 293/6502 4487/6506\nf 4492/6508 4489/4215 4490/5534\nf 1140/4216 4490/5534 4489/4215\nf 4496/6509 4472/6504 4485/6507\nf 293/6502 4485/6507 4472/6504\nf 4502/6510 4499/4219 4500/5535\nf 1144/4220 4500/5535 4499/4219\nf 4507/5539 4509/6511 297/4225\nf 4506/4226 297/4225 4509/6511\nf 4514/5536 4515/6512 1147/4223\nf 4513/4224 1147/4223 4515/6512\nf 4519/4237 294/4238 4522/6513\nf 4520/5537 4522/6513 294/4238\nf 4526/5538 4528/6514 1151/4227\nf 4525/4228 1151/4227 4528/6514\nf 4533/5550 4535/6515 82/4250\nf 4532/4249 82/4250 4535/6515\nf 4539/4231 1154/4232 4542/6516\nf 4540/5540 4542/6516 1154/4232\nf 4545/5548 4547/6517 295/4229\nf 4537/4230 295/4229 4547/6517\nf 4551/4235 1157/4236 4553/6518\nf 4552/5541 4553/6518 1157/4236\nf 4557/4241 300/4242 4560/6519\nf 4558/5546 4560/6519 300/4242\nf 4563/4239 1160/4240 4565/6520\nf 4564/5542 4565/6520 1160/4240\nf 4569/2002 298/5543 4572/6521\nf 4570/5544 4572/6521 298/5543\nf 4575/4243 1164/4244 4578/6522\nf 4576/5545 4578/6522 1164/4244\nf 4582/1995 75/5577 4585/6523\nf 4583/5576 4585/6523 75/5577\nf 4589/4247 1166/4248 4591/6524\nf 4590/5547 4591/6524 1166/4248\nf 4587/4245 299/4246 4596/6525\nf 4594/5574 4596/6525 299/4246\nf 4602/6526 4599/4251 4600/5549\nf 1170/4252 4600/5549 4599/4251\nf 4609/6527 4606/4257 4607/5554\nf 304/4258 4607/5554 4606/4257\nf 4614/5551 4615/6528 1173/4255\nf 4613/4256 1173/4255 4615/6528\nf 4620/5552 4622/6529 301/4301\nf 4619/4302 301/4301 4622/6529\nf 4628/6530 4625/4260 4626/5553\nf 1177/4259 4626/5553 4625/4260\nf 4633/5558 4635/6531 85/4313\nf 4632/4314 85/4313 4635/6531\nf 4642/6532 4639/4263 4640/5555\nf 1180/4264 4640/5555 4639/4263\nf 4645/5556 4647/6533 302/4261\nf 4637/4262 302/4261 4647/6533\nf 4652/5557 4654/6534 1184/4267\nf 4651/4268 1184/4267 4654/6534\nf 4659/5562 4661/6535 308/4273\nf 4658/4274 308/4273 4661/6535\nf 4666/5559 4667/6536 1187/4271\nf 4665/4272 1187/4271 4667/6536\nf 4672/5560 4674/6537 305/4285\nf 4671/4286 305/4285 4674/6537\nf 4678/5561 4680/6538 1191/4275\nf 4677/4276 1191/4275 4680/6538\nf 4685/5586 4687/6539 83/4297\nf 4684/4298 83/4297 4687/6539\nf 4694/6540 4691/4279 4692/5563\nf 1194/4280 4692/5563 4691/4279\nf 4699/6541 4689/4277 4697/5584\nf 306/4278 4697/5584 4689/4277\nf 4705/5565 4706/6542 1198/4283\nf 4704/4284 1198/4283 4706/6542\nf 4712/5572 4714/6543 312/4289\nf 4711/4290 312/4289 4714/6543\nf 4719/5568 4720/6544 1202/4287\nf 4718/4288 1202/4287 4720/6544\nf 4726/5569 4728/6545 310/5570\nf 4725/6546 310/5570 4728/6545\nf 4732/5571 4734/6547 1206/4291\nf 4731/4292 1206/4291 4734/6547\nf 4741/6548 4738/6549 4739/5594\nf 76/5595 4739/5594 4738/6549\nf 4746/5573 4747/6550 1208/4295\nf 4745/4296 1208/4295 4747/6550\nf 4752/6551 4743/4293 4750/5592\nf 311/4294 4750/5592 4743/4293\nf 4756/5575 4757/6552 1211/4299\nf 4755/4300 1211/4299 4757/6552\nf 4762/5582 4764/6553 314/4305\nf 4761/4306 314/4305 4764/6553\nf 4768/5578 4769/6554 1214/4303\nf 4767/4304 1214/4303 4769/6554\nf 4774/5579 4776/6555 313/5580\nf 4773/6556 313/5580 4776/6555\nf 4780/5581 4782/6557 1217/4307\nf 4779/4308 1217/4307 4782/6557\nf 4721/5566 4788/6558 84/5567\nf 4786/6559 84/5567 4788/6558\nf 4792/5583 4793/6560 1218/4311\nf 4791/4312 1218/4311 4793/6560\nf 4707/5564 4797/6561 309/4309\nf 4789/4310 309/4309 4797/6561\nf 4802/6562 4799/4315 4800/5585\nf 1222/4316 4800/5585 4799/4315\nf 4809/6563 4806/4321 4807/5590\nf 317/4322 4807/5590 4806/4321\nf 4815/6564 4813/4319 4814/5587\nf 1225/4320 4814/5587 4813/4319\nf 4820/5588 4822/6565 315/4334\nf 4819/4333 315/4334 4822/6565\nf 4828/6566 4825/4324 4826/5589\nf 1228/4323 4826/5589 4825/4324\nf 4834/6567 4832/4345 2122/6026\nf 23/4346 2122/6026 4832/4345\nf 4840/6568 4837/4327 4838/5591\nf 1230/4328 4838/5591 4837/4327\nf 4844/6569 4835/4325 2109/6023\nf 137/4326 2109/6023 4835/4325\nf 4849/6570 4847/4331 4848/5593\nf 1233/4332 4848/5593 4847/4331\nf 4856/6571 4853/4337 4854/5599\nf 319/4338 4854/5599 4853/4337\nf 4861/6572 4859/4335 4860/5596\nf 1236/4336 4860/5596 4859/4335\nf 4868/6573 4865/4349 4866/5597\nf 318/4350 4866/5597 4865/4349\nf 4874/6574 4871/4339 4872/5598\nf 1239/4340 4872/5598 4871/4339\nf 4880/6575 4878/4361 2170/6036\nf 22/4362 2170/6036 4878/4361\nf 4885/6576 4883/4343 4884/5600\nf 1240/4344 4884/5600 4883/4343\nf 4889/6577 4881/4341 2157/6033\nf 140/4342 2157/6033 4881/4341\nf 1243/4347 4892/5601 4891/4348\nf 4893/6578 4891/4348 4892/5601\nf 321/4353 4898/5605 4897/4354\nf 4900/6579 4897/4354 4898/5605\nf 4905/6580 4903/4351 4904/5602\nf 1246/4352 4904/5602 4903/4351\nf 4912/6581 4909/4365 4910/5603\nf 320/4366 4910/5603 4909/4365\nf 1249/4356 4916/5604 4915/4355\nf 4918/6582 4915/4355 4916/5604\nf 4922/4377 24/4378 4924/6583\nf 2218/6046 4924/6583 24/4378\nf 4929/6584 4927/4359 4928/5606\nf 1250/4360 4928/5606 4927/4359\nf 143/4357 2205/6042 4925/4358\nf 4933/6585 4925/4358 2205/6042\nf 4937/6586 4935/4363 4936/5607\nf 1253/4364 4936/5607 4935/4363\nf 4941/4370 322/4369 4944/6587\nf 4942/5611 4944/6587 322/4369\nf 4948/5608 4949/6588 1255/4367\nf 4947/4368 1255/4367 4949/6588\nf 4579/1759 298/5543 4954/6589\nf 4952/5609 4954/6589 298/5543\nf 4958/5610 4960/6590 1257/4372\nf 4957/4371 1257/4372 4960/6590\nf 4566/1751 17/3400 4964/6591\nf 2266/6056 4964/6591 17/3400\nf 4967/4375 1258/4376 4969/6592\nf 4968/5612 4969/6592 1258/4376\nf 2253/6052 4973/6593 146/4373\nf 4965/4374 146/4373 4973/6593\nf 4977/5615 4979/6594 1263/4379\nf 4976/4380 1263/4379 4979/6594\nf 4985/5621 4987/6595 327/4386\nf 4984/4385 327/4386 4987/6595\nf 4994/6596 4992/4383 4993/5618\nf 1267/4384 4993/5618 4992/4383\nf 5002/6597 4999/4429 5000/5619\nf 324/4430 5000/5619 4999/4429\nf 5008/6598 5005/4387 5006/5620\nf 1271/4388 5006/5620 5005/4387\nf 5015/6599 5012/4441 5013/5625\nf 89/4442 5013/5625 5012/4441\nf 5019/4391 1274/4392 5022/6600\nf 5020/5622 5022/6600 1274/4392\nf 5017/4390 325/4389 5027/6601\nf 5025/5623 5027/6601 325/4389\nf 5031/4395 1278/4396 5034/6602\nf 5032/5624 5034/6602 1278/4396\nf 5041/6603 5038/4401 5039/5629\nf 331/4402 5039/5629 5038/4401\nf 5047/6604 5045/4399 5046/5626\nf 1281/4400 5046/5626 5045/4399\nf 5051/4413 328/4414 5054/6605\nf 5052/5627 5054/6605 328/4414\nf 5060/6606 5057/4403 5058/5628\nf 1285/4404 5058/5628 5057/4403\nf 5065/5650 5067/6607 87/4426\nf 5064/4425 87/4426 5067/6607\nf 5074/6608 5071/4407 5072/5630\nf 1288/4408 5072/5630 5071/4407\nf 5079/6609 5069/4405 5077/5648\nf 329/4406 5077/5648 5069/4405\nf 5086/6610 5084/4411 5085/5632\nf 1292/4412 5085/5632 5084/4411\nf 5091/4417 335/4418 5094/6611\nf 5092/5637 5094/6611 335/4418\nf 5099/5634 5100/6612 1296/4415\nf 5098/4416 1296/4415 5100/6612\nf 5105/4639 333/4638 5108/6613\nf 5106/5635 5108/6613 333/4638\nf 5111/4419 1300/4420 5114/6614\nf 5112/5636 5114/6614 1300/4420\nf 5119/5658 5121/6615 77/4650\nf 5118/4651 77/4650 5121/6615\nf 5125/4423 1302/4424 5127/6616\nf 5126/5638 5127/6616 1302/4424\nf 5123/4421 334/4422 5132/6617\nf 5130/5656 5132/6617 334/4422\nf 5138/6618 5136/4427 5137/5641\nf 1306/4428 5137/5641 5136/4427\nf 5146/6619 5143/4433 5144/5646\nf 338/4434 5144/5646 5143/4433\nf 5152/6620 5150/4431 5151/5643\nf 1310/4432 5151/5643 5150/4431\nf 5160/6621 5157/4622 5158/5644\nf 337/4623 5158/5644 5157/4622\nf 5166/6622 5163/4435 5164/5645\nf 1313/4436 5164/5645 5163/4435\nf 5172/6623 5170/4634 5101/5633\nf 88/4635 5101/5633 5170/4634\nf 5177/6624 5175/4439 5176/5647\nf 1314/4440 5176/5647 5175/4439\nf 5181/6625 5173/4437 5087/5631\nf 332/4438 5087/5631 5173/4437\nf 5186/6626 5183/4443 5184/5649\nf 1318/4444 5184/5649 5183/4443\nf 5193/6627 5190/4449 5191/5654\nf 341/4450 5191/5654 5190/4449\nf 5199/6628 5197/4447 5198/5651\nf 1321/4448 5198/5651 5197/4447\nf 5206/6629 5203/4462 5204/5652\nf 339/4461 5204/5652 5203/4462\nf 5212/6630 5209/4451 5210/5653\nf 1324/4452 5210/5653 5209/4451\nf 5218/6631 5216/4473 2522/6098\nf 31/4474 2522/6098 5216/4473\nf 5224/6632 5221/4455 5222/5655\nf 1326/4456 5222/5655 5221/4455\nf 5228/6633 5219/4453 2509/6095\nf 165/4454 2509/6095 5219/4453\nf 5232/5657 5233/6634 1329/4459\nf 5231/4460 1329/4459 5233/6634\nf 5238/5662 5240/6635 343/4465\nf 5237/4466 343/4465 5240/6635\nf 5244/5659 5245/6636 1332/4463\nf 5243/4464 1332/4463 5245/6636\nf 5252/6637 5249/4654 5250/5660\nf 342/4655 5250/5660 5249/4654\nf 5258/6638 5255/4467 5256/5661\nf 1335/4468 5256/5661 5255/4467\nf 5264/6639 5262/4666 2570/6108\nf 30/4667 2570/6108 5262/4666\nf 5268/5663 5269/6640 1336/4471\nf 5267/4472 1336/4471 5269/6640\nf 5273/6641 5265/4469 2557/6105\nf 168/4470 2557/6105 5265/4469\nf 5278/6642 5276/4475 5277/5664\nf 1340/4476 5277/5664 5276/4475\nf 5286/6643 5283/6644 5284/6645\nf 347/6646 5284/6645 5283/6644\nf 5290/4478 1344/4479 5293/6647\nf 5291/5665 5293/6647 1344/4479\nf 5298/6648 347/6646 5300/6649\nf 5283/6644 5300/6649 347/6646\nf 5307/6650 5304/4482 5305/5667\nf 1348/4483 5305/5667 5304/4482\nf 5314/6651 5312/6652 5298/6648\nf 347/6646 5298/6648 5312/6652\nf 5317/4486 1351/4487 5320/6653\nf 5318/5669 5320/6653 1351/4487\nf 347/6646 5312/6652 5324/6654\nf 5326/6655 5324/6654 5312/6652\nf 5331/6656 5329/4490 5330/5670\nf 1352/4491 5330/5670 5329/4490\nf 347/6646 5324/6654 5284/6645\nf 5335/6657 5284/6645 5324/6654\nf 5340/6658 5338/4494 5339/5671\nf 1356/4495 5339/5671 5338/4494\nf 5348/6659 5345/4499 5346/5676\nf 351/4500 5346/5676 5345/4499\nf 5354/6660 5352/4497 5353/5672\nf 1360/4498 5353/5672 5352/4497\nf 5362/6661 5359/6662 5360/5673\nf 349/5674 5360/5673 5359/6662\nf 5368/6663 5365/4501 5366/5675\nf 1364/4502 5366/5675 5365/4501\nf 5375/6664 5372/6665 5373/6666\nf 73/6667 5373/6666 5372/6665\nf 5381/6668 5379/4505 5380/5677\nf 1366/4506 5380/5677 5379/4505\nf 5386/6669 5377/4503 5384/6670\nf 350/4504 5384/6670 5377/4503\nf 5389/4509 1369/4510 5391/6671\nf 5390/5678 5391/6671 1369/4510\nf 5395/4515 354/4516 5398/6672\nf 5396/5682 5398/6672 354/4516\nf 5401/4513 1372/4514 5403/6673\nf 5402/5679 5403/6673 1372/4514\nf 5407/4575 352/4576 5410/6674\nf 5408/5680 5410/6674 352/4576\nf 5413/4517 1376/4518 5416/6675\nf 5414/5681 5416/6675 1376/4518\nf 5423/6676 5420/4587 5421/6677\nf 92/4588 5421/6677 5420/4587\nf 5427/4521 1378/4522 5429/6678\nf 5428/5683 5429/6678 1378/4522\nf 5434/6679 5425/4519 5432/5690\nf 353/4520 5432/5690 5425/4519\nf 5438/4525 1382/4526 5440/6680\nf 5439/5684 5440/6680 1382/4526\nf 5445/6681 357/6682 5448/6683\nf 5446/6684 5448/6683 357/6682\nf 5454/6685 5451/4527 5452/5685\nf 1385/4528 5452/5685 5451/4527\nf 357/6682 5445/6681 5458/6686\nf 5460/6687 5458/6686 5445/6681\nf 5466/6688 5464/4531 5465/5687\nf 1388/4532 5465/5687 5464/4531\nf 5473/6689 5471/6690 5458/6686\nf 357/6682 5458/6686 5471/6690\nf 5475/4534 1391/4535 5478/6691\nf 5476/5689 5478/6691 1391/4535\nf 5482/6692 357/6682 5484/6693\nf 5471/6690 5484/6693 357/6682\nf 5489/6694 5487/4539 5488/5691\nf 1392/4538 5488/5691 5487/4539\nf 5493/6695 5446/6684 5482/6692\nf 357/6682 5482/6692 5446/6684\nf 5496/5692 5497/6696 1395/4543\nf 5495/4542 1395/4543 5497/6696\nf 5504/6697 5501/4547 5502/5696\nf 360/4548 5502/5696 5501/4547\nf 5509/6698 5507/4545 5508/5693\nf 1398/4546 5508/5693 5507/4545\nf 5516/6699 5513/5072 5514/5694\nf 358/5073 5514/5694 5513/5072\nf 5519/4549 1402/4550 5522/6700\nf 5520/5695 5522/6700 1402/4550\nf 5526/6701 94/5700 5529/6702\nf 5527/5701 5529/6702 94/5700\nf 5535/6703 5533/4553 5534/5697\nf 1404/4554 5534/5697 5533/4553\nf 5531/4551 359/4552 5540/6704\nf 5538/5698 5540/6704 359/4552\nf 5543/4557 1407/4558 5545/6705\nf 5544/5699 5545/6705 1407/4558\nf 5549/4563 363/4564 5552/6706\nf 5550/5705 5552/6706 363/4564\nf 5555/4561 1410/4562 5557/6707\nf 5556/5702 5557/6707 1410/4562\nf 5561/5052 361/5053 5564/6708\nf 5562/5703 5564/6708 361/5053\nf 5567/4565 1414/4566 5570/6709\nf 5568/5704 5570/6709 1414/4566\nf 5574/5064 93/5065 5577/6710\nf 5575/5709 5577/6710 93/5065\nf 5581/4569 1416/4570 5583/6711\nf 5582/5706 5583/6711 1416/4570\nf 5579/4567 362/4568 5588/6712\nf 5586/5707 5588/6712 362/4568\nf 5591/4573 1419/4574 5593/6713\nf 5592/5708 5593/6713 1419/4574\nf 5597/4579 366/4580 5600/6714\nf 5598/5714 5600/6714 366/4580\nf 5603/4577 1422/4578 5605/6715\nf 5604/5710 5605/6715 1422/4578\nf 5609/6716 364/5711 5612/6717\nf 5610/5712 5612/6717 364/5711\nf 5615/4581 1426/4582 5618/6718\nf 5616/5713 5618/6718 1426/4582\nf 5622/6719 95/5718 5625/6720\nf 5623/5719 5625/6720 95/5718\nf 5629/4585 1428/4586 5631/6721\nf 5630/5715 5631/6721 1428/4586\nf 5636/6722 5627/4583 5634/5716\nf 365/4584 5634/5716 5627/4583\nf 5641/6723 5639/4589 5640/5717\nf 1431/4590 5640/5717 5639/4589\nf 5648/6724 5645/4594 5646/5723\nf 368/4595 5646/5723 5645/4594\nf 5653/6725 5651/4592 5652/5720\nf 1434/4593 5652/5720 5651/4592\nf 5657/5026 367/5027 5660/6726\nf 5658/5721 5660/6726 367/5027\nf 5666/6727 5663/4597 5664/5722\nf 1437/4596 5664/5722 5663/4597\nf 5672/6728 5670/6729 2994/6199\nf 42/6201 2994/6199 5670/6729\nf 5677/6730 5675/4600 5676/5724\nf 1438/4601 5676/5724 5675/4600\nf 5681/6731 5673/4598 2981/6196\nf 197/4599 2981/6196 5673/4598\nf 5683/4605 1441/4604 5685/6732\nf 5684/5725 5685/6732 1441/4604\nf 5690/5729 5692/6733 371/4610\nf 5689/4611 371/4610 5692/6733\nf 5696/5726 5697/6734 1444/4608\nf 5695/4609 1444/4608 5697/6734\nf 5701/4670 369/4671 5704/6735\nf 5702/5727 5704/6735 369/4671\nf 5707/4612 1448/4613 5710/6736\nf 5708/5728 5710/6736 1448/4613\nf 97/4682 5715/5733 5714/4683\nf 5717/6737 5714/4683 5715/5733\nf 5722/5730 5723/6738 1450/4617\nf 5721/4616 1450/4617 5723/6738\nf 5719/4614 370/4615 5728/6739\nf 5726/5731 5728/6739 370/4615\nf 5733/6740 5731/4620 5732/5732\nf 1453/4621 5732/5732 5731/4620\nf 5740/6741 5737/4626 5738/5737\nf 374/4627 5738/5737 5737/4626\nf 5743/4624 1456/4625 5745/6742\nf 5744/5734 5745/6742 1456/4625\nf 372/4812 5750/5735 5749/4811\nf 5752/6743 5749/4811 5750/5735\nf 5758/6744 5755/4629 5756/5736\nf 1460/4628 5756/5736 5755/4629\nf 5765/6745 5762/4823 5763/5741\nf 98/4824 5763/5741 5762/4823\nf 5771/6746 5769/4632 5770/5738\nf 1462/4633 5770/5738 5769/4632\nf 5776/6747 5767/4630 5774/5739\nf 373/4631 5774/5739 5767/4630\nf 5780/5740 5781/6748 1465/4636\nf 5779/4637 1465/4636 5781/6748\nf 5786/5745 5788/6749 377/4642\nf 5785/4643 377/4642 5788/6749\nf 5793/6750 5791/4640 5792/5742\nf 1468/4641 5792/5742 5791/4640\nf 5800/6751 5797/4702 5798/5743\nf 375/4703 5798/5743 5797/4702\nf 5806/6752 5803/4644 5804/5744\nf 1472/4645 5804/5744 5803/4644\nf 5813/6753 5810/4714 5811/5749\nf 96/4715 5811/5749 5810/4714\nf 5818/5746 5819/6754 1474/4648\nf 5817/4649 1474/4648 5819/6754\nf 5824/6755 5815/4646 5822/5747\nf 376/4647 5822/5747 5815/4646\nf 5829/6756 5827/4652 5828/5748\nf 1477/4653 5828/5748 5827/4652\nf 5836/6757 5833/4658 5834/5753\nf 379/4659 5834/5753 5833/4658\nf 1480/4656 5840/5750 5839/4657\nf 5841/6758 5839/4657 5840/5750\nf 378/4718 5846/5751 5845/4719\nf 5848/6759 5845/4719 5846/5751\nf 5854/6760 5851/4660 5852/5752\nf 1483/4661 5852/5752 5851/4660\nf 5860/6761 5858/4730 3190/6235\nf 47/4731 3190/6235 5858/4730\nf 5865/6762 5863/4664 5864/5754\nf 1484/4665 5864/5754 5863/4664\nf 5869/6763 5861/4662 3177/6232\nf 210/4663 3177/6232 5861/4662\nf 5872/5755 5873/6764 1487/4669\nf 5871/4668 1487/4669 5873/6764\nf 5877/4674 382/4675 5880/6765\nf 5878/5759 5880/6765 382/4675\nf 5883/4672 1490/4673 5885/6766\nf 5884/5756 5885/6766 1490/4673\nf 5889/4734 380/4735 5892/6767\nf 5890/5757 5892/6767 380/4735\nf 5896/5758 5898/6768 1494/4676\nf 5895/4677 1494/4676 5898/6768\nf 5903/5763 5905/6769 100/4746\nf 5902/4747 100/4746 5905/6769\nf 5910/5760 5911/6770 1496/4680\nf 5909/4681 1496/4680 5911/6770\nf 5914/5761 5916/6771 381/4678\nf 5907/4679 381/4678 5916/6771\nf 5922/6772 5919/4684 5920/5762\nf 1500/4685 5920/5762 5919/4684\nf 5929/6773 5926/4690 5927/5767\nf 386/4691 5927/5767 5926/4690\nf 5933/4689 1503/4688 5935/6774\nf 5934/5764 5935/6774 1503/4688\nf 5939/4751 383/4750 5942/6775\nf 5940/5765 5942/6775 383/4750\nf 5948/6776 5945/4692 5946/5766\nf 1507/4693 5946/5766 5945/4692\nf 5955/6777 5952/4762 5953/2840\nf 101/4763 5953/2840 5952/4762\nf 5959/4696 1510/4697 5962/6778\nf 5960/5768 5962/6778 1510/4697\nf 5965/2833 5967/6779 384/4694\nf 5957/4695 384/4694 5967/6779\nf 5974/6780 5972/4700 5973/5770\nf 1514/4701 5973/5770 5972/4700\nf 5982/6781 5979/4707 5980/5777\nf 390/4706 5980/5777 5979/4707\nf 1518/4705 5987/5773 5986/4704\nf 5988/6782 5986/4704 5987/5773\nf 5994/5774 5996/6783 388/5775\nf 5993/6784 388/5775 5996/6783\nf 1522/4709 6000/5776 5999/4708\nf 6002/6785 5999/4708 6000/5776\nf 6009/6786 6006/6787 6007/5781\nf 99/5782 6007/5781 6006/6787\nf 6015/6788 6013/4712 6014/5778\nf 1524/4713 6014/5778 6013/4712\nf 6020/6789 6011/4710 6018/5779\nf 389/4711 6018/5779 6011/4710\nf 6025/6790 6023/4716 6024/5780\nf 1527/4717 6024/5780 6023/4716\nf 6032/6791 6029/4722 6030/5786\nf 392/4723 6030/5786 6029/4722\nf 6037/6792 6035/4720 6036/5783\nf 1530/4721 6036/5783 6035/4720\nf 6044/6793 6041/4827 6042/5784\nf 391/4828 6042/5784 6041/4827\nf 1533/4724 6048/5785 6047/4725\nf 6050/6794 6047/4725 6048/5785\nf 52/4839 3390/6272 6054/4840\nf 6056/6795 6054/4840 3390/6272\nf 6061/6796 6059/4729 6060/5787\nf 1534/4728 6060/5787 6059/4729\nf 224/4726 3377/6269 6057/4727\nf 6065/6797 6057/4727 3377/6269\nf 6067/4732 1537/4733 6069/6798\nf 6068/5788 6069/6798 1537/4733\nf 6074/5792 6076/6799 395/4738\nf 6073/4739 395/4738 6076/6799\nf 6079/4736 1540/4737 6081/6800\nf 6080/5789 6081/6800 1540/4737\nf 6086/5790 6088/6801 393/4782\nf 6085/4783 393/4782 6088/6801\nf 6092/5791 6094/6802 1544/4740\nf 6091/4741 1544/4740 6094/6802\nf 6098/4794 102/4795 6101/6803\nf 6099/5796 6101/6803 102/4795\nf 6106/5793 6107/6804 1546/4744\nf 6105/4745 1546/4744 6107/6804\nf 6110/5794 6112/6805 394/4742\nf 6103/4743 394/4742 6112/6805\nf 6116/5795 6117/6806 1549/4748\nf 6115/4749 1549/4748 6117/6806\nf 6122/5800 6124/6807 398/4755\nf 6121/4754 398/4755 6124/6807\nf 6127/4752 1552/4753 6129/6808\nf 6128/5797 6129/6808 1552/4753\nf 6133/6809 396/4791 6136/6810\nf 6134/5798 6136/6810 396/4791\nf 6142/6811 6139/4757 6140/5799\nf 1556/4756 6140/5799 6139/4757\nf 103/5804 6147/5805 6146/6812\nf 6149/6813 6146/6812 6147/5805\nf 6155/6814 6153/4760 6154/5801\nf 1558/4761 6154/5801 6153/4760\nf 6160/6815 6151/4758 6158/5802\nf 397/4759 6158/5802 6151/4758\nf 6166/6816 6163/4764 6164/5803\nf 1562/4765 6164/5803 6163/4764\nf 6173/6817 6170/4770 6171/5810\nf 401/4771 6171/5810 6170/4770\nf 1565/4768 6178/5806 6177/4769\nf 6179/6818 6177/4769 6178/5806\nf 399/5807 6184/5808 6183/2801\nf 6186/6819 6183/2801 6184/5808\nf 6192/6820 6189/4772 6190/5809\nf 1568/4773 6190/5809 6189/4772\nf 53/3936 3546/6300 6196/2794\nf 6198/6821 6196/2794 3546/6300\nf 6204/6822 6201/4776 6202/5811\nf 1570/4777 6202/5811 6201/4776\nf 236/4774 3533/6297 6199/4775\nf 6208/6823 6199/4775 3533/6297\nf 6211/4780 1573/4781 6213/6824\nf 6212/5812 6213/6824 1573/4781\nf 6217/4786 402/4787 6220/6825\nf 6218/5816 6220/6825 402/4787\nf 6225/6826 6223/4784 6224/5813\nf 1575/4785 6224/5813 6223/4784\nf 6230/6827 6193/2774 6228/5814\nf 399/5807 6228/5814 6193/2774\nf 6236/6828 6233/4788 6234/5815\nf 1577/4789 6234/5815 6233/4788\nf 6240/6829 6180/2767 6146/6812\nf 103/5804 6146/6812 6180/2767\nf 6243/4792 1578/4793 6245/6830\nf 6244/5817 6245/6830 1578/4793\nf 6249/6831 6241/4790 6133/6809\nf 396/4791 6133/6809 6241/4790\nf 6253/6832 6251/4796 6252/5818\nf 1581/4797 6252/5818 6251/4796\nf 6257/4801 404/4802 6260/6833\nf 6258/5822 6260/6833 404/4802\nf 6263/4799 1584/4800 6265/6834\nf 6264/5819 6265/6834 1584/4800\nf 6269/4843 403/4844 6272/6835\nf 6270/5820 6272/6835 403/4844\nf 6275/4803 1587/4804 6278/6836\nf 6276/5821 6278/6836 1587/4804\nf 6282/4855 105/4698 6284/6837\nf 5968/2629 6284/6837 105/4698\nf 6289/6838 6287/4806 6288/5823\nf 1588/4807 6288/5823 6287/4806\nf 6285/4805 384/4694 6293/6839\nf 5956/2622 6293/6839 384/4694\nf 6297/6840 6295/4809 6296/5824\nf 1591/4810 6296/5824 6295/4809\nf 6304/6841 6301/4816 6302/5828\nf 406/4815 6302/5828 6301/4816\nf 1594/4813 6308/5825 6307/4814\nf 6309/6842 6307/4814 6308/5825\nf 405/4852 6314/5826 6313/6843\nf 6316/6844 6313/6843 6314/5826\nf 1597/4817 6320/5827 6319/4818\nf 6322/6845 6319/4818 6320/5827\nf 104/5771 5989/5772 6326/6846\nf 6328/6847 6326/6846 5989/5772\nf 6333/6848 6331/4822 6332/5829\nf 1598/4821 6332/5829 6331/4822\nf 387/4819 5975/5769 6329/4820\nf 6337/6849 6329/4820 5975/5769\nf 6341/6850 6339/4825 6340/5830\nf 1601/4826 6340/5830 6339/4825\nf 6348/6851 6345/4831 6346/5835\nf 408/4832 6346/5835 6345/4831\nf 6353/6852 6351/4829 6352/5831\nf 1604/4830 6352/5831 6351/4829\nf 407/5833 6358/5832 6357/2917\nf 6360/6853 6357/2917 6358/5832\nf 6366/6854 6363/4833 6364/5834\nf 1607/4834 6364/5834 6363/4833\nf 6372/6855 6370/2910 3730/6337\nf 60/3993 3730/6337 6370/2910\nf 6377/6856 6375/4837 6376/5836\nf 1608/4838 6376/5836 6375/4837\nf 246/4835 3717/6333 6373/4836\nf 6381/6857 6373/4836 3717/6333\nf 6383/4841 1611/4842 6385/6858\nf 6384/5837 6385/6858 1611/4842\nf 6392/6859 6389/4847 6390/5841\nf 409/4848 6390/5841 6389/4847\nf 6397/6860 6395/4845 6396/5838\nf 1613/4846 6396/5838 6395/4845\nf 6402/6861 6367/2890 6400/5839\nf 407/5833 6400/5839 6367/2890\nf 6408/6862 6405/4849 6406/5840\nf 1615/4850 6406/5840 6405/4849\nf 6412/6863 6354/2883 6326/6846\nf 104/5771 6326/6846 6354/2883\nf 6415/4853 1616/4854 6417/6864\nf 6416/5842 6417/6864 1616/4854\nf 6413/4851 405/4852 6421/6865\nf 6313/6843 6421/6865 405/4852\nf 6424/4856 1621/4857 6427/6866\nf 6425/5843 6427/6866 1621/4857\nf 6432/6867 413/6868 6435/6869\nf 6433/6870 6435/6869 413/6868\nf 6443/6871 6440/4860 6441/5845\nf 1625/4861 6441/5845 6440/4860\nf 6450/6872 6448/6873 6432/6867\nf 413/6868 6432/6867 6448/6873\nf 6454/4864 1628/4865 6457/6874\nf 6455/5846 6457/6874 1628/4865\nf 6462/6875 6433/6870 6448/6873\nf 413/6868 6448/6873 6433/6870\nf 6465/4867 1632/4868 6468/6876\nf 6466/5849 6468/6876 1632/4868\nf 6472/4872 416/4873 6475/6877\nf 6473/5856 6475/6877 416/4873\nf 6479/4870 1634/4871 6481/6878\nf 6480/5852 6481/6878 1634/4871\nf 3880/6879 257/5853 6486/6880\nf 6484/5854 6486/6880 257/5853\nf 6489/4874 1637/4875 6492/6881\nf 6490/5855 6492/6881 1637/4875\nf 6495/5860 6497/6882 11/5861\nf 3869/6883 11/5861 6497/6882\nf 6501/4878 1640/4879 6504/6884\nf 6502/5857 6504/6884 1640/4879\nf 6499/4876 414/4877 6509/6885\nf 6507/5858 6509/6885 414/4877\nf 6515/6886 6513/4881 6514/5859\nf 1643/4882 6514/5859 6513/4881\nf 6519/4886 417/4887 6522/6887\nf 6520/5866 6522/6887 417/4887\nf 6525/4884 1645/4885 6527/6888\nf 6526/5862 6527/6888 1645/4885\nf 3924/6889 259/5863 6532/6890\nf 6530/5864 6532/6890 259/5863\nf 6535/4888 1647/4889 6538/6891\nf 6536/5865 6538/6891 1647/4889\nf 3913/6892 10/6893 6542/6894\nf 4501/6895 6542/6894 10/6893\nf 6545/4892 1648/4893 6547/6896\nf 6546/5867 6547/6896 1648/4893\nf 6551/6897 6543/4890 4541/6898\nf 296/4891 4541/6898 6543/4890\nf 1652/4896 6555/5869 6554/4897\nf 6556/6899 6554/4897 6555/5869\nf 6564/6900 6561/4901 6562/5876\nf 421/4902 6562/5876 6561/4901\nf 6570/6901 6568/4899 6569/5872\nf 1656/4900 6569/5872 6568/4899\nf 419/5873 6576/5874 6575/6902\nf 6578/6903 6575/6902 6576/5874\nf 6582/5875 6584/6904 1660/4903\nf 6581/4904 1660/4903 6584/6904\nf 6591/6905 6588/6906 6589/5934\nf 108/5935 6589/5934 6588/6906\nf 6596/5877 6597/6907 1662/4907\nf 6595/4908 1662/4907 6597/6907\nf 6593/4905 420/4906 6602/6908\nf 6600/5932 6602/6908 420/4906\nf 6606/5878 6608/6909 1666/4910\nf 6605/4911 1666/4910 6608/6909\nf 6612/4917 425/4916 6615/6910\nf 6613/5883 6615/6910 425/4916\nf 1669/4914 6620/5879 6619/4915\nf 6621/6911 6619/4915 6620/5879\nf 6628/6912 6625/3217 6626/5880\nf 422/5881 6626/5880 6625/3217\nf 6631/4918 1673/4919 6634/6913\nf 6632/5882 6634/6913 1673/4919\nf 6638/3210 110/5926 6641/6914\nf 6639/6915 6641/6914 110/5926\nf 6645/4922 1676/4923 6648/6916\nf 6646/5884 6648/6916 1676/4923\nf 6653/6917 6643/4920 6651/5943\nf 423/4921 6651/5943 6643/4920\nf 6657/4926 1680/4927 6660/6918\nf 6658/5887 6660/6918 1680/4927\nf 6664/4932 428/4933 6667/6919\nf 6665/5894 6667/6919 428/4933\nf 6671/4930 1682/4931 6673/6920\nf 6672/5890 6673/6920 1682/4931\nf 4989/6921 326/5891 6678/6922\nf 6676/5892 6678/6922 326/5891\nf 6681/4934 1685/4935 6684/6923\nf 6682/5893 6684/6923 1685/4935\nf 5029/6924 81/5916 6689/6925\nf 6687/5917 6689/6925 81/5916\nf 6693/4938 1688/4939 6696/6926\nf 6694/5895 6696/6926 1688/4939\nf 6691/4936 426/4937 6701/6927\nf 6699/5914 6701/6927 426/4937\nf 6707/6928 6705/4943 6706/5898\nf 1691/4942 6706/5898 6705/4943\nf 6711/4948 430/4949 6714/6929\nf 6712/5904 6714/6929 430/4949\nf 6719/6930 6717/4946 6718/5901\nf 1693/4947 6718/5901 6717/4946\nf 6669/4928 427/4929 6724/6931\nf 6722/5902 6724/6931 427/4929\nf 1696/4950 6728/5903 6727/4951\nf 6730/6932 6727/4951 6728/5903\nf 6735/6933 6703/4940 6733/5908\nf 112/4941 6733/5908 6703/4940\nf 6741/6934 6739/4955 6740/5905\nf 1698/4954 6740/5905 6739/4955\nf 6746/6935 6737/4952 6744/5906\nf 429/4953 6744/5906 6737/4952\nf 6751/6936 6749/4958 6750/5907\nf 1701/4959 6750/5907 6749/4958\nf 6758/6937 6755/4964 6756/5912\nf 432/4965 6756/5912 6755/4964\nf 6763/6938 6761/4962 6762/5909\nf 1704/4963 6762/5909 6761/4962\nf 431/4988 6768/5910 6767/4989\nf 6770/6939 6767/4989 6768/5910\nf 6776/6940 6773/4967 6774/5911\nf 1707/4966 6774/5911 6773/4967\nf 107/5000 6456/6941 6780/5001\nf 6782/6942 6780/5001 6456/6941\nf 6786/5913 6787/6943 1708/4970\nf 6785/4969 1708/4970 6787/6943\nf 6791/6944 6783/4968 6444/5844\nf 411/4866 6444/5844 6783/4968\nf 6793/4972 1712/4973 6796/6945\nf 6794/5915 6796/6945 1712/4973\nf 6800/4978 434/4979 6803/6946\nf 6801/5922 6803/6946 434/4979\nf 6807/4976 1714/4977 6809/6947\nf 6808/5918 6809/6947 1714/4977\nf 5043/6948 330/5920 6814/6949\nf 6812/5919 6814/6949 330/5920\nf 6820/6950 6817/4980 6818/5921\nf 1716/4981 6818/5921 6817/4980\nf 6824/6951 5081/6952 6467/6953\nf 71/6954 6467/6953 5081/6952\nf 6827/4983 1718/4984 6830/6955\nf 6828/5923 6830/6955 1718/4984\nf 6834/6956 6825/4982 6503/6957\nf 415/4869 6503/6957 6825/4982\nf 6838/4986 1722/4987 6840/6958\nf 6839/5924 6840/6958 1722/4987\nf 6848/6959 6845/4992 6846/5930\nf 436/4993 6846/5930 6845/4992\nf 6854/6960 6852/4990 6853/5927\nf 1725/4991 6853/5927 6852/4990\nf 6860/6961 6635/3058 6858/5928\nf 422/5881 6858/5928 6635/3058\nf 6866/6962 6863/4994 6864/5929\nf 1727/4995 6864/5929 6863/4994\nf 6870/6963 6622/3050 6571/5870\nf 109/5871 6571/5870 6622/3050\nf 1728/4999 6874/5931 6873/4998\nf 6875/6964 6873/4998 6874/5931\nf 418/4997 6557/5868 6871/4996\nf 6879/6965 6871/4996 6557/5868\nf 6881/5002 1731/5003 6883/6966\nf 6882/5933 6883/6966 1731/5003\nf 6887/5007 438/5008 6890/6967\nf 6888/5939 6890/6967 438/5008\nf 6893/5006 1733/5005 6895/6968\nf 6894/5936 6895/6968 1733/5005\nf 6617/4912 424/4913 6900/6969\nf 6898/5937 6900/6969 424/4913\nf 6903/5009 1736/5010 6906/6970\nf 6904/5938 6906/6970 1736/5010\nf 6655/4924 111/4925 6911/6971\nf 6909/6972 6911/6971 111/4925\nf 6915/5013 1738/5014 6917/6973\nf 6916/5940 6917/6973 1738/5014\nf 6922/6974 6913/5011 6920/5941\nf 437/5012 6920/5941 6913/5011\nf 1741/5016 6926/5942 6925/5017\nf 6927/6975 6925/5017 6926/5942\nf 439/6976 6932/6977 6931/6978\nf 6934/6979 6931/6978 6932/6977\nf 1743/5020 6938/5944 6937/5021\nf 6939/6980 6937/5021 6938/5944\nf 6943/6981 439/6976 6945/6982\nf 6931/6978 6945/6982 439/6976\nf 1744/5023 6948/5946 6947/5022\nf 6949/6983 6947/5022 6948/5946\nf 6943/6981 6953/6984 439/6976\nf 6932/6977 439/6976 6953/6984\nf 6956/5024 1748/5025 6958/6985\nf 6957/5947 6958/6985 1748/5025\nf 6963/6986 441/6987 6966/6988\nf 6964/6989 6966/6988 441/6987\nf 6970/5948 6972/6990 1751/5029\nf 6969/5028 1751/5029 6972/6990\nf 6963/6986 6978/6991 441/6987\nf 6976/6992 441/6987 6978/6991\nf 6983/6993 6981/5032 6982/5949\nf 1752/5033 6982/5949 6981/5032\nf 6987/6994 6964/6989 6976/6992\nf 441/6987 6976/6992 6964/6989\nf 1755/5035 6990/5950 6989/5036\nf 6991/6995 6989/5036 6990/5950\nf 6998/6996 6995/5040 6996/5954\nf 443/5041 6996/5954 6995/5040\nf 7003/6997 7001/5038 7002/5951\nf 1758/5039 7002/5951 7001/5038\nf 7010/6998 7007/6999 7008/5952\nf 442/5061 7008/5952 7007/6999\nf 7016/7000 7013/5042 7014/5953\nf 1761/5043 7014/5953 7013/5042\nf 7022/7001 7020/7002 4400/6484\nf 69/6486 4400/6484 7020/7002\nf 7027/7003 7025/5046 7026/5955\nf 1762/5047 7026/5955 7025/5046\nf 7031/7004 7023/5044 4387/6481\nf 286/5045 4387/6481 7023/5044\nf 7034/5050 1766/5051 7036/7005\nf 7035/5956 7036/7005 1766/5051\nf 7041/5056 445/5057 7044/7006\nf 7042/5961 7044/7006 445/5057\nf 7048/5054 1769/5055 7050/7007\nf 7049/5958 7050/7007 1769/5055\nf 4459/6498 289/4204 7056/7008\nf 7054/5959 7056/7008 289/4204\nf 7059/5058 1771/5059 7062/7009\nf 7060/5960 7062/7009 1771/5059\nf 4447/6495 69/6486 7066/7010\nf 7020/7002 7066/7010 69/6486\nf 7069/5062 1772/5063 7071/7011\nf 7070/5962 7071/7011 1772/5063\nf 7067/5060 442/5061 7075/7012\nf 7007/6999 7075/7012 442/5061\nf 7079/7013 7077/5066 7078/5963\nf 1775/5067 7078/5963 7077/5066\nf 7084/7014 7086/7015 446/7016\nf 7083/7017 446/7016 7086/7015\nf 7091/7018 7089/5070 7090/5964\nf 1777/5071 7090/5964 7089/5070\nf 7097/7019 7095/7020 7083/7017\nf 446/7016 7083/7017 7095/7020\nf 7099/5074 1778/5075 7101/7021\nf 7100/5966 7101/7021 1778/5075\nf 7084/7014 446/7016 7105/7022\nf 7095/7020 7105/7022 446/7016\nf 447/7023 1784/5078 1780/3369\nf 1787/3 1780/3369 1784/5078\nf 450/7024 1781/5079 1793/3371\nf 1794/7 1793/3371 1781/5079\nf 1799/5081 1802/11 452/7025\nf 1796/3373 452/7025 1802/11\nf 1797/5082 1808/15 448/2\nf 1788/3375 448/2 1808/15\nf 1804/5083 1815/19 454/14\nf 1809/3377 454/14 1815/19\nf 1810/5084 1822/23 458/26\nf 1821/3379 458/26 1822/23\nf 1789/5085 1828/27 449/6\nf 1823/3381 449/6 1828/27\nf 1824/5086 1834/31 461/7026\nf 1833/3383 461/7026 1834/31\nf 1829/5087 1841/35 460/30\nf 1835/3385 460/30 1841/35\nf 465/7027 1836/5088 1847/3387\nf 1848/39 1847/3387 1836/5088\nf 1817/5089 1854/43 457/22\nf 1849/3389 457/22 1854/43\nf 1850/5090 1860/47 463/34\nf 1842/3391 463/34 1860/47\nf 1856/5091 1867/51 468/46\nf 1861/3393 468/46 1867/51\nf 1862/5092 1874/55 472/58\nf 1873/3395 472/58 1874/55\nf 1843/5093 1880/59 464/38\nf 1875/3397 464/38 1880/59\nf 1876/5094 1886/63 475/7028\nf 1885/3399 475/7028 1886/63\nf 477/7029 1891/5095 1888/3401\nf 1894/65 1888/3401 1891/5095\nf 1889/5097 1900/69 453/10\nf 1803/3403 453/10 1900/69\nf 481/7030 1905/5098 1902/3405\nf 1908/73 1902/3405 1905/5098\nf 478/68 1903/5100 1895/3407\nf 1914/77 1895/3407 1903/5100\nf 483/80 1910/5101 1915/3409\nf 1921/83 1915/3409 1910/5101\nf 1916/5102 1928/87 487/92\nf 1927/3411 487/92 1928/87\nf 479/72 1896/5103 1929/3413\nf 1933/89 1929/3413 1896/5103\nf 1930/5104 1938/95 456/18\nf 1816/3415 456/18 1938/95\nf 491/7031 1943/5105 1940/3417\nf 1946/99 1940/3417 1943/5105\nf 1941/5107 1952/103 482/76\nf 1909/3419 482/76 1952/103\nf 495/7032 1957/5108 1954/3421\nf 1960/105 1954/3421 1957/5108\nf 1955/5110 1966/111 492/98\nf 1947/3423 492/98 1966/111\nf 497/110 1962/5111 1967/3425\nf 1973/113 1967/3425 1962/5111\nf 1968/5112 1980/119 501/122\nf 1979/3427 501/122 1980/119\nf 1948/5113 1985/123 493/102\nf 1981/3429 493/102 1985/123\nf 1982/5114 1990/127 485/82\nf 1922/3431 485/82 1990/127\nf 1986/5115 1997/131 503/126\nf 1991/3433 503/126 1997/131\nf 1992/5116 2004/135 507/170\nf 2003/3435 507/170 2004/135\nf 1975/5117 2010/139 500/118\nf 2005/3437 500/118 2010/139\nf 2006/5118 2016/143 505/130\nf 1998/3439 505/130 2016/143\nf 510/142 2012/5119 2017/3441\nf 2023/145 2017/3441 2012/5119\nf 2018/5120 2030/150 514/154\nf 2029/3443 514/154 2030/150\nf 1999/5121 2036/155 506/134\nf 2031/3445 506/134 2036/155\nf 2032/5122 2042/159 517/178\nf 2041/3447 517/178 2042/159\nf 1934/5123 2048/163 489/94\nf 2043/3449 489/94 2048/163\nf 2044/5124 2054/167 467/42\nf 1855/3451 467/42 2054/167\nf 1923/5125 2059/171 486/86\nf 2055/3453 486/86 2059/171\nf 2056/5126 2064/175 519/162\nf 2049/3455 519/162 2064/175\nf 2060/5127 2070/179 522/174\nf 2065/3457 522/174 2070/179\nf 2066/5128 2076/183 525/186\nf 2075/3459 525/186 2076/183\nf 2050/5129 2081/187 520/166\nf 2077/3461 520/166 2081/187\nf 2078/5130 2086/191 470/50\nf 1868/3463 470/50 2086/191\nf 529/7033 2091/5131 2088/3465\nf 2094/193 2088/3465 2091/5131\nf 496/108 2089/5133 1961/3467\nf 2100/197 1961/3467 2089/5133\nf 533/7034 2105/5134 2102/3469\nf 2108/201 2102/3469 2105/5134\nf 530/196 2103/5135 2095/3471\nf 2114/205 2095/3471 2103/5135\nf 535/208 2110/5136 2115/3473\nf 2121/209 2115/3473 2110/5136\nf 2116/5137 2128/215 539/220\nf 2127/3475 539/220 2128/215\nf 531/200 2096/5138 2129/3477\nf 2133/217 2129/3477 2096/5138\nf 499/116 2130/5139 1974/3479\nf 2138/221 1974/3479 2130/5139\nf 541/224 2134/5140 2139/3481\nf 2144/225 2139/3481 2134/5140\nf 509/138 2140/5141 2011/3483\nf 2150/229 2011/3483 2140/5141\nf 538/214 2123/5142 2151/3485\nf 2156/233 2151/3485 2123/5142\nf 543/228 2152/5143 2145/3487\nf 2162/237 2145/3487 2152/5143\nf 547/240 2158/5144 2163/3489\nf 2169/241 2163/3489 2158/5144\nf 551/252 2164/5145 2175/3491\nf 2176/245 2175/3491 2164/5145\nf 544/232 2146/5146 2177/3493\nf 2181/249 2177/3493 2146/5146\nf 512/148 2178/5147 2024/3495\nf 2186/253 2024/3495 2178/5147\nf 553/256 2182/5148 2187/3497\nf 2192/257 2187/3497 2182/5148\nf 2198/264 2028/149 2188/5149\nf 513/151 2188/5149 2028/149\nf 550/248 2171/5150 2199/3499\nf 2204/265 2199/3499 2171/5150\nf 555/260 2200/5151 2193/3502\nf 2210/272 2193/3502 2200/5151\nf 2217/276 2211/3504 2206/5152\nf 559/269 2206/5152 2211/3504\nf 563/284 2212/5153 2223/3505\nf 2224/277 2223/3505 2212/5153\nf 2229/281 2225/3507 2194/5154\nf 556/261 2194/5154 2225/3507\nf 516/158 2226/5155 2040/160\nf 2234/285 2040/160 2226/5155\nf 565/288 2230/5156 2235/3509\nf 2240/290 2235/3509 2230/5156\nf 524/182 2236/5157 2074/184\nf 2246/294 2074/184 2236/5157\nf 562/280 2219/5158 2247/3512\nf 2252/298 2247/3512 2219/5158\nf 2241/3514 567/291 2258/302\nf 2248/5159 2258/302 567/291\nf 2254/5160 2265/306 571/303\nf 2259/3515 571/303 2265/306\nf 2260/5161 2270/310 574/313\nf 2269/3517 574/313 2270/310\nf 2242/5162 2275/314 568/295\nf 2271/3518 568/295 2275/314\nf 2272/5163 2278/317 527/190\nf 2085/192 527/190 2278/317\nf 2284/5165 2287/321 577/7035\nf 2280/3520 577/7035 2287/321\nf 580/7036 2281/5166 2293/3522\nf 2294/323 2293/3522 2281/5166\nf 2299/5168 2302/329 582/7037\nf 2296/3524 582/7037 2302/329\nf 2297/5169 2308/333 578/320\nf 2288/3526 578/320 2308/333\nf 584/332 2304/5170 2309/3528\nf 2315/335 2309/3528 2304/5170\nf 588/346 2310/5171 2321/3530\nf 2322/339 2321/3530 2310/5171\nf 579/326 2289/5172 2323/3532\nf 2328/343 2323/3532 2289/5172\nf 591/7038 2324/5173 2333/3534\nf 2334/347 2333/3534 2324/5173\nf 2339/5175 2342/351 593/7039\nf 2336/3536 593/7039 2342/351\nf 2337/5176 2348/357 583/328\nf 2303/3538 583/328 2348/357\nf 597/7040 2353/5177 2350/3540\nf 2356/359 2350/3540 2353/5177\nf 594/354 2351/5179 2343/3542\nf 2362/363 2343/3542 2351/5179\nf 599/366 2358/5180 2363/3544\nf 2369/367 2363/3544 2358/5180\nf 603/378 2364/5181 2375/3546\nf 2376/373 2375/3546 2364/5181\nf 595/356 2344/5182 2377/3548\nf 2381/375 2377/3548 2344/5182\nf 586/338 2378/5183 2316/3550\nf 2386/379 2316/3550 2378/5183\nf 2382/5184 2393/385 605/382\nf 2387/3552 605/382 2393/385\nf 609/426 2388/5185 2399/3554\nf 2400/387 2399/3554 2388/5185\nf 2371/5186 2406/393 602/372\nf 2401/3556 602/372 2406/393\nf 2402/5187 2412/397 607/384\nf 2394/3558 607/384 2412/397\nf 2408/5188 2419/401 612/396\nf 2413/3560 612/396 2419/401\nf 2414/5189 2426/405 616/408\nf 2425/3562 616/408 2426/405\nf 2395/5190 2432/409 608/390\nf 2427/3564 608/390 2432/409\nf 619/434 2428/5191 2437/3566\nf 2438/413 2437/3566 2428/5191\nf 590/350 2329/5192 2439/3568\nf 2445/415 2439/3568 2329/5192\nf 623/7041 2440/5193 2451/3570\nf 2452/419 2451/3570 2440/5193\nf 587/342 2317/5194 2453/3572\nf 2457/423 2453/3572 2317/5194\nf 621/418 2454/5195 2446/3574\nf 2462/427 2446/3574 2454/5195\nf 625/430 2458/5196 2463/3576\nf 2468/431 2463/3576 2458/5196\nf 628/442 2464/5197 2473/3578\nf 2474/435 2473/3578 2464/5197\nf 622/422 2447/5198 2475/3580\nf 2480/439 2475/3580 2447/5198\nf 631/7042 2476/5199 2485/3582\nf 2486/443 2485/3582 2476/5199\nf 633/7043 2491/5200 2488/3584\nf 2494/447 2488/3584 2491/5200\nf 598/362 2489/5202 2357/3586\nf 2500/451 2357/3586 2489/5202\nf 637/7044 2505/5203 2502/3588\nf 2508/455 2502/3588 2505/5203\nf 634/450 2503/5204 2495/3590\nf 2514/459 2495/3590 2503/5204\nf 639/462 2510/5205 2515/3592\nf 2521/463 2515/3592 2510/5205\nf 643/474 2516/5206 2527/3594\nf 2528/467 2527/3594 2516/5206\nf 635/454 2496/5207 2529/3596\nf 2533/471 2529/3596 2496/5207\nf 601/370 2530/5208 2370/3598\nf 2538/475 2370/3598 2530/5208\nf 2534/5209 2544/481 645/478\nf 2539/3600 645/478 2544/481\nf 2540/5210 2550/485 611/392\nf 2407/3602 611/392 2550/485\nf 642/470 2523/5211 2551/3604\nf 2556/489 2551/3604 2523/5211\nf 2552/5212 2562/493 647/480\nf 2545/3606 647/480 2562/493\nf 651/492 2558/5213 2563/3608\nf 2569/495 2563/3608 2558/5213\nf 655/504 2564/5214 2575/3610\nf 2576/499 2575/3610 2564/5214\nf 2546/5215 2581/505 648/484\nf 2577/3612 648/484 2581/505\nf 2578/5216 2586/509 614/400\nf 2420/3614 614/400 2586/509\nf 2595/514 2588/3616 2592/4477\nf 659/7045 2592/4477 2588/3616\nf 2602/515 2601/3619 2589/5217\nf 662/7046 2589/5217 2601/3619\nf 533/7047 2101/5218 2603/3620\nf 2609/519 2603/3620 2101/5218\nf 665/7048 2604/5219 2613/3622\nf 2614/523 2613/3622 2604/5219\nf 2619/5220 2622/527 667/7049\nf 2616/3624 667/7049 2622/527\nf 2617/5221 2626/530 529/7050\nf 2091/3626 529/7050 2626/530\nf 670/7051 2632/5222 2628/3628\nf 2635/531 2628/3628 2632/5222\nf 672/7052 2629/5223 2639/3630\nf 2640/535 2639/3630 2629/5223\nf 2642/3632 674/7053 2648/537\nf 2646/5224 2648/537 674/7053\nf 2643/5225 2652/540 675/7054\nf 2651/3634 675/7054 2652/540\nf 675/7054 2651/3634 2653/3636\nf 2659/541 2653/3636 2651/3634\nf 679/7055 2654/5226 2665/3638\nf 2666/545 2665/3638 2654/5226\nf 670/7051 2627/5227 2667/3640\nf 2672/549 2667/3640 2627/5227\nf 677/544 2668/5229 2660/3642\nf 2678/553 2660/3642 2668/5229\nf 682/556 2674/5230 2679/3644\nf 2685/557 2679/3644 2674/5230\nf 686/568 2680/5232 2691/3646\nf 2692/561 2691/3646 2680/5232\nf 678/548 2661/5233 2693/3648\nf 2698/565 2693/3648 2661/5233\nf 689/7056 2694/5234 2703/3650\nf 2704/569 2703/3650 2694/5234\nf 2705/3653 580/7057 2710/574\nf 2293/5235 2710/574 580/7057\nf 2690/563 685/564 2716/578\nf 2706/5237 2716/578 685/564\nf 2717/3655 591/7058 2722/581\nf 2333/5238 2722/581 591/7058\nf 2711/3657 691/575 2728/586\nf 2718/5240 2728/586 691/575\nf 695/587 2724/5241 2729/3658\nf 2735/589 2729/3658 2724/5241\nf 2741/3661 699/599 2742/594\nf 2730/5242 2742/594 699/599\nf 2743/3663 692/579 2747/598\nf 2712/5243 2747/598 692/579\nf 2744/5244 2752/603 688/572\nf 2702/571 688/572 2752/603\nf 2753/3665 697/592 2759/606\nf 2733/590 2759/606 697/592\nf 2765/3667 705/7059 2766/610\nf 2754/5245 2766/610 705/7059\nf 2772/613 2767/3668 2451/5246\nf 623/7060 2451/5246 2767/3668\nf 694/584 2768/5247 2723/3670\nf 2776/618 2723/3670 2768/5247\nf 2778/3673 709/7061 2784/620\nf 2781/5248 2784/620 709/7061\nf 2477/3675 631/7062 2788/623\nf 2779/5249 2788/623 631/7062\nf 2794/4533 2797/627 712/7063\nf 2790/3676 712/7063 2797/627\nf 714/7064 2791/5250 2801/3678\nf 2802/629 2801/3678 2791/5250\nf 716/7065 2808/5251 2804/3680\nf 2810/631 2804/3680 2808/5251\nf 717/7066 2805/5252 2813/3682\nf 2814/633 2813/3682 2805/5252\nf 2601/3619 2821/637 662/7046\nf 2815/3684 662/7046 2821/637\nf 721/7067 2816/5253 2827/3686\nf 2828/639 2827/3686 2816/5253\nf 674/7053 2641/5254 2829/3688\nf 2834/643 2829/3688 2641/5254\nf 719/636 2830/5256 2822/3690\nf 2840/647 2822/3690 2830/5256\nf 2841/3693 724/650 2847/653\nf 2836/5257 2847/653 724/650\nf 728/662 2842/5258 2853/3694\nf 2854/656 2853/3694 2842/5258\nf 720/642 2823/5259 2855/3696\nf 2860/659 2855/3696 2823/5259\nf 731/7068 2856/5260 2865/3698\nf 2866/663 2865/3698 2856/5260\nf 2665/3638 2872/669 679/7055\nf 2867/3700 679/7055 2872/669\nf 2835/3702 723/646 2878/673\nf 2868/5261 2878/673 723/646\nf 2703/3650 2884/677 689/7056\nf 2879/3704 689/7056 2884/677\nf 2880/5262 2890/681 733/668\nf 2873/3706 733/668 2890/681\nf 2886/5263 2897/684 737/680\nf 2891/3708 737/680 2897/684\nf 2892/5264 2904/688 741/692\nf 2903/3711 741/692 2904/688\nf 2874/5265 2909/693 734/672\nf 2905/3712 734/672 2909/693\nf 2906/5266 2914/697 726/652\nf 2848/3714 726/652 2914/697\nf 2748/5267 2920/701 701/602\nf 2915/3716 701/602 2920/701\nf 2916/5268 2926/705 736/676\nf 2885/3718 736/676 2926/705\nf 698/595 2737/5269 2927/3721\nf 2932/707 2927/3721 2737/5269\nf 2928/5271 2938/713 745/700\nf 2921/3722 745/700 2938/713\nf 2934/5272 2945/716 749/712\nf 2939/3724 749/712 2945/716\nf 2940/5273 2952/720 753/724\nf 2951/3727 753/724 2952/720\nf 2922/5274 2957/725 746/704\nf 2953/3728 746/704 2957/725\nf 2898/3731 739/685 2962/728\nf 2954/5275 2962/728 739/685\nf 2968/731 2963/3732 2765/3667\nf 705/7059 2765/3667 2963/3732\nf 748/710 2964/5276 2933/3734\nf 2974/735 2933/3734 2964/5276\nf 716/7065 2803/5277 2975/3736\nf 2980/739 2975/3736 2803/5277\nf 757/734 2976/5278 2969/3738\nf 2986/743 2969/3738 2976/5278\nf 761/746 2982/5279 2987/3740\nf 2993/747 2987/3740 2982/5279\nf 2988/5280 3000/753 765/758\nf 2999/3742 765/758 3000/753\nf 758/738 2970/5281 3001/3744\nf 3005/755 3001/3744 2970/5281\nf 2946/3747 751/717 3010/760\nf 3002/5282 3010/760 751/717\nf 2801/5284 3017/765 714/7069\nf 3011/3748 714/7069 3017/765\nf 3012/5285 3024/769 771/7070\nf 3023/3750 771/7070 3024/769\nf 2777/5286 3030/773 709/7071\nf 3025/3752 709/7071 3030/773\nf 3026/5287 3036/776 769/764\nf 3018/3754 769/764 3036/776\nf 3037/3757 774/777 3043/780\nf 3032/5288 3043/780 774/777\nf 3049/3759 778/788 3050/784\nf 3038/5289 3050/784 778/788\nf 3019/5290 3056/789 770/768\nf 3051/3760 770/768 3056/789\nf 3052/5291 3062/793 781/7072\nf 3061/3762 781/7072 3062/793\nf 630/446 2481/5292 3063/3764\nf 3068/795 3063/3764 2481/5292\nf 773/772 3064/5293 3031/3767\nf 3074/802 3031/3767 3064/5293\nf 627/438 2469/5294 3075/3768\nf 3080/803 3075/3768 2469/5294\nf 783/798 3076/5295 3069/3770\nf 3086/807 3069/3770 3076/5295\nf 787/810 3082/5296 3087/3772\nf 3093/811 3087/3772 3082/5296\nf 3100/815 3099/3775 3088/5297\nf 791/819 3088/5297 3099/3775\nf 3105/822 3101/3777 3070/5298\nf 784/799 3070/5298 3101/3777\nf 3044/3779 776/781 3110/824\nf 3102/5299 3110/824 776/781\nf 2433/5300 3116/829 618/412\nf 3111/3780 618/412 3116/829\nf 786/806 3112/5301 3081/3782\nf 3122/833 3081/3782 3112/5301\nf 2421/5302 3128/837 615/404\nf 3123/3784 615/404 3128/837\nf 3124/5303 3134/841 795/828\nf 3117/3786 795/828 3134/841\nf 799/840 3130/5304 3135/3789\nf 3141/843 3135/3789 3130/5304\nf 803/854 3136/5305 3147/3790\nf 3148/847 3147/3790 3136/5305\nf 3118/5306 3153/851 796/832\nf 3149/3792 796/832 3153/851\nf 789/814 3150/5307 3094/3794\nf 3158/855 3094/3794 3150/5307\nf 657/508 2582/5308 3159/3796\nf 3164/859 3159/3796 2582/5308\nf 798/836 3160/5309 3129/3798\nf 3170/863 3129/3798 3160/5309\nf 654/502 2571/5310 3171/3800\nf 3176/867 3171/3800 2571/5310\nf 807/862 3172/5311 3165/3802\nf 3182/871 3165/3802 3172/5311\nf 811/874 3178/5312 3183/3804\nf 3189/875 3183/3804 3178/5312\nf 815/886 3184/5313 3195/3806\nf 3196/879 3195/3806 3184/5313\nf 808/866 3166/5314 3197/3808\nf 3201/883 3197/3808 3166/5314\nf 3206/890 3142/3811 3198/5315\nf 801/846 3198/5315 3142/3811\nf 3057/5316 3213/892 780/792\nf 3207/3813 780/792 3213/892\nf 3208/5317 3220/896 821/7073\nf 3219/3815 821/7073 3220/896\nf 3045/5318 3226/900 777/785\nf 3221/3816 777/785 3226/900\nf 3222/5319 3232/905 819/893\nf 3214/3818 819/893 3232/905\nf 3228/5321 3239/909 824/904\nf 3233/3820 824/904 3239/909\nf 3234/5322 3246/913 828/917\nf 3245/3822 828/917 3246/913\nf 3247/3825 820/897 3252/916\nf 3215/5323 3252/916 820/897\nf 3257/3827 831/7074 3258/920\nf 3248/5324 3258/920 831/7074\nf 793/825 3106/5325 3259/3828\nf 3265/923 3259/3828 3106/5325\nf 835/1191 3260/5326 3271/1192\nf 3272/927 3271/1192 3260/5326\nf 790/818 3095/5327 3273/3831\nf 3278/931 3273/3831 3095/5327\nf 833/926 3274/5328 3266/3834\nf 3284/938 3266/3834 3274/5328\nf 3291/942 3285/3836 3280/5329\nf 838/935 3280/5329 3285/3836\nf 3298/946 3297/3838 3286/5330\nf 842/947 3286/5330 3297/3838\nf 834/930 3267/5331 3299/3840\nf 3304/950 3299/3840 3267/5331\nf 3310/954 3309/1202 3300/5332\nf 845/1200 3300/5332 3309/1202\nf 805/858 3154/5333 3311/3842\nf 3316/955 3311/3842 3154/5333\nf 837/934 3312/5334 3279/3845\nf 3322/962 3279/3845 3312/5334\nf 802/850 3143/5335 3323/3846\nf 3328/963 3323/3846 3143/5335\nf 847/958 3324/5336 3317/3848\nf 3334/967 3317/3848 3324/5336\nf 851/970 3330/5337 3335/3851\nf 3341/971 3335/3851 3330/5337\nf 3336/5338 3348/977 855/982\nf 3347/3852 855/982 3348/977\nf 3353/979 3349/3854 3318/5339\nf 848/959 3318/5339 3349/3854\nf 3358/985 3292/3857 3350/5340\nf 840/939 3350/5340 3292/3857\nf 3364/990 3359/3858 3202/5341\nf 817/887 3202/5341 3359/3858\nf 850/966 3360/5342 3329/3860\nf 3370/991 3329/3860 3360/5342\nf 814/882 3191/5343 3371/3862\nf 3376/995 3371/3862 3191/5343\nf 859/987 3372/5344 3365/3864\nf 3382/1002 3365/3864 3372/5344\nf 3389/1006 3383/3867 3378/5345\nf 863/999 3378/5345 3383/3867\nf 867/1014 3384/5346 3395/3868\nf 3396/1007 3395/3868 3384/5346\nf 860/994 3366/5347 3397/3870\nf 3401/1011 3397/3870 3366/5347\nf 853/974 3398/5348 3342/3872\nf 3406/1015 3342/3872 3398/5348\nf 3407/3875 830/921 3413/1020\nf 3253/5349 3413/1020 830/921\nf 3419/3877 873/7075 3420/1024\nf 3408/5350 3420/1024 873/7075\nf 3241/5352 3426/1029 827/912\nf 3421/3878 827/912 3426/1029\nf 3422/5353 3432/1033 871/1021\nf 3414/3880 871/1021 3432/1033\nf 3428/5354 3439/1037 876/1032\nf 3433/3882 876/1032 3439/1037\nf 3434/5355 3446/1041 880/1044\nf 3445/3884 880/1044 3446/1041\nf 3447/3886 872/1025 3452/1045\nf 3415/5356 3452/1045 872/1025\nf 3457/3889 883/7076 3458/1049\nf 3448/5357 3458/1049 883/7076\nf 3463/5359 3466/1053 885/7077\nf 3460/3890 885/7077 3466/1053\nf 3461/5360 3472/1056 875/1028\nf 3427/3892 875/1028 3472/1056\nf 889/7078 3477/5361 3474/3894\nf 3480/1059 3474/3894 3477/5361\nf 3475/5363 3486/1063 886/1052\nf 3467/3896 886/1052 3486/1063\nf 891/1066 3482/5364 3487/3898\nf 3493/1067 3487/3898 3482/5364\nf 3499/3901 895/1077 3500/1074\nf 3488/5365 3500/1074 895/1077\nf 3501/3903 887/1057 3505/1076\nf 3468/5366 3505/1076 887/1057\nf 3440/3905 878/1036 3510/1080\nf 3502/5367 3510/1080 878/1036\nf 899/7079 3515/5368 3512/3906\nf 3518/1083 3512/3906 3515/5368\nf 890/1062 3513/5370 3481/3908\nf 3524/1087 3481/3908 3513/5370\nf 903/7080 3529/5371 3526/3910\nf 3532/1094 3526/3910 3529/5371\nf 900/1086 3527/5372 3519/3912\nf 3538/1095 3519/3912 3527/5372\nf 905/1098 3534/5373 3539/3914\nf 3545/1102 3539/3914 3534/5373\nf 909/1107 3540/5374 3551/3917\nf 3552/1103 3551/3917 3540/5374\nf 3557/1110 3553/3919 3520/5375\nf 901/1090 3520/5375 3553/3919\nf 3562/1114 3494/3921 3554/5376\nf 893/1070 3554/5376 3494/3921\nf 3453/5377 3569/1117 882/1048\nf 3563/3922 882/1048 3569/1117\nf 3564/5378 3576/1121 915/7081\nf 3575/3924 915/7081 3576/1121\nf 3577/3927 879/1040 3581/1123\nf 3441/5379 3581/1123 879/1040\nf 3570/3929 913/1116 3586/1126\nf 3578/5380 3586/1126 913/1116\nf 917/1127 3582/5381 3587/3930\nf 3592/1129 3587/3930 3582/5381\nf 919/1137 3588/5382 3595/3932\nf 3596/1131 3595/3932 3588/5382\nf 3597/3933 914/1120 3602/1134\nf 3571/5383 3602/1134 914/1120\nf 921/7082 3598/5384 3605/3935\nf 3606/1138 3605/3935 3598/5384\nf 903/7080 3525/5385 3607/3937\nf 3613/1141 3607/3937 3525/5385\nf 3619/3940 925/7083 3620/1147\nf 3608/5386 3620/1147 925/7083\nf 899/7079 3511/5387 3621/3941\nf 3626/1149 3621/3941 3511/5387\nf 3614/3944 923/1144 3632/1154\nf 3622/5388 3632/1154 923/1144\nf 3633/3946 928/1155 3639/1158\nf 3628/5389 3639/1158 928/1155\nf 3645/3948 932/1167 3646/1162\nf 3634/5390 3646/1162 932/1167\nf 3615/5391 3652/1166 924/1146\nf 3647/3950 924/1146 3652/1166\nf 3648/5392 3658/1171 935/7084\nf 3657/3951 935/7084 3658/1171\nf 889/7078 3473/5393 3659/3953\nf 3664/1173 3659/3953 3473/5393\nf 927/1152 3660/5394 3627/3956\nf 3670/1180 3627/3956 3660/5394\nf 3671/3958 885/7077 3675/1182\nf 3459/5395 3675/1182 885/7077\nf 3672/5396 3680/1186 937/1176\nf 3665/3960 937/1176 3680/1186\nf 3676/5397 3686/1189 940/1185\nf 3681/3961 940/1185 3686/1189\nf 3690/1194 3689/3963 3682/5398\nf 942/1195 3682/5398 3689/3963\nf 3695/1198 3691/3964 3666/5399\nf 938/1177 3666/5399 3691/3964\nf 3640/3966 930/1159 3698/1201\nf 3692/5400 3698/1201 930/1159\nf 869/1018 3402/5401 3699/3967\nf 3704/1203 3699/3967 3402/5401\nf 854/976 3700/5402 3346/978\nf 3710/1207 3346/978 3700/5402\nf 3716/1214 3711/3970 3391/5403\nf 866/1010 3391/5403 3711/3970\nf 945/1206 3712/5404 3705/3971\nf 3722/1215 3705/3971 3712/5404\nf 949/1218 3718/5405 3723/3973\nf 3729/1222 3723/3973 3718/5405\nf 953/1230 3724/5406 3735/3975\nf 3736/1223 3735/3975 3724/5406\nf 946/1210 3706/5407 3737/3977\nf 3741/1227 3737/3977 3706/5407\nf 857/984 3738/5408 3357/986\nf 3746/1234 3357/986 3738/5408\nf 3747/3980 934/1170 3753/1236\nf 3653/5409 3753/1236 934/1170\nf 3759/3981 959/7085 3760/1239\nf 3748/5410 3760/1239 959/7085\nf 3761/3984 931/1163 3765/1244\nf 3641/5411 3765/1244 931/1163\nf 3754/3986 957/1237 3770/1246\nf 3762/5412 3770/1246 957/1237\nf 3771/3988 961/1247 3776/1250\nf 3766/5413 3776/1250 961/1247\nf 963/1257 3772/5414 3779/3989\nf 3780/1251 3779/3989 3772/5414\nf 958/1242 3755/5415 3781/3990\nf 3786/1254 3781/3990 3755/5415\nf 965/7086 3782/5416 3789/3992\nf 3790/1258 3789/3992 3782/5416\nf 3792/3994 967/7087 3799/1263\nf 3796/5417 3799/1263 967/7087\nf 3793/5418 3806/1267 970/7088\nf 3805/3996 970/7088 3806/1267\nf 3808/3999 972/1487 3815/1270\nf 3812/1489 3815/1270 972/1487\nf 3819/4000 974/7089 3820/1273\nf 3809/5419 3820/1273 974/7089\nf 976/7090 3826/5420 3822/4002\nf 3828/1275 3822/4002 3826/5420\nf 977/1480 3823/5421 3831/4004\nf 3832/1277 3831/4004 3823/5421\nf 3837/1520 3840/1281 979/1522\nf 3834/4006 979/1522 3840/1281\nf 3835/5423 3846/1285 633/7091\nf 2491/4008 633/7091 3846/1285\nf 3851/1511 3854/1289 983/1512\nf 3848/4010 983/1512 3854/1289\nf 3849/5425 3860/1293 980/1280\nf 3841/4012 980/1280 3860/1293\nf 3856/5426 3867/1297 985/1292\nf 3861/4014 985/1292 3867/1297\nf 3862/5427 3874/1301 989/1304\nf 3873/4016 989/1304 3874/1301\nf 3842/5428 3879/1305 981/1284\nf 3875/4018 981/1284 3879/1305\nf 3876/5429 3884/1309 637/7092\nf 2505/4020 637/7092 3884/1309\nf 970/7088 3805/3996 3885/4022\nf 3890/1314 3885/4022 3805/3996\nf 3886/5430 3896/1316 984/1288\nf 3855/4024 984/1288 3896/1316\nf 3901/1319 3897/4027 3821/5432\nf 976/7090 3821/5432 3897/4027\nf 3891/4029 993/1311 3906/1324\nf 3898/5433 3906/1324 993/1311\nf 3907/4031 996/1325 3912/1328\nf 3902/5434 3912/1328 996/1325\nf 3917/4033 999/1337 3918/1332\nf 3908/5436 3918/1332 999/1337\nf 3919/4035 994/1317 3923/1336\nf 3892/5437 3923/1336 994/1317\nf 3920/5438 3928/1341 987/1296\nf 3868/4036 987/1296 3928/1341\nf 3935/1345 3929/4039 3819/4000\nf 974/7089 3819/4000 3929/4039\nf 3942/1350 3941/4041 3930/5439\nf 1005/1543 3930/5439 3941/4041\nf 3791/5440 3948/1353 967/7087\nf 3943/4042 967/7087 3948/1353\nf 3944/5441 3954/1357 1003/1344\nf 3936/4044 1003/1344 3954/1357\nf 3950/5442 3961/1361 1008/1356\nf 3955/4046 1008/1356 3961/1361\nf 3956/5443 3968/1364 1012/1370\nf 3967/4049 1012/1370 3968/1364\nf 1004/1347 3937/5444 3969/4050\nf 3974/1367 3969/4050 3937/5444\nf 1015/1554 3970/5445 3979/4052\nf 3980/1374 3979/4052 3970/5445\nf 3985/5446 3988/1376 1017/1594\nf 3982/4054 1017/1594 3988/1376\nf 3966/1363 1011/1365 3994/1381\nf 3983/5447 3994/1381 1011/1365\nf 3996/4056 1021/1586 4002/1383\nf 3999/5448 4002/1383 1021/1586\nf 3989/4059 1018/1377 4008/1387\nf 3997/5450 4008/1387 1018/1377\nf 4009/4061 1023/1390 4015/1392\nf 4004/5451 4015/1392 1023/1390\nf 1027/1399 4010/5452 4021/4062\nf 4022/1395 4021/4062 4010/5452\nf 4027/1402 4023/4065 3990/5453\nf 1019/1380 3990/5453 4023/4065\nf 1014/1371 4024/5454 3978/1372\nf 4032/1403 3978/1372 4024/5454\nf 4037/5455 4040/1409 1031/1469\nf 4034/4066 1031/1469 4040/1409\nf 4035/5456 4046/1413 681/7093\nf 2673/4068 681/7093 4046/1413\nf 4051/5457 4054/1417 1035/1459\nf 4048/4070 1035/1459 4054/1417\nf 4049/5458 4060/1421 1032/1408\nf 4041/4072 1032/1408 4060/1421\nf 4056/5459 4067/1425 1037/1420\nf 4061/4074 1037/1420 4067/1425\nf 4062/5460 4072/1429 1040/1432\nf 4071/4076 1040/1432 4072/1429\nf 4042/5461 4077/1433 1033/1412\nf 4073/4078 1033/1412 4077/1433\nf 4074/5462 4080/1437 684/7094\nf 2686/4080 684/7094 4080/1437\nf 4086/1442 4081/4083 1953/5464\nf 495/7095 1953/5464 4081/4083\nf 667/7096 4082/5465 2619/4084\nf 4092/1443 2619/4084 4082/5465\nf 491/7097 1939/5466 4093/4086\nf 4098/1447 4093/4086 1939/5466\nf 4104/1454 4087/4089 4094/5468\nf 1043/1439 4094/5468 4087/4089\nf 1047/1451 4100/5469 4105/4090\nf 4111/1455 4105/4090 4100/5469\nf 4115/4093 1050/1465 4116/1462\nf 4106/5470 4116/1462 1050/1465\nf 4117/4095 1044/1446 4121/1464\nf 4088/5471 4121/1464 1044/1446\nf 672/7098 4118/5472 2630/4096\nf 4124/1468 2630/4096 4118/5472\nf 481/7099 1901/5473 4125/4098\nf 4130/1471 4125/4098 1901/5473\nf 1046/1450 4126/5475 4099/4100\nf 4136/1475 4099/4100 4126/5475\nf 1887/5476 4141/1481 477/7100\nf 4137/4102 477/7100 4141/1481\nf 1053/1474 4138/5477 4131/4104\nf 4146/1483 4131/4104 4138/5477\nf 1056/1486 4142/5478 4147/4107\nf 4152/1490 4147/4107 4142/5478\nf 1059/1498 4148/5479 4157/4109\nf 4158/1494 4157/4109 4148/5479\nf 1054/1478 4132/5480 4159/4110\nf 4163/1495 4159/4110 4132/5480\nf 1049/1458 4160/5481 4112/4112\nf 4168/1499 4112/4112 4160/5481\nf 4170/4115 1063/7101 4176/1505\nf 4173/5483 4176/1505 1063/7101\nf 4171/5484 4182/1509 1036/1416\nf 4055/4116 1036/1416 4182/1509\nf 4187/5485 4189/1513 1067/7102\nf 4184/4118 1067/7102 4189/1513\nf 4185/5486 4194/1517 1064/1504\nf 4177/4120 1064/1504 4194/1517\nf 1068/1516 4190/5487 4195/4122\nf 4200/1519 4195/4122 4190/5487\nf 4204/1523 4203/4124 4196/5488\nf 1070/1528 4196/5488 4203/4124\nf 4178/5489 4209/1529 1065/1508\nf 4205/4126 1065/1508 4209/1529\nf 4206/5490 4212/1533 1039/1424\nf 4068/4128 1039/1424 4212/1533\nf 4213/4131 1061/1502 4219/1538\nf 4164/5491 4219/1538 1061/1502\nf 4214/5492 4226/1541 1075/7103\nf 4225/4132 1075/7103 4226/1541\nf 4231/1546 4227/4135 4153/5494\nf 1058/1491 4153/5494 4227/4135\nf 1073/1535 4228/5495 4220/4136\nf 4236/1547 4220/4136 4228/5495\nf 1077/1550 4232/5496 4237/4138\nf 4242/1551 4237/4138 4232/5496\nf 1079/1561 4238/5497 4245/4140\nf 4246/1555 4245/4140 4238/5497\nf 1074/1540 4221/5498 4247/4141\nf 4252/1558 4247/4141 4221/5498\nf 1081/7104 4248/5499 4255/4143\nf 4256/1562 4255/4143 4248/5499\nf 4257/4146 1067/7102 4262/1567\nf 4183/5500 4262/1567 1067/7102\nf 3949/4147 1007/1352 4268/1571\nf 4258/5501 4268/1571 1007/1352\nf 4169/5502 4274/1573 1063/7101\nf 4269/4150 1063/7101 4274/1573\nf 4270/5503 4280/1578 1083/1566\nf 4263/4151 1083/1566 4280/1578\nf 4281/4153 1087/1579 4287/1581\nf 4276/5504 4287/1581 1087/1579\nf 4282/5505 4292/1587 1090/1590\nf 4291/4155 1090/1590 4292/1587\nf 4264/5506 4297/1591 1084/1570\nf 4293/4157 1084/1570 4297/1591\nf 4294/5507 4300/1595 1010/1360\nf 3962/4159 1010/1360 4300/1595\nf 4306/1600 4301/4162 4225/4132\nf 1075/7103 4225/4132 4301/4162\nf 4312/1604 4275/4163 4302/5508\nf 1086/1576 4302/5508 4275/4163\nf 4318/1607 4313/4166 4013/1394\nf 1025/1393 4013/1394 4313/4166\nf 4314/5509 4322/1610 1081/7104\nf 4249/4167 1081/7104 4322/1610\nf 4285/1582 4327/1611 1089/1584\nf 4323/4168 1089/1584 4327/1611\nf 4330/1613 4003/4171 4324/5510\nf 1022/1386 4324/5510 4003/4171\nf 3006/5511 4337/1617 767/761\nf 4331/4173 767/761 4337/1617\nf 4343/4175 1101/7105 4344/1620\nf 4332/5512 4344/1620 1101/7105\nf 1103/7106 4349/5034 4346/4176\nf 4352/1623 4346/4176 4349/5034\nf 764/752 4347/5513 2998/754\nf 4356/1627 2998/754 4347/5513\nf 4362/5514 4364/1629 1106/7107\nf 4358/4178 1106/7107 4364/1629\nf 4359/5515 4368/1631 1107/7108\nf 4367/4181 1107/7108 4368/1631\nf 4374/1636 4369/4183 4343/4175\nf 1101/7105 4343/4175 4369/4183\nf 4380/1637 2950/719 4370/5516\nf 752/721 4370/5516 2950/719\nf 4357/5517 4386/1643 1106/7107\nf 4381/4184 1106/7107 4386/1643\nf 1109/1633 4382/5518 4375/4186\nf 4392/1645 4375/4186 4382/5518\nf 1113/1648 4388/5519 4393/4188\nf 4399/1649 4393/4188 4388/5519\nf 1117/1660 4394/5520 4405/4190\nf 4406/1653 4405/4190 4394/5520\nf 1110/1640 4376/5521 4407/4192\nf 4411/1657 4407/4192 4376/5521\nf 4416/1664 2961/727 4408/5522\nf 755/729 4408/5522 2961/727\nf 4417/4195 743/696 4423/1666\nf 2910/5523 4423/1666 743/696\nf 4429/4197 1123/7109 4430/1670\nf 4418/5524 4430/1670 1123/7109\nf 4431/4199 740/689 4435/1674\nf 2899/5525 4435/1674 740/689\nf 4424/4201 1121/1667 4440/1676\nf 4432/5526 4440/1676 1121/1667\nf 4441/4203 1125/1677 4446/1680\nf 4436/5527 4446/1680 1125/1677\nf 4451/4205 1128/1687 4452/1681\nf 4442/5528 4452/1681 1128/1687\nf 4453/4207 1122/1671 4458/1686\nf 4425/5529 4458/1686 1122/1671\nf 4463/4209 1131/7110 4464/1690\nf 4454/5530 4464/1690 1131/7110\nf 4470/1693 4465/4210 4429/4197\nf 1123/7109 4429/4197 4465/4210\nf 727/657 4466/5531 2852/655\nf 4476/1699 2852/655 4466/5531\nf 4478/4213 1136/7111 4484/1702\nf 4481/5076 4484/1702 1136/7111\nf 4455/4214 1131/7110 4488/1705\nf 4479/5532 4488/1705 1131/7110\nf 730/666 2861/5533 4489/4215\nf 4494/1707 4489/4215 2861/5533\nf 1139/7112 4490/5534 4497/4217\nf 4498/1710 4497/4217 4490/5534\nf 450/7024 1793/3371 4499/4219\nf 4505/1712 4499/4219 1793/3371\nf 1143/7113 4500/5535 4511/4221\nf 4512/1717 4511/4221 4500/5535\nf 4513/4224 461/7026 4518/1720\nf 1833/3383 4518/1720 461/7026\nf 4506/4226 1141/1713 4524/1724\nf 4514/5536 4524/1724 1141/1713\nf 4525/4228 1146/1725 4531/1729\nf 4520/5537 4531/1729 1146/1725\nf 4537/4230 1150/1736 4538/1732\nf 4526/5538 4538/1732 1150/1736\nf 4507/5539 4544/1737 1142/1716\nf 4539/4231 1142/1716 4544/1737\nf 4540/5540 4550/1741 1153/7114\nf 4549/4233 1153/7114 4550/1741\nf 465/7027 1847/3387 4551/4235\nf 4556/1745 4551/4235 1847/3387\nf 4552/5541 4562/1749 1145/1721\nf 4519/4237 1145/1721 4562/1749\nf 1885/3399 4568/1753 475/7028\nf 4563/4239 475/7028 4568/1753\nf 4564/5542 4574/1757 1155/1744\nf 4557/4241 1155/1744 4574/1757\nf 4570/5544 4581/1761 1159/1756\nf 4575/4243 1159/1756 4581/1761\nf 4576/5545 4588/1765 1163/1768\nf 4587/4245 1163/1768 4588/1765\nf 4558/5546 4593/1769 1156/1748\nf 4589/4247 1156/1748 4593/1769\nf 4590/5547 4598/1773 1148/1728\nf 4532/4249 1148/1728 4598/1773\nf 4599/4251 1152/1740 4605/1775\nf 4545/5548 4605/1775 1152/1740\nf 1169/7115 4600/5549 4611/4253\nf 4612/1779 4611/4253 4600/5549\nf 4613/4256 1149/1733 4618/1784\nf 4533/5550 4618/1784 1149/1733\nf 1167/1778 4614/5551 4606/4257\nf 4624/1787 4606/4257 4614/5551\nf 4625/4260 1172/1790 4631/1792\nf 4620/5552 4631/1792 1172/1790\nf 1176/1802 4626/5553 4637/4262\nf 4638/1796 4637/4262 4626/5553\nf 1168/1782 4607/5554 4639/4263\nf 4644/1799 4639/4263 4607/5554\nf 1179/7116 4640/5555 4649/4265\nf 4650/1803 4649/4265 4640/5555\nf 4651/4268 1178/1806 4657/1808\nf 4645/5556 4657/1808 1178/1806\nf 1183/7117 4652/5557 4663/4269\nf 4664/1812 4663/4269 4652/5557\nf 4665/4272 1175/1797 4670/1816\nf 4633/5558 4670/1816 1175/1797\nf 4658/4274 1181/1809 4676/1820\nf 4666/5559 4676/1820 1181/1809\nf 4677/4276 1186/1821 4683/1824\nf 4672/5560 4683/1824 1186/1821\nf 1190/1833 4678/5561 4689/4277\nf 4690/1827 4689/4277 4678/5561\nf 4691/4279 1182/1813 4696/1832\nf 4659/5562 4696/1832 1182/1813\nf 1193/7118 4692/5563 4701/4281\nf 4702/1835 4701/4281 4692/5563\nf 4704/4284 1195/1901 4710/1840\nf 4707/5564 4710/1840 1195/1901\nf 4671/4286 1185/1817 4716/1844\nf 4705/5565 4716/1844 1185/1817\nf 4718/4288 1199/1893 4724/1848\nf 4721/5566 4724/1848 1199/1893\nf 4711/4290 1196/1841 4730/1852\nf 4719/5568 4730/1852 1196/1841\nf 4731/4292 1201/1853 4737/1857\nf 4726/5569 4737/1857 1201/1853\nf 1205/1865 4732/5571 4743/4293\nf 4744/1859 4743/4293 4732/5571\nf 4745/4296 1197/1845 4749/1864\nf 4712/5572 4749/1864 1197/1845\nf 4684/4298 1188/1825 4754/1868\nf 4746/5573 4754/1868 1188/1825\nf 4594/5574 4760/1873 1165/1772\nf 4755/4300 1165/1772 4760/1873\nf 4619/4302 1171/1785 4766/1876\nf 4756/5575 4766/1876 1171/1785\nf 4583/5576 4772/1880 1162/1764\nf 4767/4304 1162/1764 4772/1880\nf 4761/4306 1209/1872 4778/1884\nf 4768/5578 4778/1884 1209/1872\nf 4779/4308 1213/1885 4785/1888\nf 4774/5579 4785/1888 1213/1885\nf 4789/4310 1216/1897 4790/1892\nf 4780/5581 4790/1892 1216/1897\nf 4791/4312 1210/1877 4795/1896\nf 4762/5582 4795/1896 1210/1877\nf 4632/4314 1174/1793 4798/1900\nf 4792/5583 4798/1900 1174/1793\nf 1192/1838 4697/5584 4799/4315\nf 4805/1903 4799/4315 4697/5584\nf 1221/7119 4800/5585 4811/4317\nf 4812/1907 4811/4317 4800/5585\nf 1189/1830 4685/5586 4813/4319\nf 4818/1911 4813/4319 4685/5586\nf 1219/1906 4814/5587 4806/4321\nf 4824/1915 4806/4321 4814/5587\nf 4825/4324 1224/1918 4831/1920\nf 4820/5588 4831/1920 1224/1918\nf 1227/1928 4826/5589 4835/4325\nf 4836/1923 4835/4325 4826/5589\nf 1220/1910 4807/5590 4837/4327\nf 4842/1925 4837/4327 4807/5590\nf 1229/7120 4838/5591 4845/4329\nf 4846/1929 4845/4329 4838/5591\nf 1207/1869 4750/5592 4847/4331\nf 4852/1931 4847/4331 4750/5592\nf 1223/1914 4848/5593 4819/4333\nf 4858/1935 4819/4333 4848/5593\nf 1204/1862 4739/5594 4859/4335\nf 4864/1939 4859/4335 4739/5594\nf 1231/1934 4860/5596 4853/4337\nf 4870/1943 4853/4337 4860/5596\nf 1235/1946 4866/5597 4871/4339\nf 4877/1947 4871/4339 4866/5597\nf 1238/1956 4872/5598 4881/4341\nf 4882/1951 4881/4341 4872/5598\nf 1232/1938 4854/5599 4883/4343\nf 4887/1953 4883/4343 4854/5599\nf 1226/1921 4884/5600 4832/4345\nf 4890/1957 4832/4345 4884/5600\nf 4896/1962 4891/4348 4735/1855\nf 1203/1856 4735/1855 4891/4348\nf 1234/1942 4892/5601 4865/4349\nf 4902/1963 4865/4349 4892/5601\nf 1200/1849 4722/1850 4903/4351\nf 4908/1967 4903/4351 4722/1850\nf 4914/1971 4897/4354 4904/5602\nf 1241/1959 4904/5602 4897/4354\nf 1245/1974 4910/5603 4915/4355\nf 4921/1975 4915/4355 4910/5603\nf 4926/1980 4925/4358 4916/5604\nf 1248/1981 4916/5604 4925/4358\nf 1242/1966 4898/5605 4927/4359\nf 4931/1984 4927/4359 4898/5605\nf 1237/1950 4928/5606 4878/4361\nf 4934/1985 4878/4361 4928/5606\nf 1215/1889 4783/1890 4935/4363\nf 4940/1989 4935/4363 4783/1890\nf 1244/1970 4936/5607 4909/4365\nf 4946/1993 4909/4365 4936/5607\nf 4947/4368 1212/1881 4951/1996\nf 4770/1882 4951/1996 1212/1881\nf 4941/4370 1251/1988 4956/1999\nf 4948/5608 4956/1999 1251/1988\nf 4952/5609 4962/2003 1254/2000\nf 4957/4371 1254/2000 4962/2003\nf 4965/4374 1256/2008 4966/2006\nf 4958/5610 4966/2006 1256/2008\nf 4942/5611 4971/2009 1252/1992\nf 4967/4375 1252/1992 4971/2009\nf 1247/1978 4968/5612 4922/4377\nf 4974/2012 4922/4377 4968/5612\nf 1259/7121 4980/5613 4976/4380\nf 4983/2013 4976/4380 4980/5613\nf 4977/5615 4990/2019 1262/7122\nf 4989/4381 1262/7122 4990/2019\nf 1264/7123 4995/5616 4992/4383\nf 4998/2021 4992/4383 4995/5616\nf 1260/2016 4993/5618 4984/4385\nf 5004/2025 4984/4385 4993/5618\nf 1266/2028 5000/5619 5005/4387\nf 5011/2029 5005/4387 5000/5619\nf 1270/2038 5006/5620 5017/4390\nf 5018/2033 5017/4390 5006/5620\nf 4985/5621 5024/2039 1261/2018\nf 5019/4391 1261/2018 5024/2039\nf 5020/5622 5030/2043 1273/7124\nf 5029/4393 1273/7124 5030/2043\nf 5025/5623 5037/2047 1272/2042\nf 5031/4395 1272/2042 5037/2047\nf 5032/5624 5044/2049 1277/7125\nf 5043/4398 1277/7125 5044/2049\nf 1269/2036 5013/5625 5045/4399\nf 5050/2053 5045/4399 5013/5625\nf 1275/2046 5046/5626 5038/4401\nf 5056/2057 5038/4401 5046/5626\nf 1280/2060 5052/5627 5057/4403\nf 5063/2063 5057/4403 5052/5627\nf 1284/2072 5058/5628 5069/4405\nf 5070/2065 5069/4405 5058/5628\nf 1276/2052 5039/5629 5071/4407\nf 5076/2069 5071/4407 5039/5629\nf 1287/7126 5072/5630 5081/4409\nf 5082/2073 5081/4409 5072/5630\nf 1289/2140 5087/5631 5084/4411\nf 5090/2077 5084/4411 5087/5631\nf 5085/5632 5096/2083 1279/2056\nf 5051/4413 1279/2056 5096/2083\nf 1293/2132 5101/5633 5098/4416\nf 5104/2086 5098/4416 5101/5633\nf 5099/5634 5110/2091 1290/2080\nf 5091/4417 1290/2080 5110/2091\nf 5106/5635 5117/2094 1295/2090\nf 5111/4419 1295/2090 5117/2094\nf 5112/5636 5124/2098 1299/2102\nf 5123/4421 1299/2102 5124/2098\nf 5092/5637 5129/2103 1291/2082\nf 5125/4423 1291/2082 5129/2103\nf 5126/5638 5134/2107 1282/2062\nf 5064/4425 1282/2062 5134/2107\nf 1303/7127 5139/5639 5136/4427\nf 5142/2109 5136/4427 5139/5639\nf 1265/2024 5137/5641 4999/4429\nf 5148/2113 4999/4429 5137/5641\nf 1307/7128 5153/5642 5150/4431\nf 5156/2117 5150/4431 5153/5642\nf 1304/2112 5151/5643 5143/4433\nf 5162/2121 5143/4433 5151/5643\nf 1309/2124 5158/5644 5163/4435\nf 5169/2125 5163/4435 5158/5644\nf 1312/2136 5164/5645 5173/4437\nf 5174/2129 5173/4437 5164/5645\nf 1305/2116 5144/5646 5175/4439\nf 5179/2133 5175/4439 5144/5646\nf 1268/2032 5176/5647 5012/4441\nf 5182/2137 5012/4441 5176/5647\nf 1286/2076 5077/5648 5183/4443\nf 5189/2141 5183/4443 5077/5648\nf 1317/7129 5184/5649 5195/4445\nf 5196/2145 5195/4445 5184/5649\nf 1283/2068 5065/5650 5197/4447\nf 5202/2149 5197/4447 5065/5650\nf 1315/2144 5198/5651 5190/4449\nf 5208/2153 5190/4449 5198/5651\nf 1320/2156 5204/5652 5209/4451\nf 5215/2157 5209/4451 5204/5652\nf 1323/2166 5210/5653 5219/4453\nf 5220/2161 5219/4453 5210/5653\nf 1316/2148 5191/5654 5221/4455\nf 5226/2163 5221/4455 5191/5654\nf 1325/7130 5222/5655 5229/4457\nf 5230/2167 5229/4457 5222/5655\nf 5130/5656 5236/2170 1301/2106\nf 5231/4460 1301/2106 5236/2170\nf 5203/4462 1319/2152 5242/2174\nf 5232/5657 5242/2174 1319/2152\nf 5243/4464 1298/2099 5248/2178\nf 5119/5658 5248/2178 1298/2099\nf 5237/4466 1327/2171 5254/2182\nf 5244/5659 5254/2182 1327/2171\nf 1331/2183 5250/5660 5255/4467\nf 5261/2185 5255/4467 5250/5660\nf 1334/2193 5256/5661 5265/4469\nf 5266/2189 5265/4469 5256/5661\nf 5267/4472 1328/2175 5271/2192\nf 5238/5662 5271/2192 1328/2175\nf 1322/2160 5268/5663 5216/4473\nf 5274/2195 5216/4473 5268/5663\nf 5282/2197 5276/4475 5279/4544\nf 1337/7131 5279/4544 5276/4475\nf 5288/2204 2592/4477 5277/5664\nf 659/7045 5277/5664 2592/4477\nf 5294/4496 5297/2207 1341/7132\nf 5290/4478 1341/7132 5297/2207\nf 5291/5665 5302/2210 1343/7133\nf 5301/4480 1343/7133 5302/2210\nf 1345/7134 5308/5666 5304/4482\nf 5311/2211 5304/4482 5308/5666\nf 1347/7135 5305/5667 5315/4484\nf 5316/2215 5315/4484 5305/5667\nf 4811/5668 5323/2219 1221/7136\nf 5317/4486 1221/7136 5323/2219\nf 5318/5669 5328/2222 1350/7137\nf 5327/4488 1350/7137 5328/2222\nf 665/7048 2613/3622 5329/4490\nf 5333/2223 5329/4490 2613/3622\nf 1229/7138 5330/5670 4839/4492\nf 5336/2225 4839/4492 5330/5670\nf 1353/7139 5341/4559 5338/4494\nf 5344/2227 5338/4494 5341/4559\nf 1341/7132 5339/5671 5294/4496\nf 5350/2231 5294/4496 5339/5671\nf 1357/7140 5355/4571 5352/4497\nf 5358/2235 5352/4497 5355/4571\nf 1354/2230 5353/5672 5345/4499\nf 5364/2239 5345/4499 5353/5672\nf 1359/2242 5360/5673 5365/4501\nf 5371/2243 5365/4501 5360/5673\nf 1363/2254 5366/5675 5377/4503\nf 5378/2247 5377/4503 5366/5675\nf 1355/2234 5346/5676 5379/4505\nf 5383/2251 5379/4505 5346/5676\nf 1347/7135 5380/5677 5306/4507\nf 5388/2255 5306/4507 5380/5677\nf 5369/2244 5394/2261 1361/2246\nf 5389/4509 1361/2246 5394/2261\nf 5390/5678 5400/2265 1259/7141\nf 4980/4511 1259/7141 5400/2265\nf 5356/2236 5406/2269 1358/2238\nf 5401/4513 1358/2238 5406/2269\nf 5402/5679 5412/2273 1367/2260\nf 5395/4515 1367/2260 5412/2273\nf 5408/5680 5419/2277 1371/2272\nf 5413/4517 1371/2272 5419/2277\nf 1375/2284 5414/5681 5425/4519\nf 5426/2279 5425/4519 5414/5681\nf 5396/5682 5431/2285 1368/2264\nf 5427/4521 1368/2264 5431/2285\nf 5428/5683 5436/2287 1264/7142\nf 4995/4523 1264/7142 5436/2287\nf 5441/4591 5444/2293 1379/7143\nf 5438/4525 1379/7143 5444/2293\nf 5439/5684 5450/2297 1374/2282\nf 5424/2281 1374/2282 5450/2297\nf 717/7066 2813/3682 5451/4527\nf 5457/2299 5451/4527 2813/3682\nf 1384/7144 5452/5685 5461/4529\nf 5462/2303 5461/4529 5452/5685\nf 1386/7145 5467/5686 5464/4531\nf 5470/2305 5464/4531 5467/5686\nf 5474/2310 2794/4533 5465/5687\nf 712/7063 5465/5687 2794/4533\nf 5149/5688 5481/2313 1307/7146\nf 5475/4534 1307/7146 5481/2313\nf 5476/5689 5486/2316 1390/7147\nf 5485/4536 1390/7147 5486/2316\nf 1377/2290 5432/5690 5487/4539\nf 5491/2318 5487/4539 5432/5690\nf 5494/2319 5139/4541 5488/5691\nf 1303/7148 5488/5691 5139/4541\nf 721/7067 2827/3686 5495/4542\nf 5500/2321 5495/4542 2827/3686\nf 5279/4544 1337/7131 5506/2326\nf 5496/5692 5506/2326 1337/7131\nf 731/7068 2865/3698 5507/4545\nf 5512/2329 5507/4545 2865/3698\nf 1393/2324 5508/5693 5501/4547\nf 5518/2333 5501/4547 5508/5693\nf 1397/2336 5514/5694 5519/4549\nf 5525/2339 5519/4549 5514/5694\nf 5520/5695 5532/2343 1401/2348\nf 5531/4551 1401/2348 5532/2343\nf 1394/2327 5502/5696 5533/4553\nf 5537/2345 5533/4553 5502/5696\nf 1343/7133 5534/5697 5292/4555\nf 5542/2349 5292/4555 5534/5697\nf 5538/5698 5548/2355 1403/2352\nf 5543/4557 1403/2352 5548/2355\nf 5544/5699 5554/2359 1353/7139\nf 5341/4559 1353/7139 5554/2359\nf 5527/5701 5560/2363 1400/2342\nf 5555/4561 1400/2342 5560/2363\nf 5556/5702 5566/2367 1405/2354\nf 5549/4563 1405/2354 5566/2367\nf 5562/5703 5573/2371 1409/2366\nf 5567/4565 1409/2366 5573/2371\nf 5568/5704 5580/2375 1413/2378\nf 5579/4567 1413/2378 5580/2375\nf 5550/5705 5585/2379 1406/2358\nf 5581/4569 1406/2358 5585/2379\nf 5582/5706 5590/2383 1357/7140\nf 5355/4571 1357/7140 5590/2383\nf 5586/5707 5596/2387 1415/2382\nf 5591/4573 1415/2382 5596/2387\nf 5592/5708 5602/2391 1370/2268\nf 5407/4575 1370/2268 5602/2391\nf 5575/5709 5608/2395 1412/2374\nf 5603/4577 1412/2374 5608/2395\nf 5604/5710 5614/2399 1417/2386\nf 5597/4579 1417/2386 5614/2399\nf 5610/5712 5621/2403 1421/2398\nf 5615/4581 1421/2398 5621/2403\nf 5616/5713 5628/2407 1425/2410\nf 5627/4583 1425/2410 5628/2407\nf 5598/5714 5633/2411 1418/2390\nf 5629/4585 1418/2390 5633/2411\nf 1373/2276 5630/5715 5420/4587\nf 5638/2413 5420/4587 5630/5715\nf 1427/2416 5634/5716 5639/4589\nf 5644/2417 5639/4589 5634/5716\nf 5650/2421 5441/4591 5640/5717\nf 1379/7143 5640/5717 5441/4591\nf 5623/5719 5656/2427 1424/2406\nf 5651/4592 1424/2406 5656/2427\nf 1429/2420 5652/5720 5645/4594\nf 5662/2429 5645/4594 5652/5720\nf 5663/4597 1433/2432 5669/2435\nf 5658/5721 5669/2435 1433/2432\nf 1436/2442 5664/5722 5673/4598\nf 5674/2437 5673/4598 5664/5722\nf 1430/2424 5646/5723 5675/4600\nf 5679/2439 5675/4600 5646/5723\nf 1384/7144 5676/5724 5453/4602\nf 5682/2443 5453/4602 5676/5724\nf 5683/4605 771/7070 5688/2446\nf 3023/3750 5688/2446 771/7070\nf 5684/5725 5694/2450 1386/7149\nf 5467/4607 1386/7149 5694/2450\nf 5695/4609 781/7072 5700/2454\nf 3061/3762 5700/2454 781/7072\nf 5689/4611 1439/2447 5706/2458\nf 5696/5726 5706/2458 1439/2447\nf 5702/5727 5713/2463 1443/2459\nf 5707/4612 1443/2459 5713/2463\nf 5708/5728 5720/2467 1447/2470\nf 5719/4614 1447/2470 5720/2467\nf 5721/4616 1440/2451 5725/2471\nf 5690/5729 5725/2471 1440/2451\nf 5477/4619 1390/7150 5730/2474\nf 5722/5730 5730/2474 1390/7150\nf 1449/2475 5726/5731 5731/4620\nf 5736/2480 5731/4620 5726/5731\nf 1308/2120 5732/5732 5157/4622\nf 5742/2481 5157/4622 5732/5732\nf 5715/5733 5748/2487 1446/2466\nf 5743/4624 1446/2466 5748/2487\nf 5754/2492 5737/4626 5744/5734\nf 1451/2477 5744/5734 5737/4626\nf 5761/2493 5755/4629 5750/5735\nf 1455/2489 5750/5735 5755/4629\nf 1459/2504 5756/5736 5767/4630\nf 5768/2497 5767/4630 5756/5736\nf 1452/2484 5738/5737 5769/4632\nf 5773/2501 5769/4632 5738/5737\nf 1311/2128 5770/5738 5170/4634\nf 5778/2505 5170/4634 5770/5738\nf 1461/2508 5774/5739 5779/4637\nf 5784/2510 5779/4637 5774/5739\nf 5105/4639 1294/2087 5790/2514\nf 5780/5740 5790/2514 1294/2087\nf 1458/2500 5763/5741 5791/4640\nf 5796/2517 5791/4640 5763/5741\nf 5785/4643 1463/2511 5802/2521\nf 5792/5742 5802/2521 1463/2511\nf 1467/2524 5798/5743 5803/4644\nf 5809/2525 5803/4644 5798/5743\nf 1471/2535 5804/5744 5815/4646\nf 5816/2529 5815/4646 5804/5744\nf 5817/4649 1464/2515 5821/2534\nf 5786/5745 5821/2534 1464/2515\nf 5118/4651 1297/2095 5826/2538\nf 5818/5746 5826/2538 1297/2095\nf 1473/2539 5822/5747 5827/4652\nf 5832/2541 5827/4652 5822/5747\nf 1330/2179 5828/5748 5249/4654\nf 5838/2545 5249/4654 5828/5748\nf 5844/2552 5839/4657 5811/5749\nf 1470/2532 5811/5749 5839/4657\nf 1475/2544 5840/5750 5833/4658\nf 5850/2553 5833/4658 5840/5750\nf 1479/2556 5846/5751 5851/4660\nf 5857/2557 5851/4660 5846/5751\nf 1482/2566 5852/5752 5861/4662\nf 5862/2561 5861/4662 5852/5752\nf 1476/2548 5834/5753 5863/4664\nf 5867/2563 5863/4664 5834/5753\nf 1333/2188 5864/5754 5262/4666\nf 5870/2567 5262/4666 5864/5754\nf 5871/4668 821/7073 5876/2571\nf 3219/3815 5876/2571 821/7073\nf 5701/4670 1442/2455 5882/2575\nf 5872/5755 5882/2575 1442/2455\nf 3257/3827 5888/2579 831/7074\nf 5883/4672 831/7074 5888/2579\nf 5884/5756 5894/2583 1485/2570\nf 5877/4674 1485/2570 5894/2583\nf 5895/4677 1489/2582 5901/2586\nf 5890/5757 5901/2586 1489/2582\nf 5907/4679 1493/2595 5908/2590\nf 5896/5758 5908/2590 1493/2595\nf 5909/4681 1486/2574 5913/2594\nf 5878/5759 5913/2594 1486/2574\nf 5714/4683 1445/2462 5918/2599\nf 5910/5760 5918/2599 1445/2462\nf 5914/5761 5925/2603 1495/2598\nf 5919/4684 1495/2598 5925/2603\nf 1499/7151 5920/5762 5931/4686\nf 5932/2605 5931/4686 5920/5762\nf 5933/4689 1492/2591 5938/2610\nf 5903/5763 5938/2610 1492/2591\nf 5934/5764 5944/2613 1497/2602\nf 5926/4690 1497/2602 5944/2613\nf 1502/2616 5940/5765 5945/4692\nf 5951/2617 5945/4692 5940/5765\nf 1506/2628 5946/5766 5957/4695\nf 5958/2624 5957/4695 5946/5766\nf 1498/2608 5927/5767 5959/4696\nf 5964/2625 5959/4696 5927/5767\nf 5960/5768 5970/2630 1509/7152\nf 5969/4699 1509/7152 5970/2630\nf 1511/2872 5975/5769 5972/4700\nf 5978/2636 5972/4700 5975/5769\nf 1466/2520 5973/5770 5797/4702\nf 5984/2637 5797/4702 5973/5770\nf 5992/2642 5986/4704 5989/5772\nf 1515/2861 5989/5772 5986/4704\nf 5998/2645 5979/4707 5987/5773\nf 1512/2633 5987/5773 5979/4707\nf 5999/4708 1517/2648 6005/2650\nf 5994/5774 6005/2650 1517/2648\nf 1521/2660 6000/5776 6011/4710\nf 6012/2653 6011/4710 6000/5776\nf 1513/2640 5980/5777 6013/4712\nf 6017/2657 6013/4712 5980/5777\nf 1469/2528 6014/5778 5810/4714\nf 6022/2661 5810/4714 6014/5778\nf 1523/2664 6018/5779 6023/4716\nf 6028/2665 6023/4716 6018/5779\nf 6034/2672 5845/4719 6024/5780\nf 1478/2549 6024/5780 5845/4719\nf 1520/2656 6007/5781 6035/4720\nf 6040/2673 6035/4720 6007/5781\nf 1525/2668 6036/5783 6029/4722\nf 6046/2677 6029/4722 6036/5783\nf 1529/2680 6042/5784 6047/4725\nf 6053/2681 6047/4725 6042/5784\nf 6058/2686 6057/4727 6048/5785\nf 1532/2687 6048/5785 6057/4727\nf 1526/2669 6030/5786 6059/4729\nf 6063/2690 6059/4729 6030/5786\nf 1481/2560 6060/5787 5858/4730\nf 6066/2691 5858/4730 6060/5787\nf 3419/3877 6072/2695 873/7075\nf 6067/4732 873/7075 6072/2695\nf 6068/5788 6078/2699 1488/2578\nf 5889/4734 1488/2578 6078/2699\nf 3457/3889 6084/2702 883/7076\nf 6079/4736 883/7076 6084/2702\nf 6080/5789 6090/2706 1535/2694\nf 6073/4739 1535/2694 6090/2706\nf 6091/4741 1539/2707 6097/2710\nf 6086/5790 6097/2710 1539/2707\nf 6103/4743 1543/2719 6104/2714\nf 6092/5791 6104/2714 1543/2719\nf 6105/4745 1536/2698 6109/2718\nf 6074/5792 6109/2718 1536/2698\nf 5902/4747 1491/2587 6114/2722\nf 6106/5793 6114/2722 1491/2587\nf 6115/4749 1545/2723 6120/2727\nf 6110/5794 6120/2727 1545/2723\nf 5939/4751 1501/2611 6126/2730\nf 6116/5795 6126/2730 1501/2611\nf 6099/5796 6132/2735 1542/2715\nf 6127/4752 1542/2715 6132/2735\nf 6128/5797 6138/2739 1547/2726\nf 6121/4754 1547/2726 6138/2739\nf 6134/5798 6145/2744 1551/2738\nf 6139/4757 1551/2738 6145/2744\nf 1555/2752 6140/5799 6151/4758\nf 6152/2745 6151/4758 6140/5799\nf 6153/4760 1548/2731 6157/2749\nf 6122/5800 6157/2749 1548/2731\nf 1504/2620 6154/5801 5952/4762\nf 6162/2753 5952/4762 6154/5801\nf 1557/2756 6158/5802 6163/4764\nf 6169/2757 6163/4764 6158/5802\nf 1561/7153 6164/5803 6175/4766\nf 6176/2761 6175/4766 6164/5803\nf 6182/2768 6177/4769 6147/5805\nf 1554/2748 6147/5805 6177/4769\nf 6188/2772 6170/4770 6178/5806\nf 1559/2760 6178/5806 6170/4770\nf 1564/2769 6184/5808 6189/4772\nf 6195/2773 6189/4772 6184/5808\nf 1567/2782 6190/5809 6199/4775\nf 6200/2778 6199/4775 6190/5809\nf 1560/2764 6171/5810 6201/4776\nf 6206/2779 6201/4776 6171/5810\nf 1569/7154 6202/5811 6209/4779\nf 6210/2784 6209/4779 6202/5811\nf 3575/3924 6216/2787 915/7081\nf 6211/4780 915/7081 6216/2787\nf 6212/5812 6222/2790 1538/2703\nf 6085/4783 1538/2703 6222/2790\nf 921/7082 3605/3935 6223/4784\nf 6227/2793 6223/4784 3605/3935\nf 6224/5813 6232/2796 1571/2786\nf 6217/4786 1571/2786 6232/2796\nf 1574/2799 6228/5814 6233/4788\nf 6238/2800 6233/4788 6228/5814\nf 1576/2806 6234/5815 6241/4790\nf 6242/2803 6241/4790 6234/5815\nf 6218/5816 6247/2807 1572/2791\nf 6243/4792 1572/2791 6247/2807\nf 6244/5817 6250/2809 1541/2711\nf 6098/4794 1541/2711 6250/2809\nf 3619/3940 6256/2813 925/7083\nf 6251/4796 925/7083 6256/2813\nf 1569/7154 6252/5818 6203/4798\nf 6262/2815 6203/4798 6252/5818\nf 3657/3951 6268/2821 935/7084\nf 6263/4799 935/7084 6268/2821\nf 6264/5819 6274/2825 1579/2812\nf 6257/4801 1579/2812 6274/2825\nf 6270/5820 6281/2829 1583/2824\nf 6275/4803 1583/2824 6281/2829\nf 6276/5821 6286/2832 1586/2835\nf 6285/4805 1586/2835 6286/2832\nf 6258/5822 6291/2836 1580/2818\nf 6287/4806 1580/2818 6291/2836\nf 1561/7153 6288/5823 6165/4808\nf 6294/2838 6165/4808 6288/5823\nf 1499/7151 5931/4686 6295/4809\nf 6300/2841 6295/4809 5931/4686\nf 1454/2486 6296/5824 5749/4811\nf 6306/2845 5749/4811 6296/5824\nf 6312/2852 6307/4814 5969/4699\nf 1509/7152 5969/4699 6307/4814\nf 1589/2844 6308/5825 6301/4816\nf 6318/2856 6301/4816 6308/5825\nf 6325/2860 6319/4818 6314/5826\nf 1593/2853 6314/5826 6319/4818\nf 6330/2864 6329/4820 6320/5827\nf 1596/2865 6320/5827 6329/4820\nf 1590/2848 6302/5828 6331/4822\nf 6335/2868 6331/4822 6302/5828\nf 1457/2496 6332/5829 5762/4823\nf 6338/2869 5762/4823 6332/5829\nf 1519/2651 6003/2652 6339/4825\nf 6344/2873 6339/4825 6003/2652\nf 1528/2676 6340/5830 6041/4827\nf 6350/2877 6041/4827 6340/5830\nf 1516/2643 5990/2644 6351/4829\nf 6356/2884 6351/4829 5990/2644\nf 1599/2876 6352/5831 6345/4831\nf 6362/2885 6345/4831 6352/5831\nf 1603/2888 6358/5832 6363/4833\nf 6369/2889 6363/4833 6358/5832\nf 1606/2898 6364/5834 6373/4836\nf 6374/2894 6373/4836 6364/5834\nf 1600/2880 6346/5835 6375/4837\nf 6379/2895 6375/4837 6346/5835\nf 6382/2900 6054/4840 6376/5836\nf 1531/2684 6376/5836 6054/4840\nf 3759/3981 6388/2901 959/7085\nf 6383/4841 959/7085 6388/2901\nf 6384/5837 6394/2907 1582/2820\nf 6269/4843 1582/2820 6394/2907\nf 965/7086 3789/3992 6395/4845\nf 6399/2909 6395/4845 3789/3992\nf 1609/2904 6396/5838 6389/4847\nf 6404/2912 6389/4847 6396/5838\nf 1612/2915 6400/5839 6405/4849\nf 6410/2916 6405/4849 6400/5839\nf 6406/5840 6414/2920 1614/2922\nf 6413/4851 1614/2922 6414/2920\nf 6390/5841 6419/2923 1610/2906\nf 6415/4853 1610/2906 6419/2923\nf 6416/5842 6422/2926 1585/2828\nf 6282/4855 1585/2828 6422/2926\nf 6428/4883 6431/2929 1617/7155\nf 6424/4856 1617/7155 6431/2929\nf 6425/5843 6438/2932 1620/7156\nf 6437/4858 1620/7156 6438/2932\nf 1622/3167 6444/5844 6440/4860\nf 6447/2935 6440/4860 6444/5844\nf 1624/7157 6441/5845 6451/4862\nf 6452/2939 6451/4862 6441/5845\nf 6458/4898 6460/2941 1626/7158\nf 6454/4864 1626/7158 6460/2941\nf 6455/5846 6464/2944 1627/3157\nf 6463/3158 1627/3157 6464/2944\nf 5195/5848 6471/2947 1317/7159\nf 6465/4867 1317/7159 6471/2947\nf 6466/5849 6478/2951 1631/3192\nf 6477/3191 1631/3192 6478/2951\nf 5229/5851 6483/2955 1325/7160\nf 6479/4870 1325/7160 6483/2955\nf 6480/5852 6488/2959 1629/2946\nf 6472/4872 1629/2946 6488/2959\nf 6484/5854 6494/2962 1633/2958\nf 6489/4874 1633/2958 6494/2962\nf 6490/5855 6500/2967 1636/2970\nf 6499/4876 1636/2970 6500/2967\nf 6473/5856 6506/2971 1630/2950\nf 6501/4878 1630/2950 6506/2971\nf 6502/5857 6512/2975 1639/3197\nf 6511/3198 1639/3197 6512/2975\nf 6507/5858 6518/2979 1638/2974\nf 6513/4881 1638/2974 6518/2979\nf 1617/7155 6514/5859 6428/4883\nf 6524/2984 6428/4883 6514/5859\nf 6495/5860 6529/2986 1635/2966\nf 6525/4884 1635/2966 6529/2986\nf 6526/5862 6534/2991 1641/2978\nf 6519/4886 1641/2978 6534/2991\nf 6530/5864 6540/2995 1644/2990\nf 6535/4888 1644/2990 6540/2995\nf 6536/5865 6544/2999 1646/3002\nf 6543/4890 1646/3002 6544/2999\nf 6520/5866 6549/3003 1642/2981\nf 6545/4892 1642/2981 6549/3003\nf 6552/3005 6442/4895 6546/5867\nf 1624/7157 6546/5867 6442/4895\nf 6560/3012 6554/4897 6557/5868\nf 1649/3227 6557/5868 6554/4897\nf 6566/3014 6458/4898 6555/5869\nf 1626/7158 6555/5869 6458/4898\nf 1653/3222 6571/5870 6568/4899\nf 6574/3020 6568/4899 6571/5870\nf 1650/3009 6569/5872 6561/4901\nf 6580/3021 6561/4901 6569/5872\nf 6581/4904 1655/3024 6587/3027\nf 6576/5874 6587/3027 1655/3024\nf 6593/4905 1659/3035 6594/3031\nf 6582/5875 6594/3031 1659/3035\nf 6595/4908 1651/3015 6599/3034\nf 6562/5876 6599/3034 1651/3015\nf 6426/4909 1620/7156 6604/3038\nf 6596/5877 6604/3038 1620/7156\nf 6585/3025 6611/3042 1657/3026\nf 6605/4911 1657/3026 6611/3042\nf 6606/5878 6618/3047 1665/3239\nf 6617/4912 1665/3239 6618/3047\nf 1654/3017 6572/3019 6619/4915\nf 6624/3049 6619/4915 6572/3019\nf 6630/3056 6612/4917 6620/5879\nf 1663/3043 6620/5879 6612/4917\nf 1668/3053 6626/5880 6631/4918\nf 6637/3057 6631/4918 6626/5880\nf 6632/5882 6644/3063 1672/3068\nf 6643/4920 1672/3068 6644/3063\nf 6613/5883 6650/3065 1664/3046\nf 6645/4922 1664/3046 6650/3065\nf 6646/5884 6656/3069 1675/3248\nf 6655/4924 1675/3248 6656/3069\nf 5384/5886 6663/3075 1365/7161\nf 6657/4926 1365/7161 6663/3075\nf 6658/5887 6670/3079 1679/3114\nf 6669/4928 1679/3114 6670/3079\nf 5373/5889 6675/3083 1362/7162\nf 6671/4930 1362/7162 6675/3083\nf 6672/5890 6680/3087 1677/3074\nf 6664/4932 1677/3074 6680/3087\nf 6676/5892 6686/3091 1681/3086\nf 6681/4934 1681/3086 6686/3091\nf 6682/5893 6692/3095 1684/3098\nf 6691/4936 1684/3098 6692/3095\nf 6665/5894 6698/3099 1678/3078\nf 6693/4938 1678/3078 6698/3099\nf 6703/4940 1687/3121 6704/3103\nf 6694/5895 6704/3103 1687/3121\nf 1350/7163 5327/5896 6705/4943\nf 6710/3105 6705/4943 5327/5896\nf 6706/5898 6716/3111 1193/7164\nf 4693/4944 1193/7164 6716/3111\nf 1345/7165 5303/5899 6717/4946\nf 6721/3115 6717/4946 5303/5899\nf 6718/5901 6726/3119 1689/3108\nf 6711/4948 1689/3108 6726/3119\nf 6722/5902 6732/3124 1692/3118\nf 6727/4951 1692/3118 6732/3124\nf 1695/3129 6728/5903 6737/4952\nf 6738/3125 6737/4952 6728/5903\nf 6743/3132 6739/4955 6712/5904\nf 1690/3110 6712/5904 6739/4955\nf 1183/7166 6740/5905 4653/4956\nf 6748/3133 4653/4956 6740/5905\nf 1697/3136 6744/5906 6749/4958\nf 6754/3137 6749/4958 6744/5906\nf 1179/7167 6750/5907 4641/4960\nf 6760/3141 4641/4960 6750/5907\nf 1694/3128 6733/5908 6761/4962\nf 6766/3145 6761/4962 6733/5908\nf 1699/3140 6762/5909 6755/4964\nf 6772/3149 6755/4964 6762/5909\nf 1703/3152 6768/5910 6773/4967\nf 6779/3156 6773/4967 6768/5910\nf 1706/3164 6774/5911 6783/4968\nf 6784/3160 6783/4968 6774/5911\nf 1700/3144 6756/5912 6785/4969\nf 6789/3161 6785/4969 6756/5912\nf 4601/4971 1169/7168 6792/3166\nf 6786/5913 6792/3166 1169/7168\nf 6699/5914 6799/3171 1686/3102\nf 6793/4972 1686/3102 6799/3171\nf 6794/5915 6806/3175 1711/7169\nf 6805/4974 1711/7169 6806/3175\nf 6687/5917 6811/3179 1683/3094\nf 6807/4976 1683/3094 6811/3179\nf 6808/5918 6816/3183 1709/3170\nf 6800/4978 1709/3170 6816/3183\nf 6822/3185 6817/4980 6812/5919\nf 1713/3182 6812/5919 6817/4980\nf 1715/3193 6818/5921 6825/4982\nf 6826/3189 6825/4982 6818/5921\nf 6801/5922 6832/3196 1710/3174\nf 6827/4983 1710/3174 6832/3196\nf 6835/4985 1717/7170 6836/3200\nf 6828/5923 6836/3200 1717/7170\nf 6841/5018 6844/3203 1719/7171\nf 6838/4986 1719/7171 6844/3203\nf 6839/5924 6850/3208 1702/3148\nf 6767/4989 1702/3148 6850/3208\nf 1723/7172 6855/5925 6852/4990\nf 6857/3209 6852/4990 6855/5925\nf 1720/3202 6853/5927 6845/4992\nf 6862/3212 6845/4992 6853/5927\nf 1724/3215 6858/5928 6863/4994\nf 6868/3216 6863/4994 6858/5928\nf 1726/3226 6864/5929 6871/4996\nf 6872/3219 6871/4996 6864/5929\nf 1721/3205 6846/5930 6873/4998\nf 6877/3223 6873/4998 6846/5930\nf 6880/3230 6780/5001 6874/5931\nf 1705/3153 6874/5931 6780/5001\nf 6600/5932 6886/3233 1661/3039\nf 6881/5002 1661/3039 6886/3233\nf 6882/5933 6892/3237 1717/7170\nf 6829/5004 1717/7170 6892/3237\nf 6589/5934 6897/3242 1658/3030\nf 6893/5006 1658/3030 6897/3242\nf 6894/5936 6902/3245 1729/3232\nf 6887/5007 1729/3232 6902/3245\nf 6898/5937 6908/3249 1732/3244\nf 6903/5009 1732/3244 6908/3249\nf 6904/5938 6914/3251 1735/3256\nf 6913/5011 1735/3256 6914/3251\nf 6888/5939 6919/3257 1730/3236\nf 6915/5013 1730/3236 6919/3257\nf 6916/5940 6924/3259 1711/7169\nf 6795/5015 1711/7169 6924/3259\nf 6930/3266 6925/5017 6920/5941\nf 1737/3262 6920/5941 6925/5017\nf 6936/3270 6841/5018 6926/5942\nf 1719/7171 6926/5942 6841/5018\nf 6942/3273 6937/5021 6651/5943\nf 1674/3072 6651/5943 6937/5021\nf 6938/5944 6946/3276 1734/3254\nf 6912/3253 1734/3254 6946/3276\nf 6851/5945 6951/3277 1723/7172\nf 6947/5022 1723/7172 6951/3277\nf 6954/3279 6642/3064 6948/5946\nf 1671/3062 6948/5946 6642/3064\nf 6959/5037 6962/3283 1745/7173\nf 6956/5024 1745/7173 6962/3283\nf 6957/5947 6968/3287 1432/2426\nf 5657/5026 1432/2426 6968/3287\nf 6969/5028 1107/7108 6975/3291\nf 4367/4181 6975/3291 1107/7108\nf 6979/5030 1750/7174 6980/3293\nf 6970/5948 6980/3293 1750/7174\nf 1435/2434 5667/2433 6981/5032\nf 6985/3295 6981/5032 5667/2433\nf 1103/7106 6982/5949 4349/5034\nf 6988/3297 4349/5034 6982/5949\nf 6994/3299 6989/5036 5619/2401\nf 1423/2402 5619/2401 6989/5036\nf 7000/3306 6959/5037 6990/5950\nf 1745/7173 6990/5950 6959/5037\nf 7006/3310 7001/5038 5606/2393\nf 1420/2394 5606/2393 7001/5038\nf 1753/3302 7002/5951 6995/5040\nf 7012/3311 6995/5040 7002/5951\nf 1757/3314 7008/5952 7013/5042\nf 7019/3315 7013/5042 7008/5952\nf 1760/3324 7014/5953 7023/5044\nf 7024/3319 7023/5044 7014/5953\nf 1754/3303 6996/5954 7025/5046\nf 7029/3321 7025/5046 6996/5954\nf 6971/5049 1750/7174 7032/3325\nf 7026/5955 7032/3325 1750/7174\nf 7037/5069 7040/3329 1763/7175\nf 7034/5050 1763/7175 7040/3329\nf 7035/5956 7046/3333 1408/2362\nf 5561/5052 1408/2362 7046/3333\nf 7051/5957 7053/3335 1767/7176\nf 7048/5054 1767/7176 7053/3335\nf 7049/5958 7058/3339 1764/3328\nf 7041/5056 1764/3328 7058/3339\nf 7054/5959 7064/3341 1768/3338\nf 7059/5058 1768/3338 7064/3341\nf 7060/5960 7068/3344 1770/3346\nf 7067/5060 1770/3346 7068/3344\nf 7042/5961 7073/3347 1765/3332\nf 7069/5062 1765/3332 7073/3347\nf 7070/5962 7076/3350 1411/2370\nf 5574/5064 1411/2370 7076/3350\nf 1399/2338 5523/2337 7077/5066\nf 7082/3353 7077/5066 5523/2337\nf 7088/3355 7037/5069 7078/5963\nf 1763/7175 7078/5963 7037/5069\nf 1139/7112 4497/4217 7089/5070\nf 7094/3362 7089/5070 4497/4217\nf 1396/2332 7090/5964 5513/5072\nf 7098/3363 5513/5072 7090/5964\nf 7047/5965 7103/3365 1767/7176\nf 7099/5074 1767/7176 7103/3365\nf 7100/5966 7106/3368 1136/7111\nf 4481/5076 1136/7111 7106/3368\nf 10/7177 1779/7178 1782/7179\nf 1783/5967 1782/7179 1779/7178\nf 1786/4 1791/5968 451/3370\nf 1790/5 451/3370 1791/5968\nf 1795/7180 1798/5969 113/5077\nf 1785/1 113/5077 1798/5969\nf 1801/12 1806/5970 455/3374\nf 1805/13 455/3374 1806/5970\nf 1807/16 1812/5971 117/3376\nf 1811/25 117/3376 1812/5971\nf 1814/20 1819/5972 459/3378\nf 1818/21 459/3378 1819/5972\nf 1792/8 1826/5973 116/3372\nf 1825/7181 116/3372 1826/5973\nf 1827/28 1831/5974 462/3382\nf 1830/29 462/3382 1831/5974\nf 18/3384 1832/32 1837/7182\nf 1838/5975 1837/7182 1832/32\nf 1840/36 1845/5976 466/3386\nf 1844/37 466/3386 1845/5976\nf 1820/24 1851/5977 115/3380\nf 1839/33 115/3380 1851/5977\nf 1853/44 1858/5978 469/3390\nf 1857/45 469/3390 1858/5978\nf 1859/48 1864/5979 121/3392\nf 1863/57 121/3392 1864/5979\nf 1866/52 1871/5980 473/3394\nf 1870/53 473/3394 1871/5980\nf 1846/40 1878/5981 120/3388\nf 1877/7183 120/3388 1878/5981\nf 1879/60 1883/5982 476/3398\nf 1882/61 476/3398 1883/5982\nf 2/5080 1887/7184 1800/9\nf 1890/5983 1800/9 1887/7184\nf 480/3402 1893/67 1897/70\nf 1898/5984 1897/70 1893/67\nf 122/5096 1901/7185 1892/66\nf 1904/5985 1892/66 1901/7185\nf 484/3406 1907/75 1911/78\nf 1912/5986 1911/78 1907/75\nf 125/3408 1913/79 1917/90\nf 1918/5987 1917/90 1913/79\nf 1920/84 1925/5988 488/3410\nf 1924/85 488/3410 1925/5988\nf 1899/71 1931/5989 114/3404\nf 1813/17 114/3404 1931/5989\nf 1932/91 1936/5990 490/3414\nf 1935/93 490/3414 1936/5990\nf 13/5099 1939/7186 1906/74\nf 1942/5991 1906/74 1939/7186\nf 1945/100 1950/5992 494/3418\nf 1949/101 494/3418 1950/5992\nf 126/5106 1953/7187 1944/97\nf 1956/5993 1944/97 1953/7187\nf 498/3422 1959/107 1963/109\nf 1964/5994 1963/109 1959/107\nf 1965/112 1970/5995 129/3424\nf 1969/121 129/3424 1970/5995\nf 1972/115 1977/5996 502/3426\nf 1976/117 502/3426 1977/5996\nf 1951/104 1983/5997 123/3420\nf 1919/81 123/3420 1983/5997\nf 1984/124 1988/5998 504/3430\nf 1987/125 504/3430 1988/5998\nf 1989/128 1994/5999 21/3432\nf 1993/169 21/3432 1994/5999\nf 1996/132 2001/6000 508/3434\nf 2000/133 508/3434 2001/6000\nf 1978/120 2007/6001 128/3428\nf 1995/129 128/3428 2007/6001\nf 2009/140 2014/6002 511/3438\nf 2013/141 511/3438 2014/6002\nf 2015/144 2020/6003 133/3440\nf 2019/153 133/3440 2020/6003\nf 515/3442 2022/147 2026/152\nf 2027/6004 2026/152 2022/147\nf 2002/136 2034/6006 132/3436\nf 2033/177 132/3436 2034/6006\nf 2035/156 2039/6007 518/3446\nf 2038/157 518/3446 2039/6007\nf 1937/96 2045/6009 16/3416\nf 1852/41 16/3416 2045/6009\nf 2047/164 2052/6010 521/3450\nf 2051/165 521/3450 2052/6010\nf 1926/88 2057/6011 124/3412\nf 2046/161 124/3412 2057/6011\nf 2058/172 2062/6012 523/3454\nf 2061/173 523/3454 2062/6012\nf 2063/176 2068/6013 135/3456\nf 2067/185 135/3456 2068/6013\nf 2069/180 2073/6014 526/3458\nf 2072/181 526/3458 2073/6014\nf 2053/168 2079/6016 118/3452\nf 1865/49 118/3452 2079/6016\nf 2080/188 2084/6017 528/3462\nf 2083/189 528/3462 2084/6017\nf 4/5109 2087/7188 1958/106\nf 2090/6019 1958/106 2087/7188\nf 532/3466 2093/195 2097/198\nf 2098/6020 2097/198 2093/195\nf 136/5132 2101/7189 2092/194\nf 2104/6021 2092/194 2101/7189\nf 536/3470 2107/203 2111/206\nf 2112/6022 2111/206 2107/203\nf 139/3472 2113/207 2117/218\nf 2118/6024 2117/218 2113/207\nf 2120/211 2125/6025 540/3474\nf 2124/213 540/3474 2125/6025\nf 127/3468 2099/199 1971/114\nf 2131/6027 1971/114 2099/199\nf 542/3478 2132/219 2135/222\nf 2136/6028 2135/222 2132/219\nf 2137/223 2141/6029 19/3480\nf 2008/137 19/3480 2141/6029\nf 545/3482 2143/227 2147/230\nf 2148/6030 2147/230 2143/227\nf 2126/216 2153/6031 138/3476\nf 2142/226 138/3476 2153/6031\nf 548/3486 2155/235 2159/238\nf 2160/6032 2159/238 2155/235\nf 142/3488 2161/239 2165/250\nf 2166/6034 2165/250 2161/239\nf 552/3490 2168/243 2172/246\nf 2173/6035 2172/246 2168/243\nf 130/3484 2149/231 2021/146\nf 2179/6037 2021/146 2149/231\nf 554/3494 2180/251 2183/254\nf 2184/6038 2183/254 2180/251\nf 2189/6039 2025/6005 2185/255\nf 6/3496 2185/255 2025/6005\nf 557/3498 2191/259 2195/263\nf 2196/6040 2195/263 2191/259\nf 141/3492 2174/247 2190/258\nf 2201/6041 2190/258 2174/247\nf 2208/6043 2207/271 2203/267\nf 560/3500 2203/267 2207/271\nf 2214/6044 2213/282 2209/270\nf 145/3501 2209/270 2213/282\nf 564/3503 2216/274 2220/278\nf 2221/6045 2220/278 2216/274\nf 131/3444 2197/262 2037/6008\nf 2227/6047 2037/6008 2197/262\nf 566/3508 2228/283 2231/286\nf 2232/6048 2231/286 2228/283\nf 20/3448 2233/287 2071/6015\nf 2237/6049 2071/6015 2233/287\nf 2243/296 569/3510 2244/6050\nf 2239/289 2244/6050 569/3510\nf 144/3506 2222/279 2238/292\nf 2249/6051 2238/292 2222/279\nf 2255/304 572/3511 2256/6053\nf 2251/297 2256/6053 572/3511\nf 2257/301 2262/6054 147/3513\nf 2261/312 147/3513 2262/6054\nf 2264/305 2268/6055 575/3516\nf 2267/309 575/3516 2268/6055\nf 134/3460 2245/293 2082/6018\nf 2273/6057 2082/6018 2245/293\nf 2274/315 2277/6058 576/3519\nf 2276/316 576/3519 2277/6058\nf 2279/7190 2283/6059 3/7191\nf 2282/7192 3/7191 2283/6059\nf 2286/322 2291/6060 581/3521\nf 2290/324 581/3521 2291/6060\nf 2295/7193 2298/6061 148/5164\nf 2285/319 148/5164 2298/6061\nf 2301/330 2306/6062 585/3525\nf 2305/331 585/3525 2306/6062\nf 152/3527 2307/334 2311/344\nf 2312/6063 2311/344 2307/334\nf 589/3529 2314/337 2318/340\nf 2319/6064 2318/340 2314/337\nf 151/3523 2292/325 2325/7194\nf 2326/6065 2325/7194 2292/325\nf 592/3533 2327/345 2330/348\nf 2331/6066 2330/348 2327/345\nf 2335/7195 2338/6067 14/5167\nf 2300/327 14/5167 2338/6067\nf 2341/353 2346/6068 596/3537\nf 2345/355 596/3537 2346/6068\nf 153/5174 2349/7196 2340/352\nf 2352/6069 2340/352 2349/7196\nf 600/3541 2355/361 2359/364\nf 2360/6070 2359/364 2355/361\nf 156/3543 2361/365 2365/376\nf 2366/6071 2365/376 2361/365\nf 604/3545 2368/369 2372/371\nf 2373/6072 2372/371 2368/369\nf 2347/358 2379/6073 149/3539\nf 2313/336 149/3539 2379/6073\nf 606/3549 2380/377 2383/380\nf 2384/6074 2383/380 2380/377\nf 29/3551 2385/381 2389/424\nf 2390/6075 2389/424 2385/381\nf 2392/386 2397/6076 610/3553\nf 2396/388 610/3553 2397/6076\nf 2374/374 2403/6077 155/3547\nf 2391/383 155/3547 2403/6077\nf 2405/394 2410/6078 613/3557\nf 2409/395 613/3557 2410/6078\nf 2411/398 2416/6079 160/3559\nf 2415/407 160/3559 2416/6079\nf 2418/402 2423/6080 617/3561\nf 2422/403 617/3561 2423/6080\nf 159/3555 2398/389 2429/432\nf 2430/6081 2429/432 2398/389\nf 2431/410 2435/6082 620/3565\nf 2434/411 620/3565 2435/6082\nf 25/3535 2332/349 2441/7197\nf 2442/6083 2441/7197 2332/349\nf 624/3569 2444/417 2448/420\nf 2449/6084 2448/420 2444/417\nf 150/3531 2320/341 2443/416\nf 2455/6085 2443/416 2320/341\nf 626/3573 2456/425 2459/428\nf 2460/6086 2459/428 2456/425\nf 163/3575 2461/429 2465/440\nf 2466/6087 2465/440 2461/429\nf 629/3577 2467/433 2470/436\nf 2471/6088 2470/436 2467/433\nf 162/3571 2450/421 2477/7198\nf 2478/6089 2477/7198 2450/421\nf 632/3581 2479/441 2482/444\nf 2483/6090 2482/444 2479/441\nf 1/5178 2487/7199 2354/360\nf 2490/6091 2354/360 2487/7199\nf 636/3585 2493/449 2497/452\nf 2498/6092 2497/452 2493/449\nf 164/5201 2501/7200 2492/448\nf 2504/6093 2492/448 2501/7200\nf 640/3589 2507/457 2511/460\nf 2512/6094 2511/460 2507/457\nf 167/3591 2513/461 2517/472\nf 2518/6096 2517/472 2513/461\nf 644/3593 2520/465 2524/468\nf 2525/6097 2524/468 2520/465\nf 154/3587 2499/453 2367/368\nf 2531/6099 2367/368 2499/453\nf 646/3597 2532/473 2535/476\nf 2536/6100 2535/476 2532/473\nf 2537/477 2541/6101 27/3599\nf 2404/391 27/3599 2541/6101\nf 2543/482 2548/6102 649/3601\nf 2547/483 649/3601 2548/6102\nf 2526/469 2553/6103 166/3595\nf 2542/479 166/3595 2553/6103\nf 2555/490 2560/6104 652/3605\nf 2559/491 652/3605 2560/6104\nf 2561/494 2566/6106 170/3607\nf 2565/503 170/3607 2566/6106\nf 656/3609 2568/497 2572/500\nf 2573/6107 2572/500 2568/497\nf 2549/486 2579/6109 157/3603\nf 2417/399 157/3603 2579/6109\nf 658/3613 2580/506 2583/507\nf 2584/6110 2583/507 2580/506\nf 2591/6111 2590/7201 2587/7202\nf 34/7203 2587/7202 2590/7201\nf 663/3617 2594/512 2598/516\nf 2599/6112 2598/516 2594/512\nf 15/7204 2105/7205 2605/7206\nf 2606/6116 2605/7206 2105/7205\nf 666/3621 2608/521 2611/524\nf 2612/6118 2611/524 2608/521\nf 2615/7207 2618/6119 4/7208\nf 2087/7209 4/7208 2618/6119\nf 2621/528 2625/6121 669/3625\nf 2624/529 669/3625 2625/6121\nf 12/5228 2627/5227 2630/7210\nf 2631/6122 2630/7210 2627/5227\nf 673/3629 2634/533 2637/536\nf 2638/6123 2637/536 2634/533\nf 2641/5254 2645/6125 35/5255\nf 2644/7211 35/5255 2645/6125\nf 2647/538 2650/6126 676/3633\nf 2649/539 676/3633 2650/6126\nf 35/5255 2644/7211 2655/7212\nf 2656/6127 2655/7212 2644/7211\nf 680/3637 2658/543 2662/546\nf 2663/6128 2662/546 2658/543\nf 173/3635 2632/5222 2657/542\nf 2669/6129 2657/542 2632/5222\nf 683/3641 2671/551 2675/554\nf 2676/6130 2675/554 2671/551\nf 179/3643 2677/555 2681/566\nf 2682/6132 2681/566 2677/555\nf 687/3645 2684/559 2688/562\nf 2689/6133 2688/562 2684/559\nf 178/3639 2664/547 2695/7213\nf 2696/6137 2695/7213 2664/547\nf 690/3649 2697/567 2700/570\nf 2701/6138 2700/570 2697/567\nf 3/6136 2282/7214 2687/6135\nf 2707/6140 2687/6135 2282/7214\nf 2713/580 693/3652 2714/6141\nf 2709/573 2714/6141 693/3652\nf 2708/576 151/5236 2719/6142\nf 2325/7215 2719/6142 151/5236\nf 696/3654 2721/583 2725/588\nf 2726/6143 2725/588 2721/583\nf 2731/600 182/3656 2732/6144\nf 2727/585 2732/6144 182/3656\nf 700/3659 2734/591 2738/596\nf 2739/6145 2738/596 2734/591\nf 2715/577 2745/6147 177/3647\nf 2699/6139 177/3647 2745/6147\nf 2749/601 702/3662 2750/6148\nf 2746/597 2750/6148 702/3662\nf 2755/7216 36/5270 2756/6149\nf 2736/6146 2756/6149 36/5270\nf 2762/612 706/3664 2763/6151\nf 2758/605 2763/6151 706/3664\nf 2720/582 25/5239 2769/6154\nf 2441/7217 2769/6154 25/5239\nf 2775/6155 2774/617 2771/615\nf 708/3669 2771/615 2774/617\nf 2485/7218 8/7219 2780/6157\nf 2777/7220 2780/6157 8/7219\nf 2786/624 711/3672 2787/6159\nf 2783/619 2787/6159 711/3672\nf 26/7221 2789/7222 2792/7223\nf 2793/6160 2792/7223 2789/7222\nf 715/3677 2796/628 2799/630\nf 2800/6161 2799/630 2796/628\nf 37/4603 2803/5277 2806/7224\nf 2807/6163 2806/7224 2803/5277\nf 718/3681 2809/632 2811/634\nf 2812/6164 2811/634 2809/632\nf 2590/7201 2818/6165 34/7203\nf 2817/7225 34/7203 2818/6165\nf 722/3685 2820/638 2824/640\nf 2825/6166 2824/640 2820/638\nf 2646/5224 2831/6167 174/3618\nf 2819/635 174/3618 2831/6167\nf 725/3689 2833/645 2837/648\nf 2838/6168 2837/648 2833/645\nf 190/3691 2839/649 2843/660\nf 2844/6169 2843/660 2839/649\nf 2846/654 2851/6170 729/3692\nf 2850/658 729/3692 2851/6170\nf 189/3687 2826/641 2857/7226\nf 2858/6172 2857/7226 2826/641\nf 732/3697 2859/661 2862/664\nf 2863/6173 2862/664 2859/661\nf 2655/7212 2869/6174 35/5255\nf 2832/644 35/5255 2869/6174\nf 2871/670 2876/6175 735/3701\nf 2875/671 735/3701 2876/6175\nf 2870/667 178/3639 2881/6176\nf 2695/7213 2881/6176 178/3639\nf 2883/678 2888/6177 738/3705\nf 2887/679 738/3705 2888/6177\nf 2889/682 2894/6178 193/3707\nf 2893/691 193/3707 2894/6178\nf 2900/690 742/3709 2901/6179\nf 2896/683 2901/6179 742/3709\nf 2877/674 2907/6180 187/3703\nf 2845/651 187/3703 2907/6180\nf 2908/694 2912/6181 744/3713\nf 2911/695 744/3713 2912/6181\nf 2751/604 2917/6182 33/3651\nf 2882/675 33/3651 2917/6182\nf 2919/702 2924/6183 747/3717\nf 2923/703 747/3717 2924/6183\nf 2918/699 181/3660 2929/6184\nf 2740/593 2929/6184 181/3660\nf 2935/711 750/3720 2936/6185\nf 2931/709 2936/6185 750/3720\nf 2937/714 2942/6186 196/3723\nf 2941/723 196/3723 2942/6186\nf 2944/715 2949/6188 754/3725\nf 2948/722 754/3725 2949/6188\nf 2925/706 2955/6189 191/3719\nf 2895/686 191/3719 2955/6189\nf 2959/730 756/3729 2960/6191\nf 2956/726 2960/6191 756/3729\nf 36/5270 2755/7216 2930/708\nf 2965/6192 2930/708 2755/7216\nf 759/3733 2967/733 2971/736\nf 2972/6193 2971/736 2967/733\nf 185/3666 2808/5251 2966/732\nf 2977/6194 2966/732 2808/5251\nf 762/3737 2979/741 2983/744\nf 2984/6195 2983/744 2979/741\nf 199/3739 2985/745 2989/756\nf 2990/6197 2989/756 2985/745\nf 2992/749 2997/6198 766/3741\nf 2996/751 766/3741 2997/6198\nf 194/3735 2973/737 2943/718\nf 3003/6202 2943/718 2973/737\nf 768/3745 3004/757 3007/762\nf 3008/6203 3007/762 3004/757\nf 2792/7227 3014/6204 26/7228\nf 3013/7229 26/7228 3014/6204\nf 3016/766 3021/6205 772/3749\nf 3020/767 772/3749 3021/6205\nf 2781/7230 3027/6206 183/5283\nf 3015/763 183/5283 3027/6206\nf 3033/778 775/3753 3034/6207\nf 3029/774 3034/6207 775/3753\nf 3039/787 203/3755 3040/6208\nf 3035/775 3040/6208 203/3755\nf 3046/786 779/3756 3047/6209\nf 3042/779 3047/6209 779/3756\nf 3022/770 3054/6210 202/3751\nf 3053/7231 202/3751 3054/6210\nf 3055/790 3059/6211 782/3761\nf 3058/791 782/3761 3059/6211\nf 8/3583 2484/445 3028/771\nf 3065/6212 3028/771 2484/445\nf 785/3765 3067/797 3071/801\nf 3072/6213 3071/801 3067/797\nf 161/3579 2472/437 3066/796\nf 3077/6214 3066/796 2472/437\nf 788/3769 3079/805 3083/808\nf 3084/6215 3083/808 3079/805\nf 206/3771 3085/809 3089/821\nf 3090/6216 3089/821 3085/809\nf 792/3773 3092/813 3096/816\nf 3097/6217 3096/816 3092/813\nf 3041/782 200/3766 3103/6218\nf 3073/800 3103/6218 200/3766\nf 3108/6219 3107/826 3104/820\nf 794/3776 3104/820 3107/826\nf 28/3567 2436/414 3078/804\nf 3113/6220 3078/804 2436/414\nf 3115/830 3120/6221 797/3781\nf 3119/831 797/3781 3120/6221\nf 2424/406 3125/6222 158/3563\nf 3114/827 158/3563 3125/6222\nf 3127/838 3132/6223 800/3785\nf 3131/839 800/3785 3132/6223\nf 3133/842 3138/6224 209/3787\nf 3137/852 209/3787 3138/6224\nf 3145/6225 3144/848 3140/845\nf 804/3788 3140/845 3144/848\nf 204/3783 3121/834 3091/812\nf 3151/6226 3091/812 3121/834\nf 806/3793 3152/853 3155/856\nf 3156/6227 3155/856 3152/853\nf 2585/510 3161/6228 7/3615\nf 3126/835 7/3615 3161/6228\nf 809/3797 3163/861 3167/864\nf 3168/6229 3167/864 3163/861\nf 169/3611 2574/501 3162/860\nf 3173/6230 3162/860 2574/501\nf 812/3801 3175/869 3179/872\nf 3180/6231 3179/872 3175/869\nf 212/3803 3181/873 3185/884\nf 3186/6233 3185/884 3181/873\nf 816/3805 3188/877 3192/880\nf 3193/6234 3192/880 3188/877\nf 207/3799 3169/865 3139/844\nf 3199/6236 3139/844 3169/865\nf 3204/6237 3203/889 3200/885\nf 818/3809 3200/885 3203/889\nf 3060/794 3210/6238 45/3763\nf 3209/7232 45/3763 3210/6238\nf 3216/898 822/3812 3217/6239\nf 3212/891 3217/6239 822/3812\nf 3211/894 201/3758 3223/6240\nf 3048/783 3223/6240 201/3758\nf 3225/899 3230/6241 825/3817\nf 3229/903 825/3817 3230/6241\nf 3231/906 3236/6242 216/3819\nf 3235/918 216/3819 3236/6242\nf 3238/910 3243/6243 829/3821\nf 3242/911 829/3821 3243/6243\nf 3249/7233 215/3814 3250/6244\nf 3218/895 3250/6244 215/3814\nf 3254/922 832/3824 3255/6245\nf 3251/915 3255/6245 832/3824\nf 44/3778 3109/823 3261/6326\nf 3262/6246 3261/6326 3109/823\nf 836/3829 3264/925 3268/928\nf 3269/6247 3268/928 3264/925\nf 205/3774 3098/817 3263/924\nf 3275/6248 3263/924 3098/817\nf 3282/6249 3281/937 3277/933\nf 839/3832 3277/933 3281/937\nf 3288/6250 3287/949 3283/936\nf 220/3833 3283/936 3287/949\nf 3295/6252 3294/945 3290/940\nf 843/3835 3290/940 3294/945\nf 219/3830 3270/929 3301/6329\nf 3302/6253 3301/6329 3270/929\nf 3307/6255 3306/953 3303/948\nf 846/3839 3303/948 3306/953\nf 46/3795 3157/857 3276/932\nf 3313/6256 3276/932 3157/857\nf 849/3843 3315/957 3319/961\nf 3320/6257 3319/961 3315/957\nf 208/3791 3146/849 3314/956\nf 3325/6258 3314/956 3146/849\nf 852/3847 3327/965 3331/968\nf 3332/6259 3331/968 3327/965\nf 3338/6260 3337/980 3333/969\nf 223/3849 3333/969 3337/980\nf 3345/6261 3344/975 3340/973\nf 856/3850 3340/973 3344/975\nf 3351/6263 3289/941 3321/960\nf 217/3844 3321/960 3289/941\nf 3352/981 3356/6264 858/3855\nf 3355/983 858/3855 3356/6264\nf 43/3810 3205/888 3326/964\nf 3361/6266 3326/964 3205/888\nf 861/3859 3363/988 3367/992\nf 3368/6267 3367/992 3363/988\nf 3373/6268 3362/989 3194/881\nf 211/3807 3194/881 3362/989\nf 864/3863 3375/997 3379/1001\nf 3380/6270 3379/1001 3375/997\nf 226/3865 3381/1000 3385/1012\nf 3386/6271 3385/1012 3381/1000\nf 3393/6273 3392/1008 3388/1004\nf 868/3866 3388/1004 3392/1008\nf 221/3861 3369/993 3339/972\nf 3399/6274 3339/972 3369/993\nf 870/3871 3400/1013 3403/1016\nf 3404/6275 3403/1016 3400/1013\nf 3409/7234 50/3826 3410/6276\nf 3256/919 3410/6276 50/3826\nf 3416/1026 874/3874 3417/6277\nf 3412/1019 3417/6277 874/3874\nf 3411/1022 214/3823 3423/6278\nf 3244/914 3423/6278 214/3823\nf 3425/1030 3430/6279 877/3879\nf 3429/1031 877/3879 3430/6279\nf 3431/1034 3436/6280 230/3881\nf 3435/1043 230/3881 3436/6280\nf 3438/1038 3443/6281 881/3883\nf 3442/1039 881/3883 3443/6281\nf 3449/7235 229/3876 3450/6282\nf 3418/1023 3450/6282 229/3876\nf 3451/1046 3455/6283 884/3887\nf 3454/1047 884/3887 3455/6283\nf 3459/5395 3462/6284 49/5351\nf 3424/1027 49/5351 3462/6284\nf 3465/1054 3470/6285 888/3891\nf 3469/1058 888/3891 3470/6285\nf 231/5358 3473/5393 3464/1051\nf 3476/6286 3464/1051 3473/5393\nf 892/3895 3479/1061 3483/1064\nf 3484/6287 3483/1064 3479/1061\nf 3485/1065 3490/6288 234/3897\nf 3489/1078 234/3897 3490/6288\nf 3497/6290 3496/1073 3492/1069\nf 896/3899 3492/1069 3496/1073\nf 3437/1035 227/3893 3503/6291\nf 3471/1055 3503/6291 227/3893\nf 3507/1082 898/3902 3508/6293\nf 3504/1075 3508/6293 898/3902\nf 51/5362 3511/5387 3478/1060\nf 3514/6294 3478/1060 3511/5387\nf 902/3907 3517/1085 3521/1088\nf 3522/6295 3521/1088 3517/1085\nf 235/5369 3525/5385 3516/1084\nf 3528/6296 3516/1084 3525/5385\nf 906/3911 3531/1092 3535/1096\nf 3536/6298 3535/1096 3531/1092\nf 238/3913 3537/1097 3541/1109\nf 3542/6299 3541/1109 3537/1097\nf 910/3915 3544/1100 3548/1104\nf 3549/6301 3548/1104 3544/1100\nf 232/3909 3523/1089 3491/1068\nf 3555/6302 3491/1068 3523/1089\nf 3560/6303 3559/1113 3556/1108\nf 912/3918 3556/1108 3559/1113\nf 3565/7236 55/3888 3566/6304\nf 3456/1050 3566/6304 55/3888\nf 3568/1118 3573/6305 916/3923\nf 3572/1119 916/3923 3573/6305\nf 3444/1042 3579/6306 228/3885\nf 3567/1115 228/3885 3579/6306\nf 3583/1128 918/3926 3584/6307\nf 3580/1124 3584/6307 918/3926\nf 240/3928 3585/1125 3589/1135\nf 3590/6308 3589/1135 3585/1125\nf 920/3931 3591/1130 3593/1132\nf 3594/6309 3593/1132 3591/1130\nf 3574/1122 3600/6310 239/3925\nf 3599/7237 239/3925 3600/6310\nf 922/3934 3601/1136 3603/1139\nf 3604/6311 3603/1139 3601/1136\nf 3610/6312 3609/7238 3529/5371\nf 32/4778 3529/5371 3609/7238\nf 3612/1143 3617/6313 926/3938\nf 3616/1145 926/3938 3617/6313\nf 235/5369 3515/5368 3611/1142\nf 3623/6314 3611/1142 3515/5368\nf 3629/1156 929/3942 3630/6315\nf 3625/1151 3630/6315 929/3942\nf 3635/1168 244/3943 3636/6316\nf 3631/1153 3636/6316 244/3943\nf 3642/1164 933/3945 3643/6317\nf 3638/1157 3643/6317 933/3945\nf 3649/7239 243/3939 3650/6318\nf 3618/1148 3650/6318 243/3939\nf 3654/1169 936/3949 3655/6319\nf 3651/1165 3655/6319 936/3949\nf 51/5362 3477/5361 3624/1150\nf 3661/6320 3624/1150 3477/5361\nf 939/3954 3663/1175 3667/1179\nf 3668/6321 3667/1179 3663/1175\nf 3463/5359 3673/6322 231/5358\nf 3662/1174 231/5358 3673/6322\nf 3674/1181 3678/6323 941/3957\nf 3677/1184 941/3957 3678/6323\nf 3684/6324 3683/1197 3679/1187\nf 245/3959 3679/1187 3683/1197\nf 3688/6325 3687/1193 3685/1190\nf 943/3962 3685/1190 3687/1193\nf 3637/1160 241/3955 3693/6327\nf 3669/1178 3693/6327 241/3955\nf 3694/1196 3697/6328 944/3965\nf 3696/1199 944/3965 3697/6328\nf 48/3873 3405/1017 3343/6262\nf 3701/6330 3343/6262 3405/1017\nf 947/3968 3703/1205 3707/1208\nf 3708/6331 3707/1208 3703/1205\nf 225/3869 3394/1009 3702/1204\nf 3713/6332 3702/1204 3394/1009\nf 3720/6334 3719/1216 3715/1212\nf 950/3969 3715/1212 3719/1216\nf 248/3972 3721/1217 3725/1228\nf 3726/6335 3725/1228 3721/1217\nf 954/3974 3728/1220 3732/1224\nf 3733/6336 3732/1224 3728/1220\nf 222/3853 3709/1209 3354/6265\nf 3739/6338 3354/6265 3709/1209\nf 956/3978 3740/1229 3743/1233\nf 3744/6339 3743/1233 3740/1229\nf 3656/1172 3750/6340 57/3952\nf 3749/7240 57/3952 3750/6340\nf 3756/1240 960/3979 3757/6341\nf 3752/1235 3757/6341 960/3979\nf 3751/1238 242/3947 3763/6342\nf 3644/1161 3763/6342 242/3947\nf 3767/1248 962/3983 3768/6343\nf 3764/1243 3768/6343 962/3983\nf 250/3985 3769/1245 3773/1255\nf 3774/6344 3773/1255 3769/1245\nf 964/3987 3775/1249 3777/1252\nf 3778/6345 3777/1252 3775/1249\nf 249/3982 3758/1241 3783/7241\nf 3784/6346 3783/7241 3758/1241\nf 966/3991 3785/1256 3787/1259\nf 3788/6347 3787/1259 3785/1256\nf 3791/5440 3795/6348 61/5424\nf 3794/7242 61/5424 3795/6348\nf 3798/1264 3803/6351 971/3995\nf 3802/1265 971/3995 3803/6351\nf 3810/7243 62/5493 3811/6353\nf 3807/6423 3811/6353 62/5493\nf 3817/1274 975/3998 3818/6354\nf 3814/1269 3818/6354 975/3998\nf 2/5431 3821/5432 3824/1479\nf 3825/6356 3824/1479 3821/5432\nf 978/4003 3827/1276 3829/1278\nf 3830/6357 3829/1278 3827/1276\nf 3833/6434 3836/6358 1/6436\nf 2487/7244 1/6436 3836/6358\nf 3839/1282 3844/6359 982/4007\nf 3843/1283 982/4007 3844/6359\nf 3847/6431 3850/6360 255/5422\nf 3838/1279 255/5422 3850/6360\nf 3853/1290 3858/6361 986/4011\nf 3857/1291 986/4011 3858/6361\nf 3859/1294 3864/6362 258/4013\nf 3863/1303 258/4013 3864/6362\nf 3866/1298 3871/6363 990/4015\nf 3870/1299 990/4015 3871/6363\nf 3845/1286 3877/6365 164/4009\nf 2501/7245 164/4009 3877/6365\nf 3878/1306 3882/6366 992/4019\nf 3881/1307 992/4019 3882/6366\nf 61/5424 3794/7242 3852/1287\nf 3887/6368 3852/1287 3794/7242\nf 3893/1318 995/4023 3894/6369\nf 3889/1312 3894/6369 995/4023\nf 3899/6370 3888/1313 3826/5420\nf 253/3997 3826/5420 3888/1313\nf 3904/6371 3903/1326 3900/1321\nf 997/4026 3900/1321 3903/1326\nf 3909/1338 260/4028 3910/6373\nf 3905/1323 3910/6373 260/4028\nf 3914/1334 1000/4030 3915/6375\nf 3911/1327 3915/6375 1000/4030\nf 3895/1315 3921/6378 256/4025\nf 3865/1295 256/4025 3921/6378\nf 3925/1339 1002/4034 3926/6380\nf 3922/1335 3926/6380 1002/4034\nf 3932/6381 3931/1545 3810/7243\nf 62/5493 3810/7243 3931/1545\nf 3939/6382 3938/1349 3934/1346\nf 1006/4038 3934/1346 3938/1349\nf 3796/5417 3945/6383 251/4001\nf 3933/1343 251/4001 3945/6383\nf 3947/1354 3952/6384 1009/4043\nf 3951/1355 1009/4043 3952/6384\nf 3953/1358 3958/6385 264/4045\nf 3957/1368 264/4045 3958/6385\nf 3960/1362 3965/6386 1013/4047\nf 3964/1366 1013/4047 3965/6386\nf 3972/6388 3971/1552 3940/1348\nf 263/4040 3940/1348 3971/1552\nf 1016/4051 3973/1369 3976/1373\nf 3977/6390 3976/1373 3973/1369\nf 3981/1596 3984/6391 63/4160\nf 3963/6387 63/4160 3984/6391\nf 3987/1375 3992/6392 1020/4055\nf 3991/1379 1020/4055 3992/6392\nf 3986/1378 265/4156 3998/6393\nf 3995/1588 3998/6393 265/4156\nf 1024/4057 4001/1385 4005/1388\nf 4006/6394 4005/1388 4001/1385\nf 268/4058 4007/1389 4011/1401\nf 4012/6395 4011/1401 4007/1389\nf 4018/1396 1028/4060 4019/6396\nf 4014/1391 4019/6396 1028/4060\nf 4025/6398 3975/6389 3993/1382\nf 262/4048 3993/1382 3975/6389\nf 4030/6399 4029/1404 4026/1400\nf 1030/4064 4026/1400 4029/1404\nf 12/4097 4033/1467 2670/7246\nf 4036/6400 2670/7246 4033/1467\nf 4039/1410 4044/6401 1034/4067\nf 4043/1411 1034/4067 4044/6401\nf 4047/1460 4050/6402 269/4092\nf 4038/1407 269/4092 4050/6402\nf 4053/1418 4058/6403 1038/4071\nf 4057/1419 1038/4071 4058/6403\nf 4059/1422 4064/6404 271/4073\nf 4063/1431 271/4073 4064/6404\nf 4066/1426 4070/6405 1041/4075\nf 4069/1427 1041/4075 4070/6405\nf 4045/1414 4075/6407 176/4069\nf 2683/7247 176/4069 4075/6407\nf 4076/1434 4079/6408 1042/4079\nf 4078/1435 1042/4079 4079/6408\nf 4/7248 1957/7249 2615/7250\nf 4083/6410 2615/7250 1957/7249\nf 4089/1444 1045/4082 4090/6411\nf 4085/1440 4090/6411 1045/4082\nf 4095/6412 4084/1441 1943/7251\nf 126/5463 1943/7251 4084/1441\nf 1048/4087 4097/1449 4101/1453\nf 4102/6413 4101/1453 4097/1449\nf 4108/6414 4107/1466 4103/1452\nf 273/4088 4103/1452 4107/1466\nf 1051/4091 4110/1457 4113/1461\nf 4114/6415 4113/1461 4110/1457\nf 172/4085 4091/1445 2639/7252\nf 4119/6416 2639/7252 4091/1445\nf 4122/1470 1052/4094 4123/6417\nf 4120/1463 4123/6417 1052/4094\nf 13/5467 1905/7253 4096/1448\nf 4127/6418 4096/1448 1905/7253\nf 1055/4099 4129/1473 4133/1476\nf 4134/6419 4133/1476 4129/1473\nf 122/5474 1891/7254 4128/1472\nf 4139/6420 4128/1472 1891/7254\nf 4140/1482 4144/6421 1057/4103\nf 4143/1484 1057/4103 4144/6421\nf 275/4105 4145/1485 4149/1496\nf 4150/6422 4149/1496 4145/1485\nf 4155/6424 4154/1493 4151/1488\nf 1060/4106 4151/1488 4154/1493\nf 272/4101 4135/1477 4109/1456\nf 4161/6425 4109/1456 4135/1477\nf 1062/4111 4162/1497 4165/1500\nf 4166/6426 4165/1500 4162/1497\nf 67/4113 4169/5502 4052/1415\nf 4172/6427 4052/1415 4169/5502\nf 4175/1506 4180/6428 1066/4114\nf 4179/1507 1066/4114 4180/6428\nf 4183/5500 4186/6429 276/5482\nf 4174/1503 276/5482 4186/6429\nf 4188/1514 4192/6430 1069/4119\nf 4191/1515 1069/4119 4192/6430\nf 4193/1518 4198/6432 277/4121\nf 4197/1527 277/4121 4198/6432\nf 1071/4123 4199/1521 4201/1524\nf 4202/6433 4201/1524 4199/1521\nf 4181/1510 4207/6437 270/4117\nf 4065/1423 270/4117 4207/6437\nf 4208/1530 4211/6439 1072/4127\nf 4210/1531 1072/4127 4211/6439\nf 4167/1501 4216/6440 67/4113\nf 4215/7255 67/4113 4216/6440\nf 4222/1539 1076/4130 4223/6441\nf 4218/1536 4223/6441 1076/4130\nf 4229/6442 4217/1537 4156/1492\nf 274/4108 4156/1492 4217/1537\nf 1078/4134 4230/1544 4233/1548\nf 4234/6443 4233/1548 4230/1544\nf 279/4137 4235/1549 4239/1559\nf 4240/6444 4239/1559 4235/1549\nf 1080/4139 4241/1553 4243/1556\nf 4244/6445 4243/1556 4241/1553\nf 4224/1542 4250/6446 278/4133\nf 4249/4167 278/4133 4250/6446\nf 1082/4142 4251/1560 4253/1563\nf 4254/6447 4253/1563 4251/1560\nf 61/5424 4187/5485 3946/1351\nf 4259/6448 3946/1351 4187/5485\nf 4261/1568 4266/6449 1085/4145\nf 4265/1569 1085/4145 4266/6449\nf 4173/5483 4271/6450 276/5482\nf 4260/1565 276/5482 4271/6450\nf 1088/4149 4273/1575 4277/1580\nf 4278/6451 4277/1580 4273/1575\nf 4279/1577 4284/6452 281/4152\nf 4283/1589 281/4152 4284/6452\nf 4286/1583 4290/6454 1091/4154\nf 4289/1585 1091/4154 4290/6454\nf 4267/1572 4295/6455 261/4148\nf 3959/1359 261/4148 4295/6455\nf 4296/1592 4299/6456 1092/4158\nf 4298/1593 1092/4158 4299/6456\nf 4303/6457 4272/1574 4215/7255\nf 67/4113 4215/7255 4272/1574\nf 4310/6461 4309/1603 4305/1598\nf 1095/4161 4305/1598 4309/1603\nf 4315/6462 4255/4143 4016/6397\nf 65/4144 4016/6397 4255/4143\nf 4317/1608 4321/6464 1097/4165\nf 4320/1609 1097/4165 4321/6464\nf 4325/6465 4000/1384 4288/6453\nf 66/5449 4288/6453 4000/1384\nf 4326/1612 4329/6466 1098/4169\nf 4328/1614 1098/4169 4329/6466\nf 4333/7256 41/3746 4334/6467\nf 3009/759 4334/6467 41/3746\nf 4340/1622 1102/4172 4341/6469\nf 4336/1618 4341/6469 1102/4172\nf 42/6201 4345/7257 2995/6200\nf 4348/6472 2995/6200 4345/7257\nf 1105/4177 4351/1625 4354/1628\nf 4355/6473 4354/1628 4351/1625\nf 4357/5517 4361/6475 68/5048\nf 4360/7258 68/5048 4361/6475\nf 4363/1630 4366/6476 1108/4179\nf 4365/1632 1108/4179 4366/6476\nf 4371/6477 2947/6187 4333/7256\nf 41/3746 4333/7256 2947/6187\nf 1111/4182 4373/1634 4377/1638\nf 4378/6478 4377/1638 4373/1634\nf 4383/6479 4372/1635 4362/5514\nf 284/4174 4362/5514 4372/1635\nf 1114/4185 4385/1644 4389/1646\nf 4390/6480 4389/1646 4385/1644\nf 288/4187 4391/1647 4395/1658\nf 4396/6482 4395/1658 4391/1647\nf 1118/4189 4398/1651 4402/1654\nf 4403/6483 4402/1654 4398/1651\nf 4409/6487 2958/6190 4379/1639\nf 195/3726 4379/1639 2958/6190\nf 1120/4193 4410/1659 4413/1663\nf 4414/6488 4413/1663 4410/1659\nf 2913/698 4420/6490 40/3715\nf 4419/7259 40/3715 4420/6490\nf 4426/1672 1124/4194 4427/6491\nf 4422/1665 4427/6491 1124/4194\nf 4421/1668 192/3710 4433/6492\nf 2902/687 4433/6492 192/3710\nf 4437/1678 1126/4198 4438/6493\nf 4434/1673 4438/6493 1126/4198\nf 4443/1688 291/4200 4444/6494\nf 4439/1675 4444/6494 291/4200\nf 4448/1682 1129/4202 4449/6496\nf 4445/1679 4449/6496 1129/4202\nf 4455/4214 290/4196 4456/6497\nf 4428/1669 4456/6497 290/4196\nf 4460/1692 1132/4206 4461/6499\nf 4457/1685 4461/6499 1132/4206\nf 40/3715 4419/7259 2849/6171\nf 4467/6500 2849/6171 4419/7259\nf 4473/1697 1135/4211 4474/6503\nf 4469/1695 4474/6503 1135/4211\nf 4463/4209 70/4208 4480/6505\nf 4477/7260 4480/6505 70/4208\nf 4486/1706 1138/4212 4487/6506\nf 4483/1701 4487/6506 1138/4212\nf 39/3699 2864/665 4491/7261\nf 4492/6508 4491/7261 2864/665\nf 1140/4216 4493/1708 4495/1709\nf 4496/6509 4495/1709 4493/1708\nf 10/7177 1782/7179 4501/7262\nf 4502/6510 4501/7262 1782/7179\nf 4508/1715 1144/4220 4509/6511\nf 4504/1711 4509/6511 1144/4220\nf 4503/1714 116/3372 4515/6512\nf 1825/7181 4515/6512 116/3372\nf 4521/1726 1147/4223 4522/6513\nf 4517/1719 4522/6513 1147/4223\nf 4527/1735 297/4225 4528/6514\nf 4523/1723 4528/6514 297/4225\nf 4534/1734 1151/4227 4535/6515\nf 4530/1730 4535/6515 1151/4227\nf 4510/1718 4542/6516 296/4222\nf 4541/7263 296/4222 4542/6516\nf 4543/1738 4547/6517 1154/4232\nf 4546/1739 1154/4232 4547/6517\nf 18/3384 1837/7182 4516/1722\nf 4553/6518 4516/1722 1837/7182\nf 4555/1746 4560/6519 1157/4236\nf 4559/1747 1157/4236 4560/6519\nf 1877/7183 4565/6520 120/3388\nf 4554/1743 120/3388 4565/6520\nf 4567/1754 4572/6521 1160/4240\nf 4571/1755 1160/4240 4572/6521\nf 4573/1758 4578/6522 300/4242\nf 4577/1767 300/4242 4578/6522\nf 4580/1762 4585/6523 1164/4244\nf 4584/1763 1164/4244 4585/6523\nf 4561/1750 4591/6524 294/4238\nf 4529/1727 294/4238 4591/6524\nf 4592/1770 4596/6525 1166/4248\nf 4595/1771 1166/4248 4596/6525\nf 72/4234 4548/1742 4601/7264\nf 4602/6526 4601/7264 4548/1742\nf 1170/4252 4604/1777 4608/1780\nf 4609/6527 4608/1780 4604/1777\nf 4603/1776 295/4229 4615/6528\nf 4536/1731 4615/6528 295/4229\nf 4621/1788 1173/4255 4622/6529\nf 4617/1783 4622/6529 1173/4255\nf 304/4258 4623/1789 4627/1800\nf 4628/6530 4627/1800 4623/1789\nf 4634/1798 1177/4259 4635/6531\nf 4630/1791 4635/6531 1177/4259\nf 303/4254 4610/1781 4641/7265\nf 4642/6532 4641/7265 4610/1781\nf 1180/4264 4643/1801 4646/1804\nf 4647/6533 4646/1804 4643/1801\nf 80/4266 4648/1805 4653/7266\nf 4654/6534 4653/7266 4648/1805\nf 4660/1814 1184/4267 4661/6535\nf 4656/1807 4661/6535 1184/4267\nf 4655/1810 302/4261 4667/6536\nf 4636/1795 4667/6536 302/4261\nf 4673/1822 1187/4271 4674/6537\nf 4669/1815 4674/6537 1187/4271\nf 4679/1834 308/4273 4680/6538\nf 4675/1819 4680/6538 308/4273\nf 4686/1828 1191/4275 4687/6539\nf 4682/1823 4687/6539 1191/4275\nf 307/4270 4662/1811 4693/7267\nf 4694/6540 4693/7267 4662/1811\nf 1194/4280 4695/1831 4698/1836\nf 4699/6541 4698/1836 4695/1831\nf 4668/1818 85/4313 4706/6542\nf 4703/1899 4706/6542 85/4313\nf 4713/1846 1198/4283 4714/6543\nf 4709/1839 4714/6543 1198/4283\nf 4708/1842 309/4309 4720/6544\nf 4717/1891 4720/6544 309/4309\nf 4727/1854 1202/4287 4728/6545\nf 4723/1847 4728/6545 1202/4287\nf 4733/1866 312/4289 4734/6547\nf 4729/1851 4734/6547 312/4289\nf 1206/4291 4736/1858 4740/1860\nf 4741/6548 4740/1860 4736/1858\nf 4681/1826 305/4285 4747/6550\nf 4715/1843 4747/6550 305/4285\nf 4751/1870 1208/4295 4752/6551\nf 4748/1863 4752/6551 1208/4295\nf 4616/1786 82/4250 4757/6552\nf 4597/1774 4757/6552 82/4250\nf 4763/1878 1211/4299 4764/6553\nf 4759/1874 4764/6553 1211/4299\nf 4586/1766 4769/6554 299/4246\nf 4758/1871 299/4246 4769/6554\nf 4775/1886 1214/4303 4776/6555\nf 4771/1879 4776/6555 1214/4303\nf 4781/1898 314/4305 4782/6557\nf 4777/1883 4782/6557 314/4305\nf 4787/1894 1217/4307 4788/6558\nf 4784/1887 4788/6558 1217/4307\nf 4629/1794 301/4301 4793/6560\nf 4765/1875 4793/6560 301/4301\nf 4796/1902 1218/4311 4797/6561\nf 4794/1895 4797/6561 1218/4311\nf 74/4282 4700/1837 4801/7268\nf 4802/6562 4801/7268 4700/1837\nf 1222/4316 4804/1905 4808/1908\nf 4809/6563 4808/1908 4804/1905\nf 306/4278 4688/1829 4803/1904\nf 4815/6564 4803/1904 4688/1829\nf 1225/4320 4817/1913 4821/1916\nf 4822/6565 4821/1916 4817/1913\nf 317/4322 4823/1917 4827/1926\nf 4828/6566 4827/1926 4823/1917\nf 4833/1924 1228/4323 4834/6567\nf 4830/1919 4834/6567 1228/4323\nf 316/4318 4810/1909 4839/7269\nf 4840/6568 4839/7269 4810/1909\nf 1230/4328 4841/1927 4843/1930\nf 4844/6569 4843/1930 4841/1927\nf 4816/1912 83/4297 4849/6570\nf 4753/1867 4849/6570 83/4297\nf 1233/4332 4851/1933 4855/1936\nf 4856/6571 4855/1936 4851/1933\nf 311/4294 4742/1861 4850/1932\nf 4861/6572 4850/1932 4742/1861\nf 1236/4336 4863/1941 4867/1944\nf 4868/6573 4867/1944 4863/1941\nf 319/4338 4869/1945 4873/1954\nf 4874/6574 4873/1954 4869/1945\nf 1239/4340 4876/1949 4879/1952\nf 4880/6575 4879/1952 4876/1949\nf 4829/1922 315/4334 4885/6576\nf 4857/1937 4885/6576 315/4334\nf 1240/4344 4886/1955 4888/1958\nf 4889/6577 4888/1958 4886/1955\nf 4893/6578 4862/1940 4738/6549\nf 76/5595 4738/6549 4862/1940\nf 1243/4347 4895/1960 4899/1964\nf 4900/6579 4899/1964 4895/1960\nf 310/5570 4725/6546 4894/1961\nf 4905/6580 4894/1961 4725/6546\nf 1246/4352 4907/1969 4911/1972\nf 4912/6581 4911/1972 4907/1969\nf 4918/6582 4917/1983 4913/1973\nf 321/4353 4913/1973 4917/1983\nf 1249/4356 4920/1977 4923/1979\nf 4924/6583 4923/1979 4920/1977\nf 318/4350 4901/1965 4875/1948\nf 4929/6584 4875/1948 4901/1965\nf 4933/6585 4932/1986 4930/1982\nf 1250/4360 4930/1982 4932/1986\nf 84/5567 4786/6559 4906/1968\nf 4937/6586 4906/1968 4786/6559\nf 4939/1990 4944/6587 1253/4364\nf 4943/1991 1253/4364 4944/6587\nf 313/5580 4773/6556 4938/1987\nf 4949/6588 4938/1987 4773/6556\nf 4950/1997 4954/6589 1255/4367\nf 4953/2001 1255/4367 4954/6589\nf 4959/2007 322/4369 4960/6590\nf 4955/1998 4960/6590 322/4369\nf 4963/2005 1257/4372 4964/6591\nf 4961/2004 4964/6591 1257/4372\nf 320/4366 4945/1994 4919/1976\nf 4969/6592 4919/1976 4945/1994\nf 4970/2010 4973/6593 1258/4376\nf 4972/2011 1258/4376 4973/6593\nf 4978/7270 73/7271 4979/6594\nf 4975/7272 4979/6594 73/7271\nf 4986/2017 1263/4379 4987/6595\nf 4982/2015 4987/6595 1263/4379\nf 323/5614 4991/7273 4981/2014\nf 4994/6596 4981/2014 4991/7273\nf 1267/4384 4997/2023 5001/2026\nf 5002/6597 5001/2026 4997/2023\nf 327/4386 5003/2027 5007/2037\nf 5008/6598 5007/2037 5003/2027\nf 1271/4388 5010/2031 5014/2034\nf 5015/6599 5014/2034 5010/2031\nf 4988/2020 5022/6600 326/4382\nf 5021/7274 326/4382 5022/6600\nf 5023/2040 5027/6601 1274/4392\nf 5026/2041 1274/4392 5027/6601\nf 5028/2044 5034/6602 81/4394\nf 5033/7275 81/4394 5034/6602\nf 5040/2050 1278/4396 5041/6603\nf 5036/2048 5041/6603 1278/4396\nf 5035/2045 325/4389 5047/6604\nf 5016/2035 5047/6604 325/4389\nf 1281/4400 5049/2055 5053/2058\nf 5054/6605 5053/2058 5049/2055\nf 331/4402 5055/2059 5059/2070\nf 5060/6606 5059/2070 5055/2059\nf 1285/4404 5062/2064 5066/2066\nf 5067/6607 5066/2066 5062/2064\nf 330/4397 5042/2051 5073/7276\nf 5074/6608 5073/7276 5042/2051\nf 1288/4408 5075/2071 5078/2074\nf 5079/6609 5078/2074 5075/2071\nf 89/4442 5083/2139 5048/2054\nf 5086/6610 5048/2054 5083/2139\nf 5089/2079 5094/6611 1292/4412\nf 5093/2081 1292/4412 5094/6611\nf 332/4438 5097/2131 5088/2078\nf 5100/6612 5088/2078 5097/2131\nf 5103/2085 5108/6613 1296/4415\nf 5107/2089 1296/4415 5108/6613\nf 5109/2092 5114/6614 335/4418\nf 5113/2101 335/4418 5114/6614\nf 5120/2100 1300/4420 5121/6615\nf 5116/2093 5121/6615 1300/4420\nf 5095/2084 5127/6616 328/4414\nf 5061/2061 328/4414 5127/6616\nf 5128/2104 5132/6617 1302/4424\nf 5131/2105 1302/4424 5132/6617\nf 86/5617 5135/7277 4996/2022\nf 5138/6618 4996/2022 5135/7277\nf 1306/4428 5141/2111 5145/2114\nf 5146/6619 5145/2114 5141/2111\nf 336/5640 5149/7278 5140/2110\nf 5152/6620 5140/2110 5149/7278\nf 1310/4432 5155/2119 5159/2122\nf 5160/6621 5159/2122 5155/2119\nf 338/4434 5161/2123 5165/2134\nf 5166/6622 5165/2134 5161/2123\nf 1313/4436 5168/2127 5171/2130\nf 5172/6623 5171/2130 5168/2127\nf 324/4430 5147/2115 5009/2030\nf 5177/6624 5009/2030 5147/2115\nf 1314/4440 5178/2135 5180/2138\nf 5181/6625 5180/2138 5178/2135\nf 71/4410 5080/2075 5185/7279\nf 5186/6626 5185/7279 5080/2075\nf 1318/4444 5188/2143 5192/2146\nf 5193/6627 5192/2146 5188/2143\nf 329/4406 5068/2067 5187/2142\nf 5199/6628 5187/2142 5068/2067\nf 1321/4448 5201/2151 5205/2154\nf 5206/6629 5205/2154 5201/2151\nf 341/4450 5207/2155 5211/2164\nf 5212/6630 5211/2164 5207/2155\nf 1324/4452 5214/2159 5217/2162\nf 5218/6631 5217/2162 5214/2159\nf 340/4446 5194/2147 5223/7280\nf 5224/6632 5223/7280 5194/2147\nf 1326/4456 5225/2165 5227/2168\nf 5228/6633 5227/2168 5225/2165\nf 5200/2150 87/4426 5233/6634\nf 5133/2108 5233/6634 87/4426\nf 5239/2176 1329/4459 5240/6635\nf 5235/2169 5240/6635 1329/4459\nf 5234/2172 334/4422 5245/6636\nf 5122/2097 5245/6636 334/4422\nf 1332/4463 5247/2177 5251/2184\nf 5252/6637 5251/2184 5247/2177\nf 5257/2194 343/4465 5258/6638\nf 5253/2181 5258/6638 343/4465\nf 1335/4468 5260/2187 5263/2190\nf 5264/6639 5263/2190 5260/2187\nf 5213/2158 339/4461 5269/6640\nf 5241/2173 5269/6640 339/4461\nf 5272/2196 1336/4471 5273/6641\nf 5270/2191 5273/6641 1336/4471\nf 5278/6642 2587/7202 5275/7281\nf 34/7203 5275/7281 2587/7202\nf 1340/4476 5281/2199 5285/2203\nf 5286/6643 5285/2203 5281/2199\nf 5289/7282 5293/6647 91/4556\nf 5292/4555 91/4556 5293/6647\nf 5296/2208 5300/6649 1344/4479\nf 5299/2209 1344/4479 5300/6649\nf 79/4508 5303/7283 5306/4507\nf 5307/6650 5306/4507 5303/7283\nf 1348/4483 5310/2213 5313/2216\nf 5314/6651 5313/2216 5310/2213\nf 4801/7284 5320/6653 74/7285\nf 5319/7286 74/7285 5320/6653\nf 5322/2220 5326/6655 1351/4487\nf 5325/2221 1351/4487 5326/6655\nf 15/7204 2605/7206 4845/7287\nf 5331/6656 4845/7287 2605/7206\nf 1352/4491 5332/2224 5334/2226\nf 5335/6657 5334/2226 5332/2224\nf 91/4556 5337/7288 5289/7282\nf 5340/6658 5289/7282 5337/7288\nf 1356/4495 5343/2229 5347/2232\nf 5348/6659 5347/2232 5343/2229\nf 348/4560 5351/7289 5342/2228\nf 5354/6660 5342/2228 5351/7289\nf 1360/4498 5357/2237 5361/2240\nf 5362/6661 5361/2240 5357/2237\nf 351/4500 5363/2241 5367/2252\nf 5368/6663 5367/2252 5363/2241\nf 1364/4502 5370/2245 5374/2248\nf 5375/6664 5374/2248 5370/2245\nf 345/4485 5349/2233 5315/4484\nf 5381/6668 5315/4484 5349/2233\nf 1366/4506 5382/2253 5385/2256\nf 5386/6669 5385/2256 5382/2253\nf 73/6667 5372/6665 4975/7290\nf 5391/6671 4975/7290 5372/6665\nf 5393/2262 5398/6672 1369/4510\nf 5397/2263 1369/4510 5398/6672\nf 5359/6662 5403/6673 349/5674\nf 5392/2259 349/5674 5403/6673\nf 5405/2270 5410/6674 1372/4514\nf 5409/2271 1372/4514 5410/6674\nf 5411/2274 5416/6675 354/4516\nf 5415/2283 354/4516 5416/6675\nf 1376/4518 5418/2278 5422/2280\nf 5423/6676 5422/2280 5418/2278\nf 5399/2266 5429/6678 323/4512\nf 4991/7291 323/4512 5429/6678\nf 1378/4522 5430/2286 5433/2288\nf 5434/6679 5433/2288 5430/2286\nf 5437/7292 5440/6680 92/4588\nf 5421/6677 92/4588 5440/6680\nf 5443/2294 5448/6683 1382/4526\nf 5447/2295 1382/4526 5448/6683\nf 37/4603 2806/7224 5453/4602\nf 5454/6685 5453/4602 2806/7224\nf 1385/4528 5456/2301 5459/2304\nf 5460/6687 5459/2304 5456/2301\nf 26/7221 5463/7293 2789/7222\nf 5466/6688 2789/7222 5463/7293\nf 1388/4532 5469/2307 5472/2309\nf 5473/6689 5472/2309 5469/2307\nf 5153/7294 5478/6691 78/7295\nf 5477/7296 78/7295 5478/6691\nf 5480/2314 5484/6693 1391/4535\nf 5483/2315 1391/4535 5484/6693\nf 5435/2289 5489/6694 86/4524\nf 5135/7297 86/4524 5489/6694\nf 5493/6695 5492/2320 5490/2317\nf 1392/4538 5490/2317 5492/2320\nf 5275/7281 34/7203 5497/6696\nf 2817/7225 5497/6696 34/7203\nf 1395/4543 5499/2323 5503/2328\nf 5504/6697 5503/2328 5499/2323\nf 189/3687 2857/7226 5498/2322\nf 5509/6698 5498/2322 2857/7226\nf 1398/4546 5511/2331 5515/2334\nf 5516/6699 5515/2334 5511/2331\nf 360/4548 5517/2335 5521/2346\nf 5522/6700 5521/2346 5517/2335\nf 5524/2340 5529/6702 1402/4550\nf 5528/2341 1402/4550 5529/6702\nf 5301/4480 344/4481 5535/6703\nf 5505/2325 5535/6703 344/4481\nf 1404/4554 5536/2347 5539/2350\nf 5540/6704 5539/2350 5536/2347\nf 5541/2351 5545/6705 91/4556\nf 5337/7288 91/4556 5545/6705\nf 5547/2356 5552/6706 1407/4558\nf 5551/2357 1407/4558 5552/6706\nf 5530/2344 5557/6707 359/4552\nf 5546/2353 359/4552 5557/6707\nf 5559/2364 5564/6708 1410/4562\nf 5563/2365 1410/4562 5564/6708\nf 5565/2368 5570/6709 363/4564\nf 5569/2377 363/4564 5570/6709\nf 5572/2372 5577/6710 1414/4566\nf 5576/2373 1414/4566 5577/6710\nf 5553/2360 5583/6711 348/4560\nf 5351/7289 348/4560 5583/6711\nf 5584/2380 5588/6712 1416/4570\nf 5587/2381 1416/4570 5588/6712\nf 5589/2384 5593/6713 90/4572\nf 5404/2267 90/4572 5593/6713\nf 5595/2388 5600/6714 1419/4574\nf 5599/2389 1419/4574 5600/6714\nf 5578/2376 5605/6715 362/4568\nf 5594/2385 362/4568 5605/6715\nf 5607/2396 5612/6717 1422/4578\nf 5611/2397 1422/4578 5612/6717\nf 5613/2400 5618/6718 366/4580\nf 5617/2409 366/4580 5618/6718\nf 5620/2404 5625/6720 1426/4582\nf 5624/2405 1426/4582 5625/6720\nf 5601/2392 5631/6721 352/4576\nf 5417/2275 352/4576 5631/6721\nf 5632/2412 5636/6722 1428/4586\nf 5635/2414 1428/4586 5636/6722\nf 92/4588 5637/2415 5437/7292\nf 5641/6723 5437/7292 5637/2415\nf 1431/4590 5643/2419 5647/2422\nf 5648/6724 5647/2422 5643/2419\nf 365/4584 5626/2408 5642/2418\nf 5653/6725 5642/2418 5626/2408\nf 1434/4593 5655/2428 5659/2430\nf 5660/6726 5659/2430 5655/2428\nf 368/4595 5661/2431 5665/2440\nf 5666/6727 5665/2440 5661/2431\nf 5668/2436 5672/6728 1437/4596\nf 5671/2438 1437/4596 5672/6728\nf 355/4530 5649/2423 5461/4529\nf 5677/6730 5461/4529 5649/2423\nf 1438/4601 5678/2441 5680/2444\nf 5681/6731 5680/2444 5678/2441\nf 3013/7229 5685/6732 26/7228\nf 5463/7298 26/7228 5685/6732\nf 5691/2452 1441/4604 5692/6733\nf 5687/2445 5692/6733 1441/4604\nf 5686/2448 202/3751 5697/6734\nf 3053/7231 5697/6734 202/3751\nf 5703/2460 1444/4608 5704/6735\nf 5699/2453 5704/6735 1444/4608\nf 5705/2457 5710/6736 371/4610\nf 5709/2469 371/4610 5710/6736\nf 5712/2464 5717/6737 1448/4613\nf 5716/2465 1448/4613 5717/6737\nf 5485/7299 356/4606 5723/6738\nf 5693/2449 5723/6738 356/4606\nf 5724/2472 5728/6739 1450/4617\nf 5727/2476 1450/4617 5728/6739\nf 78/4618 5729/2473 5154/2118\nf 5733/6740 5154/2118 5729/2473\nf 1453/4621 5735/2478 5739/2482\nf 5740/6741 5739/2482 5735/2478\nf 5718/2468 5745/6742 370/4615\nf 5734/2479 370/4615 5745/6742\nf 5752/6743 5751/2491 5747/2488\nf 1456/4625 5747/2488 5751/2491\nf 374/4627 5753/2490 5757/2502\nf 5758/6744 5757/2502 5753/2490\nf 1460/4628 5760/2495 5764/2498\nf 5765/6745 5764/2498 5760/2495\nf 337/4623 5741/2483 5167/2126\nf 5771/6746 5167/2126 5741/2483\nf 1462/4633 5772/2503 5775/2506\nf 5776/6747 5775/2506 5772/2503\nf 88/4635 5777/2507 5102/2088\nf 5781/6748 5102/2088 5777/2507\nf 5787/2516 1465/4636 5788/6749\nf 5783/2509 5788/6749 1465/4636\nf 373/4631 5766/2499 5782/2512\nf 5793/6750 5782/2512 5766/2499\nf 1468/4641 5795/2519 5799/2522\nf 5800/6751 5799/2522 5795/2519\nf 5805/2536 377/4642 5806/6752\nf 5801/2523 5806/6752 377/4642\nf 5813/6753 5812/2530 5808/2527\nf 1472/4645 5808/2527 5812/2530\nf 5115/2096 333/4638 5819/6754\nf 5789/2513 5819/6754 333/4638\nf 5823/2540 1474/4648 5824/6755\nf 5820/2533 5824/6755 1474/4648\nf 5246/2180 77/4650 5829/6756\nf 5825/2537 5829/6756 77/4650\nf 1477/4653 5831/2543 5835/2546\nf 5836/6757 5835/2546 5831/2543\nf 376/4647 5814/2531 5830/2542\nf 5841/6758 5830/2542 5814/2531\nf 5848/6759 5847/2554 5843/2550\nf 1480/4656 5843/2550 5847/2554\nf 379/4659 5849/2555 5853/2564\nf 5854/6760 5853/2564 5849/2555\nf 1483/4661 5856/2559 5859/2562\nf 5860/6761 5859/2562 5856/2559\nf 342/4655 5837/2547 5259/2186\nf 5865/6762 5259/2186 5837/2547\nf 1484/4665 5866/2565 5868/2568\nf 5869/6763 5868/2568 5866/2565\nf 5698/2456 45/3763 5873/6764\nf 3209/7232 5873/6764 45/3763\nf 5875/2572 5880/6765 1487/4669\nf 5879/2573 1487/4669 5880/6765\nf 3249/7233 5885/6766 215/3814\nf 5874/2569 215/3814 5885/6766\nf 5887/2580 5892/6767 1490/4673\nf 5891/2581 1490/4673 5892/6767\nf 5897/2596 382/4675 5898/6768\nf 5893/2584 5898/6768 382/4675\nf 5904/2592 1494/4676 5905/6769\nf 5900/2585 5905/6769 1494/4676\nf 5881/2576 5911/6770 369/4671\nf 5711/2461 369/4671 5911/6770\nf 5915/2597 1496/4680 5916/6771\nf 5912/2593 5916/6771 1496/4680\nf 97/4682 5917/2600 5921/7300\nf 5922/6772 5921/7300 5917/2600\nf 1500/4685 5924/2604 5928/2606\nf 5929/6773 5928/2606 5924/2604\nf 5906/2589 5935/6774 381/4678\nf 5923/2601 381/4678 5935/6774\nf 5937/2609 5942/6775 1503/4688\nf 5941/2614 1503/4688 5942/6775\nf 386/4691 5943/2615 5947/2626\nf 5948/6776 5947/2626 5943/2615\nf 1507/4693 5950/2619 5954/2623\nf 5955/6777 5954/2623 5950/2619\nf 5930/2607 5962/6778 385/4687\nf 5961/7301 385/4687 5962/6778\nf 5963/2627 5967/6779 1510/4697\nf 5966/2632 1510/4697 5967/6779\nf 98/4824 5971/2871 5794/2518\nf 5974/6780 5794/2518 5971/2871\nf 1514/4701 5977/2634 5981/2638\nf 5982/6781 5981/2638 5977/2634\nf 5988/6782 5976/2635 5985/2862\nf 387/4819 5985/2862 5976/2635\nf 5995/2646 1518/4705 5996/6783\nf 5991/2641 5996/6783 1518/4705\nf 6002/6785 6001/2658 5997/2647\nf 390/4706 5997/2647 6001/2658\nf 6009/6786 6008/2654 6004/2649\nf 1522/4709 6004/2649 6008/2654\nf 375/4703 5983/2639 5807/2526\nf 6015/6788 5807/2526 5983/2639\nf 1524/4713 6016/2659 6019/2662\nf 6020/6789 6019/2662 6016/2659\nf 96/4715 6021/2663 5842/2551\nf 6025/6790 5842/2551 6021/2663\nf 1527/4717 6027/2667 6031/2671\nf 6032/6791 6031/2671 6027/2667\nf 389/4711 6010/2655 6026/2666\nf 6037/6792 6026/2666 6010/2655\nf 1530/4721 6039/2675 6043/2678\nf 6044/6793 6043/2678 6039/2675\nf 392/4723 6045/2679 6049/2689\nf 6050/6794 6049/2689 6045/2679\nf 6056/6795 6055/2685 6052/2683\nf 1533/4724 6052/2683 6055/2685\nf 6061/6796 5855/2558 6033/2670\nf 378/4718 6033/2670 5855/2558\nf 1534/4728 6062/2688 6064/2692\nf 6065/6797 6064/2692 6062/2688\nf 3409/7234 6069/6798 50/3826\nf 5886/2577 50/3826 6069/6798\nf 6071/2696 6076/6799 1537/4733\nf 6075/2697 1537/4733 6076/6799\nf 3449/7235 6081/6800 229/3876\nf 6070/2693 229/3876 6081/6800\nf 6087/2708 1540/4737 6088/6801\nf 6083/2701 6088/6801 1540/4737\nf 6093/2720 395/4738 6094/6802\nf 6089/2705 6094/6802 395/4738\nf 6100/2716 1544/4740 6101/6803\nf 6096/2709 6101/6803 1544/4740\nf 6077/2700 6107/6804 380/4735\nf 5899/2588 380/4735 6107/6804\nf 6111/2724 1546/4744 6112/6805\nf 6108/2717 6112/6805 1546/4744\nf 5936/2612 100/4746 6117/6806\nf 6113/2721 6117/6806 100/4746\nf 6123/2732 1549/4748 6124/6807\nf 6119/2728 6124/6807 1549/4748\nf 6102/2713 6129/6808 394/4742\nf 6118/2725 394/4742 6129/6808\nf 6131/2736 6136/6810 1552/4753\nf 6135/2737 1552/4753 6136/6810\nf 6141/2750 398/4755 6142/6811\nf 6137/2740 6142/6811 398/4755\nf 6149/6813 6148/2746 6144/2742\nf 1556/4756 6144/2742 6148/2746\nf 383/4750 6125/2729 5949/2618\nf 6155/6814 5949/2618 6125/2729\nf 1558/4761 6156/2751 6159/2754\nf 6160/6815 6159/2754 6156/2751\nf 101/4763 6161/2755 6165/4808\nf 6166/6816 6165/4808 6161/2755\nf 1562/4765 6168/2759 6172/2762\nf 6173/6817 6172/2762 6168/2759\nf 397/4759 6150/2747 6167/2758\nf 6179/6818 6167/2758 6150/2747\nf 6186/6819 6185/2771 6181/2766\nf 1565/4768 6181/2766 6185/2771\nf 401/4771 6187/2770 6191/2780\nf 6192/6820 6191/2780 6187/2770\nf 1568/4773 6194/2775 6197/2777\nf 6198/6821 6197/2777 6194/2775\nf 400/4767 6174/2763 6203/4798\nf 6204/6822 6203/4798 6174/2763\nf 1570/4777 6205/2781 6207/2783\nf 6208/6823 6207/2783 6205/2781\nf 3565/7236 6213/6824 55/3888\nf 6082/2704 55/3888 6213/6824\nf 6219/2792 1573/4781 6220/6825\nf 6215/2788 6220/6825 1573/4781\nf 3599/7237 6225/6826 239/3925\nf 6214/2785 239/3925 6225/6826\nf 1575/4785 6226/2795 6229/2797\nf 6230/6827 6229/2797 6226/2795\nf 402/4787 6231/2798 6235/2805\nf 6236/6828 6235/2805 6231/2798\nf 1577/4789 6237/2802 6239/2804\nf 6240/6829 6239/2804 6237/2802\nf 6095/2712 393/4782 6245/6830\nf 6221/2789 6245/6830 393/4782\nf 6246/2808 6249/6831 1578/4793\nf 6248/2810 1578/4793 6249/6831\nf 6253/6832 6209/4779 3609/7238\nf 32/4778 3609/7238 6209/4779\nf 6255/2814 6260/6833 1581/4797\nf 6259/2816 1581/4797 6260/6833\nf 3649/7239 6265/6834 243/3939\nf 6254/2811 243/3939 6265/6834\nf 6267/2822 6272/6835 1584/4800\nf 6271/2823 1584/4800 6272/6835\nf 6273/2826 6278/6836 404/4802\nf 6277/2834 404/4802 6278/6836\nf 6280/2830 6284/6837 1587/4804\nf 6283/2831 1587/4804 6284/6837\nf 400/4767 6261/2817 6175/4766\nf 6289/6838 6175/4766 6261/2817\nf 6290/2837 6293/6839 1588/4807\nf 6292/2839 1588/4807 6293/6839\nf 97/4682 5921/7300 5746/2485\nf 6297/6840 5746/2485 5921/7300\nf 1591/4810 6299/2843 6303/2846\nf 6304/6841 6303/2846 6299/2843\nf 385/4687 5961/7301 6298/2842\nf 6309/6842 6298/2842 5961/7301\nf 6316/6844 6315/2855 6311/2850\nf 1594/4813 6311/2850 6315/2855\nf 6322/6845 6321/2867 6317/2854\nf 406/4815 6317/2854 6321/2867\nf 6328/6847 6327/2863 6324/2858\nf 1597/4817 6324/2858 6327/2863\nf 372/4812 6305/2847 5759/2494\nf 6333/6848 5759/2494 6305/2847\nf 6337/6849 6336/2870 6334/2866\nf 1598/4821 6334/2866 6336/2870\nf 99/5782 6006/6787 6038/2674\nf 6341/6850 6038/2674 6006/6787\nf 1601/4826 6343/2875 6347/2878\nf 6348/6851 6347/2878 6343/2875\nf 388/5775 5993/6784 6342/2874\nf 6353/6852 6342/2874 5993/6784\nf 1604/4830 6355/2882 6359/2886\nf 6360/6853 6359/2886 6355/2882\nf 408/4832 6361/2887 6365/2896\nf 6366/6854 6365/2896 6361/2887\nf 1607/4834 6368/2891 6371/2893\nf 6372/6855 6371/2893 6368/2891\nf 391/4828 6349/2879 6051/2682\nf 6377/6856 6051/2682 6349/2879\nf 6381/6857 6380/2899 6378/2897\nf 1608/4838 6378/2897 6380/2899\nf 3749/7240 6385/6858 57/3952\nf 6266/2819 57/3952 6385/6858\nf 6387/2903 6392/6859 1611/4842\nf 6391/2905 1611/4842 6392/6859\nf 249/3982 3783/7241 6386/2902\nf 6397/6860 6386/2902 3783/7241\nf 1613/4846 6398/2911 6401/2913\nf 6402/6861 6401/2913 6398/2911\nf 409/4848 6403/2914 6407/2921\nf 6408/6862 6407/2921 6403/2914\nf 1615/4850 6409/2918 6411/2919\nf 6412/6863 6411/2919 6409/2918\nf 6393/2908 6417/6864 403/4844\nf 6279/2827 403/4844 6417/6864\nf 6418/2924 6421/6865 1616/4854\nf 6420/2925 1616/4854 6421/6865\nf 6423/7302 6427/6866 106/4880\nf 6426/4909 106/4880 6427/6866\nf 6430/2930 6435/6869 1621/4857\nf 6434/2934 1621/4857 6435/6869\nf 72/4894 6439/3165 6442/4895\nf 6443/6871 6442/4895 6439/3165\nf 1625/4861 6446/2937 6449/2940\nf 6450/6872 6449/2940 6446/2937\nf 6453/7303 6457/6874 107/5000\nf 6456/6941 107/5000 6457/6874\nf 6459/2942 6462/6875 1628/4865\nf 6461/2943 1628/4865 6462/6875\nf 5185/7304 6468/6876 71/6954\nf 6467/6953 71/6954 6468/6876\nf 6470/2948 6475/6877 1632/4868\nf 6474/2949 1632/4868 6475/6877\nf 5223/7305 6481/6878 340/5847\nf 6469/2945 340/5847 6481/6878\nf 6482/2956 6486/6880 1634/4871\nf 6485/2957 1634/4871 6486/6880\nf 6487/2960 6492/6881 416/4873\nf 6491/2969 416/4873 6492/6881\nf 6493/2961 6497/6882 1637/4875\nf 6496/2965 1637/4875 6497/6882\nf 6476/2952 6504/6884 415/4869\nf 6503/6957 415/4869 6504/6884\nf 6505/2972 6509/6885 1640/4879\nf 6508/2973 1640/4879 6509/6885\nf 106/4880 6510/2976 6423/7302\nf 6515/6886 6423/7302 6510/2976\nf 6517/2980 6522/6887 1643/4882\nf 6521/2983 1643/4882 6522/6887\nf 6498/2968 6527/6888 414/4877\nf 6516/2977 414/4877 6527/6888\nf 6528/2985 6532/6890 1645/4885\nf 6531/2989 1645/4885 6532/6890\nf 6533/2992 6538/6891 417/4887\nf 6537/3001 417/4887 6538/6891\nf 6539/2996 6542/6894 1647/4889\nf 6541/2997 1647/4889 6542/6894\nf 6547/6896 6451/4862 6523/2982\nf 410/4863 6523/2982 6451/4862\nf 6551/6897 6550/3006 6548/3004\nf 1648/4893 6548/3004 6550/3006\nf 6556/6899 6453/7303 6553/3228\nf 107/5000 6553/3228 6453/7303\nf 6564/6900 6563/3016 6559/3010\nf 1652/4896 6559/3010 6563/3016\nf 6570/6901 6558/3011 6567/3221\nf 418/4997 6567/3221 6558/3011\nf 1656/4900 6573/3018 6577/3022\nf 6578/6903 6577/3022 6573/3018\nf 6583/3036 421/4902 6584/6904\nf 6579/3023 6584/6904 421/4902\nf 6586/3028 6591/6905 1660/4903\nf 6590/3029 1660/4903 6591/6905\nf 6437/4858 412/4859 6597/6907\nf 6565/3013 6597/6907 412/4859\nf 6601/3040 1662/4907 6602/6908\nf 6598/3033 6602/6908 1662/4907\nf 6588/6906 6608/6909 108/5935\nf 6607/3241 108/5935 6608/6909\nf 6614/3045 1666/4910 6615/6910\nf 6610/3041 6615/6910 1666/4910\nf 6621/6911 6609/3044 6575/6902\nf 419/5873 6575/6902 6609/3044\nf 6628/6912 6627/3055 6623/3051\nf 1669/4914 6623/3051 6627/3055\nf 425/4916 6629/3054 6633/3066\nf 6634/6913 6633/3066 6629/3054\nf 6636/3059 6641/6914 1673/4919\nf 6640/3061 1673/4919 6641/6914\nf 6616/3048 6648/6916 424/4913\nf 6647/3247 424/4913 6648/6916\nf 1676/4923 6649/3067 6652/3070\nf 6653/6917 6652/3070 6649/3067\nf 79/5900 5387/7306 6659/3113\nf 6660/6918 6659/3113 5387/7306\nf 6662/3076 6667/6919 1680/4927\nf 6666/3077 1680/4927 6667/6919\nf 5376/7307 6673/6920 350/5885\nf 6661/3073 350/5885 6673/6920\nf 6674/3084 6678/6922 1682/4931\nf 6677/3085 1682/4931 6678/6922\nf 6679/3088 6684/6923 428/4933\nf 6683/3097 428/4933 6684/6923\nf 6685/3092 6689/6925 1685/4935\nf 6688/3093 1685/4935 6689/6925\nf 6668/3080 6696/6926 427/4929\nf 6695/3123 427/4929 6696/6926\nf 6697/3100 6701/6927 1688/4939\nf 6700/3101 1688/4939 6701/6927\nf 74/7308 5319/7309 4701/7310\nf 6707/6928 4701/7310 5319/7309\nf 6709/3107 6714/6929 1691/4942\nf 6713/3109 1691/4942 6714/6929\nf 346/5897 5308/7311 6708/3106\nf 6719/6930 6708/3106 5308/7311\nf 6720/3116 6724/6931 1693/4947\nf 6723/3117 1693/4947 6724/6931\nf 6730/6932 6729/3131 6725/3120\nf 430/4949 6725/3120 6729/3131\nf 1696/4950 6731/3122 6734/3126\nf 6735/6933 6734/3126 6731/3122\nf 6715/3112 6741/6934 307/4945\nf 4663/7312 307/4945 6741/6934\nf 1698/4954 6742/3130 6745/3134\nf 6746/6935 6745/3134 6742/3130\nf 80/4957 6747/3135 4649/7313\nf 6751/6936 4649/7313 6747/3135\nf 1701/4959 6753/3139 6757/3142\nf 6758/6937 6757/3142 6753/3139\nf 429/4953 6736/3127 6752/3138\nf 6763/6938 6752/3138 6736/3127\nf 1704/4963 6765/3147 6769/3150\nf 6770/6939 6769/3150 6765/3147\nf 432/4965 6771/3151 6775/3162\nf 6776/6940 6775/3162 6771/3151\nf 6782/6942 6781/3159 6778/3154\nf 1707/4966 6778/3154 6781/3159\nf 303/4961 6759/3143 4611/7314\nf 6787/6943 4611/7314 6759/3143\nf 6790/3168 1708/4970 6791/6944\nf 6788/3163 6791/6944 1708/4970\nf 112/4941 6702/3104 6795/5015\nf 6796/6945 6795/5015 6702/3104\nf 6798/3172 6803/6946 1712/4973\nf 6802/3173 1712/4973 6803/6946\nf 6690/3096 6809/6947 426/4937\nf 6797/3169 426/4937 6809/6947\nf 6810/3180 6814/6949 1714/4977\nf 6813/3181 1714/4977 6814/6949\nf 6815/3184 6820/6950 434/4979\nf 6819/3195 434/4979 6820/6950\nf 1716/4981 6821/3187 6823/3190\nf 6824/6951 6823/3190 6821/3187\nf 6804/3176 6830/6955 433/4975\nf 6829/5004 433/4975 6830/6955\nf 6834/6956 6833/3199 6831/3194\nf 1718/4984 6831/3194 6833/3199\nf 6764/3146 112/4941 6840/6958\nf 6837/7315 6840/6958 112/4941\nf 6843/3204 6848/6959 1722/4987\nf 6847/3207 1722/4987 6848/6959\nf 6851/5945 6854/6960 435/5019\nf 6842/3201 435/5019 6854/6960\nf 1725/4991 6856/3211 6859/3213\nf 6860/6961 6859/3213 6856/3211\nf 436/4993 6861/3214 6865/3224\nf 6866/6962 6865/3224 6861/3214\nf 1727/4995 6867/3218 6869/3220\nf 6870/6963 6869/3220 6867/3218\nf 6875/6964 6777/3155 6849/3206\nf 431/4988 6849/3206 6777/3155\nf 1728/4999 6876/3225 6878/3229\nf 6879/6965 6878/3229 6876/3225\nf 106/4880 6603/3037 6835/4985\nf 6883/6966 6835/4985 6603/3037\nf 6885/3234 6890/6967 1731/5003\nf 6889/3235 1731/5003 6890/6967\nf 6592/3032 6895/6968 420/4906\nf 6884/3231 420/4906 6895/6968\nf 6896/3240 6900/6969 1733/5005\nf 6899/3243 1733/5005 6900/6969\nf 6901/3246 6906/6970 438/5008\nf 6905/3255 438/5008 6906/6970\nf 6907/3250 6911/6971 1736/5010\nf 6910/3252 1736/5010 6911/6971\nf 6891/3238 6917/6973 433/4975\nf 6805/4974 433/4975 6917/6973\nf 1738/5014 6918/3258 6921/3260\nf 6922/6974 6921/3260 6918/3258\nf 6927/6975 6837/7315 6923/3261\nf 112/4941 6923/3261 6837/7315\nf 6934/6979 6933/3269 6929/3264\nf 1741/5016 6929/3264 6933/3269\nf 6939/6980 6909/6972 6654/3071\nf 111/4925 6654/3071 6909/6972\nf 6941/3274 6945/6982 1743/5020\nf 6944/3275 1743/5020 6945/6982\nf 6949/6983 6639/6915 6855/5925\nf 110/5926 6855/5925 6639/6915\nf 6950/3278 6953/6984 1744/5023\nf 6952/3280 1744/5023 6953/6984\nf 6955/7316 6958/6985 95/5718\nf 5654/2425 95/5718 6958/6985\nf 6961/3284 6966/6988 1748/5025\nf 6965/3285 1748/5025 6966/6988\nf 6971/5049 68/5048 6972/6990\nf 4360/7258 6972/6990 68/5048\nf 6977/3294 1751/5029 6978/6991\nf 6974/3292 6978/6991 1751/5029\nf 42/6201 5670/6729 4345/7257\nf 6983/6993 4345/7257 5670/6729\nf 1752/5033 6984/3296 6986/3298\nf 6987/6994 6986/3298 6984/3296\nf 6991/6995 6955/7316 5622/6719\nf 95/5718 5622/6719 6955/7316\nf 1755/5035 6993/3301 6997/3305\nf 6998/6996 6997/3305 6993/3301\nf 7003/6997 6992/3300 5609/6716\nf 364/5711 5609/6716 6992/3300\nf 1758/5039 7005/3308 7009/3312\nf 7010/6998 7009/3312 7005/3308\nf 443/5041 7011/3313 7015/3322\nf 7016/7000 7015/3322 7011/3313\nf 1761/5043 7018/3317 7021/3320\nf 7022/7001 7021/3320 7018/3317\nf 7027/7003 6979/5030 6999/3304\nf 440/5031 6999/3304 6979/5030\nf 1762/5047 7028/3323 7030/3326\nf 7031/7004 7030/3326 7028/3323\nf 7033/7317 7036/7005 94/5700\nf 5558/2361 94/5700 7036/7005\nf 7039/3330 7044/7006 1766/5051\nf 7043/3331 1766/5051 7044/7006\nf 7047/5965 7050/7007 444/5068\nf 7038/3327 444/5068 7050/7007\nf 7052/3336 7056/7008 1769/5055\nf 7055/3337 1769/5055 7056/7008\nf 7057/3340 7062/7009 445/5057\nf 7061/3345 445/5057 7062/7009\nf 7063/3342 7066/7010 1771/5059\nf 7065/3343 1771/5059 7066/7010\nf 7045/3334 7071/7011 361/5053\nf 5571/2369 361/5053 7071/7011\nf 7072/3348 7075/7012 1772/5063\nf 7074/3349 1772/5063 7075/7012\nf 94/5700 5526/6701 7033/7317\nf 7079/7013 7033/7317 5526/6701\nf 7081/3354 7086/7015 1775/5067\nf 7085/3356 1775/5067 7086/7015\nf 39/3699 4491/7261 5510/2330\nf 7091/7018 5510/2330 4491/7261\nf 1777/5071 7093/3360 7096/3364\nf 7097/7019 7096/3364 7093/3360\nf 7051/5957 7101/7021 70/4208\nf 4477/7260 70/4208 7101/7021\nf 7102/3366 7105/7022 1778/5075\nf 7104/3367 1778/5075 7105/7022\nf 1782/7179 1783/5967 450/7024\nf 1781/5079 450/7024 1783/5967\nf 1791/5968 1789/5085 1790/5\nf 449/6 1790/5 1789/5085\nf 1798/5969 1797/5082 1785/1\nf 448/2 1785/1 1797/5082\nf 1806/5970 1804/5083 1805/13\nf 454/14 1805/13 1804/5083\nf 1812/5971 1810/5084 1811/25\nf 458/26 1811/25 1810/5084\nf 1819/5972 1817/5089 1818/21\nf 457/22 1818/21 1817/5089\nf 1826/5973 1824/5086 1825/7181\nf 461/7026 1825/7181 1824/5086\nf 1831/5974 1829/5087 1830/29\nf 460/30 1830/29 1829/5087\nf 1837/7182 1838/5975 465/7027\nf 1836/5088 465/7027 1838/5975\nf 1845/5976 1843/5093 1844/37\nf 464/38 1844/37 1843/5093\nf 1851/5977 1850/5090 1839/33\nf 463/34 1839/33 1850/5090\nf 1858/5978 1856/5091 1857/45\nf 468/46 1857/45 1856/5091\nf 1864/5979 1862/5092 1863/57\nf 472/58 1863/57 1862/5092\nf 1871/5980 1869/318 1870/53\nf 471/54 1870/53 1869/318\nf 1878/5981 1876/5094 1877/7183\nf 475/7028 1877/7183 1876/5094\nf 1883/5982 1881/311 1882/61\nf 474/62 1882/61 1881/311\nf 453/10 1800/9 1889/5097\nf 1890/5983 1889/5097 1800/9\nf 1897/70 1898/5984 479/72\nf 1896/5103 479/72 1898/5984\nf 1892/66 1904/5985 478/68\nf 1903/5100 478/68 1904/5985\nf 1911/78 1912/5986 483/80\nf 1910/5101 483/80 1912/5986\nf 1917/90 1918/5987 487/92\nf 1916/5102 487/92 1918/5987\nf 1925/5988 1923/5125 1924/85\nf 486/86 1924/85 1923/5125\nf 1931/5989 1930/5104 1813/17\nf 456/18 1813/17 1930/5104\nf 1936/5990 1934/5123 1935/93\nf 489/94 1935/93 1934/5123\nf 1906/74 1942/5991 482/76\nf 1941/5107 482/76 1942/5991\nf 1950/5992 1948/5113 1949/101\nf 493/102 1949/101 1948/5113\nf 1956/5993 1955/5110 1944/97\nf 492/98 1944/97 1955/5110\nf 1963/109 1964/5994 497/110\nf 1962/5111 497/110 1964/5994\nf 1970/5995 1968/5112 1969/121\nf 501/122 1969/121 1968/5112\nf 1977/5996 1975/5117 1976/117\nf 500/118 1976/117 1975/5117\nf 1983/5997 1982/5114 1919/81\nf 485/82 1919/81 1982/5114\nf 1988/5998 1986/5115 1987/125\nf 503/126 1987/125 1986/5115\nf 1994/5999 1992/5116 1993/169\nf 507/170 1993/169 1992/5116\nf 2001/6000 1999/5121 2000/133\nf 506/134 2000/133 1999/5121\nf 2007/6001 2006/5118 1995/129\nf 505/130 1995/129 2006/5118\nf 2014/6002 2012/5119 2013/141\nf 510/142 2013/141 2012/5119\nf 2020/6003 2018/5120 2019/153\nf 514/154 2019/153 2018/5120\nf 513/151 2026/152 2025/6005\nf 2027/6004 2025/6005 2026/152\nf 2034/6006 2032/5122 2033/177\nf 517/178 2033/177 2032/5122\nf 2039/6007 2037/6008 2038/157\nf 516/158 2038/157 2037/6008\nf 2045/6009 2044/5124 1852/41\nf 467/42 1852/41 2044/5124\nf 2052/6010 2050/5129 2051/165\nf 520/166 2051/165 2050/5129\nf 2057/6011 2056/5126 2046/161\nf 519/162 2046/161 2056/5126\nf 2062/6012 2060/5127 2061/173\nf 522/174 2061/173 2060/5127\nf 2068/6013 2066/5128 2067/185\nf 525/186 2067/185 2066/5128\nf 2073/6014 2071/6015 2072/181\nf 524/182 2072/181 2071/6015\nf 2079/6016 2078/5130 1865/49\nf 470/50 1865/49 2078/5130\nf 2084/6017 2082/6018 2083/189\nf 527/190 2083/189 2082/6018\nf 1958/106 2090/6019 496/108\nf 2089/5133 496/108 2090/6019\nf 2097/198 2098/6020 531/200\nf 2096/5138 531/200 2098/6020\nf 2092/194 2104/6021 530/196\nf 2103/5135 530/196 2104/6021\nf 2111/206 2112/6022 535/208\nf 2110/5136 535/208 2112/6022\nf 2117/218 2118/6024 539/220\nf 2116/5137 539/220 2118/6024\nf 2125/6025 2123/5142 2124/213\nf 538/214 2124/213 2123/5142\nf 1971/114 2131/6027 499/116\nf 2130/5139 499/116 2131/6027\nf 2135/222 2136/6028 541/224\nf 2134/5140 541/224 2136/6028\nf 2008/137 2141/6029 509/138\nf 2140/5141 509/138 2141/6029\nf 2147/230 2148/6030 544/232\nf 2146/5146 544/232 2148/6030\nf 2142/226 2153/6031 543/228\nf 2152/5143 543/228 2153/6031\nf 2159/238 2160/6032 547/240\nf 2158/5144 547/240 2160/6032\nf 2165/250 2166/6034 551/252\nf 2164/5145 551/252 2166/6034\nf 2172/246 2173/6035 550/248\nf 2171/5150 550/248 2173/6035\nf 2021/146 2179/6037 512/148\nf 2178/5147 512/148 2179/6037\nf 2183/254 2184/6038 553/256\nf 2182/5148 553/256 2184/6038\nf 2188/5149 513/151 2189/6039\nf 2025/6005 2189/6039 513/151\nf 2194/5154 556/261 2196/6040\nf 2195/263 2196/6040 556/261\nf 2190/258 2201/6041 555/260\nf 2200/5151 555/260 2201/6041\nf 2206/5152 559/269 2208/6043\nf 2207/271 2208/6043 559/269\nf 2213/282 2214/6044 563/284\nf 2212/5153 563/284 2214/6044\nf 2220/278 2221/6045 562/280\nf 2219/5158 562/280 2221/6045\nf 2037/6008 2227/6047 516/158\nf 2226/5155 516/158 2227/6047\nf 2231/286 2232/6048 565/288\nf 2230/5156 565/288 2232/6048\nf 2071/6015 2237/6049 524/182\nf 2236/5157 524/182 2237/6049\nf 568/295 2243/296 2242/5162\nf 2244/6050 2242/5162 2243/296\nf 567/291 2238/292 2248/5159\nf 2249/6051 2248/5159 2238/292\nf 571/303 2255/304 2254/5160\nf 2256/6053 2254/5160 2255/304\nf 2262/6054 2260/5161 2261/312\nf 574/313 2261/312 2260/5161\nf 2268/6055 1884/64 2267/309\nf 474/62 2267/309 1884/64\nf 2273/6057 2272/5163 2082/6018\nf 527/190 2082/6018 2272/5163\nf 2277/6058 1872/56 2276/316\nf 471/54 2276/316 1872/56\nf 2282/7192 2283/6059 580/7036\nf 2281/5166 580/7036 2283/6059\nf 2290/324 2291/6060 579/326\nf 2289/5172 579/326 2291/6060\nf 2298/6061 2297/5169 2285/319\nf 578/320 2285/319 2297/5169\nf 2306/6062 2304/5170 2305/331\nf 584/332 2305/331 2304/5170\nf 2311/344 2312/6063 588/346\nf 2310/5171 588/346 2312/6063\nf 2318/340 2319/6064 587/342\nf 2317/5194 587/342 2319/6064\nf 2325/7194 2326/6065 591/7038\nf 2324/5173 591/7038 2326/6065\nf 2330/348 2331/6066 590/350\nf 2329/5192 590/350 2331/6066\nf 2338/6067 2337/5176 2300/327\nf 583/328 2300/327 2337/5176\nf 2346/6068 2344/5182 2345/355\nf 595/356 2345/355 2344/5182\nf 2340/352 2352/6069 594/354\nf 2351/5179 594/354 2352/6069\nf 2359/364 2360/6070 599/366\nf 2358/5180 599/366 2360/6070\nf 2365/376 2366/6071 603/378\nf 2364/5181 603/378 2366/6071\nf 2373/6072 2371/5186 2372/371\nf 602/372 2372/371 2371/5186\nf 2313/336 2379/6073 586/338\nf 2378/5183 586/338 2379/6073\nf 2383/380 2384/6074 605/382\nf 2382/5184 605/382 2384/6074\nf 2389/424 2390/6075 609/426\nf 2388/5185 609/426 2390/6075\nf 2397/6076 2395/5190 2396/388\nf 608/390 2396/388 2395/5190\nf 2403/6077 2402/5187 2391/383\nf 607/384 2391/383 2402/5187\nf 2410/6078 2408/5188 2409/395\nf 612/396 2409/395 2408/5188\nf 2416/6079 2414/5189 2415/407\nf 616/408 2415/407 2414/5189\nf 2423/6080 2421/5302 2422/403\nf 615/404 2422/403 2421/5302\nf 2429/432 2430/6081 619/434\nf 2428/5191 619/434 2430/6081\nf 2435/6082 2433/5300 2434/411\nf 618/412 2434/411 2433/5300\nf 2441/7197 2442/6083 623/7041\nf 2440/5193 623/7041 2442/6083\nf 2448/420 2449/6084 622/422\nf 2447/5198 622/422 2449/6084\nf 2443/416 2455/6085 621/418\nf 2454/5195 621/418 2455/6085\nf 2459/428 2460/6086 625/430\nf 2458/5196 625/430 2460/6086\nf 2465/440 2466/6087 628/442\nf 2464/5197 628/442 2466/6087\nf 2470/436 2471/6088 627/438\nf 2469/5294 627/438 2471/6088\nf 2477/7198 2478/6089 631/7042\nf 2476/5199 631/7042 2478/6089\nf 2482/444 2483/6090 630/446\nf 2481/5292 630/446 2483/6090\nf 2354/360 2490/6091 598/362\nf 2489/5202 598/362 2490/6091\nf 2497/452 2498/6092 635/454\nf 2496/5207 635/454 2498/6092\nf 2492/448 2504/6093 634/450\nf 2503/5204 634/450 2504/6093\nf 2511/460 2512/6094 639/462\nf 2510/5205 639/462 2512/6094\nf 2517/472 2518/6096 643/474\nf 2516/5206 643/474 2518/6096\nf 2524/468 2525/6097 642/470\nf 2523/5211 642/470 2525/6097\nf 2367/368 2531/6099 601/370\nf 2530/5208 601/370 2531/6099\nf 2535/476 2536/6100 645/478\nf 2534/5209 645/478 2536/6100\nf 2541/6101 2540/5210 2404/391\nf 611/392 2404/391 2540/5210\nf 2548/6102 2546/5215 2547/483\nf 648/484 2547/483 2546/5215\nf 2553/6103 2552/5212 2542/479\nf 647/480 2542/479 2552/5212\nf 2559/491 2560/6104 651/492\nf 2558/5213 651/492 2560/6104\nf 2565/503 2566/6106 655/504\nf 2564/5214 655/504 2566/6106\nf 2572/500 2573/6107 654/502\nf 2571/5310 654/502 2573/6107\nf 2579/6109 2578/5216 2417/399\nf 614/400 2417/399 2578/5216\nf 2583/507 2584/6110 657/508\nf 2582/5308 657/508 2584/6110\nf 2589/5217 662/7046 2591/6111\nf 2590/7201 2591/6111 662/7046\nf 2598/516 2599/6112 661/518\nf 2597/6114 661/518 2599/6112\nf 2605/7206 2606/6116 665/7048\nf 2604/5219 665/7048 2606/6116\nf 2596/6113 660/511 2612/6118\nf 2611/524 2612/6118 660/511\nf 2618/6119 2617/5221 2087/7209\nf 529/7050 2087/7209 2617/5221\nf 2625/6121 2610/6117 2624/529\nf 664/522 2624/529 2610/6117\nf 2630/7210 2631/6122 672/7052\nf 2629/5223 672/7052 2631/6122\nf 2637/536 2638/6123 668/526\nf 2623/6120 668/526 2638/6123\nf 2645/6125 2643/5225 2644/7211\nf 675/7054 2644/7211 2643/5225\nf 2650/6126 2636/6124 2649/539\nf 671/534 2649/539 2636/6124\nf 2655/7212 2656/6127 679/7055\nf 2654/5226 679/7055 2656/6127\nf 2662/546 2663/6128 678/548\nf 2661/5233 678/548 2663/6128\nf 2657/542 2669/6129 677/544\nf 2668/5229 677/544 2669/6129\nf 2675/554 2676/6130 682/556\nf 2674/5230 682/556 2676/6130\nf 2681/566 2682/6132 686/568\nf 2680/5232 686/568 2682/6132\nf 2688/562 2689/6133 685/564\nf 2687/6135 685/564 2689/6133\nf 2695/7213 2696/6137 689/7056\nf 2694/5234 689/7056 2696/6137\nf 2700/570 2701/6138 688/572\nf 2699/6139 688/572 2701/6138\nf 685/564 2687/6135 2706/5237\nf 2707/6140 2706/5237 2687/6135\nf 692/579 2713/580 2712/5243\nf 2714/6141 2712/5243 2713/580\nf 691/575 2708/576 2718/5240\nf 2719/6142 2718/5240 2708/576\nf 2725/588 2726/6143 695/587\nf 2724/5241 695/587 2726/6143\nf 699/599 2731/600 2730/5242\nf 2732/6144 2730/5242 2731/600\nf 2738/596 2739/6145 698/595\nf 2737/5269 698/595 2739/6145\nf 2745/6147 2744/5244 2699/6139\nf 688/572 2699/6139 2744/5244\nf 701/602 2749/601 2748/5267\nf 2750/6148 2748/5267 2749/601\nf 705/7059 2755/7216 2754/5245\nf 2756/6149 2754/5245 2755/7216\nf 704/611 2762/612 2761/6150\nf 2763/6151 2761/6150 2762/612\nf 2720/582 2769/6154 694/584\nf 2768/5247 694/584 2769/6154\nf 2760/6153 703/607 2775/6155\nf 2774/617 2775/6155 703/607\nf 631/7062 2485/7218 2779/5249\nf 2780/6157 2779/5249 2485/7218\nf 707/616 2786/624 2773/6156\nf 2787/6159 2773/6156 2786/624\nf 2792/7223 2793/6160 714/7064\nf 2791/5250 714/7064 2793/6160\nf 2799/630 2800/6161 710/621\nf 2785/6158 710/621 2800/6161\nf 2806/7224 2807/6163 717/7066\nf 2805/5252 717/7066 2807/6163\nf 2811/634 2812/6164 713/626\nf 2798/6162 713/626 2812/6164\nf 2818/6165 2816/5253 2817/7225\nf 721/7067 2817/7225 2816/5253\nf 2824/640 2825/6166 720/642\nf 2823/5259 720/642 2825/6166\nf 2819/635 2831/6167 719/636\nf 2830/5256 719/636 2831/6167\nf 724/650 2837/648 2836/5257\nf 2838/6168 2836/5257 2837/648\nf 2843/660 2844/6169 728/662\nf 2842/5258 728/662 2844/6169\nf 2851/6170 2849/6171 2850/658\nf 727/657 2850/658 2849/6171\nf 2857/7226 2858/6172 731/7068\nf 2856/5260 731/7068 2858/6172\nf 2862/664 2863/6173 730/666\nf 2861/5533 730/666 2863/6173\nf 723/646 2832/644 2868/5261\nf 2869/6174 2868/5261 2832/644\nf 2876/6175 2874/5265 2875/671\nf 734/672 2875/671 2874/5265\nf 2881/6176 2880/5262 2870/667\nf 733/668 2870/667 2880/5262\nf 2888/6177 2886/5263 2887/679\nf 737/680 2887/679 2886/5263\nf 2894/6178 2892/5264 2893/691\nf 741/692 2893/691 2892/5264\nf 740/689 2900/690 2899/5525\nf 2901/6179 2899/5525 2900/690\nf 2907/6180 2906/5266 2845/651\nf 726/652 2845/651 2906/5266\nf 2912/6181 2910/5523 2911/695\nf 743/696 2911/695 2910/5523\nf 2917/6182 2916/5268 2882/675\nf 736/676 2882/675 2916/5268\nf 2924/6183 2922/5274 2923/703\nf 746/704 2923/703 2922/5274\nf 745/700 2918/699 2928/5271\nf 2929/6184 2928/5271 2918/699\nf 749/712 2935/711 2934/5272\nf 2936/6185 2934/5272 2935/711\nf 2942/6186 2940/5273 2941/723\nf 753/724 2941/723 2940/5273\nf 752/721 2948/722 2947/6187\nf 2949/6188 2947/6187 2948/722\nf 2955/6189 2954/5275 2895/686\nf 739/685 2895/686 2954/5275\nf 755/729 2959/730 2958/6190\nf 2960/6191 2958/6190 2959/730\nf 2930/708 2965/6192 748/710\nf 2964/5276 748/710 2965/6192\nf 2971/736 2972/6193 758/738\nf 2970/5281 758/738 2972/6193\nf 2966/732 2977/6194 757/734\nf 2976/5278 757/734 2977/6194\nf 2983/744 2984/6195 761/746\nf 2982/5279 761/746 2984/6195\nf 2989/756 2990/6197 765/758\nf 2988/5280 765/758 2990/6197\nf 2997/6198 2995/6200 2996/751\nf 764/752 2996/751 2995/6200\nf 2943/718 3003/6202 751/717\nf 3002/5282 751/717 3003/6202\nf 767/761 3007/762 3006/5511\nf 3008/6203 3006/5511 3007/762\nf 3014/6204 3012/5285 3013/7229\nf 771/7070 3013/7229 3012/5285\nf 3021/6205 3019/5290 3020/767\nf 770/768 3020/767 3019/5290\nf 3027/6206 3026/5287 3015/763\nf 769/764 3015/763 3026/5287\nf 774/777 3033/778 3032/5288\nf 3034/6207 3032/5288 3033/778\nf 778/788 3039/787 3038/5289\nf 3040/6208 3038/5289 3039/787\nf 777/785 3046/786 3045/5318\nf 3047/6209 3045/5318 3046/786\nf 3054/6210 3052/5291 3053/7231\nf 781/7072 3053/7231 3052/5291\nf 3059/6211 3057/5316 3058/791\nf 780/792 3058/791 3057/5316\nf 3028/771 3065/6212 773/772\nf 3064/5293 773/772 3065/6212\nf 3071/801 3072/6213 784/799\nf 3070/5298 784/799 3072/6213\nf 3066/796 3077/6214 783/798\nf 3076/5295 783/798 3077/6214\nf 3083/808 3084/6215 787/810\nf 3082/5296 787/810 3084/6215\nf 3089/821 3090/6216 791/819\nf 3088/5297 791/819 3090/6216\nf 3096/816 3097/6217 790/818\nf 3095/5327 790/818 3097/6217\nf 776/781 3041/782 3102/5299\nf 3103/6218 3102/5299 3041/782\nf 3106/5325 793/825 3108/6219\nf 3107/826 3108/6219 793/825\nf 3078/804 3113/6220 786/806\nf 3112/5301 786/806 3113/6220\nf 3120/6221 3118/5306 3119/831\nf 796/832 3119/831 3118/5306\nf 3125/6222 3124/5303 3114/827\nf 795/828 3114/827 3124/5303\nf 3132/6223 3130/5304 3131/839\nf 799/840 3131/839 3130/5304\nf 3137/852 3138/6224 803/854\nf 3136/5305 803/854 3138/6224\nf 3144/848 3145/6225 802/850\nf 3143/5335 802/850 3145/6225\nf 3091/812 3151/6226 789/814\nf 3150/5307 789/814 3151/6226\nf 3155/856 3156/6227 805/858\nf 3154/5333 805/858 3156/6227\nf 3126/835 3161/6228 798/836\nf 3160/5309 798/836 3161/6228\nf 3167/864 3168/6229 808/866\nf 3166/5314 808/866 3168/6229\nf 3162/860 3173/6230 807/862\nf 3172/5311 807/862 3173/6230\nf 3179/872 3180/6231 811/874\nf 3178/5312 811/874 3180/6231\nf 3185/884 3186/6233 815/886\nf 3184/5313 815/886 3186/6233\nf 3192/880 3193/6234 814/882\nf 3191/5343 814/882 3193/6234\nf 3198/5315 801/846 3199/6236\nf 3139/844 3199/6236 801/846\nf 3202/5341 817/887 3204/6237\nf 3203/889 3204/6237 817/887\nf 3210/6238 3208/5317 3209/7232\nf 821/7073 3209/7232 3208/5317\nf 820/897 3216/898 3215/5323\nf 3217/6239 3215/5323 3216/898\nf 3223/6240 3222/5319 3211/894\nf 819/893 3211/894 3222/5319\nf 3230/6241 3228/5321 3229/903\nf 824/904 3229/903 3228/5321\nf 3236/6242 3234/5322 3235/918\nf 828/917 3235/918 3234/5322\nf 3243/6243 3241/5352 3242/911\nf 827/912 3242/911 3241/5352\nf 831/7074 3249/7233 3248/5324\nf 3250/6244 3248/5324 3249/7233\nf 830/921 3254/922 3253/5349\nf 3255/6245 3253/5349 3254/922\nf 3261/6326 3262/6246 835/1191\nf 3260/5326 835/1191 3262/6246\nf 3268/928 3269/6247 834/930\nf 3267/5331 834/930 3269/6247\nf 3263/924 3275/6248 833/926\nf 3274/5328 833/926 3275/6248\nf 3280/5329 838/935 3282/6249\nf 3281/937 3282/6249 838/935\nf 3286/5330 842/947 3288/6250\nf 3287/949 3288/6250 842/947\nf 3293/6251 841/943 3295/6252\nf 3294/945 3295/6252 841/943\nf 3301/6329 3302/6253 845/1200\nf 3300/5332 845/1200 3302/6253\nf 3305/6254 844/951 3307/6255\nf 3306/953 3307/6255 844/951\nf 3276/932 3313/6256 837/934\nf 3312/5334 837/934 3313/6256\nf 3319/961 3320/6257 848/959\nf 3318/5339 848/959 3320/6257\nf 3314/956 3325/6258 847/958\nf 3324/5336 847/958 3325/6258\nf 3331/968 3332/6259 851/970\nf 3330/5337 851/970 3332/6259\nf 3337/980 3338/6260 855/982\nf 3336/5338 855/982 3338/6260\nf 3345/6261 3343/6262 3344/975\nf 854/976 3344/975 3343/6262\nf 3350/5340 840/939 3351/6263\nf 3289/941 3351/6263 840/939\nf 3356/6264 3354/6265 3355/983\nf 857/984 3355/983 3354/6265\nf 3326/964 3361/6266 850/966\nf 3360/5342 850/966 3361/6266\nf 3367/992 3368/6267 860/994\nf 3366/5347 860/994 3368/6267\nf 3372/5344 859/987 3373/6268\nf 3362/989 3373/6268 859/987\nf 3378/5345 863/999 3380/6270\nf 3379/1001 3380/6270 863/999\nf 3385/1012 3386/6271 867/1014\nf 3384/5346 867/1014 3386/6271\nf 3391/5403 866/1010 3393/6273\nf 3392/1008 3393/6273 866/1010\nf 3339/972 3399/6274 853/974\nf 3398/5348 853/974 3399/6274\nf 3403/1016 3404/6275 869/1018\nf 3402/5401 869/1018 3404/6275\nf 873/7075 3409/7234 3408/5350\nf 3410/6276 3408/5350 3409/7234\nf 872/1025 3416/1026 3415/5356\nf 3417/6277 3415/5356 3416/1026\nf 3423/6278 3422/5353 3411/1022\nf 871/1021 3411/1022 3422/5353\nf 3430/6279 3428/5354 3429/1031\nf 876/1032 3429/1031 3428/5354\nf 3436/6280 3434/5355 3435/1043\nf 880/1044 3435/1043 3434/5355\nf 879/1040 3442/1039 3441/5379\nf 3443/6281 3441/5379 3442/1039\nf 883/7076 3449/7235 3448/5357\nf 3450/6282 3448/5357 3449/7235\nf 3455/6283 3453/5377 3454/1047\nf 882/1048 3454/1047 3453/5377\nf 3462/6284 3461/5360 3424/1027\nf 875/1028 3424/1027 3461/5360\nf 887/1057 3469/1058 3468/5366\nf 3470/6285 3468/5366 3469/1058\nf 3476/6286 3475/5363 3464/1051\nf 886/1052 3464/1051 3475/5363\nf 3483/1064 3484/6287 891/1066\nf 3482/5364 891/1066 3484/6287\nf 3490/6288 3488/5365 3489/1078\nf 895/1077 3489/1078 3488/5365\nf 3495/6289 894/1071 3497/6290\nf 3496/1073 3497/6290 894/1071\nf 878/1036 3437/1035 3502/5367\nf 3503/6291 3502/5367 3437/1035\nf 897/1081 3507/1082 3506/6292\nf 3508/6293 3506/6292 3507/1082\nf 3478/1060 3514/6294 890/1062\nf 3513/5370 890/1062 3514/6294\nf 3521/1088 3522/6295 901/1090\nf 3520/5375 901/1090 3522/6295\nf 3516/1084 3528/6296 900/1086\nf 3527/5372 900/1086 3528/6296\nf 3535/1096 3536/6298 905/1098\nf 3534/5373 905/1098 3536/6298\nf 3541/1109 3542/6299 909/1107\nf 3540/5374 909/1107 3542/6299\nf 3548/1104 3549/6301 908/1106\nf 3547/1140 908/1106 3549/6301\nf 3491/1068 3555/6302 893/1070\nf 3554/5376 893/1070 3555/6302\nf 3558/1133 911/1111 3560/6303\nf 3559/1113 3560/6303 911/1111\nf 3566/6304 3564/5378 3565/7236\nf 915/7081 3565/7236 3564/5378\nf 914/1120 3572/1119 3571/5383\nf 3573/6305 3571/5383 3572/1119\nf 913/1116 3567/1115 3578/5380\nf 3579/6306 3578/5380 3567/1115\nf 917/1127 3583/1128 3582/5381\nf 3584/6307 3582/5381 3583/1128\nf 3589/1135 3590/6308 919/1137\nf 3588/5382 919/1137 3590/6308\nf 3593/1132 3594/6309 911/1111\nf 3561/1112 911/1111 3594/6309\nf 3599/7237 3600/6310 921/7082\nf 3598/5384 921/7082 3600/6310\nf 3603/1139 3604/6311 908/1106\nf 3550/1105 908/1106 3604/6311\nf 925/7083 3609/7238 3608/5386\nf 3610/6312 3608/5386 3609/7238\nf 3617/6313 3615/5391 3616/1145\nf 924/1146 3616/1145 3615/5391\nf 3611/1142 3623/6314 923/1144\nf 3622/5388 923/1144 3623/6314\nf 928/1155 3629/1156 3628/5389\nf 3630/6315 3628/5389 3629/1156\nf 932/1167 3635/1168 3634/5390\nf 3636/6316 3634/5390 3635/1168\nf 931/1163 3642/1164 3641/5411\nf 3643/6317 3641/5411 3642/1164\nf 935/7084 3649/7239 3648/5392\nf 3650/6318 3648/5392 3649/7239\nf 934/1170 3654/1169 3653/5409\nf 3655/6319 3653/5409 3654/1169\nf 3624/1150 3661/6320 927/1152\nf 3660/5394 927/1152 3661/6320\nf 3666/5399 938/1177 3668/6321\nf 3667/1179 3668/6321 938/1177\nf 3673/6322 3672/5396 3662/1174\nf 937/1176 3662/1174 3672/5396\nf 3678/6323 3676/5397 3677/1184\nf 940/1185 3677/1184 3676/5397\nf 3682/5398 942/1195 3684/6324\nf 3683/1197 3684/6324 942/1195\nf 3261/6326 835/1191 3688/6325\nf 3687/1193 3688/6325 835/1191\nf 930/1159 3637/1160 3692/5400\nf 3693/6327 3692/5400 3637/1160\nf 3697/6328 3301/6329 3696/1199\nf 845/1200 3696/1199 3301/6329\nf 3343/6262 3701/6330 854/976\nf 3700/5402 854/976 3701/6330\nf 3707/1208 3708/6331 946/1210\nf 3706/5407 946/1210 3708/6331\nf 3702/1204 3713/6332 945/1206\nf 3712/5404 945/1206 3713/6332\nf 3719/1216 3720/6334 949/1218\nf 3718/5405 949/1218 3720/6334\nf 3725/1228 3726/6335 953/1230\nf 3724/5406 953/1230 3726/6335\nf 3732/1224 3733/6336 952/1226\nf 3731/1260 952/1226 3733/6336\nf 3354/6265 3739/6338 857/984\nf 3738/5408 857/984 3739/6338\nf 3742/1253 955/1231 3744/6339\nf 3743/1233 3744/6339 955/1231\nf 3750/6340 3748/5410 3749/7240\nf 959/7085 3749/7240 3748/5410\nf 3756/1240 3757/6341 958/1242\nf 3755/5415 958/1242 3757/6341\nf 957/1237 3751/1238 3762/5412\nf 3763/6342 3762/5412 3751/1238\nf 961/1247 3767/1248 3766/5413\nf 3768/6343 3766/5413 3767/1248\nf 3773/1255 3774/6344 963/1257\nf 3772/5414 963/1257 3774/6344\nf 3777/1252 3778/6345 955/1231\nf 3745/1232 955/1231 3778/6345\nf 3783/7241 3784/6346 965/7086\nf 3782/5416 965/7086 3784/6346\nf 3734/1225 952/1226 3788/6347\nf 3787/1259 3788/6347 952/1226\nf 3795/6348 3793/5418 3794/7242\nf 970/7088 3794/7242 3793/5418\nf 3803/6351 3801/6352 3802/1265\nf 969/1266 3802/1265 3801/6352\nf 974/7089 3810/7243 3809/5419\nf 3811/6353 3809/5419 3810/7243\nf 3817/1274 3818/6354 968/1262\nf 3800/6349 968/1262 3818/6354\nf 3824/1479 3825/6356 977/1480\nf 3823/5421 977/1480 3825/6356\nf 3829/1278 3830/6357 973/1271\nf 3816/6355 973/1271 3830/6357\nf 3836/6358 3835/5423 2487/7244\nf 633/7091 2487/7244 3835/5423\nf 3844/6359 3842/5428 3843/1283\nf 981/1284 3843/1283 3842/5428\nf 3850/6360 3849/5425 3838/1279\nf 980/1280 3838/1279 3849/5425\nf 3858/6361 3856/5426 3857/1291\nf 985/1292 3857/1291 3856/5426\nf 3864/6362 3862/5427 3863/1303\nf 989/1304 3863/1303 3862/5427\nf 3871/6363 3869/6364 3870/1299\nf 988/1300 3870/1299 3869/6364\nf 3877/6365 3876/5429 2501/7245\nf 637/7092 2501/7245 3876/5429\nf 3882/6366 3880/6367 3881/1307\nf 991/1308 3881/1307 3880/6367\nf 3852/1287 3887/6368 984/1288\nf 3886/5430 984/1288 3887/6368\nf 994/1317 3893/1318 3892/5437\nf 3894/6369 3892/5437 3893/1318\nf 993/1311 3888/1313 3898/5433\nf 3899/6370 3898/5433 3888/1313\nf 996/1325 3903/1326 3902/5434\nf 3904/6371 3902/5434 3903/1326\nf 999/1337 3909/1338 3908/5436\nf 3910/6373 3908/5436 3909/1338\nf 998/1333 3914/1334 3913/6374\nf 3915/6375 3913/6374 3914/1334\nf 3921/6378 3920/5438 3865/1295\nf 987/1296 3865/1295 3920/5438\nf 1001/1340 3925/1339 3924/6379\nf 3926/6380 3924/6379 3925/1339\nf 3930/5439 1005/1543 3932/6381\nf 3931/1545 3932/6381 1005/1543\nf 3937/5444 1004/1347 3939/6382\nf 3938/1349 3939/6382 1004/1347\nf 3945/6383 3944/5441 3933/1343\nf 1003/1344 3933/1343 3944/5441\nf 1008/1356 3951/1355 3950/5442\nf 3952/6384 3950/5442 3951/1355\nf 3958/6385 3956/5443 3957/1368\nf 1012/1370 3957/1368 3956/5443\nf 3965/6386 3963/6387 3964/1366\nf 1011/1365 3964/1366 3963/6387\nf 3971/1552 3972/6388 1015/1554\nf 3970/5445 1015/1554 3972/6388\nf 3975/6389 1014/1371 3977/6390\nf 3976/1373 3977/6390 1014/1371\nf 3984/6391 3983/5447 3963/6387\nf 1011/1365 3963/6387 3983/5447\nf 3992/6392 3990/5453 3991/1379\nf 1019/1380 3991/1379 3990/5453\nf 1018/1377 3986/1378 3997/5450\nf 3998/6393 3997/5450 3986/1378\nf 4005/1388 4006/6394 1023/1390\nf 4004/5451 1023/1390 4006/6394\nf 4011/1401 4012/6395 1027/1399\nf 4010/5452 1027/1399 4012/6395\nf 4018/1396 4019/6396 1026/1398\nf 4017/1564 1026/1398 4019/6396\nf 3975/6389 4025/6398 1014/1371\nf 4024/5454 1014/1371 4025/6398\nf 4029/1404 4030/6399 1029/1406\nf 4028/1557 1029/1406 4030/6399\nf 4036/6400 4035/5456 2670/7246\nf 681/7093 2670/7246 4035/5456\nf 4044/6401 4042/5461 4043/1411\nf 1033/1412 4043/1411 4042/5461\nf 4050/6402 4049/5458 4038/1407\nf 1032/1408 4038/1407 4049/5458\nf 4058/6403 4056/5459 4057/1419\nf 1037/1420 4057/1419 4056/5459\nf 4064/6404 4062/5460 4063/1431\nf 1040/1432 4063/1431 4062/5460\nf 4070/6405 2299/6406 4069/1427\nf 582/1428 4069/1427 2299/6406\nf 4075/6407 4074/5462 2683/7247\nf 684/7094 2683/7247 4074/5462\nf 4079/6408 2284/6409 4078/1435\nf 577/1436 4078/1435 2284/6409\nf 2615/7250 4083/6410 667/7096\nf 4082/5465 667/7096 4083/6410\nf 1044/1446 4089/1444 4088/5471\nf 4090/6411 4088/5471 4089/1444\nf 4094/5468 1043/1439 4095/6412\nf 4084/1441 4095/6412 1043/1439\nf 4101/1453 4102/6413 1047/1451\nf 4100/5469 1047/1451 4102/6413\nf 4106/5470 1050/1465 4108/6414\nf 4107/1466 4108/6414 1050/1465\nf 4051/5457 1035/1459 4114/6415\nf 4113/1461 4114/6415 1035/1459\nf 2639/7252 4119/6416 672/7098\nf 4118/5472 672/7098 4119/6416\nf 1031/1469 4122/1470 4037/5455\nf 4123/6417 4037/5455 4122/1470\nf 4096/1448 4127/6418 1046/1450\nf 4126/5475 1046/1450 4127/6418\nf 4133/1476 4134/6419 1054/1478\nf 4132/5480 1054/1478 4134/6419\nf 4128/1472 4139/6420 1053/1474\nf 4138/5477 1053/1474 4139/6420\nf 4143/1484 4144/6421 1056/1486\nf 4142/5478 1056/1486 4144/6421\nf 4149/1496 4150/6422 1059/1498\nf 4148/5479 1059/1498 4150/6422\nf 4153/5494 1058/1491 4155/6424\nf 4154/1493 4155/6424 1058/1491\nf 4109/1456 4161/6425 1049/1458\nf 4160/5481 1049/1458 4161/6425\nf 4164/5491 1061/1502 4166/6426\nf 4165/1500 4166/6426 1061/1502\nf 4172/6427 4171/5484 4052/1415\nf 1036/1416 4052/1415 4171/5484\nf 4180/6428 4178/5489 4179/1507\nf 1065/1508 4179/1507 4178/5489\nf 4186/6429 4185/5486 4174/1503\nf 1064/1504 4174/1503 4185/5486\nf 4191/1515 4192/6430 1068/1516\nf 4190/5487 1068/1516 4192/6430\nf 4196/5488 1070/1528 4198/6432\nf 4197/1527 4198/6432 1070/1528\nf 4201/1524 4202/6433 597/1526\nf 2353/6435 597/1526 4202/6433\nf 4207/6437 4206/5490 4065/1423\nf 1039/1424 4065/1423 4206/5490\nf 4211/6439 2339/6438 4210/1531\nf 593/1532 4210/1531 2339/6438\nf 1075/7103 4215/7255 4214/5492\nf 4216/6440 4214/5492 4215/7255\nf 4221/5498 1074/1540 4223/6441\nf 4222/1539 4223/6441 1074/1540\nf 4228/5495 1073/1535 4229/6442\nf 4217/1537 4229/6442 1073/1535\nf 4233/1548 4234/6443 1077/1550\nf 4232/5496 1077/1550 4234/6443\nf 4239/1559 4240/6444 1079/1561\nf 4238/5497 1079/1561 4240/6444\nf 4243/1556 4244/6445 1029/1406\nf 4031/1405 1029/1406 4244/6445\nf 4249/4167 4250/6446 1081/7104\nf 4248/5499 1081/7104 4250/6446\nf 4253/1563 4254/6447 1026/1398\nf 4020/1397 1026/1398 4254/6447\nf 1007/1352 3946/1351 4258/5501\nf 4259/6448 4258/5501 3946/1351\nf 4266/6449 4264/5506 4265/1569\nf 1084/1570 4265/1569 4264/5506\nf 4271/6450 4270/5503 4260/1565\nf 1083/1566 4260/1565 4270/5503\nf 4277/1580 4278/6451 1087/1579\nf 4276/5504 1087/1579 4278/6451\nf 4284/6452 4282/5505 4283/1589\nf 1090/1590 4283/1589 4282/5505\nf 4290/6454 3999/5448 4289/1585\nf 1021/1586 4289/1585 3999/5448\nf 4295/6455 4294/5507 3959/1359\nf 1010/1360 3959/1359 4294/5507\nf 4299/6456 3985/5446 4298/1593\nf 1017/1594 4298/1593 3985/5446\nf 4302/5508 1086/1576 4303/6457\nf 4272/1574 4303/6457 1086/1576\nf 4308/6459 1094/1601 4310/6461\nf 4309/1603 4310/6461 1094/1601\nf 4255/4143 4315/6462 1081/7104\nf 4314/5509 1081/7104 4315/6462\nf 4321/6464 4307/6460 4320/1609\nf 1093/1597 4320/1609 4307/6460\nf 4324/5510 1022/1386 4325/6465\nf 4000/1384 4325/6465 1022/1386\nf 1096/1606 4328/1614 4319/6463\nf 4329/6466 4319/6463 4328/1614\nf 1101/7105 4333/7256 4332/5512\nf 4334/6467 4332/5512 4333/7256\nf 1100/1621 4340/1622 4339/6468\nf 4341/6469 4339/6468 4340/1622\nf 2995/6200 4348/6472 764/752\nf 4347/5513 764/752 4348/6472\nf 4354/1628 4355/6473 1099/1616\nf 4338/6471 1099/1616 4355/6473\nf 4361/6475 4359/5515 4360/7258\nf 1107/7108 4360/7258 4359/5515\nf 4366/6476 4353/6474 4365/1632\nf 1104/1626 4365/1632 4353/6474\nf 4370/5516 752/721 4371/6477\nf 2947/6187 4371/6477 752/721\nf 4377/1638 4378/6478 1110/1640\nf 4376/5521 1110/1640 4378/6478\nf 4372/1635 4383/6479 1109/1633\nf 4382/5518 1109/1633 4383/6479\nf 4389/1646 4390/6480 1113/1648\nf 4388/5519 1113/1648 4390/6480\nf 4395/1658 4396/6482 1117/1660\nf 4394/5520 1117/1660 4396/6482\nf 4402/1654 4403/6483 1116/1656\nf 4401/6485 1116/1656 4403/6483\nf 4408/5522 755/729 4409/6487\nf 2958/6190 4409/6487 755/729\nf 4413/1663 4414/6488 1119/1661\nf 4412/6489 1119/1661 4414/6488\nf 1123/7109 4419/7259 4418/5524\nf 4420/6490 4418/5524 4419/7259\nf 1122/1671 4426/1672 4425/5529\nf 4427/6491 4425/5529 4426/1672\nf 1121/1667 4421/1668 4432/5526\nf 4433/6492 4432/5526 4421/1668\nf 1125/1677 4437/1678 4436/5527\nf 4438/6493 4436/5527 4437/1678\nf 1128/1687 4443/1688 4442/5528\nf 4444/6494 4442/5528 4443/1688\nf 4448/1682 4449/6496 1127/1684\nf 4447/6495 1127/1684 4449/6496\nf 1131/7110 4455/4214 4454/5530\nf 4456/6497 4454/5530 4455/4214\nf 1130/1691 4460/1692 4459/6498\nf 4461/6499 4459/6498 4460/1692\nf 2849/6171 4467/6500 727/657\nf 4466/5531 727/657 4467/6500\nf 4474/6503 4472/6504 4473/1697\nf 1134/1698 4473/1697 4472/6504\nf 1131/7110 4463/4209 4479/5532\nf 4480/6505 4479/5532 4463/4209\nf 1133/1696 4486/1706 4471/6501\nf 4487/6506 4471/6501 4486/1706\nf 4491/7261 4492/6508 1139/7112\nf 4490/5534 1139/7112 4492/6508\nf 4495/1709 4496/6509 1137/1703\nf 4485/6507 1137/1703 4496/6509\nf 4501/7262 4502/6510 1143/7113\nf 4500/5535 1143/7113 4502/6510\nf 4509/6511 4507/5539 4508/1715\nf 1142/1716 4508/1715 4507/5539\nf 1141/1713 4503/1714 4514/5536\nf 4515/6512 4514/5536 4503/1714\nf 1146/1725 4521/1726 4520/5537\nf 4522/6513 4520/5537 4521/1726\nf 1150/1736 4527/1735 4526/5538\nf 4528/6514 4526/5538 4527/1735\nf 1149/1733 4534/1734 4533/5550\nf 4535/6515 4533/5550 4534/1734\nf 4542/6516 4540/5540 4541/7263\nf 1153/7114 4541/7263 4540/5540\nf 4547/6517 4545/5548 4546/1739\nf 1152/1740 4546/1739 4545/5548\nf 4553/6518 4552/5541 4516/1722\nf 1145/1721 4516/1722 4552/5541\nf 4560/6519 4558/5546 4559/1747\nf 1156/1748 4559/1747 4558/5546\nf 4565/6520 4564/5542 4554/1743\nf 1155/1744 4554/1743 4564/5542\nf 4572/6521 4570/5544 4571/1755\nf 1159/1756 4571/1755 4570/5544\nf 4578/6522 4576/5545 4577/1767\nf 1163/1768 4577/1767 4576/5545\nf 4585/6523 4583/5576 4584/1763\nf 1162/1764 4584/1763 4583/5576\nf 4591/6524 4590/5547 4529/1727\nf 1148/1728 4529/1727 4590/5547\nf 4596/6525 4594/5574 4595/1771\nf 1165/1772 4595/1771 4594/5574\nf 4601/7264 4602/6526 1169/7115\nf 4600/5549 1169/7115 4602/6526\nf 4608/1780 4609/6527 1168/1782\nf 4607/5554 1168/1782 4609/6527\nf 4603/1776 4615/6528 1167/1778\nf 4614/5551 1167/1778 4615/6528\nf 4621/1788 4622/6529 1172/1790\nf 4620/5552 1172/1790 4622/6529\nf 4627/1800 4628/6530 1176/1802\nf 4626/5553 1176/1802 4628/6530\nf 1175/1797 4634/1798 4633/5558\nf 4635/6531 4633/5558 4634/1798\nf 4641/7265 4642/6532 1179/7116\nf 4640/5555 1179/7116 4642/6532\nf 4646/1804 4647/6533 1178/1806\nf 4645/5556 1178/1806 4647/6533\nf 4653/7266 4654/6534 1183/7117\nf 4652/5557 1183/7117 4654/6534\nf 1182/1813 4660/1814 4659/5562\nf 4661/6535 4659/5562 4660/1814\nf 1181/1809 4655/1810 4666/5559\nf 4667/6536 4666/5559 4655/1810\nf 1186/1821 4673/1822 4672/5560\nf 4674/6537 4672/5560 4673/1822\nf 1190/1833 4679/1834 4678/5561\nf 4680/6538 4678/5561 4679/1834\nf 1189/1830 4686/1828 4685/5586\nf 4687/6539 4685/5586 4686/1828\nf 4693/7267 4694/6540 1193/7118\nf 4692/5563 1193/7118 4694/6540\nf 4698/1836 4699/6541 1192/1838\nf 4697/5584 1192/1838 4699/6541\nf 1185/1817 4668/1818 4705/5565\nf 4706/6542 4705/5565 4668/1818\nf 1197/1845 4713/1846 4712/5572\nf 4714/6543 4712/5572 4713/1846\nf 1196/1841 4708/1842 4719/5568\nf 4720/6544 4719/5568 4708/1842\nf 1201/1853 4727/1854 4726/5569\nf 4728/6545 4726/5569 4727/1854\nf 1205/1865 4733/1866 4732/5571\nf 4734/6547 4732/5571 4733/1866\nf 4740/1860 4741/6548 1204/1862\nf 4739/5594 1204/1862 4741/6548\nf 1188/1825 4681/1826 4746/5573\nf 4747/6550 4746/5573 4681/1826\nf 4751/1870 4752/6551 1207/1869\nf 4750/5592 1207/1869 4752/6551\nf 1171/1785 4616/1786 4756/5575\nf 4757/6552 4756/5575 4616/1786\nf 1210/1877 4763/1878 4762/5582\nf 4764/6553 4762/5582 4763/1878\nf 4769/6554 4768/5578 4758/1871\nf 1209/1872 4758/1871 4768/5578\nf 1213/1885 4775/1886 4774/5579\nf 4776/6555 4774/5579 4775/1886\nf 1216/1897 4781/1898 4780/5581\nf 4782/6557 4780/5581 4781/1898\nf 1199/1893 4787/1894 4721/5566\nf 4788/6558 4721/5566 4787/1894\nf 1174/1793 4629/1794 4792/5583\nf 4793/6560 4792/5583 4629/1794\nf 1195/1901 4796/1902 4707/5564\nf 4797/6561 4707/5564 4796/1902\nf 4801/7268 4802/6562 1221/7119\nf 4800/5585 1221/7119 4802/6562\nf 4808/1908 4809/6563 1220/1910\nf 4807/5590 1220/1910 4809/6563\nf 4803/1904 4815/6564 1219/1906\nf 4814/5587 1219/1906 4815/6564\nf 4821/1916 4822/6565 1224/1918\nf 4820/5588 1224/1918 4822/6565\nf 4827/1926 4828/6566 1227/1928\nf 4826/5589 1227/1928 4828/6566\nf 4833/1924 4834/6567 537/212\nf 2122/6026 537/212 4834/6567\nf 4839/7269 4840/6568 1229/7120\nf 4838/5591 1229/7120 4840/6568\nf 4843/1930 4844/6569 534/204\nf 2109/6023 534/204 4844/6569\nf 4816/1912 4849/6570 1223/1914\nf 4848/5593 1223/1914 4849/6570\nf 4855/1936 4856/6571 1232/1938\nf 4854/5599 1232/1938 4856/6571\nf 4850/1932 4861/6572 1231/1934\nf 4860/5596 1231/1934 4861/6572\nf 4867/1944 4868/6573 1235/1946\nf 4866/5597 1235/1946 4868/6573\nf 4873/1954 4874/6574 1238/1956\nf 4872/5598 1238/1956 4874/6574\nf 4879/1952 4880/6575 549/244\nf 2170/6036 549/244 4880/6575\nf 1226/1921 4829/1922 4884/5600\nf 4885/6576 4884/5600 4829/1922\nf 4888/1958 4889/6577 546/236\nf 2157/6033 546/236 4889/6577\nf 4862/1940 4893/6578 1234/1942\nf 4892/5601 1234/1942 4893/6578\nf 4899/1964 4900/6579 1242/1966\nf 4898/5605 1242/1966 4900/6579\nf 4904/5602 1241/1959 4905/6580\nf 4894/1961 4905/6580 1241/1959\nf 4911/1972 4912/6581 1245/1974\nf 4910/5603 1245/1974 4912/6581\nf 4916/5604 1248/1981 4918/6582\nf 4917/1983 4918/6582 1248/1981\nf 2218/6046 561/273 4924/6583\nf 4923/1979 4924/6583 561/273\nf 4875/1948 4929/6584 1237/1950\nf 4928/5606 1237/1950 4929/6584\nf 4932/1986 4933/6585 558/268\nf 2205/6042 558/268 4933/6585\nf 4906/1968 4937/6586 1244/1970\nf 4936/5607 1244/1970 4937/6586\nf 4944/6587 4942/5611 4943/1991\nf 1252/1992 4943/1991 4942/5611\nf 1251/1988 4938/1987 4948/5608\nf 4949/6588 4948/5608 4938/1987\nf 4954/6589 4952/5609 4953/2001\nf 1254/2000 4953/2001 4952/5609\nf 1256/2008 4959/2007 4958/5610\nf 4960/6590 4958/5610 4959/2007\nf 4964/6591 2266/6056 4963/2005\nf 573/307 4963/2005 2266/6056\nf 4919/1976 4969/6592 1247/1978\nf 4968/5612 1247/1978 4969/6592\nf 570/299 4972/2011 2253/6052\nf 4973/6593 2253/6052 4972/2011\nf 4979/6594 4977/5615 4978/7270\nf 1262/7122 4978/7270 4977/5615\nf 4987/6595 4985/5621 4986/2017\nf 1261/2018 4986/2017 4985/5621\nf 4981/2014 4994/6596 1260/2016\nf 4993/5618 1260/2016 4994/6596\nf 5001/2026 5002/6597 1266/2028\nf 5000/5619 1266/2028 5002/6597\nf 5007/2037 5008/6598 1270/2038\nf 5006/5620 1270/2038 5008/6598\nf 5014/2034 5015/6599 1269/2036\nf 5013/5625 1269/2036 5015/6599\nf 5022/6600 5020/5622 5021/7274\nf 1273/7124 5021/7274 5020/5622\nf 5027/6601 5025/5623 5026/2041\nf 1272/2042 5026/2041 5025/5623\nf 5034/6602 5032/5624 5033/7275\nf 1277/7125 5033/7275 5032/5624\nf 5040/2050 5041/6603 1276/2052\nf 5039/5629 1276/2052 5041/6603\nf 5035/2045 5047/6604 1275/2046\nf 5046/5626 1275/2046 5047/6604\nf 5053/2058 5054/6605 1280/2060\nf 5052/5627 1280/2060 5054/6605\nf 5059/2070 5060/6606 1284/2072\nf 5058/5628 1284/2072 5060/6606\nf 5066/2066 5067/6607 1283/2068\nf 5065/5650 1283/2068 5067/6607\nf 5073/7276 5074/6608 1287/7126\nf 5072/5630 1287/7126 5074/6608\nf 5078/2074 5079/6609 1286/2076\nf 5077/5648 1286/2076 5079/6609\nf 5048/2054 5086/6610 1279/2056\nf 5085/5632 1279/2056 5086/6610\nf 5094/6611 5092/5637 5093/2081\nf 1291/2082 5093/2081 5092/5637\nf 1290/2080 5088/2078 5099/5634\nf 5100/6612 5099/5634 5088/2078\nf 5108/6613 5106/5635 5107/2089\nf 1295/2090 5107/2089 5106/5635\nf 5114/6614 5112/5636 5113/2101\nf 1299/2102 5113/2101 5112/5636\nf 1298/2099 5120/2100 5119/5658\nf 5121/6615 5119/5658 5120/2100\nf 5127/6616 5126/5638 5061/2061\nf 1282/2062 5061/2061 5126/5638\nf 5132/6617 5130/5656 5131/2105\nf 1301/2106 5131/2105 5130/5656\nf 4996/2022 5138/6618 1265/2024\nf 5137/5641 1265/2024 5138/6618\nf 5145/2114 5146/6619 1305/2116\nf 5144/5646 1305/2116 5146/6619\nf 5140/2110 5152/6620 1304/2112\nf 5151/5643 1304/2112 5152/6620\nf 5159/2122 5160/6621 1309/2124\nf 5158/5644 1309/2124 5160/6621\nf 5165/2134 5166/6622 1312/2136\nf 5164/5645 1312/2136 5166/6622\nf 5171/2130 5172/6623 1293/2132\nf 5101/5633 1293/2132 5172/6623\nf 5009/2030 5177/6624 1268/2032\nf 5176/5647 1268/2032 5177/6624\nf 5180/2138 5181/6625 1289/2140\nf 5087/5631 1289/2140 5181/6625\nf 5185/7279 5186/6626 1317/7129\nf 5184/5649 1317/7129 5186/6626\nf 5192/2146 5193/6627 1316/2148\nf 5191/5654 1316/2148 5193/6627\nf 5187/2142 5199/6628 1315/2144\nf 5198/5651 1315/2144 5199/6628\nf 5205/2154 5206/6629 1320/2156\nf 5204/5652 1320/2156 5206/6629\nf 5211/2164 5212/6630 1323/2166\nf 5210/5653 1323/2166 5212/6630\nf 5217/2162 5218/6631 641/466\nf 2522/6098 641/466 5218/6631\nf 5223/7280 5224/6632 1325/7130\nf 5222/5655 1325/7130 5224/6632\nf 5227/2168 5228/6633 638/458\nf 2509/6095 638/458 5228/6633\nf 1319/2152 5200/2150 5232/5657\nf 5233/6634 5232/5657 5200/2150\nf 1328/2175 5239/2176 5238/5662\nf 5240/6635 5238/5662 5239/2176\nf 1327/2171 5234/2172 5244/5659\nf 5245/6636 5244/5659 5234/2172\nf 5251/2184 5252/6637 1331/2183\nf 5250/5660 1331/2183 5252/6637\nf 5257/2194 5258/6638 1334/2193\nf 5256/5661 1334/2193 5258/6638\nf 5263/2190 5264/6639 653/498\nf 2570/6108 653/498 5264/6639\nf 5213/2158 5269/6640 1322/2160\nf 5268/5663 1322/2160 5269/6640\nf 5272/2196 5273/6641 650/488\nf 2557/6105 650/488 5273/6641\nf 5277/5664 659/7045 5278/6642\nf 2587/7202 5278/6642 659/7045\nf 5284/6645 1339/2201 5286/6643\nf 5285/2203 5286/6643 1339/2201\nf 5293/6647 5291/5665 5292/4555\nf 1343/7133 5292/4555 5291/5665\nf 5300/6649 5283/6644 5299/2209\nf 1338/2200 5299/2209 5283/6644\nf 5306/4507 5307/6650 1347/7135\nf 5305/5667 1347/7135 5307/6650\nf 5313/2216 5314/6651 1342/2206\nf 5298/6648 1342/2206 5314/6651\nf 5320/6653 5318/5669 5319/7286\nf 1350/7137 5319/7286 5318/5669\nf 5326/6655 5312/6652 5325/2221\nf 1346/2214 5325/2221 5312/6652\nf 4845/7287 5331/6656 1229/7138\nf 5330/5670 1229/7138 5331/6656\nf 5334/2226 5335/6657 1349/2218\nf 5324/6654 1349/2218 5335/6657\nf 5289/7282 5340/6658 1341/7132\nf 5339/5671 1341/7132 5340/6658\nf 5347/2232 5348/6659 1355/2234\nf 5346/5676 1355/2234 5348/6659\nf 5342/2228 5354/6660 1354/2230\nf 5353/5672 1354/2230 5354/6660\nf 5361/2240 5362/6661 1359/2242\nf 5360/5673 1359/2242 5362/6661\nf 5367/2252 5368/6663 1363/2254\nf 5366/5675 1363/2254 5368/6663\nf 5374/2248 5375/6664 1362/2250\nf 5373/6666 1362/2250 5375/6664\nf 5315/4484 5381/6668 1347/7135\nf 5380/5677 1347/7135 5381/6668\nf 5385/2256 5386/6669 1365/2258\nf 5384/6670 1365/2258 5386/6669\nf 5391/6671 5390/5678 4975/7290\nf 1259/7141 4975/7290 5390/5678\nf 5398/6672 5396/5682 5397/2263\nf 1368/2264 5397/2263 5396/5682\nf 5403/6673 5402/5679 5392/2259\nf 1367/2260 5392/2259 5402/5679\nf 5410/6674 5408/5680 5409/2271\nf 1371/2272 5409/2271 5408/5680\nf 5416/6675 5414/5681 5415/2283\nf 1375/2284 5415/2283 5414/5681\nf 5422/2280 5423/6676 1374/2282\nf 5421/6677 1374/2282 5423/6676\nf 5429/6678 5428/5683 4991/7291\nf 1264/7142 4991/7291 5428/5683\nf 5433/2288 5434/6679 1377/2290\nf 5432/5690 1377/2290 5434/6679\nf 5440/6680 5439/5684 5421/6677\nf 1374/2282 5421/6677 5439/5684\nf 5448/6683 5446/6684 5447/2295\nf 1381/2296 5447/2295 5446/6684\nf 5453/4602 5454/6685 1384/7144\nf 5452/5685 1384/7144 5454/6685\nf 5459/2304 5460/6687 1380/2292\nf 5445/6681 1380/2292 5460/6687\nf 2789/7222 5466/6688 712/7063\nf 5465/5687 712/7063 5466/6688\nf 5472/2309 5473/6689 1383/2302\nf 5458/6686 1383/2302 5473/6689\nf 5478/6691 5476/5689 5477/7296\nf 1390/7147 5477/7296 5476/5689\nf 5484/6693 5471/6690 5483/2315\nf 1387/2308 5483/2315 5471/6690\nf 5488/5691 1303/7148 5489/6694\nf 5135/7297 5489/6694 1303/7148\nf 5492/2320 5493/6695 1389/2312\nf 5482/6692 1389/2312 5493/6695\nf 1337/7131 5275/7281 5496/5692\nf 5497/6696 5496/5692 5275/7281\nf 5503/2328 5504/6697 1394/2327\nf 5502/5696 1394/2327 5504/6697\nf 5498/2322 5509/6698 1393/2324\nf 5508/5693 1393/2324 5509/6698\nf 5515/2334 5516/6699 1397/2336\nf 5514/5694 1397/2336 5516/6699\nf 5522/6700 5520/5695 5521/2346\nf 1401/2348 5521/2346 5520/5695\nf 5529/6702 5527/5701 5528/2341\nf 1400/2342 5528/2341 5527/5701\nf 5301/4480 5535/6703 1343/7133\nf 5534/5697 1343/7133 5535/6703\nf 5540/6704 5538/5698 5539/2350\nf 1403/2352 5539/2350 5538/5698\nf 5545/6705 5544/5699 5337/7288\nf 1353/7139 5337/7288 5544/5699\nf 5552/6706 5550/5705 5551/2357\nf 1406/2358 5551/2357 5550/5705\nf 5557/6707 5556/5702 5546/2353\nf 1405/2354 5546/2353 5556/5702\nf 5564/6708 5562/5703 5563/2365\nf 1409/2366 5563/2365 5562/5703\nf 5570/6709 5568/5704 5569/2377\nf 1413/2378 5569/2377 5568/5704\nf 5577/6710 5575/5709 5576/2373\nf 1412/2374 5576/2373 5575/5709\nf 5583/6711 5582/5706 5351/7289\nf 1357/7140 5351/7289 5582/5706\nf 5588/6712 5586/5707 5587/2381\nf 1415/2382 5587/2381 5586/5707\nf 5593/6713 5592/5708 5404/2267\nf 1370/2268 5404/2267 5592/5708\nf 5600/6714 5598/5714 5599/2389\nf 1418/2390 5599/2389 5598/5714\nf 5605/6715 5604/5710 5594/2385\nf 1417/2386 5594/2385 5604/5710\nf 5612/6717 5610/5712 5611/2397\nf 1421/2398 5611/2397 5610/5712\nf 5618/6718 5616/5713 5617/2409\nf 1425/2410 5617/2409 5616/5713\nf 5625/6720 5623/5719 5624/2405\nf 1424/2406 5624/2405 5623/5719\nf 5631/6721 5630/5715 5417/2275\nf 1373/2276 5417/2275 5630/5715\nf 5635/2414 5636/6722 1427/2416\nf 5634/5716 1427/2416 5636/6722\nf 5640/5717 1379/7143 5641/6723\nf 5437/7292 5641/6723 1379/7143\nf 5647/2422 5648/6724 1430/2424\nf 5646/5723 1430/2424 5648/6724\nf 5642/2418 5653/6725 1429/2420\nf 5652/5720 1429/2420 5653/6725\nf 5659/2430 5660/6726 1433/2432\nf 5658/5721 1433/2432 5660/6726\nf 5665/2440 5666/6727 1436/2442\nf 5664/5722 1436/2442 5666/6727\nf 5671/2438 5672/6728 763/750\nf 2994/6199 763/750 5672/6728\nf 5461/4529 5677/6730 1384/7144\nf 5676/5724 1384/7144 5677/6730\nf 5680/2444 5681/6731 760/742\nf 2981/6196 760/742 5681/6731\nf 5685/6732 5684/5725 5463/7298\nf 1386/7149 5463/7298 5684/5725\nf 1440/2451 5691/2452 5690/5729\nf 5692/6733 5690/5729 5691/2452\nf 1439/2447 5686/2448 5696/5726\nf 5697/6734 5696/5726 5686/2448\nf 5704/6735 5702/5727 5703/2460\nf 1443/2459 5703/2460 5702/5727\nf 5710/6736 5708/5728 5709/2469\nf 1447/2470 5709/2469 5708/5728\nf 5717/6737 5715/5733 5716/2465\nf 1446/2466 5716/2465 5715/5733\nf 1390/7150 5485/7299 5722/5730\nf 5723/6738 5722/5730 5485/7299\nf 1449/2475 5727/2476 5726/5731\nf 5728/6739 5726/5731 5727/2476\nf 5154/2118 5733/6740 1308/2120\nf 5732/5732 1308/2120 5733/6740\nf 5739/2482 5740/6741 1452/2484\nf 5738/5737 1452/2484 5740/6741\nf 5744/5734 1451/2477 5745/6742\nf 5734/2479 5745/6742 1451/2477\nf 5750/5735 1455/2489 5752/6743\nf 5751/2491 5752/6743 1455/2489\nf 5757/2502 5758/6744 1459/2504\nf 5756/5736 1459/2504 5758/6744\nf 5764/2498 5765/6745 1458/2500\nf 5763/5741 1458/2500 5765/6745\nf 5167/2126 5771/6746 1311/2128\nf 5770/5738 1311/2128 5771/6746\nf 5775/2506 5776/6747 1461/2508\nf 5774/5739 1461/2508 5776/6747\nf 1294/2087 5102/2088 5780/5740\nf 5781/6748 5780/5740 5102/2088\nf 1464/2515 5787/2516 5786/5745\nf 5788/6749 5786/5745 5787/2516\nf 5782/2512 5793/6750 1463/2511\nf 5792/5742 1463/2511 5793/6750\nf 5799/2522 5800/6751 1467/2524\nf 5798/5743 1467/2524 5800/6751\nf 1471/2535 5805/2536 5804/5744\nf 5806/6752 5804/5744 5805/2536\nf 5812/2530 5813/6753 1470/2532\nf 5811/5749 1470/2532 5813/6753\nf 1297/2095 5115/2096 5818/5746\nf 5819/6754 5818/5746 5115/2096\nf 1473/2539 5823/2540 5822/5747\nf 5824/6755 5822/5747 5823/2540\nf 5246/2180 5829/6756 1330/2179\nf 5828/5748 1330/2179 5829/6756\nf 5835/2546 5836/6757 1476/2548\nf 5834/5753 1476/2548 5836/6757\nf 5830/2542 5841/6758 1475/2544\nf 5840/5750 1475/2544 5841/6758\nf 5847/2554 5848/6759 1479/2556\nf 5846/5751 1479/2556 5848/6759\nf 5853/2564 5854/6760 1482/2566\nf 5852/5752 1482/2566 5854/6760\nf 5859/2562 5860/6761 813/878\nf 3190/6235 813/878 5860/6761\nf 5259/2186 5865/6762 1333/2188\nf 5864/5754 1333/2188 5865/6762\nf 5868/2568 5869/6763 810/870\nf 3177/6232 810/870 5869/6763\nf 1442/2455 5698/2456 5872/5755\nf 5873/6764 5872/5755 5698/2456\nf 5880/6765 5878/5759 5879/2573\nf 1486/2574 5879/2573 5878/5759\nf 5885/6766 5884/5756 5874/2569\nf 1485/2570 5874/2569 5884/5756\nf 5892/6767 5890/5757 5891/2581\nf 1489/2582 5891/2581 5890/5757\nf 1493/2595 5897/2596 5896/5758\nf 5898/6768 5896/5758 5897/2596\nf 1492/2591 5904/2592 5903/5763\nf 5905/6769 5903/5763 5904/2592\nf 5911/6770 5910/5760 5711/2461\nf 1445/2462 5711/2461 5910/5760\nf 1495/2598 5915/2597 5914/5761\nf 5916/6771 5914/5761 5915/2597\nf 5921/7300 5922/6772 1499/7151\nf 5920/5762 1499/7151 5922/6772\nf 5928/2606 5929/6773 1498/2608\nf 5927/5767 1498/2608 5929/6773\nf 5935/6774 5934/5764 5923/2601\nf 1497/2602 5923/2601 5934/5764\nf 5942/6775 5940/5765 5941/2614\nf 1502/2616 5941/2614 5940/5765\nf 5947/2626 5948/6776 1506/2628\nf 5946/5766 1506/2628 5948/6776\nf 5953/2840 1505/2621 5955/6777\nf 5954/2623 5955/6777 1505/2621\nf 5962/6778 5960/5768 5961/7301\nf 1509/7152 5961/7301 5960/5768\nf 1508/2631 5966/2632 5965/2833\nf 5967/6779 5965/2833 5966/2632\nf 5794/2518 5974/6780 1466/2520\nf 5973/5770 1466/2520 5974/6780\nf 5981/2638 5982/6781 1513/2640\nf 5980/5777 1513/2640 5982/6781\nf 5987/5773 1512/2633 5988/6782\nf 5976/2635 5988/6782 1512/2633\nf 1517/2648 5995/2646 5994/5774\nf 5996/6783 5994/5774 5995/2646\nf 6001/2658 6002/6785 1521/2660\nf 6000/5776 1521/2660 6002/6785\nf 6008/2654 6009/6786 1520/2656\nf 6007/5781 1520/2656 6009/6786\nf 5807/2526 6015/6788 1469/2528\nf 6014/5778 1469/2528 6015/6788\nf 6019/2662 6020/6789 1523/2664\nf 6018/5779 1523/2664 6020/6789\nf 6024/5780 1478/2549 6025/6790\nf 5842/2551 6025/6790 1478/2549\nf 6031/2671 6032/6791 1526/2669\nf 6030/5786 1526/2669 6032/6791\nf 6026/2666 6037/6792 1525/2668\nf 6036/5783 1525/2668 6037/6792\nf 6043/2678 6044/6793 1529/2680\nf 6042/5784 1529/2680 6044/6793\nf 6048/5785 1532/2687 6050/6794\nf 6049/2689 6050/6794 1532/2687\nf 3390/6272 865/1003 6056/6795\nf 6055/2685 6056/6795 865/1003\nf 5855/2558 6061/6796 1481/2560\nf 6060/5787 1481/2560 6061/6796\nf 6064/2692 6065/6797 862/998\nf 3377/6269 862/998 6065/6797\nf 6069/6798 6068/5788 5886/2577\nf 1488/2578 5886/2577 6068/5788\nf 6076/6799 6074/5792 6075/2697\nf 1536/2698 6075/2697 6074/5792\nf 6081/6800 6080/5789 6070/2693\nf 1535/2694 6070/2693 6080/5789\nf 1539/2707 6087/2708 6086/5790\nf 6088/6801 6086/5790 6087/2708\nf 1543/2719 6093/2720 6092/5791\nf 6094/6802 6092/5791 6093/2720\nf 6101/6803 6099/5796 6100/2716\nf 1542/2715 6100/2716 6099/5796\nf 1491/2587 5899/2588 6106/5793\nf 6107/6804 6106/5793 5899/2588\nf 1545/2723 6111/2724 6110/5794\nf 6112/6805 6110/5794 6111/2724\nf 1501/2611 5936/2612 6116/5795\nf 6117/6806 6116/5795 5936/2612\nf 1548/2731 6123/2732 6122/5800\nf 6124/6807 6122/5800 6123/2732\nf 6129/6808 6128/5797 6118/2725\nf 1547/2726 6118/2725 6128/5797\nf 6136/6810 6134/5798 6135/2737\nf 1551/2738 6135/2737 6134/5798\nf 6141/2750 6142/6811 1555/2752\nf 6140/5799 1555/2752 6142/6811\nf 6147/5805 1554/2748 6149/6813\nf 6148/2746 6149/6813 1554/2748\nf 5949/2618 6155/6814 1504/2620\nf 6154/5801 1504/2620 6155/6814\nf 6159/2754 6160/6815 1557/2756\nf 6158/5802 1557/2756 6160/6815\nf 6164/5803 1561/7153 6166/6816\nf 6165/4808 6166/6816 1561/7153\nf 6172/2762 6173/6817 1560/2764\nf 6171/5810 1560/2764 6173/6817\nf 6178/5806 1559/2760 6179/6818\nf 6167/2758 6179/6818 1559/2760\nf 6184/5808 1564/2769 6186/6819\nf 6185/2771 6186/6819 1564/2769\nf 6191/2780 6192/6820 1567/2782\nf 6190/5809 1567/2782 6192/6820\nf 3546/6300 907/1099 6198/6821\nf 6197/2777 6198/6821 907/1099\nf 6203/4798 6204/6822 1569/7154\nf 6202/5811 1569/7154 6204/6822\nf 3533/6297 904/1091 6208/6823\nf 6207/2783 6208/6823 904/1091\nf 6213/6824 6212/5812 6082/2704\nf 1538/2703 6082/2704 6212/5812\nf 6220/6825 6218/5816 6219/2792\nf 1572/2791 6219/2792 6218/5816\nf 6225/6826 6224/5813 6214/2785\nf 1571/2786 6214/2785 6224/5813\nf 6229/2797 6230/6827 1574/2799\nf 6228/5814 1574/2799 6230/6827\nf 6235/2805 6236/6828 1576/2806\nf 6234/5815 1576/2806 6236/6828\nf 6239/2804 6240/6829 1553/2741\nf 6146/6812 1553/2741 6240/6829\nf 1541/2711 6095/2712 6244/5817\nf 6245/6830 6244/5817 6095/2712\nf 6248/2810 6249/6831 1550/2734\nf 6133/6809 1550/2734 6249/6831\nf 6209/4779 6253/6832 1569/7154\nf 6252/5818 1569/7154 6253/6832\nf 6260/6833 6258/5822 6259/2816\nf 1580/2818 6259/2816 6258/5822\nf 6265/6834 6264/5819 6254/2811\nf 1579/2812 6254/2811 6264/5819\nf 6272/6835 6270/5820 6271/2823\nf 1583/2824 6271/2823 6270/5820\nf 6278/6836 6276/5821 6277/2834\nf 1586/2835 6277/2834 6276/5821\nf 6284/6837 5968/2629 6283/2831\nf 1508/2631 6283/2831 5968/2629\nf 6175/4766 6289/6838 1561/7153\nf 6288/5823 1561/7153 6289/6838\nf 6292/2839 6293/6839 1505/2621\nf 5956/2622 1505/2621 6293/6839\nf 5746/2485 6297/6840 1454/2486\nf 6296/5824 1454/2486 6297/6840\nf 6303/2846 6304/6841 1590/2848\nf 6302/5828 1590/2848 6304/6841\nf 6298/2842 6309/6842 1589/2844\nf 6308/5825 1589/2844 6309/6842\nf 6314/5826 1593/2853 6316/6844\nf 6315/2855 6316/6844 1593/2853\nf 6320/5827 1596/2865 6322/6845\nf 6321/2867 6322/6845 1596/2865\nf 5989/5772 1515/2861 6328/6847\nf 6327/2863 6328/6847 1515/2861\nf 5759/2494 6333/6848 1457/2496\nf 6332/5829 1457/2496 6333/6848\nf 5975/5769 1511/2872 6337/6849\nf 6336/2870 6337/6849 1511/2872\nf 6038/2674 6341/6850 1528/2676\nf 6340/5830 1528/2676 6341/6850\nf 6347/2878 6348/6851 1600/2880\nf 6346/5835 1600/2880 6348/6851\nf 6342/2874 6353/6852 1599/2876\nf 6352/5831 1599/2876 6353/6852\nf 6359/2886 6360/6853 1603/2888\nf 6358/5832 1603/2888 6360/6853\nf 6365/2896 6366/6854 1606/2898\nf 6364/5834 1606/2898 6366/6854\nf 3730/6337 951/1219 6372/6855\nf 6371/2893 6372/6855 951/1219\nf 6051/2682 6377/6856 1531/2684\nf 6376/5836 1531/2684 6377/6856\nf 3717/6333 948/1211 6381/6857\nf 6380/2899 6381/6857 948/1211\nf 6385/6858 6384/5837 6266/2819\nf 1582/2820 6266/2819 6384/5837\nf 6392/6859 6390/5841 6391/2905\nf 1610/2906 6391/2905 6390/5841\nf 6386/2902 6397/6860 1609/2904\nf 6396/5838 1609/2904 6397/6860\nf 6401/2913 6402/6861 1612/2915\nf 6400/5839 1612/2915 6402/6861\nf 6408/6862 6406/5840 6407/2921\nf 1614/2922 6407/2921 6406/5840\nf 6412/6863 6326/6846 6411/2919\nf 1595/2857 6411/2919 6326/6846\nf 6417/6864 6416/5842 6279/2827\nf 1585/2828 6279/2827 6416/5842\nf 6421/6865 6313/6843 6420/2925\nf 1592/2849 6420/2925 6313/6843\nf 6427/6866 6425/5843 6426/4909\nf 1620/7156 6426/4909 6425/5843\nf 6435/6869 6433/6870 6434/2934\nf 1619/2933 6434/2934 6433/6870\nf 6442/4895 6443/6871 1624/7157\nf 6441/5845 1624/7157 6443/6871\nf 6449/2940 6450/6872 1618/2928\nf 6432/6867 1618/2928 6450/6872\nf 6457/6874 6455/5846 6456/6941\nf 1627/3157 6456/6941 6455/5846\nf 6462/6875 6448/6873 6461/2943\nf 1623/2938 6461/2943 6448/6873\nf 6468/6876 6466/5849 6467/6953\nf 1631/3192 6467/6953 6466/5849\nf 6475/6877 6473/5856 6474/2949\nf 1630/2950 6474/2949 6473/5856\nf 6481/6878 6480/5852 6469/2945\nf 1629/2946 6469/2945 6480/5852\nf 6486/6880 6484/5854 6485/2957\nf 1633/2958 6485/2957 6484/5854\nf 6492/6881 6490/5855 6491/2969\nf 1636/2970 6491/2969 6490/5855\nf 6497/6882 6495/5860 6496/2965\nf 1635/2966 6496/2965 6495/5860\nf 6504/6884 6502/5857 6503/6957\nf 1639/3197 6503/6957 6502/5857\nf 6509/6885 6507/5858 6508/2973\nf 1638/2974 6508/2973 6507/5858\nf 6423/7302 6515/6886 1617/7155\nf 6514/5859 1617/7155 6515/6886\nf 6522/6887 6520/5866 6521/2983\nf 1642/2981 6521/2983 6520/5866\nf 6527/6888 6526/5862 6516/2977\nf 1641/2978 6516/2977 6526/5862\nf 6532/6890 6530/5864 6531/2989\nf 1644/2990 6531/2989 6530/5864\nf 6538/6891 6536/5865 6537/3001\nf 1646/3002 6537/3001 6536/5865\nf 6542/6894 4501/6895 6541/2997\nf 1143/2998 6541/2997 4501/6895\nf 6546/5867 1624/7157 6547/6896\nf 6451/4862 6547/6896 1624/7157\nf 6550/3006 6551/6897 1153/3008\nf 4541/6898 1153/3008 6551/6897\nf 6555/5869 1626/7158 6556/6899\nf 6453/7303 6556/6899 1626/7158\nf 6563/3016 6564/6900 1651/3015\nf 6562/5876 1651/3015 6564/6900\nf 6569/5872 1650/3009 6570/6901\nf 6558/3011 6570/6901 1650/3009\nf 6577/3022 6578/6903 1655/3024\nf 6576/5874 1655/3024 6578/6903\nf 1659/3035 6583/3036 6582/5875\nf 6584/6904 6582/5875 6583/3036\nf 6591/6905 6589/5934 6590/3029\nf 1658/3030 6590/3029 6589/5934\nf 1620/7156 6437/4858 6596/5877\nf 6597/6907 6596/5877 6437/4858\nf 6602/6908 6600/5932 6601/3040\nf 1661/3039 6601/3040 6600/5932\nf 6608/6909 6606/5878 6607/3241\nf 1665/3239 6607/3241 6606/5878\nf 1664/3046 6614/3045 6613/5883\nf 6615/6910 6613/5883 6614/3045\nf 6620/5879 1663/3043 6621/6911\nf 6609/3044 6621/6911 1663/3043\nf 6627/3055 6628/6912 1668/3053\nf 6626/5880 1668/3053 6628/6912\nf 6634/6913 6632/5882 6633/3066\nf 1672/3068 6633/3066 6632/5882\nf 6641/6914 6639/6915 6640/3061\nf 1671/3062 6640/3061 6639/6915\nf 6648/6916 6646/5884 6647/3247\nf 1675/3248 6647/3247 6646/5884\nf 6652/3070 6653/6917 1674/3072\nf 6651/5943 1674/3072 6653/6917\nf 6660/6918 6658/5887 6659/3113\nf 1679/3114 6659/3113 6658/5887\nf 6667/6919 6665/5894 6666/3077\nf 1678/3078 6666/3077 6665/5894\nf 6673/6920 6672/5890 6661/3073\nf 1677/3074 6661/3073 6672/5890\nf 6678/6922 6676/5892 6677/3085\nf 1681/3086 6677/3085 6676/5892\nf 6684/6923 6682/5893 6683/3097\nf 1684/3098 6683/3097 6682/5893\nf 6689/6925 6687/5917 6688/3093\nf 1683/3094 6688/3093 6687/5917\nf 6696/6926 6694/5895 6695/3123\nf 1687/3121 6695/3123 6694/5895\nf 6701/6927 6699/5914 6700/3101\nf 1686/3102 6700/3101 6699/5914\nf 4701/7310 6707/6928 1193/7164\nf 6706/5898 1193/7164 6707/6928\nf 6714/6929 6712/5904 6713/3109\nf 1690/3110 6713/3109 6712/5904\nf 6708/3106 6719/6930 1689/3108\nf 6718/5901 1689/3108 6719/6930\nf 6724/6931 6722/5902 6723/3117\nf 1692/3118 6723/3117 6722/5902\nf 6728/5903 1695/3129 6730/6932\nf 6729/3131 6730/6932 1695/3129\nf 6734/3126 6735/6933 1694/3128\nf 6733/5908 1694/3128 6735/6933\nf 6741/6934 6740/5905 4663/7312\nf 1183/7166 4663/7312 6740/5905\nf 6745/3134 6746/6935 1697/3136\nf 6744/5906 1697/3136 6746/6935\nf 4649/7313 6751/6936 1179/7167\nf 6750/5907 1179/7167 6751/6936\nf 6757/3142 6758/6937 1700/3144\nf 6756/5912 1700/3144 6758/6937\nf 6752/3138 6763/6938 1699/3140\nf 6762/5909 1699/3140 6763/6938\nf 6769/3150 6770/6939 1703/3152\nf 6768/5910 1703/3152 6770/6939\nf 6775/3162 6776/6940 1706/3164\nf 6774/5911 1706/3164 6776/6940\nf 6456/6941 1627/3157 6782/6942\nf 6781/3159 6782/6942 1627/3157\nf 4611/7314 6787/6943 1169/7168\nf 6786/5913 1169/7168 6787/6943\nf 1622/3167 6790/3168 6444/5844\nf 6791/6944 6444/5844 6790/3168\nf 6796/6945 6794/5915 6795/5015\nf 1711/7169 6795/5015 6794/5915\nf 6803/6946 6801/5922 6802/3173\nf 1710/3174 6802/3173 6801/5922\nf 6809/6947 6808/5918 6797/3169\nf 1709/3170 6797/3169 6808/5918\nf 6814/6949 6812/5919 6813/3181\nf 1713/3182 6813/3181 6812/5919\nf 6818/5921 1715/3193 6820/6950\nf 6819/3195 6820/6950 1715/3193\nf 6823/3190 6824/6951 1631/3192\nf 6467/6953 1631/3192 6824/6951\nf 6830/6955 6828/5923 6829/5004\nf 1717/7170 6829/5004 6828/5923\nf 6833/3199 6834/6956 1639/3197\nf 6503/6957 1639/3197 6834/6956\nf 6840/6958 6839/5924 6764/3146\nf 1702/3148 6764/3146 6839/5924\nf 6846/5930 1721/3205 6848/6959\nf 6847/3207 6848/6959 1721/3205\nf 6853/5927 1720/3202 6854/6960\nf 6842/3201 6854/6960 1720/3202\nf 6859/3213 6860/6961 1724/3215\nf 6858/5928 1724/3215 6860/6961\nf 6865/3224 6866/6962 1726/3226\nf 6864/5929 1726/3226 6866/6962\nf 6869/3220 6870/6963 1653/3222\nf 6571/5870 1653/3222 6870/6963\nf 6874/5931 1705/3153 6875/6964\nf 6777/3155 6875/6964 1705/3153\nf 6557/5868 1649/3227 6879/6965\nf 6878/3229 6879/6965 1649/3227\nf 6835/4985 6883/6966 1717/7170\nf 6882/5933 1717/7170 6883/6966\nf 6890/6967 6888/5939 6889/3235\nf 1730/3236 6889/3235 6888/5939\nf 6895/6968 6894/5936 6884/3231\nf 1729/3232 6884/3231 6894/5936\nf 6900/6969 6898/5937 6899/3243\nf 1732/3244 6899/3243 6898/5937\nf 6906/6970 6904/5938 6905/3255\nf 1735/3256 6905/3255 6904/5938\nf 6911/6971 6909/6972 6910/3252\nf 1734/3254 6910/3252 6909/6972\nf 6917/6973 6916/5940 6805/4974\nf 1711/7169 6805/4974 6916/5940\nf 6921/3260 6922/6974 1737/3262\nf 6920/5941 1737/3262 6922/6974\nf 6926/5942 1719/7171 6927/6975\nf 6837/7315 6927/6975 1719/7171\nf 6932/6977 1740/3267 6934/6979\nf 6933/3269 6934/6979 1740/3267\nf 6909/6972 6939/6980 1734/3254\nf 6938/5944 1734/3254 6939/6980\nf 6945/6982 6931/6978 6944/3275\nf 1739/3263 6944/3275 6931/6978\nf 6948/5946 1671/3062 6949/6983\nf 6639/6915 6949/6983 1671/3062\nf 1742/3272 6952/3280 6943/6981\nf 6953/6984 6943/6981 6952/3280\nf 6958/6985 6957/5947 5654/2425\nf 1432/2426 5654/2425 6957/5947\nf 6966/6988 6964/6989 6965/3285\nf 1747/3286 6965/3285 6964/6989\nf 1750/7174 6971/5049 6970/5948\nf 6972/6990 6970/5948 6971/5049\nf 1746/3282 6977/3294 6963/6986\nf 6978/6991 6963/6986 6977/3294\nf 4345/7257 6983/6993 1103/7106\nf 6982/5949 1103/7106 6983/6993\nf 6986/3298 6987/6994 1749/3290\nf 6976/6992 1749/3290 6987/6994\nf 6990/5950 1745/7173 6991/6995\nf 6955/7316 6991/6995 1745/7173\nf 6997/3305 6998/6996 1754/3303\nf 6996/5954 1754/3303 6998/6996\nf 6992/3300 7003/6997 1753/3302\nf 7002/5951 1753/3302 7003/6997\nf 7009/3312 7010/6998 1757/3314\nf 7008/5952 1757/3314 7010/6998\nf 7015/3322 7016/7000 1760/3324\nf 7014/5953 1760/3324 7016/7000\nf 7021/3320 7022/7001 1115/1652\nf 4400/6484 1115/1652 7022/7001\nf 6979/5030 7027/7003 1750/7174\nf 7026/5955 1750/7174 7027/7003\nf 1112/1642 7030/3326 4387/6481\nf 7031/7004 4387/6481 7030/3326\nf 7036/7005 7035/5956 5558/2361\nf 1408/2362 5558/2361 7035/5956\nf 7044/7006 7042/5961 7043/3331\nf 1765/3332 7043/3331 7042/5961\nf 7050/7007 7049/5958 7038/3327\nf 1764/3328 7038/3327 7049/5958\nf 7056/7008 7054/5959 7055/3337\nf 1768/3338 7055/3337 7054/5959\nf 7062/7009 7060/5960 7061/3345\nf 1770/3346 7061/3345 7060/5960\nf 7066/7010 7020/7002 7065/3343\nf 1759/3318 7065/3343 7020/7002\nf 7071/7011 7070/5962 5571/2369\nf 1411/2370 5571/2369 7070/5962\nf 7075/7012 7007/6999 7074/3349\nf 1756/3307 7074/3349 7007/6999\nf 7078/5963 1763/7175 7079/7013\nf 7033/7317 7079/7013 1763/7175\nf 1774/3358 7085/3356 7084/7014\nf 7086/7015 7084/7014 7085/3356\nf 5510/2330 7091/7018 1396/2332\nf 7090/5964 1396/2332 7091/7018\nf 7096/3364 7097/7019 1773/3352\nf 7083/7017 1773/3352 7097/7019\nf 7101/7021 7100/5966 4477/7260\nf 1136/7111 4477/7260 7100/5966\nf 7105/7022 7095/7020 7104/3367\nf 1776/3359 7104/3367 7095/7020\nf 1779/7178 447/7023 1783/5967\nf 1780/3369 1783/5967 447/7023\nf 448/2 1788/3375 1786/4\nf 1791/5968 1786/4 1788/3375\nf 452/7025 1796/3373 1795/7180\nf 1798/5969 1795/7180 1796/3373\nf 453/10 1803/3403 1801/12\nf 1806/5970 1801/12 1803/3403\nf 454/14 1809/3377 1807/16\nf 1812/5971 1807/16 1809/3377\nf 456/18 1816/3415 1814/20\nf 1819/5972 1814/20 1816/3415\nf 449/6 1823/3381 1792/8\nf 1826/5973 1792/8 1823/3381\nf 458/26 1821/3379 1827/28\nf 1831/5974 1827/28 1821/3379\nf 460/30 1835/3385 1832/32\nf 1838/5975 1832/32 1835/3385\nf 463/34 1842/3391 1840/36\nf 1845/5976 1840/36 1842/3391\nf 457/22 1849/3389 1820/24\nf 1851/5977 1820/24 1849/3389\nf 467/42 1855/3451 1853/44\nf 1858/5978 1853/44 1855/3451\nf 468/46 1861/3393 1859/48\nf 1864/5979 1859/48 1861/3393\nf 470/50 1868/3463 1866/52\nf 1871/5980 1866/52 1868/3463\nf 464/38 1875/3397 1846/40\nf 1878/5981 1846/40 1875/3397\nf 472/58 1873/3395 1879/60\nf 1883/5982 1879/60 1873/3395\nf 1887/7184 477/7029 1890/5983\nf 1888/3401 1890/5983 477/7029\nf 1893/67 478/68 1898/5984\nf 1895/3407 1898/5984 478/68\nf 1901/7185 481/7030 1904/5985\nf 1902/3405 1904/5985 481/7030\nf 1907/75 482/76 1912/5986\nf 1909/3419 1912/5986 482/76\nf 1913/79 483/80 1918/5987\nf 1915/3409 1918/5987 483/80\nf 485/82 1922/3431 1920/84\nf 1925/5988 1920/84 1922/3431\nf 1899/71 479/72 1931/5989\nf 1929/3413 1931/5989 479/72\nf 1932/91 487/92 1936/5990\nf 1927/3411 1936/5990 487/92\nf 1939/7186 491/7031 1942/5991\nf 1940/3417 1942/5991 491/7031\nf 492/98 1947/3423 1945/100\nf 1950/5992 1945/100 1947/3423\nf 1953/7187 495/7032 1956/5993\nf 1954/3421 1956/5993 495/7032\nf 1959/107 496/108 1964/5994\nf 1961/3467 1964/5994 496/108\nf 497/110 1967/3425 1965/112\nf 1970/5995 1965/112 1967/3425\nf 499/116 1974/3479 1972/115\nf 1977/5996 1972/115 1974/3479\nf 493/102 1981/3429 1951/104\nf 1983/5997 1951/104 1981/3429\nf 501/122 1979/3427 1984/124\nf 1988/5998 1984/124 1979/3427\nf 503/126 1991/3433 1989/128\nf 1994/5999 1989/128 1991/3433\nf 505/130 1998/3439 1996/132\nf 2001/6000 1996/132 1998/3439\nf 500/118 2005/3437 1978/120\nf 2007/6001 1978/120 2005/3437\nf 2009/140 509/138 2014/6002\nf 2011/3483 2014/6002 509/138\nf 510/142 2017/3441 2015/144\nf 2020/6003 2015/144 2017/3441\nf 2022/147 512/148 2027/6004\nf 2024/3495 2027/6004 512/148\nf 506/134 2031/3445 2002/136\nf 2034/6006 2002/136 2031/3445\nf 514/154 2029/3443 2035/156\nf 2039/6007 2035/156 2029/3443\nf 489/94 2043/3449 1937/96\nf 2045/6009 1937/96 2043/3449\nf 519/162 2049/3455 2047/164\nf 2052/6010 2047/164 2049/3455\nf 486/86 2055/3453 1926/88\nf 2057/6011 1926/88 2055/3453\nf 507/170 2003/3435 2058/172\nf 2062/6012 2058/172 2003/3435\nf 522/174 2065/3457 2063/176\nf 2068/6013 2063/176 2065/3457\nf 517/178 2041/3447 2069/180\nf 2073/6014 2069/180 2041/3447\nf 520/166 2077/3461 2053/168\nf 2079/6016 2053/168 2077/3461\nf 525/186 2075/3459 2080/188\nf 2084/6017 2080/188 2075/3459\nf 2087/7188 529/7033 2090/6019\nf 2088/3465 2090/6019 529/7033\nf 2093/195 530/196 2098/6020\nf 2095/3471 2098/6020 530/196\nf 2101/7189 533/7034 2104/6021\nf 2102/3469 2104/6021 533/7034\nf 2107/203 534/204 2112/6022\nf 2109/6023 2112/6022 534/204\nf 2113/207 535/208 2118/6024\nf 2115/3473 2118/6024 535/208\nf 2120/211 537/212 2125/6025\nf 2122/6026 2125/6025 537/212\nf 2099/199 531/200 2131/6027\nf 2129/3477 2131/6027 531/200\nf 2132/219 539/220 2136/6028\nf 2127/3475 2136/6028 539/220\nf 2137/223 541/224 2141/6029\nf 2139/3481 2141/6029 541/224\nf 2143/227 543/228 2148/6030\nf 2145/3487 2148/6030 543/228\nf 538/214 2151/3485 2126/216\nf 2153/6031 2126/216 2151/3485\nf 2155/235 546/236 2160/6032\nf 2157/6033 2160/6032 546/236\nf 2161/239 547/240 2166/6034\nf 2163/3489 2166/6034 547/240\nf 2168/243 549/244 2173/6035\nf 2170/6036 2173/6035 549/244\nf 2149/231 544/232 2179/6037\nf 2177/3493 2179/6037 544/232\nf 2180/251 551/252 2184/6038\nf 2175/3491 2184/6038 551/252\nf 2185/255 553/256 2189/6039\nf 2187/3497 2189/6039 553/256\nf 2191/259 555/260 2196/6040\nf 2193/3502 2196/6040 555/260\nf 2174/247 550/248 2201/6041\nf 2199/3499 2201/6041 550/248\nf 2203/267 558/268 2208/6043\nf 2205/6042 2208/6043 558/268\nf 2211/3504 2214/6044 559/269\nf 2209/270 559/269 2214/6044\nf 2218/6046 2221/6045 561/273\nf 2216/274 561/273 2221/6045\nf 2225/3507 2227/6047 556/261\nf 2197/262 556/261 2227/6047\nf 2228/283 563/284 2232/6048\nf 2223/3505 2232/6048 563/284\nf 2233/287 565/288 2237/6049\nf 2235/3509 2237/6049 565/288\nf 2244/6050 2239/289 2241/3514\nf 567/291 2241/3514 2239/289\nf 2222/279 562/280 2249/6051\nf 2247/3512 2249/6051 562/280\nf 570/299 2253/6052 2251/297\nf 2256/6053 2251/297 2253/6052\nf 571/303 2259/3515 2257/301\nf 2262/6054 2257/301 2259/3515\nf 2268/6055 2264/305 2266/6056\nf 573/307 2266/6056 2264/305\nf 568/295 2271/3518 2245/293\nf 2273/6057 2245/293 2271/3518\nf 574/313 2269/3517 2274/315\nf 2277/6058 2274/315 2269/3517\nf 577/7035 2280/3520 2279/7190\nf 2283/6059 2279/7190 2280/3520\nf 578/320 2288/3526 2286/322\nf 2291/6060 2286/322 2288/3526\nf 582/7037 2296/3524 2295/7193\nf 2298/6061 2295/7193 2296/3524\nf 583/328 2303/3538 2301/330\nf 2306/6062 2301/330 2303/3538\nf 2307/334 584/332 2312/6063\nf 2309/3528 2312/6063 584/332\nf 2314/337 586/338 2319/6064\nf 2316/3550 2319/6064 586/338\nf 2292/325 579/326 2326/6065\nf 2323/3532 2326/6065 579/326\nf 2327/345 588/346 2331/6066\nf 2321/3530 2331/6066 588/346\nf 593/7039 2336/3536 2335/7195\nf 2338/6067 2335/7195 2336/3536\nf 2341/353 594/354 2346/6068\nf 2343/3542 2346/6068 594/354\nf 2349/7196 597/7040 2352/6069\nf 2350/3540 2352/6069 597/7040\nf 2355/361 598/362 2360/6070\nf 2357/3586 2360/6070 598/362\nf 2361/365 599/366 2366/6071\nf 2363/3544 2366/6071 599/366\nf 2368/369 601/370 2373/6072\nf 2370/3598 2373/6072 601/370\nf 2347/358 595/356 2379/6073\nf 2377/3548 2379/6073 595/356\nf 2380/377 603/378 2384/6074\nf 2375/3546 2384/6074 603/378\nf 2385/381 605/382 2390/6075\nf 2387/3552 2390/6075 605/382\nf 607/384 2394/3558 2392/386\nf 2397/6076 2392/386 2394/3558\nf 602/372 2401/3556 2374/374\nf 2403/6077 2374/374 2401/3556\nf 611/392 2407/3602 2405/394\nf 2410/6078 2405/394 2407/3602\nf 612/396 2413/3560 2411/398\nf 2416/6079 2411/398 2413/3560\nf 614/400 2420/3614 2418/402\nf 2423/6080 2418/402 2420/3614\nf 608/390 2427/3564 2398/389\nf 2430/6081 2398/389 2427/3564\nf 616/408 2425/3562 2431/410\nf 2435/6082 2431/410 2425/3562\nf 2332/349 590/350 2442/6083\nf 2439/3568 2442/6083 590/350\nf 2444/417 621/418 2449/6084\nf 2446/3574 2449/6084 621/418\nf 2320/341 587/342 2455/6085\nf 2453/3572 2455/6085 587/342\nf 2456/425 609/426 2460/6086\nf 2399/3554 2460/6086 609/426\nf 2461/429 625/430 2466/6087\nf 2463/3576 2466/6087 625/430\nf 2467/433 619/434 2471/6088\nf 2437/3566 2471/6088 619/434\nf 2450/421 622/422 2478/6089\nf 2475/3580 2478/6089 622/422\nf 2479/441 628/442 2483/6090\nf 2473/3578 2483/6090 628/442\nf 2487/7199 633/7043 2490/6091\nf 2488/3584 2490/6091 633/7043\nf 2493/449 634/450 2498/6092\nf 2495/3590 2498/6092 634/450\nf 2501/7200 637/7044 2504/6093\nf 2502/3588 2504/6093 637/7044\nf 2507/457 638/458 2512/6094\nf 2509/6095 2512/6094 638/458\nf 2513/461 639/462 2518/6096\nf 2515/3592 2518/6096 639/462\nf 2520/465 641/466 2525/6097\nf 2522/6098 2525/6097 641/466\nf 2499/453 635/454 2531/6099\nf 2529/3596 2531/6099 635/454\nf 2532/473 643/474 2536/6100\nf 2527/3594 2536/6100 643/474\nf 645/478 2539/3600 2537/477\nf 2541/6101 2537/477 2539/3600\nf 647/480 2545/3606 2543/482\nf 2548/6102 2543/482 2545/3606\nf 2526/469 642/470 2553/6103\nf 2551/3604 2553/6103 642/470\nf 2555/490 650/488 2560/6104\nf 2557/6105 2560/6104 650/488\nf 2561/494 651/492 2566/6106\nf 2563/3608 2566/6106 651/492\nf 2568/497 653/498 2573/6107\nf 2570/6108 2573/6107 653/498\nf 648/484 2577/3612 2549/486\nf 2579/6109 2549/486 2577/3612\nf 2580/506 655/504 2584/6110\nf 2575/3610 2584/6110 655/504\nf 659/7045 2588/3616 2587/7202\nf 2591/6111 2587/7202 2588/3616\nf 2596/6113 2599/6112 660/511\nf 2594/512 660/511 2599/6112\nf 2105/7205 533/7047 2606/6116\nf 2603/3620 2606/6116 533/7047\nf 2608/521 664/522 2612/6118\nf 2610/6117 2612/6118 664/522\nf 667/7049 2616/3624 2615/7207\nf 2618/6119 2615/7207 2616/3624\nf 668/526 2623/6120 2621/528\nf 2625/6121 2621/528 2623/6120\nf 2627/5227 670/7051 2631/6122\nf 2628/3628 2631/6122 670/7051\nf 2634/533 671/534 2638/6123\nf 2636/6124 2638/6123 671/534\nf 674/7053 2642/3632 2641/5254\nf 2645/6125 2641/5254 2642/3632\nf 661/518 2597/6114 2647/538\nf 2650/6126 2647/538 2597/6114\nf 2644/7211 675/7054 2656/6127\nf 2653/3636 2656/6127 675/7054\nf 2658/543 677/544 2663/6128\nf 2660/3642 2663/6128 677/544\nf 2632/5222 670/7051 2669/6129\nf 2667/3640 2669/6129 670/7051\nf 2671/551 681/552 2676/6130\nf 2673/6131 2676/6130 681/552\nf 2677/555 682/556 2682/6132\nf 2679/3644 2682/6132 682/556\nf 2684/559 684/560 2689/6133\nf 2686/6134 2689/6133 684/560\nf 2664/547 678/548 2696/6137\nf 2693/3648 2696/6137 678/548\nf 2697/567 686/568 2701/6138\nf 2691/3646 2701/6138 686/568\nf 2707/6140 2282/7214 2705/3653\nf 580/7057 2705/3653 2282/7214\nf 2714/6141 2709/573 2711/3657\nf 691/575 2711/3657 2709/573\nf 2719/6142 2325/7215 2717/3655\nf 591/7058 2717/3655 2325/7215\nf 2721/583 694/584 2726/6143\nf 2723/3670 2726/6143 694/584\nf 2732/6144 2727/585 2729/3658\nf 695/587 2729/3658 2727/585\nf 2734/591 697/592 2739/6145\nf 2736/6146 2739/6145 697/592\nf 2745/6147 2715/577 2743/3663\nf 692/579 2743/3663 2715/577\nf 2750/6148 2746/597 2741/3661\nf 699/599 2741/3661 2746/597\nf 2756/6149 2736/6146 2753/3665\nf 697/592 2753/3665 2736/6146\nf 2763/6151 2758/605 2760/6153\nf 703/607 2760/6153 2758/605\nf 2767/3668 2769/6154 623/7060\nf 2441/7217 623/7060 2769/6154\nf 2771/615 707/616 2775/6155\nf 2773/6156 2775/6155 707/616\nf 2780/6157 2777/7220 2778/3673\nf 709/7061 2778/3673 2777/7220\nf 710/621 2785/6158 2783/619\nf 2787/6159 2783/619 2785/6158\nf 2789/7222 712/7063 2793/6160\nf 2790/3676 2793/6160 712/7063\nf 2796/628 713/626 2800/6161\nf 2798/6162 2800/6161 713/626\nf 2803/5277 716/7065 2807/6163\nf 2804/3680 2807/6163 716/7065\nf 2809/632 704/611 2812/6164\nf 2761/6150 2812/6164 704/611\nf 662/7046 2815/3684 2590/7201\nf 2818/6165 2590/7201 2815/3684\nf 2820/638 719/636 2825/6166\nf 2822/3690 2825/6166 719/636\nf 2646/5224 674/7053 2831/6167\nf 2829/3688 2831/6167 674/7053\nf 2838/6168 2833/645 2835/3702\nf 723/646 2835/3702 2833/645\nf 2844/6169 2839/649 2841/3693\nf 724/650 2841/3693 2839/649\nf 726/652 2848/3714 2846/654\nf 2851/6170 2846/654 2848/3714\nf 2826/641 720/642 2858/6172\nf 2855/3696 2858/6172 720/642\nf 2859/661 728/662 2863/6173\nf 2853/3694 2863/6173 728/662\nf 679/7055 2867/3700 2655/7212\nf 2869/6174 2655/7212 2867/3700\nf 733/668 2873/3706 2871/670\nf 2876/6175 2871/670 2873/3706\nf 2881/6176 2695/7213 2879/3704\nf 689/7056 2879/3704 2695/7213\nf 736/676 2885/3718 2883/678\nf 2888/6177 2883/678 2885/3718\nf 737/680 2891/3708 2889/682\nf 2894/6178 2889/682 2891/3708\nf 2901/6179 2896/683 2898/3731\nf 739/685 2898/3731 2896/683\nf 734/672 2905/3712 2877/674\nf 2907/6180 2877/674 2905/3712\nf 741/692 2903/3711 2908/694\nf 2912/6181 2908/694 2903/3711\nf 701/602 2915/3716 2751/604\nf 2917/6182 2751/604 2915/3716\nf 745/700 2921/3722 2919/702\nf 2924/6183 2919/702 2921/3722\nf 2929/6184 2740/593 2927/3721\nf 698/595 2927/3721 2740/593\nf 2931/709 748/710 2936/6185\nf 2933/3734 2936/6185 748/710\nf 749/712 2939/3724 2937/714\nf 2942/6186 2937/714 2939/3724\nf 751/717 2946/3747 2944/715\nf 2949/6188 2944/715 2946/3747\nf 746/704 2953/3728 2925/706\nf 2955/6189 2925/706 2953/3728\nf 2960/6191 2956/726 2951/3727\nf 753/724 2951/3727 2956/726\nf 2963/3732 2965/6192 705/7059\nf 2755/7216 705/7059 2965/6192\nf 2967/733 757/734 2972/6193\nf 2969/3738 2972/6193 757/734\nf 2808/5251 716/7065 2977/6194\nf 2975/3736 2977/6194 716/7065\nf 2979/741 760/742 2984/6195\nf 2981/6196 2984/6195 760/742\nf 2985/745 761/746 2990/6197\nf 2987/3740 2990/6197 761/746\nf 2992/749 763/750 2997/6198\nf 2994/6199 2997/6198 763/750\nf 2973/737 758/738 3003/6202\nf 3001/3744 3003/6202 758/738\nf 3004/757 765/758 3008/6203\nf 2999/3742 3008/6203 765/758\nf 714/7069 3011/3748 2792/7227\nf 3014/6204 2792/7227 3011/3748\nf 769/764 3018/3754 3016/766\nf 3021/6205 3016/766 3018/3754\nf 709/7071 3025/3752 2781/7230\nf 3027/6206 2781/7230 3025/3752\nf 773/772 3031/3767 3029/774\nf 3034/6207 3029/774 3031/3767\nf 3040/6208 3035/775 3037/3757\nf 774/777 3037/3757 3035/775\nf 3047/6209 3042/779 3044/3779\nf 776/781 3044/3779 3042/779\nf 770/768 3051/3760 3022/770\nf 3054/6210 3022/770 3051/3760\nf 3059/6211 3055/790 3049/3759\nf 778/788 3049/3759 3055/790\nf 2484/445 630/446 3065/6212\nf 3063/3764 3065/6212 630/446\nf 3067/797 783/798 3072/6213\nf 3069/3770 3072/6213 783/798\nf 2472/437 627/438 3077/6214\nf 3075/3768 3077/6214 627/438\nf 3079/805 786/806 3084/6215\nf 3081/3782 3084/6215 786/806\nf 3085/809 787/810 3090/6216\nf 3087/3772 3090/6216 787/810\nf 3092/813 789/814 3097/6217\nf 3094/3794 3097/6217 789/814\nf 3101/3777 3103/6218 784/799\nf 3073/800 784/799 3103/6218\nf 3099/3775 3108/6219 791/819\nf 3104/820 791/819 3108/6219\nf 618/412 3111/3780 2436/414\nf 3113/6220 2436/414 3111/3780\nf 795/828 3117/3786 3115/830\nf 3120/6221 3115/830 3117/3786\nf 615/404 3123/3784 2424/406\nf 3125/6222 2424/406 3123/3784\nf 798/836 3129/3798 3127/838\nf 3132/6223 3127/838 3129/3798\nf 799/840 3135/3789 3133/842\nf 3138/6224 3133/842 3135/3789\nf 3140/845 801/846 3145/6225\nf 3142/3811 3145/6225 801/846\nf 3121/834 796/832 3151/6226\nf 3149/3792 3151/6226 796/832\nf 3152/853 803/854 3156/6227\nf 3147/3790 3156/6227 803/854\nf 2585/510 657/508 3161/6228\nf 3159/3796 3161/6228 657/508\nf 3163/861 807/862 3168/6229\nf 3165/3802 3168/6229 807/862\nf 2574/501 654/502 3173/6230\nf 3171/3800 3173/6230 654/502\nf 3175/869 810/870 3180/6231\nf 3177/6232 3180/6231 810/870\nf 3181/873 811/874 3186/6233\nf 3183/3804 3186/6233 811/874\nf 3188/877 813/878 3193/6234\nf 3190/6235 3193/6234 813/878\nf 3169/865 808/866 3199/6236\nf 3197/3808 3199/6236 808/866\nf 3200/885 815/886 3204/6237\nf 3195/3806 3204/6237 815/886\nf 780/792 3207/3813 3060/794\nf 3210/6238 3060/794 3207/3813\nf 3217/6239 3212/891 3214/3818\nf 819/893 3214/3818 3212/891\nf 3223/6240 3048/783 3221/3816\nf 777/785 3221/3816 3048/783\nf 823/901 3227/1188 3225/899\nf 3230/6241 3225/899 3227/1188\nf 824/904 3233/3820 3231/906\nf 3236/6242 3231/906 3233/3820\nf 826/908 3240/1183 3238/910\nf 3243/6243 3238/910 3240/1183\nf 3250/6244 3218/895 3247/3825\nf 820/897 3247/3825 3218/895\nf 3255/6245 3251/915 3245/3822\nf 828/917 3245/3822 3251/915\nf 3109/823 793/825 3262/6246\nf 3259/3828 3262/6246 793/825\nf 3264/925 833/926 3269/6247\nf 3266/3834 3269/6247 833/926\nf 3098/817 790/818 3275/6248\nf 3273/3831 3275/6248 790/818\nf 3279/3845 3282/6249 837/934\nf 3277/933 837/934 3282/6249\nf 3285/3836 3288/6250 838/935\nf 3283/936 838/935 3288/6250\nf 3292/3857 3295/6252 840/939\nf 3290/940 840/939 3295/6252\nf 3270/929 834/930 3302/6253\nf 3299/3840 3302/6253 834/930\nf 3297/3838 3307/6255 842/947\nf 3303/948 842/947 3307/6255\nf 3157/857 805/858 3313/6256\nf 3311/3842 3313/6256 805/858\nf 3315/957 847/958 3320/6257\nf 3317/3848 3320/6257 847/958\nf 3146/849 802/850 3325/6258\nf 3323/3846 3325/6258 802/850\nf 3327/965 850/966 3332/6259\nf 3329/3860 3332/6259 850/966\nf 3333/969 851/970 3338/6260\nf 3335/3851 3338/6260 851/970\nf 3340/973 853/974 3345/6261\nf 3342/3872 3345/6261 853/974\nf 3349/3854 3351/6263 848/959\nf 3321/960 848/959 3351/6263\nf 855/982 3347/3852 3352/981\nf 3356/6264 3352/981 3347/3852\nf 3359/3858 3361/6266 817/887\nf 3205/888 817/887 3361/6266\nf 3363/988 859/987 3368/6267\nf 3365/3864 3368/6267 859/987\nf 3194/881 814/882 3373/6268\nf 3371/3862 3373/6268 814/882\nf 3375/997 862/998 3380/6270\nf 3377/6269 3380/6270 862/998\nf 3383/3867 3386/6271 863/999\nf 3381/1000 863/999 3386/6271\nf 3390/6272 3393/6273 865/1003\nf 3388/1004 865/1003 3393/6273\nf 3369/993 860/994 3399/6274\nf 3397/3870 3399/6274 860/994\nf 3400/1013 867/1014 3404/6275\nf 3395/3868 3404/6275 867/1014\nf 3410/6276 3256/919 3407/3875\nf 830/921 3407/3875 3256/919\nf 3417/6277 3412/1019 3414/3880\nf 871/1021 3414/3880 3412/1019\nf 827/912 3421/3878 3244/914\nf 3423/6278 3244/914 3421/3878\nf 875/1028 3427/3892 3425/1030\nf 3430/6279 3425/1030 3427/3892\nf 876/1032 3433/3882 3431/1034\nf 3436/6280 3431/1034 3433/3882\nf 3443/6281 3438/1038 3440/3905\nf 878/1036 3440/3905 3438/1038\nf 3450/6282 3418/1023 3447/3886\nf 872/1025 3447/3886 3418/1023\nf 880/1044 3445/3884 3451/1046\nf 3455/6283 3451/1046 3445/3884\nf 885/7077 3460/3890 3459/5395\nf 3462/6284 3459/5395 3460/3890\nf 886/1052 3467/3896 3465/1054\nf 3470/6285 3465/1054 3467/3896\nf 3473/5393 889/7078 3476/6286\nf 3474/3894 3476/6286 889/7078\nf 3479/1061 890/1062 3484/6287\nf 3481/3908 3484/6287 890/1062\nf 3485/1065 891/1066 3490/6288\nf 3487/3898 3490/6288 891/1066\nf 3494/3921 3497/6290 893/1070\nf 3492/1069 893/1070 3497/6290\nf 3503/6291 3471/1055 3501/3903\nf 887/1057 3501/3903 3471/1055\nf 3508/6293 3504/1075 3499/3901\nf 895/1077 3499/3901 3504/1075\nf 3512/3906 3514/6294 899/7079\nf 3511/5387 899/7079 3514/6294\nf 3517/1085 900/1086 3522/6295\nf 3519/3912 3522/6295 900/1086\nf 3525/5385 903/7080 3528/6296\nf 3526/3910 3528/6296 903/7080\nf 3533/6297 3536/6298 904/1091\nf 3531/1092 904/1091 3536/6298\nf 3537/1097 905/1098 3542/6299\nf 3539/3914 3542/6299 905/1098\nf 3546/6300 3549/6301 907/1099\nf 3544/1100 907/1099 3549/6301\nf 3553/3919 3555/6302 901/1090\nf 3523/1089 901/1090 3555/6302\nf 3551/3917 3560/6303 909/1107\nf 3556/1108 909/1107 3560/6303\nf 882/1048 3563/3922 3456/1050\nf 3566/6304 3456/1050 3563/3922\nf 3573/6305 3568/1118 3570/3929\nf 913/1116 3570/3929 3568/1118\nf 879/1040 3577/3927 3444/1042\nf 3579/6306 3444/1042 3577/3927\nf 3580/1124 897/1081 3584/6307\nf 3506/6292 3584/6307 897/1081\nf 3585/1125 917/1127 3590/6308\nf 3587/3930 3590/6308 917/1127\nf 3591/1130 894/1071 3594/6309\nf 3495/6289 3594/6309 894/1071\nf 3600/6310 3574/1122 3597/3933\nf 914/1120 3597/3933 3574/1122\nf 3601/1136 919/1137 3604/6311\nf 3595/3932 3604/6311 919/1137\nf 3529/5371 903/7080 3610/6312\nf 3607/3937 3610/6312 903/7080\nf 3617/6313 3612/1143 3614/3944\nf 923/1144 3614/3944 3612/1143\nf 3515/5368 899/7079 3623/6314\nf 3621/3941 3623/6314 899/7079\nf 3625/1151 927/1152 3630/6315\nf 3627/3956 3630/6315 927/1152\nf 3636/6316 3631/1153 3633/3946\nf 928/1155 3633/3946 3631/1153\nf 3643/6317 3638/1157 3640/3966\nf 930/1159 3640/3966 3638/1157\nf 924/1146 3647/3950 3618/1148\nf 3650/6318 3618/1148 3647/3950\nf 3655/6319 3651/1165 3645/3948\nf 932/1167 3645/3948 3651/1165\nf 3477/5361 889/7078 3661/6320\nf 3659/3953 3661/6320 889/7078\nf 3663/1175 937/1176 3668/6321\nf 3665/3960 3668/6321 937/1176\nf 885/7077 3671/3958 3463/5359\nf 3673/6322 3463/5359 3671/3958\nf 3678/6323 3674/1181 3237/907\nf 826/908 3237/907 3674/1181\nf 940/1185 3681/3961 3679/1187\nf 3684/6324 3679/1187 3681/3961\nf 3224/902 3688/6325 823/901\nf 3685/1190 823/901 3688/6325\nf 3693/6327 3669/1178 3691/3964\nf 938/1177 3691/3964 3669/1178\nf 942/1195 3689/3963 3694/1196\nf 3697/6328 3694/1196 3689/3963\nf 3405/1017 869/1018 3701/6330\nf 3699/3967 3701/6330 869/1018\nf 3703/1205 945/1206 3708/6331\nf 3705/3971 3708/6331 945/1206\nf 3394/1009 866/1010 3713/6332\nf 3711/3970 3713/6332 866/1010\nf 3717/6333 3720/6334 948/1211\nf 3715/1212 948/1211 3720/6334\nf 3721/1217 949/1218 3726/6335\nf 3723/3973 3726/6335 949/1218\nf 3730/6337 3733/6336 951/1219\nf 3728/1220 951/1219 3733/6336\nf 3709/1209 946/1210 3739/6338\nf 3737/3977 3739/6338 946/1210\nf 3740/1229 953/1230 3744/6339\nf 3735/3975 3744/6339 953/1230\nf 934/1170 3747/3980 3656/1172\nf 3750/6340 3656/1172 3747/3980\nf 3757/6341 3752/1235 3754/3986\nf 957/1237 3754/3986 3752/1235\nf 3763/6342 3644/1161 3761/3984\nf 931/1163 3761/3984 3644/1161\nf 3768/6343 3764/1243 3305/6254\nf 844/951 3305/6254 3764/1243\nf 3774/6344 3769/1245 3771/3988\nf 961/1247 3771/3988 3769/1245\nf 3778/6345 3775/1249 3293/6251\nf 841/943 3293/6251 3775/1249\nf 3758/1241 958/1242 3784/6346\nf 3781/3990 3784/6346 958/1242\nf 3785/1256 963/1257 3788/6347\nf 3779/3989 3788/6347 963/1257\nf 967/7087 3792/3994 3791/5440\nf 3795/6348 3791/5440 3792/3994\nf 968/1262 3800/6349 3798/1264\nf 3803/6351 3798/1264 3800/6349\nf 3811/6353 3807/6423 3808/3999\nf 972/1487 3808/3999 3807/6423\nf 3818/6354 3814/1269 3816/6355\nf 973/1271 3816/6355 3814/1269\nf 3821/5432 976/7090 3825/6356\nf 3822/4002 3825/6356 976/7090\nf 3827/1276 969/1266 3830/6357\nf 3801/6352 3830/6357 969/1266\nf 979/1522 3834/4006 3833/6434\nf 3836/6358 3833/6434 3834/4006\nf 980/1280 3841/4012 3839/1282\nf 3844/6359 3839/1282 3841/4012\nf 983/1512 3848/4010 3847/6431\nf 3850/6360 3847/6431 3848/4010\nf 984/1288 3855/4024 3853/1290\nf 3858/6361 3853/1290 3855/4024\nf 985/1292 3861/4014 3859/1294\nf 3864/6362 3859/1294 3861/4014\nf 987/1296 3868/4036 3866/1298\nf 3871/6363 3866/1298 3868/4036\nf 981/1284 3875/4018 3845/1286\nf 3877/6365 3845/1286 3875/4018\nf 989/1304 3873/4016 3878/1306\nf 3882/6366 3878/1306 3873/4016\nf 3794/7242 970/7088 3887/6368\nf 3885/4022 3887/6368 970/7088\nf 3894/6369 3889/1312 3891/4029\nf 993/1311 3891/4029 3889/1312\nf 3897/4027 3899/6370 976/7090\nf 3826/5420 976/7090 3899/6370\nf 3900/1321 452/1322 3904/6371\nf 1795/6372 3904/6371 452/1322\nf 3910/6373 3905/1323 3907/4031\nf 996/1325 3907/4031 3905/1323\nf 3915/6375 3911/1327 1779/6377\nf 447/1329 1779/6377 3911/1327\nf 994/1317 3919/4035 3895/1315\nf 3921/6378 3895/1315 3919/4035\nf 3926/6380 3922/1335 3917/4033\nf 999/1337 3917/4033 3922/1335\nf 3929/4039 3932/6381 974/7089\nf 3810/7243 974/7089 3932/6381\nf 3934/1346 1003/1344 3939/6382\nf 3936/4044 3939/6382 1003/1344\nf 967/7087 3943/4042 3796/5417\nf 3945/6383 3796/5417 3943/4042\nf 3952/6384 3947/1354 3949/4147\nf 1007/1352 3949/4147 3947/1354\nf 1008/1356 3955/4046 3953/1358\nf 3958/6385 3953/1358 3955/4046\nf 1010/1360 3962/4159 3960/1362\nf 3965/6386 3960/1362 3962/4159\nf 3969/4050 3972/6388 1004/1347\nf 3940/1348 1004/1347 3972/6388\nf 3973/1369 1012/1370 3977/6390\nf 3967/4049 3977/6390 1012/1370\nf 1017/1594 3982/4054 3981/1596\nf 3984/6391 3981/1596 3982/4054\nf 1018/1377 3989/4059 3987/1375\nf 3992/6392 3987/1375 3989/4059\nf 3998/6393 3995/1588 3996/4056\nf 1021/1586 3996/4056 3995/1588\nf 4001/1385 1022/1386 4006/6394\nf 4003/4171 4006/6394 1022/1386\nf 4012/6395 4007/1389 4009/4061\nf 1023/1390 4009/4061 4007/1389\nf 4019/6396 4014/1391 4016/6397\nf 1025/1393 4016/6397 4014/1391\nf 4023/4065 4025/6398 1019/1380\nf 3993/1382 1019/1380 4025/6398\nf 4026/1400 1027/1399 4030/6399\nf 4021/4062 4030/6399 1027/1399\nf 1031/1469 4034/4066 4033/1467\nf 4036/6400 4033/1467 4034/4066\nf 1032/1408 4041/4072 4039/1410\nf 4044/6401 4039/1410 4041/4072\nf 1035/1459 4048/4070 4047/1460\nf 4050/6402 4047/1460 4048/4070\nf 1036/1416 4055/4116 4053/1418\nf 4058/6403 4053/1418 4055/4116\nf 1037/1420 4061/4074 4059/1422\nf 4064/6404 4059/1422 4061/4074\nf 1039/1424 4068/4128 4066/1426\nf 4070/6405 4066/1426 4068/4128\nf 1033/1412 4073/4078 4045/1414\nf 4075/6407 4045/1414 4073/4078\nf 1040/1432 4071/4076 4076/1434\nf 4079/6408 4076/1434 4071/4076\nf 1957/7249 495/7095 4083/6410\nf 4081/4083 4083/6410 495/7095\nf 4090/6411 4085/1440 4087/4089\nf 1043/1439 4087/4089 4085/1440\nf 4093/4086 4095/6412 491/7097\nf 1943/7251 491/7097 4095/6412\nf 4097/1449 1046/1450 4102/6413\nf 4099/4100 4102/6413 1046/1450\nf 4105/4090 4108/6414 1047/1451\nf 4103/1452 1047/1451 4108/6414\nf 4110/1457 1049/1458 4114/6415\nf 4112/4112 4114/6415 1049/1458\nf 4091/1445 1044/1446 4119/6416\nf 4117/4095 4119/6416 1044/1446\nf 4123/6417 4120/1463 4115/4093\nf 1050/1465 4115/4093 4120/1463\nf 1905/7253 481/7099 4127/6418\nf 4125/4098 4127/6418 481/7099\nf 4129/1473 1053/1474 4134/6419\nf 4131/4104 4134/6419 1053/1474\nf 1891/7254 477/7100 4139/6420\nf 4137/4102 4139/6420 477/7100\nf 977/1480 3831/4004 4140/1482\nf 4144/6421 4140/1482 3831/4004\nf 4145/1485 1056/1486 4150/6422\nf 4147/4107 4150/6422 1056/1486\nf 3807/6423 4155/6424 972/1487\nf 4151/1488 972/1487 4155/6424\nf 4135/1477 1054/1478 4161/6425\nf 4159/4110 4161/6425 1054/1478\nf 4162/1497 1059/1498 4166/6426\nf 4157/4109 4166/6426 1059/1498\nf 4172/6427 4169/5502 4170/4115\nf 1063/7101 4170/4115 4169/5502\nf 1064/1504 4177/4120 4175/1506\nf 4180/6428 4175/1506 4177/4120\nf 1067/7102 4184/4118 4183/5500\nf 4186/6429 4183/5500 4184/4118\nf 4188/1514 983/1512 4192/6430\nf 3847/6431 4192/6430 983/1512\nf 4195/4122 4198/6432 1068/1516\nf 4193/1518 1068/1516 4198/6432\nf 4199/1521 979/1522 4202/6433\nf 3833/6434 4202/6433 979/1522\nf 1065/1508 4205/4126 4181/1510\nf 4207/6437 4181/1510 4205/4126\nf 4211/6439 4208/1530 4203/4124\nf 1070/1528 4203/4124 4208/1530\nf 4216/6440 4167/1501 4213/4131\nf 1061/1502 4213/4131 4167/1501\nf 4220/4136 4223/6441 1073/1535\nf 4218/1536 1073/1535 4223/6441\nf 4227/4135 4229/6442 1058/1491\nf 4156/1492 1058/1491 4229/6442\nf 3941/4041 4234/6443 1005/1543\nf 4230/1544 1005/1543 4234/6443\nf 4235/1549 1077/1550 4240/6444\nf 4237/4138 4240/6444 1077/1550\nf 4241/1553 1015/1554 4244/6445\nf 3979/4052 4244/6445 1015/1554\nf 1074/1540 4247/4141 4224/1542\nf 4250/6446 4224/1542 4247/4141\nf 4251/1560 1079/1561 4254/6447\nf 4245/4140 4254/6447 1079/1561\nf 4187/5485 1067/7102 4259/6448\nf 4257/4146 4259/6448 1067/7102\nf 1083/1566 4263/4151 4261/1568\nf 4266/6449 4261/1568 4263/4151\nf 1063/7101 4269/4150 4173/5483\nf 4271/6450 4173/5483 4269/4150\nf 4273/1575 1086/1576 4278/6451\nf 4275/4163 4278/6451 1086/1576\nf 1087/1579 4281/4153 4279/1577\nf 4284/6452 4279/1577 4281/4153\nf 1089/1584 4288/6453 4286/1583\nf 4290/6454 4286/1583 4288/6453\nf 1084/1570 4293/4157 4267/1572\nf 4295/6455 4267/1572 4293/4157\nf 1090/1590 4291/4155 4296/1592\nf 4299/6456 4296/1592 4291/4155\nf 4301/4162 4303/6457 1075/7103\nf 4215/7255 1075/7103 4303/6457\nf 4307/6460 4310/6461 1093/1597\nf 4305/1598 1093/1597 4310/6461\nf 4313/4166 4315/6462 1025/1393\nf 4016/6397 1025/1393 4315/6462\nf 1096/1606 4319/6463 4317/1608\nf 4321/6464 4317/1608 4319/6463\nf 4288/6453 1089/1584 4325/6465\nf 4323/4168 4325/6465 1089/1584\nf 4329/6466 4326/1612 4308/6459\nf 1094/1601 4308/6459 4326/1612\nf 4334/6467 3009/759 4331/4173\nf 767/761 4331/4173 3009/759\nf 4341/6469 4336/1618 4338/6471\nf 1099/1616 4338/6471 4336/1618\nf 4345/7257 1103/7106 4348/6472\nf 4346/4176 4348/6472 1103/7106\nf 4351/1625 1104/1626 4355/6473\nf 4353/6474 4355/6473 1104/1626\nf 1106/7107 4358/4178 4357/5517\nf 4361/6475 4357/5517 4358/4178\nf 1100/1621 4339/6468 4363/1630\nf 4366/6476 4363/1630 4339/6468\nf 4369/4183 4371/6477 1101/7105\nf 4333/7256 1101/7105 4371/6477\nf 4373/1634 1109/1633 4378/6478\nf 4375/4186 4378/6478 1109/1633\nf 4362/5514 1106/7107 4383/6479\nf 4381/4184 4383/6479 1106/7107\nf 1112/1642 4387/6481 4385/1644\nf 4390/6480 4385/1644 4387/6481\nf 4391/1647 1113/1648 4396/6482\nf 4393/4188 4396/6482 1113/1648\nf 4398/1651 1115/1652 4403/6483\nf 4400/6484 4403/6483 1115/1652\nf 4379/1639 1110/1640 4409/6487\nf 4407/4192 4409/6487 1110/1640\nf 4410/1659 1117/1660 4414/6488\nf 4405/4190 4414/6488 1117/1660\nf 4420/6490 2913/698 4417/4195\nf 743/696 4417/4195 2913/698\nf 4427/6491 4422/1665 4424/4201\nf 1121/1667 4424/4201 4422/1665\nf 4433/6492 2902/687 4431/4199\nf 740/689 4431/4199 2902/687\nf 4438/6493 4434/1673 4412/6489\nf 1119/1661 4412/6489 4434/1673\nf 4444/6494 4439/1675 4441/4203\nf 1125/1677 4441/4203 4439/1675\nf 4449/6496 4445/1679 4401/6485\nf 1116/1656 4401/6485 4445/1679\nf 4456/6497 4428/1669 4453/4207\nf 1122/1671 4453/4207 4428/1669\nf 4461/6499 4457/1685 4451/4205\nf 1128/1687 4451/4205 4457/1685\nf 4465/4210 4467/6500 1123/7109\nf 4419/7259 1123/7109 4467/6500\nf 1133/1696 4471/6501 4469/1695\nf 4474/6503 4469/1695 4471/6501\nf 4480/6505 4477/7260 4478/4213\nf 1136/7111 4478/4213 4477/7260\nf 4487/6506 4483/1701 4485/6507\nf 1137/1703 4485/6507 4483/1701\nf 2864/665 730/666 4492/6508\nf 4489/4215 4492/6508 730/666\nf 4493/1708 1134/1698 4496/6509\nf 4472/6504 4496/6509 1134/1698\nf 1782/7179 450/7024 4502/6510\nf 4499/4219 4502/6510 450/7024\nf 4509/6511 4504/1711 4506/4226\nf 1141/1713 4506/4226 4504/1711\nf 4515/6512 1825/7181 4513/4224\nf 461/7026 4513/4224 1825/7181\nf 1145/1721 4519/4237 4517/1719\nf 4522/6513 4517/1719 4519/4237\nf 4528/6514 4523/1723 4525/4228\nf 1146/1725 4525/4228 4523/1723\nf 4535/6515 4530/1730 4532/4249\nf 1148/1728 4532/4249 4530/1730\nf 1142/1716 4539/4231 4510/1718\nf 4542/6516 4510/1718 4539/4231\nf 1150/1736 4537/4230 4543/1738\nf 4547/6517 4543/1738 4537/4230\nf 1837/7182 465/7027 4553/6518\nf 4551/4235 4553/6518 465/7027\nf 1155/1744 4557/4241 4555/1746\nf 4560/6519 4555/1746 4557/4241\nf 475/7028 4563/4239 1877/7183\nf 4565/6520 1877/7183 4563/4239\nf 1158/1752 4569/2002 4567/1754\nf 4572/6521 4567/1754 4569/2002\nf 1159/1756 4575/4243 4573/1758\nf 4578/6522 4573/1758 4575/4243\nf 1161/1760 4582/1995 4580/1762\nf 4585/6523 4580/1762 4582/1995\nf 1156/1748 4589/4247 4561/1750\nf 4591/6524 4561/1750 4589/4247\nf 1163/1768 4587/4245 4592/1770\nf 4596/6525 4592/1770 4587/4245\nf 1152/1740 4599/4251 4548/1742\nf 4602/6526 4548/1742 4599/4251\nf 4604/1777 1167/1778 4609/6527\nf 4606/4257 4609/6527 1167/1778\nf 4615/6528 4536/1731 4613/4256\nf 1149/1733 4613/4256 4536/1731\nf 4622/6529 4617/1783 4619/4302\nf 1171/1785 4619/4302 4617/1783\nf 4623/1789 1172/1790 4628/6530\nf 4625/4260 4628/6530 1172/1790\nf 4635/6531 4630/1791 4632/4314\nf 1174/1793 4632/4314 4630/1791\nf 4610/1781 1168/1782 4642/6532\nf 4639/4263 4642/6532 1168/1782\nf 4643/1801 1176/1802 4647/6533\nf 4637/4262 4647/6533 1176/1802\nf 4648/1805 1178/1806 4654/6534\nf 4651/4268 4654/6534 1178/1806\nf 4661/6535 4656/1807 4658/4274\nf 1181/1809 4658/4274 4656/1807\nf 4667/6536 4636/1795 4665/4272\nf 1175/1797 4665/4272 4636/1795\nf 4674/6537 4669/1815 4671/4286\nf 1185/1817 4671/4286 4669/1815\nf 4680/6538 4675/1819 4677/4276\nf 1186/1821 4677/4276 4675/1819\nf 4687/6539 4682/1823 4684/4298\nf 1188/1825 4684/4298 4682/1823\nf 4694/6540 4662/1811 4691/4279\nf 1182/1813 4691/4279 4662/1811\nf 4695/1831 1190/1833 4699/6541\nf 4689/4277 4699/6541 1190/1833\nf 4706/6542 4703/1899 4704/4284\nf 1195/1901 4704/4284 4703/1899\nf 4714/6543 4709/1839 4711/4290\nf 1196/1841 4711/4290 4709/1839\nf 4720/6544 4717/1891 4718/4288\nf 1199/1893 4718/4288 4717/1891\nf 4728/6545 4723/1847 4725/6546\nf 1200/1849 4725/6546 4723/1847\nf 4734/6547 4729/1851 4731/4292\nf 1201/1853 4731/4292 4729/1851\nf 1203/1856 4738/6549 4736/1858\nf 4741/6548 4736/1858 4738/6549\nf 4747/6550 4715/1843 4745/4296\nf 1197/1845 4745/4296 4715/1843\nf 4752/6551 4748/1863 4743/4293\nf 1205/1865 4743/4293 4748/1863\nf 1165/1772 4755/4300 4597/1774\nf 4757/6552 4597/1774 4755/4300\nf 4764/6553 4759/1874 4761/4306\nf 1209/1872 4761/4306 4759/1874\nf 1162/1764 4767/4304 4586/1766\nf 4769/6554 4586/1766 4767/4304\nf 4776/6555 4771/1879 4773/6556\nf 1212/1881 4773/6556 4771/1879\nf 4782/6557 4777/1883 4779/4308\nf 1213/1885 4779/4308 4777/1883\nf 4788/6558 4784/1887 4786/6559\nf 1215/1889 4786/6559 4784/1887\nf 4793/6560 4765/1875 4791/4312\nf 1210/1877 4791/4312 4765/1875\nf 4797/6561 4794/1895 4789/4310\nf 1216/1897 4789/4310 4794/1895\nf 4700/1837 1192/1838 4802/6562\nf 4799/4315 4802/6562 1192/1838\nf 4804/1905 1219/1906 4809/6563\nf 4806/4321 4809/6563 1219/1906\nf 4688/1829 1189/1830 4815/6564\nf 4813/4319 4815/6564 1189/1830\nf 4817/1913 1223/1914 4822/6565\nf 4819/4333 4822/6565 1223/1914\nf 4823/1917 1224/1918 4828/6566\nf 4825/4324 4828/6566 1224/1918\nf 4834/6567 4830/1919 4832/4345\nf 1226/1921 4832/4345 4830/1919\nf 4810/1909 1220/1910 4840/6568\nf 4837/4327 4840/6568 1220/1910\nf 4841/1927 1227/1928 4844/6569\nf 4835/4325 4844/6569 1227/1928\nf 4753/1867 1207/1869 4849/6570\nf 4847/4331 4849/6570 1207/1869\nf 4851/1933 1231/1934 4856/6571\nf 4853/4337 4856/6571 1231/1934\nf 4742/1861 1204/1862 4861/6572\nf 4859/4335 4861/6572 1204/1862\nf 4863/1941 1234/1942 4868/6573\nf 4865/4349 4868/6573 1234/1942\nf 4869/1945 1235/1946 4874/6574\nf 4871/4339 4874/6574 1235/1946\nf 4876/1949 1237/1950 4880/6575\nf 4878/4361 4880/6575 1237/1950\nf 4857/1937 1232/1938 4885/6576\nf 4883/4343 4885/6576 1232/1938\nf 4886/1955 1238/1956 4889/6577\nf 4881/4341 4889/6577 1238/1956\nf 4891/4348 4893/6578 1203/1856\nf 4738/6549 1203/1856 4893/6578\nf 4897/4354 4900/6579 1241/1959\nf 4895/1960 1241/1959 4900/6579\nf 4725/6546 1200/1849 4905/6580\nf 4903/4351 4905/6580 1200/1849\nf 4907/1969 1244/1970 4912/6581\nf 4909/4365 4912/6581 1244/1970\nf 4913/1973 1245/1974 4918/6582\nf 4915/4355 4918/6582 1245/1974\nf 4920/1977 1247/1978 4924/6583\nf 4922/4377 4924/6583 1247/1978\nf 4901/1965 1242/1966 4929/6584\nf 4927/4359 4929/6584 1242/1966\nf 4925/4358 4933/6585 1248/1981\nf 4930/1982 1248/1981 4933/6585\nf 4786/6559 1215/1889 4937/6586\nf 4935/4363 4937/6586 1215/1889\nf 1251/1988 4941/4370 4939/1990\nf 4944/6587 4939/1990 4941/4370\nf 4949/6588 4773/6556 4947/4368\nf 1212/1881 4947/4368 4773/6556\nf 1161/1760 4579/1759 4950/1997\nf 4954/6589 4950/1997 4579/1759\nf 4960/6590 4955/1998 4957/4371\nf 1254/2000 4957/4371 4955/1998\nf 1158/1752 4566/1751 4961/2004\nf 4964/6591 4961/2004 4566/1751\nf 1252/1992 4967/4375 4945/1994\nf 4969/6592 4945/1994 4967/4375\nf 1256/2008 4965/4374 4970/2010\nf 4973/6593 4970/2010 4965/4374\nf 4975/7272 1259/7121 4979/6594\nf 4976/4380 4979/6594 1259/7121\nf 4982/2015 1260/2016 4987/6595\nf 4984/4385 4987/6595 1260/2016\nf 4991/7273 1264/7123 4994/6596\nf 4992/4383 4994/6596 1264/7123\nf 4997/2023 1265/2024 5002/6597\nf 4999/4429 5002/6597 1265/2024\nf 5003/2027 1266/2028 5008/6598\nf 5005/4387 5008/6598 1266/2028\nf 5010/2031 1268/2032 5015/6599\nf 5012/4441 5015/6599 1268/2032\nf 1261/2018 5019/4391 4988/2020\nf 5022/6600 4988/2020 5019/4391\nf 1270/2038 5017/4390 5023/2040\nf 5027/6601 5023/2040 5017/4390\nf 1272/2042 5031/4395 5028/2044\nf 5034/6602 5028/2044 5031/4395\nf 5041/6603 5036/2048 5038/4401\nf 1275/2046 5038/4401 5036/2048\nf 5016/2035 1269/2036 5047/6604\nf 5045/4399 5047/6604 1269/2036\nf 5049/2055 1279/2056 5054/6605\nf 5051/4413 5054/6605 1279/2056\nf 5055/2059 1280/2060 5060/6606\nf 5057/4403 5060/6606 1280/2060\nf 1282/2062 5064/4425 5062/2064\nf 5067/6607 5062/2064 5064/4425\nf 5042/2051 1276/2052 5074/6608\nf 5071/4407 5074/6608 1276/2052\nf 5075/2071 1284/2072 5079/6609\nf 5069/4405 5079/6609 1284/2072\nf 5083/2139 1289/2140 5086/6610\nf 5084/4411 5086/6610 1289/2140\nf 1290/2080 5091/4417 5089/2079\nf 5094/6611 5089/2079 5091/4417\nf 5097/2131 1293/2132 5100/6612\nf 5098/4416 5100/6612 1293/2132\nf 5108/6613 5103/2085 5105/4639\nf 1294/2087 5105/4639 5103/2085\nf 1295/2090 5111/4419 5109/2092\nf 5114/6614 5109/2092 5111/4419\nf 5121/6615 5116/2093 5118/4651\nf 1297/2095 5118/4651 5116/2093\nf 1291/2082 5125/4423 5095/2084\nf 5127/6616 5095/2084 5125/4423\nf 1299/2102 5123/4421 5128/2104\nf 5132/6617 5128/2104 5123/4421\nf 5135/7277 1303/7127 5138/6618\nf 5136/4427 5138/6618 1303/7127\nf 5141/2111 1304/2112 5146/6619\nf 5143/4433 5146/6619 1304/2112\nf 5149/7278 1307/7128 5152/6620\nf 5150/4431 5152/6620 1307/7128\nf 5155/2119 1308/2120 5160/6621\nf 5157/4622 5160/6621 1308/2120\nf 5161/2123 1309/2124 5166/6622\nf 5163/4435 5166/6622 1309/2124\nf 5168/2127 1311/2128 5172/6623\nf 5170/4634 5172/6623 1311/2128\nf 5147/2115 1305/2116 5177/6624\nf 5175/4439 5177/6624 1305/2116\nf 5178/2135 1312/2136 5181/6625\nf 5173/4437 5181/6625 1312/2136\nf 5080/2075 1286/2076 5186/6626\nf 5183/4443 5186/6626 1286/2076\nf 5188/2143 1315/2144 5193/6627\nf 5190/4449 5193/6627 1315/2144\nf 5068/2067 1283/2068 5199/6628\nf 5197/4447 5199/6628 1283/2068\nf 5201/2151 1319/2152 5206/6629\nf 5203/4462 5206/6629 1319/2152\nf 5207/2155 1320/2156 5212/6630\nf 5209/4451 5212/6630 1320/2156\nf 5214/2159 1322/2160 5218/6631\nf 5216/4473 5218/6631 1322/2160\nf 5194/2147 1316/2148 5224/6632\nf 5221/4455 5224/6632 1316/2148\nf 5225/2165 1323/2166 5228/6633\nf 5219/4453 5228/6633 1323/2166\nf 1301/2106 5231/4460 5133/2108\nf 5233/6634 5133/2108 5231/4460\nf 5240/6635 5235/2169 5237/4466\nf 1327/2171 5237/4466 5235/2169\nf 5245/6636 5122/2097 5243/4464\nf 1298/2099 5243/4464 5122/2097\nf 5247/2177 1330/2179 5252/6637\nf 5249/4654 5252/6637 1330/2179\nf 5253/2181 1331/2183 5258/6638\nf 5255/4467 5258/6638 1331/2183\nf 5260/2187 1333/2188 5264/6639\nf 5262/4666 5264/6639 1333/2188\nf 5269/6640 5241/2173 5267/4472\nf 1328/2175 5267/4472 5241/2173\nf 5270/2191 1334/2193 5273/6641\nf 5265/4469 5273/6641 1334/2193\nf 5276/4475 5278/6642 1337/7131\nf 5275/7281 1337/7131 5278/6642\nf 5281/2199 1338/2200 5286/6643\nf 5283/6644 5286/6643 1338/2200\nf 1341/7132 5290/4478 5289/7282\nf 5293/6647 5289/7282 5290/4478\nf 1342/2206 5298/6648 5296/2208\nf 5300/6649 5296/2208 5298/6648\nf 5303/7283 1345/7134 5307/6650\nf 5304/4482 5307/6650 1345/7134\nf 5310/2213 1346/2214 5314/6651\nf 5312/6652 5314/6651 1346/2214\nf 1221/7136 5317/4486 4801/7284\nf 5320/6653 4801/7284 5317/4486\nf 1349/2218 5324/6654 5322/2220\nf 5326/6655 5322/2220 5324/6654\nf 2605/7206 665/7048 5331/6656\nf 5329/4490 5331/6656 665/7048\nf 5284/6645 5335/6657 1339/2201\nf 5332/2224 1339/2201 5335/6657\nf 5337/7288 1353/7139 5340/6658\nf 5338/4494 5340/6658 1353/7139\nf 5343/2229 1354/2230 5348/6659\nf 5345/4499 5348/6659 1354/2230\nf 5351/7289 1357/7140 5354/6660\nf 5352/4497 5354/6660 1357/7140\nf 5357/2237 1358/2238 5362/6661\nf 5359/6662 5362/6661 1358/2238\nf 5363/2241 1359/2242 5368/6663\nf 5365/4501 5368/6663 1359/2242\nf 5370/2245 1361/2246 5375/6664\nf 5372/6665 5375/6664 1361/2246\nf 5349/2233 1355/2234 5381/6668\nf 5379/4505 5381/6668 1355/2234\nf 5382/2253 1363/2254 5386/6669\nf 5377/4503 5386/6669 1363/2254\nf 1361/2246 5389/4509 5372/6665\nf 5391/6671 5372/6665 5389/4509\nf 1367/2260 5395/4515 5393/2262\nf 5398/6672 5393/2262 5395/4515\nf 1358/2238 5401/4513 5359/6662\nf 5403/6673 5359/6662 5401/4513\nf 1370/2268 5407/4575 5405/2270\nf 5410/6674 5405/2270 5407/4575\nf 1371/2272 5413/4517 5411/2274\nf 5416/6675 5411/2274 5413/4517\nf 5418/2278 1373/2276 5423/6676\nf 5420/4587 5423/6676 1373/2276\nf 1368/2264 5427/4521 5399/2266\nf 5429/6678 5399/2266 5427/4521\nf 5430/2286 1375/2284 5434/6679\nf 5425/4519 5434/6679 1375/2284\nf 1379/7143 5438/4525 5437/7292\nf 5440/6680 5437/7292 5438/4525\nf 1380/2292 5445/6681 5443/2294\nf 5448/6683 5443/2294 5445/6681\nf 2806/7224 717/7066 5454/6685\nf 5451/4527 5454/6685 717/7066\nf 5456/2301 1383/2302 5460/6687\nf 5458/6686 5460/6687 1383/2302\nf 5463/7293 1386/7145 5466/6688\nf 5464/4531 5466/6688 1386/7145\nf 5469/2307 1387/2308 5473/6689\nf 5471/6690 5473/6689 1387/2308\nf 1307/7146 5475/4534 5153/7294\nf 5478/6691 5153/7294 5475/4534\nf 1389/2312 5482/6692 5480/2314\nf 5484/6693 5480/2314 5482/6692\nf 5435/2289 1377/2290 5489/6694\nf 5487/4539 5489/6694 1377/2290\nf 5446/6684 5493/6695 1381/2296\nf 5490/2317 1381/2296 5493/6695\nf 5497/6696 2817/7225 5495/4542\nf 721/7067 5495/4542 2817/7225\nf 5499/2323 1393/2324 5504/6697\nf 5501/4547 5504/6697 1393/2324\nf 2857/7226 731/7068 5509/6698\nf 5507/4545 5509/6698 731/7068\nf 5511/2331 1396/2332 5516/6699\nf 5513/5072 5516/6699 1396/2332\nf 5517/2335 1397/2336 5522/6700\nf 5519/4549 5522/6700 1397/2336\nf 1399/2338 5526/6701 5524/2340\nf 5529/6702 5524/2340 5526/6701\nf 5505/2325 1394/2327 5535/6703\nf 5533/4553 5535/6703 1394/2327\nf 1401/2348 5531/4551 5536/2347\nf 5540/6704 5536/2347 5531/4551\nf 1403/2352 5543/4557 5541/2351\nf 5545/6705 5541/2351 5543/4557\nf 1405/2354 5549/4563 5547/2356\nf 5552/6706 5547/2356 5549/4563\nf 1400/2342 5555/4561 5530/2344\nf 5557/6707 5530/2344 5555/4561\nf 1408/2362 5561/5052 5559/2364\nf 5564/6708 5559/2364 5561/5052\nf 1409/2366 5567/4565 5565/2368\nf 5570/6709 5565/2368 5567/4565\nf 1411/2370 5574/5064 5572/2372\nf 5577/6710 5572/2372 5574/5064\nf 1406/2358 5581/4569 5553/2360\nf 5583/6711 5553/2360 5581/4569\nf 1413/2378 5579/4567 5584/2380\nf 5588/6712 5584/2380 5579/4567\nf 1415/2382 5591/4573 5589/2384\nf 5593/6713 5589/2384 5591/4573\nf 1417/2386 5597/4579 5595/2388\nf 5600/6714 5595/2388 5597/4579\nf 1412/2374 5603/4577 5578/2376\nf 5605/6715 5578/2376 5603/4577\nf 1420/2394 5609/6716 5607/2396\nf 5612/6717 5607/2396 5609/6716\nf 1421/2398 5615/4581 5613/2400\nf 5618/6718 5613/2400 5615/4581\nf 1423/2402 5622/6719 5620/2404\nf 5625/6720 5620/2404 5622/6719\nf 1418/2390 5629/4585 5601/2392\nf 5631/6721 5601/2392 5629/4585\nf 1425/2410 5627/4583 5632/2412\nf 5636/6722 5632/2412 5627/4583\nf 5637/2415 1427/2416 5641/6723\nf 5639/4589 5641/6723 1427/2416\nf 5643/2419 1429/2420 5648/6724\nf 5645/4594 5648/6724 1429/2420\nf 5626/2408 1424/2406 5653/6725\nf 5651/4592 5653/6725 1424/2406\nf 1432/2426 5657/5026 5655/2428\nf 5660/6726 5655/2428 5657/5026\nf 5661/2431 1433/2432 5666/6727\nf 5663/4597 5666/6727 1433/2432\nf 1435/2434 5670/6729 5668/2436\nf 5672/6728 5668/2436 5670/6729\nf 5649/2423 1430/2424 5677/6730\nf 5675/4600 5677/6730 1430/2424\nf 5678/2441 1436/2442 5681/6731\nf 5673/4598 5681/6731 1436/2442\nf 5685/6732 3013/7229 5683/4605\nf 771/7070 5683/4605 3013/7229\nf 5692/6733 5687/2445 5689/4611\nf 1439/2447 5689/4611 5687/2445\nf 5697/6734 3053/7231 5695/4609\nf 781/7072 5695/4609 3053/7231\nf 5704/6735 5699/2453 5701/4670\nf 1442/2455 5701/4670 5699/2453\nf 1443/2459 5707/4612 5705/2457\nf 5710/6736 5705/2457 5707/4612\nf 1445/2462 5714/4683 5712/2464\nf 5717/6737 5712/2464 5714/4683\nf 5723/6738 5693/2449 5721/4616\nf 1440/2451 5721/4616 5693/2449\nf 1447/2470 5719/4614 5724/2472\nf 5728/6739 5724/2472 5719/4614\nf 5729/2473 1449/2475 5733/6740\nf 5731/4620 5733/6740 1449/2475\nf 5735/2478 1451/2477 5740/6741\nf 5737/4626 5740/6741 1451/2477\nf 1446/2466 5743/4624 5718/2468\nf 5745/6742 5718/2468 5743/4624\nf 5749/4811 5752/6743 1454/2486\nf 5747/2488 1454/2486 5752/6743\nf 5753/2490 1455/2489 5758/6744\nf 5755/4629 5758/6744 1455/2489\nf 5760/2495 1457/2496 5765/6745\nf 5762/4823 5765/6745 1457/2496\nf 5741/2483 1452/2484 5771/6746\nf 5769/4632 5771/6746 1452/2484\nf 5772/2503 1459/2504 5776/6747\nf 5767/4630 5776/6747 1459/2504\nf 5777/2507 1461/2508 5781/6748\nf 5779/4637 5781/6748 1461/2508\nf 5788/6749 5783/2509 5785/4643\nf 1463/2511 5785/4643 5783/2509\nf 5766/2499 1458/2500 5793/6750\nf 5791/4640 5793/6750 1458/2500\nf 5795/2519 1466/2520 5800/6751\nf 5797/4702 5800/6751 1466/2520\nf 5801/2523 1467/2524 5806/6752\nf 5803/4644 5806/6752 1467/2524\nf 5808/2527 1469/2528 5813/6753\nf 5810/4714 5813/6753 1469/2528\nf 5819/6754 5789/2513 5817/4649\nf 1464/2515 5817/4649 5789/2513\nf 5824/6755 5820/2533 5815/4646\nf 1471/2535 5815/4646 5820/2533\nf 5825/2537 1473/2539 5829/6756\nf 5827/4652 5829/6756 1473/2539\nf 5831/2543 1475/2544 5836/6757\nf 5833/4658 5836/6757 1475/2544\nf 5839/4657 5841/6758 1470/2532\nf 5814/2531 1470/2532 5841/6758\nf 5845/4719 5848/6759 1478/2549\nf 5843/2550 1478/2549 5848/6759\nf 5849/2555 1479/2556 5854/6760\nf 5851/4660 5854/6760 1479/2556\nf 5856/2559 1481/2560 5860/6761\nf 5858/4730 5860/6761 1481/2560\nf 5837/2547 1476/2548 5865/6762\nf 5863/4664 5865/6762 1476/2548\nf 5866/2565 1482/2566 5869/6763\nf 5861/4662 5869/6763 1482/2566\nf 5873/6764 3209/7232 5871/4668\nf 821/7073 5871/4668 3209/7232\nf 1485/2570 5877/4674 5875/2572\nf 5880/6765 5875/2572 5877/4674\nf 831/7074 5883/4672 3249/7233\nf 5885/6766 3249/7233 5883/4672\nf 1488/2578 5889/4734 5887/2580\nf 5892/6767 5887/2580 5889/4734\nf 5898/6768 5893/2584 5895/4677\nf 1489/2582 5895/4677 5893/2584\nf 5905/6769 5900/2585 5902/4747\nf 1491/2587 5902/4747 5900/2585\nf 5911/6770 5881/2576 5909/4681\nf 1486/2574 5909/4681 5881/2576\nf 5916/6771 5912/2593 5907/4679\nf 1493/2595 5907/4679 5912/2593\nf 5917/2600 1495/2598 5922/6772\nf 5919/4684 5922/6772 1495/2598\nf 5924/2604 1497/2602 5929/6773\nf 5926/4690 5929/6773 1497/2602\nf 5935/6774 5906/2589 5933/4689\nf 1492/2591 5933/4689 5906/2589\nf 1501/2611 5939/4751 5937/2609\nf 5942/6775 5937/2609 5939/4751\nf 5943/2615 1502/2616 5948/6776\nf 5945/4692 5948/6776 1502/2616\nf 5950/2619 1504/2620 5955/6777\nf 5952/4762 5955/6777 1504/2620\nf 1498/2608 5959/4696 5930/2607\nf 5962/6778 5930/2607 5959/4696\nf 5967/6779 5963/2627 5957/4695\nf 1506/2628 5957/4695 5963/2627\nf 5971/2871 1511/2872 5974/6780\nf 5972/4700 5974/6780 1511/2872\nf 5977/2634 1512/2633 5982/6781\nf 5979/4707 5982/6781 1512/2633\nf 5986/4704 5988/6782 1515/2861\nf 5985/2862 1515/2861 5988/6782\nf 5996/6783 5991/2641 5993/6784\nf 1516/2643 5993/6784 5991/2641\nf 5997/2647 1517/2648 6002/6785\nf 5999/4708 6002/6785 1517/2648\nf 6009/6786 6004/2649 6006/6787\nf 1519/2651 6006/6787 6004/2649\nf 5983/2639 1513/2640 6015/6788\nf 6013/4712 6015/6788 1513/2640\nf 6016/2659 1521/2660 6020/6789\nf 6011/4710 6020/6789 1521/2660\nf 6021/2663 1523/2664 6025/6790\nf 6023/4716 6025/6790 1523/2664\nf 6027/2667 1525/2668 6032/6791\nf 6029/4722 6032/6791 1525/2668\nf 6010/2655 1520/2656 6037/6792\nf 6035/4720 6037/6792 1520/2656\nf 6039/2675 1528/2676 6044/6793\nf 6041/4827 6044/6793 1528/2676\nf 6045/2679 1529/2680 6050/6794\nf 6047/4725 6050/6794 1529/2680\nf 6054/4840 6056/6795 1531/2684\nf 6052/2683 1531/2684 6056/6795\nf 6059/4729 6061/6796 1526/2669\nf 6033/2670 1526/2669 6061/6796\nf 6057/4727 6065/6797 1532/2687\nf 6062/2688 1532/2687 6065/6797\nf 873/7075 6067/4732 3409/7234\nf 6069/6798 3409/7234 6067/4732\nf 1535/2694 6073/4739 6071/2696\nf 6076/6799 6071/2696 6073/4739\nf 883/7076 6079/4736 3449/7235\nf 6081/6800 3449/7235 6079/4736\nf 1538/2703 6085/4783 6083/2701\nf 6088/6801 6083/2701 6085/4783\nf 6094/6802 6089/2705 6091/4741\nf 1539/2707 6091/4741 6089/2705\nf 1541/2711 6098/4794 6096/2709\nf 6101/6803 6096/2709 6098/4794\nf 6107/6804 6077/2700 6105/4745\nf 1536/2698 6105/4745 6077/2700\nf 6112/6805 6108/2717 6103/4743\nf 1543/2719 6103/4743 6108/2717\nf 6117/6806 6113/2721 6115/4749\nf 1545/2723 6115/4749 6113/2721\nf 1547/2726 6121/4754 6119/2728\nf 6124/6807 6119/2728 6121/4754\nf 1542/2715 6127/4752 6102/2713\nf 6129/6808 6102/2713 6127/4752\nf 1550/2734 6133/6809 6131/2736\nf 6136/6810 6131/2736 6133/6809\nf 6142/6811 6137/2740 6139/4757\nf 1551/2738 6139/4757 6137/2740\nf 6146/6812 6149/6813 1553/2741\nf 6144/2742 1553/2741 6149/6813\nf 6155/6814 6125/2729 6153/4760\nf 1548/2731 6153/4760 6125/2729\nf 6156/2751 1555/2752 6160/6815\nf 6151/4758 6160/6815 1555/2752\nf 6161/2755 1557/2756 6166/6816\nf 6163/4764 6166/6816 1557/2756\nf 6168/2759 1559/2760 6173/6817\nf 6170/4770 6173/6817 1559/2760\nf 6150/2747 1554/2748 6179/6818\nf 6177/4769 6179/6818 1554/2748\nf 6183/2801 6186/6819 1563/2765\nf 6181/2766 1563/2765 6186/6819\nf 6187/2770 1564/2769 6192/6820\nf 6189/4772 6192/6820 1564/2769\nf 6194/2775 1566/2776 6198/6821\nf 6196/2794 6198/6821 1566/2776\nf 6174/2763 1560/2764 6204/6822\nf 6201/4776 6204/6822 1560/2764\nf 6205/2781 1567/2782 6208/6823\nf 6199/4775 6208/6823 1567/2782\nf 915/7081 6211/4780 3565/7236\nf 6213/6824 3565/7236 6211/4780\nf 1571/2786 6217/4786 6215/2788\nf 6220/6825 6215/2788 6217/4786\nf 3599/7237 921/7082 6225/6826\nf 6223/4784 6225/6826 921/7082\nf 6226/2795 1566/2776 6230/6827\nf 6193/2774 6230/6827 1566/2776\nf 6231/2798 1574/2799 6236/6828\nf 6233/4788 6236/6828 1574/2799\nf 6237/2802 1563/2765 6240/6829\nf 6180/2767 6240/6829 1563/2765\nf 1572/2791 6243/4792 6221/2789\nf 6245/6830 6221/2789 6243/4792\nf 1576/2806 6241/4790 6246/2808\nf 6249/6831 6246/2808 6241/4790\nf 925/7083 6251/4796 3609/7238\nf 6253/6832 3609/7238 6251/4796\nf 1579/2812 6257/4801 6255/2814\nf 6260/6833 6255/2814 6257/4801\nf 935/7084 6263/4799 3649/7239\nf 6265/6834 3649/7239 6263/4799\nf 1582/2820 6269/4843 6267/2822\nf 6272/6835 6267/2822 6269/4843\nf 1583/2824 6275/4803 6273/2826\nf 6278/6836 6273/2826 6275/4803\nf 1585/2828 6282/4855 6280/2830\nf 6284/6837 6280/2830 6282/4855\nf 6261/2817 1580/2818 6289/6838\nf 6287/4806 6289/6838 1580/2818\nf 1586/2835 6285/4805 6290/2837\nf 6293/6839 6290/2837 6285/4805\nf 5921/7300 1499/7151 6297/6840\nf 6295/4809 6297/6840 1499/7151\nf 6299/2843 1589/2844 6304/6841\nf 6301/4816 6304/6841 1589/2844\nf 5961/7301 1509/7152 6309/6842\nf 6307/4814 6309/6842 1509/7152\nf 6313/6843 6316/6844 1592/2849\nf 6311/2850 1592/2849 6316/6844\nf 6319/4818 6322/6845 1593/2853\nf 6317/2854 1593/2853 6322/6845\nf 6326/6846 6328/6847 1595/2857\nf 6324/2858 1595/2857 6328/6847\nf 6305/2847 1590/2848 6333/6848\nf 6331/4822 6333/6848 1590/2848\nf 6329/4820 6337/6849 1596/2865\nf 6334/2866 1596/2865 6337/6849\nf 6006/6787 1519/2651 6341/6850\nf 6339/4825 6341/6850 1519/2651\nf 6343/2875 1599/2876 6348/6851\nf 6345/4831 6348/6851 1599/2876\nf 5993/6784 1516/2643 6353/6852\nf 6351/4829 6353/6852 1516/2643\nf 6357/2917 6360/6853 1602/2881\nf 6355/2882 1602/2881 6360/6853\nf 6361/2887 1603/2888 6366/6854\nf 6363/4833 6366/6854 1603/2888\nf 6368/2891 1605/2892 6372/6855\nf 6370/2910 6372/6855 1605/2892\nf 6349/2879 1600/2880 6377/6856\nf 6375/4837 6377/6856 1600/2880\nf 6378/2897 1606/2898 6381/6857\nf 6373/4836 6381/6857 1606/2898\nf 959/7085 6383/4841 3749/7240\nf 6385/6858 3749/7240 6383/4841\nf 6387/2903 1609/2904 6392/6859\nf 6389/4847 6392/6859 1609/2904\nf 3783/7241 965/7086 6397/6860\nf 6395/4845 6397/6860 965/7086\nf 6367/2890 6402/6861 1605/2892\nf 6398/2911 1605/2892 6402/6861\nf 6403/2914 1612/2915 6408/6862\nf 6405/4849 6408/6862 1612/2915\nf 6409/2918 1602/2881 6412/6863\nf 6354/2883 6412/6863 1602/2881\nf 1610/2906 6415/4853 6393/2908\nf 6417/6864 6393/2908 6415/4853\nf 1614/2922 6413/4851 6418/2924\nf 6421/6865 6418/2924 6413/4851\nf 1617/7155 6424/4856 6423/7302\nf 6427/6866 6423/7302 6424/4856\nf 1618/2928 6432/6867 6430/2930\nf 6435/6869 6430/2930 6432/6867\nf 6439/3165 1622/3167 6443/6871\nf 6440/4860 6443/6871 1622/3167\nf 6446/2937 1623/2938 6450/6872\nf 6448/6873 6450/6872 1623/2938\nf 1626/7158 6454/4864 6453/7303\nf 6457/6874 6453/7303 6454/4864\nf 6459/2942 1619/2933 6462/6875\nf 6433/6870 6462/6875 1619/2933\nf 1317/7159 6465/4867 5185/7304\nf 6468/6876 5185/7304 6465/4867\nf 1629/2946 6472/4872 6470/2948\nf 6475/6877 6470/2948 6472/4872\nf 1325/7160 6479/4870 5223/7305\nf 6481/6878 5223/7305 6479/4870\nf 991/2954 3880/6879 6482/2956\nf 6486/6880 6482/2956 3880/6879\nf 1633/2958 6489/4874 6487/2960\nf 6492/6881 6487/2960 6489/4874\nf 6497/6882 6493/2961 3869/6883\nf 988/2963 3869/6883 6493/2961\nf 1630/2950 6501/4878 6476/2952\nf 6504/6884 6476/2952 6501/4878\nf 1636/2970 6499/4876 6505/2972\nf 6509/6885 6505/2972 6499/4876\nf 6510/2976 1638/2974 6515/6886\nf 6513/4881 6515/6886 1638/2974\nf 1641/2978 6519/4886 6517/2980\nf 6522/6887 6517/2980 6519/4886\nf 1635/2966 6525/4884 6498/2968\nf 6527/6888 6498/2968 6525/4884\nf 1001/2987 3924/6889 6528/2985\nf 6532/6890 6528/2985 3924/6889\nf 1644/2990 6535/4888 6533/2992\nf 6538/6891 6533/2992 6535/4888\nf 998/2994 3913/6892 6539/2996\nf 6542/6894 6539/2996 3913/6892\nf 1642/2981 6545/4892 6523/2982\nf 6547/6896 6523/2982 6545/4892\nf 1646/3002 6543/4890 6548/3004\nf 6551/6897 6548/3004 6543/4890\nf 6554/4897 6556/6899 1649/3227\nf 6553/3228 1649/3227 6556/6899\nf 6561/4901 6564/6900 1650/3009\nf 6559/3010 1650/3009 6564/6900\nf 6567/3221 1653/3222 6570/6901\nf 6568/4899 6570/6901 1653/3222\nf 6575/6902 6578/6903 1654/3017\nf 6573/3018 1654/3017 6578/6903\nf 6584/6904 6579/3023 6581/4904\nf 1655/3024 6581/4904 6579/3023\nf 1657/3026 6588/6906 6586/3028\nf 6591/6905 6586/3028 6588/6906\nf 6597/6907 6565/3013 6595/4908\nf 1651/3015 6595/4908 6565/3013\nf 1659/3035 6593/4905 6598/3033\nf 6602/6908 6598/3033 6593/4905\nf 1657/3026 6605/4911 6588/6906\nf 6608/6909 6588/6906 6605/4911\nf 6615/6910 6610/3041 6612/4917\nf 1663/3043 6612/4917 6610/3041\nf 6575/6902 1654/3017 6621/6911\nf 6619/4915 6621/6911 1654/3017\nf 6623/3051 1667/3052 6628/6912\nf 6625/3217 6628/6912 1667/3052\nf 6629/3054 1668/3053 6634/6913\nf 6631/4918 6634/6913 1668/3053\nf 6636/3059 1670/3060 6641/6914\nf 6638/3210 6641/6914 1670/3060\nf 1664/3046 6645/4922 6616/3048\nf 6648/6916 6616/3048 6645/4922\nf 6649/3067 1672/3068 6653/6917\nf 6643/4920 6653/6917 1672/3068\nf 6660/6918 5387/7306 6657/4926\nf 1365/7161 6657/4926 5387/7306\nf 1677/3074 6664/4932 6662/3076\nf 6667/6919 6662/3076 6664/4932\nf 1362/7162 6671/4930 5376/7307\nf 6673/6920 5376/7307 6671/4930\nf 1262/3082 4989/6921 6674/3084\nf 6678/6922 6674/3084 4989/6921\nf 1681/3086 6681/4934 6679/3088\nf 6684/6923 6679/3088 6681/4934\nf 1273/3090 5029/6924 6685/3092\nf 6689/6925 6685/3092 5029/6924\nf 1678/3078 6693/4938 6668/3080\nf 6696/6926 6668/3080 6693/4938\nf 1684/3098 6691/4936 6697/3100\nf 6701/6927 6697/3100 6691/4936\nf 5319/7309 1350/7163 6707/6928\nf 6705/4943 6707/6928 1350/7163\nf 1689/3108 6711/4948 6709/3107\nf 6714/6929 6709/3107 6711/4948\nf 5308/7311 1345/7165 6719/6930\nf 6717/4946 6719/6930 1345/7165\nf 1679/3114 6669/4928 6720/3116\nf 6724/6931 6720/3116 6669/4928\nf 6727/4951 6730/6932 1692/3118\nf 6725/3120 1692/3118 6730/6932\nf 6703/4940 6735/6933 1687/3121\nf 6731/3122 1687/3121 6735/6933\nf 1690/3110 6739/4955 6715/3112\nf 6741/6934 6715/3112 6739/4955\nf 6742/3130 1695/3129 6746/6935\nf 6737/4952 6746/6935 1695/3129\nf 6747/3135 1697/3136 6751/6936\nf 6749/4958 6751/6936 1697/3136\nf 6753/3139 1699/3140 6758/6937\nf 6755/4964 6758/6937 1699/3140\nf 6736/3127 1694/3128 6763/6938\nf 6761/4962 6763/6938 1694/3128\nf 6767/4989 6770/6939 1702/3148\nf 6765/3147 1702/3148 6770/6939\nf 6771/3151 1703/3152 6776/6940\nf 6773/4967 6776/6940 1703/3152\nf 6780/5001 6782/6942 1705/3153\nf 6778/3154 1705/3153 6782/6942\nf 6759/3143 1700/3144 6787/6943\nf 6785/4969 6787/6943 1700/3144\nf 6788/3163 1706/3164 6791/6944\nf 6783/4968 6791/6944 1706/3164\nf 1686/3102 6793/4972 6702/3104\nf 6796/6945 6702/3104 6793/4972\nf 1709/3170 6800/4978 6798/3172\nf 6803/6946 6798/3172 6800/4978\nf 1683/3094 6807/4976 6690/3096\nf 6809/6947 6690/3096 6807/4976\nf 1277/3178 5043/6948 6810/3180\nf 6814/6949 6810/3180 5043/6948\nf 6817/4980 6820/6950 1713/3182\nf 6815/3184 1713/3182 6820/6950\nf 6821/3187 1287/3188 6824/6951\nf 5081/6952 6824/6951 1287/3188\nf 1710/3174 6827/4983 6804/3176\nf 6830/6955 6804/3176 6827/4983\nf 6831/3194 1715/3193 6834/6956\nf 6825/4982 6834/6956 1715/3193\nf 1719/7171 6838/4986 6837/7315\nf 6840/6958 6837/7315 6838/4986\nf 6845/4992 6848/6959 1720/3202\nf 6843/3204 1720/3202 6848/6959\nf 6851/5945 1723/7172 6854/6960\nf 6852/4990 6854/6960 1723/7172\nf 6856/3211 1670/3060 6860/6961\nf 6635/3058 6860/6961 1670/3060\nf 6861/3214 1724/3215 6866/6962\nf 6863/4994 6866/6962 1724/3215\nf 6867/3218 1667/3052 6870/6963\nf 6622/3050 6870/6963 1667/3052\nf 6873/4998 6875/6964 1721/3205\nf 6849/3206 1721/3205 6875/6964\nf 6876/3225 1726/3226 6879/6965\nf 6871/4996 6879/6965 1726/3226\nf 1661/3039 6881/5002 6603/3037\nf 6883/6966 6603/3037 6881/5002\nf 1729/3232 6887/5007 6885/3234\nf 6890/6967 6885/3234 6887/5007\nf 1658/3030 6893/5006 6592/3032\nf 6895/6968 6592/3032 6893/5006\nf 1665/3239 6617/4912 6896/3240\nf 6900/6969 6896/3240 6617/4912\nf 1732/3244 6903/5009 6901/3246\nf 6906/6970 6901/3246 6903/5009\nf 1675/3248 6655/4924 6907/3250\nf 6911/6971 6907/3250 6655/4924\nf 1730/3236 6915/5013 6891/3238\nf 6917/6973 6891/3238 6915/5013\nf 6918/3258 1735/3256 6922/6974\nf 6913/5011 6922/6974 1735/3256\nf 6925/5017 6927/6975 1737/3262\nf 6923/3261 1737/3262 6927/6975\nf 6931/6978 6934/6979 1739/3263\nf 6929/3264 1739/3263 6934/6979\nf 6937/5021 6939/6980 1674/3072\nf 6654/3071 1674/3072 6939/6980\nf 1742/3272 6943/6981 6941/3274\nf 6945/6982 6941/3274 6943/6981\nf 6855/5925 1723/7172 6949/6983\nf 6947/5022 6949/6983 1723/7172\nf 6953/6984 6950/3278 6932/6977\nf 1740/3267 6932/6977 6950/3278\nf 1745/7173 6956/5024 6955/7316\nf 6958/6985 6955/7316 6956/5024\nf 1746/3282 6963/6986 6961/3284\nf 6966/6988 6961/3284 6963/6986\nf 6972/6990 4360/7258 6969/5028\nf 1107/7108 6969/5028 4360/7258\nf 6978/6991 6974/3292 6976/6992\nf 1749/3290 6976/6992 6974/3292\nf 5670/6729 1435/2434 6983/6993\nf 6981/5032 6983/6993 1435/2434\nf 6984/3296 1747/3286 6987/6994\nf 6964/6989 6987/6994 1747/3286\nf 6989/5036 6991/6995 1423/2402\nf 5622/6719 1423/2402 6991/6995\nf 6993/3301 1753/3302 6998/6996\nf 6995/5040 6998/6996 1753/3302\nf 7001/5038 7003/6997 1420/2394\nf 5609/6716 1420/2394 7003/6997\nf 7005/3308 1756/3307 7010/6998\nf 7007/6999 7010/6998 1756/3307\nf 7011/3313 1757/3314 7016/7000\nf 7013/5042 7016/7000 1757/3314\nf 7018/3317 1759/3318 7022/7001\nf 7020/7002 7022/7001 1759/3318\nf 6999/3304 1754/3303 7027/7003\nf 7025/5046 7027/7003 1754/3303\nf 7028/3323 1760/3324 7031/7004\nf 7023/5044 7031/7004 1760/3324\nf 1763/7175 7034/5050 7033/7317\nf 7036/7005 7033/7317 7034/5050\nf 1764/3328 7041/5056 7039/3330\nf 7044/7006 7039/3330 7041/5056\nf 1767/7176 7048/5054 7047/5965\nf 7050/7007 7047/5965 7048/5054\nf 1130/1691 4459/6498 7052/3336\nf 7056/7008 7052/3336 4459/6498\nf 1768/3338 7059/5058 7057/3340\nf 7062/7009 7057/3340 7059/5058\nf 7063/3342 1127/1684 7066/7010\nf 4447/6495 7066/7010 1127/1684\nf 1765/3332 7069/5062 7045/3334\nf 7071/7011 7045/3334 7069/5062\nf 1770/3346 7067/5060 7072/3348\nf 7075/7012 7072/3348 7067/5060\nf 5526/6701 1399/2338 7079/7013\nf 7077/5066 7079/7013 1399/2338\nf 1773/3352 7083/7017 7081/3354\nf 7086/7015 7081/3354 7083/7017\nf 4491/7261 1139/7112 7091/7018\nf 7089/5070 7091/7018 1139/7112\nf 7093/3360 1776/3359 7097/7019\nf 7095/7020 7097/7019 1776/3359\nf 1767/7176 7099/5074 7051/5957\nf 7101/7021 7051/5957 7099/5074\nf 1774/3358 7084/7014 7102/3366\nf 7105/7022 7102/3366 7084/7014\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/assets/bob.obj",
    "content": "o Mesh\nv -0.0689691 -0.271823 -0.0665855\nv -0.0430436 -0.271803 -0.128743\nv -0.0019773 -0.271779 -0.182234\nv 0.0515185 -0.271639 -0.223267\nv 0.113712 -0.271652 -0.249095\nv 0.180454 -0.271667 -0.257897\nv 0.247203 -0.271667 -0.249109\nv 0.309403 -0.271667 -0.223345\nv 0.362815 -0.271667 -0.18236\nv 0.403799 -0.271667 -0.128948\nv 0.429563 -0.271667 -0.0667486\nv -0.0954565 -0.152032 -0.0811592\nv -0.0693153 -0.153737 -0.150196\nv -0.0246585 -0.153999 -0.206912\nv 0.0355909 -0.152366 -0.250947\nv 0.105539 -0.151976 -0.279596\nv 0.180457 -0.152017 -0.289506\nv 0.255386 -0.152026 -0.279649\nv 0.325211 -0.152026 -0.250726\nv 0.385171 -0.152026 -0.204717\nv 0.43118 -0.152026 -0.144757\nv 0.460103 -0.152026 -0.0749316\nv -0.151601 -0.0596112 -0.123106\nv -0.135261 -0.0687567 -0.212808\nv -0.0847046 -0.0711524 -0.27611\nv -0.0078077 -0.066258 -0.327346\nv 0.0831214 -0.0643117 -0.36325\nv 0.180464 -0.0642328 -0.376057\nv 0.277792 -0.0642663 -0.363269\nv 0.368496 -0.0642678 -0.325699\nv 0.446386 -0.0642676 -0.265932\nv 0.506193 -0.0638321 -0.187991\nv 0.543252 -0.0616778 -0.0971121\nv -0.213259 0.00207836 -0.160931\nv -0.218892 -0.0311053 -0.287217\nv -0.162897 -0.0379893 -0.364845\nv -0.0660547 -0.0339887 -0.430144\nv 0.0525254 -0.0320722 -0.477627\nv 0.180465 -0.0320118 -0.49455\nv 0.308461 -0.0320534 -0.477727\nv 0.427744 -0.0320547 -0.428319\nv 0.530175 -0.0320545 -0.34972\nv 0.608966 -0.0296927 -0.247857\nv 0.669632 -0.00621643 -0.124402\nv -0.391887 -0.00730308 -0.245866\nv -0.33283 -0.0513327 -0.363927\nv -0.245114 -0.0653173 -0.449708\nv -0.124234 -0.0652843 -0.531634\nv 0.0219675 -0.0641928 -0.592022\nv 0.18046 -0.064105 -0.61314\nv 0.339149 -0.0641311 -0.592259\nv 0.487029 -0.0641324 -0.531003\nv 0.614017 -0.0641322 -0.433562\nv 0.712364 -0.0613675 -0.309957\nv 0.785118 -0.028987 -0.188193\nv -0.567419 -0.0802453 -0.2235\nv -0.439274 -0.130691 -0.41154\nv -0.318135 -0.14824 -0.513277\nv -0.169493 -0.151916 -0.606781\nv -0.00047149 -0.151941 -0.675696\nv 0.180471 -0.151855 -0.699899\nv 0.36161 -0.151854 -0.676087\nv 0.530421 -0.151855 -0.606161\nv 0.675382 -0.151854 -0.494928\nv 0.790817 -0.149789 -0.350516\nv 0.892083 -0.117087 -0.175295\nv -0.57804 -0.254932 -0.226317\nv -0.470704 -0.263693 -0.415151\nv -0.348777 -0.270591 -0.537502\nv -0.1883 -0.271798 -0.63704\nv -0.00894596 -0.271693 -0.706707\nv 0.180485 -0.271666 -0.731598\nv 0.369831 -0.271667 -0.706756\nv 0.5463 -0.271667 -0.633664\nv 0.697838 -0.271667 -0.517384\nv 0.818125 -0.271299 -0.36579\nv 0.909327 -0.27018 -0.189131\nv -0.506179 -0.39136 -0.18867\nv -0.428775 -0.392282 -0.3614\nv -0.317483 -0.392223 -0.499554\nv -0.169984 -0.391594 -0.606586\nv -0.00060536 -0.391459 -0.675932\nv 0.180466 -0.391477 -0.699907\nv 0.361611 -0.39148 -0.676086\nv 0.530421 -0.39148 -0.606161\nv 0.675382 -0.39148 -0.494928\nv 0.787348 -0.39148 -0.349967\nv 0.860494 -0.39148 -0.181156\nv -0.411804 -0.479048 -0.158454\nv -0.350434 -0.479258 -0.30656\nv -0.253142 -0.479194 -0.433487\nv -0.126028 -0.479158 -0.530864\nv 0.0217878 -0.479194 -0.592221\nv 0.180454 -0.479203 -0.61315\nv 0.339149 -0.479202 -0.592258\nv 0.487029 -0.479202 -0.531003\nv 0.614017 -0.479202 -0.433562\nv 0.711458 -0.479202 -0.306575\nv 0.772712 -0.479202 -0.158695\nv -0.297187 -0.511142 -0.127908\nv -0.247859 -0.511175 -0.247115\nv -0.169246 -0.511221 -0.349659\nv -0.066826 -0.511267 -0.428307\nv 0.0524475 -0.51128 -0.477728\nv 0.180454 -0.51128 -0.49458\nv 0.308461 -0.51128 -0.477727\nv 0.427744 -0.51128 -0.428318\nv 0.530175 -0.51128 -0.34972\nv 0.608773 -0.51128 -0.24729\nv 0.658181 -0.51128 -0.128007\nv -0.182815 -0.479064 -0.0973337\nv -0.145244 -0.479064 -0.188035\nv -0.0854754 -0.479065 -0.26593\nv -0.00758816 -0.479067 -0.3257\nv 0.0831163 -0.479067 -0.36327\nv 0.180454 -0.479067 -0.376084\nv 0.277792 -0.479067 -0.36327\nv 0.368496 -0.479067 -0.325699\nv 0.446386 -0.479067 -0.265932\nv 0.506153 -0.479067 -0.188042\nv 0.543724 -0.479067 -0.0973378\nv -0.0993054 -0.391322 -0.0747789\nv -0.0703097 -0.391304 -0.144613\nv -0.0242567 -0.391301 -0.204651\nv 0.0357022 -0.391304 -0.250714\nv 0.105523 -0.391308 -0.279649\nv 0.180454 -0.391308 -0.289514\nv 0.255386 -0.391308 -0.279649\nv 0.325211 -0.391308 -0.250726\nv 0.385171 -0.391308 -0.204717\nv 0.43118 -0.391308 -0.144757\nv 0.460103 -0.391308 -0.0749316\nv -0.24494 0.0942168 -0.137415\nv -0.430597 0.0765209 -0.211075\nv -0.609998 0.0269059 -0.168184\nv -0.240795 0.210647 -0.150165\nv -0.458858 0.195848 -0.238598\nv -0.689894 0.107438 -0.177182\nv -0.295209 0.36526 -0.124242\nv -0.485849 0.378939 -0.162074\nv -0.685564 0.270034 -0.10635\nv -0.843033 0.106275 -0.138541\nv -0.854034 0.200358 -0.114129\nv 0.772913 0.0686691 -0.0623987\nv 0.840254 0.0797874 -0.0967863\nv 0.90763 0.0743886 -0.0821194\nv 0.802389 0.15193 -0.0266849\nv 0.83751 0.176024 -0.0323662\nv 0.874441 0.170396 -0.0347073\nv -0.0689691 -0.271823 0.0665855\nv -0.0430436 -0.271803 0.128743\nv -0.0019773 -0.271779 0.182234\nv 0.0515185 -0.271639 0.223267\nv 0.113712 -0.271652 0.249095\nv 0.180454 -0.271667 0.257897\nv 0.247203 -0.271667 0.249109\nv 0.309403 -0.271667 0.223345\nv 0.362815 -0.271667 0.18236\nv 0.403799 -0.271667 0.128948\nv 0.429563 -0.271667 0.0667486\nv -0.0954565 -0.152032 0.0811592\nv -0.0693153 -0.153737 0.150196\nv -0.0246585 -0.153999 0.206912\nv 0.0355909 -0.152366 0.250947\nv 0.105539 -0.151976 0.279596\nv 0.180457 -0.152017 0.289506\nv 0.255386 -0.152026 0.279649\nv 0.325211 -0.152026 0.250726\nv 0.385171 -0.152026 0.204717\nv 0.43118 -0.152026 0.144757\nv 0.460103 -0.152026 0.0749316\nv -0.151601 -0.0596112 0.123106\nv -0.135261 -0.0687567 0.212808\nv -0.0847046 -0.0711524 0.27611\nv -0.0078077 -0.066258 0.327346\nv 0.0831214 -0.0643117 0.36325\nv 0.180464 -0.0642328 0.376057\nv 0.277792 -0.0642663 0.363269\nv 0.368496 -0.0642677 0.325699\nv 0.446386 -0.0642675 0.265932\nv 0.506193 -0.0638321 0.187991\nv 0.543252 -0.0616778 0.0971121\nv -0.213259 0.00207836 0.160931\nv -0.218892 -0.0311053 0.287217\nv -0.162897 -0.0379893 0.364845\nv -0.0660547 -0.0339887 0.430144\nv 0.0525254 -0.0320722 0.477627\nv 0.180465 -0.0320118 0.49455\nv 0.308461 -0.0320534 0.477727\nv 0.427744 -0.0320547 0.428319\nv 0.530175 -0.0320545 0.34972\nv 0.608966 -0.0296927 0.247857\nv 0.669632 -0.00621642 0.124402\nv -0.391887 -0.00730307 0.245866\nv -0.33283 -0.0513327 0.363927\nv -0.245114 -0.0653173 0.449708\nv -0.124234 -0.0652843 0.531634\nv 0.0219675 -0.0641927 0.592022\nv 0.18046 -0.0641049 0.61314\nv 0.339149 -0.0641311 0.592259\nv 0.487029 -0.0641324 0.531003\nv 0.614017 -0.0641322 0.433562\nv 0.712364 -0.0613675 0.309957\nv 0.785118 -0.028987 0.188193\nv -0.567419 -0.0802453 0.2235\nv -0.439274 -0.130691 0.41154\nv -0.318135 -0.14824 0.513277\nv -0.169493 -0.151916 0.606781\nv -0.00047149 -0.151941 0.675696\nv 0.180471 -0.151855 0.699899\nv 0.36161 -0.151854 0.676087\nv 0.530421 -0.151855 0.606161\nv 0.675382 -0.151854 0.494928\nv 0.790817 -0.149789 0.350516\nv 0.892083 -0.117087 0.175295\nv -0.57804 -0.254932 0.226317\nv -0.470704 -0.263693 0.415151\nv -0.348777 -0.270591 0.537502\nv -0.1883 -0.271798 0.63704\nv -0.00894596 -0.271693 0.706707\nv 0.180485 -0.271666 0.731598\nv 0.369831 -0.271667 0.706756\nv 0.5463 -0.271667 0.633664\nv 0.697838 -0.271667 0.517384\nv 0.818125 -0.271299 0.36579\nv 0.909327 -0.27018 0.189131\nv -0.506179 -0.39136 0.18867\nv -0.428775 -0.392282 0.3614\nv -0.317483 -0.392223 0.499554\nv -0.169984 -0.391594 0.606586\nv -0.00060536 -0.391459 0.675932\nv 0.180466 -0.391477 0.699907\nv 0.361611 -0.39148 0.676086\nv 0.530421 -0.39148 0.606161\nv 0.675382 -0.39148 0.494928\nv 0.787348 -0.39148 0.349967\nv 0.860494 -0.39148 0.181156\nv -0.411804 -0.479048 0.158454\nv -0.350434 -0.479258 0.30656\nv -0.253142 -0.479194 0.433487\nv -0.126028 -0.479158 0.530864\nv 0.0217878 -0.479194 0.592221\nv 0.180454 -0.479203 0.61315\nv 0.339149 -0.479202 0.592258\nv 0.487029 -0.479202 0.531003\nv 0.614017 -0.479202 0.433562\nv 0.711458 -0.479202 0.306575\nv 0.772712 -0.479202 0.158695\nv -0.297187 -0.511142 0.127908\nv -0.247859 -0.511175 0.247115\nv -0.169246 -0.511221 0.349659\nv -0.066826 -0.511267 0.428307\nv 0.0524475 -0.51128 0.477728\nv 0.180454 -0.51128 0.49458\nv 0.308461 -0.51128 0.477727\nv 0.427744 -0.51128 0.428318\nv 0.530175 -0.51128 0.34972\nv 0.608773 -0.51128 0.24729\nv 0.658181 -0.51128 0.128007\nv -0.182815 -0.479064 0.0973337\nv -0.145244 -0.479064 0.188035\nv -0.0854754 -0.479065 0.26593\nv -0.00758816 -0.479067 0.3257\nv 0.0831163 -0.479067 0.36327\nv 0.180454 -0.479067 0.376084\nv 0.277792 -0.479067 0.36327\nv 0.368496 -0.479067 0.325699\nv 0.446386 -0.479067 0.265932\nv 0.506153 -0.479067 0.188042\nv 0.543724 -0.479067 0.0973378\nv -0.0993054 -0.391322 0.0747789\nv -0.0703097 -0.391304 0.144613\nv -0.0242567 -0.391301 0.204651\nv 0.0357022 -0.391304 0.250714\nv 0.105523 -0.391308 0.279649\nv 0.180454 -0.391308 0.289514\nv 0.255386 -0.391308 0.279649\nv 0.325211 -0.391308 0.250726\nv 0.385171 -0.391308 0.204717\nv 0.43118 -0.391308 0.144757\nv 0.460103 -0.391308 0.0749316\nv -0.24494 0.0942168 0.137415\nv -0.430597 0.0765209 0.211075\nv -0.609998 0.0269059 0.168184\nv -0.240795 0.210647 0.150165\nv -0.458858 0.195848 0.238598\nv -0.689894 0.107438 0.177182\nv -0.295209 0.36526 0.124242\nv -0.485849 0.378939 0.162074\nv -0.685564 0.270034 0.10635\nv -0.843033 0.106275 0.138541\nv -0.854034 0.200358 0.114129\nv 0.772913 0.0686691 0.0623987\nv 0.840254 0.0797874 0.0967863\nv 0.90763 0.0743886 0.0821194\nv 0.802389 0.15193 0.0266849\nv 0.83751 0.176024 0.0323662\nv 0.874441 0.170396 0.0347073\nv -0.498672 0.456848 -6.19005e-17\nv -0.698098 0.337154 -4.29463e-17\nv -0.274986 0.397887 -4.91094e-17\nv -0.677003 0.00403037 8.41544e-18\nv -0.871425 0.065613 -1.16415e-10\nv -0.896291 0.208699 -8.14907e-10\nv -0.166906 0.00996075 6.47217e-18\nv -0.186078 0.0975614 -1.16415e-10\nv -0.184891 0.213941 -1.16415e-10\nv 0.657854 0.00187488 5.82077e-11\nv 0.833427 0.196338 -1.95025e-17\nv 0.754218 0.0651178 5.82077e-11\nv 0.931822 0.0730587 -1.79818e-18\nv 0.797586 0.160679 -1.40039e-17\nv 0.875453 0.181436 -1.72501e-17\nv -0.65461 -0.08966 2.08186e-17\nv -0.723801 0.025341 4.84092e-18\nv -0.102878 -0.150759 1.16415e-10\nv -0.14908 -0.0553523 5.82077e-11\nv 0.469968 -0.152026 1.16415e-10\nv 0.553776 -0.0604325 5.82077e-11\nv 0.939266 -0.127794 3.01042e-17\nv -0.624913 -0.254192 1.16415e-10\nv -0.533532 -0.391342 1.16415e-10\nv -0.0778044 -0.271782 1.16415e-10\nv -0.43261 -0.478987 7.96934e-17\nv -0.313999 -0.511131 5.82077e-11\nv -0.195632 -0.479064 5.82077e-11\nv -0.109232 -0.391337 5.82077e-11\nv 0.438351 -0.271667 1.16415e-10\nv 0.469968 -0.391308 5.82077e-11\nv 0.93988 -0.271516 1.16415e-10\nv 0.885076 -0.39148 2.32831e-10\nv 0.793604 -0.479202 2.32831e-10\nv 0.675034 -0.51128 1.74623e-10\nv 0.556539 -0.479067 5.82077e-11\nv -0.0580414 -0.271817 -0.098488\nv -0.0499234 -0.210368 -0.134017\nv -0.0848111 -0.152967 -0.117345\nv -0.0761004 -0.210059 -0.0700625\nv -0.0651436 -0.210249 -0.103049\nv -0.0242509 -0.271801 -0.156825\nv -0.00788201 -0.210351 -0.188464\nv -0.0491732 -0.154145 -0.180057\nv -0.0307485 -0.210432 -0.162624\nv 0.0234353 -0.271706 -0.204499\nv 0.0474339 -0.209769 -0.230301\nv 0.00386772 -0.153215 -0.230651\nv 0.0183735 -0.210058 -0.21113\nv 0.0817801 -0.271631 -0.238216\nv 0.111622 -0.209728 -0.256897\nv 0.0696678 -0.152011 -0.267425\nv 0.0786859 -0.20969 -0.245664\nv 0.146793 -0.271664 -0.255684\nv 0.180455 -0.209769 -0.265999\nv 0.142676 -0.151995 -0.287004\nv 0.145739 -0.209758 -0.263709\nv 0.214116 -0.271668 -0.255686\nv 0.2493 -0.209772 -0.256937\nv 0.218243 -0.152026 -0.287031\nv 0.215174 -0.209773 -0.263721\nv 0.279145 -0.271667 -0.238261\nv 0.313455 -0.209772 -0.230363\nv 0.291244 -0.152026 -0.267471\nv 0.282246 -0.209772 -0.245748\nv 0.337449 -0.271667 -0.204599\nv 0.368545 -0.209772 -0.188091\nv 0.356696 -0.152026 -0.229682\nv 0.342382 -0.209772 -0.211029\nv 0.385054 -0.271667 -0.156995\nv 0.410818 -0.209772 -0.133\nv 0.410137 -0.152026 -0.176241\nv 0.391483 -0.209772 -0.161928\nv 0.418715 -0.271667 -0.0986909\nv 0.437391 -0.209772 -0.0688461\nv 0.447925 -0.152026 -0.11079\nv 0.426202 -0.209772 -0.101792\nv -0.0991893 -0.106006 -0.178125\nv -0.147259 -0.0643129 -0.172294\nv -0.123188 -0.101169 -0.101026\nv -0.114154 -0.103716 -0.142556\nv -0.0511497 -0.107064 -0.237268\nv -0.114057 -0.0711492 -0.246644\nv -0.078035 -0.107229 -0.209398\nv 0.016651 -0.103642 -0.284225\nv -0.0487264 -0.068936 -0.303165\nv -0.0191961 -0.105475 -0.262337\nv 0.0957946 -0.102445 -0.315947\nv 0.036451 -0.0648116 -0.34775\nv 0.0552125 -0.102715 -0.302353\nv 0.180461 -0.102426 -0.32711\nv 0.13139 -0.0641977 -0.372798\nv 0.137773 -0.102398 -0.324278\nv 0.265121 -0.102447 -0.31598\nv 0.229544 -0.064259 -0.372854\nv 0.223153 -0.102443 -0.324319\nv 0.344018 -0.102448 -0.2833\nv 0.324373 -0.0642679 -0.34745\nv 0.305638 -0.102448 -0.302221\nv 0.411768 -0.102448 -0.231314\nv 0.409396 -0.0642676 -0.298362\nv 0.379593 -0.102448 -0.259523\nv 0.463759 -0.102404 -0.163558\nv 0.47882 -0.064224 -0.228936\nv 0.439977 -0.102443 -0.199138\nv 0.496388 -0.102189 -0.0846442\nv 0.527963 -0.0628502 -0.14376\nv 0.48268 -0.102306 -0.125168\nv -0.174025 -0.043227 -0.249139\nv -0.223671 -0.0201571 -0.231252\nv -0.175612 -0.0280247 -0.141292\nv -0.180128 -0.0361138 -0.200517\nv -0.122572 -0.0475148 -0.319637\nv -0.197666 -0.0365876 -0.329754\nv -0.154102 -0.0470127 -0.287455\nv -0.0360242 -0.0425026 -0.37716\nv -0.118205 -0.0364251 -0.398664\nv -0.0824495 -0.0453328 -0.349731\nv 0.0683527 -0.0403781 -0.418431\nv -0.00861699 -0.0325916 -0.45707\nv 0.0146636 -0.0409377 -0.400554\nv 0.180466 -0.0402988 -0.433209\nv 0.115936 -0.0319609 -0.490257\nv 0.123938 -0.0402532 -0.429448\nv 0.292586 -0.0403392 -0.418478\nv 0.24501 -0.0320452 -0.490334\nv 0.237004 -0.0403308 -0.42952\nv 0.397075 -0.0403408 -0.375198\nv 0.369718 -0.032055 -0.456924\nv 0.346246 -0.0403411 -0.400256\nv 0.486802 -0.0403406 -0.306348\nv 0.48153 -0.0320545 -0.392369\nv 0.44419 -0.0403406 -0.343707\nv 0.555777 -0.038946 -0.216541\nv 0.572843 -0.0318183 -0.301132\nv 0.524174 -0.0402011 -0.263728\nv 0.598441 -0.0309911 -0.111177\nv 0.638872 -0.0233198 -0.190708\nv 0.581065 -0.0356539 -0.165465\nv -0.273188 -0.0338744 -0.327156\nv -0.365441 -0.0341811 -0.302473\nv -0.300421 0.00482689 -0.216009\nv -0.289404 -0.0197165 -0.269553\nv -0.204074 -0.0441423 -0.408953\nv -0.293014 -0.0610463 -0.410539\nv -0.244474 -0.0414184 -0.371696\nv -0.0959826 -0.041876 -0.482748\nv -0.188534 -0.066089 -0.491174\nv -0.153981 -0.0436108 -0.446699\nv 0.036709 -0.0402986 -0.536839\nv -0.053505 -0.0645796 -0.566049\nv -0.0318307 -0.0407682 -0.513502\nv 0.180462 -0.0402301 -0.555916\nv 0.100463 -0.0640818 -0.607829\nv 0.107927 -0.0401876 -0.551102\nv 0.324341 -0.0402668 -0.536993\nv 0.260485 -0.064125 -0.607897\nv 0.253018 -0.0402594 -0.551168\nv 0.458422 -0.0402681 -0.481454\nv 0.415092 -0.0641326 -0.566466\nv 0.393198 -0.0402684 -0.513608\nv 0.57356 -0.0402679 -0.393106\nv 0.553709 -0.0641322 -0.486435\nv 0.51888 -0.0402679 -0.441045\nv 0.662168 -0.0374995 -0.280261\nv 0.66698 -0.0638557 -0.373593\nv 0.621525 -0.0399911 -0.338655\nv 0.729861 -0.0103756 -0.165406\nv 0.750573 -0.0532636 -0.246585\nv 0.695953 -0.029913 -0.220927\nv -0.391736 -0.0832282 -0.392358\nv -0.499094 -0.111867 -0.328892\nv -0.48106 -0.0339638 -0.252514\nv -0.439837 -0.0636849 -0.32132\nv -0.284621 -0.100449 -0.485021\nv -0.380666 -0.142094 -0.468403\nv -0.340792 -0.0947357 -0.443497\nv -0.149278 -0.102807 -0.573672\nv -0.247276 -0.151044 -0.560555\nv -0.220523 -0.102572 -0.529665\nv 0.00932043 -0.102355 -0.639284\nv -0.086943 -0.152057 -0.64606\nv -0.0722361 -0.1026 -0.611089\nv 0.180464 -0.10226 -0.662193\nv 0.0891685 -0.151872 -0.693781\nv 0.0940764 -0.10226 -0.656429\nv 0.351845 -0.10227 -0.639646\nv 0.271813 -0.151852 -0.693936\nv 0.266887 -0.102267 -0.656536\nv 0.511557 -0.102272 -0.573488\nv 0.448303 -0.151854 -0.646644\nv 0.433865 -0.102272 -0.611788\nv 0.648705 -0.102271 -0.468251\nv 0.606539 -0.151854 -0.555285\nv 0.583572 -0.102272 -0.525354\nv 0.756509 -0.0997048 -0.333384\nv 0.736159 -0.151648 -0.42614\nv 0.706065 -0.102015 -0.403346\nv 0.838807 -0.0620148 -0.194356\nv 0.84164 -0.143213 -0.269121\nv 0.801004 -0.0914941 -0.261689\nv -0.465653 -0.193676 -0.420653\nv -0.528064 -0.258726 -0.328364\nv -0.584015 -0.170998 -0.229433\nv -0.526869 -0.181896 -0.334015\nv -0.340834 -0.206768 -0.532444\nv -0.412781 -0.267854 -0.482175\nv -0.405494 -0.201923 -0.482827\nv -0.183183 -0.209673 -0.628902\nv -0.272725 -0.271667 -0.589624\nv -0.265818 -0.208997 -0.581967\nv -0.0067234 -0.209731 -0.69867\nv -0.100134 -0.271753 -0.676744\nv -0.0965946 -0.209799 -0.668625\nv 0.180481 -0.209671 -0.723472\nv 0.0850214 -0.271669 -0.725224\nv 0.0860906 -0.209685 -0.717151\nv 0.367722 -0.209668 -0.69889\nv 0.275963 -0.271667 -0.725392\nv 0.274898 -0.209667 -0.717327\nv 0.542227 -0.209668 -0.626609\nv 0.460456 -0.271667 -0.675984\nv 0.457338 -0.209668 -0.668457\nv 0.692078 -0.209668 -0.511623\nv 0.625872 -0.271667 -0.580479\nv 0.620912 -0.209668 -0.574016\nv 0.811766 -0.208482 -0.361679\nv 0.761334 -0.27163 -0.445412\nv 0.754941 -0.20955 -0.440449\nv 0.90736 -0.202669 -0.186143\nv 0.869306 -0.270539 -0.279829\nv 0.864253 -0.205713 -0.276493\nv -0.456484 -0.331552 -0.392043\nv -0.472572 -0.39181 -0.278461\nv -0.548681 -0.328896 -0.209757\nv -0.507157 -0.329981 -0.3064\nv -0.339398 -0.333901 -0.524568\nv -0.377471 -0.392399 -0.434742\nv -0.401769 -0.332988 -0.463382\nv -0.183298 -0.333833 -0.628825\nv -0.247573 -0.391895 -0.557157\nv -0.265489 -0.334047 -0.58007\nv -0.00679534 -0.333661 -0.698813\nv -0.0872946 -0.391471 -0.646535\nv -0.096765 -0.333701 -0.668914\nv 0.180478 -0.333663 -0.723477\nv 0.0891393 -0.391468 -0.693841\nv 0.0860738 -0.333656 -0.717188\nv 0.367722 -0.333666 -0.698889\nv 0.271813 -0.39148 -0.693932\nv 0.274898 -0.333666 -0.717325\nv 0.542227 -0.333666 -0.626609\nv 0.448303 -0.39148 -0.646644\nv 0.457338 -0.333666 -0.668457\nv 0.692078 -0.333666 -0.511623\nv 0.606539 -0.39148 -0.555285\nv 0.620912 -0.333666 -0.574016\nv 0.809411 -0.333629 -0.361767\nv 0.735812 -0.39148 -0.426085\nv 0.754705 -0.333662 -0.440457\nv 0.892077 -0.333517 -0.187243\nv 0.829441 -0.39148 -0.267848\nv 0.856431 -0.333553 -0.276866\nv -0.393175 -0.442016 -0.333477\nv -0.385949 -0.479164 -0.234498\nv -0.460971 -0.441646 -0.172303\nv -0.432199 -0.441874 -0.255263\nv -0.288349 -0.441532 -0.469007\nv -0.30594 -0.479249 -0.373244\nv -0.345163 -0.44185 -0.404901\nv -0.15054 -0.441087 -0.573273\nv -0.192783 -0.479162 -0.486307\nv -0.22296 -0.441259 -0.525433\nv 0.00914546 -0.441045 -0.639526\nv -0.0541042 -0.479174 -0.566371\nv -0.0727715 -0.441034 -0.611563\nv 0.180458 -0.441062 -0.6622\nv 0.100428 -0.479202 -0.607885\nv 0.0940424 -0.441056 -0.656488\nv 0.351846 -0.441063 -0.639644\nv 0.260485 -0.479202 -0.607894\nv 0.266888 -0.441063 -0.656532\nv 0.511557 -0.441063 -0.573488\nv 0.415092 -0.479202 -0.566466\nv 0.433865 -0.441063 -0.611788\nv 0.648705 -0.441063 -0.468251\nv 0.553709 -0.479202 -0.486435\nv 0.583572 -0.441063 -0.525354\nv 0.754015 -0.441063 -0.331103\nv 0.66689 -0.479202 -0.373255\nv 0.705815 -0.441063 -0.403118\nv 0.820492 -0.441063 -0.171392\nv 0.74692 -0.479202 -0.234638\nv 0.792476 -0.441063 -0.253411\nv -0.300951 -0.502839 -0.277561\nv -0.276429 -0.511157 -0.189109\nv -0.356315 -0.502731 -0.143613\nv -0.333029 -0.502782 -0.212361\nv -0.212604 -0.502932 -0.392944\nv -0.211908 -0.511197 -0.300947\nv -0.260557 -0.502887 -0.338124\nv -0.097477 -0.503023 -0.481406\nv -0.120602 -0.511246 -0.392344\nv -0.157923 -0.50298 -0.440962\nv 0.036571 -0.503065 -0.53699\nv -0.00880659 -0.511277 -0.45692\nv -0.0322705 -0.503051 -0.513587\nv 0.180454 -0.503067 -0.555936\nv 0.115899 -0.511281 -0.49034\nv 0.10789 -0.503068 -0.551172\nv 0.324341 -0.503066 -0.536992\nv 0.245009 -0.51128 -0.490339\nv 0.253017 -0.503067 -0.551169\nv 0.458422 -0.503066 -0.481454\nv 0.369718 -0.51128 -0.456923\nv 0.393198 -0.503066 -0.513608\nv 0.57356 -0.503066 -0.393106\nv 0.48153 -0.51128 -0.392369\nv 0.51888 -0.503066 -0.441045\nv 0.661908 -0.503066 -0.277968\nv 0.572823 -0.51128 -0.301075\nv 0.621499 -0.503066 -0.338426\nv 0.717446 -0.503066 -0.143887\nv 0.637378 -0.51128 -0.189264\nv 0.694062 -0.503066 -0.212743\nv -0.194748 -0.502971 -0.216588\nv -0.166995 -0.479064 -0.143912\nv -0.238013 -0.502968 -0.11212\nv -0.219799 -0.502968 -0.165766\nv -0.12589 -0.502981 -0.30634\nv -0.117907 -0.479064 -0.228937\nv -0.163254 -0.502975 -0.263712\nv -0.036166 -0.502994 -0.375198\nv -0.048486 -0.479066 -0.298363\nv -0.0832785 -0.502988 -0.343706\nv 0.0683229 -0.502994 -0.418479\nv 0.0365352 -0.479067 -0.347451\nv 0.0146626 -0.502995 -0.400256\nv 0.180454 -0.502994 -0.433241\nv 0.131366 -0.479067 -0.37286\nv 0.123906 -0.502994 -0.429527\nv 0.292585 -0.502994 -0.418479\nv 0.229542 -0.479067 -0.37286\nv 0.237003 -0.502994 -0.429527\nv 0.397075 -0.502994 -0.375198\nv 0.324373 -0.479067 -0.34745\nv 0.346245 -0.502994 -0.400255\nv 0.486802 -0.502994 -0.306348\nv 0.409396 -0.479067 -0.298362\nv 0.44419 -0.502994 -0.343707\nv 0.555652 -0.502994 -0.216621\nv 0.478817 -0.479067 -0.228941\nv 0.524161 -0.502994 -0.263736\nv 0.598933 -0.502994 -0.112131\nv 0.527905 -0.479067 -0.143919\nv 0.58071 -0.502994 -0.165791\nv -0.10285 -0.440888 -0.163535\nv -0.0870881 -0.391312 -0.110624\nv -0.135544 -0.440889 -0.0846324\nv -0.121776 -0.440889 -0.125148\nv -0.0508557 -0.440888 -0.231302\nv -0.0492386 -0.391301 -0.176135\nv -0.0790673 -0.440888 -0.199118\nv 0.0168911 -0.440886 -0.2833\nv 0.00422156 -0.391302 -0.229649\nv -0.0186817 -0.440887 -0.259518\nv 0.0957873 -0.440887 -0.315981\nv 0.0696659 -0.391306 -0.267468\nv 0.0552701 -0.440886 -0.302222\nv 0.180454 -0.440887 -0.327127\nv 0.142666 -0.391309 -0.287032\nv 0.137756 -0.440887 -0.324323\nv 0.265121 -0.440887 -0.31598\nv 0.218243 -0.391308 -0.287031\nv 0.223152 -0.440887 -0.324322\nv 0.344018 -0.440887 -0.2833\nv 0.291244 -0.391308 -0.267471\nv 0.305638 -0.440887 -0.30222\nv 0.411768 -0.440887 -0.231314\nv 0.356696 -0.391308 -0.229682\nv 0.379593 -0.440887 -0.259523\nv 0.463755 -0.440887 -0.163564\nv 0.410137 -0.391308 -0.176241\nv 0.439977 -0.440887 -0.199139\nv 0.496435 -0.440887 -0.0846667\nv 0.447925 -0.391308 -0.11079\nv 0.482675 -0.440887 -0.125184\nv -0.0500176 -0.333558 -0.132653\nv -0.0767803 -0.333617 -0.0684964\nv -0.0654913 -0.333583 -0.101403\nv -0.00763665 -0.333549 -0.187924\nv -0.0306158 -0.333549 -0.161666\nv 0.047468 -0.333548 -0.230319\nv 0.0185415 -0.333548 -0.210934\nv 0.11161 -0.33356 -0.256935\nv 0.0786697 -0.333554 -0.245732\nv 0.180454 -0.333563 -0.266001\nv 0.145734 -0.333563 -0.263722\nv 0.2493 -0.333562 -0.256937\nv 0.215174 -0.333562 -0.26372\nv 0.313455 -0.333562 -0.230363\nv 0.282246 -0.333562 -0.245748\nv 0.368545 -0.333562 -0.188091\nv 0.342382 -0.333562 -0.211029\nv 0.410818 -0.333562 -0.133\nv 0.391483 -0.333562 -0.161928\nv 0.437391 -0.333562 -0.0688461\nv 0.426202 -0.333562 -0.101792\nv -0.413235 0.0307927 -0.215014\nv -0.328458 0.0891862 -0.185806\nv -0.235574 0.0472796 -0.14061\nv -0.316214 0.0429871 -0.188904\nv -0.58849 -0.0173204 -0.179577\nv -0.529436 0.0525732 -0.206785\nv -0.507595 0.00736171 -0.215085\nv -0.445191 0.12772 -0.228237\nv -0.337605 0.208964 -0.209815\nv -0.241391 0.144498 -0.145107\nv -0.332318 0.140649 -0.200093\nv -0.638921 0.0643614 -0.172817\nv -0.575736 0.160544 -0.222137\nv -0.553834 0.0996837 -0.218394\nv -0.473009 0.288745 -0.215528\nv -0.372583 0.387056 -0.151191\nv -0.25964 0.29903 -0.140623\nv -0.353744 0.301511 -0.193845\nv -0.687006 0.196302 -0.157981\nv -0.587366 0.329601 -0.135003\nv -0.583543 0.245801 -0.191275\nv -0.785422 0.101364 -0.155497\nv -0.860197 0.153004 -0.139869\nv -0.789135 0.230223 -0.11016\nv -0.785428 0.168674 -0.152096\nv 0.818122 0.019682 -0.138733\nv 0.877358 0.0781868 -0.0977282\nv 0.905619 -0.0154762 -0.119211\nv 0.865505 0.00330128 -0.140704\nv 0.732075 0.0277765 -0.0896288\nv 0.802666 0.0750748 -0.0842822\nv 0.770488 0.0265953 -0.120915\nv 0.843333 0.13561 -0.0606578\nv 0.85774 0.177989 -0.0340121\nv 0.891851 0.139138 -0.0526927\nv 0.8704 0.138973 -0.0616768\nv 0.793546 0.117966 -0.0399885\nv 0.816824 0.167225 -0.0289731\nv 0.815467 0.127154 -0.0530445\nv -0.0761004 -0.210059 0.0700625\nv -0.0848111 -0.152967 0.117345\nv -0.0499234 -0.210368 0.134017\nv -0.0580414 -0.271817 0.098488\nv -0.0651436 -0.210249 0.103049\nv -0.0491732 -0.154145 0.180057\nv -0.00788201 -0.210351 0.188464\nv -0.0242509 -0.271801 0.156825\nv -0.0307485 -0.210432 0.162624\nv 0.00386772 -0.153215 0.230651\nv 0.0474339 -0.209769 0.230301\nv 0.0234353 -0.271706 0.204499\nv 0.0183735 -0.210058 0.21113\nv 0.0696678 -0.152011 0.267425\nv 0.111622 -0.209728 0.256897\nv 0.0817801 -0.271631 0.238216\nv 0.0786859 -0.20969 0.245664\nv 0.142676 -0.151995 0.287004\nv 0.180455 -0.209769 0.265999\nv 0.146793 -0.271664 0.255684\nv 0.145739 -0.209758 0.263709\nv 0.218243 -0.152026 0.287031\nv 0.2493 -0.209772 0.256937\nv 0.214116 -0.271668 0.255686\nv 0.215174 -0.209773 0.263721\nv 0.291244 -0.152026 0.267471\nv 0.313455 -0.209772 0.230363\nv 0.279145 -0.271667 0.238261\nv 0.282246 -0.209772 0.245748\nv 0.356696 -0.152026 0.229682\nv 0.368545 -0.209772 0.188091\nv 0.337449 -0.271667 0.204599\nv 0.342382 -0.209772 0.211029\nv 0.410137 -0.152026 0.176241\nv 0.410818 -0.209772 0.133\nv 0.385054 -0.271667 0.156995\nv 0.391483 -0.209772 0.161928\nv 0.447925 -0.152026 0.11079\nv 0.437391 -0.209772 0.0688461\nv 0.418715 -0.271667 0.0986909\nv 0.426202 -0.209772 0.101792\nv -0.123188 -0.101168 0.101026\nv -0.147259 -0.0643129 0.172294\nv -0.0991893 -0.106006 0.178125\nv -0.114154 -0.103716 0.142556\nv -0.114057 -0.0711491 0.246644\nv -0.0511497 -0.107064 0.237268\nv -0.078035 -0.107229 0.209398\nv -0.0487264 -0.068936 0.303165\nv 0.016651 -0.103642 0.284225\nv -0.0191961 -0.105475 0.262337\nv 0.036451 -0.0648116 0.34775\nv 0.0957946 -0.102445 0.315947\nv 0.0552125 -0.102715 0.302353\nv 0.13139 -0.0641977 0.372798\nv 0.180461 -0.102426 0.32711\nv 0.137773 -0.102398 0.324278\nv 0.229544 -0.064259 0.372854\nv 0.265121 -0.102447 0.31598\nv 0.223153 -0.102443 0.324319\nv 0.324373 -0.0642679 0.34745\nv 0.344018 -0.102448 0.2833\nv 0.305638 -0.102448 0.302221\nv 0.409396 -0.0642676 0.298362\nv 0.411768 -0.102448 0.231314\nv 0.379593 -0.102448 0.259523\nv 0.47882 -0.064224 0.228936\nv 0.463759 -0.102404 0.163558\nv 0.439977 -0.102443 0.199138\nv 0.527963 -0.0628502 0.14376\nv 0.496388 -0.102189 0.0846442\nv 0.48268 -0.102306 0.125168\nv -0.175612 -0.0280246 0.141292\nv -0.223671 -0.0201571 0.231252\nv -0.174025 -0.0432269 0.249139\nv -0.180128 -0.0361138 0.200517\nv -0.197666 -0.0365876 0.329754\nv -0.122572 -0.0475147 0.319637\nv -0.154102 -0.0470127 0.287455\nv -0.118205 -0.0364251 0.398664\nv -0.0360242 -0.0425026 0.37716\nv -0.0824495 -0.0453328 0.349731\nv -0.00861699 -0.0325916 0.45707\nv 0.0683527 -0.0403781 0.418431\nv 0.0146636 -0.0409377 0.400554\nv 0.115936 -0.0319609 0.490257\nv 0.180466 -0.0402988 0.433209\nv 0.123938 -0.0402532 0.429448\nv 0.24501 -0.0320452 0.490334\nv 0.292586 -0.0403392 0.418478\nv 0.237004 -0.0403308 0.42952\nv 0.369718 -0.032055 0.456924\nv 0.397075 -0.0403408 0.375198\nv 0.346246 -0.040341 0.400256\nv 0.48153 -0.0320545 0.392369\nv 0.486802 -0.0403406 0.306348\nv 0.44419 -0.0403406 0.343707\nv 0.572843 -0.0318183 0.301132\nv 0.555777 -0.038946 0.216541\nv 0.524174 -0.0402011 0.263728\nv 0.638872 -0.0233198 0.190708\nv 0.598441 -0.0309911 0.111177\nv 0.581065 -0.0356539 0.165465\nv -0.300421 0.00482689 0.216009\nv -0.365441 -0.0341811 0.302473\nv -0.273188 -0.0338744 0.327156\nv -0.289404 -0.0197165 0.269553\nv -0.293014 -0.0610462 0.410539\nv -0.204074 -0.0441422 0.408953\nv -0.244474 -0.0414184 0.371696\nv -0.188534 -0.066089 0.491174\nv -0.0959826 -0.041876 0.482748\nv -0.153981 -0.0436107 0.446699\nv -0.053505 -0.0645796 0.566049\nv 0.036709 -0.0402986 0.536839\nv -0.0318307 -0.0407682 0.513502\nv 0.100463 -0.0640818 0.607829\nv 0.180462 -0.0402301 0.555916\nv 0.107927 -0.0401876 0.551102\nv 0.260485 -0.064125 0.607897\nv 0.324341 -0.0402668 0.536993\nv 0.253018 -0.0402593 0.551168\nv 0.415092 -0.0641325 0.566466\nv 0.458422 -0.0402681 0.481454\nv 0.393198 -0.0402684 0.513608\nv 0.553709 -0.0641322 0.486435\nv 0.57356 -0.0402679 0.393106\nv 0.51888 -0.0402679 0.441045\nv 0.66698 -0.0638557 0.373593\nv 0.662168 -0.0374995 0.280261\nv 0.621525 -0.0399911 0.338655\nv 0.750573 -0.0532636 0.246585\nv 0.729861 -0.0103756 0.165406\nv 0.695953 -0.029913 0.220927\nv -0.48106 -0.0339638 0.252514\nv -0.499094 -0.111867 0.328892\nv -0.391736 -0.0832282 0.392358\nv -0.439837 -0.0636849 0.32132\nv -0.380666 -0.142094 0.468403\nv -0.284621 -0.100449 0.485021\nv -0.340792 -0.0947356 0.443497\nv -0.247276 -0.151044 0.560555\nv -0.149278 -0.102807 0.573672\nv -0.220523 -0.102572 0.529665\nv -0.086943 -0.152057 0.64606\nv 0.00932043 -0.102355 0.639284\nv -0.0722361 -0.1026 0.611089\nv 0.0891685 -0.151872 0.693781\nv 0.180464 -0.10226 0.662193\nv 0.0940764 -0.10226 0.656429\nv 0.271813 -0.151852 0.693936\nv 0.351845 -0.10227 0.639646\nv 0.266887 -0.102267 0.656536\nv 0.448303 -0.151854 0.646644\nv 0.511557 -0.102272 0.573488\nv 0.433865 -0.102272 0.611788\nv 0.606539 -0.151854 0.555285\nv 0.648705 -0.102271 0.468251\nv 0.583572 -0.102271 0.525354\nv 0.736159 -0.151648 0.42614\nv 0.756509 -0.0997048 0.333384\nv 0.706065 -0.102015 0.403346\nv 0.84164 -0.143213 0.269121\nv 0.838807 -0.0620148 0.194356\nv 0.801004 -0.0914941 0.261689\nv -0.584015 -0.170998 0.229433\nv -0.528064 -0.258726 0.328364\nv -0.465653 -0.193676 0.420653\nv -0.526869 -0.181896 0.334015\nv -0.412781 -0.267854 0.482175\nv -0.340834 -0.206768 0.532444\nv -0.405494 -0.201923 0.482827\nv -0.272725 -0.271667 0.589624\nv -0.183183 -0.209673 0.628902\nv -0.265818 -0.208997 0.581967\nv -0.100134 -0.271753 0.676744\nv -0.0067234 -0.209731 0.69867\nv -0.0965946 -0.209799 0.668625\nv 0.0850214 -0.271669 0.725224\nv 0.180481 -0.209671 0.723472\nv 0.0860906 -0.209685 0.717151\nv 0.275963 -0.271667 0.725392\nv 0.367722 -0.209668 0.69889\nv 0.274898 -0.209667 0.717327\nv 0.460456 -0.271667 0.675984\nv 0.542227 -0.209668 0.626609\nv 0.457338 -0.209668 0.668457\nv 0.625872 -0.271667 0.580479\nv 0.692078 -0.209668 0.511623\nv 0.620912 -0.209668 0.574016\nv 0.761334 -0.27163 0.445412\nv 0.811766 -0.208482 0.361679\nv 0.754941 -0.20955 0.440449\nv 0.869306 -0.270539 0.279829\nv 0.90736 -0.202669 0.186143\nv 0.864253 -0.205713 0.276493\nv -0.548681 -0.328896 0.209757\nv -0.472572 -0.39181 0.278461\nv -0.456484 -0.331552 0.392043\nv -0.507157 -0.329981 0.3064\nv -0.377471 -0.392399 0.434742\nv -0.339398 -0.333901 0.524568\nv -0.401769 -0.332988 0.463382\nv -0.247573 -0.391895 0.557157\nv -0.183298 -0.333833 0.628825\nv -0.265489 -0.334047 0.58007\nv -0.0872946 -0.391471 0.646535\nv -0.00679534 -0.333661 0.698813\nv -0.096765 -0.333701 0.668914\nv 0.0891393 -0.391468 0.693841\nv 0.180478 -0.333663 0.723477\nv 0.0860738 -0.333656 0.717188\nv 0.271813 -0.39148 0.693932\nv 0.367722 -0.333666 0.698889\nv 0.274898 -0.333666 0.717325\nv 0.448303 -0.39148 0.646644\nv 0.542227 -0.333666 0.626609\nv 0.457338 -0.333666 0.668457\nv 0.606539 -0.39148 0.555285\nv 0.692078 -0.333666 0.511623\nv 0.620912 -0.333666 0.574016\nv 0.735812 -0.39148 0.426085\nv 0.809411 -0.333629 0.361767\nv 0.754705 -0.333662 0.440457\nv 0.829441 -0.39148 0.267848\nv 0.892077 -0.333517 0.187243\nv 0.856431 -0.333553 0.276866\nv -0.460971 -0.441646 0.172303\nv -0.385949 -0.479164 0.234498\nv -0.393175 -0.442016 0.333477\nv -0.432199 -0.441874 0.255263\nv -0.30594 -0.479249 0.373244\nv -0.288349 -0.441532 0.469007\nv -0.345163 -0.44185 0.404901\nv -0.192783 -0.479162 0.486307\nv -0.15054 -0.441087 0.573273\nv -0.22296 -0.441259 0.525433\nv -0.0541042 -0.479174 0.566371\nv 0.00914546 -0.441045 0.639526\nv -0.0727715 -0.441034 0.611563\nv 0.100428 -0.479202 0.607885\nv 0.180458 -0.441062 0.6622\nv 0.0940424 -0.441056 0.656488\nv 0.260485 -0.479202 0.607894\nv 0.351846 -0.441063 0.639644\nv 0.266888 -0.441063 0.656532\nv 0.415092 -0.479202 0.566466\nv 0.511557 -0.441063 0.573488\nv 0.433865 -0.441063 0.611788\nv 0.553709 -0.479202 0.486435\nv 0.648705 -0.441063 0.468251\nv 0.583572 -0.441063 0.525354\nv 0.66689 -0.479202 0.373255\nv 0.754015 -0.441063 0.331103\nv 0.705815 -0.441063 0.403118\nv 0.74692 -0.479202 0.234638\nv 0.820492 -0.441063 0.171392\nv 0.792476 -0.441063 0.253411\nv -0.356315 -0.502731 0.143613\nv -0.276429 -0.511157 0.189109\nv -0.300951 -0.502839 0.277561\nv -0.333029 -0.502782 0.212361\nv -0.211908 -0.511197 0.300947\nv -0.212604 -0.502932 0.392944\nv -0.260557 -0.502887 0.338124\nv -0.120602 -0.511246 0.392344\nv -0.097477 -0.503023 0.481406\nv -0.157923 -0.50298 0.440962\nv -0.00880659 -0.511277 0.45692\nv 0.036571 -0.503065 0.53699\nv -0.0322705 -0.503051 0.513587\nv 0.115899 -0.511281 0.49034\nv 0.180454 -0.503067 0.555936\nv 0.10789 -0.503068 0.551172\nv 0.245009 -0.51128 0.490339\nv 0.324341 -0.503066 0.536992\nv 0.253017 -0.503066 0.551169\nv 0.369718 -0.51128 0.456923\nv 0.458422 -0.503066 0.481454\nv 0.393198 -0.503066 0.513608\nv 0.48153 -0.51128 0.392369\nv 0.57356 -0.503066 0.393106\nv 0.51888 -0.503066 0.441045\nv 0.572823 -0.51128 0.301075\nv 0.661908 -0.503066 0.277968\nv 0.621499 -0.503066 0.338426\nv 0.637378 -0.51128 0.189264\nv 0.717446 -0.503066 0.143887\nv 0.694062 -0.503066 0.212743\nv -0.238013 -0.502968 0.11212\nv -0.166995 -0.479064 0.143912\nv -0.194748 -0.502971 0.216588\nv -0.219799 -0.502968 0.165766\nv -0.117907 -0.479064 0.228937\nv -0.12589 -0.502981 0.30634\nv -0.163254 -0.502975 0.263712\nv -0.048486 -0.479066 0.298363\nv -0.036166 -0.502994 0.375198\nv -0.0832785 -0.502988 0.343706\nv 0.0365352 -0.479067 0.347451\nv 0.0683229 -0.502994 0.418479\nv 0.0146626 -0.502995 0.400256\nv 0.131366 -0.479067 0.37286\nv 0.180454 -0.502994 0.433241\nv 0.123906 -0.502994 0.429527\nv 0.229542 -0.479067 0.37286\nv 0.292585 -0.502994 0.418479\nv 0.237003 -0.502994 0.429527\nv 0.324373 -0.479067 0.34745\nv 0.397075 -0.502994 0.375198\nv 0.346245 -0.502994 0.400255\nv 0.409396 -0.479067 0.298362\nv 0.486802 -0.502994 0.306348\nv 0.44419 -0.502994 0.343707\nv 0.478817 -0.479067 0.228941\nv 0.555652 -0.502994 0.216621\nv 0.524161 -0.502994 0.263736\nv 0.527905 -0.479067 0.143919\nv 0.598933 -0.502994 0.112131\nv 0.58071 -0.502994 0.165791\nv -0.135544 -0.440889 0.0846324\nv -0.0870881 -0.391312 0.110624\nv -0.10285 -0.440888 0.163535\nv -0.121776 -0.440889 0.125148\nv -0.0492386 -0.391301 0.176135\nv -0.0508557 -0.440888 0.231302\nv -0.0790673 -0.440888 0.199118\nv 0.00422156 -0.391302 0.229649\nv 0.0168911 -0.440886 0.2833\nv -0.0186817 -0.440887 0.259518\nv 0.0696659 -0.391306 0.267468\nv 0.0957873 -0.440887 0.315981\nv 0.0552701 -0.440886 0.302222\nv 0.142666 -0.391309 0.287032\nv 0.180454 -0.440887 0.327127\nv 0.137756 -0.440887 0.324323\nv 0.218243 -0.391308 0.287031\nv 0.265121 -0.440887 0.31598\nv 0.223152 -0.440887 0.324322\nv 0.291244 -0.391308 0.267471\nv 0.344018 -0.440887 0.2833\nv 0.305638 -0.440887 0.30222\nv 0.356696 -0.391308 0.229682\nv 0.411768 -0.440887 0.231314\nv 0.379593 -0.440887 0.259523\nv 0.410137 -0.391308 0.176241\nv 0.463755 -0.440887 0.163564\nv 0.439977 -0.440887 0.199139\nv 0.447925 -0.391308 0.11079\nv 0.496435 -0.440887 0.0846667\nv 0.482675 -0.440887 0.125184\nv -0.0767803 -0.333617 0.0684964\nv -0.0500176 -0.333558 0.132653\nv -0.0654913 -0.333583 0.101403\nv -0.00763665 -0.333549 0.187924\nv -0.0306158 -0.333549 0.161666\nv 0.047468 -0.333548 0.230319\nv 0.0185415 -0.333548 0.210934\nv 0.11161 -0.33356 0.256935\nv 0.0786697 -0.333554 0.245732\nv 0.180454 -0.333563 0.266001\nv 0.145734 -0.333563 0.263722\nv 0.2493 -0.333562 0.256937\nv 0.215174 -0.333562 0.26372\nv 0.313455 -0.333562 0.230363\nv 0.282246 -0.333562 0.245748\nv 0.368545 -0.333562 0.188091\nv 0.342382 -0.333562 0.211029\nv 0.410818 -0.333562 0.133\nv 0.391483 -0.333562 0.161928\nv 0.437391 -0.333562 0.0688461\nv 0.426202 -0.333562 0.101792\nv -0.235574 0.0472796 0.14061\nv -0.328458 0.0891862 0.185806\nv -0.413235 0.0307927 0.215014\nv -0.316214 0.0429871 0.188904\nv -0.529436 0.0525732 0.206785\nv -0.58849 -0.0173204 0.179577\nv -0.507595 0.00736171 0.215085\nv -0.241391 0.144498 0.145107\nv -0.337605 0.208964 0.209815\nv -0.445191 0.12772 0.228237\nv -0.332318 0.140649 0.200093\nv -0.575736 0.160544 0.222137\nv -0.638921 0.0643614 0.172817\nv -0.553834 0.0996837 0.218394\nv -0.25964 0.29903 0.140623\nv -0.372583 0.387056 0.151191\nv -0.473009 0.288745 0.215528\nv -0.353744 0.301511 0.193845\nv -0.587366 0.329601 0.135003\nv -0.687006 0.196302 0.157981\nv -0.583543 0.245801 0.191275\nv -0.789135 0.230223 0.11016\nv -0.860197 0.153004 0.139869\nv -0.785422 0.101364 0.155497\nv -0.785428 0.168674 0.152096\nv 0.905619 -0.0154762 0.119211\nv 0.877358 0.0781868 0.0977282\nv 0.818122 0.019682 0.138733\nv 0.865505 0.00330129 0.140704\nv 0.802666 0.0750748 0.0842822\nv 0.732075 0.0277765 0.0896288\nv 0.770488 0.0265953 0.120915\nv 0.891851 0.139138 0.0526927\nv 0.85774 0.177989 0.0340121\nv 0.843333 0.13561 0.0606578\nv 0.8704 0.138973 0.0616768\nv 0.816824 0.167225 0.0289731\nv 0.793546 0.117966 0.0399885\nv 0.815467 0.127154 0.0530445\nv -0.0755848 -0.2718 -0.0335715\nv -0.101204 -0.15116 -0.0415152\nv -0.0846375 -0.20965 3.49246e-10\nv -0.0825456 -0.209795 -0.035453\nv 0.43614 -0.271667 -0.0336617\nv 0.446455 -0.209772 3.49246e-10\nv 0.467486 -0.152026 -0.0377884\nv 0.444174 -0.209772 -0.0347194\nv -0.150655 -0.0564649 -0.0642076\nv -0.127559 -0.0984256 3.49246e-10\nv -0.126925 -0.0992117 -0.052451\nv 0.507305 -0.102064 3.49246e-10\nv 0.551439 -0.0607857 -0.0489341\nv 0.504589 -0.1021 -0.0426825\nv -0.177424 0.00866859 -0.0767598\nv -0.159645 -0.0224061 1.17094e-17\nv -0.165114 -0.0236375 -0.0726085\nv 0.604628 -0.0267465 1.36609e-17\nv 0.660128 0.000244042 -0.0571422\nv 0.603972 -0.0278649 -0.0554683\nv -0.633054 -0.0881325 -0.111058\nv -0.612216 -0.253967 -0.115324\nv -0.644935 -0.169144 3.38271e-17\nv -0.627734 -0.1688 -0.116447\nv 0.929186 -0.124808 -0.0853796\nv 0.94286 -0.206859 3.9465e-17\nv 0.932589 -0.270901 -0.0953365\nv 0.934126 -0.204911 -0.0934546\nv -0.526672 -0.391283 -0.0952024\nv -0.584318 -0.328933 6.98492e-10\nv -0.575121 -0.328765 -0.106492\nv 0.919241 -0.333651 6.98492e-10\nv 0.879002 -0.39148 -0.0913581\nv 0.912741 -0.333589 -0.0944232\nv -0.4274 -0.478995 -0.0798588\nv -0.483969 -0.441574 7.58942e-17\nv -0.478246 -0.441569 -0.0867633\nv 0.843129 -0.441063 6.98492e-10\nv 0.788347 -0.479202 -0.0800307\nv 0.837445 -0.441063 -0.0864337\nv -0.309769 -0.511134 -0.0645078\nv -0.375151 -0.502697 8.32667e-17\nv -0.370415 -0.502704 -0.0724221\nv 0.736389 -0.503066 6.98492e-10\nv 0.670793 -0.51128 -0.0645544\nv 0.731623 -0.503066 -0.0725628\nv -0.192407 -0.479064 -0.049086\nv -0.252769 -0.502967 3.49246e-10\nv -0.249056 -0.502967 -0.0565448\nv 0.613696 -0.502994 3.49246e-10\nv 0.553314 -0.479067 -0.049088\nv 0.609981 -0.502994 -0.0565483\nv -0.10673 -0.391332 -0.0376983\nv -0.146707 -0.440888 7.39426e-17\nv -0.143897 -0.440888 -0.0426771\nv 0.507581 -0.440887 7.37257e-17\nv 0.467486 -0.391308 -0.0377884\nv 0.504777 -0.440887 -0.0426979\nv -0.085982 -0.333662 3.49246e-10\nv -0.0836577 -0.333648 -0.034515\nv 0.446455 -0.333562 3.49246e-10\nv 0.444174 -0.333562 -0.0347194\nv -0.199121 0.0967407 -0.0728076\nv -0.178456 0.0509788 8.67362e-19\nv -0.19139 0.0500535 -0.0741564\nv -0.665542 -0.0315066 1.43115e-17\nv -0.66006 0.00993922 -0.0937865\nv -0.644635 -0.0289068 -0.100134\nv -0.689551 0.0194361 5.20417e-18\nv -0.72 0.0457346 -0.0976956\nv -0.67977 0.0327668 -0.0949429\nv -0.194812 0.212576 -0.0778057\nv -0.182795 0.147277 -6.98492e-10\nv -0.194688 0.146495 -0.0758975\nv -0.278106 0.389004 -0.0720166\nv -0.211437 0.307445 -3.46945e-17\nv -0.218703 0.303928 -0.0736937\nv -0.495088 0.436977 -0.0866339\nv -0.380974 0.452073 -5.9848e-17\nv -0.379314 0.436736 -0.0826285\nv -0.692581 0.319274 -0.0526598\nv -0.598913 0.408224 -5.42101e-17\nv -0.594502 0.387109 -0.0693832\nv -0.795529 0.0346344 4.33681e-18\nv -0.863254 0.0782057 -0.0903189\nv -0.792402 0.0529175 -0.0953529\nv -0.884781 0.208696 -0.0725311\nv -0.810921 0.27381 -1.16415e-10\nv -0.802966 0.264163 -0.0581613\nv -0.91265 0.131403 -8.14907e-10\nv -0.900729 0.138669 -0.0848763\nv 0.925877 0.0730217 -0.0465614\nv 0.939215 -0.0258709 1.40946e-17\nv 0.93085 -0.023846 -0.0666014\nv 0.710803 0.0295292 3.49246e-10\nv 0.757918 0.0656501 -0.0331154\nv 0.714725 0.0289187 -0.046878\nv 0.874719 0.179574 -0.0189955\nv 0.906502 0.142004 -1.19262e-17\nv 0.903121 0.141122 -0.0299229\nv 0.780399 0.11452 -7.80626e-18\nv 0.798703 0.159491 -0.0139565\nv 0.782925 0.115038 -0.0212905\nv 0.81516 0.186375 -1.78893e-17\nv 0.834139 0.193388 -0.0135645\nv 0.815706 0.18386 -0.0124552\nv 0.852001 0.196839 -1.95156e-17\nv 0.852596 0.194189 -0.0148541\nv -0.101204 -0.15116 0.0415152\nv -0.0755848 -0.2718 0.0335715\nv -0.0825456 -0.209795 0.035453\nv 0.467486 -0.152026 0.0377884\nv 0.43614 -0.271667 0.0336617\nv 0.444174 -0.209772 0.0347194\nv -0.150655 -0.0564649 0.0642076\nv -0.126925 -0.0992117 0.052451\nv 0.551439 -0.0607857 0.0489341\nv 0.504589 -0.1021 0.0426825\nv -0.177424 0.00866859 0.0767598\nv -0.165114 -0.0236375 0.0726085\nv 0.660128 0.000244042 0.0571422\nv 0.603972 -0.0278649 0.0554683\nv -0.612216 -0.253967 0.115324\nv -0.633054 -0.0881325 0.111058\nv -0.627734 -0.1688 0.116447\nv 0.932589 -0.270901 0.0953365\nv 0.929186 -0.124808 0.0853796\nv 0.934126 -0.204911 0.0934546\nv -0.526672 -0.391283 0.0952024\nv -0.575121 -0.328765 0.106492\nv 0.879002 -0.39148 0.0913581\nv 0.912741 -0.333589 0.0944232\nv -0.4274 -0.478995 0.0798588\nv -0.478246 -0.441569 0.0867633\nv 0.788347 -0.479202 0.0800307\nv 0.837445 -0.441063 0.0864337\nv -0.309769 -0.511134 0.0645078\nv -0.370415 -0.502704 0.0724221\nv 0.670793 -0.51128 0.0645544\nv 0.731623 -0.503066 0.0725628\nv -0.192407 -0.479064 0.049086\nv -0.249056 -0.502967 0.0565448\nv 0.553314 -0.479067 0.049088\nv 0.609981 -0.502994 0.0565483\nv -0.10673 -0.391332 0.0376983\nv -0.143897 -0.440888 0.0426771\nv 0.467486 -0.391308 0.0377884\nv 0.504777 -0.440887 0.0426979\nv -0.0836577 -0.333648 0.034515\nv 0.444174 -0.333562 0.0347194\nv -0.199121 0.0967407 0.0728076\nv -0.19139 0.0500535 0.0741564\nv -0.66006 0.00993922 0.0937865\nv -0.644635 -0.0289068 0.100134\nv -0.72 0.0457346 0.0976956\nv -0.67977 0.0327668 0.0949429\nv -0.194812 0.212576 0.0778057\nv -0.194688 0.146495 0.0758975\nv -0.278106 0.389004 0.0720166\nv -0.218703 0.303928 0.0736937\nv -0.495088 0.436977 0.0866339\nv -0.379314 0.436736 0.0826285\nv -0.692581 0.319274 0.0526598\nv -0.594502 0.387109 0.0693832\nv -0.863254 0.0782057 0.0903189\nv -0.792402 0.0529175 0.0953529\nv -0.884781 0.208696 0.0725311\nv -0.802966 0.264163 0.0581613\nv -0.900729 0.138669 0.0848763\nv 0.925877 0.0730217 0.0465614\nv 0.93085 -0.0238459 0.0666014\nv 0.757918 0.0656501 0.0331154\nv 0.714725 0.0289187 0.046878\nv 0.874719 0.179574 0.0189955\nv 0.903121 0.141122 0.0299229\nv 0.798703 0.159491 0.0139565\nv 0.782925 0.115038 0.0212905\nv 0.834139 0.193388 0.0135645\nv 0.815706 0.18386 0.0124552\nv 0.852596 0.194189 0.0148541\nv -0.0640308 -0.271823 -0.0827094\nv -0.0598727 -0.240751 -0.0997041\nv -0.0711747 -0.210165 -0.0867874\nv -0.0708061 -0.240702 -0.0675237\nv -0.0658735 -0.240734 -0.0838036\nv -0.0510345 -0.271809 -0.113855\nv -0.0448161 -0.240767 -0.130131\nv -0.0580466 -0.210315 -0.118806\nv -0.052841 -0.240761 -0.115166\nv -0.0581587 -0.18117 -0.140629\nv -0.0776575 -0.153385 -0.134162\nv -0.0735558 -0.180818 -0.108828\nv -0.0664019 -0.181011 -0.125047\nv -0.0907521 -0.152508 -0.0996946\nv -0.0844509 -0.180351 -0.0745063\nv -0.0795842 -0.180597 -0.0919784\nv -0.0341024 -0.271802 -0.143087\nv -0.0259343 -0.240779 -0.158332\nv -0.0408134 -0.210411 -0.14864\nv -0.0358353 -0.240776 -0.144539\nv -0.0135291 -0.271795 -0.169894\nv -0.00351392 -0.24073 -0.183834\nv -0.0197607 -0.210417 -0.175916\nv -0.0151486 -0.240766 -0.17145\nv -0.0149681 -0.18124 -0.196148\nv -0.0374446 -0.154153 -0.193865\nv -0.0385445 -0.181356 -0.169825\nv -0.0272359 -0.181345 -0.183364\nv -0.0598087 -0.153999 -0.165497\nv -0.0488625 -0.181291 -0.155567\nv 0.0103646 -0.271746 -0.193783\nv 0.0221277 -0.240573 -0.206182\nv 0.00485569 -0.21022 -0.200215\nv 0.00893424 -0.24066 -0.195425\nv 0.0371736 -0.271668 -0.214341\nv 0.0504778 -0.240425 -0.22504\nv 0.0325925 -0.209897 -0.221172\nv 0.0359983 -0.240489 -0.216067\nv 0.0424504 -0.180229 -0.238965\nv 0.0193853 -0.152756 -0.241252\nv 0.0122583 -0.180744 -0.219301\nv 0.0270303 -0.180462 -0.229589\nv -0.0108507 -0.153657 -0.219189\nv -0.00177223 -0.181022 -0.20814\nv 0.0664086 -0.271629 -0.231235\nv 0.0809972 -0.240397 -0.240096\nv 0.0628188 -0.209706 -0.238479\nv 0.0654982 -0.240397 -0.233061\nv 0.0975691 -0.271641 -0.244179\nv 0.113183 -0.240431 -0.251072\nv 0.0949741 -0.209703 -0.251817\nv 0.0969127 -0.240411 -0.246111\nv 0.109063 -0.180068 -0.266447\nv 0.0874112 -0.151972 -0.27408\nv 0.0748937 -0.180049 -0.254811\nv 0.0917935 -0.180047 -0.26118\nv 0.0523731 -0.15213 -0.259693\nv 0.0584254 -0.180101 -0.247389\nv 0.130144 -0.271659 -0.252933\nv 0.146526 -0.240452 -0.257722\nv 0.128569 -0.209746 -0.260864\nv 0.129745 -0.240444 -0.254945\nv 0.163587 -0.271666 -0.257342\nv 0.180455 -0.240459 -0.259956\nv 0.16306 -0.209765 -0.265423\nv 0.163454 -0.240457 -0.259395\nv 0.180456 -0.180116 -0.275894\nv 0.161526 -0.152007 -0.288874\nv 0.14445 -0.180099 -0.273513\nv 0.162414 -0.180109 -0.275294\nv 0.123987 -0.151984 -0.283907\nv 0.126641 -0.180085 -0.270561\nv 0.197321 -0.271667 -0.257342\nv 0.214385 -0.240461 -0.257728\nv 0.197851 -0.209772 -0.265428\nv 0.197456 -0.24046 -0.259397\nv 0.230767 -0.271667 -0.252938\nv 0.247736 -0.24046 -0.251098\nv 0.232348 -0.209773 -0.260887\nv 0.231169 -0.240461 -0.254958\nv 0.251862 -0.180121 -0.266497\nv 0.236935 -0.152027 -0.283948\nv 0.216465 -0.180121 -0.273533\nv 0.234279 -0.180122 -0.270594\nv 0.19939 -0.152023 -0.288888\nv 0.198499 -0.18012 -0.275303\nv 0.263351 -0.271667 -0.244207\nv 0.279933 -0.24046 -0.240164\nv 0.265956 -0.209772 -0.251882\nv 0.264013 -0.24046 -0.246158\nv 0.294518 -0.271667 -0.231298\nv 0.310432 -0.24046 -0.225129\nv 0.298102 -0.209772 -0.238566\nv 0.295429 -0.24046 -0.233145\nv 0.318403 -0.180121 -0.238934\nv 0.308502 -0.152026 -0.259654\nv 0.286034 -0.180121 -0.254892\nv 0.30248 -0.180121 -0.247442\nv 0.273514 -0.152026 -0.274146\nv 0.269137 -0.180121 -0.261253\nv 0.323732 -0.271667 -0.214431\nv 0.338702 -0.24046 -0.206233\nv 0.328234 -0.209772 -0.221169\nv 0.324876 -0.24046 -0.216143\nv 0.350496 -0.271667 -0.193895\nv 0.364271 -0.24046 -0.183817\nv 0.355839 -0.209772 -0.199987\nv 0.351853 -0.24046 -0.195443\nv 0.375543 -0.180121 -0.195089\nv 0.371342 -0.152026 -0.217665\nv 0.348407 -0.180121 -0.21888\nv 0.362364 -0.180121 -0.207428\nv 0.341297 -0.152026 -0.240719\nv 0.333733 -0.180121 -0.229398\nv 0.374349 -0.271667 -0.170041\nv 0.386687 -0.24046 -0.158248\nv 0.380442 -0.209772 -0.175385\nv 0.375897 -0.24046 -0.171399\nv 0.394885 -0.271667 -0.143278\nv 0.405583 -0.24046 -0.129978\nv 0.401623 -0.209772 -0.14778\nv 0.396597 -0.24046 -0.144422\nv 0.419389 -0.180121 -0.137949\nv 0.421173 -0.152026 -0.160843\nv 0.399335 -0.180121 -0.167953\nv 0.409852 -0.180121 -0.153278\nv 0.398119 -0.152026 -0.190888\nv 0.387883 -0.180121 -0.18191\nv 0.411752 -0.271667 -0.114064\nv 0.420618 -0.24046 -0.099479\nv 0.41902 -0.209772 -0.117648\nv 0.413599 -0.24046 -0.114975\nv 0.424662 -0.271667 -0.0828969\nv 0.431552 -0.24046 -0.0672816\nv 0.432336 -0.209772 -0.0855019\nv 0.426612 -0.24046 -0.0835589\nv 0.446951 -0.180121 -0.0714076\nv 0.4546 -0.152026 -0.0930597\nv 0.435346 -0.180121 -0.10558\nv 0.441707 -0.180121 -0.0886831\nv 0.440108 -0.152026 -0.128047\nv 0.427896 -0.180121 -0.122025\nv -0.0986115 -0.127204 -0.128907\nv -0.119389 -0.102419 -0.122648\nv -0.108716 -0.125557 -0.0903256\nv -0.104329 -0.126377 -0.110254\nv -0.0831863 -0.128634 -0.162943\nv -0.107437 -0.104949 -0.160974\nv -0.0915641 -0.127977 -0.146423\nv -0.116742 -0.0859987 -0.194996\nv -0.142341 -0.0666943 -0.193514\nv -0.130638 -0.08269 -0.157337\nv -0.124591 -0.0844669 -0.176956\nv -0.150263 -0.0618671 -0.148906\nv -0.13783 -0.0791061 -0.112279\nv -0.135009 -0.0808442 -0.135868\nv -0.0624857 -0.129395 -0.193444\nv -0.0893646 -0.106776 -0.194235\nv -0.0734778 -0.129117 -0.178606\nv -0.0368399 -0.129225 -0.220783\nv -0.0652727 -0.107335 -0.22371\nv -0.0502573 -0.12944 -0.207492\nv -0.0672254 -0.0876581 -0.255874\nv -0.100306 -0.0714554 -0.261776\nv -0.0953744 -0.0877722 -0.227327\nv -0.0820893 -0.0879636 -0.241983\nv -0.125771 -0.0702457 -0.230419\nv -0.106964 -0.0871088 -0.211726\nv -0.00671262 -0.128053 -0.245138\nv -0.0357384 -0.106386 -0.250166\nv -0.0222807 -0.12872 -0.23335\nv 0.026919 -0.126737 -0.266163\nv -0.00168051 -0.104503 -0.273713\nv 0.00973157 -0.127349 -0.256094\nv 0.00500335 -0.0833826 -0.304748\nv -0.0287776 -0.0675283 -0.315669\nv -0.0332963 -0.0856972 -0.281821\nv -0.0146004 -0.0844756 -0.293705\nv -0.0674401 -0.0702283 -0.289943\nv -0.0508995 -0.0868303 -0.269182\nv 0.0630559 -0.126116 -0.283396\nv 0.0356409 -0.103066 -0.293805\nv 0.0447167 -0.126342 -0.27529\nv 0.101083 -0.125975 -0.296218\nv 0.0752893 -0.102528 -0.309767\nv 0.0818676 -0.12601 -0.290399\nv 0.0897741 -0.0817641 -0.338413\nv 0.0595357 -0.0644817 -0.356186\nv 0.0462926 -0.0821625 -0.323928\nv 0.0678031 -0.0818956 -0.331819\nv 0.0139692 -0.065378 -0.338088\nv 0.0253302 -0.0826349 -0.314863\nv 0.140434 -0.125966 -0.30405\nv 0.116652 -0.102406 -0.32079\nv 0.120633 -0.125962 -0.300774\nv 0.180459 -0.125991 -0.306703\nv 0.159072 -0.102409 -0.326391\nv 0.160404 -0.125977 -0.306031\nv 0.180462 -0.0817104 -0.350353\nv 0.155876 -0.064208 -0.375227\nv 0.134742 -0.0816791 -0.347318\nv 0.157555 -0.0816893 -0.349581\nv 0.107106 -0.0642246 -0.368796\nv 0.112118 -0.081698 -0.343587\nv 0.220488 -0.126004 -0.304084\nv 0.201851 -0.102437 -0.326415\nv 0.200516 -0.125999 -0.30605\nv 0.259838 -0.126006 -0.296264\nv 0.244273 -0.102446 -0.320837\nv 0.240291 -0.126005 -0.300818\nv 0.271138 -0.0817382 -0.338436\nv 0.253825 -0.0642641 -0.368851\nv 0.226188 -0.0817324 -0.347366\nv 0.248809 -0.0817365 -0.343637\nv 0.205055 -0.0642492 -0.375261\nv 0.203373 -0.0817242 -0.34961\nv 0.297827 -0.126006 -0.283363\nv 0.285604 -0.102448 -0.309763\nv 0.279043 -0.126006 -0.290435\nv 0.333812 -0.126006 -0.265623\nv 0.325138 -0.102448 -0.293388\nv 0.31611 -0.126006 -0.275081\nv 0.355642 -0.0817393 -0.303434\nv 0.346791 -0.0642679 -0.337296\nv 0.314535 -0.0817395 -0.323699\nv 0.33542 -0.0817395 -0.314238\nv 0.301341 -0.0642675 -0.356122\nv 0.293077 -0.0817391 -0.331777\nv 0.367167 -0.126006 -0.243329\nv 0.362194 -0.102448 -0.271993\nv 0.350854 -0.126006 -0.255021\nv 0.397334 -0.126006 -0.21688\nv 0.396142 -0.102448 -0.245944\nv 0.382683 -0.126006 -0.230598\nv 0.428207 -0.0817391 -0.247753\nv 0.428421 -0.0642676 -0.282752\nv 0.393745 -0.0817392 -0.277966\nv 0.41147 -0.0817391 -0.263423\nv 0.389393 -0.0642676 -0.312699\nv 0.37511 -0.0817392 -0.291323\nv 0.423783 -0.126006 -0.186713\nv 0.426398 -0.102448 -0.215688\nv 0.411052 -0.126006 -0.202229\nv 0.446077 -0.126006 -0.153357\nv 0.452449 -0.10243 -0.181738\nv 0.435476 -0.126006 -0.170399\nv 0.483904 -0.081565 -0.175167\nv 0.493169 -0.0640934 -0.208918\nv 0.458422 -0.0817217 -0.213289\nv 0.471784 -0.0816695 -0.194647\nv 0.463206 -0.0642676 -0.247967\nv 0.443877 -0.0817391 -0.231016\nv 0.463817 -0.126006 -0.117373\nv 0.47385 -0.102361 -0.144673\nv 0.455535 -0.126006 -0.135655\nv 0.476718 -0.126006 -0.0793837\nv 0.490207 -0.102247 -0.105129\nv 0.470889 -0.126006 -0.0985888\nv 0.518702 -0.0807032 -0.0905935\nv 0.536476 -0.0622562 -0.120681\nv 0.504176 -0.0811722 -0.134017\nv 0.512191 -0.0809346 -0.112541\nv 0.517829 -0.0633966 -0.166234\nv 0.494724 -0.0813908 -0.154924\nv -0.163216 -0.0487719 -0.186471\nv -0.178976 -0.0318692 -0.172208\nv -0.163459 -0.0429248 -0.132528\nv -0.164227 -0.0456999 -0.160754\nv -0.154166 -0.054426 -0.230815\nv -0.178655 -0.0399902 -0.226175\nv -0.160004 -0.0517956 -0.209789\nv -0.19541 -0.0353799 -0.267899\nv -0.223234 -0.0265366 -0.260849\nv -0.199614 -0.0263856 -0.21508\nv -0.199372 -0.0314974 -0.243064\nv -0.220638 -0.0114141 -0.198905\nv -0.190268 -0.0138884 -0.150149\nv -0.196584 -0.0199012 -0.184067\nv -0.133636 -0.0574844 -0.266757\nv -0.165711 -0.0455528 -0.269364\nv -0.14528 -0.0563181 -0.249658\nv -0.103225 -0.0576906 -0.297484\nv -0.139592 -0.0476517 -0.304011\nv -0.119521 -0.0579377 -0.282552\nv -0.142534 -0.040867 -0.34221\nv -0.181736 -0.037739 -0.347769\nv -0.175449 -0.0399688 -0.308524\nv -0.160378 -0.0408384 -0.325851\nv -0.21021 -0.034416 -0.309878\nv -0.187281 -0.0381765 -0.289463\nv -0.0652001 -0.0554077 -0.325942\nv -0.103434 -0.046647 -0.334933\nv -0.0850361 -0.0567558 -0.311992\nv -0.0215658 -0.0525689 -0.351633\nv -0.059889 -0.0438565 -0.363863\nv -0.0439616 -0.0539206 -0.3392\nv -0.0509361 -0.0362468 -0.403479\nv -0.0929206 -0.0351749 -0.414839\nv -0.100207 -0.0389317 -0.374112\nv -0.0762965 -0.03754 -0.389221\nv -0.141626 -0.0374573 -0.381905\nv -0.122382 -0.0401361 -0.358369\nv 0.0258423 -0.0510154 -0.37345\nv -0.0111262 -0.0415556 -0.389452\nv 0.00174234 -0.0516269 -0.363105\nv 0.0759363 -0.0504664 -0.390089\nv 0.0412037 -0.0405711 -0.410276\nv 0.0506138 -0.050655 -0.382501\nv 0.0605045 -0.0341967 -0.447777\nv 0.0215839 -0.0322539 -0.468254\nv 0.00311152 -0.0347419 -0.428585\nv 0.0314716 -0.0343855 -0.439023\nv -0.0378917 -0.0331488 -0.444293\nv -0.0244122 -0.0353382 -0.416669\nv 0.127766 -0.050341 -0.400346\nv 0.0959693 -0.040281 -0.424832\nv 0.101689 -0.0503702 -0.396047\nv 0.180465 -0.0503813 -0.403849\nv 0.152142 -0.040268 -0.432251\nv 0.15406 -0.0503532 -0.402957\nv 0.180466 -0.034128 -0.463616\nv 0.14813 -0.0319791 -0.493459\nv 0.119972 -0.0340785 -0.45959\nv 0.150154 -0.0340956 -0.462591\nv 0.0840221 -0.0319833 -0.484971\nv 0.0900466 -0.0341033 -0.454642\nv 0.233172 -0.0504109 -0.400411\nv 0.208794 -0.0403189 -0.432293\nv 0.206873 -0.0503999 -0.402995\nv 0.284986 -0.050419 -0.390117\nv 0.264976 -0.0403368 -0.424909\nv 0.259247 -0.0504166 -0.396112\nv 0.300455 -0.0341697 -0.447849\nv 0.276942 -0.0320511 -0.485069\nv 0.240973 -0.0341613 -0.459667\nv 0.270907 -0.0341674 -0.454732\nv 0.212805 -0.032033 -0.493501\nv 0.210783 -0.0341491 -0.462634\nv 0.33501 -0.0504208 -0.37313\nv 0.319713 -0.0403406 -0.410245\nv 0.310275 -0.0504203 -0.382442\nv 0.382394 -0.0504206 -0.34977\nv 0.37207 -0.040341 -0.388558\nv 0.359084 -0.0504208 -0.362225\nv 0.412278 -0.0341712 -0.401531\nv 0.399199 -0.032055 -0.44357\nv 0.357881 -0.0341715 -0.428347\nv 0.385519 -0.0341714 -0.415829\nv 0.339429 -0.0320546 -0.468327\nv 0.329487 -0.034171 -0.439038\nv 0.426316 -0.0504204 -0.320414\nv 0.421147 -0.0403407 -0.360223\nv 0.404835 -0.0504205 -0.33581\nv 0.46604 -0.0504204 -0.285586\nv 0.466107 -0.0403406 -0.325724\nv 0.446748 -0.0504204 -0.303649\nv 0.508303 -0.034171 -0.327849\nv 0.50655 -0.0320545 -0.37184\nv 0.4627 -0.034171 -0.36783\nv 0.486155 -0.034171 -0.348585\nv 0.455224 -0.0320546 -0.411223\nv 0.43804 -0.0341711 -0.385505\nv 0.500876 -0.0503333 -0.245852\nv 0.506178 -0.0403406 -0.285653\nv 0.484103 -0.0504204 -0.266294\nv 0.530304 -0.0495495 -0.201837\nv 0.540727 -0.0397828 -0.240661\nv 0.516296 -0.050072 -0.22434\nv 0.582151 -0.0322508 -0.231936\nv 0.591755 -0.0311098 -0.274997\nv 0.548301 -0.0339789 -0.282257\nv 0.566026 -0.0334029 -0.25763\nv 0.552294 -0.0320545 -0.326095\nv 0.529039 -0.034171 -0.305701\nv 0.553701 -0.0475857 -0.154237\nv 0.569262 -0.0375515 -0.191457\nv 0.542837 -0.0486785 -0.178425\nv 0.569629 -0.0452409 -0.10408\nv 0.591071 -0.0333082 -0.138623\nv 0.562697 -0.0463977 -0.129411\nv 0.630293 -0.018527 -0.118082\nv 0.653133 -0.0169546 -0.159985\nv 0.609732 -0.0273301 -0.177457\nv 0.621818 -0.0229368 -0.148211\nv 0.62441 -0.0273309 -0.21988\nv 0.596615 -0.0303306 -0.205288\nv -0.254296 -0.0179984 -0.250126\nv -0.294782 -0.0090342 -0.240664\nv -0.25653 0.0056622 -0.192888\nv -0.254725 -0.00802605 -0.219293\nv -0.245039 -0.0306236 -0.307215\nv -0.282528 -0.0278313 -0.299208\nv -0.251316 -0.0253273 -0.279922\nv -0.302673 -0.0407976 -0.346305\nv -0.349973 -0.0438266 -0.334107\nv -0.326913 -0.0251187 -0.287388\nv -0.315778 -0.0340105 -0.317628\nv -0.379368 -0.022104 -0.272051\nv -0.345945 0.000524821 -0.233677\nv -0.336747 -0.0137357 -0.258449\nv -0.220746 -0.0371038 -0.350932\nv -0.260419 -0.0383416 -0.350925\nv -0.234717 -0.0344979 -0.330533\nv -0.183447 -0.0391238 -0.387183\nv -0.225608 -0.0432901 -0.390646\nv -0.203524 -0.0385946 -0.369464\nv -0.224667 -0.0529162 -0.429885\nv -0.270129 -0.0637404 -0.430309\nv -0.268635 -0.0494322 -0.391685\nv -0.247854 -0.0517104 -0.411024\nv -0.313879 -0.0569915 -0.388908\nv -0.286934 -0.0458664 -0.370551\nv -0.136177 -0.0380334 -0.422967\nv -0.180125 -0.0441603 -0.427798\nv -0.160912 -0.0388449 -0.405143\nv -0.0811334 -0.035916 -0.456704\nv -0.125861 -0.0427605 -0.465176\nv -0.109498 -0.0369652 -0.440279\nv -0.110413 -0.0517163 -0.507862\nv -0.157272 -0.0657637 -0.511872\nv -0.17148 -0.0530113 -0.469542\nv -0.141842 -0.0524101 -0.489163\nv -0.217865 -0.0660202 -0.470225\nv -0.199149 -0.0532649 -0.449587\nv -0.0203251 -0.0346504 -0.485534\nv -0.0645655 -0.0412241 -0.498935\nv -0.0513405 -0.0351614 -0.471865\nv 0.0445493 -0.0341545 -0.507484\nv 0.00200117 -0.0404719 -0.526214\nv 0.0117068 -0.0343318 -0.497483\nv 0.0291375 -0.0503596 -0.565187\nv -0.0162521 -0.0643481 -0.580213\nv -0.0429514 -0.0507946 -0.540498\nv -0.00737207 -0.0505264 -0.553956\nv -0.0895721 -0.0648907 -0.549774\nv -0.0773738 -0.0511845 -0.525054\nv 0.111898 -0.0340447 -0.520934\nv 0.072072 -0.0402119 -0.545142\nv 0.0779965 -0.0340672 -0.515309\nv 0.180464 -0.0340931 -0.52549\nv 0.144112 -0.0402018 -0.5547\nv 0.146104 -0.0340618 -0.524336\nv 0.180461 -0.0502813 -0.585307\nv 0.140367 -0.0640865 -0.611802\nv 0.104092 -0.0502474 -0.58024\nv 0.142188 -0.0502573 -0.584029\nv 0.0609346 -0.0641106 -0.601231\nv 0.0663507 -0.0502741 -0.573954\nv 0.249048 -0.0341251 -0.521006\nv 0.216816 -0.0402486 -0.554732\nv 0.214828 -0.0341133 -0.524373\nv 0.316468 -0.0341329 -0.507609\nv 0.288911 -0.0402647 -0.545247\nv 0.282977 -0.0341308 -0.515411\nv 0.331946 -0.0503134 -0.565377\nv 0.300073 -0.0641291 -0.601365\nv 0.256853 -0.0503065 -0.580303\nv 0.294644 -0.0503113 -0.574069\nv 0.220557 -0.0641173 -0.61183\nv 0.218737 -0.0502971 -0.584057\nv 0.381556 -0.0341345 -0.485504\nv 0.359151 -0.040268 -0.526426\nv 0.349373 -0.0341341 -0.497621\nv 0.443212 -0.0341343 -0.45511\nv 0.426336 -0.0402684 -0.498597\nv 0.412882 -0.0341345 -0.471315\nv 0.473114 -0.0503147 -0.506902\nv 0.451641 -0.0641326 -0.549911\nv 0.404442 -0.050315 -0.540755\nv 0.439332 -0.0503149 -0.524951\nv 0.377542 -0.0641321 -0.580604\nv 0.368596 -0.0503145 -0.554252\nv 0.500362 -0.034134 -0.416911\nv 0.489311 -0.040268 -0.462238\nv 0.472411 -0.0341341 -0.436945\nv 0.55205 -0.034134 -0.371595\nv 0.547004 -0.0402679 -0.417969\nv 0.526947 -0.034134 -0.395098\nv 0.594338 -0.0503145 -0.413884\nv 0.584728 -0.0641322 -0.460985\nv 0.536768 -0.0503146 -0.464357\nv 0.566379 -0.0503145 -0.440061\nv 0.521097 -0.0641323 -0.50981\nv 0.505636 -0.0503146 -0.486671\nv 0.597385 -0.0338707 -0.320045\nv 0.598423 -0.0402679 -0.36655\nv 0.575552 -0.034134 -0.346493\nv 0.63576 -0.0315008 -0.264138\nv 0.642796 -0.0391606 -0.309774\nv 0.617478 -0.0330807 -0.292509\nv 0.687824 -0.0475136 -0.295707\nv 0.690627 -0.0630263 -0.341996\nv 0.644858 -0.0500344 -0.356618\nv 0.667312 -0.0491942 -0.326401\nv 0.641439 -0.0641322 -0.404274\nv 0.620516 -0.0503145 -0.385924\nv 0.667654 -0.0243288 -0.20571\nv 0.679571 -0.0347311 -0.250469\nv 0.652161 -0.0288675 -0.235189\nv 0.701427 -0.00619511 -0.148151\nv 0.712265 -0.0221029 -0.192164\nv 0.683211 -0.0170324 -0.175751\nv 0.757716 -0.0179605 -0.178765\nv 0.768051 -0.0438812 -0.216464\nv 0.723643 -0.0396286 -0.234821\nv 0.740508 -0.0310988 -0.205878\nv 0.732178 -0.0586028 -0.277952\nv 0.706342 -0.0447126 -0.264973\nv -0.403608 -0.04688 -0.313657\nv -0.461936 -0.0502813 -0.28455\nv -0.437034 -0.0187159 -0.252548\nv -0.421396 -0.0341123 -0.280876\nv -0.362992 -0.0654196 -0.379286\nv -0.416274 -0.074587 -0.358344\nv -0.384022 -0.0572416 -0.347567\nv -0.417638 -0.104929 -0.403118\nv -0.468787 -0.122395 -0.373187\nv -0.472553 -0.0850653 -0.325846\nv -0.445079 -0.0961942 -0.366772\nv -0.530625 -0.0986922 -0.280052\nv -0.523639 -0.0532968 -0.244554\nv -0.500092 -0.071132 -0.282699\nv -0.317397 -0.0761614 -0.427896\nv -0.366712 -0.0898492 -0.420097\nv -0.340873 -0.0716362 -0.405491\nv -0.265306 -0.0812172 -0.468151\nv -0.313565 -0.0981736 -0.464493\nv -0.292297 -0.0792651 -0.448211\nv -0.302438 -0.122846 -0.500127\nv -0.350227 -0.145699 -0.491253\nv -0.362212 -0.116727 -0.457086\nv -0.33314 -0.120355 -0.478919\nv -0.410124 -0.137174 -0.442555\nv -0.390197 -0.111679 -0.43252\nv -0.205002 -0.0826981 -0.511277\nv -0.253551 -0.101847 -0.507016\nv -0.236158 -0.0822876 -0.489427\nv -0.137258 -0.0824275 -0.55365\nv -0.185709 -0.102824 -0.552154\nv -0.171985 -0.0826708 -0.532939\nv -0.160092 -0.126082 -0.591462\nv -0.209102 -0.151639 -0.584202\nv -0.234735 -0.125443 -0.546153\nv -0.198172 -0.125916 -0.569311\nv -0.283719 -0.149967 -0.536646\nv -0.269564 -0.12448 -0.522815\nv -0.0633094 -0.0819729 -0.589679\nv -0.111401 -0.102722 -0.593403\nv -0.100967 -0.0821903 -0.572647\nv 0.0153319 -0.0816531 -0.616836\nv -0.0319426 -0.102468 -0.626469\nv -0.024478 -0.0817893 -0.604492\nv 0.00402274 -0.125913 -0.65902\nv -0.0441582 -0.152009 -0.662218\nv -0.0801567 -0.126086 -0.629982\nv -0.0385384 -0.126002 -0.64582\nv -0.128747 -0.15204 -0.627491\nv -0.120714 -0.126126 -0.611774\nv 0.0971087 -0.0815485 -0.633349\nv 0.0513939 -0.10229 -0.649274\nv 0.0559258 -0.0815782 -0.626458\nv 0.180461 -0.0815595 -0.638895\nv 0.137167 -0.102254 -0.660738\nv 0.138686 -0.0815477 -0.637498\nv 0.180467 -0.12582 -0.682654\nv 0.134714 -0.151859 -0.698346\nv 0.0914139 -0.125831 -0.676696\nv 0.135835 -0.12582 -0.681147\nv 0.0440387 -0.151897 -0.686224\nv 0.0474083 -0.125859 -0.669317\nv 0.263846 -0.0815732 -0.633433\nv 0.223766 -0.102264 -0.660783\nv 0.222241 -0.0815678 -0.637532\nv 0.345815 -0.0815782 -0.617137\nv 0.309643 -0.102269 -0.649481\nv 0.305097 -0.0815764 -0.626626\nv 0.357143 -0.125824 -0.659418\nv 0.317003 -0.151853 -0.686482\nv 0.26956 -0.125821 -0.676829\nv 0.313636 -0.125823 -0.669557\nv 0.226237 -0.151853 -0.698418\nv 0.225106 -0.12582 -0.681205\nv 0.424948 -0.0815795 -0.59026\nv 0.39331 -0.102271 -0.627057\nv 0.38582 -0.0815791 -0.604993\nv 0.499907 -0.0815794 -0.553308\nv 0.473338 -0.102272 -0.593908\nv 0.463032 -0.0815795 -0.573009\nv 0.521792 -0.125825 -0.591215\nv 0.490024 -0.151855 -0.627745\nv 0.441698 -0.125825 -0.630699\nv 0.482391 -0.125825 -0.612266\nv 0.405437 -0.151854 -0.662783\nv 0.39989 -0.125824 -0.64644\nv 0.569388 -0.0815793 -0.506868\nv 0.548351 -0.102272 -0.550599\nv 0.535406 -0.0815793 -0.531224\nv 0.632228 -0.0815793 -0.451774\nv 0.617073 -0.102271 -0.497867\nv 0.601709 -0.0815793 -0.480348\nv 0.663179 -0.125825 -0.482725\nv 0.641948 -0.151854 -0.526232\nv 0.596033 -0.125825 -0.541593\nv 0.630569 -0.125825 -0.513256\nv 0.569312 -0.151854 -0.581968\nv 0.559723 -0.125825 -0.567618\nv 0.687488 -0.0813099 -0.389237\nv 0.678321 -0.102271 -0.436618\nv 0.660802 -0.0815793 -0.421255\nv 0.735422 -0.0788859 -0.322493\nv 0.73208 -0.101245 -0.36881\nv 0.712342 -0.0805019 -0.356168\nv 0.775137 -0.12346 -0.342702\nv 0.764103 -0.151028 -0.389077\nv 0.722394 -0.125588 -0.415715\nv 0.749459 -0.124879 -0.379815\nv 0.706686 -0.151854 -0.461494\nv 0.693711 -0.125825 -0.450115\nv 0.77659 -0.0706062 -0.255411\nv 0.779496 -0.0971381 -0.297446\nv 0.756783 -0.0761925 -0.288659\nv 0.812196 -0.0434927 -0.193655\nv 0.820998 -0.0807222 -0.22681\nv 0.795006 -0.0603115 -0.223495\nv 0.864807 -0.0850903 -0.189499\nv 0.866108 -0.134641 -0.225467\nv 0.823125 -0.115765 -0.265811\nv 0.845651 -0.105446 -0.22625\nv 0.816603 -0.147723 -0.310667\nv 0.799656 -0.121096 -0.304665\nv -0.516799 -0.144938 -0.332118\nv -0.556475 -0.175741 -0.283331\nv -0.578919 -0.127332 -0.227221\nv -0.548291 -0.13499 -0.281336\nv -0.455219 -0.160686 -0.417601\nv -0.496322 -0.188046 -0.380183\nv -0.485748 -0.15352 -0.377924\nv -0.470755 -0.228424 -0.420052\nv -0.499752 -0.261201 -0.374077\nv -0.530506 -0.220363 -0.333077\nv -0.500869 -0.224448 -0.379167\nv -0.55453 -0.256545 -0.278836\nv -0.583921 -0.213846 -0.229413\nv -0.558558 -0.216664 -0.282815\nv -0.395165 -0.170793 -0.47719\nv -0.435681 -0.198271 -0.454245\nv -0.425293 -0.166384 -0.449997\nv -0.331092 -0.176465 -0.524279\nv -0.374182 -0.204724 -0.50827\nv -0.364032 -0.174094 -0.501258\nv -0.346887 -0.238394 -0.537081\nv -0.382013 -0.269425 -0.510666\nv -0.411438 -0.234578 -0.484696\nv -0.3803 -0.236773 -0.511627\nv -0.442029 -0.265927 -0.45076\nv -0.441267 -0.231798 -0.454699\nv -0.257783 -0.17911 -0.572688\nv -0.304539 -0.208146 -0.557217\nv -0.29554 -0.178087 -0.548332\nv -0.177278 -0.179967 -0.619393\nv -0.225193 -0.20946 -0.60607\nv -0.218227 -0.179686 -0.596618\nv -0.186944 -0.240471 -0.634916\nv -0.231229 -0.271797 -0.614118\nv -0.270945 -0.240063 -0.587807\nv -0.229645 -0.240362 -0.612067\nv -0.312128 -0.271302 -0.563953\nv -0.31023 -0.239449 -0.562643\nv -0.0924666 -0.180137 -0.659023\nv -0.14031 -0.209776 -0.649842\nv -0.135343 -0.180104 -0.640284\nv -0.00407257 -0.180054 -0.688968\nv -0.0520588 -0.209773 -0.684988\nv -0.0486947 -0.180107 -0.675341\nv -0.0083669 -0.240451 -0.704638\nv -0.0549132 -0.271721 -0.69306\nv -0.0991945 -0.240514 -0.674614\nv -0.0541614 -0.240486 -0.690961\nv -0.144599 -0.271781 -0.657993\nv -0.143458 -0.240515 -0.655849\nv 0.0873879 -0.179996 -0.707311\nv 0.0393905 -0.209702 -0.709407\nv 0.0413546 -0.180018 -0.699636\nv 0.180476 -0.179979 -0.713549\nv 0.133185 -0.209675 -0.721856\nv 0.133828 -0.179985 -0.71196\nv 0.180484 -0.240407 -0.729532\nv 0.132657 -0.271666 -0.729962\nv 0.0852956 -0.240415 -0.723167\nv 0.132792 -0.240409 -0.7279\nv 0.0377596 -0.271677 -0.71745\nv 0.0381807 -0.240428 -0.715393\nv 0.273599 -0.179975 -0.70748\nv 0.227787 -0.209668 -0.721951\nv 0.227134 -0.179976 -0.712045\nv 0.365149 -0.179976 -0.689289\nv 0.321611 -0.209667 -0.709629\nv 0.319671 -0.179975 -0.699884\nv 0.369295 -0.240406 -0.704756\nv 0.323202 -0.271667 -0.717612\nv 0.275692 -0.240406 -0.723342\nv 0.322797 -0.240406 -0.715583\nv 0.228322 -0.271667 -0.730064\nv 0.228186 -0.240406 -0.728002\nv 0.453534 -0.179977 -0.659272\nv 0.413027 -0.209668 -0.685139\nv 0.409831 -0.179977 -0.675726\nv 0.537256 -0.179977 -0.617999\nv 0.500467 -0.209668 -0.648921\nv 0.49607 -0.179977 -0.640004\nv 0.545264 -0.240406 -0.63187\nv 0.50407 -0.271667 -0.656228\nv 0.459663 -0.240406 -0.67407\nv 0.503154 -0.240406 -0.65437\nv 0.415646 -0.271667 -0.692853\nv 0.41498 -0.240406 -0.690892\nv 0.61486 -0.179977 -0.566129\nv 0.582429 -0.209668 -0.601599\nv 0.576906 -0.179977 -0.593333\nv 0.685048 -0.179977 -0.504594\nv 0.657516 -0.209668 -0.543983\nv 0.650961 -0.179977 -0.536509\nv 0.696374 -0.240406 -0.515919\nv 0.662887 -0.271667 -0.550108\nv 0.624611 -0.240406 -0.578836\nv 0.661521 -0.240406 -0.548551\nv 0.586955 -0.271667 -0.608373\nv 0.585804 -0.240406 -0.606651\nv 0.747044 -0.179812 -0.434416\nv 0.724437 -0.209668 -0.477061\nv 0.716963 -0.179977 -0.470507\nv 0.803063 -0.178326 -0.356897\nv 0.783935 -0.209194 -0.401937\nv 0.775631 -0.179316 -0.396489\nv 0.816822 -0.23967 -0.364699\nv 0.79043 -0.27152 -0.406478\nv 0.75974 -0.240333 -0.444145\nv 0.788904 -0.240112 -0.405305\nv 0.730562 -0.271667 -0.482433\nv 0.729005 -0.240406 -0.481067\nv 0.855239 -0.173631 -0.272963\nv 0.838782 -0.207296 -0.319827\nv 0.829677 -0.176674 -0.315806\nv 0.901104 -0.164473 -0.18225\nv 0.887451 -0.203809 -0.231791\nv 0.879511 -0.168464 -0.228117\nv 0.910455 -0.237432 -0.188351\nv 0.891128 -0.270247 -0.234969\nv 0.869013 -0.23815 -0.278864\nv 0.891519 -0.237567 -0.234081\nv 0.844694 -0.270931 -0.323505\nv 0.84382 -0.238933 -0.322478\nv -0.519897 -0.295372 -0.318935\nv -0.529473 -0.329337 -0.25917\nv -0.565778 -0.29331 -0.2193\nv -0.544379 -0.294166 -0.270438\nv -0.46568 -0.298247 -0.405304\nv -0.482554 -0.330747 -0.350881\nv -0.49333 -0.296781 -0.364115\nv -0.443915 -0.363074 -0.376898\nv -0.45174 -0.392072 -0.320998\nv -0.490998 -0.362234 -0.292372\nv -0.468374 -0.362657 -0.335975\nv -0.490857 -0.391554 -0.23421\nv -0.528299 -0.361608 -0.199082\nv -0.511177 -0.361864 -0.246578\nv -0.40931 -0.300849 -0.474646\nv -0.429767 -0.332313 -0.429319\nv -0.437947 -0.299623 -0.441827\nv -0.34603 -0.302604 -0.533016\nv -0.371858 -0.333532 -0.494907\nv -0.378945 -0.301863 -0.504722\nv -0.329632 -0.363952 -0.513099\nv -0.348676 -0.39234 -0.468108\nv -0.390907 -0.363696 -0.449656\nv -0.361514 -0.363876 -0.482332\nv -0.404095 -0.392386 -0.399244\nv -0.418234 -0.363425 -0.414651\nv -0.27072 -0.303167 -0.586833\nv -0.303756 -0.334052 -0.553038\nv -0.309745 -0.303009 -0.56049\nv -0.186986 -0.303091 -0.63488\nv -0.225151 -0.333953 -0.605415\nv -0.22959 -0.303165 -0.611734\nv -0.177532 -0.363506 -0.619264\nv -0.209562 -0.391729 -0.582977\nv -0.257587 -0.363795 -0.569966\nv -0.218334 -0.363646 -0.595662\nv -0.283664 -0.392067 -0.529293\nv -0.294838 -0.363911 -0.542378\nv -0.099279 -0.302989 -0.674766\nv -0.140486 -0.333751 -0.650052\nv -0.143541 -0.303033 -0.65596\nv -0.00840349 -0.302938 -0.704712\nv -0.0521848 -0.333674 -0.685229\nv -0.0542252 -0.302958 -0.691086\nv -0.00417735 -0.363342 -0.689167\nv -0.0443964 -0.391457 -0.662617\nv -0.0927255 -0.363368 -0.659426\nv -0.0488794 -0.363347 -0.675676\nv -0.129193 -0.391512 -0.627815\nv -0.135636 -0.363418 -0.64057\nv 0.0852869 -0.302923 -0.723187\nv 0.0393535 -0.333656 -0.709484\nv 0.0381617 -0.302927 -0.715433\nv 0.180482 -0.302926 -0.729535\nv 0.133178 -0.333659 -0.721871\nv 0.132788 -0.302924 -0.727908\nv 0.180472 -0.363354 -0.713556\nv 0.134703 -0.391473 -0.698371\nv 0.087364 -0.363346 -0.707362\nv 0.133818 -0.36335 -0.711981\nv 0.0439716 -0.391463 -0.686351\nv 0.0413013 -0.363342 -0.699743\nv 0.275692 -0.302928 -0.723341\nv 0.227786 -0.333665 -0.721951\nv 0.228186 -0.302927 -0.728002\nv 0.369295 -0.302928 -0.704756\nv 0.321611 -0.333666 -0.709627\nv 0.322797 -0.302928 -0.715582\nv 0.365149 -0.363358 -0.689288\nv 0.317004 -0.39148 -0.686479\nv 0.273599 -0.363358 -0.707477\nv 0.319671 -0.363358 -0.699881\nv 0.226235 -0.391479 -0.698418\nv 0.227132 -0.363357 -0.712045\nv 0.459663 -0.302928 -0.67407\nv 0.413027 -0.333666 -0.685139\nv 0.41498 -0.302928 -0.690892\nv 0.545264 -0.302928 -0.63187\nv 0.500467 -0.333666 -0.648921\nv 0.503154 -0.302928 -0.65437\nv 0.537256 -0.363358 -0.617999\nv 0.490024 -0.39148 -0.627745\nv 0.453534 -0.363358 -0.659272\nv 0.49607 -0.363358 -0.640004\nv 0.405437 -0.39148 -0.662782\nv 0.409831 -0.363358 -0.675726\nv 0.624611 -0.302928 -0.578836\nv 0.582429 -0.333666 -0.601599\nv 0.585804 -0.302928 -0.606651\nv 0.696374 -0.302928 -0.515919\nv 0.657516 -0.333666 -0.543983\nv 0.661521 -0.302928 -0.548551\nv 0.685048 -0.363358 -0.504594\nv 0.641948 -0.39148 -0.526232\nv 0.61486 -0.363358 -0.566129\nv 0.650961 -0.363358 -0.536509\nv 0.569312 -0.39148 -0.581968\nv 0.576906 -0.363358 -0.593333\nv 0.759615 -0.302913 -0.444154\nv 0.724437 -0.333666 -0.477061\nv 0.729005 -0.302928 -0.481067\nv 0.815567 -0.302781 -0.364788\nv 0.782993 -0.333651 -0.401972\nv 0.788402 -0.302869 -0.405341\nv 0.799918 -0.363358 -0.356802\nv 0.762715 -0.39148 -0.388857\nv 0.74673 -0.363358 -0.434406\nv 0.774373 -0.363358 -0.396451\nv 0.706686 -0.39148 -0.461494\nv 0.716963 -0.363358 -0.470507\nv 0.864921 -0.302477 -0.27914\nv 0.834072 -0.333592 -0.320002\nv 0.84131 -0.302634 -0.322655\nv 0.902918 -0.302333 -0.188742\nv 0.875947 -0.333524 -0.23255\nv 0.885693 -0.30236 -0.234436\nv 0.877652 -0.363358 -0.184694\nv 0.846458 -0.39148 -0.224983\nv 0.844413 -0.363358 -0.273079\nv 0.862625 -0.363358 -0.229377\nv 0.809663 -0.39148 -0.30957\nv 0.823388 -0.363358 -0.315616\nv -0.453032 -0.418389 -0.266278\nv -0.447957 -0.441753 -0.214233\nv -0.48387 -0.418069 -0.179915\nv -0.46988 -0.418214 -0.223614\nv -0.411864 -0.418642 -0.347081\nv -0.413878 -0.441974 -0.295107\nv -0.433601 -0.418548 -0.307551\nv -0.372701 -0.462267 -0.320125\nv -0.369356 -0.47922 -0.271117\nv -0.409897 -0.462165 -0.244856\nv -0.39249 -0.462235 -0.283138\nv -0.400126 -0.479102 -0.196883\nv -0.437083 -0.462002 -0.165321\nv -0.424802 -0.462079 -0.205508\nv -0.362206 -0.418523 -0.419914\nv -0.37027 -0.441966 -0.370086\nv -0.388096 -0.418624 -0.384514\nv -0.303703 -0.418183 -0.484875\nv -0.317856 -0.441696 -0.437886\nv -0.334105 -0.418366 -0.453346\nv -0.271476 -0.461969 -0.451896\nv -0.280537 -0.479222 -0.404234\nv -0.326391 -0.462164 -0.389434\nv -0.299982 -0.462068 -0.421568\nv -0.329267 -0.479264 -0.340644\nv -0.350649 -0.462237 -0.355588\nv -0.236003 -0.417834 -0.542276\nv -0.256644 -0.441385 -0.498231\nv -0.270911 -0.418002 -0.514566\nv -0.160951 -0.41758 -0.59118\nv -0.187519 -0.441158 -0.550488\nv -0.199258 -0.417689 -0.567861\nv -0.138863 -0.461738 -0.553092\nv -0.160128 -0.479157 -0.50967\nv -0.208526 -0.461819 -0.50674\nv -0.174443 -0.46177 -0.531033\nv -0.223839 -0.479174 -0.460879\nv -0.240931 -0.461886 -0.480324\nv -0.0806064 -0.417488 -0.630479\nv -0.112244 -0.441048 -0.593662\nv -0.121358 -0.417517 -0.612089\nv 0.00386479 -0.417488 -0.659268\nv -0.0322616 -0.441036 -0.626882\nv -0.0388233 -0.417482 -0.646242\nv 0.015149 -0.461742 -0.617059\nv -0.0165794 -0.479185 -0.580539\nv -0.0639006 -0.461725 -0.590092\nv -0.0248131 -0.461732 -0.60487\nv -0.0906369 -0.479164 -0.549789\nv -0.101966 -0.461725 -0.572805\nv 0.0913815 -0.417499 -0.676758\nv 0.0513097 -0.441051 -0.649402\nv 0.0473309 -0.417494 -0.669449\nv 0.180462 -0.417508 -0.682662\nv 0.137155 -0.44106 -0.660762\nv 0.135823 -0.417504 -0.681171\nv 0.180456 -0.461755 -0.638903\nv 0.140354 -0.479203 -0.611828\nv 0.0970739 -0.461752 -0.633406\nv 0.138674 -0.461754 -0.637521\nv 0.0608479 -0.4792 -0.601343\nv 0.0558385 -0.461748 -0.626578\nv 0.26956 -0.41751 -0.676825\nv 0.223764 -0.441063 -0.660782\nv 0.225104 -0.417509 -0.681204\nv 0.357143 -0.41751 -0.659416\nv 0.309643 -0.441063 -0.649478\nv 0.313636 -0.41751 -0.669553\nv 0.345815 -0.461755 -0.617136\nv 0.300073 -0.479202 -0.601362\nv 0.263846 -0.461755 -0.63343\nv 0.305097 -0.461755 -0.626623\nv 0.220555 -0.479203 -0.611831\nv 0.22224 -0.461755 -0.637531\nv 0.441698 -0.41751 -0.630699\nv 0.39331 -0.441063 -0.627057\nv 0.39989 -0.41751 -0.64644\nv 0.521792 -0.41751 -0.591215\nv 0.473338 -0.441063 -0.593908\nv 0.482391 -0.41751 -0.612266\nv 0.499907 -0.461755 -0.553308\nv 0.451641 -0.479202 -0.549911\nv 0.424948 -0.461755 -0.59026\nv 0.463032 -0.461755 -0.573009\nv 0.377542 -0.479202 -0.580604\nv 0.38582 -0.461755 -0.604992\nv 0.596033 -0.41751 -0.541593\nv 0.548351 -0.441063 -0.550599\nv 0.559723 -0.41751 -0.567618\nv 0.663179 -0.41751 -0.482725\nv 0.617073 -0.441063 -0.497867\nv 0.630569 -0.41751 -0.513256\nv 0.632228 -0.461755 -0.451774\nv 0.584728 -0.479202 -0.460985\nv 0.569388 -0.461755 -0.506868\nv 0.601709 -0.461755 -0.480348\nv 0.521097 -0.479202 -0.50981\nv 0.535406 -0.461755 -0.531224\nv 0.722077 -0.41751 -0.415579\nv 0.678321 -0.441063 -0.436618\nv 0.693711 -0.41751 -0.450115\nv 0.771962 -0.41751 -0.341338\nv 0.731082 -0.441063 -0.367897\nv 0.748189 -0.41751 -0.379269\nv 0.733762 -0.461755 -0.319452\nv 0.690264 -0.479202 -0.340643\nv 0.687322 -0.461755 -0.388933\nv 0.711679 -0.461755 -0.354952\nv 0.641439 -0.479202 -0.404274\nv 0.660802 -0.461755 -0.421255\nv 0.81209 -0.41751 -0.261244\nv 0.774508 -0.441063 -0.292884\nv 0.793306 -0.41751 -0.301937\nv 0.84145 -0.41751 -0.17669\nv 0.807833 -0.441063 -0.212856\nv 0.828182 -0.41751 -0.219436\nv 0.797589 -0.461755 -0.165361\nv 0.761058 -0.479202 -0.197088\nv 0.770714 -0.461755 -0.244494\nv 0.785446 -0.461755 -0.205366\nv 0.730365 -0.479202 -0.271187\nv 0.753464 -0.461755 -0.282578\nv -0.360175 -0.492773 -0.223627\nv -0.345798 -0.502754 -0.178363\nv -0.384735 -0.492694 -0.151187\nv -0.373643 -0.492731 -0.1878\nv -0.326368 -0.492851 -0.29232\nv -0.318063 -0.502811 -0.245473\nv -0.344396 -0.492815 -0.258518\nv -0.274632 -0.509016 -0.262441\nv -0.263096 -0.511166 -0.218573\nv -0.304963 -0.50898 -0.200817\nv -0.290811 -0.508997 -0.232114\nv -0.287809 -0.511149 -0.158847\nv -0.326986 -0.508951 -0.135823\nv -0.317038 -0.508964 -0.168677\nv -0.28386 -0.492888 -0.356061\nv -0.281749 -0.502864 -0.308491\nv -0.306157 -0.492874 -0.324881\nv -0.233401 -0.492907 -0.413725\nv -0.237475 -0.50291 -0.366322\nv -0.259575 -0.492898 -0.385722\nv -0.191103 -0.509095 -0.371478\nv -0.191372 -0.511209 -0.326002\nv -0.236437 -0.509055 -0.319673\nv -0.214614 -0.509075 -0.346319\nv -0.230766 -0.511186 -0.274612\nv -0.256475 -0.509035 -0.291671\nv -0.175814 -0.492936 -0.464246\nv -0.186046 -0.502956 -0.417855\nv -0.205435 -0.49292 -0.439932\nv -0.112146 -0.492969 -0.506818\nv -0.128359 -0.503003 -0.462176\nv -0.144672 -0.492952 -0.486573\nv -0.0822833 -0.509172 -0.455085\nv -0.0943014 -0.511258 -0.411207\nv -0.139418 -0.509137 -0.416859\nv -0.111474 -0.509156 -0.436909\nv -0.14562 -0.511234 -0.371801\nv -0.165999 -0.509117 -0.39502\nv -0.0434929 -0.492997 -0.540708\nv -0.0653997 -0.503039 -0.498564\nv -0.07837 -0.492984 -0.524884\nv 0.0289741 -0.493016 -0.565362\nv 0.0017674 -0.503059 -0.526416\nv -0.00766227 -0.493008 -0.554222\nv 0.0444411 -0.5092 -0.507609\nv 0.0214804 -0.511279 -0.468326\nv -0.0206405 -0.509192 -0.485495\nv 0.0115386 -0.509197 -0.497618\nv -0.0382849 -0.511273 -0.443562\nv -0.0519599 -0.509184 -0.471299\nv 0.104056 -0.493022 -0.580302\nv 0.0719971 -0.503068 -0.545248\nv 0.0662684 -0.49302 -0.574062\nv 0.180454 -0.493021 -0.585321\nv 0.144094 -0.503068 -0.554741\nv 0.142173 -0.493021 -0.584061\nv 0.180454 -0.509201 -0.525516\nv 0.148108 -0.51128 -0.493516\nv 0.111861 -0.509202 -0.521012\nv 0.146084 -0.509202 -0.524386\nv 0.0839664 -0.511281 -0.485072\nv 0.0779307 -0.509202 -0.515414\nv 0.256852 -0.49302 -0.580302\nv 0.216813 -0.503067 -0.554739\nv 0.218735 -0.49302 -0.584061\nv 0.331946 -0.49302 -0.565376\nv 0.288911 -0.503066 -0.545247\nv 0.294644 -0.49302 -0.574067\nv 0.316468 -0.5092 -0.507609\nv 0.276941 -0.51128 -0.48507\nv 0.249046 -0.5092 -0.52101\nv 0.282977 -0.5092 -0.515411\nv 0.2128 -0.51128 -0.493515\nv 0.214823 -0.509201 -0.524384\nv 0.404442 -0.49302 -0.540755\nv 0.359151 -0.503066 -0.526426\nv 0.368596 -0.49302 -0.554251\nv 0.473114 -0.49302 -0.506902\nv 0.426336 -0.503066 -0.498597\nv 0.439332 -0.49302 -0.524951\nv 0.443212 -0.5092 -0.455109\nv 0.399199 -0.51128 -0.443569\nv 0.381556 -0.5092 -0.485504\nv 0.412881 -0.5092 -0.471314\nv 0.339429 -0.51128 -0.468327\nv 0.349373 -0.5092 -0.49762\nv 0.536768 -0.49302 -0.464357\nv 0.489311 -0.503066 -0.462238\nv 0.505636 -0.49302 -0.486671\nv 0.594338 -0.49302 -0.413884\nv 0.547004 -0.503066 -0.417969\nv 0.566379 -0.49302 -0.440061\nv 0.55205 -0.5092 -0.371595\nv 0.50655 -0.51128 -0.37184\nv 0.500362 -0.5092 -0.416911\nv 0.526947 -0.5092 -0.395098\nv 0.455224 -0.51128 -0.411223\nv 0.472411 -0.5092 -0.436945\nv 0.644811 -0.49302 -0.356314\nv 0.598423 -0.503066 -0.36655\nv 0.620516 -0.49302 -0.385924\nv 0.687356 -0.49302 -0.29266\nv 0.642693 -0.503066 -0.308857\nv 0.667125 -0.49302 -0.325182\nv 0.635564 -0.5092 -0.262757\nv 0.591678 -0.51128 -0.27477\nv 0.597366 -0.5092 -0.319907\nv 0.617399 -0.5092 -0.291957\nv 0.552294 -0.51128 -0.326095\nv 0.575552 -0.5092 -0.346493\nv 0.721209 -0.49302 -0.223988\nv 0.679051 -0.503066 -0.245882\nv 0.705405 -0.49302 -0.258878\nv 0.74583 -0.49302 -0.151492\nv 0.70688 -0.503066 -0.178697\nv 0.734705 -0.49302 -0.188142\nv 0.688063 -0.5092 -0.136013\nv 0.648781 -0.51128 -0.158975\nv 0.665958 -0.5092 -0.201102\nv 0.678075 -0.5092 -0.168919\nv 0.624024 -0.51128 -0.218745\nv 0.651769 -0.5092 -0.232427\nv -0.247879 -0.509103 -0.177356\nv -0.229783 -0.502968 -0.139241\nv -0.267358 -0.509097 -0.11996\nv -0.258557 -0.5091 -0.148976\nv -0.221079 -0.50911 -0.23174\nv -0.208105 -0.502969 -0.191585\nv -0.23537 -0.509106 -0.204983\nv -0.169318 -0.492905 -0.201929\nv -0.156841 -0.479064 -0.166329\nv -0.192675 -0.492905 -0.154548\nv -0.181772 -0.492905 -0.17862\nv -0.175667 -0.479064 -0.120881\nv -0.209661 -0.492906 -0.104531\nv -0.201986 -0.492905 -0.129817\nv -0.187375 -0.509121 -0.282185\nv -0.179773 -0.502972 -0.240663\nv -0.205054 -0.509115 -0.25751\nv -0.147386 -0.509134 -0.327822\nv -0.145269 -0.502978 -0.285638\nv -0.168125 -0.509127 -0.305658\nv -0.10513 -0.492909 -0.285585\nv -0.102295 -0.479065 -0.247964\nv -0.13996 -0.492906 -0.245855\nv -0.123194 -0.492908 -0.26629\nv -0.132244 -0.479064 -0.208932\nv -0.155358 -0.492906 -0.224371\nv -0.101783 -0.509148 -0.367821\nv -0.105195 -0.502985 -0.32572\nv -0.125237 -0.509141 -0.348569\nv -0.0513664 -0.509159 -0.401527\nv -0.0602368 -0.502991 -0.360223\nv -0.0771254 -0.509154 -0.385499\nv -0.0214861 -0.492915 -0.349771\nv -0.0284838 -0.479067 -0.3127\nv -0.0654066 -0.492913 -0.320415\nv -0.0439261 -0.492914 -0.335811\nv -0.067511 -0.479066 -0.282751\nv -0.0858378 -0.492911 -0.303649\nv 0.00302768 -0.509164 -0.428346\nv -0.011162 -0.502995 -0.388558\nv -0.0246085 -0.509162 -0.415826\nv 0.060453 -0.509164 -0.44785\nv 0.041195 -0.502995 -0.410245\nv 0.0314217 -0.509164 -0.439037\nv 0.0759222 -0.492914 -0.390118\nv 0.0595674 -0.479067 -0.356122\nv 0.0258983 -0.492915 -0.37313\nv 0.0506328 -0.492915 -0.382442\nv 0.0141174 -0.479067 -0.337297\nv 0.00182365 -0.492915 -0.362225\nv 0.119937 -0.509164 -0.459673\nv 0.0959334 -0.502994 -0.424912\nv 0.0900012 -0.509164 -0.454734\nv 0.180454 -0.509163 -0.463648\nv 0.15212 -0.502994 -0.432309\nv 0.150131 -0.509164 -0.46265\nv 0.180454 -0.492914 -0.40388\nv 0.155858 -0.479067 -0.375275\nv 0.127738 -0.492914 -0.400417\nv 0.15404 -0.492914 -0.403011\nv 0.107084 -0.479067 -0.368854\nv 0.101662 -0.492914 -0.396115\nv 0.240971 -0.509163 -0.459673\nv 0.208789 -0.502994 -0.432309\nv 0.210777 -0.509163 -0.46265\nv 0.300455 -0.509163 -0.44785\nv 0.264975 -0.502994 -0.424912\nv 0.270907 -0.509163 -0.454734\nv 0.284986 -0.492914 -0.390118\nv 0.253824 -0.479067 -0.368854\nv 0.23317 -0.492914 -0.400417\nv 0.259247 -0.492914 -0.396115\nv 0.205051 -0.479067 -0.375275\nv 0.206868 -0.492914 -0.403011\nv 0.357881 -0.509163 -0.428347\nv 0.319713 -0.502994 -0.410245\nv 0.329487 -0.509163 -0.439037\nv 0.412278 -0.509163 -0.401531\nv 0.37207 -0.502994 -0.388558\nv 0.385519 -0.509163 -0.415828\nv 0.382394 -0.492914 -0.34977\nv 0.346791 -0.479067 -0.337296\nv 0.33501 -0.492914 -0.373129\nv 0.359084 -0.492914 -0.362225\nv 0.301341 -0.479067 -0.356122\nv 0.310275 -0.492914 -0.382442\nv 0.4627 -0.509163 -0.36783\nv 0.421147 -0.502994 -0.360223\nv 0.43804 -0.509163 -0.385505\nv 0.508303 -0.509163 -0.327849\nv 0.466107 -0.502994 -0.325724\nv 0.486155 -0.509163 -0.348585\nv 0.46604 -0.492914 -0.285586\nv 0.428421 -0.479067 -0.282752\nv 0.426316 -0.492914 -0.320414\nv 0.446748 -0.492914 -0.303649\nv 0.389393 -0.479067 -0.312699\nv 0.404835 -0.492914 -0.33581\nv 0.548284 -0.509163 -0.282246\nv 0.506178 -0.502994 -0.285653\nv 0.529039 -0.509163 -0.305701\nv 0.581985 -0.509163 -0.231824\nv 0.540677 -0.502994 -0.240693\nv 0.565959 -0.509163 -0.257586\nv 0.530225 -0.492914 -0.20194\nv 0.493154 -0.479067 -0.208938\nv 0.500868 -0.492914 -0.245862\nv 0.516265 -0.492914 -0.224381\nv 0.463206 -0.479067 -0.247967\nv 0.484103 -0.492914 -0.266294\nv 0.608801 -0.509163 -0.177427\nv 0.569012 -0.502994 -0.191616\nv 0.596282 -0.509163 -0.205064\nv 0.628304 -0.509163 -0.120001\nv 0.590699 -0.502994 -0.139259\nv 0.619492 -0.509163 -0.149033\nv 0.570572 -0.492914 -0.104532\nv 0.536576 -0.479067 -0.120887\nv 0.553584 -0.492914 -0.154555\nv 0.562896 -0.492914 -0.129821\nv 0.51775 -0.479067 -0.166336\nv 0.542679 -0.492914 -0.17863\nv -0.143245 -0.461596 -0.134068\nv -0.129323 -0.440889 -0.105114\nv -0.157986 -0.461595 -0.0906714\nv -0.151325 -0.461596 -0.11261\nv -0.122979 -0.461596 -0.175177\nv -0.112941 -0.440888 -0.144651\nv -0.133784 -0.461596 -0.154954\nv -0.0851849 -0.417328 -0.153287\nv -0.0792535 -0.391307 -0.127889\nv -0.10294 -0.417331 -0.117289\nv -0.0946505 -0.41733 -0.135577\nv -0.0937824 -0.391317 -0.0928947\nv -0.115861 -0.417334 -0.0793053\nv -0.110021 -0.417333 -0.0985048\nv -0.0975098 -0.461596 -0.213284\nv -0.0915406 -0.440888 -0.181715\nv -0.110868 -0.461596 -0.194647\nv -0.0672955 -0.461596 -0.247749\nv -0.065487 -0.440888 -0.215672\nv -0.0829657 -0.461596 -0.231011\nv -0.0364211 -0.417327 -0.216849\nv -0.0372115 -0.391301 -0.190802\nv -0.0628775 -0.417327 -0.186661\nv -0.0501415 -0.417327 -0.202188\nv -0.0602881 -0.391302 -0.160716\nv -0.0745763 -0.417328 -0.170338\nv -0.0328351 -0.461596 -0.277966\nv -0.0352298 -0.440887 -0.245936\nv -0.0505593 -0.461596 -0.263421\nv 0.00526653 -0.461595 -0.303435\nv -0.0012839 -0.440886 -0.271991\nv -0.0142005 -0.461596 -0.291324\nv 0.0270986 -0.417327 -0.265619\nv 0.0196183 -0.391303 -0.240698\nv -0.00625354 -0.417327 -0.243314\nv 0.0100583 -0.417327 -0.255013\nv -0.0104246 -0.391302 -0.217617\nv -0.0217692 -0.417327 -0.230575\nv 0.0463735 -0.461595 -0.3237\nv 0.0357707 -0.440886 -0.293389\nv 0.0254882 -0.461595 -0.314239\nv 0.0897703 -0.461595 -0.338437\nv 0.0753039 -0.440886 -0.309764\nv 0.0678312 -0.461595 -0.331778\nv 0.10107 -0.417328 -0.296264\nv 0.0873953 -0.391307 -0.274146\nv 0.0630819 -0.417327 -0.283363\nv 0.0818654 -0.417328 -0.290435\nv 0.0524098 -0.391305 -0.259647\nv 0.0447997 -0.417327 -0.27508\nv 0.134722 -0.461595 -0.347371\nv 0.116635 -0.440887 -0.320838\nv 0.1121 -0.461595 -0.343639\nv 0.180454 -0.461595 -0.350375\nv 0.15906 -0.440887 -0.326423\nv 0.157539 -0.461595 -0.349621\nv 0.180454 -0.417329 -0.306715\nv 0.16152 -0.391308 -0.288891\nv 0.140421 -0.417329 -0.304086\nv 0.160395 -0.417329 -0.306055\nv 0.123973 -0.391308 -0.283948\nv 0.120617 -0.417329 -0.300818\nv 0.226187 -0.461595 -0.347371\nv 0.201849 -0.440887 -0.326423\nv 0.203369 -0.461595 -0.349621\nv 0.271138 -0.461595 -0.338436\nv 0.244273 -0.440887 -0.320838\nv 0.248809 -0.461595 -0.343639\nv 0.259838 -0.417328 -0.296264\nv 0.236935 -0.391308 -0.283947\nv 0.220488 -0.417329 -0.304085\nv 0.240291 -0.417328 -0.300818\nv 0.199389 -0.391308 -0.28889\nv 0.200514 -0.417329 -0.306055\nv 0.314535 -0.461595 -0.323698\nv 0.285604 -0.440887 -0.309763\nv 0.293077 -0.461595 -0.331777\nv 0.355642 -0.461595 -0.303434\nv 0.325138 -0.440887 -0.293388\nv 0.33542 -0.461595 -0.314238\nv 0.333812 -0.417328 -0.265623\nv 0.308502 -0.391308 -0.259654\nv 0.297827 -0.417328 -0.283362\nv 0.31611 -0.417328 -0.275081\nv 0.273514 -0.391308 -0.274146\nv 0.279043 -0.417328 -0.290434\nv 0.393745 -0.461595 -0.277966\nv 0.362194 -0.440887 -0.271993\nv 0.37511 -0.461595 -0.291323\nv 0.428207 -0.461595 -0.247753\nv 0.396142 -0.440887 -0.245944\nv 0.41147 -0.461595 -0.263423\nv 0.397334 -0.417328 -0.21688\nv 0.371342 -0.391308 -0.217665\nv 0.367167 -0.417328 -0.243329\nv 0.382683 -0.417328 -0.230598\nv 0.341297 -0.391308 -0.240719\nv 0.350854 -0.417328 -0.255021\nv 0.45842 -0.461595 -0.213291\nv 0.426398 -0.440887 -0.215688\nv 0.443877 -0.461595 -0.231016\nv 0.483888 -0.461595 -0.175188\nv 0.452448 -0.440887 -0.18174\nv 0.471777 -0.461595 -0.194655\nv 0.446077 -0.417328 -0.153357\nv 0.421173 -0.391308 -0.160843\nv 0.423783 -0.417328 -0.186713\nv 0.435476 -0.417328 -0.170399\nv 0.398119 -0.391308 -0.190888\nv 0.411052 -0.417328 -0.202229\nv 0.504153 -0.461595 -0.13408\nv 0.473842 -0.440887 -0.144683\nv 0.494692 -0.461595 -0.154966\nv 0.518891 -0.461595 -0.0906838\nv 0.490217 -0.440887 -0.10515\nv 0.512231 -0.461595 -0.112623\nv 0.476718 -0.417328 -0.0793837\nv 0.4546 -0.391308 -0.0930597\nv 0.463817 -0.417328 -0.117373\nv 0.470889 -0.417328 -0.0985888\nv 0.440108 -0.391308 -0.128047\nv 0.455535 -0.417328 -0.135655\nv -0.0745716 -0.363218 -0.105287\nv -0.071674 -0.3336 -0.0851202\nv -0.0862486 -0.363242 -0.0711421\nv -0.080968 -0.36323 -0.0883947\nv -0.058552 -0.363201 -0.137692\nv -0.0582625 -0.333569 -0.117272\nv -0.0670895 -0.363208 -0.121745\nv -0.0448128 -0.302913 -0.129628\nv -0.0599478 -0.302939 -0.0990957\nv -0.0528762 -0.302924 -0.1146\nv -0.0709905 -0.30297 -0.0669437\nv -0.0659962 -0.302955 -0.0831867\nv -0.0384488 -0.363195 -0.167761\nv -0.0407868 -0.333552 -0.147473\nv -0.0489891 -0.363196 -0.153052\nv -0.0146278 -0.363196 -0.194969\nv -0.0195505 -0.333549 -0.175171\nv -0.0269791 -0.363195 -0.181755\nv -0.00338568 -0.302897 -0.183638\nv -0.0258473 -0.302905 -0.157979\nv -0.0150318 -0.302902 -0.171176\nv -0.0357887 -0.302907 -0.144108\nv 0.0125159 -0.3632 -0.218816\nv 0.00507995 -0.333548 -0.19986\nv -0.00144286 -0.363198 -0.207338\nv 0.042515 -0.363205 -0.238907\nv 0.0326901 -0.333547 -0.221102\nv 0.0271884 -0.363202 -0.229355\nv 0.0504922 -0.302853 -0.225066\nv 0.0222106 -0.302874 -0.206122\nv 0.0360447 -0.302862 -0.216058\nv 0.00904777 -0.302887 -0.195301\nv 0.0748789 -0.36321 -0.254884\nv 0.0628174 -0.333551 -0.238538\nv 0.0584356 -0.363207 -0.247427\nv 0.109047 -0.363213 -0.266497\nv 0.0949567 -0.333558 -0.251874\nv 0.0917732 -0.363212 -0.26125\nv 0.113176 -0.302868 -0.251092\nv 0.0809872 -0.302856 -0.240136\nv 0.0969028 -0.302862 -0.246142\nv 0.065495 -0.302852 -0.233101\nv 0.144443 -0.363214 -0.273534\nv 0.12856 -0.333562 -0.260887\nv 0.126629 -0.363214 -0.270594\nv 0.180454 -0.363214 -0.275898\nv 0.163057 -0.333563 -0.26543\nv 0.16241 -0.363214 -0.275305\nv 0.180454 -0.302874 -0.259957\nv 0.146524 -0.302873 -0.257728\nv 0.163452 -0.302874 -0.259398\nv 0.12974 -0.302871 -0.254957\nv 0.216465 -0.363213 -0.273532\nv 0.197851 -0.333563 -0.265429\nv 0.198498 -0.363213 -0.275304\nv 0.251862 -0.363213 -0.266497\nv 0.232348 -0.333562 -0.260887\nv 0.234279 -0.363213 -0.270593\nv 0.247736 -0.302874 -0.251098\nv 0.214385 -0.302874 -0.257727\nv 0.231169 -0.302874 -0.254958\nv 0.197456 -0.302874 -0.259397\nv 0.286034 -0.363213 -0.254892\nv 0.265956 -0.333562 -0.251881\nv 0.269137 -0.363213 -0.261253\nv 0.318403 -0.363213 -0.238934\nv 0.298102 -0.333562 -0.238566\nv 0.30248 -0.363213 -0.247442\nv 0.310432 -0.302874 -0.225128\nv 0.279933 -0.302874 -0.240164\nv 0.295429 -0.302874 -0.233145\nv 0.264013 -0.302874 -0.246157\nv 0.348407 -0.363213 -0.21888\nv 0.328234 -0.333562 -0.221169\nv 0.333733 -0.363213 -0.229398\nv 0.375543 -0.363213 -0.195089\nv 0.355839 -0.333562 -0.199987\nv 0.362364 -0.363213 -0.207428\nv 0.364271 -0.302874 -0.183817\nv 0.338702 -0.302874 -0.206233\nv 0.351853 -0.302874 -0.195443\nv 0.324876 -0.302874 -0.216143\nv 0.399335 -0.363213 -0.167953\nv 0.380442 -0.333562 -0.175385\nv 0.387883 -0.363213 -0.18191\nv 0.419389 -0.363213 -0.137949\nv 0.401623 -0.333562 -0.14778\nv 0.409852 -0.363213 -0.153278\nv 0.405583 -0.302874 -0.129978\nv 0.386687 -0.302874 -0.158248\nv 0.396597 -0.302874 -0.144422\nv 0.375897 -0.302874 -0.171399\nv 0.435346 -0.363213 -0.10558\nv 0.41902 -0.333562 -0.117648\nv 0.427896 -0.363213 -0.122025\nv 0.446951 -0.363213 -0.0714076\nv 0.432336 -0.333562 -0.0855019\nv 0.441707 -0.363213 -0.0886831\nv 0.431552 -0.302874 -0.0672816\nv 0.420618 -0.302874 -0.099479\nv 0.426612 -0.302874 -0.0835589\nv 0.413599 -0.302874 -0.114975\nv -0.308081 0.022478 -0.199059\nv -0.272359 0.0456691 -0.167351\nv -0.226364 0.0248897 -0.147837\nv -0.263635 0.0241389 -0.176373\nv -0.403129 0.0105138 -0.226942\nv -0.363992 0.0382347 -0.204918\nv -0.355173 0.0180495 -0.21594\nv -0.422345 0.0529797 -0.209814\nv -0.378642 0.0841735 -0.201751\nv -0.323273 0.0654223 -0.184633\nv -0.371962 0.0604772 -0.200294\nv -0.282929 0.0922903 -0.16408\nv -0.241954 0.0704684 -0.137268\nv -0.279023 0.0685182 -0.163425\nv -0.495698 -0.0143197 -0.229692\nv -0.461485 0.0200416 -0.21881\nv -0.450167 -0.000468511 -0.231994\nv -0.578595 -0.0445414 -0.195036\nv -0.55042 -0.00586702 -0.202613\nv -0.539133 -0.030462 -0.218633\nv -0.598742 0.00617303 -0.171091\nv -0.572865 0.0392192 -0.192052\nv -0.518499 0.0297913 -0.207694\nv -0.561342 0.0172488 -0.194173\nv -0.481437 0.0654972 -0.21294\nv -0.471679 0.0422263 -0.212594\nv -0.330968 0.113682 -0.191983\nv -0.282389 0.143188 -0.175113\nv -0.24397 0.118286 -0.140653\nv -0.283384 0.11659 -0.168802\nv -0.438131 0.100862 -0.218532\nv -0.387734 0.13584 -0.218362\nv -0.383593 0.10872 -0.208969\nv -0.452019 0.15881 -0.236241\nv -0.397254 0.204695 -0.229313\nv -0.334025 0.17183 -0.207061\nv -0.391981 0.167258 -0.226339\nv -0.284067 0.210375 -0.1826\nv -0.23955 0.174678 -0.148903\nv -0.281949 0.173859 -0.180538\nv -0.541434 0.0753115 -0.211624\nv -0.501245 0.115247 -0.228034\nv -0.491452 0.0892662 -0.219445\nv -0.622902 0.0458452 -0.169459\nv -0.600899 0.0822907 -0.199953\nv -0.585958 0.0603779 -0.19499\nv -0.65952 0.0838248 -0.176155\nv -0.631547 0.13666 -0.202588\nv -0.56598 0.127367 -0.223273\nv -0.617969 0.106523 -0.203906\nv -0.518263 0.180702 -0.235173\nv -0.510341 0.145154 -0.234635\nv -0.344574 0.253792 -0.205282\nv -0.301263 0.300486 -0.169917\nv -0.247473 0.25423 -0.147018\nv -0.290747 0.254508 -0.178822\nv -0.465952 0.240549 -0.231361\nv -0.412688 0.298423 -0.210029\nv -0.404471 0.249876 -0.223696\nv -0.479739 0.336265 -0.192099\nv -0.428349 0.388099 -0.160717\nv -0.363925 0.347316 -0.175888\nv -0.420962 0.345956 -0.188855\nv -0.325512 0.377504 -0.137163\nv -0.277355 0.338651 -0.132141\nv -0.314888 0.342539 -0.156598\nv -0.58097 0.201396 -0.210858\nv -0.529623 0.270004 -0.207402\nv -0.524534 0.223603 -0.225574\nv -0.689018 0.154203 -0.174596\nv -0.635783 0.219735 -0.172771\nv -0.636012 0.176287 -0.191735\nv -0.685466 0.235489 -0.133903\nv -0.63578 0.298762 -0.118014\nv -0.585316 0.289632 -0.165226\nv -0.635279 0.261337 -0.147118\nv -0.538122 0.357884 -0.151596\nv -0.533997 0.31605 -0.182221\nv -0.737879 0.179994 -0.152997\nv -0.786321 0.201805 -0.133887\nv -0.738916 0.248087 -0.105729\nv -0.737458 0.21641 -0.131585\nv -0.742603 0.103872 -0.162991\nv -0.784741 0.13407 -0.160725\nv -0.739345 0.141075 -0.165828\nv -0.820619 0.102527 -0.147525\nv -0.85301 0.125709 -0.142681\nv -0.826682 0.160204 -0.14956\nv -0.822951 0.130357 -0.154576\nv -0.859751 0.180458 -0.128038\nv -0.829518 0.21374 -0.113646\nv -0.827122 0.189378 -0.134531\nv 0.853761 -0.0325641 -0.165875\nv 0.886987 -0.00670797 -0.133607\nv 0.899879 -0.0645584 -0.142759\nv 0.878166 -0.0496484 -0.159081\nv 0.802276 -0.00711238 -0.162379\nv 0.842283 0.0124066 -0.14209\nv 0.828323 -0.0183344 -0.166638\nv 0.831249 0.0493355 -0.116965\nv 0.859284 0.07961 -0.0989851\nv 0.873682 0.041253 -0.118178\nv 0.852971 0.0459737 -0.119657\nv 0.893724 0.0762141 -0.0923336\nv 0.90865 0.0316139 -0.0993695\nv 0.892527 0.0361431 -0.111694\nv 0.750096 0.00619388 -0.141881\nv 0.793821 0.0242015 -0.131602\nv 0.776045 0.00094902 -0.154109\nv 0.704631 0.0106061 -0.105336\nv 0.749228 0.0274939 -0.106887\nv 0.724896 0.00896631 -0.12575\nv 0.755003 0.046948 -0.0753975\nv 0.786269 0.0717038 -0.0744057\nv 0.788558 0.0498184 -0.101833\nv 0.770028 0.0484298 -0.0899013\nv 0.821021 0.0780225 -0.0918139\nv 0.809372 0.0503687 -0.110939\nv 0.875594 0.110998 -0.0787855\nv 0.882176 0.139086 -0.0587656\nv 0.90122 0.110525 -0.0663451\nv 0.889513 0.110814 -0.0745193\nv 0.843732 0.108977 -0.0779073\nv 0.857276 0.137901 -0.0621674\nv 0.860116 0.110559 -0.079722\nv 0.840709 0.15839 -0.0453676\nv 0.847823 0.178094 -0.033384\nv 0.863785 0.161398 -0.0467292\nv 0.852576 0.160719 -0.0466214\nv 0.867174 0.174942 -0.0344682\nv 0.881951 0.159342 -0.041808\nv 0.873992 0.160171 -0.0455869\nv 0.811171 0.101576 -0.0679063\nv 0.829098 0.131838 -0.0575686\nv 0.827096 0.105735 -0.0739198\nv 0.785305 0.0934886 -0.050389\nv 0.803336 0.122127 -0.0472303\nv 0.79692 0.097246 -0.0600138\nv 0.799003 0.138661 -0.0318173\nv 0.808167 0.159625 -0.0275264\nv 0.816947 0.149641 -0.0400356\nv 0.806873 0.14342 -0.03656\nv 0.826892 0.172547 -0.0307411\nv 0.828529 0.154664 -0.0430718\nv -0.0708061 -0.240702 0.0675237\nv -0.0711747 -0.210165 0.0867874\nv -0.0598727 -0.240751 0.0997041\nv -0.0640308 -0.271823 0.0827094\nv -0.0658735 -0.240734 0.0838036\nv -0.0844509 -0.180351 0.0745063\nv -0.0907521 -0.152508 0.0996946\nv -0.0735558 -0.180818 0.108828\nv -0.0795842 -0.180597 0.0919784\nv -0.0776575 -0.153385 0.134162\nv -0.0581587 -0.18117 0.140629\nv -0.0580466 -0.210315 0.118806\nv -0.0664019 -0.181011 0.125047\nv -0.0448161 -0.240767 0.130131\nv -0.0510345 -0.271809 0.113855\nv -0.052841 -0.240761 0.115166\nv -0.0408134 -0.210411 0.14864\nv -0.0259343 -0.240779 0.158332\nv -0.0341024 -0.271802 0.143087\nv -0.0358353 -0.240776 0.144539\nv -0.0598087 -0.153999 0.165497\nv -0.0385445 -0.181356 0.169825\nv -0.0488625 -0.181291 0.155567\nv -0.0374446 -0.154153 0.193865\nv -0.0149681 -0.18124 0.196148\nv -0.0197607 -0.210417 0.175916\nv -0.0272359 -0.181345 0.183364\nv -0.00351392 -0.24073 0.183834\nv -0.0135291 -0.271795 0.169894\nv -0.0151486 -0.240766 0.17145\nv 0.00485569 -0.21022 0.200215\nv 0.0221277 -0.240573 0.206182\nv 0.0103646 -0.271746 0.193783\nv 0.00893424 -0.24066 0.195425\nv -0.0108507 -0.153657 0.219189\nv 0.0122583 -0.180744 0.219301\nv -0.00177223 -0.181022 0.20814\nv 0.0193853 -0.152756 0.241252\nv 0.0424504 -0.180229 0.238965\nv 0.0325925 -0.209897 0.221172\nv 0.0270303 -0.180462 0.229589\nv 0.0504778 -0.240425 0.22504\nv 0.0371736 -0.271668 0.214341\nv 0.0359983 -0.240489 0.216067\nv 0.0628188 -0.209706 0.238479\nv 0.0809972 -0.240397 0.240096\nv 0.0664086 -0.271629 0.231235\nv 0.0654982 -0.240397 0.233061\nv 0.0523731 -0.15213 0.259693\nv 0.0748937 -0.180049 0.254811\nv 0.0584254 -0.180101 0.247389\nv 0.0874112 -0.151972 0.27408\nv 0.109063 -0.180068 0.266447\nv 0.0949741 -0.209703 0.251817\nv 0.0917935 -0.180047 0.26118\nv 0.113183 -0.240431 0.251072\nv 0.0975691 -0.271641 0.244179\nv 0.0969127 -0.240411 0.246111\nv 0.128569 -0.209746 0.260864\nv 0.146526 -0.240452 0.257722\nv 0.130144 -0.271659 0.252933\nv 0.129745 -0.240444 0.254945\nv 0.123987 -0.151984 0.283907\nv 0.14445 -0.180099 0.273513\nv 0.126641 -0.180085 0.270561\nv 0.161526 -0.152007 0.288874\nv 0.180456 -0.180116 0.275894\nv 0.16306 -0.209765 0.265423\nv 0.162414 -0.180109 0.275294\nv 0.180455 -0.240459 0.259956\nv 0.163587 -0.271666 0.257342\nv 0.163454 -0.240457 0.259395\nv 0.197851 -0.209772 0.265428\nv 0.214385 -0.240461 0.257728\nv 0.197321 -0.271667 0.257342\nv 0.197456 -0.24046 0.259397\nv 0.19939 -0.152023 0.288888\nv 0.216465 -0.180121 0.273533\nv 0.198499 -0.18012 0.275303\nv 0.236935 -0.152027 0.283948\nv 0.251862 -0.180121 0.266497\nv 0.232348 -0.209773 0.260887\nv 0.234279 -0.180122 0.270594\nv 0.247736 -0.24046 0.251098\nv 0.230767 -0.271667 0.252938\nv 0.231169 -0.240461 0.254958\nv 0.265956 -0.209772 0.251882\nv 0.279933 -0.24046 0.240164\nv 0.263351 -0.271667 0.244207\nv 0.264013 -0.24046 0.246158\nv 0.273514 -0.152026 0.274146\nv 0.286034 -0.180121 0.254892\nv 0.269137 -0.180121 0.261253\nv 0.308502 -0.152026 0.259654\nv 0.318403 -0.180121 0.238934\nv 0.298102 -0.209772 0.238566\nv 0.30248 -0.180121 0.247442\nv 0.310432 -0.24046 0.225129\nv 0.294518 -0.271667 0.231298\nv 0.295429 -0.24046 0.233145\nv 0.328234 -0.209772 0.221169\nv 0.338702 -0.24046 0.206233\nv 0.323732 -0.271667 0.214431\nv 0.324876 -0.24046 0.216143\nv 0.341297 -0.152026 0.240719\nv 0.348407 -0.180121 0.21888\nv 0.333733 -0.180121 0.229398\nv 0.371342 -0.152026 0.217665\nv 0.375543 -0.180121 0.195089\nv 0.355839 -0.209772 0.199987\nv 0.362364 -0.180121 0.207428\nv 0.364271 -0.24046 0.183817\nv 0.350496 -0.271667 0.193895\nv 0.351853 -0.24046 0.195443\nv 0.380442 -0.209772 0.175385\nv 0.386687 -0.24046 0.158248\nv 0.374349 -0.271667 0.170041\nv 0.375897 -0.24046 0.171399\nv 0.398119 -0.152026 0.190888\nv 0.399335 -0.180121 0.167953\nv 0.387883 -0.180121 0.18191\nv 0.421173 -0.152026 0.160843\nv 0.419389 -0.180121 0.137949\nv 0.401623 -0.209772 0.14778\nv 0.409852 -0.180121 0.153278\nv 0.405583 -0.24046 0.129978\nv 0.394885 -0.271667 0.143278\nv 0.396597 -0.24046 0.144422\nv 0.41902 -0.209772 0.117648\nv 0.420618 -0.24046 0.099479\nv 0.411752 -0.271667 0.114064\nv 0.413599 -0.24046 0.114975\nv 0.440108 -0.152026 0.128047\nv 0.435346 -0.180121 0.10558\nv 0.427896 -0.180121 0.122025\nv 0.4546 -0.152026 0.0930597\nv 0.446951 -0.180121 0.0714076\nv 0.432336 -0.209772 0.0855019\nv 0.441707 -0.180121 0.0886831\nv 0.431552 -0.24046 0.0672816\nv 0.424662 -0.271667 0.0828969\nv 0.426612 -0.24046 0.0835589\nv -0.108716 -0.125557 0.0903256\nv -0.119389 -0.102419 0.122648\nv -0.0986115 -0.127204 0.128907\nv -0.104329 -0.126377 0.110254\nv -0.13783 -0.0791061 0.112279\nv -0.150263 -0.061867 0.148906\nv -0.130638 -0.08269 0.157337\nv -0.135009 -0.0808442 0.135868\nv -0.142341 -0.0666943 0.193514\nv -0.116742 -0.0859986 0.194996\nv -0.107437 -0.104949 0.160974\nv -0.124591 -0.0844669 0.176956\nv -0.0831863 -0.128634 0.162943\nv -0.0915641 -0.127977 0.146423\nv -0.0893646 -0.106776 0.194235\nv -0.0624857 -0.129395 0.193444\nv -0.0734778 -0.129117 0.178606\nv -0.125771 -0.0702456 0.230419\nv -0.0953744 -0.0877722 0.227327\nv -0.106964 -0.0871088 0.211726\nv -0.100306 -0.0714554 0.261776\nv -0.0672254 -0.087658 0.255874\nv -0.0652727 -0.107335 0.22371\nv -0.0820893 -0.0879636 0.241983\nv -0.0368399 -0.129225 0.220783\nv -0.0502573 -0.12944 0.207492\nv -0.0357384 -0.106386 0.250166\nv -0.00671262 -0.128053 0.245138\nv -0.0222807 -0.12872 0.23335\nv -0.0674401 -0.0702283 0.289943\nv -0.0332963 -0.0856972 0.281821\nv -0.0508995 -0.0868303 0.269182\nv -0.0287776 -0.0675283 0.315669\nv 0.00500335 -0.0833826 0.304748\nv -0.00168051 -0.104503 0.273713\nv -0.0146004 -0.0844756 0.293705\nv 0.026919 -0.126737 0.266163\nv 0.00973157 -0.127349 0.256094\nv 0.0356409 -0.103066 0.293805\nv 0.0630559 -0.126116 0.283396\nv 0.0447167 -0.126342 0.27529\nv 0.0139692 -0.065378 0.338088\nv 0.0462926 -0.0821625 0.323928\nv 0.0253302 -0.0826349 0.314863\nv 0.0595357 -0.0644817 0.356186\nv 0.0897741 -0.0817641 0.338413\nv 0.0752893 -0.102528 0.309767\nv 0.0678031 -0.0818956 0.331819\nv 0.101083 -0.125975 0.296218\nv 0.0818676 -0.12601 0.290399\nv 0.116652 -0.102406 0.32079\nv 0.140434 -0.125966 0.30405\nv 0.120633 -0.125962 0.300774\nv 0.107106 -0.0642246 0.368796\nv 0.134742 -0.0816791 0.347318\nv 0.112118 -0.081698 0.343587\nv 0.155876 -0.064208 0.375227\nv 0.180462 -0.0817104 0.350353\nv 0.159072 -0.102409 0.326391\nv 0.157555 -0.0816893 0.349581\nv 0.180459 -0.125991 0.306703\nv 0.160404 -0.125977 0.306031\nv 0.201851 -0.102437 0.326415\nv 0.220488 -0.126004 0.304084\nv 0.200516 -0.125999 0.30605\nv 0.205055 -0.0642492 0.375261\nv 0.226188 -0.0817324 0.347366\nv 0.203373 -0.0817242 0.34961\nv 0.253825 -0.0642641 0.368851\nv 0.271138 -0.0817382 0.338436\nv 0.244273 -0.102446 0.320837\nv 0.248809 -0.0817365 0.343637\nv 0.259838 -0.126006 0.296264\nv 0.240291 -0.126005 0.300818\nv 0.285604 -0.102448 0.309763\nv 0.297827 -0.126006 0.283363\nv 0.279043 -0.126006 0.290435\nv 0.301341 -0.0642675 0.356122\nv 0.314535 -0.0817394 0.323699\nv 0.293077 -0.0817391 0.331777\nv 0.346791 -0.0642679 0.337296\nv 0.355642 -0.0817393 0.303434\nv 0.325138 -0.102448 0.293388\nv 0.33542 -0.0817394 0.314238\nv 0.333812 -0.126006 0.265623\nv 0.31611 -0.126006 0.275081\nv 0.362194 -0.102448 0.271993\nv 0.367167 -0.126006 0.243329\nv 0.350854 -0.126006 0.255021\nv 0.389393 -0.0642676 0.312699\nv 0.393745 -0.0817391 0.277966\nv 0.37511 -0.0817392 0.291323\nv 0.428421 -0.0642675 0.282752\nv 0.428207 -0.0817391 0.247753\nv 0.396142 -0.102448 0.245944\nv 0.41147 -0.0817391 0.263423\nv 0.397334 -0.126006 0.21688\nv 0.382683 -0.126006 0.230598\nv 0.426398 -0.102448 0.215688\nv 0.423783 -0.126006 0.186713\nv 0.411052 -0.126006 0.202229\nv 0.463206 -0.0642675 0.247967\nv 0.458422 -0.0817217 0.213289\nv 0.443877 -0.0817391 0.231016\nv 0.493169 -0.0640934 0.208918\nv 0.483904 -0.0815649 0.175167\nv 0.452449 -0.10243 0.181738\nv 0.471784 -0.0816695 0.194647\nv 0.446077 -0.126006 0.153357\nv 0.435476 -0.126006 0.170399\nv 0.47385 -0.102361 0.144673\nv 0.463817 -0.126006 0.117373\nv 0.455535 -0.126006 0.135655\nv 0.517829 -0.0633966 0.166234\nv 0.504176 -0.0811722 0.134017\nv 0.494724 -0.0813908 0.154924\nv 0.536476 -0.0622562 0.120681\nv 0.518702 -0.0807032 0.0905935\nv 0.490207 -0.102247 0.105129\nv 0.512191 -0.0809346 0.112541\nv 0.476718 -0.126006 0.0793837\nv 0.470889 -0.126006 0.0985888\nv -0.163459 -0.0429248 0.132528\nv -0.178976 -0.0318692 0.172208\nv -0.163216 -0.0487719 0.186471\nv -0.164227 -0.0456999 0.160754\nv -0.190268 -0.0138884 0.150149\nv -0.220638 -0.0114141 0.198905\nv -0.199614 -0.0263856 0.21508\nv -0.196584 -0.0199012 0.184067\nv -0.223234 -0.0265366 0.260849\nv -0.19541 -0.0353799 0.267899\nv -0.178655 -0.0399901 0.226175\nv -0.199372 -0.0314974 0.243064\nv -0.154166 -0.054426 0.230815\nv -0.160004 -0.0517956 0.209789\nv -0.165711 -0.0455528 0.269364\nv -0.133636 -0.0574844 0.266757\nv -0.14528 -0.0563181 0.249658\nv -0.21021 -0.034416 0.309878\nv -0.175449 -0.0399688 0.308524\nv -0.187281 -0.0381765 0.289463\nv -0.181736 -0.037739 0.347769\nv -0.142534 -0.0408669 0.34221\nv -0.139592 -0.0476517 0.304011\nv -0.160378 -0.0408384 0.325851\nv -0.103225 -0.0576906 0.297484\nv -0.119521 -0.0579377 0.282552\nv -0.103434 -0.046647 0.334933\nv -0.0652001 -0.0554077 0.325942\nv -0.0850361 -0.0567558 0.311992\nv -0.141626 -0.0374573 0.381905\nv -0.100207 -0.0389317 0.374112\nv -0.122382 -0.040136 0.358369\nv -0.0929206 -0.0351749 0.414839\nv -0.0509361 -0.0362468 0.403479\nv -0.059889 -0.0438565 0.363863\nv -0.0762965 -0.0375399 0.389221\nv -0.0215658 -0.0525689 0.351633\nv -0.0439616 -0.0539206 0.3392\nv -0.0111262 -0.0415556 0.389452\nv 0.0258423 -0.0510154 0.37345\nv 0.00174234 -0.0516269 0.363105\nv -0.0378917 -0.0331488 0.444293\nv 0.00311152 -0.0347419 0.428585\nv -0.0244122 -0.0353382 0.416669\nv 0.0215839 -0.0322539 0.468254\nv 0.0605045 -0.0341967 0.447777\nv 0.0412037 -0.0405711 0.410276\nv 0.0314716 -0.0343855 0.439023\nv 0.0759363 -0.0504664 0.390089\nv 0.0506138 -0.050655 0.382501\nv 0.0959693 -0.040281 0.424832\nv 0.127766 -0.050341 0.400346\nv 0.101689 -0.0503702 0.396047\nv 0.0840221 -0.0319833 0.484971\nv 0.119972 -0.0340784 0.45959\nv 0.0900466 -0.0341033 0.454642\nv 0.14813 -0.0319791 0.493459\nv 0.180466 -0.034128 0.463616\nv 0.152142 -0.040268 0.432251\nv 0.150154 -0.0340956 0.462591\nv 0.180465 -0.0503813 0.403849\nv 0.15406 -0.0503532 0.402957\nv 0.208794 -0.0403189 0.432293\nv 0.233172 -0.0504109 0.400411\nv 0.206873 -0.0503999 0.402995\nv 0.212805 -0.032033 0.493501\nv 0.240973 -0.0341613 0.459667\nv 0.210783 -0.0341491 0.462634\nv 0.276942 -0.0320511 0.485069\nv 0.300455 -0.0341697 0.447849\nv 0.264976 -0.0403368 0.424909\nv 0.270907 -0.0341674 0.454732\nv 0.284986 -0.050419 0.390117\nv 0.259247 -0.0504166 0.396112\nv 0.319713 -0.0403405 0.410245\nv 0.33501 -0.0504208 0.37313\nv 0.310275 -0.0504203 0.382442\nv 0.339429 -0.0320546 0.468327\nv 0.357881 -0.0341715 0.428347\nv 0.329487 -0.034171 0.439038\nv 0.399199 -0.0320549 0.44357\nv 0.412278 -0.0341712 0.401531\nv 0.37207 -0.040341 0.388558\nv 0.385519 -0.0341714 0.415829\nv 0.382394 -0.0504206 0.34977\nv 0.359084 -0.0504208 0.362225\nv 0.421147 -0.0403407 0.360223\nv 0.426316 -0.0504204 0.320414\nv 0.404835 -0.0504205 0.33581\nv 0.455224 -0.0320546 0.411223\nv 0.4627 -0.034171 0.36783\nv 0.43804 -0.0341711 0.385505\nv 0.50655 -0.0320545 0.37184\nv 0.508303 -0.034171 0.327849\nv 0.466107 -0.0403406 0.325724\nv 0.486155 -0.034171 0.348585\nv 0.46604 -0.0504204 0.285586\nv 0.446748 -0.0504204 0.303649\nv 0.506178 -0.0403406 0.285653\nv 0.500876 -0.0503333 0.245852\nv 0.484103 -0.0504204 0.266294\nv 0.552294 -0.0320545 0.326095\nv 0.548301 -0.0339789 0.282257\nv 0.529039 -0.034171 0.305701\nv 0.591755 -0.0311098 0.274997\nv 0.582151 -0.0322508 0.231936\nv 0.540727 -0.0397827 0.240661\nv 0.566026 -0.0334029 0.25763\nv 0.530304 -0.0495494 0.201837\nv 0.516296 -0.050072 0.22434\nv 0.569262 -0.0375515 0.191457\nv 0.553701 -0.0475857 0.154237\nv 0.542837 -0.0486785 0.178425\nv 0.62441 -0.0273309 0.21988\nv 0.609732 -0.0273301 0.177457\nv 0.596615 -0.0303306 0.205288\nv 0.653133 -0.0169546 0.159985\nv 0.630293 -0.018527 0.118082\nv 0.591071 -0.0333082 0.138623\nv 0.621818 -0.0229368 0.148211\nv 0.569629 -0.0452409 0.10408\nv 0.562697 -0.0463977 0.129411\nv -0.25653 0.0056622 0.192888\nv -0.294782 -0.0090342 0.240664\nv -0.254296 -0.0179984 0.250126\nv -0.254725 -0.00802605 0.219293\nv -0.345945 0.000524824 0.233677\nv -0.379368 -0.022104 0.272051\nv -0.326913 -0.0251187 0.287388\nv -0.336747 -0.0137357 0.258449\nv -0.349973 -0.0438266 0.334107\nv -0.302673 -0.0407975 0.346305\nv -0.282528 -0.0278313 0.299208\nv -0.315778 -0.0340105 0.317628\nv -0.245039 -0.0306236 0.307215\nv -0.251316 -0.0253273 0.279922\nv -0.260419 -0.0383416 0.350925\nv -0.220746 -0.0371038 0.350932\nv -0.234717 -0.0344979 0.330533\nv -0.313879 -0.0569914 0.388908\nv -0.268635 -0.0494322 0.391685\nv -0.286934 -0.0458664 0.370551\nv -0.270129 -0.0637404 0.430309\nv -0.224667 -0.0529162 0.429885\nv -0.225608 -0.0432901 0.390646\nv -0.247854 -0.0517104 0.411024\nv -0.183447 -0.0391238 0.387183\nv -0.203524 -0.0385946 0.369464\nv -0.180125 -0.0441602 0.427798\nv -0.136177 -0.0380334 0.422967\nv -0.160912 -0.0388448 0.405143\nv -0.217865 -0.0660201 0.470225\nv -0.17148 -0.0530112 0.469542\nv -0.199149 -0.0532649 0.449587\nv -0.157272 -0.0657637 0.511872\nv -0.110413 -0.0517163 0.507862\nv -0.125861 -0.0427604 0.465176\nv -0.141842 -0.0524101 0.489163\nv -0.0811334 -0.035916 0.456704\nv -0.109498 -0.0369652 0.440279\nv -0.0645655 -0.0412241 0.498935\nv -0.0203251 -0.0346504 0.485534\nv -0.0513405 -0.0351614 0.471865\nv -0.0895721 -0.0648906 0.549774\nv -0.0429514 -0.0507946 0.540498\nv -0.0773738 -0.0511845 0.525054\nv -0.0162521 -0.064348 0.580213\nv 0.0291375 -0.0503596 0.565187\nv 0.00200117 -0.0404718 0.526214\nv -0.00737207 -0.0505264 0.553956\nv 0.0445493 -0.0341545 0.507484\nv 0.0117068 -0.0343318 0.497483\nv 0.072072 -0.0402119 0.545142\nv 0.111898 -0.0340447 0.520934\nv 0.0779965 -0.0340672 0.515309\nv 0.0609346 -0.0641106 0.601231\nv 0.104092 -0.0502474 0.58024\nv 0.0663507 -0.0502741 0.573954\nv 0.140367 -0.0640865 0.611802\nv 0.180461 -0.0502813 0.585307\nv 0.144112 -0.0402017 0.5547\nv 0.142188 -0.0502573 0.584029\nv 0.180464 -0.0340931 0.52549\nv 0.146104 -0.0340618 0.524336\nv 0.216816 -0.0402486 0.554732\nv 0.249048 -0.0341251 0.521006\nv 0.214828 -0.0341133 0.524373\nv 0.220557 -0.0641173 0.61183\nv 0.256853 -0.0503065 0.580303\nv 0.218737 -0.0502971 0.584057\nv 0.300073 -0.0641291 0.601365\nv 0.331946 -0.0503134 0.565377\nv 0.288911 -0.0402647 0.545247\nv 0.294644 -0.0503113 0.574069\nv 0.316468 -0.0341329 0.507609\nv 0.282977 -0.0341308 0.515411\nv 0.359151 -0.040268 0.526426\nv 0.381556 -0.0341345 0.485504\nv 0.349373 -0.0341341 0.497621\nv 0.377542 -0.0641321 0.580604\nv 0.404442 -0.0503149 0.540755\nv 0.368596 -0.0503145 0.554252\nv 0.451641 -0.0641325 0.549911\nv 0.473114 -0.0503147 0.506902\nv 0.426336 -0.0402684 0.498597\nv 0.439332 -0.0503149 0.524951\nv 0.443212 -0.0341342 0.45511\nv 0.412882 -0.0341345 0.471315\nv 0.489311 -0.040268 0.462238\nv 0.500362 -0.034134 0.416911\nv 0.472411 -0.0341341 0.436945\nv 0.521097 -0.0641323 0.50981\nv 0.536768 -0.0503145 0.464357\nv 0.505636 -0.0503146 0.486671\nv 0.584728 -0.0641322 0.460985\nv 0.594338 -0.0503145 0.413884\nv 0.547004 -0.0402679 0.417969\nv 0.566379 -0.0503145 0.440061\nv 0.55205 -0.034134 0.371595\nv 0.526947 -0.034134 0.395098\nv 0.598423 -0.0402679 0.36655\nv 0.597385 -0.0338707 0.320045\nv 0.575552 -0.034134 0.346493\nv 0.641439 -0.0641322 0.404274\nv 0.644858 -0.0500344 0.356618\nv 0.620516 -0.0503145 0.385924\nv 0.690627 -0.0630263 0.341996\nv 0.687824 -0.0475136 0.295707\nv 0.642796 -0.0391605 0.309774\nv 0.667312 -0.0491941 0.326401\nv 0.63576 -0.0315008 0.264138\nv 0.617478 -0.0330807 0.292509\nv 0.679571 -0.0347311 0.250469\nv 0.667654 -0.0243288 0.20571\nv 0.652161 -0.0288675 0.235189\nv 0.732178 -0.0586028 0.277952\nv 0.723643 -0.0396286 0.234821\nv 0.706342 -0.0447126 0.264973\nv 0.768051 -0.0438812 0.216464\nv 0.757716 -0.0179604 0.178765\nv 0.712265 -0.0221029 0.192164\nv 0.740508 -0.0310987 0.205878\nv 0.701427 -0.00619511 0.148151\nv 0.683211 -0.0170324 0.175751\nv -0.437034 -0.0187159 0.252548\nv -0.461936 -0.0502813 0.28455\nv -0.403608 -0.04688 0.313657\nv -0.421396 -0.0341122 0.280876\nv -0.523639 -0.0532968 0.244554\nv -0.530625 -0.0986922 0.280052\nv -0.472553 -0.0850653 0.325846\nv -0.500092 -0.071132 0.282699\nv -0.468787 -0.122395 0.373187\nv -0.417638 -0.104929 0.403118\nv -0.416274 -0.074587 0.358344\nv -0.445079 -0.0961942 0.366772\nv -0.362992 -0.0654195 0.379286\nv -0.384022 -0.0572416 0.347567\nv -0.366712 -0.0898491 0.420097\nv -0.317397 -0.0761614 0.427896\nv -0.340873 -0.0716362 0.405491\nv -0.410124 -0.137174 0.442555\nv -0.362212 -0.116727 0.457086\nv -0.390197 -0.111679 0.43252\nv -0.350227 -0.145699 0.491253\nv -0.302438 -0.122846 0.500127\nv -0.313565 -0.0981736 0.464493\nv -0.33314 -0.120355 0.478919\nv -0.265306 -0.0812172 0.468151\nv -0.292297 -0.0792651 0.448211\nv -0.253551 -0.101847 0.507016\nv -0.205002 -0.0826981 0.511277\nv -0.236158 -0.0822875 0.489427\nv -0.283719 -0.149967 0.536646\nv -0.234735 -0.125443 0.546153\nv -0.269564 -0.12448 0.522815\nv -0.209102 -0.151639 0.584202\nv -0.160092 -0.126082 0.591462\nv -0.185709 -0.102824 0.552154\nv -0.198172 -0.125916 0.569311\nv -0.137258 -0.0824275 0.55365\nv -0.171985 -0.0826707 0.532939\nv -0.111401 -0.102722 0.593403\nv -0.0633094 -0.0819729 0.589679\nv -0.100967 -0.0821903 0.572647\nv -0.128747 -0.15204 0.627491\nv -0.0801567 -0.126086 0.629982\nv -0.120714 -0.126126 0.611774\nv -0.0441582 -0.152009 0.662218\nv 0.00402274 -0.125913 0.65902\nv -0.0319426 -0.102468 0.626469\nv -0.0385384 -0.126002 0.64582\nv 0.0153319 -0.0816531 0.616836\nv -0.024478 -0.0817892 0.604492\nv 0.0513939 -0.10229 0.649274\nv 0.0971087 -0.0815485 0.633349\nv 0.0559258 -0.0815782 0.626458\nv 0.0440387 -0.151897 0.686224\nv 0.0914139 -0.12583 0.676696\nv 0.0474083 -0.125858 0.669317\nv 0.134714 -0.151859 0.698346\nv 0.180467 -0.12582 0.682654\nv 0.137167 -0.102254 0.660738\nv 0.135835 -0.12582 0.681147\nv 0.180461 -0.0815595 0.638895\nv 0.138686 -0.0815476 0.637498\nv 0.223766 -0.102264 0.660783\nv 0.263846 -0.0815732 0.633433\nv 0.222241 -0.0815678 0.637532\nv 0.226237 -0.151853 0.698418\nv 0.26956 -0.125821 0.676829\nv 0.225106 -0.12582 0.681205\nv 0.317003 -0.151853 0.686482\nv 0.357143 -0.125824 0.659418\nv 0.309643 -0.102269 0.649481\nv 0.313636 -0.125823 0.669557\nv 0.345815 -0.0815782 0.617137\nv 0.305097 -0.0815764 0.626626\nv 0.39331 -0.102271 0.627057\nv 0.424948 -0.0815795 0.59026\nv 0.38582 -0.0815791 0.604993\nv 0.405437 -0.151854 0.662783\nv 0.441698 -0.125825 0.630699\nv 0.39989 -0.125824 0.64644\nv 0.490024 -0.151855 0.627745\nv 0.521792 -0.125825 0.591215\nv 0.473338 -0.102272 0.593908\nv 0.482391 -0.125825 0.612266\nv 0.499907 -0.0815794 0.553308\nv 0.463032 -0.0815795 0.573009\nv 0.548351 -0.102272 0.550599\nv 0.569388 -0.0815793 0.506868\nv 0.535406 -0.0815793 0.531224\nv 0.569312 -0.151854 0.581968\nv 0.596033 -0.125825 0.541593\nv 0.559723 -0.125825 0.567618\nv 0.641948 -0.151854 0.526232\nv 0.663179 -0.125825 0.482725\nv 0.617073 -0.102271 0.497867\nv 0.630569 -0.125825 0.513256\nv 0.632228 -0.0815793 0.451774\nv 0.601709 -0.0815793 0.480348\nv 0.678321 -0.102271 0.436618\nv 0.687488 -0.0813099 0.389237\nv 0.660802 -0.0815793 0.421255\nv 0.706686 -0.151854 0.461494\nv 0.722394 -0.125588 0.415715\nv 0.693711 -0.125825 0.450115\nv 0.764103 -0.151028 0.389077\nv 0.775137 -0.12346 0.342702\nv 0.73208 -0.101245 0.36881\nv 0.749459 -0.124879 0.379815\nv 0.735422 -0.0788859 0.322493\nv 0.712342 -0.0805019 0.356168\nv 0.779496 -0.0971381 0.297446\nv 0.77659 -0.0706062 0.255411\nv 0.756783 -0.0761925 0.288659\nv 0.816603 -0.147723 0.310667\nv 0.823125 -0.115765 0.265811\nv 0.799656 -0.121096 0.304665\nv 0.866108 -0.134641 0.225467\nv 0.864807 -0.0850903 0.189499\nv 0.820998 -0.0807222 0.22681\nv 0.845651 -0.105446 0.22625\nv 0.812196 -0.0434927 0.193655\nv 0.795006 -0.0603114 0.223495\nv -0.578919 -0.127332 0.227221\nv -0.556475 -0.175741 0.283331\nv -0.516799 -0.144938 0.332118\nv -0.548291 -0.134989 0.281336\nv -0.583921 -0.213846 0.229413\nv -0.55453 -0.256545 0.278836\nv -0.530506 -0.220363 0.333077\nv -0.558558 -0.216664 0.282815\nv -0.499752 -0.261201 0.374077\nv -0.470755 -0.228424 0.420052\nv -0.496322 -0.188046 0.380183\nv -0.500869 -0.224448 0.379167\nv -0.455219 -0.160686 0.417601\nv -0.485748 -0.15352 0.377924\nv -0.435681 -0.198271 0.454245\nv -0.395165 -0.170793 0.47719\nv -0.425293 -0.166384 0.449997\nv -0.442029 -0.265927 0.45076\nv -0.411438 -0.234578 0.484696\nv -0.441267 -0.231798 0.454699\nv -0.382013 -0.269425 0.510666\nv -0.346887 -0.238394 0.537081\nv -0.374182 -0.204724 0.50827\nv -0.3803 -0.236773 0.511627\nv -0.331092 -0.176465 0.524279\nv -0.364032 -0.174094 0.501258\nv -0.304539 -0.208146 0.557217\nv -0.257783 -0.17911 0.572688\nv -0.29554 -0.178087 0.548332\nv -0.312128 -0.271302 0.563953\nv -0.270945 -0.240063 0.587807\nv -0.31023 -0.239449 0.562643\nv -0.231229 -0.271797 0.614118\nv -0.186944 -0.240471 0.634916\nv -0.225193 -0.20946 0.60607\nv -0.229645 -0.240362 0.612067\nv -0.177278 -0.179967 0.619393\nv -0.218227 -0.179686 0.596618\nv -0.14031 -0.209776 0.649842\nv -0.0924666 -0.180137 0.659023\nv -0.135343 -0.180104 0.640284\nv -0.144599 -0.271781 0.657993\nv -0.0991945 -0.240514 0.674614\nv -0.143458 -0.240515 0.655849\nv -0.0549132 -0.271721 0.69306\nv -0.0083669 -0.240451 0.704638\nv -0.0520588 -0.209773 0.684988\nv -0.0541614 -0.240486 0.690961\nv -0.00407257 -0.180054 0.688968\nv -0.0486947 -0.180107 0.675341\nv 0.0393905 -0.209702 0.709407\nv 0.0873879 -0.179996 0.707311\nv 0.0413546 -0.180018 0.699636\nv 0.0377596 -0.271677 0.71745\nv 0.0852956 -0.240415 0.723167\nv 0.0381807 -0.240428 0.715393\nv 0.132657 -0.271666 0.729962\nv 0.180484 -0.240407 0.729532\nv 0.133185 -0.209675 0.721856\nv 0.132792 -0.240409 0.7279\nv 0.180476 -0.179979 0.713549\nv 0.133828 -0.179985 0.71196\nv 0.227787 -0.209668 0.721951\nv 0.273599 -0.179975 0.70748\nv 0.227134 -0.179976 0.712045\nv 0.228322 -0.271667 0.730064\nv 0.275692 -0.240406 0.723342\nv 0.228186 -0.240406 0.728002\nv 0.323202 -0.271667 0.717612\nv 0.369295 -0.240406 0.704756\nv 0.321611 -0.209667 0.709629\nv 0.322797 -0.240406 0.715583\nv 0.365149 -0.179976 0.689289\nv 0.319671 -0.179975 0.699884\nv 0.413027 -0.209668 0.685139\nv 0.453534 -0.179977 0.659272\nv 0.409831 -0.179977 0.675726\nv 0.415646 -0.271667 0.692853\nv 0.459663 -0.240406 0.67407\nv 0.41498 -0.240406 0.690892\nv 0.50407 -0.271667 0.656228\nv 0.545264 -0.240406 0.63187\nv 0.500467 -0.209668 0.648921\nv 0.503154 -0.240406 0.65437\nv 0.537256 -0.179977 0.617999\nv 0.49607 -0.179977 0.640004\nv 0.582429 -0.209668 0.601599\nv 0.61486 -0.179977 0.566129\nv 0.576906 -0.179977 0.593333\nv 0.586955 -0.271667 0.608373\nv 0.624611 -0.240406 0.578836\nv 0.585804 -0.240406 0.606651\nv 0.662887 -0.271667 0.550108\nv 0.696374 -0.240406 0.515919\nv 0.657516 -0.209668 0.543983\nv 0.661521 -0.240406 0.548551\nv 0.685048 -0.179977 0.504594\nv 0.650961 -0.179977 0.536509\nv 0.724437 -0.209668 0.477061\nv 0.747044 -0.179812 0.434416\nv 0.716963 -0.179977 0.470507\nv 0.730562 -0.271667 0.482433\nv 0.75974 -0.240333 0.444145\nv 0.729005 -0.240406 0.481067\nv 0.79043 -0.27152 0.406478\nv 0.816822 -0.23967 0.364699\nv 0.783935 -0.209194 0.401937\nv 0.788904 -0.240112 0.405305\nv 0.803063 -0.178326 0.356897\nv 0.775631 -0.179316 0.396489\nv 0.838782 -0.207296 0.319827\nv 0.855239 -0.173631 0.272963\nv 0.829677 -0.176674 0.315806\nv 0.844694 -0.270931 0.323505\nv 0.869013 -0.23815 0.278864\nv 0.84382 -0.238933 0.322478\nv 0.891128 -0.270247 0.234969\nv 0.910455 -0.237432 0.188351\nv 0.887451 -0.203809 0.231791\nv 0.891519 -0.237567 0.234081\nv 0.901104 -0.164473 0.18225\nv 0.879511 -0.168464 0.228117\nv -0.565778 -0.29331 0.2193\nv -0.529473 -0.329337 0.25917\nv -0.519897 -0.295372 0.318935\nv -0.544379 -0.294166 0.270438\nv -0.528299 -0.361608 0.199082\nv -0.490857 -0.391554 0.23421\nv -0.490998 -0.362234 0.292372\nv -0.511177 -0.361864 0.246578\nv -0.45174 -0.392072 0.320998\nv -0.443915 -0.363074 0.376898\nv -0.482554 -0.330747 0.350881\nv -0.468374 -0.362657 0.335975\nv -0.46568 -0.298247 0.405304\nv -0.49333 -0.296781 0.364115\nv -0.429767 -0.332313 0.429319\nv -0.40931 -0.300849 0.474646\nv -0.437947 -0.299623 0.441827\nv -0.404095 -0.392386 0.399244\nv -0.390907 -0.363696 0.449656\nv -0.418234 -0.363425 0.414651\nv -0.348676 -0.39234 0.468108\nv -0.329632 -0.363952 0.513099\nv -0.371858 -0.333532 0.494907\nv -0.361514 -0.363876 0.482332\nv -0.34603 -0.302604 0.533016\nv -0.378945 -0.301863 0.504722\nv -0.303756 -0.334052 0.553038\nv -0.27072 -0.303167 0.586833\nv -0.309745 -0.303009 0.56049\nv -0.283664 -0.392067 0.529293\nv -0.257587 -0.363795 0.569966\nv -0.294838 -0.363911 0.542378\nv -0.209562 -0.391729 0.582977\nv -0.177532 -0.363506 0.619264\nv -0.225151 -0.333953 0.605415\nv -0.218334 -0.363646 0.595662\nv -0.186986 -0.303091 0.63488\nv -0.22959 -0.303165 0.611734\nv -0.140486 -0.333751 0.650052\nv -0.099279 -0.302989 0.674766\nv -0.143541 -0.303033 0.65596\nv -0.129193 -0.391512 0.627815\nv -0.0927255 -0.363368 0.659426\nv -0.135636 -0.363418 0.64057\nv -0.0443964 -0.391457 0.662617\nv -0.00417735 -0.363342 0.689167\nv -0.0521848 -0.333674 0.685229\nv -0.0488794 -0.363347 0.675676\nv -0.00840349 -0.302938 0.704712\nv -0.0542252 -0.302958 0.691086\nv 0.0393535 -0.333656 0.709484\nv 0.0852869 -0.302923 0.723187\nv 0.0381617 -0.302927 0.715433\nv 0.0439716 -0.391463 0.686351\nv 0.087364 -0.363346 0.707362\nv 0.0413013 -0.363342 0.699743\nv 0.134703 -0.391473 0.698371\nv 0.180472 -0.363354 0.713556\nv 0.133178 -0.333659 0.721871\nv 0.133818 -0.36335 0.711981\nv 0.180482 -0.302926 0.729535\nv 0.132788 -0.302924 0.727908\nv 0.227786 -0.333665 0.721951\nv 0.275692 -0.302928 0.723341\nv 0.228186 -0.302927 0.728002\nv 0.226235 -0.391479 0.698418\nv 0.273599 -0.363358 0.707477\nv 0.227132 -0.363357 0.712045\nv 0.317004 -0.39148 0.686479\nv 0.365149 -0.363358 0.689288\nv 0.321611 -0.333666 0.709627\nv 0.319671 -0.363358 0.699881\nv 0.369295 -0.302928 0.704756\nv 0.322797 -0.302928 0.715582\nv 0.413027 -0.333666 0.685139\nv 0.459663 -0.302928 0.67407\nv 0.41498 -0.302928 0.690892\nv 0.405437 -0.39148 0.662782\nv 0.453534 -0.363358 0.659272\nv 0.409831 -0.363358 0.675726\nv 0.490024 -0.39148 0.627745\nv 0.537256 -0.363358 0.617999\nv 0.500467 -0.333666 0.648921\nv 0.49607 -0.363358 0.640004\nv 0.545264 -0.302928 0.63187\nv 0.503154 -0.302928 0.65437\nv 0.582429 -0.333666 0.601599\nv 0.624611 -0.302928 0.578836\nv 0.585804 -0.302928 0.606651\nv 0.569312 -0.39148 0.581968\nv 0.61486 -0.363358 0.566129\nv 0.576906 -0.363358 0.593333\nv 0.641948 -0.39148 0.526232\nv 0.685048 -0.363358 0.504594\nv 0.657516 -0.333666 0.543983\nv 0.650961 -0.363358 0.536509\nv 0.696374 -0.302928 0.515919\nv 0.661521 -0.302928 0.548551\nv 0.724437 -0.333666 0.477061\nv 0.759615 -0.302913 0.444154\nv 0.729005 -0.302928 0.481067\nv 0.706686 -0.39148 0.461494\nv 0.74673 -0.363358 0.434406\nv 0.716963 -0.363358 0.470507\nv 0.762715 -0.39148 0.388857\nv 0.799918 -0.363358 0.356802\nv 0.782993 -0.333651 0.401972\nv 0.774373 -0.363358 0.396451\nv 0.815567 -0.302781 0.364788\nv 0.788402 -0.302869 0.405341\nv 0.834072 -0.333592 0.320002\nv 0.864921 -0.302477 0.27914\nv 0.84131 -0.302634 0.322655\nv 0.809663 -0.39148 0.30957\nv 0.844413 -0.363358 0.273079\nv 0.823388 -0.363358 0.315616\nv 0.846458 -0.39148 0.224983\nv 0.877652 -0.363358 0.184694\nv 0.875947 -0.333524 0.23255\nv 0.862625 -0.363358 0.229377\nv 0.902918 -0.302333 0.188742\nv 0.885693 -0.30236 0.234436\nv -0.48387 -0.418069 0.179915\nv -0.447957 -0.441753 0.214233\nv -0.453032 -0.418389 0.266278\nv -0.46988 -0.418214 0.223614\nv -0.437083 -0.462002 0.165321\nv -0.400126 -0.479102 0.196883\nv -0.409897 -0.462165 0.244856\nv -0.424802 -0.462079 0.205508\nv -0.369356 -0.47922 0.271117\nv -0.372701 -0.462267 0.320125\nv -0.413878 -0.441974 0.295107\nv -0.39249 -0.462235 0.283138\nv -0.411864 -0.418642 0.347081\nv -0.433601 -0.418548 0.307551\nv -0.37027 -0.441966 0.370086\nv -0.362206 -0.418523 0.419914\nv -0.388096 -0.418624 0.384514\nv -0.329267 -0.479264 0.340644\nv -0.326391 -0.462164 0.389434\nv -0.350649 -0.462237 0.355588\nv -0.280537 -0.479222 0.404234\nv -0.271476 -0.461969 0.451896\nv -0.317856 -0.441696 0.437886\nv -0.299982 -0.462068 0.421568\nv -0.303703 -0.418183 0.484875\nv -0.334105 -0.418366 0.453346\nv -0.256644 -0.441385 0.498231\nv -0.236003 -0.417834 0.542276\nv -0.270911 -0.418002 0.514566\nv -0.223839 -0.479174 0.460879\nv -0.208526 -0.461819 0.50674\nv -0.240931 -0.461886 0.480324\nv -0.160128 -0.479157 0.50967\nv -0.138863 -0.461738 0.553092\nv -0.187519 -0.441158 0.550488\nv -0.174443 -0.46177 0.531033\nv -0.160951 -0.41758 0.59118\nv -0.199258 -0.417689 0.567861\nv -0.112244 -0.441048 0.593662\nv -0.0806064 -0.417488 0.630479\nv -0.121358 -0.417517 0.612089\nv -0.0906369 -0.479164 0.549789\nv -0.0639006 -0.461725 0.590092\nv -0.101966 -0.461725 0.572805\nv -0.0165794 -0.479185 0.580539\nv 0.015149 -0.461742 0.617059\nv -0.0322616 -0.441036 0.626882\nv -0.0248131 -0.461732 0.60487\nv 0.00386479 -0.417488 0.659268\nv -0.0388233 -0.417482 0.646242\nv 0.0513097 -0.441051 0.649402\nv 0.0913815 -0.417499 0.676758\nv 0.0473309 -0.417494 0.669449\nv 0.0608479 -0.4792 0.601343\nv 0.0970739 -0.461752 0.633406\nv 0.0558385 -0.461748 0.626578\nv 0.140354 -0.479203 0.611828\nv 0.180456 -0.461755 0.638903\nv 0.137155 -0.44106 0.660762\nv 0.138674 -0.461754 0.637521\nv 0.180462 -0.417508 0.682662\nv 0.135823 -0.417504 0.681171\nv 0.223764 -0.441063 0.660782\nv 0.26956 -0.41751 0.676825\nv 0.225104 -0.417509 0.681204\nv 0.220555 -0.479203 0.611831\nv 0.263846 -0.461755 0.63343\nv 0.22224 -0.461755 0.637531\nv 0.300073 -0.479202 0.601362\nv 0.345815 -0.461755 0.617136\nv 0.309643 -0.441063 0.649478\nv 0.305097 -0.461755 0.626623\nv 0.357143 -0.41751 0.659416\nv 0.313636 -0.41751 0.669553\nv 0.39331 -0.441063 0.627057\nv 0.441698 -0.41751 0.630699\nv 0.39989 -0.41751 0.64644\nv 0.377542 -0.479202 0.580604\nv 0.424948 -0.461755 0.59026\nv 0.38582 -0.461755 0.604992\nv 0.451641 -0.479202 0.549911\nv 0.499907 -0.461755 0.553308\nv 0.473338 -0.441063 0.593908\nv 0.463032 -0.461755 0.573009\nv 0.521792 -0.41751 0.591215\nv 0.482391 -0.41751 0.612266\nv 0.548351 -0.441063 0.550599\nv 0.596033 -0.41751 0.541593\nv 0.559723 -0.41751 0.567618\nv 0.521097 -0.479202 0.50981\nv 0.569388 -0.461755 0.506868\nv 0.535406 -0.461755 0.531224\nv 0.584728 -0.479202 0.460985\nv 0.632228 -0.461755 0.451774\nv 0.617073 -0.441063 0.497867\nv 0.601709 -0.461755 0.480348\nv 0.663179 -0.41751 0.482725\nv 0.630569 -0.41751 0.513256\nv 0.678321 -0.441063 0.436618\nv 0.722077 -0.41751 0.415579\nv 0.693711 -0.41751 0.450115\nv 0.641439 -0.479202 0.404274\nv 0.687322 -0.461755 0.388933\nv 0.660802 -0.461755 0.421255\nv 0.690264 -0.479202 0.340643\nv 0.733762 -0.461755 0.319452\nv 0.731082 -0.441063 0.367897\nv 0.711679 -0.461755 0.354952\nv 0.771962 -0.41751 0.341338\nv 0.748189 -0.41751 0.379269\nv 0.774508 -0.441063 0.292884\nv 0.81209 -0.41751 0.261244\nv 0.793306 -0.41751 0.301937\nv 0.730365 -0.479202 0.271187\nv 0.770714 -0.461755 0.244494\nv 0.753464 -0.461755 0.282578\nv 0.761058 -0.479202 0.197088\nv 0.797589 -0.461755 0.165361\nv 0.807833 -0.441063 0.212856\nv 0.785446 -0.461755 0.205366\nv 0.84145 -0.41751 0.17669\nv 0.828182 -0.41751 0.219436\nv -0.384735 -0.492694 0.151187\nv -0.345798 -0.502754 0.178363\nv -0.360175 -0.492773 0.223627\nv -0.373643 -0.492731 0.1878\nv -0.326986 -0.508951 0.135823\nv -0.287809 -0.511149 0.158847\nv -0.304963 -0.50898 0.200817\nv -0.317038 -0.508964 0.168677\nv -0.263096 -0.511166 0.218573\nv -0.274632 -0.509016 0.262441\nv -0.318063 -0.502811 0.245473\nv -0.290811 -0.508997 0.232114\nv -0.326368 -0.492851 0.29232\nv -0.344396 -0.492815 0.258518\nv -0.281749 -0.502864 0.308491\nv -0.28386 -0.492888 0.356061\nv -0.306157 -0.492874 0.324881\nv -0.230766 -0.511186 0.274612\nv -0.236437 -0.509055 0.319673\nv -0.256475 -0.509035 0.291671\nv -0.191372 -0.511209 0.326002\nv -0.191103 -0.509095 0.371478\nv -0.237475 -0.50291 0.366322\nv -0.214614 -0.509075 0.346319\nv -0.233401 -0.492907 0.413725\nv -0.259575 -0.492898 0.385722\nv -0.186046 -0.502956 0.417855\nv -0.175814 -0.492936 0.464246\nv -0.205435 -0.49292 0.439932\nv -0.14562 -0.511234 0.371801\nv -0.139418 -0.509137 0.416859\nv -0.165999 -0.509117 0.39502\nv -0.0943014 -0.511258 0.411207\nv -0.0822833 -0.509172 0.455085\nv -0.128359 -0.503003 0.462176\nv -0.111474 -0.509156 0.436909\nv -0.112146 -0.492969 0.506818\nv -0.144672 -0.492952 0.486573\nv -0.0653997 -0.503039 0.498564\nv -0.0434929 -0.492997 0.540708\nv -0.07837 -0.492984 0.524884\nv -0.0382849 -0.511273 0.443562\nv -0.0206405 -0.509192 0.485495\nv -0.0519599 -0.509184 0.471299\nv 0.0214804 -0.511279 0.468326\nv 0.0444411 -0.5092 0.507609\nv 0.0017674 -0.503059 0.526416\nv 0.0115386 -0.509197 0.497618\nv 0.0289741 -0.493016 0.565362\nv -0.00766227 -0.493008 0.554222\nv 0.0719971 -0.503068 0.545248\nv 0.104056 -0.493022 0.580302\nv 0.0662684 -0.49302 0.574062\nv 0.0839664 -0.511281 0.485072\nv 0.111861 -0.509202 0.521012\nv 0.0779307 -0.509202 0.515414\nv 0.148108 -0.51128 0.493516\nv 0.180454 -0.509201 0.525516\nv 0.144094 -0.503068 0.554741\nv 0.146084 -0.509202 0.524386\nv 0.180454 -0.493021 0.585321\nv 0.142173 -0.493021 0.584061\nv 0.216813 -0.503067 0.554739\nv 0.256852 -0.49302 0.580302\nv 0.218735 -0.49302 0.584061\nv 0.2128 -0.51128 0.493515\nv 0.249046 -0.5092 0.52101\nv 0.214823 -0.509201 0.524384\nv 0.276941 -0.51128 0.48507\nv 0.316468 -0.5092 0.507609\nv 0.288911 -0.503066 0.545247\nv 0.282977 -0.5092 0.515411\nv 0.331946 -0.49302 0.565376\nv 0.294644 -0.49302 0.574067\nv 0.359151 -0.503066 0.526426\nv 0.404442 -0.49302 0.540755\nv 0.368596 -0.49302 0.554251\nv 0.339429 -0.51128 0.468327\nv 0.381556 -0.5092 0.485504\nv 0.349373 -0.5092 0.49762\nv 0.399199 -0.51128 0.443569\nv 0.443212 -0.5092 0.455109\nv 0.426336 -0.503066 0.498597\nv 0.412881 -0.5092 0.471314\nv 0.473114 -0.49302 0.506902\nv 0.439332 -0.49302 0.524951\nv 0.489311 -0.503066 0.462238\nv 0.536768 -0.49302 0.464357\nv 0.505636 -0.49302 0.486671\nv 0.455224 -0.51128 0.411223\nv 0.500362 -0.5092 0.416911\nv 0.472411 -0.5092 0.436945\nv 0.50655 -0.51128 0.37184\nv 0.55205 -0.5092 0.371595\nv 0.547004 -0.503066 0.417969\nv 0.526947 -0.5092 0.395098\nv 0.594338 -0.49302 0.413884\nv 0.566379 -0.49302 0.440061\nv 0.598423 -0.503066 0.36655\nv 0.644811 -0.49302 0.356314\nv 0.620516 -0.49302 0.385924\nv 0.552294 -0.51128 0.326095\nv 0.597366 -0.5092 0.319907\nv 0.575552 -0.5092 0.346493\nv 0.591678 -0.51128 0.27477\nv 0.635564 -0.5092 0.262757\nv 0.642693 -0.503066 0.308857\nv 0.617399 -0.5092 0.291957\nv 0.687356 -0.49302 0.29266\nv 0.667125 -0.49302 0.325182\nv 0.679051 -0.503066 0.245882\nv 0.721209 -0.49302 0.223988\nv 0.705405 -0.49302 0.258878\nv 0.624024 -0.51128 0.218745\nv 0.665958 -0.5092 0.201102\nv 0.651769 -0.5092 0.232427\nv 0.648781 -0.51128 0.158975\nv 0.688063 -0.5092 0.136013\nv 0.70688 -0.503066 0.178697\nv 0.678075 -0.5092 0.168919\nv 0.74583 -0.49302 0.151492\nv 0.734705 -0.49302 0.188142\nv -0.267358 -0.509097 0.11996\nv -0.229783 -0.502968 0.139241\nv -0.247879 -0.509103 0.177356\nv -0.258557 -0.5091 0.148976\nv -0.209661 -0.492906 0.104531\nv -0.175667 -0.479064 0.120881\nv -0.192675 -0.492905 0.154548\nv -0.201986 -0.492905 0.129817\nv -0.156841 -0.479064 0.166329\nv -0.169318 -0.492905 0.201929\nv -0.208105 -0.502969 0.191585\nv -0.181772 -0.492905 0.17862\nv -0.221079 -0.50911 0.23174\nv -0.23537 -0.509106 0.204983\nv -0.179773 -0.502972 0.240663\nv -0.187375 -0.509121 0.282185\nv -0.205054 -0.509115 0.25751\nv -0.132244 -0.479064 0.208932\nv -0.13996 -0.492906 0.245855\nv -0.155358 -0.492906 0.224371\nv -0.102295 -0.479065 0.247964\nv -0.10513 -0.492909 0.285585\nv -0.145269 -0.502978 0.285638\nv -0.123194 -0.492908 0.26629\nv -0.147386 -0.509134 0.327822\nv -0.168125 -0.509127 0.305658\nv -0.105195 -0.502985 0.32572\nv -0.101783 -0.509148 0.367821\nv -0.125237 -0.509141 0.348569\nv -0.067511 -0.479066 0.282751\nv -0.0654066 -0.492913 0.320415\nv -0.0858378 -0.492911 0.303649\nv -0.0284838 -0.479067 0.3127\nv -0.0214861 -0.492915 0.349771\nv -0.0602368 -0.502991 0.360223\nv -0.0439261 -0.492914 0.335811\nv -0.0513664 -0.509159 0.401527\nv -0.0771254 -0.509154 0.385499\nv -0.011162 -0.502995 0.388558\nv 0.00302768 -0.509164 0.428346\nv -0.0246085 -0.509162 0.415826\nv 0.0141174 -0.479067 0.337297\nv 0.0258983 -0.492915 0.37313\nv 0.00182365 -0.492915 0.362225\nv 0.0595674 -0.479067 0.356122\nv 0.0759222 -0.492914 0.390118\nv 0.041195 -0.502995 0.410245\nv 0.0506328 -0.492915 0.382442\nv 0.060453 -0.509164 0.44785\nv 0.0314217 -0.509164 0.439037\nv 0.0959334 -0.502994 0.424912\nv 0.119937 -0.509164 0.459673\nv 0.0900012 -0.509164 0.454734\nv 0.107084 -0.479067 0.368854\nv 0.127738 -0.492914 0.400417\nv 0.101662 -0.492914 0.396115\nv 0.155858 -0.479067 0.375275\nv 0.180454 -0.492914 0.40388\nv 0.15212 -0.502994 0.432309\nv 0.15404 -0.492914 0.403011\nv 0.180454 -0.509163 0.463648\nv 0.150131 -0.509164 0.46265\nv 0.208789 -0.502994 0.432309\nv 0.240971 -0.509163 0.459673\nv 0.210777 -0.509163 0.46265\nv 0.205051 -0.479067 0.375275\nv 0.23317 -0.492914 0.400417\nv 0.206868 -0.492914 0.403011\nv 0.253824 -0.479067 0.368854\nv 0.284986 -0.492914 0.390118\nv 0.264975 -0.502994 0.424912\nv 0.259247 -0.492914 0.396115\nv 0.300455 -0.509163 0.44785\nv 0.270907 -0.509163 0.454734\nv 0.319713 -0.502994 0.410245\nv 0.357881 -0.509163 0.428347\nv 0.329487 -0.509163 0.439037\nv 0.301341 -0.479067 0.356122\nv 0.33501 -0.492914 0.373129\nv 0.310275 -0.492914 0.382442\nv 0.346791 -0.479067 0.337296\nv 0.382394 -0.492914 0.34977\nv 0.37207 -0.502994 0.388558\nv 0.359084 -0.492914 0.362225\nv 0.412278 -0.509163 0.401531\nv 0.385519 -0.509163 0.415828\nv 0.421147 -0.502994 0.360223\nv 0.4627 -0.509163 0.36783\nv 0.43804 -0.509163 0.385505\nv 0.389393 -0.479067 0.312699\nv 0.426316 -0.492914 0.320414\nv 0.404835 -0.492914 0.33581\nv 0.428421 -0.479067 0.282752\nv 0.46604 -0.492914 0.285586\nv 0.466107 -0.502994 0.325724\nv 0.446748 -0.492914 0.303649\nv 0.508303 -0.509163 0.327849\nv 0.486155 -0.509163 0.348585\nv 0.506178 -0.502994 0.285653\nv 0.548284 -0.509163 0.282246\nv 0.529039 -0.509163 0.305701\nv 0.463206 -0.479067 0.247967\nv 0.500868 -0.492914 0.245862\nv 0.484103 -0.492914 0.266294\nv 0.493154 -0.479067 0.208938\nv 0.530225 -0.492914 0.20194\nv 0.540677 -0.502994 0.240693\nv 0.516265 -0.492914 0.224381\nv 0.581985 -0.509163 0.231824\nv 0.565959 -0.509163 0.257586\nv 0.569012 -0.502994 0.191616\nv 0.608801 -0.509163 0.177427\nv 0.596282 -0.509163 0.205064\nv 0.51775 -0.479067 0.166336\nv 0.553584 -0.492914 0.154555\nv 0.542679 -0.492914 0.17863\nv 0.536576 -0.479067 0.120887\nv 0.570572 -0.492914 0.104532\nv 0.590699 -0.502994 0.139259\nv 0.562896 -0.492914 0.129821\nv 0.628304 -0.509163 0.120001\nv 0.619492 -0.509163 0.149033\nv -0.157986 -0.461595 0.0906714\nv -0.129323 -0.440889 0.105114\nv -0.143245 -0.461596 0.134068\nv -0.151325 -0.461596 0.11261\nv -0.115861 -0.417334 0.0793053\nv -0.0937824 -0.391317 0.0928947\nv -0.10294 -0.417331 0.117289\nv -0.110021 -0.417333 0.0985048\nv -0.0792535 -0.391307 0.127889\nv -0.0851849 -0.417328 0.153287\nv -0.112941 -0.440888 0.144651\nv -0.0946505 -0.41733 0.135577\nv -0.122979 -0.461596 0.175177\nv -0.133784 -0.461596 0.154954\nv -0.0915406 -0.440888 0.181715\nv -0.0975098 -0.461596 0.213284\nv -0.110868 -0.461596 0.194647\nv -0.0602881 -0.391302 0.160716\nv -0.0628775 -0.417327 0.186661\nv -0.0745763 -0.417328 0.170338\nv -0.0372115 -0.391301 0.190802\nv -0.0364211 -0.417327 0.216849\nv -0.065487 -0.440888 0.215672\nv -0.0501415 -0.417327 0.202188\nv -0.0672955 -0.461596 0.247749\nv -0.0829657 -0.461596 0.231011\nv -0.0352298 -0.440887 0.245936\nv -0.0328351 -0.461596 0.277966\nv -0.0505593 -0.461596 0.263421\nv -0.0104246 -0.391302 0.217617\nv -0.00625354 -0.417327 0.243314\nv -0.0217692 -0.417327 0.230575\nv 0.0196183 -0.391303 0.240698\nv 0.0270986 -0.417327 0.265619\nv -0.0012839 -0.440886 0.271991\nv 0.0100583 -0.417327 0.255013\nv 0.00526653 -0.461595 0.303435\nv -0.0142005 -0.461596 0.291324\nv 0.0357707 -0.440886 0.293389\nv 0.0463735 -0.461595 0.3237\nv 0.0254882 -0.461595 0.314239\nv 0.0524098 -0.391305 0.259647\nv 0.0630819 -0.417327 0.283363\nv 0.0447997 -0.417327 0.27508\nv 0.0873953 -0.391307 0.274146\nv 0.10107 -0.417328 0.296264\nv 0.0753039 -0.440886 0.309764\nv 0.0818654 -0.417328 0.290435\nv 0.0897703 -0.461595 0.338437\nv 0.0678312 -0.461595 0.331778\nv 0.116635 -0.440887 0.320838\nv 0.134722 -0.461595 0.347371\nv 0.1121 -0.461595 0.343639\nv 0.123973 -0.391308 0.283948\nv 0.140421 -0.417329 0.304086\nv 0.120617 -0.417329 0.300818\nv 0.16152 -0.391308 0.288891\nv 0.180454 -0.417329 0.306715\nv 0.15906 -0.440887 0.326423\nv 0.160395 -0.417329 0.306055\nv 0.180454 -0.461595 0.350375\nv 0.157539 -0.461595 0.349621\nv 0.201849 -0.440887 0.326423\nv 0.226187 -0.461595 0.347371\nv 0.203369 -0.461595 0.349621\nv 0.199389 -0.391308 0.28889\nv 0.220488 -0.417329 0.304085\nv 0.200514 -0.417329 0.306055\nv 0.236935 -0.391308 0.283947\nv 0.259838 -0.417328 0.296264\nv 0.244273 -0.440887 0.320838\nv 0.240291 -0.417328 0.300818\nv 0.271138 -0.461595 0.338436\nv 0.248809 -0.461595 0.343639\nv 0.285604 -0.440887 0.309763\nv 0.314535 -0.461595 0.323698\nv 0.293077 -0.461595 0.331777\nv 0.273514 -0.391308 0.274146\nv 0.297827 -0.417328 0.283362\nv 0.279043 -0.417328 0.290434\nv 0.308502 -0.391308 0.259654\nv 0.333812 -0.417328 0.265623\nv 0.325138 -0.440887 0.293388\nv 0.31611 -0.417328 0.275081\nv 0.355642 -0.461595 0.303434\nv 0.33542 -0.461595 0.314238\nv 0.362194 -0.440887 0.271993\nv 0.393745 -0.461595 0.277966\nv 0.37511 -0.461595 0.291323\nv 0.341297 -0.391308 0.240719\nv 0.367167 -0.417328 0.243329\nv 0.350854 -0.417328 0.255021\nv 0.371342 -0.391308 0.217665\nv 0.397334 -0.417328 0.21688\nv 0.396142 -0.440887 0.245944\nv 0.382683 -0.417328 0.230598\nv 0.428207 -0.461595 0.247753\nv 0.41147 -0.461595 0.263423\nv 0.426398 -0.440887 0.215688\nv 0.45842 -0.461595 0.213291\nv 0.443877 -0.461595 0.231016\nv 0.398119 -0.391308 0.190888\nv 0.423783 -0.417328 0.186713\nv 0.411052 -0.417328 0.202229\nv 0.421173 -0.391308 0.160843\nv 0.446077 -0.417328 0.153357\nv 0.452448 -0.440887 0.18174\nv 0.435476 -0.417328 0.170399\nv 0.483888 -0.461595 0.175188\nv 0.471777 -0.461595 0.194655\nv 0.473842 -0.440887 0.144683\nv 0.504153 -0.461595 0.13408\nv 0.494692 -0.461595 0.154966\nv 0.440108 -0.391308 0.128047\nv 0.463817 -0.417328 0.117373\nv 0.455535 -0.417328 0.135655\nv 0.4546 -0.391308 0.0930597\nv 0.476718 -0.417328 0.0793837\nv 0.490217 -0.440887 0.10515\nv 0.470889 -0.417328 0.0985888\nv 0.518891 -0.461595 0.0906838\nv 0.512231 -0.461595 0.112623\nv -0.0862486 -0.363242 0.0711421\nv -0.071674 -0.3336 0.0851202\nv -0.0745716 -0.363218 0.105287\nv -0.080968 -0.36323 0.0883947\nv -0.0709905 -0.30297 0.0669437\nv -0.0599478 -0.302939 0.0990957\nv -0.0659962 -0.302955 0.0831867\nv -0.0448128 -0.302913 0.129628\nv -0.0582625 -0.333569 0.117272\nv -0.0528762 -0.302924 0.1146\nv -0.058552 -0.363201 0.137692\nv -0.0670895 -0.363208 0.121745\nv -0.0407868 -0.333552 0.147473\nv -0.0384488 -0.363195 0.167761\nv -0.0489891 -0.363196 0.153052\nv -0.0258473 -0.302905 0.157979\nv -0.0357887 -0.302907 0.144108\nv -0.00338568 -0.302897 0.183638\nv -0.0195505 -0.333549 0.175171\nv -0.0150318 -0.302902 0.171176\nv -0.0146278 -0.363196 0.194969\nv -0.0269791 -0.363195 0.181755\nv 0.00507995 -0.333548 0.19986\nv 0.0125159 -0.3632 0.218816\nv -0.00144286 -0.363198 0.207338\nv 0.0222106 -0.302874 0.206122\nv 0.00904777 -0.302887 0.195301\nv 0.0504922 -0.302853 0.225066\nv 0.0326901 -0.333547 0.221102\nv 0.0360447 -0.302862 0.216058\nv 0.042515 -0.363205 0.238907\nv 0.0271884 -0.363202 0.229355\nv 0.0628174 -0.333551 0.238538\nv 0.0748789 -0.36321 0.254884\nv 0.0584356 -0.363207 0.247427\nv 0.0809872 -0.302856 0.240136\nv 0.065495 -0.302852 0.233101\nv 0.113176 -0.302868 0.251092\nv 0.0949567 -0.333558 0.251874\nv 0.0969028 -0.302862 0.246142\nv 0.109047 -0.363213 0.266497\nv 0.0917732 -0.363212 0.26125\nv 0.12856 -0.333562 0.260887\nv 0.144443 -0.363214 0.273534\nv 0.126629 -0.363214 0.270594\nv 0.146524 -0.302873 0.257728\nv 0.12974 -0.302871 0.254957\nv 0.180454 -0.302874 0.259957\nv 0.163057 -0.333563 0.26543\nv 0.163452 -0.302874 0.259398\nv 0.180454 -0.363214 0.275898\nv 0.16241 -0.363214 0.275305\nv 0.197851 -0.333563 0.265429\nv 0.216465 -0.363213 0.273532\nv 0.198498 -0.363213 0.275304\nv 0.214385 -0.302874 0.257727\nv 0.197456 -0.302874 0.259397\nv 0.247736 -0.302874 0.251098\nv 0.232348 -0.333562 0.260887\nv 0.231169 -0.302874 0.254958\nv 0.251862 -0.363213 0.266497\nv 0.234279 -0.363213 0.270593\nv 0.265956 -0.333562 0.251881\nv 0.286034 -0.363213 0.254892\nv 0.269137 -0.363213 0.261253\nv 0.279933 -0.302874 0.240164\nv 0.264013 -0.302874 0.246157\nv 0.310432 -0.302874 0.225128\nv 0.298102 -0.333562 0.238566\nv 0.295429 -0.302874 0.233145\nv 0.318403 -0.363213 0.238934\nv 0.30248 -0.363213 0.247442\nv 0.328234 -0.333562 0.221169\nv 0.348407 -0.363213 0.21888\nv 0.333733 -0.363213 0.229398\nv 0.338702 -0.302874 0.206233\nv 0.324876 -0.302874 0.216143\nv 0.364271 -0.302874 0.183817\nv 0.355839 -0.333562 0.199987\nv 0.351853 -0.302874 0.195443\nv 0.375543 -0.363213 0.195089\nv 0.362364 -0.363213 0.207428\nv 0.380442 -0.333562 0.175385\nv 0.399335 -0.363213 0.167953\nv 0.387883 -0.363213 0.18191\nv 0.386687 -0.302874 0.158248\nv 0.375897 -0.302874 0.171399\nv 0.405583 -0.302874 0.129978\nv 0.401623 -0.333562 0.14778\nv 0.396597 -0.302874 0.144422\nv 0.419389 -0.363213 0.137949\nv 0.409852 -0.363213 0.153278\nv 0.41902 -0.333562 0.117648\nv 0.435346 -0.363213 0.10558\nv 0.427896 -0.363213 0.122025\nv 0.420618 -0.302874 0.099479\nv 0.413599 -0.302874 0.114975\nv 0.431552 -0.302874 0.0672816\nv 0.432336 -0.333562 0.0855019\nv 0.426612 -0.302874 0.0835589\nv 0.446951 -0.363213 0.0714076\nv 0.441707 -0.363213 0.0886831\nv -0.226364 0.0248897 0.147837\nv -0.272359 0.0456691 0.167351\nv -0.308081 0.022478 0.199059\nv -0.263635 0.0241389 0.176373\nv -0.241954 0.0704684 0.137268\nv -0.282929 0.0922903 0.16408\nv -0.323273 0.0654223 0.184633\nv -0.279023 0.0685182 0.163425\nv -0.378642 0.0841735 0.201751\nv -0.422345 0.0529797 0.209814\nv -0.363992 0.0382347 0.204918\nv -0.371962 0.0604772 0.200294\nv -0.403129 0.0105138 0.226942\nv -0.355173 0.0180495 0.21594\nv -0.461485 0.0200416 0.21881\nv -0.495698 -0.0143197 0.229692\nv -0.450167 -0.000468509 0.231994\nv -0.481437 0.0654972 0.21294\nv -0.518499 0.0297913 0.207694\nv -0.471679 0.0422263 0.212594\nv -0.572865 0.0392192 0.192052\nv -0.598742 0.00617303 0.171091\nv -0.55042 -0.00586702 0.202613\nv -0.561342 0.0172488 0.194173\nv -0.578595 -0.0445414 0.195036\nv -0.539133 -0.030462 0.218633\nv -0.24397 0.118286 0.140653\nv -0.282389 0.143188 0.175113\nv -0.330968 0.113682 0.191983\nv -0.283384 0.11659 0.168802\nv -0.23955 0.174678 0.148903\nv -0.284067 0.210375 0.1826\nv -0.334025 0.17183 0.207061\nv -0.281949 0.173859 0.180538\nv -0.397254 0.204695 0.229313\nv -0.452019 0.15881 0.236241\nv -0.387734 0.13584 0.218362\nv -0.391981 0.167258 0.226339\nv -0.438131 0.100862 0.218532\nv -0.383593 0.10872 0.208969\nv -0.501245 0.115247 0.228034\nv -0.541434 0.0753115 0.211624\nv -0.491452 0.0892662 0.219445\nv -0.518263 0.180702 0.235173\nv -0.56598 0.127367 0.223273\nv -0.510341 0.145154 0.234635\nv -0.631547 0.13666 0.202588\nv -0.65952 0.0838248 0.176155\nv -0.600899 0.0822907 0.199953\nv -0.617969 0.106523 0.203906\nv -0.622902 0.0458452 0.169459\nv -0.585958 0.0603779 0.19499\nv -0.247473 0.25423 0.147018\nv -0.301263 0.300486 0.169917\nv -0.344574 0.253792 0.205282\nv -0.290747 0.254508 0.178822\nv -0.277355 0.338651 0.132141\nv -0.325512 0.377504 0.137163\nv -0.363925 0.347316 0.175888\nv -0.314888 0.342539 0.156598\nv -0.428349 0.388099 0.160717\nv -0.479739 0.336265 0.192099\nv -0.412688 0.298423 0.210029\nv -0.420962 0.345956 0.188855\nv -0.465952 0.240549 0.231361\nv -0.404471 0.249876 0.223696\nv -0.529623 0.270004 0.207402\nv -0.58097 0.201396 0.210858\nv -0.524534 0.223603 0.225574\nv -0.538122 0.357884 0.151596\nv -0.585316 0.289632 0.165226\nv -0.533997 0.31605 0.182221\nv -0.63578 0.298762 0.118014\nv -0.685466 0.235489 0.133903\nv -0.635783 0.219735 0.172771\nv -0.635279 0.261337 0.147118\nv -0.689018 0.154203 0.174596\nv -0.636012 0.176287 0.191735\nv -0.738916 0.248087 0.105729\nv -0.786321 0.201805 0.133887\nv -0.737879 0.179994 0.152997\nv -0.737458 0.21641 0.131585\nv -0.829518 0.21374 0.113646\nv -0.859751 0.180458 0.128038\nv -0.826682 0.160204 0.14956\nv -0.827122 0.189378 0.134531\nv -0.85301 0.125709 0.142681\nv -0.820619 0.102527 0.147525\nv -0.784741 0.13407 0.160725\nv -0.822951 0.130357 0.154576\nv -0.742603 0.103872 0.162991\nv -0.739345 0.141075 0.165828\nv 0.899879 -0.0645584 0.142759\nv 0.886987 -0.00670795 0.133607\nv 0.853761 -0.0325641 0.165875\nv 0.878166 -0.0496484 0.159081\nv 0.90865 0.0316139 0.0993695\nv 0.893724 0.0762141 0.0923336\nv 0.873682 0.041253 0.118178\nv 0.892527 0.0361431 0.111694\nv 0.859284 0.07961 0.0989851\nv 0.831249 0.0493355 0.116965\nv 0.842283 0.0124066 0.14209\nv 0.852971 0.0459737 0.119657\nv 0.802276 -0.00711237 0.162379\nv 0.828323 -0.0183344 0.166638\nv 0.793821 0.0242015 0.131602\nv 0.750096 0.00619389 0.141881\nv 0.776045 0.000949034 0.154109\nv 0.821021 0.0780225 0.0918139\nv 0.788558 0.0498184 0.101833\nv 0.809372 0.0503687 0.110939\nv 0.786269 0.0717038 0.0744057\nv 0.755003 0.046948 0.0753975\nv 0.749228 0.0274939 0.106887\nv 0.770028 0.0484298 0.0899013\nv 0.704631 0.0106061 0.105336\nv 0.724896 0.00896631 0.12575\nv 0.90122 0.110525 0.0663451\nv 0.882176 0.139086 0.0587656\nv 0.875594 0.110998 0.0787855\nv 0.889513 0.110814 0.0745193\nv 0.881951 0.159342 0.041808\nv 0.867174 0.174942 0.0344682\nv 0.863785 0.161398 0.0467292\nv 0.873992 0.160171 0.0455869\nv 0.847823 0.178094 0.033384\nv 0.840709 0.15839 0.0453676\nv 0.857276 0.137901 0.0621674\nv 0.852576 0.160719 0.0466214\nv 0.843732 0.108977 0.0779073\nv 0.860116 0.110559 0.079722\nv 0.829098 0.131838 0.0575686\nv 0.811171 0.101576 0.0679063\nv 0.827096 0.105735 0.0739198\nv 0.826892 0.172547 0.0307411\nv 0.816947 0.149641 0.0400356\nv 0.828529 0.154664 0.0430718\nv 0.808167 0.159625 0.0275264\nv 0.799003 0.138661 0.0318173\nv 0.803336 0.122127 0.0472303\nv 0.806873 0.14342 0.03656\nv 0.785305 0.0934886 0.050389\nv 0.79692 0.097246 0.0600138\nv -0.0772477 -0.271788 -0.0168206\nv -0.0773594 -0.240592 -0.0340824\nv -0.0841216 -0.209693 -0.0177792\nv -0.079533 -0.240524 2.32831e-10\nv -0.078991 -0.240545 -0.0170813\nv -0.0728229 -0.271814 -0.050183\nv -0.0798813 -0.209926 -0.052916\nv -0.0746329 -0.240649 -0.0509233\nv -0.0989001 -0.151564 -0.0616881\nv -0.0906563 -0.17984 -0.0378688\nv -0.0881198 -0.180085 -0.0564184\nv -0.10249 -0.150873 -0.0208746\nv -0.0925938 -0.179586 2.32831e-10\nv -0.0921258 -0.17966 -0.0190114\nv 0.433392 -0.271667 -0.0503129\nv 0.438181 -0.24046 -0.0339305\nv 0.441341 -0.209772 -0.0518939\nv 0.435412 -0.24046 -0.0507146\nv 0.437796 -0.271667 -0.0168667\nv 0.44041 -0.24046 2.32831e-10\nv 0.445882 -0.209772 -0.0173968\nv 0.439851 -0.24046 -0.0170014\nv 0.456352 -0.180121 2.32831e-10\nv 0.469345 -0.152026 -0.0189345\nv 0.453987 -0.180121 -0.0360112\nv 0.455758 -0.180121 -0.018044\nv 0.464402 -0.152026 -0.056481\nv 0.451048 -0.180121 -0.0538247\nv -0.113702 -0.124184 -0.0465778\nv -0.127477 -0.0986388 -0.0264678\nv -0.114965 -0.123598 2.32831e-10\nv -0.114699 -0.12376 -0.0234658\nv -0.125598 -0.100077 -0.0774651\nv -0.111774 -0.124805 -0.0689823\nv -0.151522 -0.0577998 -0.0946524\nv -0.139651 -0.0765393 -0.0585294\nv -0.139228 -0.0776519 -0.0863005\nv -0.149632 -0.0556384 -0.0324356\nv -0.139363 -0.0755687 2.32831e-10\nv -0.139547 -0.0758258 -0.0295634\nv 0.48454 -0.126006 -0.0400336\nv 0.501179 -0.102139 -0.0637985\nv 0.481272 -0.126006 -0.0598368\nv 0.487169 -0.126006 2.32831e-10\nv 0.506628 -0.102074 -0.0213863\nv 0.486509 -0.126006 -0.0200595\nv 0.529724 -0.0802051 2.32831e-10\nv 0.55324 -0.0605278 -0.0245143\nv 0.527075 -0.0803464 -0.0456707\nv 0.52908 -0.0802432 -0.0228821\nv 0.548175 -0.0611783 -0.0731648\nv 0.52364 -0.0805034 -0.0682724\nv -0.158714 -0.0392861 -0.0688802\nv -0.161226 -0.0226894 -0.0365245\nv -0.155415 -0.0381015 1.56125e-17\nv -0.156454 -0.0383941 -0.0347672\nv -0.17045 -0.0253483 -0.107811\nv -0.161335 -0.0407916 -0.101685\nv -0.191058 0.00651089 -0.116129\nv -0.171143 -0.00815366 -0.0754537\nv -0.18065 -0.010191 -0.113445\nv -0.169466 0.00971521 -0.0381821\nv -0.163049 -0.00685545 6.93889e-18\nv -0.16516 -0.00712078 -0.037674\nv 0.57712 -0.0434567 -0.0524081\nv 0.602333 -0.0291797 -0.0833768\nv 0.574302 -0.044242 -0.0783823\nv 0.578808 -0.0427504 1.56125e-17\nv 0.604581 -0.027038 -0.0276992\nv 0.578487 -0.0429409 -0.0262501\nv 0.631041 -0.0120088 1.12757e-17\nv 0.65835 0.00149403 -0.0281769\nv 0.631846 -0.0135158 -0.0574897\nv 0.631282 -0.0123745 -0.0284716\nv 0.663477 -0.00198254 -0.0876846\nv 0.632576 -0.0154766 -0.0876007\nv -0.649077 -0.0893811 -0.0556947\nv -0.63048 -0.126684 -0.114586\nv -0.64033 -0.168956 -0.0584326\nv -0.650212 -0.12757 2.77556e-17\nv -0.645057 -0.127342 -0.0573855\nv -0.60712 -0.0855023 -0.165758\nv -0.608365 -0.169082 -0.173626\nv -0.607375 -0.125622 -0.171418\nv -0.597487 -0.254164 -0.171633\nv -0.622229 -0.211912 -0.116814\nv -0.60549 -0.212402 -0.173904\nv -0.621575 -0.254067 -0.0579328\nv -0.637071 -0.212109 3.98986e-17\nv -0.633102 -0.211954 -0.0586704\nv 0.915521 -0.12162 -0.128375\nv 0.931397 -0.167386 -0.0906018\nv 0.922964 -0.203378 -0.139971\nv 0.918627 -0.164956 -0.136346\nv 0.936898 -0.126969 -0.0426286\nv 0.941034 -0.170013 3.46945e-17\nv 0.940712 -0.206243 -0.0467694\nv 0.938728 -0.169234 -0.0452122\nv 0.943043 -0.240103 4.33681e-17\nv 0.938115 -0.271315 -0.0477646\nv 0.935103 -0.238874 -0.0948994\nv 0.941093 -0.239702 -0.0475402\nv 0.92307 -0.27046 -0.142523\nv 0.924937 -0.237992 -0.141897\nv -0.595943 -0.292911 -0.111616\nv -0.581971 -0.328865 -0.053448\nv -0.606752 -0.293122 4.65661e-10\nv -0.603956 -0.293026 -0.056054\nv -0.563961 -0.328741 -0.15873\nv -0.583091 -0.292949 -0.166196\nv -0.518122 -0.391284 -0.142261\nv -0.551461 -0.361549 -0.100754\nv -0.541752 -0.361525 -0.150373\nv -0.531814 -0.391317 -0.0477097\nv -0.559335 -0.361661 4.65661e-10\nv -0.557347 -0.361617 -0.0505286\nv 0.924842 -0.302622 -0.0951661\nv 0.904277 -0.333545 -0.141134\nv 0.915887 -0.302445 -0.142252\nv 0.931668 -0.302867 4.65661e-10\nv 0.917665 -0.333631 -0.0473118\nv 0.930022 -0.302787 -0.0476825\nv 0.903433 -0.363358 4.65661e-10\nv 0.883569 -0.39148 -0.0457765\nv 0.897168 -0.363358 -0.0931422\nv 0.901897 -0.363358 -0.0466705\nv 0.871326 -0.39148 -0.13655\nv 0.889127 -0.363358 -0.139216\nv -0.502465 -0.417988 -0.0906397\nv -0.482543 -0.441569 -0.0434581\nv -0.508636 -0.418012 7.11237e-17\nv -0.507097 -0.417999 -0.0454052\nv -0.471062 -0.44159 -0.129763\nv -0.494727 -0.418002 -0.135533\nv -0.420897 -0.479014 -0.119393\nv -0.453423 -0.461936 -0.0832705\nv -0.44662 -0.461957 -0.124525\nv -0.431306 -0.478988 -0.0400084\nv -0.458853 -0.461931 7.97973e-17\nv -0.457497 -0.46193 -0.0417115\nv 0.859123 -0.41751 -0.0891054\nv 0.830368 -0.441063 -0.129189\nv 0.851762 -0.41751 -0.133183\nv 0.865005 -0.41751 4.65661e-10\nv 0.841704 -0.441063 -0.0433091\nv 0.863535 -0.41751 -0.0446478\nv 0.819359 -0.461755 4.65661e-10\nv 0.792284 -0.479202 -0.0401007\nv 0.813881 -0.461755 -0.0833923\nv 0.817984 -0.461755 -0.0417851\nv 0.781815 -0.479202 -0.119619\nv 0.807075 -0.461755 -0.124643\nv -0.399585 -0.492655 -0.0762257\nv -0.373963 -0.502699 -0.036288\nv -0.404563 -0.492646 8.1532e-17\nv -0.403315 -0.492648 -0.0381918\nv -0.364527 -0.502715 -0.108249\nv -0.393387 -0.492669 -0.113944\nv -0.304512 -0.511137 -0.0964156\nv -0.340331 -0.508934 -0.0684991\nv -0.334756 -0.508941 -0.102382\nv -0.312937 -0.511132 -0.0323231\nv -0.344817 -0.508929 8.32667e-17\nv -0.34369 -0.50893 -0.034323\nv 0.760756 -0.49302 -0.0763982\nv 0.725701 -0.503066 -0.108457\nv 0.754521 -0.49302 -0.11419\nv 0.765774 -0.49302 4.65661e-10\nv 0.735193 -0.503066 -0.0363588\nv 0.764514 -0.49302 -0.0382806\nv 0.705969 -0.5092 4.65661e-10\nv 0.673969 -0.51128 -0.0323461\nv 0.701464 -0.5092 -0.0685922\nv 0.704838 -0.5092 -0.0343693\nv 0.665525 -0.51128 -0.0964871\nv 0.695866 -0.5092 -0.102522\nv -0.279168 -0.509094 -0.0604992\nv -0.251836 -0.502967 -0.028333\nv -0.283139 -0.509093 2.32831e-10\nv -0.282142 -0.509093 -0.0303145\nv -0.244442 -0.502967 -0.0845142\nv -0.274234 -0.509095 -0.0904242\nv -0.1884 -0.479064 -0.073367\nv -0.219959 -0.492906 -0.0527166\nv -0.215657 -0.492906 -0.0787928\nv -0.194822 -0.479064 -0.0245954\nv -0.223422 -0.492906 2.32831e-10\nv -0.222553 -0.492906 -0.0264147\nv 0.640127 -0.509163 -0.0605171\nv 0.605366 -0.502994 -0.0845207\nv 0.635188 -0.509163 -0.0904528\nv 0.644102 -0.509163 2.32831e-10\nv 0.612763 -0.502994 -0.0283345\nv 0.643104 -0.509163 -0.0303231\nv 0.584334 -0.492914 2.32831e-10\nv 0.555729 -0.479067 -0.0245964\nv 0.580872 -0.492914 -0.052716\nv 0.583465 -0.492914 -0.0264142\nv 0.549308 -0.479067 -0.07337\nv 0.576569 -0.492914 -0.0787927\nv -0.166925 -0.461595 -0.0457248\nv -0.146001 -0.440888 -0.0213837\nv -0.169932 -0.461594 7.71952e-17\nv -0.169177 -0.461594 -0.0229111\nv -0.140407 -0.440889 -0.0637901\nv -0.16319 -0.461595 -0.068344\nv -0.103626 -0.391328 -0.0563544\nv -0.123704 -0.417337 -0.0399869\nv -0.120426 -0.417336 -0.0597714\nv -0.108603 -0.391336 -0.0188877\nv -0.126345 -0.417338 7.02563e-17\nv -0.125681 -0.417338 -0.0200352\nv 0.527825 -0.461595 -0.0457323\nv 0.501292 -0.440887 -0.063819\nv 0.524093 -0.461595 -0.0683545\nv 0.530829 -0.461595 7.63278e-17\nv 0.506877 -0.440887 -0.0213945\nv 0.530075 -0.461595 -0.022915\nv 0.487169 -0.417328 7.02563e-17\nv 0.469345 -0.391308 -0.0189345\nv 0.48454 -0.417328 -0.0400336\nv 0.486509 -0.417328 -0.0200595\nv 0.464402 -0.391308 -0.056481\nv 0.481272 -0.417328 -0.0598368\nv -0.0933561 -0.363266 -0.0358553\nv -0.0853969 -0.333658 -0.0172909\nv -0.0957561 -0.363277 2.32831e-10\nv -0.0951522 -0.363274 -0.0179632\nv -0.0807802 -0.333634 -0.0516058\nv -0.0903831 -0.363255 -0.0536053\nv -0.0777091 -0.302989 -0.0337347\nv -0.0748994 -0.302981 -0.0504378\nv -0.0799761 -0.302996 2.32831e-10\nv -0.0794059 -0.302994 -0.0169002\nv 0.453987 -0.363213 -0.0360112\nv 0.441341 -0.333562 -0.0518939\nv 0.451047 -0.363213 -0.0538247\nv 0.456352 -0.363213 2.32831e-10\nv 0.445882 -0.333562 -0.0173968\nv 0.455758 -0.363213 -0.018044\nv 0.44041 -0.302874 2.32831e-10\nv 0.438181 -0.302874 -0.0339305\nv 0.439851 -0.302874 -0.0170014\nv 0.435412 -0.302874 -0.0507146\nv -0.184579 0.0283326 -0.0758708\nv -0.181483 0.0507588 -0.0375186\nv -0.172493 0.029453 1.73472e-18\nv -0.175356 0.029222 -0.0380153\nv -0.209002 0.0488174 -0.109033\nv -0.200796 0.026588 -0.113407\nv -0.217376 0.0956968 -0.106649\nv -0.196642 0.0730465 -0.0729864\nv -0.21481 0.0719761 -0.106759\nv -0.18906 0.0973588 -0.0369163\nv -0.183436 0.0738957 -1.73472e-18\nv -0.1865 0.0736847 -0.0370372\nv -0.63804 -0.0557153 -0.105689\nv -0.620338 -0.0246741 -0.144159\nv -0.612204 -0.0522036 -0.155124\nv -0.659836 -0.0576858 1.9082e-17\nv -0.660053 -0.0309971 -0.0512751\nv -0.654186 -0.057343 -0.0535263\nv -0.671381 -0.0109815 1.04083e-17\nv -0.672736 0.00553925 -0.0481051\nv -0.652035 -0.00718193 -0.0960473\nv -0.666347 -0.0101131 -0.0493364\nv -0.639105 0.0171036 -0.134621\nv -0.629237 -0.00186188 -0.137507\nv -0.668529 0.0229364 -0.0937079\nv -0.664385 0.0471889 -0.137092\nv -0.650146 0.033093 -0.13495\nv -0.682062 0.0136701 6.93889e-18\nv -0.687557 0.0230889 -0.048536\nv -0.678888 0.0161904 -0.0479762\nv -0.702466 0.0228268 3.46945e-18\nv -0.723455 0.0306222 -0.0500659\nv -0.696112 0.0403874 -0.0966228\nv -0.701495 0.0274833 -0.0493705\nv -0.711018 0.0699464 -0.140453\nv -0.683844 0.0604737 -0.139639\nv -0.197616 0.120565 -0.0740669\nv -0.185309 0.147067 -0.0383668\nv -0.185024 0.121333 -4.65661e-10\nv -0.187815 0.12114 -0.037501\nv -0.21277 0.14562 -0.111756\nv -0.215858 0.119612 -0.108762\nv -0.211944 0.211501 -0.115006\nv -0.1929 0.176507 -0.0774327\nv -0.210627 0.175617 -0.114286\nv -0.186695 0.21351 -0.0392432\nv -0.181911 0.177458 -4.65661e-10\nv -0.184088 0.177178 -0.039089\nv -0.202986 0.256677 -0.0761496\nv -0.21247 0.306381 -0.0372861\nv -0.194255 0.258792 -2.77556e-17\nv -0.195676 0.258101 -0.0384049\nv -0.233274 0.300828 -0.108344\nv -0.219235 0.25517 -0.112574\nv -0.28554 0.377539 -0.102785\nv -0.243245 0.349448 -0.0716671\nv -0.254832 0.34268 -0.103673\nv -0.275261 0.395718 -0.0370563\nv -0.23787 0.355332 -4.16334e-17\nv -0.238518 0.353777 -0.0365992\nv -0.324782 0.418368 -0.0766888\nv -0.380567 0.448379 -0.0421963\nv -0.324219 0.430543 -5.55112e-17\nv -0.32414 0.427632 -0.0393698\nv -0.377182 0.416578 -0.119532\nv -0.327025 0.40222 -0.109906\nv -0.49105 0.412598 -0.126453\nv -0.437739 0.443303 -0.0867805\nv -0.433906 0.420472 -0.126157\nv -0.497713 0.451815 -0.0440165\nv -0.440657 0.46125 -6.245e-17\nv -0.439954 0.45682 -0.044193\nv -0.54639 0.416663 -0.0796779\nv -0.597556 0.402702 -0.0349268\nv -0.550424 0.43764 -6.07153e-17\nv -0.549256 0.432223 -0.0403239\nv -0.590766 0.362418 -0.102899\nv -0.542466 0.391652 -0.117092\nv -0.688465 0.298207 -0.0793116\nv -0.64228 0.353063 -0.0592203\nv -0.638562 0.329676 -0.0886971\nv -0.696322 0.332501 -0.0262655\nv -0.647138 0.373196 -4.94396e-17\nv -0.645587 0.367909 -0.0296368\nv -0.753882 0.0487444 -0.097109\nv -0.788638 0.0739317 -0.132136\nv -0.748401 0.0726061 -0.137394\nv -0.756551 0.0284769 5.20417e-18\nv -0.794726 0.039468 -0.0498551\nv -0.75619 0.0337542 -0.0502084\nv -0.835549 0.0462132 3.46945e-18\nv -0.869315 0.0689967 -0.047889\nv -0.830206 0.0617544 -0.0929174\nv -0.834092 0.0503526 -0.0490629\nv -0.853513 0.0922976 -0.12183\nv -0.824376 0.0794025 -0.126355\nv -0.748261 0.290488 -0.0531725\nv -0.808566 0.271601 -0.0295336\nv -0.754792 0.304697 -3.81639e-17\nv -0.752733 0.301135 -0.0266247\nv -0.795586 0.25069 -0.0849771\nv -0.743087 0.272793 -0.0795664\nv -0.869895 0.205332 -0.0987351\nv -0.850337 0.237756 -0.0650293\nv -0.839122 0.229154 -0.0910596\nv -0.893485 0.209178 -0.0382779\nv -0.860187 0.242482 -4.65661e-10\nv -0.857568 0.241685 -0.0338116\nv -0.887505 0.105222 -0.0880737\nv -0.884528 0.145491 -0.117503\nv -0.873947 0.115896 -0.120342\nv -0.897969 0.0952336 -4.65661e-10\nv -0.909855 0.133542 -0.0444004\nv -0.895421 0.0979893 -0.0463905\nv -0.912934 0.170449 -9.31323e-10\nv -0.900699 0.174414 -0.0794211\nv -0.910062 0.171868 -0.0417518\nv -0.884103 0.176374 -0.108925\nv 0.929765 -0.0756882 -0.0768269\nv 0.937138 -0.0254299 -0.0340963\nv 0.939259 -0.0784312 2.25514e-17\nv 0.93698 -0.0777446 -0.0387788\nv 0.920292 -0.0208585 -0.0959241\nv 0.917238 -0.0722656 -0.113414\nv 0.918325 0.0734065 -0.0664035\nv 0.930159 0.0269004 -0.0563609\nv 0.921195 0.0286349 -0.0803687\nv 0.930353 0.0729879 -0.0239684\nv 0.937335 0.025941 5.20417e-18\nv 0.93554 0.0261044 -0.029015\nv 0.688203 0.014068 -0.0530958\nv 0.721066 0.0283224 -0.0692478\nv 0.693482 0.012453 -0.0802588\nv 0.684873 0.0153166 2.32831e-10\nv 0.711578 0.0293528 -0.0236528\nv 0.685546 0.0150122 -0.0264249\nv 0.73435 0.0457253 2.32831e-10\nv 0.754981 0.0651916 -0.0167972\nv 0.738344 0.0457588 -0.0400163\nv 0.735154 0.0456883 -0.0202979\nv 0.763679 0.0667302 -0.0484756\nv 0.744701 0.0461181 -0.058576\nv 0.916186 0.110989 -0.037659\nv 0.905689 0.141782 -0.0153949\nv 0.920878 0.111536 -7.80626e-18\nv 0.919742 0.11135 -0.0193903\nv 0.89867 0.140028 -0.042717\nv 0.910062 0.110648 -0.0536845\nv 0.874452 0.175522 -0.0279371\nv 0.888714 0.163739 -0.0236221\nv 0.886416 0.161213 -0.0340062\nv 0.875177 0.181217 -0.009609\nv 0.890693 0.165094 -1.47451e-17\nv 0.890173 0.164874 -0.0120964\nv 0.772302 0.0896546 -0.0267798\nv 0.78694 0.115878 -0.0311817\nv 0.77729 0.0910486 -0.0391789\nv 0.769114 0.0889192 -4.33681e-18\nv 0.780908 0.114622 -0.0107961\nv 0.769768 0.0890353 -0.0135881\nv 0.789436 0.13931 -1.0842e-17\nv 0.797823 0.160636 -0.00696617\nv 0.791214 0.139067 -0.0169285\nv 0.789795 0.139355 -0.00854692\nv 0.800396 0.156229 -0.0209953\nv 0.794033 0.138022 -0.0249794\nv 0.806924 0.174063 -0.0126376\nv 0.816311 0.178097 -0.0199506\nv 0.807851 0.169244 -0.0196527\nv 0.806211 0.176018 -1.6263e-17\nv 0.815308 0.18612 -0.00597402\nv 0.806384 0.175868 -0.00617951\nv 0.824283 0.192798 -1.88651e-17\nv 0.833553 0.195955 -0.00645493\nv 0.824877 0.189961 -0.012893\nv 0.824422 0.19246 -0.0061368\nv 0.835389 0.187217 -0.0219834\nv 0.825687 0.183818 -0.020888\nv 0.843195 0.195165 -0.0140832\nv 0.854257 0.188465 -0.0235952\nv 0.844828 0.189107 -0.0227553\nv 0.842442 0.198041 -1.99493e-17\nv 0.852019 0.196521 -0.00716425\nv 0.842532 0.197674 -0.00671552\nv 0.86278 0.191661 -1.86483e-17\nv 0.862892 0.189358 -0.0162822\nv 0.86268 0.1914 -0.00804684\nv 0.863932 0.184271 -0.0248946\nv -0.0841216 -0.209693 0.0177792\nv -0.0773594 -0.240592 0.0340824\nv -0.0772477 -0.271788 0.0168206\nv -0.078991 -0.240545 0.0170813\nv -0.10249 -0.150873 0.0208746\nv -0.0906563 -0.17984 0.0378688\nv -0.0921258 -0.17966 0.0190114\nv -0.0989001 -0.151564 0.0616881\nv -0.0798813 -0.209926 0.052916\nv -0.0881198 -0.180085 0.0564184\nv -0.0728229 -0.271814 0.050183\nv -0.0746329 -0.240649 0.0509233\nv 0.441341 -0.209772 0.0518939\nv 0.438181 -0.24046 0.0339305\nv 0.433392 -0.271667 0.0503129\nv 0.435412 -0.24046 0.0507146\nv 0.464402 -0.152026 0.056481\nv 0.453987 -0.180121 0.0360112\nv 0.451048 -0.180121 0.0538247\nv 0.469345 -0.152026 0.0189345\nv 0.445882 -0.209772 0.0173968\nv 0.455758 -0.180121 0.018044\nv 0.437796 -0.271667 0.0168667\nv 0.439851 -0.24046 0.0170014\nv -0.127477 -0.0986388 0.0264678\nv -0.113702 -0.124184 0.0465778\nv -0.114699 -0.12376 0.0234658\nv -0.149632 -0.0556384 0.0324356\nv -0.139651 -0.0765393 0.0585294\nv -0.139547 -0.0758257 0.0295634\nv -0.151522 -0.0577998 0.0946524\nv -0.125598 -0.100077 0.0774651\nv -0.139228 -0.0776519 0.0863005\nv -0.111774 -0.124805 0.0689823\nv 0.501179 -0.102139 0.0637985\nv 0.48454 -0.126006 0.0400336\nv 0.481272 -0.126006 0.0598368\nv 0.548175 -0.0611783 0.0731648\nv 0.527075 -0.0803464 0.0456707\nv 0.52364 -0.0805034 0.0682724\nv 0.55324 -0.0605278 0.0245143\nv 0.506628 -0.102074 0.0213863\nv 0.52908 -0.0802432 0.0228821\nv 0.486509 -0.126006 0.0200595\nv -0.161226 -0.0226894 0.0365245\nv -0.158714 -0.0392861 0.0688802\nv -0.156454 -0.0383941 0.0347672\nv -0.169466 0.00971521 0.0381821\nv -0.171143 -0.00815366 0.0754537\nv -0.16516 -0.00712078 0.037674\nv -0.191058 0.00651089 0.116129\nv -0.17045 -0.0253483 0.107811\nv -0.18065 -0.010191 0.113445\nv -0.161335 -0.0407916 0.101685\nv 0.602333 -0.0291797 0.0833768\nv 0.57712 -0.0434567 0.0524081\nv 0.574302 -0.044242 0.0783823\nv 0.663477 -0.00198254 0.0876846\nv 0.631846 -0.0135158 0.0574897\nv 0.632576 -0.0154766 0.0876007\nv 0.65835 0.00149403 0.0281769\nv 0.604581 -0.027038 0.0276992\nv 0.631282 -0.0123745 0.0284716\nv 0.578487 -0.0429409 0.0262501\nv -0.64033 -0.168956 0.0584326\nv -0.63048 -0.126684 0.114586\nv -0.649077 -0.0893811 0.0556947\nv -0.645057 -0.127342 0.0573855\nv -0.621575 -0.254067 0.0579328\nv -0.622229 -0.211912 0.116814\nv -0.633102 -0.211954 0.0586704\nv -0.597487 -0.254164 0.171633\nv -0.608365 -0.169082 0.173626\nv -0.60549 -0.212402 0.173904\nv -0.60712 -0.0855023 0.165758\nv -0.607375 -0.125622 0.171418\nv 0.922964 -0.203378 0.139971\nv 0.931397 -0.167386 0.0906018\nv 0.915521 -0.12162 0.128375\nv 0.918627 -0.164956 0.136346\nv 0.92307 -0.27046 0.142523\nv 0.935103 -0.238874 0.0948994\nv 0.924937 -0.237992 0.141897\nv 0.938115 -0.271315 0.0477646\nv 0.940712 -0.206243 0.0467694\nv 0.941093 -0.239702 0.0475402\nv 0.936898 -0.126969 0.0426286\nv 0.938728 -0.169234 0.0452122\nv -0.581971 -0.328865 0.053448\nv -0.595943 -0.292911 0.111616\nv -0.603956 -0.293026 0.056054\nv -0.531814 -0.391317 0.0477097\nv -0.551461 -0.361549 0.100754\nv -0.557347 -0.361617 0.0505286\nv -0.518122 -0.391284 0.142261\nv -0.563961 -0.328741 0.15873\nv -0.541752 -0.361525 0.150373\nv -0.583091 -0.292949 0.166196\nv 0.904277 -0.333545 0.141134\nv 0.924842 -0.302622 0.0951661\nv 0.915887 -0.302445 0.142252\nv 0.871326 -0.39148 0.13655\nv 0.897168 -0.363358 0.0931422\nv 0.889127 -0.363358 0.139216\nv 0.883569 -0.39148 0.0457765\nv 0.917665 -0.333631 0.0473118\nv 0.901897 -0.363358 0.0466705\nv 0.930022 -0.302787 0.0476825\nv -0.482543 -0.441569 0.0434581\nv -0.502465 -0.417988 0.0906397\nv -0.507097 -0.417999 0.0454052\nv -0.431306 -0.478988 0.0400084\nv -0.453423 -0.461936 0.0832705\nv -0.457497 -0.46193 0.0417115\nv -0.420897 -0.479014 0.119393\nv -0.471062 -0.44159 0.129763\nv -0.44662 -0.461957 0.124525\nv -0.494727 -0.418002 0.135533\nv 0.830368 -0.441063 0.129189\nv 0.859123 -0.41751 0.0891054\nv 0.851762 -0.41751 0.133183\nv 0.781815 -0.479202 0.119619\nv 0.813881 -0.461755 0.0833923\nv 0.807075 -0.461755 0.124643\nv 0.792284 -0.479202 0.0401007\nv 0.841704 -0.441063 0.0433091\nv 0.817984 -0.461755 0.0417851\nv 0.863535 -0.41751 0.0446478\nv -0.373963 -0.502699 0.036288\nv -0.399585 -0.492655 0.0762257\nv -0.403315 -0.492648 0.0381918\nv -0.312937 -0.511132 0.0323231\nv -0.340331 -0.508934 0.0684991\nv -0.34369 -0.50893 0.034323\nv -0.304512 -0.511137 0.0964156\nv -0.364527 -0.502715 0.108249\nv -0.334756 -0.508941 0.102382\nv -0.393387 -0.492669 0.113944\nv 0.725701 -0.503066 0.108457\nv 0.760756 -0.49302 0.0763982\nv 0.754521 -0.49302 0.11419\nv 0.665525 -0.51128 0.0964872\nv 0.701464 -0.5092 0.0685922\nv 0.695866 -0.5092 0.102522\nv 0.673969 -0.51128 0.0323461\nv 0.735193 -0.503066 0.0363588\nv 0.704838 -0.5092 0.0343693\nv 0.764514 -0.49302 0.0382806\nv -0.251836 -0.502967 0.028333\nv -0.279168 -0.509094 0.0604992\nv -0.282142 -0.509093 0.0303145\nv -0.194822 -0.479064 0.0245954\nv -0.219959 -0.492906 0.0527166\nv -0.222553 -0.492906 0.0264147\nv -0.1884 -0.479064 0.073367\nv -0.244442 -0.502967 0.0845142\nv -0.215657 -0.492906 0.0787928\nv -0.274234 -0.509095 0.0904242\nv 0.605366 -0.502994 0.0845208\nv 0.640127 -0.509163 0.0605171\nv 0.635188 -0.509163 0.0904528\nv 0.549308 -0.479067 0.07337\nv 0.580872 -0.492914 0.052716\nv 0.576569 -0.492914 0.0787927\nv 0.555729 -0.479067 0.0245964\nv 0.612763 -0.502994 0.0283345\nv 0.583465 -0.492914 0.0264142\nv 0.643104 -0.509163 0.0303231\nv -0.146001 -0.440888 0.0213837\nv -0.166925 -0.461595 0.0457248\nv -0.169177 -0.461594 0.0229111\nv -0.108603 -0.391336 0.0188877\nv -0.123704 -0.417337 0.0399869\nv -0.125681 -0.417338 0.0200352\nv -0.103626 -0.391328 0.0563544\nv -0.140407 -0.440889 0.0637901\nv -0.120426 -0.417336 0.0597714\nv -0.16319 -0.461595 0.068344\nv 0.501292 -0.440887 0.063819\nv 0.527825 -0.461595 0.0457323\nv 0.524093 -0.461595 0.0683545\nv 0.464402 -0.391308 0.056481\nv 0.48454 -0.417328 0.0400336\nv 0.481272 -0.417328 0.0598368\nv 0.469345 -0.391308 0.0189345\nv 0.506877 -0.440887 0.0213945\nv 0.486509 -0.417328 0.0200595\nv 0.530075 -0.461595 0.022915\nv -0.0853969 -0.333658 0.0172909\nv -0.0933561 -0.363266 0.0358553\nv -0.0951522 -0.363274 0.0179632\nv -0.0777091 -0.302989 0.0337347\nv -0.0794059 -0.302994 0.0169002\nv -0.0807802 -0.333634 0.0516058\nv -0.0748994 -0.302981 0.0504378\nv -0.0903831 -0.363255 0.0536053\nv 0.441341 -0.333562 0.0518939\nv 0.453987 -0.363213 0.0360112\nv 0.451047 -0.363213 0.0538247\nv 0.438181 -0.302874 0.0339305\nv 0.435412 -0.302874 0.0507146\nv 0.445882 -0.333562 0.0173968\nv 0.439851 -0.302874 0.0170014\nv 0.455758 -0.363213 0.018044\nv -0.181483 0.0507588 0.0375186\nv -0.184579 0.0283326 0.0758708\nv -0.175356 0.029222 0.0380153\nv -0.18906 0.0973588 0.0369163\nv -0.196642 0.0730465 0.0729864\nv -0.1865 0.0736847 0.0370372\nv -0.217376 0.0956968 0.106649\nv -0.209002 0.0488174 0.109033\nv -0.21481 0.0719761 0.106759\nv -0.200796 0.026588 0.113407\nv -0.620338 -0.0246741 0.144159\nv -0.63804 -0.0557153 0.105689\nv -0.612204 -0.0522036 0.155124\nv -0.639105 0.0171036 0.134621\nv -0.652035 -0.00718193 0.0960473\nv -0.629237 -0.00186188 0.137507\nv -0.672736 0.00553925 0.0481051\nv -0.660053 -0.0309971 0.0512751\nv -0.666347 -0.0101131 0.0493364\nv -0.654186 -0.057343 0.0535263\nv -0.664385 0.0471889 0.137092\nv -0.668529 0.0229364 0.0937079\nv -0.650146 0.033093 0.13495\nv -0.711018 0.0699464 0.140453\nv -0.696112 0.0403874 0.0966228\nv -0.683844 0.0604737 0.139639\nv -0.723455 0.0306222 0.0500659\nv -0.687557 0.0230889 0.048536\nv -0.701495 0.0274833 0.0493705\nv -0.678888 0.0161904 0.0479762\nv -0.185309 0.147067 0.0383668\nv -0.197616 0.120565 0.0740669\nv -0.187815 0.12114 0.037501\nv -0.186695 0.21351 0.0392432\nv -0.1929 0.176507 0.0774327\nv -0.184088 0.177178 0.039089\nv -0.211944 0.211501 0.115006\nv -0.21277 0.14562 0.111756\nv -0.210627 0.175617 0.114286\nv -0.215858 0.119612 0.108762\nv -0.21247 0.306381 0.0372861\nv -0.202986 0.256677 0.0761496\nv -0.195676 0.258101 0.0384049\nv -0.275261 0.395718 0.0370563\nv -0.243245 0.349448 0.0716671\nv -0.238518 0.353777 0.0365992\nv -0.28554 0.377539 0.102785\nv -0.233274 0.300828 0.108344\nv -0.254832 0.34268 0.103673\nv -0.219235 0.25517 0.112574\nv -0.380567 0.448379 0.0421963\nv -0.324782 0.418368 0.0766888\nv -0.32414 0.427632 0.0393698\nv -0.497713 0.451815 0.0440165\nv -0.437739 0.443303 0.0867805\nv -0.439954 0.45682 0.044193\nv -0.49105 0.412598 0.126453\nv -0.377182 0.416578 0.119532\nv -0.433906 0.420472 0.126157\nv -0.327025 0.40222 0.109906\nv -0.597556 0.402702 0.0349268\nv -0.54639 0.416663 0.0796779\nv -0.549256 0.432223 0.0403239\nv -0.696322 0.332501 0.0262655\nv -0.64228 0.353063 0.0592203\nv -0.645587 0.367909 0.0296368\nv -0.688465 0.298207 0.0793116\nv -0.590766 0.362418 0.102899\nv -0.638562 0.329676 0.0886971\nv -0.542466 0.391652 0.117092\nv -0.788638 0.0739317 0.132136\nv -0.753882 0.0487444 0.097109\nv -0.748401 0.0726061 0.137394\nv -0.853513 0.0922976 0.12183\nv -0.830206 0.0617544 0.0929174\nv -0.824376 0.0794025 0.126355\nv -0.869315 0.0689967 0.047889\nv -0.794726 0.039468 0.0498551\nv -0.834092 0.0503526 0.0490629\nv -0.75619 0.0337542 0.0502084\nv -0.808566 0.271601 0.0295336\nv -0.748261 0.290488 0.0531725\nv -0.752733 0.301135 0.0266247\nv -0.893485 0.209178 0.0382779\nv -0.850337 0.237756 0.0650293\nv -0.857568 0.241685 0.0338116\nv -0.869895 0.205332 0.0987351\nv -0.795586 0.25069 0.0849771\nv -0.839122 0.229154 0.0910596\nv -0.743087 0.272793 0.0795664\nv -0.884528 0.145491 0.117503\nv -0.887505 0.105222 0.0880737\nv -0.873947 0.115896 0.120342\nv -0.900699 0.174414 0.0794211\nv -0.884103 0.176374 0.108925\nv -0.909855 0.133542 0.0444004\nv -0.910062 0.171868 0.0417518\nv -0.895421 0.0979893 0.0463905\nv 0.937138 -0.0254299 0.0340963\nv 0.929765 -0.0756882 0.0768269\nv 0.93698 -0.0777446 0.0387788\nv 0.930353 0.0729879 0.0239684\nv 0.930159 0.0269004 0.0563609\nv 0.93554 0.0261044 0.029015\nv 0.918325 0.0734065 0.0664035\nv 0.920292 -0.0208584 0.0959241\nv 0.921195 0.0286349 0.0803687\nv 0.917238 -0.0722656 0.113414\nv 0.721066 0.0283224 0.0692478\nv 0.688203 0.014068 0.0530958\nv 0.693482 0.012453 0.0802588\nv 0.763679 0.0667302 0.0484756\nv 0.738344 0.0457588 0.0400163\nv 0.744701 0.0461181 0.058576\nv 0.754981 0.0651916 0.0167972\nv 0.711578 0.0293528 0.0236528\nv 0.735154 0.0456883 0.0202979\nv 0.685546 0.0150122 0.0264249\nv 0.905689 0.141782 0.0153949\nv 0.916186 0.110989 0.037659\nv 0.919742 0.11135 0.0193903\nv 0.875177 0.181217 0.009609\nv 0.888714 0.163739 0.0236221\nv 0.890173 0.164874 0.0120964\nv 0.874452 0.175522 0.0279371\nv 0.89867 0.140028 0.042717\nv 0.886416 0.161213 0.0340062\nv 0.910062 0.110648 0.0536845\nv 0.78694 0.115878 0.0311817\nv 0.772302 0.0896546 0.0267798\nv 0.77729 0.0910486 0.0391789\nv 0.800396 0.156229 0.0209953\nv 0.791214 0.139067 0.0169285\nv 0.794033 0.138022 0.0249794\nv 0.797823 0.160636 0.00696617\nv 0.780908 0.114622 0.0107961\nv 0.789795 0.139355 0.00854692\nv 0.769768 0.0890353 0.0135881\nv 0.816311 0.178097 0.0199506\nv 0.806924 0.174063 0.0126376\nv 0.807851 0.169244 0.0196527\nv 0.835389 0.187217 0.0219834\nv 0.824877 0.189961 0.012893\nv 0.825687 0.183818 0.020888\nv 0.833553 0.195955 0.00645493\nv 0.815308 0.18612 0.00597402\nv 0.824422 0.19246 0.0061368\nv 0.806384 0.175868 0.00617951\nv 0.854257 0.188465 0.0235952\nv 0.843195 0.195165 0.0140832\nv 0.844828 0.189107 0.0227553\nv 0.862892 0.189358 0.0162822\nv 0.863932 0.184271 0.0248946\nv 0.852019 0.196521 0.00716425\nv 0.86268 0.1914 0.00804684\nv 0.842532 0.197674 0.00671552\nvn 0.939295 0.129114 0.31789\nvn 0.959173 0.124229 0.254077\nvn 0.946187 0.00109304 0.323619\nvn 0.965504 -0.000756458 0.260387\nvn 0.894706 0.258567 0.364203\nvn 0.919869 0.249575 0.302577\nvn 0.915569 0.133126 0.379489\nvn 0.888183 0.136188 0.438844\nvn 0.896047 0.0034444 0.443946\nvn 0.923001 0.00247863 0.384789\nvn 0.834272 0.270783 0.480279\nvn 0.866067 0.26569 0.423481\nvn 0.857263 0.138342 0.495945\nvn 0.830644 0.391371 0.396055\nvn 0.862147 0.378301 0.337032\nvn 0.743859 0.526844 0.411229\nvn 0.782517 0.511681 0.354753\nvn 0.796506 0.40085 0.452656\nvn 0.890325 0.362196 0.275925\nvn 0.914421 0.344076 0.213183\nvn 0.941164 0.239137 0.238794\nvn 0.819086 0.491112 0.296491\nvn 0.852283 0.466292 0.237034\nvn 0.822878 0.139683 0.550782\nvn 0.831091 0.00448892 0.556119\nvn 0.86536 0.00408226 0.501134\nvn 0.761114 0.275048 0.587413\nvn 0.799356 0.273884 0.534807\nvn 0.784929 0.140175 0.603521\nvn 0.743383 0.139787 0.654096\nvn 0.751943 0.00440216 0.659214\nvn 0.793299 0.00461827 0.608814\nvn 0.674554 0.272224 0.686201\nvn 0.719527 0.274409 0.63795\nvn 0.698179 0.138561 0.702387\nvn 0.679045 0.408104 0.610205\nvn 0.720776 0.408915 0.559705\nvn 0.577064 0.535026 0.617045\nvn 0.620465 0.53943 0.569245\nvn 0.634696 0.404781 0.658265\nvn 0.759929 0.406631 0.507109\nvn 0.662695 0.540156 0.518717\nvn 0.70383 0.536214 0.465939\nvn 0.650045 0.13665 0.747508\nvn 0.658808 0.00286638 0.752305\nvn 0.706944 0.00380849 0.70726\nvn 0.578652 0.265096 0.771288\nvn 0.627189 0.2689 0.730976\nvn 0.599965 0.13444 0.788649\nvn 0.54797 0.13233 0.825965\nvn 0.555365 0.000717193 0.831606\nvn 0.60827 0.00176319 0.793728\nvn 0.477939 0.258469 0.839505\nvn 0.528925 0.261443 0.807395\nvn 0.494033 0.130663 0.859569\nvn 0.49728 0.388329 0.775831\nvn 0.543204 0.393936 0.741447\nvn 0.412224 0.505911 0.757711\nvn 0.451824 0.51249 0.730212\nvn 0.451022 0.383655 0.805847\nvn 0.588961 0.399725 0.702385\nvn 0.492259 0.520235 0.697881\nvn 0.533873 0.528157 0.660325\nvn 0.443017 0.142545 0.885108\nvn 0.446937 0.00890054 0.894521\nvn 0.505573 0.0132037 0.862683\nvn 0.374256 0.267962 0.887766\nvn 0.425206 0.256525 0.867983\nvn 0.38412 0.138342 0.91286\nvn 0.38365 -0.000640423 0.923479\nvn 0.320275 0.129159 0.938479\nvn 0.322513 -0.000517179 0.946565\nvn 0.315788 0.26389 0.911394\nvn 0.251848 0.254986 0.933571\nvn 0.257818 0.129333 0.957498\nvn 0.302097 0.389516 0.870066\nvn 0.352266 0.378448 0.85597\nvn 0.228689 0.506899 0.831116\nvn 0.277694 0.49621 0.822594\nvn 0.244392 0.385552 0.889731\nvn 0.403223 0.38041 0.832286\nvn 0.326468 0.498036 0.803355\nvn 0.371302 0.501149 0.781655\nvn 0.259505 -0.000342195 0.965742\nvn 0.194089 0.129496 0.972399\nvn 0.195349 -0.000204417 0.980734\nvn 0.189659 0.255076 0.948138\nvn 0.12701 0.255185 0.958514\nvn 0.129902 0.129624 0.983017\nvn 0.130711 -0.000109952 0.991421\nvn 0.0652625 0.129719 0.989401\nvn 0.0655983 -5.04202e-05 0.997846\nvn 0.0639137 0.255295 0.964748\nvn 0.00036869 0.255382 0.96684\nvn 0.000167579 0.129782 0.991543\nvn 0.121991 0.376833 0.918213\nvn 0.0615441 0.376929 0.924195\nvn 0.0580809 0.494606 0.867174\nvn 0.000872101 0.494717 0.869053\nvn 0.000606286 0.377033 0.9262\nvn 0.18194 0.376807 0.908248\nvn 0.17942 0.4948 0.850283\nvn 0.117806 0.502816 0.856328\nvn -0.00469959 -0.00944103 0.999944\nvn -0.0648679 0.129813 0.989414\nvn -0.0764171 2.14274e-06 0.997076\nvn -0.0631043 0.255429 0.964766\nvn -0.12686 0.234798 0.96373\nvn -0.129754 0.108522 0.98559\nvn -0.1934 0.129828 0.972492\nvn -0.184256 5.98995e-06 0.982878\nvn -0.130532 6.1092e-06 0.991444\nvn -0.248784 0.275997 0.928403\nvn -0.188667 0.255457 0.948233\nvn -0.255862 0.151072 0.954836\nvn -0.180815 0.377141 0.908334\nvn -0.121873 0.357087 0.926086\nvn -0.222013 0.514018 0.828551\nvn -0.169734 0.49486 0.852234\nvn -0.237563 0.397017 0.886533\nvn -0.0602704 0.377095 0.924212\nvn -0.0563267 0.494792 0.867184\nvn -0.114733 0.475455 0.872226\nvn -0.258824 3.30303e-06 0.965924\nvn -0.318771 0.129823 0.938899\nvn -0.331877 9.4624e-07 0.943323\nvn -0.310744 0.255456 0.915522\nvn -0.371989 0.2348 0.89805\nvn -0.380426 0.108517 0.918423\nvn -0.438503 0.129822 0.889304\nvn -0.43236 1.38201e-07 0.901701\nvn -0.382685 4.5198e-07 0.923879\nvn -0.48058 0.275995 0.832388\nvn -0.427653 0.255455 0.867096\nvn -0.494262 0.151068 0.856086\nvn -0.40975 0.377149 0.83058\nvn -0.357456 0.357105 0.862961\nvn -0.428889 0.514028 0.742853\nvn -0.384544 0.494883 0.779241\nvn -0.458906 0.39702 0.794846\nvn -0.297584 0.377149 0.877042\nvn -0.279101 0.494881 0.822919\nvn -0.336658 0.475496 0.812752\nvn -0.5 1.3821e-07 0.866025\nvn -0.55091 0.129821 0.824406\nvn -0.564717 1.133e-07 0.825285\nvn -0.537103 0.255455 0.803905\nvn -0.591743 0.234799 0.771174\nvn -0.605166 0.108516 0.788668\nvn -0.653729 0.129821 0.74551\nvn -0.651004 -1.49406e-08 0.759074\nvn -0.608761 -1.68092e-08 0.793353\nvn -0.679642 0.275995 0.679642\nvn -0.6375 0.255454 0.726867\nvn -0.698992 0.151068 0.698992\nvn -0.610756 0.377148 0.69623\nvn -0.568623 0.357104 0.741043\nvn -0.606538 0.514027 0.606538\nvn -0.573123 0.494882 0.653163\nvn -0.64899 0.397019 0.64899\nvn -0.514431 0.377148 0.770143\nvn -0.482573 0.494882 0.722645\nvn -0.535539 0.475495 0.697927\nvn -0.707107 2.5214e-08 0.707107\nvn -0.74551 0.129821 0.653729\nvn -0.759074 8.59086e-08 0.651004\nvn -0.726868 0.255454 0.6375\nvn -0.771174 0.2348 0.591743\nvn -0.788668 0.108516 0.605166\nvn -0.824406 0.129821 0.55091\nvn -0.825285 -1.49406e-08 0.564717\nvn -0.793354 -1.49415e-08 0.608761\nvn -0.832388 0.275995 0.48058\nvn -0.803905 0.255454 0.537103\nvn -0.856086 0.151068 0.494262\nvn -0.770143 0.377148 0.514431\nvn -0.741043 0.357104 0.568623\nvn -0.742854 0.514027 0.428887\nvn -0.722645 0.494882 0.482572\nvn -0.794847 0.397019 0.458905\nvn -0.69623 0.377148 0.610756\nvn -0.653163 0.494882 0.573123\nvn -0.697928 0.475495 0.535538\nvn -0.866025 -1.40078e-08 0.5\nvn -0.889305 0.129822 0.438502\nvn -0.901701 -1.49406e-08 0.43236\nvn -0.867097 0.255455 0.427651\nvn -0.898052 0.234799 0.371985\nvn -0.918424 0.108516 0.380423\nvn -0.938901 0.129822 0.318766\nvn -0.943324 -1.61857e-08 0.331874\nvn -0.92388 -1.68092e-08 0.382683\nvn -0.928408 0.275995 0.248766\nvn -0.915525 0.255454 0.310736\nvn -0.95484 0.151068 0.255848\nvn -0.877045 0.377148 0.297575\nvn -0.862964 0.357104 0.357451\nvn -0.828546 0.514027 0.222008\nvn -0.822921 0.494882 0.279095\nvn -0.886537 0.397019 0.237547\nvn -0.830582 0.377148 0.409748\nvn -0.779243 0.494882 0.384543\nvn -0.812754 0.475495 0.336654\nvn 0.880809 0.43909 0.177128\nvn 0.848223 0.512565 0.133396\nvn 0.814266 0.549064 0.188414\nvn 0.77438 0.583398 0.244913\nvn 0.787055 0.602285 0.133406\nvn 0.739676 0.646863 0.185601\nvn 0.73043 0.612643 0.301894\nvn 0.684481 0.634781 0.358524\nvn 0.686611 0.685929 0.240972\nvn 0.630638 0.716322 0.298626\nvn 0.716531 0.687293 0.119213\nvn 0.65304 0.737387 0.172626\nvn 0.584925 0.777095 0.23235\nvn 0.627654 0.772278 0.0981738\nvn 0.54574 0.822361 0.160905\nvn 0.826587 0.556304 0.0853238\nvn 0.818107 0.574091 0.0334868\nvn 0.772263 0.631128 0.072716\nvn 0.769667 0.63841 0.00670403\nvn 0.703321 0.709331 0.0467841\nvn 0.638351 0.648842 0.41414\nvn 0.524085 0.745902 0.411053\nvn 0.575398 0.736097 0.356481\nvn 0.593331 0.655315 0.467461\nvn 0.54944 0.6555 0.518108\nvn 0.432989 0.744359 0.50838\nvn 0.476717 0.747915 0.461914\nvn 0.506515 0.650904 0.565479\nvn 0.406843 0.820581 0.401405\nvn 0.458918 0.81647 0.350388\nvn 0.28647 0.881168 0.376135\nvn 0.341323 0.877598 0.336631\nvn 0.361435 0.818672 0.446252\nvn 0.518249 0.80315 0.293883\nvn 0.398339 0.871551 0.285875\nvn 0.466321 0.854955 0.22715\nvn 0.46599 0.643245 0.607527\nvn 0.361351 0.729431 0.580823\nvn 0.394234 0.737519 0.548312\nvn 0.429088 0.634313 0.643064\nvn 0.395069 0.625549 0.672763\nvn 0.309316 0.714852 0.627145\nvn 0.333295 0.721535 0.606879\nvn 0.363368 0.618064 0.697109\nvn 0.268088 0.800752 0.535654\nvn 0.287035 0.812128 0.507995\nvn 0.209564 0.869369 0.447528\nvn 0.203986 0.861028 0.465854\nvn 0.251798 0.796407 0.549849\nvn 0.323607 0.813652 0.482958\nvn 0.219631 0.87725 0.426844\nvn 0.251445 0.874378 0.415015\nvn 0.330676 0.612545 0.717943\nvn 0.255359 0.706454 0.660087\nvn 0.284918 0.70991 0.644088\nvn 0.293312 0.608786 0.737121\nvn 0.251265 0.606452 0.754375\nvn 0.180577 0.702963 0.687921\nvn 0.220604 0.704243 0.674815\nvn 0.204491 0.605142 0.769407\nvn 0.18768 0.7817 0.594745\nvn 0.210827 0.79106 0.574261\nvn 0.124515 0.863104 0.489436\nvn 0.154998 0.858819 0.488268\nvn 0.153809 0.789051 0.594762\nvn 0.233917 0.793271 0.562142\nvn 0.188843 0.865825 0.463341\nvn 0.174203 0.864621 0.471258\nvn 0.154777 0.604431 0.781478\nvn 0.0927083 0.701966 0.70615\nvn 0.13723 0.702256 0.698573\nvn 0.108363 0.614452 0.781477\nvn 0.0617423 0.604083 0.794526\nvn 0.000907167 0.717225 0.696841\nvn 0.0470739 0.701947 0.710671\nvn 0.00467296 0.61158 0.791168\nvn 0.0406981 0.788337 0.613896\nvn 0.0797105 0.788333 0.610063\nvn 0.00407301 0.869663 0.49363\nvn 0.0334725 0.86286 0.504333\nvn 0.00102346 0.801665 0.597773\nvn 0.11743 0.788534 0.603676\nvn 0.0651727 0.862821 0.50129\nvn 0.0955228 0.862883 0.496294\nvn -0.051402 0.604308 0.795091\nvn -0.0456697 0.70212 0.710592\nvn -0.0946484 0.686666 0.720785\nvn -0.105512 0.586957 0.802713\nvn -0.15567 0.604393 0.781329\nvn -0.18026 0.717406 0.67293\nvn -0.139175 0.702206 0.698239\nvn -0.202734 0.621535 0.756699\nvn -0.120288 0.78856 0.603079\nvn -0.0821909 0.774918 0.626695\nvn -0.124789 0.869768 0.477422\nvn -0.0989298 0.863027 0.495377\nvn -0.154596 0.801811 0.577234\nvn -0.0391491 0.788487 0.613804\nvn -0.0268973 0.862957 0.504562\nvn -0.0645776 0.858095 0.509415\nvn -0.255778 0.604423 0.754487\nvn -0.228459 0.702235 0.674294\nvn -0.278174 0.686733 0.671578\nvn -0.309811 0.58702 0.747947\nvn -0.35264 0.604427 0.714362\nvn -0.348325 0.71742 0.603305\nvn -0.31524 0.70224 0.638344\nvn -0.391691 0.621549 0.678421\nvn -0.272405 0.788585 0.551297\nvn -0.241847 0.774974 0.583888\nvn -0.244181 0.869772 0.428802\nvn -0.223926 0.863039 0.452793\nvn -0.298788 0.801821 0.517502\nvn -0.197185 0.788581 0.582458\nvn -0.157183 0.863024 0.480087\nvn -0.194547 0.858128 0.475151\nvn -0.442341 0.604425 0.662575\nvn -0.395208 0.702238 0.592176\nvn -0.442516 0.686731 0.576697\nvn -0.492837 0.587019 0.642277\nvn -0.525513 0.604425 0.598754\nvn -0.4926 0.717419 0.4926\nvn -0.469713 0.702238 0.535007\nvn -0.55393 0.621548 0.55393\nvn -0.405808 0.788584 0.462013\nvn -0.384735 0.774972 0.501395\nvn -0.346839 0.869772 0.350999\nvn -0.333485 0.863037 0.379413\nvn -0.422543 0.80182 0.422543\nvn -0.341242 0.788584 0.511555\nvn -0.276121 0.863025 0.423018\nvn -0.310907 0.858127 0.408601\nvn -0.601282 0.594007 0.53443\nvn -0.565406 0.702097 0.432868\nvn -0.546626 0.686724 0.479177\nvn -0.634334 0.596972 0.491167\nvn -0.66268 0.604317 0.44233\nvn -0.618562 0.700945 0.355046\nvn -0.592998 0.701715 0.394904\nvn -0.680868 0.614391 0.398676\nvn -0.514312 0.78738 0.339877\nvn -0.489216 0.788251 0.373267\nvn -0.450731 0.858178 0.245706\nvn -0.42679 0.861043 0.276505\nvn -0.538468 0.785644 0.304657\nvn -0.475394 0.774944 0.416488\nvn -0.403616 0.862482 0.305318\nvn -0.385096 0.858084 0.339696\nvn -0.711181 0.603818 0.360035\nvn -0.662954 0.697842 0.271125\nvn -0.64195 0.699657 0.313656\nvn -0.740526 0.596109 0.310282\nvn -0.755767 0.60281 0.255805\nvn -0.686193 0.705559 0.17699\nvn -0.681625 0.69549 0.227333\nvn -0.75969 0.617998 0.20236\nvn -0.603505 0.773882 0.192063\nvn -0.583253 0.77885 0.23067\nvn -0.535741 0.837977 0.10381\nvn -0.523113 0.839191 0.148696\nvn -0.611068 0.778295 0.144409\nvn -0.561584 0.782788 0.268077\nvn -0.499394 0.847099 0.18174\nvn -0.475245 0.853483 0.213799\nvn 0.82459 0.565274 -0.0227478\nvn 0.821246 0.563697 -0.0883209\nvn 0.750559 0.657264 -0.0683053\nvn 0.670982 0.740674 -0.0344151\nvn 0.688346 0.709352 -0.151657\nvn 0.59332 0.796224 -0.11832\nvn 0.585089 0.810806 0.0162782\nvn 0.494673 0.86507 0.0833807\nvn 0.501451 0.862935 -0.0623655\nvn 0.413507 0.91046 0.00862903\nvn 0.460431 0.866944 -0.190816\nvn 0.377425 0.917688 -0.124095\nvn 0.303834 0.951175 -0.0543289\nvn 0.235623 0.957748 -0.164928\nvn 0.180726 0.977756 -0.106444\nvn 0.781302 0.601211 -0.167668\nvn 0.71275 0.650126 -0.263294\nvn 0.572652 0.782486 -0.24451\nvn 0.385086 0.863803 -0.324889\nvn 0.299895 0.924478 -0.235378\nvn 0.408058 0.899794 0.154465\nvn 0.335337 0.917202 0.215149\nvn 0.331455 0.940096 0.079734\nvn 0.262017 0.955001 0.138995\nvn 0.276109 0.923876 0.264986\nvn 0.151531 0.965467 0.211923\nvn 0.197349 0.963338 0.181748\nvn 0.2183 0.931972 0.289435\nvn 0.11705 0.989669 0.0827976\nvn 0.17755 0.982294 0.0597962\nvn 0.0339561 0.999346 -0.0124598\nvn 0.0153114 0.999599 0.0238151\nvn 0.0914234 0.987857 0.125622\nvn 0.236507 0.971596 0.0080948\nvn 0.13115 0.989505 -0.0606606\nvn 0.0855181 0.996078 -0.0227064\nvn 0.192852 0.924348 0.329225\nvn 0.129231 0.96219 0.239771\nvn 0.106377 0.962151 0.250899\nvn 0.167143 0.923252 0.345933\nvn 0.157182 0.917729 0.364785\nvn 0.0878682 0.963211 0.253974\nvn 0.10156 0.95664 0.272994\nvn 0.146488 0.918717 0.366743\nvn 0.0438335 0.988147 0.147117\nvn 0.0427463 0.985233 0.165798\nvn -0.0197798 0.999292 0.0320179\nvn -0.0247231 0.998981 0.0377478\nvn 0.0324522 0.989479 0.140991\nvn 0.0628073 0.987976 0.141276\nvn -0.0227266 0.999141 0.0346405\nvn -0.00830996 0.9994 0.033634\nvn 0.136139 0.922313 0.361671\nvn 0.0815123 0.96447 0.251304\nvn 0.0861312 0.964025 0.251468\nvn 0.126294 0.922335 0.365169\nvn 0.112268 0.9223 0.369809\nvn 0.0621826 0.964801 0.255523\nvn 0.0736521 0.964693 0.25287\nvn 0.0937344 0.922273 0.375002\nvn 0.0337619 0.990833 0.130805\nvn 0.0354249 0.990633 0.131877\nvn -0.00458035 0.999988 0.00193805\nvn -0.0079291 0.999962 0.00366368\nvn 0.0295164 0.990921 0.131166\nvn 0.0348646 0.990224 0.135057\nvn -0.0127967 0.999894 0.00699913\nvn -0.0188874 0.999742 0.0126057\nvn 0.0723017 0.922263 0.379741\nvn 0.0335111 0.964903 0.260461\nvn 0.0483792 0.964859 0.258274\nvn 0.0496261 0.92229 0.3833\nvn 0.0256733 0.922339 0.385529\nvn 0.000361692 0.964961 0.262395\nvn 0.0175167 0.964936 0.261901\nvn 0.00042616 0.922389 0.386263\nvn 0.00898983 0.990995 0.133595\nvn 0.0167535 0.990984 0.132929\nvn 7.66941e-05 1 0.000559835\nvn 8.26001e-05 1 0.000547567\nvn 0.000241185 0.991001 0.133851\nvn 0.0235727 0.990962 0.132057\nvn -0.000716968 1 0.000656567\nvn -0.00229022 0.999997 0.00106325\nvn -0.0252918 0.922416 0.385369\nvn -0.0345639 0.964977 0.260049\nvn -0.0172274 0.964972 0.261788\nvn -0.0506827 0.922431 0.382823\nvn -0.0757522 0.922438 0.378642\nvn -0.0684929 0.964978 0.25323\nvn -0.0516513 0.964978 0.257194\nvn -0.100505 0.922441 0.372828\nvn -0.0266479 0.991003 0.131161\nvn -0.0178543 0.991003 0.132641\nvn -0.000821995 1 0.000397447\nvn -0.000718831 1 0.000461197\nvn -0.0352741 0.991002 0.129113\nvn -0.00889145 0.991003 0.133543\nvn -0.000534303 1 0.000520321\nvn -0.000268412 1 0.000558611\nvn -0.124762 0.92244 0.365429\nvn -0.101017 0.964976 0.242108\nvn -0.0849773 0.964977 0.24819\nvn -0.148371 0.922439 0.3565\nvn -0.171335 0.92244 0.346048\nvn -0.131772 0.964977 0.226838\nvn -0.116616 0.964977 0.234991\nvn -0.193652 0.922441 0.334068\nvn -0.0598275 0.991001 0.119737\nvn -0.0518733 0.991001 0.123392\nvn -0.000949004 1 0.000143991\nvn -0.000931951 1 0.00020849\nvn -0.0675518 0.991002 0.115554\nvn -0.0436893 0.991002 0.126518\nvn -0.000905398 1 0.000273292\nvn -0.000868823 1 0.000336816\nvn -0.215128 0.922439 0.320664\nvn -0.160247 0.964976 0.207708\nvn -0.146352 0.964976 0.21772\nvn -0.235595 0.922438 0.305945\nvn -0.255058 0.922439 0.289916\nvn -0.185987 0.964977 0.185008\nvn -0.173459 0.964976 0.196806\nvn -0.273512 0.922441 0.27257\nvn -0.0887758 0.991001 0.100176\nvn -0.0820492 0.991001 0.105757\nvn -0.000949758 1 -0.00010255\nvn -0.00095107 1 -3.72514e-05\nvn -0.0951528 0.991002 0.0941375\nvn -0.0749749 0.991001 0.110883\nvn -0.00095115 1 2.53324e-05\nvn -0.000950358 1 8.55837e-05\nvn -0.291761 0.922368 0.253205\nvn -0.215428 0.964414 0.153287\nvn -0.199245 0.964918 0.170982\nvn -0.311415 0.92176 0.231042\nvn -0.333111 0.920043 0.206297\nvn -0.258983 0.959916 0.107188\nvn -0.235129 0.962952 0.132049\nvn -0.3575 0.916606 0.178961\nvn -0.132056 0.989715 0.0550018\nvn -0.115326 0.990668 0.0726485\nvn -0.0349591 0.998108 -0.0505733\nvn -0.0234132 0.999437 -0.0240445\nvn -0.153838 0.987561 0.0325265\nvn -0.103152 0.990969 0.0856736\nvn -0.0108188 0.999886 -0.0105621\nvn -0.00334873 0.999991 -0.00268588\nvn -0.383911 0.910968 0.150828\nvn -0.319133 0.946074 0.0556552\nvn -0.286339 0.954691 0.0810851\nvn -0.411465 0.903006 0.123598\nvn -0.440674 0.892502 0.0961623\nvn -0.393036 0.919488 -0.00800088\nvn -0.358554 0.932963 0.0319272\nvn -0.461764 0.885365 0.053875\nvn -0.270827 0.961388 -0.0488391\nvn -0.221707 0.974806 -0.0244945\nvn -0.281568 0.937557 -0.204223\nvn -0.191528 0.967805 -0.163313\nvn -0.333669 0.938403 -0.0898051\nvn -0.181873 0.983305 0.00586263\nvn -0.123211 0.98507 -0.12023\nvn -0.0758198 0.994016 -0.0786327\nvn 0.557981 0.725808 -0.402317\nvn 0.352744 0.769905 -0.531807\nvn 0.234759 0.901699 -0.36308\nvn 0.163615 0.950935 -0.26259\nvn 0.120922 0.911748 -0.392548\nvn 0.0582809 0.953934 -0.294302\nvn 0.1099 0.974169 -0.197271\nvn 0.0671611 0.985521 -0.155688\nvn 0.00910704 0.971679 -0.236129\nvn -0.0274438 0.977258 -0.210271\nvn -0.0360475 0.941871 -0.334036\nvn -0.0788565 0.95517 -0.285362\nvn -0.109635 0.955605 -0.273493\nvn -0.172823 0.923445 -0.34261\nvn -0.192471 0.917146 -0.348997\nvn 0.207475 0.821536 -0.531067\nvn 0.0844655 0.818674 -0.568013\nvn 0.0210664 0.911267 -0.411277\nvn -0.138883 0.917253 -0.373308\nvn -0.0867434 0.886408 -0.454705\nvn 0.0307943 0.991096 -0.129536\nvn -0.0119625 0.993286 -0.115063\nvn -0.0558372 0.977814 -0.201898\nvn -0.0935252 0.972451 -0.213524\nvn -0.0454988 0.993609 -0.103303\nvn -0.0613169 0.994736 -0.0820981\nvn -0.132676 0.973466 -0.186444\nvn -0.109107 0.975392 -0.191589\nvn -0.175077 0.94133 -0.288523\nvn -0.162027 0.940686 -0.29809\nvn -0.197411 0.93713 -0.287779\nvn -0.25489 0.887108 -0.384798\nvn -0.233058 0.89383 -0.383082\nvn -0.138057 0.947437 -0.288624\nvn -0.208558 0.903488 -0.37445\nvn -0.215101 0.901656 -0.375165\nvn -0.0808487 0.993701 -0.0776007\nvn -0.0910399 0.992575 -0.080665\nvn -0.15712 0.968717 -0.192095\nvn -0.149936 0.971058 -0.185917\nvn -0.0866594 0.993395 -0.0752135\nvn -0.140853 0.965534 -0.218869\nvn -0.15053 0.969069 -0.195565\nvn -0.0819724 0.992574 -0.0898756\nvn -0.214744 0.925791 -0.311121\nvn -0.219712 0.928852 -0.298264\nvn -0.27101 0.869122 -0.413739\nvn -0.252773 0.865703 -0.432046\nvn -0.199286 0.923854 -0.326772\nvn -0.214121 0.932851 -0.289726\nvn -0.277436 0.874198 -0.398506\nvn -0.272192 0.88053 -0.388044\nvn -0.0734785 0.99117 -0.110377\nvn -0.109156 0.96503 -0.23833\nvn -0.11991 0.96849 -0.218287\nvn -0.0616159 0.991089 -0.118097\nvn -0.0500374 0.991079 -0.123528\nvn -0.0723047 0.965098 -0.25171\nvn -0.0909948 0.965014 -0.245901\nvn -0.0389351 0.991103 -0.127274\nvn -0.130695 0.922365 -0.363539\nvn -0.148281 0.927319 -0.343646\nvn -0.135806 0.86304 -0.486538\nvn -0.168926 0.86286 -0.476379\nvn -0.104634 0.922523 -0.371488\nvn -0.17278 0.926303 -0.334828\nvn -0.227123 0.863764 -0.449807\nvn -0.192043 0.874091 -0.446188\nvn -0.0282872 0.991124 -0.129894\nvn -0.0352086 0.965221 -0.259053\nvn -0.0535019 0.965171 -0.25609\nvn -0.0182385 0.991138 -0.131579\nvn -0.00882346 0.991147 -0.132472\nvn -0.000198037 0.965279 -0.26122\nvn -0.0174404 0.965256 -0.260724\nvn -5.85327e-05 0.991154 -0.132715\nvn -0.02577 0.922843 -0.384313\nvn -0.0516224 0.922767 -0.381884\nvn -0.000504251 0.863657 -0.50408\nvn -0.0338147 0.86355 -0.503128\nvn -0.000342798 0.922896 -0.385049\nvn -0.0779119 0.922664 -0.377651\nvn -0.06746 0.863409 -0.499974\nvn -0.101459 0.863239 -0.494493\nvn 0.00839602 0.991159 -0.132414\nvn 0.0335874 0.965299 -0.258978\nvn 0.0167486 0.965293 -0.260632\nvn 0.0168356 0.991161 -0.13159\nvn 0.0252649 0.991162 -0.130227\nvn 0.0669619 0.965302 -0.252405\nvn 0.0503246 0.965302 -0.256243\nvn 0.0336847 0.991162 -0.128305\nvn 0.0744734 0.922945 -0.377659\nvn 0.0497299 0.92294 -0.381718\nvn 0.135457 0.852224 -0.505338\nvn 0.0976876 0.863757 -0.494349\nvn 0.103383 0.919285 -0.379773\nvn 0.0247937 0.922926 -0.384177\nvn 0.0652446 0.863748 -0.499683\nvn 0.0325178 0.863719 -0.502923\nvn 0.0420037 0.991162 -0.12583\nvn 0.0993079 0.965299 -0.241526\nvn 0.083346 0.9653 -0.247485\nvn 0.0501126 0.991162 -0.122828\nvn 0.0580119 0.991162 -0.119299\nvn 0.129968 0.965301 -0.226502\nvn 0.114849 0.9653 -0.234534\nvn 0.0657005 0.991162 -0.115242\nvn 0.169612 0.92294 -0.345562\nvn 0.144611 0.927923 -0.343578\nvn 0.261592 0.852218 -0.453094\nvn 0.222246 0.863749 -0.452266\nvn 0.198116 0.919282 -0.340104\nvn 0.127777 0.922933 -0.363136\nvn 0.162671 0.863751 -0.476941\nvn 0.18538 0.874847 -0.447524\nvn 0.0731192 0.991162 -0.110686\nvn 0.15843 0.965299 -0.207599\nvn 0.144541 0.9653 -0.217496\nvn 0.0801899 0.991162 -0.105677\nvn 0.0869147 0.991162 -0.100218\nvn 0.184165 0.9653 -0.185144\nvn 0.171639 0.9653 -0.196816\nvn 0.0932923 0.991162 -0.0943076\nvn 0.253272 0.92294 -0.289888\nvn 0.228604 0.927923 -0.294448\nvn 0.369949 0.852217 -0.36995\nvn 0.331729 0.863749 -0.379334\nvn 0.279393 0.919282 -0.277237\nvn 0.217394 0.922932 -0.317705\nvn 0.280549 0.863749 -0.418605\nvn 0.294885 0.874846 -0.384302\nvn 0.0966388 0.991163 -0.0908725\nvn 0.19567 0.96539 -0.172439\nvn 0.19309 0.965302 -0.175809\nvn 0.0942738 0.991176 -0.0931838\nvn 0.0864501 0.991045 -0.101764\nvn 0.195657 0.961732 -0.191806\nvn 0.192389 0.965467 -0.175672\nvn 0.0918968 0.987331 -0.129357\nvn 0.29445 0.923329 -0.246503\nvn 0.293365 0.923092 -0.248672\nvn 0.39231 0.864316 -0.314723\nvn 0.392783 0.864202 -0.314445\nvn 0.289673 0.923369 -0.251951\nvn 0.278105 0.927938 -0.248172\nvn 0.387353 0.863912 -0.321891\nvn 0.361092 0.874848 -0.322883\nvn 0.0490081 0.987725 -0.148314\nvn 0.00507488 0.97994 -0.199229\nvn 0.116486 0.954635 -0.274049\nvn 0.172048 0.960779 -0.217493\nvn -0.0607286 0.96656 -0.249145\nvn -0.154518 0.930225 -0.332876\nvn 0.0271702 0.941576 -0.335703\nvn -0.0591615 0.889948 -0.452209\nvn 0.154541 0.894233 -0.420077\nvn 0.238858 0.913633 -0.32897\nvn 0.0527248 0.835225 -0.547376\nvn 0.273908 0.821022 -0.500897\nvn 0.178302 0.748321 -0.638924\nvn 0.285387 0.916233 -0.281195\nvn 0.339288 0.850863 -0.401144\nvn 0.377847 0.861866 -0.338257\nvn -0.210048 0.837194 -0.504961\nvn -0.0425064 0.791671 -0.609467\nvn -0.177639 0.751487 -0.635383\nvn -0.236002 0.869017 -0.43487\nvn -0.357746 0.797817 -0.485289\nvn -0.346904 0.765667 -0.541675\nvn -0.258289 0.875917 -0.407501\nvn -0.268442 0.868314 -0.417097\nvn -0.360929 0.794792 -0.487888\nvn -0.365854 0.803765 -0.469161\nvn -0.486571 0.69763 -0.525891\nvn -0.494146 0.68942 -0.529642\nvn -0.613201 0.546643 -0.570233\nvn -0.575832 0.549081 -0.605746\nvn -0.464973 0.691361 -0.55301\nvn -0.497342 0.654191 -0.569812\nvn -0.328554 0.677972 -0.657576\nvn -0.499238 0.558761 -0.662229\nvn -0.637406 0.529926 -0.559367\nvn -0.688069 0.455233 -0.565087\nvn -0.26965 0.85508 -0.442863\nvn -0.274275 0.842968 -0.462795\nvn -0.33648 0.766794 -0.546633\nvn -0.346153 0.779947 -0.521402\nvn -0.285817 0.832672 -0.474305\nvn -0.305784 0.824178 -0.476683\nvn -0.352895 0.747944 -0.562179\nvn -0.33781 0.756215 -0.560378\nvn -0.391901 0.663323 -0.637507\nvn -0.404457 0.6702 -0.622291\nvn -0.398471 0.658303 -0.638638\nvn -0.444238 0.555136 -0.70319\nvn -0.450043 0.55271 -0.701408\nvn -0.431686 0.679775 -0.592918\nvn -0.479062 0.549726 -0.684325\nvn -0.524753 0.548314 -0.651143\nvn -0.323249 0.815679 -0.479769\nvn -0.328263 0.806881 -0.491108\nvn -0.372142 0.728755 -0.574827\nvn -0.368547 0.739069 -0.56387\nvn -0.320945 0.799305 -0.508041\nvn -0.363516 0.71907 -0.592279\nvn -0.341779 0.711443 -0.614032\nvn -0.300803 0.793794 -0.528591\nvn -0.409993 0.640673 -0.649187\nvn -0.399207 0.629521 -0.666586\nvn -0.428274 0.531257 -0.730991\nvn -0.403122 0.519601 -0.753331\nvn -0.375887 0.619857 -0.68883\nvn -0.409566 0.651149 -0.638952\nvn -0.442427 0.543166 -0.713603\nvn -0.447377 0.552238 -0.703482\nvn -0.272 0.79046 -0.548807\nvn -0.310552 0.706485 -0.635953\nvn -0.269727 0.710085 -0.650405\nvn -0.233511 0.802049 -0.549719\nvn -0.204003 0.788513 -0.580199\nvn -0.189604 0.702538 -0.685923\nvn -0.227468 0.711672 -0.664667\nvn -0.164493 0.788579 -0.592525\nvn -0.304142 0.608771 -0.732732\nvn -0.256484 0.623346 -0.738685\nvn -0.218997 0.496719 -0.839828\nvn -0.276385 0.507505 -0.816119\nvn -0.211013 0.605579 -0.767299\nvn -0.342783 0.61301 -0.711841\nvn -0.36851 0.510494 -0.776915\nvn -0.327841 0.504066 -0.799023\nvn -0.123174 0.788761 -0.602233\nvn -0.0950177 0.702641 -0.705172\nvn -0.142279 0.702504 -0.697313\nvn -0.0820879 0.788971 -0.608923\nvn -0.0412528 0.789179 -0.612777\nvn -0.000811998 0.703078 -0.711112\nvn -0.0478643 0.702862 -0.709714\nvn -0.000650354 0.78935 -0.613943\nvn -0.0536286 0.605012 -0.794408\nvn -0.106212 0.604875 -0.789206\nvn -0.00109152 0.495534 -0.868588\nvn -0.0584808 0.49536 -0.866717\nvn -0.000967052 0.605233 -0.796048\nvn -0.1587 0.605001 -0.780249\nvn -0.108939 0.506804 -0.85515\nvn -0.162611 0.4956 -0.853193\nvn 0.039671 0.789453 -0.612528\nvn 0.0923004 0.703283 -0.704893\nvn 0.0459821 0.703214 -0.709489\nvn 0.0796028 0.789501 -0.608566\nvn 0.11916 0.789517 -0.60205\nvn 0.187923 0.687833 -0.701121\nvn 0.138157 0.703311 -0.697328\nvn 0.163318 0.775941 -0.609297\nvn 0.154762 0.605529 -0.78063\nvn 0.103395 0.60548 -0.789115\nvn 0.227566 0.476539 -0.849191\nvn 0.16894 0.495888 -0.851795\nvn 0.209368 0.588149 -0.781182\nvn 0.0514904 0.60539 -0.794262\nvn 0.112865 0.495808 -0.861067\nvn 0.0561933 0.495695 -0.866677\nvn 0.197921 0.789512 -0.580946\nvn 0.229097 0.703317 -0.672949\nvn 0.266189 0.718472 -0.642605\nvn 0.22823 0.80271 -0.55097\nvn 0.270868 0.789509 -0.550732\nvn 0.362934 0.687832 -0.628622\nvn 0.313881 0.703315 -0.63783\nvn 0.315405 0.775935 -0.546301\nvn 0.351489 0.605563 -0.713967\nvn 0.299454 0.622678 -0.722911\nvn 0.439568 0.47658 -0.761348\nvn 0.383626 0.495979 -0.778997\nvn 0.404372 0.588163 -0.700391\nvn 0.256343 0.605561 -0.753382\nvn 0.279597 0.49597 -0.822095\nvn 0.328014 0.515131 -0.791863\nvn 0.341515 0.789508 -0.509946\nvn 0.395439 0.703313 -0.590744\nvn 0.423429 0.71847 -0.551824\nvn 0.363048 0.802708 -0.473134\nvn 0.404178 0.789508 -0.461863\nvn 0.513268 0.687831 -0.513268\nvn 0.468268 0.703313 -0.534861\nvn 0.446053 0.775934 -0.446053\nvn 0.5243 0.605559 -0.598671\nvn 0.476344 0.622674 -0.620784\nvn 0.621641 0.476576 -0.621641\nvn 0.572172 0.495973 -0.653169\nvn 0.571868 0.588161 -0.571868\nvn 0.442573 0.60556 -0.661382\nvn 0.482824 0.495974 -0.721727\nvn 0.521778 0.515126 -0.679994\nvn 0.4452 0.802692 -0.396839\nvn 0.551647 0.703167 -0.448599\nvn 0.519788 0.718423 -0.462264\nvn 0.474376 0.789569 -0.389291\nvn 0.484109 0.789704 -0.376837\nvn 0.573385 0.702329 -0.421858\nvn 0.565447 0.702953 -0.431425\nvn 0.487975 0.789577 -0.372086\nvn 0.636996 0.60449 -0.478359\nvn 0.619459 0.605164 -0.500047\nvn 0.713307 0.492151 -0.49898\nvn 0.69842 0.494236 -0.51763\nvn 0.648639 0.603181 -0.464154\nvn 0.58524 0.622592 -0.519494\nvn 0.677579 0.495366 -0.543598\nvn 0.641507 0.515016 -0.568531\nvn 0.478285 0.786309 -0.391104\nvn 0.447592 0.772474 -0.450495\nvn 0.569195 0.698051 -0.434445\nvn 0.551106 0.680339 -0.483137\nvn 0.397014 0.735884 -0.548502\nvn 0.501768 0.531052 -0.682798\nvn 0.523778 0.634256 -0.568661\nvn 0.347203 0.644899 -0.680849\nvn 0.647149 0.577327 -0.497887\nvn 0.639932 0.525849 -0.56033\nvn 0.816743 0.262994 -0.513581\nvn 0.767227 0.38376 -0.513898\nvn 0.657841 0.407273 -0.633541\nvn 0.650705 0.597949 -0.468017\nvn 0.742826 0.448938 -0.496653\nvn 0.721803 0.48609 -0.492663\nvn -0.707339 0.338203 -0.620717\nvn -0.851153 0.178121 -0.493773\nvn -0.818735 0.260112 -0.511874\nvn -0.76761 0.323768 -0.553126\nvn -0.864921 0.119573 -0.487457\nvn -0.829391 0.157898 -0.53589\nvn -0.732184 0.34751 -0.585785\nvn -0.800426 0.148576 -0.580727\nvn -0.744526 0.196537 -0.638008\nvn -0.674362 0.377412 -0.634662\nvn -0.85694 -0.0346217 -0.514252\nvn -0.822594 -0.022778 -0.568173\nvn -0.823129 -0.195703 -0.533065\nvn -0.791019 -0.17926 -0.584941\nvn -0.784096 0.010027 -0.620559\nvn -0.899625 0.0645788 -0.431861\nvn -0.916151 -0.0797897 -0.392811\nvn -0.888681 -0.0466373 -0.456148\nvn -0.874116 -0.221661 -0.432188\nvn -0.847512 -0.22597 -0.480273\nvn -0.614045 0.390764 -0.68575\nvn -0.686011 0.219427 -0.693716\nvn -0.624456 0.24751 -0.740806\nvn -0.555583 0.407232 -0.724907\nvn -0.511761 0.423876 -0.747282\nvn -0.491409 0.436564 -0.753611\nvn -0.537926 0.298399 -0.788412\nvn -0.571673 0.27593 -0.772692\nvn -0.677434 0.0682109 -0.732414\nvn -0.622499 0.103457 -0.775752\nvn -0.652844 -0.0934075 -0.751712\nvn -0.605855 -0.0590545 -0.79338\nvn -0.579029 0.133941 -0.80423\nvn -0.734159 0.0355061 -0.678049\nvn -0.751463 -0.157154 -0.640785\nvn -0.703748 -0.127933 -0.698836\nvn -0.483275 0.439919 -0.756912\nvn -0.517066 0.308767 -0.798314\nvn -0.494928 0.30783 -0.812581\nvn -0.470483 0.433998 -0.768304\nvn -0.451285 0.422795 -0.785867\nvn -0.469377 0.299825 -0.830536\nvn -0.438207 0.289053 -0.85113\nvn -0.423541 0.410245 -0.807658\nvn -0.514901 0.159411 -0.842298\nvn -0.482755 0.158377 -0.861316\nvn -0.497207 -0.00845485 -0.867591\nvn -0.459375 -0.001891 -0.88824\nvn -0.447875 0.153224 -0.880869\nvn -0.546305 0.152464 -0.823593\nvn -0.566943 -0.0167679 -0.823587\nvn -0.534547 -0.0208533 -0.844881\nvn -0.387383 0.399575 -0.830828\nvn -0.400231 0.279188 -0.872851\nvn -0.356247 0.27105 -0.894215\nvn -0.345017 0.391321 -0.85313\nvn -0.296266 0.385248 -0.873963\nvn -0.305995 0.264676 -0.914502\nvn -0.249351 0.260129 -0.932822\nvn -0.241043 0.381148 -0.892538\nvn -0.362549 0.142048 -0.921076\nvn -0.311181 0.137385 -0.940368\nvn -0.321748 0.00238364 -0.946822\nvn -0.259132 -0.00803074 -0.965809\nvn -0.253762 0.133805 -0.957967\nvn -0.408012 0.147438 -0.900993\nvn -0.418774 0.00133008 -0.90809\nvn -0.372989 0.00252921 -0.927832\nvn -0.182063 0.378769 -0.907407\nvn -0.188823 0.25739 -0.94768\nvn -0.126686 0.276613 -0.952594\nvn -0.121484 0.397577 -0.909491\nvn -0.0621955 0.377483 -0.923925\nvn -0.00117307 0.255738 -0.966745\nvn -0.0647446 0.255688 -0.964589\nvn -0.001151 0.377594 -0.925971\nvn -0.0596412 0.142704 -0.987967\nvn -0.125368 0.139452 -0.982261\nvn 0.00998752 2.91447e-05 -0.99995\nvn -0.0619932 0.00957266 -0.998031\nvn -0.00114578 0.129985 -0.991515\nvn -0.19253 0.131558 -0.972432\nvn -0.193507 0.000956967 -0.981099\nvn -0.130785 0.000440142 -0.991411\nvn 0.0599331 0.377744 -0.923968\nvn 0.125698 0.255973 -0.958477\nvn 0.062595 0.255855 -0.964687\nvn 0.120368 0.377873 -0.918\nvn 0.180168 0.377982 -0.908113\nvn 0.244698 0.243744 -0.938463\nvn 0.188149 0.256081 -0.948168\nvn 0.24165 0.357993 -0.901913\nvn 0.19302 0.130178 -0.972521\nvn 0.128956 0.130106 -0.983078\nvn 0.265049 0.0132424 -0.964144\nvn 0.205445 -1.33322e-05 -0.978669\nvn 0.256438 0.130236 -0.957746\nvn 0.0642384 0.130037 -0.989426\nvn 0.140944 -1.73837e-05 -0.990017\nvn 0.0757955 -6.79932e-06 -0.997123\nvn 0.297959 0.378104 -0.876503\nvn 0.307353 0.247344 -0.918888\nvn 0.367732 0.276805 -0.887779\nvn 0.351074 0.39801 -0.847546\nvn 0.409099 0.378124 -0.830458\nvn 0.48594 0.235536 -0.841656\nvn 0.427246 0.256232 -0.867067\nvn 0.466855 0.358056 -0.808605\nvn 0.438318 0.130283 -0.889327\nvn 0.378256 0.151587 -0.913205\nvn 0.50001 0 -0.86602\nvn 0.451921 0 -0.892058\nvn 0.497035 0.108914 -0.860868\nvn 0.319618 0.108899 -0.941268\nvn 0.315294 -0.0132496 -0.948902\nvn 0.382674 -1.29059e-06 -0.923884\nvn 0.514656 0.378118 -0.769517\nvn 0.537289 0.256225 -0.803535\nvn 0.584977 0.276801 -0.762354\nvn 0.558468 0.398005 -0.727808\nvn 0.610096 0.378116 -0.696284\nvn 0.687214 0.23553 -0.687214\nvn 0.637099 0.256224 -0.726949\nvn 0.660227 0.358051 -0.660227\nvn 0.653553 0.130277 -0.745584\nvn 0.601729 0.151584 -0.784184\nvn 0.707107 0 -0.707107\nvn 0.667397 0 -0.744702\nvn 0.702901 0.108911 -0.702901\nvn 0.551032 0.130279 -0.824252\nvn 0.546598 0 -0.837395\nvn 0.608764 0 -0.793352\nvn 0.686992 0.397887 -0.608052\nvn 0.762019 0.254717 -0.595354\nvn 0.725147 0.264825 -0.635633\nvn 0.723765 0.37737 -0.577716\nvn 0.747354 0.375793 -0.547943\nvn 0.805971 0.246426 -0.538224\nvn 0.786871 0.251788 -0.563415\nvn 0.764957 0.372794 -0.52523\nvn 0.777837 0.128784 -0.615129\nvn 0.805507 0.125254 -0.579198\nvn 0.827253 0.118312 -0.549231\nvn 0.837437 -0.0178666 -0.546242\nvn 0.814517 -0.00747618 -0.580091\nvn 0.743307 0.130077 -0.656182\nvn 0.747112 -0.00971215 -0.664627\nvn 0.785583 -0.00220843 -0.618753\nvn 0.779878 0.365207 -0.508344\nvn 0.85687 0.207009 -0.472145\nvn 0.82687 0.235796 -0.510574\nvn 0.813798 0.323105 -0.483049\nvn 0.839062 0.299895 -0.453915\nvn 0.89118 0.210468 -0.401873\nvn 0.921055 0.149602 -0.359552\nvn 0.882568 0.191671 -0.429343\nvn 0.9068 0.0690117 -0.415875\nvn 0.876074 0.0912406 -0.473465\nvn 0.93917 0.0414545 -0.340942\nvn 0.939661 -0.107388 -0.324815\nvn 0.912282 -0.0811244 -0.401448\nvn 0.849137 0.107216 -0.517175\nvn 0.884853 -0.056181 -0.46247\nvn 0.859437 -0.034509 -0.510076\nvn -0.83884 -0.39145 -0.378304\nvn -0.897567 -0.243195 -0.367736\nvn -0.855878 -0.411376 -0.313438\nvn -0.818604 -0.374232 -0.435704\nvn -0.778037 -0.491957 -0.390687\nvn -0.793454 -0.507984 -0.335236\nvn -0.795798 -0.358784 -0.487832\nvn -0.770343 -0.343499 -0.537196\nvn -0.73901 -0.4631 -0.489288\nvn -0.759994 -0.476947 -0.441509\nvn -0.725196 -0.560842 -0.399433\nvn -0.740338 -0.573921 -0.350021\nvn -0.706329 -0.549436 -0.446339\nvn -0.675296 -0.612782 -0.410454\nvn -0.694262 -0.62052 -0.364631\nvn -0.752493 -0.587722 -0.297217\nvn -0.806223 -0.524492 -0.273701\nvn -0.762306 -0.60102 -0.240132\nvn -0.709108 -0.629755 -0.317134\nvn -0.720653 -0.639646 -0.267416\nvn -0.738965 -0.326178 -0.589524\nvn -0.699645 -0.304214 -0.646491\nvn -0.678833 -0.434281 -0.592103\nvn -0.712511 -0.449825 -0.538503\nvn -0.655415 -0.276259 -0.702931\nvn -0.640394 -0.41367 -0.647126\nvn -0.599838 -0.366634 -0.711178\nvn -0.613331 -0.234275 -0.754282\nvn -0.617352 -0.515047 -0.594645\nvn -0.651642 -0.529307 -0.543321\nvn -0.590975 -0.590926 -0.54914\nvn -0.560188 -0.56519 -0.605599\nvn -0.582325 -0.479485 -0.656499\nvn -0.682027 -0.539799 -0.493413\nvn -0.622669 -0.600064 -0.502202\nvn -0.651358 -0.60663 -0.455778\nvn -0.571602 -0.207321 -0.793907\nvn -0.530474 -0.189728 -0.826196\nvn -0.561277 -0.358891 -0.745765\nvn -0.52328 -0.332131 -0.784772\nvn -0.491599 -0.169546 -0.854157\nvn -0.452385 -0.154471 -0.878343\nvn -0.485295 -0.308618 -0.818073\nvn -0.446361 -0.289774 -0.846636\nvn -0.509655 -0.448354 -0.734324\nvn -0.473008 -0.427044 -0.770648\nvn -0.434554 -0.409509 -0.802163\nvn -0.454012 -0.528694 -0.717186\nvn -0.415744 -0.516259 -0.748755\nvn -0.54535 -0.471579 -0.69297\nvn -0.524233 -0.560436 -0.641164\nvn -0.489943 -0.543924 -0.681251\nvn -0.410233 -0.143964 -0.900546\nvn -0.362936 -0.137236 -0.921653\nvn -0.404081 -0.276096 -0.872061\nvn -0.356723 -0.266922 -0.895266\nvn -0.310429 -0.133333 -0.941199\nvn -0.258405 -0.144342 -0.955192\nvn -0.304446 -0.261243 -0.916005\nvn -0.247446 -0.257998 -0.933921\nvn -0.345405 -0.388051 -0.854466\nvn -0.293967 -0.382685 -0.875863\nvn -0.238379 -0.379622 -0.893903\nvn -0.278016 -0.498212 -0.821275\nvn -0.219942 -0.504485 -0.834937\nvn -0.392377 -0.396686 -0.829867\nvn -0.373836 -0.507387 -0.776405\nvn -0.327801 -0.501618 -0.800579\nvn -0.202149 -0.130244 -0.970656\nvn -0.134004 -0.138844 -0.981206\nvn -0.187568 -0.25625 -0.948238\nvn -0.125886 -0.276082 -0.952854\nvn -0.066051 -0.129707 -0.98935\nvn -0.00107117 -0.129887 -0.991528\nvn -0.00102144 -0.255657 -0.966767\nvn -0.0644196 -0.255447 -0.964675\nvn -0.0617397 -0.377337 -0.924016\nvn -0.120436 -0.397262 -0.909768\nvn -0.000941836 -0.377551 -0.925988\nvn -0.000863283 -0.495554 -0.868577\nvn -0.0579571 -0.495356 -0.866755\nvn -0.180328 -0.377995 -0.908076\nvn -0.160717 -0.495389 -0.853674\nvn -0.107843 -0.506782 -0.855302\nvn 0.0642705 -0.130031 -0.989425\nvn 0.128961 -0.130134 -0.983074\nvn 0.12571 -0.255998 -0.958468\nvn 0.0626618 -0.255852 -0.964683\nvn 0.193011 -0.130206 -0.972519\nvn 0.25718 -0.108885 -0.96021\nvn 0.251467 -0.235483 -0.938782\nvn 0.188133 -0.256106 -0.948164\nvn 0.180146 -0.378002 -0.908109\nvn 0.120385 -0.377895 -0.917988\nvn 0.241628 -0.358004 -0.901914\nvn 0.227538 -0.476545 -0.849194\nvn 0.168913 -0.495901 -0.851793\nvn 0.0600259 -0.377749 -0.92396\nvn 0.112879 -0.495828 -0.861053\nvn 0.0562913 -0.495719 -0.866657\nvn 0.31888 -0.130269 -0.9388\nvn 0.378253 -0.151588 -0.913206\nvn 0.310984 -0.256213 -0.915229\nvn 0.367727 -0.276807 -0.887781\nvn 0.438318 -0.130283 -0.889328\nvn 0.497035 -0.108913 -0.860868\nvn 0.48594 -0.235535 -0.841656\nvn 0.427245 -0.256232 -0.867068\nvn 0.409098 -0.378124 -0.830458\nvn 0.351068 -0.398011 -0.847549\nvn 0.466855 -0.358056 -0.808605\nvn 0.439568 -0.476579 -0.761349\nvn 0.383625 -0.495977 -0.778998\nvn 0.297946 -0.378108 -0.876506\nvn 0.279581 -0.495971 -0.822099\nvn 0.328007 -0.515131 -0.791866\nvn 0.551032 -0.130279 -0.824252\nvn 0.601729 -0.151584 -0.784184\nvn 0.537289 -0.256225 -0.803535\nvn 0.584977 -0.2768 -0.762354\nvn 0.653553 -0.130277 -0.745584\nvn 0.702901 -0.108911 -0.702901\nvn 0.687214 -0.23553 -0.687214\nvn 0.637099 -0.256224 -0.726949\nvn 0.610096 -0.378116 -0.696284\nvn 0.558469 -0.398006 -0.727808\nvn 0.660227 -0.358051 -0.660227\nvn 0.621641 -0.476576 -0.621641\nvn 0.572172 -0.495973 -0.653169\nvn 0.514656 -0.378118 -0.769517\nvn 0.482825 -0.495974 -0.721727\nvn 0.521778 -0.515126 -0.679994\nvn 0.741668 -0.151912 -0.653338\nvn 0.780092 -0.132953 -0.611376\nvn 0.761845 -0.258887 -0.593776\nvn 0.721424 -0.277112 -0.634631\nvn 0.809785 -0.139522 -0.569896\nvn 0.833189 -0.152592 -0.531518\nvn 0.815475 -0.278973 -0.507123\nvn 0.791903 -0.265574 -0.549873\nvn 0.761058 -0.385882 -0.521426\nvn 0.730965 -0.380287 -0.566632\nvn 0.784864 -0.397201 -0.475626\nvn 0.740987 -0.507937 -0.439247\nvn 0.716606 -0.500745 -0.48552\nvn 0.689115 -0.398246 -0.60541\nvn 0.686829 -0.497257 -0.530096\nvn 0.644151 -0.515252 -0.565317\nvn 0.85395 -0.173594 -0.490546\nvn 0.875656 -0.200345 -0.439419\nvn 0.85221 -0.3275 -0.408023\nvn 0.834621 -0.300522 -0.461621\nvn 0.897356 -0.229564 -0.376898\nvn 0.917911 -0.257663 -0.301744\nvn 0.882505 -0.381469 -0.275074\nvn 0.868137 -0.355881 -0.345959\nvn 0.82992 -0.461472 -0.31349\nvn 0.817859 -0.438155 -0.372996\nvn 0.840309 -0.481641 -0.248804\nvn 0.795194 -0.562921 -0.225357\nvn 0.785813 -0.54982 -0.283188\nvn 0.803076 -0.415477 -0.42714\nvn 0.77443 -0.534573 -0.338364\nvn 0.759813 -0.519758 -0.390559\nvn -0.686071 -0.685744 -0.243028\nvn -0.729757 -0.649055 -0.214902\nvn -0.69584 -0.691248 -0.194894\nvn -0.673594 -0.680156 -0.289239\nvn -0.619966 -0.740465 -0.259527\nvn -0.632994 -0.742914 -0.217709\nvn -0.657741 -0.675187 -0.333917\nvn -0.637961 -0.671212 -0.377466\nvn -0.584325 -0.736792 -0.34015\nvn -0.60383 -0.738406 -0.300243\nvn -0.53174 -0.805537 -0.261462\nvn -0.547051 -0.806043 -0.225898\nvn -0.513786 -0.805097 -0.296382\nvn -0.427259 -0.870255 -0.245166\nvn -0.442502 -0.870279 -0.216349\nvn -0.559754 -0.806704 -0.189482\nvn -0.643331 -0.745425 -0.174548\nvn -0.570021 -0.807434 -0.152075\nvn -0.455749 -0.870252 -0.186961\nvn -0.466933 -0.870266 -0.156879\nvn -0.614103 -0.668025 -0.420261\nvn -0.586812 -0.664313 -0.462968\nvn -0.536593 -0.733301 -0.417538\nvn -0.561682 -0.735327 -0.37922\nvn -0.557213 -0.658867 -0.505378\nvn -0.531317 -0.638048 -0.557312\nvn -0.488959 -0.712801 -0.502825\nvn -0.509655 -0.730173 -0.455083\nvn -0.448005 -0.801592 -0.395906\nvn -0.47156 -0.803347 -0.363682\nvn -0.433075 -0.786868 -0.439642\nvn -0.363908 -0.856446 -0.366158\nvn -0.372536 -0.868618 -0.32668\nvn -0.493553 -0.804464 -0.330518\nvn -0.392113 -0.869478 -0.300427\nvn -0.410353 -0.870019 -0.27327\nvn -0.494021 -0.64038 -0.588096\nvn -0.460742 -0.630574 -0.624574\nvn -0.451203 -0.71968 -0.527708\nvn -0.419893 -0.714334 -0.559837\nvn -0.425541 -0.621694 -0.657581\nvn -0.387934 -0.614668 -0.686797\nvn -0.386598 -0.709639 -0.589028\nvn -0.351033 -0.706102 -0.614976\nvn -0.367672 -0.793392 -0.485124\nvn -0.337598 -0.791171 -0.509977\nvn -0.299853 -0.795155 -0.527084\nvn -0.278952 -0.863949 -0.419258\nvn -0.242691 -0.874513 -0.419914\nvn -0.395891 -0.796038 -0.457814\nvn -0.328434 -0.866004 -0.377052\nvn -0.304473 -0.864865 -0.399129\nvn -0.347178 -0.609936 -0.712352\nvn -0.298103 -0.61418 -0.730697\nvn -0.307548 -0.710227 -0.633239\nvn -0.265351 -0.711901 -0.65022\nvn -0.248511 -0.605516 -0.756037\nvn -0.200259 -0.615404 -0.762348\nvn -0.185678 -0.702667 -0.686864\nvn -0.230247 -0.702704 -0.673196\nvn -0.199138 -0.788681 -0.581658\nvn -0.236421 -0.788645 -0.567577\nvn -0.160421 -0.788882 -0.593237\nvn -0.131727 -0.863372 -0.487069\nvn -0.163583 -0.863203 -0.47762\nvn -0.26416 -0.796701 -0.543587\nvn -0.194428 -0.863092 -0.466123\nvn -0.224166 -0.863144 -0.452474\nvn -0.156452 -0.605035 -0.780676\nvn -0.105019 -0.605008 -0.789263\nvn -0.0938615 -0.702889 -0.705079\nvn -0.13994 -0.702753 -0.697535\nvn -0.0531224 -0.605139 -0.794345\nvn -0.000775456 -0.605315 -0.795986\nvn -0.000707385 -0.703184 -0.711008\nvn -0.0474529 -0.703046 -0.70956\nvn -0.0409929 -0.789355 -0.612567\nvn -0.0810507 -0.789228 -0.608728\nvn -0.00449938 -0.781323 -0.624111\nvn -3.84928e-05 -0.85219 -0.523232\nvn -0.0337419 -0.863678 -0.502913\nvn -0.120857 -0.789072 -0.602295\nvn -0.0666016 -0.863607 -0.499746\nvn -0.0992595 -0.863509 -0.494469\nvn 0.0515636 -0.605434 -0.794223\nvn 0.103394 -0.605501 -0.789099\nvn 0.0884172 -0.709835 -0.698796\nvn 0.0421381 -0.693989 -0.718751\nvn 0.154727 -0.605538 -0.78063\nvn 0.209336 -0.588154 -0.781187\nvn 0.187888 -0.687835 -0.701128\nvn 0.138113 -0.703317 -0.69733\nvn 0.119106 -0.78952 -0.602056\nvn 0.07784 -0.802719 -0.591255\nvn 0.16328 -0.775941 -0.609307\nvn 0.135417 -0.852223 -0.50535\nvn 0.0976228 -0.863757 -0.494362\nvn 0.0380439 -0.783715 -0.619954\nvn 0.0336596 -0.863751 -0.502794\nvn 0.0632307 -0.874853 -0.480244\nvn 0.256325 -0.605561 -0.753388\nvn 0.299447 -0.622677 -0.722914\nvn 0.229079 -0.703317 -0.672955\nvn 0.266182 -0.718471 -0.642609\nvn 0.351489 -0.605562 -0.713968\nvn 0.404373 -0.588162 -0.700391\nvn 0.362936 -0.687832 -0.628622\nvn 0.313881 -0.703314 -0.637831\nvn 0.270868 -0.789508 -0.550733\nvn 0.228224 -0.802709 -0.550974\nvn 0.315407 -0.775934 -0.546301\nvn 0.261594 -0.852218 -0.453094\nvn 0.222247 -0.863749 -0.452266\nvn 0.197901 -0.789511 -0.580953\nvn 0.162651 -0.86375 -0.476949\nvn 0.185374 -0.874846 -0.447529\nvn 0.442574 -0.60556 -0.661382\nvn 0.476345 -0.622674 -0.620784\nvn 0.39544 -0.703313 -0.590744\nvn 0.42343 -0.718469 -0.551824\nvn 0.5243 -0.605559 -0.598672\nvn 0.571868 -0.588161 -0.571868\nvn 0.513268 -0.687831 -0.513268\nvn 0.468268 -0.703313 -0.534861\nvn 0.404179 -0.789508 -0.461863\nvn 0.363049 -0.802708 -0.473134\nvn 0.446053 -0.775934 -0.446053\nvn 0.36995 -0.852217 -0.36995\nvn 0.331729 -0.863748 -0.379334\nvn 0.341516 -0.789508 -0.509945\nvn 0.280551 -0.863749 -0.418604\nvn 0.294885 -0.874845 -0.384302\nvn 0.588241 -0.622728 -0.515929\nvn 0.63026 -0.606138 -0.485149\nvn 0.563414 -0.703498 -0.433192\nvn 0.52298 -0.718485 -0.458553\nvn 0.658886 -0.607766 -0.443271\nvn 0.683368 -0.611169 -0.39935\nvn 0.613232 -0.705255 -0.355757\nvn 0.589848 -0.704059 -0.39545\nvn 0.509792 -0.789627 -0.341469\nvn 0.479116 -0.795229 -0.371564\nvn 0.537728 -0.781804 -0.315644\nvn 0.453094 -0.852218 -0.261594\nvn 0.418604 -0.863749 -0.280551\nvn 0.451253 -0.79747 -0.400515\nvn 0.379334 -0.863748 -0.331729\nvn 0.384302 -0.874845 -0.294885\nvn 0.703294 -0.616841 -0.353389\nvn 0.71927 -0.624049 -0.30531\nvn 0.649801 -0.709925 -0.271598\nvn 0.633178 -0.707286 -0.314374\nvn 0.732017 -0.631556 -0.255517\nvn 0.742385 -0.63808 -0.204251\nvn 0.674622 -0.715206 -0.182665\nvn 0.663474 -0.712725 -0.227651\nvn 0.578709 -0.7913 -0.197332\nvn 0.557665 -0.796245 -0.234528\nvn 0.598142 -0.784222 -0.164993\nvn 0.505361 -0.852217 -0.135411\nvn 0.476953 -0.863748 -0.162649\nvn 0.546622 -0.790201 -0.277104\nvn 0.452267 -0.863748 -0.222247\nvn 0.447529 -0.874845 -0.185373\nvn -0.362414 -0.924576 -0.117535\nvn -0.469127 -0.874644 -0.122135\nvn -0.357794 -0.929185 -0.0927284\nvn -0.353783 -0.924674 -0.140768\nvn -0.248251 -0.96504 -0.0840828\nvn -0.241944 -0.965132 -0.099912\nvn -0.343586 -0.924788 -0.163449\nvn -0.33189 -0.924875 -0.18562\nvn -0.234603 -0.965224 -0.115345\nvn -0.226284 -0.965293 -0.130405\nvn -0.125167 -0.990773 -0.0519736\nvn -0.121235 -0.990817 -0.0598681\nvn -0.116796 -0.990857 -0.0675379\nvn -0.00139111 -0.999998 -0.00117056\nvn -0.00111735 -0.999999 -0.00112796\nvn -0.253469 -0.964961 -0.0678513\nvn -0.131398 -0.990694 -0.0354875\nvn -0.128567 -0.990731 -0.0438467\nvn -0.00192616 -0.999997 -0.00118268\nvn -0.00166496 -0.999998 -0.00119049\nvn -0.3189 -0.924862 -0.207203\nvn -0.304867 -0.924717 -0.227935\nvn -0.217137 -0.96532 -0.144942\nvn -0.20723 -0.965311 -0.158841\nvn -0.289753 -0.924448 -0.247868\nvn -0.277596 -0.92045 -0.275158\nvn -0.196513 -0.965276 -0.17212\nvn -0.184925 -0.965227 -0.184769\nvn -0.106638 -0.99092 -0.0818908\nvn -0.100925 -0.990948 -0.0885271\nvn -0.0947673 -0.990975 -0.0948064\nvn -0.00040165 -1 -0.000822784\nvn -0.000194888 -1 -0.000677097\nvn -0.111923 -0.99089 -0.0748967\nvn -0.00086338 -0.999999 -0.00104897\nvn -0.000624169 -0.999999 -0.000946796\nvn -0.252679 -0.923478 -0.288688\nvn -0.233849 -0.923112 -0.305253\nvn -0.172519 -0.965177 -0.196649\nvn -0.159368 -0.965137 -0.207635\nvn -0.213851 -0.922829 -0.320398\nvn -0.189014 -0.927677 -0.322008\nvn -0.145463 -0.965116 -0.217695\nvn -0.130803 -0.96512 -0.226793\nvn -0.0812885 -0.991029 -0.106081\nvn -0.0740119 -0.991056 -0.111038\nvn -0.066379 -0.991083 -0.115537\nvn 0.000362268 -1 -0.000199637\nvn 0.000536322 -1 -6.54344e-05\nvn -0.0882089 -0.991002 -0.100671\nvn -4.80555e-06 -1 -0.000512173\nvn 0.000181895 -1 -0.000351048\nvn -0.174758 -0.922624 -0.343839\nvn -0.151942 -0.922625 -0.354509\nvn -0.115531 -0.965145 -0.234834\nvn -0.099809 -0.965185 -0.241777\nvn -0.128382 -0.922688 -0.363544\nvn -0.104128 -0.922773 -0.371008\nvn -0.0836631 -0.965228 -0.247659\nvn -0.0671052 -0.965265 -0.25251\nvn -0.0504111 -0.991128 -0.122983\nvn -0.0421564 -0.991145 -0.125918\nvn -0.0337219 -0.991156 -0.128344\nvn 0.000824853 -1 0.000287202\nvn 0.000849277 -1 0.000378299\nvn -0.0584856 -0.991107 -0.119528\nvn 0.000672393 -1 6.21185e-05\nvn 0.000767232 -1 0.000181107\nvn -0.0793803 -0.922839 -0.376917\nvn -0.0544844 -0.922882 -0.381209\nvn -0.0503136 -0.965286 -0.256304\nvn -0.0334176 -0.965297 -0.259009\nvn -0.0294309 -0.922909 -0.383891\nvn -0.00151467 -0.919276 -0.393611\nvn -0.0164107 -0.965301 -0.260623\nvn 0.000713457 -0.965302 -0.261133\nvn -0.0166041 -0.991165 -0.131595\nvn -0.00796485 -0.991165 -0.132399\nvn 0.000733505 -0.991164 -0.132642\nvn 0.000787552 -1 0.000563166\nvn 0.000751533 -1 0.000606831\nvn -0.0251878 -0.991162 -0.130242\nvn 0.000838781 -1 0.000454487\nvn 0.00081651 -1 0.000513927\nvn 0.0259013 -0.922943 -0.384065\nvn 0.0465638 -0.927926 -0.369844\nvn 0.0178136 -0.965301 -0.26053\nvn 0.0347712 -0.965301 -0.258816\nvn 0.0709322 -0.922935 -0.378364\nvn 0.1004 -0.919284 -0.380575\nvn 0.0515861 -0.965301 -0.255995\nvn 0.0682563 -0.965301 -0.252062\nvn 0.0180241 -0.991162 -0.131425\nvn 0.0265617 -0.991162 -0.129969\nvn 0.0350264 -0.991162 -0.127947\nvn 0.000609226 -1 0.000732113\nvn 0.000563639 -1 0.000771373\nvn 0.00941448 -0.991163 -0.132317\nvn 0.000701976 -1 0.000649329\nvn 0.000654679 -1 0.000690893\nvn 0.124415 -0.92294 -0.364283\nvn 0.140697 -0.927923 -0.3452\nvn 0.0846274 -0.9653 -0.247051\nvn 0.100569 -0.9653 -0.241003\nvn 0.166443 -0.922932 -0.347122\nvn 0.195478 -0.919282 -0.341627\nvn 0.116084 -0.9653 -0.233924\nvn 0.131169 -0.965301 -0.225808\nvn 0.0514224 -0.991162 -0.122285\nvn 0.0592943 -0.991162 -0.118667\nvn 0.066948 -0.991162 -0.114521\nvn 0.000398112 -1 0.000864478\nvn 0.000344795 -1 0.000891\nvn 0.0433334 -0.991162 -0.125379\nvn 0.000507383 -1 0.000805042\nvn 0.000452239 -1 0.00083594\nvn 0.214458 -0.92294 -0.31967\nvn 0.225247 -0.927923 -0.297023\nvn 0.145685 -0.9653 -0.21673\nvn 0.159519 -0.965299 -0.206762\nvn 0.250613 -0.922932 -0.292215\nvn 0.277237 -0.919282 -0.279393\nvn 0.172672 -0.9653 -0.195909\nvn 0.185143 -0.965301 -0.184165\nvn 0.0813199 -0.991162 -0.104809\nvn 0.0879871 -0.991162 -0.0992766\nvn 0.0943072 -0.991162 -0.0932919\nvn 0.000160813 -1 0.00093805\nvn 0.000102414 -1 0.00094989\nvn 0.0743074 -0.991162 -0.109891\nvn 0.000281753 -1 0.000908914\nvn 0.000220504 -1 0.000924466\nvn 0.289887 -0.92294 -0.253272\nvn 0.294447 -0.927923 -0.228604\nvn 0.196815 -0.9653 -0.171639\nvn 0.207597 -0.965299 -0.158431\nvn 0.317704 -0.922932 -0.217395\nvn 0.340103 -0.919282 -0.198119\nvn 0.217494 -0.9653 -0.144542\nvn 0.2265 -0.965301 -0.129971\nvn 0.105676 -0.991162 -0.0801906\nvn 0.110684 -0.991162 -0.0731212\nvn 0.115239 -0.991162 -0.0657046\nvn -8.74339e-05 -1 0.000947708\nvn -0.000146878 -1 0.000944008\nvn 0.100217 -0.991162 -0.0869145\nvn 3.6855e-05 -1 0.000950903\nvn -2.63511e-05 -1 0.000950094\nvn 0.345562 -0.92294 -0.169614\nvn 0.343581 -0.927923 -0.144606\nvn 0.234532 -0.9653 -0.114851\nvn 0.241528 -0.965299 -0.0993019\nvn 0.363144 -0.922932 -0.12776\nvn 0.379791 -0.919282 -0.103343\nvn 0.247493 -0.9653 -0.0833258\nvn 0.252421 -0.965301 -0.0669198\nvn 0.12283 -0.991162 -0.0501073\nvn 0.125837 -0.991162 -0.0419826\nvn 0.128318 -0.991162 -0.0336396\nvn -0.000329771 -1 0.000892783\nvn -0.000386203 -1 0.000873811\nvn 0.119298 -0.991162 -0.0580147\nvn -0.000210497 -1 0.000928044\nvn -0.000271285 -1 0.000910869\nvn -0.00215864 -0.999997 -0.00114826\nvn 0.127929 -0.991214 0.0335932\nvn 0.125532 -0.991202 0.0419551\nvn 0.122619 -0.991187 0.0501217\nvn 0.247978 -0.965161 0.0834902\nvn 0.242035 -0.96515 0.0995253\nvn 0.119187 -0.991171 0.0580913\nvn 0.115227 -0.991154 0.0658577\nvn 0.235063 -0.965136 0.115145\nvn 0.227055 -0.96512 0.130346\nvn 0.356765 -0.922548 0.147052\nvn 0.346413 -0.922544 0.170033\nvn 0.334533 -0.922537 0.192388\nvn 0.450524 -0.863099 0.228229\nvn 0.425753 -0.869845 0.249208\nvn 0.252886 -0.96517 0.067041\nvn 0.372905 -0.922549 0.0992179\nvn 0.365598 -0.92255 0.123447\nvn 0.47643 -0.863087 0.167615\nvn 0.464471 -0.863094 0.198331\nvn 0.11076 -0.991136 0.073361\nvn 0.105827 -0.991119 0.0805231\nvn 0.218066 -0.965102 0.145001\nvn 0.208182 -0.965085 0.158971\nvn 0.10043 -0.991103 0.0873469\nvn 0.0945645 -0.991086 0.0938362\nvn 0.197402 -0.965069 0.172262\nvn 0.185718 -0.965054 0.184876\nvn 0.306592 -0.922513 0.234459\nvn 0.290652 -0.922503 0.253986\nvn 0.273394 -0.922494 0.272509\nvn 0.376124 -0.863079 0.337083\nvn 0.346777 -0.869816 0.350949\nvn 0.321219 -0.922525 0.213929\nvn 0.420219 -0.863106 0.280112\nvn 0.40598 -0.85819 0.31415\nvn 0.0882822 -0.99107 0.0999365\nvn 0.0816526 -0.991053 0.105577\nvn 0.173233 -0.965037 0.196708\nvn 0.160066 -0.965019 0.207645\nvn 0.0746766 -0.991038 0.110757\nvn 0.0673533 -0.991025 0.115466\nvn 0.14622 -0.965004 0.217686\nvn 0.131692 -0.964992 0.226822\nvn 0.235522 -0.922463 0.305927\nvn 0.215079 -0.92245 0.320665\nvn 0.193627 -0.922442 0.334081\nvn 0.276114 -0.863026 0.423021\nvn 0.244177 -0.869765 0.428819\nvn 0.254962 -0.922478 0.289876\nvn 0.333446 -0.863072 0.37937\nvn 0.310891 -0.858144 0.408576\nvn 0.0597169 -0.991015 0.119676\nvn 0.0518334 -0.991009 0.123351\nvn 0.116582 -0.964982 0.234984\nvn 0.101024 -0.964977 0.242101\nvn 0.0437076 -0.991004 0.126492\nvn 0.0353396 -0.991002 0.129098\nvn 0.0850231 -0.964976 0.248179\nvn 0.068577 -0.964976 0.253216\nvn 0.148391 -0.922432 0.356509\nvn 0.124813 -0.922434 0.365426\nvn 0.100592 -0.922438 0.372812\nvn 0.157227 -0.863019 0.480081\nvn 0.124875 -0.869769 0.477398\nvn 0.171331 -0.922435 0.346063\nvn 0.223931 -0.863028 0.452811\nvn 0.194564 -0.858117 0.475163\nvn 0.0267993 -0.991001 0.131147\nvn 0.0181826 -0.991 0.13262\nvn 0.0518244 -0.964975 0.257171\nvn 0.0349259 -0.964975 0.260006\nvn 0.00948953 -0.991001 0.133521\nvn 0.00072051 -0.991001 0.133852\nvn 0.0178824 -0.964976 0.261729\nvn 0.000692456 -0.964977 0.262334\nvn 0.0510591 -0.922438 0.382755\nvn 0.0259707 -0.922439 0.385269\nvn 0.000666188 -0.922441 0.386138\nvn 0.0276138 -0.863025 0.504406\nvn -0.00294167 -0.869772 0.493446\nvn 0.0759329 -0.922438 0.378606\nvn 0.0991006 -0.863036 0.495327\nvn 0.0649511 -0.858126 0.509314\nvn -0.00806077 -0.991001 0.13361\nvn -0.0167646 -0.991001 0.132799\nvn -0.0165089 -0.964976 0.261817\nvn -0.0335617 -0.964976 0.260183\nvn -0.0253941 -0.991001 0.131421\nvn -0.033949 -0.991002 0.129473\nvn -0.0504688 -0.964976 0.257436\nvn -0.0672286 -0.964977 0.253573\nvn -0.0497471 -0.922438 0.382927\nvn -0.0746298 -0.922439 0.378862\nvn -0.0992963 -0.922441 0.373153\nvn -0.103877 -0.863025 0.494366\nvn -0.130554 -0.869772 0.47587\nvn -0.0246488 -0.922439 0.385355\nvn -0.0324761 -0.863037 0.504095\nvn -0.0690822 -0.858127 0.50877\nvn -0.042367 -0.991001 0.126969\nvn -0.0505648 -0.991001 0.123934\nvn -0.0837093 -0.964976 0.248623\nvn -0.0997586 -0.964976 0.242631\nvn -0.0585434 -0.991001 0.12037\nvn -0.0663023 -0.991002 0.116275\nvn -0.115378 -0.964976 0.235602\nvn -0.130567 -0.964977 0.227533\nvn -0.147161 -0.922438 0.357003\nvn -0.170143 -0.922439 0.346637\nvn -0.192492 -0.922441 0.334738\nvn -0.228289 -0.863025 0.450636\nvn -0.24927 -0.869772 0.425865\nvn -0.123546 -0.922439 0.365845\nvn -0.161839 -0.863037 0.478513\nvn -0.198407 -0.858127 0.473554\nvn -0.0737855 -0.991001 0.111678\nvn -0.0809183 -0.991001 0.106624\nvn -0.145205 -0.964976 0.218486\nvn -0.159157 -0.964976 0.208544\nvn -0.0877026 -0.991001 0.101116\nvn -0.0941372 -0.991002 0.0951524\nvn -0.172425 -0.964976 0.197712\nvn -0.185008 -0.964977 0.185987\nvn -0.234546 -0.922438 0.306751\nvn -0.254062 -0.922439 0.290789\nvn -0.27257 -0.922441 0.273512\nvn -0.337143 -0.863025 0.376195\nvn -0.350999 -0.869772 0.346839\nvn -0.214024 -0.922439 0.321403\nvn -0.280173 -0.863037 0.420321\nvn -0.314212 -0.858127 0.406066\nvn -0.100176 -0.991001 0.0887752\nvn -0.105757 -0.991001 0.0820477\nvn -0.196806 -0.964976 0.173459\nvn -0.207709 -0.964976 0.160245\nvn -0.110885 -0.991001 0.0749716\nvn -0.115557 -0.991002 0.0675456\nvn -0.217722 -0.964976 0.146348\nvn -0.226841 -0.964977 0.131766\nvn -0.305947 -0.922438 0.235594\nvn -0.320667 -0.922439 0.215125\nvn -0.334072 -0.922441 0.193646\nvn -0.423022 -0.863025 0.276118\nvn -0.428807 -0.869772 0.244175\nvn -0.289916 -0.922439 0.255058\nvn -0.379413 -0.863037 0.333485\nvn -0.408603 -0.858126 0.310906\nvn -0.119739 -0.991001 0.0598228\nvn -0.123389 -0.991001 0.0518798\nvn -0.234994 -0.964976 0.116611\nvn -0.242106 -0.964976 0.101026\nvn -0.126511 -0.991001 0.0437179\nvn -0.129101 -0.991002 0.0353358\nvn -0.248181 -0.964976 0.0850111\nvn -0.253215 -0.964977 0.0685649\nvn -0.356498 -0.922438 0.148381\nvn -0.365419 -0.922439 0.1248\nvn -0.372808 -0.922441 0.100583\nvn -0.480072 -0.863025 0.157223\nvn -0.477393 -0.869772 0.124872\nvn -0.346052 -0.922439 0.171331\nvn -0.452797 -0.863037 0.223923\nvn -0.475149 -0.858126 0.194558\nvn 0.582053 -0.788599 0.198309\nvn 0.486398 -0.863076 0.136077\nvn 0.593837 -0.788561 0.159778\nvn 0.567844 -0.788629 0.235835\nvn 0.657522 -0.702247 0.272972\nvn 0.673998 -0.702159 0.229562\nvn 0.551221 -0.788653 0.272366\nvn 0.524466 -0.794382 0.306418\nvn 0.616191 -0.702374 0.356342\nvn 0.638261 -0.702319 0.315232\nvn 0.714223 -0.604549 0.352712\nvn 0.735801 -0.604374 0.305498\nvn 0.689521 -0.604681 0.398649\nvn 0.752045 -0.495356 0.4348\nvn 0.778974 -0.495087 0.384822\nvn 0.754281 -0.604164 0.256994\nvn 0.687676 -0.702056 0.184984\nvn 0.769645 -0.603926 0.207172\nvn 0.802525 -0.494732 0.333457\nvn 0.822727 -0.494309 0.280676\nvn 0.507419 -0.788654 0.347206\nvn 0.493275 -0.780546 0.383963\nvn 0.56441 -0.702413 0.433656\nvn 0.591501 -0.702402 0.395928\nvn 0.461949 -0.788668 0.405717\nvn 0.427325 -0.794369 0.431707\nvn 0.50303 -0.702398 0.503585\nvn 0.534926 -0.702412 0.469544\nvn 0.598653 -0.604798 0.525198\nvn 0.63161 -0.604797 0.485067\nvn 0.562999 -0.60477 0.563281\nvn 0.61425 -0.495556 0.614102\nvn 0.653085 -0.495607 0.572584\nvn 0.661901 -0.60476 0.442891\nvn 0.688971 -0.495602 0.528865\nvn 0.721955 -0.495523 0.482948\nvn 0.400331 -0.788615 0.466714\nvn 0.377165 -0.780487 0.498585\nvn 0.433055 -0.702327 0.564978\nvn 0.46898 -0.702364 0.535483\nvn 0.341259 -0.788599 0.511521\nvn 0.298795 -0.801819 0.517502\nvn 0.348349 -0.717443 0.603265\nvn 0.395259 -0.702295 0.592074\nvn 0.442457 -0.604584 0.662352\nvn 0.484744 -0.604646 0.632002\nvn 0.392182 -0.611889 0.686866\nvn 0.434388 -0.495128 0.752433\nvn 0.482835 -0.49523 0.722231\nvn 0.524925 -0.604712 0.598979\nvn 0.528953 -0.495343 0.689089\nvn 0.572759 -0.495458 0.653045\nvn 0.272413 -0.788577 0.551304\nvn 0.241853 -0.774964 0.583898\nvn 0.315258 -0.702253 0.63832\nvn 0.278179 -0.686737 0.671571\nvn 0.197205 -0.788576 0.582458\nvn 0.154657 -0.801816 0.577211\nvn 0.180292 -0.717416 0.672911\nvn 0.22846 -0.702234 0.674294\nvn 0.255776 -0.604435 0.754478\nvn 0.302831 -0.594033 0.745264\nvn 0.20274 -0.621549 0.756686\nvn 0.222014 -0.514036 0.828539\nvn 0.279138 -0.494919 0.822883\nvn 0.344503 -0.604452 0.7183\nvn 0.332298 -0.494964 0.802863\nvn 0.384053 -0.495034 0.779387\nvn 0.120429 -0.788581 0.603022\nvn 0.0824896 -0.774972 0.626589\nvn 0.139272 -0.702236 0.698189\nvn 0.0948766 -0.686729 0.720695\nvn 0.039743 -0.788583 0.613643\nvn 1.86655e-09 -0.80182 0.597566\nvn -3.22298e-07 -0.717419 0.696642\nvn 0.0461692 -0.702237 0.710445\nvn 0.0517852 -0.604422 0.79498\nvn 0.105665 -0.587014 0.802651\nvn -1.64026e-06 -0.621547 0.783377\nvn -5.65963e-06 -0.514023 0.857776\nvn 0.0565877 -0.494875 0.86712\nvn 0.155725 -0.604422 0.781296\nvn 0.169766 -0.494879 0.852217\nvn 0.114823 -0.475486 0.872198\nvn -0.0397439 -0.788583 0.613642\nvn -0.0824922 -0.774972 0.626589\nvn -0.0461707 -0.702237 0.710444\nvn -0.0948809 -0.686731 0.720693\nvn -0.120433 -0.788583 0.60302\nvn -0.154661 -0.80182 0.577205\nvn -0.180304 -0.717419 0.672904\nvn -0.13928 -0.702237 0.698186\nvn -0.15573 -0.604425 0.781293\nvn -0.105671 -0.587019 0.802647\nvn -0.202753 -0.621548 0.756683\nvn -0.222008 -0.514027 0.828546\nvn -0.169757 -0.494882 0.852217\nvn -0.051791 -0.604424 0.794978\nvn -0.0566022 -0.49488 0.867116\nvn -0.114829 -0.475495 0.872192\nvn -0.197212 -0.788583 0.582447\nvn -0.241854 -0.774972 0.583888\nvn -0.228473 -0.702237 0.674287\nvn -0.278177 -0.686731 0.671579\nvn -0.272403 -0.788583 0.551302\nvn -0.298783 -0.80182 0.517507\nvn -0.348321 -0.717419 0.603309\nvn -0.315238 -0.702237 0.638348\nvn -0.352638 -0.604425 0.714365\nvn -0.30981 -0.587019 0.747948\nvn -0.391688 -0.621548 0.678423\nvn -0.428887 -0.514027 0.742854\nvn -0.384543 -0.494882 0.779242\nvn -0.25578 -0.604425 0.754485\nvn -0.279095 -0.494882 0.82292\nvn -0.336654 -0.475495 0.812754\nvn -0.34124 -0.788583 0.511558\nvn -0.384734 -0.774972 0.501396\nvn -0.395206 -0.702238 0.592178\nvn -0.442516 -0.686731 0.576698\nvn -0.405808 -0.788583 0.462014\nvn -0.422543 -0.80182 0.422543\nvn -0.4926 -0.717419 0.4926\nvn -0.469712 -0.702238 0.535007\nvn -0.525513 -0.604425 0.598754\nvn -0.492837 -0.587019 0.642278\nvn -0.55393 -0.621548 0.55393\nvn -0.606538 -0.514027 0.606538\nvn -0.573123 -0.494882 0.653163\nvn -0.442339 -0.604425 0.662576\nvn -0.482573 -0.494882 0.722645\nvn -0.535539 -0.475495 0.697928\nvn -0.462014 -0.788583 0.405808\nvn -0.501396 -0.774972 0.384734\nvn -0.535007 -0.702238 0.469713\nvn -0.576698 -0.686731 0.442515\nvn -0.511558 -0.788583 0.34124\nvn -0.517507 -0.80182 0.298783\nvn -0.603309 -0.717419 0.348321\nvn -0.592177 -0.702238 0.395207\nvn -0.662576 -0.604425 0.442339\nvn -0.642278 -0.587019 0.492837\nvn -0.678423 -0.621548 0.391688\nvn -0.742854 -0.514027 0.428887\nvn -0.722645 -0.494882 0.482572\nvn -0.598754 -0.604425 0.525513\nvn -0.653163 -0.494882 0.573123\nvn -0.697928 -0.475495 0.535539\nvn -0.551301 -0.788583 0.272403\nvn -0.583888 -0.774972 0.241854\nvn -0.638347 -0.702238 0.315238\nvn -0.671578 -0.686732 0.278177\nvn -0.582447 -0.788583 0.197211\nvn -0.577204 -0.80182 0.154661\nvn -0.672904 -0.717419 0.180304\nvn -0.674286 -0.702238 0.228473\nvn -0.754485 -0.604425 0.25578\nvn -0.747948 -0.587019 0.30981\nvn -0.756683 -0.621548 0.202753\nvn -0.828546 -0.514027 0.222008\nvn -0.82292 -0.494882 0.279095\nvn -0.714365 -0.604425 0.352638\nvn -0.779243 -0.494882 0.384542\nvn -0.812754 -0.475495 0.336654\nvn 0.876692 -0.376212 0.299794\nvn 0.839557 -0.493835 0.22643\nvn 0.894613 -0.375586 0.24208\nvn 0.855197 -0.376792 0.355901\nvn 0.896582 -0.254607 0.362376\nvn 0.91827 -0.254209 0.303574\nvn 0.830159 -0.37729 0.410473\nvn 0.801547 -0.377673 0.463558\nvn 0.841085 -0.24648 0.48148\nvn 0.871201 -0.255003 0.419502\nvn 0.915248 -0.128492 0.381851\nvn 0.888668 -0.128384 0.440212\nvn 0.862854 -0.11535 0.492115\nvn 0.936218 -0.253857 0.243009\nvn 0.957033 -0.129201 0.259607\nvn 0.938056 -0.128748 0.321676\nvn 0.769575 -0.377918 0.514716\nvn 0.734518 -0.378044 0.56353\nvn 0.767099 -0.255765 0.588339\nvn 0.803587 -0.255632 0.537495\nvn 0.696355 -0.378073 0.610042\nvn 0.655017 -0.37803 0.654252\nvn 0.684179 -0.255905 0.682943\nvn 0.727324 -0.255846 0.636823\nvn 0.75321 -0.12845 0.645117\nvn 0.793431 -0.128335 0.594977\nvn 0.709477 -0.128676 0.692882\nvn 0.830219 -0.128297 0.542473\nvn 0.610821 -0.377935 0.695746\nvn 0.564137 -0.377814 0.73417\nvn 0.589269 -0.255981 0.766313\nvn 0.638021 -0.255951 0.726235\nvn 0.514974 -0.377684 0.769517\nvn 0.463315 -0.377554 0.801743\nvn 0.48401 -0.255937 0.836798\nvn 0.537936 -0.255981 0.803181\nvn 0.560667 -0.129851 0.817797\nvn 0.612849 -0.12945 0.779524\nvn 0.501075 -0.121059 0.856895\nvn 0.662465 -0.129028 0.737897\nvn 0.40963 -0.377424 0.830514\nvn 0.354428 -0.377315 0.855578\nvn 0.370304 -0.255728 0.893016\nvn 0.427957 -0.255843 0.866832\nvn 0.297727 -0.377234 0.876957\nvn 0.234544 -0.38571 0.89231\nvn 0.250254 -0.255538 0.933849\nvn 0.311069 -0.255621 0.915365\nvn 0.319358 -0.130125 0.938658\nvn 0.380102 -0.130247 0.915728\nvn 0.256926 -0.130003 0.957647\nvn 0.439157 -0.130312 0.888909\nvn 0.173828 -0.389081 0.904655\nvn 0.121924 -0.357095 0.926076\nvn 0.183591 -0.264292 0.946807\nvn 0.120263 -0.243071 0.962525\nvn 0.0604198 -0.377138 0.924184\nvn -1.44194e-05 -0.397014 0.917813\nvn -2.45775e-05 -0.27599 0.96116\nvn 0.063168 -0.25545 0.964757\nvn 0.0648914 -0.129836 0.98941\nvn 0.129398 -0.129862 0.983052\nvn -2.67219e-05 -0.15107 0.988523\nvn 0.193411 -0.129915 0.972478\nvn -0.0604487 -0.377146 0.924179\nvn -0.121924 -0.357103 0.926074\nvn -0.0632064 -0.255452 0.964753\nvn -0.126884 -0.234798 0.963727\nvn -0.180816 -0.377148 0.908331\nvn -0.237546 -0.397019 0.886537\nvn -0.248766 -0.275994 0.928409\nvn -0.188659 -0.255453 0.948236\nvn -0.193395 -0.129819 0.972494\nvn -0.129762 -0.108513 0.98559\nvn -0.25585 -0.151067 0.95484\nvn -0.0649106 -0.129821 0.989411\nvn -0.297575 -0.377148 0.877046\nvn -0.357451 -0.357104 0.862963\nvn -0.310736 -0.255454 0.915525\nvn -0.371986 -0.234799 0.898051\nvn -0.409748 -0.377148 0.830582\nvn -0.458905 -0.397019 0.794847\nvn -0.480579 -0.275995 0.832388\nvn -0.427651 -0.255454 0.867097\nvn -0.438502 -0.129821 0.889304\nvn -0.380424 -0.108516 0.918423\nvn -0.494262 -0.151068 0.856086\nvn -0.318767 -0.129821 0.938901\nvn -0.514431 -0.377148 0.770143\nvn -0.568623 -0.357104 0.741043\nvn -0.537103 -0.255455 0.803905\nvn -0.591743 -0.234799 0.771174\nvn -0.610756 -0.377148 0.69623\nvn -0.64899 -0.397019 0.64899\nvn -0.679642 -0.275995 0.679642\nvn -0.6375 -0.255454 0.726867\nvn -0.653729 -0.129821 0.74551\nvn -0.605166 -0.108516 0.788668\nvn -0.698992 -0.151068 0.698992\nvn -0.550909 -0.129821 0.824406\nvn -0.69623 -0.377148 0.610757\nvn -0.741043 -0.357104 0.568623\nvn -0.726867 -0.255455 0.6375\nvn -0.771174 -0.2348 0.591743\nvn -0.770143 -0.377148 0.514431\nvn -0.794847 -0.397019 0.458905\nvn -0.832388 -0.275995 0.480579\nvn -0.803905 -0.255455 0.537103\nvn -0.824406 -0.129822 0.55091\nvn -0.788668 -0.108516 0.605166\nvn -0.856086 -0.151068 0.494262\nvn -0.74551 -0.129821 0.653729\nvn -0.830582 -0.377148 0.409748\nvn -0.862963 -0.357103 0.357451\nvn -0.867097 -0.255454 0.427651\nvn -0.898051 -0.234799 0.371985\nvn -0.877046 -0.377148 0.297574\nvn -0.886537 -0.397019 0.237547\nvn -0.928409 -0.275994 0.248766\nvn -0.915525 -0.255454 0.310735\nvn -0.938901 -0.129822 0.318766\nvn -0.918424 -0.108516 0.380423\nvn -0.95484 -0.151068 0.255848\nvn -0.965926 -1.49416e-08 0.258819\nvn -0.889305 -0.129821 0.438502\nvn 0.602973 0.553992 -0.574035\nvn 0.435559 0.570336 -0.696423\nvn 0.281812 0.636382 -0.718053\nvn 0.461554 0.393672 -0.794978\nvn 0.321725 0.403831 -0.856396\nvn 0.141885 0.635739 -0.758752\nvn 0.0569108 0.393299 -0.917648\nvn 0.190809 0.404772 -0.894288\nvn 0.00910711 0.625257 -0.780366\nvn 0.228104 0.144713 -0.962822\nvn 0.354834 0.160924 -0.920976\nvn 0.130131 -0.127072 -0.98332\nvn 0.252331 -0.104265 -0.962007\nvn 0.0983034 0.127287 -0.986983\nvn 0.641011 0.374612 -0.669903\nvn 0.651404 0.183328 -0.73625\nvn 0.491886 0.174628 -0.852967\nvn 0.373187 -0.0753755 -0.924689\nvn 0.506852 -0.0463013 -0.860789\nvn -0.136552 0.589895 -0.795851\nvn -0.296458 0.519107 -0.801648\nvn -0.0924418 0.365338 -0.926274\nvn -0.259941 0.308982 -0.914856\nvn -0.477877 0.400143 -0.781997\nvn -0.685673 0.210498 -0.69681\nvn -0.451225 0.215128 -0.866092\nvn -0.654848 0.0714526 -0.752376\nvn -0.221586 0.0674022 -0.972809\nvn -0.417169 -0.00461743 -0.908817\nvn -0.618859 -0.116087 -0.776877\nvn -0.364949 -0.228337 -0.902593\nvn -0.561237 -0.314297 -0.765657\nvn -0.0495514 0.106385 -0.99309\nvn -0.176218 -0.17225 -0.969163\nvn -0.0104266 -0.144056 -0.989515\nvn 0.510036 -0.185558 -0.8399\nvn 0.666189 -0.156363 -0.729207\nvn 0.665574 -0.0216372 -0.746018\nvn 0.385928 -0.214612 -0.897219\nvn 0.517736 -0.186679 -0.834925\nvn 0.379917 -0.21812 -0.898936\nvn 0.262374 -0.249073 -0.932267\nvn 0.130484 -0.260465 -0.956625\nvn 0.262486 -0.240828 -0.9344\nvn 0.142603 -0.271987 -0.951676\nvn 0.252545 -0.12396 -0.959612\nvn 0.389534 -0.106911 -0.914786\nvn -0.00165817 0.083427 -0.996513\nvn 0.207212 0.0720745 -0.975637\nvn 0.0749491 -0.120019 -0.989938\nvn 0.527664 -0.0877074 -0.844913\nvn 0.686983 -0.0670713 -0.723571\nvn 0.674075 -0.160002 -0.721126\nvn 0.379592 0.0585267 -0.923301\nvn 0.525656 0.0656592 -0.84816\nvn 0.00532654 -0.285841 -0.958262\nvn -0.179971 -0.30582 -0.934925\nvn -0.0335974 -0.264644 -0.963761\nvn -0.151486 -0.308545 -0.93907\nvn -0.322334 -0.364145 -0.873784\nvn -0.493706 -0.4589 -0.738691\nvn -0.309299 -0.378787 -0.87227\nvn -0.430209 -0.524079 -0.735025\nvn -0.346538 -0.296018 -0.890104\nvn -0.219646 -0.177644 -0.95927\nvn -0.286666 -0.324414 -0.901431\nvn -0.368499 -0.0302462 -0.929136\nvn -0.39103 -0.485466 -0.781932\nvn -0.10325 -0.112966 -0.98822\nvn -0.163786 0.0737966 -0.983732\nvn -0.301955 0.0802376 -0.949939\nvn 0.68804 0.0772435 -0.72155\nvn 0.669724 0.219197 -0.709523\nvn 0.505841 0.21226 -0.836104\nvn 0.352345 0.215126 -0.910809\nvn 0.47559 0.339605 -0.81147\nvn 0.315983 0.344497 -0.884011\nvn 0.167639 0.247183 -0.954357\nvn -0.0436663 0.234676 -0.971092\nvn -0.114125 0.363045 -0.924756\nvn 0.115802 0.378131 -0.918481\nvn 0.276646 0.480621 -0.832148\nvn 0.0640425 0.514855 -0.854882\nvn -0.179074 0.481304 -0.858067\nvn -0.228133 0.612167 -0.757104\nvn 0.0243505 0.677471 -0.735146\nvn 0.633985 0.350375 -0.68942\nvn 0.576752 0.485466 -0.657023\nvn 0.443368 0.471358 -0.762395\nvn 0.41015 0.600662 -0.686282\nvn 0.243091 0.643971 -0.725402\nvn -0.252981 0.252622 -0.933907\nvn -0.380846 0.274138 -0.883065\nvn -0.444476 0.389008 -0.806916\nvn -0.332518 0.368796 -0.867998\nvn -0.410208 0.280789 -0.867691\nvn -0.313052 0.228435 -0.921854\nvn -0.325893 0.433354 -0.840237\nvn -0.44995 0.414615 -0.790974\nvn -0.487782 0.494516 -0.71939\nvn -0.499406 0.463017 -0.732263\nvn -0.350619 0.542449 -0.763423\nvn -0.379983 0.601786 -0.702472\nvn -0.516428 0.539774 -0.66479\nvn -0.400628 0.459489 -0.792696\nvn -0.536821 0.520711 -0.66384\nvn -0.447602 0.549703 -0.705322\nvn -0.229709 0.656405 -0.718586\nvn -0.190067 0.562953 -0.804337\nvn -0.171251 0.413877 -0.89408\nvn -0.148658 0.557011 -0.817092\nvn -0.126317 0.367622 -0.921356\nvn -0.173076 0.13599 -0.975475\nvn -0.154399 -0.375336 -0.913939\nvn -0.140281 0.0414559 -0.989243\nvn -0.16144 -0.419697 -0.893192\nvn -0.227397 0.298607 -0.92689\nvn -0.258342 -0.0686952 -0.963608\nvn -0.295148 -0.46792 -0.83303\nvn -0.50933 -0.230431 -0.829147\nvn -0.455699 -0.489163 -0.743679\nvn -0.202335 0.679599 -0.705128\nvn -0.281195 0.668037 -0.688953\nvn -0.230306 0.536799 -0.811669\nvn -0.482373 0.42931 -0.76355\nvn -0.488123 0.144658 -0.860703\nvn 0.793873 0.207403 -0.57162\nvn 0.599064 0.348247 -0.721004\nvn 0.410795 0.474907 -0.778274\nvn 0.545417 0.340475 -0.765896\nvn 0.346635 0.443761 -0.82639\nvn 0.234786 0.589302 -0.773045\nvn 0.0529956 0.678473 -0.732712\nvn 0.130783 0.552594 -0.823125\nvn -0.044053 0.639178 -0.767796\nvn 0.283219 0.445613 -0.849245\nvn 0.0533238 0.524422 -0.849787\nvn -0.0987235 0.59029 -0.801131\nvn -0.168027 0.558364 -0.812401\nvn -0.0153389 0.526646 -0.849946\nvn 0.531045 0.339691 -0.776274\nvn 0.754799 0.212115 -0.620714\nvn 0.738434 0.242849 -0.629078\nvn 0.478441 0.396713 -0.783398\nvn 0.215078 0.4796 -0.850721\nvn -0.0571451 0.766289 -0.639949\nvn -0.166815 0.828111 -0.535169\nvn -0.267086 0.7673 -0.583023\nvn -0.156178 0.70607 -0.690705\nvn -0.253636 0.871817 -0.419051\nvn -0.330221 0.899786 -0.285199\nvn -0.418005 0.850002 -0.320576\nvn -0.351752 0.81426 -0.461792\nvn -0.453676 0.737366 -0.50047\nvn -0.361445 0.698619 -0.617486\nvn -0.527698 0.763476 -0.372342\nvn -0.635744 0.638457 -0.433823\nvn -0.540248 0.629596 -0.558337\nvn -0.244981 0.649491 -0.719824\nvn -0.434906 0.612471 -0.660103\nvn -0.314128 0.588674 -0.74484\nvn 0.411294 0.478667 -0.775703\nvn 0.696683 0.33371 -0.635035\nvn 0.635386 0.444954 -0.631111\nvn 0.14854 0.520263 -0.840989\nvn 0.349993 0.551196 -0.757422\nvn 0.09346 0.553813 -0.827379\nvn -0.0455444 0.530357 -0.84655\nvn -0.208368 0.532261 -0.820537\nvn -0.0945474 0.540488 -0.836022\nvn -0.245641 0.520748 -0.817608\nvn 0.0654541 0.597517 -0.799181\nvn -0.115891 0.563893 -0.817676\nvn -0.248773 0.535847 -0.806834\nvn -0.115533 0.630113 -0.767861\nvn -0.249008 0.604231 -0.756902\nvn 0.600628 0.530099 -0.598533\nvn 0.512356 0.621598 -0.592543\nvn 0.281634 0.624601 -0.728393\nvn 0.303024 0.692692 -0.654488\nvn 0.0801863 0.672433 -0.735802\nvn -0.351095 0.534697 -0.768656\nvn -0.470144 0.531641 -0.704502\nvn -0.476265 0.480563 -0.736363\nvn -0.361842 0.501314 -0.785973\nvn -0.582696 0.525206 -0.620181\nvn -0.696129 0.51338 -0.501842\nvn -0.709699 0.437091 -0.552521\nvn -0.590105 0.459966 -0.663481\nvn -0.586068 0.433968 -0.684248\nvn -0.470018 0.465778 -0.749756\nvn -0.692271 0.412974 -0.591789\nvn -0.696 0.410802 -0.588919\nvn -0.604406 0.455919 -0.653323\nvn -0.35819 0.499223 -0.788971\nvn -0.480676 0.506385 -0.715908\nvn -0.360405 0.550404 -0.753103\nvn 0.939295 0.129114 -0.31789\nvn 0.946187 0.00109304 -0.323619\nvn 0.959173 0.124229 -0.254077\nvn 0.965504 -0.00075643 -0.260387\nvn 0.894706 0.258567 -0.364203\nvn 0.915569 0.133126 -0.379489\nvn 0.919869 0.249575 -0.302577\nvn 0.890325 0.362196 -0.275925\nvn 0.914421 0.344075 -0.213183\nvn 0.941164 0.239137 -0.238794\nvn 0.819086 0.491112 -0.296492\nvn 0.862147 0.378301 -0.337032\nvn 0.852283 0.466292 -0.237034\nvn 0.830644 0.391371 -0.396055\nvn 0.866067 0.26569 -0.423481\nvn 0.743859 0.526844 -0.411229\nvn 0.796506 0.40085 -0.452656\nvn 0.782517 0.511681 -0.354753\nvn 0.888183 0.136188 -0.438844\nvn 0.896047 0.0034444 -0.443946\nvn 0.923001 0.00247863 -0.384789\nvn 0.834272 0.270783 -0.480279\nvn 0.857263 0.138342 -0.495945\nvn 0.822878 0.139683 -0.550782\nvn 0.831091 0.00448892 -0.556119\nvn 0.86536 0.00408226 -0.501134\nvn 0.761114 0.275048 -0.587413\nvn 0.784929 0.140175 -0.603521\nvn 0.799356 0.273884 -0.534807\nvn 0.759929 0.406631 -0.507109\nvn 0.662695 0.540156 -0.518717\nvn 0.720776 0.408915 -0.559705\nvn 0.70383 0.536214 -0.465939\nvn 0.679045 0.408104 -0.610205\nvn 0.719527 0.274409 -0.63795\nvn 0.577064 0.535026 -0.617045\nvn 0.634696 0.404781 -0.658265\nvn 0.620465 0.539429 -0.569245\nvn 0.743383 0.139787 -0.654096\nvn 0.751943 0.00440216 -0.659214\nvn 0.793299 0.00461827 -0.608814\nvn 0.674554 0.272224 -0.686201\nvn 0.698179 0.138561 -0.702387\nvn 0.650045 0.13665 -0.747508\nvn 0.658808 0.00286638 -0.752305\nvn 0.706944 0.00380849 -0.70726\nvn 0.578652 0.265096 -0.771288\nvn 0.599965 0.13444 -0.788649\nvn 0.627189 0.2689 -0.730976\nvn 0.588961 0.399725 -0.702385\nvn 0.492259 0.520235 -0.697881\nvn 0.543204 0.393936 -0.741447\nvn 0.533873 0.528157 -0.660325\nvn 0.49728 0.388329 -0.775831\nvn 0.528925 0.261443 -0.807395\nvn 0.412224 0.505911 -0.757711\nvn 0.451022 0.383655 -0.805847\nvn 0.451824 0.51249 -0.730212\nvn 0.54797 0.13233 -0.825965\nvn 0.555365 0.000717193 -0.831606\nvn 0.60827 0.00176319 -0.793728\nvn 0.477939 0.258469 -0.839505\nvn 0.494033 0.130663 -0.859569\nvn 0.443017 0.142545 -0.885108\nvn 0.446937 0.00890054 -0.894521\nvn 0.505573 0.0132037 -0.862683\nvn 0.374256 0.267962 -0.887766\nvn 0.38412 0.138342 -0.91286\nvn 0.425206 0.256525 -0.867983\nvn 0.403223 0.38041 -0.832286\nvn 0.326468 0.498036 -0.803355\nvn 0.352266 0.378448 -0.85597\nvn 0.371302 0.501149 -0.781655\nvn 0.302097 0.389516 -0.870066\nvn 0.315788 0.26389 -0.911394\nvn 0.228689 0.506899 -0.831116\nvn 0.244392 0.385552 -0.889731\nvn 0.277694 0.49621 -0.822594\nvn 0.320275 0.129159 -0.938479\nvn 0.38365 -0.000640423 -0.923479\nvn 0.322513 -0.000517179 -0.946565\nvn 0.251848 0.254986 -0.933571\nvn 0.257818 0.129333 -0.957498\nvn 0.194089 0.129496 -0.972399\nvn 0.259505 -0.000342195 -0.965742\nvn 0.195349 -0.000204417 -0.980734\nvn 0.189659 0.255076 -0.948138\nvn 0.12701 0.255185 -0.958514\nvn 0.129902 0.129624 -0.983017\nvn 0.18194 0.376807 -0.908248\nvn 0.17942 0.4948 -0.850283\nvn 0.117805 0.502816 -0.856328\nvn 0.121991 0.376833 -0.918213\nvn 0.0615441 0.376929 -0.924195\nvn 0.0639136 0.255295 -0.964748\nvn 0.0580807 0.494607 -0.867174\nvn 0.000872101 0.494717 -0.869053\nvn 0.000606286 0.377033 -0.9262\nvn 0.0652625 0.129719 -0.989401\nvn 0.130711 -0.000109952 -0.991421\nvn 0.0655983 -5.04251e-05 -0.997846\nvn 0.000368661 0.255382 -0.96684\nvn 0.00016758 0.129782 -0.991543\nvn -0.0648679 0.129813 -0.989414\nvn -0.00469959 -0.00944104 -0.999944\nvn -0.0764171 2.14274e-06 -0.997076\nvn -0.0631042 0.255429 -0.964766\nvn -0.12686 0.234798 -0.963731\nvn -0.129754 0.108522 -0.98559\nvn -0.0602704 0.377095 -0.924212\nvn -0.0563267 0.494792 -0.867184\nvn -0.114733 0.475455 -0.872226\nvn -0.121873 0.357087 -0.926086\nvn -0.180815 0.377141 -0.908334\nvn -0.188667 0.255457 -0.948233\nvn -0.222012 0.514018 -0.828551\nvn -0.237563 0.397017 -0.886533\nvn -0.169734 0.49486 -0.852234\nvn -0.1934 0.129828 -0.972492\nvn -0.184256 5.98995e-06 -0.982878\nvn -0.130532 6.1092e-06 -0.991444\nvn -0.248784 0.275997 -0.928403\nvn -0.255862 0.151072 -0.954836\nvn -0.318771 0.129823 -0.938899\nvn -0.258824 3.30303e-06 -0.965924\nvn -0.331877 9.4624e-07 -0.943323\nvn -0.310744 0.255456 -0.915522\nvn -0.371989 0.2348 -0.89805\nvn -0.380426 0.108517 -0.918423\nvn -0.297584 0.377149 -0.877042\nvn -0.279101 0.494881 -0.822919\nvn -0.336658 0.475496 -0.812752\nvn -0.357456 0.357105 -0.862961\nvn -0.40975 0.377149 -0.83058\nvn -0.427653 0.255455 -0.867096\nvn -0.428889 0.514028 -0.742853\nvn -0.458906 0.39702 -0.794846\nvn -0.384545 0.494883 -0.779241\nvn -0.438503 0.129822 -0.889304\nvn -0.43236 1.38201e-07 -0.901701\nvn -0.382685 4.5198e-07 -0.923879\nvn -0.48058 0.275995 -0.832388\nvn -0.494262 0.151068 -0.856086\nvn -0.55091 0.129821 -0.824406\nvn -0.5 1.3821e-07 -0.866025\nvn -0.564717 1.133e-07 -0.825285\nvn -0.537103 0.255455 -0.803905\nvn -0.591743 0.234799 -0.771174\nvn -0.605166 0.108516 -0.788668\nvn -0.514431 0.377148 -0.770143\nvn -0.482573 0.494882 -0.722645\nvn -0.535539 0.475495 -0.697927\nvn -0.568623 0.357104 -0.741043\nvn -0.610756 0.377148 -0.69623\nvn -0.6375 0.255454 -0.726867\nvn -0.606538 0.514027 -0.606538\nvn -0.64899 0.397019 -0.64899\nvn -0.573123 0.494882 -0.653163\nvn -0.653729 0.129821 -0.74551\nvn -0.651004 -1.49406e-08 -0.759074\nvn -0.608761 -1.68092e-08 -0.793353\nvn -0.679642 0.275995 -0.679642\nvn -0.698992 0.151068 -0.698992\nvn -0.74551 0.129821 -0.653729\nvn -0.707107 2.5214e-08 -0.707107\nvn -0.759074 8.59086e-08 -0.651004\nvn -0.726868 0.255454 -0.6375\nvn -0.771174 0.2348 -0.591743\nvn -0.788668 0.108516 -0.605166\nvn -0.69623 0.377148 -0.610756\nvn -0.653163 0.494882 -0.573123\nvn -0.697928 0.475495 -0.535539\nvn -0.741043 0.357104 -0.568623\nvn -0.770143 0.377148 -0.514431\nvn -0.803905 0.255454 -0.537103\nvn -0.742854 0.514027 -0.428887\nvn -0.794847 0.397019 -0.458906\nvn -0.722645 0.494882 -0.482572\nvn -0.824406 0.129821 -0.55091\nvn -0.825285 -1.49406e-08 -0.564717\nvn -0.793354 -1.49415e-08 -0.608761\nvn -0.832388 0.275995 -0.48058\nvn -0.856086 0.151068 -0.494262\nvn -0.889305 0.129822 -0.438502\nvn -0.866025 -1.40078e-08 -0.5\nvn -0.901701 -1.49406e-08 -0.43236\nvn -0.867097 0.255455 -0.427651\nvn -0.898052 0.234799 -0.371985\nvn -0.918424 0.108516 -0.380423\nvn -0.830582 0.377148 -0.409748\nvn -0.779243 0.494881 -0.384543\nvn -0.812754 0.475495 -0.336654\nvn -0.862964 0.357104 -0.357451\nvn -0.877045 0.377148 -0.297575\nvn -0.915525 0.255454 -0.310736\nvn -0.828546 0.514027 -0.222009\nvn -0.886537 0.397019 -0.237547\nvn -0.822921 0.494882 -0.279095\nvn -0.938901 0.129822 -0.318766\nvn -0.943324 -1.61857e-08 -0.331874\nvn -0.92388 -1.68092e-08 -0.382683\nvn -0.928408 0.275995 -0.248766\nvn -0.95484 0.151068 -0.255848\nvn 0.880809 0.43909 -0.177128\nvn 0.848223 0.512565 -0.133396\nvn 0.814265 0.549064 -0.188415\nvn 0.787055 0.602285 -0.133406\nvn 0.77438 0.583398 -0.244913\nvn 0.739676 0.646863 -0.185601\nvn 0.826587 0.556304 -0.0853239\nvn 0.818106 0.574091 -0.0334869\nvn 0.772263 0.631128 -0.0727161\nvn 0.769667 0.63841 -0.00670408\nvn 0.716531 0.687293 -0.119213\nvn 0.703321 0.709331 -0.0467841\nvn 0.686611 0.685929 -0.240971\nvn 0.65304 0.737387 -0.172626\nvn 0.627654 0.772278 -0.0981739\nvn 0.584925 0.777095 -0.23235\nvn 0.54574 0.822361 -0.160904\nvn 0.73043 0.612643 -0.301894\nvn 0.684481 0.634781 -0.358524\nvn 0.630638 0.716322 -0.298626\nvn 0.638351 0.648842 -0.41414\nvn 0.524085 0.745902 -0.411053\nvn 0.593331 0.655315 -0.467461\nvn 0.575398 0.736097 -0.356481\nvn 0.518249 0.80315 -0.293883\nvn 0.398339 0.871551 -0.285875\nvn 0.458918 0.81647 -0.350388\nvn 0.466322 0.854955 -0.227149\nvn 0.406843 0.82058 -0.401405\nvn 0.476717 0.747915 -0.461914\nvn 0.28647 0.881168 -0.376135\nvn 0.361435 0.818672 -0.446252\nvn 0.341323 0.877598 -0.336631\nvn 0.54944 0.6555 -0.518108\nvn 0.432989 0.744359 -0.50838\nvn 0.506515 0.650904 -0.565479\nvn 0.46599 0.643245 -0.607527\nvn 0.361351 0.729431 -0.580823\nvn 0.429088 0.634313 -0.643064\nvn 0.394234 0.737518 -0.548312\nvn 0.323607 0.813652 -0.482958\nvn 0.219631 0.87725 -0.426844\nvn 0.287035 0.812128 -0.507995\nvn 0.251446 0.874378 -0.415015\nvn 0.268088 0.800752 -0.535654\nvn 0.333295 0.721535 -0.606879\nvn 0.209564 0.869369 -0.447528\nvn 0.197767 0.867235 -0.456938\nvn 0.251798 0.796407 -0.549849\nvn 0.395069 0.625549 -0.672763\nvn 0.309316 0.714852 -0.627145\nvn 0.363368 0.618064 -0.697109\nvn 0.330676 0.612545 -0.717943\nvn 0.255359 0.706454 -0.660087\nvn 0.293312 0.608786 -0.737121\nvn 0.284918 0.70991 -0.644088\nvn 0.233917 0.793271 -0.562142\nvn 0.187158 0.865714 -0.464232\nvn 0.171767 0.864531 -0.472315\nvn 0.210827 0.79106 -0.574261\nvn 0.18768 0.7817 -0.594745\nvn 0.220604 0.704243 -0.674815\nvn 0.12043 0.863059 -0.490536\nvn 0.153809 0.789051 -0.594762\nvn 0.152226 0.858765 -0.489235\nvn 0.251265 0.606452 -0.754375\nvn 0.180577 0.702963 -0.687921\nvn 0.204491 0.605142 -0.769407\nvn 0.154777 0.604431 -0.781478\nvn 0.0927082 0.701966 -0.70615\nvn 0.108363 0.614452 -0.781477\nvn 0.13723 0.702256 -0.698573\nvn 0.11743 0.788534 -0.603676\nvn 0.060639 0.862816 -0.501868\nvn 0.0797104 0.788333 -0.610063\nvn 0.0912142 0.862862 -0.497141\nvn 0.0406981 0.788337 -0.613896\nvn 0.0470738 0.701947 -0.710672\nvn -0.00190765 0.869678 -0.493615\nvn 0.00102346 0.801665 -0.597773\nvn 0.0287129 0.862862 -0.504623\nvn 0.0617422 0.604083 -0.794526\nvn 0.000907167 0.717225 -0.696841\nvn 0.00467283 0.61158 -0.791168\nvn -0.051402 0.604308 -0.795091\nvn -0.0456698 0.70212 -0.710592\nvn -0.0946484 0.686666 -0.720785\nvn -0.105512 0.586957 -0.802713\nvn -0.0391492 0.788488 -0.613803\nvn -0.0318204 0.862977 -0.50424\nvn -0.0687449 0.858098 -0.508863\nvn -0.0821909 0.774918 -0.626695\nvn -0.120289 0.78856 -0.603079\nvn -0.139175 0.702206 -0.698239\nvn -0.130482 0.869769 -0.475896\nvn -0.154596 0.801811 -0.577234\nvn -0.103731 0.863016 -0.494413\nvn -0.15567 0.604393 -0.781329\nvn -0.18026 0.717406 -0.67293\nvn -0.202734 0.621535 -0.756699\nvn -0.255778 0.604422 -0.754488\nvn -0.228458 0.702235 -0.674295\nvn -0.278174 0.686733 -0.671578\nvn -0.309811 0.58702 -0.747947\nvn -0.197185 0.788581 -0.582458\nvn -0.161804 0.863037 -0.478526\nvn -0.198399 0.858128 -0.473555\nvn -0.241847 0.774974 -0.583889\nvn -0.272405 0.788585 -0.551297\nvn -0.31524 0.70224 -0.638344\nvn -0.249276 0.869772 -0.425861\nvn -0.298788 0.801821 -0.517502\nvn -0.228293 0.863026 -0.450631\nvn -0.35264 0.604427 -0.714362\nvn -0.348325 0.71742 -0.603306\nvn -0.391691 0.621549 -0.678421\nvn -0.442341 0.604425 -0.662575\nvn -0.395208 0.702238 -0.592176\nvn -0.442516 0.686731 -0.576697\nvn -0.492837 0.587019 -0.642277\nvn -0.341242 0.788584 -0.511555\nvn -0.280175 0.863038 -0.420318\nvn -0.314213 0.858127 -0.406065\nvn -0.384735 0.774972 -0.501395\nvn -0.405808 0.788584 -0.462013\nvn -0.469713 0.702238 -0.535007\nvn -0.350999 0.869772 -0.346838\nvn -0.422543 0.80182 -0.422543\nvn -0.337143 0.863025 -0.376195\nvn -0.525513 0.604425 -0.598754\nvn -0.4926 0.717419 -0.4926\nvn -0.55393 0.621548 -0.55393\nvn -0.601282 0.594007 -0.53443\nvn -0.565406 0.702097 -0.432868\nvn -0.634334 0.596972 -0.491167\nvn -0.546626 0.686724 -0.479177\nvn -0.475394 0.774944 -0.416488\nvn -0.407697 0.862059 -0.301062\nvn -0.489216 0.788251 -0.373267\nvn -0.388237 0.857995 -0.336328\nvn -0.514312 0.78738 -0.339877\nvn -0.592998 0.701715 -0.394904\nvn -0.462278 0.850742 -0.250074\nvn -0.538468 0.785644 -0.304657\nvn -0.431535 0.860111 -0.272006\nvn -0.66268 0.604317 -0.44233\nvn -0.618562 0.700945 -0.355046\nvn -0.680868 0.614391 -0.398676\nvn -0.711181 0.603818 -0.360035\nvn -0.662954 0.697842 -0.271125\nvn -0.740526 0.596109 -0.310282\nvn -0.64195 0.699657 -0.313656\nvn -0.561584 0.782788 -0.268077\nvn -0.499394 0.847099 -0.18174\nvn -0.583253 0.77885 -0.23067\nvn -0.475244 0.853483 -0.213799\nvn -0.603505 0.773882 -0.192063\nvn -0.681625 0.69549 -0.227333\nvn -0.544573 0.83204 -0.105591\nvn -0.611068 0.778295 -0.144409\nvn -0.521073 0.841658 -0.141759\nvn -0.755767 0.60281 -0.255805\nvn -0.686193 0.705559 -0.176991\nvn -0.75969 0.617998 -0.20236\nvn 0.82459 0.565274 0.0227477\nvn 0.821246 0.563697 0.0883209\nvn 0.750559 0.657264 0.0683052\nvn 0.688346 0.709352 0.151657\nvn 0.670982 0.740674 0.034415\nvn 0.59332 0.796224 0.11832\nvn 0.781302 0.601211 0.167668\nvn 0.712749 0.650126 0.263294\nvn 0.572652 0.782486 0.24451\nvn 0.385086 0.863803 0.324889\nvn 0.460431 0.866944 0.190816\nvn 0.299895 0.924478 0.235378\nvn 0.501451 0.862935 0.0623656\nvn 0.377425 0.917688 0.124095\nvn 0.235623 0.957748 0.164928\nvn 0.303834 0.951175 0.0543289\nvn 0.180726 0.977757 0.106444\nvn 0.585089 0.810806 -0.0162781\nvn 0.494673 0.86507 -0.0833806\nvn 0.413507 0.91046 -0.00862903\nvn 0.408058 0.899794 -0.154465\nvn 0.331455 0.940096 -0.0797339\nvn 0.335337 0.917202 -0.215149\nvn 0.262017 0.955001 -0.138995\nvn 0.236507 0.971596 -0.00809482\nvn 0.13115 0.989505 0.0606604\nvn 0.17755 0.982294 -0.0597963\nvn 0.0855181 0.996078 0.0227063\nvn 0.11705 0.989669 -0.0827976\nvn 0.197349 0.963338 -0.181748\nvn 0.0339561 0.999346 0.0124597\nvn 0.0153116 0.999599 -0.0238151\nvn 0.0914235 0.987857 -0.125622\nvn 0.276109 0.923876 -0.264986\nvn 0.151531 0.965467 -0.211923\nvn 0.2183 0.931972 -0.289435\nvn 0.192852 0.924348 -0.329225\nvn 0.129231 0.96219 -0.239771\nvn 0.106377 0.962151 -0.250899\nvn 0.167143 0.923252 -0.345933\nvn 0.0628074 0.987976 -0.141276\nvn -0.00830987 0.9994 -0.033634\nvn -0.0227265 0.999141 -0.0346405\nvn 0.0438337 0.988147 -0.147117\nvn 0.0338246 0.988699 -0.14605\nvn 0.0927626 0.962585 -0.254606\nvn -0.0284472 0.999156 -0.0296465\nvn -0.0254687 0.999458 -0.0208782\nvn 0.032677 0.989552 -0.140422\nvn 0.150527 0.922618 -0.355131\nvn 0.0880712 0.963429 -0.253079\nvn 0.14246 0.922543 -0.358636\nvn 0.136762 0.922611 -0.360674\nvn 0.0866225 0.964174 -0.250728\nvn 0.0822647 0.964563 -0.250699\nvn 0.127148 0.92253 -0.364379\nvn 0.0353682 0.990273 -0.134566\nvn -0.0182482 0.999757 -0.0123449\nvn -0.0119228 0.999906 -0.00673263\nvn 0.0361903 0.990662 -0.131451\nvn 0.0347799 0.990847 -0.13043\nvn 0.0746439 0.964745 -0.25238\nvn -0.00681533 0.999971 -0.0033893\nvn -0.00321418 0.999993 -0.00165584\nvn 0.0307849 0.990927 -0.13083\nvn 0.113319 0.922417 -0.369196\nvn 0.0633977 0.964828 -0.255122\nvn 0.0949538 0.922339 -0.374533\nvn 0.0735644 0.922297 -0.379416\nvn 0.049646 0.964871 -0.257989\nvn 0.0348224 0.964904 -0.260283\nvn 0.050919 0.922301 -0.383103\nvn 0.0248861 0.990963 -0.131807\nvn -0.000897386 0.999999 -0.000840797\nvn 0.000708948 1 -0.000502218\nvn 0.0181115 0.990982 -0.132766\nvn 0.0103921 0.990992 -0.133518\nvn 0.0188676 0.964932 -0.261821\nvn 0.00154643 0.999999 -0.000470616\nvn 0.00158121 0.999999 -0.000570172\nvn 0.00168739 0.990998 -0.133863\nvn 0.0269871 0.922337 -0.385444\nvn 0.00174885 0.964956 -0.262406\nvn 0.00175596 0.922384 -0.386271\nvn -0.0239733 0.922413 -0.385461\nvn -0.0158533 0.964969 -0.261885\nvn -0.0332024 0.964975 -0.260232\nvn -0.0493749 0.922428 -0.382999\nvn -0.00746059 0.991001 -0.133644\nvn 0.00121888 0.999999 -0.000661125\nvn 0.000936574 0.999999 -0.000715299\nvn -0.0164378 0.991002 -0.132831\nvn -0.0252455 0.991003 -0.13144\nvn -0.0503018 0.964978 -0.257465\nvn 0.000736203 0.999999 -0.000749898\nvn 0.000617012 1 -0.000781904\nvn -0.0338855 0.991002 -0.129485\nvn -0.0744548 0.922436 -0.378903\nvn -0.0671552 0.964978 -0.253589\nvn -0.099218 0.92244 -0.373175\nvn -0.123509 0.92244 -0.365856\nvn -0.0836747 0.964977 -0.248632\nvn -0.0997495 0.964976 -0.242633\nvn -0.14715 0.922439 -0.357005\nvn -0.0423372 0.991002 -0.126977\nvn 0.000532463 1 -0.000811823\nvn 0.0004584 1 -0.00083785\nvn -0.0505574 0.991001 -0.123936\nvn -0.0585477 0.991001 -0.120368\nvn -0.115383 0.964977 -0.235599\nvn 0.000394386 1 -0.000862473\nvn 0.000339675 1 -0.000888002\nvn -0.0663084 0.991002 -0.116272\nvn -0.170147 0.92244 -0.346633\nvn -0.130574 0.964977 -0.227529\nvn -0.192498 0.922441 -0.334734\nvn -0.214027 0.922439 -0.3214\nvn -0.145209 0.964976 -0.218483\nvn -0.159159 0.964976 -0.208543\nvn -0.234547 0.922438 -0.306749\nvn -0.0737888 0.991001 -0.111676\nvn 0.000279048 1 -0.000907098\nvn 0.000219342 1 -0.00092351\nvn -0.0809199 0.991001 -0.106623\nvn -0.0877033 0.991001 -0.101116\nvn -0.172426 0.964976 -0.197712\nvn 0.00016056 1 -0.000937694\nvn 0.000102496 1 -0.0009498\nvn -0.0941375 0.991002 -0.0951528\nvn -0.254062 0.922439 -0.290789\nvn -0.185009 0.964977 -0.185987\nvn -0.27257 0.922441 -0.273512\nvn -0.291252 0.922352 -0.253849\nvn -0.198665 0.96492 -0.171646\nvn -0.215207 0.964414 -0.153593\nvn -0.31136 0.92169 -0.231394\nvn -0.102448 0.990977 -0.0864226\nvn -0.00250171 0.999995 0.00181364\nvn -0.0100583 0.9999 0.00996999\nvn -0.114846 0.990694 -0.0730509\nvn -0.131726 0.989759 -0.0549946\nvn -0.235237 0.962937 -0.131969\nvn -0.0226357 0.99946 0.0238193\nvn -0.040552 0.99822 0.0437239\nvn -0.153614 0.98761 -0.0320668\nvn -0.333539 0.919874 -0.206359\nvn -0.259406 0.959856 -0.106702\nvn -0.367208 0.912009 -0.182751\nvn -0.391261 0.908451 -0.147073\nvn -0.288524 0.954158 -0.0796058\nvn -0.334511 0.939641 -0.0719524\nvn -0.424052 0.896218 -0.130285\nvn -0.183281 0.983057 -0.00274321\nvn -0.0681171 0.994834 0.0752681\nvn -0.124523 0.986156 0.1095\nvn -0.238217 0.971185 0.00721293\nvn -0.270827 0.961388 0.048839\nvn -0.344964 0.93833 -0.0231863\nvn -0.281568 0.937557 0.204223\nvn -0.333669 0.938403 0.0898051\nvn -0.191528 0.967805 0.163313\nvn -0.429977 0.899062 -0.0825017\nvn -0.394454 0.918911 -0.00286884\nvn -0.474778 0.877461 -0.0681721\nvn 0.557981 0.725808 0.402317\nvn 0.352744 0.769905 0.531807\nvn 0.234759 0.901699 0.36308\nvn 0.120922 0.911748 0.392548\nvn 0.163615 0.950935 0.262589\nvn 0.0582809 0.953934 0.294302\nvn 0.207475 0.821536 0.531067\nvn 0.0844655 0.818674 0.568012\nvn 0.00702494 0.912815 0.408313\nvn -0.0903045 0.880122 0.46608\nvn -0.127606 0.918307 0.374739\nvn -0.032235 0.94602 0.3225\nvn 0.00910702 0.971679 0.236129\nvn -0.0788565 0.95517 0.285361\nvn -0.172823 0.923445 0.34261\nvn -0.117031 0.952312 0.28179\nvn -0.196352 0.913306 0.356818\nvn 0.1099 0.974169 0.197271\nvn 0.0671611 0.985521 0.155687\nvn -0.0274438 0.977258 0.210271\nvn 0.0307942 0.991096 0.129536\nvn -0.0634941 0.975724 0.209599\nvn -0.0119625 0.993286 0.115063\nvn -0.0938574 0.973738 0.207423\nvn -0.141224 0.945752 0.292589\nvn -0.200193 0.910494 0.361834\nvn -0.215101 0.901656 0.375165\nvn -0.1533 0.945822 0.286217\nvn -0.175077 0.94133 0.288523\nvn -0.109107 0.975392 0.191589\nvn -0.233058 0.89383 0.383082\nvn -0.25489 0.887108 0.384798\nvn -0.197411 0.93713 0.287779\nvn -0.0454988 0.993609 0.103302\nvn -0.132676 0.973466 0.186444\nvn -0.0613168 0.994736 0.082098\nvn -0.0808485 0.993701 0.0776006\nvn -0.149936 0.971058 0.185917\nvn -0.157119 0.968717 0.192095\nvn -0.0910399 0.992575 0.0806649\nvn -0.214121 0.932851 0.289726\nvn -0.272192 0.88053 0.388044\nvn -0.277436 0.874198 0.398506\nvn -0.219712 0.928852 0.298264\nvn -0.214744 0.925791 0.311121\nvn -0.154789 0.966939 0.202656\nvn -0.27101 0.869122 0.413739\nvn -0.252773 0.865703 0.432046\nvn -0.199286 0.923854 0.326772\nvn -0.0923886 0.991761 0.0887384\nvn -0.143035 0.965863 0.215985\nvn -0.0849186 0.991366 0.0999137\nvn -0.0728121 0.991195 0.11059\nvn -0.126051 0.965292 0.22874\nvn -0.108286 0.965056 0.238623\nvn -0.0607341 0.991113 0.118346\nvn -0.177674 0.922802 0.341861\nvn -0.227123 0.863764 0.449807\nvn -0.192043 0.874091 0.446188\nvn -0.152495 0.927424 0.341511\nvn -0.13439 0.922355 0.362217\nvn -0.089901 0.965039 0.246208\nvn -0.135806 0.86304 0.486538\nvn -0.108484 0.922483 0.370481\nvn -0.168926 0.86286 0.476379\nvn -0.0489285 0.9911 0.123804\nvn -0.0709741 0.965117 0.252017\nvn -0.0375806 0.991118 0.127564\nvn -0.0269159 0.991133 0.130122\nvn -0.0521593 0.965183 0.256324\nvn -0.0338494 0.965227 0.259211\nvn -0.0168437 0.991142 0.131737\nvn -0.0816841 0.922629 0.376938\nvn -0.06746 0.863409 0.499974\nvn -0.0553131 0.922737 0.381442\nvn -0.101459 0.863239 0.494493\nvn -0.0293783 0.922817 0.384118\nvn -0.0160601 0.965259 0.260801\nvn -0.000504183 0.863657 0.50408\nvn -0.0038704 0.922875 0.385079\nvn -0.0338147 0.86355 0.503128\nvn -0.00740024 0.991148 0.132552\nvn 0.00120678 0.96528 0.261213\nvn 0.0013967 0.991154 0.132708\nvn 0.00983383 0.991159 0.132317\nvn 0.0181359 0.965293 0.260538\nvn 0.0349577 0.965299 0.258796\nvn 0.0182566 0.991161 0.131403\nvn 0.021292 0.922912 0.384422\nvn 0.0652447 0.863748 0.499683\nvn 0.0462518 0.92293 0.38218\nvn 0.0325178 0.863719 0.502923\nvn 0.071018 0.922936 0.378345\nvn 0.0516781 0.965301 0.255974\nvn 0.135457 0.852224 0.505338\nvn 0.100442 0.919285 0.38056\nvn 0.0976876 0.863757 0.494349\nvn 0.0266693 0.991162 0.129949\nvn 0.0682987 0.965302 0.252048\nvn 0.0350725 0.991162 0.127934\nvn 0.0433552 0.991162 0.125372\nvn 0.0846479 0.9653 0.247043\nvn 0.100575 0.965299 0.241001\nvn 0.051428 0.991162 0.122283\nvn 0.124435 0.922941 0.364273\nvn 0.162671 0.863751 0.476941\nvn 0.18538 0.874847 0.447524\nvn 0.140704 0.927924 0.345196\nvn 0.166441 0.922932 0.347121\nvn 0.116082 0.9653 0.233926\nvn 0.261591 0.852218 0.453095\nvn 0.195475 0.919282 0.341629\nvn 0.222246 0.863749 0.452266\nvn 0.0592914 0.991162 0.118669\nvn 0.131166 0.965301 0.225811\nvn 0.0669439 0.991162 0.114524\nvn 0.0743053 0.991162 0.109893\nvn 0.145684 0.9653 0.216732\nvn 0.159519 0.965299 0.206764\nvn 0.0813192 0.991162 0.10481\nvn 0.214457 0.92294 0.319671\nvn 0.280549 0.863749 0.418605\nvn 0.294885 0.874846 0.384302\nvn 0.225246 0.927923 0.297024\nvn 0.250613 0.922932 0.292215\nvn 0.172673 0.9653 0.19591\nvn 0.369949 0.852217 0.36995\nvn 0.277237 0.919282 0.279393\nvn 0.331729 0.863749 0.379334\nvn 0.0879872 0.991162 0.0992773\nvn 0.185144 0.9653 0.184165\nvn 0.0943075 0.991162 0.0932923\nvn 0.0974905 0.991164 0.0899435\nvn 0.19392 0.965304 0.174883\nvn 0.196398 0.965395 0.171581\nvn 0.0950293 0.991178 0.0923925\nvn 0.27649 0.92791 0.250071\nvn 0.387353 0.863912 0.321891\nvn 0.293097 0.923024 0.249239\nvn 0.361092 0.874848 0.322883\nvn 0.295212 0.923233 0.24595\nvn 0.193066 0.965467 0.174924\nvn 0.39231 0.864316 0.314723\nvn 0.29149 0.923286 0.250153\nvn 0.392783 0.864202 0.314445\nvn 0.0871719 0.991042 0.101181\nvn 0.184082 0.96521 0.185695\nvn 0.0738394 0.990394 0.116904\nvn 0.049008 0.987725 0.148314\nvn 0.161812 0.962913 0.215907\nvn 0.116485 0.954635 0.274049\nvn 0.00507479 0.97994 0.199229\nvn 0.276919 0.921632 0.271866\nvn 0.356416 0.844482 0.399773\nvn 0.240026 0.908698 0.341548\nvn 0.377847 0.861866 0.338257\nvn 0.137128 0.897317 0.419545\nvn 0.0271701 0.941576 0.335703\nvn 0.272441 0.829113 0.488208\nvn 0.0527247 0.835225 0.547375\nvn 0.178302 0.748321 0.638924\nvn -0.0607287 0.96656 0.249145\nvn -0.154518 0.930225 0.332876\nvn -0.0591616 0.889948 0.452209\nvn -0.177639 0.751487 0.635383\nvn -0.210048 0.837194 0.504961\nvn -0.0425064 0.791671 0.609467\nvn -0.346904 0.765667 0.541675\nvn -0.357746 0.797817 0.485289\nvn -0.236002 0.869017 0.43487\nvn -0.499238 0.558761 0.662229\nvn -0.497342 0.654191 0.569812\nvn -0.328554 0.677972 0.657576\nvn -0.688069 0.455233 0.565087\nvn -0.637406 0.529926 0.559367\nvn -0.494146 0.68942 0.529642\nvn -0.486571 0.69763 0.52589\nvn -0.365854 0.803765 0.469161\nvn -0.613201 0.546643 0.570233\nvn -0.575832 0.549081 0.605746\nvn -0.464973 0.691361 0.55301\nvn -0.258289 0.875917 0.4075\nvn -0.360929 0.794792 0.487888\nvn -0.268442 0.868314 0.417097\nvn -0.269649 0.85508 0.442863\nvn -0.346153 0.779947 0.521402\nvn -0.33648 0.766794 0.546633\nvn -0.274275 0.842968 0.462795\nvn -0.431686 0.679775 0.592918\nvn -0.524753 0.548314 0.651143\nvn -0.479062 0.549726 0.684325\nvn -0.404457 0.6702 0.622291\nvn -0.391901 0.663323 0.637507\nvn -0.33781 0.756215 0.560378\nvn -0.450043 0.55271 0.701408\nvn -0.444238 0.555136 0.70319\nvn -0.398471 0.658303 0.638638\nvn -0.285817 0.832673 0.474305\nvn -0.352895 0.747944 0.562179\nvn -0.305784 0.824178 0.476683\nvn -0.323249 0.815679 0.479769\nvn -0.368547 0.739069 0.56387\nvn -0.372142 0.728755 0.574827\nvn -0.328263 0.806881 0.491108\nvn -0.409566 0.651149 0.638952\nvn -0.447377 0.552238 0.703482\nvn -0.442427 0.543166 0.713603\nvn -0.409993 0.640673 0.649187\nvn -0.399207 0.629521 0.666586\nvn -0.363516 0.71907 0.592279\nvn -0.428274 0.531257 0.730991\nvn -0.403123 0.519601 0.753331\nvn -0.375887 0.619857 0.68883\nvn -0.320945 0.799305 0.508041\nvn -0.341779 0.711443 0.614032\nvn -0.300803 0.793794 0.528591\nvn -0.272 0.79046 0.548807\nvn -0.310552 0.706485 0.635953\nvn -0.269727 0.710085 0.650405\nvn -0.233511 0.802049 0.549719\nvn -0.342783 0.61301 0.711841\nvn -0.36851 0.510494 0.776915\nvn -0.327841 0.504066 0.799023\nvn -0.304142 0.608771 0.732731\nvn -0.256484 0.623346 0.738685\nvn -0.227468 0.711672 0.664667\nvn -0.218997 0.496719 0.839828\nvn -0.211013 0.605579 0.767299\nvn -0.276385 0.507505 0.816119\nvn -0.204003 0.788513 0.580199\nvn -0.189604 0.702538 0.685923\nvn -0.164493 0.788579 0.592525\nvn -0.123174 0.788761 0.602233\nvn -0.0950177 0.702641 0.705172\nvn -0.0820879 0.788971 0.608923\nvn -0.142279 0.702504 0.697313\nvn -0.1587 0.605001 0.780249\nvn -0.108939 0.506804 0.85515\nvn -0.106212 0.604875 0.789206\nvn -0.162611 0.4956 0.853193\nvn -0.0536286 0.605012 0.794408\nvn -0.0478642 0.702862 0.709714\nvn -0.00109157 0.495534 0.868588\nvn -0.000967082 0.605233 0.796048\nvn -0.0584808 0.49536 0.866717\nvn -0.0412527 0.789179 0.612777\nvn -0.000811894 0.703078 0.711112\nvn -0.000650263 0.78935 0.613943\nvn 0.0396711 0.789452 0.612528\nvn 0.0923004 0.703283 0.704893\nvn 0.0796028 0.789501 0.608566\nvn 0.0459821 0.703215 0.709489\nvn 0.0514905 0.60539 0.794262\nvn 0.112865 0.495808 0.861067\nvn 0.103395 0.60548 0.789116\nvn 0.0561934 0.495694 0.866677\nvn 0.154762 0.605529 0.78063\nvn 0.138157 0.703311 0.697328\nvn 0.227566 0.476539 0.849191\nvn 0.209368 0.588149 0.781182\nvn 0.16894 0.495888 0.851795\nvn 0.11916 0.789517 0.60205\nvn 0.187923 0.687833 0.701121\nvn 0.163318 0.775941 0.609297\nvn 0.197921 0.789512 0.580946\nvn 0.229097 0.703317 0.672949\nvn 0.266189 0.718472 0.642605\nvn 0.22823 0.80271 0.55097\nvn 0.256343 0.605561 0.753382\nvn 0.279597 0.49597 0.822095\nvn 0.328014 0.515131 0.791863\nvn 0.299454 0.622678 0.722911\nvn 0.351489 0.605563 0.713967\nvn 0.313881 0.703315 0.63783\nvn 0.439568 0.47658 0.761348\nvn 0.404372 0.588163 0.700391\nvn 0.383626 0.495979 0.778997\nvn 0.270868 0.789509 0.550732\nvn 0.362934 0.687832 0.628622\nvn 0.315405 0.775934 0.546301\nvn 0.341515 0.789508 0.509946\nvn 0.395439 0.703313 0.590745\nvn 0.423429 0.71847 0.551824\nvn 0.363048 0.802708 0.473134\nvn 0.442573 0.60556 0.661382\nvn 0.482824 0.495974 0.721727\nvn 0.521778 0.515126 0.679994\nvn 0.476345 0.622674 0.620785\nvn 0.524301 0.605559 0.598671\nvn 0.468268 0.703313 0.534861\nvn 0.621641 0.476576 0.621641\nvn 0.571868 0.588161 0.571868\nvn 0.572172 0.495973 0.653169\nvn 0.404178 0.789508 0.461862\nvn 0.513268 0.687831 0.513268\nvn 0.446053 0.775934 0.446053\nvn 0.4452 0.802692 0.396839\nvn 0.551647 0.703167 0.448599\nvn 0.474376 0.789569 0.389291\nvn 0.519788 0.718423 0.462264\nvn 0.58524 0.622592 0.519494\nvn 0.677579 0.495366 0.543598\nvn 0.619459 0.605164 0.500047\nvn 0.641507 0.515016 0.568531\nvn 0.636996 0.60449 0.478359\nvn 0.565447 0.702953 0.431425\nvn 0.713307 0.492151 0.49898\nvn 0.648639 0.603181 0.464154\nvn 0.69842 0.494236 0.51763\nvn 0.484109 0.789704 0.376837\nvn 0.573385 0.702328 0.421858\nvn 0.487975 0.789577 0.372086\nvn 0.478285 0.786308 0.391105\nvn 0.569195 0.698051 0.434445\nvn 0.447592 0.772474 0.450496\nvn 0.551106 0.680339 0.483137\nvn 0.650705 0.597949 0.468017\nvn 0.742826 0.448938 0.496653\nvn 0.647149 0.577327 0.497887\nvn 0.721803 0.48609 0.492663\nvn 0.523778 0.634256 0.568661\nvn 0.639932 0.525849 0.56033\nvn 0.816743 0.262994 0.513581\nvn 0.657841 0.407273 0.633541\nvn 0.767227 0.38376 0.513898\nvn 0.397014 0.735884 0.548502\nvn 0.501768 0.531052 0.682798\nvn 0.347203 0.644899 0.680849\nvn -0.707339 0.338203 0.620717\nvn -0.851153 0.178121 0.493773\nvn -0.818735 0.260112 0.511874\nvn -0.864921 0.119573 0.487457\nvn -0.76761 0.323768 0.553126\nvn -0.829391 0.157898 0.53589\nvn -0.899625 0.0645787 0.431861\nvn -0.916151 -0.0797897 0.392811\nvn -0.888681 -0.0466373 0.456148\nvn -0.874116 -0.221661 0.432188\nvn -0.85694 -0.0346217 0.514252\nvn -0.847512 -0.22597 0.480273\nvn -0.800426 0.148576 0.580727\nvn -0.822594 -0.0227779 0.568173\nvn -0.823129 -0.195703 0.533065\nvn -0.791019 -0.17926 0.584941\nvn -0.784096 0.0100271 0.620559\nvn -0.732184 0.34751 0.585785\nvn -0.744526 0.196537 0.638008\nvn -0.674362 0.377412 0.634662\nvn -0.614045 0.390764 0.68575\nvn -0.686011 0.219427 0.693716\nvn -0.624456 0.24751 0.740806\nvn -0.555583 0.407232 0.724907\nvn -0.734159 0.0355062 0.678049\nvn -0.751463 -0.157154 0.640785\nvn -0.703748 -0.127933 0.698836\nvn -0.677434 0.0682109 0.732414\nvn -0.622499 0.103457 0.775752\nvn -0.571673 0.27593 0.772692\nvn -0.652844 -0.0934075 0.751712\nvn -0.605855 -0.0590545 0.79338\nvn -0.579029 0.133941 0.80423\nvn -0.511761 0.423876 0.747282\nvn -0.537926 0.298399 0.788412\nvn -0.491409 0.436564 0.753611\nvn -0.483275 0.439919 0.756912\nvn -0.517066 0.308767 0.798314\nvn -0.494928 0.307829 0.812581\nvn -0.470483 0.433998 0.768304\nvn -0.546305 0.152464 0.823593\nvn -0.566943 -0.016768 0.823587\nvn -0.534547 -0.0208533 0.844881\nvn -0.514901 0.159411 0.842298\nvn -0.482755 0.158377 0.861316\nvn -0.469377 0.299825 0.830536\nvn -0.497207 -0.00845482 0.867591\nvn -0.459375 -0.001891 0.88824\nvn -0.447875 0.153224 0.880869\nvn -0.451285 0.422795 0.785867\nvn -0.438207 0.289053 0.85113\nvn -0.423541 0.410245 0.807658\nvn -0.387383 0.399575 0.830828\nvn -0.400231 0.279188 0.872851\nvn -0.356247 0.27105 0.894215\nvn -0.345017 0.391321 0.85313\nvn -0.408012 0.147438 0.900993\nvn -0.418774 0.00133008 0.90809\nvn -0.372989 0.00252921 0.927832\nvn -0.362549 0.142048 0.921076\nvn -0.311181 0.137385 0.940368\nvn -0.305995 0.264676 0.914502\nvn -0.321748 0.00238364 0.946822\nvn -0.259132 -0.00803075 0.965809\nvn -0.253762 0.133805 0.957967\nvn -0.296266 0.385248 0.873963\nvn -0.249351 0.260129 0.932822\nvn -0.241043 0.381148 0.892538\nvn -0.182063 0.378769 0.907407\nvn -0.188823 0.25739 0.94768\nvn -0.126686 0.276613 0.952594\nvn -0.121484 0.397577 0.909491\nvn -0.19253 0.131558 0.972432\nvn -0.193507 0.000956962 0.981099\nvn -0.130785 0.000440131 0.991411\nvn -0.125368 0.139452 0.982261\nvn -0.0596412 0.142704 0.987967\nvn -0.0647446 0.255688 0.964589\nvn 0.00998752 2.91447e-05 0.99995\nvn -0.00114576 0.129985 0.991515\nvn -0.0619932 0.00957265 0.998031\nvn -0.0621954 0.377483 0.923925\nvn -0.00117306 0.255738 0.966745\nvn -0.00115099 0.377594 0.925971\nvn 0.0599331 0.377744 0.923968\nvn 0.125698 0.255973 0.958477\nvn 0.120368 0.377873 0.918\nvn 0.062595 0.255855 0.964687\nvn 0.0642384 0.130037 0.989426\nvn 0.140944 -1.73837e-05 0.990017\nvn 0.128956 0.130106 0.983078\nvn 0.0757955 -6.79932e-06 0.997123\nvn 0.19302 0.130178 0.972521\nvn 0.188149 0.256081 0.948168\nvn 0.265049 0.0132424 0.964144\nvn 0.256438 0.130236 0.957746\nvn 0.205445 -1.33322e-05 0.978669\nvn 0.180168 0.377982 0.908113\nvn 0.244698 0.243744 0.938463\nvn 0.24165 0.357993 0.901913\nvn 0.297959 0.378104 0.876503\nvn 0.307353 0.247344 0.918888\nvn 0.367732 0.276805 0.887779\nvn 0.351074 0.39801 0.847546\nvn 0.319618 0.108899 0.941268\nvn 0.315294 -0.0132496 0.948902\nvn 0.382674 -1.29059e-06 0.923884\nvn 0.378256 0.151587 0.913205\nvn 0.438318 0.130283 0.889327\nvn 0.427246 0.256232 0.867067\nvn 0.50001 0 0.86602\nvn 0.497035 0.108914 0.860868\nvn 0.451921 0 0.892058\nvn 0.409099 0.378124 0.830458\nvn 0.48594 0.235536 0.841656\nvn 0.466855 0.358056 0.808605\nvn 0.514656 0.378118 0.769517\nvn 0.537289 0.256225 0.803535\nvn 0.584977 0.276801 0.762354\nvn 0.558468 0.398005 0.727808\nvn 0.551032 0.130279 0.824252\nvn 0.546598 0 0.837395\nvn 0.608764 0 0.793352\nvn 0.601729 0.151584 0.784184\nvn 0.653553 0.130277 0.745584\nvn 0.637099 0.256224 0.726949\nvn 0.707107 0 0.707107\nvn 0.702901 0.108911 0.702901\nvn 0.667397 0 0.744702\nvn 0.610096 0.378116 0.696284\nvn 0.687214 0.23553 0.687214\nvn 0.660227 0.358051 0.660227\nvn 0.686992 0.397887 0.608052\nvn 0.762019 0.254717 0.595354\nvn 0.723765 0.37737 0.577716\nvn 0.725147 0.264825 0.635633\nvn 0.743307 0.130077 0.656182\nvn 0.747112 -0.00971215 0.664627\nvn 0.785583 -0.00220843 0.618753\nvn 0.777837 0.128784 0.615129\nvn 0.805507 0.125254 0.579198\nvn 0.786871 0.251788 0.563415\nvn 0.827253 0.118312 0.549231\nvn 0.837437 -0.0178666 0.546242\nvn 0.814517 -0.00747617 0.580091\nvn 0.747354 0.375793 0.547943\nvn 0.805971 0.246426 0.538224\nvn 0.764956 0.372794 0.52523\nvn 0.779878 0.365207 0.508344\nvn 0.85687 0.207009 0.472145\nvn 0.813798 0.323105 0.483049\nvn 0.82687 0.235796 0.510574\nvn 0.849137 0.107216 0.517175\nvn 0.876074 0.0912406 0.473465\nvn 0.884853 -0.056181 0.46247\nvn 0.859437 -0.034509 0.510076\nvn 0.882568 0.191671 0.429343\nvn 0.9068 0.0690116 0.415875\nvn 0.93917 0.0414544 0.340942\nvn 0.939661 -0.107388 0.324815\nvn 0.912282 -0.0811244 0.401448\nvn 0.839062 0.299895 0.453915\nvn 0.89118 0.210468 0.401873\nvn 0.921055 0.149602 0.359552\nvn -0.897567 -0.243195 0.367736\nvn -0.83884 -0.39145 0.378304\nvn -0.855878 -0.411376 0.313439\nvn -0.793454 -0.507984 0.335236\nvn -0.778037 -0.491957 0.390687\nvn -0.818604 -0.374232 0.435704\nvn -0.762306 -0.60102 0.240132\nvn -0.752493 -0.587722 0.297217\nvn -0.806223 -0.524492 0.273701\nvn -0.720653 -0.639646 0.267416\nvn -0.709108 -0.629755 0.317134\nvn -0.740338 -0.573921 0.350021\nvn -0.725196 -0.560842 0.399433\nvn -0.759994 -0.476947 0.441509\nvn -0.694262 -0.62052 0.364631\nvn -0.675296 -0.612782 0.410454\nvn -0.706329 -0.549436 0.446339\nvn -0.795798 -0.358784 0.487832\nvn -0.73901 -0.4631 0.489288\nvn -0.770343 -0.343499 0.537196\nvn -0.738965 -0.326178 0.589524\nvn -0.712511 -0.449825 0.538503\nvn -0.678833 -0.434281 0.592103\nvn -0.699645 -0.304214 0.646491\nvn -0.682027 -0.539799 0.493413\nvn -0.651358 -0.60663 0.455778\nvn -0.622669 -0.600064 0.502202\nvn -0.651642 -0.529307 0.543321\nvn -0.617352 -0.515047 0.594645\nvn -0.640394 -0.41367 0.647126\nvn -0.590975 -0.590926 0.54914\nvn -0.560188 -0.56519 0.605599\nvn -0.582325 -0.479485 0.656499\nvn -0.655415 -0.276259 0.702931\nvn -0.599838 -0.366634 0.711178\nvn -0.613331 -0.234275 0.754282\nvn -0.571602 -0.207321 0.793907\nvn -0.561277 -0.358891 0.745765\nvn -0.530474 -0.189728 0.826196\nvn -0.52328 -0.332131 0.784772\nvn -0.54535 -0.471579 0.69297\nvn -0.524233 -0.560436 0.641164\nvn -0.509655 -0.448354 0.734324\nvn -0.489943 -0.543924 0.681251\nvn -0.485295 -0.308618 0.818073\nvn -0.473008 -0.427044 0.770648\nvn -0.454012 -0.528694 0.717186\nvn -0.434554 -0.409509 0.802163\nvn -0.415744 -0.516259 0.748755\nvn -0.491599 -0.169546 0.854157\nvn -0.452385 -0.154471 0.878343\nvn -0.446361 -0.289774 0.846636\nvn -0.410233 -0.143964 0.900546\nvn -0.404081 -0.276096 0.872061\nvn -0.362936 -0.137236 0.921653\nvn -0.356723 -0.266922 0.895266\nvn -0.392377 -0.396686 0.829867\nvn -0.373836 -0.507387 0.776405\nvn -0.345405 -0.388051 0.854466\nvn -0.327801 -0.501618 0.800579\nvn -0.304446 -0.261243 0.916005\nvn -0.293967 -0.382685 0.875863\nvn -0.278016 -0.498212 0.821275\nvn -0.238379 -0.379622 0.893903\nvn -0.219942 -0.504485 0.834937\nvn -0.310429 -0.133333 0.941199\nvn -0.258405 -0.144342 0.955192\nvn -0.247446 -0.257998 0.933921\nvn -0.202149 -0.130244 0.970656\nvn -0.187568 -0.25625 0.948238\nvn -0.134004 -0.138844 0.981206\nvn -0.125886 -0.276082 0.952854\nvn -0.180328 -0.377995 0.908076\nvn -0.160717 -0.495389 0.853674\nvn -0.120436 -0.397262 0.909768\nvn -0.107843 -0.506782 0.855302\nvn -0.0644196 -0.255447 0.964675\nvn -0.0617397 -0.377337 0.924016\nvn -0.000941789 -0.377551 0.925988\nvn -0.000863176 -0.495554 0.868576\nvn -0.0579571 -0.495356 0.866755\nvn -0.066051 -0.129707 0.98935\nvn -0.00107117 -0.129887 0.991528\nvn -0.00102144 -0.255657 0.966767\nvn 0.0642705 -0.130031 0.989425\nvn 0.128961 -0.130134 0.983074\nvn 0.12571 -0.255998 0.958468\nvn 0.0626618 -0.255852 0.964683\nvn 0.0600259 -0.37775 0.92396\nvn 0.120385 -0.377895 0.917988\nvn 0.112879 -0.495828 0.861053\nvn 0.0562913 -0.495719 0.866657\nvn 0.188133 -0.256106 0.948164\nvn 0.180146 -0.378002 0.908109\nvn 0.241628 -0.358004 0.901914\nvn 0.227538 -0.476546 0.849194\nvn 0.168913 -0.495901 0.851792\nvn 0.193011 -0.130206 0.972519\nvn 0.25718 -0.108885 0.96021\nvn 0.251467 -0.235483 0.938782\nvn 0.31888 -0.130269 0.9388\nvn 0.310984 -0.256213 0.915229\nvn 0.378253 -0.151588 0.913206\nvn 0.367727 -0.276807 0.887781\nvn 0.297946 -0.378108 0.876506\nvn 0.279581 -0.495971 0.822099\nvn 0.351068 -0.398011 0.847549\nvn 0.328007 -0.515131 0.791866\nvn 0.427245 -0.256232 0.867068\nvn 0.409098 -0.378124 0.830458\nvn 0.466855 -0.358056 0.808605\nvn 0.439568 -0.476579 0.761349\nvn 0.383625 -0.495978 0.778998\nvn 0.438318 -0.130283 0.889328\nvn 0.497035 -0.108913 0.860868\nvn 0.48594 -0.235535 0.841656\nvn 0.551032 -0.130279 0.824252\nvn 0.537289 -0.256225 0.803535\nvn 0.601729 -0.151584 0.784184\nvn 0.584977 -0.2768 0.762354\nvn 0.514656 -0.378118 0.769517\nvn 0.482825 -0.495974 0.721727\nvn 0.558469 -0.398006 0.727808\nvn 0.521778 -0.515127 0.679994\nvn 0.637099 -0.256224 0.726949\nvn 0.610096 -0.378116 0.696284\nvn 0.660227 -0.358051 0.660227\nvn 0.621641 -0.476576 0.621641\nvn 0.572172 -0.495973 0.653169\nvn 0.653553 -0.130277 0.745584\nvn 0.702901 -0.108911 0.702901\nvn 0.687214 -0.23553 0.687214\nvn 0.741668 -0.151912 0.653338\nvn 0.780092 -0.132953 0.611376\nvn 0.761845 -0.258887 0.593776\nvn 0.721424 -0.277112 0.634631\nvn 0.689115 -0.398246 0.60541\nvn 0.730965 -0.380287 0.566632\nvn 0.686829 -0.497257 0.530096\nvn 0.644151 -0.515253 0.565317\nvn 0.791903 -0.265574 0.549873\nvn 0.761058 -0.385882 0.521426\nvn 0.784864 -0.397201 0.475626\nvn 0.740987 -0.507938 0.439247\nvn 0.716606 -0.500745 0.48552\nvn 0.809785 -0.139522 0.569896\nvn 0.833189 -0.152592 0.531518\nvn 0.815475 -0.278973 0.507123\nvn 0.85395 -0.173594 0.490546\nvn 0.875656 -0.200345 0.439419\nvn 0.85221 -0.3275 0.408023\nvn 0.834621 -0.300522 0.461621\nvn 0.803076 -0.415477 0.42714\nvn 0.817859 -0.438155 0.372996\nvn 0.774429 -0.534574 0.338364\nvn 0.759812 -0.519758 0.390559\nvn 0.868137 -0.355881 0.345959\nvn 0.82992 -0.461472 0.31349\nvn 0.840309 -0.481641 0.248804\nvn 0.795194 -0.562921 0.225357\nvn 0.785813 -0.54982 0.283188\nvn 0.897356 -0.229564 0.376898\nvn 0.917911 -0.257663 0.301744\nvn 0.882505 -0.381469 0.275074\nvn -0.69584 -0.691248 0.194894\nvn -0.686071 -0.685744 0.243028\nvn -0.729757 -0.649055 0.214902\nvn -0.673594 -0.680156 0.289239\nvn -0.619966 -0.740465 0.259527\nvn -0.632994 -0.742914 0.217709\nvn -0.643331 -0.745425 0.174548\nvn -0.559754 -0.806704 0.189482\nvn -0.570021 -0.807434 0.152075\nvn -0.547051 -0.806043 0.225898\nvn -0.455749 -0.870252 0.186961\nvn -0.466933 -0.870266 0.156879\nvn -0.60383 -0.738406 0.300243\nvn -0.53174 -0.805537 0.261462\nvn -0.513786 -0.805097 0.296382\nvn -0.427259 -0.870255 0.245166\nvn -0.442502 -0.870279 0.216349\nvn -0.657741 -0.675187 0.333917\nvn -0.584325 -0.736792 0.34015\nvn -0.637961 -0.671212 0.377466\nvn -0.614103 -0.668025 0.420261\nvn -0.561682 -0.735327 0.37922\nvn -0.536593 -0.733301 0.417538\nvn -0.586812 -0.664313 0.462968\nvn -0.493553 -0.804464 0.330519\nvn -0.47156 -0.803348 0.363682\nvn -0.392113 -0.869477 0.300427\nvn -0.410353 -0.870019 0.27327\nvn -0.509655 -0.730173 0.455083\nvn -0.448004 -0.801592 0.395906\nvn -0.433075 -0.786868 0.439642\nvn -0.363908 -0.856446 0.366158\nvn -0.372536 -0.868618 0.32668\nvn -0.557213 -0.658867 0.505378\nvn -0.531317 -0.638048 0.557312\nvn -0.488959 -0.712801 0.502825\nvn -0.494021 -0.64038 0.588096\nvn -0.451203 -0.71968 0.527708\nvn -0.460742 -0.630574 0.624574\nvn -0.419893 -0.714334 0.559837\nvn -0.395891 -0.796039 0.457813\nvn -0.328434 -0.866004 0.377052\nvn -0.367672 -0.793393 0.485124\nvn -0.304473 -0.864865 0.399129\nvn -0.386598 -0.709639 0.589028\nvn -0.337597 -0.791171 0.509977\nvn -0.278952 -0.863949 0.419258\nvn -0.299853 -0.795155 0.527084\nvn -0.242691 -0.874513 0.419914\nvn -0.42554 -0.621694 0.65758\nvn -0.387934 -0.614668 0.686797\nvn -0.351033 -0.706103 0.614976\nvn -0.347178 -0.609936 0.712352\nvn -0.307548 -0.710227 0.633239\nvn -0.298103 -0.61418 0.730697\nvn -0.265351 -0.711901 0.65022\nvn -0.26416 -0.796701 0.543586\nvn -0.236421 -0.788645 0.567577\nvn -0.194428 -0.863092 0.466123\nvn -0.224166 -0.863144 0.452474\nvn -0.230247 -0.702704 0.673196\nvn -0.199138 -0.788681 0.581658\nvn -0.160421 -0.788882 0.593237\nvn -0.131727 -0.863372 0.487069\nvn -0.163584 -0.863204 0.477619\nvn -0.248511 -0.605517 0.756037\nvn -0.200258 -0.615404 0.762348\nvn -0.185678 -0.702667 0.686864\nvn -0.156452 -0.605035 0.780676\nvn -0.105019 -0.605008 0.789263\nvn -0.0938616 -0.702889 0.705079\nvn -0.13994 -0.702753 0.697535\nvn -0.120857 -0.789072 0.602295\nvn -0.081051 -0.789229 0.608727\nvn -0.0666015 -0.863607 0.499747\nvn -0.0992592 -0.863509 0.49447\nvn -0.0474526 -0.703045 0.70956\nvn -0.0409927 -0.789355 0.612567\nvn -0.00449916 -0.781323 0.624111\nvn -3.81806e-05 -0.85219 0.523232\nvn -0.033742 -0.863678 0.502913\nvn -0.0531224 -0.605139 0.794345\nvn -0.000775455 -0.605315 0.795986\nvn -0.000707385 -0.703184 0.711008\nvn 0.0515635 -0.605434 0.794223\nvn 0.103394 -0.605501 0.789099\nvn 0.0884171 -0.709835 0.698796\nvn 0.0421381 -0.693989 0.718751\nvn 0.0380437 -0.783715 0.619954\nvn 0.0336597 -0.863751 0.502793\nvn 0.07784 -0.802719 0.591255\nvn 0.0632307 -0.874853 0.480243\nvn 0.138113 -0.703317 0.69733\nvn 0.119106 -0.78952 0.602057\nvn 0.16328 -0.775941 0.609307\nvn 0.135417 -0.852223 0.50535\nvn 0.0976224 -0.863757 0.494362\nvn 0.154728 -0.605538 0.78063\nvn 0.209336 -0.588154 0.781187\nvn 0.187888 -0.687835 0.701128\nvn 0.256325 -0.605562 0.753388\nvn 0.229079 -0.703317 0.672955\nvn 0.299447 -0.622677 0.722914\nvn 0.266182 -0.718471 0.642609\nvn 0.197901 -0.789511 0.580953\nvn 0.162651 -0.86375 0.476948\nvn 0.228224 -0.802709 0.550974\nvn 0.185374 -0.874846 0.447528\nvn 0.313881 -0.703314 0.637831\nvn 0.270868 -0.789509 0.550733\nvn 0.315407 -0.775934 0.546301\nvn 0.261594 -0.852218 0.453093\nvn 0.222247 -0.863749 0.452266\nvn 0.351489 -0.605562 0.713968\nvn 0.404373 -0.588163 0.700391\nvn 0.362936 -0.687832 0.628622\nvn 0.442574 -0.60556 0.661382\nvn 0.39544 -0.703313 0.590744\nvn 0.476345 -0.622674 0.620784\nvn 0.42343 -0.718469 0.551824\nvn 0.341516 -0.789508 0.509945\nvn 0.280551 -0.863749 0.418604\nvn 0.363048 -0.802708 0.473134\nvn 0.294885 -0.874846 0.384302\nvn 0.468268 -0.703313 0.534861\nvn 0.404178 -0.789508 0.461862\nvn 0.446053 -0.775934 0.446053\nvn 0.369949 -0.852217 0.36995\nvn 0.331729 -0.863749 0.379334\nvn 0.5243 -0.605559 0.598671\nvn 0.571868 -0.588161 0.571868\nvn 0.513268 -0.687831 0.513268\nvn 0.588241 -0.622728 0.515929\nvn 0.63026 -0.606138 0.485149\nvn 0.563414 -0.703498 0.433192\nvn 0.52298 -0.718485 0.458553\nvn 0.451253 -0.79747 0.400514\nvn 0.379334 -0.863749 0.331729\nvn 0.479116 -0.795229 0.371564\nvn 0.384302 -0.874846 0.294885\nvn 0.589848 -0.704059 0.39545\nvn 0.509792 -0.789627 0.341468\nvn 0.537728 -0.781804 0.315644\nvn 0.453094 -0.852218 0.261594\nvn 0.418604 -0.863749 0.280551\nvn 0.658886 -0.607767 0.443271\nvn 0.683367 -0.61117 0.39935\nvn 0.613232 -0.705255 0.355757\nvn 0.703294 -0.616842 0.353389\nvn 0.71927 -0.624049 0.305309\nvn 0.649801 -0.709925 0.271598\nvn 0.633178 -0.707286 0.314374\nvn 0.546622 -0.790201 0.277104\nvn 0.452267 -0.863748 0.222247\nvn 0.557665 -0.796246 0.234528\nvn 0.447529 -0.874845 0.185373\nvn 0.663474 -0.712725 0.227652\nvn 0.578708 -0.7913 0.197333\nvn 0.598142 -0.784222 0.164993\nvn 0.50536 -0.852217 0.135411\nvn 0.476952 -0.863749 0.162649\nvn 0.732016 -0.631556 0.255517\nvn 0.742385 -0.63808 0.204251\nvn 0.674622 -0.715206 0.182666\nvn -0.469127 -0.874644 0.122135\nvn -0.362414 -0.924576 0.117535\nvn -0.357794 -0.929185 0.0927284\nvn -0.248251 -0.96504 0.0840828\nvn -0.353783 -0.924674 0.140768\nvn -0.241944 -0.965132 0.099912\nvn -0.253469 -0.964961 0.0678513\nvn -0.131398 -0.990694 0.0354875\nvn -0.128567 -0.990731 0.0438467\nvn -0.00192617 -0.999997 0.00118268\nvn -0.125167 -0.990773 0.0519736\nvn -0.00166496 -0.999998 0.00119049\nvn -0.234603 -0.965224 0.115345\nvn -0.121235 -0.990817 0.0598681\nvn -0.00139111 -0.999998 0.00117056\nvn -0.116796 -0.990857 0.0675379\nvn -0.00111735 -0.999999 0.00112796\nvn -0.343586 -0.924788 0.163449\nvn -0.33189 -0.924875 0.18562\nvn -0.226284 -0.965293 0.130405\nvn -0.3189 -0.924862 0.207203\nvn -0.217137 -0.96532 0.144942\nvn -0.304867 -0.924717 0.227935\nvn -0.20723 -0.965311 0.158841\nvn -0.111923 -0.99089 0.0748967\nvn -0.00086338 -0.999999 0.00104897\nvn -0.106638 -0.99092 0.0818908\nvn -0.000624169 -0.999999 0.000946796\nvn -0.196513 -0.965276 0.17212\nvn -0.100925 -0.990948 0.0885271\nvn -0.00040165 -1 0.000822784\nvn -0.0947673 -0.990975 0.0948064\nvn -0.000194888 -1 0.000677097\nvn -0.289753 -0.924448 0.247868\nvn -0.277597 -0.92045 0.275159\nvn -0.184925 -0.965227 0.184769\nvn -0.25268 -0.923478 0.288688\nvn -0.172519 -0.965177 0.196649\nvn -0.233849 -0.923112 0.305253\nvn -0.159367 -0.965137 0.207636\nvn -0.0882089 -0.991002 0.100671\nvn -4.80555e-06 -1 0.000512173\nvn -0.0812884 -0.991029 0.106082\nvn 0.000181895 -1 0.000351048\nvn -0.145462 -0.965116 0.217696\nvn -0.0740125 -0.991056 0.111039\nvn 0.000362268 -1 0.000199637\nvn -0.0663795 -0.991083 0.115538\nvn 0.000536322 -1 6.54344e-05\nvn -0.21385 -0.922829 0.320398\nvn -0.189013 -0.927677 0.322007\nvn -0.130803 -0.965119 0.226793\nvn -0.174759 -0.922624 0.343838\nvn -0.115532 -0.965145 0.234834\nvn -0.151943 -0.922625 0.35451\nvn -0.0998089 -0.965185 0.241777\nvn -0.0584861 -0.991107 0.119528\nvn 0.000672393 -1 -6.21185e-05\nvn -0.0504109 -0.991127 0.122984\nvn 0.000767232 -1 -0.000181107\nvn -0.0836633 -0.965228 0.247659\nvn -0.0421569 -0.991144 0.125919\nvn 0.000824853 -1 -0.000287202\nvn -0.0337219 -0.991156 0.128344\nvn 0.000849277 -1 -0.000378299\nvn -0.128382 -0.922688 0.363544\nvn -0.104129 -0.922773 0.371007\nvn -0.0671058 -0.965264 0.25251\nvn -0.0793803 -0.922839 0.376917\nvn -0.0503136 -0.965286 0.256304\nvn -0.0544843 -0.922882 0.381209\nvn -0.0334176 -0.965297 0.259009\nvn -0.0251878 -0.991162 0.130242\nvn 0.000838781 -1 -0.000454487\nvn -0.0166041 -0.991165 0.131595\nvn 0.00081651 -1 -0.000513927\nvn -0.0164106 -0.965301 0.260623\nvn -0.00796485 -0.991165 0.132399\nvn 0.000787552 -1 -0.000563166\nvn 0.000733505 -0.991164 0.132642\nvn 0.000751533 -1 -0.000606831\nvn -0.029431 -0.922909 0.383891\nvn -0.00151437 -0.919276 0.393612\nvn 0.000713462 -0.965302 0.261134\nvn 0.0259017 -0.922943 0.384065\nvn 0.0178147 -0.965301 0.26053\nvn 0.0465644 -0.927926 0.369844\nvn 0.0347717 -0.9653 0.258817\nvn 0.00941507 -0.991163 0.132317\nvn 0.000701976 -1 -0.000649329\nvn 0.018024 -0.991162 0.131427\nvn 0.000654679 -1 -0.000690893\nvn 0.0515857 -0.9653 0.255996\nvn 0.0265619 -0.991162 0.12997\nvn 0.000609226 -1 -0.000732113\nvn 0.0350266 -0.991162 0.127947\nvn 0.000563639 -1 -0.000771373\nvn 0.0709315 -0.922935 0.378364\nvn 0.1004 -0.919284 0.380575\nvn 0.0682566 -0.965301 0.252062\nvn 0.124415 -0.922941 0.364282\nvn 0.0846277 -0.9653 0.247052\nvn 0.140697 -0.927923 0.3452\nvn 0.10057 -0.965299 0.241004\nvn 0.0433337 -0.991162 0.12538\nvn 0.000507383 -1 -0.000805042\nvn 0.0514228 -0.991162 0.122286\nvn 0.000452239 -1 -0.00083594\nvn 0.116084 -0.9653 0.233925\nvn 0.0592947 -0.991162 0.118667\nvn 0.000398112 -1 -0.000864478\nvn 0.0669485 -0.991162 0.114522\nvn 0.000344795 -1 -0.000891\nvn 0.166443 -0.922932 0.347122\nvn 0.195478 -0.919282 0.341627\nvn 0.13117 -0.9653 0.225809\nvn 0.214458 -0.92294 0.31967\nvn 0.145686 -0.9653 0.216731\nvn 0.225247 -0.927923 0.297023\nvn 0.159519 -0.965299 0.206763\nvn 0.0743079 -0.991162 0.109892\nvn 0.000281753 -1 -0.000908914\nvn 0.0813205 -0.991162 0.10481\nvn 0.000220504 -1 -0.000924466\nvn 0.172673 -0.9653 0.195909\nvn 0.0879877 -0.991162 0.0992773\nvn 0.000160813 -1 -0.00093805\nvn 0.0943078 -0.991162 0.0932926\nvn 0.000102414 -1 -0.00094989\nvn 0.250613 -0.922932 0.292215\nvn 0.277237 -0.919282 0.279393\nvn 0.185144 -0.9653 0.184165\nvn 0.289887 -0.92294 0.253272\nvn 0.196816 -0.9653 0.171639\nvn 0.294447 -0.927923 0.228604\nvn 0.207598 -0.965299 0.158431\nvn 0.100218 -0.991162 0.0869152\nvn 3.6855e-05 -1 -0.000950903\nvn 0.105676 -0.991162 0.0801912\nvn -2.63511e-05 -1 -0.000950094\nvn 0.217494 -0.9653 0.144544\nvn 0.110684 -0.991162 0.0731218\nvn -8.74339e-05 -1 -0.000947708\nvn 0.115239 -0.991162 0.0657046\nvn -0.000146878 -1 -0.000944008\nvn 0.317704 -0.922932 0.217395\nvn 0.340103 -0.919282 0.198119\nvn 0.2265 -0.965301 0.129972\nvn 0.345562 -0.92294 0.169614\nvn 0.234533 -0.9653 0.114851\nvn 0.343582 -0.927923 0.144606\nvn 0.241529 -0.965299 0.099302\nvn 0.119298 -0.991162 0.0580147\nvn -0.000210497 -1 -0.000928044\nvn 0.12283 -0.991162 0.0501073\nvn -0.000271285 -1 -0.000910869\nvn 0.247493 -0.9653 0.083326\nvn 0.125837 -0.991162 0.0419826\nvn -0.000329771 -1 -0.000892783\nvn 0.128318 -0.991162 0.0336396\nvn -0.000386208 -1 -0.000873812\nvn 0.363145 -0.922932 0.12776\nvn 0.379791 -0.919282 0.103343\nvn 0.252421 -0.965301 0.06692\nvn -0.00215863 -0.999997 0.00114826\nvn 0.127929 -0.991214 -0.0335932\nvn 0.125532 -0.991202 -0.0419551\nvn 0.247978 -0.965161 -0.0834902\nvn 0.122619 -0.991187 -0.0501217\nvn 0.242035 -0.96515 -0.0995253\nvn 0.252886 -0.96517 -0.067041\nvn 0.372905 -0.922549 -0.0992179\nvn 0.365598 -0.92255 -0.123447\nvn 0.47643 -0.863087 -0.167615\nvn 0.356765 -0.922548 -0.147052\nvn 0.464471 -0.863094 -0.198331\nvn 0.235063 -0.965136 -0.115145\nvn 0.346413 -0.922544 -0.170033\nvn 0.450524 -0.863099 -0.228229\nvn 0.334533 -0.922537 -0.192388\nvn 0.425753 -0.869845 -0.249208\nvn 0.119187 -0.991171 -0.0580913\nvn 0.115227 -0.991154 -0.0658577\nvn 0.227055 -0.96512 -0.130346\nvn 0.11076 -0.991136 -0.073361\nvn 0.218066 -0.965102 -0.145001\nvn 0.105827 -0.991119 -0.0805231\nvn 0.208182 -0.965085 -0.158971\nvn 0.321219 -0.922525 -0.213929\nvn 0.420219 -0.863106 -0.280112\nvn 0.306592 -0.922513 -0.234459\nvn 0.40598 -0.85819 -0.31415\nvn 0.197402 -0.965069 -0.172262\nvn 0.290652 -0.922503 -0.253986\nvn 0.376124 -0.863079 -0.337083\nvn 0.273394 -0.922494 -0.272509\nvn 0.346777 -0.869816 -0.350949\nvn 0.10043 -0.991103 -0.0873469\nvn 0.0945645 -0.991086 -0.0938362\nvn 0.185718 -0.965054 -0.184876\nvn 0.0882822 -0.99107 -0.0999365\nvn 0.173233 -0.965037 -0.196708\nvn 0.0816526 -0.991053 -0.105577\nvn 0.160066 -0.965019 -0.207645\nvn 0.254962 -0.922478 -0.289876\nvn 0.333446 -0.863072 -0.37937\nvn 0.235522 -0.922463 -0.305927\nvn 0.310891 -0.858144 -0.408576\nvn 0.14622 -0.965004 -0.217686\nvn 0.215079 -0.92245 -0.320665\nvn 0.276114 -0.863026 -0.423021\nvn 0.193627 -0.922442 -0.334081\nvn 0.244177 -0.869765 -0.428819\nvn 0.0746766 -0.991038 -0.110757\nvn 0.0673533 -0.991025 -0.115466\nvn 0.131692 -0.964992 -0.226822\nvn 0.0597169 -0.991015 -0.119676\nvn 0.116582 -0.964982 -0.234984\nvn 0.0518334 -0.991009 -0.123351\nvn 0.101024 -0.964977 -0.242101\nvn 0.171331 -0.922435 -0.346063\nvn 0.223931 -0.863028 -0.452811\nvn 0.148391 -0.922432 -0.356509\nvn 0.194564 -0.858117 -0.475163\nvn 0.0850231 -0.964976 -0.248179\nvn 0.124813 -0.922434 -0.365426\nvn 0.157227 -0.863019 -0.480081\nvn 0.100592 -0.922438 -0.372812\nvn 0.124875 -0.869769 -0.477398\nvn 0.0437076 -0.991004 -0.126492\nvn 0.0353396 -0.991002 -0.129098\nvn 0.068577 -0.964976 -0.253216\nvn 0.0267993 -0.991001 -0.131147\nvn 0.0518244 -0.964975 -0.257171\nvn 0.0181826 -0.991 -0.13262\nvn 0.0349259 -0.964975 -0.260006\nvn 0.0759329 -0.922438 -0.378606\nvn 0.0991006 -0.863036 -0.495327\nvn 0.0510591 -0.922438 -0.382755\nvn 0.0649511 -0.858126 -0.509314\nvn 0.0178824 -0.964976 -0.261729\nvn 0.0259707 -0.922439 -0.385269\nvn 0.0276138 -0.863025 -0.504406\nvn 0.000666188 -0.922441 -0.386138\nvn -0.00294167 -0.869772 -0.493446\nvn 0.00948953 -0.991001 -0.133521\nvn 0.00072051 -0.991001 -0.133852\nvn 0.000692456 -0.964977 -0.262334\nvn -0.00806077 -0.991001 -0.13361\nvn -0.0165089 -0.964976 -0.261817\nvn -0.0167646 -0.991001 -0.132799\nvn -0.0335617 -0.964976 -0.260183\nvn -0.0246488 -0.922439 -0.385355\nvn -0.0324761 -0.863037 -0.504095\nvn -0.0497471 -0.922438 -0.382927\nvn -0.0690822 -0.858127 -0.50877\nvn -0.0504688 -0.964976 -0.257436\nvn -0.0746298 -0.922439 -0.378862\nvn -0.103877 -0.863025 -0.494366\nvn -0.0992963 -0.922441 -0.373153\nvn -0.130554 -0.869772 -0.47587\nvn -0.0253941 -0.991001 -0.131421\nvn -0.033949 -0.991002 -0.129473\nvn -0.0672286 -0.964977 -0.253573\nvn -0.042367 -0.991001 -0.126969\nvn -0.0837093 -0.964976 -0.248623\nvn -0.0505648 -0.991001 -0.123934\nvn -0.0997586 -0.964976 -0.242631\nvn -0.123546 -0.922439 -0.365845\nvn -0.161839 -0.863037 -0.478513\nvn -0.147161 -0.922438 -0.357003\nvn -0.198407 -0.858127 -0.473554\nvn -0.115378 -0.964976 -0.235602\nvn -0.170143 -0.922439 -0.346637\nvn -0.228289 -0.863025 -0.450636\nvn -0.192492 -0.922441 -0.334738\nvn -0.24927 -0.869772 -0.425865\nvn -0.0585434 -0.991001 -0.12037\nvn -0.0663023 -0.991002 -0.116275\nvn -0.130567 -0.964977 -0.227533\nvn -0.0737855 -0.991001 -0.111678\nvn -0.145205 -0.964976 -0.218486\nvn -0.0809183 -0.991001 -0.106624\nvn -0.159157 -0.964976 -0.208544\nvn -0.214024 -0.922439 -0.321403\nvn -0.280173 -0.863037 -0.420321\nvn -0.234546 -0.922438 -0.306751\nvn -0.314212 -0.858127 -0.406066\nvn -0.172425 -0.964976 -0.197712\nvn -0.254062 -0.922439 -0.290789\nvn -0.337143 -0.863025 -0.376195\nvn -0.27257 -0.922441 -0.273512\nvn -0.350999 -0.869772 -0.346839\nvn -0.0877026 -0.991001 -0.101116\nvn -0.0941372 -0.991002 -0.0951524\nvn -0.185008 -0.964977 -0.185987\nvn -0.100176 -0.991001 -0.0887752\nvn -0.196806 -0.964976 -0.173459\nvn -0.105757 -0.991001 -0.0820477\nvn -0.207709 -0.964976 -0.160245\nvn -0.289916 -0.922439 -0.255058\nvn -0.379413 -0.863037 -0.333485\nvn -0.305947 -0.922438 -0.235594\nvn -0.408603 -0.858126 -0.310906\nvn -0.217722 -0.964976 -0.146348\nvn -0.320667 -0.922439 -0.215125\nvn -0.423022 -0.863025 -0.276118\nvn -0.334072 -0.922441 -0.193646\nvn -0.428807 -0.869772 -0.244175\nvn -0.110885 -0.991001 -0.0749716\nvn -0.115557 -0.991002 -0.0675456\nvn -0.226841 -0.964977 -0.131766\nvn -0.119739 -0.991001 -0.0598228\nvn -0.234994 -0.964976 -0.116611\nvn -0.123389 -0.991001 -0.0518798\nvn -0.242106 -0.964976 -0.101026\nvn -0.346052 -0.922439 -0.171331\nvn -0.452797 -0.863037 -0.223923\nvn -0.356498 -0.922438 -0.148381\nvn -0.475149 -0.858126 -0.194558\nvn -0.248181 -0.964976 -0.0850112\nvn -0.365419 -0.922439 -0.1248\nvn -0.480072 -0.863025 -0.157223\nvn -0.372808 -0.922441 -0.100583\nvn -0.477393 -0.869772 -0.124872\nvn -0.126511 -0.991001 -0.0437179\nvn -0.129101 -0.991002 -0.0353358\nvn -0.253215 -0.964977 -0.0685649\nvn 0.486398 -0.863076 -0.136077\nvn 0.582053 -0.788599 -0.198309\nvn 0.593837 -0.788561 -0.159778\nvn 0.567844 -0.788629 -0.235835\nvn 0.657522 -0.702247 -0.272972\nvn 0.673998 -0.702159 -0.229562\nvn 0.687676 -0.702056 -0.184984\nvn 0.754281 -0.604164 -0.256994\nvn 0.769645 -0.603926 -0.207172\nvn 0.735801 -0.604374 -0.305498\nvn 0.802525 -0.494732 -0.333457\nvn 0.822727 -0.494309 -0.280676\nvn 0.638261 -0.702319 -0.315232\nvn 0.714223 -0.604549 -0.352712\nvn 0.689521 -0.604681 -0.398649\nvn 0.752045 -0.495356 -0.4348\nvn 0.778974 -0.495087 -0.384822\nvn 0.551221 -0.788653 -0.272366\nvn 0.524466 -0.794382 -0.306418\nvn 0.616191 -0.702374 -0.356342\nvn 0.507419 -0.788654 -0.347206\nvn 0.493275 -0.780546 -0.383963\nvn 0.56441 -0.702413 -0.433656\nvn 0.591501 -0.702402 -0.395928\nvn 0.661901 -0.60476 -0.442891\nvn 0.63161 -0.604797 -0.485067\nvn 0.688971 -0.495602 -0.528865\nvn 0.721955 -0.495523 -0.482948\nvn 0.534926 -0.702412 -0.469544\nvn 0.598653 -0.604798 -0.525198\nvn 0.562999 -0.60477 -0.563281\nvn 0.61425 -0.495556 -0.614102\nvn 0.653085 -0.495607 -0.572584\nvn 0.461949 -0.788668 -0.405717\nvn 0.427325 -0.794369 -0.431707\nvn 0.50303 -0.702398 -0.503585\nvn 0.400331 -0.788615 -0.466714\nvn 0.377165 -0.780487 -0.498585\nvn 0.433055 -0.702327 -0.564978\nvn 0.46898 -0.702364 -0.535483\nvn 0.524925 -0.604712 -0.598979\nvn 0.484744 -0.604646 -0.632002\nvn 0.528953 -0.495343 -0.689089\nvn 0.572759 -0.495458 -0.653045\nvn 0.395259 -0.702295 -0.592074\nvn 0.442457 -0.604584 -0.662352\nvn 0.392182 -0.611889 -0.686866\nvn 0.434388 -0.495128 -0.752433\nvn 0.482835 -0.49523 -0.722231\nvn 0.341259 -0.788599 -0.511521\nvn 0.298795 -0.801819 -0.517502\nvn 0.348349 -0.717443 -0.603265\nvn 0.272413 -0.788577 -0.551304\nvn 0.315258 -0.702253 -0.63832\nvn 0.241853 -0.774964 -0.583898\nvn 0.278179 -0.686737 -0.671571\nvn 0.344503 -0.604452 -0.7183\nvn 0.302831 -0.594033 -0.745264\nvn 0.332298 -0.494964 -0.802863\nvn 0.384053 -0.495034 -0.779387\nvn 0.22846 -0.702234 -0.674294\nvn 0.255776 -0.604435 -0.754478\nvn 0.20274 -0.621549 -0.756686\nvn 0.222014 -0.514036 -0.828539\nvn 0.279138 -0.494919 -0.822883\nvn 0.197205 -0.788576 -0.582458\nvn 0.154657 -0.801816 -0.577211\nvn 0.180292 -0.717416 -0.672911\nvn 0.120429 -0.788581 -0.603022\nvn 0.139272 -0.702236 -0.698189\nvn 0.0824896 -0.774972 -0.626589\nvn 0.0948766 -0.686729 -0.720695\nvn 0.155725 -0.604422 -0.781296\nvn 0.169766 -0.494879 -0.852217\nvn 0.105665 -0.587014 -0.802651\nvn 0.114823 -0.475486 -0.872198\nvn 0.0461692 -0.702237 -0.710445\nvn 0.0517852 -0.604422 -0.79498\nvn -1.64026e-06 -0.621547 -0.783377\nvn -5.65963e-06 -0.514023 -0.857776\nvn 0.0565877 -0.494875 -0.86712\nvn 0.039743 -0.788583 -0.613643\nvn 1.86655e-09 -0.80182 -0.597566\nvn -3.22298e-07 -0.717419 -0.696642\nvn -0.0397439 -0.788583 -0.613642\nvn -0.0461707 -0.702237 -0.710444\nvn -0.0824922 -0.774972 -0.626589\nvn -0.0948809 -0.686731 -0.720693\nvn -0.051791 -0.604424 -0.794978\nvn -0.0566022 -0.49488 -0.867116\nvn -0.105671 -0.587019 -0.802647\nvn -0.114829 -0.475495 -0.872192\nvn -0.13928 -0.702237 -0.698186\nvn -0.15573 -0.604425 -0.781293\nvn -0.202753 -0.621548 -0.756683\nvn -0.222008 -0.514027 -0.828546\nvn -0.169757 -0.494882 -0.852217\nvn -0.120433 -0.788583 -0.60302\nvn -0.154661 -0.80182 -0.577205\nvn -0.180304 -0.717419 -0.672904\nvn -0.197212 -0.788583 -0.582447\nvn -0.228473 -0.702237 -0.674287\nvn -0.241854 -0.774972 -0.583888\nvn -0.278177 -0.686731 -0.671579\nvn -0.25578 -0.604425 -0.754485\nvn -0.279095 -0.494882 -0.82292\nvn -0.30981 -0.587019 -0.747948\nvn -0.336654 -0.475495 -0.812754\nvn -0.315238 -0.702237 -0.638348\nvn -0.352638 -0.604425 -0.714365\nvn -0.391688 -0.621548 -0.678423\nvn -0.428887 -0.514027 -0.742854\nvn -0.384543 -0.494882 -0.779242\nvn -0.272403 -0.788583 -0.551302\nvn -0.298783 -0.80182 -0.517507\nvn -0.348321 -0.717419 -0.603309\nvn -0.34124 -0.788583 -0.511558\nvn -0.395206 -0.702238 -0.592178\nvn -0.384734 -0.774972 -0.501396\nvn -0.442516 -0.686731 -0.576698\nvn -0.442339 -0.604425 -0.662576\nvn -0.482573 -0.494882 -0.722645\nvn -0.492837 -0.587019 -0.642278\nvn -0.535539 -0.475495 -0.697928\nvn -0.469712 -0.702238 -0.535007\nvn -0.525513 -0.604425 -0.598754\nvn -0.55393 -0.621548 -0.55393\nvn -0.606538 -0.514027 -0.606538\nvn -0.573123 -0.494882 -0.653163\nvn -0.405808 -0.788583 -0.462014\nvn -0.422543 -0.80182 -0.422543\nvn -0.4926 -0.717419 -0.4926\nvn -0.462014 -0.788583 -0.405808\nvn -0.535007 -0.702238 -0.469713\nvn -0.501396 -0.774972 -0.384734\nvn -0.576698 -0.686731 -0.442515\nvn -0.598754 -0.604425 -0.525513\nvn -0.653163 -0.494882 -0.573123\nvn -0.642278 -0.587019 -0.492837\nvn -0.697928 -0.475495 -0.535539\nvn -0.592177 -0.702238 -0.395207\nvn -0.662576 -0.604425 -0.442339\nvn -0.678423 -0.621548 -0.391688\nvn -0.742854 -0.514027 -0.428887\nvn -0.722645 -0.494882 -0.482572\nvn -0.511558 -0.788583 -0.34124\nvn -0.517507 -0.80182 -0.298783\nvn -0.603309 -0.717419 -0.348321\nvn -0.551301 -0.788583 -0.272403\nvn -0.638347 -0.702238 -0.315238\nvn -0.583888 -0.774972 -0.241854\nvn -0.671578 -0.686732 -0.278177\nvn -0.714365 -0.604425 -0.352638\nvn -0.779243 -0.494882 -0.384542\nvn -0.747948 -0.587019 -0.30981\nvn -0.812754 -0.475495 -0.336654\nvn -0.674286 -0.702238 -0.228473\nvn -0.754485 -0.604425 -0.25578\nvn -0.756683 -0.621548 -0.202753\nvn -0.828546 -0.514027 -0.222008\nvn -0.82292 -0.494882 -0.279095\nvn -0.582447 -0.788583 -0.197211\nvn -0.577204 -0.80182 -0.154661\nvn -0.672904 -0.717419 -0.180304\nvn 0.839557 -0.493835 -0.22643\nvn 0.876692 -0.376212 -0.299794\nvn 0.894613 -0.375586 -0.24208\nvn 0.855197 -0.376792 -0.355901\nvn 0.896582 -0.254608 -0.362376\nvn 0.91827 -0.25421 -0.303574\nvn 0.936218 -0.253857 -0.243009\nvn 0.957033 -0.129201 -0.259607\nvn 0.938056 -0.128748 -0.321676\nvn 0.915248 -0.128492 -0.381851\nvn 0.871201 -0.255003 -0.419502\nvn 0.888668 -0.128384 -0.440212\nvn 0.862854 -0.11535 -0.492115\nvn 0.830159 -0.37729 -0.410473\nvn 0.801547 -0.377673 -0.463558\nvn 0.841085 -0.24648 -0.48148\nvn 0.769575 -0.377918 -0.514716\nvn 0.734518 -0.378044 -0.56353\nvn 0.767099 -0.255765 -0.588339\nvn 0.803587 -0.255632 -0.537495\nvn 0.830219 -0.128297 -0.542473\nvn 0.793431 -0.128335 -0.594977\nvn 0.727324 -0.255846 -0.636823\nvn 0.75321 -0.12845 -0.645117\nvn 0.709477 -0.128676 -0.692882\nvn 0.696355 -0.378073 -0.610042\nvn 0.655017 -0.37803 -0.654252\nvn 0.684179 -0.255905 -0.682943\nvn 0.610821 -0.377935 -0.695746\nvn 0.564137 -0.377814 -0.73417\nvn 0.589269 -0.255981 -0.766313\nvn 0.638021 -0.255951 -0.726235\nvn 0.662465 -0.129028 -0.737897\nvn 0.612849 -0.12945 -0.779524\nvn 0.537936 -0.255981 -0.803181\nvn 0.560667 -0.129851 -0.817797\nvn 0.501075 -0.121059 -0.856895\nvn 0.514974 -0.377684 -0.769517\nvn 0.463315 -0.377554 -0.801743\nvn 0.48401 -0.255937 -0.836798\nvn 0.40963 -0.377424 -0.830514\nvn 0.354428 -0.377315 -0.855578\nvn 0.370304 -0.255728 -0.893016\nvn 0.427957 -0.255843 -0.866832\nvn 0.439157 -0.130312 -0.888909\nvn 0.380102 -0.130247 -0.915728\nvn 0.311069 -0.255621 -0.915365\nvn 0.319358 -0.130125 -0.938658\nvn 0.256926 -0.130003 -0.957647\nvn 0.297727 -0.377234 -0.876957\nvn 0.234544 -0.38571 -0.89231\nvn 0.250254 -0.255538 -0.933849\nvn 0.173828 -0.389081 -0.904655\nvn 0.183591 -0.264292 -0.946807\nvn 0.121924 -0.357095 -0.926076\nvn 0.120263 -0.243071 -0.962525\nvn 0.193411 -0.129915 -0.972478\nvn 0.129398 -0.129862 -0.983052\nvn 0.063168 -0.25545 -0.964757\nvn 0.0648914 -0.129836 -0.98941\nvn -2.67219e-05 -0.15107 -0.988523\nvn 0.0604198 -0.377138 -0.924184\nvn -1.44194e-05 -0.397014 -0.917813\nvn -2.45775e-05 -0.27599 -0.96116\nvn -0.0604487 -0.377146 -0.924179\nvn -0.0632064 -0.255452 -0.964753\nvn -0.121924 -0.357103 -0.926074\nvn -0.126884 -0.234798 -0.963727\nvn -0.0649106 -0.129821 -0.989411\nvn -0.129762 -0.108513 -0.98559\nvn -0.188659 -0.255453 -0.948236\nvn -0.193395 -0.129819 -0.972494\nvn -0.25585 -0.151067 -0.95484\nvn -0.180816 -0.377148 -0.908331\nvn -0.237546 -0.397019 -0.886537\nvn -0.248766 -0.275994 -0.928409\nvn -0.297575 -0.377148 -0.877046\nvn -0.310736 -0.255454 -0.915525\nvn -0.357451 -0.357104 -0.862963\nvn -0.371986 -0.234799 -0.898051\nvn -0.318767 -0.129821 -0.938901\nvn -0.380424 -0.108516 -0.918423\nvn -0.427651 -0.255454 -0.867097\nvn -0.438502 -0.129821 -0.889304\nvn -0.494262 -0.151068 -0.856086\nvn -0.409748 -0.377148 -0.830582\nvn -0.458905 -0.397019 -0.794847\nvn -0.480579 -0.275995 -0.832388\nvn -0.514431 -0.377148 -0.770143\nvn -0.537103 -0.255455 -0.803905\nvn -0.568623 -0.357104 -0.741043\nvn -0.591743 -0.234799 -0.771174\nvn -0.550909 -0.129821 -0.824406\nvn -0.605166 -0.108516 -0.788668\nvn -0.6375 -0.255454 -0.726867\nvn -0.653729 -0.129821 -0.74551\nvn -0.698992 -0.151068 -0.698992\nvn -0.610756 -0.377148 -0.69623\nvn -0.64899 -0.397019 -0.64899\nvn -0.679642 -0.275995 -0.679642\nvn -0.69623 -0.377148 -0.610757\nvn -0.726867 -0.255455 -0.6375\nvn -0.741043 -0.357104 -0.568623\nvn -0.771174 -0.2348 -0.591743\nvn -0.74551 -0.129821 -0.653729\nvn -0.788668 -0.108516 -0.605166\nvn -0.803905 -0.255455 -0.537103\nvn -0.824406 -0.129822 -0.55091\nvn -0.856086 -0.151068 -0.494262\nvn -0.770143 -0.377148 -0.514431\nvn -0.794847 -0.397019 -0.458905\nvn -0.832388 -0.275995 -0.480579\nvn -0.830582 -0.377148 -0.409748\nvn -0.867097 -0.255454 -0.427651\nvn -0.862963 -0.357103 -0.357451\nvn -0.898051 -0.234799 -0.371985\nvn -0.889305 -0.129821 -0.438502\nvn -0.918424 -0.108516 -0.380423\nvn -0.915525 -0.255454 -0.310735\nvn -0.938901 -0.129822 -0.318766\nvn -0.95484 -0.151068 -0.255848\nvn -0.965926 -1.49416e-08 -0.258819\nvn -0.877046 -0.377148 -0.297574\nvn -0.886537 -0.397019 -0.237547\nvn -0.928409 -0.275994 -0.248766\nvn 0.602973 0.553992 0.574035\nvn 0.435559 0.570336 0.696423\nvn 0.461554 0.393672 0.794978\nvn 0.281812 0.636382 0.718053\nvn 0.321725 0.403831 0.856396\nvn 0.641011 0.374612 0.669903\nvn 0.651404 0.183329 0.73625\nvn 0.491886 0.174628 0.852967\nvn 0.373187 -0.0753755 0.924689\nvn 0.354834 0.160924 0.920976\nvn 0.506852 -0.0463013 0.860789\nvn 0.228104 0.144713 0.962822\nvn 0.190809 0.404772 0.894288\nvn 0.130131 -0.127072 0.98332\nvn 0.0983034 0.127287 0.986983\nvn 0.252331 -0.104265 0.962007\nvn 0.141885 0.635739 0.758752\nvn 0.0569108 0.393299 0.917648\nvn 0.0091071 0.625257 0.780366\nvn -0.136552 0.589895 0.79585\nvn -0.0924418 0.365338 0.926274\nvn -0.296458 0.519107 0.801648\nvn -0.259941 0.308982 0.914856\nvn -0.0495514 0.106385 0.99309\nvn -0.176218 -0.17225 0.969163\nvn -0.221586 0.0674022 0.972809\nvn -0.0104266 -0.144056 0.989515\nvn -0.451226 0.215128 0.866092\nvn -0.417169 -0.00461743 0.908817\nvn -0.364949 -0.228337 0.902593\nvn -0.618859 -0.116087 0.776877\nvn -0.561237 -0.314297 0.765657\nvn -0.477877 0.400143 0.781997\nvn -0.685673 0.210498 0.69681\nvn -0.654848 0.0714526 0.752376\nvn 0.510036 -0.185558 0.8399\nvn 0.666189 -0.156363 0.729207\nvn 0.665574 -0.0216372 0.746018\nvn 0.385928 -0.214612 0.897219\nvn 0.379917 -0.21812 0.898936\nvn 0.517736 -0.186679 0.834925\nvn 0.527664 -0.0877074 0.844913\nvn 0.686983 -0.0670713 0.723571\nvn 0.674075 -0.160002 0.721126\nvn 0.379592 0.0585267 0.923301\nvn 0.389534 -0.106911 0.914786\nvn 0.525656 0.0656592 0.84816\nvn 0.252545 -0.12396 0.959612\nvn 0.262486 -0.240828 0.9344\nvn -0.00165817 0.083427 0.996513\nvn 0.0749491 -0.120019 0.989938\nvn 0.207212 0.0720745 0.975637\nvn 0.262374 -0.249073 0.932267\nvn 0.130484 -0.260465 0.956625\nvn 0.142603 -0.271987 0.951676\nvn 0.00532654 -0.285841 0.958262\nvn -0.179971 -0.30582 0.934925\nvn -0.151486 -0.308545 0.93907\nvn -0.0335974 -0.264644 0.963761\nvn -0.10325 -0.112966 0.98822\nvn -0.163786 0.0737966 0.983732\nvn -0.301955 0.0802376 0.949939\nvn -0.219646 -0.177644 0.95927\nvn -0.346538 -0.296018 0.890104\nvn -0.309299 -0.378787 0.87227\nvn -0.286666 -0.324414 0.901431\nvn -0.39103 -0.485466 0.781932\nvn -0.368499 -0.0302462 0.929136\nvn -0.322334 -0.364145 0.873784\nvn -0.493706 -0.4589 0.738691\nvn -0.430209 -0.524079 0.735025\nvn 0.68804 0.0772435 0.72155\nvn 0.669724 0.219197 0.709523\nvn 0.505841 0.21226 0.836104\nvn 0.47559 0.339605 0.81147\nvn 0.352345 0.215126 0.910809\nvn 0.315983 0.344497 0.884011\nvn 0.633985 0.350375 0.68942\nvn 0.576752 0.485466 0.657023\nvn 0.443368 0.471358 0.762395\nvn 0.424245 0.607336 0.671684\nvn 0.276646 0.480621 0.832148\nvn 0.243091 0.643971 0.725402\nvn 0.115802 0.378131 0.918481\nvn 0.0640425 0.514855 0.854882\nvn -0.179074 0.481304 0.858067\nvn -0.228133 0.612167 0.757104\nvn 0.0243505 0.677471 0.735146\nvn 0.167639 0.247183 0.954357\nvn -0.0436663 0.234676 0.971092\nvn -0.114125 0.363045 0.924756\nvn -0.252981 0.252622 0.933907\nvn -0.332518 0.368796 0.867998\nvn -0.444476 0.389008 0.806916\nvn -0.380846 0.274138 0.883065\nvn -0.400628 0.459489 0.792696\nvn -0.447602 0.549703 0.705322\nvn -0.536821 0.520711 0.66384\nvn -0.499406 0.463017 0.732263\nvn -0.487782 0.494516 0.71939\nvn -0.44995 0.414615 0.790974\nvn -0.516428 0.539774 0.66479\nvn -0.379983 0.601786 0.702472\nvn -0.350619 0.542449 0.763423\nvn -0.410208 0.280789 0.867691\nvn -0.325893 0.433354 0.840237\nvn -0.313052 0.228435 0.921854\nvn -0.229709 0.656405 0.718586\nvn -0.190067 0.562953 0.804337\nvn -0.148658 0.557011 0.817092\nvn -0.171251 0.413877 0.89408\nvn -0.126317 0.367622 0.921356\nvn -0.202335 0.679599 0.705128\nvn -0.281195 0.668037 0.688953\nvn -0.230306 0.536799 0.811669\nvn -0.482373 0.42931 0.76355\nvn -0.227397 0.298607 0.92689\nvn -0.527983 0.0911051 0.844354\nvn -0.140281 0.0414559 0.989243\nvn -0.258342 -0.0686952 0.963608\nvn -0.481538 -0.244425 0.841652\nvn -0.295148 -0.46792 0.83303\nvn -0.455699 -0.489163 0.743678\nvn -0.173076 0.13599 0.975475\nvn -0.154399 -0.375336 0.913939\nvn -0.16144 -0.419697 0.893192\nvn 0.793873 0.207403 0.57162\nvn 0.599064 0.348247 0.721004\nvn 0.545417 0.340475 0.765896\nvn 0.410795 0.474907 0.778274\nvn 0.346635 0.443761 0.82639\nvn 0.754799 0.212115 0.620714\nvn 0.531045 0.339691 0.776274\nvn 0.738434 0.242849 0.629078\nvn 0.478441 0.396713 0.783398\nvn 0.283219 0.445613 0.849244\nvn 0.215078 0.4796 0.850721\nvn 0.130783 0.552594 0.823125\nvn 0.0533238 0.524422 0.849787\nvn -0.0987236 0.59029 0.801131\nvn -0.168027 0.558364 0.812401\nvn -0.015339 0.526646 0.849946\nvn 0.234786 0.589302 0.773045\nvn 0.0529956 0.678473 0.732712\nvn -0.044053 0.639178 0.767796\nvn -0.0571451 0.766289 0.639949\nvn -0.156178 0.70607 0.690705\nvn -0.267086 0.7673 0.583023\nvn -0.166815 0.828111 0.535168\nvn -0.244981 0.649491 0.719824\nvn -0.314128 0.588674 0.74484\nvn -0.434906 0.612471 0.660103\nvn -0.361445 0.698619 0.617486\nvn -0.453676 0.737366 0.50047\nvn -0.351752 0.81426 0.461792\nvn -0.527698 0.763477 0.372342\nvn -0.635744 0.638457 0.433823\nvn -0.540248 0.629596 0.558337\nvn -0.253636 0.871817 0.419051\nvn -0.418005 0.850002 0.320575\nvn -0.330221 0.899786 0.285199\nvn 0.696683 0.33371 0.635035\nvn 0.411294 0.478667 0.775703\nvn 0.635386 0.444954 0.631111\nvn 0.349993 0.551196 0.757421\nvn 0.14854 0.520263 0.840989\nvn 0.09346 0.553813 0.827379\nvn 0.600628 0.530099 0.598533\nvn 0.512356 0.621598 0.592543\nvn 0.281634 0.624601 0.728393\nvn 0.303024 0.692692 0.654488\nvn 0.0654541 0.597517 0.799181\nvn 0.0801863 0.672433 0.735802\nvn -0.0945474 0.540488 0.836022\nvn -0.115891 0.563893 0.817676\nvn -0.115533 0.630113 0.767861\nvn -0.248773 0.535847 0.806834\nvn -0.249008 0.604231 0.756902\nvn -0.0455445 0.530357 0.84655\nvn -0.208368 0.532261 0.820537\nvn -0.245641 0.520748 0.817608\nvn -0.351095 0.534697 0.768656\nvn -0.470144 0.531641 0.704502\nvn -0.476265 0.480563 0.736363\nvn -0.361842 0.501314 0.785973\nvn -0.35819 0.499223 0.788971\nvn -0.470018 0.465778 0.749756\nvn -0.480676 0.506385 0.715908\nvn -0.360405 0.550404 0.753103\nvn -0.590105 0.459966 0.663481\nvn -0.586068 0.433968 0.684248\nvn -0.692271 0.412973 0.591789\nvn -0.696 0.410802 0.588919\nvn -0.604406 0.455919 0.653323\nvn -0.582696 0.525206 0.620181\nvn -0.696129 0.51338 0.501842\nvn -0.709699 0.437091 0.552521\nvn 0.991834 0.110772 0.0632038\nvn 0.9958 0.0915551 1.24401e-09\nvn 0.9978 -0.00646448 0.0659747\nvn 0.999613 -0.0278036 6.22297e-10\nvn 0.968911 0.218904 0.115295\nvn 0.975478 0.212516 0.05726\nvn 0.985426 0.114093 0.126172\nvn 0.974602 0.118893 0.189779\nvn 0.980594 -0.00294169 0.196025\nvn 0.991342 -0.00500037 0.13121\nvn 0.957599 0.228308 0.175725\nvn 0.932919 0.32599 0.152948\nvn 0.945413 0.310782 0.0980231\nvn 0.90259 0.412876 0.121925\nvn 0.952534 0.300649 0.0478395\nvn 0.958934 0.283631 1.24307e-09\nvn 0.980856 0.194734 1.55438e-09\nvn 0.917093 0.391557 0.074986\nvn 0.925263 0.377676 0.0353418\nvn -0.972495 0.129822 0.193391\nvn -0.982879 -1.49406e-08 0.18425\nvn -0.948236 0.255455 0.188657\nvn -0.963728 0.2348 0.126877\nvn -0.98559 0.108516 0.129755\nvn -0.989411 0.129821 0.0648981\nvn -0.997076 -1.61857e-08 0.0764159\nvn -0.991445 -1.68092e-08 0.130526\nvn -0.961159 0.275995 2.48927e-09\nvn -0.964754 0.255454 0.063191\nvn -0.988523 0.151067 2.48941e-09\nvn -0.924179 0.377149 0.0604383\nvn -0.926074 0.357104 0.121919\nvn -0.857774 0.514027 6.22348e-10\nvn -0.867115 0.494882 0.056597\nvn -0.91781 0.39702 9.33475e-10\nvn -0.908331 0.377148 0.180815\nvn -0.852218 0.494881 0.169757\nvn -0.872192 0.475495 0.114826\nvn 0.90035 0.434662 0.0209576\nvn 0.904508 0.426456 0.000132511\nvn 0.932583 0.360956 3.10679e-10\nvn 0.890844 0.451731 0.0483408\nvn 0.886767 0.46218 0.00590039\nvn 0.875726 0.482382 0.0202883\nvn 0.873902 0.478545 0.0853789\nvn 0.85618 0.514598 0.0463073\nvn 0.875737 0.482702 -0.00909878\nvn 0.852529 0.522656 0.0050443\nvn 0.86671 0.497221 -0.0398116\nvn 0.889137 0.457536 -0.00983591\nvn 0.891528 0.452966 -3.77342e-08\nvn 0.891417 0.453181 0.00139455\nvn 0.913411 0.406124 -0.0272632\nvn 0.896041 0.442039 -0.041373\nvn -0.784406 0.600396 0.155665\nvn -0.712816 0.687804 0.137181\nvn -0.723392 0.684334 0.091597\nvn -0.79905 0.592691 0.101172\nvn -0.799743 0.598759 0.0435701\nvn -0.730069 0.681811 0.0461848\nvn -0.743536 0.668696 9.32586e-10\nvn -0.801081 0.598556 1.39979e-09\nvn -0.654509 0.752437 0.073863\nvn -0.663388 0.74737 0.0368088\nvn -0.605348 0.795446 0.0286102\nvn -0.608792 0.79333 0.000140238\nvn -0.677073 0.735916 6.21477e-10\nvn -0.640968 0.759273 0.112532\nvn -0.570535 0.817285 0.0808451\nvn -0.588582 0.806863 0.0504254\nvn 0.943511 0.327862 -0.0478813\nvn 0.94625 0.323435 -1.92764e-08\nvn 0.912969 0.40803 -3.37273e-08\nvn 0.929158 0.346012 -0.130158\nvn 0.960356 0.269203 -0.0724354\nvn 0.920771 0.38186 -0.0797672\nvn 0.879662 0.466333 -0.0934232\nvn 0.866725 0.470885 -0.164482\nvn 0.840766 0.480258 -0.249931\nvn 0.920016 0.340998 -0.193107\nvn 0.781444 0.496546 -0.377873\nvn 0.96207 0.253524 -0.100735\nvn 0.974091 0.226156 -9.32662e-09\nvn 0.967319 0.253564 -1.3366e-08\nvn 0.902729 0.347886 -0.253094\nvn 0.952085 0.277865 -0.127772\nvn -0.504605 0.862345 0.0416467\nvn -0.446202 0.8949 -0.00754323\nvn -0.479868 0.877253 -0.0124205\nvn -0.529099 0.848281 0.021758\nvn -0.552969 0.833127 0.0111829\nvn -0.509901 0.860233 -4.40256e-05\nvn -0.503143 0.864172 -0.00735343\nvn -0.55017 0.835047 -0.00291597\nvn -0.442231 0.895608 -0.0481547\nvn -0.461816 0.886349 -0.0333451\nvn -0.471212 0.88202 -2.32885e-10\nvn -0.448014 0.892956 -0.0437489\nvn -0.449785 0.893137 -3.10516e-10\nvn -0.407239 0.91117 -0.0626567\nvn -0.375969 0.915916 -0.140518\nvn -0.427188 0.900077 -0.0858567\nvn -0.980388 -0.0955724 -0.172354\nvn -0.99346 -0.114178 -1.24719e-09\nvn -0.974819 -0.114927 -0.1911\nvn -0.989792 -0.142522 0\nvn -0.959371 -0.0772891 -0.271354\nvn -0.980297 -0.129427 -0.149218\nvn -0.948116 -0.0344037 -0.316057\nvn -0.917013 0.033313 -0.397463\nvn -0.867211 0.0879474 -0.490112\nvn -0.932855 -0.0523302 -0.356432\nvn -0.931392 -0.00501983 -0.363984\nvn -0.957202 -0.172635 -0.232297\nvn -0.939143 -0.124701 -0.320094\nvn -0.916102 -0.27203 -0.294547\nvn -0.969493 -0.209698 -0.126922\nvn -0.978138 -0.207957 0\nvn -0.990289 -0.139024 0\nvn -0.932066 -0.345062 -0.110386\nvn -0.928624 -0.304056 -0.212622\nvn 0.922686 0.125075 -0.3647\nvn 0.948771 0.121379 -0.29172\nvn 0.955371 0.105181 -0.276048\nvn 0.980075 0.0649271 -0.187716\nvn 0.973578 0.0842331 -0.212253\nvn 0.99278 0.0225253 -0.117813\nvn 0.993693 0.0538169 -0.0983772\nvn 0.969786 0.0551977 -0.237631\nvn 0.994808 0.0382865 -0.094294\nvn 0.999322 0.036822 -3.10862e-09\nvn 0.998891 0.0458033 0.0109151\nvn 0.985168 -0.0172144 -0.170725\nvn 0.995647 -0.0376044 -0.0852794\nvn 0.982494 -0.16934 -0.0776559\nvn 0.988769 -0.149454 -6.231e-10\nvn 0.999622 -0.0274871 -1.24456e-09\nvn 0.966576 0.0112102 -0.256135\nvn 0.961627 -0.132554 -0.240212\nvn 0.975424 -0.154102 -0.157482\nvn -0.946503 -0.322696 -2.49507e-09\nvn -0.880456 -0.474128 -2.80232e-09\nvn -0.873087 -0.479 -0.0909821\nvn -0.875281 -0.454326 -0.165742\nvn -0.820254 -0.554468 -0.140528\nvn -0.822494 -0.564341 -0.0708729\nvn -0.868127 -0.433476 -0.241772\nvn -0.815232 -0.540509 -0.207958\nvn -0.769374 -0.612687 -0.180773\nvn -0.773502 -0.622127 -0.121048\nvn -0.736465 -0.657006 -0.161132\nvn -0.775454 -0.628495 -0.0605404\nvn -0.814096 -0.58073 -6.21827e-10\nvn -0.769144 -0.639076 -3.10713e-10\nvn -0.740674 -0.663224 -0.107406\nvn -0.742864 -0.6673 -0.053511\nvn 0.933915 -0.281038 -0.220951\nvn 0.943586 -0.298399 -0.14354\nvn 0.901347 -0.413013 -0.130358\nvn 0.893981 -0.400565 -0.200862\nvn 0.94837 -0.309313 -0.070149\nvn 0.956162 -0.292837 -6.22415e-10\nvn 0.913891 -0.40596 -9.3295e-10\nvn 0.905358 -0.419852 -0.0636461\nvn 0.859658 -0.507502 -0.058564\nvn 0.855629 -0.50368 -0.119192\nvn 0.868552 -0.495599 -1.24339e-09\nvn 0.822797 -0.568335 -3.10768e-10\nvn 0.813758 -0.578635 -0.0545808\nvn 0.849179 -0.49557 -0.182501\nvn 0.809599 -0.576584 -0.110001\nvn 0.803306 -0.571734 -0.166792\nvn -0.710601 -0.70194 -0.048233\nvn -0.73948 -0.673179 -3.1059e-10\nvn -0.704662 -0.709544 -3.1064e-10\nvn -0.707913 -0.6996 -0.097049\nvn -0.656599 -0.749209 -0.0869732\nvn -0.659794 -0.750203 -0.0432198\nvn -0.703108 -0.69595 -0.145921\nvn -0.651177 -0.747577 -0.130759\nvn -0.57235 -0.812541 -0.110419\nvn -0.584297 -0.808502 -0.0701512\nvn -0.473059 -0.876383 -0.0903763\nvn -0.595652 -0.802491 -0.0347328\nvn -0.650584 -0.759434 0\nvn -0.573885 -0.818936 0\nvn -0.499045 -0.866041 -0.0304412\nvn -0.488138 -0.870391 -0.0643438\nvn 0.750955 -0.642511 -0.152464\nvn 0.75745 -0.644973 -0.101383\nvn 0.690104 -0.71788 -0.0916782\nvn 0.683537 -0.716917 -0.137142\nvn 0.761623 -0.646031 -0.0507343\nvn 0.772904 -0.634523 -1.24332e-09\nvn 0.708224 -0.705987 -1.55457e-09\nvn 0.694198 -0.718304 -0.0461368\nvn 0.608518 -0.792505 -0.0405139\nvn 0.597531 -0.797662 -0.0818095\nvn 0.625688 -0.780074 -1.24405e-09\nvn 0.523188 -0.852217 -6.22226e-10\nvn 0.502797 -0.863749 -0.0336623\nvn 0.59723 -0.792174 -0.125605\nvn 0.494378 -0.863748 -0.0976188\nvn 0.480258 -0.874845 -0.0632271\nvn -0.492327 -0.87041 0\nvn -0.400357 -0.916359 -1.55499e-10\nvn -0.380472 -0.924444 -0.0253674\nvn -0.378003 -0.924458 -0.0499148\nvn -0.262205 -0.96485 -0.0177093\nvn -0.260444 -0.964869 -0.0345976\nvn -0.373927 -0.924481 -0.0742492\nvn -0.257538 -0.964905 -0.051317\nvn -0.135212 -0.990648 -0.018296\nvn -0.133619 -0.990666 -0.0269471\nvn -0.00235291 -0.999997 -0.00107689\nvn -0.283156 -0.959074 -3.11009e-10\nvn -0.158208 -0.987406 0\nvn -0.136185 -0.990637 -0.00954569\nvn -0.00261271 -0.999996 -0.000869745\nvn -0.00250354 -0.999996 -0.000981759\nvn 0.377686 -0.92294 -0.0743961\nvn 0.369301 -0.927923 -0.0507531\nvn 0.256266 -0.9653 -0.0502361\nvn 0.259 -0.965299 -0.0334062\nvn 0.383837 -0.922932 -0.0294176\nvn 0.384939 -0.922942 -3.5003e-10\nvn 0.260626 -0.9653 -0.0164306\nvn 0.240063 -0.970757 -3.88799e-10\nvn 0.131613 -0.991162 -0.0166093\nvn 0.132415 -0.991162 -0.00798299\nvn 0.110814 -0.993841 -1.16642e-10\nvn -0.000549598 -1 0.000776997\nvn -0.0232012 -0.999731 3.88844e-11\nvn 0.130248 -0.991162 -0.0251615\nvn -0.000443519 -1 0.000841954\nvn -0.000497802 -1 0.000809619\nvn -0.0255929 -0.999672 0\nvn 0.11007 -0.993924 7.77638e-11\nvn 0.131888 -0.991233 0.00795978\nvn 0.131113 -0.991229 0.0165699\nvn 0.261063 -0.965182 0.0164584\nvn 0.259441 -0.965179 0.0334644\nvn 0.129794 -0.991223 0.0251126\nvn 0.256717 -0.965176 0.0503242\nvn 0.382687 -0.92254 0.049715\nvn 0.378617 -0.922544 0.0745763\nvn 0.494309 -0.863056 0.103889\nvn 0.240378 -0.970679 3.11046e-10\nvn 0.365512 -0.930806 4.66597e-10\nvn 0.385119 -0.922538 0.0246336\nvn 0.512206 -0.858118 0.0357584\nvn 0.500071 -0.863036 0.0714043\nvn -0.131142 -0.991001 0.0267938\nvn -0.132612 -0.991001 0.0181765\nvn -0.257168 -0.964976 0.0518169\nvn -0.260004 -0.964976 0.0349219\nvn -0.133515 -0.991001 0.00948478\nvn -0.155622 -0.987817 1.94404e-10\nvn -0.261727 -0.964976 0.0178806\nvn -0.283286 -0.959035 3.88804e-10\nvn -0.382755 -0.922438 0.0510569\nvn -0.385268 -0.922439 0.0259697\nvn -0.406285 -0.913746 3.11066e-10\nvn -0.504406 -0.863025 0.027614\nvn -0.505136 -0.86304 0\nvn -0.378604 -0.922439 0.0759283\nvn -0.495324 -0.863037 0.0990999\nvn -0.509313 -0.858127 0.064951\nvn 0.485598 -0.874182 7.77774e-10\nvn 0.597742 -0.801689 3.11095e-10\nvn 0.630863 -0.774783 0.0415099\nvn 0.609735 -0.788462 0.0809317\nvn 0.70616 -0.701826 0.0936905\nvn 0.719574 -0.692436 0.0524013\nvn 0.603093 -0.78851 0.120544\nvn 0.69843 -0.701936 0.139575\nvn 0.781748 -0.603668 0.156382\nvn 0.790468 -0.603438 0.104991\nvn 0.85285 -0.493342 0.171056\nvn 0.795766 -0.603279 0.0530131\nvn 0.712447 -0.701726 0\nvn 0.810555 -0.585663 0\nvn 0.862459 -0.492909 0.11491\nvn 0.868315 -0.492607 0.0580203\nvn -0.603019 -0.788583 0.120433\nvn -0.626589 -0.774972 0.082492\nvn -0.698186 -0.702238 0.139279\nvn -0.720693 -0.686731 0.0948812\nvn -0.613643 -0.788583 0.0397434\nvn -0.597566 -0.80182 3.11092e-10\nvn -0.696642 -0.717419 0\nvn -0.710444 -0.702238 0.0461706\nvn -0.794977 -0.604425 0.0517896\nvn -0.802647 -0.587019 0.105671\nvn -0.783376 -0.621549 0\nvn -0.857774 -0.514027 0\nvn -0.867115 -0.494882 0.0565972\nvn -0.781293 -0.604425 0.155731\nvn -0.852217 -0.494882 0.169757\nvn -0.872192 -0.475495 0.114827\nvn 0.925305 -0.3741 0.0621274\nvn 0.881137 -0.472861 6.22395e-10\nvn 0.935269 -0.353938 6.22336e-10\nvn 0.919047 -0.374446 0.123053\nvn 0.960124 -0.2534 0.118113\nvn 0.965872 -0.253308 0.0541\nvn 0.908785 -0.374967 0.183053\nvn 0.950209 -0.253583 0.181105\nvn 0.982676 -0.130439 0.131656\nvn 0.971947 -0.129821 0.196125\nvn 0.967387 -0.253301 9.33652e-10\nvn 0.988455 -0.151511 1.86686e-09\nvn 0.989181 -0.130882 0.066265\nvn -0.908331 -0.377148 0.180816\nvn -0.926074 -0.357104 0.12192\nvn -0.948236 -0.255454 0.188658\nvn -0.963728 -0.2348 0.126877\nvn -0.924179 -0.377148 0.0604386\nvn -0.91781 -0.397019 9.33475e-10\nvn -0.961159 -0.275995 1.55579e-09\nvn -0.964754 -0.255455 0.0631915\nvn -0.989411 -0.129821 0.0648981\nvn -0.98559 -0.108516 0.129755\nvn -0.988523 -0.151068 2.48941e-09\nvn -1 -1.40078e-08 1.8677e-09\nvn -0.972495 -0.129822 0.193391\nvn 0.942339 0.291569 -0.16427\nvn 0.960756 0.277396 -3.73498e-09\nvn 0.96866 0.24839 -7.46724e-09\nvn 0.87432 0.35458 -0.331418\nvn 0.912285 0.257702 -0.318317\nvn 0.959446 0.237537 -0.151786\nvn 0.759689 0.421881 -0.494863\nvn 0.813002 0.300556 -0.498691\nvn 0.914025 0.169434 -0.368579\nvn 0.805551 0.179784 -0.564593\nvn 0.819433 -0.00227623 -0.573171\nvn 0.967818 0.25165 0\nvn 0.983704 0.179793 0\nvn 0.970848 0.163781 -0.175013\nvn 0.984103 0.0268013 -0.175563\nvn 0.927716 0.0138793 -0.373027\nvn -0.833164 0.0122069 -0.552891\nvn -0.916906 -0.108366 -0.384109\nvn -0.80864 -0.0831967 -0.582391\nvn -0.898776 -0.185586 -0.39719\nvn -0.964988 -0.167789 -0.201608\nvn -0.980916 -0.19443 0\nvn -0.951014 -0.23233 -0.203948\nvn -0.96681 -0.255496 0\nvn -0.871426 -0.292379 -0.393867\nvn -0.927746 -0.316353 -0.198011\nvn -0.943233 -0.33213 0\nvn -0.883324 -0.430593 -0.185279\nvn -0.898322 -0.439338 0\nvn -0.774924 -0.226636 -0.590025\nvn -0.718409 -0.392527 -0.574292\nvn -0.820237 -0.430277 -0.376926\nvn -0.618618 -0.57476 -0.535688\nvn -0.459676 -0.695766 -0.551913\nvn -0.473501 -0.807781 -0.351122\nvn -0.707562 -0.627202 -0.325537\nvn -0.750724 -0.644557 -0.144774\nvn -0.452674 -0.87493 -0.171998\nvn -0.503593 -0.863941 0\nvn -0.765503 -0.643433 0\nvn -0.281665 -0.873439 -0.397201\nvn -0.22469 -0.956855 -0.184234\nvn -0.118852 -0.968821 -0.217395\nvn -0.116877 -0.993146 0\nvn -0.222834 -0.974856 0\nvn -0.350625 -0.704555 -0.61698\nvn -0.170783 -0.750134 -0.638853\nvn -0.128209 -0.892102 -0.433263\nvn 0.982907 -0.0787597 -0.166404\nvn 0.998117 -0.0613374 2.4911e-09\nvn 0.998297 0.058335 0\nvn 0.933381 -0.101311 -0.344291\nvn 0.985249 -0.0739127 -0.154341\nvn 0.927479 -0.102392 -0.359581\nvn 0.819404 -0.129443 -0.558409\nvn 0.827197 -0.132013 -0.546185\nvn 0.840891 -0.0423935 -0.539541\nvn 0.943717 -0.0141208 -0.330452\nvn 0.842488 0.0944057 -0.530378\nvn 0.986976 -0.00325348 -0.160835\nvn 0.999791 0.0204508 2.33569e-09\nvn 0.997469 -0.0711 2.49039e-09\nvn 0.982425 0.122358 -0.140956\nvn 0.935561 0.0977371 -0.339373\nvn 0.957589 0.263646 -0.116247\nvn 0.986852 0.161626 0\nvn 0.957184 0.289482 0\nvn 0.924512 0.22903 -0.304669\nvn 0.884036 0.366888 -0.28961\nvn 0.907513 0.405654 -0.108923\nvn 0.82352 0.234384 -0.516603\nvn 0.781667 0.371274 -0.501151\nvn 0.787497 0.538663 -0.299482\nvn 0.701093 0.500646 -0.507761\nvn 0.602346 0.629576 -0.490728\nvn 0.516892 0.588358 -0.621817\nvn 0.813879 0.570533 -0.10997\nvn 0.90088 0.434068 0\nvn 0.797891 0.602802 0\nvn 0.652811 0.747304 -0.123993\nvn 0.632101 0.715082 -0.298505\nvn 0.42096 0.907079 2.5038e-09\nvn 0.623366 0.78193 1.25368e-09\nvn 0.448943 0.881317 -0.147409\nvn 0.245934 0.95317 -0.176019\nvn 0.233032 0.902268 -0.362779\nvn 0.43511 0.840348 -0.323257\nvn 0.433264 0.732591 -0.524969\nvn 0.227501 0.79952 -0.555888\nvn 0.0148067 0.914547 -0.404208\nvn 0.0333162 0.819777 -0.571713\nvn -0.201274 0.768792 -0.606999\nvn -0.00339992 0.999994 1.2562e-09\nvn 0.217893 0.975973 0\nvn 0.0278152 0.978409 -0.204798\nvn -0.228117 0.946171 -0.229614\nvn -0.245139 0.868193 -0.431448\nvn -0.425482 0.877696 -0.220488\nvn -0.264386 0.964417 3.78789e-09\nvn -0.468217 0.883614 2.51894e-09\nvn -0.453395 0.788108 -0.416316\nvn -0.552577 0.796056 -0.246888\nvn -0.557461 0.690553 -0.460841\nvn -0.453184 0.674249 -0.583107\nvn -0.5532 0.594791 -0.583261\nvn -0.553534 0.673069 -0.490487\nvn -0.535145 0.592548 -0.602085\nvn -0.41676 0.652101 -0.633305\nvn -0.553665 0.832739 7.54382e-09\nvn -0.588123 0.808771 5.03639e-09\nvn -0.574717 0.763968 -0.293348\nvn -0.513769 0.800363 -0.308966\nvn -0.464338 0.721989 -0.512954\nvn -0.103392 -0.749995 -0.653313\nvn -0.0991491 -0.90573 -0.412095\nvn -0.16088 -0.752103 -0.639107\nvn -0.17614 -0.90035 -0.397926\nvn -0.124851 -0.971269 -0.202606\nvn -0.11543 -0.993316 0\nvn -0.194209 -0.98096 0\nvn -0.223204 -0.956437 -0.188171\nvn -0.339172 -0.860445 -0.380259\nvn -0.399753 -0.899889 -0.174346\nvn -0.342432 -0.939543 0\nvn -0.571132 -0.820858 2.52606e-09\nvn -0.639345 -0.754153 -0.149974\nvn -0.309611 -0.72382 -0.616625\nvn -0.531954 -0.62942 -0.566441\nvn -0.589645 -0.736674 -0.331104\nvn -0.552192 0.833717 0\nvn -0.481391 0.876506 4.71117e-09\nvn -0.443745 0.839455 -0.313697\nvn -0.361834 0.823575 -0.436806\nvn -0.456438 0.860022 -0.228093\nvn -0.376421 0.792942 -0.479114\nvn -0.294036 0.72662 -0.62094\nvn -0.285668 0.769355 -0.57139\nvn -0.468622 0.80405 -0.365919\nvn -0.34561 0.753599 -0.559144\nvn -0.554746 0.635901 -0.536551\nvn -0.419067 0.601612 -0.680034\nvn -0.623574 0.781723 0.00804092\nvn -0.511222 0.859449 2.49496e-09\nvn -0.594765 0.793273 -0.130276\nvn -0.824569 0.554191 -0.113837\nvn -0.736291 0.609549 -0.293813\nvn -0.709012 -0.367107 -0.602109\nvn -0.807609 -0.467087 -0.359997\nvn -0.913455 -0.110326 -0.391698\nvn -0.760041 0.0195798 -0.64958\nvn -0.840883 -0.516378 -0.162079\nvn -0.816267 -0.577674 2.5243e-09\nvn -0.981271 -0.19263 3.80282e-09\nvn -0.967691 -0.173233 -0.183207\nvn -0.900091 0.263368 -0.347092\nvn -0.965416 0.217571 -0.143652\nvn -0.962111 0.272659 3.8077e-09\nvn -0.78991 0.613062 -0.014049\nvn -0.736238 0.348927 -0.579831\nvn 0.999609 0.0261149 -0.0100303\nvn 0.999999 0.0015362 -9.32915e-10\nvn 0.990692 0.00962424 -0.135782\nvn 0.966625 0.031954 -0.254194\nvn 0.963677 0.0494787 -0.262448\nvn 0.991834 0.0257777 -0.124904\nvn 0.910691 0.0874083 -0.403735\nvn 0.90035 0.103051 -0.422789\nvn 0.887019 0.156139 -0.434531\nvn 0.957878 0.106539 -0.266681\nvn 0.859108 0.264325 -0.438252\nvn 0.98853 0.0831223 -0.126094\nvn 0.999695 0.0246765 -1.86637e-09\nvn 0.995969 0.0896954 -4.35743e-09\nvn 0.937768 0.221639 -0.267333\nvn 0.971514 0.201047 -0.125462\nvn -0.412984 0.891697 -0.18526\nvn -0.446135 0.888436 -0.107909\nvn -0.470542 0.859333 -0.200344\nvn -0.508198 0.852169 -0.124671\nvn -0.459803 0.886627 -0.0497401\nvn -0.469001 0.883198 -3.10571e-10\nvn -0.521191 0.851672 -0.0548956\nvn -0.538789 0.842441 -6.21766e-10\nvn -0.615409 0.774686 -0.145372\nvn -0.630704 0.773443 -0.0632331\nvn -0.656741 0.754116 -9.34699e-10\nvn -0.772696 0.6299 -0.0785306\nvn -0.802988 0.595995 -6.25176e-10\nvn -0.561249 0.791084 -0.243283\nvn -0.685807 0.667386 -0.290284\nvn -0.750906 0.635673 -0.179053\nvn 0.92727 0.354373 -0.120787\nvn 0.975129 0.221639 0\nvn 0.926472 0.376364 0\nvn 0.892339 0.368162 -0.261127\nvn 0.827281 0.504527 -0.247099\nvn 0.86002 0.497947 -0.111421\nvn 0.808321 0.398148 -0.4337\nvn 0.74392 0.520106 -0.419609\nvn 0.65912 0.631674 -0.408105\nvn 0.740662 0.627526 -0.240065\nvn 0.461221 0.683651 -0.565593\nvn 0.548765 0.711944 -0.43817\nvn 0.774137 0.624699 -0.102291\nvn 0.854409 0.519602 0\nvn 0.76518 0.643816 0\nvn 0.633158 0.728976 -0.260203\nvn 0.673683 0.731877 -0.102506\nvn -0.793355 0.503571 -0.342058\nvn -0.848017 0.492036 -0.196893\nvn -0.883979 0.394341 -0.251152\nvn -0.810105 0.419014 -0.410071\nvn -0.877022 0.471285 -0.0933966\nvn -0.894717 0.446633 1.24557e-09\nvn -0.921028 0.375966 -0.101772\nvn -0.931939 0.362615 6.21665e-10\nvn -0.894166 0.361952 -0.263548\nvn -0.930281 0.351624 -0.104587\nvn -0.936222 0.351409 1.24261e-09\nvn -0.897377 0.426579 -0.112895\nvn -0.894531 0.447006 0\nvn -0.809645 0.383741 -0.444092\nvn -0.771411 0.421276 -0.476919\nvn -0.854969 0.427744 -0.293364\nvn -0.670135 0.509608 -0.539646\nvn -0.755405 0.55534 -0.347795\nvn -0.530454 0.590332 -0.608381\nvn -0.605182 0.679855 -0.414189\nvn -0.806638 0.574626 -0.138352\nvn -0.797706 0.603047 0\nvn -0.658153 0.732454 -0.1742\nvn -0.639023 0.769188 6.25946e-10\nvn -0.4508 0.874216 -0.180348\nvn -0.4309 0.775231 -0.461889\nvn -0.256684 0.950206 -0.176698\nvn -0.303118 0.952953 6.24334e-10\nvn -0.47188 0.881663 1.87987e-09\nvn -0.385999 0.651978 -0.652633\nvn -0.255282 0.721738 -0.64337\nvn -0.267257 0.861552 -0.431627\nvn -0.0958032 0.748229 -0.656487\nvn -0.0642423 0.887262 -0.45677\nvn 0.211775 0.892675 -0.397848\nvn 0.135823 0.783192 -0.606764\nvn -0.0395753 0.979988 -0.195084\nvn 0.266086 0.950222 -0.162101\nvn 0.228187 0.973617 0\nvn -0.0844085 0.996431 0\nvn 0.521083 0.844607 -0.12293\nvn 0.468646 0.824505 -0.317115\nvn 0.664223 0.747535 0\nvn 0.500215 0.865901 0\nvn 0.379148 0.767643 -0.516693\nvn 0.991834 0.110772 -0.0632038\nvn 0.9978 -0.00646448 -0.0659747\nvn 0.968911 0.218904 -0.115295\nvn 0.985426 0.114093 -0.126172\nvn 0.975478 0.212516 -0.05726\nvn 0.952534 0.300649 -0.0478395\nvn 0.917093 0.391557 -0.074986\nvn 0.945413 0.310782 -0.0980231\nvn 0.925263 0.377676 -0.0353418\nvn 0.932919 0.32599 -0.152948\nvn 0.957599 0.228308 -0.175725\nvn 0.90259 0.412876 -0.121925\nvn 0.974602 0.118893 -0.189779\nvn 0.980594 -0.00294167 -0.196025\nvn 0.991342 -0.00500037 -0.13121\nvn -0.972495 0.129822 -0.193391\nvn -0.982879 -1.61857e-08 -0.18425\nvn -0.948236 0.255455 -0.188657\nvn -0.963728 0.2348 -0.126877\nvn -0.98559 0.108516 -0.129755\nvn -0.908331 0.377148 -0.180815\nvn -0.852218 0.494881 -0.169757\nvn -0.872192 0.475495 -0.114826\nvn -0.926074 0.357104 -0.121919\nvn -0.924179 0.377149 -0.0604383\nvn -0.964754 0.255454 -0.063191\nvn -0.867115 0.494882 -0.056597\nvn -0.989411 0.129821 -0.0648981\nvn -0.997076 -1.74307e-08 -0.0764159\nvn -0.991445 -1.86769e-08 -0.130526\nvn 0.901412 0.432221 -0.0253125\nvn 0.887802 0.460186 -0.00605789\nvn 0.890844 0.45173 -0.0483408\nvn 0.875726 0.482382 -0.0202884\nvn 0.889137 0.457536 0.00983584\nvn 0.913411 0.406124 0.0272632\nvn 0.875737 0.482702 0.00909878\nvn 0.896041 0.442039 0.041373\nvn 0.856181 0.514597 -0.0463073\nvn 0.852529 0.522656 -0.00504441\nvn 0.86671 0.497221 0.0398115\nvn 0.873902 0.478545 -0.0853789\nvn -0.784406 0.600396 -0.155665\nvn -0.712816 0.687804 -0.137181\nvn -0.723392 0.684334 -0.091597\nvn -0.79905 0.592691 -0.101172\nvn -0.640968 0.759273 -0.112532\nvn -0.570535 0.817285 -0.0808451\nvn -0.588582 0.806863 -0.0504255\nvn -0.654509 0.752437 -0.073863\nvn -0.663388 0.74737 -0.0368088\nvn -0.730069 0.681811 -0.0461848\nvn -0.600758 0.79907 -0.0240376\nvn -0.799743 0.598759 -0.0435701\nvn 0.943511 0.327862 0.0478813\nvn 0.929158 0.346012 0.130158\nvn 0.920771 0.38186 0.0797672\nvn 0.960356 0.269203 0.0724354\nvn 0.96207 0.253524 0.100735\nvn 0.902729 0.347886 0.253094\nvn 0.920016 0.340998 0.193107\nvn 0.952085 0.277865 0.127772\nvn 0.840766 0.480258 0.249931\nvn 0.866725 0.470885 0.164482\nvn 0.781444 0.496546 0.377873\nvn 0.879662 0.466334 0.0934232\nvn -0.504605 0.862345 -0.0416468\nvn -0.446202 0.8949 0.00754315\nvn -0.479868 0.877253 0.0124205\nvn -0.529099 0.848281 -0.021758\nvn -0.407239 0.91117 0.0626567\nvn -0.375969 0.915916 0.140518\nvn -0.427188 0.900077 0.0858567\nvn -0.442231 0.895608 0.0481546\nvn -0.461816 0.886349 0.0333451\nvn -0.49921 0.866438 0.00861411\nvn -0.448014 0.892956 0.0437488\nvn -0.544727 0.838573 -0.00828679\nvn -0.980388 -0.0955724 0.172354\nvn -0.974819 -0.114927 0.1911\nvn -0.959371 -0.0772891 0.271354\nvn -0.948116 -0.0344037 0.316057\nvn -0.980297 -0.129427 0.149218\nvn -0.969493 -0.209698 0.126922\nvn -0.932066 -0.345062 0.110386\nvn -0.957202 -0.172635 0.232297\nvn -0.928624 -0.304056 0.212622\nvn -0.931392 -0.00501983 0.363984\nvn -0.939143 -0.124701 0.320094\nvn -0.916102 -0.27203 0.294547\nvn -0.917013 0.033313 0.397463\nvn -0.867211 0.0879474 0.490112\nvn -0.932855 -0.0523302 0.356432\nvn 0.922686 0.125075 0.3647\nvn 0.948771 0.121379 0.29172\nvn 0.955371 0.105181 0.276048\nvn 0.980075 0.0649271 0.187716\nvn 0.973578 0.0842331 0.212253\nvn 0.966576 0.0112102 0.256135\nvn 0.961627 -0.132554 0.240212\nvn 0.975424 -0.154102 0.157482\nvn 0.985168 -0.0172144 0.170725\nvn 0.995647 -0.0376044 0.0852794\nvn 0.994808 0.0382865 0.094294\nvn 0.982494 -0.16934 0.0776559\nvn 0.992836 0.0557707 0.10567\nvn 0.969786 0.0551977 0.237631\nvn 0.993812 0.0252517 0.108168\nvn -0.873087 -0.479 0.0909821\nvn -0.875281 -0.454327 0.165742\nvn -0.820254 -0.554468 0.140528\nvn -0.822494 -0.564341 0.0708729\nvn -0.775454 -0.628495 0.0605404\nvn -0.773502 -0.622127 0.121048\nvn -0.740674 -0.663224 0.107406\nvn -0.742864 -0.6673 0.053511\nvn -0.769374 -0.612687 0.180773\nvn -0.815232 -0.540509 0.207958\nvn -0.736465 -0.657006 0.161132\nvn -0.868127 -0.433476 0.241772\nvn 0.933915 -0.281038 0.220951\nvn 0.943586 -0.298399 0.14354\nvn 0.901347 -0.413013 0.130358\nvn 0.893981 -0.400565 0.200862\nvn 0.849179 -0.49557 0.182501\nvn 0.855629 -0.50368 0.119192\nvn 0.809599 -0.576584 0.110001\nvn 0.803306 -0.571734 0.166792\nvn 0.905358 -0.419852 0.0636461\nvn 0.859658 -0.507502 0.058564\nvn 0.813758 -0.578635 0.0545808\nvn 0.94837 -0.309313 0.070149\nvn -0.710601 -0.70194 0.048233\nvn -0.707913 -0.6996 0.097049\nvn -0.656599 -0.749209 0.0869732\nvn -0.659794 -0.750203 0.0432198\nvn -0.595652 -0.802491 0.0347328\nvn -0.499045 -0.866041 0.0304412\nvn -0.584297 -0.808502 0.0701512\nvn -0.488138 -0.870391 0.0643438\nvn -0.651177 -0.747577 0.130759\nvn -0.57235 -0.812541 0.110419\nvn -0.473059 -0.876383 0.0903763\nvn -0.703108 -0.69595 0.145921\nvn 0.750955 -0.642511 0.152464\nvn 0.75745 -0.644973 0.101383\nvn 0.690104 -0.71788 0.0916782\nvn 0.683537 -0.716917 0.137142\nvn 0.59723 -0.792174 0.125605\nvn 0.494378 -0.863748 0.0976189\nvn 0.597531 -0.797662 0.0818095\nvn 0.480258 -0.874845 0.0632271\nvn 0.694198 -0.718304 0.0461368\nvn 0.608518 -0.792505 0.0405139\nvn 0.502797 -0.863749 0.0336623\nvn 0.761623 -0.646031 0.0507343\nvn -0.380472 -0.924444 0.0253674\nvn -0.262205 -0.96485 0.0177093\nvn -0.378003 -0.924458 0.0499148\nvn -0.260444 -0.964869 0.0345976\nvn -0.136185 -0.990637 0.00954569\nvn -0.00261271 -0.999996 0.000869745\nvn -0.135212 -0.990648 0.018296\nvn -0.00250354 -0.999996 0.000981759\nvn -0.257538 -0.964905 0.051317\nvn -0.133619 -0.990666 0.0269471\nvn -0.00235291 -0.999997 0.00107689\nvn -0.373927 -0.924481 0.0742492\nvn 0.377686 -0.92294 0.0743964\nvn 0.256266 -0.9653 0.0502361\nvn 0.369301 -0.927923 0.0507531\nvn 0.259 -0.965299 0.0334062\nvn 0.130248 -0.991162 0.0251615\nvn -0.000443521 -1 -0.000841954\nvn 0.131613 -0.991162 0.0166093\nvn -0.0004978 -1 -0.000809619\nvn 0.260626 -0.9653 0.0164306\nvn 0.132415 -0.991162 0.00798299\nvn -0.000549596 -1 -0.000776997\nvn 0.383837 -0.922932 0.0294176\nvn 0.131888 -0.991233 -0.00795978\nvn 0.261063 -0.965182 -0.0164584\nvn 0.131113 -0.991229 -0.0165699\nvn 0.259441 -0.965179 -0.0334644\nvn 0.385119 -0.922538 -0.0246336\nvn 0.512206 -0.858118 -0.0357584\nvn 0.382687 -0.92254 -0.049715\nvn 0.500071 -0.863036 -0.0714043\nvn 0.256717 -0.965176 -0.0503242\nvn 0.378617 -0.922544 -0.0745763\nvn 0.494309 -0.863056 -0.103889\nvn 0.129794 -0.991223 -0.0251126\nvn -0.131142 -0.991001 -0.0267938\nvn -0.257168 -0.964976 -0.0518169\nvn -0.132612 -0.991001 -0.0181765\nvn -0.260004 -0.964976 -0.0349219\nvn -0.378604 -0.922439 -0.0759283\nvn -0.495324 -0.863037 -0.0990999\nvn -0.382755 -0.922438 -0.0510569\nvn -0.509313 -0.858127 -0.064951\nvn -0.261727 -0.964976 -0.0178806\nvn -0.385268 -0.922439 -0.0259697\nvn -0.504406 -0.863025 -0.027614\nvn -0.133515 -0.991001 -0.00948478\nvn 0.630863 -0.774783 -0.0415099\nvn 0.609735 -0.788462 -0.0809317\nvn 0.70616 -0.701826 -0.0936905\nvn 0.719574 -0.692436 -0.0524013\nvn 0.795766 -0.603279 -0.0530131\nvn 0.790468 -0.603438 -0.104991\nvn 0.862459 -0.492909 -0.11491\nvn 0.868315 -0.492607 -0.0580203\nvn 0.69843 -0.701936 -0.139575\nvn 0.781748 -0.603668 -0.156382\nvn 0.85285 -0.493342 -0.171056\nvn 0.603093 -0.78851 -0.120544\nvn -0.603019 -0.788583 -0.120433\nvn -0.698186 -0.702238 -0.139279\nvn -0.626589 -0.774972 -0.082492\nvn -0.720693 -0.686731 -0.0948812\nvn -0.781293 -0.604425 -0.155731\nvn -0.852217 -0.494882 -0.169757\nvn -0.802647 -0.587019 -0.105671\nvn -0.872192 -0.475495 -0.114827\nvn -0.710444 -0.702238 -0.0461706\nvn -0.794977 -0.604425 -0.0517896\nvn -0.867115 -0.494882 -0.0565972\nvn -0.613643 -0.788583 -0.0397434\nvn 0.925305 -0.3741 -0.0621274\nvn 0.919047 -0.374446 -0.123053\nvn 0.960124 -0.2534 -0.118113\nvn 0.965872 -0.253308 -0.0541\nvn 0.989181 -0.130882 -0.066265\nvn 0.982676 -0.130439 -0.131656\nvn 0.950209 -0.253583 -0.181105\nvn 0.971947 -0.129821 -0.196125\nvn 0.908785 -0.374967 -0.183053\nvn -0.908331 -0.377148 -0.180816\nvn -0.948236 -0.255454 -0.188658\nvn -0.926074 -0.357104 -0.12192\nvn -0.963728 -0.2348 -0.126877\nvn -0.972495 -0.129822 -0.193391\nvn -0.98559 -0.108516 -0.129755\nvn -0.964754 -0.255455 -0.0631915\nvn -0.989411 -0.129821 -0.0648981\nvn -0.924179 -0.377148 -0.0604386\nvn 0.942339 0.291569 0.16427\nvn 0.87432 0.35458 0.331418\nvn 0.912285 0.257702 0.318317\nvn 0.959446 0.237537 0.151786\nvn 0.970848 0.163781 0.175013\nvn 0.984103 0.0268013 0.175563\nvn 0.914025 0.169434 0.368579\nvn 0.927716 0.0138794 0.373027\nvn 0.813002 0.300556 0.498691\nvn 0.805551 0.179784 0.564593\nvn 0.819433 -0.00227621 0.573171\nvn 0.759689 0.421881 0.494863\nvn -0.833164 0.0122069 0.552891\nvn -0.80864 -0.0831967 0.582391\nvn -0.916906 -0.108366 0.384109\nvn -0.898776 -0.185586 0.39719\nvn -0.774924 -0.226636 0.590025\nvn -0.718409 -0.392527 0.574292\nvn -0.871426 -0.292379 0.393867\nvn -0.820237 -0.430277 0.376926\nvn -0.951014 -0.23233 0.203948\nvn -0.927746 -0.316353 0.198011\nvn -0.883324 -0.430593 0.185279\nvn -0.964988 -0.167789 0.201608\nvn -0.618618 -0.57476 0.535688\nvn -0.459676 -0.695766 0.551913\nvn -0.473501 -0.807781 0.351122\nvn -0.707562 -0.627202 0.325537\nvn -0.350625 -0.704555 0.61698\nvn -0.170783 -0.750134 0.638853\nvn -0.281665 -0.873439 0.397201\nvn -0.128209 -0.892102 0.433263\nvn -0.22469 -0.956855 0.184234\nvn -0.452674 -0.87493 0.171998\nvn -0.118852 -0.968821 0.217395\nvn -0.750724 -0.644557 0.144774\nvn 0.982907 -0.0787596 0.166404\nvn 0.933381 -0.101311 0.344291\nvn 0.927479 -0.102392 0.359581\nvn 0.985249 -0.0739127 0.154341\nvn 0.986976 -0.00325349 0.160835\nvn 0.982425 0.122358 0.140956\nvn 0.943717 -0.0141208 0.330452\nvn 0.935561 0.0977371 0.339373\nvn 0.840891 -0.0423935 0.539541\nvn 0.827197 -0.132013 0.546185\nvn 0.842488 0.0944057 0.530378\nvn 0.819404 -0.129443 0.558409\nvn 0.957589 0.263646 0.116247\nvn 0.924512 0.22903 0.304669\nvn 0.884036 0.366888 0.28961\nvn 0.907513 0.405654 0.108923\nvn 0.813879 0.570533 0.10997\nvn 0.652811 0.747304 0.123993\nvn 0.632101 0.715082 0.298505\nvn 0.787497 0.538663 0.299482\nvn 0.781667 0.371274 0.501151\nvn 0.701093 0.500646 0.507761\nvn 0.589642 0.632151 0.502701\nvn 0.524209 0.567177 0.635228\nvn 0.82352 0.234384 0.516603\nvn 0.448943 0.881317 0.147409\nvn 0.245934 0.95317 0.176019\nvn 0.233032 0.902268 0.362779\nvn 0.43511 0.840348 0.323257\nvn 0.0278152 0.978409 0.204798\nvn -0.228117 0.946171 0.229614\nvn -0.245139 0.868193 0.431448\nvn 0.0148067 0.914547 0.404208\nvn 0.0333162 0.819777 0.571713\nvn 0.227501 0.79952 0.555888\nvn -0.201274 0.768792 0.606999\nvn 0.421299 0.746919 0.514411\nvn -0.425482 0.877696 0.220488\nvn -0.552577 0.796056 0.246888\nvn -0.453395 0.788108 0.416316\nvn -0.557461 0.690553 0.460841\nvn -0.574717 0.763968 0.293348\nvn -0.513769 0.800363 0.308966\nvn -0.553534 0.673069 0.490487\nvn -0.464338 0.721989 0.512954\nvn -0.5532 0.594791 0.583261\nvn -0.535145 0.592548 0.602085\nvn -0.41676 0.652101 0.633305\nvn -0.453184 0.674249 0.583107\nvn -0.103392 -0.749995 0.653313\nvn -0.16088 -0.752103 0.639107\nvn -0.0991491 -0.90573 0.412095\nvn -0.17614 -0.90035 0.397926\nvn -0.309611 -0.72382 0.616625\nvn -0.500537 -0.639665 0.583345\nvn -0.339172 -0.860445 0.380259\nvn -0.582819 -0.72391 0.369156\nvn -0.223204 -0.956437 0.188171\nvn -0.399753 -0.899889 0.174346\nvn -0.656318 -0.735761 0.167042\nvn -0.124851 -0.971269 0.202606\nvn -0.443745 0.839455 0.313697\nvn -0.361834 0.823575 0.436806\nvn -0.376421 0.792942 0.479114\nvn -0.456438 0.860022 0.228093\nvn -0.578512 0.802674 0.14505\nvn -0.802974 0.58636 0.106837\nvn -0.736291 0.609549 0.293813\nvn -0.468622 0.80405 0.365919\nvn -0.285668 0.769355 0.57139\nvn -0.34561 0.7536 0.559143\nvn -0.554746 0.635901 0.536551\nvn -0.419067 0.601612 0.680034\nvn -0.294036 0.72662 0.62094\nvn -0.68546 -0.372181 0.6258\nvn -0.92588 -0.126668 0.355952\nvn -0.807875 -0.465937 0.360888\nvn -0.792786 -0.0112815 0.609396\nvn -0.736238 0.348927 0.579831\nvn -0.900091 0.263368 0.347092\nvn -0.975194 -0.138914 0.172333\nvn -0.965416 0.217571 0.143652\nvn -0.870229 -0.465067 0.162524\nvn 0.990692 0.00962425 0.135782\nvn 0.966625 0.031954 0.254194\nvn 0.963677 0.0494787 0.262448\nvn 0.991834 0.0257777 0.124904\nvn 0.98853 0.0831223 0.126094\nvn 0.957878 0.106539 0.266681\nvn 0.937768 0.221639 0.267333\nvn 0.971514 0.201047 0.125462\nvn 0.90035 0.103051 0.422789\nvn 0.887019 0.156139 0.434531\nvn 0.859108 0.264325 0.438252\nvn 0.910691 0.0874083 0.403735\nvn -0.412984 0.891697 0.18526\nvn -0.470542 0.859333 0.200344\nvn -0.446135 0.888436 0.107909\nvn -0.508198 0.852169 0.124671\nvn -0.561249 0.791084 0.243283\nvn -0.685807 0.667386 0.290284\nvn -0.615409 0.774686 0.145372\nvn -0.750906 0.635673 0.179053\nvn -0.521191 0.851672 0.0548955\nvn -0.630704 0.773443 0.0632331\nvn -0.772696 0.6299 0.0785306\nvn -0.459803 0.886627 0.0497401\nvn 0.92727 0.354373 0.120787\nvn 0.892339 0.368162 0.261127\nvn 0.827281 0.504527 0.247099\nvn 0.86002 0.497947 0.111421\nvn 0.774137 0.624699 0.102291\nvn 0.740662 0.627526 0.240065\nvn 0.633158 0.728976 0.260203\nvn 0.673683 0.731877 0.102506\nvn 0.74392 0.520106 0.419609\nvn 0.65912 0.631674 0.408105\nvn 0.461221 0.683651 0.565593\nvn 0.548765 0.711944 0.43817\nvn 0.808321 0.398148 0.4337\nvn -0.793355 0.503571 0.342058\nvn -0.848017 0.492036 0.196893\nvn -0.883979 0.394341 0.251152\nvn -0.810105 0.419014 0.410071\nvn -0.809645 0.383741 0.444092\nvn -0.771411 0.421276 0.476919\nvn -0.894166 0.361952 0.263548\nvn -0.854969 0.427744 0.293364\nvn -0.921028 0.375966 0.101772\nvn -0.930281 0.351624 0.104587\nvn -0.897377 0.426579 0.112895\nvn -0.877022 0.471285 0.0933966\nvn -0.670135 0.509608 0.539646\nvn -0.530454 0.590332 0.608381\nvn -0.755405 0.55534 0.347795\nvn -0.605182 0.679855 0.414189\nvn -0.385999 0.651978 0.652633\nvn -0.255282 0.721738 0.64337\nvn -0.4309 0.775231 0.461889\nvn -0.267257 0.861552 0.431627\nvn -0.4508 0.874216 0.180348\nvn -0.658153 0.732454 0.1742\nvn -0.256684 0.950206 0.176698\nvn -0.806638 0.574626 0.138352\nvn -0.0958033 0.748229 0.656487\nvn 0.135823 0.783192 0.606764\nvn 0.211775 0.892675 0.397848\nvn -0.0642423 0.887262 0.45677\nvn 0.379148 0.767643 0.516693\nvn 0.468646 0.824505 0.317115\nvn 0.521083 0.844607 0.12293\nvn 0.266086 0.950222 0.162101\nvn -0.0395753 0.979988 0.195084\nvt 0.799687 0.728214\nvt 0.80372 0.728518\nvt 0.79918 0.735578\nvt 0.803348 0.735886\nvt 0.796288 0.720689\nvt 0.800135 0.721034\nvt 0.795714 0.727849\nvt 0.791781 0.727428\nvt 0.791022 0.734784\nvt 0.795075 0.735224\nvt 0.788684 0.719787\nvt 0.792481 0.720251\nvt 0.787871 0.726947\nvt 0.793141 0.713206\nvt 0.79683 0.713612\nvt 0.790216 0.705836\nvt 0.793782 0.706227\nvt 0.789464 0.712749\nvt 0.800536 0.713988\nvt 0.804286 0.7143\nvt 0.804029 0.721347\nvt 0.797348 0.706618\nvt 0.800914 0.707009\nvt 0.783966 0.726402\nvt 0.782968 0.733732\nvt 0.786993 0.734294\nvt 0.781107 0.718681\nvt 0.7849 0.719246\nvt 0.780068 0.725801\nvt 0.776178 0.725152\nvt 0.774948 0.732444\nvt 0.778945 0.733125\nvt 0.773561 0.717347\nvt 0.777339 0.718028\nvt 0.772301 0.724447\nvt 0.778455 0.711032\nvt 0.782122 0.711639\nvt 0.775993 0.70352\nvt 0.779549 0.704099\nvt 0.774781 0.710367\nvt 0.785791 0.712219\nvt 0.783105 0.704678\nvt 0.786661 0.705257\nvt 0.76844 0.723675\nvt 0.767003 0.730918\nvt 0.770962 0.731717\nvt 0.766014 0.715798\nvt 0.769792 0.716586\nvt 0.764598 0.722853\nvt 0.760774 0.721995\nvt 0.75916 0.72917\nvt 0.763059 0.730074\nvt 0.758531 0.714082\nvt 0.762274 0.714943\nvt 0.756976 0.721099\nvt 0.763699 0.70798\nvt 0.767391 0.708806\nvt 0.761448 0.70024\nvt 0.765085 0.70106\nvt 0.760011 0.707137\nvt 0.771089 0.709613\nvt 0.768721 0.70188\nvt 0.772357 0.7027\nvt 0.753213 0.720161\nvt 0.751458 0.727233\nvt 0.755286 0.72823\nvt 0.751102 0.712285\nvt 0.754819 0.713186\nvt 0.749486 0.719195\nvt 0.747661 0.7262\nvt 0.745795 0.718211\nvt 0.743942 0.725132\nvt 0.747456 0.711352\nvt 0.743807 0.71042\nvt 0.742153 0.717207\nvt 0.748984 0.704538\nvt 0.752648 0.705413\nvt 0.74678 0.696915\nvt 0.750447 0.697746\nvt 0.745334 0.703662\nvt 0.756325 0.70628\nvt 0.754114 0.698577\nvt 0.757781 0.699409\nvt 0.74027 0.724037\nvt 0.73857 0.716182\nvt 0.736676 0.722907\nvt 0.740217 0.709477\nvt 0.736639 0.708535\nvt 0.735084 0.715151\nvt 0.733211 0.721767\nvt 0.731736 0.714133\nvt 0.729966 0.720642\nvt 0.733141 0.707589\nvt 0.729648 0.706645\nvt 0.728456 0.713121\nvt 0.73807 0.701917\nvt 0.734453 0.701044\nvt 0.735719 0.694499\nvt 0.732032 0.693693\nvt 0.73084 0.700169\nvt 0.741697 0.702789\nvt 0.743093 0.69611\nvt 0.739406 0.695304\nvt 0.138914 0.159632\nvt 0.148795 0.155836\nvt 0.141242 0.164408\nvt 0.150688 0.160135\nvt 0.131529 0.168456\nvt 0.134033 0.173481\nvt 0.14362 0.16922\nvt 0.146098 0.174106\nvt 0.155475 0.169557\nvt 0.153006 0.164779\nvt 0.139154 0.183559\nvt 0.136586 0.178534\nvt 0.148637 0.17903\nvt 0.12698 0.182896\nvt 0.124366 0.177677\nvt 0.120014 0.192626\nvt 0.117328 0.187224\nvt 0.129613 0.188061\nvt 0.119152 0.167223\nvt 0.129033 0.163427\nvt 0.121758 0.172451\nvt 0.111957 0.17642\nvt 0.114643 0.181822\nvt 0.158019 0.174404\nvt 0.151198 0.183956\nvt 0.16058 0.17928\nvt 0.141759 0.188558\nvt 0.144367 0.193513\nvt 0.153768 0.18888\nvt 0.156338 0.193799\nvt 0.165701 0.18909\nvt 0.16314 0.184172\nvt 0.149592 0.203396\nvt 0.146986 0.198472\nvt 0.158898 0.198713\nvt 0.137642 0.203127\nvt 0.134959 0.198132\nvt 0.131066 0.212822\nvt 0.128303 0.207773\nvt 0.140311 0.208081\nvt 0.132278 0.193125\nvt 0.122777 0.197675\nvt 0.12554 0.202724\nvt 0.168244 0.194016\nvt 0.161441 0.203624\nvt 0.170769 0.198957\nvt 0.152175 0.208292\nvt 0.154744 0.213163\nvt 0.16396 0.208525\nvt 0.166446 0.213408\nvt 0.175719 0.208837\nvt 0.17327 0.203903\nvt 0.159777 0.222841\nvt 0.157271 0.218012\nvt 0.168892 0.218274\nvt 0.148169 0.222644\nvt 0.145566 0.217811\nvt 0.141781 0.23211\nvt 0.139102 0.227288\nvt 0.150738 0.227446\nvt 0.142949 0.212966\nvt 0.133745 0.217644\nvt 0.136424 0.222466\nvt 0.178129 0.213764\nvt 0.171295 0.223122\nvt 0.180487 0.21868\nvt 0.162229 0.227635\nvt 0.164663 0.232415\nvt 0.173655 0.227947\nvt 0.175972 0.232743\nvt 0.185053 0.228451\nvt 0.182805 0.223588\nvt 0.169384 0.241865\nvt 0.167032 0.237147\nvt 0.178241 0.237506\nvt 0.158194 0.241631\nvt 0.155733 0.236923\nvt 0.151947 0.250836\nvt 0.149406 0.246154\nvt 0.160623 0.24631\nvt 0.153254 0.2322\nvt 0.144323 0.236792\nvt 0.146864 0.241473\nvt 0.187252 0.233291\nvt 0.180456 0.242229\nvt 0.189384 0.238089\nvt 0.171679 0.246532\nvt 0.173963 0.251191\nvt 0.182626 0.246909\nvt 0.184757 0.25154\nvt 0.193479 0.247542\nvt 0.191468 0.242859\nvt 0.1784 0.260316\nvt 0.176182 0.25576\nvt 0.186846 0.25611\nvt 0.167707 0.260136\nvt 0.165366 0.255553\nvt 0.161729 0.269175\nvt 0.159283 0.264591\nvt 0.170041 0.264681\nvt 0.163009 0.250948\nvt 0.154393 0.255421\nvt 0.156838 0.260006\nvt 0.78041 0.965407\nvt 0.778128 0.965262\nvt 0.780433 0.961509\nvt 0.777991 0.960952\nvt 0.775516 0.960593\nvt 0.777891 0.956709\nvt 0.775235 0.956204\nvt 0.773025 0.960352\nvt 0.773566 0.964972\nvt 0.775847 0.965117\nvt 0.770452 0.960314\nvt 0.772528 0.955767\nvt 0.769775 0.955655\nvt 0.775 0.951781\nvt 0.77212 0.951249\nvt 0.769196 0.950986\nvt 0.771812 0.94684\nvt 0.768717 0.946368\nvt 0.780558 0.957568\nvt 0.780738 0.953701\nvt 0.777866 0.952603\nvt 0.777937 0.948739\nvt 0.774883 0.947673\nvt 0.767735 0.96056\nvt 0.76859 0.965361\nvt 0.771285 0.964826\nvt 0.763981 0.956138\nvt 0.766923 0.955761\nvt 0.764921 0.960997\nvt 0.762057 0.961532\nvt 0.763202 0.966431\nvt 0.765896 0.965896\nvt 0.757814 0.957332\nvt 0.760952 0.956621\nvt 0.759105 0.962237\nvt 0.759926 0.951686\nvt 0.763111 0.951199\nvt 0.755532 0.947384\nvt 0.758999 0.946732\nvt 0.75662 0.952375\nvt 0.766197 0.950967\nvt 0.762329 0.94633\nvt 0.765563 0.946188\nvt 0.756026 0.963181\nvt 0.757542 0.968133\nvt 0.760508 0.966966\nvt 0.751201 0.959286\nvt 0.754554 0.958213\nvt 0.752868 0.964285\nvt 0.749678 0.965471\nvt 0.75161 0.970467\nvt 0.754576 0.9693\nvt 0.744333 0.961825\nvt 0.747781 0.960459\nvt 0.746472 0.966802\nvt 0.745951 0.955416\nvt 0.7496 0.95422\nvt 0.744225 0.950348\nvt 0.740274 0.951724\nvt 0.74225 0.956788\nvt 0.753167 0.953213\nvt 0.748111 0.949177\nvt 0.751889 0.948184\nvt 0.743266 0.968344\nvt 0.745698 0.973319\nvt 0.748644 0.971633\nvt 0.737427 0.965076\nvt 0.740866 0.963352\nvt 0.740066 0.970034\nvt 0.736881 0.971807\nvt 0.739805 0.976692\nvt 0.742751 0.975006\nvt 0.730596 0.968932\nvt 0.733976 0.966902\nvt 0.733748 0.973727\nvt 0.731112 0.961958\nvt 0.734809 0.960043\nvt 0.724372 0.959155\nvt 0.728317 0.956976\nvt 0.727456 0.964066\nvt 0.738529 0.958325\nvt 0.73629 0.95327\nvt 0.732308 0.955029\nvt 0.730708 0.975859\nvt 0.73415 0.980559\nvt 0.736859 0.978378\nvt 0.724022 0.973492\nvt 0.727275 0.971134\nvt 0.727723 0.978117\nvt 0.731441 0.982741\nvt 0.724754 0.980419\nvt 0.728733 0.984923\nvt 0.717563 0.97838\nvt 0.72078 0.975909\nvt 0.721794 0.982742\nvt 0.716813 0.971387\nvt 0.720315 0.968816\nvt 0.709102 0.969655\nvt 0.712842 0.966818\nvt 0.713333 0.974017\nvt 0.72386 0.966364\nvt 0.716644 0.964118\nvt 0.72048 0.961544\nvt 0.439425 0.021035\nvt 0.446385 0.0206694\nvt 0.440045 0.0253208\nvt 0.44696 0.0246166\nvt 0.433128 0.026018\nvt 0.433862 0.0306191\nvt 0.440694 0.0295996\nvt 0.4414 0.0338646\nvt 0.44811 0.032511\nvt 0.447535 0.0285638\nvt 0.435678 0.0397574\nvt 0.434665 0.0352144\nvt 0.442286 0.0380817\nvt 0.427879 0.0365564\nvt 0.426976 0.0316326\nvt 0.422246 0.0431172\nvt 0.421065 0.037873\nvt 0.428974 0.0414465\nvt 0.425504 0.0217662\nvt 0.432465 0.0214006\nvt 0.426207 0.0267013\nvt 0.419264 0.027319\nvt 0.420105 0.0325909\nvt 0.448685 0.0364582\nvt 0.443473 0.0422165\nvt 0.450003 0.0401871\nvt 0.43692 0.0442463\nvt 0.438437 0.0486477\nvt 0.444867 0.0462898\nvt 0.446372 0.0503223\nvt 0.452639 0.0476448\nvt 0.451321 0.0439159\nvt 0.441996 0.0572492\nvt 0.440085 0.0530068\nvt 0.448074 0.0542557\nvt 0.433759 0.0557049\nvt 0.431915 0.0510342\nvt 0.429643 0.063312\nvt 0.427405 0.0584018\nvt 0.435838 0.0602799\nvt 0.43032 0.0462769\nvt 0.423697 0.048295\nvt 0.425441 0.0533829\nvt 0.453957 0.0513736\nvt 0.450057 0.0580314\nvt 0.455969 0.054688\nvt 0.444122 0.0613827\nvt 0.446502 0.0653691\nvt 0.452235 0.0616937\nvt 0.45452 0.0652867\nvt 0.459992 0.0613166\nvt 0.45798 0.0580023\nvt 0.451781 0.0729983\nvt 0.449017 0.0692744\nvt 0.456989 0.0687219\nvt 0.443455 0.0732971\nvt 0.440673 0.0690951\nvt 0.441086 0.0817286\nvt 0.437831 0.0773386\nvt 0.446474 0.0773472\nvt 0.438138 0.0647496\nvt 0.432112 0.0681182\nvt 0.434853 0.072787\nvt 0.462004 0.064631\nvt 0.459722 0.0719107\nvt 0.464647 0.0672981\nvt 0.457975 0.0798798\nvt 0.454758 0.0765485\nvt 0.462638 0.074922\nvt 0.465658 0.0778248\nvt 0.469931 0.0726324\nvt 0.467289 0.0699652\nvt 0.464933 0.0859827\nvt 0.461338 0.0830657\nvt 0.468846 0.0804918\nvt 0.456926 0.0884032\nvt 0.453195 0.0849329\nvt 0.456736 0.0974182\nvt 0.452399 0.0938369\nvt 0.460899 0.0916302\nvt 0.449716 0.0812366\nvt 0.448358 0.0900014\nvt 0.444582 0.0859664\nvt 0.472574 0.0752995\nvt 0.472268 0.0827956\nvt 0.47575 0.0770437\nvt 0.472757 0.0909386\nvt 0.468737 0.0886217\nvt 0.475853 0.0848374\nvt 0.479528 0.0867181\nvt 0.482101 0.0805323\nvt 0.478925 0.078788\nvt 0.481258 0.0946884\nvt 0.476912 0.0930108\nvt 0.483327 0.088277\nvt 0.474212 0.0995172\nvt 0.469543 0.0972444\nvt 0.476817 0.108339\nvt 0.471397 0.10628\nvt 0.479092 0.101375\nvt 0.465105 0.0945963\nvt 0.466244 0.103711\nvt 0.461347 0.100745\nvt 0.78101 0.950156\nvt 0.781378 0.947027\nvt 0.778127 0.945226\nvt 0.774872 0.943724\nvt 0.778479 0.941809\nvt 0.775032 0.939955\nvt 0.771611 0.942578\nvt 0.768334 0.941808\nvt 0.771515 0.938359\nvt 0.768061 0.937321\nvt 0.775225 0.935935\nvt 0.771522 0.934075\nvt 0.767886 0.932737\nvt 0.771598 0.929589\nvt 0.767792 0.928118\nvt 0.781959 0.94404\nvt 0.782759 0.940958\nvt 0.779034 0.938235\nvt 0.77957 0.934032\nvt 0.775531 0.931579\nvt 0.76503 0.941433\nvt 0.761661 0.941427\nvt 0.764601 0.936703\nvt 0.761099 0.936678\nvt 0.758191 0.941764\nvt 0.753716 0.937389\nvt 0.757498 0.936832\nvt 0.754568 0.94236\nvt 0.756918 0.931982\nvt 0.760644 0.931777\nvt 0.756436 0.927196\nvt 0.752399 0.927677\nvt 0.753012 0.932487\nvt 0.76428 0.932\nvt 0.764042 0.927292\nvt 0.760273 0.927056\nvt 0.750744 0.943129\nvt 0.749727 0.938104\nvt 0.745526 0.939108\nvt 0.746755 0.944091\nvt 0.742641 0.945264\nvt 0.736741 0.941583\nvt 0.74119 0.940202\nvt 0.738438 0.946635\nvt 0.744438 0.934057\nvt 0.739865 0.935201\nvt 0.733704 0.931585\nvt 0.738661 0.930257\nvt 0.735157 0.936557\nvt 0.748836 0.933166\nvt 0.743448 0.929166\nvt 0.748056 0.928306\nvt 0.734182 0.948192\nvt 0.727656 0.94496\nvt 0.732204 0.943121\nvt 0.729901 0.949958\nvt 0.72562 0.951958\nvt 0.718467 0.949229\nvt 0.723037 0.946923\nvt 0.721364 0.954195\nvt 0.720582 0.941893\nvt 0.725486 0.939847\nvt 0.712998 0.939196\nvt 0.718253 0.93685\nvt 0.715665 0.94422\nvt 0.730354 0.938087\nvt 0.723478 0.934826\nvt 0.728631 0.933075\nvt 0.717153 0.956674\nvt 0.709401 0.954563\nvt 0.713905 0.951764\nvt 0.712985 0.959347\nvt 0.708852 0.962166\nvt 0.700375 0.96046\nvt 0.704874 0.957456\nvt 0.704739 0.965057\nvt 0.700934 0.952713\nvt 0.705851 0.949666\nvt 0.691648 0.951264\nvt 0.697092 0.947854\nvt 0.696012 0.955862\nvt 0.710758 0.946823\nvt 0.70243 0.944731\nvt 0.707723 0.941826\nvt 0.41228 0.0278196\nvt 0.41145 0.0221399\nvt 0.418544 0.0221317\nvt 0.406324 0.0343377\nvt 0.40528 0.0282609\nvt 0.413186 0.0334913\nvt 0.414243 0.0391468\nvt 0.408841 0.0463609\nvt 0.407434 0.0403952\nvt 0.415516 0.0447556\nvt 0.40066 0.0416355\nvt 0.399393 0.0352064\nvt 0.395547 0.0495813\nvt 0.393928 0.0428903\nvt 0.402152 0.0479743\nvt 0.398287 0.0287005\nvt 0.397261 0.0221561\nvt 0.404355 0.022148\nvt 0.392552 0.0360845\nvt 0.391304 0.0291915\nvt 0.417074 0.0502873\nvt 0.412519 0.0580136\nvt 0.410476 0.0522576\nvt 0.418913 0.0557327\nvt 0.421032 0.0610824\nvt 0.417236 0.0693013\nvt 0.414685 0.0637331\nvt 0.423417 0.0663314\nvt 0.408406 0.0663399\nvt 0.40601 0.0603337\nvt 0.404994 0.0751115\nvt 0.402186 0.0689076\nvt 0.411078 0.0722404\nvt 0.40393 0.0542094\nvt 0.399685 0.0625825\nvt 0.397447 0.0561516\nvt 0.426051 0.0714744\nvt 0.423135 0.0801063\nvt 0.419996 0.0747925\nvt 0.428953 0.0764963\nvt 0.432141 0.0813824\nvt 0.430102 0.0904739\nvt 0.426424 0.0853865\nvt 0.435607 0.0861281\nvt 0.420716 0.0893087\nvt 0.417186 0.0837425\nvt 0.418994 0.0989315\nvt 0.415008 0.0931346\nvt 0.424553 0.0947633\nvt 0.413989 0.0780471\nvt 0.411363 0.0872278\nvt 0.408022 0.0812308\nvt 0.439344 0.090729\nvt 0.438363 0.10022\nvt 0.434031 0.0954672\nvt 0.443377 0.0951526\nvt 0.447734 0.0993659\nvt 0.447943 0.109299\nvt 0.442935 0.104907\nvt 0.452419 0.103351\nvt 0.438002 0.110377\nvt 0.433138 0.105344\nvt 0.438341 0.120999\nvt 0.432902 0.115726\nvt 0.443264 0.115224\nvt 0.428674 0.100124\nvt 0.427883 0.110259\nvt 0.423255 0.104668\nvt 0.457434 0.107092\nvt 0.459138 0.117317\nvt 0.45331 0.113513\nvt 0.462776 0.110463\nvt 0.46844 0.113341\nvt 0.471912 0.123406\nvt 0.465293 0.120769\nvt 0.474405 0.11562\nvt 0.461911 0.128631\nvt 0.455092 0.124354\nvt 0.466544 0.142285\nvt 0.457713 0.136329\nvt 0.469297 0.131867\nvt 0.448919 0.119884\nvt 0.450583 0.131181\nvt 0.444163 0.126113\nvt 0.784172 0.937018\nvt 0.783781 0.930292\nvt 0.779866 0.928728\nvt 0.775762 0.92662\nvt 0.780236 0.92294\nvt 0.776181 0.921338\nvt 0.77171 0.924761\nvt 0.767735 0.92334\nvt 0.771936 0.91974\nvt 0.767809 0.91854\nvt 0.776736 0.915954\nvt 0.772352 0.914675\nvt 0.768003 0.913658\nvt 0.773005 0.90968\nvt 0.768418 0.908878\nvt 0.784104 0.924207\nvt 0.784933 0.918441\nvt 0.780994 0.917284\nvt 0.777665 0.910773\nvt 0.782151 0.911896\nvt 0.763861 0.92255\nvt 0.759993 0.922288\nvt 0.763781 0.917811\nvt 0.75982 0.917714\nvt 0.756038 0.922456\nvt 0.751872 0.922912\nvt 0.751428 0.918251\nvt 0.755747 0.917794\nvt 0.755588 0.913242\nvt 0.759759 0.912995\nvt 0.751174 0.913706\nvt 0.751017 0.909205\nvt 0.75556 0.908729\nvt 0.763851 0.913116\nvt 0.764085 0.908469\nvt 0.759857 0.908451\nvt 0.747371 0.923517\nvt 0.742587 0.924318\nvt 0.741792 0.91964\nvt 0.746798 0.918819\nvt 0.737574 0.925364\nvt 0.731162 0.921739\nvt 0.7366 0.920541\nvt 0.732375 0.926626\nvt 0.735736 0.915803\nvt 0.741186 0.914909\nvt 0.734992 0.911103\nvt 0.729084 0.912125\nvt 0.730061 0.916905\nvt 0.746353 0.914236\nvt 0.740642 0.910289\nvt 0.746027 0.909686\nvt 0.727038 0.928072\nvt 0.719844 0.924828\nvt 0.725569 0.923105\nvt 0.721588 0.929768\nvt 0.716053 0.931777\nvt 0.708059 0.929005\nvt 0.713992 0.926702\nvt 0.710454 0.934102\nvt 0.712081 0.921651\nvt 0.718224 0.91976\nvt 0.703729 0.918733\nvt 0.710321 0.91659\nvt 0.705809 0.923876\nvt 0.724221 0.918201\nvt 0.723004 0.913323\nvt 0.71675 0.914805\nvt 0.704811 0.936745\nvt 0.695979 0.934548\nvt 0.70204 0.931605\nvt 0.699128 0.939659\nvt 0.693407 0.942798\nvt 0.683688 0.940835\nvt 0.68984 0.937618\nvt 0.687668 0.946049\nvt 0.686351 0.932391\nvt 0.692942 0.929287\nvt 0.675727 0.930405\nvt 0.683054 0.927016\nvt 0.679707 0.93562\nvt 0.699429 0.926435\nvt 0.690097 0.923977\nvt 0.696987 0.921197\nvt 0.384334 0.0297868\nvt 0.383038 0.0224916\nvt 0.390167 0.0221642\nvt 0.378982 0.0380265\nvt 0.377384 0.030457\nvt 0.38571 0.0370333\nvt 0.387244 0.0441822\nvt 0.38257 0.0528521\nvt 0.380629 0.045522\nvt 0.388999 0.05121\nvt 0.374104 0.0469204\nvt 0.372212 0.0391224\nvt 0.369924 0.0562862\nvt 0.367651 0.0484006\nvt 0.376188 0.0545489\nvt 0.370461 0.0311724\nvt 0.36878 0.0231465\nvt 0.375909 0.0228191\nvt 0.365566 0.0403106\nvt 0.36358 0.0320453\nvt 0.391038 0.0580929\nvt 0.387285 0.0670157\nvt 0.384722 0.0600376\nvt 0.393374 0.0648351\nvt 0.396019 0.0714407\nvt 0.392991 0.0806733\nvt 0.389946 0.0739294\nvt 0.398936 0.0779332\nvt 0.384007 0.0763641\nvt 0.381117 0.0692574\nvt 0.381406 0.0859631\nvt 0.378161 0.0787702\nvt 0.387143 0.0833517\nvt 0.378518 0.0619901\nvt 0.372406 0.0639669\nvt 0.375166 0.0714445\nvt 0.402086 0.0843363\nvt 0.399849 0.0938814\nvt 0.396224 0.0873508\nvt 0.40552 0.0906437\nvt 0.40929 0.0968493\nvt 0.407785 0.10686\nvt 0.403605 0.100429\nvt 0.413375 0.102982\nvt 0.397997 0.103849\nvt 0.394075 0.0970943\nvt 0.396688 0.114108\nvt 0.39243 0.107134\nvt 0.402218 0.110574\nvt 0.390478 0.0902618\nvt 0.384807 0.0930918\nvt 0.388476 0.100141\nvt 0.417755 0.109072\nvt 0.417082 0.11957\nvt 0.412223 0.113299\nvt 0.422479 0.115064\nvt 0.427595 0.120906\nvt 0.427633 0.131929\nvt 0.422151 0.125877\nvt 0.43309 0.12659\nvt 0.416635 0.130601\nvt 0.411502 0.124015\nvt 0.416388 0.141966\nvt 0.411043 0.135097\nvt 0.422054 0.13707\nvt 0.406708 0.117318\nvt 0.405962 0.128141\nvt 0.401177 0.121141\nvt 0.438947 0.132109\nvt 0.445259 0.137617\nvt 0.439608 0.143715\nvt 0.433415 0.137876\nvt 0.452117 0.143266\nvt 0.458799 0.149578\nvt 0.445922 0.149707\nvt 0.452458 0.155993\nvt 0.439923 0.155918\nvt 0.433648 0.149681\nvt 0.446515 0.162223\nvt 0.434082 0.162042\nvt 0.440977 0.168444\nvt 0.427708 0.143414\nvt 0.42779 0.155483\nvt 0.4219 0.148783\nvt 0.783717 0.906913\nvt 0.78627 0.913013\nvt 0.788056 0.908058\nvt 0.778917 0.905811\nvt 0.780394 0.901194\nvt 0.78564 0.902192\nvt 0.773942 0.904868\nvt 0.76905 0.904187\nvt 0.769831 0.899658\nvt 0.775005 0.900229\nvt 0.776039 0.895753\nvt 0.781875 0.896564\nvt 0.776873 0.891359\nvt 0.771158 0.890867\nvt 0.770536 0.895202\nvt 0.787867 0.897589\nvt 0.790317 0.903434\nvt 0.793199 0.898936\nvt 0.78306 0.892082\nvt 0.789649 0.892971\nvt 0.764499 0.903873\nvt 0.760099 0.903885\nvt 0.760439 0.899467\nvt 0.765011 0.899359\nvt 0.755662 0.904183\nvt 0.750972 0.90463\nvt 0.750966 0.900062\nvt 0.755852 0.899662\nvt 0.756087 0.895223\nvt 0.760809 0.894975\nvt 0.751112 0.89559\nvt 0.751204 0.891145\nvt 0.756297 0.890824\nvt 0.765543 0.894955\nvt 0.761121 0.890626\nvt 0.766 0.890622\nvt 0.745813 0.905089\nvt 0.740259 0.905646\nvt 0.739876 0.901061\nvt 0.745687 0.900498\nvt 0.73438 0.906391\nvt 0.733863 0.901692\nvt 0.727508 0.902542\nvt 0.728247 0.90732\nvt 0.739695 0.896427\nvt 0.733401 0.897032\nvt 0.733004 0.892378\nvt 0.726257 0.893049\nvt 0.726838 0.897787\nvt 0.745623 0.895969\nvt 0.739444 0.891845\nvt 0.745572 0.891457\nvt 0.721929 0.90843\nvt 0.720971 0.903547\nvt 0.714202 0.904875\nvt 0.715419 0.909794\nvt 0.708712 0.911483\nvt 0.700056 0.908249\nvt 0.707254 0.906358\nvt 0.701811 0.913501\nvt 0.713155 0.899824\nvt 0.705947 0.901242\nvt 0.697078 0.897635\nvt 0.704796 0.896096\nvt 0.698479 0.902957\nvt 0.720104 0.898696\nvt 0.719351 0.893839\nvt 0.712212 0.894843\nvt 0.694722 0.915854\nvt 0.68503 0.912964\nvt 0.69264 0.910438\nvt 0.687465 0.9185\nvt 0.680064 0.921396\nvt 0.669453 0.918429\nvt 0.67728 0.915624\nvt 0.67259 0.924417\nvt 0.674603 0.909796\nvt 0.682783 0.90727\nvt 0.663179 0.906452\nvt 0.672189 0.903813\nvt 0.666316 0.912441\nvt 0.69075 0.904978\nvt 0.680758 0.901508\nvt 0.689063 0.899437\nvt 0.356756 0.0331881\nvt 0.354622 0.0246173\nvt 0.361652 0.023474\nvt 0.352443 0.0431504\nvt 0.349976 0.0345044\nvt 0.358947 0.0416729\nvt 0.361253 0.0499858\nvt 0.35761 0.0599697\nvt 0.354931 0.051678\nvt 0.363714 0.058099\nvt 0.348704 0.0534795\nvt 0.345931 0.0447906\nvt 0.345635 0.063987\nvt 0.342547 0.0554092\nvt 0.351575 0.0619397\nvt 0.343229 0.0358981\nvt 0.340562 0.026904\nvt 0.347592 0.0257606\nvt 0.339529 0.0465724\nvt 0.336545 0.0375086\nvt 0.366368 0.0659847\nvt 0.360418 0.0680441\nvt 0.363504 0.075853\nvt 0.369243 0.0736679\nvt 0.372364 0.0811734\nvt 0.370064 0.0910956\nvt 0.366651 0.0835615\nvt 0.375688 0.0885541\nvt 0.361057 0.0859227\nvt 0.357724 0.0781294\nvt 0.359098 0.0960517\nvt 0.355532 0.0882872\nvt 0.36454 0.0935884\nvt 0.354572 0.0701457\nvt 0.3488 0.0723067\nvt 0.352097 0.0803867\nvt 0.379171 0.0958632\nvt 0.373603 0.0985658\nvt 0.377429 0.105947\nvt 0.382876 0.103111\nvt 0.386868 0.110308\nvt 0.38559 0.120756\nvt 0.381348 0.113357\nvt 0.391119 0.117512\nvt 0.375911 0.116271\nvt 0.371914 0.108744\nvt 0.374679 0.126769\nvt 0.370512 0.119083\nvt 0.380112 0.12383\nvt 0.368141 0.101189\nvt 0.362736 0.103766\nvt 0.366529 0.111439\nvt 0.395601 0.124783\nvt 0.394779 0.13575\nvt 0.390025 0.128235\nvt 0.400343 0.132084\nvt 0.405373 0.13938\nvt 0.404846 0.151152\nvt 0.399665 0.143416\nvt 0.410633 0.146691\nvt 0.393959 0.147168\nvt 0.3891 0.139256\nvt 0.39318 0.159086\nvt 0.38822 0.15066\nvt 0.399039 0.155293\nvt 0.384496 0.131485\nvt 0.383482 0.142529\nvt 0.378978 0.134572\nvt 0.416065 0.154041\nvt 0.421898 0.161269\nvt 0.4102 0.159057\nvt 0.416203 0.16686\nvt 0.428362 0.168217\nvt 0.430433 0.181461\nvt 0.422635 0.174535\nvt 0.435619 0.174776\nvt 0.410102 0.172325\nvt 0.416771 0.181085\nvt 0.418762 0.198081\nvt 0.410331 0.186923\nvt 0.424974 0.188794\nvt 0.404306 0.163704\nvt 0.403999 0.177161\nvt 0.398306 0.167909\nvt 0.797119 0.894078\nvt 0.79689 0.888566\nvt 0.790237 0.888207\nvt 0.78361 0.887538\nvt 0.790217 0.883418\nvt 0.783841 0.883003\nvt 0.777341 0.886965\nvt 0.777601 0.882573\nvt 0.771827 0.882237\nvt 0.771535 0.886541\nvt 0.783901 0.878463\nvt 0.77781 0.878184\nvt 0.778102 0.873746\nvt 0.772378 0.873582\nvt 0.77204 0.877934\nvt 0.796649 0.883668\nvt 0.796493 0.878897\nvt 0.790177 0.878725\nvt 0.790264 0.874069\nvt 0.784139 0.873901\nvt 0.766293 0.886318\nvt 0.766506 0.882034\nvt 0.761487 0.882003\nvt 0.761343 0.886284\nvt 0.756414 0.886428\nvt 0.751222 0.886667\nvt 0.751144 0.882189\nvt 0.756482 0.88204\nvt 0.761644 0.877666\nvt 0.756548 0.877667\nvt 0.756638 0.873269\nvt 0.75116 0.873282\nvt 0.751179 0.877739\nvt 0.766729 0.877758\nvt 0.767025 0.873427\nvt 0.761845 0.873308\nvt 0.745483 0.886921\nvt 0.745375 0.882382\nvt 0.738987 0.882667\nvt 0.739276 0.887245\nvt 0.732681 0.887696\nvt 0.732395 0.883006\nvt 0.725401 0.883471\nvt 0.7258 0.888265\nvt 0.738891 0.878053\nvt 0.732112 0.878329\nvt 0.731867 0.873639\nvt 0.724723 0.873883\nvt 0.725032 0.878682\nvt 0.74527 0.877862\nvt 0.745167 0.873336\nvt 0.738683 0.87345\nvt 0.718733 0.888943\nvt 0.718213 0.884025\nvt 0.710705 0.884765\nvt 0.711423 0.889793\nvt 0.703808 0.89088\nvt 0.702972 0.885619\nvt 0.694829 0.886721\nvt 0.695871 0.892207\nvt 0.710196 0.879644\nvt 0.702279 0.880337\nvt 0.701747 0.875006\nvt 0.693322 0.875601\nvt 0.693983 0.88119\nvt 0.717753 0.879107\nvt 0.71739 0.874163\nvt 0.709752 0.874523\nvt 0.687594 0.893778\nvt 0.686337 0.888026\nvt 0.677502 0.889546\nvt 0.67902 0.895573\nvt 0.670193 0.897573\nvt 0.6593 0.892897\nvt 0.668471 0.891174\nvt 0.661239 0.899674\nvt 0.666879 0.884714\nvt 0.676242 0.883385\nvt 0.65542 0.879341\nvt 0.66561 0.878095\nvt 0.65736 0.886119\nvt 0.68529 0.882208\nvt 0.684479 0.876297\nvt 0.675225 0.87712\nvt 0.329955 0.0394753\nvt 0.326745 0.0302603\nvt 0.333533 0.0280473\nvt 0.326911 0.0507558\nvt 0.323426 0.0416671\nvt 0.33318 0.0485854\nvt 0.336435 0.057486\nvt 0.333882 0.0684033\nvt 0.330381 0.0597061\nvt 0.339729 0.0661486\nvt 0.3244 0.0620658\nvt 0.320675 0.0531147\nvt 0.322366 0.0732701\nvt 0.31847 0.0645816\nvt 0.3281 0.0707829\nvt 0.316928 0.043953\nvt 0.31317 0.0346862\nvt 0.319958 0.0324732\nvt 0.31451 0.055645\nvt 0.310505 0.0464775\nvt 0.343071 0.0745447\nvt 0.337393 0.0768572\nvt 0.340972 0.0850422\nvt 0.346493 0.0827113\nvt 0.350029 0.0906854\nvt 0.348244 0.101016\nvt 0.344564 0.0931065\nvt 0.353653 0.0985349\nvt 0.339156 0.0955397\nvt 0.335451 0.0874817\nvt 0.337559 0.105962\nvt 0.33377 0.098012\nvt 0.34289 0.103481\nvt 0.331774 0.0792421\nvt 0.326189 0.0817174\nvt 0.329975 0.0899488\nvt 0.357341 0.106328\nvt 0.351974 0.108866\nvt 0.355823 0.116677\nvt 0.361142 0.114086\nvt 0.365108 0.12183\nvt 0.363762 0.132392\nvt 0.35972 0.124508\nvt 0.369213 0.129624\nvt 0.354369 0.127115\nvt 0.350469 0.11924\nvt 0.352933 0.137634\nvt 0.34902 0.129673\nvt 0.358343 0.135047\nvt 0.346652 0.111372\nvt 0.341341 0.113875\nvt 0.345149 0.121776\nvt 0.373436 0.137534\nvt 0.372199 0.148555\nvt 0.367896 0.140373\nvt 0.377822 0.145613\nvt 0.382415 0.153915\nvt 0.381151 0.165702\nvt 0.376583 0.156947\nvt 0.387191 0.162543\nvt 0.366516 0.151307\nvt 0.370765 0.159772\nvt 0.375108 0.168555\nvt 0.36906 0.1712\nvt 0.364938 0.162431\nvt 0.362384 0.143088\nvt 0.356869 0.145708\nvt 0.36086 0.153969\nvt 0.392125 0.171601\nvt 0.390619 0.184377\nvt 0.385839 0.174851\nvt 0.39732 0.181113\nvt 0.402877 0.191104\nvt 0.407799 0.201499\nvt 0.399374 0.204376\nvt 0.395192 0.194257\nvt 0.388064 0.197013\nvt 0.383882 0.187232\nvt 0.391849 0.207007\nvt 0.38481 0.209355\nvt 0.381196 0.199452\nvt 0.379522 0.177727\nvt 0.377225 0.189762\nvt 0.373187 0.180324\nvt 0.790626 0.869393\nvt 0.796489 0.874175\nvt 0.796749 0.869449\nvt 0.784552 0.869303\nvt 0.785186 0.864693\nvt 0.791145 0.864737\nvt 0.778613 0.869205\nvt 0.772888 0.869096\nvt 0.773532 0.864546\nvt 0.779257 0.864626\nvt 0.779949 0.860074\nvt 0.785795 0.860116\nvt 0.774187 0.860017\nvt 0.774789 0.855533\nvt 0.78056 0.855588\nvt 0.791704 0.860142\nvt 0.797162 0.864763\nvt 0.797615 0.86015\nvt 0.786338 0.855636\nvt 0.792187 0.855649\nvt 0.767456 0.868977\nvt 0.762144 0.868872\nvt 0.762487 0.864379\nvt 0.767975 0.864465\nvt 0.756777 0.868807\nvt 0.756948 0.864307\nvt 0.751127 0.864245\nvt 0.751153 0.868779\nvt 0.75713 0.859793\nvt 0.762881 0.859872\nvt 0.757326 0.855276\nvt 0.751253 0.855152\nvt 0.751182 0.859707\nvt 0.768532 0.859948\nvt 0.763219 0.855375\nvt 0.769035 0.855461\nvt 0.745069 0.868781\nvt 0.738568 0.868823\nvt 0.744988 0.864203\nvt 0.738389 0.864169\nvt 0.731698 0.868913\nvt 0.724536 0.869034\nvt 0.731591 0.864158\nvt 0.72443 0.864142\nvt 0.738395 0.859499\nvt 0.731531 0.859378\nvt 0.724393 0.859235\nvt 0.73157 0.85456\nvt 0.72447 0.854281\nvt 0.744942 0.859609\nvt 0.744964 0.85499\nvt 0.738406 0.854783\nvt 0.71716 0.86917\nvt 0.709477 0.869348\nvt 0.717044 0.864134\nvt 0.709282 0.864113\nvt 0.701398 0.869596\nvt 0.692891 0.869905\nvt 0.701231 0.864124\nvt 0.692672 0.864123\nvt 0.709344 0.858853\nvt 0.701251 0.858604\nvt 0.692712 0.858309\nvt 0.701504 0.853032\nvt 0.693027 0.852438\nvt 0.717028 0.859062\nvt 0.717162 0.85394\nvt 0.709532 0.853513\nvt 0.683928 0.870263\nvt 0.674564 0.870695\nvt 0.683659 0.86414\nvt 0.674197 0.864153\nvt 0.664857 0.87122\nvt 0.654979 0.871793\nvt 0.654537 0.864246\nvt 0.664461 0.864199\nvt 0.664262 0.857139\nvt 0.674202 0.857565\nvt 0.654096 0.856698\nvt 0.653655 0.84915\nvt 0.66466 0.850065\nvt 0.68369 0.857959\nvt 0.684089 0.851728\nvt 0.674641 0.85092\nvt 0.304198 0.049385\nvt 0.306382 0.0368991\nvt 0.299951 0.0402458\nvt 0.308415 0.0584258\nvt 0.302355 0.061396\nvt 0.297962 0.0525347\nvt 0.31257 0.0672699\nvt 0.316642 0.0759006\nvt 0.31092 0.0786608\nvt 0.306702 0.0701252\nvt 0.300866 0.0731419\nvt 0.296359 0.0645484\nvt 0.305241 0.0815575\nvt 0.299549 0.0845953\nvt 0.29505 0.0763333\nvt 0.291749 0.055786\nvt 0.293519 0.0435925\nvt 0.287087 0.0469392\nvt 0.290382 0.0678988\nvt 0.285606 0.0592742\nvt 0.320611 0.0843012\nvt 0.324509 0.0925062\nvt 0.315035 0.0869914\nvt 0.319009 0.0951299\nvt 0.328371 0.10055\nvt 0.332201 0.108496\nvt 0.326806 0.111077\nvt 0.322952 0.103151\nvt 0.317508 0.105811\nvt 0.313539 0.0978601\nvt 0.321396 0.113685\nvt 0.315932 0.116356\nvt 0.312025 0.108549\nvt 0.309458 0.0897862\nvt 0.303862 0.0927028\nvt 0.307996 0.100682\nvt 0.336005 0.116403\nvt 0.339808 0.1243\nvt 0.330638 0.118956\nvt 0.334419 0.126842\nvt 0.343636 0.132209\nvt 0.347477 0.140181\nvt 0.341974 0.142705\nvt 0.338214 0.134731\nvt 0.332751 0.13725\nvt 0.329016 0.129374\nvt 0.336446 0.145189\nvt 0.330853 0.147671\nvt 0.327226 0.139776\nvt 0.325231 0.121529\nvt 0.319771 0.124145\nvt 0.323524 0.131951\nvt 0.351321 0.148262\nvt 0.355185 0.156506\nvt 0.349464 0.159017\nvt 0.345737 0.150763\nvt 0.359082 0.164963\nvt 0.36298 0.173688\nvt 0.356873 0.176075\nvt 0.3532 0.167398\nvt 0.347297 0.169765\nvt 0.343736 0.161399\nvt 0.350786 0.178346\nvt 0.344669 0.180564\nvt 0.341354 0.172074\nvt 0.340113 0.153223\nvt 0.337923 0.163789\nvt 0.33443 0.155656\nvt 0.366847 0.182736\nvt 0.370634 0.192071\nvt 0.363994 0.19425\nvt 0.360513 0.185004\nvt 0.37429 0.201658\nvt 0.377672 0.211456\nvt 0.370481 0.213366\nvt 0.367395 0.203679\nvt 0.360556 0.205567\nvt 0.357468 0.196243\nvt 0.363428 0.215124\nvt 0.356415 0.216783\nvt 0.353774 0.207363\nvt 0.354194 0.187171\nvt 0.350907 0.198204\nvt 0.347873 0.189261\nvt 0.792476 0.851297\nvt 0.798003 0.855654\nvt 0.798213 0.851312\nvt 0.786718 0.851263\nvt 0.786912 0.846939\nvt 0.79263 0.84701\nvt 0.780961 0.851209\nvt 0.77519 0.851134\nvt 0.775445 0.846751\nvt 0.781217 0.846868\nvt 0.781392 0.842496\nvt 0.78707 0.84262\nvt 0.775663 0.842338\nvt 0.775849 0.837816\nvt 0.781537 0.838025\nvt 0.792706 0.842713\nvt 0.798294 0.847039\nvt 0.79833 0.842773\nvt 0.787169 0.838172\nvt 0.792758 0.838323\nvt 0.76939 0.851036\nvt 0.763519 0.850914\nvt 0.763731 0.846412\nvt 0.769652 0.846616\nvt 0.757536 0.850764\nvt 0.751404 0.850576\nvt 0.751605 0.845934\nvt 0.757757 0.846218\nvt 0.757984 0.841594\nvt 0.76399 0.8419\nvt 0.751852 0.84123\nvt 0.752169 0.836401\nvt 0.758261 0.836858\nvt 0.769872 0.842143\nvt 0.764237 0.837227\nvt 0.770093 0.837562\nvt 0.74509 0.850336\nvt 0.738556 0.850042\nvt 0.745304 0.84562\nvt 0.738781 0.845179\nvt 0.731765 0.84969\nvt 0.724739 0.849265\nvt 0.732095 0.844742\nvt 0.725163 0.84415\nvt 0.739163 0.840308\nvt 0.732537 0.839692\nvt 0.725713 0.838965\nvt 0.733117 0.83453\nvt 0.726414 0.833659\nvt 0.745589 0.840811\nvt 0.745977 0.835886\nvt 0.739641 0.835253\nvt 0.717499 0.848755\nvt 0.70996 0.84814\nvt 0.718017 0.843491\nvt 0.71056 0.842619\nvt 0.702038 0.847401\nvt 0.693702 0.846515\nvt 0.694677 0.840513\nvt 0.702823 0.841701\nvt 0.70383 0.835925\nvt 0.711414 0.837134\nvt 0.695919 0.834492\nvt 0.69742 0.82842\nvt 0.70507 0.830086\nvt 0.71869 0.83813\nvt 0.712442 0.831477\nvt 0.71954 0.832672\nvt 0.684922 0.845459\nvt 0.675704 0.844273\nvt 0.677219 0.837578\nvt 0.686131 0.839156\nvt 0.666054 0.842998\nvt 0.656188 0.841679\nvt 0.65872 0.834208\nvt 0.668046 0.83594\nvt 0.670239 0.828892\nvt 0.679087 0.830954\nvt 0.661253 0.826737\nvt 0.663785 0.819266\nvt 0.672772 0.821958\nvt 0.687659 0.832828\nvt 0.681277 0.824332\nvt 0.689492 0.826503\nvt 0.27958 0.0631346\nvt 0.280655 0.0502859\nvt 0.274619 0.0547061\nvt 0.284476 0.0714935\nvt 0.278549 0.0753069\nvt 0.273614 0.067232\nvt 0.289243 0.0797132\nvt 0.293841 0.0877995\nvt 0.288073 0.0911737\nvt 0.283428 0.083277\nvt 0.277589 0.0870204\nvt 0.272693 0.0792715\nvt 0.282301 0.0946902\nvt 0.276446 0.0983832\nvt 0.27172 0.0909491\nvt 0.267655 0.0714316\nvt 0.268583 0.0591262\nvt 0.262547 0.0635464\nvt 0.261729 0.0758436\nvt 0.266787 0.0834549\nvt 0.298231 0.0957583\nvt 0.302438 0.103612\nvt 0.292546 0.0989543\nvt 0.296728 0.106685\nvt 0.306487 0.111383\nvt 0.31041 0.119107\nvt 0.30477 0.121958\nvt 0.300863 0.114322\nvt 0.29512 0.117375\nvt 0.291056 0.109848\nvt 0.299029 0.124889\nvt 0.293146 0.127932\nvt 0.289263 0.120549\nvt 0.286786 0.102293\nvt 0.280944 0.105784\nvt 0.285188 0.113181\nvt 0.31424 0.126822\nvt 0.317977 0.134552\nvt 0.308606 0.129571\nvt 0.312252 0.137243\nvt 0.32162 0.142321\nvt 0.325181 0.150155\nvt 0.319373 0.152674\nvt 0.315902 0.144905\nvt 0.310039 0.147548\nvt 0.306511 0.139945\nvt 0.313451 0.155219\nvt 0.307364 0.157816\nvt 0.304031 0.150249\nvt 0.302834 0.132402\nvt 0.296926 0.135321\nvt 0.300543 0.142761\nvt 0.328668 0.158078\nvt 0.332065 0.166127\nvt 0.326025 0.168509\nvt 0.322795 0.160508\nvt 0.33535 0.174337\nvt 0.338511 0.182722\nvt 0.332246 0.184864\nvt 0.329249 0.176579\nvt 0.323014 0.17883\nvt 0.31998 0.170823\nvt 0.325895 0.186985\nvt 0.319396 0.189103\nvt 0.316642 0.181078\nvt 0.316778 0.162965\nvt 0.310614 0.16545\nvt 0.313698 0.173201\nvt 0.341537 0.191297\nvt 0.344394 0.200087\nvt 0.33776 0.201994\nvt 0.33514 0.1933\nvt 0.347048 0.209113\nvt 0.349487 0.218379\nvt 0.342546 0.219932\nvt 0.340311 0.210821\nvt 0.333498 0.212491\nvt 0.331188 0.203781\nvt 0.335575 0.221413\nvt 0.328502 0.222825\nvt 0.32659 0.214102\nvt 0.328637 0.19529\nvt 0.322015 0.197253\nvt 0.324404 0.205581\nvt 0.792837 0.833759\nvt 0.798343 0.838413\nvt 0.798392 0.833877\nvt 0.787287 0.833597\nvt 0.792945 0.828997\nvt 0.787439 0.828731\nvt 0.781703 0.833388\nvt 0.776065 0.833129\nvt 0.7819 0.828549\nvt 0.776318 0.828214\nvt 0.787616 0.823782\nvt 0.782138 0.823473\nvt 0.77662 0.823103\nvt 0.782434 0.818158\nvt 0.776987 0.817737\nvt 0.798479 0.829111\nvt 0.798574 0.82418\nvt 0.793085 0.824011\nvt 0.793268 0.818779\nvt 0.787857 0.818489\nvt 0.770353 0.832816\nvt 0.764547 0.832434\nvt 0.770662 0.827871\nvt 0.764919 0.827354\nvt 0.75863 0.831973\nvt 0.75261 0.831434\nvt 0.759087 0.826898\nvt 0.753164 0.826256\nvt 0.765371 0.822205\nvt 0.75963 0.821595\nvt 0.753807 0.820892\nvt 0.760275 0.816071\nvt 0.754569 0.815294\nvt 0.771032 0.822694\nvt 0.771481 0.817286\nvt 0.765917 0.816722\nvt 0.746497 0.830822\nvt 0.740257 0.830103\nvt 0.747141 0.825579\nvt 0.741015 0.824683\nvt 0.733858 0.829247\nvt 0.727302 0.828251\nvt 0.734754 0.823803\nvt 0.728366 0.822667\nvt 0.741903 0.81923\nvt 0.735797 0.818161\nvt 0.72958 0.816936\nvt 0.736998 0.81234\nvt 0.730967 0.81102\nvt 0.747902 0.820122\nvt 0.748793 0.814461\nvt 0.742947 0.813474\nvt 0.72059 0.827116\nvt 0.713686 0.825785\nvt 0.721828 0.821429\nvt 0.715143 0.819869\nvt 0.706557 0.8242\nvt 0.699201 0.822347\nvt 0.708271 0.818231\nvt 0.701234 0.8162\nvt 0.716784 0.814004\nvt 0.710194 0.812146\nvt 0.703473 0.810009\nvt 0.712326 0.805977\nvt 0.705931 0.803748\nvt 0.723244 0.815576\nvt 0.724845 0.809581\nvt 0.718643 0.807904\nvt 0.691616 0.820213\nvt 0.683809 0.817833\nvt 0.694001 0.813923\nvt 0.686624 0.811332\nvt 0.675785 0.815241\nvt 0.667654 0.812543\nvt 0.679102 0.808646\nvt 0.671523 0.80582\nvt 0.689636 0.804946\nvt 0.682542 0.802076\nvt 0.675391 0.799097\nvt 0.686187 0.795606\nvt 0.67926 0.792374\nvt 0.696617 0.8076\nvt 0.699453 0.801277\nvt 0.692882 0.798549\nvt 0.25651 0.0679665\nvt 0.25074 0.0732755\nvt 0.255863 0.0805783\nvt 0.260913 0.0878523\nvt 0.250012 0.0855199\nvt 0.254945 0.09248\nvt 0.265817 0.0950686\nvt 0.270532 0.102256\nvt 0.259844 0.099375\nvt 0.264482 0.106328\nvt 0.249008 0.0972102\nvt 0.253765 0.103865\nvt 0.258355 0.110542\nvt 0.247576 0.108528\nvt 0.252057 0.114948\nvt 0.244969 0.0785845\nvt 0.239199 0.0838935\nvt 0.244133 0.0905526\nvt 0.238196 0.0957419\nvt 0.242924 0.102151\nvt 0.275011 0.109441\nvt 0.279263 0.116636\nvt 0.268952 0.113267\nvt 0.273069 0.120311\nvt 0.283294 0.123848\nvt 0.287153 0.13108\nvt 0.277161 0.127293\nvt 0.280951 0.134378\nvt 0.266885 0.124051\nvt 0.270808 0.130905\nvt 0.274555 0.137809\nvt 0.264254 0.134671\nvt 0.267917 0.141396\nvt 0.262732 0.117267\nvt 0.256347 0.121437\nvt 0.260386 0.128028\nvt 0.290885 0.138336\nvt 0.294467 0.145637\nvt 0.284654 0.141469\nvt 0.288076 0.148673\nvt 0.297875 0.153008\nvt 0.301143 0.16045\nvt 0.291518 0.155856\nvt 0.294685 0.163169\nvt 0.281644 0.151737\nvt 0.284903 0.15882\nvt 0.288007 0.165976\nvt 0.278049 0.161891\nvt 0.281061 0.168886\nvt 0.278181 0.144743\nvt 0.27148 0.148149\nvt 0.274847 0.154983\nvt 0.3043 0.167962\nvt 0.307308 0.175574\nvt 0.297782 0.170531\nvt 0.30059 0.17804\nvt 0.310127 0.183317\nvt 0.312773 0.191185\nvt 0.303413 0.18558\nvt 0.305923 0.193284\nvt 0.293836 0.180485\nvt 0.296444 0.1879\nvt 0.298868 0.195417\nvt 0.289241 0.190269\nvt 0.291558 0.197592\nvt 0.291004 0.173187\nvt 0.283984 0.175921\nvt 0.286705 0.183046\nvt 0.315263 0.199173\nvt 0.317545 0.207311\nvt 0.308324 0.201084\nvt 0.310369 0.209059\nvt 0.319568 0.215632\nvt 0.321341 0.224123\nvt 0.312381 0.217116\nvt 0.313994 0.225358\nvt 0.303206 0.210736\nvt 0.304977 0.21859\nvt 0.306489 0.226566\nvt 0.297384 0.220049\nvt 0.298784 0.227748\nvt 0.301145 0.20302\nvt 0.29375 0.204974\nvt 0.295689 0.212455\nvt 0.798711 0.818974\nvt 0.79889 0.813504\nvt 0.793504 0.813281\nvt 0.788152 0.812987\nvt 0.793795 0.807488\nvt 0.78854 0.807071\nvt 0.782807 0.812603\nvt 0.777442 0.81215\nvt 0.783259 0.806761\nvt 0.777992 0.80625\nvt 0.788955 0.801035\nvt 0.783794 0.800585\nvt 0.778628 0.80006\nvt 0.784404 0.794103\nvt 0.779352 0.793544\nvt 0.799125 0.807699\nvt 0.799387 0.801637\nvt 0.794146 0.801376\nvt 0.794552 0.794946\nvt 0.789465 0.794558\nvt 0.772028 0.811647\nvt 0.766563 0.811055\nvt 0.772675 0.805732\nvt 0.767338 0.804996\nvt 0.761042 0.810334\nvt 0.755464 0.80951\nvt 0.761927 0.804337\nvt 0.756496 0.803446\nvt 0.768188 0.798838\nvt 0.76293 0.798032\nvt 0.75764 0.797119\nvt 0.764043 0.791456\nvt 0.758909 0.790509\nvt 0.773424 0.799495\nvt 0.774267 0.792968\nvt 0.769166 0.792269\nvt 0.749828 0.808608\nvt 0.744131 0.807576\nvt 0.751002 0.802516\nvt 0.745495 0.801332\nvt 0.738367 0.806361\nvt 0.732537 0.804985\nvt 0.739896 0.800176\nvt 0.734286 0.798738\nvt 0.746952 0.795036\nvt 0.741576 0.79374\nvt 0.736175 0.79229\nvt 0.74339 0.787096\nvt 0.738208 0.785631\nvt 0.75231 0.796142\nvt 0.753744 0.789524\nvt 0.748575 0.78839\nvt 0.72664 0.803472\nvt 0.720681 0.801751\nvt 0.72861 0.797201\nvt 0.722944 0.795347\nvt 0.714666 0.799755\nvt 0.708602 0.797495\nvt 0.717191 0.793433\nvt 0.711469 0.791158\nvt 0.7253 0.788972\nvt 0.719876 0.786965\nvt 0.714468 0.78473\nvt 0.722684 0.780392\nvt 0.717584 0.778208\nvt 0.730741 0.790724\nvt 0.733008 0.784086\nvt 0.727834 0.782348\nvt 0.702498 0.794987\nvt 0.69634 0.792251\nvt 0.705717 0.788677\nvt 0.699989 0.785926\nvt 0.690115 0.789309\nvt 0.683857 0.786265\nvt 0.694214 0.783103\nvt 0.688454 0.780156\nvt 0.703704 0.779679\nvt 0.698369 0.776904\nvt 0.693051 0.774048\nvt 0.702534 0.770731\nvt 0.697649 0.767939\nvt 0.709074 0.782295\nvt 0.712518 0.775876\nvt 0.707503 0.773376\nvt 0.233428 0.0892025\nvt 0.22752 0.0950715\nvt 0.232173 0.101153\nvt 0.236774 0.107244\nvt 0.226063 0.106702\nvt 0.230419 0.112524\nvt 0.241272 0.113354\nvt 0.245625 0.119518\nvt 0.234802 0.118329\nvt 0.238965 0.124272\nvt 0.224007 0.117837\nvt 0.228112 0.123441\nvt 0.232127 0.129135\nvt 0.221194 0.128652\nvt 0.22501 0.134138\nvt 0.221611 0.100941\nvt 0.215703 0.10681\nvt 0.219865 0.112305\nvt 0.213449 0.117946\nvt 0.217305 0.12327\nvt 0.249793 0.125775\nvt 0.253761 0.132127\nvt 0.243027 0.130277\nvt 0.246761 0.136475\nvt 0.257515 0.13858\nvt 0.261101 0.145106\nvt 0.250527 0.142651\nvt 0.25399 0.14899\nvt 0.239712 0.140857\nvt 0.243227 0.146901\nvt 0.246597 0.153032\nvt 0.235646 0.151297\nvt 0.238883 0.157237\nvt 0.236003 0.134938\nvt 0.228721 0.13973\nvt 0.232246 0.145463\nvt 0.264568 0.151679\nvt 0.267873 0.158323\nvt 0.257386 0.155358\nvt 0.260474 0.161872\nvt 0.270973 0.16506\nvt 0.273914 0.171868\nvt 0.263615 0.168358\nvt 0.266448 0.174982\nvt 0.252996 0.165465\nvt 0.255913 0.171818\nvt 0.258679 0.178236\nvt 0.247911 0.175419\nvt 0.25058 0.181638\nvt 0.249872 0.159212\nvt 0.242062 0.163212\nvt 0.245067 0.169275\nvt 0.276741 0.178723\nvt 0.279398 0.185651\nvt 0.269215 0.181633\nvt 0.27166 0.188407\nvt 0.281827 0.192677\nvt 0.284069 0.199779\nvt 0.274143 0.195166\nvt 0.276285 0.202044\nvt 0.263855 0.191192\nvt 0.266128 0.197778\nvt 0.268221 0.204414\nvt 0.257837 0.200508\nvt 0.259862 0.206906\nvt 0.261349 0.184686\nvt 0.253189 0.18787\nvt 0.255608 0.19416\nvt 0.286163 0.206935\nvt 0.28804 0.214166\nvt 0.278328 0.208952\nvt 0.280004 0.21596\nvt 0.289631 0.221489\nvt 0.290968 0.228885\nvt 0.281665 0.222961\nvt 0.282931 0.230049\nvt 0.271951 0.21777\nvt 0.273433 0.224517\nvt 0.27468 0.231289\nvt 0.264992 0.226172\nvt 0.266218 0.232634\nvt 0.270188 0.211074\nvt 0.261799 0.213301\nvt 0.263514 0.219725\nvt 0.795012 0.788203\nvt 0.799705 0.795219\nvt 0.800062 0.788493\nvt 0.790025 0.78783\nvt 0.790679 0.780698\nvt 0.795524 0.781167\nvt 0.785083 0.787345\nvt 0.780152 0.786783\nvt 0.78103 0.779727\nvt 0.785831 0.780308\nvt 0.786646 0.772987\nvt 0.79134 0.773474\nvt 0.781976 0.772423\nvt 0.782975 0.764889\nvt 0.78751 0.765456\nvt 0.79609 0.77386\nvt 0.800475 0.781439\nvt 0.800913 0.774165\nvt 0.792077 0.765934\nvt 0.796696 0.766337\nvt 0.775198 0.786182\nvt 0.770231 0.785487\nvt 0.771405 0.778335\nvt 0.776209 0.779131\nvt 0.765262 0.784647\nvt 0.760285 0.783705\nvt 0.761758 0.776649\nvt 0.766569 0.777595\nvt 0.767949 0.770288\nvt 0.772616 0.77111\nvt 0.763292 0.769373\nvt 0.76487 0.761901\nvt 0.769371 0.762798\nvt 0.777295 0.77181\nvt 0.773892 0.763594\nvt 0.77843 0.764291\nvt 0.755293 0.782704\nvt 0.7503 0.781584\nvt 0.752144 0.774472\nvt 0.756934 0.775666\nvt 0.745321 0.780288\nvt 0.740351 0.778857\nvt 0.742578 0.771902\nvt 0.747338 0.773297\nvt 0.749409 0.766102\nvt 0.75401 0.76732\nvt 0.744841 0.764775\nvt 0.747103 0.757501\nvt 0.751489 0.758769\nvt 0.758642 0.768397\nvt 0.755916 0.759925\nvt 0.76038 0.760966\nvt 0.735385 0.777332\nvt 0.730452 0.775652\nvt 0.737833 0.770435\nvt 0.733152 0.768742\nvt 0.725576 0.773755\nvt 0.720759 0.771678\nvt 0.723947 0.765062\nvt 0.728504 0.767021\nvt 0.73142 0.760155\nvt 0.73583 0.76184\nvt 0.727091 0.75834\nvt 0.730135 0.751524\nvt 0.734261 0.753199\nvt 0.740309 0.763367\nvt 0.738471 0.754756\nvt 0.742759 0.756185\nvt 0.716002 0.769457\nvt 0.711303 0.767097\nvt 0.719467 0.762989\nvt 0.715072 0.760753\nvt 0.706661 0.764605\nvt 0.702047 0.762046\nvt 0.706446 0.756154\nvt 0.710739 0.758492\nvt 0.71476 0.752357\nvt 0.718743 0.754422\nvt 0.710844 0.750261\nvt 0.715243 0.744368\nvt 0.718514 0.746157\nvt 0.72286 0.756423\nvt 0.726109 0.749788\nvt 0.722219 0.747991\nvt 0.209794 0.112679\nvt 0.202994 0.118518\nvt 0.206687 0.123605\nvt 0.210372 0.128728\nvt 0.199674 0.129263\nvt 0.203091 0.134225\nvt 0.214042 0.133926\nvt 0.217657 0.139218\nvt 0.209983 0.144369\nvt 0.206606 0.139232\nvt 0.19884 0.144539\nvt 0.195648 0.139659\nvt 0.202039 0.149531\nvt 0.193752 0.154685\nvt 0.190752 0.149791\nvt 0.196195 0.124358\nvt 0.189395 0.130198\nvt 0.192508 0.134899\nvt 0.184967 0.140378\nvt 0.187789 0.145014\nvt 0.221181 0.144625\nvt 0.224578 0.150151\nvt 0.21335 0.149599\nvt 0.216478 0.154999\nvt 0.227816 0.155804\nvt 0.23094 0.161544\nvt 0.222674 0.165984\nvt 0.219693 0.160421\nvt 0.211231 0.165148\nvt 0.208276 0.159836\nvt 0.214104 0.170537\nvt 0.205238 0.175187\nvt 0.20249 0.169935\nvt 0.205199 0.15463\nvt 0.196748 0.15967\nvt 0.199654 0.164757\nvt 0.233993 0.167333\nvt 0.236918 0.173191\nvt 0.22563 0.171584\nvt 0.22834 0.17731\nvt 0.239655 0.179141\nvt 0.242259 0.185146\nvt 0.233632 0.188814\nvt 0.231113 0.183007\nvt 0.222255 0.18704\nvt 0.219674 0.181472\nvt 0.224726 0.192646\nvt 0.215568 0.196641\nvt 0.21316 0.191207\nvt 0.216938 0.175975\nvt 0.207988 0.180467\nvt 0.210637 0.18581\nvt 0.244783 0.191169\nvt 0.24716 0.197231\nvt 0.236106 0.19462\nvt 0.23832 0.20052\nvt 0.249322 0.203351\nvt 0.251324 0.209497\nvt 0.242534 0.212264\nvt 0.240563 0.206354\nvt 0.231535 0.209561\nvt 0.229422 0.203888\nvt 0.233513 0.215236\nvt 0.224301 0.218431\nvt 0.222325 0.212964\nvt 0.227134 0.198256\nvt 0.217951 0.202057\nvt 0.220213 0.2075\nvt 0.253219 0.215637\nvt 0.254935 0.221782\nvt 0.244426 0.218141\nvt 0.24604 0.224075\nvt 0.256398 0.227943\nvt 0.257658 0.234089\nvt 0.248936 0.235756\nvt 0.247634 0.229898\nvt 0.23868 0.232108\nvt 0.237137 0.226488\nvt 0.240059 0.237682\nvt 0.231071 0.239913\nvt 0.229616 0.234587\nvt 0.235398 0.220871\nvt 0.226222 0.223832\nvt 0.228003 0.229222\nvt 0.797331 0.758655\nvt 0.801397 0.766641\nvt 0.801902 0.758963\nvt 0.792836 0.758271\nvt 0.793617 0.750512\nvt 0.797972 0.750905\nvt 0.788402 0.75779\nvt 0.783997 0.75724\nvt 0.785019 0.749541\nvt 0.789301 0.750067\nvt 0.794366 0.742802\nvt 0.790185 0.742364\nvt 0.786031 0.741859\nvt 0.802415 0.751215\nvt 0.802901 0.743489\nvt 0.798598 0.743177\nvt 0.779588 0.756647\nvt 0.775187 0.755979\nvt 0.776477 0.748285\nvt 0.780746 0.748953\nvt 0.770809 0.755201\nvt 0.766451 0.754344\nvt 0.768007 0.746754\nvt 0.772236 0.74756\nvt 0.773624 0.739944\nvt 0.777747 0.740641\nvt 0.769523 0.739183\nvt 0.781884 0.741282\nvt 0.762111 0.753443\nvt 0.757802 0.75246\nvt 0.75963 0.744931\nvt 0.76381 0.745884\nvt 0.753532 0.751361\nvt 0.749307 0.750179\nvt 0.751415 0.742833\nvt 0.755511 0.743924\nvt 0.757396 0.736504\nvt 0.761407 0.737452\nvt 0.753426 0.735497\nvt 0.76545 0.738349\nvt 0.745128 0.748946\nvt 0.74101 0.74763\nvt 0.743383 0.740446\nvt 0.747387 0.741683\nvt 0.736966 0.746198\nvt 0.733008 0.744681\nvt 0.735659 0.737808\nvt 0.739502 0.739169\nvt 0.741836 0.732133\nvt 0.745642 0.733301\nvt 0.738104 0.730919\nvt 0.749507 0.734426\nvt 0.729147 0.743112\nvt 0.725402 0.741499\nvt 0.731941 0.736401\nvt 0.728276 0.734938\nvt 0.721791 0.739847\nvt 0.718248 0.738175\nvt 0.721253 0.731983\nvt 0.724753 0.733472\nvt 0.727558 0.727079\nvt 0.730933 0.728368\nvt 0.724258 0.72579\nvt 0.727263 0.719597\nvt 0.734459 0.729656\nvt 0.182595 0.136038\nvt 0.174145 0.140987\nvt 0.17683 0.145564\nvt 0.179552 0.150195\nvt 0.16832 0.150561\nvt 0.17093 0.155212\nvt 0.182349 0.15493\nvt 0.185185 0.159759\nvt 0.176331 0.16474\nvt 0.173651 0.159947\nvt 0.164676 0.16483\nvt 0.162122 0.1601\nvt 0.167279 0.169635\nvt 0.165695 0.145937\nvt 0.157245 0.150886\nvt 0.15966 0.155469\nvt 0.188023 0.164668\nvt 0.19082 0.169659\nvt 0.179058 0.169613\nvt 0.181689 0.174548\nvt 0.193532 0.174734\nvt 0.196196 0.179864\nvt 0.186981 0.184572\nvt 0.184385 0.179534\nvt 0.175079 0.184328\nvt 0.172492 0.179392\nvt 0.177643 0.189293\nvt 0.169888 0.174492\nvt 0.198853 0.185024\nvt 0.201443 0.190223\nvt 0.18957 0.189633\nvt 0.19206 0.194747\nvt 0.203909 0.195475\nvt 0.206294 0.200747\nvt 0.196926 0.204982\nvt 0.194546 0.199843\nvt 0.185117 0.204306\nvt 0.182671 0.199293\nvt 0.187509 0.20932\nvt 0.180177 0.194285\nvt 0.208643 0.206004\nvt 0.210903 0.211266\nvt 0.199257 0.210095\nvt 0.201486 0.215254\nvt 0.213019 0.21655\nvt 0.215033 0.221817\nvt 0.205737 0.225435\nvt 0.203666 0.220328\nvt 0.194314 0.224304\nvt 0.192109 0.219327\nvt 0.196448 0.229251\nvt 0.18984 0.21433\nvt 0.216986 0.227026\nvt 0.218831 0.232198\nvt 0.207732 0.230464\nvt 0.209622 0.235528\nvt 0.22052 0.237353\nvt 0.222088 0.242446\nvt 0.213133 0.245341\nvt 0.211432 0.240427\nvt 0.202395 0.243831\nvt 0.200484 0.239022\nvt 0.204228 0.248569\nvt 0.195443 0.252174\nvt 0.198503 0.23416\nvt 0.787942 0.935861\nvt 0.787265 0.93052\nvt 0.787509 0.924789\nvt 0.790327 0.930074\nvt 0.790593 0.92481\nvt 0.788364 0.919203\nvt 0.79271 0.914612\nvt 0.791364 0.919607\nvt 0.789766 0.913929\nvt 0.794011 0.919688\nvt 0.79333 0.924677\nvt 0.797014 0.914833\nvt 0.796482 0.919608\nvt 0.795215 0.914982\nvt 0.790867 0.93486\nvt 0.793283 0.934141\nvt 0.792976 0.929619\nvt 0.79595 0.924384\nvt 0.795418 0.929159\nvt 0.791647 0.909132\nvt 0.79406 0.904749\nvt 0.794628 0.910091\nvt 0.797009 0.906095\nvt 0.797054 0.900715\nvt 0.800807 0.897458\nvt 0.799894 0.902516\nvt 0.803242 0.899665\nvt 0.79954 0.907257\nvt 0.802185 0.903933\nvt 0.80519 0.901244\nvt 0.8042 0.905157\nvt 0.806596 0.901932\nvt 0.797137 0.910889\nvt 0.801805 0.908382\nvt 0.799409 0.911608\nvt 0.732558 0.39157\nvt 0.695312 0.346943\nvt 0.757739 0.377165\nvt 0.721021 0.31783\nvt 0.733389 0.452049\nvt 0.707811 0.405053\nvt 0.764139 0.444033\nvt 0.790555 0.498107\nvt 0.831176 0.495836\nvt 0.794458 0.4365\nvt 0.756236 0.549869\nvt 0.75255 0.500886\nvt 0.799961 0.550766\nvt 0.719775 0.504684\nvt 0.706531 0.458963\nvt 0.690651 0.551249\nvt 0.689913 0.508753\nvt 0.721424 0.550654\nvt 0.683931 0.41669\nvt 0.65446 0.380579\nvt 0.673932 0.365676\nvt 0.678496 0.466823\nvt 0.660359 0.427931\nvt 0.780509 0.598988\nvt 0.821741 0.602183\nvt 0.867895 0.555171\nvt 0.713853 0.637506\nvt 0.742076 0.596061\nvt 0.744701 0.643579\nvt 0.775588 0.649195\nvt 0.729435 0.696206\nvt 0.705038 0.685349\nvt 0.663942 0.718476\nvt 0.680516 0.675754\nvt 0.643709 0.705719\nvt 0.655741 0.668682\nvt 0.686315 0.633197\nvt 0.599499 0.692522\nvt 0.632838 0.661109\nvt 0.62265 0.697915\nvt 0.70924 0.593673\nvt 0.679867 0.590834\nvt 0.659324 0.626873\nvt 0.635155 0.395324\nvt 0.615481 0.411552\nvt 0.636533 0.440222\nvt 0.652084 0.474603\nvt 0.613544 0.452805\nvt 0.624682 0.483172\nvt 0.660645 0.512345\nvt 0.660972 0.550609\nvt 0.631809 0.549263\nvt 0.632247 0.515633\nvt 0.600541 0.489989\nvt 0.604998 0.518791\nvt 0.604993 0.54881\nvt 0.579768 0.548281\nvt 0.579857 0.52135\nvt 0.596659 0.428897\nvt 0.580404 0.445308\nvt 0.592482 0.464921\nvt 0.572982 0.473583\nvt 0.577437 0.495493\nvt 0.651823 0.586558\nvt 0.635405 0.619817\nvt 0.611779 0.61096\nvt 0.625095 0.581804\nvt 0.613926 0.650011\nvt 0.592174 0.673634\nvt 0.581016 0.659173\nvt 0.596766 0.638034\nvt 0.579114 0.627823\nvt 0.590542 0.60414\nvt 0.567527 0.647891\nvt 0.553377 0.639199\nvt 0.561803 0.61997\nvt 0.599672 0.577531\nvt 0.570038 0.598071\nvt 0.576226 0.574058\nvt 0.546408 0.655462\nvt 0.557919 0.663651\nvt 0.567961 0.674432\nvt 0.549798 0.675429\nvt 0.557076 0.683821\nvt 0.574935 0.687182\nvt 0.57465 0.70053\nvt 0.561469 0.694145\nvt 0.560226 0.703629\nvt 0.547999 0.690908\nvt 0.551033 0.698011\nvt 0.549908 0.704857\nvt 0.542073 0.70084\nvt 0.54315 0.704818\nvt 0.540765 0.668485\nvt 0.535742 0.677835\nvt 0.542671 0.68355\nvt 0.535629 0.688988\nvt 0.539312 0.695529\nvt 0.432741 0.202045\nvt 0.435373 0.194261\nvt 0.43945 0.187272\nvt 0.44661 0.198161\nvt 0.449327 0.191964\nvt 0.443828 0.180837\nvt 0.448488 0.174721\nvt 0.452541 0.186299\nvt 0.456346 0.180624\nvt 0.458946 0.196051\nvt 0.461308 0.191063\nvt 0.464188 0.186103\nvt 0.471641 0.190815\nvt 0.46958 0.195032\nvt 0.457328 0.201171\nvt 0.445075 0.204665\nvt 0.456546 0.206571\nvt 0.467034 0.203378\nvt 0.467898 0.199122\nvt 0.453408 0.168691\nvt 0.458727 0.162793\nvt 0.464973 0.169684\nvt 0.460417 0.17506\nvt 0.464582 0.157074\nvt 0.471092 0.152572\nvt 0.475295 0.16101\nvt 0.469831 0.164848\nvt 0.474907 0.17199\nvt 0.470904 0.176258\nvt 0.479353 0.168546\nvt 0.483283 0.175336\nvt 0.479738 0.178429\nvt 0.467359 0.181065\nvt 0.476599 0.182177\nvt 0.473951 0.186445\nvt 0.475237 0.20487\nvt 0.466763 0.207756\nvt 0.475252 0.208346\nvt 0.475759 0.2015\nvt 0.481841 0.205763\nvt 0.482017 0.202991\nvt 0.476807 0.19811\nvt 0.478238 0.194617\nvt 0.482979 0.20041\nvt 0.483877 0.197485\nvt 0.487482 0.204234\nvt 0.488087 0.202045\nvt 0.488741 0.199701\nvt 0.492119 0.203234\nvt 0.492583 0.201244\nvt 0.481815 0.208431\nvt 0.486529 0.208048\nvt 0.486748 0.206171\nvt 0.490356 0.206553\nvt 0.491452 0.205077\nvt 0.479909 0.19094\nvt 0.481891 0.187343\nvt 0.486466 0.191403\nvt 0.485158 0.194556\nvt 0.484256 0.184088\nvt 0.486979 0.181417\nvt 0.490193 0.18654\nvt 0.48826 0.18881\nvt 0.491555 0.192435\nvt 0.490605 0.194867\nvt 0.492754 0.19052\nvt 0.494293 0.192961\nvt 0.494208 0.194922\nvt 0.489624 0.197299\nvt 0.493771 0.197162\nvt 0.493229 0.199278\nvt 0.84212 0.728214\nvt 0.842628 0.735578\nvt 0.838088 0.728518\nvt 0.83846 0.735886\nvt 0.845519 0.720689\nvt 0.846094 0.727849\nvt 0.841672 0.721034\nvt 0.841271 0.713988\nvt 0.837521 0.7143\nvt 0.837778 0.721346\nvt 0.844459 0.706618\nvt 0.844977 0.713611\nvt 0.840893 0.707009\nvt 0.848666 0.713206\nvt 0.849327 0.720251\nvt 0.851591 0.705836\nvt 0.852344 0.712749\nvt 0.848025 0.706227\nvt 0.850026 0.727428\nvt 0.850785 0.734784\nvt 0.846733 0.735225\nvt 0.853123 0.719785\nvt 0.853936 0.726947\nvt 0.857841 0.726402\nvt 0.858839 0.733733\nvt 0.854815 0.734294\nvt 0.8607 0.71868\nvt 0.861739 0.725801\nvt 0.856907 0.719246\nvt 0.856016 0.712219\nvt 0.858703 0.704678\nvt 0.859685 0.711639\nvt 0.855147 0.705257\nvt 0.863352 0.711032\nvt 0.864468 0.718028\nvt 0.865814 0.70352\nvt 0.867026 0.710367\nvt 0.862258 0.704099\nvt 0.865629 0.725152\nvt 0.866859 0.732444\nvt 0.862863 0.733126\nvt 0.868246 0.717346\nvt 0.869506 0.724447\nvt 0.873367 0.723675\nvt 0.874804 0.730918\nvt 0.870845 0.731717\nvt 0.875793 0.715798\nvt 0.87721 0.722853\nvt 0.872015 0.716586\nvt 0.870719 0.709613\nvt 0.873086 0.70188\nvt 0.874417 0.708806\nvt 0.86945 0.7027\nvt 0.878109 0.70798\nvt 0.879533 0.714943\nvt 0.880359 0.70024\nvt 0.881796 0.707137\nvt 0.876723 0.70106\nvt 0.881034 0.721995\nvt 0.882648 0.72917\nvt 0.878749 0.730074\nvt 0.883276 0.71408\nvt 0.884831 0.721099\nvt 0.888594 0.720161\nvt 0.890349 0.727233\nvt 0.886521 0.72823\nvt 0.890706 0.712285\nvt 0.892321 0.719195\nvt 0.886988 0.713186\nvt 0.885482 0.70628\nvt 0.887693 0.698577\nvt 0.889159 0.705413\nvt 0.884026 0.699409\nvt 0.892823 0.704538\nvt 0.894352 0.711352\nvt 0.895027 0.696915\nvt 0.896473 0.703662\nvt 0.89136 0.697746\nvt 0.896012 0.718211\nvt 0.894147 0.7262\nvt 0.897865 0.725132\nvt 0.897998 0.710419\nvt 0.899654 0.717207\nvt 0.903238 0.716182\nvt 0.901537 0.724037\nvt 0.905131 0.722906\nvt 0.90159 0.709477\nvt 0.905168 0.708534\nvt 0.906723 0.715151\nvt 0.90011 0.702789\nvt 0.898714 0.69611\nvt 0.902401 0.695304\nvt 0.903737 0.701917\nvt 0.907354 0.701044\nvt 0.908667 0.707589\nvt 0.906088 0.694499\nvt 0.909775 0.693693\nvt 0.910967 0.700169\nvt 0.910071 0.714133\nvt 0.908596 0.721766\nvt 0.911841 0.720642\nvt 0.912159 0.706645\nvt 0.913352 0.713121\nvt 0.86202 0.159632\nvt 0.859692 0.164408\nvt 0.852139 0.155836\nvt 0.850245 0.160135\nvt 0.869405 0.168456\nvt 0.866901 0.173481\nvt 0.857314 0.16922\nvt 0.881781 0.167223\nvt 0.879176 0.172451\nvt 0.8719 0.163427\nvt 0.888976 0.17642\nvt 0.886291 0.181822\nvt 0.876568 0.177677\nvt 0.873953 0.182896\nvt 0.864348 0.178534\nvt 0.88092 0.192626\nvt 0.87132 0.188061\nvt 0.883605 0.187224\nvt 0.854836 0.174106\nvt 0.845458 0.169557\nvt 0.847928 0.164779\nvt 0.861779 0.183559\nvt 0.852296 0.17903\nvt 0.849736 0.183956\nvt 0.842914 0.174404\nvt 0.840354 0.17928\nvt 0.859175 0.188558\nvt 0.856567 0.193514\nvt 0.847165 0.18888\nvt 0.868655 0.193125\nvt 0.878157 0.197675\nvt 0.875394 0.202724\nvt 0.865974 0.198132\nvt 0.863291 0.203127\nvt 0.853948 0.198472\nvt 0.869867 0.212822\nvt 0.860623 0.208081\nvt 0.872631 0.207773\nvt 0.844596 0.193799\nvt 0.835233 0.18909\nvt 0.837793 0.184172\nvt 0.851341 0.203396\nvt 0.842036 0.198713\nvt 0.839492 0.203624\nvt 0.832689 0.194016\nvt 0.830165 0.198957\nvt 0.848759 0.208292\nvt 0.84619 0.213163\nvt 0.836974 0.208525\nvt 0.857984 0.212966\nvt 0.867189 0.217644\nvt 0.86451 0.222466\nvt 0.855367 0.217811\nvt 0.852765 0.222644\nvt 0.843663 0.218012\nvt 0.859152 0.23211\nvt 0.850196 0.227446\nvt 0.861831 0.227288\nvt 0.834488 0.213408\nvt 0.825215 0.208837\nvt 0.827663 0.203903\nvt 0.841157 0.222841\nvt 0.832041 0.218274\nvt 0.829638 0.223122\nvt 0.822805 0.213764\nvt 0.820446 0.21868\nvt 0.838704 0.227635\nvt 0.83627 0.232415\nvt 0.827278 0.227947\nvt 0.84768 0.2322\nvt 0.856611 0.236792\nvt 0.854069 0.241473\nvt 0.8452 0.236923\nvt 0.84274 0.241631\nvt 0.833901 0.237147\nvt 0.848986 0.250836\nvt 0.84031 0.24631\nvt 0.851528 0.246154\nvt 0.824961 0.232743\nvt 0.815881 0.228451\nvt 0.818128 0.223588\nvt 0.831551 0.241864\nvt 0.822692 0.237506\nvt 0.820477 0.242229\nvt 0.813682 0.233291\nvt 0.81155 0.238089\nvt 0.829255 0.246532\nvt 0.826971 0.251191\nvt 0.818308 0.246909\nvt 0.837925 0.250948\nvt 0.846541 0.255421\nvt 0.844096 0.260006\nvt 0.835568 0.255553\nvt 0.833226 0.260136\nvt 0.824752 0.25576\nvt 0.839205 0.269175\nvt 0.830892 0.264681\nvt 0.84165 0.264591\nvt 0.816177 0.25154\nvt 0.807454 0.247542\nvt 0.809465 0.24286\nvt 0.822535 0.260315\nvt 0.814088 0.25611\nvt 0.861398 0.965407\nvt 0.861374 0.961509\nvt 0.863679 0.965262\nvt 0.863816 0.960952\nvt 0.863916 0.956709\nvt 0.866291 0.960593\nvt 0.866572 0.956204\nvt 0.86125 0.957563\nvt 0.861069 0.953701\nvt 0.863941 0.952603\nvt 0.86387 0.948739\nvt 0.866807 0.951781\nvt 0.866923 0.947674\nvt 0.869279 0.955767\nvt 0.869687 0.951249\nvt 0.869996 0.94684\nvt 0.872611 0.950986\nvt 0.87309 0.946368\nvt 0.868783 0.960352\nvt 0.868241 0.964972\nvt 0.86596 0.965117\nvt 0.871355 0.960314\nvt 0.872031 0.955661\nvt 0.874072 0.96056\nvt 0.873217 0.965361\nvt 0.870523 0.964826\nvt 0.877826 0.956138\nvt 0.876886 0.960997\nvt 0.874884 0.955761\nvt 0.875611 0.950967\nvt 0.879478 0.946329\nvt 0.878697 0.951199\nvt 0.876244 0.946188\nvt 0.881881 0.951686\nvt 0.880855 0.956621\nvt 0.886275 0.947384\nvt 0.885187 0.952375\nvt 0.882808 0.946732\nvt 0.87975 0.961532\nvt 0.878605 0.966431\nvt 0.875911 0.965896\nvt 0.883993 0.957335\nvt 0.882702 0.962237\nvt 0.885781 0.963181\nvt 0.884265 0.968133\nvt 0.881299 0.966966\nvt 0.890606 0.959286\nvt 0.888939 0.964285\nvt 0.887254 0.958213\nvt 0.88864 0.953213\nvt 0.893697 0.949176\nvt 0.892207 0.95422\nvt 0.889918 0.948184\nvt 0.895857 0.955416\nvt 0.894027 0.960459\nvt 0.897582 0.950348\nvt 0.901533 0.951724\nvt 0.899557 0.956788\nvt 0.892129 0.965471\nvt 0.890197 0.970467\nvt 0.887231 0.9693\nvt 0.897474 0.961827\nvt 0.895335 0.966802\nvt 0.898541 0.968344\nvt 0.89611 0.973319\nvt 0.893163 0.971633\nvt 0.904381 0.965076\nvt 0.901741 0.970034\nvt 0.900942 0.963352\nvt 0.903278 0.958325\nvt 0.905518 0.95327\nvt 0.9095 0.955028\nvt 0.906999 0.960043\nvt 0.910695 0.961958\nvt 0.907831 0.966902\nvt 0.917436 0.959155\nvt 0.914351 0.964066\nvt 0.913491 0.956976\nvt 0.904927 0.971807\nvt 0.902002 0.976692\nvt 0.899056 0.975006\nvt 0.91121 0.968934\nvt 0.908059 0.973727\nvt 0.911099 0.975858\nvt 0.907657 0.980559\nvt 0.904949 0.978378\nvt 0.917785 0.973492\nvt 0.914084 0.978117\nvt 0.914532 0.971134\nvt 0.917948 0.966364\nvt 0.925163 0.964118\nvt 0.921493 0.968816\nvt 0.921328 0.961544\nvt 0.924994 0.971387\nvt 0.921028 0.975909\nvt 0.932705 0.969655\nvt 0.928474 0.974017\nvt 0.928966 0.966818\nvt 0.917053 0.980419\nvt 0.910366 0.982741\nvt 0.913074 0.984923\nvt 0.924244 0.97838\nvt 0.920013 0.982742\nvt 0.561509 0.021035\nvt 0.560889 0.0253208\nvt 0.554548 0.0206694\nvt 0.553973 0.0246166\nvt 0.567806 0.026018\nvt 0.567072 0.0306191\nvt 0.56024 0.0295996\nvt 0.575429 0.0217662\nvt 0.574727 0.0267013\nvt 0.568469 0.0214006\nvt 0.58167 0.027319\nvt 0.58083 0.0325913\nvt 0.573957 0.0316326\nvt 0.573054 0.0365564\nvt 0.566269 0.0352144\nvt 0.578687 0.0431172\nvt 0.571959 0.0414465\nvt 0.579869 0.037873\nvt 0.559533 0.0338646\nvt 0.552823 0.032511\nvt 0.553398 0.0285638\nvt 0.565254 0.0397569\nvt 0.558647 0.0380817\nvt 0.55746 0.0422165\nvt 0.552248 0.0364582\nvt 0.55093 0.0401871\nvt 0.564014 0.0442463\nvt 0.562496 0.0486477\nvt 0.556067 0.0462898\nvt 0.570614 0.0462769\nvt 0.577237 0.048295\nvt 0.575494 0.0533836\nvt 0.569018 0.0510342\nvt 0.567175 0.0557049\nvt 0.560848 0.0530068\nvt 0.571291 0.063312\nvt 0.565096 0.0602799\nvt 0.573529 0.0584018\nvt 0.554562 0.0503223\nvt 0.548295 0.0476448\nvt 0.549612 0.0439159\nvt 0.558935 0.0572481\nvt 0.55286 0.0542557\nvt 0.550876 0.0580314\nvt 0.546977 0.0513736\nvt 0.544965 0.054688\nvt 0.556812 0.0613827\nvt 0.554431 0.065369\nvt 0.548699 0.0616937\nvt 0.562796 0.0647496\nvt 0.568821 0.0681182\nvt 0.566082 0.072788\nvt 0.560261 0.0690951\nvt 0.557478 0.0732971\nvt 0.551917 0.0692744\nvt 0.559848 0.0817286\nvt 0.55446 0.0773472\nvt 0.563102 0.0773386\nvt 0.546414 0.0652867\nvt 0.540941 0.0613166\nvt 0.542953 0.0580023\nvt 0.549151 0.0729969\nvt 0.543944 0.0687219\nvt 0.541212 0.0719107\nvt 0.538929 0.064631\nvt 0.536287 0.0672981\nvt 0.542958 0.0798796\nvt 0.538295 0.074922\nvt 0.546175 0.0765485\nvt 0.551218 0.0812366\nvt 0.552576 0.0900023\nvt 0.547739 0.0849329\nvt 0.556352 0.0859664\nvt 0.544008 0.0884032\nvt 0.539596 0.0830657\nvt 0.544197 0.0974182\nvt 0.540035 0.0916302\nvt 0.548534 0.0938369\nvt 0.535276 0.0778248\nvt 0.531002 0.0726324\nvt 0.533645 0.0699652\nvt 0.535998 0.0859811\nvt 0.532088 0.0804918\nvt 0.528665 0.0827956\nvt 0.52836 0.0752995\nvt 0.525184 0.0770437\nvt 0.528177 0.0909384\nvt 0.525081 0.0848374\nvt 0.532197 0.0886217\nvt 0.535828 0.0945963\nvt 0.53469 0.103712\nvt 0.53139 0.0972444\nvt 0.539587 0.100745\nvt 0.526722 0.0995172\nvt 0.524022 0.0930108\nvt 0.524116 0.108339\nvt 0.521842 0.101375\nvt 0.529536 0.10628\nvt 0.521406 0.0867181\nvt 0.518832 0.0805323\nvt 0.522008 0.078788\nvt 0.519674 0.0946867\nvt 0.517606 0.088277\nvt 0.860797 0.950156\nvt 0.86043 0.947027\nvt 0.86368 0.945226\nvt 0.863329 0.941809\nvt 0.866935 0.943724\nvt 0.866775 0.939955\nvt 0.85985 0.944041\nvt 0.859048 0.940958\nvt 0.862774 0.938235\nvt 0.862237 0.934032\nvt 0.866582 0.935935\nvt 0.866275 0.931574\nvt 0.870292 0.938359\nvt 0.870285 0.934075\nvt 0.870209 0.929589\nvt 0.873921 0.932737\nvt 0.874015 0.928118\nvt 0.870196 0.942578\nvt 0.873474 0.941808\nvt 0.873745 0.93732\nvt 0.876778 0.941433\nvt 0.877206 0.936703\nvt 0.880146 0.941427\nvt 0.880708 0.936678\nvt 0.877527 0.932\nvt 0.877765 0.927292\nvt 0.881163 0.931777\nvt 0.881533 0.927053\nvt 0.884889 0.931982\nvt 0.88431 0.936832\nvt 0.885371 0.927196\nvt 0.889408 0.927677\nvt 0.888796 0.932487\nvt 0.883617 0.941764\nvt 0.888092 0.937393\nvt 0.887239 0.94236\nvt 0.891064 0.943129\nvt 0.892081 0.938104\nvt 0.896281 0.939109\nvt 0.895052 0.944091\nvt 0.892971 0.933166\nvt 0.893752 0.928306\nvt 0.89836 0.929164\nvt 0.897369 0.934057\nvt 0.901943 0.935201\nvt 0.900617 0.940202\nvt 0.903147 0.930257\nvt 0.908103 0.931585\nvt 0.90665 0.936557\nvt 0.899166 0.945264\nvt 0.905067 0.941587\nvt 0.903369 0.946635\nvt 0.907625 0.948192\nvt 0.909603 0.943121\nvt 0.914152 0.94496\nvt 0.911906 0.949958\nvt 0.911453 0.938087\nvt 0.913176 0.933075\nvt 0.91833 0.934824\nvt 0.916322 0.939846\nvt 0.921226 0.941893\nvt 0.91877 0.946923\nvt 0.923554 0.93685\nvt 0.92881 0.939196\nvt 0.926142 0.94422\nvt 0.916187 0.951958\nvt 0.92334 0.949232\nvt 0.920444 0.954195\nvt 0.924654 0.956674\nvt 0.927902 0.951764\nvt 0.932406 0.954563\nvt 0.928823 0.959347\nvt 0.931049 0.946823\nvt 0.934084 0.941826\nvt 0.939377 0.944731\nvt 0.935956 0.949666\nvt 0.940873 0.952713\nvt 0.936933 0.957456\nvt 0.944715 0.947854\nvt 0.950159 0.951264\nvt 0.945796 0.955862\nvt 0.932955 0.962166\nvt 0.941432 0.96046\nvt 0.937068 0.965057\nvt 0.589484 0.0221399\nvt 0.588653 0.0278196\nvt 0.582389 0.0221317\nvt 0.595654 0.0282609\nvt 0.59461 0.0343378\nvt 0.587747 0.0334913\nvt 0.603673 0.0221561\nvt 0.602647 0.0287005\nvt 0.596578 0.022148\nvt 0.60963 0.0291915\nvt 0.608385 0.0360854\nvt 0.60154 0.0352064\nvt 0.600273 0.0416355\nvt 0.5935 0.0403952\nvt 0.607005 0.0428903\nvt 0.605386 0.0495813\nvt 0.598782 0.0479743\nvt 0.586691 0.0391468\nvt 0.592091 0.0463604\nvt 0.585418 0.0447556\nvt 0.58386 0.0502873\nvt 0.590458 0.0522576\nvt 0.588415 0.0580136\nvt 0.582021 0.0557327\nvt 0.597003 0.0542094\nvt 0.603486 0.0561516\nvt 0.601251 0.0625841\nvt 0.594923 0.0603337\nvt 0.592528 0.0663399\nvt 0.586248 0.0637331\nvt 0.598748 0.0689076\nvt 0.59594 0.0751115\nvt 0.589856 0.0722404\nvt 0.579901 0.0610825\nvt 0.583694 0.0692999\nvt 0.577517 0.0663314\nvt 0.574883 0.0714744\nvt 0.580937 0.0747925\nvt 0.577798 0.0801063\nvt 0.57198 0.0764964\nvt 0.586944 0.0780471\nvt 0.592912 0.0812308\nvt 0.589573 0.0872298\nvt 0.583747 0.0837425\nvt 0.580218 0.0893087\nvt 0.57451 0.0853865\nvt 0.585926 0.0931346\nvt 0.58194 0.0989315\nvt 0.57638 0.0947633\nvt 0.568792 0.0813824\nvt 0.570828 0.0904718\nvt 0.565326 0.0861281\nvt 0.56159 0.090729\nvt 0.566902 0.0954672\nvt 0.56257 0.10022\nvt 0.557556 0.0951526\nvt 0.572259 0.100124\nvt 0.577679 0.104668\nvt 0.573053 0.110261\nvt 0.567796 0.105344\nvt 0.562931 0.110377\nvt 0.557999 0.104907\nvt 0.568032 0.115726\nvt 0.562593 0.120999\nvt 0.557669 0.115224\nvt 0.553199 0.0993659\nvt 0.552987 0.109296\nvt 0.548515 0.103351\nvt 0.5435 0.107092\nvt 0.547623 0.113513\nvt 0.541796 0.117317\nvt 0.538158 0.110463\nvt 0.552015 0.119884\nvt 0.556771 0.126113\nvt 0.550353 0.131182\nvt 0.545841 0.124354\nvt 0.539023 0.128631\nvt 0.53564 0.120769\nvt 0.534389 0.142285\nvt 0.531637 0.131867\nvt 0.543221 0.136329\nvt 0.532493 0.113341\nvt 0.52902 0.123404\nvt 0.526528 0.11562\nvt 0.857635 0.937018\nvt 0.858026 0.930293\nvt 0.861941 0.928728\nvt 0.861571 0.92294\nvt 0.866045 0.92662\nvt 0.865627 0.921337\nvt 0.857705 0.924203\nvt 0.856874 0.918441\nvt 0.860813 0.917284\nvt 0.859657 0.911896\nvt 0.864144 0.910764\nvt 0.865071 0.915954\nvt 0.869872 0.91974\nvt 0.869455 0.914675\nvt 0.868802 0.90968\nvt 0.873804 0.913658\nvt 0.873389 0.908878\nvt 0.870097 0.924761\nvt 0.874072 0.92334\nvt 0.873996 0.918543\nvt 0.877947 0.92255\nvt 0.878026 0.917811\nvt 0.881814 0.922288\nvt 0.881986 0.917714\nvt 0.877956 0.913116\nvt 0.877722 0.908469\nvt 0.881948 0.908449\nvt 0.882048 0.912995\nvt 0.886219 0.913242\nvt 0.88606 0.917794\nvt 0.886247 0.908729\nvt 0.89079 0.909205\nvt 0.890633 0.913705\nvt 0.885769 0.922456\nvt 0.890378 0.918254\nvt 0.889935 0.922912\nvt 0.894436 0.923517\nvt 0.895009 0.918819\nvt 0.900015 0.91964\nvt 0.89922 0.924318\nvt 0.895454 0.914236\nvt 0.89578 0.909686\nvt 0.901164 0.910286\nvt 0.900621 0.914909\nvt 0.906072 0.915803\nvt 0.905207 0.920541\nvt 0.906815 0.911103\nvt 0.912723 0.912125\nvt 0.911746 0.916905\nvt 0.904234 0.925364\nvt 0.910647 0.921741\nvt 0.909432 0.926626\nvt 0.91477 0.928072\nvt 0.916238 0.923105\nvt 0.921964 0.924828\nvt 0.92022 0.929768\nvt 0.917587 0.918201\nvt 0.918803 0.913323\nvt 0.925058 0.914802\nvt 0.923583 0.91976\nvt 0.929726 0.921651\nvt 0.927816 0.926702\nvt 0.938079 0.918733\nvt 0.935998 0.923876\nvt 0.931486 0.91659\nvt 0.925754 0.931777\nvt 0.933749 0.929008\nvt 0.931353 0.934102\nvt 0.936996 0.936745\nvt 0.939767 0.931605\nvt 0.945829 0.934549\nvt 0.94268 0.939659\nvt 0.942378 0.926435\nvt 0.95171 0.923977\nvt 0.948865 0.929287\nvt 0.94482 0.921197\nvt 0.955456 0.932391\nvt 0.951967 0.937618\nvt 0.96608 0.930405\nvt 0.9621 0.93562\nvt 0.958753 0.927016\nvt 0.9484 0.942798\nvt 0.95812 0.940835\nvt 0.954139 0.946049\nvt 0.617896 0.0224916\nvt 0.6166 0.0297868\nvt 0.610767 0.0221642\nvt 0.623549 0.030457\nvt 0.621952 0.0380266\nvt 0.615224 0.0370333\nvt 0.632153 0.0231465\nvt 0.630472 0.0311724\nvt 0.625024 0.0228191\nvt 0.635372 0.0403119\nvt 0.628721 0.0391224\nvt 0.637353 0.0320453\nvt 0.62683 0.0469204\nvt 0.620305 0.045522\nvt 0.63101 0.0562862\nvt 0.624745 0.0545489\nvt 0.633282 0.0484006\nvt 0.61369 0.0441822\nvt 0.618362 0.0528516\nvt 0.611934 0.05121\nvt 0.609895 0.0580929\nvt 0.616212 0.0600376\nvt 0.613649 0.0670158\nvt 0.60756 0.064835\nvt 0.622416 0.0619901\nvt 0.628527 0.0639669\nvt 0.625771 0.0714462\nvt 0.619817 0.0692574\nvt 0.616926 0.0763641\nvt 0.610988 0.0739294\nvt 0.619528 0.0859631\nvt 0.61379 0.0833517\nvt 0.622773 0.0787702\nvt 0.604914 0.0714407\nvt 0.607939 0.0806718\nvt 0.601997 0.0779332\nvt 0.598848 0.0843363\nvt 0.604709 0.0873508\nvt 0.601084 0.0938815\nvt 0.595413 0.0906437\nvt 0.610455 0.0902618\nvt 0.616126 0.0930918\nvt 0.612461 0.100143\nvt 0.606858 0.0970943\nvt 0.602936 0.103849\nvt 0.597328 0.100429\nvt 0.604245 0.114108\nvt 0.598716 0.110574\nvt 0.608503 0.107134\nvt 0.591644 0.0968493\nvt 0.593145 0.106859\nvt 0.587559 0.102982\nvt 0.583179 0.109072\nvt 0.58871 0.113299\nvt 0.583852 0.119571\nvt 0.578455 0.115064\nvt 0.594226 0.117318\nvt 0.594974 0.128145\nvt 0.589432 0.124015\nvt 0.599756 0.121141\nvt 0.584299 0.130601\nvt 0.578783 0.125877\nvt 0.584546 0.141966\nvt 0.57888 0.13707\nvt 0.589891 0.135097\nvt 0.573338 0.120906\nvt 0.573298 0.131927\nvt 0.567844 0.12659\nvt 0.561986 0.132109\nvt 0.567519 0.137876\nvt 0.561325 0.143715\nvt 0.555674 0.137617\nvt 0.573226 0.143414\nvt 0.573149 0.15548\nvt 0.567286 0.149681\nvt 0.579033 0.148783\nvt 0.561011 0.155918\nvt 0.555012 0.149707\nvt 0.566851 0.162042\nvt 0.554418 0.162223\nvt 0.559957 0.168444\nvt 0.548817 0.143266\nvt 0.542135 0.149578\nvt 0.54847 0.155991\nvt 0.853751 0.908058\nvt 0.85809 0.906913\nvt 0.855538 0.913013\nvt 0.856167 0.902192\nvt 0.861414 0.901192\nvt 0.86289 0.905811\nvt 0.848608 0.898936\nvt 0.85394 0.897589\nvt 0.851489 0.903432\nvt 0.852159 0.892971\nvt 0.858754 0.892079\nvt 0.859933 0.896564\nvt 0.865769 0.895753\nvt 0.866802 0.90023\nvt 0.864934 0.891359\nvt 0.870649 0.890867\nvt 0.871271 0.895202\nvt 0.867865 0.904868\nvt 0.871977 0.899659\nvt 0.872757 0.904187\nvt 0.877308 0.903873\nvt 0.876796 0.899359\nvt 0.881367 0.899467\nvt 0.881708 0.903885\nvt 0.876265 0.894955\nvt 0.875807 0.890622\nvt 0.880682 0.890625\nvt 0.880998 0.894975\nvt 0.885721 0.895223\nvt 0.885955 0.899662\nvt 0.88551 0.890824\nvt 0.890604 0.891145\nvt 0.890695 0.89559\nvt 0.886145 0.904183\nvt 0.890842 0.900064\nvt 0.890835 0.90463\nvt 0.895994 0.905089\nvt 0.89612 0.900498\nvt 0.901932 0.901061\nvt 0.901548 0.905646\nvt 0.896184 0.895969\nvt 0.896235 0.891457\nvt 0.902362 0.891842\nvt 0.902112 0.896427\nvt 0.908406 0.897032\nvt 0.907945 0.901692\nvt 0.908803 0.892378\nvt 0.91555 0.893049\nvt 0.914969 0.897787\nvt 0.907427 0.906391\nvt 0.914303 0.902543\nvt 0.91356 0.90732\nvt 0.919878 0.90843\nvt 0.920837 0.903547\nvt 0.927606 0.904874\nvt 0.926388 0.909794\nvt 0.921703 0.898695\nvt 0.922456 0.893839\nvt 0.929594 0.89484\nvt 0.928652 0.899824\nvt 0.935861 0.901242\nvt 0.934553 0.906358\nvt 0.944729 0.897635\nvt 0.943329 0.902957\nvt 0.937011 0.896096\nvt 0.933095 0.911483\nvt 0.941752 0.908251\nvt 0.939996 0.913501\nvt 0.947085 0.915854\nvt 0.956778 0.912964\nvt 0.954342 0.9185\nvt 0.949167 0.910438\nvt 0.951057 0.904978\nvt 0.96105 0.901508\nvt 0.959024 0.90727\nvt 0.952744 0.899437\nvt 0.967204 0.909796\nvt 0.964527 0.915624\nvt 0.978628 0.906452\nvt 0.975491 0.912441\nvt 0.969618 0.903813\nvt 0.961743 0.921396\nvt 0.972354 0.918429\nvt 0.969217 0.924417\nvt 0.644178 0.0331881\nvt 0.646312 0.0246173\nvt 0.639282 0.023474\nvt 0.648491 0.0431506\nvt 0.641986 0.0416729\nvt 0.650957 0.0345044\nvt 0.657704 0.0358981\nvt 0.660371 0.026904\nvt 0.653342 0.0257606\nvt 0.661407 0.0465741\nvt 0.655002 0.0447906\nvt 0.664388 0.0375086\nvt 0.65223 0.0534795\nvt 0.646003 0.051678\nvt 0.655299 0.063987\nvt 0.649359 0.0619397\nvt 0.658387 0.0554092\nvt 0.63968 0.0499858\nvt 0.643323 0.0599692\nvt 0.63722 0.058099\nvt 0.634565 0.0659847\nvt 0.640515 0.0680441\nvt 0.637429 0.0758531\nvt 0.631691 0.0736679\nvt 0.646361 0.0701457\nvt 0.652134 0.0723067\nvt 0.648839 0.080388\nvt 0.64321 0.0781294\nvt 0.639877 0.0859227\nvt 0.634282 0.0835615\nvt 0.641836 0.0960517\nvt 0.636394 0.0935884\nvt 0.645401 0.0882872\nvt 0.62857 0.0811734\nvt 0.630868 0.0910942\nvt 0.625246 0.0885541\nvt 0.621763 0.0958632\nvt 0.62733 0.0985658\nvt 0.623505 0.105947\nvt 0.618058 0.103111\nvt 0.632793 0.101189\nvt 0.638198 0.103766\nvt 0.634407 0.11144\nvt 0.62902 0.108744\nvt 0.625023 0.116271\nvt 0.619585 0.113357\nvt 0.626255 0.126769\nvt 0.620822 0.12383\nvt 0.630422 0.119083\nvt 0.614066 0.110308\nvt 0.615342 0.120755\nvt 0.609815 0.117512\nvt 0.605332 0.124783\nvt 0.606155 0.13575\nvt 0.60059 0.132084\nvt 0.610908 0.128235\nvt 0.616437 0.131485\nvt 0.617454 0.14253\nvt 0.611834 0.139256\nvt 0.621955 0.134572\nvt 0.606975 0.147168\nvt 0.601269 0.143416\nvt 0.607754 0.159086\nvt 0.601895 0.155293\nvt 0.612713 0.15066\nvt 0.59556 0.13938\nvt 0.596086 0.151152\nvt 0.590301 0.146691\nvt 0.584869 0.154041\nvt 0.590733 0.159057\nvt 0.579036 0.161269\nvt 0.584731 0.16686\nvt 0.596628 0.163704\nvt 0.596946 0.177163\nvt 0.590831 0.172325\nvt 0.602628 0.167909\nvt 0.578299 0.174535\nvt 0.584163 0.181085\nvt 0.582172 0.198081\nvt 0.57596 0.188794\nvt 0.590602 0.186923\nvt 0.572571 0.168217\nvt 0.570495 0.181459\nvt 0.565315 0.174776\nvt 0.844689 0.894078\nvt 0.844918 0.888566\nvt 0.851571 0.888207\nvt 0.85159 0.883418\nvt 0.858198 0.887538\nvt 0.857968 0.883003\nvt 0.845162 0.883668\nvt 0.845315 0.878897\nvt 0.85163 0.878725\nvt 0.851543 0.874069\nvt 0.857906 0.878463\nvt 0.857674 0.873899\nvt 0.864206 0.882573\nvt 0.863998 0.878184\nvt 0.863705 0.873746\nvt 0.86943 0.873582\nvt 0.869767 0.877934\nvt 0.864466 0.886965\nvt 0.869976 0.882237\nvt 0.870272 0.886541\nvt 0.875515 0.886318\nvt 0.875301 0.882034\nvt 0.880318 0.882002\nvt 0.880465 0.886284\nvt 0.875078 0.877758\nvt 0.874782 0.873427\nvt 0.879957 0.873307\nvt 0.880164 0.877666\nvt 0.885259 0.877667\nvt 0.885325 0.88204\nvt 0.885169 0.873269\nvt 0.890647 0.873282\nvt 0.890629 0.877739\nvt 0.885394 0.886428\nvt 0.890663 0.882188\nvt 0.890585 0.886667\nvt 0.896324 0.886921\nvt 0.896432 0.882382\nvt 0.90282 0.882667\nvt 0.902531 0.887245\nvt 0.896537 0.877862\nvt 0.89664 0.873336\nvt 0.903122 0.873449\nvt 0.902916 0.878053\nvt 0.909696 0.878329\nvt 0.909412 0.883006\nvt 0.909941 0.873639\nvt 0.917085 0.873883\nvt 0.916775 0.878682\nvt 0.909126 0.887696\nvt 0.916409 0.883471\nvt 0.916008 0.888265\nvt 0.923074 0.888943\nvt 0.923594 0.884025\nvt 0.931103 0.884765\nvt 0.930384 0.889793\nvt 0.924054 0.879107\nvt 0.924417 0.874163\nvt 0.932053 0.874521\nvt 0.931611 0.879644\nvt 0.939528 0.880337\nvt 0.938835 0.885619\nvt 0.94006 0.875006\nvt 0.948485 0.875601\nvt 0.947824 0.88119\nvt 0.937999 0.89088\nvt 0.946981 0.886722\nvt 0.945937 0.892206\nvt 0.954214 0.893778\nvt 0.95547 0.888026\nvt 0.964306 0.889546\nvt 0.962787 0.895573\nvt 0.956517 0.882208\nvt 0.957329 0.876297\nvt 0.966582 0.87712\nvt 0.965565 0.883385\nvt 0.974928 0.884714\nvt 0.973336 0.891174\nvt 0.986387 0.879341\nvt 0.984447 0.886119\nvt 0.976197 0.878095\nvt 0.971614 0.897573\nvt 0.982508 0.892897\nvt 0.980568 0.899674\nvt 0.670979 0.0394753\nvt 0.674188 0.0302603\nvt 0.667401 0.0280473\nvt 0.674023 0.0507561\nvt 0.667754 0.0485854\nvt 0.677507 0.0416671\nvt 0.684005 0.0439531\nvt 0.687764 0.0346862\nvt 0.680976 0.0324732\nvt 0.686424 0.0556466\nvt 0.680258 0.0531147\nvt 0.690429 0.0464776\nvt 0.676534 0.0620658\nvt 0.670552 0.0597061\nvt 0.678568 0.0732701\nvt 0.672833 0.0707829\nvt 0.682464 0.0645816\nvt 0.664499 0.057486\nvt 0.667052 0.068403\nvt 0.661204 0.0661486\nvt 0.657863 0.0745447\nvt 0.663541 0.0768572\nvt 0.659962 0.0850423\nvt 0.654441 0.0827113\nvt 0.669159 0.0792421\nvt 0.674744 0.0817174\nvt 0.67096 0.0899496\nvt 0.665483 0.0874817\nvt 0.661778 0.0955397\nvt 0.65637 0.0931065\nvt 0.663375 0.105962\nvt 0.658044 0.103481\nvt 0.667164 0.098012\nvt 0.650905 0.0906854\nvt 0.652689 0.101015\nvt 0.64728 0.0985349\nvt 0.643593 0.106328\nvt 0.64896 0.108866\nvt 0.645111 0.116677\nvt 0.639791 0.114086\nvt 0.654281 0.111372\nvt 0.659593 0.113875\nvt 0.655786 0.121776\nvt 0.650464 0.11924\nvt 0.646564 0.127115\nvt 0.641214 0.124508\nvt 0.648001 0.137634\nvt 0.64259 0.135047\nvt 0.651914 0.129673\nvt 0.635826 0.12183\nvt 0.637171 0.132392\nvt 0.63172 0.129624\nvt 0.627497 0.137534\nvt 0.628735 0.148555\nvt 0.623112 0.145613\nvt 0.633037 0.140373\nvt 0.63855 0.143088\nvt 0.644064 0.145708\nvt 0.640075 0.153967\nvt 0.634417 0.151307\nvt 0.630169 0.159772\nvt 0.62435 0.156947\nvt 0.625826 0.168555\nvt 0.631873 0.1712\nvt 0.635995 0.162431\nvt 0.618518 0.153915\nvt 0.619782 0.165704\nvt 0.613742 0.162543\nvt 0.608808 0.171601\nvt 0.610316 0.184377\nvt 0.603614 0.181113\nvt 0.615095 0.174851\nvt 0.621412 0.177727\nvt 0.617052 0.187232\nvt 0.623712 0.189763\nvt 0.627747 0.180324\nvt 0.605741 0.194257\nvt 0.61287 0.197013\nvt 0.609084 0.207007\nvt 0.616123 0.209355\nvt 0.619738 0.199452\nvt 0.598057 0.191104\nvt 0.593135 0.201499\nvt 0.601561 0.204377\nvt 0.845318 0.874175\nvt 0.851182 0.869393\nvt 0.845058 0.869449\nvt 0.850663 0.864737\nvt 0.856622 0.864693\nvt 0.857255 0.869303\nvt 0.844192 0.86015\nvt 0.850103 0.860142\nvt 0.844643 0.864762\nvt 0.849621 0.855649\nvt 0.855471 0.855637\nvt 0.856012 0.860116\nvt 0.861858 0.860074\nvt 0.86255 0.864626\nvt 0.861247 0.855588\nvt 0.867019 0.855533\nvt 0.86762 0.860017\nvt 0.863194 0.869205\nvt 0.868277 0.864547\nvt 0.868919 0.869096\nvt 0.874351 0.868977\nvt 0.873832 0.864465\nvt 0.879319 0.864379\nvt 0.879664 0.868872\nvt 0.873275 0.859948\nvt 0.872772 0.855461\nvt 0.878585 0.855375\nvt 0.878926 0.859872\nvt 0.884677 0.859793\nvt 0.88486 0.864307\nvt 0.884482 0.855276\nvt 0.890554 0.855152\nvt 0.890625 0.859707\nvt 0.88503 0.868807\nvt 0.890681 0.864245\nvt 0.890654 0.868779\nvt 0.896739 0.868781\nvt 0.896819 0.864203\nvt 0.903239 0.868823\nvt 0.903418 0.864169\nvt 0.896865 0.859609\nvt 0.896843 0.85499\nvt 0.903412 0.859499\nvt 0.903399 0.854783\nvt 0.910216 0.864158\nvt 0.910277 0.859378\nvt 0.910237 0.85456\nvt 0.917414 0.859235\nvt 0.917337 0.854281\nvt 0.910109 0.868913\nvt 0.917271 0.869034\nvt 0.917379 0.864141\nvt 0.924648 0.86917\nvt 0.924763 0.864134\nvt 0.93233 0.869348\nvt 0.932525 0.864112\nvt 0.92478 0.859062\nvt 0.924645 0.85394\nvt 0.932463 0.858853\nvt 0.932273 0.853513\nvt 0.940576 0.864124\nvt 0.940556 0.858604\nvt 0.940304 0.853032\nvt 0.949095 0.858309\nvt 0.94878 0.852438\nvt 0.94041 0.869596\nvt 0.948916 0.869905\nvt 0.949137 0.864121\nvt 0.957879 0.870263\nvt 0.958149 0.86414\nvt 0.967243 0.870695\nvt 0.96761 0.864153\nvt 0.958117 0.857959\nvt 0.957718 0.851728\nvt 0.967605 0.857565\nvt 0.967166 0.85092\nvt 0.977346 0.864199\nvt 0.977545 0.857139\nvt 0.987711 0.856698\nvt 0.988152 0.84915\nvt 0.977147 0.850065\nvt 0.97695 0.87122\nvt 0.986829 0.871793\nvt 0.98727 0.864246\nvt 0.694551 0.0368991\nvt 0.696735 0.049385\nvt 0.700983 0.0402458\nvt 0.692519 0.0584258\nvt 0.698579 0.0613962\nvt 0.702971 0.0525347\nvt 0.707415 0.0435925\nvt 0.709184 0.055786\nvt 0.713846 0.0469392\nvt 0.704574 0.0645484\nvt 0.71055 0.0678997\nvt 0.715328 0.0592742\nvt 0.694232 0.0701252\nvt 0.700068 0.0731419\nvt 0.695693 0.0815575\nvt 0.701385 0.0845953\nvt 0.705884 0.0763333\nvt 0.688363 0.0672699\nvt 0.684291 0.0759006\nvt 0.690014 0.078661\nvt 0.680323 0.0843012\nvt 0.685899 0.0869914\nvt 0.676425 0.0925062\nvt 0.681925 0.09513\nvt 0.691476 0.0897862\nvt 0.697072 0.0927028\nvt 0.687394 0.0978601\nvt 0.692937 0.100682\nvt 0.677981 0.103151\nvt 0.683425 0.105811\nvt 0.679538 0.113685\nvt 0.685001 0.116356\nvt 0.688909 0.108549\nvt 0.672563 0.10055\nvt 0.668733 0.108496\nvt 0.674129 0.111077\nvt 0.664928 0.116403\nvt 0.670296 0.118956\nvt 0.661125 0.1243\nvt 0.666515 0.126842\nvt 0.675702 0.12153\nvt 0.681163 0.124145\nvt 0.671917 0.129374\nvt 0.67741 0.13195\nvt 0.662719 0.134731\nvt 0.668183 0.13725\nvt 0.664488 0.145189\nvt 0.670081 0.147671\nvt 0.673708 0.139776\nvt 0.657298 0.132209\nvt 0.653457 0.140181\nvt 0.658961 0.142706\nvt 0.649612 0.148262\nvt 0.645749 0.156506\nvt 0.65147 0.159017\nvt 0.655196 0.150763\nvt 0.66082 0.153223\nvt 0.657198 0.161399\nvt 0.66301 0.163787\nvt 0.666504 0.155656\nvt 0.647734 0.167398\nvt 0.653637 0.169765\nvt 0.650147 0.178346\nvt 0.656265 0.180564\nvt 0.65958 0.172074\nvt 0.641852 0.164963\nvt 0.637954 0.173688\nvt 0.644062 0.176076\nvt 0.634086 0.182736\nvt 0.630299 0.192071\nvt 0.63694 0.19425\nvt 0.64042 0.185004\nvt 0.64674 0.187171\nvt 0.643466 0.196243\nvt 0.650024 0.198203\nvt 0.65306 0.189261\nvt 0.633539 0.203679\nvt 0.640377 0.205567\nvt 0.637505 0.215124\nvt 0.644519 0.216783\nvt 0.647159 0.207363\nvt 0.626643 0.201658\nvt 0.623261 0.211456\nvt 0.630455 0.213368\nvt 0.843594 0.851312\nvt 0.849331 0.851297\nvt 0.843805 0.855654\nvt 0.855089 0.851263\nvt 0.854896 0.846939\nvt 0.849177 0.84701\nvt 0.843514 0.847041\nvt 0.849101 0.842713\nvt 0.843477 0.842773\nvt 0.854738 0.84262\nvt 0.854637 0.838173\nvt 0.84905 0.838323\nvt 0.86059 0.846868\nvt 0.860415 0.842496\nvt 0.866144 0.842338\nvt 0.865958 0.837816\nvt 0.86027 0.838025\nvt 0.860846 0.851209\nvt 0.866363 0.846749\nvt 0.866617 0.851134\nvt 0.872417 0.851036\nvt 0.872156 0.846616\nvt 0.878076 0.846411\nvt 0.878288 0.850914\nvt 0.871935 0.842143\nvt 0.877818 0.8419\nvt 0.877569 0.837228\nvt 0.871715 0.837562\nvt 0.884051 0.846218\nvt 0.883823 0.841594\nvt 0.889955 0.84123\nvt 0.889638 0.836401\nvt 0.883546 0.836858\nvt 0.884272 0.850764\nvt 0.890403 0.850576\nvt 0.890203 0.845932\nvt 0.896717 0.850336\nvt 0.896503 0.84562\nvt 0.903251 0.850042\nvt 0.903026 0.845179\nvt 0.896218 0.840811\nvt 0.89583 0.835886\nvt 0.902645 0.840308\nvt 0.902166 0.835255\nvt 0.909712 0.844742\nvt 0.90927 0.839692\nvt 0.90869 0.83453\nvt 0.916094 0.838965\nvt 0.915393 0.833659\nvt 0.910042 0.84969\nvt 0.917068 0.849265\nvt 0.916645 0.844147\nvt 0.924308 0.848755\nvt 0.923791 0.843491\nvt 0.931847 0.84814\nvt 0.931247 0.842619\nvt 0.923117 0.83813\nvt 0.930394 0.837134\nvt 0.929364 0.83148\nvt 0.922267 0.832672\nvt 0.938984 0.841701\nvt 0.937977 0.835925\nvt 0.945889 0.834492\nvt 0.944387 0.828419\nvt 0.936737 0.830086\nvt 0.939769 0.847401\nvt 0.948105 0.846515\nvt 0.947131 0.84051\nvt 0.956885 0.845459\nvt 0.966103 0.844273\nvt 0.964589 0.837578\nvt 0.955676 0.839156\nvt 0.954149 0.832828\nvt 0.962721 0.830954\nvt 0.960531 0.824332\nvt 0.952316 0.826503\nvt 0.973761 0.83594\nvt 0.971568 0.828892\nvt 0.980554 0.826737\nvt 0.978022 0.819266\nvt 0.969036 0.821958\nvt 0.975753 0.842998\nvt 0.98562 0.841679\nvt 0.983087 0.834208\nvt 0.720278 0.0502859\nvt 0.721354 0.0631346\nvt 0.726314 0.0547061\nvt 0.716458 0.0714935\nvt 0.722384 0.075307\nvt 0.727319 0.067232\nvt 0.732351 0.0591262\nvt 0.733279 0.0714316\nvt 0.738387 0.0635464\nvt 0.739205 0.0758436\nvt 0.728241 0.0792715\nvt 0.734144 0.0834543\nvt 0.717506 0.083277\nvt 0.723345 0.0870204\nvt 0.718633 0.0946902\nvt 0.724487 0.0983832\nvt 0.729213 0.0909491\nvt 0.711691 0.0797132\nvt 0.707092 0.0877995\nvt 0.712862 0.0911746\nvt 0.702702 0.0957583\nvt 0.708387 0.0989543\nvt 0.698495 0.103612\nvt 0.704206 0.106685\nvt 0.714147 0.102293\nvt 0.719989 0.105784\nvt 0.709878 0.109848\nvt 0.715743 0.11318\nvt 0.700071 0.114322\nvt 0.705813 0.117375\nvt 0.701904 0.124889\nvt 0.707787 0.127932\nvt 0.711671 0.120549\nvt 0.694447 0.111383\nvt 0.690524 0.119107\nvt 0.696167 0.12196\nvt 0.686693 0.126822\nvt 0.692328 0.129571\nvt 0.682956 0.134552\nvt 0.688682 0.137243\nvt 0.6981 0.132402\nvt 0.704007 0.135321\nvt 0.694422 0.139945\nvt 0.700388 0.14276\nvt 0.685032 0.144905\nvt 0.690894 0.147548\nvt 0.687483 0.155219\nvt 0.693569 0.157816\nvt 0.696903 0.150249\nvt 0.679313 0.142321\nvt 0.675753 0.150155\nvt 0.681563 0.152675\nvt 0.672265 0.158078\nvt 0.668869 0.166127\nvt 0.674909 0.168509\nvt 0.678138 0.160508\nvt 0.684156 0.162965\nvt 0.69032 0.16545\nvt 0.680954 0.170823\nvt 0.687233 0.173199\nvt 0.671685 0.176579\nvt 0.677919 0.17883\nvt 0.675038 0.186985\nvt 0.681538 0.189103\nvt 0.684292 0.181078\nvt 0.665584 0.174337\nvt 0.662422 0.182722\nvt 0.66869 0.184866\nvt 0.659397 0.191297\nvt 0.65654 0.200087\nvt 0.663174 0.201994\nvt 0.665794 0.1933\nvt 0.672297 0.19529\nvt 0.678918 0.197253\nvt 0.669746 0.203781\nvt 0.676526 0.205579\nvt 0.660622 0.210821\nvt 0.667435 0.212491\nvt 0.665359 0.221413\nvt 0.672431 0.222825\nvt 0.674343 0.214102\nvt 0.653886 0.209113\nvt 0.651446 0.218379\nvt 0.658391 0.219934\nvt 0.843464 0.838413\nvt 0.848971 0.833759\nvt 0.843415 0.833877\nvt 0.848862 0.828997\nvt 0.854521 0.833597\nvt 0.854369 0.828731\nvt 0.843329 0.829115\nvt 0.843233 0.82418\nvt 0.848722 0.824011\nvt 0.848539 0.818779\nvt 0.854191 0.823782\nvt 0.853949 0.818489\nvt 0.859907 0.828549\nvt 0.85967 0.823473\nvt 0.859373 0.818158\nvt 0.865188 0.823103\nvt 0.864821 0.817737\nvt 0.860104 0.833388\nvt 0.865742 0.833129\nvt 0.865488 0.82821\nvt 0.871455 0.832816\nvt 0.871145 0.827871\nvt 0.877261 0.832434\nvt 0.876889 0.827354\nvt 0.870775 0.822694\nvt 0.870326 0.817286\nvt 0.876436 0.822205\nvt 0.87589 0.816725\nvt 0.88272 0.826898\nvt 0.882177 0.821595\nvt 0.881532 0.816071\nvt 0.888 0.820892\nvt 0.887238 0.815294\nvt 0.883178 0.831973\nvt 0.889197 0.831434\nvt 0.888643 0.826253\nvt 0.895311 0.830822\nvt 0.894666 0.825579\nvt 0.90155 0.830103\nvt 0.900792 0.824682\nvt 0.893905 0.820122\nvt 0.893014 0.814461\nvt 0.899905 0.81923\nvt 0.89886 0.813477\nvt 0.907053 0.823803\nvt 0.90601 0.818161\nvt 0.904809 0.81234\nvt 0.912228 0.816936\nvt 0.91084 0.81102\nvt 0.907949 0.829247\nvt 0.914505 0.828251\nvt 0.91344 0.822664\nvt 0.921218 0.827116\nvt 0.91998 0.821429\nvt 0.928121 0.825785\nvt 0.926664 0.819868\nvt 0.918563 0.815576\nvt 0.916962 0.809581\nvt 0.925023 0.814004\nvt 0.923165 0.807908\nvt 0.933536 0.818231\nvt 0.931613 0.812146\nvt 0.929481 0.805977\nvt 0.938335 0.810009\nvt 0.935876 0.803748\nvt 0.93525 0.8242\nvt 0.942607 0.822347\nvt 0.940572 0.816196\nvt 0.950192 0.820213\nvt 0.947807 0.813923\nvt 0.957999 0.817833\nvt 0.955184 0.811332\nvt 0.945191 0.8076\nvt 0.942355 0.801277\nvt 0.952171 0.804946\nvt 0.948925 0.798549\nvt 0.962706 0.808645\nvt 0.959265 0.802076\nvt 0.955621 0.795606\nvt 0.966416 0.799097\nvt 0.962548 0.792374\nvt 0.966022 0.815241\nvt 0.974153 0.812543\nvt 0.970285 0.80582\nvt 0.744423 0.0679665\nvt 0.750194 0.0732755\nvt 0.745071 0.0805783\nvt 0.750921 0.0855199\nvt 0.740021 0.0878523\nvt 0.745989 0.0924799\nvt 0.755964 0.0785845\nvt 0.761735 0.0838935\nvt 0.7568 0.0905526\nvt 0.762737 0.0957419\nvt 0.751925 0.0972102\nvt 0.758006 0.102149\nvt 0.74109 0.099375\nvt 0.747169 0.103865\nvt 0.753358 0.108528\nvt 0.742578 0.110542\nvt 0.748876 0.114948\nvt 0.735116 0.0950686\nvt 0.730402 0.102256\nvt 0.736453 0.106329\nvt 0.725923 0.109441\nvt 0.731982 0.113267\nvt 0.721671 0.116636\nvt 0.727865 0.120311\nvt 0.738202 0.117267\nvt 0.744587 0.121437\nvt 0.734048 0.124051\nvt 0.740544 0.128026\nvt 0.723773 0.127293\nvt 0.730125 0.130905\nvt 0.73668 0.134671\nvt 0.726378 0.137809\nvt 0.733017 0.141396\nvt 0.717639 0.123848\nvt 0.713781 0.13108\nvt 0.719986 0.13438\nvt 0.710049 0.138336\nvt 0.716279 0.141469\nvt 0.706467 0.145637\nvt 0.712858 0.148673\nvt 0.722753 0.144743\nvt 0.729454 0.148149\nvt 0.71929 0.151737\nvt 0.726083 0.154981\nvt 0.709416 0.155856\nvt 0.71603 0.15882\nvt 0.722885 0.161891\nvt 0.712927 0.165976\nvt 0.719873 0.168886\nvt 0.703058 0.153008\nvt 0.699791 0.16045\nvt 0.706252 0.163171\nvt 0.696633 0.167962\nvt 0.703151 0.170531\nvt 0.693626 0.175574\nvt 0.700344 0.17804\nvt 0.70993 0.173187\nvt 0.716949 0.175921\nvt 0.707098 0.180485\nvt 0.714225 0.183045\nvt 0.69752 0.18558\nvt 0.704489 0.1879\nvt 0.711692 0.190269\nvt 0.702066 0.195417\nvt 0.709376 0.197592\nvt 0.690807 0.183317\nvt 0.68816 0.191185\nvt 0.695015 0.193286\nvt 0.685671 0.199173\nvt 0.692609 0.201084\nvt 0.683389 0.207311\nvt 0.690565 0.209059\nvt 0.699788 0.20302\nvt 0.707183 0.204974\nvt 0.697728 0.210736\nvt 0.70524 0.212454\nvt 0.688552 0.217116\nvt 0.695957 0.21859\nvt 0.70355 0.220049\nvt 0.694445 0.226566\nvt 0.702149 0.227748\nvt 0.681365 0.215632\nvt 0.679592 0.224123\nvt 0.686944 0.225359\nvt 0.843096 0.818974\nvt 0.842917 0.813504\nvt 0.848304 0.813281\nvt 0.848012 0.807488\nvt 0.853656 0.812987\nvt 0.853267 0.807071\nvt 0.842683 0.807703\nvt 0.84242 0.801637\nvt 0.847661 0.801376\nvt 0.847255 0.794946\nvt 0.852853 0.801035\nvt 0.852342 0.794558\nvt 0.858548 0.806761\nvt 0.858014 0.800585\nvt 0.857404 0.794103\nvt 0.863179 0.80006\nvt 0.862455 0.793544\nvt 0.859 0.812603\nvt 0.864365 0.81215\nvt 0.863814 0.806246\nvt 0.869779 0.811647\nvt 0.869132 0.805732\nvt 0.875244 0.811055\nvt 0.874469 0.804995\nvt 0.868384 0.799495\nvt 0.867541 0.792968\nvt 0.873619 0.798838\nvt 0.872642 0.792273\nvt 0.87988 0.804337\nvt 0.878878 0.798032\nvt 0.877764 0.791456\nvt 0.884167 0.797119\nvt 0.882899 0.790509\nvt 0.880765 0.810334\nvt 0.886343 0.80951\nvt 0.88531 0.803442\nvt 0.891979 0.808608\nvt 0.890805 0.802516\nvt 0.897676 0.807576\nvt 0.896312 0.801332\nvt 0.889497 0.796142\nvt 0.888064 0.789524\nvt 0.894855 0.795036\nvt 0.893234 0.788393\nvt 0.901911 0.800176\nvt 0.900231 0.79374\nvt 0.898417 0.787096\nvt 0.905633 0.79229\nvt 0.9036 0.785631\nvt 0.90344 0.806361\nvt 0.909271 0.804985\nvt 0.90752 0.798735\nvt 0.915168 0.803472\nvt 0.913197 0.797201\nvt 0.921126 0.801751\nvt 0.918863 0.795347\nvt 0.911066 0.790724\nvt 0.908799 0.784086\nvt 0.916507 0.788972\nvt 0.913975 0.782351\nvt 0.924616 0.793433\nvt 0.921931 0.786965\nvt 0.919123 0.780392\nvt 0.92734 0.78473\nvt 0.924223 0.778208\nvt 0.927141 0.799755\nvt 0.933205 0.797495\nvt 0.930336 0.791154\nvt 0.939309 0.794987\nvt 0.93609 0.788677\nvt 0.945467 0.792251\nvt 0.941818 0.785926\nvt 0.932734 0.782295\nvt 0.929289 0.775876\nvt 0.938103 0.779679\nvt 0.934304 0.773376\nvt 0.947593 0.783103\nvt 0.943438 0.776904\nvt 0.939273 0.770731\nvt 0.948756 0.774048\nvt 0.944158 0.767939\nvt 0.951692 0.789309\nvt 0.95795 0.786265\nvt 0.953353 0.780156\nvt 0.767505 0.0892025\nvt 0.773414 0.0950715\nvt 0.768761 0.101153\nvt 0.774871 0.106702\nvt 0.764159 0.107244\nvt 0.770514 0.112523\nvt 0.779323 0.100941\nvt 0.785231 0.10681\nvt 0.781069 0.112305\nvt 0.787485 0.117946\nvt 0.776926 0.117837\nvt 0.783625 0.123268\nvt 0.766132 0.118329\nvt 0.772822 0.123441\nvt 0.779739 0.128652\nvt 0.768806 0.129135\nvt 0.775924 0.134138\nvt 0.759661 0.113354\nvt 0.755308 0.119518\nvt 0.76197 0.124273\nvt 0.75114 0.125775\nvt 0.757907 0.130277\nvt 0.747172 0.132127\nvt 0.754173 0.136475\nvt 0.764931 0.134938\nvt 0.772213 0.13973\nvt 0.761222 0.140857\nvt 0.768683 0.145461\nvt 0.750407 0.142651\nvt 0.757707 0.146901\nvt 0.765288 0.151297\nvt 0.754337 0.153032\nvt 0.762051 0.157237\nvt 0.743419 0.13858\nvt 0.739833 0.145106\nvt 0.746948 0.148993\nvt 0.736365 0.151679\nvt 0.743548 0.155358\nvt 0.73306 0.158323\nvt 0.740459 0.161873\nvt 0.751062 0.159212\nvt 0.758871 0.163212\nvt 0.747938 0.165465\nvt 0.755862 0.169273\nvt 0.737319 0.168358\nvt 0.745021 0.171818\nvt 0.753022 0.175419\nvt 0.742255 0.178236\nvt 0.750354 0.181638\nvt 0.72996 0.16506\nvt 0.72702 0.171868\nvt 0.73449 0.174984\nvt 0.724193 0.178723\nvt 0.731718 0.181633\nvt 0.721536 0.185651\nvt 0.729274 0.188408\nvt 0.739585 0.184686\nvt 0.747745 0.18787\nvt 0.737079 0.191192\nvt 0.74532 0.194159\nvt 0.726791 0.195166\nvt 0.734806 0.197778\nvt 0.743097 0.200508\nvt 0.732712 0.204414\nvt 0.741072 0.206906\nvt 0.719106 0.192677\nvt 0.716864 0.199779\nvt 0.724653 0.202045\nvt 0.71477 0.206935\nvt 0.722606 0.208952\nvt 0.712893 0.214166\nvt 0.72093 0.21596\nvt 0.730746 0.211073\nvt 0.739134 0.213301\nvt 0.728983 0.21777\nvt 0.737415 0.219724\nvt 0.719268 0.222961\nvt 0.7275 0.224517\nvt 0.735942 0.226172\nvt 0.726253 0.231289\nvt 0.734716 0.232634\nvt 0.711303 0.221489\nvt 0.709966 0.228885\nvt 0.718007 0.23005\nvt 0.842102 0.795219\nvt 0.846795 0.788203\nvt 0.841745 0.788493\nvt 0.851782 0.78783\nvt 0.851128 0.780698\nvt 0.846283 0.781167\nvt 0.841333 0.781442\nvt 0.845717 0.77386\nvt 0.840895 0.774165\nvt 0.850467 0.773474\nvt 0.849729 0.765934\nvt 0.845111 0.766337\nvt 0.855976 0.780308\nvt 0.855161 0.772987\nvt 0.859831 0.772423\nvt 0.858832 0.764889\nvt 0.854297 0.765456\nvt 0.856724 0.787345\nvt 0.861656 0.786783\nvt 0.860777 0.779724\nvt 0.86661 0.786182\nvt 0.871576 0.785487\nvt 0.870402 0.778336\nvt 0.865598 0.779131\nvt 0.864512 0.77181\nvt 0.869192 0.77111\nvt 0.867916 0.763597\nvt 0.863377 0.764291\nvt 0.875238 0.777595\nvt 0.873859 0.770288\nvt 0.878515 0.769373\nvt 0.876937 0.761901\nvt 0.872436 0.762798\nvt 0.876545 0.784647\nvt 0.881522 0.783705\nvt 0.880049 0.776647\nvt 0.886514 0.782704\nvt 0.891507 0.781584\nvt 0.889663 0.774472\nvt 0.884873 0.775666\nvt 0.883165 0.768397\nvt 0.887797 0.76732\nvt 0.885892 0.759928\nvt 0.881427 0.760966\nvt 0.894469 0.773297\nvt 0.892398 0.766102\nvt 0.896967 0.764775\nvt 0.894704 0.757501\nvt 0.890319 0.758769\nvt 0.896486 0.780288\nvt 0.901457 0.778857\nvt 0.899229 0.771899\nvt 0.906422 0.777332\nvt 0.903974 0.770435\nvt 0.911355 0.775652\nvt 0.908655 0.768742\nvt 0.901498 0.763367\nvt 0.905977 0.76184\nvt 0.903337 0.754759\nvt 0.899048 0.756185\nvt 0.913303 0.767021\nvt 0.910388 0.760155\nvt 0.914716 0.75834\nvt 0.911672 0.751524\nvt 0.907546 0.753199\nvt 0.916231 0.773755\nvt 0.921048 0.771678\nvt 0.917861 0.76506\nvt 0.925806 0.769457\nvt 0.92234 0.762989\nvt 0.930504 0.767097\nvt 0.926736 0.760753\nvt 0.918948 0.756423\nvt 0.915698 0.749788\nvt 0.923064 0.754422\nvt 0.919588 0.747991\nvt 0.931068 0.758492\nvt 0.927047 0.752357\nvt 0.930963 0.750261\nvt 0.926565 0.744368\nvt 0.923293 0.746157\nvt 0.935146 0.764605\nvt 0.93976 0.762046\nvt 0.935362 0.756154\nvt 0.79114 0.112679\nvt 0.797939 0.118518\nvt 0.794247 0.123605\nvt 0.801259 0.129263\nvt 0.790562 0.128728\nvt 0.797842 0.134225\nvt 0.804739 0.124358\nvt 0.811538 0.130198\nvt 0.808425 0.134899\nvt 0.815966 0.140378\nvt 0.805286 0.139659\nvt 0.81314 0.145013\nvt 0.794328 0.139232\nvt 0.802093 0.144539\nvt 0.798894 0.149531\nvt 0.807182 0.154685\nvt 0.810181 0.149791\nvt 0.786892 0.133926\nvt 0.783276 0.139218\nvt 0.790952 0.144369\nvt 0.779753 0.144625\nvt 0.787583 0.149599\nvt 0.776356 0.150151\nvt 0.784455 0.154998\nvt 0.795735 0.15463\nvt 0.804185 0.15967\nvt 0.792657 0.159836\nvt 0.801275 0.164755\nvt 0.78124 0.160421\nvt 0.789703 0.165148\nvt 0.786829 0.170537\nvt 0.795696 0.175187\nvt 0.798444 0.169935\nvt 0.773117 0.155804\nvt 0.769993 0.161544\nvt 0.778263 0.165985\nvt 0.76694 0.167333\nvt 0.775304 0.171584\nvt 0.764016 0.173191\nvt 0.772593 0.17731\nvt 0.783996 0.175975\nvt 0.792945 0.180467\nvt 0.78126 0.181472\nvt 0.790293 0.185808\nvt 0.769821 0.183007\nvt 0.778679 0.18704\nvt 0.776207 0.192646\nvt 0.785366 0.196641\nvt 0.787773 0.191207\nvt 0.761279 0.179141\nvt 0.758675 0.185146\nvt 0.767304 0.188815\nvt 0.756151 0.191169\nvt 0.764828 0.19462\nvt 0.753774 0.197231\nvt 0.762614 0.20052\nvt 0.7738 0.198256\nvt 0.782982 0.202057\nvt 0.771512 0.203888\nvt 0.780717 0.207498\nvt 0.760371 0.206354\nvt 0.769399 0.209561\nvt 0.76742 0.215236\nvt 0.776632 0.218431\nvt 0.778608 0.212964\nvt 0.751611 0.203351\nvt 0.749609 0.209497\nvt 0.758403 0.212266\nvt 0.747714 0.215637\nvt 0.756508 0.218141\nvt 0.745999 0.221782\nvt 0.754894 0.224075\nvt 0.765536 0.220871\nvt 0.774711 0.223832\nvt 0.763797 0.226488\nvt 0.772927 0.22922\nvt 0.7533 0.229898\nvt 0.762254 0.232108\nvt 0.760875 0.237682\nvt 0.769863 0.239913\nvt 0.771318 0.234587\nvt 0.744535 0.227943\nvt 0.743275 0.234089\nvt 0.751999 0.235758\nvt 0.84041 0.766641\nvt 0.844476 0.758655\nvt 0.839905 0.758963\nvt 0.848971 0.758271\nvt 0.84819 0.750512\nvt 0.843835 0.750905\nvt 0.839392 0.751215\nvt 0.838906 0.743489\nvt 0.843209 0.743177\nvt 0.847441 0.742802\nvt 0.852506 0.750067\nvt 0.851622 0.742364\nvt 0.855776 0.741859\nvt 0.853405 0.75779\nvt 0.857811 0.75724\nvt 0.856789 0.749541\nvt 0.86222 0.756647\nvt 0.86662 0.755979\nvt 0.86533 0.748285\nvt 0.861061 0.748953\nvt 0.859923 0.741282\nvt 0.86406 0.740641\nvt 0.869572 0.74756\nvt 0.868183 0.739944\nvt 0.872284 0.739183\nvt 0.870998 0.755201\nvt 0.875356 0.754344\nvt 0.873801 0.746754\nvt 0.879696 0.753443\nvt 0.884006 0.75246\nvt 0.882177 0.744932\nvt 0.877997 0.745884\nvt 0.876357 0.738349\nvt 0.8804 0.737452\nvt 0.886296 0.743924\nvt 0.884411 0.736504\nvt 0.888381 0.735497\nvt 0.888275 0.751361\nvt 0.8925 0.750179\nvt 0.890392 0.742833\nvt 0.896679 0.748946\nvt 0.900797 0.74763\nvt 0.898424 0.740447\nvt 0.89442 0.741683\nvt 0.8923 0.734426\nvt 0.896165 0.733301\nvt 0.902305 0.739169\nvt 0.899971 0.732133\nvt 0.903703 0.730919\nvt 0.904841 0.746198\nvt 0.908799 0.744681\nvt 0.906149 0.737808\nvt 0.91266 0.743113\nvt 0.909866 0.736401\nvt 0.916405 0.741499\nvt 0.913531 0.734938\nvt 0.907349 0.729656\nvt 0.910874 0.728368\nvt 0.917055 0.733472\nvt 0.914249 0.727079\nvt 0.917549 0.72579\nvt 0.914544 0.719597\nvt 0.920016 0.739847\nvt 0.923559 0.738175\nvt 0.920554 0.731983\nvt 0.818338 0.136038\nvt 0.826788 0.140987\nvt 0.824103 0.145564\nvt 0.832613 0.150561\nvt 0.821381 0.150195\nvt 0.830003 0.155212\nvt 0.835238 0.145937\nvt 0.843689 0.150886\nvt 0.841273 0.155469\nvt 0.838811 0.1601\nvt 0.827283 0.159947\nvt 0.836257 0.16483\nvt 0.833654 0.169635\nvt 0.818584 0.15493\nvt 0.815749 0.159759\nvt 0.824603 0.16474\nvt 0.81291 0.164668\nvt 0.821876 0.169613\nvt 0.810113 0.169659\nvt 0.819245 0.174548\nvt 0.831046 0.174492\nvt 0.828442 0.179392\nvt 0.816549 0.179534\nvt 0.825855 0.184328\nvt 0.823291 0.189293\nvt 0.807402 0.174734\nvt 0.804737 0.179864\nvt 0.813952 0.184571\nvt 0.802081 0.185024\nvt 0.811364 0.189633\nvt 0.79949 0.190223\nvt 0.808873 0.194747\nvt 0.820757 0.194285\nvt 0.818262 0.199293\nvt 0.806388 0.199843\nvt 0.815816 0.204306\nvt 0.813425 0.20932\nvt 0.797025 0.195475\nvt 0.79464 0.200747\nvt 0.804008 0.204982\nvt 0.79229 0.206004\nvt 0.801676 0.210095\nvt 0.79003 0.211266\nvt 0.799447 0.215254\nvt 0.811094 0.21433\nvt 0.808825 0.219327\nvt 0.797268 0.220328\nvt 0.80662 0.224304\nvt 0.804485 0.229251\nvt 0.787914 0.21655\nvt 0.785901 0.221817\nvt 0.795196 0.225435\nvt 0.783948 0.227026\nvt 0.793202 0.230464\nvt 0.782103 0.232198\nvt 0.791311 0.235528\nvt 0.80243 0.23416\nvt 0.800449 0.239022\nvt 0.789501 0.240427\nvt 0.798539 0.243831\nvt 0.796706 0.248569\nvt 0.805491 0.252174\nvt 0.780414 0.237353\nvt 0.778846 0.242446\nvt 0.7878 0.245341\nvt 0.853865 0.935861\nvt 0.854542 0.93052\nvt 0.85148 0.930074\nvt 0.854299 0.924789\nvt 0.851214 0.924809\nvt 0.85094 0.93486\nvt 0.848525 0.934141\nvt 0.848831 0.929619\nvt 0.845857 0.924384\nvt 0.848477 0.924677\nvt 0.846389 0.929159\nvt 0.847796 0.919688\nvt 0.850443 0.919607\nvt 0.844793 0.914833\nvt 0.846593 0.914982\nvt 0.845325 0.919608\nvt 0.853443 0.919203\nvt 0.849097 0.914612\nvt 0.852042 0.913929\nvt 0.85016 0.909132\nvt 0.847179 0.910091\nvt 0.847748 0.904749\nvt 0.844798 0.906095\nvt 0.84467 0.910889\nvt 0.840002 0.908382\nvt 0.842268 0.907257\nvt 0.842398 0.911608\nvt 0.841913 0.902516\nvt 0.839622 0.903933\nvt 0.837607 0.905157\nvt 0.836617 0.901244\nvt 0.835211 0.901932\nvt 0.844753 0.900715\nvt 0.841 0.897458\nvt 0.838565 0.899665\nvt 0.268574 0.39157\nvt 0.243393 0.377165\nvt 0.30582 0.346943\nvt 0.280111 0.31783\nvt 0.267738 0.452056\nvt 0.236993 0.444033\nvt 0.293321 0.405053\nvt 0.317201 0.41669\nvt 0.346672 0.380579\nvt 0.327122 0.36564\nvt 0.32259 0.466894\nvt 0.294601 0.458963\nvt 0.340773 0.427931\nvt 0.281357 0.504684\nvt 0.248582 0.500886\nvt 0.310481 0.551249\nvt 0.279708 0.550654\nvt 0.311219 0.508753\nvt 0.210576 0.498107\nvt 0.169956 0.495836\nvt 0.206674 0.4365\nvt 0.244972 0.549906\nvt 0.201171 0.550766\nvt 0.220623 0.598988\nvt 0.17939 0.602183\nvt 0.133237 0.555171\nvt 0.287292 0.637509\nvt 0.256431 0.643579\nvt 0.259056 0.596061\nvt 0.291892 0.593673\nvt 0.321265 0.590834\nvt 0.341811 0.626912\nvt 0.314817 0.633197\nvt 0.34539 0.668682\nvt 0.320616 0.675754\nvt 0.401633 0.692522\nvt 0.378482 0.697915\nvt 0.368294 0.661109\nvt 0.225544 0.649195\nvt 0.271697 0.696206\nvt 0.296094 0.685349\nvt 0.33719 0.718476\nvt 0.357474 0.705677\nvt 0.365976 0.395324\nvt 0.385651 0.411552\nvt 0.364599 0.440222\nvt 0.387588 0.452805\nvt 0.349048 0.474603\nvt 0.37644 0.483186\nvt 0.404479 0.42889\nvt 0.420728 0.445308\nvt 0.40865 0.464921\nvt 0.42815 0.473583\nvt 0.40059 0.489989\nvt 0.423647 0.49557\nvt 0.368884 0.515633\nvt 0.396134 0.518791\nvt 0.396138 0.54881\nvt 0.421364 0.548282\nvt 0.421275 0.52135\nvt 0.340487 0.512345\nvt 0.34016 0.550609\nvt 0.369314 0.549275\nvt 0.349309 0.586558\nvt 0.376037 0.581804\nvt 0.389353 0.610968\nvt 0.365727 0.619817\nvt 0.40146 0.577531\nvt 0.424906 0.574058\nvt 0.431098 0.598104\nvt 0.410589 0.60414\nvt 0.422017 0.627823\nvt 0.404366 0.638034\nvt 0.439329 0.61997\nvt 0.447755 0.639199\nvt 0.433605 0.647891\nvt 0.387206 0.650011\nvt 0.420117 0.659173\nvt 0.408958 0.673634\nvt 0.454724 0.655462\nvt 0.443212 0.663651\nvt 0.451333 0.675429\nvt 0.43317 0.674432\nvt 0.444053 0.683824\nvt 0.460355 0.668499\nvt 0.46539 0.677834\nvt 0.458461 0.68355\nvt 0.465503 0.688988\nvt 0.453133 0.690908\nvt 0.461791 0.695556\nvt 0.439663 0.694145\nvt 0.450099 0.698011\nvt 0.459059 0.70084\nvt 0.451223 0.704857\nvt 0.457982 0.704818\nvt 0.426197 0.687182\nvt 0.426481 0.70053\nvt 0.440917 0.703616\nvt 0.568192 0.202045\nvt 0.565561 0.194261\nvt 0.554323 0.198161\nvt 0.561484 0.187272\nvt 0.551606 0.191964\nvt 0.555853 0.204673\nvt 0.543606 0.201171\nvt 0.544387 0.206571\nvt 0.533899 0.203378\nvt 0.541987 0.196051\nvt 0.533036 0.199125\nvt 0.548392 0.186299\nvt 0.539625 0.191063\nvt 0.536745 0.186103\nvt 0.529292 0.190815\nvt 0.531353 0.195032\nvt 0.557105 0.180837\nvt 0.552446 0.174721\nvt 0.544593 0.180616\nvt 0.547526 0.168691\nvt 0.540517 0.17506\nvt 0.535961 0.169683\nvt 0.542207 0.162793\nvt 0.533575 0.181065\nvt 0.526983 0.186445\nvt 0.524338 0.182173\nvt 0.53003 0.176258\nvt 0.526027 0.17199\nvt 0.531103 0.164848\nvt 0.52158 0.168546\nvt 0.51765 0.175336\nvt 0.521195 0.178429\nvt 0.536351 0.157074\nvt 0.525638 0.161006\nvt 0.529841 0.152573\nvt 0.53417 0.207756\nvt 0.525696 0.20487\nvt 0.525681 0.208346\nvt 0.519093 0.205763\nvt 0.525175 0.2015\nvt 0.518917 0.202992\nvt 0.519105 0.208435\nvt 0.514404 0.208048\nvt 0.514185 0.206171\nvt 0.510577 0.206553\nvt 0.513451 0.204234\nvt 0.509488 0.205084\nvt 0.517955 0.20041\nvt 0.512847 0.202045\nvt 0.508814 0.203234\nvt 0.512192 0.199701\nvt 0.50835 0.201244\nvt 0.524127 0.19811\nvt 0.522695 0.194617\nvt 0.51707 0.197482\nvt 0.521025 0.19094\nvt 0.519043 0.187343\nvt 0.51447 0.191402\nvt 0.515775 0.194556\nvt 0.51131 0.197299\nvt 0.510328 0.194867\nvt 0.50716 0.197166\nvt 0.507704 0.199278\nvt 0.512673 0.18881\nvt 0.509378 0.192435\nvt 0.50818 0.19052\nvt 0.506641 0.192961\nvt 0.506726 0.194922\nvt 0.516678 0.184088\nvt 0.513955 0.181417\nvt 0.510751 0.18653\nvt 0.816244 0.728991\nvt 0.820514 0.729019\nvt 0.816352 0.736302\nvt 0.820904 0.736056\nvt 0.812006 0.721753\nvt 0.816056 0.721872\nvt 0.812005 0.728918\nvt 0.807828 0.728757\nvt 0.807601 0.736128\nvt 0.811938 0.736284\nvt 0.807991 0.721569\nvt 0.808106 0.714514\nvt 0.811969 0.71467\nvt 0.80448 0.707399\nvt 0.808197 0.707526\nvt 0.815848 0.714811\nvt 0.819735 0.714943\nvt 0.820125 0.721981\nvt 0.811913 0.707652\nvt 0.81563 0.707778\nvt 0.188888 0.260607\nvt 0.197337 0.256722\nvt 0.180582 0.264787\nvt 0.182759 0.26923\nvt 0.190876 0.264981\nvt 0.192803 0.269185\nvt 0.200874 0.265244\nvt 0.199157 0.26112\nvt 0.187027 0.277906\nvt 0.184894 0.273573\nvt 0.194699 0.273303\nvt 0.177032 0.278073\nvt 0.174706 0.273629\nvt 0.171683 0.287112\nvt 0.169194 0.282628\nvt 0.179355 0.282509\nvt 0.172375 0.269172\nvt 0.164217 0.27366\nvt 0.166706 0.278144\nvt 0.787562 0.964421\nvt 0.789935 0.96552\nvt 0.786542 0.967715\nvt 0.788586 0.968484\nvt 0.78519 0.963353\nvt 0.788579 0.961187\nvt 0.785895 0.95991\nvt 0.784498 0.966946\nvt 0.782454 0.966176\nvt 0.782823 0.962346\nvt 0.783212 0.95861\nvt 0.786585 0.956563\nvt 0.783639 0.955063\nvt 0.784108 0.951839\nvt 0.789593 0.958074\nvt 0.792633 0.959592\nvt 0.791284 0.962556\nvt 0.790503 0.955381\nvt 0.787272 0.953669\nvt 0.485277 0.0822765\nvt 0.487286 0.0893533\nvt 0.488772 0.0828486\nvt 0.485763 0.095962\nvt 0.490403 0.0969095\nvt 0.491345 0.0901409\nvt 0.495443 0.0908337\nvt 0.495763 0.0839927\nvt 0.492268 0.0834206\nvt 0.495109 0.0977036\nvt 0.499863 0.0983934\nvt 0.49956 0.0914791\nvt 0.489396 0.10383\nvt 0.49475 0.104631\nvt 0.494314 0.111654\nvt 0.500467 0.112222\nvt 0.500165 0.105308\nvt 0.484165 0.102779\nvt 0.482469 0.109843\nvt 0.488321 0.110896\nvt 0.791209 0.953406\nvt 0.794549 0.955575\nvt 0.793982 0.956628\nvt 0.788629 0.949206\nvt 0.791862 0.951857\nvt 0.787894 0.951237\nvt 0.784625 0.949071\nvt 0.785292 0.946554\nvt 0.786214 0.944085\nvt 0.789473 0.947338\nvt 0.787647 0.94191\nvt 0.792609 0.950442\nvt 0.795683 0.953471\nvt 0.795116 0.954523\nvt 0.790717 0.945581\nvt 0.79362 0.949023\nvt 0.48065 0.117194\nvt 0.47884 0.124946\nvt 0.486043 0.125746\nvt 0.487118 0.118208\nvt 0.493751 0.118808\nvt 0.500467 0.126229\nvt 0.493219 0.126132\nvt 0.500467 0.119005\nvt 0.485158 0.133529\nvt 0.492879 0.133663\nvt 0.500467 0.133686\nvt 0.49285 0.141322\nvt 0.500467 0.14129\nvt 0.477172 0.133215\nvt 0.476673 0.141756\nvt 0.485022 0.141486\nvt 0.815166 0.887459\nvt 0.820904 0.887442\nvt 0.815405 0.891044\nvt 0.820904 0.891644\nvt 0.808997 0.883364\nvt 0.814984 0.883233\nvt 0.809315 0.887663\nvt 0.803236 0.888209\nvt 0.803994 0.892296\nvt 0.809803 0.891376\nvt 0.80291 0.883597\nvt 0.808826 0.878831\nvt 0.802703 0.878909\nvt 0.802662 0.874181\nvt 0.814882 0.878731\nvt 0.820904 0.878676\nvt 0.820903 0.883173\nvt 0.814856 0.874073\nvt 0.808793 0.874128\nvt 0.420995 0.21061\nvt 0.41109 0.212225\nvt 0.402569 0.214734\nvt 0.40523 0.225162\nvt 0.413232 0.22298\nvt 0.423492 0.231331\nvt 0.41471 0.233462\nvt 0.42267 0.221169\nvt 0.407392 0.235615\nvt 0.409429 0.246058\nvt 0.415855 0.243806\nvt 0.397806 0.227438\nvt 0.400442 0.237844\nvt 0.39346 0.239965\nvt 0.396576 0.250562\nvt 0.403002 0.24831\nvt 0.395019 0.217155\nvt 0.387892 0.219411\nvt 0.390662 0.22961\nvt 0.820904 0.87404\nvt 0.820904 0.869358\nvt 0.814903 0.869378\nvt 0.808886 0.869416\nvt 0.809075 0.864744\nvt 0.814995 0.8647\nvt 0.802835 0.869448\nvt 0.803134 0.864752\nvt 0.803471 0.860136\nvt 0.809293 0.860113\nvt 0.803758 0.85564\nvt 0.815101 0.860094\nvt 0.820904 0.864697\nvt 0.820904 0.860086\nvt 0.809468 0.855634\nvt 0.815194 0.855605\nvt 0.380637 0.221426\nvt 0.383366 0.231546\nvt 0.375893 0.233284\nvt 0.373331 0.223241\nvt 0.386043 0.241797\nvt 0.388695 0.252114\nvt 0.380813 0.253666\nvt 0.378402 0.243442\nvt 0.370744 0.245001\nvt 0.368477 0.234867\nvt 0.372932 0.255218\nvt 0.365051 0.25677\nvt 0.363127 0.246384\nvt 0.366054 0.2249\nvt 0.36105 0.236319\nvt 0.358833 0.226436\nvt 0.815242 0.851279\nvt 0.820904 0.855599\nvt 0.820904 0.851274\nvt 0.809578 0.851292\nvt 0.809604 0.847045\nvt 0.81526 0.847036\nvt 0.803908 0.851306\nvt 0.803963 0.847053\nvt 0.80397 0.8428\nvt 0.809616 0.842804\nvt 0.803966 0.838462\nvt 0.81526 0.842795\nvt 0.820903 0.847031\nvt 0.820904 0.842788\nvt 0.815255 0.838478\nvt 0.809612 0.83846\nvt 0.351701 0.227887\nvt 0.353727 0.237604\nvt 0.346387 0.238799\nvt 0.344587 0.229253\nvt 0.355608 0.247501\nvt 0.357415 0.257486\nvt 0.349778 0.258203\nvt 0.348134 0.248453\nvt 0.340652 0.249344\nvt 0.3391 0.239855\nvt 0.342141 0.258919\nvt 0.334504 0.259635\nvt 0.333101 0.250071\nvt 0.337425 0.230539\nvt 0.330193 0.231721\nvt 0.331689 0.240804\nvt 0.820904 0.838472\nvt 0.820904 0.834006\nvt 0.815258 0.834005\nvt 0.809618 0.833991\nvt 0.815269 0.829328\nvt 0.809655 0.829238\nvt 0.803991 0.833952\nvt 0.804041 0.829243\nvt 0.809688 0.824387\nvt 0.804113 0.82431\nvt 0.80421 0.81913\nvt 0.820904 0.829312\nvt 0.820904 0.824383\nvt 0.81529 0.824396\nvt 0.81532 0.81922\nvt 0.809757 0.819194\nvt 0.322871 0.232773\nvt 0.324212 0.241578\nvt 0.315412 0.233736\nvt 0.31654 0.242252\nvt 0.325421 0.250533\nvt 0.326565 0.259564\nvt 0.317647 0.250841\nvt 0.318625 0.259493\nvt 0.308866 0.242832\nvt 0.309812 0.251104\nvt 0.310685 0.259422\nvt 0.301877 0.251297\nvt 0.302745 0.25935\nvt 0.307771 0.23465\nvt 0.299983 0.235515\nvt 0.300983 0.243364\nvt 0.820904 0.819198\nvt 0.820904 0.813807\nvt 0.815361 0.813814\nvt 0.809834 0.813786\nvt 0.815412 0.808104\nvt 0.809954 0.807955\nvt 0.804338 0.813678\nvt 0.804501 0.807927\nvt 0.810067 0.801987\nvt 0.804699 0.801851\nvt 0.804932 0.795451\nvt 0.820905 0.80809\nvt 0.820904 0.802007\nvt 0.815475 0.802018\nvt 0.81555 0.795608\nvt 0.810226 0.795566\nvt 0.292083 0.23633\nvt 0.293015 0.243831\nvt 0.284018 0.237158\nvt 0.284828 0.244313\nvt 0.293802 0.251394\nvt 0.294518 0.258987\nvt 0.285625 0.251457\nvt 0.286292 0.258624\nvt 0.276629 0.244817\nvt 0.277382 0.251546\nvt 0.278065 0.258262\nvt 0.269042 0.251775\nvt 0.269838 0.257899\nvt 0.275737 0.23806\nvt 0.267299 0.239063\nvt 0.268222 0.245454\nvt 0.820904 0.795582\nvt 0.820904 0.78892\nvt 0.815636 0.788927\nvt 0.810392 0.788884\nvt 0.810606 0.781785\nvt 0.815734 0.781946\nvt 0.805195 0.78873\nvt 0.805491 0.78171\nvt 0.805825 0.774413\nvt 0.810807 0.774579\nvt 0.806186 0.766896\nvt 0.815842 0.77464\nvt 0.820905 0.781945\nvt 0.820904 0.774644\nvt 0.811053 0.767049\nvt 0.815961 0.767108\nvt 0.258763 0.240192\nvt 0.259731 0.246249\nvt 0.250107 0.241532\nvt 0.25108 0.247294\nvt 0.260578 0.252257\nvt 0.261364 0.25824\nvt 0.252889 0.258581\nvt 0.252032 0.252937\nvt 0.243451 0.253761\nvt 0.242433 0.248531\nvt 0.244415 0.258923\nvt 0.235941 0.259264\nvt 0.234859 0.255016\nvt 0.241306 0.243163\nvt 0.232436 0.245118\nvt 0.233695 0.250178\nvt 0.816088 0.759454\nvt 0.820904 0.7671\nvt 0.820904 0.75946\nvt 0.8113 0.759388\nvt 0.811559 0.751615\nvt 0.816213 0.751717\nvt 0.806565 0.759216\nvt 0.806942 0.751465\nvt 0.811773 0.74389\nvt 0.807296 0.743733\nvt 0.820904 0.751731\nvt 0.820904 0.743935\nvt 0.816321 0.743938\nvt 0.22357 0.247427\nvt 0.224967 0.252281\nvt 0.214739 0.250119\nvt 0.216264 0.254866\nvt 0.226279 0.256988\nvt 0.227548 0.261623\nvt 0.219156 0.263982\nvt 0.217728 0.259428\nvt 0.209221 0.262086\nvt 0.207638 0.257742\nvt 0.210764 0.266341\nvt 0.202371 0.2687\nvt 0.205975 0.253221\nvt 0.795065 0.94746\nvt 0.797763 0.95069\nvt 0.796251 0.952418\nvt 0.792412 0.94405\nvt 0.79445 0.942508\nvt 0.796777 0.945833\nvt 0.789847 0.940277\nvt 0.792324 0.938995\nvt 0.796486 0.941126\nvt 0.794585 0.937871\nvt 0.794886 0.933934\nvt 0.79674 0.936827\nvt 0.799275 0.948962\nvt 0.800788 0.947233\nvt 0.798587 0.94422\nvt 0.800447 0.942613\nvt 0.798593 0.93972\nvt 0.805497 0.895409\nvt 0.810621 0.894241\nvt 0.807228 0.89775\nvt 0.811528 0.896489\nvt 0.815678 0.893624\nvt 0.820701 0.893284\nvt 0.815989 0.895611\nvt 0.820498 0.894924\nvt 0.812449 0.898371\nvt 0.816343 0.897418\nvt 0.820295 0.896564\nvt 0.816719 0.899135\nvt 0.820093 0.898203\nvt 0.808671 0.899518\nvt 0.80997 0.901\nvt 0.813344 0.900068\nvt 0.683282 0.743218\nvt 0.639363 0.749517\nvt 0.623833 0.73714\nvt 0.608152 0.726337\nvt 0.573362 0.739304\nvt 0.584325 0.7475\nvt 0.595445 0.755816\nvt 0.551526 0.762116\nvt 0.545033 0.755717\nvt 0.538693 0.749461\nvt 0.504087 0.757311\nvt 0.505847 0.762863\nvt 0.562705 0.733153\nvt 0.53266 0.74349\nvt 0.527309 0.737516\nvt 0.500566 0.746207\nvt 0.502326 0.751759\nvt 0.592169 0.718684\nvt 0.57679 0.714249\nvt 0.552849 0.727376\nvt 0.556718 0.27388\nvt 0.508032 0.254922\nvt 0.563146 0.253597\nvt 0.510521 0.232187\nvt 0.593677 0.313836\nvt 0.550275 0.294418\nvt 0.604856 0.293983\nvt 0.651899 0.316376\nvt 0.668396 0.296419\nvt 0.615771 0.275008\nvt 0.635827 0.335595\nvt 0.620602 0.353341\nvt 0.583377 0.332472\nvt 0.605656 0.371247\nvt 0.543803 0.315467\nvt 0.503055 0.300393\nvt 0.505544 0.277658\nvt 0.537598 0.338784\nvt 0.572554 0.353819\nvt 0.531957 0.366127\nvt 0.500566 0.323128\nvt 0.500566 0.362007\nvt 0.562268 0.376452\nvt 0.552381 0.401933\nvt 0.527005 0.394979\nvt 0.590418 0.390945\nvt 0.576095 0.411723\nvt 0.544273 0.425932\nvt 0.563893 0.43287\nvt 0.55602 0.454268\nvt 0.569619 0.457671\nvt 0.522866 0.422822\nvt 0.50056 0.393059\nvt 0.500566 0.422223\nvt 0.519976 0.449561\nvt 0.538857 0.450618\nvt 0.500566 0.475257\nvt 0.500566 0.449561\nvt 0.518771 0.475104\nvt 0.518624 0.499797\nvt 0.537255 0.499345\nvt 0.536851 0.475126\nvt 0.55468 0.475802\nvt 0.55642 0.498363\nvt 0.537799 0.52361\nvt 0.557786 0.522844\nvt 0.557787 0.547779\nvt 0.500566 0.524077\nvt 0.500579 0.499748\nvt 0.518909 0.523986\nvt 0.518997 0.54741\nvt 0.537925 0.547336\nvt 0.518263 0.569806\nvt 0.500566 0.547469\nvt 0.500566 0.569754\nvt 0.536404 0.570333\nvt 0.516959 0.591052\nvt 0.533729 0.591919\nvt 0.555431 0.571704\nvt 0.551221 0.594254\nvt 0.530301 0.612338\nvt 0.545661 0.615063\nvt 0.539884 0.633889\nvt 0.500566 0.590766\nvt 0.500566 0.610725\nvt 0.515335 0.611027\nvt 0.513643 0.629611\nvt 0.526847 0.63101\nvt 0.562917 0.713102\nvt 0.544212 0.723732\nvt 0.551318 0.712936\nvt 0.536715 0.719672\nvt 0.523012 0.731252\nvt 0.500566 0.734235\nvt 0.500564 0.727113\nvt 0.519521 0.725323\nvt 0.531139 0.716901\nvt 0.516585 0.720354\nvt 0.500566 0.721581\nvt 0.500566 0.716518\nvt 0.514175 0.715649\nvt 0.542762 0.711444\nvt 0.536812 0.708679\nvt 0.52651 0.712946\nvt 0.500566 0.629281\nvt 0.500566 0.646469\nvt 0.512137 0.646687\nvt 0.52124 0.662398\nvt 0.510918 0.66197\nvt 0.523644 0.647856\nvt 0.535025 0.650489\nvt 0.531045 0.664525\nvt 0.519307 0.675334\nvt 0.527906 0.675658\nvt 0.526511 0.684764\nvt 0.532576 0.683825\nvt 0.500566 0.675136\nvt 0.500574 0.661773\nvt 0.510091 0.675175\nvt 0.50976 0.686526\nvt 0.518592 0.686002\nvt 0.533035 0.70469\nvt 0.523303 0.708325\nvt 0.52077 0.701905\nvt 0.530373 0.699396\nvt 0.512262 0.71051\nvt 0.500566 0.711241\nvt 0.500557 0.704693\nvt 0.510871 0.704267\nvt 0.519194 0.695035\nvt 0.510029 0.696248\nvt 0.500566 0.696578\nvt 0.500566 0.686578\nvt 0.527766 0.692715\nvt 0.422282 0.241554\nvt 0.43572 0.238132\nvt 0.434835 0.22917\nvt 0.433859 0.220114\nvt 0.445988 0.219333\nvt 0.447426 0.227006\nvt 0.432699 0.210868\nvt 0.444999 0.211848\nvt 0.456694 0.212399\nvt 0.457814 0.218537\nvt 0.46717 0.212481\nvt 0.459951 0.224864\nvt 0.449158 0.234709\nvt 0.462596 0.231286\nvt 0.468437 0.217432\nvt 0.470993 0.222552\nvt 0.478375 0.150326\nvt 0.485929 0.149442\nvt 0.481239 0.158589\nvt 0.487601 0.157333\nvt 0.493255 0.149028\nvt 0.500467 0.148939\nvt 0.493976 0.156664\nvt 0.50047 0.156529\nvt 0.489444 0.164794\nvt 0.494896 0.164113\nvt 0.500467 0.163957\nvt 0.495897 0.171224\nvt 0.500467 0.171067\nvt 0.484231 0.16621\nvt 0.48721 0.173199\nvt 0.491447 0.171881\nvt 0.479133 0.219882\nvt 0.476033 0.227863\nvt 0.481617 0.223887\nvt 0.477061 0.215922\nvt 0.483629 0.214067\nvt 0.485416 0.216995\nvt 0.475814 0.212053\nvt 0.482592 0.211213\nvt 0.487468 0.210059\nvt 0.489082 0.212091\nvt 0.489287 0.207748\nvt 0.49083 0.20873\nvt 0.490886 0.214036\nvt 0.487201 0.219912\nvt 0.492785 0.215937\nvt 0.492846 0.210138\nvt 0.494972 0.211316\nvt 0.490035 0.179568\nvt 0.493354 0.178418\nvt 0.495019 0.184155\nvt 0.492521 0.185115\nvt 0.496863 0.177846\nvt 0.500467 0.177705\nvt 0.497738 0.183821\nvt 0.500468 0.183664\nvt 0.496471 0.189298\nvt 0.498468 0.18899\nvt 0.500467 0.188845\nvt 0.498996 0.193324\nvt 0.500467 0.193181\nvt 0.494479 0.189641\nvt 0.495778 0.193297\nvt 0.497417 0.193397\nvt 0.496284 0.196234\nvt 0.497925 0.196735\nvt 0.496243 0.198616\nvt 0.497869 0.199116\nvt 0.49927 0.196792\nvt 0.500467 0.196709\nvt 0.499345 0.199533\nvt 0.500461 0.199494\nvt 0.499281 0.201688\nvt 0.497843 0.201377\nvt 0.49907 0.203548\nvt 0.500467 0.203698\nvt 0.500467 0.201729\nvt 0.495897 0.200605\nvt 0.49544 0.2024\nvt 0.497469 0.203135\nvt 0.495064 0.204196\nvt 0.497175 0.204922\nvt 0.496305 0.206601\nvt 0.494396 0.205888\nvt 0.498704 0.205404\nvt 0.498083 0.207267\nvt 0.499418 0.20783\nvt 0.499942 0.205764\nvt 0.497105 0.209149\nvt 0.4952 0.208331\nvt 0.498369 0.211961\nvt 0.498893 0.209895\nvt 0.493062 0.20737\nvt 0.825563 0.728991\nvt 0.825456 0.736302\nvt 0.821293 0.729019\nvt 0.829801 0.721753\nvt 0.829803 0.728918\nvt 0.825751 0.721872\nvt 0.825959 0.714811\nvt 0.822072 0.714943\nvt 0.821682 0.721981\nvt 0.829894 0.707652\nvt 0.829838 0.71467\nvt 0.826178 0.707778\nvt 0.833701 0.714514\nvt 0.833816 0.721569\nvt 0.837327 0.707399\nvt 0.83361 0.707526\nvt 0.83398 0.728757\nvt 0.834206 0.736128\nvt 0.829869 0.736283\nvt 0.812046 0.260607\nvt 0.803596 0.256722\nvt 0.820351 0.264787\nvt 0.818174 0.26923\nvt 0.810057 0.264981\nvt 0.828559 0.269172\nvt 0.836716 0.27366\nvt 0.834228 0.278144\nvt 0.826227 0.273629\nvt 0.823902 0.278073\nvt 0.81604 0.273573\nvt 0.829251 0.287112\nvt 0.821579 0.282509\nvt 0.831739 0.282628\nvt 0.808131 0.269185\nvt 0.800059 0.265244\nvt 0.801776 0.26112\nvt 0.813906 0.277906\nvt 0.806234 0.273303\nvt 0.854245 0.964421\nvt 0.855265 0.967715\nvt 0.851872 0.96552\nvt 0.853221 0.968484\nvt 0.853228 0.961187\nvt 0.856617 0.963353\nvt 0.855912 0.95991\nvt 0.852214 0.958074\nvt 0.849174 0.959592\nvt 0.850523 0.962556\nvt 0.851304 0.955381\nvt 0.855223 0.956563\nvt 0.854535 0.953669\nvt 0.858595 0.95861\nvt 0.858168 0.955063\nvt 0.857699 0.951839\nvt 0.857309 0.966946\nvt 0.859354 0.966176\nvt 0.858984 0.962346\nvt 0.513647 0.0893533\nvt 0.515657 0.0822765\nvt 0.512161 0.0828486\nvt 0.515171 0.095962\nvt 0.51053 0.0969094\nvt 0.509589 0.0901409\nvt 0.516768 0.102779\nvt 0.518464 0.109843\nvt 0.512612 0.110897\nvt 0.511537 0.10383\nvt 0.506184 0.104631\nvt 0.505824 0.0977036\nvt 0.506619 0.111654\nvt 0.500769 0.105308\nvt 0.505491 0.0908337\nvt 0.505171 0.0839927\nvt 0.508666 0.0834206\nvt 0.501071 0.0983934\nvt 0.501373 0.0914791\nvt 0.850598 0.953406\nvt 0.847258 0.955575\nvt 0.847826 0.956628\nvt 0.853178 0.949206\nvt 0.853914 0.951237\nvt 0.849945 0.951857\nvt 0.849198 0.950442\nvt 0.846124 0.953471\nvt 0.846691 0.954523\nvt 0.85109 0.945581\nvt 0.852334 0.947338\nvt 0.848187 0.949023\nvt 0.855593 0.944085\nvt 0.856515 0.946554\nvt 0.85416 0.94191\nvt 0.857182 0.949071\nvt 0.520283 0.117194\nvt 0.522093 0.124946\nvt 0.51489 0.125746\nvt 0.513816 0.118208\nvt 0.523762 0.133215\nvt 0.52426 0.141756\nvt 0.515912 0.141487\nvt 0.515776 0.133529\nvt 0.508055 0.133663\nvt 0.507714 0.126132\nvt 0.508084 0.141322\nvt 0.507183 0.118808\nvt 0.826641 0.887459\nvt 0.826402 0.891044\nvt 0.832811 0.883364\nvt 0.832492 0.887663\nvt 0.826823 0.883233\nvt 0.826925 0.878731\nvt 0.826952 0.874073\nvt 0.832981 0.878831\nvt 0.833014 0.874129\nvt 0.838897 0.883597\nvt 0.839104 0.878909\nvt 0.839145 0.874181\nvt 0.838571 0.888209\nvt 0.837813 0.892296\nvt 0.832004 0.891376\nvt 0.579938 0.21061\nvt 0.589844 0.212225\nvt 0.598365 0.214734\nvt 0.595703 0.225162\nvt 0.587701 0.22298\nvt 0.605914 0.217155\nvt 0.613042 0.219411\nvt 0.610272 0.22961\nvt 0.603127 0.227438\nvt 0.600492 0.237844\nvt 0.593542 0.235615\nvt 0.607474 0.239965\nvt 0.604358 0.250562\nvt 0.597932 0.24831\nvt 0.586224 0.233462\nvt 0.578263 0.221169\nvt 0.577441 0.231331\nvt 0.591505 0.246058\nvt 0.585078 0.243806\nvt 0.826904 0.869378\nvt 0.832921 0.869416\nvt 0.832732 0.864744\nvt 0.826812 0.8647\nvt 0.826706 0.860094\nvt 0.832514 0.860113\nvt 0.832339 0.855635\nvt 0.826613 0.855605\nvt 0.838336 0.860136\nvt 0.838673 0.864752\nvt 0.838049 0.85564\nvt 0.838972 0.869448\nvt 0.620297 0.221426\nvt 0.617567 0.231546\nvt 0.625041 0.233284\nvt 0.627602 0.223241\nvt 0.63488 0.2249\nvt 0.632457 0.234867\nvt 0.639884 0.236319\nvt 0.6421 0.226436\nvt 0.622532 0.243442\nvt 0.63019 0.245001\nvt 0.628001 0.255218\nvt 0.635882 0.25677\nvt 0.637807 0.246384\nvt 0.61489 0.241797\nvt 0.612239 0.252114\nvt 0.62012 0.253666\nvt 0.826565 0.851279\nvt 0.832229 0.851292\nvt 0.832203 0.847045\nvt 0.826547 0.847036\nvt 0.826547 0.842795\nvt 0.826552 0.838478\nvt 0.832191 0.842804\nvt 0.832195 0.838458\nvt 0.837844 0.847053\nvt 0.837838 0.8428\nvt 0.837841 0.838462\nvt 0.837899 0.851306\nvt 0.649233 0.227887\nvt 0.647206 0.237604\nvt 0.654547 0.238799\nvt 0.656346 0.229253\nvt 0.663509 0.230539\nvt 0.670741 0.231721\nvt 0.661834 0.239855\nvt 0.669245 0.240804\nvt 0.6528 0.248453\nvt 0.660282 0.249344\nvt 0.658792 0.258919\nvt 0.666429 0.259635\nvt 0.667833 0.250071\nvt 0.645326 0.247501\nvt 0.643519 0.257486\nvt 0.651156 0.258203\nvt 0.826549 0.834005\nvt 0.826538 0.829328\nvt 0.832189 0.833991\nvt 0.832153 0.829238\nvt 0.826518 0.824396\nvt 0.826487 0.81922\nvt 0.832119 0.824387\nvt 0.832051 0.819187\nvt 0.837766 0.829243\nvt 0.837695 0.82431\nvt 0.837597 0.81913\nvt 0.837816 0.833952\nvt 0.678063 0.232773\nvt 0.685521 0.233736\nvt 0.676721 0.241578\nvt 0.684394 0.242252\nvt 0.693162 0.23465\nvt 0.70095 0.235515\nvt 0.692068 0.242832\nvt 0.699951 0.243364\nvt 0.683286 0.250841\nvt 0.691121 0.251104\nvt 0.699056 0.251297\nvt 0.690249 0.259422\nvt 0.698188 0.25935\nvt 0.675512 0.250533\nvt 0.674369 0.259564\nvt 0.682309 0.259493\nvt 0.826447 0.813814\nvt 0.826395 0.808104\nvt 0.831974 0.813786\nvt 0.831854 0.807954\nvt 0.826332 0.802018\nvt 0.826257 0.795608\nvt 0.83174 0.801987\nvt 0.831581 0.795558\nvt 0.837307 0.807927\nvt 0.837108 0.801851\nvt 0.836875 0.795451\nvt 0.837469 0.813678\nvt 0.708851 0.23633\nvt 0.716916 0.237158\nvt 0.707919 0.243831\nvt 0.716106 0.244313\nvt 0.725196 0.23806\nvt 0.733634 0.239063\nvt 0.724305 0.244817\nvt 0.732712 0.245454\nvt 0.715309 0.251457\nvt 0.723552 0.251546\nvt 0.731891 0.251775\nvt 0.722869 0.258262\nvt 0.731095 0.257899\nvt 0.707131 0.251394\nvt 0.706415 0.258987\nvt 0.714642 0.258624\nvt 0.826171 0.788927\nvt 0.831415 0.788884\nvt 0.831201 0.781784\nvt 0.826073 0.781946\nvt 0.825965 0.77464\nvt 0.831 0.774579\nvt 0.830755 0.767044\nvt 0.825846 0.767108\nvt 0.836316 0.78171\nvt 0.835983 0.774413\nvt 0.835622 0.766896\nvt 0.836612 0.78873\nvt 0.74217 0.240192\nvt 0.750827 0.241532\nvt 0.741203 0.246249\nvt 0.749854 0.247294\nvt 0.759627 0.243163\nvt 0.768498 0.245118\nvt 0.758501 0.248531\nvt 0.767239 0.250178\nvt 0.748901 0.252937\nvt 0.757482 0.253761\nvt 0.756518 0.258923\nvt 0.764993 0.259264\nvt 0.766075 0.255016\nvt 0.740356 0.252257\nvt 0.73957 0.25824\nvt 0.748044 0.258581\nvt 0.825719 0.759454\nvt 0.830507 0.759388\nvt 0.830248 0.751614\nvt 0.825595 0.751717\nvt 0.825486 0.743938\nvt 0.830034 0.74389\nvt 0.834865 0.751465\nvt 0.834511 0.743733\nvt 0.835243 0.759216\nvt 0.777363 0.247427\nvt 0.786194 0.250119\nvt 0.775966 0.252281\nvt 0.784669 0.254866\nvt 0.794959 0.253221\nvt 0.793295 0.257742\nvt 0.783205 0.259428\nvt 0.791712 0.262086\nvt 0.79017 0.266341\nvt 0.798562 0.2687\nvt 0.774654 0.256988\nvt 0.773385 0.261623\nvt 0.781778 0.263982\nvt 0.846742 0.94746\nvt 0.844044 0.95069\nvt 0.845557 0.952418\nvt 0.849395 0.94405\nvt 0.847357 0.942508\nvt 0.84503 0.945833\nvt 0.842532 0.948962\nvt 0.841019 0.947233\nvt 0.84322 0.94422\nvt 0.84136 0.942613\nvt 0.845321 0.941126\nvt 0.843214 0.93972\nvt 0.849483 0.938995\nvt 0.847222 0.937871\nvt 0.846921 0.933934\nvt 0.845067 0.936827\nvt 0.85196 0.940277\nvt 0.83631 0.89541\nvt 0.834579 0.89775\nvt 0.831186 0.894241\nvt 0.830279 0.896489\nvt 0.833136 0.899518\nvt 0.831837 0.901\nvt 0.829358 0.898371\nvt 0.828463 0.900068\nvt 0.825818 0.895611\nvt 0.825464 0.897418\nvt 0.825089 0.899135\nvt 0.821512 0.896564\nvt 0.821714 0.898203\nvt 0.826129 0.893624\nvt 0.821106 0.893284\nvt 0.821309 0.894924\nvt 0.31785 0.743218\nvt 0.361769 0.749517\nvt 0.377299 0.73714\nvt 0.39298 0.726337\nvt 0.427774 0.739298\nvt 0.416806 0.7475\nvt 0.408963 0.718684\nvt 0.424342 0.714249\nvt 0.438427 0.733153\nvt 0.448284 0.727358\nvt 0.468471 0.74349\nvt 0.462439 0.749461\nvt 0.473823 0.737516\nvt 0.498806 0.751759\nvt 0.405687 0.755816\nvt 0.449606 0.762116\nvt 0.456099 0.755717\nvt 0.497045 0.757311\nvt 0.495285 0.762863\nvt 0.444414 0.27388\nvt 0.437986 0.253597\nvt 0.493099 0.254922\nvt 0.490611 0.232187\nvt 0.407447 0.313833\nvt 0.396276 0.293983\nvt 0.450857 0.294418\nvt 0.457329 0.315467\nvt 0.498077 0.300393\nvt 0.495588 0.277658\nvt 0.463533 0.338784\nvt 0.417755 0.332472\nvt 0.428577 0.353825\nvt 0.38053 0.353341\nvt 0.365305 0.335595\nvt 0.395476 0.371247\nvt 0.349233 0.316376\nvt 0.332736 0.296419\nvt 0.385361 0.275008\nvt 0.469174 0.366127\nvt 0.438864 0.376452\nvt 0.44875 0.401933\nvt 0.474127 0.394979\nvt 0.478266 0.422822\nvt 0.481156 0.449561\nvt 0.462274 0.450618\nvt 0.456859 0.425932\nvt 0.425037 0.411723\nvt 0.437239 0.43287\nvt 0.445112 0.454268\nvt 0.431513 0.457671\nvt 0.410714 0.390945\nvt 0.482361 0.475104\nvt 0.482508 0.499798\nvt 0.463874 0.499351\nvt 0.464281 0.475126\nvt 0.482223 0.523986\nvt 0.482135 0.54741\nvt 0.463207 0.547322\nvt 0.463333 0.52361\nvt 0.443346 0.522844\nvt 0.444712 0.498363\nvt 0.443345 0.547779\nvt 0.446452 0.475802\nvt 0.482868 0.569806\nvt 0.484173 0.591053\nvt 0.464728 0.570333\nvt 0.467403 0.591918\nvt 0.485797 0.611027\nvt 0.487488 0.629611\nvt 0.470831 0.612338\nvt 0.474285 0.630984\nvt 0.449911 0.594254\nvt 0.455471 0.615063\nvt 0.461248 0.633889\nvt 0.445701 0.571704\nvt 0.438215 0.713102\nvt 0.449813 0.712936\nvt 0.45692 0.723732\nvt 0.464417 0.719666\nvt 0.45837 0.711444\nvt 0.46432 0.708679\nvt 0.469993 0.716901\nvt 0.474622 0.712917\nvt 0.481611 0.725323\nvt 0.484547 0.720354\nvt 0.486957 0.715649\nvt 0.47812 0.731252\nvt 0.488995 0.646687\nvt 0.479893 0.662392\nvt 0.477488 0.647856\nvt 0.490214 0.66197\nvt 0.491041 0.675175\nvt 0.491372 0.686526\nvt 0.48254 0.685955\nvt 0.481825 0.675334\nvt 0.470087 0.664524\nvt 0.473226 0.675658\nvt 0.474621 0.684764\nvt 0.468556 0.683825\nvt 0.466107 0.650489\nvt 0.468096 0.70469\nvt 0.480357 0.7019\nvt 0.477828 0.708325\nvt 0.470759 0.699396\nvt 0.473366 0.692715\nvt 0.481938 0.695035\nvt 0.490261 0.704267\nvt 0.491103 0.696248\nvt 0.48887 0.71051\nvt 0.578652 0.241554\nvt 0.565214 0.238132\nvt 0.566098 0.22917\nvt 0.567074 0.220114\nvt 0.554945 0.219333\nvt 0.553508 0.227006\nvt 0.551776 0.234709\nvt 0.540983 0.224864\nvt 0.538338 0.231286\nvt 0.543119 0.218537\nvt 0.532496 0.217432\nvt 0.529941 0.222552\nvt 0.555935 0.211848\nvt 0.54424 0.212399\nvt 0.533764 0.212481\nvt 0.568235 0.210868\nvt 0.522559 0.150326\nvt 0.519694 0.158589\nvt 0.515005 0.149442\nvt 0.513333 0.157332\nvt 0.516702 0.16621\nvt 0.513724 0.173199\nvt 0.51149 0.164794\nvt 0.509486 0.171875\nvt 0.506958 0.156664\nvt 0.506038 0.164113\nvt 0.505037 0.171224\nvt 0.507679 0.149028\nvt 0.5249 0.227863\nvt 0.5218 0.219882\nvt 0.519316 0.223887\nvt 0.523872 0.215922\nvt 0.517303 0.214067\nvt 0.515517 0.216995\nvt 0.513732 0.219912\nvt 0.510048 0.214036\nvt 0.508148 0.215937\nvt 0.511852 0.212091\nvt 0.508087 0.210138\nvt 0.505961 0.211316\nvt 0.518342 0.211213\nvt 0.513465 0.210059\nvt 0.511647 0.207748\nvt 0.510104 0.20873\nvt 0.52512 0.212053\nvt 0.510898 0.179568\nvt 0.50758 0.178418\nvt 0.505915 0.184153\nvt 0.508413 0.185115\nvt 0.506454 0.189641\nvt 0.505156 0.193297\nvt 0.504463 0.189298\nvt 0.503516 0.193391\nvt 0.503196 0.183821\nvt 0.502466 0.18899\nvt 0.501937 0.193324\nvt 0.504071 0.177846\nvt 0.50465 0.196234\nvt 0.504691 0.198616\nvt 0.503009 0.196735\nvt 0.503063 0.199116\nvt 0.505036 0.200605\nvt 0.505493 0.2024\nvt 0.503091 0.201377\nvt 0.503464 0.203135\nvt 0.501652 0.201688\nvt 0.501588 0.199533\nvt 0.501863 0.203548\nvt 0.501664 0.196792\nvt 0.505869 0.204196\nvt 0.506537 0.205888\nvt 0.504629 0.206601\nvt 0.503758 0.204922\nvt 0.507872 0.20737\nvt 0.505734 0.208331\nvt 0.503829 0.209149\nvt 0.502851 0.207267\nvt 0.502565 0.211961\nvt 0.50204 0.209895\nvt 0.502229 0.205404\nvt 0.501516 0.20783\nvt 0.500991 0.205764\nvt 0.109272 0.171018\nvt 0.726024 0.987104\nvt 0.891662 0.171018\nvt 0.915783 0.987104\nvt 0.819346 0.707905\nvt 0.499258 0.0845647\nvt 0.8023 0.945505\nvt 0.507607 0.768415\nvt 0.822461 0.707905\nvt 0.501675 0.0845647\nvt 0.839507 0.945505\nvt 0.493525 0.768415\nmtllib bob_tri.mtl\nusemtl feathers\ng Default\nf 1341/1/1 1340/2/2 1337/3/3\nf 1/4/4 1337/3/3 1340/2/2\nf 339/5/5 1339/6/6 1338/7/7\nf 1341/1/1 1338/7/7 1339/6/6\nf 1345/8/8 1338/7/7 1342/9/9\nf 335/10/10 1342/9/9 1338/7/7\nf 336/11/11 1344/12/12 1343/13/13\nf 1345/8/8 1343/13/13 1344/12/12\nf 1349/14/14 1348/15/15 1344/12/12\nf 339/5/5 1344/12/12 1348/15/15\nf 13/16/16 1347/17/17 1346/18/18\nf 1349/14/14 1346/18/18 1347/17/17\nf 1352/19/19 1351/20/20 1339/6/6\nf 338/21/21 1339/6/6 1351/20/20\nf 337/22/22 1350/23/23 1348/15/15\nf 1352/19/19 1348/15/15 1350/23/23\nf 1356/24/24 1343/13/13 1353/25/25\nf 2/26/26 1353/25/25 1343/13/13\nf 343/27/27 1355/28/28 1354/29/29\nf 1356/24/24 1354/29/29 1355/28/28\nf 1360/30/30 1354/29/29 1357/31/31\nf 340/32/32 1357/31/31 1354/29/29\nf 341/33/33 1359/34/34 1358/35/35\nf 1360/30/30 1358/35/35 1359/34/34\nf 1364/36/36 1363/37/37 1359/34/34\nf 343/27/27 1359/34/34 1363/37/37\nf 14/38/38 1362/39/39 1361/40/40\nf 1364/36/36 1361/40/40 1362/39/39\nf 1366/41/41 1346/18/18 1355/28/28\nf 336/11/11 1355/28/28 1346/18/18\nf 342/42/42 1365/43/43 1363/37/37\nf 1366/41/41 1363/37/37 1365/43/43\nf 1370/44/44 1358/35/35 1367/45/45\nf 3/46/46 1367/45/45 1358/35/35\nf 347/47/47 1369/48/48 1368/49/49\nf 1370/44/44 1368/49/49 1369/48/48\nf 1374/50/50 1368/49/49 1371/51/51\nf 344/52/52 1371/51/51 1368/49/49\nf 345/53/53 1373/54/54 1372/55/55\nf 1374/50/50 1372/55/55 1373/54/54\nf 1378/56/56 1377/57/57 1373/54/54\nf 347/47/47 1373/54/54 1377/57/57\nf 15/58/58 1376/59/59 1375/60/60\nf 1378/56/56 1375/60/60 1376/59/59\nf 1380/61/61 1361/40/40 1369/48/48\nf 341/33/33 1369/48/48 1361/40/40\nf 346/62/62 1379/63/63 1377/57/57\nf 1380/61/61 1377/57/57 1379/63/63\nf 1384/64/64 1372/55/55 1381/65/65\nf 4/66/66 1381/65/65 1372/55/55\nf 351/67/67 1383/68/68 1382/69/69\nf 1384/64/64 1382/69/69 1383/68/68\nf 1382/69/69 348/70/70 1388/71/71\nf 1385/72/72 1388/71/71 348/70/70\nf 1387/73/73 1388/71/71 349/74/74\nf 1386/75/75 349/74/74 1388/71/71\nf 1392/76/76 1391/77/77 1387/73/73\nf 351/67/67 1387/73/73 1391/77/77\nf 16/78/78 1390/79/79 1389/80/80\nf 1392/76/76 1389/80/80 1390/79/79\nf 1394/81/81 1375/60/60 1383/68/68\nf 345/53/53 1383/68/68 1375/60/60\nf 350/82/82 1393/83/83 1391/77/77\nf 1394/81/81 1391/77/77 1393/83/83\nf 1386/75/75 5/84/84 1398/85/85\nf 1395/86/86 1398/85/85 5/84/84\nf 1397/87/87 1398/85/85 355/88/88\nf 1396/89/89 355/88/88 1398/85/85\nf 1396/89/89 352/90/90 1402/91/91\nf 1399/92/92 1402/91/91 352/90/90\nf 1401/93/93 1402/91/91 353/94/94\nf 1400/95/95 353/94/94 1402/91/91\nf 1405/96/96 355/88/88 1406/97/97\nf 1401/93/93 1406/97/97 355/88/88\nf 1404/98/98 1406/97/97 17/99/99\nf 1403/100/100 17/99/99 1406/97/97\nf 1389/80/80 349/74/74 1408/101/101\nf 1397/87/87 1408/101/101 349/74/74\nf 1407/102/102 1408/101/101 354/103/103\nf 1405/96/96 354/103/103 1408/101/101\nf 1400/104/95 6/105/104 1412/106/105\nf 1409/107/106 1412/106/105 6/105/104\nf 1411/108/107 1412/106/105 359/109/108\nf 1410/110/109 359/109/108 1412/106/105\nf 1416/111/110 1410/110/109 1413/112/111\nf 356/113/112 1413/112/111 1410/110/109\nf 357/114/113 1415/115/114 1414/116/115\nf 1416/111/110 1414/116/115 1415/115/114\nf 1420/117/116 1419/118/117 1415/115/114\nf 359/109/108 1415/115/114 1419/118/117\nf 18/119/118 1418/120/119 1417/121/120\nf 1420/117/116 1417/121/120 1418/120/119\nf 1403/122/100 353/123/94 1422/124/121\nf 1411/108/107 1422/124/121 353/123/94\nf 1421/125/122 1422/124/121 358/126/123\nf 1419/118/117 358/126/123 1422/124/121\nf 1414/116/115 7/127/124 1426/128/125\nf 1423/129/126 1426/128/125 7/127/124\nf 1425/130/127 1426/128/125 363/131/128\nf 1424/132/129 363/131/128 1426/128/125\nf 1430/133/130 1424/132/129 1427/134/131\nf 360/135/132 1427/134/131 1424/132/129\nf 361/136/133 1429/137/134 1428/138/135\nf 1430/133/130 1428/138/135 1429/137/134\nf 1434/139/136 1433/140/137 1429/137/134\nf 363/131/128 1429/137/134 1433/140/137\nf 19/141/138 1432/142/139 1431/143/140\nf 1434/139/136 1431/143/140 1432/142/139\nf 1417/121/120 357/114/113 1436/144/141\nf 1425/130/127 1436/144/141 357/114/113\nf 1435/145/142 1436/144/141 362/146/143\nf 1433/140/137 362/146/143 1436/144/141\nf 1428/138/135 8/147/144 1440/148/145\nf 1437/149/146 1440/148/145 8/147/144\nf 1439/150/147 1440/148/145 367/151/148\nf 1438/152/149 367/151/148 1440/148/145\nf 1444/153/150 1438/152/149 1441/154/151\nf 364/155/152 1441/154/151 1438/152/149\nf 365/156/153 1443/157/154 1442/158/155\nf 1444/153/150 1442/158/155 1443/157/154\nf 1448/159/156 1447/160/157 1443/157/154\nf 367/151/148 1443/157/154 1447/160/157\nf 20/161/158 1446/162/159 1445/163/160\nf 1448/159/156 1445/163/160 1446/162/159\nf 1431/143/140 361/136/133 1450/164/161\nf 1439/150/147 1450/164/161 361/136/133\nf 1449/165/162 1450/164/161 366/166/163\nf 1447/160/157 366/166/163 1450/164/161\nf 1442/158/155 9/167/164 1454/168/165\nf 1451/169/166 1454/168/165 9/167/164\nf 1453/170/167 1454/168/165 371/171/168\nf 1452/172/169 371/171/168 1454/168/165\nf 1458/173/170 1452/172/169 1455/174/171\nf 368/175/172 1455/174/171 1452/172/169\nf 369/176/173 1457/177/174 1456/178/175\nf 1458/173/170 1456/178/175 1457/177/174\nf 1462/179/176 1461/180/177 1457/177/174\nf 371/171/168 1457/177/174 1461/180/177\nf 21/181/178 1460/182/179 1459/183/180\nf 1462/179/176 1459/183/180 1460/182/179\nf 1445/163/160 365/156/153 1464/184/181\nf 1453/170/167 1464/184/181 365/156/153\nf 1463/185/182 1464/184/181 370/186/183\nf 1461/180/177 370/186/183 1464/184/181\nf 1456/178/175 10/187/184 1468/188/185\nf 1465/189/186 1468/188/185 10/187/184\nf 1467/190/187 1468/188/185 375/191/188\nf 1466/192/189 375/191/188 1468/188/185\nf 1472/193/190 1466/192/189 1469/194/191\nf 372/195/192 1469/194/191 1466/192/189\nf 373/196/193 1471/197/194 1470/198/195\nf 1472/193/190 1470/198/195 1471/197/194\nf 1476/199/196 1475/200/197 1471/197/194\nf 375/191/188 1471/197/194 1475/200/197\nf 22/201/198 1474/202/199 1473/203/200\nf 1476/199/196 1473/203/200 1474/202/199\nf 1459/183/180 369/176/173 1478/204/201\nf 1467/190/187 1478/204/201 369/176/173\nf 1477/205/202 1478/204/201 374/206/203\nf 1475/200/197 374/206/203 1478/204/201\nf 12/207/204 1350/208/23 1481/209/205\nf 1482/210/206 1481/209/205 1350/208/23\nf 1482/210/206 1479/211/207 1480/212/208\nf 379/213/209 1480/212/208 1479/211/207\nf 1485/214/210 1479/211/207 1347/215/17\nf 337/216/22 1347/215/17 1479/211/207\nf 1485/214/210 1483/217/211 1484/218/212\nf 376/219/213 1484/218/212 1483/217/211\nf 379/213/209 1484/218/212 1488/220/214\nf 1489/221/215 1488/220/214 1484/218/212\nf 1489/221/215 1486/222/216 1487/223/217\nf 24/224/218 1487/223/217 1486/222/216\nf 378/225/219 1480/212/208 1491/226/220\nf 1492/227/221 1491/226/220 1480/212/208\nf 1492/227/221 1488/220/214 1490/228/222\nf 377/229/223 1490/228/222 1488/220/214\nf 1495/230/224 1483/217/211 1365/231/43\nf 13/232/16 1365/231/43 1483/217/211\nf 382/233/225 1494/234/226 1493/235/227\nf 1495/230/224 1493/235/227 1494/234/226\nf 1498/236/228 1493/235/227 1362/237/39\nf 342/238/42 1362/237/39 1493/235/227\nf 380/239/229 1497/240/230 1496/241/231\nf 1498/236/228 1496/241/231 1497/240/230\nf 1502/242/232 1501/243/233 1497/240/230\nf 382/233/225 1497/240/230 1501/243/233\nf 25/244/234 1500/245/235 1499/246/236\nf 1502/242/232 1499/246/236 1500/245/235\nf 1504/247/237 1486/222/216 1494/234/226\nf 376/219/213 1494/234/226 1486/222/216\nf 381/248/238 1503/249/239 1501/243/233\nf 1504/247/237 1501/243/233 1503/249/239\nf 1507/250/240 1496/241/231 1379/251/63\nf 14/252/38 1379/251/63 1496/241/231\nf 385/253/241 1506/254/242 1505/255/243\nf 1507/250/240 1505/255/243 1506/254/242\nf 1510/256/244 1505/255/243 1376/257/59\nf 346/258/62 1376/257/59 1505/255/243\nf 383/259/245 1509/260/246 1508/261/247\nf 1510/256/244 1508/261/247 1509/260/246\nf 1514/262/248 1513/263/249 1509/260/246\nf 385/253/241 1509/260/246 1513/263/249\nf 1512/264/250 1514/262/248 26/265/251\nf 1511/266/252 26/265/251 1514/262/248\nf 1516/267/253 1499/246/236 1506/254/242\nf 380/239/229 1506/254/242 1499/246/236\nf 384/268/254 1515/269/255 1513/263/249\nf 1516/267/253 1513/263/249 1515/269/255\nf 1519/270/256 1508/261/247 1393/271/83\nf 15/272/58 1393/271/83 1508/261/247\nf 388/273/257 1518/274/258 1517/275/259\nf 1519/270/256 1517/275/259 1518/274/258\nf 1522/276/260 1517/275/259 1390/277/79\nf 350/278/82 1390/277/79 1517/275/259\nf 386/279/261 1521/280/262 1520/281/263\nf 1522/276/260 1520/281/263 1521/280/262\nf 1526/282/264 1525/283/265 1521/280/262\nf 388/273/257 1521/280/262 1525/283/265\nf 27/284/266 1524/285/267 1523/286/268\nf 1526/282/264 1523/286/268 1524/285/267\nf 1528/287/269 1511/266/252 1518/274/258\nf 383/259/245 1518/274/258 1511/266/252\nf 1527/288/270 1528/287/269 387/289/271\nf 1525/283/265 387/289/271 1528/287/269\nf 1531/290/272 1520/281/263 1407/291/102\nf 16/292/78 1407/291/102 1520/281/263\nf 391/293/273 1530/294/274 1529/295/275\nf 1531/290/272 1529/295/275 1530/294/274\nf 1529/295/275 354/296/103 1534/297/276\nf 1404/298/98 1534/297/276 354/296/103\nf 389/299/277 1533/300/278 1532/301/279\nf 1534/297/276 1532/301/279 1533/300/278\nf 1538/302/280 1537/303/281 1533/300/278\nf 391/293/273 1533/300/278 1537/303/281\nf 28/304/282 1536/305/283 1535/306/284\nf 1538/302/280 1535/306/284 1536/305/283\nf 1540/307/285 1523/286/268 1530/294/274\nf 386/279/261 1530/294/274 1523/286/268\nf 390/308/286 1539/309/287 1537/303/281\nf 1540/307/285 1537/303/281 1539/309/287\nf 1532/310/279 17/311/99 1543/312/288\nf 1421/313/122 1543/312/288 17/311/99\nf 1542/314/289 1543/312/288 394/315/290\nf 1541/316/291 394/315/290 1543/312/288\nf 1546/317/292 1541/316/291 1418/318/119\nf 358/319/123 1418/318/119 1541/316/291\nf 392/320/293 1545/321/294 1544/322/295\nf 1546/317/292 1544/322/295 1545/321/294\nf 1550/323/296 1549/324/297 1545/321/294\nf 394/315/290 1545/321/294 1549/324/297\nf 29/325/298 1548/326/299 1547/327/300\nf 1550/323/296 1547/327/300 1548/326/299\nf 1535/328/284 389/329/277 1552/330/301\nf 1542/314/289 1552/330/301 389/329/277\nf 1551/331/302 1552/330/301 393/332/303\nf 1549/324/297 393/332/303 1552/330/301\nf 1544/322/295 18/333/118 1555/334/304\nf 1435/335/142 1555/334/304 18/333/118\nf 1554/336/305 1555/334/304 397/337/306\nf 1553/338/307 397/337/306 1555/334/304\nf 1558/339/308 1553/338/307 1432/340/139\nf 362/341/143 1432/340/139 1553/338/307\nf 395/342/309 1557/343/310 1556/344/311\nf 1558/339/308 1556/344/311 1557/343/310\nf 1562/345/312 1561/346/313 1557/343/310\nf 397/337/306 1557/343/310 1561/346/313\nf 30/347/314 1560/348/315 1559/349/316\nf 1562/345/312 1559/349/316 1560/348/315\nf 1547/327/300 392/320/293 1564/350/317\nf 1554/336/305 1564/350/317 392/320/293\nf 1563/351/318 1564/350/317 396/352/319\nf 1561/346/313 396/352/319 1564/350/317\nf 1556/344/311 19/353/138 1567/354/320\nf 1449/355/162 1567/354/320 19/353/138\nf 1566/356/321 1567/354/320 400/357/322\nf 1565/358/323 400/357/322 1567/354/320\nf 1570/359/324 1565/358/323 1446/360/159\nf 366/361/163 1446/360/159 1565/358/323\nf 398/362/325 1569/363/326 1568/364/327\nf 1570/359/324 1568/364/327 1569/363/326\nf 1574/365/328 1573/366/329 1569/363/326\nf 400/357/322 1569/363/326 1573/366/329\nf 31/367/330 1572/368/331 1571/369/332\nf 1574/365/328 1571/369/332 1572/368/331\nf 1559/349/316 395/342/309 1576/370/333\nf 1566/356/321 1576/370/333 395/342/309\nf 1575/371/334 1576/370/333 399/372/335\nf 1573/366/329 399/372/335 1576/370/333\nf 1568/364/327 20/373/158 1579/374/336\nf 1463/375/182 1579/374/336 20/373/158\nf 403/376/337 1578/377/338 1577/378/339\nf 1579/374/336 1577/378/339 1578/377/338\nf 1582/379/340 1577/378/339 1460/380/179\nf 370/381/183 1460/380/179 1577/378/339\nf 401/382/341 1581/383/342 1580/384/343\nf 1582/379/340 1580/384/343 1581/383/342\nf 1586/385/344 1585/386/345 1581/383/342\nf 403/376/337 1581/383/342 1585/386/345\nf 32/387/346 1584/388/347 1583/389/348\nf 1586/385/344 1583/389/348 1584/388/347\nf 1571/369/332 398/362/325 1588/390/349\nf 1578/377/338 1588/390/349 398/362/325\nf 402/391/350 1587/392/351 1585/386/345\nf 1588/390/349 1585/386/345 1587/392/351\nf 1580/384/343 21/393/178 1591/394/352\nf 1477/395/202 1591/394/352 21/393/178\nf 406/396/353 1590/397/354 1589/398/355\nf 1591/394/352 1589/398/355 1590/397/354\nf 1594/399/356 1589/398/355 1474/400/199\nf 374/401/203 1474/400/199 1589/398/355\nf 404/402/357 1593/403/358 1592/404/359\nf 1594/399/356 1592/404/359 1593/403/358\nf 1598/405/360 1597/406/361 1593/403/358\nf 406/396/353 1593/403/358 1597/406/361\nf 33/407/362 1596/408/363 1595/409/364\nf 1598/405/360 1595/409/364 1596/408/363\nf 1600/410/365 1583/389/348 1590/397/354\nf 401/382/341 1590/397/354 1583/389/348\nf 405/411/366 1599/412/367 1597/406/361\nf 1600/410/365 1597/406/361 1599/412/367\nf 23/413/368 1490/228/222 1603/414/369\nf 1604/415/370 1603/414/369 1490/228/222\nf 1604/415/370 1601/416/371 1602/417/372\nf 410/418/373 1602/417/372 1601/416/371\nf 377/229/223 1487/223/217 1601/416/371\nf 1607/419/374 1601/416/371 1487/223/217\nf 1607/419/374 1605/420/375 1606/421/376\nf 407/422/377 1606/421/376 1605/420/375\nf 410/418/373 1606/421/376 1610/423/378\nf 1611/424/379 1610/423/378 1606/421/376\nf 1611/424/379 1608/425/380 1609/426/381\nf 35/427/382 1609/426/381 1608/425/380\nf 409/428/383 1602/417/372 1613/429/384\nf 1614/430/385 1613/429/384 1602/417/372\nf 1614/430/385 1610/423/378 1612/431/386\nf 408/432/387 1612/431/386 1610/423/378\nf 24/224/218 1503/249/239 1605/420/375\nf 1617/433/388 1605/420/375 1503/249/239\nf 1617/433/388 1615/434/389 1616/435/390\nf 413/436/391 1616/435/390 1615/434/389\nf 1620/437/392 1615/434/389 1500/245/235\nf 381/248/238 1500/245/235 1615/434/389\nf 411/438/393 1619/439/394 1618/440/395\nf 1620/437/392 1618/440/395 1619/439/394\nf 1624/441/396 1623/442/397 1619/439/394\nf 413/436/391 1619/439/394 1623/442/397\nf 1622/443/398 1624/441/396 36/444/399\nf 1621/445/400 36/444/399 1624/441/396\nf 407/422/377 1616/435/390 1608/425/380\nf 1626/446/401 1608/425/380 1616/435/390\nf 1626/446/401 1623/442/397 1625/447/402\nf 412/448/403 1625/447/402 1623/442/397\nf 1618/440/395 25/244/234 1629/449/404\nf 1515/269/255 1629/449/404 25/244/234\nf 1628/450/405 1629/449/404 416/451/406\nf 1627/452/407 416/451/406 1629/449/404\nf 1627/452/407 384/268/254 1632/453/408\nf 1512/264/250 1632/453/408 384/268/254\nf 414/454/409 1631/455/410 1630/456/411\nf 1632/453/408 1630/456/411 1631/455/410\nf 1635/457/412 416/451/406 1636/458/413\nf 1631/455/410 1636/458/413 416/451/406\nf 37/459/414 1634/460/415 1633/461/416\nf 1636/458/413 1633/461/416 1634/460/415\nf 1621/445/400 411/438/393 1638/462/417\nf 1628/450/405 1638/462/417 411/438/393\nf 1635/457/412 415/463/418 1638/462/417\nf 1637/464/419 1638/462/417 415/463/418\nf 1641/465/420 1630/456/411 1527/288/270\nf 26/265/251 1527/288/270 1630/456/411\nf 419/466/421 1640/467/422 1639/468/423\nf 1641/465/420 1639/468/423 1640/467/422\nf 1644/469/424 1639/468/423 1524/285/267\nf 387/289/271 1524/285/267 1639/468/423\nf 417/470/425 1643/471/426 1642/472/427\nf 1644/469/424 1642/472/427 1643/471/426\nf 1648/473/428 1647/474/429 1643/471/426\nf 419/466/421 1643/471/426 1647/474/429\nf 38/475/430 1646/476/431 1645/477/432\nf 1648/473/428 1645/477/432 1646/476/431\nf 1650/478/433 1633/461/416 1640/467/422\nf 414/454/409 1640/467/422 1633/461/416\nf 418/479/434 1649/480/435 1647/474/429\nf 1650/478/433 1647/474/429 1649/480/435\nf 1653/481/436 1642/472/427 1539/309/287\nf 27/284/266 1539/309/287 1642/472/427\nf 422/482/437 1652/483/438 1651/484/439\nf 1653/481/436 1651/484/439 1652/483/438\nf 1656/485/440 1651/484/439 1536/305/283\nf 390/308/286 1536/305/283 1651/484/439\nf 420/486/441 1655/487/442 1654/488/443\nf 1656/485/440 1654/488/443 1655/487/442\nf 1660/489/444 1659/490/445 1655/487/442\nf 422/482/437 1655/487/442 1659/490/445\nf 39/491/446 1658/492/447 1657/493/448\nf 1660/489/444 1657/493/448 1658/492/447\nf 1662/494/449 1645/477/432 1652/483/438\nf 417/470/425 1652/483/438 1645/477/432\nf 421/495/450 1661/496/451 1659/490/445\nf 1662/494/449 1659/490/445 1661/496/451\nf 1665/497/452 1654/498/443 1551/331/302\nf 28/499/282 1551/331/302 1654/498/443\nf 425/500/453 1664/501/454 1663/502/455\nf 1665/497/452 1663/502/455 1664/501/454\nf 1668/503/456 1663/502/455 1548/326/299\nf 393/332/303 1548/326/299 1663/502/455\nf 423/504/457 1667/505/458 1666/506/459\nf 1668/503/456 1666/506/459 1667/505/458\nf 1672/507/460 1671/508/461 1667/505/458\nf 425/500/453 1667/505/458 1671/508/461\nf 40/509/462 1670/510/463 1669/511/464\nf 1672/507/460 1669/511/464 1670/510/463\nf 1674/512/465 1657/513/448 1664/501/454\nf 420/514/441 1664/501/454 1657/513/448\nf 424/515/466 1673/516/467 1671/508/461\nf 1674/512/465 1671/508/461 1673/516/467\nf 1677/517/468 1666/506/459 1563/351/318\nf 29/325/298 1563/351/318 1666/506/459\nf 428/518/469 1676/519/470 1675/520/471\nf 1677/517/468 1675/520/471 1676/519/470\nf 1680/521/472 1675/520/471 1560/348/315\nf 396/352/319 1560/348/315 1675/520/471\nf 426/522/473 1679/523/474 1678/524/475\nf 1680/521/472 1678/524/475 1679/523/474\nf 1684/525/476 1683/526/477 1679/523/474\nf 428/518/469 1679/523/474 1683/526/477\nf 41/527/478 1682/528/479 1681/529/480\nf 1684/525/476 1681/529/480 1682/528/479\nf 1686/530/481 1669/511/464 1676/519/470\nf 423/504/457 1676/519/470 1669/511/464\nf 427/531/482 1685/532/483 1683/526/477\nf 1686/530/481 1683/526/477 1685/532/483\nf 1689/533/484 1678/524/475 1575/371/334\nf 30/347/314 1575/371/334 1678/524/475\nf 431/534/485 1688/535/486 1687/536/487\nf 1689/533/484 1687/536/487 1688/535/486\nf 1692/537/488 1687/536/487 1572/368/331\nf 399/372/335 1572/368/331 1687/536/487\nf 429/538/489 1691/539/490 1690/540/491\nf 1692/537/488 1690/540/491 1691/539/490\nf 1696/541/492 1695/542/493 1691/539/490\nf 431/534/485 1691/539/490 1695/542/493\nf 42/543/494 1694/544/495 1693/545/496\nf 1696/541/492 1693/545/496 1694/544/495\nf 1698/546/497 1681/529/480 1688/535/486\nf 426/522/473 1688/535/486 1681/529/480\nf 430/547/498 1697/548/499 1695/542/493\nf 1698/546/497 1695/542/493 1697/548/499\nf 1701/549/500 1690/540/491 1587/392/351\nf 31/367/330 1587/392/351 1690/540/491\nf 434/550/501 1700/551/502 1699/552/503\nf 1701/549/500 1699/552/503 1700/551/502\nf 1704/553/504 1699/552/503 1584/388/347\nf 402/391/350 1584/388/347 1699/552/503\nf 432/554/505 1703/555/506 1702/556/507\nf 1704/553/504 1702/556/507 1703/555/506\nf 1708/557/508 1707/558/509 1703/555/506\nf 434/550/501 1703/555/506 1707/558/509\nf 43/559/510 1706/560/511 1705/561/512\nf 1708/557/508 1705/561/512 1706/560/511\nf 1710/562/513 1693/545/496 1700/551/502\nf 429/538/489 1700/551/502 1693/545/496\nf 433/563/514 1709/564/515 1707/558/509\nf 1710/562/513 1707/558/509 1709/564/515\nf 1713/565/516 1702/556/507 1599/412/367\nf 32/387/346 1599/412/367 1702/556/507\nf 437/566/517 1712/567/518 1711/568/519\nf 1713/565/516 1711/568/519 1712/567/518\nf 1716/569/520 1711/568/519 1596/408/363\nf 405/411/366 1596/408/363 1711/568/519\nf 435/570/521 1715/571/522 1714/572/523\nf 1716/569/520 1714/572/523 1715/571/522\nf 1720/573/524 1719/574/525 1715/571/522\nf 437/566/517 1715/571/522 1719/574/525\nf 44/575/526 1718/576/527 1717/577/528\nf 1720/573/524 1717/577/528 1718/576/527\nf 1722/578/529 1705/561/512 1712/567/518\nf 432/554/505 1712/567/518 1705/561/512\nf 436/579/530 1721/580/531 1719/574/525\nf 1722/578/529 1719/574/525 1721/580/531\nf 34/581/532 1612/431/386 1725/582/533\nf 1726/583/534 1725/582/533 1612/431/386\nf 1726/583/534 1723/584/535 1724/585/536\nf 441/586/537 1724/585/536 1723/584/535\nf 408/432/387 1609/426/381 1723/584/535\nf 1729/587/538 1723/584/535 1609/426/381\nf 1729/587/538 1727/588/539 1728/589/540\nf 438/590/541 1728/589/540 1727/588/539\nf 441/586/537 1728/589/540 1732/591/542\nf 1733/592/543 1732/591/542 1728/589/540\nf 1733/592/543 1730/593/544 1731/594/545\nf 46/595/546 1731/594/545 1730/593/544\nf 440/596/547 1724/585/536 1735/597/548\nf 1736/598/549 1735/597/548 1724/585/536\nf 439/599/550 1734/600/551 1732/591/542\nf 1736/598/549 1732/591/542 1734/600/551\nf 35/427/382 1625/447/402 1727/588/539\nf 1739/601/552 1727/588/539 1625/447/402\nf 1739/601/552 1737/602/553 1738/603/554\nf 444/604/555 1738/603/554 1737/602/553\nf 1742/605/556 1737/602/553 1622/443/398\nf 412/448/403 1622/443/398 1737/602/553\nf 1740/606/557 442/607/558 1742/605/556\nf 1741/608/559 1742/605/556 442/607/558\nf 1741/608/559 1746/609/560 444/604/555\nf 1745/610/561 444/604/555 1746/609/560\nf 1743/611/562 47/612/563 1746/609/560\nf 1744/613/564 1746/609/560 47/612/563\nf 438/590/541 1738/603/554 1730/593/544\nf 1748/614/565 1730/593/544 1738/603/554\nf 1747/615/566 1748/614/565 443/616/567\nf 1745/610/561 443/616/567 1748/614/565\nf 1637/464/419 1751/617/568 36/444/399\nf 1740/606/557 36/444/399 1751/617/568\nf 1749/618/569 447/619/570 1751/617/568\nf 1750/620/571 1751/617/568 447/619/570\nf 1634/460/415 1754/621/572 415/463/418\nf 1749/618/569 415/463/418 1754/621/572\nf 445/622/573 1753/623/574 1752/624/575\nf 1754/621/572 1752/624/575 1753/623/574\nf 1753/623/574 1758/625/576 447/619/570\nf 1757/626/577 447/619/570 1758/625/576\nf 1756/627/578 1758/625/576 48/628/579\nf 1755/629/580 48/628/579 1758/625/576\nf 1750/620/571 1760/630/581 442/607/558\nf 1743/611/562 442/607/558 1760/630/581\nf 1757/626/577 446/631/582 1760/630/581\nf 1759/632/583 1760/630/581 446/631/582\nf 1763/633/584 1752/624/575 1649/480/435\nf 37/459/414 1649/480/435 1752/624/575\nf 450/634/585 1762/635/586 1761/636/587\nf 1763/633/584 1761/636/587 1762/635/586\nf 1766/637/588 1761/636/587 1646/476/431\nf 418/479/434 1646/476/431 1761/636/587\nf 448/638/589 1765/639/590 1764/640/591\nf 1766/637/588 1764/640/591 1765/639/590\nf 1770/641/592 1769/642/593 1765/639/590\nf 450/634/585 1765/639/590 1769/642/593\nf 49/643/594 1768/644/595 1767/645/596\nf 1770/641/592 1767/645/596 1768/644/595\nf 1755/629/580 445/622/573 1772/646/597\nf 1762/635/586 1772/646/597 445/622/573\nf 1771/647/598 1772/646/597 449/648/599\nf 1769/642/593 449/648/599 1772/646/597\nf 1775/649/600 1764/640/591 1661/496/451\nf 38/475/430 1661/496/451 1764/640/591\nf 453/650/601 1774/651/602 1773/652/603\nf 1775/649/600 1773/652/603 1774/651/602\nf 1778/653/604 1773/652/603 1658/492/447\nf 421/495/450 1658/492/447 1773/652/603\nf 451/654/605 1777/655/606 1776/656/607\nf 1778/653/604 1776/656/607 1777/655/606\nf 1782/657/608 1781/658/609 1777/655/606\nf 453/650/601 1777/655/606 1781/658/609\nf 50/659/610 1780/660/611 1779/661/612\nf 1782/657/608 1779/661/612 1780/660/611\nf 1784/662/613 1767/645/596 1774/651/602\nf 448/638/589 1774/651/602 1767/645/596\nf 452/663/614 1783/664/615 1781/658/609\nf 1784/662/613 1781/658/609 1783/664/615\nf 1787/665/616 1776/666/607 1673/516/467\nf 39/667/446 1673/516/467 1776/666/607\nf 456/668/617 1786/669/618 1785/670/619\nf 1787/665/616 1785/670/619 1786/669/618\nf 1790/671/620 1785/670/619 1670/510/463\nf 424/515/466 1670/510/463 1785/670/619\nf 454/672/621 1789/673/622 1788/674/623\nf 1790/671/620 1788/674/623 1789/673/622\nf 1794/675/624 1793/676/625 1789/673/622\nf 456/668/617 1789/673/622 1793/676/625\nf 51/677/626 1792/678/627 1791/679/628\nf 1794/675/624 1791/679/628 1792/678/627\nf 1796/680/629 1779/681/612 1786/669/618\nf 451/682/605 1786/669/618 1779/681/612\nf 455/683/630 1795/684/631 1793/676/625\nf 1796/680/629 1793/676/625 1795/684/631\nf 1799/685/632 1788/674/623 1685/532/483\nf 40/509/462 1685/532/483 1788/674/623\nf 459/686/633 1798/687/634 1797/688/635\nf 1799/685/632 1797/688/635 1798/687/634\nf 1802/689/636 1797/688/635 1682/528/479\nf 427/531/482 1682/528/479 1797/688/635\nf 457/690/637 1801/691/638 1800/692/639\nf 1802/689/636 1800/692/639 1801/691/638\nf 1806/693/640 1805/694/641 1801/691/638\nf 459/686/633 1801/691/638 1805/694/641\nf 52/695/642 1804/696/643 1803/697/644\nf 1806/693/640 1803/697/644 1804/696/643\nf 1808/698/645 1791/679/628 1798/687/634\nf 454/672/621 1798/687/634 1791/679/628\nf 1807/699/646 1808/698/645 458/700/647\nf 1805/694/641 458/700/647 1808/698/645\nf 1811/701/648 1800/692/639 1697/548/499\nf 41/527/478 1697/548/499 1800/692/639\nf 462/702/649 1810/703/650 1809/704/651\nf 1811/701/648 1809/704/651 1810/703/650\nf 1814/705/652 1809/704/651 1694/544/495\nf 430/547/498 1694/544/495 1809/704/651\nf 460/706/653 1813/707/654 1812/708/655\nf 1814/705/652 1812/708/655 1813/707/654\nf 1818/709/656 1817/710/657 1813/707/654\nf 462/702/649 1813/707/654 1817/710/657\nf 53/711/658 1816/712/659 1815/713/660\nf 1818/709/656 1815/713/660 1816/712/659\nf 1820/714/661 1803/697/644 1810/703/650\nf 457/690/637 1810/703/650 1803/697/644\nf 1819/715/662 1820/714/661 461/716/663\nf 1817/710/657 461/716/663 1820/714/661\nf 1823/717/664 1812/708/655 1709/564/515\nf 42/543/494 1709/564/515 1812/708/655\nf 465/718/665 1822/719/666 1821/720/667\nf 1823/717/664 1821/720/667 1822/719/666\nf 1826/721/668 1821/720/667 1706/560/511\nf 433/563/514 1706/560/511 1821/720/667\nf 463/722/669 1825/723/670 1824/724/671\nf 1826/721/668 1824/724/671 1825/723/670\nf 1830/725/672 1829/726/673 1825/723/670\nf 465/718/665 1825/723/670 1829/726/673\nf 54/727/674 1828/728/675 1827/729/676\nf 1830/725/672 1827/729/676 1828/728/675\nf 1832/730/677 1815/713/660 1822/719/666\nf 460/706/653 1822/719/666 1815/713/660\nf 464/731/678 1831/732/679 1829/726/673\nf 1832/730/677 1829/726/673 1831/732/679\nf 1721/580/531 1835/733/680 43/559/510\nf 1824/724/671 43/559/510 1835/733/680\nf 1833/734/681 468/735/682 1835/733/680\nf 1834/736/683 1835/733/680 468/735/682\nf 1718/576/527 1838/737/684 436/579/530\nf 1833/734/681 436/579/530 1838/737/684\nf 1838/737/684 1836/738/685 1837/739/686\nf 466/740/687 1837/739/686 1836/738/685\nf 1837/739/686 1842/741/688 468/735/682\nf 1841/742/689 468/735/682 1842/741/688\nf 1842/741/688 1839/743/690 1840/744/691\nf 55/745/692 1840/744/691 1839/743/690\nf 1844/746/693 1827/729/676 1834/736/683\nf 463/722/669 1834/736/683 1827/729/676\nf 467/747/694 1843/748/695 1841/742/689\nf 1844/746/693 1841/742/689 1843/748/695\nf 1734/600/551 1848/749/696 45/750/697\nf 1847/751/698 45/750/697 1848/749/696\nf 1845/752/699 472/753/700 1848/749/696\nf 1846/754/701 1848/749/696 472/753/700\nf 1845/752/699 439/599/550 1851/755/702\nf 1731/594/545 1851/755/702 439/599/550\nf 1849/756/703 469/757/704 1851/755/702\nf 1850/758/705 1851/755/702 469/757/704\nf 1850/758/705 1855/759/706 472/753/700\nf 1854/760/707 472/753/700 1855/759/706\nf 1853/761/708 1855/759/706 57/762/709\nf 1852/763/710 57/762/709 1855/759/706\nf 1846/754/701 1858/764/711 471/765/712\nf 1857/766/713 471/765/712 1858/764/711\nf 1854/760/707 470/767/714 1858/764/711\nf 1856/768/715 1858/764/711 470/767/714\nf 1747/615/566 1861/769/716 46/595/546\nf 1849/756/703 46/595/546 1861/769/716\nf 1859/770/717 475/771/718 1861/769/716\nf 1860/772/719 1861/769/716 475/771/718\nf 1744/613/564 1864/773/720 443/616/567\nf 1859/770/717 443/616/567 1864/773/720\nf 1862/774/721 473/775/722 1864/773/720\nf 1863/776/723 1864/773/720 473/775/722\nf 1863/776/723 1868/777/724 475/771/718\nf 1867/778/725 475/771/718 1868/777/724\nf 1865/779/726 58/780/727 1868/777/724\nf 1866/781/728 1868/777/724 58/780/727\nf 1860/772/719 1870/782/729 469/757/704\nf 1852/763/710 469/757/704 1870/782/729\nf 1867/778/725 474/783/730 1870/782/729\nf 1869/784/731 1870/782/729 474/783/730\nf 1759/632/583 1873/785/732 47/612/563\nf 1862/774/721 47/612/563 1873/785/732\nf 1871/786/733 478/787/734 1873/785/732\nf 1872/788/735 1873/785/732 478/787/734\nf 1756/627/578 1876/789/736 446/631/582\nf 1871/786/733 446/631/582 1876/789/736\nf 1875/790/737 1876/789/736 476/791/738\nf 1874/792/739 476/791/738 1876/789/736\nf 1879/793/740 478/787/734 1880/794/741\nf 1875/790/737 1880/794/741 478/787/734\nf 1878/795/742 1880/794/741 59/796/743\nf 1877/797/744 59/796/743 1880/794/741\nf 1872/788/735 1882/798/745 473/775/722\nf 1865/779/726 473/775/722 1882/798/745\nf 1879/793/740 477/799/746 1882/798/745\nf 1881/800/747 1882/798/745 477/799/746\nf 1874/792/739 48/628/579 1885/801/748\nf 1771/647/598 1885/801/748 48/628/579\nf 1884/802/749 1885/801/748 481/803/750\nf 1883/804/751 481/803/750 1885/801/748\nf 1888/805/752 1883/804/751 1768/644/595\nf 449/648/599 1768/644/595 1883/804/751\nf 479/806/753 1887/807/754 1886/808/755\nf 1888/805/752 1886/808/755 1887/807/754\nf 1891/809/756 481/803/750 1892/810/757\nf 1887/807/754 1892/810/757 481/803/750\nf 60/811/758 1890/812/759 1889/813/760\nf 1892/810/757 1889/813/760 1890/812/759\nf 1877/797/744 476/791/738 1894/814/761\nf 1884/802/749 1894/814/761 476/791/738\nf 1893/815/762 1894/814/761 480/816/763\nf 1891/809/756 480/816/763 1894/814/761\nf 1897/817/764 1886/808/755 1783/664/615\nf 49/643/594 1783/664/615 1886/808/755\nf 484/818/765 1896/819/766 1895/820/767\nf 1897/817/764 1895/820/767 1896/819/766\nf 1900/821/768 1895/820/767 1780/660/611\nf 452/663/614 1780/660/611 1895/820/767\nf 482/822/769 1899/823/770 1898/824/771\nf 1900/821/768 1898/824/771 1899/823/770\nf 1904/825/772 1903/826/773 1899/823/770\nf 484/818/765 1899/823/770 1903/826/773\nf 61/827/774 1902/828/775 1901/829/776\nf 1904/825/772 1901/829/776 1902/828/775\nf 1906/830/777 1889/813/760 1896/819/766\nf 479/806/753 1896/819/766 1889/813/760\nf 483/831/778 1905/832/779 1903/826/773\nf 1906/830/777 1903/826/773 1905/832/779\nf 1909/833/780 1898/834/771 1795/684/631\nf 50/835/610 1795/684/631 1898/834/771\nf 487/836/781 1908/837/782 1907/838/783\nf 1909/833/780 1907/838/783 1908/837/782\nf 1912/839/784 1907/838/783 1792/678/627\nf 455/683/630 1792/678/627 1907/838/783\nf 485/840/785 1911/841/786 1910/842/787\nf 1912/839/784 1910/842/787 1911/841/786\nf 1916/843/788 1915/844/789 1911/841/786\nf 487/836/781 1911/841/786 1915/844/789\nf 62/845/790 1914/846/791 1913/847/792\nf 1916/843/788 1913/847/792 1914/846/791\nf 1918/848/793 1901/849/776 1908/837/782\nf 482/850/769 1908/837/782 1901/849/776\nf 486/851/794 1917/852/795 1915/844/789\nf 1918/848/793 1915/844/789 1917/852/795\nf 1910/842/787 51/677/626 1921/853/796\nf 1807/699/646 1921/853/796 51/677/626\nf 1920/854/797 1921/853/796 490/855/798\nf 1919/856/799 490/855/798 1921/853/796\nf 1924/857/800 1919/856/799 1804/696/643\nf 458/700/647 1804/696/643 1919/856/799\nf 488/858/801 1923/859/802 1922/860/803\nf 1924/857/800 1922/860/803 1923/859/802\nf 1928/861/804 1927/862/805 1923/859/802\nf 490/855/798 1923/859/802 1927/862/805\nf 63/863/806 1926/864/807 1925/865/808\nf 1928/861/804 1925/865/808 1926/864/807\nf 1913/847/792 485/840/785 1930/866/809\nf 1920/854/797 1930/866/809 485/840/785\nf 1929/867/810 1930/866/809 489/868/811\nf 1927/862/805 489/868/811 1930/866/809\nf 1922/860/803 52/695/642 1933/869/812\nf 1819/715/662 1933/869/812 52/695/642\nf 1932/870/813 1933/869/812 493/871/814\nf 1931/872/815 493/871/814 1933/869/812\nf 1936/873/816 1931/872/815 1816/712/659\nf 461/716/663 1816/712/659 1931/872/815\nf 491/874/817 1935/875/818 1934/876/819\nf 1936/873/816 1934/876/819 1935/875/818\nf 1940/877/820 1939/878/821 1935/875/818\nf 493/871/814 1935/875/818 1939/878/821\nf 64/879/822 1938/880/823 1937/881/824\nf 1940/877/820 1937/881/824 1938/880/823\nf 1925/865/808 488/858/801 1942/882/825\nf 1932/870/813 1942/882/825 488/858/801\nf 1941/883/826 1942/882/825 492/884/827\nf 1939/878/821 492/884/827 1942/882/825\nf 1934/876/819 53/711/658 1945/885/828\nf 1831/732/679 1945/885/828 53/711/658\nf 496/886/829 1944/887/830 1943/888/831\nf 1945/885/828 1943/888/831 1944/887/830\nf 1948/889/832 1943/888/831 1828/728/675\nf 464/731/678 1828/728/675 1943/888/831\nf 494/890/833 1947/891/834 1946/892/835\nf 1948/889/832 1946/892/835 1947/891/834\nf 1952/893/836 1951/894/837 1947/891/834\nf 496/886/829 1947/891/834 1951/894/837\nf 65/895/838 1950/896/839 1949/897/840\nf 1952/893/836 1949/897/840 1950/896/839\nf 1937/881/824 491/874/817 1954/898/841\nf 1944/887/830 1954/898/841 491/874/817\nf 495/899/842 1953/900/843 1951/894/837\nf 1954/898/841 1951/894/837 1953/900/843\nf 1957/901/844 1946/892/835 1843/748/695\nf 54/727/674 1843/748/695 1946/892/835\nf 1957/901/844 1955/902/845 1956/903/846\nf 499/904/847 1956/903/846 1955/902/845\nf 467/747/694 1840/744/691 1955/902/845\nf 1960/905/848 1955/902/845 1840/744/691\nf 497/906/849 1959/907/850 1958/908/851\nf 1960/905/848 1958/908/851 1959/907/850\nf 499/904/847 1959/907/850 1963/909/852\nf 1964/910/853 1963/909/852 1959/907/850\nf 66/911/854 1962/912/855 1961/913/856\nf 1964/910/853 1961/913/856 1962/912/855\nf 1966/914/857 1949/897/840 1956/903/846\nf 494/890/833 1956/903/846 1949/897/840\nf 498/915/858 1965/916/859 1963/909/852\nf 1966/914/857 1963/909/852 1965/916/859\nf 56/917/860 1856/768/715 1969/918/861\nf 1970/919/862 1969/918/861 1856/768/715\nf 1970/919/862 1967/920/863 1968/921/864\nf 503/922/865 1968/921/864 1967/920/863\nf 1967/920/863 470/767/714 1973/923/866\nf 1853/761/708 1973/923/866 470/767/714\nf 1972/924/867 1973/923/866 500/925/868\nf 1971/926/869 500/925/868 1973/923/866\nf 503/922/865 1972/924/867 1976/927/870\nf 1977/928/871 1976/927/870 1972/924/867\nf 1975/929/872 1977/928/871 68/930/873\nf 1974/931/874 68/930/873 1977/928/871\nf 502/932/875 1968/921/864 1979/933/876\nf 1980/934/877 1979/933/876 1968/921/864\nf 1980/934/877 1976/927/870 1978/935/878\nf 501/936/879 1978/935/878 1976/927/870\nf 1971/926/869 57/762/709 1983/937/880\nf 1869/784/731 1983/937/880 57/762/709\nf 1982/938/881 1983/937/880 506/939/882\nf 1981/940/883 506/939/882 1983/937/880\nf 1866/781/728 1986/941/884 474/783/730\nf 1981/940/883 474/783/730 1986/941/884\nf 1984/942/885 504/943/886 1986/941/884\nf 1985/944/887 1986/941/884 504/943/886\nf 1989/945/888 506/939/882 1990/946/889\nf 1985/944/887 1990/946/889 506/939/882\nf 1988/947/890 1990/946/889 69/948/891\nf 1987/949/892 69/948/891 1990/946/889\nf 1974/931/874 500/925/868 1992/950/893\nf 1982/938/881 1992/950/893 500/925/868\nf 1991/951/894 1992/950/893 505/952/895\nf 1989/945/888 505/952/895 1992/950/893\nf 1881/800/747 1995/953/896 58/780/727\nf 1984/942/885 58/780/727 1995/953/896\nf 1994/954/897 1995/953/896 509/955/898\nf 1993/956/899 509/955/898 1995/953/896\nf 1993/956/899 477/799/746 1998/957/900\nf 1878/795/742 1998/957/900 477/799/746\nf 1997/958/901 1998/957/900 507/959/902\nf 1996/960/903 507/959/902 1998/957/900\nf 2001/961/904 509/955/898 2002/962/905\nf 1997/958/901 2002/962/905 509/955/898\nf 2000/963/906 2002/962/905 70/964/907\nf 1999/965/908 70/964/907 2002/962/905\nf 1987/949/892 504/943/886 2004/966/909\nf 1994/954/897 2004/966/909 504/943/886\nf 2003/967/910 2004/966/909 508/968/911\nf 2001/961/904 508/968/911 2004/966/909\nf 1996/960/903 59/796/743 2007/969/912\nf 1893/815/762 2007/969/912 59/796/743\nf 2006/970/913 2007/969/912 512/971/914\nf 2005/972/915 512/971/914 2007/969/912\nf 2005/972/915 480/816/763 2010/973/916\nf 1890/812/759 2010/973/916 480/816/763\nf 2009/974/917 2010/973/916 510/975/918\nf 2008/976/919 510/975/918 2010/973/916\nf 2013/977/920 512/971/914 2014/978/921\nf 2009/974/917 2014/978/921 512/971/914\nf 2012/979/922 2014/978/921 71/980/923\nf 2011/981/924 71/980/923 2014/978/921\nf 1999/965/908 507/959/902 2016/982/925\nf 2006/970/913 2016/982/925 507/959/902\nf 2015/983/926 2016/982/925 511/984/927\nf 2013/977/920 511/984/927 2016/982/925\nf 2008/976/919 60/811/758 2019/985/928\nf 1905/832/779 2019/985/928 60/811/758\nf 2018/986/929 2019/985/928 515/987/930\nf 2017/988/931 515/987/930 2019/985/928\nf 2022/989/932 2017/988/931 1902/828/775\nf 483/831/778 1902/828/775 2017/988/931\nf 513/990/933 2021/991/934 2020/992/935\nf 2022/989/932 2020/992/935 2021/991/934\nf 2026/993/936 2025/994/937 2021/991/934\nf 515/987/930 2021/991/934 2025/994/937\nf 72/995/938 2024/996/939 2023/997/940\nf 2026/993/936 2023/997/940 2024/996/939\nf 2011/981/924 510/975/918 2028/998/941\nf 2018/986/929 2028/998/941 510/975/918\nf 2027/999/942 2028/998/941 514/1000/943\nf 2025/994/937 514/1000/943 2028/998/941\nf 2031/1001/944 2020/1002/935 1917/852/795\nf 61/1003/774 1917/852/795 2020/1002/935\nf 518/1004/945 2030/1005/946 2029/1006/947\nf 2031/1001/944 2029/1006/947 2030/1005/946\nf 2034/1007/948 2029/1006/947 1914/846/791\nf 486/851/794 1914/846/791 2029/1006/947\nf 516/1008/949 2033/1009/950 2032/1010/951\nf 2034/1007/948 2032/1010/951 2033/1009/950\nf 2038/1011/952 2037/1012/953 2033/1009/950\nf 518/1004/945 2033/1009/950 2037/1012/953\nf 73/1013/954 2036/1014/955 2035/1015/956\nf 2038/1011/952 2035/1015/956 2036/1014/955\nf 2040/1016/957 2023/1017/940 2030/1005/946\nf 513/1018/933 2030/1005/946 2023/1017/940\nf 517/1019/958 2039/1020/959 2037/1012/953\nf 2040/1016/957 2037/1012/953 2039/1020/959\nf 2032/1010/951 62/845/790 2043/1021/960\nf 1929/867/810 2043/1021/960 62/845/790\nf 2042/1022/961 2043/1021/960 521/1023/962\nf 2041/1024/963 521/1023/962 2043/1021/960\nf 2046/1025/964 2041/1024/963 1926/864/807\nf 489/868/811 1926/864/807 2041/1024/963\nf 519/1026/965 2045/1027/966 2044/1028/967\nf 2046/1025/964 2044/1028/967 2045/1027/966\nf 2050/1029/968 2049/1030/969 2045/1027/966\nf 521/1023/962 2045/1027/966 2049/1030/969\nf 74/1031/970 2048/1032/971 2047/1033/972\nf 2050/1029/968 2047/1033/972 2048/1032/971\nf 2052/1034/973 2035/1015/956 2042/1022/961\nf 516/1008/949 2042/1022/961 2035/1015/956\nf 2051/1035/974 2052/1034/973 520/1036/975\nf 2049/1030/969 520/1036/975 2052/1034/973\nf 2044/1028/967 63/863/806 2055/1037/976\nf 1941/883/826 2055/1037/976 63/863/806\nf 2054/1038/977 2055/1037/976 524/1039/978\nf 2053/1040/979 524/1039/978 2055/1037/976\nf 2058/1041/980 2053/1040/979 1938/880/823\nf 492/884/827 1938/880/823 2053/1040/979\nf 522/1042/981 2057/1043/982 2056/1044/983\nf 2058/1041/980 2056/1044/983 2057/1043/982\nf 2062/1045/984 2061/1046/985 2057/1043/982\nf 524/1039/978 2057/1043/982 2061/1046/985\nf 75/1047/986 2060/1048/987 2059/1049/988\nf 2062/1045/984 2059/1049/988 2060/1048/987\nf 2047/1033/972 519/1026/965 2064/1050/989\nf 2054/1038/977 2064/1050/989 519/1026/965\nf 2063/1051/990 2064/1050/989 523/1052/991\nf 2061/1046/985 523/1052/991 2064/1050/989\nf 2056/1044/983 64/879/822 2067/1053/992\nf 1953/900/843 2067/1053/992 64/879/822\nf 527/1054/993 2066/1055/994 2065/1056/995\nf 2067/1053/992 2065/1056/995 2066/1055/994\nf 2070/1057/996 2065/1056/995 1950/896/839\nf 495/899/842 1950/896/839 2065/1056/995\nf 525/1058/997 2069/1059/998 2068/1060/999\nf 2070/1057/996 2068/1060/999 2069/1059/998\nf 2073/1061/1000 527/1054/993 2074/1062/1001\nf 2069/1059/998 2074/1062/1001 527/1054/993\nf 2071/1063/1002 76/1064/1003 2074/1062/1001\nf 2072/1065/1004 2074/1062/1001 76/1064/1003\nf 2059/1049/988 522/1042/981 2076/1066/1005\nf 2066/1055/994 2076/1066/1005 522/1042/981\nf 2075/1067/1006 2076/1066/1005 526/1068/1007\nf 2073/1061/1000 526/1068/1007 2076/1066/1005\nf 2079/1069/1008 2068/1060/999 1965/916/859\nf 65/895/838 1965/916/859 2068/1060/999\nf 530/1070/1009 2078/1071/1010 2077/1072/1011\nf 2079/1069/1008 2077/1072/1011 2078/1071/1010\nf 1962/912/855 2082/1073/1012 498/915/858\nf 2077/1072/1011 498/915/858 2082/1073/1012\nf 2080/1074/1013 528/1075/1014 2082/1073/1012\nf 2081/1076/1015 2082/1073/1012 528/1075/1014\nf 2081/1076/1015 2086/1077/1016 530/1070/1009\nf 2085/1078/1017 530/1070/1009 2086/1077/1016\nf 2083/1079/1018 77/1080/1019 2086/1077/1016\nf 2084/1081/1020 2086/1077/1016 77/1080/1019\nf 2078/1071/1010 2088/1082/1021 525/1058/997\nf 2071/1063/1002 525/1058/997 2088/1082/1021\nf 2085/1078/1017 529/1083/1022 2088/1082/1021\nf 2087/1084/1023 2088/1082/1021 529/1083/1022\nf 1978/935/878 2092/1085/1024 67/1086/1025\nf 2091/1087/1026 67/1086/1025 2092/1085/1024\nf 2089/1088/1027 534/1089/1028 2092/1085/1024\nf 2090/1090/1029 2092/1085/1024 534/1089/1028\nf 1975/929/872 2095/1091/1030 501/936/879\nf 2089/1088/1027 501/936/879 2095/1091/1030\nf 2093/1092/1031 531/1093/1032 2095/1091/1030\nf 2094/1094/1033 2095/1091/1030 531/1093/1032\nf 2094/1094/1033 2099/1095/1034 534/1089/1028\nf 2098/1096/1035 534/1089/1028 2099/1095/1034\nf 2096/1097/1036 79/1098/1037 2099/1095/1034\nf 2097/1099/1038 2099/1095/1034 79/1098/1037\nf 2090/1090/1029 2102/1100/1039 533/1101/1040\nf 2101/1102/1041 533/1101/1040 2102/1100/1039\nf 2098/1096/1035 532/1103/1042 2102/1100/1039\nf 2100/1104/1043 2102/1100/1039 532/1103/1042\nf 1991/951/894 2105/1105/1044 68/930/873\nf 2093/1092/1031 68/930/873 2105/1105/1044\nf 2103/1106/1045 537/1107/1046 2105/1105/1044\nf 2104/1108/1047 2105/1105/1044 537/1107/1046\nf 2103/1106/1045 505/952/895 2108/1109/1048\nf 1988/947/890 2108/1109/1048 505/952/895\nf 2107/1110/1049 2108/1109/1048 535/1111/1050\nf 2106/1112/1051 535/1111/1050 2108/1109/1048\nf 2107/1110/1049 2112/1113/1052 537/1107/1046\nf 2111/1114/1053 537/1107/1046 2112/1113/1052\nf 2110/1115/1054 2112/1113/1052 80/1116/1055\nf 2109/1117/1056 80/1116/1055 2112/1113/1052\nf 2104/1108/1047 2114/1118/1057 531/1093/1032\nf 2096/1097/1036 531/1093/1032 2114/1118/1057\nf 2111/1114/1053 536/1119/1058 2114/1118/1057\nf 2113/1120/1059 2114/1118/1057 536/1119/1058\nf 2106/1112/1051 69/948/891 2117/1121/1060\nf 2003/967/910 2117/1121/1060 69/948/891\nf 2117/1121/1060 2115/1122/1061 2116/1123/1062\nf 540/1124/1063 2116/1123/1062 2115/1122/1061\nf 508/968/911 2000/963/906 2115/1122/1061\nf 2120/1125/1064 2115/1122/1061 2000/963/906\nf 2120/1125/1064 2118/1126/1065 2119/1127/1066\nf 538/1128/1067 2119/1127/1066 2118/1126/1065\nf 540/1124/1063 2119/1127/1066 2123/1129/1068\nf 2124/1130/1069 2123/1129/1068 2119/1127/1066\nf 2124/1130/1069 2121/1131/1070 2122/1132/1071\nf 81/1133/1072 2122/1132/1071 2121/1131/1070\nf 535/1111/1050 2116/1123/1062 2109/1117/1056\nf 2126/1134/1073 2109/1117/1056 2116/1123/1062\nf 2126/1134/1073 2123/1129/1068 2125/1135/1074\nf 539/1136/1075 2125/1135/1074 2123/1129/1068\nf 70/964/907 2015/983/926 2118/1126/1065\nf 2129/1137/1076 2118/1126/1065 2015/983/926\nf 2129/1137/1076 2127/1138/1077 2128/1139/1078\nf 543/1140/1079 2128/1139/1078 2127/1138/1077\nf 511/984/927 2012/979/922 2127/1138/1077\nf 2132/1141/1080 2127/1138/1077 2012/979/922\nf 2132/1141/1080 2130/1142/1081 2131/1143/1082\nf 541/1144/1083 2131/1143/1082 2130/1142/1081\nf 543/1140/1079 2131/1143/1082 2135/1145/1084\nf 2136/1146/1085 2135/1145/1084 2131/1143/1082\nf 2136/1146/1085 2133/1147/1086 2134/1148/1087\nf 82/1149/1088 2134/1148/1087 2133/1147/1086\nf 538/1128/1067 2128/1139/1078 2121/1131/1070\nf 2138/1150/1089 2121/1131/1070 2128/1139/1078\nf 2138/1150/1089 2135/1145/1084 2137/1151/1090\nf 542/1152/1091 2137/1151/1090 2135/1145/1084\nf 2027/999/942 2141/1153/1092 71/980/923\nf 2130/1142/1081 71/980/923 2141/1153/1092\nf 2141/1153/1092 2139/1154/1093 2140/1155/1094\nf 546/1156/1095 2140/1155/1094 2139/1154/1093\nf 2024/996/939 2144/1157/1096 514/1000/943\nf 2139/1154/1093 514/1000/943 2144/1157/1096\nf 2142/1158/1097 544/1159/1098 2144/1157/1096\nf 2143/1160/1099 2144/1157/1096 544/1159/1098\nf 2143/1160/1099 2148/1161/1100 546/1156/1095\nf 2147/1162/1101 546/1156/1095 2148/1161/1100\nf 2145/1163/1102 83/1164/1103 2148/1161/1100\nf 2146/1165/1104 2148/1161/1100 83/1164/1103\nf 541/1144/1083 2140/1155/1094 2133/1147/1086\nf 2150/1166/1105 2133/1147/1086 2140/1155/1094\nf 2150/1166/1105 2147/1162/1101 2149/1167/1106\nf 545/1168/1107 2149/1167/1106 2147/1162/1101\nf 2039/1020/959 2153/1169/1108 72/1170/938\nf 2142/1171/1097 72/1170/938 2153/1169/1108\nf 2151/1172/1109 549/1173/1110 2153/1169/1108\nf 2152/1174/1111 2153/1169/1108 549/1173/1110\nf 2036/1014/955 2156/1175/1112 517/1019/958\nf 2151/1172/1109 517/1019/958 2156/1175/1112\nf 2154/1176/1113 547/1177/1114 2156/1175/1112\nf 2155/1178/1115 2156/1175/1112 547/1177/1114\nf 2155/1178/1115 2160/1179/1116 549/1173/1110\nf 2159/1180/1117 549/1173/1110 2160/1179/1116\nf 2157/1181/1118 84/1182/1119 2160/1179/1116\nf 2158/1183/1120 2160/1179/1116 84/1182/1119\nf 2152/1174/1111 2162/1184/1121 544/1185/1098\nf 2145/1186/1102 544/1185/1098 2162/1184/1121\nf 2159/1180/1117 548/1187/1122 2162/1184/1121\nf 2161/1188/1123 2162/1184/1121 548/1187/1122\nf 73/1013/954 2051/1035/974 2154/1176/1113\nf 2165/1189/1124 2154/1176/1113 2051/1035/974\nf 2165/1189/1124 2163/1190/1125 2164/1191/1126\nf 552/1192/1127 2164/1191/1126 2163/1190/1125\nf 2048/1032/971 2168/1193/1128 520/1036/975\nf 2163/1190/1125 520/1036/975 2168/1193/1128\nf 2166/1194/1129 550/1195/1130 2168/1193/1128\nf 2167/1196/1131 2168/1193/1128 550/1195/1130\nf 2167/1196/1131 2172/1197/1132 552/1192/1127\nf 2171/1198/1133 552/1192/1127 2172/1197/1132\nf 2169/1199/1134 85/1200/1135 2172/1197/1132\nf 2170/1201/1136 2172/1197/1132 85/1200/1135\nf 547/1177/1114 2164/1191/1126 2157/1181/1118\nf 2174/1202/1137 2157/1181/1118 2164/1191/1126\nf 2174/1202/1137 2171/1198/1133 2173/1203/1138\nf 551/1204/1139 2173/1203/1138 2171/1198/1133\nf 74/1031/970 2063/1051/990 2166/1194/1129\nf 2177/1205/1140 2166/1194/1129 2063/1051/990\nf 2177/1205/1140 2175/1206/1141 2176/1207/1142\nf 555/1208/1143 2176/1207/1142 2175/1206/1141\nf 2060/1048/987 2180/1209/1144 523/1052/991\nf 2175/1206/1141 523/1052/991 2180/1209/1144\nf 2178/1210/1145 553/1211/1146 2180/1209/1144\nf 2179/1212/1147 2180/1209/1144 553/1211/1146\nf 2179/1212/1147 2184/1213/1148 555/1208/1143\nf 2183/1214/1149 555/1208/1143 2184/1213/1148\nf 2181/1215/1150 86/1216/1151 2184/1213/1148\nf 2182/1217/1152 2184/1213/1148 86/1216/1151\nf 550/1195/1130 2176/1207/1142 2169/1199/1134\nf 2186/1218/1153 2169/1199/1134 2176/1207/1142\nf 2186/1218/1153 2183/1214/1149 2185/1219/1154\nf 554/1220/1155 2185/1219/1154 2183/1214/1149\nf 75/1047/986 2075/1067/1006 2178/1210/1145\nf 2189/1221/1156 2178/1210/1145 2075/1067/1006\nf 2187/1222/1157 558/1223/1158 2189/1221/1156\nf 2188/1224/1159 2189/1221/1156 558/1223/1158\nf 2072/1065/1004 2192/1225/1160 526/1068/1007\nf 2187/1222/1157 526/1068/1007 2192/1225/1160\nf 2190/1226/1161 556/1227/1162 2192/1225/1160\nf 2191/1228/1163 2192/1225/1160 556/1227/1162\nf 2191/1228/1163 2196/1229/1164 558/1223/1158\nf 2195/1230/1165 558/1223/1158 2196/1229/1164\nf 2193/1231/1166 87/1232/1167 2196/1229/1164\nf 2194/1233/1168 2196/1229/1164 87/1232/1167\nf 553/1211/1146 2188/1224/1159 2181/1215/1150\nf 2198/1234/1169 2181/1215/1150 2188/1224/1159\nf 2195/1230/1165 557/1235/1170 2198/1234/1169\nf 2197/1236/1171 2198/1234/1169 557/1235/1170\nf 2087/1084/1023 2201/1237/1172 76/1064/1003\nf 2190/1226/1161 76/1064/1003 2201/1237/1172\nf 2199/1238/1173 561/1239/1174 2201/1237/1172\nf 2200/1240/1175 2201/1237/1172 561/1239/1174\nf 2084/1081/1020 2204/1241/1176 529/1083/1022\nf 2199/1238/1173 529/1083/1022 2204/1241/1176\nf 2202/1242/1177 559/1243/1178 2204/1241/1176\nf 2203/1244/1179 2204/1241/1176 559/1243/1178\nf 2203/1244/1179 2208/1245/1180 561/1239/1174\nf 2207/1246/1181 561/1239/1174 2208/1245/1180\nf 2205/1247/1182 88/1248/1183 2208/1245/1180\nf 2206/1249/1184 2208/1245/1180 88/1248/1183\nf 2200/1240/1175 2210/1250/1185 556/1227/1162\nf 2193/1231/1166 556/1227/1162 2210/1250/1185\nf 2207/1246/1181 560/1251/1186 2210/1250/1185\nf 2209/1252/1187 2210/1250/1185 560/1251/1186\nf 2100/1104/1043 2214/1253/1188 78/1254/1189\nf 2213/1255/1190 78/1254/1189 2214/1253/1188\nf 2211/1256/1191 565/1257/1192 2214/1253/1188\nf 2212/1258/1193 2214/1253/1188 565/1257/1192\nf 2097/1099/1038 2217/1259/1194 532/1103/1042\nf 2211/1256/1191 532/1103/1042 2217/1259/1194\nf 2215/1260/1195 562/1261/1196 2217/1259/1194\nf 2216/1262/1197 2217/1259/1194 562/1261/1196\nf 2216/1262/1197 2221/1263/1198 565/1257/1192\nf 2220/1264/1199 565/1257/1192 2221/1263/1198\nf 2218/1265/1200 90/1266/1201 2221/1263/1198\nf 2219/1267/1202 2221/1263/1198 90/1266/1201\nf 2212/1258/1193 2224/1268/1203 564/1269/1204\nf 2223/1270/1205 564/1269/1204 2224/1268/1203\nf 2220/1264/1199 563/1271/1206 2224/1268/1203\nf 2222/1272/1207 2224/1268/1203 563/1271/1206\nf 2113/1120/1059 2227/1273/1208 79/1098/1037\nf 2215/1260/1195 79/1098/1037 2227/1273/1208\nf 2225/1274/1209 568/1275/1210 2227/1273/1208\nf 2226/1276/1211 2227/1273/1208 568/1275/1210\nf 2110/1115/1054 2230/1277/1212 536/1119/1058\nf 2225/1274/1209 536/1119/1058 2230/1277/1212\nf 2228/1278/1213 566/1279/1214 2230/1277/1212\nf 2229/1280/1215 2230/1277/1212 566/1279/1214\nf 2229/1280/1215 2234/1281/1216 568/1275/1210\nf 2233/1282/1217 568/1275/1210 2234/1281/1216\nf 2231/1283/1218 91/1284/1219 2234/1281/1216\nf 2232/1285/1220 2234/1281/1216 91/1284/1219\nf 2226/1276/1211 2236/1286/1221 562/1261/1196\nf 2218/1265/1200 562/1261/1196 2236/1286/1221\nf 2233/1282/1217 567/1287/1222 2236/1286/1221\nf 2235/1288/1223 2236/1286/1221 567/1287/1222\nf 80/1116/1055 2125/1135/1074 2228/1278/1213\nf 2239/1289/1224 2228/1278/1213 2125/1135/1074\nf 2239/1289/1224 2237/1290/1225 2238/1291/1226\nf 571/1292/1227 2238/1291/1226 2237/1290/1225\nf 539/1136/1075 2122/1132/1071 2237/1290/1225\nf 2242/1293/1228 2237/1290/1225 2122/1132/1071\nf 2242/1293/1228 2240/1294/1229 2241/1295/1230\nf 569/1296/1231 2241/1295/1230 2240/1294/1229\nf 571/1292/1227 2241/1295/1230 2245/1297/1232\nf 2246/1298/1233 2245/1297/1232 2241/1295/1230\nf 2246/1298/1233 2243/1299/1234 2244/1300/1235\nf 92/1301/1236 2244/1300/1235 2243/1299/1234\nf 566/1279/1214 2238/1291/1226 2231/1283/1218\nf 2248/1302/1237 2231/1283/1218 2238/1291/1226\nf 2248/1302/1237 2245/1297/1232 2247/1303/1238\nf 570/1304/1239 2247/1303/1238 2245/1297/1232\nf 81/1133/1072 2137/1151/1090 2240/1294/1229\nf 2251/1305/1240 2240/1294/1229 2137/1151/1090\nf 2251/1305/1240 2249/1306/1241 2250/1307/1242\nf 574/1308/1243 2250/1307/1242 2249/1306/1241\nf 542/1152/1091 2134/1148/1087 2249/1306/1241\nf 2254/1309/1244 2249/1306/1241 2134/1148/1087\nf 2252/1310/1245 572/1311/1246 2254/1309/1244\nf 2253/1312/1247 2254/1309/1244 572/1311/1246\nf 2253/1312/1247 2258/1313/1248 574/1308/1243\nf 2257/1314/1249 574/1308/1243 2258/1313/1248\nf 2255/1315/1250 93/1316/1251 2258/1313/1248\nf 2256/1317/1252 2258/1313/1248 93/1316/1251\nf 569/1296/1231 2250/1307/1242 2243/1299/1234\nf 2260/1318/1253 2243/1299/1234 2250/1307/1242\nf 2257/1314/1249 573/1319/1254 2260/1318/1253\nf 2259/1320/1255 2260/1318/1253 573/1319/1254\nf 2149/1167/1106 2263/1321/1256 82/1149/1088\nf 2252/1310/1245 82/1149/1088 2263/1321/1256\nf 2261/1322/1257 577/1323/1258 2263/1321/1256\nf 2262/1324/1259 2263/1321/1256 577/1323/1258\nf 2146/1165/1104 2266/1325/1260 545/1168/1107\nf 2261/1322/1257 545/1168/1107 2266/1325/1260\nf 2264/1326/1261 575/1327/1262 2266/1325/1260\nf 2265/1328/1263 2266/1325/1260 575/1327/1262\nf 2265/1328/1263 2270/1329/1264 577/1323/1258\nf 2269/1330/1265 577/1323/1258 2270/1329/1264\nf 2267/1331/1266 94/1332/1267 2270/1329/1264\nf 2268/1333/1268 2270/1329/1264 94/1332/1267\nf 2262/1324/1259 2272/1334/1269 572/1311/1246\nf 2255/1315/1250 572/1311/1246 2272/1334/1269\nf 2269/1330/1265 576/1335/1270 2272/1334/1269\nf 2271/1336/1271 2272/1334/1269 576/1335/1270\nf 2161/1188/1123 2275/1337/1272 83/1338/1103\nf 2264/1339/1261 83/1338/1103 2275/1337/1272\nf 2273/1340/1273 580/1341/1274 2275/1337/1272\nf 2274/1342/1275 2275/1337/1272 580/1341/1274\nf 2158/1183/1120 2278/1343/1276 548/1187/1122\nf 2273/1340/1273 548/1187/1122 2278/1343/1276\nf 2276/1344/1277 578/1345/1278 2278/1343/1276\nf 2277/1346/1279 2278/1343/1276 578/1345/1278\nf 2277/1346/1279 2282/1347/1280 580/1341/1274\nf 2281/1348/1281 580/1341/1274 2282/1347/1280\nf 2279/1349/1282 95/1350/1283 2282/1347/1280\nf 2280/1351/1284 2282/1347/1280 95/1350/1283\nf 2274/1342/1275 2284/1352/1285 575/1353/1262\nf 2267/1354/1266 575/1353/1262 2284/1352/1285\nf 2284/1352/1285 2281/1348/1281 2283/1355/1286\nf 579/1356/1287 2283/1355/1286 2281/1348/1281\nf 84/1182/1119 2173/1203/1138 2276/1344/1277\nf 2287/1357/1288 2276/1344/1277 2173/1203/1138\nf 2287/1357/1288 2285/1358/1289 2286/1359/1290\nf 583/1360/1291 2286/1359/1290 2285/1358/1289\nf 2170/1201/1136 2290/1361/1292 551/1204/1139\nf 2285/1358/1289 551/1204/1139 2290/1361/1292\nf 2288/1362/1293 581/1363/1294 2290/1361/1292\nf 2289/1364/1295 2290/1361/1292 581/1363/1294\nf 2289/1364/1295 2294/1365/1296 583/1360/1291\nf 2293/1366/1297 583/1360/1291 2294/1365/1296\nf 2291/1367/1298 96/1368/1299 2294/1365/1296\nf 2292/1369/1300 2294/1365/1296 96/1368/1299\nf 578/1345/1278 2286/1359/1290 2279/1349/1282\nf 2296/1370/1301 2279/1349/1282 2286/1359/1290\nf 2296/1370/1301 2293/1366/1297 2295/1371/1302\nf 582/1372/1303 2295/1371/1302 2293/1366/1297\nf 85/1200/1135 2185/1219/1154 2288/1362/1293\nf 2299/1373/1304 2288/1362/1293 2185/1219/1154\nf 2299/1373/1304 2297/1374/1305 2298/1375/1306\nf 586/1376/1307 2298/1375/1306 2297/1374/1305\nf 2182/1217/1152 2302/1377/1308 554/1220/1155\nf 2297/1374/1305 554/1220/1155 2302/1377/1308\nf 2300/1378/1309 584/1379/1310 2302/1377/1308\nf 2301/1380/1311 2302/1377/1308 584/1379/1310\nf 2301/1380/1311 2306/1381/1312 586/1376/1307\nf 2305/1382/1313 586/1376/1307 2306/1381/1312\nf 2303/1383/1314 97/1384/1315 2306/1381/1312\nf 2304/1385/1316 2306/1381/1312 97/1384/1315\nf 581/1363/1294 2298/1375/1306 2291/1367/1298\nf 2308/1386/1317 2291/1367/1298 2298/1375/1306\nf 2308/1386/1317 2305/1382/1313 2307/1387/1318\nf 585/1388/1319 2307/1387/1318 2305/1382/1313\nf 86/1216/1151 2197/1236/1171 2300/1378/1309\nf 2311/1389/1320 2300/1378/1309 2197/1236/1171\nf 2309/1390/1321 589/1391/1322 2311/1389/1320\nf 2310/1392/1323 2311/1389/1320 589/1391/1322\nf 2194/1233/1168 2314/1393/1324 557/1235/1170\nf 2309/1390/1321 557/1235/1170 2314/1393/1324\nf 2312/1394/1325 587/1395/1326 2314/1393/1324\nf 2313/1396/1327 2314/1393/1324 587/1395/1326\nf 2313/1396/1327 2318/1397/1328 589/1391/1322\nf 2317/1398/1329 589/1391/1322 2318/1397/1328\nf 2315/1399/1330 98/1400/1331 2318/1397/1328\nf 2316/1401/1332 2318/1397/1328 98/1400/1331\nf 584/1379/1310 2310/1392/1323 2303/1383/1314\nf 2320/1402/1333 2303/1383/1314 2310/1392/1323\nf 2320/1402/1333 2317/1398/1329 2319/1403/1334\nf 588/1404/1335 2319/1403/1334 2317/1398/1329\nf 2209/1252/1187 2323/1405/1336 87/1232/1167\nf 2312/1394/1325 87/1232/1167 2323/1405/1336\nf 2321/1406/1337 592/1407/1338 2323/1405/1336\nf 2322/1408/1339 2323/1405/1336 592/1407/1338\nf 2206/1249/1184 2326/1409/1340 560/1251/1186\nf 2321/1406/1337 560/1251/1186 2326/1409/1340\nf 2324/1410/1341 590/1411/1342 2326/1409/1340\nf 2325/1412/1343 2326/1409/1340 590/1411/1342\nf 2325/1412/1343 2330/1413/1344 592/1407/1338\nf 2329/1414/1345 592/1407/1338 2330/1413/1344\nf 2327/1415/1346 99/1416/1347 2330/1413/1344\nf 2328/1417/1348 2330/1413/1344 99/1416/1347\nf 2322/1408/1339 2332/1418/1349 587/1395/1326\nf 2315/1399/1330 587/1395/1326 2332/1418/1349\nf 2332/1418/1349 2329/1414/1345 2331/1419/1350\nf 591/1420/1351 2331/1419/1350 2329/1414/1345\nf 2222/1272/1207 2336/1421/1352 89/1422/1353\nf 2335/1423/1354 89/1422/1353 2336/1421/1352\nf 2336/1421/1352 2333/1424/1355 2334/1425/1356\nf 596/1426/1357 2334/1425/1356 2333/1424/1355\nf 2219/1267/1202 2339/1427/1358 563/1271/1206\nf 2333/1424/1355 563/1271/1206 2339/1427/1358\nf 2339/1427/1358 2337/1428/1359 2338/1429/1360\nf 593/1430/1361 2338/1429/1360 2337/1428/1359\nf 596/1426/1357 2338/1429/1360 2342/1431/1362\nf 2343/1432/1363 2342/1431/1362 2338/1429/1360\nf 2343/1432/1363 2340/1433/1364 2341/1434/1365\nf 101/1435/1366 2341/1434/1365 2340/1433/1364\nf 595/1436/1367 2334/1425/1356 2345/1437/1368\nf 2346/1438/1369 2345/1437/1368 2334/1425/1356\nf 2346/1438/1369 2342/1431/1362 2344/1439/1370\nf 594/1440/1371 2344/1439/1370 2342/1431/1362\nf 2235/1288/1223 2349/1441/1372 90/1266/1201\nf 2337/1428/1359 90/1266/1201 2349/1441/1372\nf 2349/1441/1372 2347/1442/1373 2348/1443/1374\nf 599/1444/1375 2348/1443/1374 2347/1442/1373\nf 2232/1285/1220 2352/1445/1376 567/1287/1222\nf 2347/1442/1373 567/1287/1222 2352/1445/1376\nf 2352/1445/1376 2350/1446/1377 2351/1447/1378\nf 597/1448/1379 2351/1447/1378 2350/1446/1377\nf 599/1444/1375 2351/1447/1378 2355/1449/1380\nf 2356/1450/1381 2355/1449/1380 2351/1447/1378\nf 2356/1450/1381 2353/1451/1382 2354/1452/1383\nf 102/1453/1384 2354/1452/1383 2353/1451/1382\nf 593/1430/1361 2348/1443/1374 2340/1433/1364\nf 2358/1454/1385 2340/1433/1364 2348/1443/1374\nf 2358/1454/1385 2355/1449/1380 2357/1455/1386\nf 598/1456/1387 2357/1455/1386 2355/1449/1380\nf 91/1284/1219 2247/1303/1238 2350/1446/1377\nf 2361/1457/1388 2350/1446/1377 2247/1303/1238\nf 2361/1457/1388 2359/1458/1389 2360/1459/1390\nf 602/1460/1391 2360/1459/1390 2359/1458/1389\nf 570/1304/1239 2244/1300/1235 2359/1458/1389\nf 2364/1461/1392 2359/1458/1389 2244/1300/1235\nf 2364/1461/1392 2362/1462/1393 2363/1463/1394\nf 600/1464/1395 2363/1463/1394 2362/1462/1393\nf 602/1460/1391 2363/1463/1394 2367/1465/1396\nf 2368/1466/1397 2367/1465/1396 2363/1463/1394\nf 2368/1466/1397 2365/1467/1398 2366/1468/1399\nf 103/1469/1400 2366/1468/1399 2365/1467/1398\nf 597/1448/1379 2360/1459/1390 2353/1451/1382\nf 2370/1470/1401 2353/1451/1382 2360/1459/1390\nf 2370/1470/1401 2367/1465/1396 2369/1471/1402\nf 601/1472/1403 2369/1471/1402 2367/1465/1396\nf 2259/1320/1255 2373/1473/1404 92/1301/1236\nf 2362/1462/1393 92/1301/1236 2373/1473/1404\nf 2373/1473/1404 2371/1474/1405 2372/1475/1406\nf 605/1476/1407 2372/1475/1406 2371/1474/1405\nf 2256/1317/1252 2376/1477/1408 573/1319/1254\nf 2371/1474/1405 573/1319/1254 2376/1477/1408\nf 2376/1477/1408 2374/1478/1409 2375/1479/1410\nf 603/1480/1411 2375/1479/1410 2374/1478/1409\nf 605/1476/1407 2375/1479/1410 2379/1481/1412\nf 2380/1482/1413 2379/1481/1412 2375/1479/1410\nf 2380/1482/1413 2377/1483/1414 2378/1484/1415\nf 104/1485/1416 2378/1484/1415 2377/1483/1414\nf 600/1464/1395 2372/1475/1406 2365/1467/1398\nf 2382/1486/1417 2365/1467/1398 2372/1475/1406\nf 2382/1486/1417 2379/1481/1412 2381/1487/1418\nf 604/1488/1419 2381/1487/1418 2379/1481/1412\nf 2271/1336/1271 2385/1489/1420 93/1316/1251\nf 2374/1478/1409 93/1316/1251 2385/1489/1420\nf 2385/1489/1420 2383/1490/1421 2384/1491/1422\nf 608/1492/1423 2384/1491/1422 2383/1490/1421\nf 2268/1333/1268 2388/1493/1424 576/1335/1270\nf 2383/1490/1421 576/1335/1270 2388/1493/1424\nf 2388/1493/1424 2386/1494/1425 2387/1495/1426\nf 606/1496/1427 2387/1495/1426 2386/1494/1425\nf 608/1492/1423 2387/1495/1426 2391/1497/1428\nf 2392/1498/1429 2391/1497/1428 2387/1495/1426\nf 2392/1498/1429 2389/1499/1430 2390/1500/1431\nf 105/1501/1432 2390/1500/1431 2389/1499/1430\nf 603/1480/1411 2384/1491/1422 2377/1483/1414\nf 2394/1502/1433 2377/1483/1414 2384/1491/1422\nf 2394/1502/1433 2391/1497/1428 2393/1503/1434\nf 607/1504/1435 2393/1503/1434 2391/1497/1428\nf 94/1505/1267 2283/1355/1286 2386/1506/1425\nf 2397/1507/1436 2386/1506/1425 2283/1355/1286\nf 2397/1507/1436 2395/1508/1437 2396/1509/1438\nf 611/1510/1439 2396/1509/1438 2395/1508/1437\nf 2280/1351/1284 2400/1511/1440 579/1356/1287\nf 2395/1508/1437 579/1356/1287 2400/1511/1440\nf 2400/1511/1440 2398/1512/1441 2399/1513/1442\nf 609/1514/1443 2399/1513/1442 2398/1512/1441\nf 611/1510/1439 2399/1513/1442 2403/1515/1444\nf 2404/1516/1445 2403/1515/1444 2399/1513/1442\nf 2404/1516/1445 2401/1517/1446 2402/1518/1447\nf 106/1519/1448 2402/1518/1447 2401/1517/1446\nf 606/1520/1427 2396/1509/1438 2389/1521/1430\nf 2406/1522/1449 2389/1521/1430 2396/1509/1438\nf 2406/1522/1449 2403/1515/1444 2405/1523/1450\nf 610/1524/1451 2405/1523/1450 2403/1515/1444\nf 95/1350/1283 2295/1371/1302 2398/1512/1441\nf 2409/1525/1452 2398/1512/1441 2295/1371/1302\nf 2409/1525/1452 2407/1526/1453 2408/1527/1454\nf 614/1528/1455 2408/1527/1454 2407/1526/1453\nf 2292/1369/1300 2412/1529/1456 582/1372/1303\nf 2407/1526/1453 582/1372/1303 2412/1529/1456\nf 2412/1529/1456 2410/1530/1457 2411/1531/1458\nf 612/1532/1459 2411/1531/1458 2410/1530/1457\nf 614/1528/1455 2411/1531/1458 2415/1533/1460\nf 2416/1534/1461 2415/1533/1460 2411/1531/1458\nf 2416/1534/1461 2413/1535/1462 2414/1536/1463\nf 107/1537/1464 2414/1536/1463 2413/1535/1462\nf 609/1514/1443 2408/1527/1454 2401/1517/1446\nf 2418/1538/1465 2401/1517/1446 2408/1527/1454\nf 2418/1538/1465 2415/1533/1460 2417/1539/1466\nf 613/1540/1467 2417/1539/1466 2415/1533/1460\nf 96/1368/1299 2307/1387/1318 2410/1530/1457\nf 2421/1541/1468 2410/1530/1457 2307/1387/1318\nf 2421/1541/1468 2419/1542/1469 2420/1543/1470\nf 617/1544/1471 2420/1543/1470 2419/1542/1469\nf 2304/1385/1316 2424/1545/1472 585/1388/1319\nf 2419/1542/1469 585/1388/1319 2424/1545/1472\nf 2424/1545/1472 2422/1546/1473 2423/1547/1474\nf 615/1548/1475 2423/1547/1474 2422/1546/1473\nf 617/1544/1471 2423/1547/1474 2427/1549/1476\nf 2428/1550/1477 2427/1549/1476 2423/1547/1474\nf 2428/1550/1477 2425/1551/1478 2426/1552/1479\nf 108/1553/1480 2426/1552/1479 2425/1551/1478\nf 612/1532/1459 2420/1543/1470 2413/1535/1462\nf 2430/1554/1481 2413/1535/1462 2420/1543/1470\nf 2430/1554/1481 2427/1549/1476 2429/1555/1482\nf 616/1556/1483 2429/1555/1482 2427/1549/1476\nf 97/1384/1315 2319/1403/1334 2422/1546/1473\nf 2433/1557/1484 2422/1546/1473 2319/1403/1334\nf 2433/1557/1484 2431/1558/1485 2432/1559/1486\nf 620/1560/1487 2432/1559/1486 2431/1558/1485\nf 2316/1401/1332 2436/1561/1488 588/1404/1335\nf 2431/1558/1485 588/1404/1335 2436/1561/1488\nf 2436/1561/1488 2434/1562/1489 2435/1563/1490\nf 618/1564/1491 2435/1563/1490 2434/1562/1489\nf 620/1560/1487 2435/1563/1490 2439/1565/1492\nf 2440/1566/1493 2439/1565/1492 2435/1563/1490\nf 2440/1566/1493 2437/1567/1494 2438/1568/1495\nf 109/1569/1496 2438/1568/1495 2437/1567/1494\nf 615/1548/1475 2432/1559/1486 2425/1551/1478\nf 2442/1570/1497 2425/1551/1478 2432/1559/1486\nf 2442/1570/1497 2439/1565/1492 2441/1571/1498\nf 619/1572/1499 2441/1571/1498 2439/1565/1492\nf 98/1400/1331 2331/1419/1350 2434/1562/1489\nf 2445/1573/1500 2434/1562/1489 2331/1419/1350\nf 2445/1573/1500 2443/1574/1501 2444/1575/1502\nf 623/1576/1503 2444/1575/1502 2443/1574/1501\nf 2328/1417/1348 2448/1577/1504 591/1420/1351\nf 2443/1574/1501 591/1420/1351 2448/1577/1504\nf 2448/1577/1504 2446/1578/1505 2447/1579/1506\nf 621/1580/1507 2447/1579/1506 2446/1578/1505\nf 623/1576/1503 2447/1579/1506 2451/1581/1508\nf 2452/1582/1509 2451/1581/1508 2447/1579/1506\nf 2452/1582/1509 2449/1583/1510 2450/1584/1511\nf 110/1585/1512 2450/1584/1511 2449/1583/1510\nf 618/1564/1491 2444/1575/1502 2437/1567/1494\nf 2454/1586/1513 2437/1567/1494 2444/1575/1502\nf 2454/1586/1513 2451/1581/1508 2453/1587/1514\nf 622/1588/1515 2453/1587/1514 2451/1581/1508\nf 100/1589/1516 2344/1439/1370 2457/1590/1517\nf 2458/1591/1518 2457/1590/1517 2344/1439/1370\nf 2458/1591/1518 2455/1592/1519 2456/1593/1520\nf 627/1594/1521 2456/1593/1520 2455/1592/1519\nf 594/1440/1371 2341/1434/1365 2455/1592/1519\nf 2461/1595/1522 2455/1592/1519 2341/1434/1365\nf 2461/1595/1522 2459/1596/1523 2460/1597/1524\nf 624/1598/1525 2460/1597/1524 2459/1596/1523\nf 627/1594/1521 2460/1597/1524 2464/1599/1526\nf 2465/1600/1527 2464/1599/1526 2460/1597/1524\nf 2465/1600/1527 2462/1601/1528 2463/1602/1529\nf 112/1603/1530 2463/1602/1529 2462/1601/1528\nf 626/1604/1531 2456/1593/1520 2467/1605/1532\nf 2468/1606/1533 2467/1605/1532 2456/1593/1520\nf 2468/1606/1533 2464/1599/1526 2466/1607/1534\nf 625/1608/1535 2466/1607/1534 2464/1599/1526\nf 101/1435/1366 2357/1455/1386 2459/1596/1523\nf 2471/1609/1536 2459/1596/1523 2357/1455/1386\nf 2471/1609/1536 2469/1610/1537 2470/1611/1538\nf 630/1612/1539 2470/1611/1538 2469/1610/1537\nf 598/1456/1387 2354/1452/1383 2469/1610/1537\nf 2474/1613/1540 2469/1610/1537 2354/1452/1383\nf 2474/1613/1540 2472/1614/1541 2473/1615/1542\nf 628/1616/1543 2473/1615/1542 2472/1614/1541\nf 630/1612/1539 2473/1615/1542 2477/1617/1544\nf 2478/1618/1545 2477/1617/1544 2473/1615/1542\nf 2478/1618/1545 2475/1619/1546 2476/1620/1547\nf 113/1621/1548 2476/1620/1547 2475/1619/1546\nf 624/1598/1525 2470/1611/1538 2462/1601/1528\nf 2480/1622/1549 2462/1601/1528 2470/1611/1538\nf 2480/1622/1549 2477/1617/1544 2479/1623/1550\nf 629/1624/1551 2479/1623/1550 2477/1617/1544\nf 102/1453/1384 2369/1471/1402 2472/1614/1541\nf 2483/1625/1552 2472/1614/1541 2369/1471/1402\nf 2483/1625/1552 2481/1626/1553 2482/1627/1554\nf 633/1628/1555 2482/1627/1554 2481/1626/1553\nf 601/1472/1403 2366/1468/1399 2481/1626/1553\nf 2486/1629/1556 2481/1626/1553 2366/1468/1399\nf 2486/1629/1556 2484/1630/1557 2485/1631/1558\nf 631/1632/1559 2485/1631/1558 2484/1630/1557\nf 633/1628/1555 2485/1631/1558 2489/1633/1560\nf 2490/1634/1561 2489/1633/1560 2485/1631/1558\nf 2490/1634/1561 2487/1635/1562 2488/1636/1563\nf 114/1637/1564 2488/1636/1563 2487/1635/1562\nf 628/1616/1543 2482/1627/1554 2475/1619/1546\nf 2492/1638/1565 2475/1619/1546 2482/1627/1554\nf 2492/1638/1565 2489/1633/1560 2491/1639/1566\nf 632/1640/1567 2491/1639/1566 2489/1633/1560\nf 103/1469/1400 2381/1487/1418 2484/1630/1557\nf 2495/1641/1568 2484/1630/1557 2381/1487/1418\nf 2495/1641/1568 2493/1642/1569 2494/1643/1570\nf 636/1644/1571 2494/1643/1570 2493/1642/1569\nf 604/1488/1419 2378/1484/1415 2493/1642/1569\nf 2498/1645/1572 2493/1642/1569 2378/1484/1415\nf 2498/1645/1572 2496/1646/1573 2497/1647/1574\nf 634/1648/1575 2497/1647/1574 2496/1646/1573\nf 636/1644/1571 2497/1647/1574 2501/1649/1576\nf 2502/1650/1577 2501/1649/1576 2497/1647/1574\nf 2502/1650/1577 2499/1651/1578 2500/1652/1579\nf 115/1653/1580 2500/1652/1579 2499/1651/1578\nf 631/1632/1559 2494/1643/1570 2487/1635/1562\nf 2504/1654/1581 2487/1635/1562 2494/1643/1570\nf 2504/1654/1581 2501/1649/1576 2503/1655/1582\nf 635/1656/1583 2503/1655/1582 2501/1649/1576\nf 104/1485/1416 2393/1503/1434 2496/1646/1573\nf 2507/1657/1584 2496/1646/1573 2393/1503/1434\nf 2507/1657/1584 2505/1658/1585 2506/1659/1586\nf 639/1660/1587 2506/1659/1586 2505/1658/1585\nf 607/1504/1435 2390/1500/1431 2505/1658/1585\nf 2510/1661/1588 2505/1658/1585 2390/1500/1431\nf 2510/1661/1588 2508/1662/1589 2509/1663/1590\nf 637/1664/1591 2509/1663/1590 2508/1662/1589\nf 639/1660/1587 2509/1663/1590 2513/1665/1592\nf 2514/1666/1593 2513/1665/1592 2509/1663/1590\nf 2514/1666/1593 2511/1667/1594 2512/1668/1595\nf 116/1669/1596 2512/1668/1595 2511/1667/1594\nf 634/1648/1575 2506/1659/1586 2499/1651/1578\nf 2516/1670/1597 2499/1651/1578 2506/1659/1586\nf 2516/1670/1597 2513/1665/1592 2515/1671/1598\nf 638/1672/1599 2515/1671/1598 2513/1665/1592\nf 105/1673/1432 2405/1523/1450 2508/1674/1589\nf 2519/1675/1600 2508/1674/1589 2405/1523/1450\nf 2519/1675/1600 2517/1676/1601 2518/1677/1602\nf 642/1678/1603 2518/1677/1602 2517/1676/1601\nf 610/1524/1451 2402/1518/1447 2517/1676/1601\nf 2522/1679/1604 2517/1676/1601 2402/1518/1447\nf 2522/1679/1604 2520/1680/1605 2521/1681/1606\nf 640/1682/1607 2521/1681/1606 2520/1680/1605\nf 642/1678/1603 2521/1681/1606 2525/1683/1608\nf 2526/1684/1609 2525/1683/1608 2521/1681/1606\nf 2526/1684/1609 2523/1685/1610 2524/1686/1611\nf 117/1687/1612 2524/1686/1611 2523/1685/1610\nf 637/1688/1591 2518/1677/1602 2511/1689/1594\nf 2528/1690/1613 2511/1689/1594 2518/1677/1602\nf 2528/1690/1613 2525/1683/1608 2527/1691/1614\nf 641/1692/1615 2527/1691/1614 2525/1683/1608\nf 106/1519/1448 2417/1539/1466 2520/1680/1605\nf 2531/1693/1616 2520/1680/1605 2417/1539/1466\nf 2531/1693/1616 2529/1694/1617 2530/1695/1618\nf 645/1696/1619 2530/1695/1618 2529/1694/1617\nf 613/1540/1467 2414/1536/1463 2529/1694/1617\nf 2534/1697/1620 2529/1694/1617 2414/1536/1463\nf 2534/1697/1620 2532/1698/1621 2533/1699/1622\nf 643/1700/1623 2533/1699/1622 2532/1698/1621\nf 645/1696/1619 2533/1699/1622 2537/1701/1624\nf 2538/1702/1625 2537/1701/1624 2533/1699/1622\nf 2538/1702/1625 2535/1703/1626 2536/1704/1627\nf 118/1705/1628 2536/1704/1627 2535/1703/1626\nf 640/1682/1607 2530/1695/1618 2523/1685/1610\nf 2540/1706/1629 2523/1685/1610 2530/1695/1618\nf 2540/1706/1629 2537/1701/1624 2539/1707/1630\nf 644/1708/1631 2539/1707/1630 2537/1701/1624\nf 107/1537/1464 2429/1555/1482 2532/1698/1621\nf 2543/1709/1632 2532/1698/1621 2429/1555/1482\nf 2543/1709/1632 2541/1710/1633 2542/1711/1634\nf 648/1712/1635 2542/1711/1634 2541/1710/1633\nf 616/1556/1483 2426/1552/1479 2541/1710/1633\nf 2546/1713/1636 2541/1710/1633 2426/1552/1479\nf 2546/1713/1636 2544/1714/1637 2545/1715/1638\nf 646/1716/1639 2545/1715/1638 2544/1714/1637\nf 648/1712/1635 2545/1715/1638 2549/1717/1640\nf 2550/1718/1641 2549/1717/1640 2545/1715/1638\nf 2550/1718/1641 2547/1719/1642 2548/1720/1643\nf 119/1721/1644 2548/1720/1643 2547/1719/1642\nf 643/1700/1623 2542/1711/1634 2535/1703/1626\nf 2552/1722/1645 2535/1703/1626 2542/1711/1634\nf 2552/1722/1645 2549/1717/1640 2551/1723/1646\nf 647/1724/1647 2551/1723/1646 2549/1717/1640\nf 108/1553/1480 2441/1571/1498 2544/1714/1637\nf 2555/1725/1648 2544/1714/1637 2441/1571/1498\nf 2555/1725/1648 2553/1726/1649 2554/1727/1650\nf 651/1728/1651 2554/1727/1650 2553/1726/1649\nf 619/1572/1499 2438/1568/1495 2553/1726/1649\nf 2558/1729/1652 2553/1726/1649 2438/1568/1495\nf 2558/1729/1652 2556/1730/1653 2557/1731/1654\nf 649/1732/1655 2557/1731/1654 2556/1730/1653\nf 651/1728/1651 2557/1731/1654 2561/1733/1656\nf 2562/1734/1657 2561/1733/1656 2557/1731/1654\nf 2562/1734/1657 2559/1735/1658 2560/1736/1659\nf 120/1737/1660 2560/1736/1659 2559/1735/1658\nf 646/1716/1639 2554/1727/1650 2547/1719/1642\nf 2564/1738/1661 2547/1719/1642 2554/1727/1650\nf 2564/1738/1661 2561/1733/1656 2563/1739/1662\nf 650/1740/1663 2563/1739/1662 2561/1733/1656\nf 109/1569/1496 2453/1587/1514 2556/1730/1653\nf 2567/1741/1664 2556/1730/1653 2453/1587/1514\nf 2567/1741/1664 2565/1742/1665 2566/1743/1666\nf 654/1744/1667 2566/1743/1666 2565/1742/1665\nf 622/1588/1515 2450/1584/1511 2565/1742/1665\nf 2570/1745/1668 2565/1742/1665 2450/1584/1511\nf 2570/1745/1668 2568/1746/1669 2569/1747/1670\nf 652/1748/1671 2569/1747/1670 2568/1746/1669\nf 654/1744/1667 2569/1747/1670 2573/1749/1672\nf 2574/1750/1673 2573/1749/1672 2569/1747/1670\nf 2574/1750/1673 2571/1751/1674 2572/1752/1675\nf 121/1753/1676 2572/1752/1675 2571/1751/1674\nf 649/1732/1655 2566/1743/1666 2559/1735/1658\nf 2576/1754/1677 2559/1735/1658 2566/1743/1666\nf 2576/1754/1677 2573/1749/1672 2575/1755/1678\nf 653/1756/1679 2575/1755/1678 2573/1749/1672\nf 2466/1607/1534 2580/1757/1680 111/1758/1681\nf 2579/1759/1682 111/1758/1681 2580/1757/1680\nf 2577/1760/1683 658/1761/1684 2580/1757/1680\nf 2578/1762/1685 2580/1757/1680 658/1761/1684\nf 2463/1602/1529 2583/1763/1686 625/1608/1535\nf 2577/1760/1683 625/1608/1535 2583/1763/1686\nf 2581/1764/1687 655/1765/1688 2583/1763/1686\nf 2582/1766/1689 2583/1763/1686 655/1765/1688\nf 2582/1766/1689 2587/1767/1690 658/1761/1684\nf 2586/1768/1691 658/1761/1684 2587/1767/1690\nf 2584/1769/1692 123/1770/1693 2587/1767/1690\nf 2585/1771/1694 2587/1767/1690 123/1770/1693\nf 2578/1762/1685 2590/1772/1695 657/1773/1696\nf 2589/1774/1697 657/1773/1696 2590/1772/1695\nf 2586/1768/1691 656/1775/1698 2590/1772/1695\nf 2588/1776/1699 2590/1772/1695 656/1775/1698\nf 112/1603/1530 2479/1623/1550 2581/1764/1687\nf 2593/1777/1700 2581/1764/1687 2479/1623/1550\nf 2591/1778/1701 661/1779/1702 2593/1777/1700\nf 2592/1780/1703 2593/1777/1700 661/1779/1702\nf 2476/1620/1547 2596/1781/1704 629/1624/1551\nf 2591/1778/1701 629/1624/1551 2596/1781/1704\nf 2594/1782/1705 659/1783/1706 2596/1781/1704\nf 2595/1784/1707 2596/1781/1704 659/1783/1706\nf 2595/1784/1707 2600/1785/1708 661/1779/1702\nf 2599/1786/1709 661/1779/1702 2600/1785/1708\nf 2597/1787/1710 124/1788/1711 2600/1785/1708\nf 2598/1789/1712 2600/1785/1708 124/1788/1711\nf 2592/1780/1703 2602/1790/1713 655/1765/1688\nf 2584/1769/1692 655/1765/1688 2602/1790/1713\nf 2599/1786/1709 660/1791/1714 2602/1790/1713\nf 2601/1792/1715 2602/1790/1713 660/1791/1714\nf 113/1621/1548 2491/1639/1566 2594/1782/1705\nf 2605/1793/1716 2594/1782/1705 2491/1639/1566\nf 2603/1794/1717 664/1795/1718 2605/1793/1716\nf 2604/1796/1719 2605/1793/1716 664/1795/1718\nf 2488/1636/1563 2608/1797/1720 632/1640/1567\nf 2603/1794/1717 632/1640/1567 2608/1797/1720\nf 2606/1798/1721 662/1799/1722 2608/1797/1720\nf 2607/1800/1723 2608/1797/1720 662/1799/1722\nf 2607/1800/1723 2612/1801/1724 664/1795/1718\nf 2611/1802/1725 664/1795/1718 2612/1801/1724\nf 2609/1803/1726 125/1804/1727 2612/1801/1724\nf 2610/1805/1728 2612/1801/1724 125/1804/1727\nf 2604/1796/1719 2614/1806/1729 659/1783/1706\nf 2597/1787/1710 659/1783/1706 2614/1806/1729\nf 2611/1802/1725 663/1807/1730 2614/1806/1729\nf 2613/1808/1731 2614/1806/1729 663/1807/1730\nf 114/1637/1564 2503/1655/1582 2606/1798/1721\nf 2617/1809/1732 2606/1798/1721 2503/1655/1582\nf 2617/1809/1732 2615/1810/1733 2616/1811/1734\nf 667/1812/1735 2616/1811/1734 2615/1810/1733\nf 2500/1652/1579 2620/1813/1736 635/1656/1583\nf 2615/1810/1733 635/1656/1583 2620/1813/1736\nf 2618/1814/1737 665/1815/1738 2620/1813/1736\nf 2619/1816/1739 2620/1813/1736 665/1815/1738\nf 2619/1816/1739 2624/1817/1740 667/1812/1735\nf 2623/1818/1741 667/1812/1735 2624/1817/1740\nf 2621/1819/1742 126/1820/1743 2624/1817/1740\nf 2622/1821/1744 2624/1817/1740 126/1820/1743\nf 662/1799/1722 2616/1811/1734 2609/1803/1726\nf 2626/1822/1745 2609/1803/1726 2616/1811/1734\nf 2623/1818/1741 666/1823/1746 2626/1822/1745\nf 2625/1824/1747 2626/1822/1745 666/1823/1746\nf 115/1653/1580 2515/1671/1598 2618/1814/1737\nf 2629/1825/1748 2618/1814/1737 2515/1671/1598\nf 2629/1825/1748 2627/1826/1749 2628/1827/1750\nf 670/1828/1751 2628/1827/1750 2627/1826/1749\nf 2512/1668/1595 2632/1829/1752 638/1672/1599\nf 2627/1826/1749 638/1672/1599 2632/1829/1752\nf 2630/1830/1753 668/1831/1754 2632/1829/1752\nf 2631/1832/1755 2632/1829/1752 668/1831/1754\nf 2631/1832/1755 2636/1833/1756 670/1828/1751\nf 2635/1834/1757 670/1828/1751 2636/1833/1756\nf 2633/1835/1758 127/1836/1759 2636/1833/1756\nf 2634/1837/1760 2636/1833/1756 127/1836/1759\nf 665/1815/1738 2628/1827/1750 2621/1819/1742\nf 2638/1838/1761 2621/1819/1742 2628/1827/1750\nf 2638/1838/1761 2635/1834/1757 2637/1839/1762\nf 669/1840/1763 2637/1839/1762 2635/1834/1757\nf 116/1841/1596 2527/1691/1614 2630/1842/1753\nf 2641/1843/1764 2630/1842/1753 2527/1691/1614\nf 2641/1843/1764 2639/1844/1765 2640/1845/1766\nf 673/1846/1767 2640/1845/1766 2639/1844/1765\nf 2524/1686/1611 2644/1847/1768 641/1692/1615\nf 2639/1844/1765 641/1692/1615 2644/1847/1768\nf 2642/1848/1769 671/1849/1770 2644/1847/1768\nf 2643/1850/1771 2644/1847/1768 671/1849/1770\nf 2643/1850/1771 2648/1851/1772 673/1846/1767\nf 2647/1852/1773 673/1846/1767 2648/1851/1772\nf 2645/1853/1774 128/1854/1775 2648/1851/1772\nf 2646/1855/1776 2648/1851/1772 128/1854/1775\nf 668/1856/1754 2640/1845/1766 2633/1857/1758\nf 2650/1858/1777 2633/1857/1758 2640/1845/1766\nf 2650/1858/1777 2647/1852/1773 2649/1859/1778\nf 672/1860/1779 2649/1859/1778 2647/1852/1773\nf 117/1687/1612 2539/1707/1630 2642/1848/1769\nf 2653/1861/1780 2642/1848/1769 2539/1707/1630\nf 2653/1861/1780 2651/1862/1781 2652/1863/1782\nf 676/1864/1783 2652/1863/1782 2651/1862/1781\nf 2536/1704/1627 2656/1865/1784 644/1708/1631\nf 2651/1862/1781 644/1708/1631 2656/1865/1784\nf 2654/1866/1785 674/1867/1786 2656/1865/1784\nf 2655/1868/1787 2656/1865/1784 674/1867/1786\nf 2655/1868/1787 2660/1869/1788 676/1864/1783\nf 2659/1870/1789 676/1864/1783 2660/1869/1788\nf 2657/1871/1790 129/1872/1791 2660/1869/1788\nf 2658/1873/1792 2660/1869/1788 129/1872/1791\nf 671/1849/1770 2652/1863/1782 2645/1853/1774\nf 2662/1874/1793 2645/1853/1774 2652/1863/1782\nf 2662/1874/1793 2659/1870/1789 2661/1875/1794\nf 675/1876/1795 2661/1875/1794 2659/1870/1789\nf 118/1705/1628 2551/1723/1646 2654/1866/1785\nf 2665/1877/1796 2654/1866/1785 2551/1723/1646\nf 2665/1877/1796 2663/1878/1797 2664/1879/1798\nf 679/1880/1799 2664/1879/1798 2663/1878/1797\nf 2548/1720/1643 2668/1881/1800 647/1724/1647\nf 2663/1878/1797 647/1724/1647 2668/1881/1800\nf 2666/1882/1801 677/1883/1802 2668/1881/1800\nf 2667/1884/1803 2668/1881/1800 677/1883/1802\nf 2667/1884/1803 2672/1885/1804 679/1880/1799\nf 2671/1886/1805 679/1880/1799 2672/1885/1804\nf 2669/1887/1806 130/1888/1807 2672/1885/1804\nf 2670/1889/1808 2672/1885/1804 130/1888/1807\nf 674/1867/1786 2664/1879/1798 2657/1871/1790\nf 2674/1890/1809 2657/1871/1790 2664/1879/1798\nf 2674/1890/1809 2671/1886/1805 2673/1891/1810\nf 678/1892/1811 2673/1891/1810 2671/1886/1805\nf 119/1721/1644 2563/1739/1662 2666/1882/1801\nf 2677/1893/1812 2666/1882/1801 2563/1739/1662\nf 2677/1893/1812 2675/1894/1813 2676/1895/1814\nf 682/1896/1815 2676/1895/1814 2675/1894/1813\nf 2560/1736/1659 2680/1897/1816 650/1740/1663\nf 2675/1894/1813 650/1740/1663 2680/1897/1816\nf 2678/1898/1817 680/1899/1818 2680/1897/1816\nf 2679/1900/1819 2680/1897/1816 680/1899/1818\nf 2679/1900/1819 2684/1901/1820 682/1896/1815\nf 2683/1902/1821 682/1896/1815 2684/1901/1820\nf 2681/1903/1822 131/1904/1823 2684/1901/1820\nf 2682/1905/1824 2684/1901/1820 131/1904/1823\nf 677/1883/1802 2676/1895/1814 2669/1887/1806\nf 2686/1906/1825 2669/1887/1806 2676/1895/1814\nf 2686/1906/1825 2683/1902/1821 2685/1907/1826\nf 681/1908/1827 2685/1907/1826 2683/1902/1821\nf 120/1737/1660 2575/1755/1678 2678/1898/1817\nf 2689/1909/1828 2678/1898/1817 2575/1755/1678\nf 2689/1909/1828 2687/1910/1829 2688/1911/1830\nf 685/1912/1831 2688/1911/1830 2687/1910/1829\nf 2572/1752/1675 2692/1913/1832 653/1756/1679\nf 2687/1910/1829 653/1756/1679 2692/1913/1832\nf 2690/1914/1833 683/1915/1834 2692/1913/1832\nf 2691/1916/1835 2692/1913/1832 683/1915/1834\nf 2691/1916/1835 2696/1917/1836 685/1912/1831\nf 2695/1918/1837 685/1912/1831 2696/1917/1836\nf 2693/1919/1838 132/1920/1839 2696/1917/1836\nf 2694/1921/1840 2696/1917/1836 132/1920/1839\nf 680/1899/1818 2688/1911/1830 2681/1903/1822\nf 2698/1922/1841 2681/1903/1822 2688/1911/1830\nf 2698/1922/1841 2695/1918/1837 2697/1923/1842\nf 684/1924/1843 2697/1923/1842 2695/1918/1837\nf 2588/1776/1699 2702/1925/1844 122/1926/1845\nf 2701/1927/1846 122/1926/1845 2702/1925/1844\nf 2699/1928/1847 688/1929/1848 2702/1925/1844\nf 2700/1930/1849 2702/1925/1844 688/1929/1848\nf 2585/1771/1694 2705/1931/1850 656/1775/1698\nf 2699/1928/1847 656/1775/1698 2705/1931/1850\nf 2703/1932/1851 686/1933/1852 2705/1931/1850\nf 2704/1934/1853 2705/1931/1850 686/1933/1852\nf 688/1929/1848 2704/1934/1853 2707/1935/1854\nf 2708/1936/1855 2707/1935/1854 2704/1934/1853\nf 2708/1936/1855 2706/1937/1856 1342/9/9\nf 2/26/26 1342/9/9 2706/1937/1856\nf 687/1938/1857 2700/1930/1849 2709/1939/1858\nf 2710/1940/1859 2709/1939/1858 2700/1930/1849\nf 2710/1940/1859 2707/1935/1854 1337/3/3\nf 335/10/10 1337/3/3 2707/1935/1854\nf 2601/1792/1715 2713/1941/1860 123/1770/1693\nf 2703/1932/1851 123/1770/1693 2713/1941/1860\nf 2711/1942/1861 690/1943/1862 2713/1941/1860\nf 2712/1944/1863 2713/1941/1860 690/1943/1862\nf 2598/1789/1712 2716/1945/1864 660/1791/1714\nf 2711/1942/1861 660/1791/1714 2716/1945/1864\nf 2714/1946/1865 689/1947/1866 2716/1945/1864\nf 2715/1948/1867 2716/1945/1864 689/1947/1866\nf 2715/1948/1867 2719/1949/1868 690/1943/1862\nf 2718/1950/1869 690/1943/1862 2719/1949/1868\nf 2719/1949/1868 2717/1951/1870 1357/31/31\nf 3/46/46 1357/31/31 2717/1951/1870\nf 2712/1944/1863 2720/1952/1871 686/1933/1852\nf 2706/1937/1856 686/1933/1852 2720/1952/1871\nf 2720/1952/1871 2718/1950/1869 1353/25/25\nf 340/32/32 1353/25/25 2718/1950/1869\nf 2613/1808/1731 2723/1953/1872 124/1788/1711\nf 2714/1946/1865 124/1788/1711 2723/1953/1872\nf 2721/1954/1873 692/1955/1874 2723/1953/1872\nf 2722/1956/1875 2723/1953/1872 692/1955/1874\nf 2610/1805/1728 2726/1957/1876 663/1807/1730\nf 2721/1954/1873 663/1807/1730 2726/1957/1876\nf 2724/1958/1877 691/1959/1878 2726/1957/1876\nf 2725/1960/1879 2726/1957/1876 691/1959/1878\nf 2725/1960/1879 2729/1961/1880 692/1955/1874\nf 2728/1962/1881 692/1955/1874 2729/1961/1880\nf 2729/1961/1880 2727/1963/1882 1371/51/51\nf 4/66/66 1371/51/51 2727/1963/1882\nf 2722/1956/1875 2730/1964/1883 689/1947/1866\nf 2717/1951/1870 689/1947/1866 2730/1964/1883\nf 2730/1964/1883 2728/1962/1881 1367/45/45\nf 344/52/52 1367/45/45 2728/1962/1881\nf 2625/1824/1747 2733/1965/1884 125/1804/1727\nf 2724/1958/1877 125/1804/1727 2733/1965/1884\nf 2731/1966/1885 694/1967/1886 2733/1965/1884\nf 2732/1968/1887 2733/1965/1884 694/1967/1886\nf 2622/1821/1744 2736/1969/1888 666/1823/1746\nf 2731/1966/1885 666/1823/1746 2736/1969/1888\nf 2734/1970/1889 693/1971/1890 2736/1969/1888\nf 2735/1972/1891 2736/1969/1888 693/1971/1890\nf 2735/1972/1891 2739/1973/1892 694/1967/1886\nf 2738/1974/1893 694/1967/1886 2739/1973/1892\nf 2737/1975/1894 5/84/84 2739/1973/1892\nf 1385/72/72 2739/1973/1892 5/84/84\nf 2732/1968/1887 2740/1976/1895 691/1959/1878\nf 2727/1963/1882 691/1959/1878 2740/1976/1895\nf 2738/1974/1893 348/70/70 2740/1976/1895\nf 1381/65/65 2740/1976/1895 348/70/70\nf 126/1820/1743 2637/1839/1762 2734/1970/1889\nf 2743/1977/1896 2734/1970/1889 2637/1839/1762\nf 2743/1977/1896 2741/1978/1897 2742/1979/1898\nf 696/1980/1899 2742/1979/1898 2741/1978/1897\nf 2634/1837/1760 2746/1981/1900 669/1840/1763\nf 2741/1978/1897 669/1840/1763 2746/1981/1900\nf 2744/1982/1901 695/1983/1902 2746/1981/1900\nf 2745/1984/1903 2746/1981/1900 695/1983/1902\nf 2745/1984/1903 2749/1985/1904 696/1980/1899\nf 2748/1986/1905 696/1980/1899 2749/1985/1904\nf 2747/1987/1906 6/1988/104 2749/1985/1904\nf 1399/92/92 2749/1985/1904 6/1988/104\nf 2742/1979/1898 2750/1989/1907 693/1971/1890\nf 2737/1975/1894 693/1971/1890 2750/1989/1907\nf 2748/1986/1905 352/90/90 2750/1989/1907\nf 1395/86/86 2750/1989/1907 352/90/90\nf 127/1990/1759 2649/1859/1778 2744/1991/1901\nf 2753/1992/1908 2744/1991/1901 2649/1859/1778\nf 2753/1992/1908 2751/1993/1909 2752/1994/1910\nf 698/1995/1911 2752/1994/1910 2751/1993/1909\nf 2646/1855/1776 2756/1996/1912 672/1860/1779\nf 2751/1993/1909 672/1860/1779 2756/1996/1912\nf 2754/1997/1913 697/1998/1914 2756/1996/1912\nf 2755/1999/1915 2756/1996/1912 697/1998/1914\nf 2755/1999/1915 2759/2000/1916 698/1995/1911\nf 2758/2001/1917 698/1995/1911 2759/2000/1916\nf 2757/2002/1918 7/127/124 2759/2000/1916\nf 1413/112/111 2759/2000/1916 7/127/124\nf 695/2003/1902 2752/1994/1910 2747/2004/1906\nf 2760/2005/1919 2747/2004/1906 2752/1994/1910\nf 2760/2005/1919 2758/2001/1917 1409/107/106\nf 356/113/112 1409/107/106 2758/2001/1917\nf 128/1854/1775 2661/1875/1794 2754/1997/1913\nf 2763/2006/1920 2754/1997/1913 2661/1875/1794\nf 2763/2006/1920 2761/2007/1921 2762/2008/1922\nf 700/2009/1923 2762/2008/1922 2761/2007/1921\nf 2658/1873/1792 2766/2010/1924 675/1876/1795\nf 2761/2007/1921 675/1876/1795 2766/2010/1924\nf 2764/2011/1925 699/2012/1926 2766/2010/1924\nf 2765/2013/1927 2766/2010/1924 699/2012/1926\nf 2765/2013/1927 2769/2014/1928 700/2009/1923\nf 2768/2015/1929 700/2009/1923 2769/2014/1928\nf 2767/2016/1930 8/147/144 2769/2014/1928\nf 1427/134/131 2769/2014/1928 8/147/144\nf 697/1998/1914 2762/2008/1922 2757/2002/1918\nf 2770/2017/1931 2757/2002/1918 2762/2008/1922\nf 2770/2017/1931 2768/2015/1929 1423/129/126\nf 360/135/132 1423/129/126 2768/2015/1929\nf 129/1872/1791 2673/1891/1810 2764/2011/1925\nf 2773/2018/1932 2764/2011/1925 2673/1891/1810\nf 2773/2018/1932 2771/2019/1933 2772/2020/1934\nf 702/2021/1935 2772/2020/1934 2771/2019/1933\nf 2670/1889/1808 2776/2022/1936 678/1892/1811\nf 2771/2019/1933 678/1892/1811 2776/2022/1936\nf 2774/2023/1937 701/2024/1938 2776/2022/1936\nf 2775/2025/1939 2776/2022/1936 701/2024/1938\nf 2775/2025/1939 2779/2026/1940 702/2021/1935\nf 2778/2027/1941 702/2021/1935 2779/2026/1940\nf 2777/2028/1942 9/167/164 2779/2026/1940\nf 1441/154/151 2779/2026/1940 9/167/164\nf 699/2012/1926 2772/2020/1934 2767/2016/1930\nf 2780/2029/1943 2767/2016/1930 2772/2020/1934\nf 2780/2029/1943 2778/2027/1941 1437/149/146\nf 364/155/152 1437/149/146 2778/2027/1941\nf 130/1888/1807 2685/1907/1826 2774/2023/1937\nf 2783/2030/1944 2774/2023/1937 2685/1907/1826\nf 2783/2030/1944 2781/2031/1945 2782/2032/1946\nf 704/2033/1947 2782/2032/1946 2781/2031/1945\nf 2682/1905/1824 2786/2034/1948 681/1908/1827\nf 2781/2031/1945 681/1908/1827 2786/2034/1948\nf 2784/2035/1949 703/2036/1950 2786/2034/1948\nf 2785/2037/1951 2786/2034/1948 703/2036/1950\nf 2785/2037/1951 2789/2038/1952 704/2033/1947\nf 2788/2039/1953 704/2033/1947 2789/2038/1952\nf 2787/2040/1954 10/187/184 2789/2038/1952\nf 1455/174/171 2789/2038/1952 10/187/184\nf 701/2024/1938 2782/2032/1946 2777/2028/1942\nf 2790/2041/1955 2777/2028/1942 2782/2032/1946\nf 2790/2041/1955 2788/2039/1953 1451/169/166\nf 368/175/172 1451/169/166 2788/2039/1953\nf 131/1904/1823 2697/1923/1842 2784/2035/1949\nf 2793/2042/1956 2784/2035/1949 2697/1923/1842\nf 2793/2042/1956 2791/2043/1957 2792/2044/1958\nf 706/2045/1959 2792/2044/1958 2791/2043/1957\nf 2694/1921/1840 2796/2046/1960 684/1924/1843\nf 2791/2043/1957 684/1924/1843 2796/2046/1960\nf 2794/2047/1961 705/2048/1962 2796/2046/1960\nf 2795/2049/1963 2796/2046/1960 705/2048/1962\nf 2795/2049/1963 2799/2050/1964 706/2045/1959\nf 2798/2051/1965 706/2045/1959 2799/2050/1964\nf 2797/2052/1966 11/2053/1967 2799/2050/1964\nf 1469/194/191 2799/2050/1964 11/2053/1967\nf 703/2036/1950 2792/2044/1958 2787/2040/1954\nf 2800/2054/1968 2787/2040/1954 2792/2044/1958\nf 2800/2054/1968 2798/2051/1965 1465/189/186\nf 372/195/192 1465/189/186 2798/2051/1965\nf 34/581/532 1725/582/533 2803/2055/1969\nf 2804/2056/1970 2803/2055/1969 1725/582/533\nf 2804/2056/1970 2801/2057/1971 2802/2058/1972\nf 710/2059/1973 2802/2058/1972 2801/2057/1971\nf 2807/2060/1974 2801/2057/1971 1735/597/548\nf 440/596/547 1735/597/548 2801/2057/1971\nf 707/2061/1975 2806/2062/1976 2805/2063/1977\nf 2807/2060/1974 2805/2063/1977 2806/2062/1976\nf 2811/2064/1978 2810/2065/1979 2806/2062/1976\nf 710/2059/1973 2806/2062/1976 2810/2065/1979\nf 134/2066/1980 2809/2067/1981 2808/2068/1982\nf 2811/2064/1978 2808/2068/1982 2809/2067/1981\nf 709/2069/1983 2802/2058/1972 2813/2070/1984\nf 2814/2071/1985 2813/2070/1984 2802/2058/1972\nf 708/2072/1986 2812/2073/1987 2810/2065/1979\nf 2814/2071/1985 2810/2065/1979 2812/2073/1987\nf 2817/2074/1988 2805/2063/1977 1847/751/698\nf 45/750/697 1847/751/698 2805/2063/1977\nf 2817/2074/1988 2815/2075/1989 2816/2076/1990\nf 713/2077/1991 2816/2076/1990 2815/2075/1989\nf 471/765/712 1857/766/713 2815/2075/1989\nf 2820/2078/1992 2815/2075/1989 1857/766/713\nf 2820/2078/1992 2818/2079/1993 2819/2080/1994\nf 711/2081/1995 2819/2080/1994 2818/2079/1993\nf 713/2077/1991 2819/2080/1994 2823/2082/1996\nf 2824/2083/1997 2823/2082/1996 2819/2080/1994\nf 2824/2083/1997 2821/2084/1998 2822/2085/1999\nf 135/2086/2000 2822/2085/1999 2821/2084/1998\nf 2826/2087/2001 2808/2068/1982 2816/2076/1990\nf 707/2061/1975 2816/2076/1990 2808/2068/1982\nf 712/2088/2002 2825/2089/2003 2823/2082/1996\nf 2826/2087/2001 2823/2082/1996 2825/2089/2003\nf 2830/2090/2004 2829/2091/2005 2812/2092/1987\nf 133/2093/2006 2812/2092/1987 2829/2091/2005\nf 717/2094/2007 2828/2095/2008 2827/2096/2009\nf 2830/2090/2004 2827/2096/2009 2828/2095/2008\nf 2833/2097/2010 2827/2096/2009 2809/2098/1981\nf 708/2099/1986 2809/2098/1981 2827/2096/2009\nf 714/2100/2011 2832/2101/2012 2831/2102/2013\nf 2833/2097/2010 2831/2102/2013 2832/2101/2012\nf 2837/2103/2014 2836/2104/2015 2832/2101/2012\nf 717/2094/2007 2832/2101/2012 2836/2104/2015\nf 137/2105/2016 2835/2106/2017 2834/2107/2018\nf 2837/2103/2014 2834/2107/2018 2835/2106/2017\nf 2840/2108/2019 2839/2109/2020 2828/2095/2008\nf 716/2110/2021 2828/2095/2008 2839/2109/2020\nf 715/2111/2022 2838/2112/2023 2836/2104/2015\nf 2840/2108/2019 2836/2104/2015 2838/2112/2023\nf 2843/2113/2024 2831/2102/2013 2825/2114/2003\nf 134/2115/1980 2825/2114/2003 2831/2102/2013\nf 720/2116/2025 2842/2117/2026 2841/2118/2027\nf 2843/2113/2024 2841/2118/2027 2842/2117/2026\nf 712/2119/2002 2822/2120/1999 2841/2118/2027\nf 2846/2121/2028 2841/2118/2027 2822/2120/1999\nf 2846/2121/2028 2844/2122/2029 2845/2123/2030\nf 718/2124/2031 2845/2123/2030 2844/2122/2029\nf 2850/2125/2032 2849/2126/2033 2845/2123/2030\nf 720/2116/2025 2845/2123/2030 2849/2126/2033\nf 138/2127/2034 2848/2128/2035 2847/2129/2036\nf 2850/2125/2032 2847/2129/2036 2848/2128/2035\nf 2852/2130/2037 2834/2107/2018 2842/2117/2026\nf 714/2100/2011 2842/2117/2026 2834/2107/2018\nf 2851/2131/2038 2852/2130/2037 719/2132/2039\nf 2849/2126/2033 719/2132/2039 2852/2130/2037\nf 136/2133/2040 2838/2112/2023 2855/2134/2041\nf 2856/2135/2042 2855/2134/2041 2838/2112/2023\nf 2856/2135/2042 2853/2136/2043 2854/2137/2044\nf 724/2138/2045 2854/2137/2044 2853/2136/2043\nf 2859/2139/2046 2853/2136/2043 2835/2106/2017\nf 715/2111/2022 2835/2106/2017 2853/2136/2043\nf 2857/2140/2047 721/2141/2048 2859/2139/2046\nf 2858/2142/2049 2859/2139/2046 721/2141/2048\nf 724/2138/2045 2858/2142/2049 2862/2143/2050\nf 2863/2144/2051 2862/2143/2050 2858/2142/2049\nf 2860/2145/2052 140/2146/2053 2863/2144/2051\nf 2861/2147/2054 2863/2144/2051 140/2146/2053\nf 723/2148/2055 2854/2137/2044 2865/2149/2056\nf 2866/2150/2057 2865/2149/2056 2854/2137/2044\nf 2866/2150/2057 2862/2143/2050 2864/2151/2058\nf 722/2152/2059 2864/2151/2058 2862/2143/2050\nf 2851/2131/2038 2869/2153/2060 137/2105/2016\nf 2857/2140/2047 137/2105/2016 2869/2153/2060\nf 2867/2154/2061 727/2155/2062 2869/2153/2060\nf 2868/2156/2063 2869/2153/2060 727/2155/2062\nf 2848/2128/2035 2872/2157/2064 719/2132/2039\nf 2867/2154/2061 719/2132/2039 2872/2157/2064\nf 2870/2158/2065 725/2159/2066 2872/2157/2064\nf 2871/2160/2067 2872/2157/2064 725/2159/2066\nf 2871/2160/2067 2876/2161/2068 727/2155/2062\nf 2875/2162/2069 727/2155/2062 2876/2161/2068\nf 2873/2163/2070 141/2164/2071 2876/2161/2068\nf 2874/2165/2072 2876/2161/2068 141/2164/2071\nf 2868/2156/2063 2878/2166/2073 721/2141/2048\nf 2860/2145/2052 721/2141/2048 2878/2166/2073\nf 2875/2162/2069 726/2167/2074 2878/2166/2073\nf 2877/2168/2075 2878/2166/2073 726/2167/2074\nf 141/2164/2071 2873/2163/2070 2881/2169/2076\nf 2882/2170/2077 2881/2169/2076 2873/2163/2070\nf 2882/2170/2077 2879/2171/2078 2880/2172/2079\nf 731/2173/2080 2880/2172/2079 2879/2171/2078\nf 725/2159/2066 2870/2158/2065 2879/2171/2078\nf 2885/2174/2081 2879/2171/2078 2870/2158/2065\nf 2885/2174/2081 2883/2175/2082 2884/2176/2083\nf 728/2177/2084 2884/2176/2083 2883/2175/2082\nf 731/2173/2080 2884/2176/2083 2888/2178/2085\nf 2889/2179/2086 2888/2178/2085 2884/2176/2083\nf 2889/2179/2086 2886/2180/2087 2887/2181/2088\nf 142/2182/2089 2887/2181/2088 2886/2180/2087\nf 730/2183/2090 2880/2172/2079 2891/2184/2091\nf 2892/2185/2092 2891/2184/2091 2880/2172/2079\nf 2892/2185/2092 2888/2178/2085 2890/2186/2093\nf 729/2187/2094 2890/2186/2093 2888/2178/2085\nf 66/911/854 1961/913/856 2895/2188/2095\nf 2896/2189/2096 2895/2188/2095 1961/913/856\nf 2896/2189/2096 2893/2190/2097 2894/2191/2098\nf 735/2192/2099 2894/2191/2098 2893/2190/2097\nf 497/906/849 1958/908/851 2893/2190/2097\nf 2899/2193/2100 2893/2190/2097 1958/908/851\nf 2899/2193/2100 2897/2194/2101 2898/2195/2102\nf 732/2196/2103 2898/2195/2102 2897/2194/2101\nf 735/2192/2099 2898/2195/2102 2902/2197/2104\nf 2903/2198/2105 2902/2197/2104 2898/2195/2102\nf 2900/2199/2106 145/2200/2107 2903/2198/2105\nf 2901/2201/2108 2903/2198/2105 145/2200/2107\nf 2894/2191/2098 2906/2202/2109 734/2203/2110\nf 2905/2204/2111 734/2203/2110 2906/2202/2109\nf 2906/2202/2109 2902/2197/2104 2904/2205/2112\nf 733/2206/2113 2904/2205/2112 2902/2197/2104\nf 1839/743/690 2909/2207/2114 55/745/692\nf 2897/2194/2101 55/745/692 2909/2207/2114\nf 2907/2208/2115 738/2209/2116 2909/2207/2114\nf 2908/2210/2117 2909/2207/2114 738/2209/2116\nf 1836/738/685 2912/2211/2118 466/740/687\nf 2907/2208/2115 466/740/687 2912/2211/2118\nf 2910/2212/2119 736/2213/2120 2912/2211/2118\nf 2911/2214/2121 2912/2211/2118 736/2213/2120\nf 2911/2214/2121 2916/2215/2122 738/2209/2116\nf 2915/2216/2123 738/2209/2116 2916/2215/2122\nf 2913/2217/2124 144/2218/2125 2916/2215/2122\nf 2914/2219/2126 2916/2215/2122 144/2218/2125\nf 2908/2210/2117 2918/2220/2127 732/2196/2103\nf 2900/2199/2106 732/2196/2103 2918/2220/2127\nf 2915/2216/2123 737/2221/2128 2918/2220/2127\nf 2917/2222/2129 2918/2220/2127 737/2221/2128\nf 2904/2205/2112 2922/2223/2130 146/2224/2131\nf 2921/2225/2132 146/2224/2131 2922/2223/2130\nf 2922/2223/2130 2919/2226/2133 2920/2227/2134\nf 742/2228/2135 2920/2227/2134 2919/2226/2133\nf 733/2206/2113 2901/2201/2108 2919/2226/2133\nf 2925/2229/2136 2919/2226/2133 2901/2201/2108\nf 2925/2229/2136 2923/2230/2137 2924/2231/2138\nf 739/2232/2139 2924/2231/2138 2923/2230/2137\nf 742/2228/2135 2924/2231/2138 2928/2233/2140\nf 2929/2234/2141 2928/2233/2140 2924/2231/2138\nf 2929/2234/2141 2926/2235/2142 2927/2236/2143\nf 148/2237/2144 2927/2236/2143 2926/2235/2142\nf 741/2238/2145 2920/2227/2134 2931/2239/2146\nf 2932/2240/2147 2931/2239/2146 2920/2227/2134\nf 2932/2240/2147 2928/2233/2140 2930/2241/2148\nf 740/2242/2149 2930/2241/2148 2928/2233/2140\nf 2917/2222/2129 2935/2243/2150 145/2200/2107\nf 2923/2230/2137 145/2200/2107 2935/2243/2150\nf 2933/2244/2151 745/2245/2152 2935/2243/2150\nf 2934/2246/2153 2935/2243/2150 745/2245/2152\nf 2914/2219/2126 2938/2247/2154 737/2221/2128\nf 2933/2244/2151 737/2221/2128 2938/2247/2154\nf 2936/2248/2155 743/2249/2156 2938/2247/2154\nf 2937/2250/2157 2938/2247/2154 743/2249/2156\nf 2937/2250/2157 2942/2251/2158 745/2245/2152\nf 2941/2252/2159 745/2245/2152 2942/2251/2158\nf 2939/2253/2160 147/2254/2161 2942/2251/2158\nf 2940/2255/2162 2942/2251/2158 147/2254/2161\nf 2934/2246/2153 2944/2256/2163 739/2232/2139\nf 2926/2235/2142 739/2232/2139 2944/2256/2163\nf 2941/2252/2159 744/2257/2164 2944/2256/2163\nf 2943/2258/2165 2944/2256/2163 744/2257/2164\nf 2949/2259/2166 2948/2260/2167 2945/2261/2168\nf 150/2262/2169 2945/2261/2168 2948/2260/2167\nf 750/2263/2170 2947/2264/2171 2946/2265/2172\nf 2949/2259/2166 2946/2265/2172 2947/2264/2171\nf 2953/2266/2173 2946/2265/2172 2950/2267/2174\nf 746/2268/2175 2950/2267/2174 2946/2265/2172\nf 747/2269/2176 2952/2270/2177 2951/2271/2178\nf 2953/2266/2173 2951/2271/2178 2952/2270/2177\nf 2957/2272/2179 2956/2273/2180 2952/2270/2177\nf 750/2263/2170 2952/2270/2177 2956/2273/2180\nf 162/2274/2181 2955/2275/2182 2954/2276/2183\nf 2957/2272/2179 2954/2276/2183 2955/2275/2182\nf 2960/2277/2184 2959/2278/2185 2947/2264/2171\nf 749/2279/2186 2947/2264/2171 2959/2278/2185\nf 748/2280/2187 2958/2281/2188 2956/2273/2180\nf 2960/2277/2184 2956/2273/2180 2958/2281/2188\nf 2964/2282/2189 2963/2283/2190 2958/2281/2188\nf 151/2284/2191 2958/2281/2188 2963/2283/2190\nf 754/2285/2192 2962/2286/2193 2961/2287/2194\nf 2964/2282/2189 2961/2287/2194 2962/2286/2193\nf 2967/2288/2195 2961/2287/2194 2955/2275/2182\nf 748/2280/2187 2955/2275/2182 2961/2287/2194\nf 751/2289/2196 2966/2290/2197 2965/2291/2198\nf 2967/2288/2195 2965/2291/2198 2966/2290/2197\nf 2971/2292/2199 2970/2293/2200 2966/2290/2197\nf 754/2285/2192 2966/2290/2197 2970/2293/2200\nf 163/2294/2201 2969/2295/2202 2968/2296/2203\nf 2971/2292/2199 2968/2296/2203 2969/2295/2202\nf 2974/2297/2204 2973/2298/2205 2962/2286/2193\nf 753/2299/2206 2962/2286/2193 2973/2298/2205\nf 752/2300/2207 2972/2301/2208 2970/2293/2200\nf 2974/2297/2204 2970/2293/2200 2972/2301/2208\nf 2978/2302/2209 2977/2303/2210 2972/2301/2208\nf 152/2304/2211 2972/2301/2208 2977/2303/2210\nf 758/2305/2212 2976/2306/2213 2975/2307/2214\nf 2978/2302/2209 2975/2307/2214 2976/2306/2213\nf 2981/2308/2215 2975/2307/2214 2969/2295/2202\nf 752/2300/2207 2969/2295/2202 2975/2307/2214\nf 755/2309/2216 2980/2310/2217 2979/2311/2218\nf 2981/2308/2215 2979/2311/2218 2980/2310/2217\nf 2985/2312/2219 2984/2313/2220 2980/2310/2217\nf 758/2305/2212 2980/2310/2217 2984/2313/2220\nf 164/2314/2221 2983/2315/2222 2982/2316/2223\nf 2985/2312/2219 2982/2316/2223 2983/2315/2222\nf 2988/2317/2224 2987/2318/2225 2976/2306/2213\nf 757/2319/2226 2976/2306/2213 2987/2318/2225\nf 756/2320/2227 2986/2321/2228 2984/2313/2220\nf 2988/2317/2224 2984/2313/2220 2986/2321/2228\nf 2992/2322/2229 2991/2323/2230 2986/2321/2228\nf 153/2324/2231 2986/2321/2228 2991/2323/2230\nf 762/2325/2232 2990/2326/2233 2989/2327/2234\nf 2992/2322/2229 2989/2327/2234 2990/2326/2233\nf 2995/2328/2235 2989/2327/2234 2983/2315/2222\nf 756/2320/2227 2983/2315/2222 2989/2327/2234\nf 759/2329/2236 2994/2330/2237 2993/2331/2238\nf 2995/2328/2235 2993/2331/2238 2994/2330/2237\nf 2999/2332/2239 2998/2333/2240 2994/2330/2237\nf 762/2325/2232 2994/2330/2237 2998/2333/2240\nf 165/2334/2241 2997/2335/2242 2996/2336/2243\nf 2999/2332/2239 2996/2336/2243 2997/2335/2242\nf 2990/2326/2233 3002/2337/2244 761/2338/2245\nf 3001/2339/2246 761/2338/2245 3002/2337/2244\nf 2998/2333/2240 760/2340/2247 3002/2337/2244\nf 3000/2341/2248 3002/2337/2244 760/2340/2247\nf 3000/2341/2248 3006/2342/2249 154/2343/2250\nf 3005/2344/2251 154/2343/2250 3006/2342/2249\nf 3003/2345/2252 766/2346/2253 3006/2342/2249\nf 3004/2347/2254 3006/2342/2249 766/2346/2253\nf 2997/2335/2242 3009/2348/2255 760/2340/2247\nf 3003/2345/2252 760/2340/2247 3009/2348/2255\nf 3007/2349/2256 763/2350/2257 3009/2348/2255\nf 3008/2351/2258 3009/2348/2255 763/2350/2257\nf 3008/2351/2258 3013/2352/2259 766/2346/2253\nf 3012/2353/2260 766/2346/2253 3013/2352/2259\nf 3010/2354/2261 166/2355/2262 3013/2352/2259\nf 3011/2356/2263 3013/2352/2259 166/2355/2262\nf 3004/2347/2254 3016/2357/2264 765/2358/2265\nf 3015/2359/2266 765/2358/2265 3016/2357/2264\nf 3012/2353/2260 764/2360/2267 3016/2357/2264\nf 3014/2361/2268 3016/2357/2264 764/2360/2267\nf 3014/2362/2268 3020/2363/2269 155/2364/2270\nf 3019/2365/2271 155/2364/2270 3020/2363/2269\nf 3017/2366/2272 770/2367/2273 3020/2363/2269\nf 3018/2368/2274 3020/2363/2269 770/2367/2273\nf 3011/2369/2263 3023/2370/2275 764/2371/2267\nf 3017/2366/2272 764/2371/2267 3023/2370/2275\nf 3021/2372/2276 767/2373/2277 3023/2370/2275\nf 3022/2374/2278 3023/2370/2275 767/2373/2277\nf 3027/2375/2279 3026/2376/2280 3022/2374/2278\nf 770/2367/2273 3022/2374/2278 3026/2376/2280\nf 167/2377/2281 3025/2378/2282 3024/2379/2283\nf 3027/2375/2279 3024/2379/2283 3025/2378/2282\nf 3030/2380/2284 3029/2381/2285 3018/2368/2274\nf 769/2382/2286 3018/2368/2274 3029/2381/2285\nf 768/2383/2287 3028/2384/2288 3026/2376/2280\nf 3030/2380/2284 3026/2376/2280 3028/2384/2288\nf 3028/2384/2288 3034/2385/2289 156/2386/2290\nf 3033/2387/2291 156/2386/2290 3034/2385/2289\nf 3031/2388/2292 774/2389/2293 3034/2385/2289\nf 3032/2390/2294 3034/2385/2289 774/2389/2293\nf 3025/2378/2282 3037/2391/2295 768/2383/2287\nf 3031/2388/2292 768/2383/2287 3037/2391/2295\nf 3035/2392/2296 771/2393/2297 3037/2391/2295\nf 3036/2394/2298 3037/2391/2295 771/2393/2297\nf 3041/2395/2299 3040/2396/2300 3036/2394/2298\nf 774/2389/2293 3036/2394/2298 3040/2396/2300\nf 168/2397/2301 3039/2398/2302 3038/2399/2303\nf 3041/2395/2299 3038/2399/2303 3039/2398/2302\nf 3044/2400/2304 3043/2401/2305 3032/2390/2294\nf 773/2402/2306 3032/2390/2294 3043/2401/2305\nf 772/2403/2307 3042/2404/2308 3040/2396/2300\nf 3044/2400/2304 3040/2396/2300 3042/2404/2308\nf 3042/2404/2308 3048/2405/2309 157/2406/2310\nf 3047/2407/2311 157/2406/2310 3048/2405/2309\nf 3045/2408/2312 778/2409/2313 3048/2405/2309\nf 3046/2410/2314 3048/2405/2309 778/2409/2313\nf 3039/2398/2302 3051/2411/2315 772/2403/2307\nf 3045/2408/2312 772/2403/2307 3051/2411/2315\nf 3049/2412/2316 775/2413/2317 3051/2411/2315\nf 3050/2414/2318 3051/2411/2315 775/2413/2317\nf 3055/2415/2319 3054/2416/2320 3050/2414/2318\nf 778/2409/2313 3050/2414/2318 3054/2416/2320\nf 169/2417/2321 3053/2418/2322 3052/2419/2323\nf 3055/2415/2319 3052/2419/2323 3053/2418/2322\nf 3058/2420/2324 3057/2421/2325 3046/2410/2314\nf 777/2422/2326 3046/2410/2314 3057/2421/2325\nf 776/2423/2327 3056/2424/2328 3054/2416/2320\nf 3058/2420/2324 3054/2416/2320 3056/2424/2328\nf 3056/2424/2328 3062/2425/2329 158/2426/2330\nf 3061/2427/2331 158/2426/2330 3062/2425/2329\nf 3059/2428/2332 782/2429/2333 3062/2425/2329\nf 3060/2430/2334 3062/2425/2329 782/2429/2333\nf 3053/2418/2322 3065/2431/2335 776/2423/2327\nf 3059/2428/2332 776/2423/2327 3065/2431/2335\nf 3063/2432/2336 779/2433/2337 3065/2431/2335\nf 3064/2434/2338 3065/2431/2335 779/2433/2337\nf 3069/2435/2339 3068/2436/2340 3064/2434/2338\nf 782/2429/2333 3064/2434/2338 3068/2436/2340\nf 170/2437/2341 3067/2438/2342 3066/2439/2343\nf 3069/2435/2339 3066/2439/2343 3067/2438/2342\nf 3072/2440/2344 3071/2441/2345 3060/2430/2334\nf 781/2442/2346 3060/2430/2334 3071/2441/2345\nf 780/2443/2347 3070/2444/2348 3068/2436/2340\nf 3072/2440/2344 3068/2436/2340 3070/2444/2348\nf 3070/2444/2348 3076/2445/2349 159/2446/2350\nf 3075/2447/2351 159/2446/2350 3076/2445/2349\nf 3073/2448/2352 786/2449/2353 3076/2445/2349\nf 3074/2450/2354 3076/2445/2349 786/2449/2353\nf 3067/2438/2342 3079/2451/2355 780/2443/2347\nf 3073/2448/2352 780/2443/2347 3079/2451/2355\nf 3077/2452/2356 783/2453/2357 3079/2451/2355\nf 3078/2454/2358 3079/2451/2355 783/2453/2357\nf 3083/2455/2359 3082/2456/2360 3078/2454/2358\nf 786/2449/2353 3078/2454/2358 3082/2456/2360\nf 171/2457/2361 3081/2458/2362 3080/2459/2363\nf 3083/2455/2359 3080/2459/2363 3081/2458/2362\nf 3086/2460/2364 3085/2461/2365 3074/2450/2354\nf 785/2462/2366 3074/2450/2354 3085/2461/2365\nf 784/2463/2367 3084/2464/2368 3082/2456/2360\nf 3086/2460/2364 3082/2456/2360 3084/2464/2368\nf 161/2465/2369 3087/2466/2370 2951/2467/2178\nf 3090/2468/2371 2951/2467/2178 3087/2466/2370\nf 3090/2468/2371 3088/2469/2372 3089/2470/2373\nf 790/2471/2374 3089/2470/2373 3088/2469/2372\nf 787/2472/2375 3091/2473/2376 3088/2469/2372\nf 3094/2474/2377 3088/2469/2372 3091/2473/2376\nf 3094/2474/2377 3092/2475/2378 3093/2476/2379\nf 788/2477/2380 3093/2476/2379 3092/2475/2378\nf 790/2471/2374 3093/2476/2379 3097/2478/2381\nf 3098/2479/2382 3097/2478/2381 3093/2476/2379\nf 3098/2479/2382 3095/2480/2383 3096/2481/2384\nf 173/2482/2385 3096/2481/2384 3095/2480/2383\nf 3100/2483/2386 2954/2484/2183 3089/2470/2373\nf 747/2485/2176 3089/2470/2373 2954/2484/2183\nf 3100/2483/2386 3097/2478/2381 3099/2486/2387\nf 789/2487/2388 3099/2486/2387 3097/2478/2381\nf 3103/2488/2389 2965/2489/2198 3099/2486/2387\nf 162/2490/2181 3099/2486/2387 2965/2489/2198\nf 793/2491/2390 3102/2492/2391 3101/2493/2392\nf 3103/2488/2389 3101/2493/2392 3102/2492/2391\nf 3106/2494/2393 3101/2493/2392 3096/2481/2384\nf 789/2487/2388 3096/2481/2384 3101/2493/2392\nf 791/2495/2394 3105/2496/2395 3104/2497/2396\nf 3106/2494/2393 3104/2497/2396 3105/2496/2395\nf 3110/2498/2397 3109/2499/2398 3105/2496/2395\nf 793/2491/2390 3105/2496/2395 3109/2499/2398\nf 174/2500/2399 3108/2501/2400 3107/2502/2401\nf 3110/2498/2397 3107/2502/2401 3108/2501/2400\nf 3112/2503/2402 2968/2504/2203 3102/2492/2391\nf 751/2505/2196 3102/2492/2391 2968/2504/2203\nf 792/2506/2403 3111/2507/2404 3109/2499/2398\nf 3112/2503/2402 3109/2499/2398 3111/2507/2404\nf 3115/2508/2405 2979/2509/2218 3111/2507/2404\nf 163/2510/2201 3111/2507/2404 2979/2509/2218\nf 796/2511/2406 3114/2512/2407 3113/2513/2408\nf 3115/2508/2405 3113/2513/2408 3114/2512/2407\nf 3118/2514/2409 3113/2513/2408 3108/2501/2400\nf 792/2506/2403 3108/2501/2400 3113/2513/2408\nf 794/2515/2410 3117/2516/2411 3116/2517/2412\nf 3118/2514/2409 3116/2517/2412 3117/2516/2411\nf 3122/2518/2413 3121/2519/2414 3117/2516/2411\nf 796/2511/2406 3117/2516/2411 3121/2519/2414\nf 3119/2520/2415 175/2521/2416 3122/2518/2413\nf 3120/2522/2417 3122/2518/2413 175/2521/2416\nf 3124/2523/2418 2982/2524/2223 3114/2512/2407\nf 755/2525/2216 3114/2512/2407 2982/2524/2223\nf 795/2526/2419 3123/2527/2420 3121/2519/2414\nf 3124/2523/2418 3121/2519/2414 3123/2527/2420\nf 3127/2528/2421 2993/2529/2238 3123/2527/2420\nf 164/2530/2221 3123/2527/2420 2993/2529/2238\nf 799/2531/2422 3126/2532/2423 3125/2533/2424\nf 3127/2528/2421 3125/2533/2424 3126/2532/2423\nf 3130/2534/2425 3125/2533/2424 3120/2522/2417\nf 795/2526/2419 3120/2522/2417 3125/2533/2424\nf 3128/2535/2426 797/2536/2427 3130/2534/2425\nf 3129/2537/2428 3130/2534/2425 797/2536/2427\nf 3134/2538/2429 3133/2539/2430 3129/2537/2428\nf 799/2531/2422 3129/2537/2428 3133/2539/2430\nf 176/2540/2431 3132/2541/2432 3131/2542/2433\nf 3134/2538/2429 3131/2542/2433 3132/2541/2432\nf 3136/2543/2434 2996/2544/2243 3126/2532/2423\nf 759/2545/2236 3126/2532/2423 2996/2544/2243\nf 798/2546/2435 3135/2547/2436 3133/2539/2430\nf 3136/2543/2434 3133/2539/2430 3135/2547/2436\nf 3139/2548/2437 3007/2549/2256 3135/2547/2436\nf 165/2550/2241 3135/2547/2436 3007/2549/2256\nf 802/2551/2438 3138/2552/2439 3137/2553/2440\nf 3139/2548/2437 3137/2553/2440 3138/2552/2439\nf 3142/2554/2441 3137/2553/2440 3132/2541/2432\nf 798/2546/2435 3132/2541/2432 3137/2553/2440\nf 800/2555/2442 3141/2556/2443 3140/2557/2444\nf 3142/2554/2441 3140/2557/2444 3141/2556/2443\nf 3146/2558/2445 3145/2559/2446 3141/2556/2443\nf 802/2551/2438 3141/2556/2443 3145/2559/2446\nf 177/2560/2447 3144/2561/2448 3143/2562/2449\nf 3146/2558/2445 3143/2562/2449 3144/2561/2448\nf 3138/2552/2439 3148/2563/2450 763/2564/2257\nf 3010/2565/2261 763/2564/2257 3148/2563/2450\nf 801/2566/2451 3147/2567/2452 3145/2559/2446\nf 3148/2563/2450 3145/2559/2446 3147/2567/2452\nf 3147/2568/2452 3151/2569/2453 166/2570/2262\nf 3021/2571/2276 166/2570/2262 3151/2569/2453\nf 3149/2572/2454 805/2573/2455 3151/2569/2453\nf 3150/2574/2456 3151/2569/2453 805/2573/2455\nf 3144/2575/2448 3154/2576/2457 801/2577/2451\nf 3149/2572/2454 801/2577/2451 3154/2576/2457\nf 3152/2578/2458 803/2579/2459 3154/2576/2457\nf 3153/2580/2460 3154/2576/2457 803/2579/2459\nf 3158/2581/2461 3157/2582/2462 3153/2580/2460\nf 805/2573/2455 3153/2580/2460 3157/2582/2462\nf 178/2583/2463 3156/2584/2464 3155/2585/2465\nf 3158/2581/2461 3155/2585/2465 3156/2584/2464\nf 3160/2586/2466 3024/2587/2283 3150/2574/2456\nf 767/2588/2277 3150/2574/2456 3024/2587/2283\nf 804/2589/2467 3159/2590/2468 3157/2582/2462\nf 3160/2586/2466 3157/2582/2462 3159/2590/2468\nf 3159/2590/2468 3163/2591/2469 167/2592/2281\nf 3035/2593/2296 167/2592/2281 3163/2591/2469\nf 3161/2594/2470 808/2595/2471 3163/2591/2469\nf 3162/2596/2472 3163/2591/2469 808/2595/2471\nf 3156/2584/2464 3166/2597/2473 804/2589/2467\nf 3161/2594/2470 804/2589/2467 3166/2597/2473\nf 3164/2598/2474 806/2599/2475 3166/2597/2473\nf 3165/2600/2476 3166/2597/2473 806/2599/2475\nf 3170/2601/2477 3169/2602/2478 3165/2600/2476\nf 808/2595/2471 3165/2600/2476 3169/2602/2478\nf 179/2603/2479 3168/2604/2480 3167/2605/2481\nf 3170/2601/2477 3167/2605/2481 3168/2604/2480\nf 3172/2606/2482 3038/2607/2303 3162/2596/2472\nf 771/2608/2297 3162/2596/2472 3038/2607/2303\nf 807/2609/2483 3171/2610/2484 3169/2602/2478\nf 3172/2606/2482 3169/2602/2478 3171/2610/2484\nf 3171/2610/2484 3175/2611/2485 168/2612/2301\nf 3049/2613/2316 168/2612/2301 3175/2611/2485\nf 3173/2614/2486 811/2615/2487 3175/2611/2485\nf 3174/2616/2488 3175/2611/2485 811/2615/2487\nf 3168/2604/2480 3178/2617/2489 807/2609/2483\nf 3173/2614/2486 807/2609/2483 3178/2617/2489\nf 3176/2618/2490 809/2619/2491 3178/2617/2489\nf 3177/2620/2492 3178/2617/2489 809/2619/2491\nf 3182/2621/2493 3181/2622/2494 3177/2620/2492\nf 811/2615/2487 3177/2620/2492 3181/2622/2494\nf 180/2623/2495 3180/2624/2496 3179/2625/2497\nf 3182/2621/2493 3179/2625/2497 3180/2624/2496\nf 3184/2626/2498 3052/2627/2323 3174/2616/2488\nf 775/2628/2317 3174/2616/2488 3052/2627/2323\nf 810/2629/2499 3183/2630/2500 3181/2622/2494\nf 3184/2626/2498 3181/2622/2494 3183/2630/2500\nf 3183/2630/2500 3187/2631/2501 169/2632/2321\nf 3063/2633/2336 169/2632/2321 3187/2631/2501\nf 814/2634/2502 3186/2635/2503 3185/2636/2504\nf 3187/2631/2501 3185/2636/2504 3186/2635/2503\nf 3180/2624/2496 3190/2637/2505 810/2629/2499\nf 3185/2636/2504 810/2629/2499 3190/2637/2505\nf 812/2638/2506 3189/2639/2507 3188/2640/2508\nf 3190/2637/2505 3188/2640/2508 3189/2639/2507\nf 3194/2641/2509 3193/2642/2510 3189/2639/2507\nf 814/2634/2502 3189/2639/2507 3193/2642/2510\nf 181/2643/2511 3192/2644/2512 3191/2645/2513\nf 3194/2641/2509 3191/2645/2513 3192/2644/2512\nf 3196/2646/2514 3066/2647/2343 3186/2635/2503\nf 779/2648/2337 3186/2635/2503 3066/2647/2343\nf 813/2649/2515 3195/2650/2516 3193/2642/2510\nf 3196/2646/2514 3193/2642/2510 3195/2650/2516\nf 3195/2650/2516 3199/2651/2517 170/2652/2341\nf 3077/2653/2356 170/2652/2341 3199/2651/2517\nf 817/2654/2518 3198/2655/2519 3197/2656/2520\nf 3199/2651/2517 3197/2656/2520 3198/2655/2519\nf 3202/2657/2521 3197/2656/2520 3192/2644/2512\nf 813/2649/2515 3192/2644/2512 3197/2656/2520\nf 815/2658/2522 3201/2659/2523 3200/2660/2524\nf 3202/2657/2521 3200/2660/2524 3201/2659/2523\nf 3206/2661/2525 3205/2662/2526 3201/2659/2523\nf 817/2654/2518 3201/2659/2523 3205/2662/2526\nf 182/2663/2527 3204/2664/2528 3203/2665/2529\nf 3206/2661/2525 3203/2665/2529 3204/2664/2528\nf 3208/2666/2530 3080/2667/2363 3198/2655/2519\nf 783/2668/2357 3198/2655/2519 3080/2667/2363\nf 816/2669/2531 3207/2670/2532 3205/2662/2526\nf 3208/2666/2530 3205/2662/2526 3207/2670/2532\nf 172/2671/2533 3209/2672/2534 3092/2475/2378\nf 3212/2673/2535 3092/2475/2378 3209/2672/2534\nf 3212/2673/2535 3210/2674/2536 3211/2675/2537\nf 821/2676/2538 3211/2675/2537 3210/2674/2536\nf 818/2677/2539 3213/2678/2540 3210/2674/2536\nf 3216/2679/2541 3210/2674/2536 3213/2678/2540\nf 3216/2679/2541 3214/2680/2542 3215/2681/2543\nf 819/2682/2544 3215/2681/2543 3214/2680/2542\nf 821/2676/2538 3215/2681/2543 3219/2683/2545\nf 3220/2684/2546 3219/2683/2545 3215/2681/2543\nf 3220/2684/2546 3217/2685/2547 3218/2686/2548\nf 184/2687/2549 3218/2686/2548 3217/2685/2547\nf 788/2477/2380 3211/2675/2537 3095/2480/2383\nf 3222/2688/2550 3095/2480/2383 3211/2675/2537\nf 3222/2688/2550 3219/2683/2545 3221/2689/2551\nf 820/2690/2552 3221/2689/2551 3219/2683/2545\nf 173/2482/2385 3221/2689/2551 3104/2497/2396\nf 3225/2691/2553 3104/2497/2396 3221/2689/2551\nf 3225/2691/2553 3223/2692/2554 3224/2693/2555\nf 824/2694/2556 3224/2693/2555 3223/2692/2554\nf 820/2690/2552 3218/2686/2548 3223/2692/2554\nf 3228/2695/2557 3223/2692/2554 3218/2686/2548\nf 3228/2695/2557 3226/2696/2558 3227/2697/2559\nf 822/2698/2560 3227/2697/2559 3226/2696/2558\nf 3232/2699/2561 3231/2700/2562 3227/2697/2559\nf 824/2694/2556 3227/2697/2559 3231/2700/2562\nf 3229/2701/2563 185/2702/2564 3232/2699/2561\nf 3230/2703/2565 3232/2699/2561 185/2702/2564\nf 3234/2704/2566 3107/2502/2401 3224/2693/2555\nf 791/2495/2394 3224/2693/2555 3107/2502/2401\nf 823/2705/2567 3233/2706/2568 3231/2700/2562\nf 3234/2704/2566 3231/2700/2562 3233/2706/2568\nf 3233/2706/2568 3237/2707/2569 174/2500/2399\nf 3116/2517/2412 174/2500/2399 3237/2707/2569\nf 3235/2708/2570 827/2709/2571 3237/2707/2569\nf 3236/2710/2572 3237/2707/2569 827/2709/2571\nf 3230/2703/2565 3240/2711/2573 823/2705/2567\nf 3235/2708/2570 823/2705/2567 3240/2711/2573\nf 3238/2712/2574 825/2713/2575 3240/2711/2573\nf 3239/2714/2576 3240/2711/2573 825/2713/2575\nf 3239/2714/2576 3244/2715/2577 827/2709/2571\nf 3243/2716/2578 827/2709/2571 3244/2715/2577\nf 3241/2717/2579 186/2718/2580 3244/2715/2577\nf 3242/2719/2581 3244/2715/2577 186/2718/2580\nf 3236/2710/2572 3246/2720/2582 794/2515/2410\nf 3119/2520/2415 794/2515/2410 3246/2720/2582\nf 3243/2716/2578 826/2721/2583 3246/2720/2582\nf 3245/2722/2584 3246/2720/2582 826/2721/2583\nf 3245/2722/2584 3249/2723/2585 175/2521/2416\nf 3128/2535/2426 175/2521/2416 3249/2723/2585\nf 3247/2724/2586 830/2725/2587 3249/2723/2585\nf 3248/2726/2588 3249/2723/2585 830/2725/2587\nf 3242/2719/2581 3252/2727/2589 826/2721/2583\nf 3247/2724/2586 826/2721/2583 3252/2727/2589\nf 3250/2728/2590 828/2729/2591 3252/2727/2589\nf 3251/2730/2592 3252/2727/2589 828/2729/2591\nf 3251/2730/2592 3256/2731/2593 830/2725/2587\nf 3255/2732/2594 830/2725/2587 3256/2731/2593\nf 3253/2733/2595 187/2734/2596 3256/2731/2593\nf 3254/2735/2597 3256/2731/2593 187/2734/2596\nf 3248/2726/2588 3258/2736/2598 797/2536/2427\nf 3131/2542/2433 797/2536/2427 3258/2736/2598\nf 3255/2732/2594 829/2737/2599 3258/2736/2598\nf 3257/2738/2600 3258/2736/2598 829/2737/2599\nf 3257/2738/2600 3261/2739/2601 176/2540/2431\nf 3140/2557/2444 176/2540/2431 3261/2739/2601\nf 3259/2740/2602 833/2741/2603 3261/2739/2601\nf 3260/2742/2604 3261/2739/2601 833/2741/2603\nf 3254/2735/2597 3264/2743/2605 829/2737/2599\nf 3259/2740/2602 829/2737/2599 3264/2743/2605\nf 3262/2744/2606 831/2745/2607 3264/2743/2605\nf 3263/2746/2608 3264/2743/2605 831/2745/2607\nf 3263/2746/2608 3268/2747/2609 833/2741/2603\nf 3267/2748/2610 833/2741/2603 3268/2747/2609\nf 3265/2749/2611 188/2750/2612 3268/2747/2609\nf 3266/2751/2613 3268/2747/2609 188/2750/2612\nf 3260/2742/2604 3270/2752/2614 800/2555/2442\nf 3143/2562/2449 800/2555/2442 3270/2752/2614\nf 3267/2748/2610 832/2753/2615 3270/2752/2614\nf 3269/2754/2616 3270/2752/2614 832/2753/2615\nf 3269/2755/2616 3273/2756/2617 177/2757/2447\nf 3152/2578/2458 177/2757/2447 3273/2756/2617\nf 3271/2758/2618 836/2759/2619 3273/2756/2617\nf 3272/2760/2620 3273/2756/2617 836/2759/2619\nf 3266/2761/2613 3276/2762/2621 832/2763/2615\nf 3271/2758/2618 832/2763/2615 3276/2762/2621\nf 3274/2764/2622 834/2765/2623 3276/2762/2621\nf 3275/2766/2624 3276/2762/2621 834/2765/2623\nf 3275/2766/2624 3280/2767/2625 836/2759/2619\nf 3279/2768/2626 836/2759/2619 3280/2767/2625\nf 3277/2769/2627 189/2770/2628 3280/2767/2625\nf 3278/2771/2629 3280/2767/2625 189/2770/2628\nf 3272/2760/2620 3282/2772/2630 803/2579/2459\nf 3155/2585/2465 803/2579/2459 3282/2772/2630\nf 3279/2768/2626 835/2773/2631 3282/2772/2630\nf 3281/2774/2632 3282/2772/2630 835/2773/2631\nf 3281/2774/2632 3285/2775/2633 178/2583/2463\nf 3164/2598/2474 178/2583/2463 3285/2775/2633\nf 3283/2776/2634 839/2777/2635 3285/2775/2633\nf 3284/2778/2636 3285/2775/2633 839/2777/2635\nf 3278/2771/2629 3288/2779/2637 835/2773/2631\nf 3283/2776/2634 835/2773/2631 3288/2779/2637\nf 3286/2780/2638 837/2781/2639 3288/2779/2637\nf 3287/2782/2640 3288/2779/2637 837/2781/2639\nf 3287/2782/2640 3292/2783/2641 839/2777/2635\nf 3291/2784/2642 839/2777/2635 3292/2783/2641\nf 3289/2785/2643 190/2786/2644 3292/2783/2641\nf 3290/2787/2645 3292/2783/2641 190/2786/2644\nf 3284/2778/2636 3294/2788/2646 806/2599/2475\nf 3167/2605/2481 806/2599/2475 3294/2788/2646\nf 3291/2784/2642 838/2789/2647 3294/2788/2646\nf 3293/2790/2648 3294/2788/2646 838/2789/2647\nf 3293/2790/2648 3297/2791/2649 179/2603/2479\nf 3176/2618/2490 179/2603/2479 3297/2791/2649\nf 3295/2792/2650 842/2793/2651 3297/2791/2649\nf 3296/2794/2652 3297/2791/2649 842/2793/2651\nf 3290/2787/2645 3300/2795/2653 838/2789/2647\nf 3295/2792/2650 838/2789/2647 3300/2795/2653\nf 3298/2796/2654 840/2797/2655 3300/2795/2653\nf 3299/2798/2656 3300/2795/2653 840/2797/2655\nf 3299/2798/2656 3304/2799/2657 842/2793/2651\nf 3303/2800/2658 842/2793/2651 3304/2799/2657\nf 3301/2801/2659 191/2802/2660 3304/2799/2657\nf 3302/2803/2661 3304/2799/2657 191/2802/2660\nf 3296/2794/2652 3306/2804/2662 809/2619/2491\nf 3179/2625/2497 809/2619/2491 3306/2804/2662\nf 3303/2800/2658 841/2805/2663 3306/2804/2662\nf 3305/2806/2664 3306/2804/2662 841/2805/2663\nf 3305/2806/2664 3309/2807/2665 180/2623/2495\nf 3188/2640/2508 180/2623/2495 3309/2807/2665\nf 3307/2808/2666 845/2809/2667 3309/2807/2665\nf 3308/2810/2668 3309/2807/2665 845/2809/2667\nf 3302/2803/2661 3312/2811/2669 841/2805/2663\nf 3307/2808/2666 841/2805/2663 3312/2811/2669\nf 3310/2812/2670 843/2813/2671 3312/2811/2669\nf 3311/2814/2672 3312/2811/2669 843/2813/2671\nf 3311/2814/2672 3316/2815/2673 845/2809/2667\nf 3315/2816/2674 845/2809/2667 3316/2815/2673\nf 3313/2817/2675 192/2818/2676 3316/2815/2673\nf 3314/2819/2677 3316/2815/2673 192/2818/2676\nf 3308/2810/2668 3318/2820/2678 812/2638/2506\nf 3191/2645/2513 812/2638/2506 3318/2820/2678\nf 3315/2816/2674 844/2821/2679 3318/2820/2678\nf 3317/2822/2680 3318/2820/2678 844/2821/2679\nf 3321/2823/2681 3200/2660/2524 3317/2822/2680\nf 181/2643/2511 3317/2822/2680 3200/2660/2524\nf 3319/2824/2682 848/2825/2683 3321/2823/2681\nf 3320/2826/2684 3321/2823/2681 848/2825/2683\nf 3314/2819/2677 3324/2827/2685 844/2821/2679\nf 3319/2824/2682 844/2821/2679 3324/2827/2685\nf 3322/2828/2686 846/2829/2687 3324/2827/2685\nf 3323/2830/2688 3324/2827/2685 846/2829/2687\nf 3328/2831/2689 3327/2832/2690 3323/2830/2688\nf 848/2825/2683 3323/2830/2688 3327/2832/2690\nf 193/2833/2691 3326/2834/2692 3325/2835/2693\nf 3328/2831/2689 3325/2835/2693 3326/2834/2692\nf 3330/2836/2694 3203/2665/2529 3320/2826/2684\nf 815/2658/2522 3320/2826/2684 3203/2665/2529\nf 3327/2832/2690 847/2837/2695 3330/2836/2694\nf 3329/2838/2696 3330/2836/2694 847/2837/2695\nf 183/2839/2697 3331/2840/2698 3214/2680/2542\nf 3334/2841/2699 3214/2680/2542 3331/2840/2698\nf 3334/2841/2699 3332/2842/2700 3333/2843/2701\nf 852/2844/2702 3333/2843/2701 3332/2842/2700\nf 849/2845/2703 3335/2846/2704 3332/2842/2700\nf 3338/2847/2705 3332/2842/2700 3335/2846/2704\nf 3336/2848/2706 850/2849/2707 3338/2847/2705\nf 3337/2850/2708 3338/2847/2705 850/2849/2707\nf 852/2844/2702 3337/2850/2708 3341/2851/2709\nf 3342/2852/2710 3341/2851/2709 3337/2850/2708\nf 3342/2852/2710 3339/2853/2711 3340/2854/2712\nf 195/2855/2713 3340/2854/2712 3339/2853/2711\nf 819/2682/2544 3333/2843/2701 3217/2685/2547\nf 3344/2856/2714 3217/2685/2547 3333/2843/2701\nf 3344/2856/2714 3341/2851/2709 3343/2857/2715\nf 851/2858/2716 3343/2857/2715 3341/2851/2709\nf 184/2687/2549 3343/2857/2715 3226/2696/2558\nf 3347/2859/2717 3226/2696/2558 3343/2857/2715\nf 3347/2859/2717 3345/2860/2718 3346/2861/2719\nf 855/2862/2720 3346/2861/2719 3345/2860/2718\nf 851/2858/2716 3340/2854/2712 3345/2860/2718\nf 3350/2863/2721 3345/2860/2718 3340/2854/2712\nf 3348/2864/2722 853/2865/2723 3350/2863/2721\nf 3349/2866/2724 3350/2863/2721 853/2865/2723\nf 3349/2866/2724 3354/2867/2725 855/2862/2720\nf 3353/2868/2726 855/2862/2720 3354/2867/2725\nf 3351/2869/2727 196/2870/2728 3354/2867/2725\nf 3352/2871/2729 3354/2867/2725 196/2870/2728\nf 3356/2872/2730 3229/2701/2563 3346/2861/2719\nf 822/2698/2560 3346/2861/2719 3229/2701/2563\nf 3353/2868/2726 854/2873/2731 3356/2872/2730\nf 3355/2874/2732 3356/2872/2730 854/2873/2731\nf 3355/2874/2732 3359/2875/2733 185/2702/2564\nf 3238/2712/2574 185/2702/2564 3359/2875/2733\nf 3357/2876/2734 858/2877/2735 3359/2875/2733\nf 3358/2878/2736 3359/2875/2733 858/2877/2735\nf 3352/2871/2729 3362/2879/2737 854/2873/2731\nf 3357/2876/2734 854/2873/2731 3362/2879/2737\nf 3360/2880/2738 856/2881/2739 3362/2879/2737\nf 3361/2882/2740 3362/2879/2737 856/2881/2739\nf 3361/2882/2740 3366/2883/2741 858/2877/2735\nf 3365/2884/2742 858/2877/2735 3366/2883/2741\nf 3363/2885/2743 197/2886/2744 3366/2883/2741\nf 3364/2887/2745 3366/2883/2741 197/2886/2744\nf 3358/2878/2736 3368/2888/2746 825/2713/2575\nf 3241/2717/2579 825/2713/2575 3368/2888/2746\nf 3365/2884/2742 857/2889/2747 3368/2888/2746\nf 3367/2890/2748 3368/2888/2746 857/2889/2747\nf 3367/2890/2748 3371/2891/2749 186/2718/2580\nf 3250/2728/2590 186/2718/2580 3371/2891/2749\nf 3369/2892/2750 861/2893/2751 3371/2891/2749\nf 3370/2894/2752 3371/2891/2749 861/2893/2751\nf 3364/2887/2745 3374/2895/2753 857/2889/2747\nf 3369/2892/2750 857/2889/2747 3374/2895/2753\nf 3372/2896/2754 859/2897/2755 3374/2895/2753\nf 3373/2898/2756 3374/2895/2753 859/2897/2755\nf 3373/2898/2756 3378/2899/2757 861/2893/2751\nf 3377/2900/2758 861/2893/2751 3378/2899/2757\nf 198/2901/2759 3376/2902/2760 3375/2903/2761\nf 3378/2899/2757 3375/2903/2761 3376/2902/2760\nf 3370/2894/2752 3380/2904/2762 828/2729/2591\nf 3253/2733/2595 828/2729/2591 3380/2904/2762\nf 3377/2900/2758 860/2905/2763 3380/2904/2762\nf 3379/2906/2764 3380/2904/2762 860/2905/2763\nf 3379/2906/2764 3383/2907/2765 187/2734/2596\nf 3262/2744/2606 187/2734/2596 3383/2907/2765\nf 3381/2908/2766 864/2909/2767 3383/2907/2765\nf 3382/2910/2768 3383/2907/2765 864/2909/2767\nf 3376/2902/2760 3386/2911/2769 860/2905/2763\nf 3381/2908/2766 860/2905/2763 3386/2911/2769\nf 862/2912/2770 3385/2913/2771 3384/2914/2772\nf 3386/2911/2769 3384/2914/2772 3385/2913/2771\nf 3385/2913/2771 3390/2915/2773 864/2909/2767\nf 3389/2916/2774 864/2909/2767 3390/2915/2773\nf 199/2917/2775 3388/2918/2776 3387/2919/2777\nf 3390/2915/2773 3387/2919/2777 3388/2918/2776\nf 3382/2910/2768 3392/2920/2778 831/2745/2607\nf 3265/2749/2611 831/2745/2607 3392/2920/2778\nf 3389/2916/2774 863/2921/2779 3392/2920/2778\nf 3391/2922/2780 3392/2920/2778 863/2921/2779\nf 3391/2923/2780 3395/2924/2781 188/2925/2612\nf 3274/2764/2622 188/2925/2612 3395/2924/2781\nf 3393/2926/2782 867/2927/2783 3395/2924/2781\nf 3394/2928/2784 3395/2924/2781 867/2927/2783\nf 3388/2929/2776 3398/2930/2785 863/2931/2779\nf 3393/2926/2782 863/2931/2779 3398/2930/2785\nf 865/2932/2786 3397/2933/2787 3396/2934/2788\nf 3398/2930/2785 3396/2934/2788 3397/2933/2787\nf 3397/2933/2787 3402/2935/2789 867/2927/2783\nf 3401/2936/2790 867/2927/2783 3402/2935/2789\nf 200/2937/2791 3400/2938/2792 3399/2939/2793\nf 3402/2935/2789 3399/2939/2793 3400/2938/2792\nf 3394/2928/2784 3404/2940/2794 834/2765/2623\nf 3277/2769/2627 834/2765/2623 3404/2940/2794\nf 3401/2936/2790 866/2941/2795 3404/2940/2794\nf 3403/2942/2796 3404/2940/2794 866/2941/2795\nf 3403/2942/2796 3407/2943/2797 189/2770/2628\nf 3286/2780/2638 189/2770/2628 3407/2943/2797\nf 3405/2944/2798 870/2945/2799 3407/2943/2797\nf 3406/2946/2800 3407/2943/2797 870/2945/2799\nf 3400/2938/2792 3410/2947/2801 866/2941/2795\nf 3405/2944/2798 866/2941/2795 3410/2947/2801\nf 3408/2948/2802 868/2949/2803 3410/2947/2801\nf 3409/2950/2804 3410/2947/2801 868/2949/2803\nf 3409/2950/2804 3414/2951/2805 870/2945/2799\nf 3413/2952/2806 870/2945/2799 3414/2951/2805\nf 201/2953/2807 3412/2954/2808 3411/2955/2809\nf 3414/2951/2805 3411/2955/2809 3412/2954/2808\nf 3406/2946/2800 3416/2956/2810 837/2781/2639\nf 3289/2785/2643 837/2781/2639 3416/2956/2810\nf 3413/2952/2806 869/2957/2811 3416/2956/2810\nf 3415/2958/2812 3416/2956/2810 869/2957/2811\nf 3415/2958/2812 3419/2959/2813 190/2786/2644\nf 3298/2796/2654 190/2786/2644 3419/2959/2813\nf 3417/2960/2814 873/2961/2815 3419/2959/2813\nf 3418/2962/2816 3419/2959/2813 873/2961/2815\nf 3412/2954/2808 3422/2963/2817 869/2957/2811\nf 3417/2960/2814 869/2957/2811 3422/2963/2817\nf 3420/2964/2818 871/2965/2819 3422/2963/2817\nf 3421/2966/2820 3422/2963/2817 871/2965/2819\nf 3421/2966/2820 3426/2967/2821 873/2961/2815\nf 3425/2968/2822 873/2961/2815 3426/2967/2821\nf 202/2969/2823 3424/2970/2824 3423/2971/2825\nf 3426/2967/2821 3423/2971/2825 3424/2970/2824\nf 3418/2962/2816 3428/2972/2826 840/2797/2655\nf 3301/2801/2659 840/2797/2655 3428/2972/2826\nf 3425/2968/2822 872/2973/2827 3428/2972/2826\nf 3427/2974/2828 3428/2972/2826 872/2973/2827\nf 3427/2974/2828 3431/2975/2829 191/2802/2660\nf 3310/2812/2670 191/2802/2660 3431/2975/2829\nf 3429/2976/2830 876/2977/2831 3431/2975/2829\nf 3430/2978/2832 3431/2975/2829 876/2977/2831\nf 3424/2970/2824 3434/2979/2833 872/2973/2827\nf 3429/2976/2830 872/2973/2827 3434/2979/2833\nf 874/2980/2834 3433/2981/2835 3432/2982/2836\nf 3434/2979/2833 3432/2982/2836 3433/2981/2835\nf 3433/2981/2835 3438/2983/2837 876/2977/2831\nf 3437/2984/2838 876/2977/2831 3438/2983/2837\nf 203/2985/2839 3436/2986/2840 3435/2987/2841\nf 3438/2983/2837 3435/2987/2841 3436/2986/2840\nf 3430/2978/2832 3440/2988/2842 843/2813/2671\nf 3313/2817/2675 843/2813/2671 3440/2988/2842\nf 3437/2984/2838 875/2989/2843 3440/2988/2842\nf 3439/2990/2844 3440/2988/2842 875/2989/2843\nf 3439/2990/2844 3443/2991/2845 192/2818/2676\nf 3322/2828/2686 192/2818/2676 3443/2991/2845\nf 3441/2992/2846 879/2993/2847 3443/2991/2845\nf 3442/2994/2848 3443/2991/2845 879/2993/2847\nf 3436/2986/2840 3446/2995/2849 875/2989/2843\nf 3441/2992/2846 875/2989/2843 3446/2995/2849\nf 877/2996/2850 3445/2997/2851 3444/2998/2852\nf 3446/2995/2849 3444/2998/2852 3445/2997/2851\nf 3445/2997/2851 3450/2999/2853 879/2993/2847\nf 3449/3000/2854 879/2993/2847 3450/2999/2853\nf 3450/2999/2853 3447/3001/2855 3448/3002/2856\nf 204/3003/2857 3448/3002/2856 3447/3001/2855\nf 3442/2994/2848 3452/3004/2858 846/2829/2687\nf 3325/2835/2693 846/2829/2687 3452/3004/2858\nf 3452/3004/2858 3449/3000/2854 3451/3005/2859\nf 878/3006/2860 3451/3005/2859 3449/3000/2854\nf 3453/3007/2861 3456/3008/2862 194/3009/2863\nf 3336/2848/2706 194/3009/2863 3456/3008/2862\nf 3454/3010/2864 883/3011/2865 3456/3008/2862\nf 3455/3012/2866 3456/3008/2862 883/3011/2865\nf 3457/3013/2867 3460/3014/2868 880/3015/2869\nf 3454/3010/2864 880/3015/2869 3460/3014/2868\nf 3458/3016/2870 881/3017/2871 3460/3014/2868\nf 3459/3018/2872 3460/3014/2868 881/3017/2871\nf 3459/3018/2872 3464/3019/2873 883/3011/2865\nf 3463/3020/2874 883/3011/2865 3464/3019/2873\nf 3461/3021/2875 206/3022/2876 3464/3019/2873\nf 3462/3023/2877 3464/3019/2873 206/3022/2876\nf 3455/3012/2866 3466/3024/2878 850/2849/2707\nf 3339/2853/2711 850/2849/2707 3466/3024/2878\nf 3463/3020/2874 882/3025/2879 3466/3024/2878\nf 3465/3026/2880 3466/3024/2878 882/3025/2879\nf 3465/3026/2880 3469/3027/2881 195/2855/2713\nf 3348/2864/2722 195/2855/2713 3469/3027/2881\nf 3467/3028/2882 886/3029/2883 3469/3027/2881\nf 3468/3030/2884 3469/3027/2881 886/3029/2883\nf 3462/3023/2877 3472/3031/2885 882/3025/2879\nf 3467/3028/2882 882/3025/2879 3472/3031/2885\nf 3470/3032/2886 884/3033/2887 3472/3031/2885\nf 3471/3034/2888 3472/3031/2885 884/3033/2887\nf 3471/3034/2888 3476/3035/2889 886/3029/2883\nf 3475/3036/2890 886/3029/2883 3476/3035/2889\nf 3473/3037/2891 207/3038/2892 3476/3035/2889\nf 3474/3039/2893 3476/3035/2889 207/3038/2892\nf 3468/3030/2884 3478/3040/2894 853/2865/2723\nf 3351/2869/2727 853/2865/2723 3478/3040/2894\nf 3475/3036/2890 885/3041/2895 3478/3040/2894\nf 3477/3042/2896 3478/3040/2894 885/3041/2895\nf 3477/3042/2896 3481/3043/2897 196/2870/2728\nf 3360/2880/2738 196/2870/2728 3481/3043/2897\nf 3479/3044/2898 889/3045/2899 3481/3043/2897\nf 3480/3046/2900 3481/3043/2897 889/3045/2899\nf 3474/3039/2893 3484/3047/2901 885/3041/2895\nf 3479/3044/2898 885/3041/2895 3484/3047/2901\nf 3482/3048/2902 887/3049/2903 3484/3047/2901\nf 3483/3050/2904 3484/3047/2901 887/3049/2903\nf 3483/3050/2904 3488/3051/2905 889/3045/2899\nf 3487/3052/2906 889/3045/2899 3488/3051/2905\nf 3485/3053/2907 208/3054/2908 3488/3051/2905\nf 3486/3055/2909 3488/3051/2905 208/3054/2908\nf 3480/3046/2900 3490/3056/2910 856/2881/2739\nf 3363/2885/2743 856/2881/2739 3490/3056/2910\nf 3487/3052/2906 888/3057/2911 3490/3056/2910\nf 3489/3058/2912 3490/3056/2910 888/3057/2911\nf 3489/3058/2912 3493/3059/2913 197/2886/2744\nf 3372/2896/2754 197/2886/2744 3493/3059/2913\nf 3491/3060/2914 892/3061/2915 3493/3059/2913\nf 3492/3062/2916 3493/3059/2913 892/3061/2915\nf 3486/3055/2909 3496/3063/2917 888/3057/2911\nf 3491/3060/2914 888/3057/2911 3496/3063/2917\nf 3494/3064/2918 890/3065/2919 3496/3063/2917\nf 3495/3066/2920 3496/3063/2917 890/3065/2919\nf 3495/3066/2920 3500/3067/2921 892/3061/2915\nf 3499/3068/2922 892/3061/2915 3500/3067/2921\nf 209/3069/2923 3498/3070/2924 3497/3071/2925\nf 3500/3067/2921 3497/3071/2925 3498/3070/2924\nf 3502/3072/2926 3375/2903/2761 3492/3062/2916\nf 859/2897/2755 3492/3062/2916 3375/2903/2761\nf 891/3073/2927 3501/3074/2928 3499/3068/2922\nf 3502/3072/2926 3499/3068/2922 3501/3074/2928\nf 3505/3075/2929 3384/2914/2772 3501/3074/2928\nf 198/2901/2759 3501/3074/2928 3384/2914/2772\nf 895/3076/2930 3504/3077/2931 3503/3078/2932\nf 3505/3075/2929 3503/3078/2932 3504/3077/2931\nf 3508/3079/2933 3503/3078/2932 3498/3070/2924\nf 891/3073/2927 3498/3070/2924 3503/3078/2932\nf 893/3080/2934 3507/3081/2935 3506/3082/2936\nf 3508/3079/2933 3506/3082/2936 3507/3081/2935\nf 3512/3083/2937 3511/3084/2938 3507/3081/2935\nf 895/3076/2930 3507/3081/2935 3511/3084/2938\nf 210/3085/2939 3510/3086/2940 3509/3087/2941\nf 3512/3083/2937 3509/3087/2941 3510/3086/2940\nf 3514/3088/2942 3387/2919/2777 3504/3077/2931\nf 862/2912/2770 3504/3077/2931 3387/2919/2777\nf 894/3089/2943 3513/3090/2944 3511/3084/2938\nf 3514/3088/2942 3511/3084/2938 3513/3090/2944\nf 3517/3091/2945 3396/2934/2788 3513/3092/2944\nf 199/3093/2775 3513/3092/2944 3396/2934/2788\nf 898/3094/2946 3516/3095/2947 3515/3096/2948\nf 3517/3091/2945 3515/3096/2948 3516/3095/2947\nf 3520/3097/2949 3515/3096/2948 3510/3098/2940\nf 894/3099/2943 3510/3098/2940 3515/3096/2948\nf 896/3100/2950 3519/3101/2951 3518/3102/2952\nf 3520/3097/2949 3518/3102/2952 3519/3101/2951\nf 3524/3103/2953 3523/3104/2954 3519/3101/2951\nf 898/3094/2946 3519/3101/2951 3523/3104/2954\nf 211/3105/2955 3522/3106/2956 3521/3107/2957\nf 3524/3103/2953 3521/3107/2957 3522/3106/2956\nf 3526/3108/2958 3399/2939/2793 3516/3095/2947\nf 865/2932/2786 3516/3095/2947 3399/2939/2793\nf 897/3109/2959 3525/3110/2960 3523/3104/2954\nf 3526/3108/2958 3523/3104/2954 3525/3110/2960\nf 3525/3110/2960 3529/3111/2961 200/2937/2791\nf 3408/2948/2802 200/2937/2791 3529/3111/2961\nf 3527/3112/2962 901/3113/2963 3529/3111/2961\nf 3528/3114/2964 3529/3111/2961 901/3113/2963\nf 3522/3106/2956 3532/3115/2965 897/3109/2959\nf 3527/3112/2962 897/3109/2959 3532/3115/2965\nf 3530/3116/2966 899/3117/2967 3532/3115/2965\nf 3531/3118/2968 3532/3115/2965 899/3117/2967\nf 3536/3119/2969 3535/3120/2970 3531/3118/2968\nf 901/3113/2963 3531/3118/2968 3535/3120/2970\nf 212/3121/2971 3534/3122/2972 3533/3123/2973\nf 3536/3119/2969 3533/3123/2973 3534/3122/2972\nf 3538/3124/2974 3411/2955/2809 3528/3114/2964\nf 868/2949/2803 3528/3114/2964 3411/2955/2809\nf 900/3125/2975 3537/3126/2976 3535/3120/2970\nf 3538/3124/2974 3535/3120/2970 3537/3126/2976\nf 3537/3126/2976 3541/3127/2977 201/2953/2807\nf 3420/2964/2818 201/2953/2807 3541/3127/2977\nf 3539/3128/2978 904/3129/2979 3541/3127/2977\nf 3540/3130/2980 3541/3127/2977 904/3129/2979\nf 3534/3122/2972 3544/3131/2981 900/3125/2975\nf 3539/3128/2978 900/3125/2975 3544/3131/2981\nf 3542/3132/2982 902/3133/2983 3544/3131/2981\nf 3543/3134/2984 3544/3131/2981 902/3133/2983\nf 3548/3135/2985 3547/3136/2986 3543/3134/2984\nf 904/3129/2979 3543/3134/2984 3547/3136/2986\nf 213/3137/2987 3546/3138/2988 3545/3139/2989\nf 3548/3135/2985 3545/3139/2989 3546/3138/2988\nf 3550/3140/2990 3423/2971/2825 3540/3130/2980\nf 871/2965/2819 3540/3130/2980 3423/2971/2825\nf 903/3141/2991 3549/3142/2992 3547/3136/2986\nf 3550/3140/2990 3547/3136/2986 3549/3142/2992\nf 3549/3142/2992 3553/3143/2993 202/2969/2823\nf 3432/2982/2836 202/2969/2823 3553/3143/2993\nf 907/3144/2994 3552/3145/2995 3551/3146/2996\nf 3553/3143/2993 3551/3146/2996 3552/3145/2995\nf 3546/3138/2988 3556/3147/2997 903/3141/2991\nf 3551/3146/2996 903/3141/2991 3556/3147/2997\nf 905/3148/2998 3555/3149/2999 3554/3150/3000\nf 3556/3147/2997 3554/3150/3000 3555/3149/2999\nf 3560/3151/3001 3559/3152/3002 3555/3149/2999\nf 907/3144/2994 3555/3149/2999 3559/3152/3002\nf 214/3153/3003 3558/3154/3004 3557/3155/3005\nf 3560/3151/3001 3557/3155/3005 3558/3154/3004\nf 3562/3156/3006 3435/2987/2841 3552/3145/2995\nf 874/2980/2834 3552/3145/2995 3435/2987/2841\nf 906/3157/3007 3561/3158/3008 3559/3152/3002\nf 3562/3156/3006 3559/3152/3002 3561/3158/3008\nf 3565/3159/3009 3444/2998/2852 3561/3158/3008\nf 203/2985/2839 3561/3158/3008 3444/2998/2852\nf 3565/3159/3009 3563/3160/3010 3564/3161/3011\nf 910/3162/3012 3564/3161/3011 3563/3160/3010\nf 3568/3163/3013 3563/3160/3010 3558/3154/3004\nf 906/3157/3007 3558/3154/3004 3563/3160/3010\nf 908/3164/3014 3567/3165/3015 3566/3166/3016\nf 3568/3163/3013 3566/3166/3016 3567/3165/3015\nf 910/3162/3012 3567/3165/3015 3571/3167/3017\nf 3572/3168/3018 3571/3167/3017 3567/3165/3015\nf 215/3169/3019 3570/3170/3020 3569/3171/3021\nf 3572/3168/3018 3569/3171/3021 3570/3170/3020\nf 877/2996/2850 3564/3161/3011 3447/3001/2855\nf 3574/3172/3022 3447/3001/2855 3564/3161/3011\nf 909/3173/3023 3573/3174/3024 3571/3167/3017\nf 3574/3172/3022 3571/3167/3017 3573/3174/3024\nf 205/3175/3025 3575/3176/3026 3458/3016/2870\nf 3578/3177/3027 3458/3016/2870 3575/3176/3026\nf 3578/3177/3027 3576/3178/3028 3577/3179/3029\nf 914/3180/3030 3577/3179/3029 3576/3178/3028\nf 911/3181/3031 3579/3182/3032 3576/3178/3028\nf 3582/3183/3033 3576/3178/3028 3579/3182/3032\nf 3582/3183/3033 3580/3184/3034 3581/3185/3035\nf 912/3186/3036 3581/3185/3035 3580/3184/3034\nf 914/3180/3030 3581/3185/3035 3585/3187/3037\nf 3586/3188/3038 3585/3187/3037 3581/3185/3035\nf 3583/3189/3039 217/3190/3040 3586/3188/3038\nf 3584/3191/3041 3586/3188/3038 217/3190/3040\nf 3577/3179/3029 3588/3192/3042 881/3017/2871\nf 3461/3021/2875 881/3017/2871 3588/3192/3042\nf 3585/3187/3037 913/3193/3043 3588/3192/3042\nf 3587/3194/3044 3588/3192/3042 913/3193/3043\nf 3587/3194/3044 3591/3195/3045 206/3022/2876\nf 3470/3032/2886 206/3022/2876 3591/3195/3045\nf 3589/3196/3046 917/3197/3047 3591/3195/3045\nf 3590/3198/3048 3591/3195/3045 917/3197/3047\nf 3584/3191/3041 3594/3199/3049 913/3193/3043\nf 3589/3196/3046 913/3193/3043 3594/3199/3049\nf 3592/3200/3050 915/3201/3051 3594/3199/3049\nf 3593/3202/3052 3594/3199/3049 915/3201/3051\nf 3593/3202/3052 3598/3203/3053 917/3197/3047\nf 3597/3204/3054 917/3197/3047 3598/3203/3053\nf 3595/3205/3055 218/3206/3056 3598/3203/3053\nf 3596/3207/3057 3598/3203/3053 218/3206/3056\nf 3590/3198/3048 3600/3208/3058 884/3033/2887\nf 3473/3037/2891 884/3033/2887 3600/3208/3058\nf 3597/3204/3054 916/3209/3059 3600/3208/3058\nf 3599/3210/3060 3600/3208/3058 916/3209/3059\nf 3599/3210/3060 3603/3211/3061 207/3038/2892\nf 3482/3048/2902 207/3038/2892 3603/3211/3061\nf 3601/3212/3062 920/3213/3063 3603/3211/3061\nf 3602/3214/3064 3603/3211/3061 920/3213/3063\nf 3596/3207/3057 3606/3215/3065 916/3209/3059\nf 3601/3212/3062 916/3209/3059 3606/3215/3065\nf 3604/3216/3066 918/3217/3067 3606/3215/3065\nf 3605/3218/3068 3606/3215/3065 918/3217/3067\nf 3605/3218/3068 3610/3219/3069 920/3213/3063\nf 3609/3220/3070 920/3213/3063 3610/3219/3069\nf 3607/3221/3071 219/3222/3072 3610/3219/3069\nf 3608/3223/3073 3610/3219/3069 219/3222/3072\nf 3602/3214/3064 3612/3224/3074 887/3049/2903\nf 3485/3053/2907 887/3049/2903 3612/3224/3074\nf 3609/3220/3070 919/3225/3075 3612/3224/3074\nf 3611/3226/3076 3612/3224/3074 919/3225/3075\nf 3611/3226/3076 3615/3227/3077 208/3054/2908\nf 3494/3064/2918 208/3054/2908 3615/3227/3077\nf 3613/3228/3078 923/3229/3079 3615/3227/3077\nf 3614/3230/3080 3615/3227/3077 923/3229/3079\nf 3608/3223/3073 3618/3231/3081 919/3225/3075\nf 3613/3228/3078 919/3225/3075 3618/3231/3081\nf 3616/3232/3082 921/3233/3083 3618/3231/3081\nf 3617/3234/3084 3618/3231/3081 921/3233/3083\nf 3617/3234/3084 3622/3235/3085 923/3229/3079\nf 3621/3236/3086 923/3229/3079 3622/3235/3085\nf 3619/3237/3087 220/3238/3088 3622/3235/3085\nf 3620/3239/3089 3622/3235/3085 220/3238/3088\nf 3614/3230/3080 3624/3240/3090 890/3065/2919\nf 3497/3071/2925 890/3065/2919 3624/3240/3090\nf 3621/3236/3086 922/3241/3091 3624/3240/3090\nf 3623/3242/3092 3624/3240/3090 922/3241/3091\nf 3623/3242/3092 3627/3243/3093 209/3069/2923\nf 3506/3082/2936 209/3069/2923 3627/3243/3093\nf 3625/3244/3094 926/3245/3095 3627/3243/3093\nf 3626/3246/3096 3627/3243/3093 926/3245/3095\nf 3620/3239/3089 3630/3247/3097 922/3241/3091\nf 3625/3244/3094 922/3241/3091 3630/3247/3097\nf 3628/3248/3098 924/3249/3099 3630/3247/3097\nf 3629/3250/3100 3630/3247/3097 924/3249/3099\nf 3634/3251/3101 3633/3252/3102 3629/3250/3100\nf 926/3245/3095 3629/3250/3100 3633/3252/3102\nf 221/3253/3103 3632/3254/3104 3631/3255/3105\nf 3634/3251/3101 3631/3255/3105 3632/3254/3104\nf 3636/3256/3106 3509/3087/2941 3626/3246/3096\nf 893/3080/2934 3626/3246/3096 3509/3087/2941\nf 925/3257/3107 3635/3258/3108 3633/3252/3102\nf 3636/3256/3106 3633/3252/3102 3635/3258/3108\nf 3639/3259/3109 3518/3102/2952 3635/3260/3108\nf 210/3261/2939 3635/3260/3108 3518/3102/2952\nf 929/3262/3110 3638/3263/3111 3637/3264/3112\nf 3639/3259/3109 3637/3264/3112 3638/3263/3111\nf 3642/3265/3113 3637/3264/3112 3632/3266/3104\nf 925/3267/3107 3632/3266/3104 3637/3264/3112\nf 927/3268/3114 3641/3269/3115 3640/3270/3116\nf 3642/3265/3113 3640/3270/3116 3641/3269/3115\nf 3646/3271/3117 3645/3272/3118 3641/3269/3115\nf 929/3262/3110 3641/3269/3115 3645/3272/3118\nf 222/3273/3119 3644/3274/3120 3643/3275/3121\nf 3646/3271/3117 3643/3275/3121 3644/3274/3120\nf 3648/3276/3122 3521/3107/2957 3638/3263/3111\nf 896/3100/2950 3638/3263/3111 3521/3107/2957\nf 928/3277/3123 3647/3278/3124 3645/3272/3118\nf 3648/3276/3122 3645/3272/3118 3647/3278/3124\nf 3647/3278/3124 3651/3279/3125 211/3105/2955\nf 3530/3116/2966 211/3105/2955 3651/3279/3125\nf 3649/3280/3126 932/3281/3127 3651/3279/3125\nf 3650/3282/3128 3651/3279/3125 932/3281/3127\nf 3654/3283/3129 3649/3280/3126 3644/3274/3120\nf 928/3277/3123 3644/3274/3120 3649/3280/3126\nf 3652/3284/3130 930/3285/3131 3654/3283/3129\nf 3653/3286/3132 3654/3283/3129 930/3285/3131\nf 3658/3287/3133 3657/3288/3134 3653/3286/3132\nf 932/3281/3127 3653/3286/3132 3657/3288/3134\nf 223/3289/3135 3656/3290/3136 3655/3291/3137\nf 3658/3287/3133 3655/3291/3137 3656/3290/3136\nf 3660/3292/3138 3533/3123/2973 3650/3282/3128\nf 899/3117/2967 3650/3282/3128 3533/3123/2973\nf 931/3293/3139 3659/3294/3140 3657/3288/3134\nf 3660/3292/3138 3657/3288/3134 3659/3294/3140\nf 3659/3294/3140 3663/3295/3141 212/3121/2971\nf 3542/3132/2982 212/3121/2971 3663/3295/3141\nf 3661/3296/3142 935/3297/3143 3663/3295/3141\nf 3662/3298/3144 3663/3295/3141 935/3297/3143\nf 3656/3290/3136 3666/3299/3145 931/3293/3139\nf 3661/3296/3142 931/3293/3139 3666/3299/3145\nf 3664/3300/3146 933/3301/3147 3666/3299/3145\nf 3665/3302/3148 3666/3299/3145 933/3301/3147\nf 3670/3303/3149 3669/3304/3150 3665/3302/3148\nf 935/3297/3143 3665/3302/3148 3669/3304/3150\nf 224/3305/3151 3668/3306/3152 3667/3307/3153\nf 3670/3303/3149 3667/3307/3153 3668/3306/3152\nf 3672/3308/3154 3545/3139/2989 3662/3298/3144\nf 902/3133/2983 3662/3298/3144 3545/3139/2989\nf 934/3309/3155 3671/3310/3156 3669/3304/3150\nf 3672/3308/3154 3669/3304/3150 3671/3310/3156\nf 3671/3310/3156 3675/3311/3157 213/3137/2987\nf 3554/3150/3000 213/3137/2987 3675/3311/3157\nf 938/3312/3158 3674/3313/3159 3673/3314/3160\nf 3675/3311/3157 3673/3314/3160 3674/3313/3159\nf 3668/3306/3152 3678/3315/3161 934/3309/3155\nf 3673/3314/3160 934/3309/3155 3678/3315/3161\nf 3676/3316/3162 936/3317/3163 3678/3315/3161\nf 3677/3318/3164 3678/3315/3161 936/3317/3163\nf 3677/3318/3164 3682/3319/3165 938/3312/3158\nf 3681/3320/3166 938/3312/3158 3682/3319/3165\nf 3680/3321/3167 3682/3319/3165 225/3322/3168\nf 3679/3323/3169 225/3322/3168 3682/3319/3165\nf 3684/3324/3170 3557/3155/3005 3674/3313/3159\nf 905/3148/2998 3674/3313/3159 3557/3155/3005\nf 937/3325/3171 3683/3326/3172 3681/3320/3166\nf 3684/3324/3170 3681/3320/3166 3683/3326/3172\nf 3687/3327/3173 3566/3166/3016 3683/3326/3172\nf 214/3153/3003 3683/3326/3172 3566/3166/3016\nf 941/3328/3174 3686/3329/3175 3685/3330/3176\nf 3687/3327/3173 3685/3330/3176 3686/3329/3175\nf 3685/3330/3176 937/3325/3171 3690/3331/3177\nf 3680/3321/3167 3690/3331/3177 937/3325/3171\nf 3689/3332/3178 3690/3331/3177 939/3333/3179\nf 3688/3334/3180 939/3333/3179 3690/3331/3177\nf 3693/3335/3181 941/3328/3174 3694/3336/3182\nf 3689/3332/3178 3694/3336/3182 941/3328/3174\nf 3692/3337/3183 3694/3336/3182 226/3338/3184\nf 3691/3339/3185 226/3338/3184 3694/3336/3182\nf 3569/3171/3021 908/3164/3014 3696/3340/3186\nf 3686/3329/3175 3696/3340/3186 908/3164/3014\nf 3695/3341/3187 3696/3340/3186 940/3342/3188\nf 3693/3335/3181 940/3342/3188 3696/3340/3186\nf 3580/3184/3034 216/3343/3189 3700/3344/3190\nf 3697/3345/3191 3700/3344/3190 216/3343/3189\nf 3698/3346/3192 945/3347/3193 3700/3344/3190\nf 3699/3348/3194 3700/3344/3190 945/3347/3193\nf 3701/3349/3195 3704/3350/3196 942/3351/3197\nf 3698/3346/3192 942/3351/3197 3704/3350/3196\nf 3702/3352/3198 943/3353/3199 3704/3350/3196\nf 3703/3354/3200 3704/3350/3196 943/3353/3199\nf 3703/3354/3200 3708/3355/3201 945/3347/3193\nf 3707/3356/3202 945/3347/3193 3708/3355/3201\nf 3705/3357/3203 228/3358/3204 3708/3355/3201\nf 3706/3359/3205 3708/3355/3201 228/3358/3204\nf 3699/3348/3194 3710/3360/3206 912/3186/3036\nf 3583/3189/3039 912/3186/3036 3710/3360/3206\nf 3707/3356/3202 944/3361/3207 3710/3360/3206\nf 3709/3362/3208 3710/3360/3206 944/3361/3207\nf 3709/3362/3208 3713/3363/3209 217/3190/3040\nf 3592/3200/3050 217/3190/3040 3713/3363/3209\nf 3711/3364/3210 948/3365/3211 3713/3363/3209\nf 3712/3366/3212 3713/3363/3209 948/3365/3211\nf 3706/3359/3205 3716/3367/3213 944/3361/3207\nf 3711/3364/3210 944/3361/3207 3716/3367/3213\nf 3714/3368/3214 946/3369/3215 3716/3367/3213\nf 3715/3370/3216 3716/3367/3213 946/3369/3215\nf 3715/3370/3216 3720/3371/3217 948/3365/3211\nf 3719/3372/3218 948/3365/3211 3720/3371/3217\nf 3717/3373/3219 229/3374/3220 3720/3371/3217\nf 3718/3375/3221 3720/3371/3217 229/3374/3220\nf 3712/3366/3212 3722/3376/3222 915/3201/3051\nf 3595/3205/3055 915/3201/3051 3722/3376/3222\nf 3719/3372/3218 947/3377/3223 3722/3376/3222\nf 3721/3378/3224 3722/3376/3222 947/3377/3223\nf 3721/3378/3224 3725/3379/3225 218/3206/3056\nf 3604/3216/3066 218/3206/3056 3725/3379/3225\nf 3725/3379/3225 3723/3380/3226 3724/3381/3227\nf 951/3382/3228 3724/3381/3227 3723/3380/3226\nf 947/3377/3223 3718/3375/3221 3723/3380/3226\nf 3728/3383/3229 3723/3380/3226 3718/3375/3221\nf 3728/3383/3229 3726/3384/3230 3727/3385/3231\nf 949/3386/3232 3727/3385/3231 3726/3384/3230\nf 951/3382/3228 3727/3385/3231 3731/3387/3233\nf 3732/3388/3234 3731/3387/3233 3727/3385/3231\nf 3732/3388/3234 3729/3389/3235 3730/3390/3236\nf 230/3391/3237 3730/3390/3236 3729/3389/3235\nf 918/3217/3067 3724/3381/3227 3607/3221/3071\nf 3734/3392/3238 3607/3221/3071 3724/3381/3227\nf 3734/3392/3238 3731/3387/3233 3733/3393/3239\nf 950/3394/3240 3733/3393/3239 3731/3387/3233\nf 219/3222/3072 3733/3393/3239 3616/3232/3082\nf 3737/3395/3241 3616/3232/3082 3733/3393/3239\nf 3737/3395/3241 3735/3396/3242 3736/3397/3243\nf 954/3398/3244 3736/3397/3243 3735/3396/3242\nf 950/3394/3240 3730/3390/3236 3735/3396/3242\nf 3740/3399/3245 3735/3396/3242 3730/3390/3236\nf 3740/3399/3245 3738/3400/3246 3739/3401/3247\nf 952/3402/3248 3739/3401/3247 3738/3400/3246\nf 954/3398/3244 3739/3401/3247 3743/3403/3249\nf 3744/3404/3250 3743/3403/3249 3739/3401/3247\nf 3744/3404/3250 3741/3405/3251 3742/3406/3252\nf 231/3407/3253 3742/3406/3252 3741/3405/3251\nf 921/3233/3083 3736/3397/3243 3619/3237/3087\nf 3746/3408/3254 3619/3237/3087 3736/3397/3243\nf 3746/3408/3254 3743/3403/3249 3745/3409/3255\nf 953/3410/3256 3745/3409/3255 3743/3403/3249\nf 3628/3248/3098 220/3238/3088 3749/3411/3257\nf 3745/3409/3255 3749/3411/3257 220/3238/3088\nf 3749/3411/3257 3747/3412/3258 3748/3413/3259\nf 957/3414/3260 3748/3413/3259 3747/3412/3258\nf 953/3410/3256 3742/3406/3252 3747/3412/3258\nf 3752/3415/3261 3747/3412/3258 3742/3406/3252\nf 3752/3415/3261 3750/3416/3262 3751/3417/3263\nf 955/3418/3264 3751/3417/3263 3750/3416/3262\nf 3755/3419/3265 957/3414/3260 3756/3420/3266\nf 3751/3417/3263 3756/3420/3266 957/3414/3260\nf 3754/3421/3267 3756/3420/3266 232/3422/3268\nf 3753/3423/3269 232/3422/3268 3756/3420/3266\nf 3631/3255/3105 924/3249/3099 3758/3424/3270\nf 3748/3413/3259 3758/3424/3270 924/3249/3099\nf 3757/3425/3271 3758/3424/3270 956/3426/3272\nf 3755/3419/3265 956/3426/3272 3758/3424/3270\nf 3640/3270/3116 221/3427/3103 3761/3428/3273\nf 3757/3429/3271 3761/3428/3273 221/3427/3103\nf 3760/3430/3274 3761/3428/3273 960/3431/3275\nf 3759/3432/3276 960/3431/3275 3761/3428/3273\nf 3759/3432/3276 956/3433/3272 3764/3434/3277\nf 3754/3435/3267 3764/3434/3277 956/3433/3272\nf 3763/3436/3278 3764/3434/3277 958/3437/3279\nf 3762/3438/3280 958/3437/3279 3764/3434/3277\nf 3767/3439/3281 960/3431/3275 3768/3440/3282\nf 3763/3436/3278 3768/3440/3282 960/3431/3275\nf 3766/3441/3283 3768/3440/3282 233/3442/3284\nf 3765/3443/3285 233/3442/3284 3768/3440/3282\nf 3643/3275/3121 927/3268/3114 3770/3444/3286\nf 3760/3430/3274 3770/3444/3286 927/3268/3114\nf 3769/3445/3287 3770/3444/3286 959/3446/3288\nf 3767/3439/3281 959/3446/3288 3770/3444/3286\nf 222/3273/3119 3769/3445/3287 3652/3284/3130\nf 3773/3447/3289 3652/3284/3130 3769/3445/3287\nf 3773/3447/3289 3771/3448/3290 3772/3449/3291\nf 963/3450/3292 3772/3449/3291 3771/3448/3290\nf 959/3446/3288 3766/3441/3283 3771/3448/3290\nf 3776/3451/3293 3771/3448/3290 3766/3441/3283\nf 3776/3451/3293 3774/3452/3294 3775/3453/3295\nf 961/3454/3296 3775/3453/3295 3774/3452/3294\nf 3779/3455/3297 963/3450/3292 3780/3456/3298\nf 3775/3453/3295 3780/3456/3298 963/3450/3292\nf 3778/3457/3299 3780/3456/3298 234/3458/3300\nf 3777/3459/3301 234/3458/3300 3780/3456/3298\nf 3655/3291/3137 930/3285/3131 3782/3460/3302\nf 3772/3449/3291 3782/3460/3302 930/3285/3131\nf 3781/3461/3303 3782/3460/3302 962/3462/3304\nf 3779/3455/3297 962/3462/3304 3782/3460/3302\nf 223/3289/3135 3781/3461/3303 3664/3300/3146\nf 3785/3463/3305 3664/3300/3146 3781/3461/3303\nf 3785/3463/3305 3783/3464/3306 3784/3465/3307\nf 966/3466/3308 3784/3465/3307 3783/3464/3306\nf 962/3462/3304 3778/3457/3299 3783/3464/3306\nf 3788/3467/3309 3783/3464/3306 3778/3457/3299\nf 3788/3467/3309 3786/3468/3310 3787/3469/3311\nf 964/3470/3312 3787/3469/3311 3786/3468/3310\nf 3791/3471/3313 966/3466/3308 3792/3472/3314\nf 3787/3469/3311 3792/3472/3314 966/3466/3308\nf 3790/3473/3315 3792/3472/3314 235/3474/3316\nf 3789/3475/3317 235/3474/3316 3792/3472/3314\nf 3667/3307/3153 933/3301/3147 3794/3476/3318\nf 3784/3465/3307 3794/3476/3318 933/3301/3147\nf 3793/3477/3319 3794/3476/3318 965/3478/3320\nf 3791/3471/3313 965/3478/3320 3794/3476/3318\nf 224/3305/3151 3793/3477/3319 3676/3316/3162\nf 3797/3479/3321 3676/3316/3162 3793/3477/3319\nf 3796/3480/3322 3797/3479/3321 969/3481/3323\nf 3795/3482/3324 969/3481/3323 3797/3479/3321\nf 965/3478/3320 3790/3473/3315 3795/3482/3324\nf 3800/3483/3325 3795/3482/3324 3790/3473/3315\nf 3799/3484/3326 3800/3483/3325 967/3485/3327\nf 3798/3486/3328 967/3485/3327 3800/3483/3325\nf 3803/3487/3329 969/3481/3323 3804/3488/3330\nf 3799/3484/3326 3804/3488/3330 969/3481/3323\nf 3802/3489/3331 3804/3488/3330 236/3490/3332\nf 3801/3491/3333 236/3490/3332 3804/3488/3330\nf 3679/3323/3169 936/3317/3163 3806/3492/3334\nf 3796/3480/3322 3806/3492/3334 936/3317/3163\nf 3805/3493/3335 3806/3492/3334 968/3494/3336\nf 3803/3487/3329 968/3494/3336 3806/3492/3334\nf 3688/3334/3180 225/3322/3168 3809/3495/3337\nf 3805/3493/3335 3809/3495/3337 225/3322/3168\nf 3808/3496/3338 3809/3495/3337 972/3497/3339\nf 3807/3498/3340 972/3497/3339 3809/3495/3337\nf 3807/3498/3340 968/3494/3336 3812/3499/3341\nf 3802/3489/3331 3812/3499/3341 968/3494/3336\nf 3811/3500/3342 3812/3499/3341 970/3501/3343\nf 3810/3502/3344 970/3501/3343 3812/3499/3341\nf 3815/3503/3345 972/3497/3339 3816/3504/3346\nf 3811/3500/3342 3816/3504/3346 972/3497/3339\nf 3814/3505/3347 3816/3504/3346 237/3506/3348\nf 3813/3507/3349 237/3506/3348 3816/3504/3346\nf 3691/3339/3185 939/3333/3179 3818/3508/3350\nf 3808/3496/3338 3818/3508/3350 939/3333/3179\nf 3817/3509/3351 3818/3508/3350 971/3510/3352\nf 3815/3503/3345 971/3510/3352 3818/3508/3350\nf 3819/3511/3353 3822/3512/3354 227/3513/3355\nf 3702/3352/3198 227/3513/3355 3822/3512/3354\nf 3821/3514/3356 3822/3512/3354 976/3515/3357\nf 3820/3516/3358 976/3515/3357 3822/3512/3354\nf 3820/3516/3358 973/3517/3359 3826/3518/3360\nf 3823/3519/3361 3826/3518/3360 973/3517/3359\nf 3825/3520/3362 3826/3518/3360 974/3521/3363\nf 3824/3522/3364 974/3521/3363 3826/3518/3360\nf 3829/3523/3365 976/3515/3357 3830/3524/3366\nf 3825/3520/3362 3830/3524/3366 976/3515/3357\nf 3828/3525/3367 3830/3524/3366 239/3526/3368\nf 3827/3527/3369 239/3526/3368 3830/3524/3366\nf 3821/3514/3356 3832/3528/3370 943/3353/3199\nf 3705/3357/3203 943/3353/3199 3832/3528/3370\nf 3829/3523/3365 975/3529/3371 3832/3528/3370\nf 3831/3530/3372 3832/3528/3370 975/3529/3371\nf 3831/3530/3372 3835/3531/3373 228/3358/3204\nf 3714/3368/3214 228/3358/3204 3835/3531/3373\nf 3833/3532/3374 979/3533/3375 3835/3531/3373\nf 3834/3534/3376 3835/3531/3373 979/3533/3375\nf 3833/3532/3374 975/3529/3371 3838/3535/3377\nf 3828/3525/3367 3838/3535/3377 975/3529/3371\nf 3837/3536/3378 3838/3535/3377 977/3537/3379\nf 3836/3538/3380 977/3537/3379 3838/3535/3377\nf 3841/3539/3381 979/3533/3375 3842/3540/3382\nf 3837/3536/3378 3842/3540/3382 979/3533/3375\nf 3840/3541/3383 3842/3540/3382 240/3542/3384\nf 3839/3543/3385 240/3542/3384 3842/3540/3382\nf 3834/3534/3376 3844/3544/3386 946/3369/3215\nf 3717/3373/3219 946/3369/3215 3844/3544/3386\nf 3843/3545/3387 3844/3544/3386 978/3546/3388\nf 3841/3539/3381 978/3546/3388 3844/3544/3386\nf 229/3374/3220 3843/3545/3387 3726/3384/3230\nf 3847/3547/3389 3726/3384/3230 3843/3545/3387\nf 3847/3547/3389 3845/3548/3390 3846/3549/3391\nf 982/3550/3392 3846/3549/3391 3845/3548/3390\nf 978/3546/3388 3840/3541/3383 3845/3548/3390\nf 3850/3551/3393 3845/3548/3390 3840/3541/3383\nf 3850/3551/3393 3848/3552/3394 3849/3553/3395\nf 980/3554/3396 3849/3553/3395 3848/3552/3394\nf 982/3550/3392 3849/3553/3395 3853/3555/3397\nf 3854/3556/3398 3853/3555/3397 3849/3553/3395\nf 3854/3556/3398 3851/3557/3399 3852/3558/3400\nf 241/3559/3401 3852/3558/3400 3851/3557/3399\nf 949/3386/3232 3846/3549/3391 3729/3389/3235\nf 3856/3560/3402 3729/3389/3235 3846/3549/3391\nf 3856/3560/3402 3853/3555/3397 3855/3561/3403\nf 981/3562/3404 3855/3561/3403 3853/3555/3397\nf 230/3391/3237 3855/3561/3403 3738/3400/3246\nf 3859/3563/3405 3738/3400/3246 3855/3561/3403\nf 3859/3563/3405 3857/3564/3406 3858/3565/3407\nf 985/3566/3408 3858/3565/3407 3857/3564/3406\nf 981/3562/3404 3852/3558/3400 3857/3564/3406\nf 3862/3567/3409 3857/3564/3406 3852/3558/3400\nf 3861/3568/3410 3862/3567/3409 983/3569/3411\nf 3860/3570/3412 983/3569/3411 3862/3567/3409\nf 3865/3571/3413 985/3566/3408 3866/3572/3414\nf 3861/3568/3410 3866/3572/3414 985/3566/3408\nf 3864/3573/3415 3866/3572/3414 242/3574/3416\nf 3863/3575/3417 242/3574/3416 3866/3572/3414\nf 952/3402/3248 3858/3565/3407 3741/3405/3251\nf 3868/3576/3418 3741/3405/3251 3858/3565/3407\nf 3867/3577/3419 3868/3576/3418 984/3578/3420\nf 3865/3571/3413 984/3578/3420 3868/3576/3418\nf 3750/3416/3262 231/3407/3253 3871/3579/3421\nf 3867/3577/3419 3871/3579/3421 231/3407/3253\nf 3870/3580/3422 3871/3579/3421 988/3581/3423\nf 3869/3582/3424 988/3581/3423 3871/3579/3421\nf 3869/3582/3424 984/3578/3420 3874/3583/3425\nf 3864/3573/3415 3874/3583/3425 984/3578/3420\nf 3873/3584/3426 3874/3583/3425 986/3585/3427\nf 3872/3586/3428 986/3585/3427 3874/3583/3425\nf 3877/3587/3429 988/3581/3423 3878/3588/3430\nf 3873/3584/3426 3878/3588/3430 988/3581/3423\nf 3876/3589/3431 3878/3588/3430 243/3590/3432\nf 3875/3591/3433 243/3590/3432 3878/3588/3430\nf 3753/3423/3269 955/3418/3264 3880/3592/3434\nf 3870/3580/3422 3880/3592/3434 955/3418/3264\nf 3879/3593/3435 3880/3592/3434 987/3594/3436\nf 3877/3587/3429 987/3594/3436 3880/3592/3434\nf 3762/3438/3280 232/3595/3268 3883/3596/3437\nf 3879/3597/3435 3883/3596/3437 232/3595/3268\nf 3882/3598/3438 3883/3596/3437 991/3599/3439\nf 3881/3600/3440 991/3599/3439 3883/3596/3437\nf 3881/3600/3440 987/3601/3436 3886/3602/3441\nf 3876/3603/3431 3886/3602/3441 987/3601/3436\nf 3886/3602/3441 3884/3604/3442 3885/3605/3443\nf 989/3606/3444 3885/3605/3443 3884/3604/3442\nf 3889/3607/3445 991/3599/3439 3890/3608/3446\nf 3885/3605/3443 3890/3608/3446 991/3599/3439\nf 3888/3609/3447 3890/3608/3446 244/3610/3448\nf 3887/3611/3449 244/3610/3448 3890/3608/3446\nf 3765/3443/3285 958/3437/3279 3892/3612/3450\nf 3882/3598/3438 3892/3612/3450 958/3437/3279\nf 3891/3613/3451 3892/3612/3450 990/3614/3452\nf 3889/3607/3445 990/3614/3452 3892/3612/3450\nf 233/3442/3284 3891/3613/3451 3774/3452/3294\nf 3895/3615/3453 3774/3452/3294 3891/3613/3451\nf 3895/3615/3453 3893/3616/3454 3894/3617/3455\nf 994/3618/3456 3894/3617/3455 3893/3616/3454\nf 990/3614/3452 3888/3609/3447 3893/3616/3454\nf 3898/3619/3457 3893/3616/3454 3888/3609/3447\nf 3898/3619/3457 3896/3620/3458 3897/3621/3459\nf 992/3622/3460 3897/3621/3459 3896/3620/3458\nf 3901/3623/3461 994/3618/3456 3902/3624/3462\nf 3897/3621/3459 3902/3624/3462 994/3618/3456\nf 3900/3625/3463 3902/3624/3462 245/3626/3464\nf 3899/3627/3465 245/3626/3464 3902/3624/3462\nf 3777/3459/3301 961/3454/3296 3904/3628/3466\nf 3894/3617/3455 3904/3628/3466 961/3454/3296\nf 3903/3629/3467 3904/3628/3466 993/3630/3468\nf 3901/3623/3461 993/3630/3468 3904/3628/3466\nf 234/3458/3300 3903/3629/3467 3786/3468/3310\nf 3907/3631/3469 3786/3468/3310 3903/3629/3467\nf 3907/3631/3469 3905/3632/3470 3906/3633/3471\nf 997/3634/3472 3906/3633/3471 3905/3632/3470\nf 993/3630/3468 3900/3625/3463 3905/3632/3470\nf 3910/3635/3473 3905/3632/3470 3900/3625/3463\nf 3910/3635/3473 3908/3636/3474 3909/3637/3475\nf 995/3638/3476 3909/3637/3475 3908/3636/3474\nf 3913/3639/3477 997/3634/3472 3914/3640/3478\nf 3909/3637/3475 3914/3640/3478 997/3634/3472\nf 3912/3641/3479 3914/3640/3478 246/3642/3480\nf 3911/3643/3481 246/3642/3480 3914/3640/3478\nf 3789/3475/3317 964/3470/3312 3916/3644/3482\nf 3906/3633/3471 3916/3644/3482 964/3470/3312\nf 3915/3645/3483 3916/3644/3482 996/3646/3484\nf 3913/3639/3477 996/3646/3484 3916/3644/3482\nf 235/3474/3316 3915/3645/3483 3798/3486/3328\nf 3919/3647/3485 3798/3486/3328 3915/3645/3483\nf 3918/3648/3486 3919/3647/3485 1000/3649/3487\nf 3917/3650/3488 1000/3649/3487 3919/3647/3485\nf 996/3646/3484 3912/3641/3479 3917/3650/3488\nf 3922/3651/3489 3917/3650/3488 3912/3641/3479\nf 3922/3651/3489 3920/3652/3490 3921/3653/3491\nf 998/3654/3492 3921/3653/3491 3920/3652/3490\nf 3925/3655/3493 1000/3649/3487 3926/3656/3494\nf 3921/3653/3491 3926/3656/3494 1000/3649/3487\nf 3924/3657/3495 3926/3656/3494 247/3658/3496\nf 3923/3659/3497 247/3658/3496 3926/3656/3494\nf 3801/3491/3333 967/3485/3327 3928/3660/3498\nf 3918/3648/3486 3928/3660/3498 967/3485/3327\nf 3927/3661/3499 3928/3660/3498 999/3662/3500\nf 3925/3655/3493 999/3662/3500 3928/3660/3498\nf 3810/3502/3344 236/3490/3332 3931/3663/3501\nf 3927/3661/3499 3931/3663/3501 236/3490/3332\nf 3930/3664/3502 3931/3663/3501 1003/3665/3503\nf 3929/3666/3504 1003/3665/3503 3931/3663/3501\nf 3929/3666/3504 999/3662/3500 3934/3667/3505\nf 3924/3657/3495 3934/3667/3505 999/3662/3500\nf 3934/3667/3505 3932/3668/3506 3933/3669/3507\nf 1001/3670/3508 3933/3669/3507 3932/3668/3506\nf 3937/3671/3509 1003/3665/3503 3938/3672/3510\nf 3933/3669/3507 3938/3672/3510 1003/3665/3503\nf 3936/3673/3511 3938/3672/3510 248/3674/3512\nf 3935/3675/3513 248/3674/3512 3938/3672/3510\nf 3813/3507/3349 970/3501/3343 3940/3676/3514\nf 3930/3664/3502 3940/3676/3514 970/3501/3343\nf 3939/3677/3515 3940/3676/3514 1002/3678/3516\nf 3937/3671/3509 1002/3678/3516 3940/3676/3514\nf 3824/3522/3364 238/3679/3517 3944/3680/3518\nf 3941/3681/3519 3944/3680/3518 238/3679/3517\nf 3944/3680/3518 3942/3682/3520 3943/3683/3521\nf 1007/3684/3522 3943/3683/3521 3942/3682/3520\nf 1004/3685/3523 3945/3686/3524 3942/3682/3520\nf 3948/3687/3525 3942/3682/3520 3945/3686/3524\nf 3948/3687/3525 3946/3688/3526 3947/3689/3527\nf 1005/3690/3528 3947/3689/3527 3946/3688/3526\nf 1007/3684/3522 3947/3689/3527 3951/3691/3529\nf 3952/3692/3530 3951/3691/3529 3947/3689/3527\nf 3952/3692/3530 3949/3693/3531 3950/3694/3532\nf 250/3695/3533 3950/3694/3532 3949/3693/3531\nf 3827/3527/3369 974/3521/3363 3954/3696/3534\nf 3943/3683/3521 3954/3696/3534 974/3521/3363\nf 3954/3696/3534 3951/3691/3529 3953/3697/3535\nf 1006/3698/3536 3953/3697/3535 3951/3691/3529\nf 3836/3538/3380 239/3526/3368 3957/3699/3537\nf 3953/3697/3535 3957/3699/3537 239/3526/3368\nf 3957/3699/3537 3955/3700/3538 3956/3701/3539\nf 1010/3702/3540 3956/3701/3539 3955/3700/3538\nf 1006/3698/3536 3950/3694/3532 3955/3700/3538\nf 3960/3703/3541 3955/3700/3538 3950/3694/3532\nf 3960/3703/3541 3958/3704/3542 3959/3705/3543\nf 1008/3706/3544 3959/3705/3543 3958/3704/3542\nf 1010/3702/3540 3959/3705/3543 3963/3707/3545\nf 3964/3708/3546 3963/3707/3545 3959/3705/3543\nf 3964/3708/3546 3961/3709/3547 3962/3710/3548\nf 251/3711/3549 3962/3710/3548 3961/3709/3547\nf 3839/3543/3385 977/3537/3379 3966/3712/3550\nf 3956/3701/3539 3966/3712/3550 977/3537/3379\nf 3966/3712/3550 3963/3707/3545 3965/3713/3551\nf 1009/3714/3552 3965/3713/3551 3963/3707/3545\nf 240/3542/3384 3965/3713/3551 3848/3552/3394\nf 3969/3715/3553 3848/3552/3394 3965/3713/3551\nf 3969/3715/3553 3967/3716/3554 3968/3717/3555\nf 1013/3718/3556 3968/3717/3555 3967/3716/3554\nf 1009/3714/3552 3962/3710/3548 3967/3716/3554\nf 3972/3719/3557 3967/3716/3554 3962/3710/3548\nf 3972/3719/3557 3970/3720/3558 3971/3721/3559\nf 1011/3722/3560 3971/3721/3559 3970/3720/3558\nf 1013/3718/3556 3971/3721/3559 3975/3723/3561\nf 3976/3724/3562 3975/3723/3561 3971/3721/3559\nf 3976/3724/3562 3973/3725/3563 3974/3726/3564\nf 252/3727/3565 3974/3726/3564 3973/3725/3563\nf 980/3554/3396 3968/3717/3555 3851/3557/3399\nf 3978/3728/3566 3851/3557/3399 3968/3717/3555\nf 3978/3728/3566 3975/3723/3561 3977/3729/3567\nf 1012/3730/3568 3977/3729/3567 3975/3723/3561\nf 3860/3570/3412 241/3559/3401 3981/3731/3569\nf 3977/3729/3567 3981/3731/3569 241/3559/3401\nf 3981/3731/3569 3979/3732/3570 3980/3733/3571\nf 1016/3734/3572 3980/3733/3571 3979/3732/3570\nf 1012/3730/3568 3974/3726/3564 3979/3732/3570\nf 3984/3735/3573 3979/3732/3570 3974/3726/3564\nf 3984/3735/3573 3982/3736/3574 3983/3737/3575\nf 1014/3738/3576 3983/3737/3575 3982/3736/3574\nf 1016/3734/3572 3983/3737/3575 3987/3739/3577\nf 3988/3740/3578 3987/3739/3577 3983/3737/3575\nf 3988/3740/3578 3985/3741/3579 3986/3742/3580\nf 253/3743/3581 3986/3742/3580 3985/3741/3579\nf 3863/3575/3417 983/3569/3411 3990/3744/3582\nf 3980/3733/3571 3990/3744/3582 983/3569/3411\nf 3990/3744/3582 3987/3739/3577 3989/3745/3583\nf 1015/3746/3584 3989/3745/3583 3987/3739/3577\nf 3872/3586/3428 242/3574/3416 3993/3747/3585\nf 3989/3745/3583 3993/3747/3585 242/3574/3416\nf 3993/3747/3585 3991/3748/3586 3992/3749/3587\nf 1019/3750/3588 3992/3749/3587 3991/3748/3586\nf 1015/3746/3584 3986/3742/3580 3991/3748/3586\nf 3996/3751/3589 3991/3748/3586 3986/3742/3580\nf 3996/3751/3589 3994/3752/3590 3995/3753/3591\nf 1017/3754/3592 3995/3753/3591 3994/3752/3590\nf 1019/3750/3588 3995/3753/3591 3999/3755/3593\nf 4000/3756/3594 3999/3755/3593 3995/3753/3591\nf 4000/3756/3594 3997/3757/3595 3998/3758/3596\nf 254/3759/3597 3998/3758/3596 3997/3757/3595\nf 3875/3591/3433 986/3585/3427 4002/3760/3598\nf 3992/3749/3587 4002/3760/3598 986/3585/3427\nf 4002/3760/3598 3999/3755/3593 4001/3761/3599\nf 1018/3762/3600 4001/3761/3599 3999/3755/3593\nf 243/3763/3432 4001/3764/3599 3884/3604/3442\nf 4005/3765/3601 3884/3604/3442 4001/3764/3599\nf 4005/3765/3601 4003/3766/3602 4004/3767/3603\nf 1022/3768/3604 4004/3767/3603 4003/3766/3602\nf 1018/3769/3600 3998/3770/3596 4003/3766/3602\nf 4008/3771/3605 4003/3766/3602 3998/3770/3596\nf 4008/3771/3605 4006/3772/3606 4007/3773/3607\nf 1020/3774/3608 4007/3773/3607 4006/3772/3606\nf 1022/3768/3604 4007/3773/3607 4011/3775/3609\nf 4012/3776/3610 4011/3775/3609 4007/3773/3607\nf 4012/3776/3610 4009/3777/3611 4010/3778/3612\nf 255/3779/3613 4010/3778/3612 4009/3777/3611\nf 3887/3611/3449 989/3606/3444 4014/3780/3614\nf 4004/3767/3603 4014/3780/3614 989/3606/3444\nf 4014/3780/3614 4011/3775/3609 4013/3781/3615\nf 1021/3782/3616 4013/3781/3615 4011/3775/3609\nf 244/3610/3448 4013/3781/3615 3896/3620/3458\nf 4017/3783/3617 3896/3620/3458 4013/3781/3615\nf 4017/3783/3617 4015/3784/3618 4016/3785/3619\nf 1025/3786/3620 4016/3785/3619 4015/3784/3618\nf 1021/3782/3616 4010/3778/3612 4015/3784/3618\nf 4020/3787/3621 4015/3784/3618 4010/3778/3612\nf 4020/3787/3621 4018/3788/3622 4019/3789/3623\nf 1023/3790/3624 4019/3789/3623 4018/3788/3622\nf 1025/3786/3620 4019/3789/3623 4023/3791/3625\nf 4024/3792/3626 4023/3791/3625 4019/3789/3623\nf 4024/3792/3626 4021/3793/3627 4022/3794/3628\nf 256/3795/3629 4022/3794/3628 4021/3793/3627\nf 3899/3627/3465 992/3622/3460 4026/3796/3630\nf 4016/3785/3619 4026/3796/3630 992/3622/3460\nf 4026/3796/3630 4023/3791/3625 4025/3797/3631\nf 1024/3798/3632 4025/3797/3631 4023/3791/3625\nf 245/3626/3464 4025/3797/3631 3908/3636/3474\nf 4029/3799/3633 3908/3636/3474 4025/3797/3631\nf 4029/3799/3633 4027/3800/3634 4028/3801/3635\nf 1028/3802/3636 4028/3801/3635 4027/3800/3634\nf 1024/3798/3632 4022/3794/3628 4027/3800/3634\nf 4032/3803/3637 4027/3800/3634 4022/3794/3628\nf 4032/3803/3637 4030/3804/3638 4031/3805/3639\nf 1026/3806/3640 4031/3805/3639 4030/3804/3638\nf 1028/3802/3636 4031/3805/3639 4035/3807/3641\nf 4036/3808/3642 4035/3807/3641 4031/3805/3639\nf 4036/3808/3642 4033/3809/3643 4034/3810/3644\nf 257/3811/3645 4034/3810/3644 4033/3809/3643\nf 3911/3643/3481 995/3638/3476 4038/3812/3646\nf 4028/3801/3635 4038/3812/3646 995/3638/3476\nf 4038/3812/3646 4035/3807/3641 4037/3813/3647\nf 1027/3814/3648 4037/3813/3647 4035/3807/3641\nf 246/3642/3480 4037/3813/3647 3920/3652/3490\nf 4041/3815/3649 3920/3652/3490 4037/3813/3647\nf 4041/3815/3649 4039/3816/3650 4040/3817/3651\nf 1031/3818/3652 4040/3817/3651 4039/3816/3650\nf 1027/3814/3648 4034/3810/3644 4039/3816/3650\nf 4044/3819/3653 4039/3816/3650 4034/3810/3644\nf 4044/3819/3653 4042/3820/3654 4043/3821/3655\nf 1029/3822/3656 4043/3821/3655 4042/3820/3654\nf 1031/3818/3652 4043/3821/3655 4047/3823/3657\nf 4048/3824/3658 4047/3823/3657 4043/3821/3655\nf 4048/3824/3658 4045/3825/3659 4046/3826/3660\nf 258/3827/3661 4046/3826/3660 4045/3825/3659\nf 3923/3659/3497 998/3654/3492 4050/3828/3662\nf 4040/3817/3651 4050/3828/3662 998/3654/3492\nf 4050/3828/3662 4047/3823/3657 4049/3829/3663\nf 1030/3830/3664 4049/3829/3663 4047/3823/3657\nf 247/3658/3496 4049/3829/3663 3932/3668/3506\nf 4053/3831/3665 3932/3668/3506 4049/3829/3663\nf 4053/3831/3665 4051/3832/3666 4052/3833/3667\nf 1034/3834/3668 4052/3833/3667 4051/3832/3666\nf 1030/3830/3664 4046/3826/3660 4051/3832/3666\nf 4056/3835/3669 4051/3832/3666 4046/3826/3660\nf 4056/3835/3669 4054/3836/3670 4055/3837/3671\nf 1032/3838/3672 4055/3837/3671 4054/3836/3670\nf 1034/3834/3668 4055/3837/3671 4059/3839/3673\nf 4060/3840/3674 4059/3839/3673 4055/3837/3671\nf 4060/3840/3674 4057/3841/3675 4058/3842/3676\nf 259/3843/3677 4058/3842/3676 4057/3841/3675\nf 3935/3675/3513 1001/3670/3508 4062/3844/3678\nf 4052/3833/3667 4062/3844/3678 1001/3670/3508\nf 4062/3844/3678 4059/3839/3673 4061/3845/3679\nf 1033/3846/3680 4061/3845/3679 4059/3839/3673\nf 249/3847/3681 4063/3848/3682 3946/3688/3526\nf 4066/3849/3683 3946/3688/3526 4063/3848/3682\nf 4066/3849/3683 4064/3850/3684 4065/3851/3685\nf 1038/3852/3686 4065/3851/3685 4064/3850/3684\nf 1035/3853/3687 4067/3854/3688 4064/3850/3684\nf 4070/3855/3689 4064/3850/3684 4067/3854/3688\nf 4070/3855/3689 4068/3856/3690 4069/3857/3691\nf 1036/3858/3692 4069/3857/3691 4068/3856/3690\nf 1038/3852/3686 4069/3857/3691 4073/3859/3693\nf 4074/3860/3694 4073/3859/3693 4069/3857/3691\nf 4074/3860/3694 4071/3861/3695 4072/3862/3696\nf 261/3863/3697 4072/3862/3696 4071/3861/3695\nf 1005/3690/3528 4065/3851/3685 3949/3693/3531\nf 4076/3864/3698 3949/3693/3531 4065/3851/3685\nf 4076/3864/3698 4073/3859/3693 4075/3865/3699\nf 1037/3866/3700 4075/3865/3699 4073/3859/3693\nf 250/3695/3533 4075/3865/3699 3958/3704/3542\nf 4079/3867/3701 3958/3704/3542 4075/3865/3699\nf 4079/3867/3701 4077/3868/3702 4078/3869/3703\nf 1041/3870/3704 4078/3869/3703 4077/3868/3702\nf 1037/3866/3700 4072/3862/3696 4077/3868/3702\nf 4082/3871/3705 4077/3868/3702 4072/3862/3696\nf 4082/3871/3705 4080/3872/3706 4081/3873/3707\nf 1039/3874/3708 4081/3873/3707 4080/3872/3706\nf 1041/3870/3704 4081/3873/3707 4085/3875/3709\nf 4086/3876/3710 4085/3875/3709 4081/3873/3707\nf 4086/3876/3710 4083/3877/3711 4084/3878/3712\nf 262/3879/3713 4084/3878/3712 4083/3877/3711\nf 1008/3706/3544 4078/3869/3703 3961/3709/3547\nf 4088/3880/3714 3961/3709/3547 4078/3869/3703\nf 4088/3880/3714 4085/3875/3709 4087/3881/3715\nf 1040/3882/3716 4087/3881/3715 4085/3875/3709\nf 251/3711/3549 4087/3881/3715 3970/3720/3558\nf 4091/3883/3717 3970/3720/3558 4087/3881/3715\nf 4091/3883/3717 4089/3884/3718 4090/3885/3719\nf 1044/3886/3720 4090/3885/3719 4089/3884/3718\nf 1040/3882/3716 4084/3878/3712 4089/3884/3718\nf 4094/3887/3721 4089/3884/3718 4084/3878/3712\nf 4094/3887/3721 4092/3888/3722 4093/3889/3723\nf 1042/3890/3724 4093/3889/3723 4092/3888/3722\nf 1044/3886/3720 4093/3889/3723 4097/3891/3725\nf 4098/3892/3726 4097/3891/3725 4093/3889/3723\nf 4098/3892/3726 4095/3893/3727 4096/3894/3728\nf 263/3895/3729 4096/3894/3728 4095/3893/3727\nf 1011/3722/3560 4090/3885/3719 3973/3725/3563\nf 4100/3896/3730 3973/3725/3563 4090/3885/3719\nf 4100/3896/3730 4097/3891/3725 4099/3897/3731\nf 1043/3898/3732 4099/3897/3731 4097/3891/3725\nf 252/3727/3565 4099/3897/3731 3982/3736/3574\nf 4103/3899/3733 3982/3736/3574 4099/3897/3731\nf 4103/3899/3733 4101/3900/3734 4102/3901/3735\nf 1047/3902/3736 4102/3901/3735 4101/3900/3734\nf 1043/3898/3732 4096/3894/3728 4101/3900/3734\nf 4106/3903/3737 4101/3900/3734 4096/3894/3728\nf 4106/3903/3737 4104/3904/3738 4105/3905/3739\nf 1045/3906/3740 4105/3905/3739 4104/3904/3738\nf 1047/3902/3736 4105/3905/3739 4109/3907/3741\nf 4110/3908/3742 4109/3907/3741 4105/3905/3739\nf 4110/3908/3742 4107/3909/3743 4108/3910/3744\nf 264/3911/3745 4108/3910/3744 4107/3909/3743\nf 1014/3738/3576 4102/3901/3735 3985/3741/3579\nf 4112/3912/3746 3985/3741/3579 4102/3901/3735\nf 4112/3912/3746 4109/3907/3741 4111/3913/3747\nf 1046/3914/3748 4111/3913/3747 4109/3907/3741\nf 253/3743/3581 4111/3913/3747 3994/3752/3590\nf 4115/3915/3749 3994/3752/3590 4111/3913/3747\nf 4115/3915/3749 4113/3916/3750 4114/3917/3751\nf 1050/3918/3752 4114/3917/3751 4113/3916/3750\nf 1046/3914/3748 4108/3910/3744 4113/3916/3750\nf 4118/3919/3753 4113/3916/3750 4108/3910/3744\nf 4118/3919/3753 4116/3920/3754 4117/3921/3755\nf 1048/3922/3756 4117/3921/3755 4116/3920/3754\nf 1050/3918/3752 4117/3921/3755 4121/3923/3757\nf 4122/3924/3758 4121/3923/3757 4117/3921/3755\nf 4122/3924/3758 4119/3925/3759 4120/3926/3760\nf 265/3927/3761 4120/3926/3760 4119/3925/3759\nf 1017/3754/3592 4114/3917/3751 3997/3757/3595\nf 4124/3928/3762 3997/3757/3595 4114/3917/3751\nf 4124/3928/3762 4121/3923/3757 4123/3929/3763\nf 1049/3930/3764 4123/3929/3763 4121/3923/3757\nf 254/3931/3597 4123/3932/3763 4006/3772/3606\nf 4127/3933/3765 4006/3772/3606 4123/3932/3763\nf 4127/3933/3765 4125/3934/3766 4126/3935/3767\nf 1053/3936/3768 4126/3935/3767 4125/3934/3766\nf 1049/3937/3764 4120/3938/3760 4125/3934/3766\nf 4130/3939/3769 4125/3934/3766 4120/3938/3760\nf 4130/3939/3769 4128/3940/3770 4129/3941/3771\nf 1051/3942/3772 4129/3941/3771 4128/3940/3770\nf 1053/3936/3768 4129/3941/3771 4133/3943/3773\nf 4134/3944/3774 4133/3943/3773 4129/3941/3771\nf 4134/3944/3774 4131/3945/3775 4132/3946/3776\nf 266/3947/3777 4132/3946/3776 4131/3945/3775\nf 1020/3774/3608 4126/3935/3767 4009/3777/3611\nf 4136/3948/3778 4009/3777/3611 4126/3935/3767\nf 4136/3948/3778 4133/3943/3773 4135/3949/3779\nf 1052/3950/3780 4135/3949/3779 4133/3943/3773\nf 255/3779/3613 4135/3949/3779 4018/3788/3622\nf 4139/3951/3781 4018/3788/3622 4135/3949/3779\nf 4139/3951/3781 4137/3952/3782 4138/3953/3783\nf 1056/3954/3784 4138/3953/3783 4137/3952/3782\nf 1052/3950/3780 4132/3946/3776 4137/3952/3782\nf 4142/3955/3785 4137/3952/3782 4132/3946/3776\nf 4142/3955/3785 4140/3956/3786 4141/3957/3787\nf 1054/3958/3788 4141/3957/3787 4140/3956/3786\nf 1056/3954/3784 4141/3957/3787 4145/3959/3789\nf 4146/3960/3790 4145/3959/3789 4141/3957/3787\nf 4146/3960/3790 4143/3961/3791 4144/3962/3792\nf 267/3963/3793 4144/3962/3792 4143/3961/3791\nf 1023/3790/3624 4138/3953/3783 4021/3793/3627\nf 4148/3964/3794 4021/3793/3627 4138/3953/3783\nf 4148/3964/3794 4145/3959/3789 4147/3965/3795\nf 1055/3966/3796 4147/3965/3795 4145/3959/3789\nf 256/3795/3629 4147/3965/3795 4030/3804/3638\nf 4151/3967/3797 4030/3804/3638 4147/3965/3795\nf 4151/3967/3797 4149/3968/3798 4150/3969/3799\nf 1059/3970/3800 4150/3969/3799 4149/3968/3798\nf 1055/3966/3796 4144/3962/3792 4149/3968/3798\nf 4154/3971/3801 4149/3968/3798 4144/3962/3792\nf 4154/3971/3801 4152/3972/3802 4153/3973/3803\nf 1057/3974/3804 4153/3973/3803 4152/3972/3802\nf 1059/3970/3800 4153/3973/3803 4157/3975/3805\nf 4158/3976/3806 4157/3975/3805 4153/3973/3803\nf 4158/3976/3806 4155/3977/3807 4156/3978/3808\nf 268/3979/3809 4156/3978/3808 4155/3977/3807\nf 1026/3806/3640 4150/3969/3799 4033/3809/3643\nf 4160/3980/3810 4033/3809/3643 4150/3969/3799\nf 4160/3980/3810 4157/3975/3805 4159/3981/3811\nf 1058/3982/3812 4159/3981/3811 4157/3975/3805\nf 257/3811/3645 4159/3981/3811 4042/3820/3654\nf 4163/3983/3813 4042/3820/3654 4159/3981/3811\nf 4163/3983/3813 4161/3984/3814 4162/3985/3815\nf 1062/3986/3816 4162/3985/3815 4161/3984/3814\nf 1058/3982/3812 4156/3978/3808 4161/3984/3814\nf 4166/3987/3817 4161/3984/3814 4156/3978/3808\nf 4166/3987/3817 4164/3988/3818 4165/3989/3819\nf 1060/3990/3820 4165/3989/3819 4164/3988/3818\nf 1062/3986/3816 4165/3989/3819 4169/3991/3821\nf 4170/3992/3822 4169/3991/3821 4165/3989/3819\nf 4170/3992/3822 4167/3993/3823 4168/3994/3824\nf 269/3995/3825 4168/3994/3824 4167/3993/3823\nf 1029/3822/3656 4162/3985/3815 4045/3825/3659\nf 4172/3996/3826 4045/3825/3659 4162/3985/3815\nf 4172/3996/3826 4169/3991/3821 4171/3997/3827\nf 1061/3998/3828 4171/3997/3827 4169/3991/3821\nf 258/3827/3661 4171/3997/3827 4054/3836/3670\nf 4175/3999/3829 4054/3836/3670 4171/3997/3827\nf 4175/3999/3829 4173/4000/3830 4174/4001/3831\nf 1065/4002/3832 4174/4001/3831 4173/4000/3830\nf 1061/3998/3828 4168/3994/3824 4173/4000/3830\nf 4178/4003/3833 4173/4000/3830 4168/3994/3824\nf 4178/4003/3833 4176/4004/3834 4177/4005/3835\nf 1063/4006/3836 4177/4005/3835 4176/4004/3834\nf 1065/4002/3832 4177/4005/3835 4181/4007/3837\nf 4182/4008/3838 4181/4007/3837 4177/4005/3835\nf 4182/4008/3838 4179/4009/3839 4180/4010/3840\nf 270/4011/3841 4180/4010/3840 4179/4009/3839\nf 1032/3838/3672 4174/4001/3831 4057/3841/3675\nf 4184/4012/3842 4057/3841/3675 4174/4001/3831\nf 4184/4012/3842 4181/4007/3837 4183/4013/3843\nf 1064/4014/3844 4183/4013/3843 4181/4007/3837\nf 4068/3856/3690 260/4015/3845 4188/4016/3846\nf 4185/4017/3847 4188/4016/3846 260/4015/3845\nf 4187/4018/3848 4188/4016/3846 1069/4019/3849\nf 4186/4020/3850 1069/4019/3849 4188/4016/3846\nf 4186/4020/3850 1066/4021/3851 4192/4022/3852\nf 4189/4023/3853 4192/4022/3852 1066/4021/3851\nf 4191/4024/3854 4192/4022/3852 1067/4025/3855\nf 4190/4026/3856 1067/4025/3855 4192/4022/3852\nf 4195/4027/3857 1069/4019/3849 4196/4028/3858\nf 4191/4024/3854 4196/4028/3858 1069/4019/3849\nf 4194/4029/3859 4196/4028/3858 272/4030/3860\nf 4193/4031/3861 272/4030/3860 4196/4028/3858\nf 4071/3861/3695 1036/3858/3692 4198/4032/3862\nf 4187/4018/3848 4198/4032/3862 1036/3858/3692\nf 4197/4033/3863 4198/4032/3862 1068/4034/3864\nf 4195/4027/3857 1068/4034/3864 4198/4032/3862\nf 261/3863/3697 4197/4033/3863 4080/3872/3706\nf 4201/4035/3865 4080/3872/3706 4197/4033/3863\nf 4200/4036/3866 4201/4035/3865 1072/4037/3867\nf 4199/4038/3868 1072/4037/3867 4201/4035/3865\nf 4199/4038/3868 1068/4034/3864 4204/4039/3869\nf 4194/4029/3859 4204/4039/3869 1068/4034/3864\nf 4203/4040/3870 4204/4039/3869 1070/4041/3871\nf 4202/4042/3872 1070/4041/3871 4204/4039/3869\nf 4207/4043/3873 1072/4037/3867 4208/4044/3874\nf 4203/4040/3870 4208/4044/3874 1072/4037/3867\nf 4206/4045/3875 4208/4044/3874 273/4046/3876\nf 4205/4047/3877 273/4046/3876 4208/4044/3874\nf 4083/3877/3711 1039/3874/3708 4210/4048/3878\nf 4200/4036/3866 4210/4048/3878 1039/3874/3708\nf 4209/4049/3879 4210/4048/3878 1071/4050/3880\nf 4207/4043/3873 1071/4050/3880 4210/4048/3878\nf 262/3879/3713 4209/4049/3879 4092/3888/3722\nf 4213/4051/3881 4092/3888/3722 4209/4049/3879\nf 4212/4052/3882 4213/4051/3881 1075/4053/3883\nf 4211/4054/3884 1075/4053/3883 4213/4051/3881\nf 4211/4054/3884 1071/4050/3880 4216/4055/3885\nf 4206/4045/3875 4216/4055/3885 1071/4050/3880\nf 4215/4056/3886 4216/4055/3885 1073/4057/3887\nf 4214/4058/3888 1073/4057/3887 4216/4055/3885\nf 4219/4059/3889 1075/4053/3883 4220/4060/3890\nf 4215/4056/3886 4220/4060/3890 1075/4053/3883\nf 4218/4061/3891 4220/4060/3890 274/4062/3892\nf 4217/4063/3893 274/4062/3892 4220/4060/3890\nf 4095/3893/3727 1042/3890/3724 4222/4064/3894\nf 4212/4052/3882 4222/4064/3894 1042/3890/3724\nf 4221/4065/3895 4222/4064/3894 1074/4066/3896\nf 4219/4059/3889 1074/4066/3896 4222/4064/3894\nf 263/3895/3729 4221/4065/3895 4104/3904/3738\nf 4225/4067/3897 4104/3904/3738 4221/4065/3895\nf 4225/4067/3897 4223/4068/3898 4224/4069/3899\nf 1078/4070/3900 4224/4069/3899 4223/4068/3898\nf 1074/4066/3896 4218/4061/3891 4223/4068/3898\nf 4228/4071/3901 4223/4068/3898 4218/4061/3891\nf 4227/4072/3902 4228/4071/3901 1076/4073/3903\nf 4226/4074/3904 1076/4073/3903 4228/4071/3901\nf 4231/4075/3905 1078/4070/3900 4232/4076/3906\nf 4227/4072/3902 4232/4076/3906 1078/4070/3900\nf 4230/4077/3907 4232/4076/3906 275/4078/3908\nf 4229/4079/3909 275/4078/3908 4232/4076/3906\nf 4107/3909/3743 1045/3906/3740 4234/4080/3910\nf 4224/4069/3899 4234/4080/3910 1045/3906/3740\nf 4233/4081/3911 4234/4080/3910 1077/4082/3912\nf 4231/4075/3905 1077/4082/3912 4234/4080/3910\nf 264/3911/3745 4233/4081/3911 4116/3920/3754\nf 4237/4083/3913 4116/3920/3754 4233/4081/3911\nf 4237/4083/3913 4235/4084/3914 4236/4085/3915\nf 1081/4086/3916 4236/4085/3915 4235/4084/3914\nf 1077/4082/3912 4230/4077/3907 4235/4084/3914\nf 4240/4087/3917 4235/4084/3914 4230/4077/3907\nf 4240/4087/3917 4238/4088/3918 4239/4089/3919\nf 1079/4090/3920 4239/4089/3919 4238/4088/3918\nf 4243/4091/3921 1081/4086/3916 4244/4092/3922\nf 4239/4089/3919 4244/4092/3922 1081/4086/3916\nf 4242/4093/3923 4244/4092/3922 276/4094/3924\nf 4241/4095/3925 276/4094/3924 4244/4092/3922\nf 4119/3925/3759 1048/3922/3756 4246/4096/3926\nf 4236/4085/3915 4246/4096/3926 1048/3922/3756\nf 4245/4097/3927 4246/4096/3926 1080/4098/3928\nf 4243/4091/3921 1080/4098/3928 4246/4096/3926\nf 265/4099/3761 4245/4100/3927 4128/3940/3770\nf 4249/4101/3929 4128/3940/3770 4245/4100/3927\nf 4249/4101/3929 4247/4102/3930 4248/4103/3931\nf 1084/4104/3932 4248/4103/3931 4247/4102/3930\nf 1080/4105/3928 4242/4106/3923 4247/4102/3930\nf 4252/4107/3933 4247/4102/3930 4242/4106/3923\nf 4252/4107/3933 4250/4108/3934 4251/4109/3935\nf 1082/4110/3936 4251/4109/3935 4250/4108/3934\nf 4255/4111/3937 1084/4104/3932 4256/4112/3938\nf 4251/4109/3935 4256/4112/3938 1084/4104/3932\nf 4254/4113/3939 4256/4112/3938 277/4114/3940\nf 4253/4115/3941 277/4114/3940 4256/4112/3938\nf 4131/3945/3775 1051/3942/3772 4258/4116/3942\nf 4248/4103/3931 4258/4116/3942 1051/3942/3772\nf 4257/4117/3943 4258/4116/3942 1083/4118/3944\nf 4255/4111/3937 1083/4118/3944 4258/4116/3942\nf 266/3947/3777 4257/4117/3943 4140/3956/3786\nf 4261/4119/3945 4140/3956/3786 4257/4117/3943\nf 4261/4119/3945 4259/4120/3946 4260/4121/3947\nf 1087/4122/3948 4260/4121/3947 4259/4120/3946\nf 1083/4118/3944 4254/4113/3939 4259/4120/3946\nf 4264/4123/3949 4259/4120/3946 4254/4113/3939\nf 4264/4123/3949 4262/4124/3950 4263/4125/3951\nf 1085/4126/3952 4263/4125/3951 4262/4124/3950\nf 4267/4127/3953 1087/4122/3948 4268/4128/3954\nf 4263/4125/3951 4268/4128/3954 1087/4122/3948\nf 4266/4129/3955 4268/4128/3954 278/4130/3956\nf 4265/4131/3957 278/4130/3956 4268/4128/3954\nf 4143/3961/3791 1054/3958/3788 4270/4132/3958\nf 4260/4121/3947 4270/4132/3958 1054/3958/3788\nf 4269/4133/3959 4270/4132/3958 1086/4134/3960\nf 4267/4127/3953 1086/4134/3960 4270/4132/3958\nf 267/3963/3793 4269/4133/3959 4152/3972/3802\nf 4273/4135/3961 4152/3972/3802 4269/4133/3959\nf 4273/4135/3961 4271/4136/3962 4272/4137/3963\nf 1090/4138/3964 4272/4137/3963 4271/4136/3962\nf 1086/4134/3960 4266/4129/3955 4271/4136/3962\nf 4276/4139/3965 4271/4136/3962 4266/4129/3955\nf 4276/4139/3965 4274/4140/3966 4275/4141/3967\nf 1088/4142/3968 4275/4141/3967 4274/4140/3966\nf 4279/4143/3969 1090/4138/3964 4280/4144/3970\nf 4275/4141/3967 4280/4144/3970 1090/4138/3964\nf 4278/4145/3971 4280/4144/3970 279/4146/3972\nf 4277/4147/3973 279/4146/3972 4280/4144/3970\nf 4155/3977/3807 1057/3974/3804 4282/4148/3974\nf 4272/4137/3963 4282/4148/3974 1057/3974/3804\nf 4281/4149/3975 4282/4148/3974 1089/4150/3976\nf 4279/4143/3969 1089/4150/3976 4282/4148/3974\nf 268/3979/3809 4281/4149/3975 4164/3988/3818\nf 4285/4151/3977 4164/3988/3818 4281/4149/3975\nf 4285/4151/3977 4283/4152/3978 4284/4153/3979\nf 1093/4154/3980 4284/4153/3979 4283/4152/3978\nf 1089/4150/3976 4278/4145/3971 4283/4152/3978\nf 4288/4155/3981 4283/4152/3978 4278/4145/3971\nf 4288/4155/3981 4286/4156/3982 4287/4157/3983\nf 1091/4158/3984 4287/4157/3983 4286/4156/3982\nf 4291/4159/3985 1093/4154/3980 4292/4160/3986\nf 4287/4157/3983 4292/4160/3986 1093/4154/3980\nf 4290/4161/3987 4292/4160/3986 280/4162/3988\nf 4289/4163/3989 280/4162/3988 4292/4160/3986\nf 4167/3993/3823 1060/3990/3820 4294/4164/3990\nf 4284/4153/3979 4294/4164/3990 1060/3990/3820\nf 4293/4165/3991 4294/4164/3990 1092/4166/3992\nf 4291/4159/3985 1092/4166/3992 4294/4164/3990\nf 269/3995/3825 4293/4165/3991 4176/4004/3834\nf 4297/4167/3993 4176/4004/3834 4293/4165/3991\nf 4297/4167/3993 4295/4168/3994 4296/4169/3995\nf 1096/4170/3996 4296/4169/3995 4295/4168/3994\nf 1092/4166/3992 4290/4161/3987 4295/4168/3994\nf 4300/4171/3997 4295/4168/3994 4290/4161/3987\nf 4300/4171/3997 4298/4172/3998 4299/4173/3999\nf 1094/4174/4000 4299/4173/3999 4298/4172/3998\nf 4303/4175/4001 1096/4170/3996 4304/4176/4002\nf 4299/4173/3999 4304/4176/4002 1096/4170/3996\nf 4302/4177/4003 4304/4176/4002 281/4178/4004\nf 4301/4179/4005 281/4178/4004 4304/4176/4002\nf 4179/4009/3839 1063/4006/3836 4306/4180/4006\nf 4296/4169/3995 4306/4180/4006 1063/4006/3836\nf 4305/4181/4007 4306/4180/4006 1095/4182/4008\nf 4303/4175/4001 1095/4182/4008 4306/4180/4006\nf 4190/4026/3856 271/4183/4009 4310/4184/4010\nf 4307/4185/4011 4310/4184/4010 271/4183/4009\nf 4309/4186/4012 4310/4184/4010 1099/4187/4013\nf 4308/4188/4014 1099/4187/4013 4310/4184/4010\nf 1097/4189/4015 4311/4190/4016 4308/4188/4014\nf 4313/4191/4017 4308/4188/4014 4311/4190/4016\nf 4313/4191/4017 2948/2260/2167 4312/4192/4018\nf 749/2279/2186 4312/4192/4018 2948/2260/2167\nf 1099/4187/4013 4312/4192/4018 4315/4193/4019\nf 4316/4194/4020 4315/4193/4019 4312/4192/4018\nf 4316/4194/4020 2959/2278/2185 4314/4195/4021\nf 151/2284/2191 4314/4195/4021 2959/2278/2185\nf 4193/4031/3861 1067/4025/3855 4318/4196/4022\nf 4309/4186/4012 4318/4196/4022 1067/4025/3855\nf 4317/4197/4023 4318/4196/4022 1098/4198/4024\nf 4315/4193/4019 1098/4198/4024 4318/4196/4022\nf 4202/4042/3872 272/4030/3860 4321/4199/4025\nf 4317/4197/4023 4321/4199/4025 272/4030/3860\nf 4320/4200/4026 4321/4199/4025 1101/4201/4027\nf 4319/4202/4028 1101/4201/4027 4321/4199/4025\nf 4319/4202/4028 1098/4198/4024 4323/4203/4029\nf 4314/4195/4021 4323/4203/4029 1098/4198/4024\nf 4323/4203/4029 2963/2283/2190 4322/4204/4030\nf 753/2299/2206 4322/4204/4030 2963/2283/2190\nf 4325/4205/4031 1101/4201/4027 4326/4206/4032\nf 4322/4204/4030 4326/4206/4032 1101/4201/4027\nf 4326/4206/4032 2973/2298/2205 4324/4207/4033\nf 152/2304/2211 4324/4207/4033 2973/2298/2205\nf 4205/4047/3877 1070/4041/3871 4328/4208/4034\nf 4320/4200/4026 4328/4208/4034 1070/4041/3871\nf 4327/4209/4035 4328/4208/4034 1100/4210/4036\nf 4325/4205/4031 1100/4210/4036 4328/4208/4034\nf 4214/4058/3888 273/4046/3876 4331/4211/4037\nf 4327/4209/4035 4331/4211/4037 273/4046/3876\nf 4330/4212/4038 4331/4211/4037 1103/4213/4039\nf 4329/4214/4040 1103/4213/4039 4331/4211/4037\nf 4329/4214/4040 1100/4210/4036 4333/4215/4041\nf 4324/4207/4033 4333/4215/4041 1100/4210/4036\nf 4333/4215/4041 2977/2303/2210 4332/4216/4042\nf 757/2319/2226 4332/4216/4042 2977/2303/2210\nf 4335/4217/4043 1103/4213/4039 4336/4218/4044\nf 4332/4216/4042 4336/4218/4044 1103/4213/4039\nf 4336/4218/4044 2987/2318/2225 4334/4219/4045\nf 153/2324/2231 4334/4219/4045 2987/2318/2225\nf 4217/4063/3893 1073/4057/3887 4338/4220/4046\nf 4330/4212/4038 4338/4220/4046 1073/4057/3887\nf 4337/4221/4047 4338/4220/4046 1102/4222/4048\nf 4335/4217/4043 1102/4222/4048 4338/4220/4046\nf 4226/4074/3904 274/4062/3892 4341/4223/4049\nf 4337/4221/4047 4341/4223/4049 274/4062/3892\nf 4340/4224/4050 4341/4223/4049 1105/4225/4051\nf 4339/4226/4052 1105/4225/4051 4341/4223/4049\nf 4339/4226/4052 1102/4222/4048 4343/4227/4053\nf 4334/4219/4045 4343/4227/4053 1102/4222/4048\nf 4342/4228/4054 4343/4227/4053 761/2338/2245\nf 2991/2323/2230 761/2338/2245 4343/4227/4053\nf 4345/4229/4055 1105/4225/4051 4346/4230/4056\nf 4342/4228/4054 4346/4230/4056 1105/4225/4051\nf 4344/4231/4057 4346/4230/4056 154/2343/2250\nf 3001/2339/2246 154/2343/2250 4346/4230/4056\nf 4229/4079/3909 1076/4073/3903 4348/4232/4058\nf 4340/4224/4050 4348/4232/4058 1076/4073/3903\nf 4347/4233/4059 4348/4232/4058 1104/4234/4060\nf 4345/4229/4055 1104/4234/4060 4348/4232/4058\nf 275/4078/3908 4347/4233/4059 4238/4088/3918\nf 4351/4235/4061 4238/4088/3918 4347/4233/4059\nf 4351/4235/4061 4349/4236/4062 4350/4237/4063\nf 1107/4238/4064 4350/4237/4063 4349/4236/4062\nf 4349/4236/4062 1104/4234/4060 4353/4239/4065\nf 4344/4231/4057 4353/4239/4065 1104/4234/4060\nf 4352/4240/4066 4353/4239/4065 765/2358/2265\nf 3005/2344/2251 765/2358/2265 4353/4239/4065\nf 4355/4241/4067 1107/4238/4064 4356/4242/4068\nf 4352/4240/4066 4356/4242/4068 1107/4238/4064\nf 4354/4243/4069 4356/4242/4068 155/4244/2270\nf 3015/2359/2266 155/4244/2270 4356/4242/4068\nf 4241/4095/3925 1079/4090/3920 4358/4245/4070\nf 4350/4237/4063 4358/4245/4070 1079/4090/3920\nf 4357/4246/4071 4358/4245/4070 1106/4247/4072\nf 4355/4241/4067 1106/4247/4072 4358/4245/4070\nf 276/4248/3924 4357/4249/4071 4250/4108/3934\nf 4361/4250/4073 4250/4108/3934 4357/4249/4071\nf 4361/4250/4073 4359/4251/4074 4360/4252/4075\nf 1109/4253/4076 4360/4252/4075 4359/4251/4074\nf 1106/4254/4072 4354/4255/4069 4359/4251/4074\nf 4363/4256/4077 4359/4251/4074 4354/4255/4069\nf 4363/4256/4077 3019/2365/2271 4362/4257/4078\nf 769/2382/2286 4362/4257/4078 3019/2365/2271\nf 4365/4258/4079 1109/4253/4076 4366/4259/4080\nf 4362/4257/4078 4366/4259/4080 1109/4253/4076\nf 4364/4260/4081 4366/4259/4080 156/2386/2290\nf 3029/2381/2285 156/2386/2290 4366/4259/4080\nf 4253/4115/3941 1082/4110/3936 4368/4261/4082\nf 4360/4252/4075 4368/4261/4082 1082/4110/3936\nf 4367/4262/4083 4368/4261/4082 1108/4263/4084\nf 4365/4258/4079 1108/4263/4084 4368/4261/4082\nf 277/4114/3940 4367/4262/4083 4262/4124/3950\nf 4371/4264/4085 4262/4124/3950 4367/4262/4083\nf 4371/4264/4085 4369/4265/4086 4370/4266/4087\nf 1111/4267/4088 4370/4266/4087 4369/4265/4086\nf 1108/4263/4084 4364/4260/4081 4369/4265/4086\nf 4373/4268/4089 4369/4265/4086 4364/4260/4081\nf 4373/4268/4089 3033/2387/2291 4372/4269/4090\nf 773/2402/2306 4372/4269/4090 3033/2387/2291\nf 4375/4270/4091 1111/4267/4088 4376/4271/4092\nf 4372/4269/4090 4376/4271/4092 1111/4267/4088\nf 4374/4272/4093 4376/4271/4092 157/2406/2310\nf 3043/2401/2305 157/2406/2310 4376/4271/4092\nf 4265/4131/3957 1085/4126/3952 4378/4273/4094\nf 4370/4266/4087 4378/4273/4094 1085/4126/3952\nf 4377/4274/4095 4378/4273/4094 1110/4275/4096\nf 4375/4270/4091 1110/4275/4096 4378/4273/4094\nf 278/4130/3956 4377/4274/4095 4274/4140/3966\nf 4381/4276/4097 4274/4140/3966 4377/4274/4095\nf 4381/4276/4097 4379/4277/4098 4380/4278/4099\nf 1113/4279/4100 4380/4278/4099 4379/4277/4098\nf 1110/4275/4096 4374/4272/4093 4379/4277/4098\nf 4383/4280/4101 4379/4277/4098 4374/4272/4093\nf 4383/4280/4101 3047/2407/2311 4382/4281/4102\nf 777/2422/2326 4382/4281/4102 3047/2407/2311\nf 4385/4282/4103 1113/4279/4100 4386/4283/4104\nf 4382/4281/4102 4386/4283/4104 1113/4279/4100\nf 4384/4284/4105 4386/4283/4104 158/2426/2330\nf 3057/2421/2325 158/2426/2330 4386/4283/4104\nf 4277/4147/3973 1088/4142/3968 4388/4285/4106\nf 4380/4278/4099 4388/4285/4106 1088/4142/3968\nf 4387/4286/4107 4388/4285/4106 1112/4287/4108\nf 4385/4282/4103 1112/4287/4108 4388/4285/4106\nf 279/4146/3972 4387/4286/4107 4286/4156/3982\nf 4391/4288/4109 4286/4156/3982 4387/4286/4107\nf 4391/4288/4109 4389/4289/4110 4390/4290/4111\nf 1115/4291/4112 4390/4290/4111 4389/4289/4110\nf 1112/4287/4108 4384/4284/4105 4389/4289/4110\nf 4393/4292/4113 4389/4289/4110 4384/4284/4105\nf 4393/4292/4113 3061/2427/2331 4392/4293/4114\nf 781/2442/2346 4392/4293/4114 3061/2427/2331\nf 4395/4294/4115 1115/4291/4112 4396/4295/4116\nf 4392/4293/4114 4396/4295/4116 1115/4291/4112\nf 4394/4296/4117 4396/4295/4116 159/2446/2350\nf 3071/2441/2345 159/2446/2350 4396/4295/4116\nf 4289/4163/3989 1091/4158/3984 4398/4297/4118\nf 4390/4290/4111 4398/4297/4118 1091/4158/3984\nf 4397/4298/4119 4398/4297/4118 1114/4299/4120\nf 4395/4294/4115 1114/4299/4120 4398/4297/4118\nf 280/4162/3988 4397/4298/4119 4298/4172/3998\nf 4401/4300/4121 4298/4172/3998 4397/4298/4119\nf 4401/4300/4121 4399/4301/4122 4400/4302/4123\nf 1117/4303/4124 4400/4302/4123 4399/4301/4122\nf 1114/4299/4120 4394/4296/4117 4399/4301/4122\nf 4403/4304/4125 4399/4301/4122 4394/4296/4117\nf 4403/4304/4125 3075/2447/2351 4402/4305/4126\nf 785/2462/2366 4402/4305/4126 3075/2447/2351\nf 4405/4306/4127 1117/4303/4124 4406/4307/4128\nf 4402/4305/4126 4406/4307/4128 1117/4303/4124\nf 4404/4308/4129 4406/4307/4128 160/4309/4130\nf 3085/2461/2365 160/4309/4130 4406/4307/4128\nf 4301/4179/4005 1094/4174/4000 4408/4310/4131\nf 4400/4302/4123 4408/4310/4131 1094/4174/4000\nf 4407/4311/4132 4408/4310/4131 1116/4312/4133\nf 4405/4306/4127 1116/4312/4133 4408/4310/4131\nf 183/2839/2697 4409/4313/4134 3331/2840/2698\nf 4412/4314/4135 3331/2840/2698 4409/4313/4134\nf 4412/4314/4135 4410/4315/4136 4411/4316/4137\nf 1121/4317/4138 4411/4316/4137 4410/4315/4136\nf 1118/4318/4139 4413/4319/4140 4410/4315/4136\nf 4416/4320/4141 4410/4315/4136 4413/4319/4140\nf 1119/4321/4142 4415/4322/4143 4414/4323/4144\nf 4416/4320/4141 4414/4323/4144 4415/4322/4143\nf 4420/4324/4145 4419/4325/4146 4415/4322/4143\nf 1121/4317/4138 4415/4322/4143 4419/4325/4146\nf 283/4326/4147 4418/4327/4148 4417/4328/4149\nf 4420/4324/4145 4417/4328/4149 4418/4327/4148\nf 4422/4329/4150 3335/2846/2704 4411/4316/4137\nf 849/2845/2703 4411/4316/4137 3335/2846/2704\nf 1120/4330/4151 4421/4331/4152 4419/4325/4146\nf 4422/4329/4150 4419/4325/4146 4421/4331/4152\nf 4425/4332/4153 3453/3007/2861 4421/4331/4152\nf 194/3009/2863 4421/4331/4152 3453/3007/2861\nf 4425/4332/4153 4423/4333/4154 4424/4334/4155\nf 1124/4335/4156 4424/4334/4155 4423/4333/4154\nf 4428/4336/4157 4423/4333/4154 4418/4327/4148\nf 1120/4330/4151 4418/4327/4148 4423/4333/4154\nf 1122/4337/4158 4427/4338/4159 4426/4339/4160\nf 4428/4336/4157 4426/4339/4160 4427/4338/4159\nf 1124/4335/4156 4427/4338/4159 4431/4340/4161\nf 4432/4341/4162 4431/4340/4161 4427/4338/4159\nf 4432/4341/4162 4429/4342/4163 4430/4343/4164\nf 284/4344/4165 4430/4343/4164 4429/4342/4163\nf 880/3015/2869 4424/4334/4155 3457/3013/2867\nf 4434/4345/4166 3457/3013/2867 4424/4334/4155\nf 4434/4345/4166 4431/4340/4161 4433/4346/4167\nf 1123/4347/4168 4433/4346/4167 4431/4340/4161\nf 4438/4348/4169 4414/4349/4144 4435/4350/4170\nf 282/4351/4171 4435/4350/4170 4414/4349/4144\nf 1128/4352/4172 4437/4353/4173 4436/4354/4174\nf 4438/4348/4169 4436/4354/4174 4437/4353/4173\nf 4442/4355/4175 4436/4354/4174 4439/4356/4176\nf 1125/4357/4177 4439/4356/4176 4436/4354/4174\nf 1126/4358/4178 4441/4359/4179 4440/4360/4180\nf 4442/4355/4175 4440/4360/4180 4441/4359/4179\nf 4446/4361/4181 4445/4362/4182 4441/4359/4179\nf 1128/4352/4172 4441/4359/4179 4445/4362/4182\nf 286/4363/4183 4444/4364/4184 4443/4365/4185\nf 4446/4361/4181 4443/4365/4185 4444/4364/4184\nf 4448/4366/4186 4417/4367/4149 4437/4353/4173\nf 1119/4368/4142 4437/4353/4173 4417/4367/4149\nf 1127/4369/4187 4447/4370/4188 4445/4362/4182\nf 4448/4366/4186 4445/4362/4182 4447/4370/4188\nf 4451/4371/4189 4426/4372/4160 4447/4370/4188\nf 283/4373/4147 4447/4370/4188 4426/4372/4160\nf 1131/4374/4190 4450/4375/4191 4449/4376/4192\nf 4451/4371/4189 4449/4376/4192 4450/4375/4191\nf 4454/4377/4193 4449/4376/4192 4444/4364/4184\nf 1127/4369/4187 4444/4364/4184 4449/4376/4192\nf 4452/4378/4194 1129/4379/4195 4454/4377/4193\nf 4453/4380/4196 4454/4377/4193 1129/4379/4195\nf 4458/4381/4197 4457/4382/4198 4453/4380/4196\nf 1131/4374/4190 4453/4380/4196 4457/4382/4198\nf 287/4383/4199 4456/4384/4200 4455/4385/4201\nf 4458/4381/4197 4455/4385/4201 4456/4384/4200\nf 1122/4386/4158 4450/4375/4191 4429/4387/4163\nf 4460/4388/4202 4429/4387/4163 4450/4375/4191\nf 4460/4388/4202 4457/4382/4198 4459/4389/4203\nf 1130/4390/4204 4459/4389/4203 4457/4382/4198\nf 285/4391/4205 4461/4392/4206 4440/4360/4180\nf 4464/4393/4207 4440/4360/4180 4461/4392/4206\nf 4464/4393/4207 4462/4394/4208 4463/4395/4209\nf 1135/4396/4210 4463/4395/4209 4462/4394/4208\nf 1132/4397/4211 4465/4398/4212 4462/4394/4208\nf 4468/4399/4213 4462/4394/4208 4465/4398/4212\nf 4468/4399/4213 4466/4400/4214 4467/4401/4215\nf 1133/4402/4216 4467/4401/4215 4466/4400/4214\nf 1135/4396/4210 4467/4401/4215 4471/4403/4217\nf 4472/4404/4218 4471/4403/4217 4467/4401/4215\nf 4470/4405/4219 4472/4404/4218 289/4406/4220\nf 4469/4407/4221 289/4406/4220 4472/4404/4218\nf 4474/4408/4222 4443/4365/4185 4463/4395/4209\nf 1126/4358/4178 4463/4395/4209 4443/4365/4185\nf 4473/4409/4223 4474/4408/4222 1134/4410/4224\nf 4471/4403/4217 1134/4410/4224 4474/4408/4222\nf 4473/4409/4223 4477/4411/4225 286/4363/4183\nf 4452/4378/4194 286/4363/4183 4477/4411/4225\nf 4475/4412/4226 1138/4413/4227 4477/4411/4225\nf 4476/4414/4228 4477/4411/4225 1138/4413/4227\nf 4470/4405/4219 4480/4415/4229 1134/4410/4224\nf 4475/4412/4226 1134/4410/4224 4480/4415/4229\nf 4478/4416/4230 1136/4417/4231 4480/4415/4229\nf 4479/4418/4232 4480/4415/4229 1136/4417/4231\nf 4479/4418/4232 4484/4419/4233 1138/4413/4227\nf 4483/4420/4234 1138/4413/4227 4484/4419/4233\nf 4481/4421/4235 290/4422/4236 4484/4419/4233\nf 4482/4423/4237 4484/4419/4233 290/4422/4236\nf 4476/4414/4228 4486/4424/4238 1129/4379/4195\nf 4455/4385/4201 1129/4379/4195 4486/4424/4238\nf 4483/4420/4234 1137/4425/4239 4486/4424/4238\nf 4485/4426/4240 4486/4424/4238 1137/4425/4239\nf 290/4422/4236 4487/4427/4241 4482/4423/4237\nf 4490/4428/4242 4482/4423/4237 4487/4427/4241\nf 4490/4428/4242 4488/4429/4243 4489/4430/4244\nf 1142/4431/4245 4489/4430/4244 4488/4429/4243\nf 1139/4432/4246 4491/4433/4247 4488/4429/4243\nf 4494/4434/4248 4488/4429/4243 4491/4433/4247\nf 4494/4434/4248 4492/4435/4249 4493/4436/4250\nf 1140/4437/4251 4493/4436/4250 4492/4435/4249\nf 1142/4431/4245 4493/4436/4250 4497/4438/4252\nf 4498/4439/4253 4497/4438/4252 4493/4436/4250\nf 4498/4439/4253 4495/4440/4254 4496/4441/4255\nf 291/4442/4256 4496/4441/4255 4495/4440/4254\nf 1137/4425/4239 4489/4430/4244 4485/4426/4240\nf 4500/4443/4257 4485/4426/4240 4489/4430/4244\nf 4500/4443/4257 4497/4438/4252 4499/4444/4258\nf 1141/4445/4259 4499/4444/4258 4497/4438/4252\nf 215/3169/3019 4501/4446/4260 3570/3170/3020\nf 4504/4447/4261 3570/3170/3020 4501/4446/4260\nf 4504/4447/4261 4502/4448/4262 4503/4449/4263\nf 1146/4450/4264 4503/4449/4263 4502/4448/4262\nf 4502/4448/4262 1143/4451/4265 4508/4452/4266\nf 4505/4453/4267 4508/4452/4266 1143/4451/4265\nf 4508/4452/4266 4506/4454/4268 4507/4455/4269\nf 1144/4456/4270 4507/4455/4269 4506/4454/4268\nf 1146/4450/4264 4507/4455/4269 4511/4457/4271\nf 4512/4458/4272 4511/4457/4271 4507/4455/4269\nf 4510/4459/4273 4512/4458/4272 294/4460/4274\nf 4509/4461/4275 294/4460/4274 4512/4458/4272\nf 909/3173/3023 4503/4449/4263 3573/3174/3024\nf 4514/4462/4276 3573/3174/3024 4503/4449/4263\nf 4514/4462/4276 4511/4457/4271 4513/4463/4277\nf 1145/4464/4278 4513/4463/4277 4511/4457/4271\nf 4513/4463/4277 4517/4465/4279 204/3003/2857\nf 3448/3002/2856 204/3003/2857 4517/4465/4279\nf 4515/4466/4280 1149/4467/4281 4517/4465/4279\nf 4516/4468/4282 4517/4465/4279 1149/4467/4281\nf 4515/4466/4280 1145/4464/4278 4520/4469/4283\nf 4510/4459/4273 4520/4469/4283 1145/4464/4278\nf 4518/4470/4284 1147/4471/4285 4520/4469/4283\nf 4519/4472/4286 4520/4469/4283 1147/4471/4285\nf 4519/4472/4286 4524/4473/4287 1149/4467/4281\nf 4523/4474/4288 1149/4467/4281 4524/4473/4287\nf 4522/4475/4289 4524/4473/4287 293/4476/4290\nf 4521/4477/4291 293/4476/4290 4524/4473/4287\nf 4516/4468/4282 4526/4478/4292 878/3006/2860\nf 3451/3005/2859 878/3006/2860 4526/4478/4292\nf 4523/4474/4288 1148/4479/4293 4526/4478/4292\nf 4525/4480/4294 4526/4478/4292 1148/4479/4293\nf 4506/4454/4268 295/4481/4295 4530/4482/4296\nf 4527/4483/4297 4530/4482/4296 295/4481/4295\nf 4530/4482/4296 4528/4484/4298 4529/4485/4299\nf 1153/4486/4300 4529/4485/4299 4528/4484/4298\nf 1150/4487/4301 4531/4488/4302 4528/4484/4298\nf 4534/4489/4303 4528/4484/4298 4531/4488/4302\nf 4534/4489/4303 4532/4490/4304 4533/4491/4305\nf 1151/4492/4306 4533/4491/4305 4532/4490/4304\nf 1153/4486/4300 4533/4491/4305 4537/4493/4307\nf 4538/4494/4308 4537/4493/4307 4533/4491/4305\nf 4538/4494/4308 4535/4495/4309 4536/4496/4310\nf 297/4497/4311 4536/4496/4310 4535/4495/4309\nf 1144/4456/4270 4529/4485/4299 4509/4461/4275\nf 4540/4498/4312 4509/4461/4275 4529/4485/4299\nf 4540/4498/4312 4537/4493/4307 4539/4499/4313\nf 1152/4500/4314 4539/4499/4313 4537/4493/4307\nf 4518/4470/4284 294/4460/4274 4543/4501/4315\nf 4539/4499/4313 4543/4501/4315 294/4460/4274\nf 4542/4502/4316 4543/4501/4315 1156/4503/4317\nf 4541/4504/4318 1156/4503/4317 4543/4501/4315\nf 4541/4504/4318 1152/4500/4314 4546/4505/4319\nf 4536/4496/4310 4546/4505/4319 1152/4500/4314\nf 4545/4506/4320 4546/4505/4319 1154/4507/4321\nf 4544/4508/4322 1154/4507/4321 4546/4505/4319\nf 4549/4509/4323 1156/4503/4317 4550/4510/4324\nf 4545/4506/4320 4550/4510/4324 1156/4503/4317\nf 4548/4511/4325 4550/4510/4324 296/4512/4326\nf 4547/4513/4327 296/4512/4326 4550/4510/4324\nf 4521/4477/4291 1147/4471/4285 4552/4514/4328\nf 4542/4502/4316 4552/4514/4328 1147/4471/4285\nf 4551/4515/4329 4552/4514/4328 1155/4516/4330\nf 4549/4509/4323 1155/4516/4330 4552/4514/4328\nf 4557/4517/4331 4556/4518/4332 4553/4519/4333\nf 323/4520/4334 4553/4519/4333 4556/4518/4332\nf 1160/4521/4335 4555/4522/4336 4554/4523/4337\nf 4557/4517/4331 4554/4523/4337 4555/4522/4336\nf 4560/4524/4338 4554/4523/4337 4558/4525/4339\nf 1157/4526/4340 4558/4525/4339 4554/4523/4337\nf 338/21/21 4559/4527/4341 1340/2/2\nf 4560/4524/4338 1340/2/2 4559/4527/4341\nf 4563/4528/4342 4562/4529/4343 4559/4527/4341\nf 1160/4521/4335 4559/4527/4341 4562/4529/4343\nf 12/4530/204 4561/4531/4344 1351/20/20\nf 4563/4528/4342 1351/20/20 4561/4531/4344\nf 4566/4532/4345 4565/4533/4346 4555/4522/4336\nf 1159/4534/4347 4555/4522/4336 4565/4533/4346\nf 1158/4535/4348 4564/4536/4349 4562/4529/4343\nf 4566/4532/4345 4562/4529/4343 4564/4536/4349\nf 1470/198/195 11/2053/1967 4570/4537/4350\nf 4567/4538/4351 4570/4537/4350 11/2053/1967\nf 4569/4539/4352 4570/4537/4350 1164/4540/4353\nf 4568/4541/4354 1164/4540/4353 4570/4537/4350\nf 4574/4542/4355 4568/4541/4354 4571/4543/4356\nf 1161/4544/4357 4571/4543/4356 4568/4541/4354\nf 1162/4545/4358 4573/4546/4359 4572/4547/4360\nf 4574/4542/4355 4572/4547/4360 4573/4546/4359\nf 4578/4548/4361 4577/4549/4362 4573/4546/4359\nf 1164/4540/4353 4573/4546/4359 4577/4549/4362\nf 318/4550/4363 4576/4551/4364 4575/4552/4365\nf 4578/4548/4361 4575/4552/4365 4576/4551/4364\nf 1473/203/200 373/196/193 4580/4553/4366\nf 4569/4539/4352 4580/4553/4366 373/196/193\nf 4579/4554/4367 4580/4553/4366 1163/4555/4368\nf 4577/4549/4362 1163/4555/4368 4580/4553/4366\nf 4584/4556/4369 4583/4557/4370 4564/4558/4349\nf 316/4559/4371 4564/4558/4349 4583/4557/4370\nf 4584/4556/4369 4581/4560/4372 4582/4561/4373\nf 1167/4562/4374 4582/4561/4373 4581/4560/4372\nf 1158/4563/4348 4561/4564/4344 4581/4560/4372\nf 4586/4565/4375 4581/4560/4372 4561/4564/4344\nf 4586/4565/4375 1481/209/205 4585/4566/4376\nf 378/225/219 4585/4566/4376 1481/209/205\nf 1167/4562/4374 4585/4566/4376 4588/4567/4377\nf 4589/4568/4378 4588/4567/4377 4585/4566/4376\nf 4589/4568/4378 1491/226/220 4587/4569/4379\nf 23/413/368 4587/4569/4379 1491/226/220\nf 4592/4570/4380 4591/4571/4381 4582/4561/4373\nf 1166/4572/4382 4582/4561/4373 4591/4571/4381\nf 4592/4570/4380 4588/4567/4377 4590/4573/4383\nf 1165/4574/4384 4590/4573/4383 4588/4567/4377\nf 1592/404/359 22/4575/198 4595/4576/4385\nf 4579/4577/4367 4595/4576/4385 22/4575/198\nf 4594/4578/4386 4595/4576/4385 1170/4579/4387\nf 4593/4580/4388 1170/4579/4387 4595/4576/4385\nf 4598/4581/4389 4593/4580/4388 4576/4582/4364\nf 1163/4583/4368 4576/4582/4364 4593/4580/4388\nf 4597/4584/4390 4598/4581/4389 1168/4585/4391\nf 4596/4586/4392 1168/4585/4391 4598/4581/4389\nf 4601/4587/4393 1170/4579/4387 4602/4588/4394\nf 4597/4584/4390 4602/4588/4394 1170/4579/4387\nf 4600/4589/4395 4602/4588/4394 319/4590/4396\nf 4599/4591/4397 319/4590/4396 4602/4588/4394\nf 1595/409/364 404/402/357 4604/4592/4398\nf 4594/4578/4386 4604/4592/4398 404/402/357\nf 4603/4593/4399 4604/4592/4398 1169/4594/4400\nf 4601/4587/4393 1169/4594/4400 4604/4592/4398\nf 4608/4595/4401 4607/4596/4402 4590/4573/4383\nf 317/4597/4403 4590/4573/4383 4607/4596/4402\nf 1173/4598/4404 4606/4599/4405 4605/4600/4406\nf 4608/4595/4401 4605/4600/4406 4606/4599/4405\nf 1165/4574/4384 4587/4569/4379 4605/4600/4406\nf 4610/4601/4407 4605/4600/4406 4587/4569/4379\nf 4610/4601/4407 1603/414/369 4609/4602/4408\nf 409/428/383 4609/4602/4408 1603/414/369\nf 4613/4603/4409 4612/4604/4410 4609/4602/4408\nf 1173/4598/4404 4609/4602/4408 4612/4604/4410\nf 4613/4603/4409 1613/429/384 4611/4605/4411\nf 34/581/532 4611/4605/4411 1613/429/384\nf 4616/4606/4412 4615/4607/4413 4606/4599/4405\nf 1172/4608/4414 4606/4599/4405 4615/4607/4413\nf 1171/4609/4415 4614/4610/4416 4612/4604/4410\nf 4616/4606/4412 4612/4604/4410 4614/4610/4416\nf 1714/572/523 33/407/362 4619/4611/4417\nf 4603/4593/4399 4619/4611/4417 33/407/362\nf 4618/4612/4418 4619/4611/4417 1176/4613/4419\nf 4617/4614/4420 1176/4613/4419 4619/4611/4417\nf 4617/4614/4420 1169/4594/4400 4622/4615/4421\nf 4600/4589/4395 4622/4615/4421 1169/4594/4400\nf 1174/4616/4422 4621/4617/4423 4620/4618/4424\nf 4622/4615/4421 4620/4618/4424 4621/4617/4423\nf 4625/4619/4425 1176/4613/4419 4626/4620/4426\nf 4621/4617/4423 4626/4620/4426 1176/4613/4419\nf 4626/4620/4426 4623/4621/4427 4624/4622/4428\nf 308/4623/4429 4624/4622/4428 4623/4621/4427\nf 1717/577/528 435/570/521 4628/4624/4430\nf 4618/4612/4418 4628/4624/4430 435/570/521\nf 4627/4625/4431 4628/4624/4430 1175/4626/4432\nf 4625/4619/4425 1175/4626/4432 4628/4624/4430\nf 4633/4627/4433 4632/4628/4434 4629/4629/4435\nf 314/4630/4436 4629/4629/4435 4632/4628/4434\nf 1180/4631/4437 4631/4632/4438 4630/4633/4439\nf 4633/4627/4433 4630/4633/4439 4631/4632/4438\nf 4636/4634/4440 4630/4633/4439 4634/4635/4441\nf 1177/4636/4442 4634/4635/4441 4630/4633/4439\nf 4636/4634/4440 1969/918/861 4635/4637/4443\nf 502/932/875 4635/4637/4443 1969/918/861\nf 1180/4631/4437 4635/4637/4443 4638/4638/4444\nf 4639/4639/4445 4638/4638/4444 4635/4637/4443\nf 4639/4639/4445 1979/933/876 4637/4640/4446\nf 67/1086/1025 4637/4640/4446 1979/933/876\nf 4642/4641/4447 4641/4642/4448 4631/4632/4438\nf 1179/4643/4449 4631/4632/4438 4641/4642/4448\nf 4642/4641/4447 4638/4638/4444 4640/4644/4450\nf 1178/4645/4451 4640/4644/4450 4638/4638/4444\nf 66/911/854 4643/4646/4452 2080/1074/1013\nf 4646/4647/4453 2080/1074/1013 4643/4646/4452\nf 4645/4648/4454 4646/4647/4453 1184/4649/4455\nf 4644/4650/4456 1184/4649/4455 4646/4647/4453\nf 4647/4651/4457 4650/4652/4458 1181/4653/4459\nf 4644/4650/4456 1181/4653/4459 4650/4652/4458\nf 4649/4654/4460 4650/4652/4458 1182/4655/4461\nf 4648/4656/4462 1182/4655/4461 4650/4652/4458\nf 4653/4657/4463 1184/4649/4455 4654/4658/4464\nf 4649/4654/4460 4654/4658/4464 1184/4649/4455\nf 4652/4659/4465 4654/4658/4464 330/4660/4466\nf 4651/4661/4467 330/4660/4466 4654/4658/4464\nf 2083/1079/1018 528/1075/1014 4656/4662/4468\nf 4645/4648/4454 4656/4662/4468 528/1075/1014\nf 4655/4663/4469 4656/4662/4468 1183/4664/4470\nf 4653/4657/4463 1183/4664/4470 4656/4662/4468\nf 321/4665/4471 4640/4644/4450 4659/4666/4472\nf 4660/4667/4473 4659/4666/4472 4640/4644/4450\nf 4657/4668/4474 1187/4669/4475 4660/4667/4473\nf 4658/4670/4476 4660/4667/4473 1187/4669/4475\nf 4637/4640/4446 4662/4671/4477 1178/4645/4451\nf 4657/4668/4474 1178/4645/4451 4662/4671/4477\nf 2091/1087/1026 533/1101/1040 4662/4671/4477\nf 4661/4672/4478 4662/4671/4477 533/1101/1040\nf 4661/4672/4478 4665/4673/4479 1187/4669/4475\nf 4664/4674/4480 1187/4669/4475 4665/4673/4479\nf 2101/1102/1041 78/1254/1189 4665/4673/4479\nf 4663/4675/4481 4665/4673/4479 78/1254/1189\nf 4658/4670/4476 4668/4676/4482 1186/4677/4483\nf 4667/4678/4484 1186/4677/4483 4668/4676/4482\nf 4664/4674/4480 1185/4679/4485 4668/4676/4482\nf 4666/4680/4486 4668/4676/4482 1185/4679/4485\nf 4655/4663/4469 4671/4681/4487 77/1080/1019\nf 2202/1242/1177 77/1080/1019 4671/4681/4487\nf 4669/4682/4488 1190/4683/4489 4671/4681/4487\nf 4670/4684/4490 4671/4681/4487 1190/4683/4489\nf 4669/4682/4488 1183/4664/4470 4674/4685/4491\nf 4652/4659/4465 4674/4685/4491 1183/4664/4470\nf 4672/4686/4492 1188/4687/4493 4674/4685/4491\nf 4673/4688/4494 4674/4685/4491 1188/4687/4493\nf 4673/4688/4494 4678/4689/4495 1190/4683/4489\nf 4677/4690/4496 1190/4683/4489 4678/4689/4495\nf 4675/4691/4497 331/4692/4498 4678/4689/4495\nf 4676/4693/4499 4678/4689/4495 331/4692/4498\nf 4670/4684/4490 4680/4694/4500 559/1243/1178\nf 2205/1247/1182 559/1243/1178 4680/4694/4500\nf 4677/4690/4496 1189/4695/4501 4680/4694/4500\nf 4679/4696/4502 4680/4694/4500 1189/4695/4501\nf 4666/4680/4486 4684/4697/4503 322/4698/4504\nf 4683/4699/4505 322/4698/4504 4684/4697/4503\nf 4681/4700/4506 1193/4701/4507 4684/4697/4503\nf 4682/4702/4508 4684/4697/4503 1193/4701/4507\nf 4663/4675/4481 4686/4703/4509 1185/4679/4485\nf 4681/4700/4506 1185/4679/4485 4686/4703/4509\nf 2213/1255/1190 564/1269/1204 4686/4703/4509\nf 4685/4704/4510 4686/4703/4509 564/1269/1204\nf 4685/4704/4510 4689/4705/4511 1193/4701/4507\nf 4688/4706/4512 1193/4701/4507 4689/4705/4511\nf 2223/1270/1205 89/1422/1353 4689/4705/4511\nf 4687/4707/4513 4689/4705/4511 89/1422/1353\nf 4682/4702/4508 4692/4708/4514 1192/4709/4515\nf 4691/4710/4516 1192/4709/4515 4692/4708/4514\nf 4692/4708/4514 4688/4706/4512 4690/4711/4517\nf 1191/4712/4518 4690/4711/4517 4688/4706/4512\nf 4679/4696/4502 4695/4713/4519 88/1248/1183\nf 2324/1410/1341 88/1248/1183 4695/4713/4519\nf 4693/4714/4520 1196/4715/4521 4695/4713/4519\nf 4694/4716/4522 4695/4713/4519 1196/4715/4521\nf 4676/4693/4499 4698/4717/4523 1189/4695/4501\nf 4693/4714/4520 1189/4695/4501 4698/4717/4523\nf 4696/4718/4524 1194/4719/4525 4698/4717/4523\nf 4697/4720/4526 4698/4717/4523 1194/4719/4525\nf 4697/4720/4526 4702/4721/4527 1196/4715/4521\nf 4701/4722/4528 1196/4715/4521 4702/4721/4527\nf 4699/4723/4529 332/4724/4530 4702/4721/4527\nf 4700/4725/4531 4702/4721/4527 332/4724/4530\nf 4694/4716/4522 4704/4726/4532 590/1411/1342\nf 2327/1415/1346 590/1411/1342 4704/4726/4532\nf 4704/4726/4532 4701/4722/4528 4703/4727/4533\nf 1195/4728/4534 4703/4727/4533 4701/4722/4528\nf 324/4729/4535 4690/4711/4517 4707/4730/4536\nf 4708/4731/4537 4707/4730/4536 4690/4711/4517\nf 4708/4731/4537 4705/4732/4538 4706/4733/4539\nf 1199/4734/4540 4706/4733/4539 4705/4732/4538\nf 1191/4712/4518 4687/4707/4513 4705/4732/4538\nf 4710/4735/4541 4705/4732/4538 4687/4707/4513\nf 4710/4735/4541 2335/1423/1354 4709/4736/4542\nf 595/1436/1367 4709/4736/4542 2335/1423/1354\nf 1199/4734/4540 4709/4736/4542 4712/4737/4543\nf 4713/4738/4544 4712/4737/4543 4709/4736/4542\nf 4713/4738/4544 2345/1437/1368 4711/4739/4545\nf 100/1589/1516 4711/4739/4545 2345/1437/1368\nf 1198/4740/4546 4706/4733/4539 4715/4741/4547\nf 4716/4742/4548 4715/4741/4547 4706/4733/4539\nf 4716/4742/4548 4712/4737/4543 4714/4743/4549\nf 1197/4744/4550 4714/4743/4549 4712/4737/4543\nf 99/1416/1347 4703/4727/4533 2446/1578/1505\nf 4719/4745/4551 2446/1578/1505 4703/4727/4533\nf 4719/4745/4551 4717/4746/4552 4718/4747/4553\nf 1202/4748/4554 4718/4747/4553 4717/4746/4552\nf 4700/4725/4531 4722/4749/4555 1195/4728/4534\nf 4717/4746/4552 1195/4728/4534 4722/4749/4555\nf 4722/4749/4555 4720/4750/4556 4721/4751/4557\nf 1200/4752/4558 4721/4751/4557 4720/4750/4556\nf 1202/4748/4554 4721/4751/4557 4725/4753/4559\nf 4726/4754/4560 4725/4753/4559 4721/4751/4557\nf 4726/4754/4560 4723/4755/4561 4724/4756/4562\nf 333/4757/4563 4724/4756/4562 4723/4755/4561\nf 621/1580/1507 4718/4747/4553 2449/1583/1510\nf 4728/4758/4564 2449/1583/1510 4718/4747/4553\nf 4728/4758/4564 4725/4753/4559 4727/4759/4565\nf 1201/4760/4566 4727/4759/4565 4725/4753/4559\nf 325/4761/4567 4714/4743/4549 4731/4762/4568\nf 4732/4763/4569 4731/4762/4568 4714/4743/4549\nf 4732/4763/4569 4729/4764/4570 4730/4765/4571\nf 1205/4766/4572 4730/4765/4571 4729/4764/4570\nf 1197/4744/4550 4711/4739/4545 4729/4764/4570\nf 4734/4767/4573 4729/4764/4570 4711/4739/4545\nf 4734/4767/4573 2457/1590/1517 4733/4768/4574\nf 626/1604/1531 4733/4768/4574 2457/1590/1517\nf 1205/4766/4572 4733/4768/4574 4736/4769/4575\nf 4737/4770/4576 4736/4769/4575 4733/4768/4574\nf 4737/4770/4576 2467/1605/1532 4735/4771/4577\nf 111/1758/1681 4735/4771/4577 2467/1605/1532\nf 1204/4772/4578 4730/4765/4571 4739/4773/4579\nf 4740/4774/4580 4739/4773/4579 4730/4765/4571\nf 4740/4774/4580 4736/4769/4575 4738/4775/4581\nf 1203/4776/4582 4738/4775/4581 4736/4769/4575\nf 110/1585/1512 4727/4759/4565 2568/1746/1669\nf 4743/4777/4583 2568/1746/1669 4727/4759/4565\nf 4743/4777/4583 4741/4778/4584 4742/4779/4585\nf 1208/4780/4586 4742/4779/4585 4741/4778/4584\nf 1201/4760/4566 4724/4756/4562 4741/4778/4584\nf 4746/4781/4587 4741/4778/4584 4724/4756/4562\nf 4746/4781/4587 4744/4782/4588 4745/4783/4589\nf 1206/4784/4590 4745/4783/4589 4744/4782/4588\nf 1208/4780/4586 4745/4783/4589 4749/4785/4591\nf 4750/4786/4592 4749/4785/4591 4745/4783/4589\nf 4750/4786/4592 4747/4787/4593 4748/4788/4594\nf 334/4789/4595 4748/4788/4594 4747/4787/4593\nf 652/1748/1671 4742/4779/4585 2571/1751/1674\nf 4752/4790/4596 2571/1751/1674 4742/4779/4585\nf 4752/4790/4596 4749/4785/4591 4751/4791/4597\nf 1207/4792/4598 4751/4791/4597 4749/4785/4591\nf 326/4793/4599 4738/4775/4581 4755/4794/4600\nf 4756/4795/4601 4755/4794/4600 4738/4775/4581\nf 4753/4796/4602 1211/4797/4603 4756/4795/4601\nf 4754/4798/4604 4756/4795/4601 1211/4797/4603\nf 4735/4771/4577 4758/4799/4605 1203/4776/4582\nf 4753/4796/4602 1203/4776/4582 4758/4799/4605\nf 2579/1759/1682 657/1773/1696 4758/4799/4605\nf 4757/4800/4606 4758/4799/4605 657/1773/1696\nf 4757/4800/4606 4761/4801/4607 1211/4797/4603\nf 4760/4802/4608 1211/4797/4603 4761/4801/4607\nf 2589/1774/1697 122/1926/1845 4761/4801/4607\nf 4759/4803/4609 4761/4801/4607 122/1926/1845\nf 4754/4798/4604 4764/4804/4610 1210/4805/4611\nf 4763/4806/4612 1210/4805/4611 4764/4804/4610\nf 4760/4802/4608 1209/4807/4613 4764/4804/4610\nf 4762/4808/4614 4764/4804/4610 1209/4807/4613\nf 121/1753/1676 4751/4791/4597 2690/1914/1833\nf 4767/4809/4615 2690/1914/1833 4751/4791/4597\nf 4767/4809/4615 4765/4810/4616 4766/4811/4617\nf 1214/4812/4618 4766/4811/4617 4765/4810/4616\nf 4748/4788/4594 4770/4813/4619 1207/4792/4598\nf 4765/4810/4616 1207/4792/4598 4770/4813/4619\nf 4768/4814/4620 1212/4815/4621 4770/4813/4619\nf 4769/4816/4622 4770/4813/4619 1212/4815/4621\nf 4769/4816/4622 4774/4817/4623 1214/4812/4618\nf 4773/4818/4624 1214/4812/4618 4774/4817/4623\nf 4771/4819/4625 329/4820/4626 4774/4817/4623\nf 4772/4821/4627 4774/4817/4623 329/4820/4626\nf 683/1915/1834 4766/4811/4617 2693/1919/1838\nf 4776/4822/4628 2693/1919/1838 4766/4811/4617\nf 4776/4822/4628 4773/4818/4624 4775/4823/4629\nf 1213/4824/4630 4775/4823/4629 4773/4818/4624\nf 4762/4808/4614 4780/4825/4631 327/4826/4632\nf 4779/4827/4633 327/4826/4632 4780/4825/4631\nf 4777/4828/4634 1216/4829/4635 4780/4825/4631\nf 4778/4830/4636 4780/4825/4631 1216/4829/4635\nf 4759/4803/4609 4782/4831/4637 1209/4807/4613\nf 4777/4828/4634 1209/4807/4613 4782/4831/4637\nf 2701/1927/1846 687/1938/1857 4782/4831/4637\nf 4781/4832/4638 4782/4831/4637 687/1938/1857\nf 1216/4829/4635 4781/4832/4638 4783/4833/4639\nf 4784/4834/4640 4783/4833/4639 4781/4832/4638\nf 4784/4834/4640 2709/1939/1858 4558/4525/4339\nf 1/4/4 4558/4525/4339 2709/1939/1858\nf 1215/4835/4641 4778/4830/4636 4785/4836/4642\nf 4786/4837/4643 4785/4836/4642 4778/4830/4636\nf 4786/4837/4643 4783/4833/4639 4553/4519/4333\nf 1157/4526/4340 4553/4519/4333 4783/4833/4639\nf 132/1920/1839 4775/4823/4629 2794/2047/1961\nf 4789/4838/4644 2794/2047/1961 4775/4823/4629\nf 4789/4838/4644 4787/4839/4645 4788/4840/4646\nf 1218/4841/4647 4788/4840/4646 4787/4839/4645\nf 4772/4821/4627 4792/4842/4648 1213/4824/4630\nf 4787/4839/4645 1213/4824/4630 4792/4842/4648\nf 4790/4843/4649 1217/4844/4650 4792/4842/4648\nf 4791/4845/4651 4792/4842/4648 1217/4844/4650\nf 4791/4845/4651 4795/4846/4652 1218/4841/4647\nf 4794/4847/4653 1218/4841/4647 4795/4846/4652\nf 4793/4848/4654 328/4849/4655 4795/4846/4652\nf 4571/4543/4356 4795/4846/4652 328/4849/4655\nf 705/2048/1962 4788/4840/4646 2797/2052/1966\nf 4796/4850/4656 2797/2052/1966 4788/4840/4646\nf 4796/4850/4656 4794/4847/4653 4567/4538/4351\nf 1161/4544/4357 4567/4538/4351 4794/4847/4653\nf 4800/4851/4657 4799/4852/4658 4614/4610/4416\nf 305/4853/4659 4614/4610/4416 4799/4852/4658\nf 4797/4854/4660 1221/4855/4661 4800/4851/4657\nf 4798/4856/4662 4800/4851/4657 1221/4855/4661\nf 4802/4857/4663 4797/4854/4660 4611/4605/4411\nf 1171/4609/4415 4611/4605/4411 4797/4854/4660\nf 2803/2055/1969 709/2069/1983 4802/4857/4663\nf 4801/4858/4664 4802/4857/4663 709/2069/1983\nf 1221/4855/4661 4801/4858/4664 4804/4859/4665\nf 4805/4860/4666 4804/4859/4665 4801/4858/4664\nf 133/4861/2006 4803/4862/4667 2813/2070/1984\nf 4805/4860/4666 2813/2070/1984 4803/4862/4667\nf 1220/4863/4668 4798/4856/4662 4807/4864/4669\nf 4808/4865/4670 4807/4864/4669 4798/4856/4662\nf 4808/4865/4670 4804/4859/4665 4806/4866/4671\nf 1219/4867/4672 4806/4866/4671 4804/4859/4665\nf 56/917/860 4634/4635/4441 2818/2079/1993\nf 4811/4868/4673 2818/2079/1993 4634/4635/4441\nf 4811/4868/4673 4809/4869/4674 4810/4870/4675\nf 1224/4871/4676 4810/4870/4675 4809/4869/4674\nf 1177/4636/4442 4629/4629/4435 4809/4869/4674\nf 4814/4872/4677 4809/4869/4674 4629/4629/4435\nf 4814/4872/4677 4812/4873/4678 4813/4874/4679\nf 1222/4875/4680 4813/4874/4679 4812/4873/4678\nf 1224/4871/4676 4813/4874/4679 4817/4876/4681\nf 4818/4877/4682 4817/4876/4681 4813/4874/4679\nf 4818/4877/4682 4815/4878/4683 4816/4879/4684\nf 302/4880/4685 4816/4879/4684 4815/4878/4683\nf 711/2081/1995 4810/4870/4675 2821/2084/1998\nf 4820/4881/4686 2821/2084/1998 4810/4870/4675\nf 4820/4881/4686 4817/4876/4681 4819/4882/4687\nf 1223/4883/4688 4819/4882/4687 4817/4876/4681\nf 135/4884/2000 4819/4885/4687 2844/2122/2029\nf 4823/4886/4689 2844/2122/2029 4819/4885/4687\nf 4822/4887/4690 4823/4886/4689 1227/4888/4691\nf 4821/4889/4692 1227/4888/4691 4823/4886/4689\nf 1223/4890/4688 4816/4891/4684 4821/4889/4692\nf 4826/4892/4693 4821/4889/4692 4816/4891/4684\nf 4825/4893/4694 4826/4892/4693 1225/4894/4695\nf 4824/4895/4696 1225/4894/4695 4826/4892/4693\nf 4829/4896/4697 1227/4888/4691 4830/4897/4698\nf 4825/4893/4694 4830/4897/4698 1227/4888/4691\nf 4828/4898/4699 4830/4897/4698 315/4899/4700\nf 4827/4900/4701 315/4899/4700 4830/4897/4698\nf 718/2124/2031 4822/4887/4690 2847/2129/2036\nf 4832/4901/4702 2847/2129/2036 4822/4887/4690\nf 4832/4901/4702 4829/4896/4697 4831/4902/4703\nf 1226/4903/4704 4831/4902/4703 4829/4896/4697\nf 4836/4904/4705 4835/4905/4706 4806/4906/4671\nf 306/4907/4707 4806/4906/4671 4835/4905/4706\nf 1230/4908/4708 4834/4909/4709 4833/4910/4710\nf 4836/4904/4705 4833/4910/4710 4834/4909/4709\nf 4838/4911/4711 4833/4910/4710 4803/4912/4667\nf 1219/4913/4672 4803/4912/4667 4833/4910/4710\nf 716/2110/2021 4837/4914/4712 2829/2091/2005\nf 4838/4911/4711 2829/2091/2005 4837/4914/4712\nf 4841/4915/4713 4840/4916/4714 4837/4914/4712\nf 1230/4908/4708 4837/4914/4712 4840/4916/4714\nf 136/2133/2040 4839/4917/4715 2839/2109/2020\nf 4841/4915/4713 2839/2109/2020 4839/4917/4715\nf 4844/4918/4716 4843/4919/4717 4834/4909/4709\nf 1229/4920/4718 4834/4909/4709 4843/4919/4717\nf 4844/4918/4716 4840/4916/4714 4842/4921/4719\nf 1228/4922/4720 4842/4921/4719 4840/4916/4714\nf 4842/4921/4719 4848/4923/4721 307/4924/4722\nf 4847/4925/4723 307/4924/4722 4848/4923/4721\nf 4845/4926/4724 1233/4927/4725 4848/4923/4721\nf 4846/4928/4726 4848/4923/4721 1233/4927/4725\nf 1228/4922/4720 4839/4917/4715 4845/4926/4724\nf 4850/4929/4727 4845/4926/4724 4839/4917/4715\nf 4850/4929/4727 2855/2134/2041 4849/4930/4728\nf 723/2148/2055 4849/4930/4728 2855/2134/2041\nf 1233/4927/4725 4849/4930/4728 4852/4931/4729\nf 4853/4932/4730 4852/4931/4729 4849/4930/4728\nf 4853/4932/4730 2865/2149/2056 4851/4933/4731\nf 139/4934/4732 4851/4933/4731 2865/2149/2056\nf 4846/4928/4726 4856/4935/4733 1232/4936/4734\nf 4855/4937/4735 1232/4936/4734 4856/4935/4733\nf 4854/4938/4736 4856/4935/4733 1231/4939/4737\nf 4852/4931/4729 1231/4939/4737 4856/4935/4733\nf 4859/4940/4738 301/4941/4739 4860/4942/4740\nf 4854/4938/4736 4860/4942/4740 301/4941/4739\nf 4858/4943/4741 4860/4942/4740 1236/4944/4742\nf 4857/4945/4743 1236/4944/4742 4860/4942/4740\nf 4857/4945/4743 1231/4939/4737 4862/4946/4744\nf 4851/4933/4731 4862/4946/4744 1231/4939/4737\nf 4861/4947/4745 4862/4946/4744 722/2152/2059\nf 2864/2151/2058 722/2152/2059 4862/4946/4744\nf 4864/4948/4746 1236/4944/4742 4865/4949/4747\nf 4861/4947/4745 4865/4949/4747 1236/4944/4742\nf 140/2146/2053 4863/4950/4748 2861/2147/2054\nf 4865/4949/4747 2861/2147/2054 4863/4950/4748\nf 4867/4951/4749 1235/4952/4750 4868/4953/4751\nf 4858/4943/4741 4868/4953/4751 1235/4952/4750\nf 4866/4954/4752 4868/4953/4751 1234/4955/4753\nf 4864/4948/4746 1234/4955/4753 4868/4953/4751\nf 4866/4954/4752 4872/4956/4754 299/4957/4755\nf 4871/4958/4756 299/4957/4755 4872/4956/4754\nf 4872/4956/4754 4869/4959/4757 4870/4960/4758\nf 1239/4961/4759 4870/4960/4758 4869/4959/4757\nf 4863/4950/4748 4874/4962/4760 1234/4955/4753\nf 4869/4959/4757 1234/4955/4753 4874/4962/4760\nf 4874/4962/4760 2877/2168/2075 4873/4963/4761\nf 726/2167/2074 4873/4963/4761 2877/2168/2075\nf 1239/4961/4759 4873/4963/4761 4876/4964/4762\nf 4877/4965/4763 4876/4964/4762 4873/4963/4761\nf 4877/4965/4763 2874/2165/2072 4875/4966/4764\nf 141/2164/2071 4875/4966/4764 2874/2165/2072\nf 1238/4967/4765 4870/4960/4758 4879/4968/4766\nf 4880/4969/4767 4879/4968/4766 4870/4960/4758\nf 4880/4969/4767 4876/4964/4762 4878/4970/4768\nf 1237/4971/4769 4878/4970/4768 4876/4964/4762\nf 138/2127/2034 4831/4902/4703 2883/2175/2082\nf 4883/4972/4770 2883/2175/2082 4831/4902/4703\nf 4883/4972/4770 4881/4973/4771 4882/4974/4772\nf 1242/4975/4773 4882/4974/4772 4881/4973/4771\nf 1226/4903/4704 4828/4898/4699 4881/4973/4771\nf 4886/4976/4774 4881/4973/4771 4828/4898/4699\nf 4884/4977/4775 1240/4978/4776 4886/4976/4774\nf 4885/4979/4777 4886/4976/4774 1240/4978/4776\nf 1242/4975/4773 4885/4979/4777 4889/4980/4778\nf 4890/4981/4779 4889/4980/4778 4885/4979/4777\nf 4887/4982/4780 303/4983/4781 4890/4981/4779\nf 4888/4984/4782 4890/4981/4779 303/4983/4781\nf 728/2177/2084 4882/4974/4772 2886/2180/2087\nf 4892/4985/4783 2886/2180/2087 4882/4974/4772\nf 4892/4985/4783 4889/4980/4778 4891/4986/4784\nf 1241/4987/4785 4891/4986/4784 4889/4980/4778\nf 300/4988/4786 4878/4970/4768 4895/4989/4787\nf 4896/4990/4788 4895/4989/4787 4878/4970/4768\nf 1245/4991/4789 4894/4992/4790 4893/4993/4791\nf 4896/4990/4788 4893/4993/4791 4894/4992/4790\nf 1237/4971/4769 4875/4966/4764 4893/4993/4791\nf 4898/4994/4792 4893/4993/4791 4875/4966/4764\nf 4898/4994/4792 2881/2169/2076 4897/4995/4793\nf 730/2183/2090 4897/4995/4793 2881/2169/2076\nf 1245/4991/4789 4897/4995/4793 4900/4996/4794\nf 4901/4997/4795 4900/4996/4794 4897/4995/4793\nf 4901/4997/4795 2891/2184/2091 4899/4998/4796\nf 143/4999/4797 4899/4998/4796 2891/2184/2091\nf 4903/5000/4798 1244/5001/4799 4904/5002/4800\nf 4894/4992/4790 4904/5002/4800 1244/5001/4799\nf 4902/5003/4801 4904/5002/4800 1243/5004/4802\nf 4900/4996/4794 1243/5004/4802 4904/5002/4800\nf 4891/4986/4784 4907/5005/4803 142/2182/2089\nf 2887/2181/2088 142/2182/2089 4907/5005/4803\nf 4905/5006/4804 1247/5007/4805 4907/5005/4803\nf 4906/5008/4806 4907/5005/4803 1247/5007/4805\nf 4888/4984/4782 4910/5009/4807 1241/4987/4785\nf 4905/5006/4804 1241/4987/4785 4910/5009/4807\nf 4908/5010/4808 1246/5011/4809 4910/5009/4807\nf 4909/5012/4810 4910/5009/4807 1246/5011/4809\nf 1247/5007/4805 4909/5012/4810 4912/5013/4811\nf 4913/5014/4812 4912/5013/4811 4909/5012/4810\nf 4913/5014/4812 4911/5015/4813 4902/5003/4801\nf 304/5016/4814 4902/5003/4801 4911/5015/4813\nf 729/2187/2094 4906/5008/4806 2890/2186/2093\nf 4914/5017/4815 2890/2186/2093 4906/5008/4806\nf 4914/5017/4815 4912/5013/4811 4899/4998/4796\nf 1243/5004/4802 4899/4998/4796 4912/5013/4811\nf 320/5018/4816 4647/4651/4457 4917/5019/4817\nf 4918/5020/4818 4917/5019/4817 4647/4651/4457\nf 4915/5021/4819 1250/5022/4820 4918/5020/4818\nf 4916/5023/4821 4918/5020/4818 1250/5022/4820\nf 4643/4646/4452 4920/5024/4822 1181/4653/4459\nf 4915/5021/4819 1181/4653/4459 4920/5024/4822\nf 2895/2188/2095 734/2203/2110 4920/5024/4822\nf 4919/5025/4823 4920/5024/4822 734/2203/2110\nf 4919/5025/4823 4923/5026/4824 1250/5022/4820\nf 4922/5027/4825 1250/5022/4820 4923/5026/4824\nf 2905/2204/2111 146/2224/2131 4923/5026/4824\nf 4921/5028/4826 4923/5026/4824 146/2224/2131\nf 4916/5023/4821 4926/5029/4827 1249/5030/4828\nf 4925/5031/4829 1249/5030/4828 4926/5029/4827\nf 4922/5027/4825 1248/5032/4830 4926/5029/4827\nf 4924/5033/4831 4926/5029/4827 1248/5032/4830\nf 44/575/526 4627/4625/4431 2910/2212/2119\nf 4929/5034/4832 2910/2212/2119 4627/4625/4431\nf 4929/5034/4832 4927/5035/4833 4928/5036/4834\nf 1253/5037/4835 4928/5036/4834 4927/5035/4833\nf 1175/4626/4432 4624/4622/4428 4927/5035/4833\nf 4932/5038/4836 4927/5035/4833 4624/4622/4428\nf 4932/5038/4836 4930/5039/4837 4931/5040/4838\nf 1251/5041/4839 4931/5040/4838 4930/5039/4837\nf 1253/5037/4835 4931/5040/4838 4935/5042/4840\nf 4936/5043/4841 4935/5042/4840 4931/5040/4838\nf 4936/5043/4841 4933/5044/4842 4934/5045/4843\nf 310/5046/4844 4934/5045/4843 4933/5044/4842\nf 4928/5036/4834 4938/5047/4845 736/2213/2120\nf 2913/2217/2124 736/2213/2120 4938/5047/4845\nf 4938/5047/4845 4935/5042/4840 4937/5048/4846\nf 1252/5049/4847 4937/5048/4846 4935/5042/4840\nf 4924/5033/4831 4942/5050/4848 311/5051/4849\nf 4941/5052/4850 311/5051/4849 4942/5050/4848\nf 4939/5053/4851 1256/5054/4852 4942/5050/4848\nf 4940/5055/4853 4942/5050/4848 1256/5054/4852\nf 4921/5028/4826 4944/5056/4854 1248/5032/4830\nf 4939/5053/4851 1248/5032/4830 4944/5056/4854\nf 2921/2225/2132 741/2238/2145 4944/5056/4854\nf 4943/5057/4855 4944/5056/4854 741/2238/2145\nf 4943/5057/4855 4947/5058/4856 1256/5054/4852\nf 4946/5059/4857 1256/5054/4852 4947/5058/4856\nf 2931/2239/2146 149/5060/4858 4947/5058/4856\nf 4945/5061/4859 4947/5058/4856 149/5060/4858\nf 4940/5055/4853 4950/5062/4860 1255/5063/4861\nf 4949/5064/4862 1255/5063/4861 4950/5062/4860\nf 4946/5059/4857 1254/5065/4863 4950/5062/4860\nf 4948/5066/4864 4950/5062/4860 1254/5065/4863\nf 4937/5048/4846 4953/5067/4865 144/2218/2125\nf 2936/2248/2155 144/2218/2125 4953/5067/4865\nf 4951/5068/4866 1259/5069/4867 4953/5067/4865\nf 4952/5070/4868 4953/5067/4865 1259/5069/4867\nf 1252/5049/4847 4934/5045/4843 4951/5068/4866\nf 4956/5071/4869 4951/5068/4866 4934/5045/4843\nf 4956/5071/4869 4954/5072/4870 4955/5073/4871\nf 1257/5074/4872 4955/5073/4871 4954/5072/4870\nf 1259/5069/4867 4955/5073/4871 4959/5075/4873\nf 4960/5076/4874 4959/5075/4873 4955/5073/4871\nf 4960/5076/4874 4957/5077/4875 4958/5078/4876\nf 312/5079/4877 4958/5078/4876 4957/5077/4875\nf 4952/5070/4868 4962/5080/4878 743/2249/2156\nf 2939/2253/2160 743/2249/2156 4962/5080/4878\nf 4962/5080/4878 4959/5075/4873 4961/5081/4879\nf 1258/5082/4880 4961/5081/4879 4959/5075/4873\nf 147/2254/2161 4961/5081/4879 2940/2255/2162\nf 4965/5083/4881 2940/2255/2162 4961/5081/4879\nf 4965/5083/4881 4963/5084/4882 4964/5085/4883\nf 1262/5086/4884 4964/5085/4883 4963/5084/4882\nf 1258/5082/4880 4958/5078/4876 4963/5084/4882\nf 4968/5087/4885 4963/5084/4882 4958/5078/4876\nf 4968/5087/4885 4966/5088/4886 4967/5089/4887\nf 1260/5090/4888 4967/5089/4887 4966/5088/4886\nf 4972/5091/4889 4971/5092/4890 4967/5089/4887\nf 1262/5086/4884 4967/5089/4887 4971/5092/4890\nf 4970/5093/4891 4972/5091/4889 309/5094/4892\nf 4969/5095/4893 309/5094/4892 4972/5091/4889\nf 744/2257/2164 4964/5085/4883 2943/2258/2165\nf 4974/5096/4894 2943/2258/2165 4964/5085/4883\nf 4974/5096/4894 4971/5092/4890 4973/5097/4895\nf 1261/5098/4896 4973/5097/4895 4971/5092/4890\nf 2927/2236/2143 148/2237/2144 4977/5099/4897\nf 4973/5097/4895 4977/5099/4897 148/2237/2144\nf 4975/5100/4898 1264/5101/4899 4977/5099/4897\nf 4976/5102/4900 4977/5099/4897 1264/5101/4899\nf 4970/5093/4891 4980/5103/4901 1261/5098/4896\nf 4975/5100/4898 1261/5098/4896 4980/5103/4901\nf 4979/5104/4902 4980/5103/4901 1263/5105/4903\nf 4978/5106/4904 1263/5105/4903 4980/5103/4901\nf 4979/5104/4902 4983/5107/4905 1264/5101/4899\nf 4982/5108/4906 1264/5101/4899 4983/5107/4905\nf 4948/5066/4864 4983/5107/4905 313/5109/4907\nf 4981/5110/4908 313/5109/4907 4983/5107/4905\nf 4976/5102/4900 4984/5111/4909 740/2242/2149\nf 2930/2241/2148 740/2242/2149 4984/5111/4909\nf 4982/5108/4906 1254/5065/4863 4984/5111/4909\nf 4945/5061/4859 4984/5111/4909 1254/5065/4863\nf 4988/5112/4910 4987/5113/4911 4556/5114/4332\nf 323/4520/4334 4556/5114/4332 4987/5113/4911\nf 1267/5115/4912 4986/5116/4913 4985/5117/4914\nf 4988/5112/4910 4985/5117/4914 4986/5116/4913\nf 4991/5118/4915 4985/5117/4914 4565/5119/4346\nf 1159/5120/4347 4565/5119/4346 4985/5117/4914\nf 1265/5121/4916 4990/5122/4917 4989/5123/4918\nf 4991/5118/4915 4989/5123/4918 4990/5122/4917\nf 4994/5124/4919 4993/5125/4920 4990/5122/4917\nf 1267/5115/4912 4990/5122/4917 4993/5125/4920\nf 161/5126/2369 2950/2267/2174 4992/5127/4921\nf 4994/5124/4919 4992/5127/4921 2950/2267/2174\nf 4996/5128/4922 4995/5129/4923 4986/5116/4913\nf 1266/5130/4924 4986/5116/4913 4995/5129/4923\nf 746/2268/2175 2945/2261/2168 4993/5125/4920\nf 4996/5128/4922 4993/5125/4920 2945/2261/2168\nf 3084/2464/2368 5000/5131/4925 160/4309/4130\nf 4999/5132/4926 160/4309/4130 5000/5131/4925\nf 4997/5133/4927 1270/5134/4928 5000/5131/4925\nf 4998/5135/4929 5000/5131/4925 1270/5134/4928\nf 3081/2458/2362 5003/5136/4930 784/2463/2367\nf 4997/5133/4927 784/2463/2367 5003/5136/4930\nf 5001/5137/4931 1268/5138/4932 5003/5136/4930\nf 5002/5139/4933 5003/5136/4930 1268/5138/4932\nf 5006/5140/4934 5005/5141/4935 5002/5139/4933\nf 1270/5134/4928 5002/5139/4933 5005/5141/4935\nf 318/5142/4363 4575/5143/4365 5004/5144/4936\nf 5006/5140/4934 5004/5144/4936 4575/5143/4365\nf 5008/5145/4937 5007/5146/4938 4998/5135/4929\nf 1269/5147/4939 4998/5135/4929 5007/5146/4938\nf 1162/5148/4358 4572/5149/4360 5005/5141/4935\nf 5008/5145/4937 5005/5141/4935 4572/5149/4360\nf 5011/5150/4940 4989/5151/4918 4583/5152/4370\nf 316/5153/4371 4583/5152/4370 4989/5151/4918\nf 5011/5150/4940 5009/5154/4941 5010/5155/4942\nf 1272/5156/4943 5010/5155/4942 5009/5154/4941\nf 5014/5157/4944 5009/5154/4941 4591/5158/4381\nf 1166/5159/4382 4591/5158/4381 5009/5154/4941\nf 5014/5157/4944 5012/5160/4945 5013/5161/4946\nf 1271/5162/4947 5013/5161/4946 5012/5160/4945\nf 1272/5156/4943 5013/5161/4946 5016/5163/4948\nf 5017/5164/4949 5016/5163/4948 5013/5161/4946\nf 5017/5164/4949 5015/5165/4950 3091/2473/2376\nf 172/2671/2533 3091/2473/2376 5015/5165/4950\nf 1265/5166/4916 5010/5155/4942 4992/5167/4921\nf 5018/5168/4951 4992/5167/4921 5010/5155/4942\nf 5018/5168/4951 5016/5163/4948 3087/2466/2370\nf 787/2472/2375 3087/2466/2370 5016/5163/4948\nf 3207/2670/2532 5021/5169/4952 171/5170/2361\nf 5001/5171/4931 171/5170/2361 5021/5169/4952\nf 5019/5172/4953 1274/5173/4954 5021/5169/4952\nf 5020/5174/4955 5021/5169/4952 1274/5173/4954\nf 3204/2664/2528 5024/5175/4956 816/2669/2531\nf 5019/5172/4953 816/2669/2531 5024/5175/4956\nf 5022/5176/4957 1273/5177/4958 5024/5175/4956\nf 5023/5178/4959 5024/5175/4956 1273/5177/4958\nf 5023/5178/4959 5027/5179/4960 1274/5173/4954\nf 5026/5180/4961 1274/5173/4954 5027/5179/4960\nf 5025/5181/4962 319/4590/4396 5027/5179/4960\nf 4599/5182/4397 5027/5179/4960 319/4590/4396\nf 5028/5183/4963 5004/5184/4936 5020/5174/4955\nf 1268/5185/4932 5020/5174/4955 5004/5184/4936\nf 5026/5180/4961 1168/5186/4391 5028/5183/4963\nf 4596/5187/4392 5028/5183/4963 1168/5186/4391\nf 5031/5188/4964 5012/5160/4945 4607/5189/4402\nf 317/5190/4403 4607/5189/4402 5012/5160/4945\nf 1276/5191/4965 5030/5192/4966 5029/5193/4967\nf 5031/5188/4964 5029/5193/4967 5030/5192/4966\nf 5034/5194/4968 5029/5193/4967 4615/5195/4413\nf 1172/5196/4414 4615/5195/4413 5029/5193/4967\nf 1275/5197/4969 5033/5198/4970 5032/5199/4971\nf 5034/5194/4968 5032/5199/4971 5033/5198/4970\nf 5037/5200/4972 5036/5201/4973 5033/5198/4970\nf 1276/5191/4965 5033/5198/4970 5036/5201/4973\nf 5037/5200/4972 5035/5202/4974 3213/2678/2540\nf 183/2839/2697 3213/2678/2540 5035/5202/4974\nf 1271/5162/4947 5030/5192/4966 5015/5165/4950\nf 5038/5203/4975 5015/5165/4950 5030/5192/4966\nf 5038/5203/4975 5036/5201/4973 3209/2672/2534\nf 818/2677/2539 3209/2672/2534 5036/5201/4973\nf 3329/2838/2696 5041/5204/4976 182/2663/2527\nf 5022/5176/4957 182/2663/2527 5041/5204/4976\nf 5039/5205/4977 1278/5206/4978 5041/5204/4976\nf 5040/5207/4979 5041/5204/4976 1278/5206/4978\nf 3326/2834/2692 5044/5208/4980 847/2837/2695\nf 5039/5205/4977 847/2837/2695 5044/5208/4980\nf 5042/5209/4981 1277/5210/4982 5044/5208/4980\nf 5043/5211/4983 5044/5208/4980 1277/5210/4982\nf 5043/5211/4983 5047/5212/4984 1278/5206/4978\nf 5046/5213/4985 1278/5206/4978 5047/5212/4984\nf 5047/5212/4984 5045/5214/4986 4623/4621/4427\nf 308/4623/4429 4623/4621/4427 5045/5214/4986\nf 5040/5207/4979 5048/5215/4987 1273/5177/4958\nf 5025/5181/4962 1273/5177/4958 5048/5215/4987\nf 5046/5213/4985 1174/4616/4422 5048/5215/4987\nf 4620/4618/4424 5048/5215/4987 1174/4616/4422\nf 5052/5216/4988 5051/5217/4989 4632/4628/4434\nf 314/4630/4436 4632/4628/4434 5051/5217/4989\nf 1281/5218/4990 5050/5219/4991 5049/5220/4992\nf 5052/5216/4988 5049/5220/4992 5050/5219/4991\nf 5055/5221/4993 5049/5220/4992 4641/4642/4448\nf 1179/4643/4449 4641/4642/4448 5049/5220/4992\nf 5055/5221/4993 5053/5222/4994 5054/5223/4995\nf 1279/5224/4996 5054/5223/4995 5053/5222/4994\nf 1281/5218/4990 5054/5223/4995 5057/5225/4997\nf 5058/5226/4998 5057/5225/4997 5054/5223/4995\nf 5058/5226/4998 5056/5227/4999 3579/3182/3032\nf 216/3343/3189 3579/3182/3032 5056/5227/4999\nf 5060/5228/5000 5059/5229/5001 5050/5219/4991\nf 1280/5230/5002 5050/5219/4991 5059/5229/5001\nf 5060/5228/5000 5057/5225/4997 3575/3176/3026\nf 911/3181/3031 3575/3176/3026 5057/5225/4997\nf 215/3169/3019 3695/3341/3187 5063/5231/5003\nf 5064/5232/5004 5063/5231/5003 3695/3341/3187\nf 5061/5233/5005 1284/5234/5006 5064/5232/5004\nf 5062/5235/5007 5064/5232/5004 1284/5234/5006\nf 3692/3337/3183 5067/5236/5008 940/3342/3188\nf 5061/5233/5005 940/3342/3188 5067/5236/5008\nf 5065/5237/5009 1282/5238/5010 5067/5236/5008\nf 5066/5239/5011 5067/5236/5008 1282/5238/5010\nf 5066/5239/5011 5070/5240/5012 1284/5234/5006\nf 5069/5241/5013 1284/5234/5006 5070/5240/5012\nf 5068/5242/5014 330/5243/4466 5070/5240/5012\nf 4651/5244/4467 5070/5240/5012 330/5243/4466\nf 5062/5235/5007 5072/5245/5015 1283/5246/5016\nf 5071/5247/5017 1283/5246/5016 5072/5245/5015\nf 5069/5241/5013 1182/5248/4461 5072/5245/5015\nf 4648/5249/4462 5072/5245/5015 1182/5248/4461\nf 321/4665/4471 4659/4666/4472 5053/5222/4994\nf 5075/5250/5018 5053/5222/4994 4659/4666/4472\nf 5074/5251/5019 5075/5250/5018 1286/5252/5020\nf 5073/5253/5021 1286/5252/5020 5075/5250/5018\nf 5073/5253/5021 1186/4677/4483 5078/5254/5022\nf 4667/4678/4484 5078/5254/5022 1186/4677/4483\nf 5077/5255/5023 5078/5254/5022 1285/5256/5024\nf 5076/5257/5025 1285/5256/5024 5078/5254/5022\nf 5077/5255/5023 5081/5258/5026 1286/5252/5020\nf 5080/5259/5027 1286/5252/5020 5081/5258/5026\nf 5079/5260/5028 227/3513/3355 5081/5258/5026\nf 3701/3349/3195 5081/5258/5026 227/3513/3355\nf 5056/5227/4999 1279/5224/4996 5082/5261/5029\nf 5074/5251/5019 5082/5261/5029 1279/5224/4996\nf 5080/5259/5027 942/3351/3197 5082/5261/5029\nf 3697/3345/3191 5082/5261/5029 942/3351/3197\nf 5065/5237/5009 226/3338/3184 5085/5262/5030\nf 3817/3509/3351 5085/5262/5030 226/3338/3184\nf 5084/5263/5031 5085/5262/5030 1288/5264/5032\nf 5083/5265/5033 1288/5264/5032 5085/5262/5030\nf 5083/5265/5033 971/3510/3352 5088/5266/5034\nf 3814/3505/3347 5088/5266/5034 971/3510/3352\nf 5087/5267/5035 5088/5266/5034 1287/5268/5036\nf 5086/5269/5037 1287/5268/5036 5088/5266/5034\nf 5090/5270/5038 1288/5264/5032 5091/5271/5039\nf 5087/5267/5035 5091/5271/5039 1288/5264/5032\nf 4675/5272/4497 5091/5271/5039 331/5273/4498\nf 5089/5274/5040 331/5273/4498 5091/5271/5039\nf 5084/5263/5031 5092/5275/5041 1282/5238/5010\nf 5068/5242/5014 1282/5238/5010 5092/5275/5041\nf 4672/5276/4492 5092/5275/5041 1188/5277/4493\nf 5090/5270/5038 1188/5277/4493 5092/5275/5041\nf 5076/5257/5025 322/4698/4504 5095/5278/5042\nf 4683/4699/4505 5095/5278/5042 322/4698/4504\nf 5094/5279/5043 5095/5278/5042 1290/5280/5044\nf 5093/5281/5045 1290/5280/5044 5095/5278/5042\nf 5093/5281/5045 1192/4709/4515 5098/5282/5046\nf 4691/4710/4516 5098/5282/5046 1192/4709/4515\nf 5098/5282/5046 5096/5283/5047 5097/5284/5048\nf 1289/5285/5049 5097/5284/5048 5096/5283/5047\nf 5100/5286/5050 1290/5280/5044 5101/5287/5051\nf 5097/5284/5048 5101/5287/5051 1290/5280/5044\nf 3823/3519/3361 5101/5287/5051 238/3679/3517\nf 5099/5288/5052 238/3679/3517 5101/5287/5051\nf 5079/5260/5028 1285/5256/5024 5102/5289/5053\nf 5094/5279/5043 5102/5289/5053 1285/5256/5024\nf 3819/3511/3353 5102/5289/5053 973/3517/3359\nf 5100/5286/5050 973/3517/3359 5102/5289/5053\nf 5086/5269/5037 237/3506/3348 5105/5290/5054\nf 3939/3677/3515 5105/5290/5054 237/3506/3348\nf 5104/5291/5055 5105/5290/5054 1292/5292/5056\nf 5103/5293/5057 1292/5292/5056 5105/5290/5054\nf 5103/5293/5057 1002/3678/3516 5108/5294/5058\nf 3936/3673/3511 5108/5294/5058 1002/3678/3516\nf 5108/5294/5058 5106/5295/5059 5107/5296/5060\nf 1291/5297/5061 5107/5296/5060 5106/5295/5059\nf 5110/5298/5062 1292/5292/5056 5111/5299/5063\nf 5107/5296/5060 5111/5299/5063 1292/5292/5056\nf 4699/5300/4529 5111/5299/5063 332/5301/4530\nf 5109/5302/5064 332/5301/4530 5111/5299/5063\nf 5089/5274/5040 1287/5268/5036 5112/5303/5065\nf 5104/5291/5055 5112/5303/5065 1287/5268/5036\nf 4696/5304/4524 5112/5303/5065 1194/5305/4525\nf 5110/5298/5062 1194/5305/4525 5112/5303/5065\nf 324/4729/4535 4707/4730/4536 5096/5283/5047\nf 5115/5306/5066 5096/5283/5047 4707/4730/4536\nf 5115/5306/5066 5113/5307/5067 5114/5308/5068\nf 1294/5309/5069 5114/5308/5068 5113/5307/5067\nf 1198/4740/4546 4715/4741/4547 5113/5307/5067\nf 5118/5310/5070 5113/5307/5067 4715/4741/4547\nf 5118/5310/5070 5116/5311/5071 5117/5312/5072\nf 1293/5313/5073 5117/5312/5072 5116/5311/5071\nf 1294/5309/5069 5117/5312/5072 5120/5314/5074\nf 5121/5315/5075 5120/5314/5074 5117/5312/5072\nf 5121/5315/5075 5119/5316/5076 3945/3686/3524\nf 249/3847/3681 3945/3686/3524 5119/5316/5076\nf 1289/5285/5049 5114/5308/5068 5099/5288/5052\nf 5122/5317/5077 5099/5288/5052 5114/5308/5068\nf 5122/5317/5077 5120/5314/5074 3941/3681/3519\nf 1004/3685/3523 3941/3681/3519 5120/5314/5074\nf 248/3674/3512 4061/3845/3679 5106/5295/5059\nf 5125/5318/5078 5106/5295/5059 4061/3845/3679\nf 5125/5318/5078 5123/5319/5079 5124/5320/5080\nf 1296/5321/5081 5124/5320/5080 5123/5319/5079\nf 1033/3846/3680 4058/3842/3676 5123/5319/5079\nf 5128/5322/5082 5123/5319/5079 4058/3842/3676\nf 5128/5322/5082 5126/5323/5083 5127/5324/5084\nf 1295/5325/5085 5127/5324/5084 5126/5323/5083\nf 1296/5321/5081 5127/5324/5084 5130/5326/5086\nf 5131/5327/5087 5130/5326/5086 5127/5324/5084\nf 5131/5327/5087 5129/5328/5088 4723/5329/4561\nf 333/5330/4563 4723/5329/4561 5129/5328/5088\nf 5109/5302/5064 1291/5297/5061 5132/5331/5089\nf 5124/5320/5080 5132/5331/5089 1291/5297/5061\nf 5132/5331/5089 5130/5326/5086 4720/5332/4556\nf 1200/5333/4558 4720/5332/4556 5130/5326/5086\nf 325/4761/4567 4731/4762/4568 5116/5311/5071\nf 5135/5334/5090 5116/5311/5071 4731/4762/4568\nf 5135/5334/5090 5133/5335/5091 5134/5336/5092\nf 1298/5337/5093 5134/5336/5092 5133/5335/5091\nf 1204/4772/4578 4739/4773/4579 5133/5335/5091\nf 5138/5338/5094 5133/5335/5091 4739/4773/4579\nf 5138/5338/5094 5136/5339/5095 5137/5340/5096\nf 1297/5341/5097 5137/5340/5096 5136/5339/5095\nf 1298/5337/5093 5137/5340/5096 5140/5342/5098\nf 5141/5343/5099 5140/5342/5098 5137/5340/5096\nf 5141/5343/5099 5139/5344/5100 4067/3854/3688\nf 260/4015/3845 4067/3854/3688 5139/5344/5100\nf 1293/5313/5073 5134/5336/5092 5119/5316/5076\nf 5142/5345/5101 5119/5316/5076 5134/5336/5092\nf 5142/5345/5101 5140/5342/5098 4063/3848/3682\nf 1035/3853/3687 4063/3848/3682 5140/5342/5098\nf 259/3843/3677 4183/4013/3843 5126/5323/5083\nf 5145/5346/5102 5126/5323/5083 4183/4013/3843\nf 5145/5346/5102 5143/5347/5103 5144/5348/5104\nf 1300/5349/5105 5144/5348/5104 5143/5347/5103\nf 1064/4014/3844 4180/4010/3840 5143/5347/5103\nf 5148/5350/5106 5143/5347/5103 4180/4010/3840\nf 5148/5350/5106 5146/5351/5107 5147/5352/5108\nf 1299/5353/5109 5147/5352/5108 5146/5351/5107\nf 1300/5349/5105 5147/5352/5108 5150/5354/5110\nf 5151/5355/5111 5150/5354/5110 5147/5352/5108\nf 5151/5355/5111 5149/5356/5112 4747/5357/4593\nf 334/5358/4595 4747/5357/4593 5149/5356/5112\nf 1295/5325/5085 5144/5348/5104 5129/5328/5088\nf 5152/5359/5113 5129/5328/5088 5144/5348/5104\nf 5152/5359/5113 5150/5354/5110 4744/5360/4588\nf 1206/5361/4590 4744/5360/4588 5150/5354/5110\nf 326/4793/4599 4755/4794/4600 5136/5339/5095\nf 5155/5362/5114 5136/5339/5095 4755/4794/4600\nf 5154/5363/5115 5155/5362/5114 1302/5364/5116\nf 5153/5365/5117 1302/5364/5116 5155/5362/5114\nf 5153/5365/5117 1210/4805/4611 5158/5366/5118\nf 4763/4806/4612 5158/5366/5118 1210/4805/4611\nf 5157/5367/5119 5158/5366/5118 1301/5368/5120\nf 5156/5369/5121 1301/5368/5120 5158/5366/5118\nf 5160/5370/5122 1302/5364/5116 5161/5371/5123\nf 5157/5367/5119 5161/5371/5123 1302/5364/5116\nf 4189/4023/3853 5161/5371/5123 271/4183/4009\nf 5159/5372/5124 271/4183/4009 5161/5371/5123\nf 5139/5344/5100 1297/5341/5097 5162/5373/5125\nf 5154/5363/5115 5162/5373/5125 1297/5341/5097\nf 4185/4017/3847 5162/5373/5125 1066/4021/3851\nf 5160/5370/5122 1066/4021/3851 5162/5373/5125\nf 270/4011/3841 4305/4181/4007 5146/5351/5107\nf 5165/5374/5126 5146/5351/5107 4305/4181/4007\nf 5165/5374/5126 5163/5375/5127 5164/5376/5128\nf 1304/5377/5129 5164/5376/5128 5163/5375/5127\nf 1095/4182/4008 4302/4177/4003 5163/5375/5127\nf 5168/5378/5130 5163/5375/5127 4302/4177/4003\nf 5168/5378/5130 5166/5379/5131 5167/5380/5132\nf 1303/5381/5133 5167/5380/5132 5166/5379/5131\nf 5170/5382/5134 1304/5377/5129 5171/5383/5135\nf 5167/5380/5132 5171/5383/5135 1304/5377/5129\nf 4771/5384/4625 5171/5383/5135 329/5385/4626\nf 5169/5386/5136 329/5385/4626 5171/5383/5135\nf 5149/5356/5112 1299/5353/5109 5172/5387/5137\nf 5164/5376/5128 5172/5387/5137 1299/5353/5109\nf 4768/5388/4620 5172/5387/5137 1212/5389/4621\nf 5170/5382/5134 1212/5389/4621 5172/5387/5137\nf 5156/5369/5121 327/4826/4632 5175/5390/5138\nf 4779/4827/4633 5175/5390/5138 327/4826/4632\nf 5174/5391/5139 5175/5390/5138 1305/5392/5140\nf 5173/5393/5141 1305/5392/5140 5175/5390/5138\nf 1215/4835/4641 4785/4836/4642 5173/5393/5141\nf 5177/5394/5142 5173/5393/5141 4785/4836/4642\nf 5177/5394/5142 4987/5113/4911 5176/5395/5143\nf 1266/5130/4924 5176/5395/5143 4987/5113/4911\nf 1305/5392/5140 5176/5395/5143 5178/5396/5144\nf 5179/5397/5145 5178/5396/5144 5176/5395/5143\nf 5179/5397/5145 4995/5129/4923 4311/4190/4016\nf 150/2262/2169 4311/4190/4016 4995/5129/4923\nf 5159/5372/5124 1301/5368/5120 5180/5398/5146\nf 5174/5391/5139 5180/5398/5146 1301/5368/5120\nf 4307/4185/4011 5180/5398/5146 1097/4189/4015\nf 5178/5396/5144 1097/4189/4015 5180/5398/5146\nf 281/4178/4004 4407/4311/4132 5166/5379/5131\nf 5183/5399/5147 5166/5379/5131 4407/4311/4132\nf 5183/5399/5147 5181/5400/5148 5182/5401/5149\nf 1306/5402/5150 5182/5401/5149 5181/5400/5148\nf 1116/4312/4133 4404/4308/4129 5181/5400/5148\nf 5185/5403/5151 5181/5400/5148 4404/4308/4129\nf 5185/5403/5151 4999/5132/4926 5184/5404/5152\nf 1269/5147/4939 5184/5404/5152 4999/5132/4926\nf 5186/5405/5153 1306/5402/5150 5187/5406/5154\nf 5184/5404/5152 5187/5406/5154 1306/5402/5150\nf 4793/5407/4654 5187/5406/5154 328/5408/4655\nf 5007/5146/4938 328/5408/4655 5187/5406/5154\nf 5169/5386/5136 1303/5381/5133 5188/5409/5155\nf 5182/5401/5149 5188/5409/5155 1303/5381/5133\nf 4790/5410/4649 5188/5409/5155 1217/5411/4650\nf 5186/5405/5153 1217/5411/4650 5188/5409/5155\nf 5191/5412/5156 5032/5199/4971 4799/5413/4658\nf 305/5414/4659 4799/5413/4658 5032/5199/4971\nf 5190/5415/5157 5191/5412/5156 1308/5416/5158\nf 5189/5417/5159 1308/5416/5158 5191/5412/5156\nf 1220/5418/4668 4807/5419/4669 5189/5417/5159\nf 5194/5420/5160 5189/5417/5159 4807/5419/4669\nf 5194/5420/5160 5192/5421/5161 5193/5422/5162\nf 1307/5423/5163 5193/5422/5162 5192/5421/5161\nf 1308/5416/5158 5193/5422/5162 5196/5424/5164\nf 5197/5425/5165 5196/5424/5164 5193/5422/5162\nf 282/5426/4171 4413/4319/4140 5195/5427/5166\nf 5197/5425/5165 5195/5427/5166 4413/4319/4140\nf 5198/5428/5167 5035/5202/4974 5190/5415/5157\nf 1275/5197/4969 5190/5415/5157 5035/5202/4974\nf 4409/4313/4134 5198/5428/5167 1118/4318/4139\nf 5196/5424/5164 1118/4318/4139 5198/5428/5167\nf 205/3175/3025 4433/4346/4167 5059/5229/5001\nf 5201/5429/5168 5059/5229/5001 4433/4346/4167\nf 5201/5429/5168 5199/5430/5169 5200/5431/5170\nf 1310/5432/5171 5200/5431/5170 5199/5430/5169\nf 1123/4347/4168 4430/4343/4164 5199/5430/5169\nf 5204/5433/5172 5199/5430/5169 4430/4343/4164\nf 5204/5433/5172 5202/5434/5173 5203/5435/5174\nf 1309/5436/5175 5203/5435/5174 5202/5434/5173\nf 1310/5432/5171 5203/5435/5174 5206/5437/5176\nf 5207/5438/5177 5206/5437/5176 5203/5435/5174\nf 5207/5438/5177 5205/5439/5178 4815/5440/4683\nf 302/5441/4685 4815/5440/4683 5205/5439/5178\nf 1280/5230/5002 5200/5431/5170 5051/5217/4989\nf 5208/5442/5179 5051/5217/4989 5200/5431/5170\nf 5208/5442/5179 5206/5437/5176 4812/5443/4678\nf 1222/5444/4680 4812/5443/4678 5206/5437/5176\nf 284/5445/4165 4459/4389/4203 5202/5446/5173\nf 5211/5447/5180 5202/5446/5173 4459/4389/4203\nf 5209/5448/5181 1312/5449/5182 5211/5447/5180\nf 5210/5450/5183 5211/5447/5180 1312/5449/5182\nf 1130/4390/4204 4456/4384/4200 5209/5448/5181\nf 5214/5451/5184 5209/5448/5181 4456/4384/4200\nf 5214/5451/5184 5212/5452/5185 5213/5453/5186\nf 1311/5454/5187 5213/5453/5186 5212/5452/5185\nf 5213/5453/5186 5217/5455/5188 1312/5449/5182\nf 5216/5456/5189 1312/5449/5182 5217/5455/5188\nf 5215/5457/5190 315/4899/4700 5217/5455/5188\nf 4827/5458/4701 5217/5455/5188 315/4899/4700\nf 1309/5459/5175 5210/5450/5183 5205/5460/5178\nf 5218/5461/5191 5205/5460/5178 5210/5450/5183\nf 5216/5456/5189 1225/5462/4695 5218/5461/5191\nf 4824/5463/4696 5218/5461/5191 1225/5462/4695\nf 5221/5464/5192 5192/5465/5161 4835/5466/4706\nf 306/5467/4707 4835/5466/4706 5192/5465/5161\nf 1314/5468/5193 5220/5469/5194 5219/5470/5195\nf 5221/5464/5192 5219/5470/5195 5220/5469/5194\nf 5224/5471/5196 5219/5470/5195 4843/5472/4717\nf 1229/5473/4718 4843/5472/4717 5219/5470/5195\nf 5224/5471/5196 5222/5474/5197 5223/5475/5198\nf 1313/5476/5199 5223/5475/5198 5222/5474/5197\nf 5227/5477/5200 5226/5478/5201 5223/5475/5198\nf 1314/5468/5193 5223/5475/5198 5226/5478/5201\nf 285/4391/4205 4439/4356/4176 5225/5479/5202\nf 5227/5477/5200 5225/5479/5202 4439/4356/4176\nf 5228/5480/5203 5195/5481/5166 5220/5469/5194\nf 1307/5482/5163 5220/5469/5194 5195/5481/5166\nf 1125/4357/4177 4435/4350/4170 5226/5478/5201\nf 5228/5480/5203 5226/5478/5201 4435/4350/4170\nf 5222/5474/5197 307/4924/4722 5231/5483/5204\nf 4847/4925/4723 5231/5483/5204 307/4924/4722\nf 5230/5484/5205 5231/5483/5204 1316/5485/5206\nf 5229/5486/5207 1316/5485/5206 5231/5483/5204\nf 5229/5486/5207 1232/4936/4734 5234/5487/5208\nf 4855/4937/4735 5234/5487/5208 1232/4936/4734\nf 5232/5488/5209 1315/5489/5210 5234/5487/5208\nf 5233/5490/5211 5234/5487/5208 1315/5489/5210\nf 1316/5485/5206 5233/5490/5211 5236/5491/5212\nf 5237/5492/5213 5236/5491/5212 5233/5490/5211\nf 5237/5492/5213 5235/5493/5214 4465/4398/4212\nf 288/5494/5215 4465/4398/4212 5235/5493/5214\nf 1313/5476/5199 5230/5484/5205 5225/5479/5202\nf 5238/5495/5216 5225/5479/5202 5230/5484/5205\nf 5238/5495/5216 5236/5491/5212 4461/4392/4206\nf 1132/4397/4211 4461/4392/4206 5236/5491/5212\nf 4859/4940/4738 5241/5496/5217 301/4941/4739\nf 5232/5488/5209 301/4941/4739 5241/5496/5217\nf 5239/5497/5218 1318/5498/5219 5241/5496/5217\nf 5240/5499/5220 5241/5496/5217 1318/5498/5219\nf 4867/4951/4749 5244/5500/5221 1235/4952/4750\nf 5239/5497/5218 1235/4952/4750 5244/5500/5221\nf 5242/5501/5222 1317/5502/5223 5244/5500/5221\nf 5243/5503/5224 5244/5500/5221 1317/5502/5223\nf 5243/5503/5224 5247/5504/5225 1318/5498/5219\nf 5246/5505/5226 1318/5498/5219 5247/5504/5225\nf 289/4406/4220 4469/4407/4221 5245/5506/5227\nf 5247/5504/5225 5245/5506/5227 4469/4407/4221\nf 5240/5499/5220 5248/5507/5228 1315/5489/5210\nf 5235/5493/5214 1315/5489/5210 5248/5507/5228\nf 5246/5505/5226 1133/4402/4216 5248/5507/5228\nf 4466/4400/4214 5248/5507/5228 1133/4402/4216\nf 5242/5501/5222 299/4957/4755 5251/5508/5229\nf 4871/4958/4756 5251/5508/5229 299/4957/4755\nf 5251/5508/5229 5249/5509/5230 5250/5510/5231\nf 1320/5511/5232 5250/5510/5231 5249/5509/5230\nf 1238/4967/4765 4879/4968/4766 5249/5509/5230\nf 5254/5512/5233 5249/5509/5230 4879/4968/4766\nf 5254/5512/5233 5252/5513/5234 5253/5514/5235\nf 1319/5515/5236 5253/5514/5235 5252/5513/5234\nf 1320/5511/5232 5253/5514/5235 5256/5516/5237\nf 5257/5517/5238 5256/5516/5237 5253/5514/5235\nf 5257/5517/5238 5255/5518/5239 4481/4421/4235\nf 290/4422/4236 4481/4421/4235 5255/5518/5239\nf 5245/5506/5227 1317/5502/5223 5258/5519/5240\nf 5250/5510/5231 5258/5519/5240 1317/5502/5223\nf 5258/5519/5240 5256/5516/5237 4478/4416/4230\nf 1136/4417/4231 4478/4416/4230 5256/5516/5237\nf 287/4383/4199 4499/4444/4258 5212/5452/5185\nf 5261/5520/5241 5212/5452/5185 4499/4444/4258\nf 5261/5520/5241 5259/5521/5242 5260/5522/5243\nf 1322/5523/5244 5260/5522/5243 5259/5521/5242\nf 1141/4445/4259 4496/4441/4255 5259/5521/5242\nf 5264/5524/5245 5259/5521/5242 4496/4441/4255\nf 5264/5524/5245 5262/5525/5246 5263/5526/5247\nf 1321/5527/5248 5263/5526/5247 5262/5525/5246\nf 1322/5523/5244 5263/5526/5247 5266/5528/5249\nf 5267/5529/5250 5266/5528/5249 5263/5526/5247\nf 4887/4982/4780 5267/5529/5250 303/4983/4781\nf 5265/5530/5251 303/4983/4781 5267/5529/5250\nf 1311/5454/5187 5260/5522/5243 5215/5457/5190\nf 5268/5531/5252 5215/5457/5190 5260/5522/5243\nf 4884/4977/4775 5268/5531/5252 1240/4978/4776\nf 5266/5528/5249 1240/4978/4776 5268/5531/5252\nf 300/4988/4786 4895/4989/4787 5252/5513/5234\nf 5271/5532/5253 5252/5513/5234 4895/4989/4787\nf 1324/5533/5254 5270/5534/5255 5269/5535/5256\nf 5271/5532/5253 5269/5535/5256 5270/5534/5255\nf 4903/5000/4798 5274/5536/5257 1244/5001/4799\nf 5269/5535/5256 1244/5001/4799 5274/5536/5257\nf 5272/5537/5258 1323/5538/5259 5274/5536/5257\nf 5273/5539/5260 5274/5536/5257 1323/5538/5259\nf 1324/5533/5254 5273/5539/5260 5276/5540/5261\nf 5277/5541/5262 5276/5540/5261 5273/5539/5260\nf 5277/5541/5262 5275/5542/5263 4491/4433/4247\nf 292/5543/5264 4491/4433/4247 5275/5542/5263\nf 1319/5515/5236 5270/5534/5255 5255/5518/5239\nf 5278/5544/5265 5255/5518/5239 5270/5534/5255\nf 5278/5544/5265 5276/5540/5261 4487/4427/4241\nf 1139/4432/4246 4487/4427/4241 5276/5540/5261\nf 4495/4440/4254 5281/5545/5266 291/4442/4256\nf 5262/5525/5246 291/4442/4256 5281/5545/5266\nf 1325/5546/5267 5280/5547/5268 5279/5548/5269\nf 5281/5545/5266 5279/5548/5269 5280/5547/5268\nf 1140/4437/4251 4492/4435/4249 5279/5548/5269\nf 5283/5549/5270 5279/5548/5269 4492/4435/4249\nf 5283/5549/5270 5275/5542/5263 5282/5550/5271\nf 1323/5538/5259 5282/5550/5271 5275/5542/5263\nf 1325/5546/5267 5282/5550/5271 5284/5551/5272\nf 5285/5552/5273 5284/5551/5272 5282/5550/5271\nf 5285/5552/5273 5272/5537/5258 4911/5015/4813\nf 304/5016/4814 4911/5015/4813 5272/5537/5258\nf 5286/5553/5274 5265/5530/5251 5280/5547/5268\nf 1321/5527/5248 5280/5547/5268 5265/5530/5251\nf 4908/5010/4808 5286/5553/5274 1246/5011/4809\nf 5284/5551/5272 1246/5011/4809 5286/5553/5274\nf 320/5554/4816 4917/5555/4817 5071/5247/5017\nf 5289/5556/5275 5071/5247/5017 4917/5555/4817\nf 5288/5557/5276 5289/5556/5275 1327/5558/5277\nf 5287/5559/5278 1327/5558/5277 5289/5556/5275\nf 5287/5559/5278 1249/5560/4828 5292/5561/5279\nf 4925/5562/4829 5292/5561/5279 1249/5560/4828\nf 5291/5563/5280 5292/5561/5279 1326/5564/5281\nf 5290/5565/5282 1326/5564/5281 5292/5561/5279\nf 5294/5566/5283 1327/5558/5277 5295/5567/5284\nf 5291/5563/5280 5295/5567/5284 1327/5558/5277\nf 4505/4453/4267 5295/5567/5284 295/4481/4295\nf 5293/5568/5285 295/4481/4295 5295/5567/5284\nf 5288/5557/5276 5296/5569/5286 1283/5246/5016\nf 5063/5231/5003 1283/5246/5016 5296/5569/5286\nf 4501/4446/4260 5296/5569/5286 1143/4451/4265\nf 5294/5566/5283 1143/4451/4265 5296/5569/5286\nf 193/2833/2691 4525/4480/4294 5042/5209/4981\nf 5299/5570/5287 5042/5209/4981 4525/4480/4294\nf 5299/5570/5287 5297/5571/5288 5298/5572/5289\nf 1329/5573/5290 5298/5572/5289 5297/5571/5288\nf 5297/5571/5288 1148/4479/4293 5302/5574/5291\nf 4522/4475/4289 5302/5574/5291 1148/4479/4293\nf 5302/5574/5291 5300/5575/5292 5301/5576/5293\nf 1328/5577/5294 5301/5576/5293 5300/5575/5292\nf 1329/5573/5290 5301/5576/5293 5304/5578/5295\nf 5305/5579/5296 5304/5578/5295 5301/5576/5293\nf 5305/5579/5296 5303/5580/5297 4933/5044/4842\nf 310/5046/4844 4933/5044/4842 5303/5580/5297\nf 1277/5210/4982 5298/5572/5289 5045/5214/4986\nf 5306/5581/5298 5045/5214/4986 5298/5572/5289\nf 5306/5581/5298 5304/5578/5295 4930/5039/4837\nf 1251/5041/4839 4930/5039/4837 5304/5578/5295\nf 5290/5565/5282 311/5582/4849 5309/5583/5299\nf 4941/5584/4850 5309/5583/5299 311/5582/4849\nf 5308/5585/5300 5309/5583/5299 1331/5586/5301\nf 5307/5587/5302 1331/5586/5301 5309/5583/5299\nf 5307/5587/5302 1255/5588/4861 5312/5589/5303\nf 4949/5590/4862 5312/5589/5303 1255/5588/4861\nf 5311/5591/5304 5312/5589/5303 1330/5592/5305\nf 5310/5593/5306 1330/5592/5305 5312/5589/5303\nf 5314/5594/5307 1331/5586/5301 5315/5595/5308\nf 5311/5591/5304 5315/5595/5308 1331/5586/5301\nf 4531/4488/4302 5315/5595/5308 298/5596/5309\nf 5313/5597/5310 298/5596/5309 5315/5595/5308\nf 5293/5568/5285 1326/5564/5281 5316/5598/5311\nf 5308/5585/5300 5316/5598/5311 1326/5564/5281\nf 4527/4483/4297 5316/5598/5311 1150/4487/4301\nf 5314/5594/5307 1150/4487/4301 5316/5598/5311\nf 5300/5575/5292 293/4476/4290 5319/5599/5312\nf 4551/4515/4329 5319/5599/5312 293/4476/4290\nf 5318/5600/5313 5319/5599/5312 1333/5601/5314\nf 5317/5602/5315 1333/5601/5314 5319/5599/5312\nf 5317/5602/5315 1155/4516/4330 5322/5603/5316\nf 4548/4511/4325 5322/5603/5316 1155/4516/4330\nf 5322/5603/5316 5320/5604/5317 5321/5605/5318\nf 1332/5606/5319 5321/5605/5318 5320/5604/5317\nf 1333/5601/5314 5321/5605/5318 5324/5607/5320\nf 5325/5608/5321 5324/5607/5320 5321/5605/5318\nf 5325/5608/5321 5323/5609/5322 4957/5077/4875\nf 312/5079/4877 4957/5077/4875 5323/5609/5322\nf 1328/5577/5294 5318/5600/5313 5303/5580/5297\nf 5326/5610/5323 5303/5580/5297 5318/5600/5313\nf 5326/5610/5323 5324/5607/5320 4954/5072/4870\nf 1257/5074/4872 4954/5072/4870 5324/5607/5320\nf 296/4512/4326 4547/4513/4327 5320/5604/5317\nf 5329/5611/5324 5320/5604/5317 4547/4513/4327\nf 5329/5611/5324 5327/5612/5325 5328/5613/5326\nf 1335/5614/5327 5328/5613/5326 5327/5612/5325\nf 1154/4507/4321 4544/4508/4322 5327/5612/5325\nf 5332/5615/5328 5327/5612/5325 4544/4508/4322\nf 5332/5615/5328 5330/5616/5329 5331/5617/5330\nf 1334/5618/5331 5331/5617/5330 5330/5616/5329\nf 5335/5619/5332 5334/5620/5333 5331/5617/5330\nf 1335/5614/5327 5331/5617/5330 5334/5620/5333\nf 5333/5621/5334 309/5094/4892 5335/5619/5332\nf 4969/5095/4893 5335/5619/5332 309/5094/4892\nf 1332/5606/5319 5328/5613/5326 5323/5609/5322\nf 5336/5622/5335 5323/5609/5322 5328/5613/5326\nf 5336/5622/5335 5334/5620/5333 4966/5088/4886\nf 1260/5090/4888 4966/5088/4886 5334/5620/5333\nf 4535/4495/4309 5339/5623/5336 297/4497/4311\nf 5330/5616/5329 297/4497/4311 5339/5623/5336\nf 5337/5624/5337 1336/5625/5338 5339/5623/5336\nf 5338/5626/5339 5339/5623/5336 1336/5625/5338\nf 4532/4490/4304 5341/5627/5340 1151/4492/4306\nf 5337/5624/5337 1151/4492/4306 5341/5627/5340\nf 5313/5597/5310 1330/5592/5305 5341/5627/5340\nf 5340/5628/5341 5341/5627/5340 1330/5592/5305\nf 5340/5628/5341 5343/5629/5342 1336/5625/5338\nf 5342/5630/5343 1336/5625/5338 5343/5629/5342\nf 5310/5593/5306 313/5631/4907 5343/5629/5342\nf 4981/5632/4908 5343/5629/5342 313/5631/4907\nf 5338/5626/5339 5344/5633/5344 1334/5618/5331\nf 5333/5621/5334 1334/5618/5331 5344/5633/5344\nf 5342/5630/5343 1263/5634/4903 5344/5633/5344\nf 4978/5635/4904 5344/5633/5344 1263/5634/4903\nf 1338/7/7 1341/1/1 335/10/10\nf 1337/3/3 335/10/10 1341/1/1\nf 1339/6/6 338/21/21 1341/1/1\nf 1340/2/2 1341/1/1 338/21/21\nf 1343/13/13 1345/8/8 2/26/26\nf 1342/9/9 2/26/26 1345/8/8\nf 1344/12/12 339/5/5 1345/8/8\nf 1338/7/7 1345/8/8 339/5/5\nf 1346/18/18 1349/14/14 336/11/11\nf 1344/12/12 336/11/11 1349/14/14\nf 1347/17/17 337/22/22 1349/14/14\nf 1348/15/15 1349/14/14 337/22/22\nf 1348/15/15 1352/19/19 339/5/5\nf 1339/6/6 339/5/5 1352/19/19\nf 1350/23/23 12/4530/204 1352/19/19\nf 1351/20/20 1352/19/19 12/4530/204\nf 1354/29/29 1356/24/24 340/32/32\nf 1353/25/25 340/32/32 1356/24/24\nf 1355/28/28 336/11/11 1356/24/24\nf 1343/13/13 1356/24/24 336/11/11\nf 1358/35/35 1360/30/30 3/46/46\nf 1357/31/31 3/46/46 1360/30/30\nf 1359/34/34 343/27/27 1360/30/30\nf 1354/29/29 1360/30/30 343/27/27\nf 1361/40/40 1364/36/36 341/33/33\nf 1359/34/34 341/33/33 1364/36/36\nf 1362/39/39 342/42/42 1364/36/36\nf 1363/37/37 1364/36/36 342/42/42\nf 1363/37/37 1366/41/41 343/27/27\nf 1355/28/28 343/27/27 1366/41/41\nf 1365/43/43 13/16/16 1366/41/41\nf 1346/18/18 1366/41/41 13/16/16\nf 1368/49/49 1370/44/44 344/52/52\nf 1367/45/45 344/52/52 1370/44/44\nf 1369/48/48 341/33/33 1370/44/44\nf 1358/35/35 1370/44/44 341/33/33\nf 1372/55/55 1374/50/50 4/66/66\nf 1371/51/51 4/66/66 1374/50/50\nf 1373/54/54 347/47/47 1374/50/50\nf 1368/49/49 1374/50/50 347/47/47\nf 1375/60/60 1378/56/56 345/53/53\nf 1373/54/54 345/53/53 1378/56/56\nf 1376/59/59 346/62/62 1378/56/56\nf 1377/57/57 1378/56/56 346/62/62\nf 1377/57/57 1380/61/61 347/47/47\nf 1369/48/48 347/47/47 1380/61/61\nf 1379/63/63 14/38/38 1380/61/61\nf 1361/40/40 1380/61/61 14/38/38\nf 1384/64/64 1381/65/65 1382/69/69\nf 348/70/70 1382/69/69 1381/65/65\nf 1383/68/68 345/53/53 1384/64/64\nf 1372/55/55 1384/64/64 345/53/53\nf 1388/71/71 1385/72/72 1386/75/75\nf 5/84/84 1386/75/75 1385/72/72\nf 351/67/67 1382/69/69 1387/73/73\nf 1388/71/71 1387/73/73 1382/69/69\nf 1392/76/76 1387/73/73 1389/80/80\nf 349/74/74 1389/80/80 1387/73/73\nf 1390/79/79 350/82/82 1392/76/76\nf 1391/77/77 1392/76/76 350/82/82\nf 1391/77/77 1394/81/81 351/67/67\nf 1383/68/68 351/67/67 1394/81/81\nf 1393/83/83 15/58/58 1394/81/81\nf 1375/60/60 1394/81/81 15/58/58\nf 1398/85/85 1395/86/86 1396/89/89\nf 352/90/90 1396/89/89 1395/86/86\nf 349/74/74 1386/75/75 1397/87/87\nf 1398/85/85 1397/87/87 1386/75/75\nf 1402/91/91 1399/92/92 1400/95/95\nf 6/1988/104 1400/95/95 1399/92/92\nf 355/88/88 1396/89/89 1401/93/93\nf 1402/91/91 1401/93/93 1396/89/89\nf 1406/97/97 1401/93/93 1403/100/100\nf 353/94/94 1403/100/100 1401/93/93\nf 354/103/103 1405/96/96 1404/98/98\nf 1406/97/97 1404/98/98 1405/96/96\nf 1408/101/101 1397/87/87 1405/96/96\nf 355/88/88 1405/96/96 1397/87/87\nf 16/78/78 1389/80/80 1407/102/102\nf 1408/101/101 1407/102/102 1389/80/80\nf 1412/106/105 1409/107/106 1410/110/109\nf 356/113/112 1410/110/109 1409/107/106\nf 353/123/94 1400/104/95 1411/108/107\nf 1412/106/105 1411/108/107 1400/104/95\nf 1414/116/115 1416/111/110 7/127/124\nf 1413/112/111 7/127/124 1416/111/110\nf 1415/115/114 359/109/108 1416/111/110\nf 1410/110/109 1416/111/110 359/109/108\nf 1417/121/120 1420/117/116 357/114/113\nf 1415/115/114 357/114/113 1420/117/116\nf 1418/120/119 358/126/123 1420/117/116\nf 1419/118/117 1420/117/116 358/126/123\nf 1422/124/121 1411/108/107 1419/118/117\nf 359/109/108 1419/118/117 1411/108/107\nf 17/5636/99 1403/122/100 1421/125/122\nf 1422/124/121 1421/125/122 1403/122/100\nf 1426/128/125 1423/129/126 1424/132/129\nf 360/135/132 1424/132/129 1423/129/126\nf 357/114/113 1414/116/115 1425/130/127\nf 1426/128/125 1425/130/127 1414/116/115\nf 1428/138/135 1430/133/130 8/147/144\nf 1427/134/131 8/147/144 1430/133/130\nf 1429/137/134 363/131/128 1430/133/130\nf 1424/132/129 1430/133/130 363/131/128\nf 1431/143/140 1434/139/136 361/136/133\nf 1429/137/134 361/136/133 1434/139/136\nf 1432/142/139 362/146/143 1434/139/136\nf 1433/140/137 1434/139/136 362/146/143\nf 1436/144/141 1425/130/127 1433/140/137\nf 363/131/128 1433/140/137 1425/130/127\nf 18/119/118 1417/121/120 1435/145/142\nf 1436/144/141 1435/145/142 1417/121/120\nf 1440/148/145 1437/149/146 1438/152/149\nf 364/155/152 1438/152/149 1437/149/146\nf 361/136/133 1428/138/135 1439/150/147\nf 1440/148/145 1439/150/147 1428/138/135\nf 1442/158/155 1444/153/150 9/167/164\nf 1441/154/151 9/167/164 1444/153/150\nf 1443/157/154 367/151/148 1444/153/150\nf 1438/152/149 1444/153/150 367/151/148\nf 1445/163/160 1448/159/156 365/156/153\nf 1443/157/154 365/156/153 1448/159/156\nf 1446/162/159 366/166/163 1448/159/156\nf 1447/160/157 1448/159/156 366/166/163\nf 1450/164/161 1439/150/147 1447/160/157\nf 367/151/148 1447/160/157 1439/150/147\nf 19/141/138 1431/143/140 1449/165/162\nf 1450/164/161 1449/165/162 1431/143/140\nf 1454/168/165 1451/169/166 1452/172/169\nf 368/175/172 1452/172/169 1451/169/166\nf 365/156/153 1442/158/155 1453/170/167\nf 1454/168/165 1453/170/167 1442/158/155\nf 1456/178/175 1458/173/170 10/187/184\nf 1455/174/171 10/187/184 1458/173/170\nf 1457/177/174 371/171/168 1458/173/170\nf 1452/172/169 1458/173/170 371/171/168\nf 1459/183/180 1462/179/176 369/176/173\nf 1457/177/174 369/176/173 1462/179/176\nf 1460/182/179 370/186/183 1462/179/176\nf 1461/180/177 1462/179/176 370/186/183\nf 1464/184/181 1453/170/167 1461/180/177\nf 371/171/168 1461/180/177 1453/170/167\nf 20/161/158 1445/163/160 1463/185/182\nf 1464/184/181 1463/185/182 1445/163/160\nf 1468/188/185 1465/189/186 1466/192/189\nf 372/195/192 1466/192/189 1465/189/186\nf 369/176/173 1456/178/175 1467/190/187\nf 1468/188/185 1467/190/187 1456/178/175\nf 1470/198/195 1472/193/190 11/2053/1967\nf 1469/194/191 11/2053/1967 1472/193/190\nf 1471/197/194 375/191/188 1472/193/190\nf 1466/192/189 1472/193/190 375/191/188\nf 1473/203/200 1476/199/196 373/196/193\nf 1471/197/194 373/196/193 1476/199/196\nf 1474/202/199 374/206/203 1476/199/196\nf 1475/200/197 1476/199/196 374/206/203\nf 1478/204/201 1467/190/187 1475/200/197\nf 375/191/188 1475/200/197 1467/190/187\nf 21/181/178 1459/183/180 1477/205/202\nf 1478/204/201 1477/205/202 1459/183/180\nf 1350/208/23 337/216/22 1482/210/206\nf 1479/211/207 1482/210/206 337/216/22\nf 1481/209/205 1482/210/206 378/225/219\nf 1480/212/208 378/225/219 1482/210/206\nf 1483/217/211 1485/214/210 13/232/16\nf 1347/215/17 13/232/16 1485/214/210\nf 1479/211/207 1485/214/210 379/213/209\nf 1484/218/212 379/213/209 1485/214/210\nf 1484/218/212 376/219/213 1489/221/215\nf 1486/222/216 1489/221/215 376/219/213\nf 1488/220/214 1489/221/215 377/229/223\nf 1487/223/217 377/229/223 1489/221/215\nf 1480/212/208 379/213/209 1492/227/221\nf 1488/220/214 1492/227/221 379/213/209\nf 1491/226/220 1492/227/221 23/413/368\nf 1490/228/222 23/413/368 1492/227/221\nf 1493/235/227 1495/230/224 342/238/42\nf 1365/231/43 342/238/42 1495/230/224\nf 1494/234/226 376/219/213 1495/230/224\nf 1483/217/211 1495/230/224 376/219/213\nf 1496/241/231 1498/236/228 14/252/38\nf 1362/237/39 14/252/38 1498/236/228\nf 1497/240/230 382/233/225 1498/236/228\nf 1493/235/227 1498/236/228 382/233/225\nf 1499/246/236 1502/242/232 380/239/229\nf 1497/240/230 380/239/229 1502/242/232\nf 1500/245/235 381/248/238 1502/242/232\nf 1501/243/233 1502/242/232 381/248/238\nf 1501/243/233 1504/247/237 382/233/225\nf 1494/234/226 382/233/225 1504/247/237\nf 1486/222/216 1504/247/237 24/224/218\nf 1503/249/239 24/224/218 1504/247/237\nf 1505/255/243 1507/250/240 346/258/62\nf 1379/251/63 346/258/62 1507/250/240\nf 1506/254/242 380/239/229 1507/250/240\nf 1496/241/231 1507/250/240 380/239/229\nf 1508/261/247 1510/256/244 15/272/58\nf 1376/257/59 15/272/58 1510/256/244\nf 1509/260/246 385/253/241 1510/256/244\nf 1505/255/243 1510/256/244 385/253/241\nf 1511/266/252 1514/262/248 383/259/245\nf 1509/260/246 383/259/245 1514/262/248\nf 384/268/254 1513/263/249 1512/264/250\nf 1514/262/248 1512/264/250 1513/263/249\nf 1513/263/249 1516/267/253 385/253/241\nf 1506/254/242 385/253/241 1516/267/253\nf 1515/269/255 25/244/234 1516/267/253\nf 1499/246/236 1516/267/253 25/244/234\nf 1517/275/259 1519/270/256 350/278/82\nf 1393/271/83 350/278/82 1519/270/256\nf 1518/274/258 383/259/245 1519/270/256\nf 1508/261/247 1519/270/256 383/259/245\nf 1520/281/263 1522/276/260 16/292/78\nf 1390/277/79 16/292/78 1522/276/260\nf 1521/280/262 388/273/257 1522/276/260\nf 1517/275/259 1522/276/260 388/273/257\nf 1523/286/268 1526/282/264 386/279/261\nf 1521/280/262 386/279/261 1526/282/264\nf 387/289/271 1525/283/265 1524/285/267\nf 1526/282/264 1524/285/267 1525/283/265\nf 1525/283/265 1528/287/269 388/273/257\nf 1518/274/258 388/273/257 1528/287/269\nf 26/265/251 1511/266/252 1527/288/270\nf 1528/287/269 1527/288/270 1511/266/252\nf 1529/295/275 1531/290/272 354/296/103\nf 1407/291/102 354/296/103 1531/290/272\nf 1530/294/274 386/279/261 1531/290/272\nf 1520/281/263 1531/290/272 386/279/261\nf 1534/297/276 1404/298/98 1532/301/279\nf 17/5637/99 1532/301/279 1404/298/98\nf 1533/300/278 391/293/273 1534/297/276\nf 1529/295/275 1534/297/276 391/293/273\nf 1535/306/284 1538/302/280 389/299/277\nf 1533/300/278 389/299/277 1538/302/280\nf 1536/305/283 390/308/286 1538/302/280\nf 1537/303/281 1538/302/280 390/308/286\nf 1537/303/281 1540/307/285 391/293/273\nf 1530/294/274 391/293/273 1540/307/285\nf 1539/309/287 27/284/266 1540/307/285\nf 1523/286/268 1540/307/285 27/284/266\nf 1543/312/288 1421/313/122 1541/316/291\nf 358/319/123 1541/316/291 1421/313/122\nf 389/329/277 1532/310/279 1542/314/289\nf 1543/312/288 1542/314/289 1532/310/279\nf 1544/322/295 1546/317/292 18/333/118\nf 1418/318/119 18/333/118 1546/317/292\nf 1545/321/294 394/315/290 1546/317/292\nf 1541/316/291 1546/317/292 394/315/290\nf 1547/327/300 1550/323/296 392/320/293\nf 1545/321/294 392/320/293 1550/323/296\nf 1548/326/299 393/332/303 1550/323/296\nf 1549/324/297 1550/323/296 393/332/303\nf 1552/330/301 1542/314/289 1549/324/297\nf 394/315/290 1549/324/297 1542/314/289\nf 28/499/282 1535/328/284 1551/331/302\nf 1552/330/301 1551/331/302 1535/328/284\nf 1555/334/304 1435/335/142 1553/338/307\nf 362/341/143 1553/338/307 1435/335/142\nf 392/320/293 1544/322/295 1554/336/305\nf 1555/334/304 1554/336/305 1544/322/295\nf 1556/344/311 1558/339/308 19/353/138\nf 1432/340/139 19/353/138 1558/339/308\nf 1557/343/310 397/337/306 1558/339/308\nf 1553/338/307 1558/339/308 397/337/306\nf 1559/349/316 1562/345/312 395/342/309\nf 1557/343/310 395/342/309 1562/345/312\nf 1560/348/315 396/352/319 1562/345/312\nf 1561/346/313 1562/345/312 396/352/319\nf 1564/350/317 1554/336/305 1561/346/313\nf 397/337/306 1561/346/313 1554/336/305\nf 29/325/298 1547/327/300 1563/351/318\nf 1564/350/317 1563/351/318 1547/327/300\nf 1567/354/320 1449/355/162 1565/358/323\nf 366/361/163 1565/358/323 1449/355/162\nf 395/342/309 1556/344/311 1566/356/321\nf 1567/354/320 1566/356/321 1556/344/311\nf 1568/364/327 1570/359/324 20/373/158\nf 1446/360/159 20/373/158 1570/359/324\nf 1569/363/326 400/357/322 1570/359/324\nf 1565/358/323 1570/359/324 400/357/322\nf 1571/369/332 1574/365/328 398/362/325\nf 1569/363/326 398/362/325 1574/365/328\nf 1572/368/331 399/372/335 1574/365/328\nf 1573/366/329 1574/365/328 399/372/335\nf 1576/370/333 1566/356/321 1573/366/329\nf 400/357/322 1573/366/329 1566/356/321\nf 30/347/314 1559/349/316 1575/371/334\nf 1576/370/333 1575/371/334 1559/349/316\nf 1579/374/336 1463/375/182 1577/378/339\nf 370/381/183 1577/378/339 1463/375/182\nf 398/362/325 1568/364/327 1578/377/338\nf 1579/374/336 1578/377/338 1568/364/327\nf 1580/384/343 1582/379/340 21/393/178\nf 1460/380/179 21/393/178 1582/379/340\nf 1581/383/342 403/376/337 1582/379/340\nf 1577/378/339 1582/379/340 403/376/337\nf 1583/389/348 1586/385/344 401/382/341\nf 1581/383/342 401/382/341 1586/385/344\nf 1584/388/347 402/391/350 1586/385/344\nf 1585/386/345 1586/385/344 402/391/350\nf 1585/386/345 1588/390/349 403/376/337\nf 1578/377/338 403/376/337 1588/390/349\nf 31/367/330 1571/369/332 1587/392/351\nf 1588/390/349 1587/392/351 1571/369/332\nf 1591/394/352 1477/395/202 1589/398/355\nf 374/401/203 1589/398/355 1477/395/202\nf 1590/397/354 401/382/341 1591/394/352\nf 1580/384/343 1591/394/352 401/382/341\nf 1592/404/359 1594/399/356 22/4575/198\nf 1474/400/199 22/4575/198 1594/399/356\nf 1593/403/358 406/396/353 1594/399/356\nf 1589/398/355 1594/399/356 406/396/353\nf 1595/409/364 1598/405/360 404/402/357\nf 1593/403/358 404/402/357 1598/405/360\nf 1596/408/363 405/411/366 1598/405/360\nf 1597/406/361 1598/405/360 405/411/366\nf 1597/406/361 1600/410/365 406/396/353\nf 1590/397/354 406/396/353 1600/410/365\nf 1599/412/367 32/387/346 1600/410/365\nf 1583/389/348 1600/410/365 32/387/346\nf 1490/228/222 377/229/223 1604/415/370\nf 1601/416/371 1604/415/370 377/229/223\nf 1603/414/369 1604/415/370 409/428/383\nf 1602/417/372 409/428/383 1604/415/370\nf 1487/223/217 24/224/218 1607/419/374\nf 1605/420/375 1607/419/374 24/224/218\nf 1601/416/371 1607/419/374 410/418/373\nf 1606/421/376 410/418/373 1607/419/374\nf 1606/421/376 407/422/377 1611/424/379\nf 1608/425/380 1611/424/379 407/422/377\nf 1610/423/378 1611/424/379 408/432/387\nf 1609/426/381 408/432/387 1611/424/379\nf 1602/417/372 410/418/373 1614/430/385\nf 1610/423/378 1614/430/385 410/418/373\nf 1613/429/384 1614/430/385 34/581/532\nf 1612/431/386 34/581/532 1614/430/385\nf 1503/249/239 381/248/238 1617/433/388\nf 1615/434/389 1617/433/388 381/248/238\nf 1605/420/375 1617/433/388 407/422/377\nf 1616/435/390 407/422/377 1617/433/388\nf 1618/440/395 1620/437/392 25/244/234\nf 1500/245/235 25/244/234 1620/437/392\nf 1619/439/394 413/436/391 1620/437/392\nf 1615/434/389 1620/437/392 413/436/391\nf 1624/441/396 1619/439/394 1621/445/400\nf 411/438/393 1621/445/400 1619/439/394\nf 1622/443/398 412/448/403 1624/441/396\nf 1623/442/397 1624/441/396 412/448/403\nf 1616/435/390 413/436/391 1626/446/401\nf 1623/442/397 1626/446/401 413/436/391\nf 1608/425/380 1626/446/401 35/427/382\nf 1625/447/402 35/427/382 1626/446/401\nf 1629/449/404 1515/269/255 1627/452/407\nf 384/268/254 1627/452/407 1515/269/255\nf 411/438/393 1618/440/395 1628/450/405\nf 1629/449/404 1628/450/405 1618/440/395\nf 1632/453/408 1512/264/250 1630/456/411\nf 26/265/251 1630/456/411 1512/264/250\nf 416/451/406 1627/452/407 1631/455/410\nf 1632/453/408 1631/455/410 1627/452/407\nf 1633/461/416 1636/458/413 414/454/409\nf 1631/455/410 414/454/409 1636/458/413\nf 1636/458/413 1634/460/415 1635/457/412\nf 415/463/418 1635/457/412 1634/460/415\nf 1638/462/417 1628/450/405 1635/457/412\nf 416/451/406 1635/457/412 1628/450/405\nf 36/444/399 1621/445/400 1637/464/419\nf 1638/462/417 1637/464/419 1621/445/400\nf 1639/468/423 1641/465/420 387/289/271\nf 1527/288/270 387/289/271 1641/465/420\nf 1640/467/422 414/454/409 1641/465/420\nf 1630/456/411 1641/465/420 414/454/409\nf 1642/472/427 1644/469/424 27/284/266\nf 1524/285/267 27/284/266 1644/469/424\nf 1643/471/426 419/466/421 1644/469/424\nf 1639/468/423 1644/469/424 419/466/421\nf 1645/477/432 1648/473/428 417/470/425\nf 1643/471/426 417/470/425 1648/473/428\nf 1646/476/431 418/479/434 1648/473/428\nf 1647/474/429 1648/473/428 418/479/434\nf 1647/474/429 1650/478/433 419/466/421\nf 1640/467/422 419/466/421 1650/478/433\nf 1649/480/435 37/459/414 1650/478/433\nf 1633/461/416 1650/478/433 37/459/414\nf 1651/484/439 1653/481/436 390/308/286\nf 1539/309/287 390/308/286 1653/481/436\nf 1652/483/438 417/470/425 1653/481/436\nf 1642/472/427 1653/481/436 417/470/425\nf 1654/488/443 1656/485/440 28/304/282\nf 1536/305/283 28/304/282 1656/485/440\nf 1655/487/442 422/482/437 1656/485/440\nf 1651/484/439 1656/485/440 422/482/437\nf 1657/493/448 1660/489/444 420/486/441\nf 1655/487/442 420/486/441 1660/489/444\nf 1658/492/447 421/495/450 1660/489/444\nf 1659/490/445 1660/489/444 421/495/450\nf 1659/490/445 1662/494/449 422/482/437\nf 1652/483/438 422/482/437 1662/494/449\nf 1661/496/451 38/475/430 1662/494/449\nf 1645/477/432 1662/494/449 38/475/430\nf 1663/502/455 1665/497/452 393/332/303\nf 1551/331/302 393/332/303 1665/497/452\nf 1664/501/454 420/514/441 1665/497/452\nf 1654/498/443 1665/497/452 420/514/441\nf 1666/506/459 1668/503/456 29/325/298\nf 1548/326/299 29/325/298 1668/503/456\nf 1667/505/458 425/500/453 1668/503/456\nf 1663/502/455 1668/503/456 425/500/453\nf 1669/511/464 1672/507/460 423/504/457\nf 1667/505/458 423/504/457 1672/507/460\nf 1670/510/463 424/515/466 1672/507/460\nf 1671/508/461 1672/507/460 424/515/466\nf 1671/508/461 1674/512/465 425/500/453\nf 1664/501/454 425/500/453 1674/512/465\nf 1673/516/467 39/667/446 1674/512/465\nf 1657/513/448 1674/512/465 39/667/446\nf 1675/520/471 1677/517/468 396/352/319\nf 1563/351/318 396/352/319 1677/517/468\nf 1676/519/470 423/504/457 1677/517/468\nf 1666/506/459 1677/517/468 423/504/457\nf 1678/524/475 1680/521/472 30/347/314\nf 1560/348/315 30/347/314 1680/521/472\nf 1679/523/474 428/518/469 1680/521/472\nf 1675/520/471 1680/521/472 428/518/469\nf 1681/529/480 1684/525/476 426/522/473\nf 1679/523/474 426/522/473 1684/525/476\nf 1682/528/479 427/531/482 1684/525/476\nf 1683/526/477 1684/525/476 427/531/482\nf 1683/526/477 1686/530/481 428/518/469\nf 1676/519/470 428/518/469 1686/530/481\nf 1685/532/483 40/509/462 1686/530/481\nf 1669/511/464 1686/530/481 40/509/462\nf 1687/536/487 1689/533/484 399/372/335\nf 1575/371/334 399/372/335 1689/533/484\nf 1688/535/486 426/522/473 1689/533/484\nf 1678/524/475 1689/533/484 426/522/473\nf 1690/540/491 1692/537/488 31/367/330\nf 1572/368/331 31/367/330 1692/537/488\nf 1691/539/490 431/534/485 1692/537/488\nf 1687/536/487 1692/537/488 431/534/485\nf 1693/545/496 1696/541/492 429/538/489\nf 1691/539/490 429/538/489 1696/541/492\nf 1694/544/495 430/547/498 1696/541/492\nf 1695/542/493 1696/541/492 430/547/498\nf 1695/542/493 1698/546/497 431/534/485\nf 1688/535/486 431/534/485 1698/546/497\nf 1697/548/499 41/527/478 1698/546/497\nf 1681/529/480 1698/546/497 41/527/478\nf 1699/552/503 1701/549/500 402/391/350\nf 1587/392/351 402/391/350 1701/549/500\nf 1700/551/502 429/538/489 1701/549/500\nf 1690/540/491 1701/549/500 429/538/489\nf 1702/556/507 1704/553/504 32/387/346\nf 1584/388/347 32/387/346 1704/553/504\nf 1703/555/506 434/550/501 1704/553/504\nf 1699/552/503 1704/553/504 434/550/501\nf 1705/561/512 1708/557/508 432/554/505\nf 1703/555/506 432/554/505 1708/557/508\nf 1706/560/511 433/563/514 1708/557/508\nf 1707/558/509 1708/557/508 433/563/514\nf 1707/558/509 1710/562/513 434/550/501\nf 1700/551/502 434/550/501 1710/562/513\nf 1709/564/515 42/543/494 1710/562/513\nf 1693/545/496 1710/562/513 42/543/494\nf 1711/568/519 1713/565/516 405/411/366\nf 1599/412/367 405/411/366 1713/565/516\nf 1712/567/518 432/554/505 1713/565/516\nf 1702/556/507 1713/565/516 432/554/505\nf 1714/572/523 1716/569/520 33/407/362\nf 1596/408/363 33/407/362 1716/569/520\nf 1715/571/522 437/566/517 1716/569/520\nf 1711/568/519 1716/569/520 437/566/517\nf 1717/577/528 1720/573/524 435/570/521\nf 1715/571/522 435/570/521 1720/573/524\nf 1718/576/527 436/579/530 1720/573/524\nf 1719/574/525 1720/573/524 436/579/530\nf 1719/574/525 1722/578/529 437/566/517\nf 1712/567/518 437/566/517 1722/578/529\nf 1721/580/531 43/559/510 1722/578/529\nf 1705/561/512 1722/578/529 43/559/510\nf 1612/431/386 408/432/387 1726/583/534\nf 1723/584/535 1726/583/534 408/432/387\nf 1725/582/533 1726/583/534 440/596/547\nf 1724/585/536 440/596/547 1726/583/534\nf 1609/426/381 35/427/382 1729/587/538\nf 1727/588/539 1729/587/538 35/427/382\nf 1723/584/535 1729/587/538 441/586/537\nf 1728/589/540 441/586/537 1729/587/538\nf 1728/589/540 438/590/541 1733/592/543\nf 1730/593/544 1733/592/543 438/590/541\nf 1732/591/542 1733/592/543 439/599/550\nf 1731/594/545 439/599/550 1733/592/543\nf 1724/585/536 441/586/537 1736/598/549\nf 1732/591/542 1736/598/549 441/586/537\nf 45/750/697 1735/597/548 1734/600/551\nf 1736/598/549 1734/600/551 1735/597/548\nf 1625/447/402 412/448/403 1739/601/552\nf 1737/602/553 1739/601/552 412/448/403\nf 1727/588/539 1739/601/552 438/590/541\nf 1738/603/554 438/590/541 1739/601/552\nf 1742/605/556 1622/443/398 1740/606/557\nf 36/444/399 1740/606/557 1622/443/398\nf 444/604/555 1737/602/553 1741/608/559\nf 1742/605/556 1741/608/559 1737/602/553\nf 442/607/558 1743/611/562 1741/608/559\nf 1746/609/560 1741/608/559 1743/611/562\nf 1746/609/560 1744/613/564 1745/610/561\nf 443/616/567 1745/610/561 1744/613/564\nf 1745/610/561 1748/614/565 444/604/555\nf 1738/603/554 444/604/555 1748/614/565\nf 1747/615/566 46/595/546 1748/614/565\nf 1730/593/544 1748/614/565 46/595/546\nf 415/463/418 1749/618/569 1637/464/419\nf 1751/617/568 1637/464/419 1749/618/569\nf 1751/617/568 1750/620/571 1740/606/557\nf 442/607/558 1740/606/557 1750/620/571\nf 37/459/414 1752/624/575 1634/460/415\nf 1754/621/572 1634/460/415 1752/624/575\nf 1754/621/572 1753/623/574 1749/618/569\nf 447/619/570 1749/618/569 1753/623/574\nf 1758/625/576 1753/623/574 1755/629/580\nf 445/622/573 1755/629/580 1753/623/574\nf 1758/625/576 1756/627/578 1757/626/577\nf 446/631/582 1757/626/577 1756/627/578\nf 447/619/570 1757/626/577 1750/620/571\nf 1760/630/581 1750/620/571 1757/626/577\nf 1760/630/581 1759/632/583 1743/611/562\nf 47/612/563 1743/611/562 1759/632/583\nf 1761/636/587 1763/633/584 418/479/434\nf 1649/480/435 418/479/434 1763/633/584\nf 1762/635/586 445/622/573 1763/633/584\nf 1752/624/575 1763/633/584 445/622/573\nf 1764/640/591 1766/637/588 38/475/430\nf 1646/476/431 38/475/430 1766/637/588\nf 1765/639/590 450/634/585 1766/637/588\nf 1761/636/587 1766/637/588 450/634/585\nf 1767/645/596 1770/641/592 448/638/589\nf 1765/639/590 448/638/589 1770/641/592\nf 1768/644/595 449/648/599 1770/641/592\nf 1769/642/593 1770/641/592 449/648/599\nf 1769/642/593 1772/646/597 450/634/585\nf 1762/635/586 450/634/585 1772/646/597\nf 48/628/579 1755/629/580 1771/647/598\nf 1772/646/597 1771/647/598 1755/629/580\nf 1773/652/603 1775/649/600 421/495/450\nf 1661/496/451 421/495/450 1775/649/600\nf 1774/651/602 448/638/589 1775/649/600\nf 1764/640/591 1775/649/600 448/638/589\nf 1776/656/607 1778/653/604 39/491/446\nf 1658/492/447 39/491/446 1778/653/604\nf 1777/655/606 453/650/601 1778/653/604\nf 1773/652/603 1778/653/604 453/650/601\nf 1779/661/612 1782/657/608 451/654/605\nf 1777/655/606 451/654/605 1782/657/608\nf 1780/660/611 452/663/614 1782/657/608\nf 1781/658/609 1782/657/608 452/663/614\nf 1781/658/609 1784/662/613 453/650/601\nf 1774/651/602 453/650/601 1784/662/613\nf 1783/664/615 49/643/594 1784/662/613\nf 1767/645/596 1784/662/613 49/643/594\nf 1785/670/619 1787/665/616 424/515/466\nf 1673/516/467 424/515/466 1787/665/616\nf 1786/669/618 451/682/605 1787/665/616\nf 1776/666/607 1787/665/616 451/682/605\nf 1788/674/623 1790/671/620 40/509/462\nf 1670/510/463 40/509/462 1790/671/620\nf 1789/673/622 456/668/617 1790/671/620\nf 1785/670/619 1790/671/620 456/668/617\nf 1791/679/628 1794/675/624 454/672/621\nf 1789/673/622 454/672/621 1794/675/624\nf 1792/678/627 455/683/630 1794/675/624\nf 1793/676/625 1794/675/624 455/683/630\nf 1793/676/625 1796/680/629 456/668/617\nf 1786/669/618 456/668/617 1796/680/629\nf 1795/684/631 50/835/610 1796/680/629\nf 1779/681/612 1796/680/629 50/835/610\nf 1797/688/635 1799/685/632 427/531/482\nf 1685/532/483 427/531/482 1799/685/632\nf 1798/687/634 454/672/621 1799/685/632\nf 1788/674/623 1799/685/632 454/672/621\nf 1800/692/639 1802/689/636 41/527/478\nf 1682/528/479 41/527/478 1802/689/636\nf 1801/691/638 459/686/633 1802/689/636\nf 1797/688/635 1802/689/636 459/686/633\nf 1803/697/644 1806/693/640 457/690/637\nf 1801/691/638 457/690/637 1806/693/640\nf 1804/696/643 458/700/647 1806/693/640\nf 1805/694/641 1806/693/640 458/700/647\nf 1805/694/641 1808/698/645 459/686/633\nf 1798/687/634 459/686/633 1808/698/645\nf 51/677/626 1791/679/628 1807/699/646\nf 1808/698/645 1807/699/646 1791/679/628\nf 1809/704/651 1811/701/648 430/547/498\nf 1697/548/499 430/547/498 1811/701/648\nf 1810/703/650 457/690/637 1811/701/648\nf 1800/692/639 1811/701/648 457/690/637\nf 1812/708/655 1814/705/652 42/543/494\nf 1694/544/495 42/543/494 1814/705/652\nf 1813/707/654 462/702/649 1814/705/652\nf 1809/704/651 1814/705/652 462/702/649\nf 1815/713/660 1818/709/656 460/706/653\nf 1813/707/654 460/706/653 1818/709/656\nf 1816/712/659 461/716/663 1818/709/656\nf 1817/710/657 1818/709/656 461/716/663\nf 1817/710/657 1820/714/661 462/702/649\nf 1810/703/650 462/702/649 1820/714/661\nf 52/695/642 1803/697/644 1819/715/662\nf 1820/714/661 1819/715/662 1803/697/644\nf 1821/720/667 1823/717/664 433/563/514\nf 1709/564/515 433/563/514 1823/717/664\nf 1822/719/666 460/706/653 1823/717/664\nf 1812/708/655 1823/717/664 460/706/653\nf 1824/724/671 1826/721/668 43/559/510\nf 1706/560/511 43/559/510 1826/721/668\nf 1825/723/670 465/718/665 1826/721/668\nf 1821/720/667 1826/721/668 465/718/665\nf 1827/729/676 1830/725/672 463/722/669\nf 1825/723/670 463/722/669 1830/725/672\nf 1828/728/675 464/731/678 1830/725/672\nf 1829/726/673 1830/725/672 464/731/678\nf 1829/726/673 1832/730/677 465/718/665\nf 1822/719/666 465/718/665 1832/730/677\nf 53/711/658 1815/713/660 1831/732/679\nf 1832/730/677 1831/732/679 1815/713/660\nf 436/579/530 1833/734/681 1721/580/531\nf 1835/733/680 1721/580/531 1833/734/681\nf 1835/733/680 1834/736/683 1824/724/671\nf 463/722/669 1824/724/671 1834/736/683\nf 44/575/526 1836/738/685 1718/576/527\nf 1838/737/684 1718/576/527 1836/738/685\nf 1838/737/684 1837/739/686 1833/734/681\nf 468/735/682 1833/734/681 1837/739/686\nf 1837/739/686 466/740/687 1842/741/688\nf 1839/743/690 1842/741/688 466/740/687\nf 1840/744/691 467/747/694 1842/741/688\nf 1841/742/689 1842/741/688 467/747/694\nf 468/735/682 1841/742/689 1834/736/683\nf 1844/746/693 1834/736/683 1841/742/689\nf 1843/748/695 54/727/674 1844/746/693\nf 1827/729/676 1844/746/693 54/727/674\nf 439/599/550 1845/752/699 1734/600/551\nf 1848/749/696 1734/600/551 1845/752/699\nf 1848/749/696 1846/754/701 1847/751/698\nf 471/765/712 1847/751/698 1846/754/701\nf 1851/755/702 1731/594/545 1849/756/703\nf 46/595/546 1849/756/703 1731/594/545\nf 1851/755/702 1850/758/705 1845/752/699\nf 472/753/700 1845/752/699 1850/758/705\nf 469/757/704 1852/763/710 1850/758/705\nf 1855/759/706 1850/758/705 1852/763/710\nf 470/767/714 1854/760/707 1853/761/708\nf 1855/759/706 1853/761/708 1854/760/707\nf 472/753/700 1854/760/707 1846/754/701\nf 1858/764/711 1846/754/701 1854/760/707\nf 1858/764/711 1856/768/715 1857/766/713\nf 56/917/860 1857/766/713 1856/768/715\nf 443/616/567 1859/770/717 1747/615/566\nf 1861/769/716 1747/615/566 1859/770/717\nf 1861/769/716 1860/772/719 1849/756/703\nf 469/757/704 1849/756/703 1860/772/719\nf 47/612/563 1862/774/721 1744/613/564\nf 1864/773/720 1744/613/564 1862/774/721\nf 1864/773/720 1863/776/723 1859/770/717\nf 475/771/718 1859/770/717 1863/776/723\nf 473/775/722 1865/779/726 1863/776/723\nf 1868/777/724 1863/776/723 1865/779/726\nf 1868/777/724 1866/781/728 1867/778/725\nf 474/783/730 1867/778/725 1866/781/728\nf 475/771/718 1867/778/725 1860/772/719\nf 1870/782/729 1860/772/719 1867/778/725\nf 1870/782/729 1869/784/731 1852/763/710\nf 57/762/709 1852/763/710 1869/784/731\nf 446/631/582 1871/786/733 1759/632/583\nf 1873/785/732 1759/632/583 1871/786/733\nf 1873/785/732 1872/788/735 1862/774/721\nf 473/775/722 1862/774/721 1872/788/735\nf 1876/789/736 1756/627/578 1874/792/739\nf 48/628/579 1874/792/739 1756/627/578\nf 1876/789/736 1875/790/737 1871/786/733\nf 478/787/734 1871/786/733 1875/790/737\nf 1880/794/741 1875/790/737 1877/797/744\nf 476/791/738 1877/797/744 1875/790/737\nf 477/799/746 1879/793/740 1878/795/742\nf 1880/794/741 1878/795/742 1879/793/740\nf 478/787/734 1879/793/740 1872/788/735\nf 1882/798/745 1872/788/735 1879/793/740\nf 1882/798/745 1881/800/747 1865/779/726\nf 58/780/727 1865/779/726 1881/800/747\nf 1885/801/748 1771/647/598 1883/804/751\nf 449/648/599 1883/804/751 1771/647/598\nf 476/791/738 1874/792/739 1884/802/749\nf 1885/801/748 1884/802/749 1874/792/739\nf 1886/808/755 1888/805/752 49/643/594\nf 1768/644/595 49/643/594 1888/805/752\nf 1887/807/754 481/803/750 1888/805/752\nf 1883/804/751 1888/805/752 481/803/750\nf 1889/813/760 1892/810/757 479/806/753\nf 1887/807/754 479/806/753 1892/810/757\nf 480/816/763 1891/809/756 1890/812/759\nf 1892/810/757 1890/812/759 1891/809/756\nf 1894/814/761 1884/802/749 1891/809/756\nf 481/803/750 1891/809/756 1884/802/749\nf 59/796/743 1877/797/744 1893/815/762\nf 1894/814/761 1893/815/762 1877/797/744\nf 1895/820/767 1897/817/764 452/663/614\nf 1783/664/615 452/663/614 1897/817/764\nf 1896/819/766 479/806/753 1897/817/764\nf 1886/808/755 1897/817/764 479/806/753\nf 1898/824/771 1900/821/768 50/659/610\nf 1780/660/611 50/659/610 1900/821/768\nf 1899/823/770 484/818/765 1900/821/768\nf 1895/820/767 1900/821/768 484/818/765\nf 1901/829/776 1904/825/772 482/822/769\nf 1899/823/770 482/822/769 1904/825/772\nf 1902/828/775 483/831/778 1904/825/772\nf 1903/826/773 1904/825/772 483/831/778\nf 1903/826/773 1906/830/777 484/818/765\nf 1896/819/766 484/818/765 1906/830/777\nf 1905/832/779 60/811/758 1906/830/777\nf 1889/813/760 1906/830/777 60/811/758\nf 1907/838/783 1909/833/780 455/683/630\nf 1795/684/631 455/683/630 1909/833/780\nf 1908/837/782 482/850/769 1909/833/780\nf 1898/834/771 1909/833/780 482/850/769\nf 1910/842/787 1912/839/784 51/677/626\nf 1792/678/627 51/677/626 1912/839/784\nf 1911/841/786 487/836/781 1912/839/784\nf 1907/838/783 1912/839/784 487/836/781\nf 1913/847/792 1916/843/788 485/840/785\nf 1911/841/786 485/840/785 1916/843/788\nf 1914/846/791 486/851/794 1916/843/788\nf 1915/844/789 1916/843/788 486/851/794\nf 1915/844/789 1918/848/793 487/836/781\nf 1908/837/782 487/836/781 1918/848/793\nf 1917/852/795 61/1003/774 1918/848/793\nf 1901/849/776 1918/848/793 61/1003/774\nf 1921/853/796 1807/699/646 1919/856/799\nf 458/700/647 1919/856/799 1807/699/646\nf 485/840/785 1910/842/787 1920/854/797\nf 1921/853/796 1920/854/797 1910/842/787\nf 1922/860/803 1924/857/800 52/695/642\nf 1804/696/643 52/695/642 1924/857/800\nf 1923/859/802 490/855/798 1924/857/800\nf 1919/856/799 1924/857/800 490/855/798\nf 1925/865/808 1928/861/804 488/858/801\nf 1923/859/802 488/858/801 1928/861/804\nf 1926/864/807 489/868/811 1928/861/804\nf 1927/862/805 1928/861/804 489/868/811\nf 1930/866/809 1920/854/797 1927/862/805\nf 490/855/798 1927/862/805 1920/854/797\nf 62/845/790 1913/847/792 1929/867/810\nf 1930/866/809 1929/867/810 1913/847/792\nf 1933/869/812 1819/715/662 1931/872/815\nf 461/716/663 1931/872/815 1819/715/662\nf 488/858/801 1922/860/803 1932/870/813\nf 1933/869/812 1932/870/813 1922/860/803\nf 1934/876/819 1936/873/816 53/711/658\nf 1816/712/659 53/711/658 1936/873/816\nf 1935/875/818 493/871/814 1936/873/816\nf 1931/872/815 1936/873/816 493/871/814\nf 1937/881/824 1940/877/820 491/874/817\nf 1935/875/818 491/874/817 1940/877/820\nf 1938/880/823 492/884/827 1940/877/820\nf 1939/878/821 1940/877/820 492/884/827\nf 1942/882/825 1932/870/813 1939/878/821\nf 493/871/814 1939/878/821 1932/870/813\nf 63/863/806 1925/865/808 1941/883/826\nf 1942/882/825 1941/883/826 1925/865/808\nf 1943/888/831 1945/885/828 464/731/678\nf 1831/732/679 464/731/678 1945/885/828\nf 491/874/817 1934/876/819 1944/887/830\nf 1945/885/828 1944/887/830 1934/876/819\nf 1946/892/835 1948/889/832 54/727/674\nf 1828/728/675 54/727/674 1948/889/832\nf 1947/891/834 496/886/829 1948/889/832\nf 1943/888/831 1948/889/832 496/886/829\nf 1949/897/840 1952/893/836 494/890/833\nf 1947/891/834 494/890/833 1952/893/836\nf 1950/896/839 495/899/842 1952/893/836\nf 1951/894/837 1952/893/836 495/899/842\nf 1951/894/837 1954/898/841 496/886/829\nf 1944/887/830 496/886/829 1954/898/841\nf 64/879/822 1937/881/824 1953/900/843\nf 1954/898/841 1953/900/843 1937/881/824\nf 1843/748/695 467/747/694 1957/901/844\nf 1955/902/845 1957/901/844 467/747/694\nf 1956/903/846 494/890/833 1957/901/844\nf 1946/892/835 1957/901/844 494/890/833\nf 1840/744/691 55/745/692 1960/905/848\nf 1958/908/851 1960/905/848 55/745/692\nf 1955/902/845 1960/905/848 499/904/847\nf 1959/907/850 499/904/847 1960/905/848\nf 1961/913/856 1964/910/853 497/906/849\nf 1959/907/850 497/906/849 1964/910/853\nf 1962/912/855 498/915/858 1964/910/853\nf 1963/909/852 1964/910/853 498/915/858\nf 1963/909/852 1966/914/857 499/904/847\nf 1956/903/846 499/904/847 1966/914/857\nf 1965/916/859 65/895/838 1966/914/857\nf 1949/897/840 1966/914/857 65/895/838\nf 1970/919/862 1856/768/715 1967/920/863\nf 470/767/714 1967/920/863 1856/768/715\nf 1969/918/861 1970/919/862 502/932/875\nf 1968/921/864 502/932/875 1970/919/862\nf 1973/923/866 1853/761/708 1971/926/869\nf 57/762/709 1971/926/869 1853/761/708\nf 1967/920/863 1973/923/866 503/922/865\nf 1972/924/867 503/922/865 1973/923/866\nf 1977/928/871 1972/924/867 1974/931/874\nf 500/925/868 1974/931/874 1972/924/867\nf 501/936/879 1976/927/870 1975/929/872\nf 1977/928/871 1975/929/872 1976/927/870\nf 1968/921/864 503/922/865 1980/934/877\nf 1976/927/870 1980/934/877 503/922/865\nf 1979/933/876 1980/934/877 67/1086/1025\nf 1978/935/878 67/1086/1025 1980/934/877\nf 474/783/730 1981/940/883 1869/784/731\nf 1983/937/880 1869/784/731 1981/940/883\nf 500/925/868 1971/926/869 1982/938/881\nf 1983/937/880 1982/938/881 1971/926/869\nf 58/780/727 1984/942/885 1866/781/728\nf 1986/941/884 1866/781/728 1984/942/885\nf 1986/941/884 1985/944/887 1981/940/883\nf 506/939/882 1981/940/883 1985/944/887\nf 1990/946/889 1985/944/887 1987/949/892\nf 504/943/886 1987/949/892 1985/944/887\nf 505/952/895 1989/945/888 1988/947/890\nf 1990/946/889 1988/947/890 1989/945/888\nf 1992/950/893 1982/938/881 1989/945/888\nf 506/939/882 1989/945/888 1982/938/881\nf 68/930/873 1974/931/874 1991/951/894\nf 1992/950/893 1991/951/894 1974/931/874\nf 1995/953/896 1881/800/747 1993/956/899\nf 477/799/746 1993/956/899 1881/800/747\nf 1995/953/896 1994/954/897 1984/942/885\nf 504/943/886 1984/942/885 1994/954/897\nf 1998/957/900 1878/795/742 1996/960/903\nf 59/796/743 1996/960/903 1878/795/742\nf 509/955/898 1993/956/899 1997/958/901\nf 1998/957/900 1997/958/901 1993/956/899\nf 2002/962/905 1997/958/901 1999/965/908\nf 507/959/902 1999/965/908 1997/958/901\nf 508/968/911 2001/961/904 2000/963/906\nf 2002/962/905 2000/963/906 2001/961/904\nf 2004/966/909 1994/954/897 2001/961/904\nf 509/955/898 2001/961/904 1994/954/897\nf 69/948/891 1987/949/892 2003/967/910\nf 2004/966/909 2003/967/910 1987/949/892\nf 2007/969/912 1893/815/762 2005/972/915\nf 480/816/763 2005/972/915 1893/815/762\nf 507/959/902 1996/960/903 2006/970/913\nf 2007/969/912 2006/970/913 1996/960/903\nf 2010/973/916 1890/812/759 2008/976/919\nf 60/811/758 2008/976/919 1890/812/759\nf 512/971/914 2005/972/915 2009/974/917\nf 2010/973/916 2009/974/917 2005/972/915\nf 2014/978/921 2009/974/917 2011/981/924\nf 510/975/918 2011/981/924 2009/974/917\nf 511/984/927 2013/977/920 2012/979/922\nf 2014/978/921 2012/979/922 2013/977/920\nf 2016/982/925 2006/970/913 2013/977/920\nf 512/971/914 2013/977/920 2006/970/913\nf 70/964/907 1999/965/908 2015/983/926\nf 2016/982/925 2015/983/926 1999/965/908\nf 2019/985/928 1905/832/779 2017/988/931\nf 483/831/778 2017/988/931 1905/832/779\nf 510/975/918 2008/976/919 2018/986/929\nf 2019/985/928 2018/986/929 2008/976/919\nf 2020/992/935 2022/989/932 61/827/774\nf 1902/828/775 61/827/774 2022/989/932\nf 2021/991/934 515/987/930 2022/989/932\nf 2017/988/931 2022/989/932 515/987/930\nf 2023/997/940 2026/993/936 513/990/933\nf 2021/991/934 513/990/933 2026/993/936\nf 514/1000/943 2025/994/937 2024/996/939\nf 2026/993/936 2024/996/939 2025/994/937\nf 2028/998/941 2018/986/929 2025/994/937\nf 515/987/930 2025/994/937 2018/986/929\nf 71/980/923 2011/981/924 2027/999/942\nf 2028/998/941 2027/999/942 2011/981/924\nf 2029/1006/947 2031/1001/944 486/851/794\nf 1917/852/795 486/851/794 2031/1001/944\nf 2030/1005/946 513/1018/933 2031/1001/944\nf 2020/1002/935 2031/1001/944 513/1018/933\nf 2032/1010/951 2034/1007/948 62/845/790\nf 1914/846/791 62/845/790 2034/1007/948\nf 2033/1009/950 518/1004/945 2034/1007/948\nf 2029/1006/947 2034/1007/948 518/1004/945\nf 2035/1015/956 2038/1011/952 516/1008/949\nf 2033/1009/950 516/1008/949 2038/1011/952\nf 2036/1014/955 517/1019/958 2038/1011/952\nf 2037/1012/953 2038/1011/952 517/1019/958\nf 2037/1012/953 2040/1016/957 518/1004/945\nf 2030/1005/946 518/1004/945 2040/1016/957\nf 2039/1020/959 72/1170/938 2040/1016/957\nf 2023/1017/940 2040/1016/957 72/1170/938\nf 2043/1021/960 1929/867/810 2041/1024/963\nf 489/868/811 2041/1024/963 1929/867/810\nf 516/1008/949 2032/1010/951 2042/1022/961\nf 2043/1021/960 2042/1022/961 2032/1010/951\nf 2044/1028/967 2046/1025/964 63/863/806\nf 1926/864/807 63/863/806 2046/1025/964\nf 2045/1027/966 521/1023/962 2046/1025/964\nf 2041/1024/963 2046/1025/964 521/1023/962\nf 2047/1033/972 2050/1029/968 519/1026/965\nf 2045/1027/966 519/1026/965 2050/1029/968\nf 2048/1032/971 520/1036/975 2050/1029/968\nf 2049/1030/969 2050/1029/968 520/1036/975\nf 2052/1034/973 2042/1022/961 2049/1030/969\nf 521/1023/962 2049/1030/969 2042/1022/961\nf 2051/1035/974 73/1013/954 2052/1034/973\nf 2035/1015/956 2052/1034/973 73/1013/954\nf 2055/1037/976 1941/883/826 2053/1040/979\nf 492/884/827 2053/1040/979 1941/883/826\nf 519/1026/965 2044/1028/967 2054/1038/977\nf 2055/1037/976 2054/1038/977 2044/1028/967\nf 2056/1044/983 2058/1041/980 64/879/822\nf 1938/880/823 64/879/822 2058/1041/980\nf 2057/1043/982 524/1039/978 2058/1041/980\nf 2053/1040/979 2058/1041/980 524/1039/978\nf 2059/1049/988 2062/1045/984 522/1042/981\nf 2057/1043/982 522/1042/981 2062/1045/984\nf 2060/1048/987 523/1052/991 2062/1045/984\nf 2061/1046/985 2062/1045/984 523/1052/991\nf 2064/1050/989 2054/1038/977 2061/1046/985\nf 524/1039/978 2061/1046/985 2054/1038/977\nf 74/1031/970 2047/1033/972 2063/1051/990\nf 2064/1050/989 2063/1051/990 2047/1033/972\nf 2065/1056/995 2067/1053/992 495/899/842\nf 1953/900/843 495/899/842 2067/1053/992\nf 522/1042/981 2056/1044/983 2066/1055/994\nf 2067/1053/992 2066/1055/994 2056/1044/983\nf 2068/1060/999 2070/1057/996 65/895/838\nf 1950/896/839 65/895/838 2070/1057/996\nf 2069/1059/998 527/1054/993 2070/1057/996\nf 2065/1056/995 2070/1057/996 527/1054/993\nf 525/1058/997 2071/1063/1002 2069/1059/998\nf 2074/1062/1001 2069/1059/998 2071/1063/1002\nf 2074/1062/1001 2072/1065/1004 2073/1061/1000\nf 526/1068/1007 2073/1061/1000 2072/1065/1004\nf 2076/1066/1005 2066/1055/994 2073/1061/1000\nf 527/1054/993 2073/1061/1000 2066/1055/994\nf 75/1047/986 2059/1049/988 2075/1067/1006\nf 2076/1066/1005 2075/1067/1006 2059/1049/988\nf 2077/1072/1011 2079/1069/1008 498/915/858\nf 1965/916/859 498/915/858 2079/1069/1008\nf 2078/1071/1010 525/1058/997 2079/1069/1008\nf 2068/1060/999 2079/1069/1008 525/1058/997\nf 66/911/854 2080/1074/1013 1962/912/855\nf 2082/1073/1012 1962/912/855 2080/1074/1013\nf 2082/1073/1012 2081/1076/1015 2077/1072/1011\nf 530/1070/1009 2077/1072/1011 2081/1076/1015\nf 528/1075/1014 2083/1079/1018 2081/1076/1015\nf 2086/1077/1016 2081/1076/1015 2083/1079/1018\nf 2086/1077/1016 2084/1081/1020 2085/1078/1017\nf 529/1083/1022 2085/1078/1017 2084/1081/1020\nf 530/1070/1009 2085/1078/1017 2078/1071/1010\nf 2088/1082/1021 2078/1071/1010 2085/1078/1017\nf 2088/1082/1021 2087/1084/1023 2071/1063/1002\nf 76/1064/1003 2071/1063/1002 2087/1084/1023\nf 501/936/879 2089/1088/1027 1978/935/878\nf 2092/1085/1024 1978/935/878 2089/1088/1027\nf 2092/1085/1024 2090/1090/1029 2091/1087/1026\nf 533/1101/1040 2091/1087/1026 2090/1090/1029\nf 68/930/873 2093/1092/1031 1975/929/872\nf 2095/1091/1030 1975/929/872 2093/1092/1031\nf 2095/1091/1030 2094/1094/1033 2089/1088/1027\nf 534/1089/1028 2089/1088/1027 2094/1094/1033\nf 531/1093/1032 2096/1097/1036 2094/1094/1033\nf 2099/1095/1034 2094/1094/1033 2096/1097/1036\nf 2099/1095/1034 2097/1099/1038 2098/1096/1035\nf 532/1103/1042 2098/1096/1035 2097/1099/1038\nf 534/1089/1028 2098/1096/1035 2090/1090/1029\nf 2102/1100/1039 2090/1090/1029 2098/1096/1035\nf 2102/1100/1039 2100/1104/1043 2101/1102/1041\nf 78/1254/1189 2101/1102/1041 2100/1104/1043\nf 505/952/895 2103/1106/1045 1991/951/894\nf 2105/1105/1044 1991/951/894 2103/1106/1045\nf 2105/1105/1044 2104/1108/1047 2093/1092/1031\nf 531/1093/1032 2093/1092/1031 2104/1108/1047\nf 2108/1109/1048 1988/947/890 2106/1112/1051\nf 69/948/891 2106/1112/1051 1988/947/890\nf 2108/1109/1048 2107/1110/1049 2103/1106/1045\nf 537/1107/1046 2103/1106/1045 2107/1110/1049\nf 2112/1113/1052 2107/1110/1049 2109/1117/1056\nf 535/1111/1050 2109/1117/1056 2107/1110/1049\nf 2112/1113/1052 2110/1115/1054 2111/1114/1053\nf 536/1119/1058 2111/1114/1053 2110/1115/1054\nf 537/1107/1046 2111/1114/1053 2104/1108/1047\nf 2114/1118/1057 2104/1108/1047 2111/1114/1053\nf 2114/1118/1057 2113/1120/1059 2096/1097/1036\nf 79/1098/1037 2096/1097/1036 2113/1120/1059\nf 2003/967/910 508/968/911 2117/1121/1060\nf 2115/1122/1061 2117/1121/1060 508/968/911\nf 2106/1112/1051 2117/1121/1060 535/1111/1050\nf 2116/1123/1062 535/1111/1050 2117/1121/1060\nf 2000/963/906 70/964/907 2120/1125/1064\nf 2118/1126/1065 2120/1125/1064 70/964/907\nf 2115/1122/1061 2120/1125/1064 540/1124/1063\nf 2119/1127/1066 540/1124/1063 2120/1125/1064\nf 2119/1127/1066 538/1128/1067 2124/1130/1069\nf 2121/1131/1070 2124/1130/1069 538/1128/1067\nf 2123/1129/1068 2124/1130/1069 539/1136/1075\nf 2122/1132/1071 539/1136/1075 2124/1130/1069\nf 2116/1123/1062 540/1124/1063 2126/1134/1073\nf 2123/1129/1068 2126/1134/1073 540/1124/1063\nf 2109/1117/1056 2126/1134/1073 80/1116/1055\nf 2125/1135/1074 80/1116/1055 2126/1134/1073\nf 2015/983/926 511/984/927 2129/1137/1076\nf 2127/1138/1077 2129/1137/1076 511/984/927\nf 2118/1126/1065 2129/1137/1076 538/1128/1067\nf 2128/1139/1078 538/1128/1067 2129/1137/1076\nf 2012/979/922 71/980/923 2132/1141/1080\nf 2130/1142/1081 2132/1141/1080 71/980/923\nf 2127/1138/1077 2132/1141/1080 543/1140/1079\nf 2131/1143/1082 543/1140/1079 2132/1141/1080\nf 2131/1143/1082 541/1144/1083 2136/1146/1085\nf 2133/1147/1086 2136/1146/1085 541/1144/1083\nf 2135/1145/1084 2136/1146/1085 542/1152/1091\nf 2134/1148/1087 542/1152/1091 2136/1146/1085\nf 2128/1139/1078 543/1140/1079 2138/1150/1089\nf 2135/1145/1084 2138/1150/1089 543/1140/1079\nf 2121/1131/1070 2138/1150/1089 81/1133/1072\nf 2137/1151/1090 81/1133/1072 2138/1150/1089\nf 514/1000/943 2139/1154/1093 2027/999/942\nf 2141/1153/1092 2027/999/942 2139/1154/1093\nf 2130/1142/1081 2141/1153/1092 541/1144/1083\nf 2140/1155/1094 541/1144/1083 2141/1153/1092\nf 72/995/938 2142/1158/1097 2024/996/939\nf 2144/1157/1096 2024/996/939 2142/1158/1097\nf 2144/1157/1096 2143/1160/1099 2139/1154/1093\nf 546/1156/1095 2139/1154/1093 2143/1160/1099\nf 544/1159/1098 2145/1163/1102 2143/1160/1099\nf 2148/1161/1100 2143/1160/1099 2145/1163/1102\nf 2148/1161/1100 2146/1165/1104 2147/1162/1101\nf 545/1168/1107 2147/1162/1101 2146/1165/1104\nf 2140/1155/1094 546/1156/1095 2150/1166/1105\nf 2147/1162/1101 2150/1166/1105 546/1156/1095\nf 2133/1147/1086 2150/1166/1105 82/1149/1088\nf 2149/1167/1106 82/1149/1088 2150/1166/1105\nf 517/1019/958 2151/1172/1109 2039/1020/959\nf 2153/1169/1108 2039/1020/959 2151/1172/1109\nf 2153/1169/1108 2152/1174/1111 2142/1171/1097\nf 544/1185/1098 2142/1171/1097 2152/1174/1111\nf 73/1013/954 2154/1176/1113 2036/1014/955\nf 2156/1175/1112 2036/1014/955 2154/1176/1113\nf 2156/1175/1112 2155/1178/1115 2151/1172/1109\nf 549/1173/1110 2151/1172/1109 2155/1178/1115\nf 547/1177/1114 2157/1181/1118 2155/1178/1115\nf 2160/1179/1116 2155/1178/1115 2157/1181/1118\nf 2160/1179/1116 2158/1183/1120 2159/1180/1117\nf 548/1187/1122 2159/1180/1117 2158/1183/1120\nf 549/1173/1110 2159/1180/1117 2152/1174/1111\nf 2162/1184/1121 2152/1174/1111 2159/1180/1117\nf 2162/1184/1121 2161/1188/1123 2145/1186/1102\nf 83/1338/1103 2145/1186/1102 2161/1188/1123\nf 2051/1035/974 520/1036/975 2165/1189/1124\nf 2163/1190/1125 2165/1189/1124 520/1036/975\nf 2154/1176/1113 2165/1189/1124 547/1177/1114\nf 2164/1191/1126 547/1177/1114 2165/1189/1124\nf 74/1031/970 2166/1194/1129 2048/1032/971\nf 2168/1193/1128 2048/1032/971 2166/1194/1129\nf 2168/1193/1128 2167/1196/1131 2163/1190/1125\nf 552/1192/1127 2163/1190/1125 2167/1196/1131\nf 550/1195/1130 2169/1199/1134 2167/1196/1131\nf 2172/1197/1132 2167/1196/1131 2169/1199/1134\nf 2172/1197/1132 2170/1201/1136 2171/1198/1133\nf 551/1204/1139 2171/1198/1133 2170/1201/1136\nf 2164/1191/1126 552/1192/1127 2174/1202/1137\nf 2171/1198/1133 2174/1202/1137 552/1192/1127\nf 2157/1181/1118 2174/1202/1137 84/1182/1119\nf 2173/1203/1138 84/1182/1119 2174/1202/1137\nf 2063/1051/990 523/1052/991 2177/1205/1140\nf 2175/1206/1141 2177/1205/1140 523/1052/991\nf 2166/1194/1129 2177/1205/1140 550/1195/1130\nf 2176/1207/1142 550/1195/1130 2177/1205/1140\nf 75/1047/986 2178/1210/1145 2060/1048/987\nf 2180/1209/1144 2060/1048/987 2178/1210/1145\nf 2180/1209/1144 2179/1212/1147 2175/1206/1141\nf 555/1208/1143 2175/1206/1141 2179/1212/1147\nf 553/1211/1146 2181/1215/1150 2179/1212/1147\nf 2184/1213/1148 2179/1212/1147 2181/1215/1150\nf 2184/1213/1148 2182/1217/1152 2183/1214/1149\nf 554/1220/1155 2183/1214/1149 2182/1217/1152\nf 2176/1207/1142 555/1208/1143 2186/1218/1153\nf 2183/1214/1149 2186/1218/1153 555/1208/1143\nf 2169/1199/1134 2186/1218/1153 85/1200/1135\nf 2185/1219/1154 85/1200/1135 2186/1218/1153\nf 526/1068/1007 2187/1222/1157 2075/1067/1006\nf 2189/1221/1156 2075/1067/1006 2187/1222/1157\nf 2178/1210/1145 2189/1221/1156 553/1211/1146\nf 2188/1224/1159 553/1211/1146 2189/1221/1156\nf 76/1064/1003 2190/1226/1161 2072/1065/1004\nf 2192/1225/1160 2072/1065/1004 2190/1226/1161\nf 2192/1225/1160 2191/1228/1163 2187/1222/1157\nf 558/1223/1158 2187/1222/1157 2191/1228/1163\nf 556/1227/1162 2193/1231/1166 2191/1228/1163\nf 2196/1229/1164 2191/1228/1163 2193/1231/1166\nf 2196/1229/1164 2194/1233/1168 2195/1230/1165\nf 557/1235/1170 2195/1230/1165 2194/1233/1168\nf 558/1223/1158 2195/1230/1165 2188/1224/1159\nf 2198/1234/1169 2188/1224/1159 2195/1230/1165\nf 2181/1215/1150 2198/1234/1169 86/1216/1151\nf 2197/1236/1171 86/1216/1151 2198/1234/1169\nf 529/1083/1022 2199/1238/1173 2087/1084/1023\nf 2201/1237/1172 2087/1084/1023 2199/1238/1173\nf 2201/1237/1172 2200/1240/1175 2190/1226/1161\nf 556/1227/1162 2190/1226/1161 2200/1240/1175\nf 77/1080/1019 2202/1242/1177 2084/1081/1020\nf 2204/1241/1176 2084/1081/1020 2202/1242/1177\nf 2204/1241/1176 2203/1244/1179 2199/1238/1173\nf 561/1239/1174 2199/1238/1173 2203/1244/1179\nf 559/1243/1178 2205/1247/1182 2203/1244/1179\nf 2208/1245/1180 2203/1244/1179 2205/1247/1182\nf 2208/1245/1180 2206/1249/1184 2207/1246/1181\nf 560/1251/1186 2207/1246/1181 2206/1249/1184\nf 561/1239/1174 2207/1246/1181 2200/1240/1175\nf 2210/1250/1185 2200/1240/1175 2207/1246/1181\nf 2210/1250/1185 2209/1252/1187 2193/1231/1166\nf 87/1232/1167 2193/1231/1166 2209/1252/1187\nf 532/1103/1042 2211/1256/1191 2100/1104/1043\nf 2214/1253/1188 2100/1104/1043 2211/1256/1191\nf 2214/1253/1188 2212/1258/1193 2213/1255/1190\nf 564/1269/1204 2213/1255/1190 2212/1258/1193\nf 79/1098/1037 2215/1260/1195 2097/1099/1038\nf 2217/1259/1194 2097/1099/1038 2215/1260/1195\nf 2217/1259/1194 2216/1262/1197 2211/1256/1191\nf 565/1257/1192 2211/1256/1191 2216/1262/1197\nf 562/1261/1196 2218/1265/1200 2216/1262/1197\nf 2221/1263/1198 2216/1262/1197 2218/1265/1200\nf 2221/1263/1198 2219/1267/1202 2220/1264/1199\nf 563/1271/1206 2220/1264/1199 2219/1267/1202\nf 565/1257/1192 2220/1264/1199 2212/1258/1193\nf 2224/1268/1203 2212/1258/1193 2220/1264/1199\nf 2224/1268/1203 2222/1272/1207 2223/1270/1205\nf 89/1422/1353 2223/1270/1205 2222/1272/1207\nf 536/1119/1058 2225/1274/1209 2113/1120/1059\nf 2227/1273/1208 2113/1120/1059 2225/1274/1209\nf 2227/1273/1208 2226/1276/1211 2215/1260/1195\nf 562/1261/1196 2215/1260/1195 2226/1276/1211\nf 2230/1277/1212 2110/1115/1054 2228/1278/1213\nf 80/1116/1055 2228/1278/1213 2110/1115/1054\nf 2230/1277/1212 2229/1280/1215 2225/1274/1209\nf 568/1275/1210 2225/1274/1209 2229/1280/1215\nf 566/1279/1214 2231/1283/1218 2229/1280/1215\nf 2234/1281/1216 2229/1280/1215 2231/1283/1218\nf 2234/1281/1216 2232/1285/1220 2233/1282/1217\nf 567/1287/1222 2233/1282/1217 2232/1285/1220\nf 568/1275/1210 2233/1282/1217 2226/1276/1211\nf 2236/1286/1221 2226/1276/1211 2233/1282/1217\nf 2236/1286/1221 2235/1288/1223 2218/1265/1200\nf 90/1266/1201 2218/1265/1200 2235/1288/1223\nf 2125/1135/1074 539/1136/1075 2239/1289/1224\nf 2237/1290/1225 2239/1289/1224 539/1136/1075\nf 2228/1278/1213 2239/1289/1224 566/1279/1214\nf 2238/1291/1226 566/1279/1214 2239/1289/1224\nf 2122/1132/1071 81/1133/1072 2242/1293/1228\nf 2240/1294/1229 2242/1293/1228 81/1133/1072\nf 2237/1290/1225 2242/1293/1228 571/1292/1227\nf 2241/1295/1230 571/1292/1227 2242/1293/1228\nf 2241/1295/1230 569/1296/1231 2246/1298/1233\nf 2243/1299/1234 2246/1298/1233 569/1296/1231\nf 2245/1297/1232 2246/1298/1233 570/1304/1239\nf 2244/1300/1235 570/1304/1239 2246/1298/1233\nf 2238/1291/1226 571/1292/1227 2248/1302/1237\nf 2245/1297/1232 2248/1302/1237 571/1292/1227\nf 2231/1283/1218 2248/1302/1237 91/1284/1219\nf 2247/1303/1238 91/1284/1219 2248/1302/1237\nf 2137/1151/1090 542/1152/1091 2251/1305/1240\nf 2249/1306/1241 2251/1305/1240 542/1152/1091\nf 2240/1294/1229 2251/1305/1240 569/1296/1231\nf 2250/1307/1242 569/1296/1231 2251/1305/1240\nf 2134/1148/1087 82/1149/1088 2254/1309/1244\nf 2252/1310/1245 2254/1309/1244 82/1149/1088\nf 2254/1309/1244 2253/1312/1247 2249/1306/1241\nf 574/1308/1243 2249/1306/1241 2253/1312/1247\nf 572/1311/1246 2255/1315/1250 2253/1312/1247\nf 2258/1313/1248 2253/1312/1247 2255/1315/1250\nf 2258/1313/1248 2256/1317/1252 2257/1314/1249\nf 573/1319/1254 2257/1314/1249 2256/1317/1252\nf 574/1308/1243 2257/1314/1249 2250/1307/1242\nf 2260/1318/1253 2250/1307/1242 2257/1314/1249\nf 2260/1318/1253 2259/1320/1255 2243/1299/1234\nf 92/1301/1236 2243/1299/1234 2259/1320/1255\nf 545/1168/1107 2261/1322/1257 2149/1167/1106\nf 2263/1321/1256 2149/1167/1106 2261/1322/1257\nf 2263/1321/1256 2262/1324/1259 2252/1310/1245\nf 572/1311/1246 2252/1310/1245 2262/1324/1259\nf 83/1164/1103 2264/1326/1261 2146/1165/1104\nf 2266/1325/1260 2146/1165/1104 2264/1326/1261\nf 2266/1325/1260 2265/1328/1263 2261/1322/1257\nf 577/1323/1258 2261/1322/1257 2265/1328/1263\nf 575/1327/1262 2267/1331/1266 2265/1328/1263\nf 2270/1329/1264 2265/1328/1263 2267/1331/1266\nf 2270/1329/1264 2268/1333/1268 2269/1330/1265\nf 576/1335/1270 2269/1330/1265 2268/1333/1268\nf 577/1323/1258 2269/1330/1265 2262/1324/1259\nf 2272/1334/1269 2262/1324/1259 2269/1330/1265\nf 2272/1334/1269 2271/1336/1271 2255/1315/1250\nf 93/1316/1251 2255/1315/1250 2271/1336/1271\nf 548/1187/1122 2273/1340/1273 2161/1188/1123\nf 2275/1337/1272 2161/1188/1123 2273/1340/1273\nf 2275/1337/1272 2274/1342/1275 2264/1339/1261\nf 575/1353/1262 2264/1339/1261 2274/1342/1275\nf 84/1182/1119 2276/1344/1277 2158/1183/1120\nf 2278/1343/1276 2158/1183/1120 2276/1344/1277\nf 2278/1343/1276 2277/1346/1279 2273/1340/1273\nf 580/1341/1274 2273/1340/1273 2277/1346/1279\nf 578/1345/1278 2279/1349/1282 2277/1346/1279\nf 2282/1347/1280 2277/1346/1279 2279/1349/1282\nf 2282/1347/1280 2280/1351/1284 2281/1348/1281\nf 579/1356/1287 2281/1348/1281 2280/1351/1284\nf 2274/1342/1275 580/1341/1274 2284/1352/1285\nf 2281/1348/1281 2284/1352/1285 580/1341/1274\nf 2267/1354/1266 2284/1352/1285 94/1505/1267\nf 2283/1355/1286 94/1505/1267 2284/1352/1285\nf 2173/1203/1138 551/1204/1139 2287/1357/1288\nf 2285/1358/1289 2287/1357/1288 551/1204/1139\nf 2276/1344/1277 2287/1357/1288 578/1345/1278\nf 2286/1359/1290 578/1345/1278 2287/1357/1288\nf 85/1200/1135 2288/1362/1293 2170/1201/1136\nf 2290/1361/1292 2170/1201/1136 2288/1362/1293\nf 2290/1361/1292 2289/1364/1295 2285/1358/1289\nf 583/1360/1291 2285/1358/1289 2289/1364/1295\nf 581/1363/1294 2291/1367/1298 2289/1364/1295\nf 2294/1365/1296 2289/1364/1295 2291/1367/1298\nf 2294/1365/1296 2292/1369/1300 2293/1366/1297\nf 582/1372/1303 2293/1366/1297 2292/1369/1300\nf 2286/1359/1290 583/1360/1291 2296/1370/1301\nf 2293/1366/1297 2296/1370/1301 583/1360/1291\nf 2279/1349/1282 2296/1370/1301 95/1350/1283\nf 2295/1371/1302 95/1350/1283 2296/1370/1301\nf 2185/1219/1154 554/1220/1155 2299/1373/1304\nf 2297/1374/1305 2299/1373/1304 554/1220/1155\nf 2288/1362/1293 2299/1373/1304 581/1363/1294\nf 2298/1375/1306 581/1363/1294 2299/1373/1304\nf 86/1216/1151 2300/1378/1309 2182/1217/1152\nf 2302/1377/1308 2182/1217/1152 2300/1378/1309\nf 2302/1377/1308 2301/1380/1311 2297/1374/1305\nf 586/1376/1307 2297/1374/1305 2301/1380/1311\nf 584/1379/1310 2303/1383/1314 2301/1380/1311\nf 2306/1381/1312 2301/1380/1311 2303/1383/1314\nf 2306/1381/1312 2304/1385/1316 2305/1382/1313\nf 585/1388/1319 2305/1382/1313 2304/1385/1316\nf 2298/1375/1306 586/1376/1307 2308/1386/1317\nf 2305/1382/1313 2308/1386/1317 586/1376/1307\nf 2291/1367/1298 2308/1386/1317 96/1368/1299\nf 2307/1387/1318 96/1368/1299 2308/1386/1317\nf 557/1235/1170 2309/1390/1321 2197/1236/1171\nf 2311/1389/1320 2197/1236/1171 2309/1390/1321\nf 2300/1378/1309 2311/1389/1320 584/1379/1310\nf 2310/1392/1323 584/1379/1310 2311/1389/1320\nf 87/1232/1167 2312/1394/1325 2194/1233/1168\nf 2314/1393/1324 2194/1233/1168 2312/1394/1325\nf 2314/1393/1324 2313/1396/1327 2309/1390/1321\nf 589/1391/1322 2309/1390/1321 2313/1396/1327\nf 587/1395/1326 2315/1399/1330 2313/1396/1327\nf 2318/1397/1328 2313/1396/1327 2315/1399/1330\nf 2318/1397/1328 2316/1401/1332 2317/1398/1329\nf 588/1404/1335 2317/1398/1329 2316/1401/1332\nf 589/1391/1322 2317/1398/1329 2310/1392/1323\nf 2320/1402/1333 2310/1392/1323 2317/1398/1329\nf 2303/1383/1314 2320/1402/1333 97/1384/1315\nf 2319/1403/1334 97/1384/1315 2320/1402/1333\nf 560/1251/1186 2321/1406/1337 2209/1252/1187\nf 2323/1405/1336 2209/1252/1187 2321/1406/1337\nf 2323/1405/1336 2322/1408/1339 2312/1394/1325\nf 587/1395/1326 2312/1394/1325 2322/1408/1339\nf 88/1248/1183 2324/1410/1341 2206/1249/1184\nf 2326/1409/1340 2206/1249/1184 2324/1410/1341\nf 2326/1409/1340 2325/1412/1343 2321/1406/1337\nf 592/1407/1338 2321/1406/1337 2325/1412/1343\nf 590/1411/1342 2327/1415/1346 2325/1412/1343\nf 2330/1413/1344 2325/1412/1343 2327/1415/1346\nf 2330/1413/1344 2328/1417/1348 2329/1414/1345\nf 591/1420/1351 2329/1414/1345 2328/1417/1348\nf 592/1407/1338 2329/1414/1345 2322/1408/1339\nf 2332/1418/1349 2322/1408/1339 2329/1414/1345\nf 2315/1399/1330 2332/1418/1349 98/1400/1331\nf 2331/1419/1350 98/1400/1331 2332/1418/1349\nf 563/1271/1206 2333/1424/1355 2222/1272/1207\nf 2336/1421/1352 2222/1272/1207 2333/1424/1355\nf 2335/1423/1354 2336/1421/1352 595/1436/1367\nf 2334/1425/1356 595/1436/1367 2336/1421/1352\nf 90/1266/1201 2337/1428/1359 2219/1267/1202\nf 2339/1427/1358 2219/1267/1202 2337/1428/1359\nf 2333/1424/1355 2339/1427/1358 596/1426/1357\nf 2338/1429/1360 596/1426/1357 2339/1427/1358\nf 2338/1429/1360 593/1430/1361 2343/1432/1363\nf 2340/1433/1364 2343/1432/1363 593/1430/1361\nf 2342/1431/1362 2343/1432/1363 594/1440/1371\nf 2341/1434/1365 594/1440/1371 2343/1432/1363\nf 2334/1425/1356 596/1426/1357 2346/1438/1369\nf 2342/1431/1362 2346/1438/1369 596/1426/1357\nf 2345/1437/1368 2346/1438/1369 100/1589/1516\nf 2344/1439/1370 100/1589/1516 2346/1438/1369\nf 567/1287/1222 2347/1442/1373 2235/1288/1223\nf 2349/1441/1372 2235/1288/1223 2347/1442/1373\nf 2337/1428/1359 2349/1441/1372 593/1430/1361\nf 2348/1443/1374 593/1430/1361 2349/1441/1372\nf 91/1284/1219 2350/1446/1377 2232/1285/1220\nf 2352/1445/1376 2232/1285/1220 2350/1446/1377\nf 2347/1442/1373 2352/1445/1376 599/1444/1375\nf 2351/1447/1378 599/1444/1375 2352/1445/1376\nf 2351/1447/1378 597/1448/1379 2356/1450/1381\nf 2353/1451/1382 2356/1450/1381 597/1448/1379\nf 2355/1449/1380 2356/1450/1381 598/1456/1387\nf 2354/1452/1383 598/1456/1387 2356/1450/1381\nf 2348/1443/1374 599/1444/1375 2358/1454/1385\nf 2355/1449/1380 2358/1454/1385 599/1444/1375\nf 2340/1433/1364 2358/1454/1385 101/1435/1366\nf 2357/1455/1386 101/1435/1366 2358/1454/1385\nf 2247/1303/1238 570/1304/1239 2361/1457/1388\nf 2359/1458/1389 2361/1457/1388 570/1304/1239\nf 2350/1446/1377 2361/1457/1388 597/1448/1379\nf 2360/1459/1390 597/1448/1379 2361/1457/1388\nf 2244/1300/1235 92/1301/1236 2364/1461/1392\nf 2362/1462/1393 2364/1461/1392 92/1301/1236\nf 2359/1458/1389 2364/1461/1392 602/1460/1391\nf 2363/1463/1394 602/1460/1391 2364/1461/1392\nf 2363/1463/1394 600/1464/1395 2368/1466/1397\nf 2365/1467/1398 2368/1466/1397 600/1464/1395\nf 2367/1465/1396 2368/1466/1397 601/1472/1403\nf 2366/1468/1399 601/1472/1403 2368/1466/1397\nf 2360/1459/1390 602/1460/1391 2370/1470/1401\nf 2367/1465/1396 2370/1470/1401 602/1460/1391\nf 2353/1451/1382 2370/1470/1401 102/1453/1384\nf 2369/1471/1402 102/1453/1384 2370/1470/1401\nf 573/1319/1254 2371/1474/1405 2259/1320/1255\nf 2373/1473/1404 2259/1320/1255 2371/1474/1405\nf 2362/1462/1393 2373/1473/1404 600/1464/1395\nf 2372/1475/1406 600/1464/1395 2373/1473/1404\nf 93/1316/1251 2374/1478/1409 2256/1317/1252\nf 2376/1477/1408 2256/1317/1252 2374/1478/1409\nf 2371/1474/1405 2376/1477/1408 605/1476/1407\nf 2375/1479/1410 605/1476/1407 2376/1477/1408\nf 2375/1479/1410 603/1480/1411 2380/1482/1413\nf 2377/1483/1414 2380/1482/1413 603/1480/1411\nf 2379/1481/1412 2380/1482/1413 604/1488/1419\nf 2378/1484/1415 604/1488/1419 2380/1482/1413\nf 2372/1475/1406 605/1476/1407 2382/1486/1417\nf 2379/1481/1412 2382/1486/1417 605/1476/1407\nf 2365/1467/1398 2382/1486/1417 103/1469/1400\nf 2381/1487/1418 103/1469/1400 2382/1486/1417\nf 576/1335/1270 2383/1490/1421 2271/1336/1271\nf 2385/1489/1420 2271/1336/1271 2383/1490/1421\nf 2374/1478/1409 2385/1489/1420 603/1480/1411\nf 2384/1491/1422 603/1480/1411 2385/1489/1420\nf 94/1332/1267 2386/1494/1425 2268/1333/1268\nf 2388/1493/1424 2268/1333/1268 2386/1494/1425\nf 2383/1490/1421 2388/1493/1424 608/1492/1423\nf 2387/1495/1426 608/1492/1423 2388/1493/1424\nf 2387/1495/1426 606/1496/1427 2392/1498/1429\nf 2389/1499/1430 2392/1498/1429 606/1496/1427\nf 2391/1497/1428 2392/1498/1429 607/1504/1435\nf 2390/1500/1431 607/1504/1435 2392/1498/1429\nf 2384/1491/1422 608/1492/1423 2394/1502/1433\nf 2391/1497/1428 2394/1502/1433 608/1492/1423\nf 2377/1483/1414 2394/1502/1433 104/1485/1416\nf 2393/1503/1434 104/1485/1416 2394/1502/1433\nf 2283/1355/1286 579/1356/1287 2397/1507/1436\nf 2395/1508/1437 2397/1507/1436 579/1356/1287\nf 2386/1506/1425 2397/1507/1436 606/1520/1427\nf 2396/1509/1438 606/1520/1427 2397/1507/1436\nf 95/1350/1283 2398/1512/1441 2280/1351/1284\nf 2400/1511/1440 2280/1351/1284 2398/1512/1441\nf 2395/1508/1437 2400/1511/1440 611/1510/1439\nf 2399/1513/1442 611/1510/1439 2400/1511/1440\nf 2399/1513/1442 609/1514/1443 2404/1516/1445\nf 2401/1517/1446 2404/1516/1445 609/1514/1443\nf 2403/1515/1444 2404/1516/1445 610/1524/1451\nf 2402/1518/1447 610/1524/1451 2404/1516/1445\nf 2396/1509/1438 611/1510/1439 2406/1522/1449\nf 2403/1515/1444 2406/1522/1449 611/1510/1439\nf 2389/1521/1430 2406/1522/1449 105/1673/1432\nf 2405/1523/1450 105/1673/1432 2406/1522/1449\nf 2295/1371/1302 582/1372/1303 2409/1525/1452\nf 2407/1526/1453 2409/1525/1452 582/1372/1303\nf 2398/1512/1441 2409/1525/1452 609/1514/1443\nf 2408/1527/1454 609/1514/1443 2409/1525/1452\nf 96/1368/1299 2410/1530/1457 2292/1369/1300\nf 2412/1529/1456 2292/1369/1300 2410/1530/1457\nf 2407/1526/1453 2412/1529/1456 614/1528/1455\nf 2411/1531/1458 614/1528/1455 2412/1529/1456\nf 2411/1531/1458 612/1532/1459 2416/1534/1461\nf 2413/1535/1462 2416/1534/1461 612/1532/1459\nf 2415/1533/1460 2416/1534/1461 613/1540/1467\nf 2414/1536/1463 613/1540/1467 2416/1534/1461\nf 2408/1527/1454 614/1528/1455 2418/1538/1465\nf 2415/1533/1460 2418/1538/1465 614/1528/1455\nf 2401/1517/1446 2418/1538/1465 106/1519/1448\nf 2417/1539/1466 106/1519/1448 2418/1538/1465\nf 2307/1387/1318 585/1388/1319 2421/1541/1468\nf 2419/1542/1469 2421/1541/1468 585/1388/1319\nf 2410/1530/1457 2421/1541/1468 612/1532/1459\nf 2420/1543/1470 612/1532/1459 2421/1541/1468\nf 97/1384/1315 2422/1546/1473 2304/1385/1316\nf 2424/1545/1472 2304/1385/1316 2422/1546/1473\nf 2419/1542/1469 2424/1545/1472 617/1544/1471\nf 2423/1547/1474 617/1544/1471 2424/1545/1472\nf 2423/1547/1474 615/1548/1475 2428/1550/1477\nf 2425/1551/1478 2428/1550/1477 615/1548/1475\nf 2427/1549/1476 2428/1550/1477 616/1556/1483\nf 2426/1552/1479 616/1556/1483 2428/1550/1477\nf 2420/1543/1470 617/1544/1471 2430/1554/1481\nf 2427/1549/1476 2430/1554/1481 617/1544/1471\nf 2413/1535/1462 2430/1554/1481 107/1537/1464\nf 2429/1555/1482 107/1537/1464 2430/1554/1481\nf 2319/1403/1334 588/1404/1335 2433/1557/1484\nf 2431/1558/1485 2433/1557/1484 588/1404/1335\nf 2422/1546/1473 2433/1557/1484 615/1548/1475\nf 2432/1559/1486 615/1548/1475 2433/1557/1484\nf 98/1400/1331 2434/1562/1489 2316/1401/1332\nf 2436/1561/1488 2316/1401/1332 2434/1562/1489\nf 2431/1558/1485 2436/1561/1488 620/1560/1487\nf 2435/1563/1490 620/1560/1487 2436/1561/1488\nf 2435/1563/1490 618/1564/1491 2440/1566/1493\nf 2437/1567/1494 2440/1566/1493 618/1564/1491\nf 2439/1565/1492 2440/1566/1493 619/1572/1499\nf 2438/1568/1495 619/1572/1499 2440/1566/1493\nf 2432/1559/1486 620/1560/1487 2442/1570/1497\nf 2439/1565/1492 2442/1570/1497 620/1560/1487\nf 2425/1551/1478 2442/1570/1497 108/1553/1480\nf 2441/1571/1498 108/1553/1480 2442/1570/1497\nf 2331/1419/1350 591/1420/1351 2445/1573/1500\nf 2443/1574/1501 2445/1573/1500 591/1420/1351\nf 2434/1562/1489 2445/1573/1500 618/1564/1491\nf 2444/1575/1502 618/1564/1491 2445/1573/1500\nf 99/1416/1347 2446/1578/1505 2328/1417/1348\nf 2448/1577/1504 2328/1417/1348 2446/1578/1505\nf 2443/1574/1501 2448/1577/1504 623/1576/1503\nf 2447/1579/1506 623/1576/1503 2448/1577/1504\nf 2447/1579/1506 621/1580/1507 2452/1582/1509\nf 2449/1583/1510 2452/1582/1509 621/1580/1507\nf 2451/1581/1508 2452/1582/1509 622/1588/1515\nf 2450/1584/1511 622/1588/1515 2452/1582/1509\nf 2444/1575/1502 623/1576/1503 2454/1586/1513\nf 2451/1581/1508 2454/1586/1513 623/1576/1503\nf 2437/1567/1494 2454/1586/1513 109/1569/1496\nf 2453/1587/1514 109/1569/1496 2454/1586/1513\nf 2344/1439/1370 594/1440/1371 2458/1591/1518\nf 2455/1592/1519 2458/1591/1518 594/1440/1371\nf 2457/1590/1517 2458/1591/1518 626/1604/1531\nf 2456/1593/1520 626/1604/1531 2458/1591/1518\nf 2341/1434/1365 101/1435/1366 2461/1595/1522\nf 2459/1596/1523 2461/1595/1522 101/1435/1366\nf 2455/1592/1519 2461/1595/1522 627/1594/1521\nf 2460/1597/1524 627/1594/1521 2461/1595/1522\nf 2460/1597/1524 624/1598/1525 2465/1600/1527\nf 2462/1601/1528 2465/1600/1527 624/1598/1525\nf 2464/1599/1526 2465/1600/1527 625/1608/1535\nf 2463/1602/1529 625/1608/1535 2465/1600/1527\nf 2456/1593/1520 627/1594/1521 2468/1606/1533\nf 2464/1599/1526 2468/1606/1533 627/1594/1521\nf 2467/1605/1532 2468/1606/1533 111/1758/1681\nf 2466/1607/1534 111/1758/1681 2468/1606/1533\nf 2357/1455/1386 598/1456/1387 2471/1609/1536\nf 2469/1610/1537 2471/1609/1536 598/1456/1387\nf 2459/1596/1523 2471/1609/1536 624/1598/1525\nf 2470/1611/1538 624/1598/1525 2471/1609/1536\nf 2354/1452/1383 102/1453/1384 2474/1613/1540\nf 2472/1614/1541 2474/1613/1540 102/1453/1384\nf 2469/1610/1537 2474/1613/1540 630/1612/1539\nf 2473/1615/1542 630/1612/1539 2474/1613/1540\nf 2473/1615/1542 628/1616/1543 2478/1618/1545\nf 2475/1619/1546 2478/1618/1545 628/1616/1543\nf 2477/1617/1544 2478/1618/1545 629/1624/1551\nf 2476/1620/1547 629/1624/1551 2478/1618/1545\nf 2470/1611/1538 630/1612/1539 2480/1622/1549\nf 2477/1617/1544 2480/1622/1549 630/1612/1539\nf 2462/1601/1528 2480/1622/1549 112/1603/1530\nf 2479/1623/1550 112/1603/1530 2480/1622/1549\nf 2369/1471/1402 601/1472/1403 2483/1625/1552\nf 2481/1626/1553 2483/1625/1552 601/1472/1403\nf 2472/1614/1541 2483/1625/1552 628/1616/1543\nf 2482/1627/1554 628/1616/1543 2483/1625/1552\nf 2366/1468/1399 103/1469/1400 2486/1629/1556\nf 2484/1630/1557 2486/1629/1556 103/1469/1400\nf 2481/1626/1553 2486/1629/1556 633/1628/1555\nf 2485/1631/1558 633/1628/1555 2486/1629/1556\nf 2485/1631/1558 631/1632/1559 2490/1634/1561\nf 2487/1635/1562 2490/1634/1561 631/1632/1559\nf 2489/1633/1560 2490/1634/1561 632/1640/1567\nf 2488/1636/1563 632/1640/1567 2490/1634/1561\nf 2482/1627/1554 633/1628/1555 2492/1638/1565\nf 2489/1633/1560 2492/1638/1565 633/1628/1555\nf 2475/1619/1546 2492/1638/1565 113/1621/1548\nf 2491/1639/1566 113/1621/1548 2492/1638/1565\nf 2381/1487/1418 604/1488/1419 2495/1641/1568\nf 2493/1642/1569 2495/1641/1568 604/1488/1419\nf 2484/1630/1557 2495/1641/1568 631/1632/1559\nf 2494/1643/1570 631/1632/1559 2495/1641/1568\nf 2378/1484/1415 104/1485/1416 2498/1645/1572\nf 2496/1646/1573 2498/1645/1572 104/1485/1416\nf 2493/1642/1569 2498/1645/1572 636/1644/1571\nf 2497/1647/1574 636/1644/1571 2498/1645/1572\nf 2497/1647/1574 634/1648/1575 2502/1650/1577\nf 2499/1651/1578 2502/1650/1577 634/1648/1575\nf 2501/1649/1576 2502/1650/1577 635/1656/1583\nf 2500/1652/1579 635/1656/1583 2502/1650/1577\nf 2494/1643/1570 636/1644/1571 2504/1654/1581\nf 2501/1649/1576 2504/1654/1581 636/1644/1571\nf 2487/1635/1562 2504/1654/1581 114/1637/1564\nf 2503/1655/1582 114/1637/1564 2504/1654/1581\nf 2393/1503/1434 607/1504/1435 2507/1657/1584\nf 2505/1658/1585 2507/1657/1584 607/1504/1435\nf 2496/1646/1573 2507/1657/1584 634/1648/1575\nf 2506/1659/1586 634/1648/1575 2507/1657/1584\nf 2390/1500/1431 105/1501/1432 2510/1661/1588\nf 2508/1662/1589 2510/1661/1588 105/1501/1432\nf 2505/1658/1585 2510/1661/1588 639/1660/1587\nf 2509/1663/1590 639/1660/1587 2510/1661/1588\nf 2509/1663/1590 637/1664/1591 2514/1666/1593\nf 2511/1667/1594 2514/1666/1593 637/1664/1591\nf 2513/1665/1592 2514/1666/1593 638/1672/1599\nf 2512/1668/1595 638/1672/1599 2514/1666/1593\nf 2506/1659/1586 639/1660/1587 2516/1670/1597\nf 2513/1665/1592 2516/1670/1597 639/1660/1587\nf 2499/1651/1578 2516/1670/1597 115/1653/1580\nf 2515/1671/1598 115/1653/1580 2516/1670/1597\nf 2405/1523/1450 610/1524/1451 2519/1675/1600\nf 2517/1676/1601 2519/1675/1600 610/1524/1451\nf 2508/1674/1589 2519/1675/1600 637/1688/1591\nf 2518/1677/1602 637/1688/1591 2519/1675/1600\nf 2402/1518/1447 106/1519/1448 2522/1679/1604\nf 2520/1680/1605 2522/1679/1604 106/1519/1448\nf 2517/1676/1601 2522/1679/1604 642/1678/1603\nf 2521/1681/1606 642/1678/1603 2522/1679/1604\nf 2521/1681/1606 640/1682/1607 2526/1684/1609\nf 2523/1685/1610 2526/1684/1609 640/1682/1607\nf 2525/1683/1608 2526/1684/1609 641/1692/1615\nf 2524/1686/1611 641/1692/1615 2526/1684/1609\nf 2518/1677/1602 642/1678/1603 2528/1690/1613\nf 2525/1683/1608 2528/1690/1613 642/1678/1603\nf 2511/1689/1594 2528/1690/1613 116/1841/1596\nf 2527/1691/1614 116/1841/1596 2528/1690/1613\nf 2417/1539/1466 613/1540/1467 2531/1693/1616\nf 2529/1694/1617 2531/1693/1616 613/1540/1467\nf 2520/1680/1605 2531/1693/1616 640/1682/1607\nf 2530/1695/1618 640/1682/1607 2531/1693/1616\nf 2414/1536/1463 107/1537/1464 2534/1697/1620\nf 2532/1698/1621 2534/1697/1620 107/1537/1464\nf 2529/1694/1617 2534/1697/1620 645/1696/1619\nf 2533/1699/1622 645/1696/1619 2534/1697/1620\nf 2533/1699/1622 643/1700/1623 2538/1702/1625\nf 2535/1703/1626 2538/1702/1625 643/1700/1623\nf 2537/1701/1624 2538/1702/1625 644/1708/1631\nf 2536/1704/1627 644/1708/1631 2538/1702/1625\nf 2530/1695/1618 645/1696/1619 2540/1706/1629\nf 2537/1701/1624 2540/1706/1629 645/1696/1619\nf 2523/1685/1610 2540/1706/1629 117/1687/1612\nf 2539/1707/1630 117/1687/1612 2540/1706/1629\nf 2429/1555/1482 616/1556/1483 2543/1709/1632\nf 2541/1710/1633 2543/1709/1632 616/1556/1483\nf 2532/1698/1621 2543/1709/1632 643/1700/1623\nf 2542/1711/1634 643/1700/1623 2543/1709/1632\nf 2426/1552/1479 108/1553/1480 2546/1713/1636\nf 2544/1714/1637 2546/1713/1636 108/1553/1480\nf 2541/1710/1633 2546/1713/1636 648/1712/1635\nf 2545/1715/1638 648/1712/1635 2546/1713/1636\nf 2545/1715/1638 646/1716/1639 2550/1718/1641\nf 2547/1719/1642 2550/1718/1641 646/1716/1639\nf 2549/1717/1640 2550/1718/1641 647/1724/1647\nf 2548/1720/1643 647/1724/1647 2550/1718/1641\nf 2542/1711/1634 648/1712/1635 2552/1722/1645\nf 2549/1717/1640 2552/1722/1645 648/1712/1635\nf 2535/1703/1626 2552/1722/1645 118/1705/1628\nf 2551/1723/1646 118/1705/1628 2552/1722/1645\nf 2441/1571/1498 619/1572/1499 2555/1725/1648\nf 2553/1726/1649 2555/1725/1648 619/1572/1499\nf 2544/1714/1637 2555/1725/1648 646/1716/1639\nf 2554/1727/1650 646/1716/1639 2555/1725/1648\nf 2438/1568/1495 109/1569/1496 2558/1729/1652\nf 2556/1730/1653 2558/1729/1652 109/1569/1496\nf 2553/1726/1649 2558/1729/1652 651/1728/1651\nf 2557/1731/1654 651/1728/1651 2558/1729/1652\nf 2557/1731/1654 649/1732/1655 2562/1734/1657\nf 2559/1735/1658 2562/1734/1657 649/1732/1655\nf 2561/1733/1656 2562/1734/1657 650/1740/1663\nf 2560/1736/1659 650/1740/1663 2562/1734/1657\nf 2554/1727/1650 651/1728/1651 2564/1738/1661\nf 2561/1733/1656 2564/1738/1661 651/1728/1651\nf 2547/1719/1642 2564/1738/1661 119/1721/1644\nf 2563/1739/1662 119/1721/1644 2564/1738/1661\nf 2453/1587/1514 622/1588/1515 2567/1741/1664\nf 2565/1742/1665 2567/1741/1664 622/1588/1515\nf 2556/1730/1653 2567/1741/1664 649/1732/1655\nf 2566/1743/1666 649/1732/1655 2567/1741/1664\nf 2450/1584/1511 110/1585/1512 2570/1745/1668\nf 2568/1746/1669 2570/1745/1668 110/1585/1512\nf 2565/1742/1665 2570/1745/1668 654/1744/1667\nf 2569/1747/1670 654/1744/1667 2570/1745/1668\nf 2569/1747/1670 652/1748/1671 2574/1750/1673\nf 2571/1751/1674 2574/1750/1673 652/1748/1671\nf 2573/1749/1672 2574/1750/1673 653/1756/1679\nf 2572/1752/1675 653/1756/1679 2574/1750/1673\nf 2566/1743/1666 654/1744/1667 2576/1754/1677\nf 2573/1749/1672 2576/1754/1677 654/1744/1667\nf 2559/1735/1658 2576/1754/1677 120/1737/1660\nf 2575/1755/1678 120/1737/1660 2576/1754/1677\nf 625/1608/1535 2577/1760/1683 2466/1607/1534\nf 2580/1757/1680 2466/1607/1534 2577/1760/1683\nf 2580/1757/1680 2578/1762/1685 2579/1759/1682\nf 657/1773/1696 2579/1759/1682 2578/1762/1685\nf 112/1603/1530 2581/1764/1687 2463/1602/1529\nf 2583/1763/1686 2463/1602/1529 2581/1764/1687\nf 2583/1763/1686 2582/1766/1689 2577/1760/1683\nf 658/1761/1684 2577/1760/1683 2582/1766/1689\nf 655/1765/1688 2584/1769/1692 2582/1766/1689\nf 2587/1767/1690 2582/1766/1689 2584/1769/1692\nf 2587/1767/1690 2585/1771/1694 2586/1768/1691\nf 656/1775/1698 2586/1768/1691 2585/1771/1694\nf 658/1761/1684 2586/1768/1691 2578/1762/1685\nf 2590/1772/1695 2578/1762/1685 2586/1768/1691\nf 2590/1772/1695 2588/1776/1699 2589/1774/1697\nf 122/1926/1845 2589/1774/1697 2588/1776/1699\nf 2479/1623/1550 629/1624/1551 2593/1777/1700\nf 2591/1778/1701 2593/1777/1700 629/1624/1551\nf 2593/1777/1700 2592/1780/1703 2581/1764/1687\nf 655/1765/1688 2581/1764/1687 2592/1780/1703\nf 113/1621/1548 2594/1782/1705 2476/1620/1547\nf 2596/1781/1704 2476/1620/1547 2594/1782/1705\nf 2596/1781/1704 2595/1784/1707 2591/1778/1701\nf 661/1779/1702 2591/1778/1701 2595/1784/1707\nf 659/1783/1706 2597/1787/1710 2595/1784/1707\nf 2600/1785/1708 2595/1784/1707 2597/1787/1710\nf 2600/1785/1708 2598/1789/1712 2599/1786/1709\nf 660/1791/1714 2599/1786/1709 2598/1789/1712\nf 661/1779/1702 2599/1786/1709 2592/1780/1703\nf 2602/1790/1713 2592/1780/1703 2599/1786/1709\nf 2602/1790/1713 2601/1792/1715 2584/1769/1692\nf 123/1770/1693 2584/1769/1692 2601/1792/1715\nf 2491/1639/1566 632/1640/1567 2605/1793/1716\nf 2603/1794/1717 2605/1793/1716 632/1640/1567\nf 2605/1793/1716 2604/1796/1719 2594/1782/1705\nf 659/1783/1706 2594/1782/1705 2604/1796/1719\nf 114/1637/1564 2606/1798/1721 2488/1636/1563\nf 2608/1797/1720 2488/1636/1563 2606/1798/1721\nf 2608/1797/1720 2607/1800/1723 2603/1794/1717\nf 664/1795/1718 2603/1794/1717 2607/1800/1723\nf 662/1799/1722 2609/1803/1726 2607/1800/1723\nf 2612/1801/1724 2607/1800/1723 2609/1803/1726\nf 2612/1801/1724 2610/1805/1728 2611/1802/1725\nf 663/1807/1730 2611/1802/1725 2610/1805/1728\nf 664/1795/1718 2611/1802/1725 2604/1796/1719\nf 2614/1806/1729 2604/1796/1719 2611/1802/1725\nf 2614/1806/1729 2613/1808/1731 2597/1787/1710\nf 124/1788/1711 2597/1787/1710 2613/1808/1731\nf 2503/1655/1582 635/1656/1583 2617/1809/1732\nf 2615/1810/1733 2617/1809/1732 635/1656/1583\nf 2606/1798/1721 2617/1809/1732 662/1799/1722\nf 2616/1811/1734 662/1799/1722 2617/1809/1732\nf 115/1653/1580 2618/1814/1737 2500/1652/1579\nf 2620/1813/1736 2500/1652/1579 2618/1814/1737\nf 2620/1813/1736 2619/1816/1739 2615/1810/1733\nf 667/1812/1735 2615/1810/1733 2619/1816/1739\nf 665/1815/1738 2621/1819/1742 2619/1816/1739\nf 2624/1817/1740 2619/1816/1739 2621/1819/1742\nf 2624/1817/1740 2622/1821/1744 2623/1818/1741\nf 666/1823/1746 2623/1818/1741 2622/1821/1744\nf 2616/1811/1734 667/1812/1735 2626/1822/1745\nf 2623/1818/1741 2626/1822/1745 667/1812/1735\nf 2626/1822/1745 2625/1824/1747 2609/1803/1726\nf 125/1804/1727 2609/1803/1726 2625/1824/1747\nf 2515/1671/1598 638/1672/1599 2629/1825/1748\nf 2627/1826/1749 2629/1825/1748 638/1672/1599\nf 2618/1814/1737 2629/1825/1748 665/1815/1738\nf 2628/1827/1750 665/1815/1738 2629/1825/1748\nf 116/1669/1596 2630/1830/1753 2512/1668/1595\nf 2632/1829/1752 2512/1668/1595 2630/1830/1753\nf 2632/1829/1752 2631/1832/1755 2627/1826/1749\nf 670/1828/1751 2627/1826/1749 2631/1832/1755\nf 668/1831/1754 2633/1835/1758 2631/1832/1755\nf 2636/1833/1756 2631/1832/1755 2633/1835/1758\nf 2636/1833/1756 2634/1837/1760 2635/1834/1757\nf 669/1840/1763 2635/1834/1757 2634/1837/1760\nf 2628/1827/1750 670/1828/1751 2638/1838/1761\nf 2635/1834/1757 2638/1838/1761 670/1828/1751\nf 2621/1819/1742 2638/1838/1761 126/1820/1743\nf 2637/1839/1762 126/1820/1743 2638/1838/1761\nf 2527/1691/1614 641/1692/1615 2641/1843/1764\nf 2639/1844/1765 2641/1843/1764 641/1692/1615\nf 2630/1842/1753 2641/1843/1764 668/1856/1754\nf 2640/1845/1766 668/1856/1754 2641/1843/1764\nf 117/1687/1612 2642/1848/1769 2524/1686/1611\nf 2644/1847/1768 2524/1686/1611 2642/1848/1769\nf 2644/1847/1768 2643/1850/1771 2639/1844/1765\nf 673/1846/1767 2639/1844/1765 2643/1850/1771\nf 671/1849/1770 2645/1853/1774 2643/1850/1771\nf 2648/1851/1772 2643/1850/1771 2645/1853/1774\nf 2648/1851/1772 2646/1855/1776 2647/1852/1773\nf 672/1860/1779 2647/1852/1773 2646/1855/1776\nf 2640/1845/1766 673/1846/1767 2650/1858/1777\nf 2647/1852/1773 2650/1858/1777 673/1846/1767\nf 2633/1857/1758 2650/1858/1777 127/1990/1759\nf 2649/1859/1778 127/1990/1759 2650/1858/1777\nf 2539/1707/1630 644/1708/1631 2653/1861/1780\nf 2651/1862/1781 2653/1861/1780 644/1708/1631\nf 2642/1848/1769 2653/1861/1780 671/1849/1770\nf 2652/1863/1782 671/1849/1770 2653/1861/1780\nf 118/1705/1628 2654/1866/1785 2536/1704/1627\nf 2656/1865/1784 2536/1704/1627 2654/1866/1785\nf 2656/1865/1784 2655/1868/1787 2651/1862/1781\nf 676/1864/1783 2651/1862/1781 2655/1868/1787\nf 674/1867/1786 2657/1871/1790 2655/1868/1787\nf 2660/1869/1788 2655/1868/1787 2657/1871/1790\nf 2660/1869/1788 2658/1873/1792 2659/1870/1789\nf 675/1876/1795 2659/1870/1789 2658/1873/1792\nf 2652/1863/1782 676/1864/1783 2662/1874/1793\nf 2659/1870/1789 2662/1874/1793 676/1864/1783\nf 2645/1853/1774 2662/1874/1793 128/1854/1775\nf 2661/1875/1794 128/1854/1775 2662/1874/1793\nf 2551/1723/1646 647/1724/1647 2665/1877/1796\nf 2663/1878/1797 2665/1877/1796 647/1724/1647\nf 2654/1866/1785 2665/1877/1796 674/1867/1786\nf 2664/1879/1798 674/1867/1786 2665/1877/1796\nf 119/1721/1644 2666/1882/1801 2548/1720/1643\nf 2668/1881/1800 2548/1720/1643 2666/1882/1801\nf 2668/1881/1800 2667/1884/1803 2663/1878/1797\nf 679/1880/1799 2663/1878/1797 2667/1884/1803\nf 677/1883/1802 2669/1887/1806 2667/1884/1803\nf 2672/1885/1804 2667/1884/1803 2669/1887/1806\nf 2672/1885/1804 2670/1889/1808 2671/1886/1805\nf 678/1892/1811 2671/1886/1805 2670/1889/1808\nf 2664/1879/1798 679/1880/1799 2674/1890/1809\nf 2671/1886/1805 2674/1890/1809 679/1880/1799\nf 2657/1871/1790 2674/1890/1809 129/1872/1791\nf 2673/1891/1810 129/1872/1791 2674/1890/1809\nf 2563/1739/1662 650/1740/1663 2677/1893/1812\nf 2675/1894/1813 2677/1893/1812 650/1740/1663\nf 2666/1882/1801 2677/1893/1812 677/1883/1802\nf 2676/1895/1814 677/1883/1802 2677/1893/1812\nf 120/1737/1660 2678/1898/1817 2560/1736/1659\nf 2680/1897/1816 2560/1736/1659 2678/1898/1817\nf 2680/1897/1816 2679/1900/1819 2675/1894/1813\nf 682/1896/1815 2675/1894/1813 2679/1900/1819\nf 680/1899/1818 2681/1903/1822 2679/1900/1819\nf 2684/1901/1820 2679/1900/1819 2681/1903/1822\nf 2684/1901/1820 2682/1905/1824 2683/1902/1821\nf 681/1908/1827 2683/1902/1821 2682/1905/1824\nf 2676/1895/1814 682/1896/1815 2686/1906/1825\nf 2683/1902/1821 2686/1906/1825 682/1896/1815\nf 2669/1887/1806 2686/1906/1825 130/1888/1807\nf 2685/1907/1826 130/1888/1807 2686/1906/1825\nf 2575/1755/1678 653/1756/1679 2689/1909/1828\nf 2687/1910/1829 2689/1909/1828 653/1756/1679\nf 2678/1898/1817 2689/1909/1828 680/1899/1818\nf 2688/1911/1830 680/1899/1818 2689/1909/1828\nf 121/1753/1676 2690/1914/1833 2572/1752/1675\nf 2692/1913/1832 2572/1752/1675 2690/1914/1833\nf 2692/1913/1832 2691/1916/1835 2687/1910/1829\nf 685/1912/1831 2687/1910/1829 2691/1916/1835\nf 683/1915/1834 2693/1919/1838 2691/1916/1835\nf 2696/1917/1836 2691/1916/1835 2693/1919/1838\nf 2696/1917/1836 2694/1921/1840 2695/1918/1837\nf 684/1924/1843 2695/1918/1837 2694/1921/1840\nf 2688/1911/1830 685/1912/1831 2698/1922/1841\nf 2695/1918/1837 2698/1922/1841 685/1912/1831\nf 2681/1903/1822 2698/1922/1841 131/1904/1823\nf 2697/1923/1842 131/1904/1823 2698/1922/1841\nf 656/1775/1698 2699/1928/1847 2588/1776/1699\nf 2702/1925/1844 2588/1776/1699 2699/1928/1847\nf 2702/1925/1844 2700/1930/1849 2701/1927/1846\nf 687/1938/1857 2701/1927/1846 2700/1930/1849\nf 123/1770/1693 2703/1932/1851 2585/1771/1694\nf 2705/1931/1850 2585/1771/1694 2703/1932/1851\nf 2705/1931/1850 2704/1934/1853 2699/1928/1847\nf 688/1929/1848 2699/1928/1847 2704/1934/1853\nf 2704/1934/1853 686/1933/1852 2708/1936/1855\nf 2706/1937/1856 2708/1936/1855 686/1933/1852\nf 2707/1935/1854 2708/1936/1855 335/10/10\nf 1342/9/9 335/10/10 2708/1936/1855\nf 2700/1930/1849 688/1929/1848 2710/1940/1859\nf 2707/1935/1854 2710/1940/1859 688/1929/1848\nf 2709/1939/1858 2710/1940/1859 1/4/4\nf 1337/3/3 1/4/4 2710/1940/1859\nf 660/1791/1714 2711/1942/1861 2601/1792/1715\nf 2713/1941/1860 2601/1792/1715 2711/1942/1861\nf 2713/1941/1860 2712/1944/1863 2703/1932/1851\nf 686/1933/1852 2703/1932/1851 2712/1944/1863\nf 124/1788/1711 2714/1946/1865 2598/1789/1712\nf 2716/1945/1864 2598/1789/1712 2714/1946/1865\nf 2716/1945/1864 2715/1948/1867 2711/1942/1861\nf 690/1943/1862 2711/1942/1861 2715/1948/1867\nf 689/1947/1866 2717/1951/1870 2715/1948/1867\nf 2719/1949/1868 2715/1948/1867 2717/1951/1870\nf 2718/1950/1869 2719/1949/1868 340/32/32\nf 1357/31/31 340/32/32 2719/1949/1868\nf 690/1943/1862 2718/1950/1869 2712/1944/1863\nf 2720/1952/1871 2712/1944/1863 2718/1950/1869\nf 2706/1937/1856 2720/1952/1871 2/26/26\nf 1353/25/25 2/26/26 2720/1952/1871\nf 663/1807/1730 2721/1954/1873 2613/1808/1731\nf 2723/1953/1872 2613/1808/1731 2721/1954/1873\nf 2723/1953/1872 2722/1956/1875 2714/1946/1865\nf 689/1947/1866 2714/1946/1865 2722/1956/1875\nf 125/1804/1727 2724/1958/1877 2610/1805/1728\nf 2726/1957/1876 2610/1805/1728 2724/1958/1877\nf 2726/1957/1876 2725/1960/1879 2721/1954/1873\nf 692/1955/1874 2721/1954/1873 2725/1960/1879\nf 691/1959/1878 2727/1963/1882 2725/1960/1879\nf 2729/1961/1880 2725/1960/1879 2727/1963/1882\nf 2728/1962/1881 2729/1961/1880 344/52/52\nf 1371/51/51 344/52/52 2729/1961/1880\nf 692/1955/1874 2728/1962/1881 2722/1956/1875\nf 2730/1964/1883 2722/1956/1875 2728/1962/1881\nf 2717/1951/1870 2730/1964/1883 3/46/46\nf 1367/45/45 3/46/46 2730/1964/1883\nf 666/1823/1746 2731/1966/1885 2625/1824/1747\nf 2733/1965/1884 2625/1824/1747 2731/1966/1885\nf 2733/1965/1884 2732/1968/1887 2724/1958/1877\nf 691/1959/1878 2724/1958/1877 2732/1968/1887\nf 126/1820/1743 2734/1970/1889 2622/1821/1744\nf 2736/1969/1888 2622/1821/1744 2734/1970/1889\nf 2736/1969/1888 2735/1972/1891 2731/1966/1885\nf 694/1967/1886 2731/1966/1885 2735/1972/1891\nf 693/1971/1890 2737/1975/1894 2735/1972/1891\nf 2739/1973/1892 2735/1972/1891 2737/1975/1894\nf 2739/1973/1892 1385/72/72 2738/1974/1893\nf 348/70/70 2738/1974/1893 1385/72/72\nf 694/1967/1886 2738/1974/1893 2732/1968/1887\nf 2740/1976/1895 2732/1968/1887 2738/1974/1893\nf 2740/1976/1895 1381/65/65 2727/1963/1882\nf 4/66/66 2727/1963/1882 1381/65/65\nf 2637/1839/1762 669/1840/1763 2743/1977/1896\nf 2741/1978/1897 2743/1977/1896 669/1840/1763\nf 2743/1977/1896 2742/1979/1898 2734/1970/1889\nf 693/1971/1890 2734/1970/1889 2742/1979/1898\nf 127/1836/1759 2744/1982/1901 2634/1837/1760\nf 2746/1981/1900 2634/1837/1760 2744/1982/1901\nf 2746/1981/1900 2745/1984/1903 2741/1978/1897\nf 696/1980/1899 2741/1978/1897 2745/1984/1903\nf 695/1983/1902 2747/1987/1906 2745/1984/1903\nf 2749/1985/1904 2745/1984/1903 2747/1987/1906\nf 2749/1985/1904 1399/92/92 2748/1986/1905\nf 352/90/90 2748/1986/1905 1399/92/92\nf 696/1980/1899 2748/1986/1905 2742/1979/1898\nf 2750/1989/1907 2742/1979/1898 2748/1986/1905\nf 2750/1989/1907 1395/86/86 2737/1975/1894\nf 5/84/84 2737/1975/1894 1395/86/86\nf 2649/1859/1778 672/1860/1779 2753/1992/1908\nf 2751/1993/1909 2753/1992/1908 672/1860/1779\nf 2744/1991/1901 2753/1992/1908 695/2003/1902\nf 2752/1994/1910 695/2003/1902 2753/1992/1908\nf 128/1854/1775 2754/1997/1913 2646/1855/1776\nf 2756/1996/1912 2646/1855/1776 2754/1997/1913\nf 2756/1996/1912 2755/1999/1915 2751/1993/1909\nf 698/1995/1911 2751/1993/1909 2755/1999/1915\nf 697/1998/1914 2757/2002/1918 2755/1999/1915\nf 2759/2000/1916 2755/1999/1915 2757/2002/1918\nf 2759/2000/1916 1413/112/111 2758/2001/1917\nf 356/113/112 2758/2001/1917 1413/112/111\nf 2752/1994/1910 698/1995/1911 2760/2005/1919\nf 2758/2001/1917 2760/2005/1919 698/1995/1911\nf 2747/2004/1906 2760/2005/1919 6/105/104\nf 1409/107/106 6/105/104 2760/2005/1919\nf 2661/1875/1794 675/1876/1795 2763/2006/1920\nf 2761/2007/1921 2763/2006/1920 675/1876/1795\nf 2754/1997/1913 2763/2006/1920 697/1998/1914\nf 2762/2008/1922 697/1998/1914 2763/2006/1920\nf 129/1872/1791 2764/2011/1925 2658/1873/1792\nf 2766/2010/1924 2658/1873/1792 2764/2011/1925\nf 2766/2010/1924 2765/2013/1927 2761/2007/1921\nf 700/2009/1923 2761/2007/1921 2765/2013/1927\nf 699/2012/1926 2767/2016/1930 2765/2013/1927\nf 2769/2014/1928 2765/2013/1927 2767/2016/1930\nf 2769/2014/1928 1427/134/131 2768/2015/1929\nf 360/135/132 2768/2015/1929 1427/134/131\nf 2762/2008/1922 700/2009/1923 2770/2017/1931\nf 2768/2015/1929 2770/2017/1931 700/2009/1923\nf 2757/2002/1918 2770/2017/1931 7/127/124\nf 1423/129/126 7/127/124 2770/2017/1931\nf 2673/1891/1810 678/1892/1811 2773/2018/1932\nf 2771/2019/1933 2773/2018/1932 678/1892/1811\nf 2764/2011/1925 2773/2018/1932 699/2012/1926\nf 2772/2020/1934 699/2012/1926 2773/2018/1932\nf 130/1888/1807 2774/2023/1937 2670/1889/1808\nf 2776/2022/1936 2670/1889/1808 2774/2023/1937\nf 2776/2022/1936 2775/2025/1939 2771/2019/1933\nf 702/2021/1935 2771/2019/1933 2775/2025/1939\nf 701/2024/1938 2777/2028/1942 2775/2025/1939\nf 2779/2026/1940 2775/2025/1939 2777/2028/1942\nf 2779/2026/1940 1441/154/151 2778/2027/1941\nf 364/155/152 2778/2027/1941 1441/154/151\nf 2772/2020/1934 702/2021/1935 2780/2029/1943\nf 2778/2027/1941 2780/2029/1943 702/2021/1935\nf 2767/2016/1930 2780/2029/1943 8/147/144\nf 1437/149/146 8/147/144 2780/2029/1943\nf 2685/1907/1826 681/1908/1827 2783/2030/1944\nf 2781/2031/1945 2783/2030/1944 681/1908/1827\nf 2774/2023/1937 2783/2030/1944 701/2024/1938\nf 2782/2032/1946 701/2024/1938 2783/2030/1944\nf 131/1904/1823 2784/2035/1949 2682/1905/1824\nf 2786/2034/1948 2682/1905/1824 2784/2035/1949\nf 2786/2034/1948 2785/2037/1951 2781/2031/1945\nf 704/2033/1947 2781/2031/1945 2785/2037/1951\nf 703/2036/1950 2787/2040/1954 2785/2037/1951\nf 2789/2038/1952 2785/2037/1951 2787/2040/1954\nf 2789/2038/1952 1455/174/171 2788/2039/1953\nf 368/175/172 2788/2039/1953 1455/174/171\nf 2782/2032/1946 704/2033/1947 2790/2041/1955\nf 2788/2039/1953 2790/2041/1955 704/2033/1947\nf 2777/2028/1942 2790/2041/1955 9/167/164\nf 1451/169/166 9/167/164 2790/2041/1955\nf 2697/1923/1842 684/1924/1843 2793/2042/1956\nf 2791/2043/1957 2793/2042/1956 684/1924/1843\nf 2784/2035/1949 2793/2042/1956 703/2036/1950\nf 2792/2044/1958 703/2036/1950 2793/2042/1956\nf 132/1920/1839 2794/2047/1961 2694/1921/1840\nf 2796/2046/1960 2694/1921/1840 2794/2047/1961\nf 2796/2046/1960 2795/2049/1963 2791/2043/1957\nf 706/2045/1959 2791/2043/1957 2795/2049/1963\nf 705/2048/1962 2797/2052/1966 2795/2049/1963\nf 2799/2050/1964 2795/2049/1963 2797/2052/1966\nf 2799/2050/1964 1469/194/191 2798/2051/1965\nf 372/195/192 2798/2051/1965 1469/194/191\nf 2792/2044/1958 706/2045/1959 2800/2054/1968\nf 2798/2051/1965 2800/2054/1968 706/2045/1959\nf 2787/2040/1954 2800/2054/1968 10/187/184\nf 1465/189/186 10/187/184 2800/2054/1968\nf 2804/2056/1970 1725/582/533 2801/2057/1971\nf 440/596/547 2801/2057/1971 1725/582/533\nf 2803/2055/1969 2804/2056/1970 709/2069/1983\nf 2802/2058/1972 709/2069/1983 2804/2056/1970\nf 2805/2063/1977 2807/2060/1974 45/750/697\nf 1735/597/548 45/750/697 2807/2060/1974\nf 2806/2062/1976 710/2059/1973 2807/2060/1974\nf 2801/2057/1971 2807/2060/1974 710/2059/1973\nf 2808/2068/1982 2811/2064/1978 707/2061/1975\nf 2806/2062/1976 707/2061/1975 2811/2064/1978\nf 2809/2067/1981 708/2072/1986 2811/2064/1978\nf 2810/2065/1979 2811/2064/1978 708/2072/1986\nf 2802/2058/1972 710/2059/1973 2814/2071/1985\nf 2810/2065/1979 2814/2071/1985 710/2059/1973\nf 2812/2073/1987 133/4861/2006 2814/2071/1985\nf 2813/2070/1984 2814/2071/1985 133/4861/2006\nf 1847/751/698 471/765/712 2817/2074/1988\nf 2815/2075/1989 2817/2074/1988 471/765/712\nf 2816/2076/1990 707/2061/1975 2817/2074/1988\nf 2805/2063/1977 2817/2074/1988 707/2061/1975\nf 1857/766/713 56/917/860 2820/2078/1992\nf 2818/2079/1993 2820/2078/1992 56/917/860\nf 2815/2075/1989 2820/2078/1992 713/2077/1991\nf 2819/2080/1994 713/2077/1991 2820/2078/1992\nf 2819/2080/1994 711/2081/1995 2824/2083/1997\nf 2821/2084/1998 2824/2083/1997 711/2081/1995\nf 2822/2085/1999 712/2088/2002 2824/2083/1997\nf 2823/2082/1996 2824/2083/1997 712/2088/2002\nf 2823/2082/1996 2826/2087/2001 713/2077/1991\nf 2816/2076/1990 713/2077/1991 2826/2087/2001\nf 2825/2089/2003 134/2066/1980 2826/2087/2001\nf 2808/2068/1982 2826/2087/2001 134/2066/1980\nf 2827/2096/2009 2830/2090/2004 708/2099/1986\nf 2812/2092/1987 708/2099/1986 2830/2090/2004\nf 2828/2095/2008 716/2110/2021 2830/2090/2004\nf 2829/2091/2005 2830/2090/2004 716/2110/2021\nf 2831/2102/2013 2833/2097/2010 134/2115/1980\nf 2809/2098/1981 134/2115/1980 2833/2097/2010\nf 2832/2101/2012 717/2094/2007 2833/2097/2010\nf 2827/2096/2009 2833/2097/2010 717/2094/2007\nf 2834/2107/2018 2837/2103/2014 714/2100/2011\nf 2832/2101/2012 714/2100/2011 2837/2103/2014\nf 2835/2106/2017 715/2111/2022 2837/2103/2014\nf 2836/2104/2015 2837/2103/2014 715/2111/2022\nf 2836/2104/2015 2840/2108/2019 717/2094/2007\nf 2828/2095/2008 717/2094/2007 2840/2108/2019\nf 2838/2112/2023 136/2133/2040 2840/2108/2019\nf 2839/2109/2020 2840/2108/2019 136/2133/2040\nf 2841/2118/2027 2843/2113/2024 712/2119/2002\nf 2825/2114/2003 712/2119/2002 2843/2113/2024\nf 2842/2117/2026 714/2100/2011 2843/2113/2024\nf 2831/2102/2013 2843/2113/2024 714/2100/2011\nf 2822/2120/1999 135/4884/2000 2846/2121/2028\nf 2844/2122/2029 2846/2121/2028 135/4884/2000\nf 2845/2123/2030 720/2116/2025 2846/2121/2028\nf 2841/2118/2027 2846/2121/2028 720/2116/2025\nf 2847/2129/2036 2850/2125/2032 718/2124/2031\nf 2845/2123/2030 718/2124/2031 2850/2125/2032\nf 719/2132/2039 2849/2126/2033 2848/2128/2035\nf 2850/2125/2032 2848/2128/2035 2849/2126/2033\nf 2852/2130/2037 2842/2117/2026 2849/2126/2033\nf 720/2116/2025 2849/2126/2033 2842/2117/2026\nf 137/2105/2016 2834/2107/2018 2851/2131/2038\nf 2852/2130/2037 2851/2131/2038 2834/2107/2018\nf 2838/2112/2023 715/2111/2022 2856/2135/2042\nf 2853/2136/2043 2856/2135/2042 715/2111/2022\nf 2855/2134/2041 2856/2135/2042 723/2148/2055\nf 2854/2137/2044 723/2148/2055 2856/2135/2042\nf 2859/2139/2046 2835/2106/2017 2857/2140/2047\nf 137/2105/2016 2857/2140/2047 2835/2106/2017\nf 2853/2136/2043 2859/2139/2046 724/2138/2045\nf 2858/2142/2049 724/2138/2045 2859/2139/2046\nf 721/2141/2048 2860/2145/2052 2858/2142/2049\nf 2863/2144/2051 2858/2142/2049 2860/2145/2052\nf 2862/2143/2050 2863/2144/2051 722/2152/2059\nf 2861/2147/2054 722/2152/2059 2863/2144/2051\nf 2854/2137/2044 724/2138/2045 2866/2150/2057\nf 2862/2143/2050 2866/2150/2057 724/2138/2045\nf 2865/2149/2056 2866/2150/2057 139/4934/4732\nf 2864/2151/2058 139/4934/4732 2866/2150/2057\nf 719/2132/2039 2867/2154/2061 2851/2131/2038\nf 2869/2153/2060 2851/2131/2038 2867/2154/2061\nf 2869/2153/2060 2868/2156/2063 2857/2140/2047\nf 721/2141/2048 2857/2140/2047 2868/2156/2063\nf 138/2127/2034 2870/2158/2065 2848/2128/2035\nf 2872/2157/2064 2848/2128/2035 2870/2158/2065\nf 2872/2157/2064 2871/2160/2067 2867/2154/2061\nf 727/2155/2062 2867/2154/2061 2871/2160/2067\nf 725/2159/2066 2873/2163/2070 2871/2160/2067\nf 2876/2161/2068 2871/2160/2067 2873/2163/2070\nf 2876/2161/2068 2874/2165/2072 2875/2162/2069\nf 726/2167/2074 2875/2162/2069 2874/2165/2072\nf 727/2155/2062 2875/2162/2069 2868/2156/2063\nf 2878/2166/2073 2868/2156/2063 2875/2162/2069\nf 2878/2166/2073 2877/2168/2075 2860/2145/2052\nf 140/2146/2053 2860/2145/2052 2877/2168/2075\nf 2873/2163/2070 725/2159/2066 2882/2170/2077\nf 2879/2171/2078 2882/2170/2077 725/2159/2066\nf 2881/2169/2076 2882/2170/2077 730/2183/2090\nf 2880/2172/2079 730/2183/2090 2882/2170/2077\nf 2870/2158/2065 138/2127/2034 2885/2174/2081\nf 2883/2175/2082 2885/2174/2081 138/2127/2034\nf 2879/2171/2078 2885/2174/2081 731/2173/2080\nf 2884/2176/2083 731/2173/2080 2885/2174/2081\nf 2884/2176/2083 728/2177/2084 2889/2179/2086\nf 2886/2180/2087 2889/2179/2086 728/2177/2084\nf 2888/2178/2085 2889/2179/2086 729/2187/2094\nf 2887/2181/2088 729/2187/2094 2889/2179/2086\nf 2880/2172/2079 731/2173/2080 2892/2185/2092\nf 2888/2178/2085 2892/2185/2092 731/2173/2080\nf 2891/2184/2091 2892/2185/2092 143/4999/4797\nf 2890/2186/2093 143/4999/4797 2892/2185/2092\nf 1961/913/856 497/906/849 2896/2189/2096\nf 2893/2190/2097 2896/2189/2096 497/906/849\nf 2895/2188/2095 2896/2189/2096 734/2203/2110\nf 2894/2191/2098 734/2203/2110 2896/2189/2096\nf 1958/908/851 55/745/692 2899/2193/2100\nf 2897/2194/2101 2899/2193/2100 55/745/692\nf 2893/2190/2097 2899/2193/2100 735/2192/2099\nf 2898/2195/2102 735/2192/2099 2899/2193/2100\nf 732/2196/2103 2900/2199/2106 2898/2195/2102\nf 2903/2198/2105 2898/2195/2102 2900/2199/2106\nf 2902/2197/2104 2903/2198/2105 733/2206/2113\nf 2901/2201/2108 733/2206/2113 2903/2198/2105\nf 2894/2191/2098 735/2192/2099 2906/2202/2109\nf 2902/2197/2104 2906/2202/2109 735/2192/2099\nf 2906/2202/2109 2904/2205/2112 2905/2204/2111\nf 146/2224/2131 2905/2204/2111 2904/2205/2112\nf 466/740/687 2907/2208/2115 1839/743/690\nf 2909/2207/2114 1839/743/690 2907/2208/2115\nf 2909/2207/2114 2908/2210/2117 2897/2194/2101\nf 732/2196/2103 2897/2194/2101 2908/2210/2117\nf 44/575/526 2910/2212/2119 1836/738/685\nf 2912/2211/2118 1836/738/685 2910/2212/2119\nf 2912/2211/2118 2911/2214/2121 2907/2208/2115\nf 738/2209/2116 2907/2208/2115 2911/2214/2121\nf 736/2213/2120 2913/2217/2124 2911/2214/2121\nf 2916/2215/2122 2911/2214/2121 2913/2217/2124\nf 2916/2215/2122 2914/2219/2126 2915/2216/2123\nf 737/2221/2128 2915/2216/2123 2914/2219/2126\nf 738/2209/2116 2915/2216/2123 2908/2210/2117\nf 2918/2220/2127 2908/2210/2117 2915/2216/2123\nf 2918/2220/2127 2917/2222/2129 2900/2199/2106\nf 145/2200/2107 2900/2199/2106 2917/2222/2129\nf 2904/2205/2112 733/2206/2113 2922/2223/2130\nf 2919/2226/2133 2922/2223/2130 733/2206/2113\nf 2922/2223/2130 2920/2227/2134 2921/2225/2132\nf 741/2238/2145 2921/2225/2132 2920/2227/2134\nf 145/2200/2107 2923/2230/2137 2901/2201/2108\nf 2925/2229/2136 2901/2201/2108 2923/2230/2137\nf 2919/2226/2133 2925/2229/2136 742/2228/2135\nf 2924/2231/2138 742/2228/2135 2925/2229/2136\nf 2924/2231/2138 739/2232/2139 2929/2234/2141\nf 2926/2235/2142 2929/2234/2141 739/2232/2139\nf 2928/2233/2140 2929/2234/2141 740/2242/2149\nf 2927/2236/2143 740/2242/2149 2929/2234/2141\nf 2920/2227/2134 742/2228/2135 2932/2240/2147\nf 2928/2233/2140 2932/2240/2147 742/2228/2135\nf 2931/2239/2146 2932/2240/2147 149/5060/4858\nf 2930/2241/2148 149/5060/4858 2932/2240/2147\nf 737/2221/2128 2933/2244/2151 2917/2222/2129\nf 2935/2243/2150 2917/2222/2129 2933/2244/2151\nf 2935/2243/2150 2934/2246/2153 2923/2230/2137\nf 739/2232/2139 2923/2230/2137 2934/2246/2153\nf 144/2218/2125 2936/2248/2155 2914/2219/2126\nf 2938/2247/2154 2914/2219/2126 2936/2248/2155\nf 2938/2247/2154 2937/2250/2157 2933/2244/2151\nf 745/2245/2152 2933/2244/2151 2937/2250/2157\nf 743/2249/2156 2939/2253/2160 2937/2250/2157\nf 2942/2251/2158 2937/2250/2157 2939/2253/2160\nf 2942/2251/2158 2940/2255/2162 2941/2252/2159\nf 744/2257/2164 2941/2252/2159 2940/2255/2162\nf 745/2245/2152 2941/2252/2159 2934/2246/2153\nf 2944/2256/2163 2934/2246/2153 2941/2252/2159\nf 2944/2256/2163 2943/2258/2165 2926/2235/2142\nf 148/2237/2144 2926/2235/2142 2943/2258/2165\nf 2946/2265/2172 2949/2259/2166 746/2268/2175\nf 2945/2261/2168 746/2268/2175 2949/2259/2166\nf 2947/2264/2171 749/2279/2186 2949/2259/2166\nf 2948/2260/2167 2949/2259/2166 749/2279/2186\nf 2951/2271/2178 2953/2266/2173 161/5126/2369\nf 2950/2267/2174 161/5126/2369 2953/2266/2173\nf 2952/2270/2177 750/2263/2170 2953/2266/2173\nf 2946/2265/2172 2953/2266/2173 750/2263/2170\nf 2954/2276/2183 2957/2272/2179 747/2269/2176\nf 2952/2270/2177 747/2269/2176 2957/2272/2179\nf 2955/2275/2182 748/2280/2187 2957/2272/2179\nf 2956/2273/2180 2957/2272/2179 748/2280/2187\nf 2956/2273/2180 2960/2277/2184 750/2263/2170\nf 2947/2264/2171 750/2263/2170 2960/2277/2184\nf 2958/2281/2188 151/2284/2191 2960/2277/2184\nf 2959/2278/2185 2960/2277/2184 151/2284/2191\nf 2961/2287/2194 2964/2282/2189 748/2280/2187\nf 2958/2281/2188 748/2280/2187 2964/2282/2189\nf 2962/2286/2193 753/2299/2206 2964/2282/2189\nf 2963/2283/2190 2964/2282/2189 753/2299/2206\nf 2965/2291/2198 2967/2288/2195 162/2274/2181\nf 2955/2275/2182 162/2274/2181 2967/2288/2195\nf 2966/2290/2197 754/2285/2192 2967/2288/2195\nf 2961/2287/2194 2967/2288/2195 754/2285/2192\nf 2968/2296/2203 2971/2292/2199 751/2289/2196\nf 2966/2290/2197 751/2289/2196 2971/2292/2199\nf 2969/2295/2202 752/2300/2207 2971/2292/2199\nf 2970/2293/2200 2971/2292/2199 752/2300/2207\nf 2970/2293/2200 2974/2297/2204 754/2285/2192\nf 2962/2286/2193 754/2285/2192 2974/2297/2204\nf 2972/2301/2208 152/2304/2211 2974/2297/2204\nf 2973/2298/2205 2974/2297/2204 152/2304/2211\nf 2975/2307/2214 2978/2302/2209 752/2300/2207\nf 2972/2301/2208 752/2300/2207 2978/2302/2209\nf 2976/2306/2213 757/2319/2226 2978/2302/2209\nf 2977/2303/2210 2978/2302/2209 757/2319/2226\nf 2979/2311/2218 2981/2308/2215 163/2294/2201\nf 2969/2295/2202 163/2294/2201 2981/2308/2215\nf 2980/2310/2217 758/2305/2212 2981/2308/2215\nf 2975/2307/2214 2981/2308/2215 758/2305/2212\nf 2982/2316/2223 2985/2312/2219 755/2309/2216\nf 2980/2310/2217 755/2309/2216 2985/2312/2219\nf 2983/2315/2222 756/2320/2227 2985/2312/2219\nf 2984/2313/2220 2985/2312/2219 756/2320/2227\nf 2984/2313/2220 2988/2317/2224 758/2305/2212\nf 2976/2306/2213 758/2305/2212 2988/2317/2224\nf 2986/2321/2228 153/2324/2231 2988/2317/2224\nf 2987/2318/2225 2988/2317/2224 153/2324/2231\nf 2989/2327/2234 2992/2322/2229 756/2320/2227\nf 2986/2321/2228 756/2320/2227 2992/2322/2229\nf 2992/2322/2229 2990/2326/2233 2991/2323/2230\nf 761/2338/2245 2991/2323/2230 2990/2326/2233\nf 2993/2331/2238 2995/2328/2235 164/2314/2221\nf 2983/2315/2222 164/2314/2221 2995/2328/2235\nf 2994/2330/2237 762/2325/2232 2995/2328/2235\nf 2989/2327/2234 2995/2328/2235 762/2325/2232\nf 2996/2336/2243 2999/2332/2239 759/2329/2236\nf 2994/2330/2237 759/2329/2236 2999/2332/2239\nf 2999/2332/2239 2997/2335/2242 2998/2333/2240\nf 760/2340/2247 2998/2333/2240 2997/2335/2242\nf 762/2325/2232 2998/2333/2240 2990/2326/2233\nf 3002/2337/2244 2990/2326/2233 2998/2333/2240\nf 3002/2337/2244 3000/2341/2248 3001/2339/2246\nf 154/2343/2250 3001/2339/2246 3000/2341/2248\nf 760/2340/2247 3003/2345/2252 3000/2341/2248\nf 3006/2342/2249 3000/2341/2248 3003/2345/2252\nf 3006/2342/2249 3004/2347/2254 3005/2344/2251\nf 765/2358/2265 3005/2344/2251 3004/2347/2254\nf 165/2334/2241 3007/2349/2256 2997/2335/2242\nf 3009/2348/2255 2997/2335/2242 3007/2349/2256\nf 3009/2348/2255 3008/2351/2258 3003/2345/2252\nf 766/2346/2253 3003/2345/2252 3008/2351/2258\nf 763/2350/2257 3010/2354/2261 3008/2351/2258\nf 3013/2352/2259 3008/2351/2258 3010/2354/2261\nf 3013/2352/2259 3011/2356/2263 3012/2353/2260\nf 764/2360/2267 3012/2353/2260 3011/2356/2263\nf 766/2346/2253 3012/2353/2260 3004/2347/2254\nf 3016/2357/2264 3004/2347/2254 3012/2353/2260\nf 3016/2357/2264 3014/2361/2268 3015/2359/2266\nf 155/4244/2270 3015/2359/2266 3014/2361/2268\nf 764/2371/2267 3017/2366/2272 3014/2362/2268\nf 3020/2363/2269 3014/2362/2268 3017/2366/2272\nf 3020/2363/2269 3018/2368/2274 3019/2365/2271\nf 769/2382/2286 3019/2365/2271 3018/2368/2274\nf 166/5638/2262 3021/2372/2276 3011/2369/2263\nf 3023/2370/2275 3011/2369/2263 3021/2372/2276\nf 3023/2370/2275 3022/2374/2278 3017/2366/2272\nf 770/2367/2273 3017/2366/2272 3022/2374/2278\nf 3024/2379/2283 3027/2375/2279 767/2373/2277\nf 3022/2374/2278 767/2373/2277 3027/2375/2279\nf 3025/2378/2282 768/2383/2287 3027/2375/2279\nf 3026/2376/2280 3027/2375/2279 768/2383/2287\nf 3026/2376/2280 3030/2380/2284 770/2367/2273\nf 3018/2368/2274 770/2367/2273 3030/2380/2284\nf 3028/2384/2288 156/2386/2290 3030/2380/2284\nf 3029/2381/2285 3030/2380/2284 156/2386/2290\nf 768/2383/2287 3031/2388/2292 3028/2384/2288\nf 3034/2385/2289 3028/2384/2288 3031/2388/2292\nf 3034/2385/2289 3032/2390/2294 3033/2387/2291\nf 773/2402/2306 3033/2387/2291 3032/2390/2294\nf 167/2377/2281 3035/2392/2296 3025/2378/2282\nf 3037/2391/2295 3025/2378/2282 3035/2392/2296\nf 3037/2391/2295 3036/2394/2298 3031/2388/2292\nf 774/2389/2293 3031/2388/2292 3036/2394/2298\nf 3038/2399/2303 3041/2395/2299 771/2393/2297\nf 3036/2394/2298 771/2393/2297 3041/2395/2299\nf 3039/2398/2302 772/2403/2307 3041/2395/2299\nf 3040/2396/2300 3041/2395/2299 772/2403/2307\nf 3040/2396/2300 3044/2400/2304 774/2389/2293\nf 3032/2390/2294 774/2389/2293 3044/2400/2304\nf 3042/2404/2308 157/2406/2310 3044/2400/2304\nf 3043/2401/2305 3044/2400/2304 157/2406/2310\nf 772/2403/2307 3045/2408/2312 3042/2404/2308\nf 3048/2405/2309 3042/2404/2308 3045/2408/2312\nf 3048/2405/2309 3046/2410/2314 3047/2407/2311\nf 777/2422/2326 3047/2407/2311 3046/2410/2314\nf 168/2397/2301 3049/2412/2316 3039/2398/2302\nf 3051/2411/2315 3039/2398/2302 3049/2412/2316\nf 3051/2411/2315 3050/2414/2318 3045/2408/2312\nf 778/2409/2313 3045/2408/2312 3050/2414/2318\nf 3052/2419/2323 3055/2415/2319 775/2413/2317\nf 3050/2414/2318 775/2413/2317 3055/2415/2319\nf 3053/2418/2322 776/2423/2327 3055/2415/2319\nf 3054/2416/2320 3055/2415/2319 776/2423/2327\nf 3054/2416/2320 3058/2420/2324 778/2409/2313\nf 3046/2410/2314 778/2409/2313 3058/2420/2324\nf 3056/2424/2328 158/2426/2330 3058/2420/2324\nf 3057/2421/2325 3058/2420/2324 158/2426/2330\nf 776/2423/2327 3059/2428/2332 3056/2424/2328\nf 3062/2425/2329 3056/2424/2328 3059/2428/2332\nf 3062/2425/2329 3060/2430/2334 3061/2427/2331\nf 781/2442/2346 3061/2427/2331 3060/2430/2334\nf 169/2417/2321 3063/2432/2336 3053/2418/2322\nf 3065/2431/2335 3053/2418/2322 3063/2432/2336\nf 3065/2431/2335 3064/2434/2338 3059/2428/2332\nf 782/2429/2333 3059/2428/2332 3064/2434/2338\nf 3066/2439/2343 3069/2435/2339 779/2433/2337\nf 3064/2434/2338 779/2433/2337 3069/2435/2339\nf 3067/2438/2342 780/2443/2347 3069/2435/2339\nf 3068/2436/2340 3069/2435/2339 780/2443/2347\nf 3068/2436/2340 3072/2440/2344 782/2429/2333\nf 3060/2430/2334 782/2429/2333 3072/2440/2344\nf 3070/2444/2348 159/2446/2350 3072/2440/2344\nf 3071/2441/2345 3072/2440/2344 159/2446/2350\nf 780/2443/2347 3073/2448/2352 3070/2444/2348\nf 3076/2445/2349 3070/2444/2348 3073/2448/2352\nf 3076/2445/2349 3074/2450/2354 3075/2447/2351\nf 785/2462/2366 3075/2447/2351 3074/2450/2354\nf 170/2437/2341 3077/2452/2356 3067/2438/2342\nf 3079/2451/2355 3067/2438/2342 3077/2452/2356\nf 3079/2451/2355 3078/2454/2358 3073/2448/2352\nf 786/2449/2353 3073/2448/2352 3078/2454/2358\nf 3080/2459/2363 3083/2455/2359 783/2453/2357\nf 3078/2454/2358 783/2453/2357 3083/2455/2359\nf 3081/2458/2362 784/2463/2367 3083/2455/2359\nf 3082/2456/2360 3083/2455/2359 784/2463/2367\nf 3082/2456/2360 3086/2460/2364 786/2449/2353\nf 3074/2450/2354 786/2449/2353 3086/2460/2364\nf 3084/2464/2368 160/4309/4130 3086/2460/2364\nf 3085/2461/2365 3086/2460/2364 160/4309/4130\nf 3087/2466/2370 787/2472/2375 3090/2468/2371\nf 3088/2469/2372 3090/2468/2371 787/2472/2375\nf 2951/2467/2178 3090/2468/2371 747/2485/2176\nf 3089/2470/2373 747/2485/2176 3090/2468/2371\nf 3091/2473/2376 172/2671/2533 3094/2474/2377\nf 3092/2475/2378 3094/2474/2377 172/2671/2533\nf 3088/2469/2372 3094/2474/2377 790/2471/2374\nf 3093/2476/2379 790/2471/2374 3094/2474/2377\nf 3093/2476/2379 788/2477/2380 3098/2479/2382\nf 3095/2480/2383 3098/2479/2382 788/2477/2380\nf 3097/2478/2381 3098/2479/2382 789/2487/2388\nf 3096/2481/2384 789/2487/2388 3098/2479/2382\nf 3089/2470/2373 790/2471/2374 3100/2483/2386\nf 3097/2478/2381 3100/2483/2386 790/2471/2374\nf 3099/2486/2387 162/2490/2181 3100/2483/2386\nf 2954/2484/2183 3100/2483/2386 162/2490/2181\nf 3101/2493/2392 3103/2488/2389 789/2487/2388\nf 3099/2486/2387 789/2487/2388 3103/2488/2389\nf 3102/2492/2391 751/2505/2196 3103/2488/2389\nf 2965/2489/2198 3103/2488/2389 751/2505/2196\nf 3096/2481/2384 173/2482/2385 3106/2494/2393\nf 3104/2497/2396 3106/2494/2393 173/2482/2385\nf 3105/2496/2395 793/2491/2390 3106/2494/2393\nf 3101/2493/2392 3106/2494/2393 793/2491/2390\nf 3107/2502/2401 3110/2498/2397 791/2495/2394\nf 3105/2496/2395 791/2495/2394 3110/2498/2397\nf 3108/2501/2400 792/2506/2403 3110/2498/2397\nf 3109/2499/2398 3110/2498/2397 792/2506/2403\nf 3109/2499/2398 3112/2503/2402 793/2491/2390\nf 3102/2492/2391 793/2491/2390 3112/2503/2402\nf 3111/2507/2404 163/2510/2201 3112/2503/2402\nf 2968/2504/2203 3112/2503/2402 163/2510/2201\nf 3113/2513/2408 3115/2508/2405 792/2506/2403\nf 3111/2507/2404 792/2506/2403 3115/2508/2405\nf 3114/2512/2407 755/2525/2216 3115/2508/2405\nf 2979/2509/2218 3115/2508/2405 755/2525/2216\nf 3116/2517/2412 3118/2514/2409 174/2500/2399\nf 3108/2501/2400 174/2500/2399 3118/2514/2409\nf 3117/2516/2411 796/2511/2406 3118/2514/2409\nf 3113/2513/2408 3118/2514/2409 796/2511/2406\nf 794/2515/2410 3119/2520/2415 3117/2516/2411\nf 3122/2518/2413 3117/2516/2411 3119/2520/2415\nf 3120/2522/2417 795/2526/2419 3122/2518/2413\nf 3121/2519/2414 3122/2518/2413 795/2526/2419\nf 3121/2519/2414 3124/2523/2418 796/2511/2406\nf 3114/2512/2407 796/2511/2406 3124/2523/2418\nf 3123/2527/2420 164/2530/2221 3124/2523/2418\nf 2982/2524/2223 3124/2523/2418 164/2530/2221\nf 3125/2533/2424 3127/2528/2421 795/2526/2419\nf 3123/2527/2420 795/2526/2419 3127/2528/2421\nf 3126/2532/2423 759/2545/2236 3127/2528/2421\nf 2993/2529/2238 3127/2528/2421 759/2545/2236\nf 175/2521/2416 3128/2535/2426 3120/2522/2417\nf 3130/2534/2425 3120/2522/2417 3128/2535/2426\nf 3129/2537/2428 799/2531/2422 3130/2534/2425\nf 3125/2533/2424 3130/2534/2425 799/2531/2422\nf 797/2536/2427 3131/2542/2433 3129/2537/2428\nf 3134/2538/2429 3129/2537/2428 3131/2542/2433\nf 3132/2541/2432 798/2546/2435 3134/2538/2429\nf 3133/2539/2430 3134/2538/2429 798/2546/2435\nf 3133/2539/2430 3136/2543/2434 799/2531/2422\nf 3126/2532/2423 799/2531/2422 3136/2543/2434\nf 3135/2547/2436 165/2550/2241 3136/2543/2434\nf 2996/2544/2243 3136/2543/2434 165/2550/2241\nf 3137/2553/2440 3139/2548/2437 798/2546/2435\nf 3135/2547/2436 798/2546/2435 3139/2548/2437\nf 3138/2552/2439 763/2564/2257 3139/2548/2437\nf 3007/2549/2256 3139/2548/2437 763/2564/2257\nf 3140/2557/2444 3142/2554/2441 176/2540/2431\nf 3132/2541/2432 176/2540/2431 3142/2554/2441\nf 3141/2556/2443 802/2551/2438 3142/2554/2441\nf 3137/2553/2440 3142/2554/2441 802/2551/2438\nf 3143/2562/2449 3146/2558/2445 800/2555/2442\nf 3141/2556/2443 800/2555/2442 3146/2558/2445\nf 3144/2561/2448 801/2566/2451 3146/2558/2445\nf 3145/2559/2446 3146/2558/2445 801/2566/2451\nf 3145/2559/2446 3148/2563/2450 802/2551/2438\nf 3138/2552/2439 802/2551/2438 3148/2563/2450\nf 3148/2563/2450 3147/2567/2452 3010/2565/2261\nf 166/5639/2262 3010/2565/2261 3147/2567/2452\nf 801/2577/2451 3149/2572/2454 3147/2568/2452\nf 3151/2569/2453 3147/2568/2452 3149/2572/2454\nf 3151/2569/2453 3150/2574/2456 3021/2571/2276\nf 767/2588/2277 3021/2571/2276 3150/2574/2456\nf 177/2757/2447 3152/2578/2458 3144/2575/2448\nf 3154/2576/2457 3144/2575/2448 3152/2578/2458\nf 3154/2576/2457 3153/2580/2460 3149/2572/2454\nf 805/2573/2455 3149/2572/2454 3153/2580/2460\nf 3155/2585/2465 3158/2581/2461 803/2579/2459\nf 3153/2580/2460 803/2579/2459 3158/2581/2461\nf 3156/2584/2464 804/2589/2467 3158/2581/2461\nf 3157/2582/2462 3158/2581/2461 804/2589/2467\nf 3157/2582/2462 3160/2586/2466 805/2573/2455\nf 3150/2574/2456 805/2573/2455 3160/2586/2466\nf 3159/2590/2468 167/2592/2281 3160/2586/2466\nf 3024/2587/2283 3160/2586/2466 167/2592/2281\nf 804/2589/2467 3161/2594/2470 3159/2590/2468\nf 3163/2591/2469 3159/2590/2468 3161/2594/2470\nf 3163/2591/2469 3162/2596/2472 3035/2593/2296\nf 771/2608/2297 3035/2593/2296 3162/2596/2472\nf 178/2583/2463 3164/2598/2474 3156/2584/2464\nf 3166/2597/2473 3156/2584/2464 3164/2598/2474\nf 3166/2597/2473 3165/2600/2476 3161/2594/2470\nf 808/2595/2471 3161/2594/2470 3165/2600/2476\nf 3167/2605/2481 3170/2601/2477 806/2599/2475\nf 3165/2600/2476 806/2599/2475 3170/2601/2477\nf 3168/2604/2480 807/2609/2483 3170/2601/2477\nf 3169/2602/2478 3170/2601/2477 807/2609/2483\nf 3169/2602/2478 3172/2606/2482 808/2595/2471\nf 3162/2596/2472 808/2595/2471 3172/2606/2482\nf 3171/2610/2484 168/2612/2301 3172/2606/2482\nf 3038/2607/2303 3172/2606/2482 168/2612/2301\nf 807/2609/2483 3173/2614/2486 3171/2610/2484\nf 3175/2611/2485 3171/2610/2484 3173/2614/2486\nf 3175/2611/2485 3174/2616/2488 3049/2613/2316\nf 775/2628/2317 3049/2613/2316 3174/2616/2488\nf 179/2603/2479 3176/2618/2490 3168/2604/2480\nf 3178/2617/2489 3168/2604/2480 3176/2618/2490\nf 3178/2617/2489 3177/2620/2492 3173/2614/2486\nf 811/2615/2487 3173/2614/2486 3177/2620/2492\nf 3179/2625/2497 3182/2621/2493 809/2619/2491\nf 3177/2620/2492 809/2619/2491 3182/2621/2493\nf 3180/2624/2496 810/2629/2499 3182/2621/2493\nf 3181/2622/2494 3182/2621/2493 810/2629/2499\nf 3181/2622/2494 3184/2626/2498 811/2615/2487\nf 3174/2616/2488 811/2615/2487 3184/2626/2498\nf 3183/2630/2500 169/2632/2321 3184/2626/2498\nf 3052/2627/2323 3184/2626/2498 169/2632/2321\nf 810/2629/2499 3185/2636/2504 3183/2630/2500\nf 3187/2631/2501 3183/2630/2500 3185/2636/2504\nf 3187/2631/2501 3186/2635/2503 3063/2633/2336\nf 779/2648/2337 3063/2633/2336 3186/2635/2503\nf 180/2623/2495 3188/2640/2508 3180/2624/2496\nf 3190/2637/2505 3180/2624/2496 3188/2640/2508\nf 3189/2639/2507 814/2634/2502 3190/2637/2505\nf 3185/2636/2504 3190/2637/2505 814/2634/2502\nf 3191/2645/2513 3194/2641/2509 812/2638/2506\nf 3189/2639/2507 812/2638/2506 3194/2641/2509\nf 3192/2644/2512 813/2649/2515 3194/2641/2509\nf 3193/2642/2510 3194/2641/2509 813/2649/2515\nf 3193/2642/2510 3196/2646/2514 814/2634/2502\nf 3186/2635/2503 814/2634/2502 3196/2646/2514\nf 3195/2650/2516 170/2652/2341 3196/2646/2514\nf 3066/2647/2343 3196/2646/2514 170/2652/2341\nf 3197/2656/2520 3199/2651/2517 813/2649/2515\nf 3195/2650/2516 813/2649/2515 3199/2651/2517\nf 3199/2651/2517 3198/2655/2519 3077/2653/2356\nf 783/2668/2357 3077/2653/2356 3198/2655/2519\nf 3200/2660/2524 3202/2657/2521 181/2643/2511\nf 3192/2644/2512 181/2643/2511 3202/2657/2521\nf 3201/2659/2523 817/2654/2518 3202/2657/2521\nf 3197/2656/2520 3202/2657/2521 817/2654/2518\nf 3203/2665/2529 3206/2661/2525 815/2658/2522\nf 3201/2659/2523 815/2658/2522 3206/2661/2525\nf 3204/2664/2528 816/2669/2531 3206/2661/2525\nf 3205/2662/2526 3206/2661/2525 816/2669/2531\nf 3205/2662/2526 3208/2666/2530 817/2654/2518\nf 3198/2655/2519 817/2654/2518 3208/2666/2530\nf 3207/2670/2532 171/5170/2361 3208/2666/2530\nf 3080/2667/2363 3208/2666/2530 171/5170/2361\nf 3209/2672/2534 818/2677/2539 3212/2673/2535\nf 3210/2674/2536 3212/2673/2535 818/2677/2539\nf 3092/2475/2378 3212/2673/2535 788/2477/2380\nf 3211/2675/2537 788/2477/2380 3212/2673/2535\nf 3213/2678/2540 183/2839/2697 3216/2679/2541\nf 3214/2680/2542 3216/2679/2541 183/2839/2697\nf 3210/2674/2536 3216/2679/2541 821/2676/2538\nf 3215/2681/2543 821/2676/2538 3216/2679/2541\nf 3215/2681/2543 819/2682/2544 3220/2684/2546\nf 3217/2685/2547 3220/2684/2546 819/2682/2544\nf 3219/2683/2545 3220/2684/2546 820/2690/2552\nf 3218/2686/2548 820/2690/2552 3220/2684/2546\nf 3211/2675/2537 821/2676/2538 3222/2688/2550\nf 3219/2683/2545 3222/2688/2550 821/2676/2538\nf 3095/2480/2383 3222/2688/2550 173/2482/2385\nf 3221/2689/2551 173/2482/2385 3222/2688/2550\nf 3221/2689/2551 820/2690/2552 3225/2691/2553\nf 3223/2692/2554 3225/2691/2553 820/2690/2552\nf 3104/2497/2396 3225/2691/2553 791/2495/2394\nf 3224/2693/2555 791/2495/2394 3225/2691/2553\nf 3218/2686/2548 184/2687/2549 3228/2695/2557\nf 3226/2696/2558 3228/2695/2557 184/2687/2549\nf 3223/2692/2554 3228/2695/2557 824/2694/2556\nf 3227/2697/2559 824/2694/2556 3228/2695/2557\nf 3229/2701/2563 3232/2699/2561 822/2698/2560\nf 3227/2697/2559 822/2698/2560 3232/2699/2561\nf 3232/2699/2561 3230/2703/2565 3231/2700/2562\nf 823/2705/2567 3231/2700/2562 3230/2703/2565\nf 3231/2700/2562 3234/2704/2566 824/2694/2556\nf 3224/2693/2555 824/2694/2556 3234/2704/2566\nf 3233/2706/2568 174/2500/2399 3234/2704/2566\nf 3107/2502/2401 3234/2704/2566 174/2500/2399\nf 823/2705/2567 3235/2708/2570 3233/2706/2568\nf 3237/2707/2569 3233/2706/2568 3235/2708/2570\nf 3237/2707/2569 3236/2710/2572 3116/2517/2412\nf 794/2515/2410 3116/2517/2412 3236/2710/2572\nf 185/2702/2564 3238/2712/2574 3230/2703/2565\nf 3240/2711/2573 3230/2703/2565 3238/2712/2574\nf 3240/2711/2573 3239/2714/2576 3235/2708/2570\nf 827/2709/2571 3235/2708/2570 3239/2714/2576\nf 825/2713/2575 3241/2717/2579 3239/2714/2576\nf 3244/2715/2577 3239/2714/2576 3241/2717/2579\nf 3244/2715/2577 3242/2719/2581 3243/2716/2578\nf 826/2721/2583 3243/2716/2578 3242/2719/2581\nf 827/2709/2571 3243/2716/2578 3236/2710/2572\nf 3246/2720/2582 3236/2710/2572 3243/2716/2578\nf 3246/2720/2582 3245/2722/2584 3119/2520/2415\nf 175/2521/2416 3119/2520/2415 3245/2722/2584\nf 826/2721/2583 3247/2724/2586 3245/2722/2584\nf 3249/2723/2585 3245/2722/2584 3247/2724/2586\nf 3249/2723/2585 3248/2726/2588 3128/2535/2426\nf 797/2536/2427 3128/2535/2426 3248/2726/2588\nf 186/2718/2580 3250/2728/2590 3242/2719/2581\nf 3252/2727/2589 3242/2719/2581 3250/2728/2590\nf 3252/2727/2589 3251/2730/2592 3247/2724/2586\nf 830/2725/2587 3247/2724/2586 3251/2730/2592\nf 828/2729/2591 3253/2733/2595 3251/2730/2592\nf 3256/2731/2593 3251/2730/2592 3253/2733/2595\nf 3256/2731/2593 3254/2735/2597 3255/2732/2594\nf 829/2737/2599 3255/2732/2594 3254/2735/2597\nf 830/2725/2587 3255/2732/2594 3248/2726/2588\nf 3258/2736/2598 3248/2726/2588 3255/2732/2594\nf 3258/2736/2598 3257/2738/2600 3131/2542/2433\nf 176/2540/2431 3131/2542/2433 3257/2738/2600\nf 829/2737/2599 3259/2740/2602 3257/2738/2600\nf 3261/2739/2601 3257/2738/2600 3259/2740/2602\nf 3261/2739/2601 3260/2742/2604 3140/2557/2444\nf 800/2555/2442 3140/2557/2444 3260/2742/2604\nf 187/2734/2596 3262/2744/2606 3254/2735/2597\nf 3264/2743/2605 3254/2735/2597 3262/2744/2606\nf 3264/2743/2605 3263/2746/2608 3259/2740/2602\nf 833/2741/2603 3259/2740/2602 3263/2746/2608\nf 831/2745/2607 3265/2749/2611 3263/2746/2608\nf 3268/2747/2609 3263/2746/2608 3265/2749/2611\nf 3268/2747/2609 3266/2751/2613 3267/2748/2610\nf 832/2753/2615 3267/2748/2610 3266/2751/2613\nf 833/2741/2603 3267/2748/2610 3260/2742/2604\nf 3270/2752/2614 3260/2742/2604 3267/2748/2610\nf 3270/2752/2614 3269/2754/2616 3143/2562/2449\nf 177/2560/2447 3143/2562/2449 3269/2754/2616\nf 832/2763/2615 3271/2758/2618 3269/2755/2616\nf 3273/2756/2617 3269/2755/2616 3271/2758/2618\nf 3273/2756/2617 3272/2760/2620 3152/2578/2458\nf 803/2579/2459 3152/2578/2458 3272/2760/2620\nf 188/2925/2612 3274/2764/2622 3266/2761/2613\nf 3276/2762/2621 3266/2761/2613 3274/2764/2622\nf 3276/2762/2621 3275/2766/2624 3271/2758/2618\nf 836/2759/2619 3271/2758/2618 3275/2766/2624\nf 834/2765/2623 3277/2769/2627 3275/2766/2624\nf 3280/2767/2625 3275/2766/2624 3277/2769/2627\nf 3280/2767/2625 3278/2771/2629 3279/2768/2626\nf 835/2773/2631 3279/2768/2626 3278/2771/2629\nf 836/2759/2619 3279/2768/2626 3272/2760/2620\nf 3282/2772/2630 3272/2760/2620 3279/2768/2626\nf 3282/2772/2630 3281/2774/2632 3155/2585/2465\nf 178/2583/2463 3155/2585/2465 3281/2774/2632\nf 835/2773/2631 3283/2776/2634 3281/2774/2632\nf 3285/2775/2633 3281/2774/2632 3283/2776/2634\nf 3285/2775/2633 3284/2778/2636 3164/2598/2474\nf 806/2599/2475 3164/2598/2474 3284/2778/2636\nf 189/2770/2628 3286/2780/2638 3278/2771/2629\nf 3288/2779/2637 3278/2771/2629 3286/2780/2638\nf 3288/2779/2637 3287/2782/2640 3283/2776/2634\nf 839/2777/2635 3283/2776/2634 3287/2782/2640\nf 837/2781/2639 3289/2785/2643 3287/2782/2640\nf 3292/2783/2641 3287/2782/2640 3289/2785/2643\nf 3292/2783/2641 3290/2787/2645 3291/2784/2642\nf 838/2789/2647 3291/2784/2642 3290/2787/2645\nf 839/2777/2635 3291/2784/2642 3284/2778/2636\nf 3294/2788/2646 3284/2778/2636 3291/2784/2642\nf 3294/2788/2646 3293/2790/2648 3167/2605/2481\nf 179/2603/2479 3167/2605/2481 3293/2790/2648\nf 838/2789/2647 3295/2792/2650 3293/2790/2648\nf 3297/2791/2649 3293/2790/2648 3295/2792/2650\nf 3297/2791/2649 3296/2794/2652 3176/2618/2490\nf 809/2619/2491 3176/2618/2490 3296/2794/2652\nf 190/2786/2644 3298/2796/2654 3290/2787/2645\nf 3300/2795/2653 3290/2787/2645 3298/2796/2654\nf 3300/2795/2653 3299/2798/2656 3295/2792/2650\nf 842/2793/2651 3295/2792/2650 3299/2798/2656\nf 840/2797/2655 3301/2801/2659 3299/2798/2656\nf 3304/2799/2657 3299/2798/2656 3301/2801/2659\nf 3304/2799/2657 3302/2803/2661 3303/2800/2658\nf 841/2805/2663 3303/2800/2658 3302/2803/2661\nf 842/2793/2651 3303/2800/2658 3296/2794/2652\nf 3306/2804/2662 3296/2794/2652 3303/2800/2658\nf 3306/2804/2662 3305/2806/2664 3179/2625/2497\nf 180/2623/2495 3179/2625/2497 3305/2806/2664\nf 841/2805/2663 3307/2808/2666 3305/2806/2664\nf 3309/2807/2665 3305/2806/2664 3307/2808/2666\nf 3309/2807/2665 3308/2810/2668 3188/2640/2508\nf 812/2638/2506 3188/2640/2508 3308/2810/2668\nf 191/2802/2660 3310/2812/2670 3302/2803/2661\nf 3312/2811/2669 3302/2803/2661 3310/2812/2670\nf 3312/2811/2669 3311/2814/2672 3307/2808/2666\nf 845/2809/2667 3307/2808/2666 3311/2814/2672\nf 843/2813/2671 3313/2817/2675 3311/2814/2672\nf 3316/2815/2673 3311/2814/2672 3313/2817/2675\nf 3316/2815/2673 3314/2819/2677 3315/2816/2674\nf 844/2821/2679 3315/2816/2674 3314/2819/2677\nf 845/2809/2667 3315/2816/2674 3308/2810/2668\nf 3318/2820/2678 3308/2810/2668 3315/2816/2674\nf 3318/2820/2678 3317/2822/2680 3191/2645/2513\nf 181/2643/2511 3191/2645/2513 3317/2822/2680\nf 844/2821/2679 3319/2824/2682 3317/2822/2680\nf 3321/2823/2681 3317/2822/2680 3319/2824/2682\nf 3320/2826/2684 815/2658/2522 3321/2823/2681\nf 3200/2660/2524 3321/2823/2681 815/2658/2522\nf 192/2818/2676 3322/2828/2686 3314/2819/2677\nf 3324/2827/2685 3314/2819/2677 3322/2828/2686\nf 3324/2827/2685 3323/2830/2688 3319/2824/2682\nf 848/2825/2683 3319/2824/2682 3323/2830/2688\nf 3325/2835/2693 3328/2831/2689 846/2829/2687\nf 3323/2830/2688 846/2829/2687 3328/2831/2689\nf 3326/2834/2692 847/2837/2695 3328/2831/2689\nf 3327/2832/2690 3328/2831/2689 847/2837/2695\nf 3327/2832/2690 3330/2836/2694 848/2825/2683\nf 3320/2826/2684 848/2825/2683 3330/2836/2694\nf 3330/2836/2694 3329/2838/2696 3203/2665/2529\nf 182/2663/2527 3203/2665/2529 3329/2838/2696\nf 3331/2840/2698 849/2845/2703 3334/2841/2699\nf 3332/2842/2700 3334/2841/2699 849/2845/2703\nf 3214/2680/2542 3334/2841/2699 819/2682/2544\nf 3333/2843/2701 819/2682/2544 3334/2841/2699\nf 194/3009/2863 3336/2848/2706 3335/2846/2704\nf 3338/2847/2705 3335/2846/2704 3336/2848/2706\nf 3332/2842/2700 3338/2847/2705 852/2844/2702\nf 3337/2850/2708 852/2844/2702 3338/2847/2705\nf 3337/2850/2708 850/2849/2707 3342/2852/2710\nf 3339/2853/2711 3342/2852/2710 850/2849/2707\nf 3341/2851/2709 3342/2852/2710 851/2858/2716\nf 3340/2854/2712 851/2858/2716 3342/2852/2710\nf 3333/2843/2701 852/2844/2702 3344/2856/2714\nf 3341/2851/2709 3344/2856/2714 852/2844/2702\nf 3217/2685/2547 3344/2856/2714 184/2687/2549\nf 3343/2857/2715 184/2687/2549 3344/2856/2714\nf 3343/2857/2715 851/2858/2716 3347/2859/2717\nf 3345/2860/2718 3347/2859/2717 851/2858/2716\nf 3226/2696/2558 3347/2859/2717 822/2698/2560\nf 3346/2861/2719 822/2698/2560 3347/2859/2717\nf 195/2855/2713 3348/2864/2722 3340/2854/2712\nf 3350/2863/2721 3340/2854/2712 3348/2864/2722\nf 3350/2863/2721 3349/2866/2724 3345/2860/2718\nf 855/2862/2720 3345/2860/2718 3349/2866/2724\nf 853/2865/2723 3351/2869/2727 3349/2866/2724\nf 3354/2867/2725 3349/2866/2724 3351/2869/2727\nf 3354/2867/2725 3352/2871/2729 3353/2868/2726\nf 854/2873/2731 3353/2868/2726 3352/2871/2729\nf 855/2862/2720 3353/2868/2726 3346/2861/2719\nf 3356/2872/2730 3346/2861/2719 3353/2868/2726\nf 3356/2872/2730 3355/2874/2732 3229/2701/2563\nf 185/2702/2564 3229/2701/2563 3355/2874/2732\nf 854/2873/2731 3357/2876/2734 3355/2874/2732\nf 3359/2875/2733 3355/2874/2732 3357/2876/2734\nf 3359/2875/2733 3358/2878/2736 3238/2712/2574\nf 825/2713/2575 3238/2712/2574 3358/2878/2736\nf 196/2870/2728 3360/2880/2738 3352/2871/2729\nf 3362/2879/2737 3352/2871/2729 3360/2880/2738\nf 3362/2879/2737 3361/2882/2740 3357/2876/2734\nf 858/2877/2735 3357/2876/2734 3361/2882/2740\nf 856/2881/2739 3363/2885/2743 3361/2882/2740\nf 3366/2883/2741 3361/2882/2740 3363/2885/2743\nf 3366/2883/2741 3364/2887/2745 3365/2884/2742\nf 857/2889/2747 3365/2884/2742 3364/2887/2745\nf 858/2877/2735 3365/2884/2742 3358/2878/2736\nf 3368/2888/2746 3358/2878/2736 3365/2884/2742\nf 3368/2888/2746 3367/2890/2748 3241/2717/2579\nf 186/2718/2580 3241/2717/2579 3367/2890/2748\nf 857/2889/2747 3369/2892/2750 3367/2890/2748\nf 3371/2891/2749 3367/2890/2748 3369/2892/2750\nf 3371/2891/2749 3370/2894/2752 3250/2728/2590\nf 828/2729/2591 3250/2728/2590 3370/2894/2752\nf 197/2886/2744 3372/2896/2754 3364/2887/2745\nf 3374/2895/2753 3364/2887/2745 3372/2896/2754\nf 3374/2895/2753 3373/2898/2756 3369/2892/2750\nf 861/2893/2751 3369/2892/2750 3373/2898/2756\nf 3375/2903/2761 3378/2899/2757 859/2897/2755\nf 3373/2898/2756 859/2897/2755 3378/2899/2757\nf 3378/2899/2757 3376/2902/2760 3377/2900/2758\nf 860/2905/2763 3377/2900/2758 3376/2902/2760\nf 861/2893/2751 3377/2900/2758 3370/2894/2752\nf 3380/2904/2762 3370/2894/2752 3377/2900/2758\nf 3380/2904/2762 3379/2906/2764 3253/2733/2595\nf 187/2734/2596 3253/2733/2595 3379/2906/2764\nf 860/2905/2763 3381/2908/2766 3379/2906/2764\nf 3383/2907/2765 3379/2906/2764 3381/2908/2766\nf 3383/2907/2765 3382/2910/2768 3262/2744/2606\nf 831/2745/2607 3262/2744/2606 3382/2910/2768\nf 3384/2914/2772 3386/2911/2769 198/2901/2759\nf 3376/2902/2760 198/2901/2759 3386/2911/2769\nf 3386/2911/2769 3385/2913/2771 3381/2908/2766\nf 864/2909/2767 3381/2908/2766 3385/2913/2771\nf 3387/2919/2777 3390/2915/2773 862/2912/2770\nf 3385/2913/2771 862/2912/2770 3390/2915/2773\nf 3390/2915/2773 3388/2918/2776 3389/2916/2774\nf 863/2921/2779 3389/2916/2774 3388/2918/2776\nf 864/2909/2767 3389/2916/2774 3382/2910/2768\nf 3392/2920/2778 3382/2910/2768 3389/2916/2774\nf 3392/2920/2778 3391/2922/2780 3265/2749/2611\nf 188/2750/2612 3265/2749/2611 3391/2922/2780\nf 863/2931/2779 3393/2926/2782 3391/2923/2780\nf 3395/2924/2781 3391/2923/2780 3393/2926/2782\nf 3395/2924/2781 3394/2928/2784 3274/2764/2622\nf 834/2765/2623 3274/2764/2622 3394/2928/2784\nf 3396/2934/2788 3398/2930/2785 199/3093/2775\nf 3388/2929/2776 199/3093/2775 3398/2930/2785\nf 3398/2930/2785 3397/2933/2787 3393/2926/2782\nf 867/2927/2783 3393/2926/2782 3397/2933/2787\nf 3399/2939/2793 3402/2935/2789 865/2932/2786\nf 3397/2933/2787 865/2932/2786 3402/2935/2789\nf 3402/2935/2789 3400/2938/2792 3401/2936/2790\nf 866/2941/2795 3401/2936/2790 3400/2938/2792\nf 867/2927/2783 3401/2936/2790 3394/2928/2784\nf 3404/2940/2794 3394/2928/2784 3401/2936/2790\nf 3404/2940/2794 3403/2942/2796 3277/2769/2627\nf 189/2770/2628 3277/2769/2627 3403/2942/2796\nf 866/2941/2795 3405/2944/2798 3403/2942/2796\nf 3407/2943/2797 3403/2942/2796 3405/2944/2798\nf 3407/2943/2797 3406/2946/2800 3286/2780/2638\nf 837/2781/2639 3286/2780/2638 3406/2946/2800\nf 200/2937/2791 3408/2948/2802 3400/2938/2792\nf 3410/2947/2801 3400/2938/2792 3408/2948/2802\nf 3410/2947/2801 3409/2950/2804 3405/2944/2798\nf 870/2945/2799 3405/2944/2798 3409/2950/2804\nf 3411/2955/2809 3414/2951/2805 868/2949/2803\nf 3409/2950/2804 868/2949/2803 3414/2951/2805\nf 3414/2951/2805 3412/2954/2808 3413/2952/2806\nf 869/2957/2811 3413/2952/2806 3412/2954/2808\nf 870/2945/2799 3413/2952/2806 3406/2946/2800\nf 3416/2956/2810 3406/2946/2800 3413/2952/2806\nf 3416/2956/2810 3415/2958/2812 3289/2785/2643\nf 190/2786/2644 3289/2785/2643 3415/2958/2812\nf 869/2957/2811 3417/2960/2814 3415/2958/2812\nf 3419/2959/2813 3415/2958/2812 3417/2960/2814\nf 3419/2959/2813 3418/2962/2816 3298/2796/2654\nf 840/2797/2655 3298/2796/2654 3418/2962/2816\nf 201/2953/2807 3420/2964/2818 3412/2954/2808\nf 3422/2963/2817 3412/2954/2808 3420/2964/2818\nf 3422/2963/2817 3421/2966/2820 3417/2960/2814\nf 873/2961/2815 3417/2960/2814 3421/2966/2820\nf 3423/2971/2825 3426/2967/2821 871/2965/2819\nf 3421/2966/2820 871/2965/2819 3426/2967/2821\nf 3426/2967/2821 3424/2970/2824 3425/2968/2822\nf 872/2973/2827 3425/2968/2822 3424/2970/2824\nf 873/2961/2815 3425/2968/2822 3418/2962/2816\nf 3428/2972/2826 3418/2962/2816 3425/2968/2822\nf 3428/2972/2826 3427/2974/2828 3301/2801/2659\nf 191/2802/2660 3301/2801/2659 3427/2974/2828\nf 872/2973/2827 3429/2976/2830 3427/2974/2828\nf 3431/2975/2829 3427/2974/2828 3429/2976/2830\nf 3431/2975/2829 3430/2978/2832 3310/2812/2670\nf 843/2813/2671 3310/2812/2670 3430/2978/2832\nf 202/2969/2823 3432/2982/2836 3424/2970/2824\nf 3434/2979/2833 3424/2970/2824 3432/2982/2836\nf 3434/2979/2833 3433/2981/2835 3429/2976/2830\nf 876/2977/2831 3429/2976/2830 3433/2981/2835\nf 3435/2987/2841 3438/2983/2837 874/2980/2834\nf 3433/2981/2835 874/2980/2834 3438/2983/2837\nf 3438/2983/2837 3436/2986/2840 3437/2984/2838\nf 875/2989/2843 3437/2984/2838 3436/2986/2840\nf 876/2977/2831 3437/2984/2838 3430/2978/2832\nf 3440/2988/2842 3430/2978/2832 3437/2984/2838\nf 3440/2988/2842 3439/2990/2844 3313/2817/2675\nf 192/2818/2676 3313/2817/2675 3439/2990/2844\nf 875/2989/2843 3441/2992/2846 3439/2990/2844\nf 3443/2991/2845 3439/2990/2844 3441/2992/2846\nf 3443/2991/2845 3442/2994/2848 3322/2828/2686\nf 846/2829/2687 3322/2828/2686 3442/2994/2848\nf 3444/2998/2852 3446/2995/2849 203/2985/2839\nf 3436/2986/2840 203/2985/2839 3446/2995/2849\nf 3446/2995/2849 3445/2997/2851 3441/2992/2846\nf 879/2993/2847 3441/2992/2846 3445/2997/2851\nf 877/2996/2850 3447/3001/2855 3445/2997/2851\nf 3450/2999/2853 3445/2997/2851 3447/3001/2855\nf 3449/3000/2854 3450/2999/2853 878/3006/2860\nf 3448/3002/2856 878/3006/2860 3450/2999/2853\nf 879/2993/2847 3449/3000/2854 3442/2994/2848\nf 3452/3004/2858 3442/2994/2848 3449/3000/2854\nf 193/2833/2691 3325/2835/2693 3451/3005/2859\nf 3452/3004/2858 3451/3005/2859 3325/2835/2693\nf 880/3015/2869 3454/3010/2864 3453/3007/2861\nf 3456/3008/2862 3453/3007/2861 3454/3010/2864\nf 3456/3008/2862 3455/3012/2866 3336/2848/2706\nf 850/2849/2707 3336/2848/2706 3455/3012/2866\nf 205/3175/3025 3458/3016/2870 3457/3013/2867\nf 3460/3014/2868 3457/3013/2867 3458/3016/2870\nf 3460/3014/2868 3459/3018/2872 3454/3010/2864\nf 883/3011/2865 3454/3010/2864 3459/3018/2872\nf 881/3017/2871 3461/3021/2875 3459/3018/2872\nf 3464/3019/2873 3459/3018/2872 3461/3021/2875\nf 3464/3019/2873 3462/3023/2877 3463/3020/2874\nf 882/3025/2879 3463/3020/2874 3462/3023/2877\nf 883/3011/2865 3463/3020/2874 3455/3012/2866\nf 3466/3024/2878 3455/3012/2866 3463/3020/2874\nf 3466/3024/2878 3465/3026/2880 3339/2853/2711\nf 195/2855/2713 3339/2853/2711 3465/3026/2880\nf 882/3025/2879 3467/3028/2882 3465/3026/2880\nf 3469/3027/2881 3465/3026/2880 3467/3028/2882\nf 3469/3027/2881 3468/3030/2884 3348/2864/2722\nf 853/2865/2723 3348/2864/2722 3468/3030/2884\nf 206/3022/2876 3470/3032/2886 3462/3023/2877\nf 3472/3031/2885 3462/3023/2877 3470/3032/2886\nf 3472/3031/2885 3471/3034/2888 3467/3028/2882\nf 886/3029/2883 3467/3028/2882 3471/3034/2888\nf 884/3033/2887 3473/3037/2891 3471/3034/2888\nf 3476/3035/2889 3471/3034/2888 3473/3037/2891\nf 3476/3035/2889 3474/3039/2893 3475/3036/2890\nf 885/3041/2895 3475/3036/2890 3474/3039/2893\nf 886/3029/2883 3475/3036/2890 3468/3030/2884\nf 3478/3040/2894 3468/3030/2884 3475/3036/2890\nf 3478/3040/2894 3477/3042/2896 3351/2869/2727\nf 196/2870/2728 3351/2869/2727 3477/3042/2896\nf 885/3041/2895 3479/3044/2898 3477/3042/2896\nf 3481/3043/2897 3477/3042/2896 3479/3044/2898\nf 3481/3043/2897 3480/3046/2900 3360/2880/2738\nf 856/2881/2739 3360/2880/2738 3480/3046/2900\nf 207/3038/2892 3482/3048/2902 3474/3039/2893\nf 3484/3047/2901 3474/3039/2893 3482/3048/2902\nf 3484/3047/2901 3483/3050/2904 3479/3044/2898\nf 889/3045/2899 3479/3044/2898 3483/3050/2904\nf 887/3049/2903 3485/3053/2907 3483/3050/2904\nf 3488/3051/2905 3483/3050/2904 3485/3053/2907\nf 3488/3051/2905 3486/3055/2909 3487/3052/2906\nf 888/3057/2911 3487/3052/2906 3486/3055/2909\nf 889/3045/2899 3487/3052/2906 3480/3046/2900\nf 3490/3056/2910 3480/3046/2900 3487/3052/2906\nf 3490/3056/2910 3489/3058/2912 3363/2885/2743\nf 197/2886/2744 3363/2885/2743 3489/3058/2912\nf 888/3057/2911 3491/3060/2914 3489/3058/2912\nf 3493/3059/2913 3489/3058/2912 3491/3060/2914\nf 3493/3059/2913 3492/3062/2916 3372/2896/2754\nf 859/2897/2755 3372/2896/2754 3492/3062/2916\nf 208/3054/2908 3494/3064/2918 3486/3055/2909\nf 3496/3063/2917 3486/3055/2909 3494/3064/2918\nf 3496/3063/2917 3495/3066/2920 3491/3060/2914\nf 892/3061/2915 3491/3060/2914 3495/3066/2920\nf 890/3065/2919 3497/3071/2925 3495/3066/2920\nf 3500/3067/2921 3495/3066/2920 3497/3071/2925\nf 3498/3070/2924 891/3073/2927 3500/3067/2921\nf 3499/3068/2922 3500/3067/2921 891/3073/2927\nf 3499/3068/2922 3502/3072/2926 892/3061/2915\nf 3492/3062/2916 892/3061/2915 3502/3072/2926\nf 3501/3074/2928 198/2901/2759 3502/3072/2926\nf 3375/2903/2761 3502/3072/2926 198/2901/2759\nf 3503/3078/2932 3505/3075/2929 891/3073/2927\nf 3501/3074/2928 891/3073/2927 3505/3075/2929\nf 3504/3077/2931 862/2912/2770 3505/3075/2929\nf 3384/2914/2772 3505/3075/2929 862/2912/2770\nf 3506/3082/2936 3508/3079/2933 209/3069/2923\nf 3498/3070/2924 209/3069/2923 3508/3079/2933\nf 3507/3081/2935 895/3076/2930 3508/3079/2933\nf 3503/3078/2932 3508/3079/2933 895/3076/2930\nf 3509/3087/2941 3512/3083/2937 893/3080/2934\nf 3507/3081/2935 893/3080/2934 3512/3083/2937\nf 3510/3086/2940 894/3089/2943 3512/3083/2937\nf 3511/3084/2938 3512/3083/2937 894/3089/2943\nf 3511/3084/2938 3514/3088/2942 895/3076/2930\nf 3504/3077/2931 895/3076/2930 3514/3088/2942\nf 3513/3090/2944 199/2917/2775 3514/3088/2942\nf 3387/2919/2777 3514/3088/2942 199/2917/2775\nf 3515/3096/2948 3517/3091/2945 894/3099/2943\nf 3513/3092/2944 894/3099/2943 3517/3091/2945\nf 3516/3095/2947 865/2932/2786 3517/3091/2945\nf 3396/2934/2788 3517/3091/2945 865/2932/2786\nf 3518/3102/2952 3520/3097/2949 210/3261/2939\nf 3510/3098/2940 210/3261/2939 3520/3097/2949\nf 3519/3101/2951 898/3094/2946 3520/3097/2949\nf 3515/3096/2948 3520/3097/2949 898/3094/2946\nf 3521/3107/2957 3524/3103/2953 896/3100/2950\nf 3519/3101/2951 896/3100/2950 3524/3103/2953\nf 3522/3106/2956 897/3109/2959 3524/3103/2953\nf 3523/3104/2954 3524/3103/2953 897/3109/2959\nf 3523/3104/2954 3526/3108/2958 898/3094/2946\nf 3516/3095/2947 898/3094/2946 3526/3108/2958\nf 3525/3110/2960 200/2937/2791 3526/3108/2958\nf 3399/2939/2793 3526/3108/2958 200/2937/2791\nf 897/3109/2959 3527/3112/2962 3525/3110/2960\nf 3529/3111/2961 3525/3110/2960 3527/3112/2962\nf 3529/3111/2961 3528/3114/2964 3408/2948/2802\nf 868/2949/2803 3408/2948/2802 3528/3114/2964\nf 211/3105/2955 3530/3116/2966 3522/3106/2956\nf 3532/3115/2965 3522/3106/2956 3530/3116/2966\nf 3532/3115/2965 3531/3118/2968 3527/3112/2962\nf 901/3113/2963 3527/3112/2962 3531/3118/2968\nf 3533/3123/2973 3536/3119/2969 899/3117/2967\nf 3531/3118/2968 899/3117/2967 3536/3119/2969\nf 3534/3122/2972 900/3125/2975 3536/3119/2969\nf 3535/3120/2970 3536/3119/2969 900/3125/2975\nf 3535/3120/2970 3538/3124/2974 901/3113/2963\nf 3528/3114/2964 901/3113/2963 3538/3124/2974\nf 3537/3126/2976 201/2953/2807 3538/3124/2974\nf 3411/2955/2809 3538/3124/2974 201/2953/2807\nf 900/3125/2975 3539/3128/2978 3537/3126/2976\nf 3541/3127/2977 3537/3126/2976 3539/3128/2978\nf 3541/3127/2977 3540/3130/2980 3420/2964/2818\nf 871/2965/2819 3420/2964/2818 3540/3130/2980\nf 212/3121/2971 3542/3132/2982 3534/3122/2972\nf 3544/3131/2981 3534/3122/2972 3542/3132/2982\nf 3544/3131/2981 3543/3134/2984 3539/3128/2978\nf 904/3129/2979 3539/3128/2978 3543/3134/2984\nf 3545/3139/2989 3548/3135/2985 902/3133/2983\nf 3543/3134/2984 902/3133/2983 3548/3135/2985\nf 3546/3138/2988 903/3141/2991 3548/3135/2985\nf 3547/3136/2986 3548/3135/2985 903/3141/2991\nf 3547/3136/2986 3550/3140/2990 904/3129/2979\nf 3540/3130/2980 904/3129/2979 3550/3140/2990\nf 3549/3142/2992 202/2969/2823 3550/3140/2990\nf 3423/2971/2825 3550/3140/2990 202/2969/2823\nf 903/3141/2991 3551/3146/2996 3549/3142/2992\nf 3553/3143/2993 3549/3142/2992 3551/3146/2996\nf 3552/3145/2995 874/2980/2834 3553/3143/2993\nf 3432/2982/2836 3553/3143/2993 874/2980/2834\nf 213/3137/2987 3554/3150/3000 3546/3138/2988\nf 3556/3147/2997 3546/3138/2988 3554/3150/3000\nf 3555/3149/2999 907/3144/2994 3556/3147/2997\nf 3551/3146/2996 3556/3147/2997 907/3144/2994\nf 3557/3155/3005 3560/3151/3001 905/3148/2998\nf 3555/3149/2999 905/3148/2998 3560/3151/3001\nf 3558/3154/3004 906/3157/3007 3560/3151/3001\nf 3559/3152/3002 3560/3151/3001 906/3157/3007\nf 3559/3152/3002 3562/3156/3006 907/3144/2994\nf 3552/3145/2995 907/3144/2994 3562/3156/3006\nf 3561/3158/3008 203/2985/2839 3562/3156/3006\nf 3435/2987/2841 3562/3156/3006 203/2985/2839\nf 3563/3160/3010 3565/3159/3009 906/3157/3007\nf 3561/3158/3008 906/3157/3007 3565/3159/3009\nf 3444/2998/2852 3565/3159/3009 877/2996/2850\nf 3564/3161/3011 877/2996/2850 3565/3159/3009\nf 3566/3166/3016 3568/3163/3013 214/3153/3003\nf 3558/3154/3004 214/3153/3003 3568/3163/3013\nf 3567/3165/3015 910/3162/3012 3568/3163/3013\nf 3563/3160/3010 3568/3163/3013 910/3162/3012\nf 3569/3171/3021 3572/3168/3018 908/3164/3014\nf 3567/3165/3015 908/3164/3014 3572/3168/3018\nf 3570/3170/3020 909/3173/3023 3572/3168/3018\nf 3571/3167/3017 3572/3168/3018 909/3173/3023\nf 3564/3161/3011 910/3162/3012 3574/3172/3022\nf 3571/3167/3017 3574/3172/3022 910/3162/3012\nf 3447/3001/2855 3574/3172/3022 204/3003/2857\nf 3573/3174/3024 204/3003/2857 3574/3172/3022\nf 3575/3176/3026 911/3181/3031 3578/3177/3027\nf 3576/3178/3028 3578/3177/3027 911/3181/3031\nf 3578/3177/3027 3577/3179/3029 3458/3016/2870\nf 881/3017/2871 3458/3016/2870 3577/3179/3029\nf 3579/3182/3032 216/3343/3189 3582/3183/3033\nf 3580/3184/3034 3582/3183/3033 216/3343/3189\nf 3576/3178/3028 3582/3183/3033 914/3180/3030\nf 3581/3185/3035 914/3180/3030 3582/3183/3033\nf 912/3186/3036 3583/3189/3039 3581/3185/3035\nf 3586/3188/3038 3581/3185/3035 3583/3189/3039\nf 3586/3188/3038 3584/3191/3041 3585/3187/3037\nf 913/3193/3043 3585/3187/3037 3584/3191/3041\nf 3577/3179/3029 914/3180/3030 3588/3192/3042\nf 3585/3187/3037 3588/3192/3042 914/3180/3030\nf 3588/3192/3042 3587/3194/3044 3461/3021/2875\nf 206/3022/2876 3461/3021/2875 3587/3194/3044\nf 913/3193/3043 3589/3196/3046 3587/3194/3044\nf 3591/3195/3045 3587/3194/3044 3589/3196/3046\nf 3591/3195/3045 3590/3198/3048 3470/3032/2886\nf 884/3033/2887 3470/3032/2886 3590/3198/3048\nf 217/3190/3040 3592/3200/3050 3584/3191/3041\nf 3594/3199/3049 3584/3191/3041 3592/3200/3050\nf 3594/3199/3049 3593/3202/3052 3589/3196/3046\nf 917/3197/3047 3589/3196/3046 3593/3202/3052\nf 915/3201/3051 3595/3205/3055 3593/3202/3052\nf 3598/3203/3053 3593/3202/3052 3595/3205/3055\nf 3598/3203/3053 3596/3207/3057 3597/3204/3054\nf 916/3209/3059 3597/3204/3054 3596/3207/3057\nf 917/3197/3047 3597/3204/3054 3590/3198/3048\nf 3600/3208/3058 3590/3198/3048 3597/3204/3054\nf 3600/3208/3058 3599/3210/3060 3473/3037/2891\nf 207/3038/2892 3473/3037/2891 3599/3210/3060\nf 916/3209/3059 3601/3212/3062 3599/3210/3060\nf 3603/3211/3061 3599/3210/3060 3601/3212/3062\nf 3603/3211/3061 3602/3214/3064 3482/3048/2902\nf 887/3049/2903 3482/3048/2902 3602/3214/3064\nf 218/3206/3056 3604/3216/3066 3596/3207/3057\nf 3606/3215/3065 3596/3207/3057 3604/3216/3066\nf 3606/3215/3065 3605/3218/3068 3601/3212/3062\nf 920/3213/3063 3601/3212/3062 3605/3218/3068\nf 918/3217/3067 3607/3221/3071 3605/3218/3068\nf 3610/3219/3069 3605/3218/3068 3607/3221/3071\nf 3610/3219/3069 3608/3223/3073 3609/3220/3070\nf 919/3225/3075 3609/3220/3070 3608/3223/3073\nf 920/3213/3063 3609/3220/3070 3602/3214/3064\nf 3612/3224/3074 3602/3214/3064 3609/3220/3070\nf 3612/3224/3074 3611/3226/3076 3485/3053/2907\nf 208/3054/2908 3485/3053/2907 3611/3226/3076\nf 919/3225/3075 3613/3228/3078 3611/3226/3076\nf 3615/3227/3077 3611/3226/3076 3613/3228/3078\nf 3615/3227/3077 3614/3230/3080 3494/3064/2918\nf 890/3065/2919 3494/3064/2918 3614/3230/3080\nf 219/3222/3072 3616/3232/3082 3608/3223/3073\nf 3618/3231/3081 3608/3223/3073 3616/3232/3082\nf 3618/3231/3081 3617/3234/3084 3613/3228/3078\nf 923/3229/3079 3613/3228/3078 3617/3234/3084\nf 921/3233/3083 3619/3237/3087 3617/3234/3084\nf 3622/3235/3085 3617/3234/3084 3619/3237/3087\nf 3622/3235/3085 3620/3239/3089 3621/3236/3086\nf 922/3241/3091 3621/3236/3086 3620/3239/3089\nf 923/3229/3079 3621/3236/3086 3614/3230/3080\nf 3624/3240/3090 3614/3230/3080 3621/3236/3086\nf 3624/3240/3090 3623/3242/3092 3497/3071/2925\nf 209/3069/2923 3497/3071/2925 3623/3242/3092\nf 922/3241/3091 3625/3244/3094 3623/3242/3092\nf 3627/3243/3093 3623/3242/3092 3625/3244/3094\nf 3627/3243/3093 3626/3246/3096 3506/3082/2936\nf 893/3080/2934 3506/3082/2936 3626/3246/3096\nf 220/3238/3088 3628/3248/3098 3620/3239/3089\nf 3630/3247/3097 3620/3239/3089 3628/3248/3098\nf 3630/3247/3097 3629/3250/3100 3625/3244/3094\nf 926/3245/3095 3625/3244/3094 3629/3250/3100\nf 924/3249/3099 3631/3255/3105 3629/3250/3100\nf 3634/3251/3101 3629/3250/3100 3631/3255/3105\nf 3632/3254/3104 925/3257/3107 3634/3251/3101\nf 3633/3252/3102 3634/3251/3101 925/3257/3107\nf 3633/3252/3102 3636/3256/3106 926/3245/3095\nf 3626/3246/3096 926/3245/3095 3636/3256/3106\nf 3635/3258/3108 210/3085/2939 3636/3256/3106\nf 3509/3087/2941 3636/3256/3106 210/3085/2939\nf 3637/3264/3112 3639/3259/3109 925/3267/3107\nf 3635/3260/3108 925/3267/3107 3639/3259/3109\nf 3638/3263/3111 896/3100/2950 3639/3259/3109\nf 3518/3102/2952 3639/3259/3109 896/3100/2950\nf 3640/3270/3116 3642/3265/3113 221/3427/3103\nf 3632/3266/3104 221/3427/3103 3642/3265/3113\nf 3641/3269/3115 929/3262/3110 3642/3265/3113\nf 3637/3264/3112 3642/3265/3113 929/3262/3110\nf 3643/3275/3121 3646/3271/3117 927/3268/3114\nf 3641/3269/3115 927/3268/3114 3646/3271/3117\nf 3644/3274/3120 928/3277/3123 3646/3271/3117\nf 3645/3272/3118 3646/3271/3117 928/3277/3123\nf 3645/3272/3118 3648/3276/3122 929/3262/3110\nf 3638/3263/3111 929/3262/3110 3648/3276/3122\nf 3647/3278/3124 211/3105/2955 3648/3276/3122\nf 3521/3107/2957 3648/3276/3122 211/3105/2955\nf 928/3277/3123 3649/3280/3126 3647/3278/3124\nf 3651/3279/3125 3647/3278/3124 3649/3280/3126\nf 3651/3279/3125 3650/3282/3128 3530/3116/2966\nf 899/3117/2967 3530/3116/2966 3650/3282/3128\nf 3652/3284/3130 3654/3283/3129 222/3273/3119\nf 3644/3274/3120 222/3273/3119 3654/3283/3129\nf 3654/3283/3129 3653/3286/3132 3649/3280/3126\nf 932/3281/3127 3649/3280/3126 3653/3286/3132\nf 3655/3291/3137 3658/3287/3133 930/3285/3131\nf 3653/3286/3132 930/3285/3131 3658/3287/3133\nf 3656/3290/3136 931/3293/3139 3658/3287/3133\nf 3657/3288/3134 3658/3287/3133 931/3293/3139\nf 3657/3288/3134 3660/3292/3138 932/3281/3127\nf 3650/3282/3128 932/3281/3127 3660/3292/3138\nf 3659/3294/3140 212/3121/2971 3660/3292/3138\nf 3533/3123/2973 3660/3292/3138 212/3121/2971\nf 931/3293/3139 3661/3296/3142 3659/3294/3140\nf 3663/3295/3141 3659/3294/3140 3661/3296/3142\nf 3663/3295/3141 3662/3298/3144 3542/3132/2982\nf 902/3133/2983 3542/3132/2982 3662/3298/3144\nf 223/3289/3135 3664/3300/3146 3656/3290/3136\nf 3666/3299/3145 3656/3290/3136 3664/3300/3146\nf 3666/3299/3145 3665/3302/3148 3661/3296/3142\nf 935/3297/3143 3661/3296/3142 3665/3302/3148\nf 3667/3307/3153 3670/3303/3149 933/3301/3147\nf 3665/3302/3148 933/3301/3147 3670/3303/3149\nf 3668/3306/3152 934/3309/3155 3670/3303/3149\nf 3669/3304/3150 3670/3303/3149 934/3309/3155\nf 3669/3304/3150 3672/3308/3154 935/3297/3143\nf 3662/3298/3144 935/3297/3143 3672/3308/3154\nf 3671/3310/3156 213/3137/2987 3672/3308/3154\nf 3545/3139/2989 3672/3308/3154 213/3137/2987\nf 934/3309/3155 3673/3314/3160 3671/3310/3156\nf 3675/3311/3157 3671/3310/3156 3673/3314/3160\nf 3674/3313/3159 905/3148/2998 3675/3311/3157\nf 3554/3150/3000 3675/3311/3157 905/3148/2998\nf 224/3305/3151 3676/3316/3162 3668/3306/3152\nf 3678/3315/3161 3668/3306/3152 3676/3316/3162\nf 3678/3315/3161 3677/3318/3164 3673/3314/3160\nf 938/3312/3158 3673/3314/3160 3677/3318/3164\nf 3682/3319/3165 3677/3318/3164 3679/3323/3169\nf 936/3317/3163 3679/3323/3169 3677/3318/3164\nf 937/3325/3171 3681/3320/3166 3680/3321/3167\nf 3682/3319/3165 3680/3321/3167 3681/3320/3166\nf 3681/3320/3166 3684/3324/3170 938/3312/3158\nf 3674/3313/3159 938/3312/3158 3684/3324/3170\nf 3683/3326/3172 214/3153/3003 3684/3324/3170\nf 3557/3155/3005 3684/3324/3170 214/3153/3003\nf 3685/3330/3176 3687/3327/3173 937/3325/3171\nf 3683/3326/3172 937/3325/3171 3687/3327/3173\nf 3686/3329/3175 908/3164/3014 3687/3327/3173\nf 3566/3166/3016 3687/3327/3173 908/3164/3014\nf 3690/3331/3177 3680/3321/3167 3688/3334/3180\nf 225/3322/3168 3688/3334/3180 3680/3321/3167\nf 941/3328/3174 3685/3330/3176 3689/3332/3178\nf 3690/3331/3177 3689/3332/3178 3685/3330/3176\nf 3694/3336/3182 3689/3332/3178 3691/3339/3185\nf 939/3333/3179 3691/3339/3185 3689/3332/3178\nf 940/3342/3188 3693/3335/3181 3692/3337/3183\nf 3694/3336/3182 3692/3337/3183 3693/3335/3181\nf 3696/3340/3186 3686/3329/3175 3693/3335/3181\nf 941/3328/3174 3693/3335/3181 3686/3329/3175\nf 215/3169/3019 3569/3171/3021 3695/3341/3187\nf 3696/3340/3186 3695/3341/3187 3569/3171/3021\nf 942/3351/3197 3698/3346/3192 3697/3345/3191\nf 3700/3344/3190 3697/3345/3191 3698/3346/3192\nf 3700/3344/3190 3699/3348/3194 3580/3184/3034\nf 912/3186/3036 3580/3184/3034 3699/3348/3194\nf 227/3513/3355 3702/3352/3198 3701/3349/3195\nf 3704/3350/3196 3701/3349/3195 3702/3352/3198\nf 3704/3350/3196 3703/3354/3200 3698/3346/3192\nf 945/3347/3193 3698/3346/3192 3703/3354/3200\nf 943/3353/3199 3705/3357/3203 3703/3354/3200\nf 3708/3355/3201 3703/3354/3200 3705/3357/3203\nf 3708/3355/3201 3706/3359/3205 3707/3356/3202\nf 944/3361/3207 3707/3356/3202 3706/3359/3205\nf 945/3347/3193 3707/3356/3202 3699/3348/3194\nf 3710/3360/3206 3699/3348/3194 3707/3356/3202\nf 3710/3360/3206 3709/3362/3208 3583/3189/3039\nf 217/3190/3040 3583/3189/3039 3709/3362/3208\nf 944/3361/3207 3711/3364/3210 3709/3362/3208\nf 3713/3363/3209 3709/3362/3208 3711/3364/3210\nf 3713/3363/3209 3712/3366/3212 3592/3200/3050\nf 915/3201/3051 3592/3200/3050 3712/3366/3212\nf 228/3358/3204 3714/3368/3214 3706/3359/3205\nf 3716/3367/3213 3706/3359/3205 3714/3368/3214\nf 3716/3367/3213 3715/3370/3216 3711/3364/3210\nf 948/3365/3211 3711/3364/3210 3715/3370/3216\nf 946/3369/3215 3717/3373/3219 3715/3370/3216\nf 3720/3371/3217 3715/3370/3216 3717/3373/3219\nf 3720/3371/3217 3718/3375/3221 3719/3372/3218\nf 947/3377/3223 3719/3372/3218 3718/3375/3221\nf 948/3365/3211 3719/3372/3218 3712/3366/3212\nf 3722/3376/3222 3712/3366/3212 3719/3372/3218\nf 3722/3376/3222 3721/3378/3224 3595/3205/3055\nf 218/3206/3056 3595/3205/3055 3721/3378/3224\nf 3721/3378/3224 947/3377/3223 3725/3379/3225\nf 3723/3380/3226 3725/3379/3225 947/3377/3223\nf 3604/3216/3066 3725/3379/3225 918/3217/3067\nf 3724/3381/3227 918/3217/3067 3725/3379/3225\nf 3718/3375/3221 229/3374/3220 3728/3383/3229\nf 3726/3384/3230 3728/3383/3229 229/3374/3220\nf 3723/3380/3226 3728/3383/3229 951/3382/3228\nf 3727/3385/3231 951/3382/3228 3728/3383/3229\nf 3727/3385/3231 949/3386/3232 3732/3388/3234\nf 3729/3389/3235 3732/3388/3234 949/3386/3232\nf 3731/3387/3233 3732/3388/3234 950/3394/3240\nf 3730/3390/3236 950/3394/3240 3732/3388/3234\nf 3724/3381/3227 951/3382/3228 3734/3392/3238\nf 3731/3387/3233 3734/3392/3238 951/3382/3228\nf 3607/3221/3071 3734/3392/3238 219/3222/3072\nf 3733/3393/3239 219/3222/3072 3734/3392/3238\nf 3733/3393/3239 950/3394/3240 3737/3395/3241\nf 3735/3396/3242 3737/3395/3241 950/3394/3240\nf 3616/3232/3082 3737/3395/3241 921/3233/3083\nf 3736/3397/3243 921/3233/3083 3737/3395/3241\nf 3730/3390/3236 230/3391/3237 3740/3399/3245\nf 3738/3400/3246 3740/3399/3245 230/3391/3237\nf 3735/3396/3242 3740/3399/3245 954/3398/3244\nf 3739/3401/3247 954/3398/3244 3740/3399/3245\nf 3739/3401/3247 952/3402/3248 3744/3404/3250\nf 3741/3405/3251 3744/3404/3250 952/3402/3248\nf 3743/3403/3249 3744/3404/3250 953/3410/3256\nf 3742/3406/3252 953/3410/3256 3744/3404/3250\nf 3736/3397/3243 954/3398/3244 3746/3408/3254\nf 3743/3403/3249 3746/3408/3254 954/3398/3244\nf 3619/3237/3087 3746/3408/3254 220/3238/3088\nf 3745/3409/3255 220/3238/3088 3746/3408/3254\nf 3745/3409/3255 953/3410/3256 3749/3411/3257\nf 3747/3412/3258 3749/3411/3257 953/3410/3256\nf 924/3249/3099 3628/3248/3098 3748/3413/3259\nf 3749/3411/3257 3748/3413/3259 3628/3248/3098\nf 3742/3406/3252 231/3407/3253 3752/3415/3261\nf 3750/3416/3262 3752/3415/3261 231/3407/3253\nf 3747/3412/3258 3752/3415/3261 957/3414/3260\nf 3751/3417/3263 957/3414/3260 3752/3415/3261\nf 3756/3420/3266 3751/3417/3263 3753/3423/3269\nf 955/3418/3264 3753/3423/3269 3751/3417/3263\nf 956/3426/3272 3755/3419/3265 3754/3421/3267\nf 3756/3420/3266 3754/3421/3267 3755/3419/3265\nf 3758/3424/3270 3748/3413/3259 3755/3419/3265\nf 957/3414/3260 3755/3419/3265 3748/3413/3259\nf 221/3253/3103 3631/3255/3105 3757/3425/3271\nf 3758/3424/3270 3757/3425/3271 3631/3255/3105\nf 3761/3428/3273 3757/3429/3271 3759/3432/3276\nf 956/3433/3272 3759/3432/3276 3757/3429/3271\nf 927/3268/3114 3640/3270/3116 3760/3430/3274\nf 3761/3428/3273 3760/3430/3274 3640/3270/3116\nf 3764/3434/3277 3754/3435/3267 3762/3438/3280\nf 232/3595/3268 3762/3438/3280 3754/3435/3267\nf 960/3431/3275 3759/3432/3276 3763/3436/3278\nf 3764/3434/3277 3763/3436/3278 3759/3432/3276\nf 3768/3440/3282 3763/3436/3278 3765/3443/3285\nf 958/3437/3279 3765/3443/3285 3763/3436/3278\nf 959/3446/3288 3767/3439/3281 3766/3441/3283\nf 3768/3440/3282 3766/3441/3283 3767/3439/3281\nf 3770/3444/3286 3760/3430/3274 3767/3439/3281\nf 960/3431/3275 3767/3439/3281 3760/3430/3274\nf 222/3273/3119 3643/3275/3121 3769/3445/3287\nf 3770/3444/3286 3769/3445/3287 3643/3275/3121\nf 3769/3445/3287 959/3446/3288 3773/3447/3289\nf 3771/3448/3290 3773/3447/3289 959/3446/3288\nf 3652/3284/3130 3773/3447/3289 930/3285/3131\nf 3772/3449/3291 930/3285/3131 3773/3447/3289\nf 3766/3441/3283 233/3442/3284 3776/3451/3293\nf 3774/3452/3294 3776/3451/3293 233/3442/3284\nf 3771/3448/3290 3776/3451/3293 963/3450/3292\nf 3775/3453/3295 963/3450/3292 3776/3451/3293\nf 3780/3456/3298 3775/3453/3295 3777/3459/3301\nf 961/3454/3296 3777/3459/3301 3775/3453/3295\nf 962/3462/3304 3779/3455/3297 3778/3457/3299\nf 3780/3456/3298 3778/3457/3299 3779/3455/3297\nf 3782/3460/3302 3772/3449/3291 3779/3455/3297\nf 963/3450/3292 3779/3455/3297 3772/3449/3291\nf 223/3289/3135 3655/3291/3137 3781/3461/3303\nf 3782/3460/3302 3781/3461/3303 3655/3291/3137\nf 3781/3461/3303 962/3462/3304 3785/3463/3305\nf 3783/3464/3306 3785/3463/3305 962/3462/3304\nf 3664/3300/3146 3785/3463/3305 933/3301/3147\nf 3784/3465/3307 933/3301/3147 3785/3463/3305\nf 3778/3457/3299 234/3458/3300 3788/3467/3309\nf 3786/3468/3310 3788/3467/3309 234/3458/3300\nf 3783/3464/3306 3788/3467/3309 966/3466/3308\nf 3787/3469/3311 966/3466/3308 3788/3467/3309\nf 3792/3472/3314 3787/3469/3311 3789/3475/3317\nf 964/3470/3312 3789/3475/3317 3787/3469/3311\nf 965/3478/3320 3791/3471/3313 3790/3473/3315\nf 3792/3472/3314 3790/3473/3315 3791/3471/3313\nf 3794/3476/3318 3784/3465/3307 3791/3471/3313\nf 966/3466/3308 3791/3471/3313 3784/3465/3307\nf 224/3305/3151 3667/3307/3153 3793/3477/3319\nf 3794/3476/3318 3793/3477/3319 3667/3307/3153\nf 3793/3477/3319 965/3478/3320 3797/3479/3321\nf 3795/3482/3324 3797/3479/3321 965/3478/3320\nf 936/3317/3163 3676/3316/3162 3796/3480/3322\nf 3797/3479/3321 3796/3480/3322 3676/3316/3162\nf 3790/3473/3315 235/3474/3316 3800/3483/3325\nf 3798/3486/3328 3800/3483/3325 235/3474/3316\nf 969/3481/3323 3795/3482/3324 3799/3484/3326\nf 3800/3483/3325 3799/3484/3326 3795/3482/3324\nf 3804/3488/3330 3799/3484/3326 3801/3491/3333\nf 967/3485/3327 3801/3491/3333 3799/3484/3326\nf 968/3494/3336 3803/3487/3329 3802/3489/3331\nf 3804/3488/3330 3802/3489/3331 3803/3487/3329\nf 3806/3492/3334 3796/3480/3322 3803/3487/3329\nf 969/3481/3323 3803/3487/3329 3796/3480/3322\nf 225/3322/3168 3679/3323/3169 3805/3493/3335\nf 3806/3492/3334 3805/3493/3335 3679/3323/3169\nf 3809/3495/3337 3805/3493/3335 3807/3498/3340\nf 968/3494/3336 3807/3498/3340 3805/3493/3335\nf 939/3333/3179 3688/3334/3180 3808/3496/3338\nf 3809/3495/3337 3808/3496/3338 3688/3334/3180\nf 3812/3499/3341 3802/3489/3331 3810/3502/3344\nf 236/3490/3332 3810/3502/3344 3802/3489/3331\nf 972/3497/3339 3807/3498/3340 3811/3500/3342\nf 3812/3499/3341 3811/3500/3342 3807/3498/3340\nf 3816/3504/3346 3811/3500/3342 3813/3507/3349\nf 970/3501/3343 3813/3507/3349 3811/3500/3342\nf 971/3510/3352 3815/3503/3345 3814/3505/3347\nf 3816/3504/3346 3814/3505/3347 3815/3503/3345\nf 3818/3508/3350 3808/3496/3338 3815/3503/3345\nf 972/3497/3339 3815/3503/3345 3808/3496/3338\nf 226/3338/3184 3691/3339/3185 3817/3509/3351\nf 3818/3508/3350 3817/3509/3351 3691/3339/3185\nf 3822/3512/3354 3819/3511/3353 3820/3516/3358\nf 973/3517/3359 3820/3516/3358 3819/3511/3353\nf 3822/3512/3354 3821/3514/3356 3702/3352/3198\nf 943/3353/3199 3702/3352/3198 3821/3514/3356\nf 3826/3518/3360 3823/3519/3361 3824/3522/3364\nf 238/3679/3517 3824/3522/3364 3823/3519/3361\nf 976/3515/3357 3820/3516/3358 3825/3520/3362\nf 3826/3518/3360 3825/3520/3362 3820/3516/3358\nf 3830/3524/3366 3825/3520/3362 3827/3527/3369\nf 974/3521/3363 3827/3527/3369 3825/3520/3362\nf 975/3529/3371 3829/3523/3365 3828/3525/3367\nf 3830/3524/3366 3828/3525/3367 3829/3523/3365\nf 3832/3528/3370 3821/3514/3356 3829/3523/3365\nf 976/3515/3357 3829/3523/3365 3821/3514/3356\nf 3832/3528/3370 3831/3530/3372 3705/3357/3203\nf 228/3358/3204 3705/3357/3203 3831/3530/3372\nf 975/3529/3371 3833/3532/3374 3831/3530/3372\nf 3835/3531/3373 3831/3530/3372 3833/3532/3374\nf 3835/3531/3373 3834/3534/3376 3714/3368/3214\nf 946/3369/3215 3714/3368/3214 3834/3534/3376\nf 3838/3535/3377 3828/3525/3367 3836/3538/3380\nf 239/3526/3368 3836/3538/3380 3828/3525/3367\nf 979/3533/3375 3833/3532/3374 3837/3536/3378\nf 3838/3535/3377 3837/3536/3378 3833/3532/3374\nf 3842/3540/3382 3837/3536/3378 3839/3543/3385\nf 977/3537/3379 3839/3543/3385 3837/3536/3378\nf 978/3546/3388 3841/3539/3381 3840/3541/3383\nf 3842/3540/3382 3840/3541/3383 3841/3539/3381\nf 3844/3544/3386 3834/3534/3376 3841/3539/3381\nf 979/3533/3375 3841/3539/3381 3834/3534/3376\nf 3844/3544/3386 3843/3545/3387 3717/3373/3219\nf 229/3374/3220 3717/3373/3219 3843/3545/3387\nf 3843/3545/3387 978/3546/3388 3847/3547/3389\nf 3845/3548/3390 3847/3547/3389 978/3546/3388\nf 3726/3384/3230 3847/3547/3389 949/3386/3232\nf 3846/3549/3391 949/3386/3232 3847/3547/3389\nf 3840/3541/3383 240/3542/3384 3850/3551/3393\nf 3848/3552/3394 3850/3551/3393 240/3542/3384\nf 3845/3548/3390 3850/3551/3393 982/3550/3392\nf 3849/3553/3395 982/3550/3392 3850/3551/3393\nf 3849/3553/3395 980/3554/3396 3854/3556/3398\nf 3851/3557/3399 3854/3556/3398 980/3554/3396\nf 3853/3555/3397 3854/3556/3398 981/3562/3404\nf 3852/3558/3400 981/3562/3404 3854/3556/3398\nf 3846/3549/3391 982/3550/3392 3856/3560/3402\nf 3853/3555/3397 3856/3560/3402 982/3550/3392\nf 3729/3389/3235 3856/3560/3402 230/3391/3237\nf 3855/3561/3403 230/3391/3237 3856/3560/3402\nf 3855/3561/3403 981/3562/3404 3859/3563/3405\nf 3857/3564/3406 3859/3563/3405 981/3562/3404\nf 3738/3400/3246 3859/3563/3405 952/3402/3248\nf 3858/3565/3407 952/3402/3248 3859/3563/3405\nf 3862/3567/3409 3852/3558/3400 3860/3570/3412\nf 241/3559/3401 3860/3570/3412 3852/3558/3400\nf 985/3566/3408 3857/3564/3406 3861/3568/3410\nf 3862/3567/3409 3861/3568/3410 3857/3564/3406\nf 3866/3572/3414 3861/3568/3410 3863/3575/3417\nf 983/3569/3411 3863/3575/3417 3861/3568/3410\nf 984/3578/3420 3865/3571/3413 3864/3573/3415\nf 3866/3572/3414 3864/3573/3415 3865/3571/3413\nf 3868/3576/3418 3858/3565/3407 3865/3571/3413\nf 985/3566/3408 3865/3571/3413 3858/3565/3407\nf 3741/3405/3251 3868/3576/3418 231/3407/3253\nf 3867/3577/3419 231/3407/3253 3868/3576/3418\nf 3871/3579/3421 3867/3577/3419 3869/3582/3424\nf 984/3578/3420 3869/3582/3424 3867/3577/3419\nf 955/3418/3264 3750/3416/3262 3870/3580/3422\nf 3871/3579/3421 3870/3580/3422 3750/3416/3262\nf 3874/3583/3425 3864/3573/3415 3872/3586/3428\nf 242/3574/3416 3872/3586/3428 3864/3573/3415\nf 988/3581/3423 3869/3582/3424 3873/3584/3426\nf 3874/3583/3425 3873/3584/3426 3869/3582/3424\nf 3878/3588/3430 3873/3584/3426 3875/3591/3433\nf 986/3585/3427 3875/3591/3433 3873/3584/3426\nf 987/3594/3436 3877/3587/3429 3876/3589/3431\nf 3878/3588/3430 3876/3589/3431 3877/3587/3429\nf 3880/3592/3434 3870/3580/3422 3877/3587/3429\nf 988/3581/3423 3877/3587/3429 3870/3580/3422\nf 232/3422/3268 3753/3423/3269 3879/3593/3435\nf 3880/3592/3434 3879/3593/3435 3753/3423/3269\nf 3883/3596/3437 3879/3597/3435 3881/3600/3440\nf 987/3601/3436 3881/3600/3440 3879/3597/3435\nf 958/3437/3279 3762/3438/3280 3882/3598/3438\nf 3883/3596/3437 3882/3598/3438 3762/3438/3280\nf 3876/3603/3431 243/3763/3432 3886/3602/3441\nf 3884/3604/3442 3886/3602/3441 243/3763/3432\nf 3881/3600/3440 3886/3602/3441 991/3599/3439\nf 3885/3605/3443 991/3599/3439 3886/3602/3441\nf 3890/3608/3446 3885/3605/3443 3887/3611/3449\nf 989/3606/3444 3887/3611/3449 3885/3605/3443\nf 990/3614/3452 3889/3607/3445 3888/3609/3447\nf 3890/3608/3446 3888/3609/3447 3889/3607/3445\nf 3892/3612/3450 3882/3598/3438 3889/3607/3445\nf 991/3599/3439 3889/3607/3445 3882/3598/3438\nf 233/3442/3284 3765/3443/3285 3891/3613/3451\nf 3892/3612/3450 3891/3613/3451 3765/3443/3285\nf 3891/3613/3451 990/3614/3452 3895/3615/3453\nf 3893/3616/3454 3895/3615/3453 990/3614/3452\nf 3774/3452/3294 3895/3615/3453 961/3454/3296\nf 3894/3617/3455 961/3454/3296 3895/3615/3453\nf 3888/3609/3447 244/3610/3448 3898/3619/3457\nf 3896/3620/3458 3898/3619/3457 244/3610/3448\nf 3893/3616/3454 3898/3619/3457 994/3618/3456\nf 3897/3621/3459 994/3618/3456 3898/3619/3457\nf 3902/3624/3462 3897/3621/3459 3899/3627/3465\nf 992/3622/3460 3899/3627/3465 3897/3621/3459\nf 993/3630/3468 3901/3623/3461 3900/3625/3463\nf 3902/3624/3462 3900/3625/3463 3901/3623/3461\nf 3904/3628/3466 3894/3617/3455 3901/3623/3461\nf 994/3618/3456 3901/3623/3461 3894/3617/3455\nf 234/3458/3300 3777/3459/3301 3903/3629/3467\nf 3904/3628/3466 3903/3629/3467 3777/3459/3301\nf 3903/3629/3467 993/3630/3468 3907/3631/3469\nf 3905/3632/3470 3907/3631/3469 993/3630/3468\nf 3786/3468/3310 3907/3631/3469 964/3470/3312\nf 3906/3633/3471 964/3470/3312 3907/3631/3469\nf 3900/3625/3463 245/3626/3464 3910/3635/3473\nf 3908/3636/3474 3910/3635/3473 245/3626/3464\nf 3905/3632/3470 3910/3635/3473 997/3634/3472\nf 3909/3637/3475 997/3634/3472 3910/3635/3473\nf 3914/3640/3478 3909/3637/3475 3911/3643/3481\nf 995/3638/3476 3911/3643/3481 3909/3637/3475\nf 996/3646/3484 3913/3639/3477 3912/3641/3479\nf 3914/3640/3478 3912/3641/3479 3913/3639/3477\nf 3916/3644/3482 3906/3633/3471 3913/3639/3477\nf 997/3634/3472 3913/3639/3477 3906/3633/3471\nf 235/3474/3316 3789/3475/3317 3915/3645/3483\nf 3916/3644/3482 3915/3645/3483 3789/3475/3317\nf 3915/3645/3483 996/3646/3484 3919/3647/3485\nf 3917/3650/3488 3919/3647/3485 996/3646/3484\nf 967/3485/3327 3798/3486/3328 3918/3648/3486\nf 3919/3647/3485 3918/3648/3486 3798/3486/3328\nf 3912/3641/3479 246/3642/3480 3922/3651/3489\nf 3920/3652/3490 3922/3651/3489 246/3642/3480\nf 1000/3649/3487 3917/3650/3488 3921/3653/3491\nf 3922/3651/3489 3921/3653/3491 3917/3650/3488\nf 3926/3656/3494 3921/3653/3491 3923/3659/3497\nf 998/3654/3492 3923/3659/3497 3921/3653/3491\nf 999/3662/3500 3925/3655/3493 3924/3657/3495\nf 3926/3656/3494 3924/3657/3495 3925/3655/3493\nf 3928/3660/3498 3918/3648/3486 3925/3655/3493\nf 1000/3649/3487 3925/3655/3493 3918/3648/3486\nf 236/3490/3332 3801/3491/3333 3927/3661/3499\nf 3928/3660/3498 3927/3661/3499 3801/3491/3333\nf 3931/3663/3501 3927/3661/3499 3929/3666/3504\nf 999/3662/3500 3929/3666/3504 3927/3661/3499\nf 970/3501/3343 3810/3502/3344 3930/3664/3502\nf 3931/3663/3501 3930/3664/3502 3810/3502/3344\nf 3924/3657/3495 247/3658/3496 3934/3667/3505\nf 3932/3668/3506 3934/3667/3505 247/3658/3496\nf 1003/3665/3503 3929/3666/3504 3933/3669/3507\nf 3934/3667/3505 3933/3669/3507 3929/3666/3504\nf 3938/3672/3510 3933/3669/3507 3935/3675/3513\nf 1001/3670/3508 3935/3675/3513 3933/3669/3507\nf 1002/3678/3516 3937/3671/3509 3936/3673/3511\nf 3938/3672/3510 3936/3673/3511 3937/3671/3509\nf 3940/3676/3514 3930/3664/3502 3937/3671/3509\nf 1003/3665/3503 3937/3671/3509 3930/3664/3502\nf 237/3506/3348 3813/3507/3349 3939/3677/3515\nf 3940/3676/3514 3939/3677/3515 3813/3507/3349\nf 3941/3681/3519 1004/3685/3523 3944/3680/3518\nf 3942/3682/3520 3944/3680/3518 1004/3685/3523\nf 974/3521/3363 3824/3522/3364 3943/3683/3521\nf 3944/3680/3518 3943/3683/3521 3824/3522/3364\nf 3945/3686/3524 249/3847/3681 3948/3687/3525\nf 3946/3688/3526 3948/3687/3525 249/3847/3681\nf 3942/3682/3520 3948/3687/3525 1007/3684/3522\nf 3947/3689/3527 1007/3684/3522 3948/3687/3525\nf 3947/3689/3527 1005/3690/3528 3952/3692/3530\nf 3949/3693/3531 3952/3692/3530 1005/3690/3528\nf 3951/3691/3529 3952/3692/3530 1006/3698/3536\nf 3950/3694/3532 1006/3698/3536 3952/3692/3530\nf 3943/3683/3521 1007/3684/3522 3954/3696/3534\nf 3951/3691/3529 3954/3696/3534 1007/3684/3522\nf 239/3526/3368 3827/3527/3369 3953/3697/3535\nf 3954/3696/3534 3953/3697/3535 3827/3527/3369\nf 3953/3697/3535 1006/3698/3536 3957/3699/3537\nf 3955/3700/3538 3957/3699/3537 1006/3698/3536\nf 977/3537/3379 3836/3538/3380 3956/3701/3539\nf 3957/3699/3537 3956/3701/3539 3836/3538/3380\nf 3950/3694/3532 250/3695/3533 3960/3703/3541\nf 3958/3704/3542 3960/3703/3541 250/3695/3533\nf 3955/3700/3538 3960/3703/3541 1010/3702/3540\nf 3959/3705/3543 1010/3702/3540 3960/3703/3541\nf 3959/3705/3543 1008/3706/3544 3964/3708/3546\nf 3961/3709/3547 3964/3708/3546 1008/3706/3544\nf 3963/3707/3545 3964/3708/3546 1009/3714/3552\nf 3962/3710/3548 1009/3714/3552 3964/3708/3546\nf 3956/3701/3539 1010/3702/3540 3966/3712/3550\nf 3963/3707/3545 3966/3712/3550 1010/3702/3540\nf 240/3542/3384 3839/3543/3385 3965/3713/3551\nf 3966/3712/3550 3965/3713/3551 3839/3543/3385\nf 3965/3713/3551 1009/3714/3552 3969/3715/3553\nf 3967/3716/3554 3969/3715/3553 1009/3714/3552\nf 3848/3552/3394 3969/3715/3553 980/3554/3396\nf 3968/3717/3555 980/3554/3396 3969/3715/3553\nf 3962/3710/3548 251/3711/3549 3972/3719/3557\nf 3970/3720/3558 3972/3719/3557 251/3711/3549\nf 3967/3716/3554 3972/3719/3557 1013/3718/3556\nf 3971/3721/3559 1013/3718/3556 3972/3719/3557\nf 3971/3721/3559 1011/3722/3560 3976/3724/3562\nf 3973/3725/3563 3976/3724/3562 1011/3722/3560\nf 3975/3723/3561 3976/3724/3562 1012/3730/3568\nf 3974/3726/3564 1012/3730/3568 3976/3724/3562\nf 3968/3717/3555 1013/3718/3556 3978/3728/3566\nf 3975/3723/3561 3978/3728/3566 1013/3718/3556\nf 3851/3557/3399 3978/3728/3566 241/3559/3401\nf 3977/3729/3567 241/3559/3401 3978/3728/3566\nf 3977/3729/3567 1012/3730/3568 3981/3731/3569\nf 3979/3732/3570 3981/3731/3569 1012/3730/3568\nf 983/3569/3411 3860/3570/3412 3980/3733/3571\nf 3981/3731/3569 3980/3733/3571 3860/3570/3412\nf 3974/3726/3564 252/3727/3565 3984/3735/3573\nf 3982/3736/3574 3984/3735/3573 252/3727/3565\nf 3979/3732/3570 3984/3735/3573 1016/3734/3572\nf 3983/3737/3575 1016/3734/3572 3984/3735/3573\nf 3983/3737/3575 1014/3738/3576 3988/3740/3578\nf 3985/3741/3579 3988/3740/3578 1014/3738/3576\nf 3987/3739/3577 3988/3740/3578 1015/3746/3584\nf 3986/3742/3580 1015/3746/3584 3988/3740/3578\nf 3980/3733/3571 1016/3734/3572 3990/3744/3582\nf 3987/3739/3577 3990/3744/3582 1016/3734/3572\nf 242/3574/3416 3863/3575/3417 3989/3745/3583\nf 3990/3744/3582 3989/3745/3583 3863/3575/3417\nf 3989/3745/3583 1015/3746/3584 3993/3747/3585\nf 3991/3748/3586 3993/3747/3585 1015/3746/3584\nf 986/3585/3427 3872/3586/3428 3992/3749/3587\nf 3993/3747/3585 3992/3749/3587 3872/3586/3428\nf 3986/3742/3580 253/3743/3581 3996/3751/3589\nf 3994/3752/3590 3996/3751/3589 253/3743/3581\nf 3991/3748/3586 3996/3751/3589 1019/3750/3588\nf 3995/3753/3591 1019/3750/3588 3996/3751/3589\nf 3995/3753/3591 1017/3754/3592 4000/3756/3594\nf 3997/3757/3595 4000/3756/3594 1017/3754/3592\nf 3999/3755/3593 4000/3756/3594 1018/3762/3600\nf 3998/3758/3596 1018/3762/3600 4000/3756/3594\nf 3992/3749/3587 1019/3750/3588 4002/3760/3598\nf 3999/3755/3593 4002/3760/3598 1019/3750/3588\nf 243/3590/3432 3875/3591/3433 4001/3761/3599\nf 4002/3760/3598 4001/3761/3599 3875/3591/3433\nf 4001/3764/3599 1018/3769/3600 4005/3765/3601\nf 4003/3766/3602 4005/3765/3601 1018/3769/3600\nf 3884/3604/3442 4005/3765/3601 989/3606/3444\nf 4004/3767/3603 989/3606/3444 4005/3765/3601\nf 3998/3770/3596 254/3931/3597 4008/3771/3605\nf 4006/3772/3606 4008/3771/3605 254/3931/3597\nf 4003/3766/3602 4008/3771/3605 1022/3768/3604\nf 4007/3773/3607 1022/3768/3604 4008/3771/3605\nf 4007/3773/3607 1020/3774/3608 4012/3776/3610\nf 4009/3777/3611 4012/3776/3610 1020/3774/3608\nf 4011/3775/3609 4012/3776/3610 1021/3782/3616\nf 4010/3778/3612 1021/3782/3616 4012/3776/3610\nf 4004/3767/3603 1022/3768/3604 4014/3780/3614\nf 4011/3775/3609 4014/3780/3614 1022/3768/3604\nf 244/3610/3448 3887/3611/3449 4013/3781/3615\nf 4014/3780/3614 4013/3781/3615 3887/3611/3449\nf 4013/3781/3615 1021/3782/3616 4017/3783/3617\nf 4015/3784/3618 4017/3783/3617 1021/3782/3616\nf 3896/3620/3458 4017/3783/3617 992/3622/3460\nf 4016/3785/3619 992/3622/3460 4017/3783/3617\nf 4010/3778/3612 255/3779/3613 4020/3787/3621\nf 4018/3788/3622 4020/3787/3621 255/3779/3613\nf 4015/3784/3618 4020/3787/3621 1025/3786/3620\nf 4019/3789/3623 1025/3786/3620 4020/3787/3621\nf 4019/3789/3623 1023/3790/3624 4024/3792/3626\nf 4021/3793/3627 4024/3792/3626 1023/3790/3624\nf 4023/3791/3625 4024/3792/3626 1024/3798/3632\nf 4022/3794/3628 1024/3798/3632 4024/3792/3626\nf 4016/3785/3619 1025/3786/3620 4026/3796/3630\nf 4023/3791/3625 4026/3796/3630 1025/3786/3620\nf 245/3626/3464 3899/3627/3465 4025/3797/3631\nf 4026/3796/3630 4025/3797/3631 3899/3627/3465\nf 4025/3797/3631 1024/3798/3632 4029/3799/3633\nf 4027/3800/3634 4029/3799/3633 1024/3798/3632\nf 3908/3636/3474 4029/3799/3633 995/3638/3476\nf 4028/3801/3635 995/3638/3476 4029/3799/3633\nf 4022/3794/3628 256/3795/3629 4032/3803/3637\nf 4030/3804/3638 4032/3803/3637 256/3795/3629\nf 4027/3800/3634 4032/3803/3637 1028/3802/3636\nf 4031/3805/3639 1028/3802/3636 4032/3803/3637\nf 4031/3805/3639 1026/3806/3640 4036/3808/3642\nf 4033/3809/3643 4036/3808/3642 1026/3806/3640\nf 4035/3807/3641 4036/3808/3642 1027/3814/3648\nf 4034/3810/3644 1027/3814/3648 4036/3808/3642\nf 4028/3801/3635 1028/3802/3636 4038/3812/3646\nf 4035/3807/3641 4038/3812/3646 1028/3802/3636\nf 246/3642/3480 3911/3643/3481 4037/3813/3647\nf 4038/3812/3646 4037/3813/3647 3911/3643/3481\nf 4037/3813/3647 1027/3814/3648 4041/3815/3649\nf 4039/3816/3650 4041/3815/3649 1027/3814/3648\nf 3920/3652/3490 4041/3815/3649 998/3654/3492\nf 4040/3817/3651 998/3654/3492 4041/3815/3649\nf 4034/3810/3644 257/3811/3645 4044/3819/3653\nf 4042/3820/3654 4044/3819/3653 257/3811/3645\nf 4039/3816/3650 4044/3819/3653 1031/3818/3652\nf 4043/3821/3655 1031/3818/3652 4044/3819/3653\nf 4043/3821/3655 1029/3822/3656 4048/3824/3658\nf 4045/3825/3659 4048/3824/3658 1029/3822/3656\nf 4047/3823/3657 4048/3824/3658 1030/3830/3664\nf 4046/3826/3660 1030/3830/3664 4048/3824/3658\nf 4040/3817/3651 1031/3818/3652 4050/3828/3662\nf 4047/3823/3657 4050/3828/3662 1031/3818/3652\nf 247/3658/3496 3923/3659/3497 4049/3829/3663\nf 4050/3828/3662 4049/3829/3663 3923/3659/3497\nf 4049/3829/3663 1030/3830/3664 4053/3831/3665\nf 4051/3832/3666 4053/3831/3665 1030/3830/3664\nf 3932/3668/3506 4053/3831/3665 1001/3670/3508\nf 4052/3833/3667 1001/3670/3508 4053/3831/3665\nf 4046/3826/3660 258/3827/3661 4056/3835/3669\nf 4054/3836/3670 4056/3835/3669 258/3827/3661\nf 4051/3832/3666 4056/3835/3669 1034/3834/3668\nf 4055/3837/3671 1034/3834/3668 4056/3835/3669\nf 4055/3837/3671 1032/3838/3672 4060/3840/3674\nf 4057/3841/3675 4060/3840/3674 1032/3838/3672\nf 4059/3839/3673 4060/3840/3674 1033/3846/3680\nf 4058/3842/3676 1033/3846/3680 4060/3840/3674\nf 4052/3833/3667 1034/3834/3668 4062/3844/3678\nf 4059/3839/3673 4062/3844/3678 1034/3834/3668\nf 248/3674/3512 3935/3675/3513 4061/3845/3679\nf 4062/3844/3678 4061/3845/3679 3935/3675/3513\nf 4063/3848/3682 1035/3853/3687 4066/3849/3683\nf 4064/3850/3684 4066/3849/3683 1035/3853/3687\nf 3946/3688/3526 4066/3849/3683 1005/3690/3528\nf 4065/3851/3685 1005/3690/3528 4066/3849/3683\nf 4067/3854/3688 260/4015/3845 4070/3855/3689\nf 4068/3856/3690 4070/3855/3689 260/4015/3845\nf 4064/3850/3684 4070/3855/3689 1038/3852/3686\nf 4069/3857/3691 1038/3852/3686 4070/3855/3689\nf 4069/3857/3691 1036/3858/3692 4074/3860/3694\nf 4071/3861/3695 4074/3860/3694 1036/3858/3692\nf 4073/3859/3693 4074/3860/3694 1037/3866/3700\nf 4072/3862/3696 1037/3866/3700 4074/3860/3694\nf 4065/3851/3685 1038/3852/3686 4076/3864/3698\nf 4073/3859/3693 4076/3864/3698 1038/3852/3686\nf 3949/3693/3531 4076/3864/3698 250/3695/3533\nf 4075/3865/3699 250/3695/3533 4076/3864/3698\nf 4075/3865/3699 1037/3866/3700 4079/3867/3701\nf 4077/3868/3702 4079/3867/3701 1037/3866/3700\nf 3958/3704/3542 4079/3867/3701 1008/3706/3544\nf 4078/3869/3703 1008/3706/3544 4079/3867/3701\nf 4072/3862/3696 261/3863/3697 4082/3871/3705\nf 4080/3872/3706 4082/3871/3705 261/3863/3697\nf 4077/3868/3702 4082/3871/3705 1041/3870/3704\nf 4081/3873/3707 1041/3870/3704 4082/3871/3705\nf 4081/3873/3707 1039/3874/3708 4086/3876/3710\nf 4083/3877/3711 4086/3876/3710 1039/3874/3708\nf 4085/3875/3709 4086/3876/3710 1040/3882/3716\nf 4084/3878/3712 1040/3882/3716 4086/3876/3710\nf 4078/3869/3703 1041/3870/3704 4088/3880/3714\nf 4085/3875/3709 4088/3880/3714 1041/3870/3704\nf 3961/3709/3547 4088/3880/3714 251/3711/3549\nf 4087/3881/3715 251/3711/3549 4088/3880/3714\nf 4087/3881/3715 1040/3882/3716 4091/3883/3717\nf 4089/3884/3718 4091/3883/3717 1040/3882/3716\nf 3970/3720/3558 4091/3883/3717 1011/3722/3560\nf 4090/3885/3719 1011/3722/3560 4091/3883/3717\nf 4084/3878/3712 262/3879/3713 4094/3887/3721\nf 4092/3888/3722 4094/3887/3721 262/3879/3713\nf 4089/3884/3718 4094/3887/3721 1044/3886/3720\nf 4093/3889/3723 1044/3886/3720 4094/3887/3721\nf 4093/3889/3723 1042/3890/3724 4098/3892/3726\nf 4095/3893/3727 4098/3892/3726 1042/3890/3724\nf 4097/3891/3725 4098/3892/3726 1043/3898/3732\nf 4096/3894/3728 1043/3898/3732 4098/3892/3726\nf 4090/3885/3719 1044/3886/3720 4100/3896/3730\nf 4097/3891/3725 4100/3896/3730 1044/3886/3720\nf 3973/3725/3563 4100/3896/3730 252/3727/3565\nf 4099/3897/3731 252/3727/3565 4100/3896/3730\nf 4099/3897/3731 1043/3898/3732 4103/3899/3733\nf 4101/3900/3734 4103/3899/3733 1043/3898/3732\nf 3982/3736/3574 4103/3899/3733 1014/3738/3576\nf 4102/3901/3735 1014/3738/3576 4103/3899/3733\nf 4096/3894/3728 263/3895/3729 4106/3903/3737\nf 4104/3904/3738 4106/3903/3737 263/3895/3729\nf 4101/3900/3734 4106/3903/3737 1047/3902/3736\nf 4105/3905/3739 1047/3902/3736 4106/3903/3737\nf 4105/3905/3739 1045/3906/3740 4110/3908/3742\nf 4107/3909/3743 4110/3908/3742 1045/3906/3740\nf 4109/3907/3741 4110/3908/3742 1046/3914/3748\nf 4108/3910/3744 1046/3914/3748 4110/3908/3742\nf 4102/3901/3735 1047/3902/3736 4112/3912/3746\nf 4109/3907/3741 4112/3912/3746 1047/3902/3736\nf 3985/3741/3579 4112/3912/3746 253/3743/3581\nf 4111/3913/3747 253/3743/3581 4112/3912/3746\nf 4111/3913/3747 1046/3914/3748 4115/3915/3749\nf 4113/3916/3750 4115/3915/3749 1046/3914/3748\nf 3994/3752/3590 4115/3915/3749 1017/3754/3592\nf 4114/3917/3751 1017/3754/3592 4115/3915/3749\nf 4108/3910/3744 264/3911/3745 4118/3919/3753\nf 4116/3920/3754 4118/3919/3753 264/3911/3745\nf 4113/3916/3750 4118/3919/3753 1050/3918/3752\nf 4117/3921/3755 1050/3918/3752 4118/3919/3753\nf 4117/3921/3755 1048/3922/3756 4122/3924/3758\nf 4119/3925/3759 4122/3924/3758 1048/3922/3756\nf 4121/3923/3757 4122/3924/3758 1049/3930/3764\nf 4120/3926/3760 1049/3930/3764 4122/3924/3758\nf 4114/3917/3751 1050/3918/3752 4124/3928/3762\nf 4121/3923/3757 4124/3928/3762 1050/3918/3752\nf 3997/3757/3595 4124/3928/3762 254/3759/3597\nf 4123/3929/3763 254/3759/3597 4124/3928/3762\nf 4123/3932/3763 1049/3937/3764 4127/3933/3765\nf 4125/3934/3766 4127/3933/3765 1049/3937/3764\nf 4006/3772/3606 4127/3933/3765 1020/3774/3608\nf 4126/3935/3767 1020/3774/3608 4127/3933/3765\nf 4120/3938/3760 265/4099/3761 4130/3939/3769\nf 4128/3940/3770 4130/3939/3769 265/4099/3761\nf 4125/3934/3766 4130/3939/3769 1053/3936/3768\nf 4129/3941/3771 1053/3936/3768 4130/3939/3769\nf 4129/3941/3771 1051/3942/3772 4134/3944/3774\nf 4131/3945/3775 4134/3944/3774 1051/3942/3772\nf 4133/3943/3773 4134/3944/3774 1052/3950/3780\nf 4132/3946/3776 1052/3950/3780 4134/3944/3774\nf 4126/3935/3767 1053/3936/3768 4136/3948/3778\nf 4133/3943/3773 4136/3948/3778 1053/3936/3768\nf 4009/3777/3611 4136/3948/3778 255/3779/3613\nf 4135/3949/3779 255/3779/3613 4136/3948/3778\nf 4135/3949/3779 1052/3950/3780 4139/3951/3781\nf 4137/3952/3782 4139/3951/3781 1052/3950/3780\nf 4018/3788/3622 4139/3951/3781 1023/3790/3624\nf 4138/3953/3783 1023/3790/3624 4139/3951/3781\nf 4132/3946/3776 266/3947/3777 4142/3955/3785\nf 4140/3956/3786 4142/3955/3785 266/3947/3777\nf 4137/3952/3782 4142/3955/3785 1056/3954/3784\nf 4141/3957/3787 1056/3954/3784 4142/3955/3785\nf 4141/3957/3787 1054/3958/3788 4146/3960/3790\nf 4143/3961/3791 4146/3960/3790 1054/3958/3788\nf 4145/3959/3789 4146/3960/3790 1055/3966/3796\nf 4144/3962/3792 1055/3966/3796 4146/3960/3790\nf 4138/3953/3783 1056/3954/3784 4148/3964/3794\nf 4145/3959/3789 4148/3964/3794 1056/3954/3784\nf 4021/3793/3627 4148/3964/3794 256/3795/3629\nf 4147/3965/3795 256/3795/3629 4148/3964/3794\nf 4147/3965/3795 1055/3966/3796 4151/3967/3797\nf 4149/3968/3798 4151/3967/3797 1055/3966/3796\nf 4030/3804/3638 4151/3967/3797 1026/3806/3640\nf 4150/3969/3799 1026/3806/3640 4151/3967/3797\nf 4144/3962/3792 267/3963/3793 4154/3971/3801\nf 4152/3972/3802 4154/3971/3801 267/3963/3793\nf 4149/3968/3798 4154/3971/3801 1059/3970/3800\nf 4153/3973/3803 1059/3970/3800 4154/3971/3801\nf 4153/3973/3803 1057/3974/3804 4158/3976/3806\nf 4155/3977/3807 4158/3976/3806 1057/3974/3804\nf 4157/3975/3805 4158/3976/3806 1058/3982/3812\nf 4156/3978/3808 1058/3982/3812 4158/3976/3806\nf 4150/3969/3799 1059/3970/3800 4160/3980/3810\nf 4157/3975/3805 4160/3980/3810 1059/3970/3800\nf 4033/3809/3643 4160/3980/3810 257/3811/3645\nf 4159/3981/3811 257/3811/3645 4160/3980/3810\nf 4159/3981/3811 1058/3982/3812 4163/3983/3813\nf 4161/3984/3814 4163/3983/3813 1058/3982/3812\nf 4042/3820/3654 4163/3983/3813 1029/3822/3656\nf 4162/3985/3815 1029/3822/3656 4163/3983/3813\nf 4156/3978/3808 268/3979/3809 4166/3987/3817\nf 4164/3988/3818 4166/3987/3817 268/3979/3809\nf 4161/3984/3814 4166/3987/3817 1062/3986/3816\nf 4165/3989/3819 1062/3986/3816 4166/3987/3817\nf 4165/3989/3819 1060/3990/3820 4170/3992/3822\nf 4167/3993/3823 4170/3992/3822 1060/3990/3820\nf 4169/3991/3821 4170/3992/3822 1061/3998/3828\nf 4168/3994/3824 1061/3998/3828 4170/3992/3822\nf 4162/3985/3815 1062/3986/3816 4172/3996/3826\nf 4169/3991/3821 4172/3996/3826 1062/3986/3816\nf 4045/3825/3659 4172/3996/3826 258/3827/3661\nf 4171/3997/3827 258/3827/3661 4172/3996/3826\nf 4171/3997/3827 1061/3998/3828 4175/3999/3829\nf 4173/4000/3830 4175/3999/3829 1061/3998/3828\nf 4054/3836/3670 4175/3999/3829 1032/3838/3672\nf 4174/4001/3831 1032/3838/3672 4175/3999/3829\nf 4168/3994/3824 269/3995/3825 4178/4003/3833\nf 4176/4004/3834 4178/4003/3833 269/3995/3825\nf 4173/4000/3830 4178/4003/3833 1065/4002/3832\nf 4177/4005/3835 1065/4002/3832 4178/4003/3833\nf 4177/4005/3835 1063/4006/3836 4182/4008/3838\nf 4179/4009/3839 4182/4008/3838 1063/4006/3836\nf 4181/4007/3837 4182/4008/3838 1064/4014/3844\nf 4180/4010/3840 1064/4014/3844 4182/4008/3838\nf 4174/4001/3831 1065/4002/3832 4184/4012/3842\nf 4181/4007/3837 4184/4012/3842 1065/4002/3832\nf 4057/3841/3675 4184/4012/3842 259/3843/3677\nf 4183/4013/3843 259/3843/3677 4184/4012/3842\nf 4188/4016/3846 4185/4017/3847 4186/4020/3850\nf 1066/4021/3851 4186/4020/3850 4185/4017/3847\nf 1036/3858/3692 4068/3856/3690 4187/4018/3848\nf 4188/4016/3846 4187/4018/3848 4068/3856/3690\nf 4192/4022/3852 4189/4023/3853 4190/4026/3856\nf 271/4183/4009 4190/4026/3856 4189/4023/3853\nf 1069/4019/3849 4186/4020/3850 4191/4024/3854\nf 4192/4022/3852 4191/4024/3854 4186/4020/3850\nf 4196/4028/3858 4191/4024/3854 4193/4031/3861\nf 1067/4025/3855 4193/4031/3861 4191/4024/3854\nf 1068/4034/3864 4195/4027/3857 4194/4029/3859\nf 4196/4028/3858 4194/4029/3859 4195/4027/3857\nf 4198/4032/3862 4187/4018/3848 4195/4027/3857\nf 1069/4019/3849 4195/4027/3857 4187/4018/3848\nf 261/3863/3697 4071/3861/3695 4197/4033/3863\nf 4198/4032/3862 4197/4033/3863 4071/3861/3695\nf 4201/4035/3865 4197/4033/3863 4199/4038/3868\nf 1068/4034/3864 4199/4038/3868 4197/4033/3863\nf 4080/3872/3706 4201/4035/3865 1039/3874/3708\nf 4200/4036/3866 1039/3874/3708 4201/4035/3865\nf 4204/4039/3869 4194/4029/3859 4202/4042/3872\nf 272/4030/3860 4202/4042/3872 4194/4029/3859\nf 1072/4037/3867 4199/4038/3868 4203/4040/3870\nf 4204/4039/3869 4203/4040/3870 4199/4038/3868\nf 4208/4044/3874 4203/4040/3870 4205/4047/3877\nf 1070/4041/3871 4205/4047/3877 4203/4040/3870\nf 1071/4050/3880 4207/4043/3873 4206/4045/3875\nf 4208/4044/3874 4206/4045/3875 4207/4043/3873\nf 4210/4048/3878 4200/4036/3866 4207/4043/3873\nf 1072/4037/3867 4207/4043/3873 4200/4036/3866\nf 262/3879/3713 4083/3877/3711 4209/4049/3879\nf 4210/4048/3878 4209/4049/3879 4083/3877/3711\nf 4213/4051/3881 4209/4049/3879 4211/4054/3884\nf 1071/4050/3880 4211/4054/3884 4209/4049/3879\nf 4092/3888/3722 4213/4051/3881 1042/3890/3724\nf 4212/4052/3882 1042/3890/3724 4213/4051/3881\nf 4216/4055/3885 4206/4045/3875 4214/4058/3888\nf 273/4046/3876 4214/4058/3888 4206/4045/3875\nf 1075/4053/3883 4211/4054/3884 4215/4056/3886\nf 4216/4055/3885 4215/4056/3886 4211/4054/3884\nf 4220/4060/3890 4215/4056/3886 4217/4063/3893\nf 1073/4057/3887 4217/4063/3893 4215/4056/3886\nf 1074/4066/3896 4219/4059/3889 4218/4061/3891\nf 4220/4060/3890 4218/4061/3891 4219/4059/3889\nf 4222/4064/3894 4212/4052/3882 4219/4059/3889\nf 1075/4053/3883 4219/4059/3889 4212/4052/3882\nf 263/3895/3729 4095/3893/3727 4221/4065/3895\nf 4222/4064/3894 4221/4065/3895 4095/3893/3727\nf 4221/4065/3895 1074/4066/3896 4225/4067/3897\nf 4223/4068/3898 4225/4067/3897 1074/4066/3896\nf 4104/3904/3738 4225/4067/3897 1045/3906/3740\nf 4224/4069/3899 1045/3906/3740 4225/4067/3897\nf 4228/4071/3901 4218/4061/3891 4226/4074/3904\nf 274/4062/3892 4226/4074/3904 4218/4061/3891\nf 4223/4068/3898 4228/4071/3901 1078/4070/3900\nf 4227/4072/3902 1078/4070/3900 4228/4071/3901\nf 4232/4076/3906 4227/4072/3902 4229/4079/3909\nf 1076/4073/3903 4229/4079/3909 4227/4072/3902\nf 1077/4082/3912 4231/4075/3905 4230/4077/3907\nf 4232/4076/3906 4230/4077/3907 4231/4075/3905\nf 4234/4080/3910 4224/4069/3899 4231/4075/3905\nf 1078/4070/3900 4231/4075/3905 4224/4069/3899\nf 264/3911/3745 4107/3909/3743 4233/4081/3911\nf 4234/4080/3910 4233/4081/3911 4107/3909/3743\nf 4233/4081/3911 1077/4082/3912 4237/4083/3913\nf 4235/4084/3914 4237/4083/3913 1077/4082/3912\nf 4116/3920/3754 4237/4083/3913 1048/3922/3756\nf 4236/4085/3915 1048/3922/3756 4237/4083/3913\nf 4230/4077/3907 275/4078/3908 4240/4087/3917\nf 4238/4088/3918 4240/4087/3917 275/4078/3908\nf 4235/4084/3914 4240/4087/3917 1081/4086/3916\nf 4239/4089/3919 1081/4086/3916 4240/4087/3917\nf 4244/4092/3922 4239/4089/3919 4241/4095/3925\nf 1079/4090/3920 4241/4095/3925 4239/4089/3919\nf 1080/4098/3928 4243/4091/3921 4242/4093/3923\nf 4244/4092/3922 4242/4093/3923 4243/4091/3921\nf 4246/4096/3926 4236/4085/3915 4243/4091/3921\nf 1081/4086/3916 4243/4091/3921 4236/4085/3915\nf 265/3927/3761 4119/3925/3759 4245/4097/3927\nf 4246/4096/3926 4245/4097/3927 4119/3925/3759\nf 4245/4100/3927 1080/4105/3928 4249/4101/3929\nf 4247/4102/3930 4249/4101/3929 1080/4105/3928\nf 4128/3940/3770 4249/4101/3929 1051/3942/3772\nf 4248/4103/3931 1051/3942/3772 4249/4101/3929\nf 4242/4106/3923 276/4248/3924 4252/4107/3933\nf 4250/4108/3934 4252/4107/3933 276/4248/3924\nf 4247/4102/3930 4252/4107/3933 1084/4104/3932\nf 4251/4109/3935 1084/4104/3932 4252/4107/3933\nf 4256/4112/3938 4251/4109/3935 4253/4115/3941\nf 1082/4110/3936 4253/4115/3941 4251/4109/3935\nf 1083/4118/3944 4255/4111/3937 4254/4113/3939\nf 4256/4112/3938 4254/4113/3939 4255/4111/3937\nf 4258/4116/3942 4248/4103/3931 4255/4111/3937\nf 1084/4104/3932 4255/4111/3937 4248/4103/3931\nf 266/3947/3777 4131/3945/3775 4257/4117/3943\nf 4258/4116/3942 4257/4117/3943 4131/3945/3775\nf 4257/4117/3943 1083/4118/3944 4261/4119/3945\nf 4259/4120/3946 4261/4119/3945 1083/4118/3944\nf 4140/3956/3786 4261/4119/3945 1054/3958/3788\nf 4260/4121/3947 1054/3958/3788 4261/4119/3945\nf 4254/4113/3939 277/4114/3940 4264/4123/3949\nf 4262/4124/3950 4264/4123/3949 277/4114/3940\nf 4259/4120/3946 4264/4123/3949 1087/4122/3948\nf 4263/4125/3951 1087/4122/3948 4264/4123/3949\nf 4268/4128/3954 4263/4125/3951 4265/4131/3957\nf 1085/4126/3952 4265/4131/3957 4263/4125/3951\nf 1086/4134/3960 4267/4127/3953 4266/4129/3955\nf 4268/4128/3954 4266/4129/3955 4267/4127/3953\nf 4270/4132/3958 4260/4121/3947 4267/4127/3953\nf 1087/4122/3948 4267/4127/3953 4260/4121/3947\nf 267/3963/3793 4143/3961/3791 4269/4133/3959\nf 4270/4132/3958 4269/4133/3959 4143/3961/3791\nf 4269/4133/3959 1086/4134/3960 4273/4135/3961\nf 4271/4136/3962 4273/4135/3961 1086/4134/3960\nf 4152/3972/3802 4273/4135/3961 1057/3974/3804\nf 4272/4137/3963 1057/3974/3804 4273/4135/3961\nf 4266/4129/3955 278/4130/3956 4276/4139/3965\nf 4274/4140/3966 4276/4139/3965 278/4130/3956\nf 4271/4136/3962 4276/4139/3965 1090/4138/3964\nf 4275/4141/3967 1090/4138/3964 4276/4139/3965\nf 4280/4144/3970 4275/4141/3967 4277/4147/3973\nf 1088/4142/3968 4277/4147/3973 4275/4141/3967\nf 1089/4150/3976 4279/4143/3969 4278/4145/3971\nf 4280/4144/3970 4278/4145/3971 4279/4143/3969\nf 4282/4148/3974 4272/4137/3963 4279/4143/3969\nf 1090/4138/3964 4279/4143/3969 4272/4137/3963\nf 268/3979/3809 4155/3977/3807 4281/4149/3975\nf 4282/4148/3974 4281/4149/3975 4155/3977/3807\nf 4281/4149/3975 1089/4150/3976 4285/4151/3977\nf 4283/4152/3978 4285/4151/3977 1089/4150/3976\nf 4164/3988/3818 4285/4151/3977 1060/3990/3820\nf 4284/4153/3979 1060/3990/3820 4285/4151/3977\nf 4278/4145/3971 279/4146/3972 4288/4155/3981\nf 4286/4156/3982 4288/4155/3981 279/4146/3972\nf 4283/4152/3978 4288/4155/3981 1093/4154/3980\nf 4287/4157/3983 1093/4154/3980 4288/4155/3981\nf 4292/4160/3986 4287/4157/3983 4289/4163/3989\nf 1091/4158/3984 4289/4163/3989 4287/4157/3983\nf 1092/4166/3992 4291/4159/3985 4290/4161/3987\nf 4292/4160/3986 4290/4161/3987 4291/4159/3985\nf 4294/4164/3990 4284/4153/3979 4291/4159/3985\nf 1093/4154/3980 4291/4159/3985 4284/4153/3979\nf 269/3995/3825 4167/3993/3823 4293/4165/3991\nf 4294/4164/3990 4293/4165/3991 4167/3993/3823\nf 4293/4165/3991 1092/4166/3992 4297/4167/3993\nf 4295/4168/3994 4297/4167/3993 1092/4166/3992\nf 4176/4004/3834 4297/4167/3993 1063/4006/3836\nf 4296/4169/3995 1063/4006/3836 4297/4167/3993\nf 4290/4161/3987 280/4162/3988 4300/4171/3997\nf 4298/4172/3998 4300/4171/3997 280/4162/3988\nf 4295/4168/3994 4300/4171/3997 1096/4170/3996\nf 4299/4173/3999 1096/4170/3996 4300/4171/3997\nf 4304/4176/4002 4299/4173/3999 4301/4179/4005\nf 1094/4174/4000 4301/4179/4005 4299/4173/3999\nf 1095/4182/4008 4303/4175/4001 4302/4177/4003\nf 4304/4176/4002 4302/4177/4003 4303/4175/4001\nf 4306/4180/4006 4296/4169/3995 4303/4175/4001\nf 1096/4170/3996 4303/4175/4001 4296/4169/3995\nf 270/4011/3841 4179/4009/3839 4305/4181/4007\nf 4306/4180/4006 4305/4181/4007 4179/4009/3839\nf 4310/4184/4010 4307/4185/4011 4308/4188/4014\nf 1097/4189/4015 4308/4188/4014 4307/4185/4011\nf 1067/4025/3855 4190/4026/3856 4309/4186/4012\nf 4310/4184/4010 4309/4186/4012 4190/4026/3856\nf 4311/4190/4016 150/2262/2169 4313/4191/4017\nf 2948/2260/2167 4313/4191/4017 150/2262/2169\nf 4308/4188/4014 4313/4191/4017 1099/4187/4013\nf 4312/4192/4018 1099/4187/4013 4313/4191/4017\nf 4312/4192/4018 749/2279/2186 4316/4194/4020\nf 2959/2278/2185 4316/4194/4020 749/2279/2186\nf 4315/4193/4019 4316/4194/4020 1098/4198/4024\nf 4314/4195/4021 1098/4198/4024 4316/4194/4020\nf 4318/4196/4022 4309/4186/4012 4315/4193/4019\nf 1099/4187/4013 4315/4193/4019 4309/4186/4012\nf 272/4030/3860 4193/4031/3861 4317/4197/4023\nf 4318/4196/4022 4317/4197/4023 4193/4031/3861\nf 4321/4199/4025 4317/4197/4023 4319/4202/4028\nf 1098/4198/4024 4319/4202/4028 4317/4197/4023\nf 1070/4041/3871 4202/4042/3872 4320/4200/4026\nf 4321/4199/4025 4320/4200/4026 4202/4042/3872\nf 4314/4195/4021 151/2284/2191 4323/4203/4029\nf 2963/2283/2190 4323/4203/4029 151/2284/2191\nf 1101/4201/4027 4319/4202/4028 4322/4204/4030\nf 4323/4203/4029 4322/4204/4030 4319/4202/4028\nf 4322/4204/4030 753/2299/2206 4326/4206/4032\nf 2973/2298/2205 4326/4206/4032 753/2299/2206\nf 1100/4210/4036 4325/4205/4031 4324/4207/4033\nf 4326/4206/4032 4324/4207/4033 4325/4205/4031\nf 4328/4208/4034 4320/4200/4026 4325/4205/4031\nf 1101/4201/4027 4325/4205/4031 4320/4200/4026\nf 273/4046/3876 4205/4047/3877 4327/4209/4035\nf 4328/4208/4034 4327/4209/4035 4205/4047/3877\nf 4331/4211/4037 4327/4209/4035 4329/4214/4040\nf 1100/4210/4036 4329/4214/4040 4327/4209/4035\nf 1073/4057/3887 4214/4058/3888 4330/4212/4038\nf 4331/4211/4037 4330/4212/4038 4214/4058/3888\nf 4324/4207/4033 152/2304/2211 4333/4215/4041\nf 2977/2303/2210 4333/4215/4041 152/2304/2211\nf 1103/4213/4039 4329/4214/4040 4332/4216/4042\nf 4333/4215/4041 4332/4216/4042 4329/4214/4040\nf 4332/4216/4042 757/2319/2226 4336/4218/4044\nf 2987/2318/2225 4336/4218/4044 757/2319/2226\nf 1102/4222/4048 4335/4217/4043 4334/4219/4045\nf 4336/4218/4044 4334/4219/4045 4335/4217/4043\nf 4338/4220/4046 4330/4212/4038 4335/4217/4043\nf 1103/4213/4039 4335/4217/4043 4330/4212/4038\nf 274/4062/3892 4217/4063/3893 4337/4221/4047\nf 4338/4220/4046 4337/4221/4047 4217/4063/3893\nf 4341/4223/4049 4337/4221/4047 4339/4226/4052\nf 1102/4222/4048 4339/4226/4052 4337/4221/4047\nf 1076/4073/3903 4226/4074/3904 4340/4224/4050\nf 4341/4223/4049 4340/4224/4050 4226/4074/3904\nf 4343/4227/4053 4334/4219/4045 2991/2323/2230\nf 153/2324/2231 2991/2323/2230 4334/4219/4045\nf 1105/4225/4051 4339/4226/4052 4342/4228/4054\nf 4343/4227/4053 4342/4228/4054 4339/4226/4052\nf 4346/4230/4056 4342/4228/4054 3001/2339/2246\nf 761/2338/2245 3001/2339/2246 4342/4228/4054\nf 1104/4234/4060 4345/4229/4055 4344/4231/4057\nf 4346/4230/4056 4344/4231/4057 4345/4229/4055\nf 4348/4232/4058 4340/4224/4050 4345/4229/4055\nf 1105/4225/4051 4345/4229/4055 4340/4224/4050\nf 275/4078/3908 4229/4079/3909 4347/4233/4059\nf 4348/4232/4058 4347/4233/4059 4229/4079/3909\nf 4351/4235/4061 4347/4233/4059 4349/4236/4062\nf 1104/4234/4060 4349/4236/4062 4347/4233/4059\nf 4238/4088/3918 4351/4235/4061 1079/4090/3920\nf 4350/4237/4063 1079/4090/3920 4351/4235/4061\nf 4353/4239/4065 4344/4231/4057 3005/2344/2251\nf 154/2343/2250 3005/2344/2251 4344/4231/4057\nf 1107/4238/4064 4349/4236/4062 4352/4240/4066\nf 4353/4239/4065 4352/4240/4066 4349/4236/4062\nf 4356/4242/4068 4352/4240/4066 3015/2359/2266\nf 765/2358/2265 3015/2359/2266 4352/4240/4066\nf 1106/4247/4072 4355/4241/4067 4354/4243/4069\nf 4356/4242/4068 4354/4243/4069 4355/4241/4067\nf 4358/4245/4070 4350/4237/4063 4355/4241/4067\nf 1107/4238/4064 4355/4241/4067 4350/4237/4063\nf 276/4094/3924 4241/4095/3925 4357/4246/4071\nf 4358/4245/4070 4357/4246/4071 4241/4095/3925\nf 4357/4249/4071 1106/4254/4072 4361/4250/4073\nf 4359/4251/4074 4361/4250/4073 1106/4254/4072\nf 4250/4108/3934 4361/4250/4073 1082/4110/3936\nf 4360/4252/4075 1082/4110/3936 4361/4250/4073\nf 4354/4255/4069 155/2364/2270 4363/4256/4077\nf 3019/2365/2271 4363/4256/4077 155/2364/2270\nf 4359/4251/4074 4363/4256/4077 1109/4253/4076\nf 4362/4257/4078 1109/4253/4076 4363/4256/4077\nf 4366/4259/4080 4362/4257/4078 3029/2381/2285\nf 769/2382/2286 3029/2381/2285 4362/4257/4078\nf 1108/4263/4084 4365/4258/4079 4364/4260/4081\nf 4366/4259/4080 4364/4260/4081 4365/4258/4079\nf 4368/4261/4082 4360/4252/4075 4365/4258/4079\nf 1109/4253/4076 4365/4258/4079 4360/4252/4075\nf 277/4114/3940 4253/4115/3941 4367/4262/4083\nf 4368/4261/4082 4367/4262/4083 4253/4115/3941\nf 4367/4262/4083 1108/4263/4084 4371/4264/4085\nf 4369/4265/4086 4371/4264/4085 1108/4263/4084\nf 4262/4124/3950 4371/4264/4085 1085/4126/3952\nf 4370/4266/4087 1085/4126/3952 4371/4264/4085\nf 4364/4260/4081 156/2386/2290 4373/4268/4089\nf 3033/2387/2291 4373/4268/4089 156/2386/2290\nf 4369/4265/4086 4373/4268/4089 1111/4267/4088\nf 4372/4269/4090 1111/4267/4088 4373/4268/4089\nf 4376/4271/4092 4372/4269/4090 3043/2401/2305\nf 773/2402/2306 3043/2401/2305 4372/4269/4090\nf 1110/4275/4096 4375/4270/4091 4374/4272/4093\nf 4376/4271/4092 4374/4272/4093 4375/4270/4091\nf 4378/4273/4094 4370/4266/4087 4375/4270/4091\nf 1111/4267/4088 4375/4270/4091 4370/4266/4087\nf 278/4130/3956 4265/4131/3957 4377/4274/4095\nf 4378/4273/4094 4377/4274/4095 4265/4131/3957\nf 4377/4274/4095 1110/4275/4096 4381/4276/4097\nf 4379/4277/4098 4381/4276/4097 1110/4275/4096\nf 4274/4140/3966 4381/4276/4097 1088/4142/3968\nf 4380/4278/4099 1088/4142/3968 4381/4276/4097\nf 4374/4272/4093 157/2406/2310 4383/4280/4101\nf 3047/2407/2311 4383/4280/4101 157/2406/2310\nf 4379/4277/4098 4383/4280/4101 1113/4279/4100\nf 4382/4281/4102 1113/4279/4100 4383/4280/4101\nf 4386/4283/4104 4382/4281/4102 3057/2421/2325\nf 777/2422/2326 3057/2421/2325 4382/4281/4102\nf 1112/4287/4108 4385/4282/4103 4384/4284/4105\nf 4386/4283/4104 4384/4284/4105 4385/4282/4103\nf 4388/4285/4106 4380/4278/4099 4385/4282/4103\nf 1113/4279/4100 4385/4282/4103 4380/4278/4099\nf 279/4146/3972 4277/4147/3973 4387/4286/4107\nf 4388/4285/4106 4387/4286/4107 4277/4147/3973\nf 4387/4286/4107 1112/4287/4108 4391/4288/4109\nf 4389/4289/4110 4391/4288/4109 1112/4287/4108\nf 4286/4156/3982 4391/4288/4109 1091/4158/3984\nf 4390/4290/4111 1091/4158/3984 4391/4288/4109\nf 4384/4284/4105 158/2426/2330 4393/4292/4113\nf 3061/2427/2331 4393/4292/4113 158/2426/2330\nf 4389/4289/4110 4393/4292/4113 1115/4291/4112\nf 4392/4293/4114 1115/4291/4112 4393/4292/4113\nf 4396/4295/4116 4392/4293/4114 3071/2441/2345\nf 781/2442/2346 3071/2441/2345 4392/4293/4114\nf 1114/4299/4120 4395/4294/4115 4394/4296/4117\nf 4396/4295/4116 4394/4296/4117 4395/4294/4115\nf 4398/4297/4118 4390/4290/4111 4395/4294/4115\nf 1115/4291/4112 4395/4294/4115 4390/4290/4111\nf 280/4162/3988 4289/4163/3989 4397/4298/4119\nf 4398/4297/4118 4397/4298/4119 4289/4163/3989\nf 4397/4298/4119 1114/4299/4120 4401/4300/4121\nf 4399/4301/4122 4401/4300/4121 1114/4299/4120\nf 4298/4172/3998 4401/4300/4121 1094/4174/4000\nf 4400/4302/4123 1094/4174/4000 4401/4300/4121\nf 4394/4296/4117 159/2446/2350 4403/4304/4125\nf 3075/2447/2351 4403/4304/4125 159/2446/2350\nf 4399/4301/4122 4403/4304/4125 1117/4303/4124\nf 4402/4305/4126 1117/4303/4124 4403/4304/4125\nf 4406/4307/4128 4402/4305/4126 3085/2461/2365\nf 785/2462/2366 3085/2461/2365 4402/4305/4126\nf 1116/4312/4133 4405/4306/4127 4404/4308/4129\nf 4406/4307/4128 4404/4308/4129 4405/4306/4127\nf 4408/4310/4131 4400/4302/4123 4405/4306/4127\nf 1117/4303/4124 4405/4306/4127 4400/4302/4123\nf 281/4178/4004 4301/4179/4005 4407/4311/4132\nf 4408/4310/4131 4407/4311/4132 4301/4179/4005\nf 4409/4313/4134 1118/4318/4139 4412/4314/4135\nf 4410/4315/4136 4412/4314/4135 1118/4318/4139\nf 4412/4314/4135 4411/4316/4137 3331/2840/2698\nf 849/2845/2703 3331/2840/2698 4411/4316/4137\nf 4414/4323/4144 4416/4320/4141 282/5426/4171\nf 4413/4319/4140 282/5426/4171 4416/4320/4141\nf 4410/4315/4136 4416/4320/4141 1121/4317/4138\nf 4415/4322/4143 1121/4317/4138 4416/4320/4141\nf 4417/4328/4149 4420/4324/4145 1119/4321/4142\nf 4415/4322/4143 1119/4321/4142 4420/4324/4145\nf 4418/4327/4148 1120/4330/4151 4420/4324/4145\nf 4419/4325/4146 4420/4324/4145 1120/4330/4151\nf 4419/4325/4146 4422/4329/4150 1121/4317/4138\nf 4411/4316/4137 1121/4317/4138 4422/4329/4150\nf 4421/4331/4152 194/3009/2863 4422/4329/4150\nf 3335/2846/2704 4422/4329/4150 194/3009/2863\nf 4423/4333/4154 4425/4332/4153 1120/4330/4151\nf 4421/4331/4152 1120/4330/4151 4425/4332/4153\nf 3453/3007/2861 4425/4332/4153 880/3015/2869\nf 4424/4334/4155 880/3015/2869 4425/4332/4153\nf 4426/4339/4160 4428/4336/4157 283/4326/4147\nf 4418/4327/4148 283/4326/4147 4428/4336/4157\nf 4427/4338/4159 1124/4335/4156 4428/4336/4157\nf 4423/4333/4154 4428/4336/4157 1124/4335/4156\nf 4429/4342/4163 4432/4341/4162 1122/4337/4158\nf 4427/4338/4159 1122/4337/4158 4432/4341/4162\nf 4431/4340/4161 4432/4341/4162 1123/4347/4168\nf 4430/4343/4164 1123/4347/4168 4432/4341/4162\nf 4424/4334/4155 1124/4335/4156 4434/4345/4166\nf 4431/4340/4161 4434/4345/4166 1124/4335/4156\nf 3457/3013/2867 4434/4345/4166 205/3175/3025\nf 4433/4346/4167 205/3175/3025 4434/4345/4166\nf 4436/4354/4174 4438/4348/4169 1125/4357/4177\nf 4435/4350/4170 1125/4357/4177 4438/4348/4169\nf 4437/4353/4173 1119/4368/4142 4438/4348/4169\nf 4414/4349/4144 4438/4348/4169 1119/4368/4142\nf 4440/4360/4180 4442/4355/4175 285/4391/4205\nf 4439/4356/4176 285/4391/4205 4442/4355/4175\nf 4441/4359/4179 1128/4352/4172 4442/4355/4175\nf 4436/4354/4174 4442/4355/4175 1128/4352/4172\nf 4443/4365/4185 4446/4361/4181 1126/4358/4178\nf 4441/4359/4179 1126/4358/4178 4446/4361/4181\nf 4444/4364/4184 1127/4369/4187 4446/4361/4181\nf 4445/4362/4182 4446/4361/4181 1127/4369/4187\nf 4445/4362/4182 4448/4366/4186 1128/4352/4172\nf 4437/4353/4173 1128/4352/4172 4448/4366/4186\nf 4447/4370/4188 283/4373/4147 4448/4366/4186\nf 4417/4367/4149 4448/4366/4186 283/4373/4147\nf 4449/4376/4192 4451/4371/4189 1127/4369/4187\nf 4447/4370/4188 1127/4369/4187 4451/4371/4189\nf 4450/4375/4191 1122/4386/4158 4451/4371/4189\nf 4426/4372/4160 4451/4371/4189 1122/4386/4158\nf 286/4363/4183 4452/4378/4194 4444/4364/4184\nf 4454/4377/4193 4444/4364/4184 4452/4378/4194\nf 4454/4377/4193 4453/4380/4196 4449/4376/4192\nf 1131/4374/4190 4449/4376/4192 4453/4380/4196\nf 1129/4379/4195 4455/4385/4201 4453/4380/4196\nf 4458/4381/4197 4453/4380/4196 4455/4385/4201\nf 4456/4384/4200 1130/4390/4204 4458/4381/4197\nf 4457/4382/4198 4458/4381/4197 1130/4390/4204\nf 4457/4382/4198 4460/4388/4202 1131/4374/4190\nf 4450/4375/4191 1131/4374/4190 4460/4388/4202\nf 4429/4387/4163 4460/4388/4202 284/5445/4165\nf 4459/4389/4203 284/5445/4165 4460/4388/4202\nf 4461/4392/4206 1132/4397/4211 4464/4393/4207\nf 4462/4394/4208 4464/4393/4207 1132/4397/4211\nf 4440/4360/4180 4464/4393/4207 1126/4358/4178\nf 4463/4395/4209 1126/4358/4178 4464/4393/4207\nf 4465/4398/4212 288/5494/5215 4468/4399/4213\nf 4466/4400/4214 4468/4399/4213 288/5494/5215\nf 4462/4394/4208 4468/4399/4213 1135/4396/4210\nf 4467/4401/4215 1135/4396/4210 4468/4399/4213\nf 4467/4401/4215 1133/4402/4216 4472/4404/4218\nf 4469/4407/4221 4472/4404/4218 1133/4402/4216\nf 4472/4404/4218 4470/4405/4219 4471/4403/4217\nf 1134/4410/4224 4471/4403/4217 4470/4405/4219\nf 4463/4395/4209 1135/4396/4210 4474/4408/4222\nf 4471/4403/4217 4474/4408/4222 1135/4396/4210\nf 4474/4408/4222 4473/4409/4223 4443/4365/4185\nf 286/4363/4183 4443/4365/4185 4473/4409/4223\nf 1134/4410/4224 4475/4412/4226 4473/4409/4223\nf 4477/4411/4225 4473/4409/4223 4475/4412/4226\nf 4477/4411/4225 4476/4414/4228 4452/4378/4194\nf 1129/4379/4195 4452/4378/4194 4476/4414/4228\nf 289/4406/4220 4478/4416/4230 4470/4405/4219\nf 4480/4415/4229 4470/4405/4219 4478/4416/4230\nf 4480/4415/4229 4479/4418/4232 4475/4412/4226\nf 1138/4413/4227 4475/4412/4226 4479/4418/4232\nf 1136/4417/4231 4481/4421/4235 4479/4418/4232\nf 4484/4419/4233 4479/4418/4232 4481/4421/4235\nf 4484/4419/4233 4482/4423/4237 4483/4420/4234\nf 1137/4425/4239 4483/4420/4234 4482/4423/4237\nf 1138/4413/4227 4483/4420/4234 4476/4414/4228\nf 4486/4424/4238 4476/4414/4228 4483/4420/4234\nf 4486/4424/4238 4485/4426/4240 4455/4385/4201\nf 287/4383/4199 4455/4385/4201 4485/4426/4240\nf 4487/4427/4241 1139/4432/4246 4490/4428/4242\nf 4488/4429/4243 4490/4428/4242 1139/4432/4246\nf 4482/4423/4237 4490/4428/4242 1137/4425/4239\nf 4489/4430/4244 1137/4425/4239 4490/4428/4242\nf 4491/4433/4247 292/5543/5264 4494/4434/4248\nf 4492/4435/4249 4494/4434/4248 292/5543/5264\nf 4488/4429/4243 4494/4434/4248 1142/4431/4245\nf 4493/4436/4250 1142/4431/4245 4494/4434/4248\nf 4493/4436/4250 1140/4437/4251 4498/4439/4253\nf 4495/4440/4254 4498/4439/4253 1140/4437/4251\nf 4497/4438/4252 4498/4439/4253 1141/4445/4259\nf 4496/4441/4255 1141/4445/4259 4498/4439/4253\nf 4489/4430/4244 1142/4431/4245 4500/4443/4257\nf 4497/4438/4252 4500/4443/4257 1142/4431/4245\nf 4485/4426/4240 4500/4443/4257 287/4383/4199\nf 4499/4444/4258 287/4383/4199 4500/4443/4257\nf 4501/4446/4260 1143/4451/4265 4504/4447/4261\nf 4502/4448/4262 4504/4447/4261 1143/4451/4265\nf 3570/3170/3020 4504/4447/4261 909/3173/3023\nf 4503/4449/4263 909/3173/3023 4504/4447/4261\nf 4508/4452/4266 4505/4453/4267 4506/4454/4268\nf 295/4481/4295 4506/4454/4268 4505/4453/4267\nf 4502/4448/4262 4508/4452/4266 1146/4450/4264\nf 4507/4455/4269 1146/4450/4264 4508/4452/4266\nf 4507/4455/4269 1144/4456/4270 4512/4458/4272\nf 4509/4461/4275 4512/4458/4272 1144/4456/4270\nf 1145/4464/4278 4511/4457/4271 4510/4459/4273\nf 4512/4458/4272 4510/4459/4273 4511/4457/4271\nf 4503/4449/4263 1146/4450/4264 4514/4462/4276\nf 4511/4457/4271 4514/4462/4276 1146/4450/4264\nf 3573/3174/3024 4514/4462/4276 204/3003/2857\nf 4513/4463/4277 204/3003/2857 4514/4462/4276\nf 1145/4464/4278 4515/4466/4280 4513/4463/4277\nf 4517/4465/4279 4513/4463/4277 4515/4466/4280\nf 4517/4465/4279 4516/4468/4282 3448/3002/2856\nf 878/3006/2860 3448/3002/2856 4516/4468/4282\nf 4520/4469/4283 4510/4459/4273 4518/4470/4284\nf 294/4460/4274 4518/4470/4284 4510/4459/4273\nf 4520/4469/4283 4519/4472/4286 4515/4466/4280\nf 1149/4467/4281 4515/4466/4280 4519/4472/4286\nf 1147/4471/4285 4521/4477/4291 4519/4472/4286\nf 4524/4473/4287 4519/4472/4286 4521/4477/4291\nf 4524/4473/4287 4522/4475/4289 4523/4474/4288\nf 1148/4479/4293 4523/4474/4288 4522/4475/4289\nf 1149/4467/4281 4523/4474/4288 4516/4468/4282\nf 4526/4478/4292 4516/4468/4282 4523/4474/4288\nf 193/2833/2691 3451/3005/2859 4525/4480/4294\nf 4526/4478/4292 4525/4480/4294 3451/3005/2859\nf 4530/4482/4296 4527/4483/4297 4528/4484/4298\nf 1150/4487/4301 4528/4484/4298 4527/4483/4297\nf 4506/4454/4268 4530/4482/4296 1144/4456/4270\nf 4529/4485/4299 1144/4456/4270 4530/4482/4296\nf 4531/4488/4302 298/5596/5309 4534/4489/4303\nf 4532/4490/4304 4534/4489/4303 298/5596/5309\nf 4528/4484/4298 4534/4489/4303 1153/4486/4300\nf 4533/4491/4305 1153/4486/4300 4534/4489/4303\nf 4533/4491/4305 1151/4492/4306 4538/4494/4308\nf 4535/4495/4309 4538/4494/4308 1151/4492/4306\nf 4537/4493/4307 4538/4494/4308 1152/4500/4314\nf 4536/4496/4310 1152/4500/4314 4538/4494/4308\nf 4529/4485/4299 1153/4486/4300 4540/4498/4312\nf 4537/4493/4307 4540/4498/4312 1153/4486/4300\nf 294/4460/4274 4509/4461/4275 4539/4499/4313\nf 4540/4498/4312 4539/4499/4313 4509/4461/4275\nf 4543/4501/4315 4539/4499/4313 4541/4504/4318\nf 1152/4500/4314 4541/4504/4318 4539/4499/4313\nf 1147/4471/4285 4518/4470/4284 4542/4502/4316\nf 4543/4501/4315 4542/4502/4316 4518/4470/4284\nf 4546/4505/4319 4536/4496/4310 4544/4508/4322\nf 297/4497/4311 4544/4508/4322 4536/4496/4310\nf 1156/4503/4317 4541/4504/4318 4545/4506/4320\nf 4546/4505/4319 4545/4506/4320 4541/4504/4318\nf 4550/4510/4324 4545/4506/4320 4547/4513/4327\nf 1154/4507/4321 4547/4513/4327 4545/4506/4320\nf 1155/4516/4330 4549/4509/4323 4548/4511/4325\nf 4550/4510/4324 4548/4511/4325 4549/4509/4323\nf 4552/4514/4328 4542/4502/4316 4549/4509/4323\nf 1156/4503/4317 4549/4509/4323 4542/4502/4316\nf 293/4476/4290 4521/4477/4291 4551/4515/4329\nf 4552/4514/4328 4551/4515/4329 4521/4477/4291\nf 4554/4523/4337 4557/4517/4331 1157/4526/4340\nf 4553/4519/4333 1157/4526/4340 4557/4517/4331\nf 4555/4522/4336 1159/4534/4347 4557/4517/4331\nf 4556/4518/4332 4557/4517/4331 1159/4534/4347\nf 1340/2/2 4560/4524/4338 1/4/4\nf 4558/4525/4339 1/4/4 4560/4524/4338\nf 4559/4527/4341 1160/4521/4335 4560/4524/4338\nf 4554/4523/4337 4560/4524/4338 1160/4521/4335\nf 1351/20/20 4563/4528/4342 338/21/21\nf 4559/4527/4341 338/21/21 4563/4528/4342\nf 4561/4531/4344 1158/4535/4348 4563/4528/4342\nf 4562/4529/4343 4563/4528/4342 1158/4535/4348\nf 4562/4529/4343 4566/4532/4345 1160/4521/4335\nf 4555/4522/4336 1160/4521/4335 4566/4532/4345\nf 4564/4536/4349 316/5640/4371 4566/4532/4345\nf 4565/4533/4346 4566/4532/4345 316/5640/4371\nf 4570/4537/4350 4567/4538/4351 4568/4541/4354\nf 1161/4544/4357 4568/4541/4354 4567/4538/4351\nf 373/196/193 1470/198/195 4569/4539/4352\nf 4570/4537/4350 4569/4539/4352 1470/198/195\nf 4572/4547/4360 4574/4542/4355 328/4849/4655\nf 4571/4543/4356 328/4849/4655 4574/4542/4355\nf 4573/4546/4359 1164/4540/4353 4574/4542/4355\nf 4568/4541/4354 4574/4542/4355 1164/4540/4353\nf 4575/4552/4365 4578/4548/4361 1162/4545/4358\nf 4573/4546/4359 1162/4545/4358 4578/4548/4361\nf 4576/4551/4364 1163/4555/4368 4578/4548/4361\nf 4577/4549/4362 4578/4548/4361 1163/4555/4368\nf 4580/4553/4366 4569/4539/4352 4577/4549/4362\nf 1164/4540/4353 4577/4549/4362 4569/4539/4352\nf 22/201/198 1473/203/200 4579/4554/4367\nf 4580/4553/4366 4579/4554/4367 1473/203/200\nf 4581/4560/4372 4584/4556/4369 1158/4563/4348\nf 4564/4558/4349 1158/4563/4348 4584/4556/4369\nf 4582/4561/4373 1166/4572/4382 4584/4556/4369\nf 4583/4557/4370 4584/4556/4369 1166/4572/4382\nf 4561/4564/4344 12/207/204 4586/4565/4375\nf 1481/209/205 4586/4565/4375 12/207/204\nf 4581/4560/4372 4586/4565/4375 1167/4562/4374\nf 4585/4566/4376 1167/4562/4374 4586/4565/4375\nf 4585/4566/4376 378/225/219 4589/4568/4378\nf 1491/226/220 4589/4568/4378 378/225/219\nf 4588/4567/4377 4589/4568/4378 1165/4574/4384\nf 4587/4569/4379 1165/4574/4384 4589/4568/4378\nf 4582/4561/4373 1167/4562/4374 4592/4570/4380\nf 4588/4567/4377 4592/4570/4380 1167/4562/4374\nf 4590/4573/4383 317/4597/4403 4592/4570/4380\nf 4591/4571/4381 4592/4570/4380 317/4597/4403\nf 4595/4576/4385 4579/4577/4367 4593/4580/4388\nf 1163/4583/4368 4593/4580/4388 4579/4577/4367\nf 404/402/357 1592/404/359 4594/4578/4386\nf 4595/4576/4385 4594/4578/4386 1592/404/359\nf 4596/4586/4392 4598/4581/4389 318/5641/4363\nf 4576/4582/4364 318/5641/4363 4598/4581/4389\nf 1170/4579/4387 4593/4580/4388 4597/4584/4390\nf 4598/4581/4389 4597/4584/4390 4593/4580/4388\nf 4602/4588/4394 4597/4584/4390 4599/4591/4397\nf 1168/4585/4391 4599/4591/4397 4597/4584/4390\nf 1169/4594/4400 4601/4587/4393 4600/4589/4395\nf 4602/4588/4394 4600/4589/4395 4601/4587/4393\nf 4604/4592/4398 4594/4578/4386 4601/4587/4393\nf 1170/4579/4387 4601/4587/4393 4594/4578/4386\nf 33/407/362 1595/409/364 4603/4593/4399\nf 4604/4592/4398 4603/4593/4399 1595/409/364\nf 4605/4600/4406 4608/4595/4401 1165/4574/4384\nf 4590/4573/4383 1165/4574/4384 4608/4595/4401\nf 4606/4599/4405 1172/4608/4414 4608/4595/4401\nf 4607/4596/4402 4608/4595/4401 1172/4608/4414\nf 4587/4569/4379 23/413/368 4610/4601/4407\nf 1603/414/369 4610/4601/4407 23/413/368\nf 4609/4602/4408 1173/4598/4404 4610/4601/4407\nf 4605/4600/4406 4610/4601/4407 1173/4598/4404\nf 4609/4602/4408 409/428/383 4613/4603/4409\nf 1613/429/384 4613/4603/4409 409/428/383\nf 4611/4605/4411 1171/4609/4415 4613/4603/4409\nf 4612/4604/4410 4613/4603/4409 1171/4609/4415\nf 4612/4604/4410 4616/4606/4412 1173/4598/4404\nf 4606/4599/4405 1173/4598/4404 4616/4606/4412\nf 4614/4610/4416 305/4853/4659 4616/4606/4412\nf 4615/4607/4413 4616/4606/4412 305/4853/4659\nf 4619/4611/4417 4603/4593/4399 4617/4614/4420\nf 1169/4594/4400 4617/4614/4420 4603/4593/4399\nf 435/570/521 1714/572/523 4618/4612/4418\nf 4619/4611/4417 4618/4612/4418 1714/572/523\nf 4620/4618/4424 4622/4615/4421 319/4590/4396\nf 4600/4589/4395 319/4590/4396 4622/4615/4421\nf 1176/4613/4419 4617/4614/4420 4621/4617/4423\nf 4622/4615/4421 4621/4617/4423 4617/4614/4420\nf 4626/4620/4426 4621/4617/4423 4623/4621/4427\nf 1174/4616/4422 4623/4621/4427 4621/4617/4423\nf 4625/4619/4425 4626/4620/4426 1175/4626/4432\nf 4624/4622/4428 1175/4626/4432 4626/4620/4426\nf 4628/4624/4430 4618/4612/4418 4625/4619/4425\nf 1176/4613/4419 4625/4619/4425 4618/4612/4418\nf 44/575/526 1717/577/528 4627/4625/4431\nf 4628/4624/4430 4627/4625/4431 1717/577/528\nf 4630/4633/4439 4633/4627/4433 1177/4636/4442\nf 4629/4629/4435 1177/4636/4442 4633/4627/4433\nf 4631/4632/4438 1179/4643/4449 4633/4627/4433\nf 4632/4628/4434 4633/4627/4433 1179/4643/4449\nf 56/917/860 1969/918/861 4634/4635/4441\nf 4636/4634/4440 4634/4635/4441 1969/918/861\nf 4635/4637/4443 1180/4631/4437 4636/4634/4440\nf 4630/4633/4439 4636/4634/4440 1180/4631/4437\nf 4635/4637/4443 502/932/875 4639/4639/4445\nf 1979/933/876 4639/4639/4445 502/932/875\nf 4638/4638/4444 4639/4639/4445 1178/4645/4451\nf 4637/4640/4446 1178/4645/4451 4639/4639/4445\nf 4631/4632/4438 1180/4631/4437 4642/4641/4447\nf 4638/4638/4444 4642/4641/4447 1180/4631/4437\nf 4641/4642/4448 4642/4641/4447 321/4665/4471\nf 4640/4644/4450 321/4665/4471 4642/4641/4447\nf 1181/4653/4459 4644/4650/4456 4643/4646/4452\nf 4646/4647/4453 4643/4646/4452 4644/4650/4456\nf 4646/4647/4453 4645/4648/4454 2080/1074/1013\nf 528/1075/1014 2080/1074/1013 4645/4648/4454\nf 4648/4656/4462 4650/4652/4458 320/5018/4816\nf 4647/4651/4457 320/5018/4816 4650/4652/4458\nf 1184/4649/4455 4644/4650/4456 4649/4654/4460\nf 4650/4652/4458 4649/4654/4460 4644/4650/4456\nf 4654/4658/4464 4649/4654/4460 4651/4661/4467\nf 1182/4655/4461 4651/4661/4467 4649/4654/4460\nf 1183/4664/4470 4653/4657/4463 4652/4659/4465\nf 4654/4658/4464 4652/4659/4465 4653/4657/4463\nf 4656/4662/4468 4645/4648/4454 4653/4657/4463\nf 1184/4649/4455 4653/4657/4463 4645/4648/4454\nf 77/1080/1019 2083/1079/1018 4655/4663/4469\nf 4656/4662/4468 4655/4663/4469 2083/1079/1018\nf 1178/4645/4451 4657/4668/4474 4640/4644/4450\nf 4660/4667/4473 4640/4644/4450 4657/4668/4474\nf 4660/4667/4473 4658/4670/4476 4659/4666/4472\nf 1186/4677/4483 4659/4666/4472 4658/4670/4476\nf 67/1086/1025 2091/1087/1026 4637/4640/4446\nf 4662/4671/4477 4637/4640/4446 2091/1087/1026\nf 4662/4671/4477 4661/4672/4478 4657/4668/4474\nf 1187/4669/4475 4657/4668/4474 4661/4672/4478\nf 533/1101/1040 2101/1102/1041 4661/4672/4478\nf 4665/4673/4479 4661/4672/4478 2101/1102/1041\nf 4665/4673/4479 4663/4675/4481 4664/4674/4480\nf 1185/4679/4485 4664/4674/4480 4663/4675/4481\nf 1187/4669/4475 4664/4674/4480 4658/4670/4476\nf 4668/4676/4482 4658/4670/4476 4664/4674/4480\nf 4668/4676/4482 4666/4680/4486 4667/4678/4484\nf 322/4698/4504 4667/4678/4484 4666/4680/4486\nf 1183/4664/4470 4669/4682/4488 4655/4663/4469\nf 4671/4681/4487 4655/4663/4469 4669/4682/4488\nf 4671/4681/4487 4670/4684/4490 2202/1242/1177\nf 559/1243/1178 2202/1242/1177 4670/4684/4490\nf 4674/4685/4491 4652/4659/4465 4672/4686/4492\nf 330/4660/4466 4672/4686/4492 4652/4659/4465\nf 4674/4685/4491 4673/4688/4494 4669/4682/4488\nf 1190/4683/4489 4669/4682/4488 4673/4688/4494\nf 1188/4687/4493 4675/4691/4497 4673/4688/4494\nf 4678/4689/4495 4673/4688/4494 4675/4691/4497\nf 4678/4689/4495 4676/4693/4499 4677/4690/4496\nf 1189/4695/4501 4677/4690/4496 4676/4693/4499\nf 1190/4683/4489 4677/4690/4496 4670/4684/4490\nf 4680/4694/4500 4670/4684/4490 4677/4690/4496\nf 4680/4694/4500 4679/4696/4502 2205/1247/1182\nf 88/1248/1183 2205/1247/1182 4679/4696/4502\nf 1185/4679/4485 4681/4700/4506 4666/4680/4486\nf 4684/4697/4503 4666/4680/4486 4681/4700/4506\nf 4684/4697/4503 4682/4702/4508 4683/4699/4505\nf 1192/4709/4515 4683/4699/4505 4682/4702/4508\nf 78/1254/1189 2213/1255/1190 4663/4675/4481\nf 4686/4703/4509 4663/4675/4481 2213/1255/1190\nf 4686/4703/4509 4685/4704/4510 4681/4700/4506\nf 1193/4701/4507 4681/4700/4506 4685/4704/4510\nf 564/1269/1204 2223/1270/1205 4685/4704/4510\nf 4689/4705/4511 4685/4704/4510 2223/1270/1205\nf 4688/4706/4512 4689/4705/4511 1191/4712/4518\nf 4687/4707/4513 1191/4712/4518 4689/4705/4511\nf 1193/4701/4507 4688/4706/4512 4682/4702/4508\nf 4692/4708/4514 4682/4702/4508 4688/4706/4512\nf 4692/4708/4514 4690/4711/4517 4691/4710/4516\nf 324/4729/4535 4691/4710/4516 4690/4711/4517\nf 1189/4695/4501 4693/4714/4520 4679/4696/4502\nf 4695/4713/4519 4679/4696/4502 4693/4714/4520\nf 4695/4713/4519 4694/4716/4522 2324/1410/1341\nf 590/1411/1342 2324/1410/1341 4694/4716/4522\nf 331/4692/4498 4696/4718/4524 4676/4693/4499\nf 4698/4717/4523 4676/4693/4499 4696/4718/4524\nf 4698/4717/4523 4697/4720/4526 4693/4714/4520\nf 1196/4715/4521 4693/4714/4520 4697/4720/4526\nf 1194/4719/4525 4699/4723/4529 4697/4720/4526\nf 4702/4721/4527 4697/4720/4526 4699/4723/4529\nf 4702/4721/4527 4700/4725/4531 4701/4722/4528\nf 1195/4728/4534 4701/4722/4528 4700/4725/4531\nf 1196/4715/4521 4701/4722/4528 4694/4716/4522\nf 4704/4726/4532 4694/4716/4522 4701/4722/4528\nf 2327/1415/1346 4704/4726/4532 99/1416/1347\nf 4703/4727/4533 99/1416/1347 4704/4726/4532\nf 4690/4711/4517 1191/4712/4518 4708/4731/4537\nf 4705/4732/4538 4708/4731/4537 1191/4712/4518\nf 4707/4730/4536 4708/4731/4537 1198/4740/4546\nf 4706/4733/4539 1198/4740/4546 4708/4731/4537\nf 4687/4707/4513 89/1422/1353 4710/4735/4541\nf 2335/1423/1354 4710/4735/4541 89/1422/1353\nf 4705/4732/4538 4710/4735/4541 1199/4734/4540\nf 4709/4736/4542 1199/4734/4540 4710/4735/4541\nf 4709/4736/4542 595/1436/1367 4713/4738/4544\nf 2345/1437/1368 4713/4738/4544 595/1436/1367\nf 4712/4737/4543 4713/4738/4544 1197/4744/4550\nf 4711/4739/4545 1197/4744/4550 4713/4738/4544\nf 4706/4733/4539 1199/4734/4540 4716/4742/4548\nf 4712/4737/4543 4716/4742/4548 1199/4734/4540\nf 4715/4741/4547 4716/4742/4548 325/4761/4567\nf 4714/4743/4549 325/4761/4567 4716/4742/4548\nf 4703/4727/4533 1195/4728/4534 4719/4745/4551\nf 4717/4746/4552 4719/4745/4551 1195/4728/4534\nf 2446/1578/1505 4719/4745/4551 621/1580/1507\nf 4718/4747/4553 621/1580/1507 4719/4745/4551\nf 332/4724/4530 4720/4750/4556 4700/4725/4531\nf 4722/4749/4555 4700/4725/4531 4720/4750/4556\nf 4717/4746/4552 4722/4749/4555 1202/4748/4554\nf 4721/4751/4557 1202/4748/4554 4722/4749/4555\nf 4721/4751/4557 1200/4752/4558 4726/4754/4560\nf 4723/4755/4561 4726/4754/4560 1200/4752/4558\nf 4725/4753/4559 4726/4754/4560 1201/4760/4566\nf 4724/4756/4562 1201/4760/4566 4726/4754/4560\nf 4718/4747/4553 1202/4748/4554 4728/4758/4564\nf 4725/4753/4559 4728/4758/4564 1202/4748/4554\nf 2449/1583/1510 4728/4758/4564 110/1585/1512\nf 4727/4759/4565 110/1585/1512 4728/4758/4564\nf 4714/4743/4549 1197/4744/4550 4732/4763/4569\nf 4729/4764/4570 4732/4763/4569 1197/4744/4550\nf 4731/4762/4568 4732/4763/4569 1204/4772/4578\nf 4730/4765/4571 1204/4772/4578 4732/4763/4569\nf 4711/4739/4545 100/1589/1516 4734/4767/4573\nf 2457/1590/1517 4734/4767/4573 100/1589/1516\nf 4729/4764/4570 4734/4767/4573 1205/4766/4572\nf 4733/4768/4574 1205/4766/4572 4734/4767/4573\nf 4733/4768/4574 626/1604/1531 4737/4770/4576\nf 2467/1605/1532 4737/4770/4576 626/1604/1531\nf 4736/4769/4575 4737/4770/4576 1203/4776/4582\nf 4735/4771/4577 1203/4776/4582 4737/4770/4576\nf 4730/4765/4571 1205/4766/4572 4740/4774/4580\nf 4736/4769/4575 4740/4774/4580 1205/4766/4572\nf 4739/4773/4579 4740/4774/4580 326/4793/4599\nf 4738/4775/4581 326/4793/4599 4740/4774/4580\nf 4727/4759/4565 1201/4760/4566 4743/4777/4583\nf 4741/4778/4584 4743/4777/4583 1201/4760/4566\nf 2568/1746/1669 4743/4777/4583 652/1748/1671\nf 4742/4779/4585 652/1748/1671 4743/4777/4583\nf 4724/4756/4562 333/4757/4563 4746/4781/4587\nf 4744/4782/4588 4746/4781/4587 333/4757/4563\nf 4741/4778/4584 4746/4781/4587 1208/4780/4586\nf 4745/4783/4589 1208/4780/4586 4746/4781/4587\nf 4745/4783/4589 1206/4784/4590 4750/4786/4592\nf 4747/4787/4593 4750/4786/4592 1206/4784/4590\nf 4749/4785/4591 4750/4786/4592 1207/4792/4598\nf 4748/4788/4594 1207/4792/4598 4750/4786/4592\nf 4742/4779/4585 1208/4780/4586 4752/4790/4596\nf 4749/4785/4591 4752/4790/4596 1208/4780/4586\nf 2571/1751/1674 4752/4790/4596 121/1753/1676\nf 4751/4791/4597 121/1753/1676 4752/4790/4596\nf 1203/4776/4582 4753/4796/4602 4738/4775/4581\nf 4756/4795/4601 4738/4775/4581 4753/4796/4602\nf 4755/4794/4600 4756/4795/4601 1210/4805/4611\nf 4754/4798/4604 1210/4805/4611 4756/4795/4601\nf 111/1758/1681 2579/1759/1682 4735/4771/4577\nf 4758/4799/4605 4735/4771/4577 2579/1759/1682\nf 4758/4799/4605 4757/4800/4606 4753/4796/4602\nf 1211/4797/4603 4753/4796/4602 4757/4800/4606\nf 657/1773/1696 2589/1774/1697 4757/4800/4606\nf 4761/4801/4607 4757/4800/4606 2589/1774/1697\nf 4761/4801/4607 4759/4803/4609 4760/4802/4608\nf 1209/4807/4613 4760/4802/4608 4759/4803/4609\nf 1211/4797/4603 4760/4802/4608 4754/4798/4604\nf 4764/4804/4610 4754/4798/4604 4760/4802/4608\nf 4764/4804/4610 4762/4808/4614 4763/4806/4612\nf 327/4826/4632 4763/4806/4612 4762/4808/4614\nf 4751/4791/4597 1207/4792/4598 4767/4809/4615\nf 4765/4810/4616 4767/4809/4615 1207/4792/4598\nf 2690/1914/1833 4767/4809/4615 683/1915/1834\nf 4766/4811/4617 683/1915/1834 4767/4809/4615\nf 334/4789/4595 4768/4814/4620 4748/4788/4594\nf 4770/4813/4619 4748/4788/4594 4768/4814/4620\nf 4770/4813/4619 4769/4816/4622 4765/4810/4616\nf 1214/4812/4618 4765/4810/4616 4769/4816/4622\nf 1212/4815/4621 4771/4819/4625 4769/4816/4622\nf 4774/4817/4623 4769/4816/4622 4771/4819/4625\nf 4774/4817/4623 4772/4821/4627 4773/4818/4624\nf 1213/4824/4630 4773/4818/4624 4772/4821/4627\nf 4766/4811/4617 1214/4812/4618 4776/4822/4628\nf 4773/4818/4624 4776/4822/4628 1214/4812/4618\nf 2693/1919/1838 4776/4822/4628 132/1920/1839\nf 4775/4823/4629 132/1920/1839 4776/4822/4628\nf 1209/4807/4613 4777/4828/4634 4762/4808/4614\nf 4780/4825/4631 4762/4808/4614 4777/4828/4634\nf 4780/4825/4631 4778/4830/4636 4779/4827/4633\nf 1215/4835/4641 4779/4827/4633 4778/4830/4636\nf 122/1926/1845 2701/1927/1846 4759/4803/4609\nf 4782/4831/4637 4759/4803/4609 2701/1927/1846\nf 4782/4831/4637 4781/4832/4638 4777/4828/4634\nf 1216/4829/4635 4777/4828/4634 4781/4832/4638\nf 4781/4832/4638 687/1938/1857 4784/4834/4640\nf 2709/1939/1858 4784/4834/4640 687/1938/1857\nf 4783/4833/4639 4784/4834/4640 1157/4526/4340\nf 4558/4525/4339 1157/4526/4340 4784/4834/4640\nf 4778/4830/4636 1216/4829/4635 4786/4837/4643\nf 4783/4833/4639 4786/4837/4643 1216/4829/4635\nf 4785/4836/4642 4786/4837/4643 323/4520/4334\nf 4553/4519/4333 323/4520/4334 4786/4837/4643\nf 4775/4823/4629 1213/4824/4630 4789/4838/4644\nf 4787/4839/4645 4789/4838/4644 1213/4824/4630\nf 2794/2047/1961 4789/4838/4644 705/2048/1962\nf 4788/4840/4646 705/2048/1962 4789/4838/4644\nf 329/4820/4626 4790/4843/4649 4772/4821/4627\nf 4792/4842/4648 4772/4821/4627 4790/4843/4649\nf 4792/4842/4648 4791/4845/4651 4787/4839/4645\nf 1218/4841/4647 4787/4839/4645 4791/4845/4651\nf 1217/4844/4650 4793/4848/4654 4791/4845/4651\nf 4795/4846/4652 4791/4845/4651 4793/4848/4654\nf 4795/4846/4652 4571/4543/4356 4794/4847/4653\nf 1161/4544/4357 4794/4847/4653 4571/4543/4356\nf 4788/4840/4646 1218/4841/4647 4796/4850/4656\nf 4794/4847/4653 4796/4850/4656 1218/4841/4647\nf 2797/2052/1966 4796/4850/4656 11/2053/1967\nf 4567/4538/4351 11/2053/1967 4796/4850/4656\nf 4797/4854/4660 4800/4851/4657 1171/4609/4415\nf 4614/4610/4416 1171/4609/4415 4800/4851/4657\nf 4799/4852/4658 4800/4851/4657 1220/4863/4668\nf 4798/4856/4662 1220/4863/4668 4800/4851/4657\nf 34/581/532 2803/2055/1969 4611/4605/4411\nf 4802/4857/4663 4611/4605/4411 2803/2055/1969\nf 4802/4857/4663 4801/4858/4664 4797/4854/4660\nf 1221/4855/4661 4797/4854/4660 4801/4858/4664\nf 2813/2070/1984 4805/4860/4666 709/2069/1983\nf 4801/4858/4664 709/2069/1983 4805/4860/4666\nf 4803/4862/4667 1219/4867/4672 4805/4860/4666\nf 4804/4859/4665 4805/4860/4666 1219/4867/4672\nf 4798/4856/4662 1221/4855/4661 4808/4865/4670\nf 4804/4859/4665 4808/4865/4670 1221/4855/4661\nf 4807/4864/4669 4808/4865/4670 306/5642/4707\nf 4806/4866/4671 306/5642/4707 4808/4865/4670\nf 4634/4635/4441 1177/4636/4442 4811/4868/4673\nf 4809/4869/4674 4811/4868/4673 1177/4636/4442\nf 2818/2079/1993 4811/4868/4673 711/2081/1995\nf 4810/4870/4675 711/2081/1995 4811/4868/4673\nf 4629/4629/4435 314/4630/4436 4814/4872/4677\nf 4812/4873/4678 4814/4872/4677 314/4630/4436\nf 4809/4869/4674 4814/4872/4677 1224/4871/4676\nf 4813/4874/4679 1224/4871/4676 4814/4872/4677\nf 4813/4874/4679 1222/4875/4680 4818/4877/4682\nf 4815/4878/4683 4818/4877/4682 1222/4875/4680\nf 4817/4876/4681 4818/4877/4682 1223/4883/4688\nf 4816/4879/4684 1223/4883/4688 4818/4877/4682\nf 4810/4870/4675 1224/4871/4676 4820/4881/4686\nf 4817/4876/4681 4820/4881/4686 1224/4871/4676\nf 2821/2084/1998 4820/4881/4686 135/2086/2000\nf 4819/4882/4687 135/2086/2000 4820/4881/4686\nf 4819/4885/4687 1223/4890/4688 4823/4886/4689\nf 4821/4889/4692 4823/4886/4689 1223/4890/4688\nf 2844/2122/2029 4823/4886/4689 718/2124/2031\nf 4822/4887/4690 718/2124/2031 4823/4886/4689\nf 4816/4891/4684 302/5643/4685 4826/4892/4693\nf 4824/4895/4696 4826/4892/4693 302/5643/4685\nf 1227/4888/4691 4821/4889/4692 4825/4893/4694\nf 4826/4892/4693 4825/4893/4694 4821/4889/4692\nf 4830/4897/4698 4825/4893/4694 4827/4900/4701\nf 1225/4894/4695 4827/4900/4701 4825/4893/4694\nf 1226/4903/4704 4829/4896/4697 4828/4898/4699\nf 4830/4897/4698 4828/4898/4699 4829/4896/4697\nf 4832/4901/4702 4822/4887/4690 4829/4896/4697\nf 1227/4888/4691 4829/4896/4697 4822/4887/4690\nf 2847/2129/2036 4832/4901/4702 138/2127/2034\nf 4831/4902/4703 138/2127/2034 4832/4901/4702\nf 4833/4910/4710 4836/4904/4705 1219/4913/4672\nf 4806/4906/4671 1219/4913/4672 4836/4904/4705\nf 4834/4909/4709 1229/4920/4718 4836/4904/4705\nf 4835/4905/4706 4836/4904/4705 1229/4920/4718\nf 2829/2091/2005 4838/4911/4711 133/2093/2006\nf 4803/4912/4667 133/2093/2006 4838/4911/4711\nf 4837/4914/4712 1230/4908/4708 4838/4911/4711\nf 4833/4910/4710 4838/4911/4711 1230/4908/4708\nf 2839/2109/2020 4841/4915/4713 716/2110/2021\nf 4837/4914/4712 716/2110/2021 4841/4915/4713\nf 4840/4916/4714 4841/4915/4713 1228/4922/4720\nf 4839/4917/4715 1228/4922/4720 4841/4915/4713\nf 4840/4916/4714 4844/4918/4716 1230/4908/4708\nf 4834/4909/4709 1230/4908/4708 4844/4918/4716\nf 307/4924/4722 4843/4919/4717 4842/4921/4719\nf 4844/4918/4716 4842/4921/4719 4843/4919/4717\nf 1228/4922/4720 4845/4926/4724 4842/4921/4719\nf 4848/4923/4721 4842/4921/4719 4845/4926/4724\nf 4848/4923/4721 4846/4928/4726 4847/4925/4723\nf 1232/4936/4734 4847/4925/4723 4846/4928/4726\nf 4839/4917/4715 136/2133/2040 4850/4929/4727\nf 2855/2134/2041 4850/4929/4727 136/2133/2040\nf 4845/4926/4724 4850/4929/4727 1233/4927/4725\nf 4849/4930/4728 1233/4927/4725 4850/4929/4727\nf 4849/4930/4728 723/2148/2055 4853/4932/4730\nf 2865/2149/2056 4853/4932/4730 723/2148/2055\nf 1231/4939/4737 4852/4931/4729 4851/4933/4731\nf 4853/4932/4730 4851/4933/4731 4852/4931/4729\nf 4856/4935/4733 4846/4928/4726 4852/4931/4729\nf 1233/4927/4725 4852/4931/4729 4846/4928/4726\nf 301/4941/4739 4855/4937/4735 4854/4938/4736\nf 4856/4935/4733 4854/4938/4736 4855/4937/4735\nf 4860/4942/4740 4854/4938/4736 4857/4945/4743\nf 1231/4939/4737 4857/4945/4743 4854/4938/4736\nf 1235/4952/4750 4859/4940/4738 4858/4943/4741\nf 4860/4942/4740 4858/4943/4741 4859/4940/4738\nf 2864/2151/2058 4862/4946/4744 139/4934/4732\nf 4851/4933/4731 139/4934/4732 4862/4946/4744\nf 1236/4944/4742 4857/4945/4743 4861/4947/4745\nf 4862/4946/4744 4861/4947/4745 4857/4945/4743\nf 4865/4949/4747 4861/4947/4745 2861/2147/2054\nf 722/2152/2059 2861/2147/2054 4861/4947/4745\nf 1234/4955/4753 4864/4948/4746 4863/4950/4748\nf 4865/4949/4747 4863/4950/4748 4864/4948/4746\nf 4868/4953/4751 4858/4943/4741 4864/4948/4746\nf 1236/4944/4742 4864/4948/4746 4858/4943/4741\nf 299/4957/4755 4867/4951/4749 4866/4954/4752\nf 4868/4953/4751 4866/4954/4752 4867/4951/4749\nf 1234/4955/4753 4869/4959/4757 4866/4954/4752\nf 4872/4956/4754 4866/4954/4752 4869/4959/4757\nf 4872/4956/4754 4870/4960/4758 4871/4958/4756\nf 1238/4967/4765 4871/4958/4756 4870/4960/4758\nf 4863/4950/4748 140/2146/2053 4874/4962/4760\nf 2877/2168/2075 4874/4962/4760 140/2146/2053\nf 4869/4959/4757 4874/4962/4760 1239/4961/4759\nf 4873/4963/4761 1239/4961/4759 4874/4962/4760\nf 4873/4963/4761 726/2167/2074 4877/4965/4763\nf 2874/2165/2072 4877/4965/4763 726/2167/2074\nf 4876/4964/4762 4877/4965/4763 1237/4971/4769\nf 4875/4966/4764 1237/4971/4769 4877/4965/4763\nf 4870/4960/4758 1239/4961/4759 4880/4969/4767\nf 4876/4964/4762 4880/4969/4767 1239/4961/4759\nf 4879/4968/4766 4880/4969/4767 300/4988/4786\nf 4878/4970/4768 300/4988/4786 4880/4969/4767\nf 4831/4902/4703 1226/4903/4704 4883/4972/4770\nf 4881/4973/4771 4883/4972/4770 1226/4903/4704\nf 2883/2175/2082 4883/4972/4770 728/2177/2084\nf 4882/4974/4772 728/2177/2084 4883/4972/4770\nf 4886/4976/4774 4828/4898/4699 4884/4977/4775\nf 315/4899/4700 4884/4977/4775 4828/4898/4699\nf 4881/4973/4771 4886/4976/4774 1242/4975/4773\nf 4885/4979/4777 1242/4975/4773 4886/4976/4774\nf 1240/4978/4776 4887/4982/4780 4885/4979/4777\nf 4890/4981/4779 4885/4979/4777 4887/4982/4780\nf 4889/4980/4778 4890/4981/4779 1241/4987/4785\nf 4888/4984/4782 1241/4987/4785 4890/4981/4779\nf 4882/4974/4772 1242/4975/4773 4892/4985/4783\nf 4889/4980/4778 4892/4985/4783 1242/4975/4773\nf 2886/2180/2087 4892/4985/4783 142/2182/2089\nf 4891/4986/4784 142/2182/2089 4892/4985/4783\nf 4878/4970/4768 1237/4971/4769 4896/4990/4788\nf 4893/4993/4791 4896/4990/4788 1237/4971/4769\nf 1244/5001/4799 4895/4989/4787 4894/4992/4790\nf 4896/4990/4788 4894/4992/4790 4895/4989/4787\nf 4875/4966/4764 141/2164/2071 4898/4994/4792\nf 2881/2169/2076 4898/4994/4792 141/2164/2071\nf 4893/4993/4791 4898/4994/4792 1245/4991/4789\nf 4897/4995/4793 1245/4991/4789 4898/4994/4792\nf 4897/4995/4793 730/2183/2090 4901/4997/4795\nf 2891/2184/2091 4901/4997/4795 730/2183/2090\nf 1243/5004/4802 4900/4996/4794 4899/4998/4796\nf 4901/4997/4795 4899/4998/4796 4900/4996/4794\nf 4904/5002/4800 4894/4992/4790 4900/4996/4794\nf 1245/4991/4789 4900/4996/4794 4894/4992/4790\nf 4902/5003/4801 304/5016/4814 4904/5002/4800\nf 4903/5000/4798 4904/5002/4800 304/5016/4814\nf 1241/4987/4785 4905/5006/4804 4891/4986/4784\nf 4907/5005/4803 4891/4986/4784 4905/5006/4804\nf 4907/5005/4803 4906/5008/4806 2887/2181/2088\nf 729/2187/2094 2887/2181/2088 4906/5008/4806\nf 303/4983/4781 4908/5010/4808 4888/4984/4782\nf 4910/5009/4807 4888/4984/4782 4908/5010/4808\nf 4910/5009/4807 4909/5012/4810 4905/5006/4804\nf 1247/5007/4805 4905/5006/4804 4909/5012/4810\nf 4909/5012/4810 1246/5011/4809 4913/5014/4812\nf 4911/5015/4813 4913/5014/4812 1246/5011/4809\nf 4912/5013/4811 4913/5014/4812 1243/5004/4802\nf 4902/5003/4801 1243/5004/4802 4913/5014/4812\nf 4906/5008/4806 1247/5007/4805 4914/5017/4815\nf 4912/5013/4811 4914/5017/4815 1247/5007/4805\nf 2890/2186/2093 4914/5017/4815 143/4999/4797\nf 4899/4998/4796 143/4999/4797 4914/5017/4815\nf 1181/4653/4459 4915/5021/4819 4647/4651/4457\nf 4918/5020/4818 4647/4651/4457 4915/5021/4819\nf 4918/5020/4818 4916/5023/4821 4917/5019/4817\nf 1249/5030/4828 4917/5019/4817 4916/5023/4821\nf 66/911/854 2895/2188/2095 4643/4646/4452\nf 4920/5024/4822 4643/4646/4452 2895/2188/2095\nf 4920/5024/4822 4919/5025/4823 4915/5021/4819\nf 1250/5022/4820 4915/5021/4819 4919/5025/4823\nf 734/2203/2110 2905/2204/2111 4919/5025/4823\nf 4923/5026/4824 4919/5025/4823 2905/2204/2111\nf 4923/5026/4824 4921/5028/4826 4922/5027/4825\nf 1248/5032/4830 4922/5027/4825 4921/5028/4826\nf 1250/5022/4820 4922/5027/4825 4916/5023/4821\nf 4926/5029/4827 4916/5023/4821 4922/5027/4825\nf 4926/5029/4827 4924/5033/4831 4925/5031/4829\nf 311/5051/4849 4925/5031/4829 4924/5033/4831\nf 4627/4625/4431 1175/4626/4432 4929/5034/4832\nf 4927/5035/4833 4929/5034/4832 1175/4626/4432\nf 2910/2212/2119 4929/5034/4832 736/2213/2120\nf 4928/5036/4834 736/2213/2120 4929/5034/4832\nf 4624/4622/4428 308/4623/4429 4932/5038/4836\nf 4930/5039/4837 4932/5038/4836 308/4623/4429\nf 4927/5035/4833 4932/5038/4836 1253/5037/4835\nf 4931/5040/4838 1253/5037/4835 4932/5038/4836\nf 4931/5040/4838 1251/5041/4839 4936/5043/4841\nf 4933/5044/4842 4936/5043/4841 1251/5041/4839\nf 4935/5042/4840 4936/5043/4841 1252/5049/4847\nf 4934/5045/4843 1252/5049/4847 4936/5043/4841\nf 4928/5036/4834 1253/5037/4835 4938/5047/4845\nf 4935/5042/4840 4938/5047/4845 1253/5037/4835\nf 4938/5047/4845 4937/5048/4846 2913/2217/2124\nf 144/2218/2125 2913/2217/2124 4937/5048/4846\nf 1248/5032/4830 4939/5053/4851 4924/5033/4831\nf 4942/5050/4848 4924/5033/4831 4939/5053/4851\nf 4942/5050/4848 4940/5055/4853 4941/5052/4850\nf 1255/5063/4861 4941/5052/4850 4940/5055/4853\nf 146/2224/2131 2921/2225/2132 4921/5028/4826\nf 4944/5056/4854 4921/5028/4826 2921/2225/2132\nf 4944/5056/4854 4943/5057/4855 4939/5053/4851\nf 1256/5054/4852 4939/5053/4851 4943/5057/4855\nf 741/2238/2145 2931/2239/2146 4943/5057/4855\nf 4947/5058/4856 4943/5057/4855 2931/2239/2146\nf 4947/5058/4856 4945/5061/4859 4946/5059/4857\nf 1254/5065/4863 4946/5059/4857 4945/5061/4859\nf 1256/5054/4852 4946/5059/4857 4940/5055/4853\nf 4950/5062/4860 4940/5055/4853 4946/5059/4857\nf 4950/5062/4860 4948/5066/4864 4949/5064/4862\nf 313/5109/4907 4949/5064/4862 4948/5066/4864\nf 4937/5048/4846 1252/5049/4847 4953/5067/4865\nf 4951/5068/4866 4953/5067/4865 1252/5049/4847\nf 4953/5067/4865 4952/5070/4868 2936/2248/2155\nf 743/2249/2156 2936/2248/2155 4952/5070/4868\nf 4934/5045/4843 310/5046/4844 4956/5071/4869\nf 4954/5072/4870 4956/5071/4869 310/5046/4844\nf 4951/5068/4866 4956/5071/4869 1259/5069/4867\nf 4955/5073/4871 1259/5069/4867 4956/5071/4869\nf 4955/5073/4871 1257/5074/4872 4960/5076/4874\nf 4957/5077/4875 4960/5076/4874 1257/5074/4872\nf 4959/5075/4873 4960/5076/4874 1258/5082/4880\nf 4958/5078/4876 1258/5082/4880 4960/5076/4874\nf 4952/5070/4868 1259/5069/4867 4962/5080/4878\nf 4959/5075/4873 4962/5080/4878 1259/5069/4867\nf 2939/2253/2160 4962/5080/4878 147/2254/2161\nf 4961/5081/4879 147/2254/2161 4962/5080/4878\nf 4961/5081/4879 1258/5082/4880 4965/5083/4881\nf 4963/5084/4882 4965/5083/4881 1258/5082/4880\nf 2940/2255/2162 4965/5083/4881 744/2257/2164\nf 4964/5085/4883 744/2257/2164 4965/5083/4881\nf 4958/5078/4876 312/5079/4877 4968/5087/4885\nf 4966/5088/4886 4968/5087/4885 312/5079/4877\nf 4967/5089/4887 1262/5086/4884 4968/5087/4885\nf 4963/5084/4882 4968/5087/4885 1262/5086/4884\nf 4969/5095/4893 4972/5091/4889 1260/5090/4888\nf 4967/5089/4887 1260/5090/4888 4972/5091/4889\nf 4970/5093/4891 1261/5098/4896 4972/5091/4889\nf 4971/5092/4890 4972/5091/4889 1261/5098/4896\nf 4964/5085/4883 1262/5086/4884 4974/5096/4894\nf 4971/5092/4890 4974/5096/4894 1262/5086/4884\nf 2943/2258/2165 4974/5096/4894 148/2237/2144\nf 4973/5097/4895 148/2237/2144 4974/5096/4894\nf 1261/5098/4896 4975/5100/4898 4973/5097/4895\nf 4977/5099/4897 4973/5097/4895 4975/5100/4898\nf 4977/5099/4897 4976/5102/4900 2927/2236/2143\nf 740/2242/2149 2927/2236/2143 4976/5102/4900\nf 4980/5103/4901 4970/5093/4891 4978/5106/4904\nf 309/5094/4892 4978/5106/4904 4970/5093/4891\nf 4980/5103/4901 4979/5104/4902 4975/5100/4898\nf 1264/5101/4899 4975/5100/4898 4979/5104/4902\nf 4983/5107/4905 4979/5104/4902 4981/5110/4908\nf 1263/5105/4903 4981/5110/4908 4979/5104/4902\nf 4983/5107/4905 4948/5066/4864 4982/5108/4906\nf 1254/5065/4863 4982/5108/4906 4948/5066/4864\nf 1264/5101/4899 4982/5108/4906 4976/5102/4900\nf 4984/5111/4909 4976/5102/4900 4982/5108/4906\nf 4984/5111/4909 4945/5061/4859 2930/2241/2148\nf 149/5060/4858 2930/2241/2148 4945/5061/4859\nf 4985/5117/4914 4988/5112/4910 1159/5120/4347\nf 4556/5114/4332 1159/5120/4347 4988/5112/4910\nf 4986/5116/4913 1266/5130/4924 4988/5112/4910\nf 4987/5113/4911 4988/5112/4910 1266/5130/4924\nf 4989/5123/4918 4991/5118/4915 316/5644/4371\nf 4565/5119/4346 316/5644/4371 4991/5118/4915\nf 4990/5122/4917 1267/5115/4912 4991/5118/4915\nf 4985/5117/4914 4991/5118/4915 1267/5115/4912\nf 4992/5127/4921 4994/5124/4919 1265/5121/4916\nf 4990/5122/4917 1265/5121/4916 4994/5124/4919\nf 2950/2267/2174 746/2268/2175 4994/5124/4919\nf 4993/5125/4920 4994/5124/4919 746/2268/2175\nf 4993/5125/4920 4996/5128/4922 1267/5115/4912\nf 4986/5116/4913 1267/5115/4912 4996/5128/4922\nf 2945/2261/2168 150/2262/2169 4996/5128/4922\nf 4995/5129/4923 4996/5128/4922 150/2262/2169\nf 784/2463/2367 4997/5133/4927 3084/2464/2368\nf 5000/5131/4925 3084/2464/2368 4997/5133/4927\nf 5000/5131/4925 4998/5135/4929 4999/5132/4926\nf 1269/5147/4939 4999/5132/4926 4998/5135/4929\nf 171/2457/2361 5001/5137/4931 3081/2458/2362\nf 5003/5136/4930 3081/2458/2362 5001/5137/4931\nf 5003/5136/4930 5002/5139/4933 4997/5133/4927\nf 1270/5134/4928 4997/5133/4927 5002/5139/4933\nf 5004/5144/4936 5006/5140/4934 1268/5138/4932\nf 5002/5139/4933 1268/5138/4932 5006/5140/4934\nf 4575/5143/4365 1162/5148/4358 5006/5140/4934\nf 5005/5141/4935 5006/5140/4934 1162/5148/4358\nf 5005/5141/4935 5008/5145/4937 1270/5134/4928\nf 4998/5135/4929 1270/5134/4928 5008/5145/4937\nf 4572/5149/4360 328/5408/4655 5008/5145/4937\nf 5007/5146/4938 5008/5145/4937 328/5408/4655\nf 1166/5159/4382 5009/5154/4941 4583/5152/4370\nf 5011/5150/4940 4583/5152/4370 5009/5154/4941\nf 5010/5155/4942 1265/5166/4916 5011/5150/4940\nf 4989/5151/4918 5011/5150/4940 1265/5166/4916\nf 5012/5160/4945 5014/5157/4944 317/5190/4403\nf 4591/5158/4381 317/5190/4403 5014/5157/4944\nf 5009/5154/4941 5014/5157/4944 1272/5156/4943\nf 5013/5161/4946 1272/5156/4943 5014/5157/4944\nf 5013/5161/4946 1271/5162/4947 5017/5164/4949\nf 5015/5165/4950 5017/5164/4949 1271/5162/4947\nf 5016/5163/4948 5017/5164/4949 787/2472/2375\nf 3091/2473/2376 787/2472/2375 5017/5164/4949\nf 5010/5155/4942 1272/5156/4943 5018/5168/4951\nf 5016/5163/4948 5018/5168/4951 1272/5156/4943\nf 4992/5167/4921 5018/5168/4951 161/2465/2369\nf 3087/2466/2370 161/2465/2369 5018/5168/4951\nf 816/2669/2531 5019/5172/4953 3207/2670/2532\nf 5021/5169/4952 3207/2670/2532 5019/5172/4953\nf 5021/5169/4952 5020/5174/4955 5001/5171/4931\nf 1268/5185/4932 5001/5171/4931 5020/5174/4955\nf 182/2663/2527 5022/5176/4957 3204/2664/2528\nf 5024/5175/4956 3204/2664/2528 5022/5176/4957\nf 5024/5175/4956 5023/5178/4959 5019/5172/4953\nf 1274/5173/4954 5019/5172/4953 5023/5178/4959\nf 1273/5177/4958 5025/5181/4962 5023/5178/4959\nf 5027/5179/4960 5023/5178/4959 5025/5181/4962\nf 5027/5179/4960 4599/5182/4397 5026/5180/4961\nf 1168/5186/4391 5026/5180/4961 4599/5182/4397\nf 1274/5173/4954 5026/5180/4961 5020/5174/4955\nf 5028/5183/4963 5020/5174/4955 5026/5180/4961\nf 4596/5187/4392 318/5645/4363 5028/5183/4963\nf 5004/5184/4936 5028/5183/4963 318/5645/4363\nf 5029/5193/4967 5031/5188/4964 1172/5196/4414\nf 4607/5189/4402 1172/5196/4414 5031/5188/4964\nf 5030/5192/4966 1271/5162/4947 5031/5188/4964\nf 5012/5160/4945 5031/5188/4964 1271/5162/4947\nf 5032/5199/4971 5034/5194/4968 305/5414/4659\nf 4615/5195/4413 305/5414/4659 5034/5194/4968\nf 5033/5198/4970 1276/5191/4965 5034/5194/4968\nf 5029/5193/4967 5034/5194/4968 1276/5191/4965\nf 5035/5202/4974 5037/5200/4972 1275/5197/4969\nf 5033/5198/4970 1275/5197/4969 5037/5200/4972\nf 5036/5201/4973 5037/5200/4972 818/2677/2539\nf 3213/2678/2540 818/2677/2539 5037/5200/4972\nf 5036/5201/4973 5038/5203/4975 1276/5191/4965\nf 5030/5192/4966 1276/5191/4965 5038/5203/4975\nf 5015/5165/4950 5038/5203/4975 172/2671/2533\nf 3209/2672/2534 172/2671/2533 5038/5203/4975\nf 847/2837/2695 5039/5205/4977 3329/2838/2696\nf 5041/5204/4976 3329/2838/2696 5039/5205/4977\nf 5041/5204/4976 5040/5207/4979 5022/5176/4957\nf 1273/5177/4958 5022/5176/4957 5040/5207/4979\nf 193/2833/2691 5042/5209/4981 3326/2834/2692\nf 5044/5208/4980 3326/2834/2692 5042/5209/4981\nf 5044/5208/4980 5043/5211/4983 5039/5205/4977\nf 1278/5206/4978 5039/5205/4977 5043/5211/4983\nf 5043/5211/4983 1277/5210/4982 5047/5212/4984\nf 5045/5214/4986 5047/5212/4984 1277/5210/4982\nf 5047/5212/4984 4623/4621/4427 5046/5213/4985\nf 1174/4616/4422 5046/5213/4985 4623/4621/4427\nf 1278/5206/4978 5046/5213/4985 5040/5207/4979\nf 5048/5215/4987 5040/5207/4979 5046/5213/4985\nf 5048/5215/4987 4620/4618/4424 5025/5181/4962\nf 319/4590/4396 5025/5181/4962 4620/4618/4424\nf 5049/5220/4992 5052/5216/4988 1179/4643/4449\nf 4632/4628/4434 1179/4643/4449 5052/5216/4988\nf 5050/5219/4991 1280/5230/5002 5052/5216/4988\nf 5051/5217/4989 5052/5216/4988 1280/5230/5002\nf 4641/4642/4448 321/4665/4471 5055/5221/4993\nf 5053/5222/4994 5055/5221/4993 321/4665/4471\nf 5049/5220/4992 5055/5221/4993 1281/5218/4990\nf 5054/5223/4995 1281/5218/4990 5055/5221/4993\nf 5054/5223/4995 1279/5224/4996 5058/5226/4998\nf 5056/5227/4999 5058/5226/4998 1279/5224/4996\nf 5057/5225/4997 5058/5226/4998 911/3181/3031\nf 3579/3182/3032 911/3181/3031 5058/5226/4998\nf 5057/5225/4997 5060/5228/5000 1281/5218/4990\nf 5050/5219/4991 1281/5218/4990 5060/5228/5000\nf 205/3175/3025 5059/5229/5001 3575/3176/3026\nf 5060/5228/5000 3575/3176/3026 5059/5229/5001\nf 940/3342/3188 5061/5233/5005 3695/3341/3187\nf 5064/5232/5004 3695/3341/3187 5061/5233/5005\nf 5064/5232/5004 5062/5235/5007 5063/5231/5003\nf 1283/5246/5016 5063/5231/5003 5062/5235/5007\nf 226/3338/3184 5065/5237/5009 3692/3337/3183\nf 5067/5236/5008 3692/3337/3183 5065/5237/5009\nf 5067/5236/5008 5066/5239/5011 5061/5233/5005\nf 1284/5234/5006 5061/5233/5005 5066/5239/5011\nf 1282/5238/5010 5068/5242/5014 5066/5239/5011\nf 5070/5240/5012 5066/5239/5011 5068/5242/5014\nf 5070/5240/5012 4651/5244/4467 5069/5241/5013\nf 1182/5248/4461 5069/5241/5013 4651/5244/4467\nf 1284/5234/5006 5069/5241/5013 5062/5235/5007\nf 5072/5245/5015 5062/5235/5007 5069/5241/5013\nf 5072/5245/5015 4648/5249/4462 5071/5247/5017\nf 320/5554/4816 5071/5247/5017 4648/5249/4462\nf 5075/5250/5018 4659/4666/4472 5073/5253/5021\nf 1186/4677/4483 5073/5253/5021 4659/4666/4472\nf 1279/5224/4996 5053/5222/4994 5074/5251/5019\nf 5075/5250/5018 5074/5251/5019 5053/5222/4994\nf 5078/5254/5022 4667/4678/4484 5076/5257/5025\nf 322/4698/4504 5076/5257/5025 4667/4678/4484\nf 1286/5252/5020 5073/5253/5021 5077/5255/5023\nf 5078/5254/5022 5077/5255/5023 5073/5253/5021\nf 1285/5256/5024 5079/5260/5028 5077/5255/5023\nf 5081/5258/5026 5077/5255/5023 5079/5260/5028\nf 5081/5258/5026 3701/3349/3195 5080/5259/5027\nf 942/3351/3197 5080/5259/5027 3701/3349/3195\nf 5082/5261/5029 5074/5251/5019 5080/5259/5027\nf 1286/5252/5020 5080/5259/5027 5074/5251/5019\nf 216/3343/3189 5056/5227/4999 3697/3345/3191\nf 5082/5261/5029 3697/3345/3191 5056/5227/4999\nf 5085/5262/5030 3817/3509/3351 5083/5265/5033\nf 971/3510/3352 5083/5265/5033 3817/3509/3351\nf 1282/5238/5010 5065/5237/5009 5084/5263/5031\nf 5085/5262/5030 5084/5263/5031 5065/5237/5009\nf 5088/5266/5034 3814/3505/3347 5086/5269/5037\nf 237/3506/3348 5086/5269/5037 3814/3505/3347\nf 1288/5264/5032 5083/5265/5033 5087/5267/5035\nf 5088/5266/5034 5087/5267/5035 5083/5265/5033\nf 5091/5271/5039 5087/5267/5035 5089/5274/5040\nf 1287/5268/5036 5089/5274/5040 5087/5267/5035\nf 1188/5277/4493 5090/5270/5038 4675/5272/4497\nf 5091/5271/5039 4675/5272/4497 5090/5270/5038\nf 5092/5275/5041 5084/5263/5031 5090/5270/5038\nf 1288/5264/5032 5090/5270/5038 5084/5263/5031\nf 5092/5275/5041 4672/5276/4492 5068/5242/5014\nf 330/5243/4466 5068/5242/5014 4672/5276/4492\nf 5095/5278/5042 4683/4699/4505 5093/5281/5045\nf 1192/4709/4515 5093/5281/5045 4683/4699/4505\nf 1285/5256/5024 5076/5257/5025 5094/5279/5043\nf 5095/5278/5042 5094/5279/5043 5076/5257/5025\nf 5098/5282/5046 4691/4710/4516 5096/5283/5047\nf 324/4729/4535 5096/5283/5047 4691/4710/4516\nf 1290/5280/5044 5093/5281/5045 5097/5284/5048\nf 5098/5282/5046 5097/5284/5048 5093/5281/5045\nf 5097/5284/5048 1289/5285/5049 5101/5287/5051\nf 5099/5288/5052 5101/5287/5051 1289/5285/5049\nf 973/3517/3359 5100/5286/5050 3823/3519/3361\nf 5101/5287/5051 3823/3519/3361 5100/5286/5050\nf 5102/5289/5053 5094/5279/5043 5100/5286/5050\nf 1290/5280/5044 5100/5286/5050 5094/5279/5043\nf 227/3513/3355 5079/5260/5028 3819/3511/3353\nf 5102/5289/5053 3819/3511/3353 5079/5260/5028\nf 5105/5290/5054 3939/3677/3515 5103/5293/5057\nf 1002/3678/3516 5103/5293/5057 3939/3677/3515\nf 1287/5268/5036 5086/5269/5037 5104/5291/5055\nf 5105/5290/5054 5104/5291/5055 5086/5269/5037\nf 3936/3673/3511 248/3674/3512 5108/5294/5058\nf 5106/5295/5059 5108/5294/5058 248/3674/3512\nf 1292/5292/5056 5103/5293/5057 5107/5296/5060\nf 5108/5294/5058 5107/5296/5060 5103/5293/5057\nf 5111/5299/5063 5107/5296/5060 5109/5302/5064\nf 1291/5297/5061 5109/5302/5064 5107/5296/5060\nf 1194/5305/4525 5110/5298/5062 4699/5300/4529\nf 5111/5299/5063 4699/5300/4529 5110/5298/5062\nf 5112/5303/5065 5104/5291/5055 5110/5298/5062\nf 1292/5292/5056 5110/5298/5062 5104/5291/5055\nf 331/5273/4498 5089/5274/5040 4696/5304/4524\nf 5112/5303/5065 4696/5304/4524 5089/5274/5040\nf 4707/4730/4536 1198/4740/4546 5115/5306/5066\nf 5113/5307/5067 5115/5306/5066 1198/4740/4546\nf 5096/5283/5047 5115/5306/5066 1289/5285/5049\nf 5114/5308/5068 1289/5285/5049 5115/5306/5066\nf 4715/4741/4547 325/4761/4567 5118/5310/5070\nf 5116/5311/5071 5118/5310/5070 325/4761/4567\nf 5113/5307/5067 5118/5310/5070 1294/5309/5069\nf 5117/5312/5072 1294/5309/5069 5118/5310/5070\nf 5117/5312/5072 1293/5313/5073 5121/5315/5075\nf 5119/5316/5076 5121/5315/5075 1293/5313/5073\nf 5120/5314/5074 5121/5315/5075 1004/3685/3523\nf 3945/3686/3524 1004/3685/3523 5121/5315/5075\nf 5114/5308/5068 1294/5309/5069 5122/5317/5077\nf 5120/5314/5074 5122/5317/5077 1294/5309/5069\nf 5099/5288/5052 5122/5317/5077 238/3679/3517\nf 3941/3681/3519 238/3679/3517 5122/5317/5077\nf 4061/3845/3679 1033/3846/3680 5125/5318/5078\nf 5123/5319/5079 5125/5318/5078 1033/3846/3680\nf 5106/5295/5059 5125/5318/5078 1291/5297/5061\nf 5124/5320/5080 1291/5297/5061 5125/5318/5078\nf 4058/3842/3676 259/3843/3677 5128/5322/5082\nf 5126/5323/5083 5128/5322/5082 259/3843/3677\nf 5123/5319/5079 5128/5322/5082 1296/5321/5081\nf 5127/5324/5084 1296/5321/5081 5128/5322/5082\nf 5127/5324/5084 1295/5325/5085 5131/5327/5087\nf 5129/5328/5088 5131/5327/5087 1295/5325/5085\nf 5130/5326/5086 5131/5327/5087 1200/5333/4558\nf 4723/5329/4561 1200/5333/4558 5131/5327/5087\nf 5124/5320/5080 1296/5321/5081 5132/5331/5089\nf 5130/5326/5086 5132/5331/5089 1296/5321/5081\nf 332/5301/4530 5109/5302/5064 4720/5332/4556\nf 5132/5331/5089 4720/5332/4556 5109/5302/5064\nf 4731/4762/4568 1204/4772/4578 5135/5334/5090\nf 5133/5335/5091 5135/5334/5090 1204/4772/4578\nf 5116/5311/5071 5135/5334/5090 1293/5313/5073\nf 5134/5336/5092 1293/5313/5073 5135/5334/5090\nf 4739/4773/4579 326/4793/4599 5138/5338/5094\nf 5136/5339/5095 5138/5338/5094 326/4793/4599\nf 5133/5335/5091 5138/5338/5094 1298/5337/5093\nf 5137/5340/5096 1298/5337/5093 5138/5338/5094\nf 5137/5340/5096 1297/5341/5097 5141/5343/5099\nf 5139/5344/5100 5141/5343/5099 1297/5341/5097\nf 5140/5342/5098 5141/5343/5099 1035/3853/3687\nf 4067/3854/3688 1035/3853/3687 5141/5343/5099\nf 5134/5336/5092 1298/5337/5093 5142/5345/5101\nf 5140/5342/5098 5142/5345/5101 1298/5337/5093\nf 5119/5316/5076 5142/5345/5101 249/3847/3681\nf 4063/3848/3682 249/3847/3681 5142/5345/5101\nf 4183/4013/3843 1064/4014/3844 5145/5346/5102\nf 5143/5347/5103 5145/5346/5102 1064/4014/3844\nf 5126/5323/5083 5145/5346/5102 1295/5325/5085\nf 5144/5348/5104 1295/5325/5085 5145/5346/5102\nf 4180/4010/3840 270/4011/3841 5148/5350/5106\nf 5146/5351/5107 5148/5350/5106 270/4011/3841\nf 5143/5347/5103 5148/5350/5106 1300/5349/5105\nf 5147/5352/5108 1300/5349/5105 5148/5350/5106\nf 5147/5352/5108 1299/5353/5109 5151/5355/5111\nf 5149/5356/5112 5151/5355/5111 1299/5353/5109\nf 5150/5354/5110 5151/5355/5111 1206/5361/4590\nf 4747/5357/4593 1206/5361/4590 5151/5355/5111\nf 5144/5348/5104 1300/5349/5105 5152/5359/5113\nf 5150/5354/5110 5152/5359/5113 1300/5349/5105\nf 5129/5328/5088 5152/5359/5113 333/5330/4563\nf 4744/5360/4588 333/5330/4563 5152/5359/5113\nf 4755/4794/4600 1210/4805/4611 5155/5362/5114\nf 5153/5365/5117 5155/5362/5114 1210/4805/4611\nf 1297/5341/5097 5136/5339/5095 5154/5363/5115\nf 5155/5362/5114 5154/5363/5115 5136/5339/5095\nf 5158/5366/5118 4763/4806/4612 5156/5369/5121\nf 327/4826/4632 5156/5369/5121 4763/4806/4612\nf 1302/5364/5116 5153/5365/5117 5157/5367/5119\nf 5158/5366/5118 5157/5367/5119 5153/5365/5117\nf 5161/5371/5123 5157/5367/5119 5159/5372/5124\nf 1301/5368/5120 5159/5372/5124 5157/5367/5119\nf 1066/4021/3851 5160/5370/5122 4189/4023/3853\nf 5161/5371/5123 4189/4023/3853 5160/5370/5122\nf 5162/5373/5125 5154/5363/5115 5160/5370/5122\nf 1302/5364/5116 5160/5370/5122 5154/5363/5115\nf 260/4015/3845 5139/5344/5100 4185/4017/3847\nf 5162/5373/5125 4185/4017/3847 5139/5344/5100\nf 4305/4181/4007 1095/4182/4008 5165/5374/5126\nf 5163/5375/5127 5165/5374/5126 1095/4182/4008\nf 5146/5351/5107 5165/5374/5126 1299/5353/5109\nf 5164/5376/5128 1299/5353/5109 5165/5374/5126\nf 4302/4177/4003 281/4178/4004 5168/5378/5130\nf 5166/5379/5131 5168/5378/5130 281/4178/4004\nf 5163/5375/5127 5168/5378/5130 1304/5377/5129\nf 5167/5380/5132 1304/5377/5129 5168/5378/5130\nf 5171/5383/5135 5167/5380/5132 5169/5386/5136\nf 1303/5381/5133 5169/5386/5136 5167/5380/5132\nf 1212/5389/4621 5170/5382/5134 4771/5384/4625\nf 5171/5383/5135 4771/5384/4625 5170/5382/5134\nf 5172/5387/5137 5164/5376/5128 5170/5382/5134\nf 1304/5377/5129 5170/5382/5134 5164/5376/5128\nf 334/5358/4595 5149/5356/5112 4768/5388/4620\nf 5172/5387/5137 4768/5388/4620 5149/5356/5112\nf 5175/5390/5138 4779/4827/4633 5173/5393/5141\nf 1215/4835/4641 5173/5393/5141 4779/4827/4633\nf 1301/5368/5120 5156/5369/5121 5174/5391/5139\nf 5175/5390/5138 5174/5391/5139 5156/5369/5121\nf 4785/4836/4642 323/4520/4334 5177/5394/5142\nf 4987/5113/4911 5177/5394/5142 323/4520/4334\nf 5173/5393/5141 5177/5394/5142 1305/5392/5140\nf 5176/5395/5143 1305/5392/5140 5177/5394/5142\nf 5176/5395/5143 1266/5130/4924 5179/5397/5145\nf 4995/5129/4923 5179/5397/5145 1266/5130/4924\nf 5178/5396/5144 5179/5397/5145 1097/4189/4015\nf 4311/4190/4016 1097/4189/4015 5179/5397/5145\nf 5180/5398/5146 5174/5391/5139 5178/5396/5144\nf 1305/5392/5140 5178/5396/5144 5174/5391/5139\nf 271/4183/4009 5159/5372/5124 4307/4185/4011\nf 5180/5398/5146 4307/4185/4011 5159/5372/5124\nf 4407/4311/4132 1116/4312/4133 5183/5399/5147\nf 5181/5400/5148 5183/5399/5147 1116/4312/4133\nf 5166/5379/5131 5183/5399/5147 1303/5381/5133\nf 5182/5401/5149 1303/5381/5133 5183/5399/5147\nf 4404/4308/4129 160/4309/4130 5185/5403/5151\nf 4999/5132/4926 5185/5403/5151 160/4309/4130\nf 5181/5400/5148 5185/5403/5151 1306/5402/5150\nf 5184/5404/5152 1306/5402/5150 5185/5403/5151\nf 5187/5406/5154 5184/5404/5152 5007/5146/4938\nf 1269/5147/4939 5007/5146/4938 5184/5404/5152\nf 1217/5411/4650 5186/5405/5153 4793/5407/4654\nf 5187/5406/5154 4793/5407/4654 5186/5405/5153\nf 5188/5409/5155 5182/5401/5149 5186/5405/5153\nf 1306/5402/5150 5186/5405/5153 5182/5401/5149\nf 329/5385/4626 5169/5386/5136 4790/5410/4649\nf 5188/5409/5155 4790/5410/4649 5169/5386/5136\nf 4799/5413/4658 1220/5418/4668 5191/5412/5156\nf 5189/5417/5159 5191/5412/5156 1220/5418/4668\nf 5190/5415/5157 1275/5197/4969 5191/5412/5156\nf 5032/5199/4971 5191/5412/5156 1275/5197/4969\nf 4807/5419/4669 306/5646/4707 5194/5420/5160\nf 5192/5421/5161 5194/5420/5160 306/5646/4707\nf 5189/5417/5159 5194/5420/5160 1308/5416/5158\nf 5193/5422/5162 1308/5416/5158 5194/5420/5160\nf 5195/5427/5166 5197/5425/5165 1307/5423/5163\nf 5193/5422/5162 1307/5423/5163 5197/5425/5165\nf 4413/4319/4140 1118/4318/4139 5197/5425/5165\nf 5196/5424/5164 5197/5425/5165 1118/4318/4139\nf 5198/5428/5167 5190/5415/5157 5196/5424/5164\nf 1308/5416/5158 5196/5424/5164 5190/5415/5157\nf 183/2839/2697 5035/5202/4974 4409/4313/4134\nf 5198/5428/5167 4409/4313/4134 5035/5202/4974\nf 4433/4346/4167 1123/4347/4168 5201/5429/5168\nf 5199/5430/5169 5201/5429/5168 1123/4347/4168\nf 5059/5229/5001 5201/5429/5168 1280/5230/5002\nf 5200/5431/5170 1280/5230/5002 5201/5429/5168\nf 4430/4343/4164 284/4344/4165 5204/5433/5172\nf 5202/5434/5173 5204/5433/5172 284/4344/4165\nf 5199/5430/5169 5204/5433/5172 1310/5432/5171\nf 5203/5435/5174 1310/5432/5171 5204/5433/5172\nf 5203/5435/5174 1309/5436/5175 5207/5438/5177\nf 5205/5439/5178 5207/5438/5177 1309/5436/5175\nf 5206/5437/5176 5207/5438/5177 1222/5444/4680\nf 4815/5440/4683 1222/5444/4680 5207/5438/5177\nf 5200/5431/5170 1310/5432/5171 5208/5442/5179\nf 5206/5437/5176 5208/5442/5179 1310/5432/5171\nf 5051/5217/4989 5208/5442/5179 314/4630/4436\nf 4812/5443/4678 314/4630/4436 5208/5442/5179\nf 4459/4389/4203 1130/4390/4204 5211/5447/5180\nf 5209/5448/5181 5211/5447/5180 1130/4390/4204\nf 5202/5446/5173 5211/5447/5180 1309/5459/5175\nf 5210/5450/5183 1309/5459/5175 5211/5447/5180\nf 4456/4384/4200 287/4383/4199 5214/5451/5184\nf 5212/5452/5185 5214/5451/5184 287/4383/4199\nf 5214/5451/5184 5213/5453/5186 5209/5448/5181\nf 1312/5449/5182 5209/5448/5181 5213/5453/5186\nf 1311/5454/5187 5215/5457/5190 5213/5453/5186\nf 5217/5455/5188 5213/5453/5186 5215/5457/5190\nf 5217/5455/5188 4827/5458/4701 5216/5456/5189\nf 1225/5462/4695 5216/5456/5189 4827/5458/4701\nf 1312/5449/5182 5216/5456/5189 5210/5450/5183\nf 5218/5461/5191 5210/5450/5183 5216/5456/5189\nf 5205/5460/5178 5218/5461/5191 302/5647/4685\nf 4824/5463/4696 302/5647/4685 5218/5461/5191\nf 5219/5470/5195 5221/5464/5192 1229/5473/4718\nf 4835/5466/4706 1229/5473/4718 5221/5464/5192\nf 5220/5469/5194 1307/5482/5163 5221/5464/5192\nf 5192/5465/5161 5221/5464/5192 1307/5482/5163\nf 307/4924/4722 5222/5474/5197 4843/5472/4717\nf 5224/5471/5196 4843/5472/4717 5222/5474/5197\nf 5223/5475/5198 1314/5468/5193 5224/5471/5196\nf 5219/5470/5195 5224/5471/5196 1314/5468/5193\nf 5223/5475/5198 1313/5476/5199 5227/5477/5200\nf 5225/5479/5202 5227/5477/5200 1313/5476/5199\nf 4439/4356/4176 1125/4357/4177 5227/5477/5200\nf 5226/5478/5201 5227/5477/5200 1125/4357/4177\nf 5226/5478/5201 5228/5480/5203 1314/5468/5193\nf 5220/5469/5194 1314/5468/5193 5228/5480/5203\nf 4435/4350/4170 282/4351/4171 5228/5480/5203\nf 5195/5481/5166 5228/5480/5203 282/4351/4171\nf 5231/5483/5204 4847/4925/4723 5229/5486/5207\nf 1232/4936/4734 5229/5486/5207 4847/4925/4723\nf 5231/5483/5204 5230/5484/5205 5222/5474/5197\nf 1313/5476/5199 5222/5474/5197 5230/5484/5205\nf 301/4941/4739 5232/5488/5209 4855/4937/4735\nf 5234/5487/5208 4855/4937/4735 5232/5488/5209\nf 5234/5487/5208 5233/5490/5211 5229/5486/5207\nf 1316/5485/5206 5229/5486/5207 5233/5490/5211\nf 1315/5489/5210 5235/5493/5214 5233/5490/5211\nf 5237/5492/5213 5233/5490/5211 5235/5493/5214\nf 5236/5491/5212 5237/5492/5213 1132/4397/4211\nf 4465/4398/4212 1132/4397/4211 5237/5492/5213\nf 5230/5484/5205 1316/5485/5206 5238/5495/5216\nf 5236/5491/5212 5238/5495/5216 1316/5485/5206\nf 5225/5479/5202 5238/5495/5216 285/4391/4205\nf 4461/4392/4206 285/4391/4205 5238/5495/5216\nf 1235/4952/4750 5239/5497/5218 4859/4940/4738\nf 5241/5496/5217 4859/4940/4738 5239/5497/5218\nf 5241/5496/5217 5240/5499/5220 5232/5488/5209\nf 1315/5489/5210 5232/5488/5209 5240/5499/5220\nf 299/4957/4755 5242/5501/5222 4867/4951/4749\nf 5244/5500/5221 4867/4951/4749 5242/5501/5222\nf 5244/5500/5221 5243/5503/5224 5239/5497/5218\nf 1318/5498/5219 5239/5497/5218 5243/5503/5224\nf 1317/5502/5223 5245/5506/5227 5243/5503/5224\nf 5247/5504/5225 5243/5503/5224 5245/5506/5227\nf 5247/5504/5225 4469/4407/4221 5246/5505/5226\nf 1133/4402/4216 5246/5505/5226 4469/4407/4221\nf 1318/5498/5219 5246/5505/5226 5240/5499/5220\nf 5248/5507/5228 5240/5499/5220 5246/5505/5226\nf 5248/5507/5228 4466/4400/4214 5235/5493/5214\nf 288/5494/5215 5235/5493/5214 4466/4400/4214\nf 5251/5508/5229 4871/4958/4756 5249/5509/5230\nf 1238/4967/4765 5249/5509/5230 4871/4958/4756\nf 1317/5502/5223 5242/5501/5222 5250/5510/5231\nf 5251/5508/5229 5250/5510/5231 5242/5501/5222\nf 4879/4968/4766 300/4988/4786 5254/5512/5233\nf 5252/5513/5234 5254/5512/5233 300/4988/4786\nf 5249/5509/5230 5254/5512/5233 1320/5511/5232\nf 5253/5514/5235 1320/5511/5232 5254/5512/5233\nf 5253/5514/5235 1319/5515/5236 5257/5517/5238\nf 5255/5518/5239 5257/5517/5238 1319/5515/5236\nf 5256/5516/5237 5257/5517/5238 1136/4417/4231\nf 4481/4421/4235 1136/4417/4231 5257/5517/5238\nf 5250/5510/5231 1320/5511/5232 5258/5519/5240\nf 5256/5516/5237 5258/5519/5240 1320/5511/5232\nf 5245/5506/5227 5258/5519/5240 289/4406/4220\nf 4478/4416/4230 289/4406/4220 5258/5519/5240\nf 4499/4444/4258 1141/4445/4259 5261/5520/5241\nf 5259/5521/5242 5261/5520/5241 1141/4445/4259\nf 5212/5452/5185 5261/5520/5241 1311/5454/5187\nf 5260/5522/5243 1311/5454/5187 5261/5520/5241\nf 4496/4441/4255 291/4442/4256 5264/5524/5245\nf 5262/5525/5246 5264/5524/5245 291/4442/4256\nf 5259/5521/5242 5264/5524/5245 1322/5523/5244\nf 5263/5526/5247 1322/5523/5244 5264/5524/5245\nf 5263/5526/5247 1321/5527/5248 5267/5529/5250\nf 5265/5530/5251 5267/5529/5250 1321/5527/5248\nf 1240/4978/4776 5266/5528/5249 4887/4982/4780\nf 5267/5529/5250 4887/4982/4780 5266/5528/5249\nf 5260/5522/5243 1322/5523/5244 5268/5531/5252\nf 5266/5528/5249 5268/5531/5252 1322/5523/5244\nf 5268/5531/5252 4884/4977/4775 5215/5457/5190\nf 315/4899/4700 5215/5457/5190 4884/4977/4775\nf 1244/5001/4799 5269/5535/5256 4895/4989/4787\nf 5271/5532/5253 4895/4989/4787 5269/5535/5256\nf 5252/5513/5234 5271/5532/5253 1319/5515/5236\nf 5270/5534/5255 1319/5515/5236 5271/5532/5253\nf 304/5016/4814 5272/5537/5258 4903/5000/4798\nf 5274/5536/5257 4903/5000/4798 5272/5537/5258\nf 5274/5536/5257 5273/5539/5260 5269/5535/5256\nf 1324/5533/5254 5269/5535/5256 5273/5539/5260\nf 1323/5538/5259 5275/5542/5263 5273/5539/5260\nf 5277/5541/5262 5273/5539/5260 5275/5542/5263\nf 5276/5540/5261 5277/5541/5262 1139/4432/4246\nf 4491/4433/4247 1139/4432/4246 5277/5541/5262\nf 5270/5534/5255 1324/5533/5254 5278/5544/5265\nf 5276/5540/5261 5278/5544/5265 1324/5533/5254\nf 5255/5518/5239 5278/5544/5265 290/4422/4236\nf 4487/4427/4241 290/4422/4236 5278/5544/5265\nf 5279/5548/5269 5281/5545/5266 1140/4437/4251\nf 4495/4440/4254 1140/4437/4251 5281/5545/5266\nf 5280/5547/5268 1321/5527/5248 5281/5545/5266\nf 5262/5525/5246 5281/5545/5266 1321/5527/5248\nf 4492/4435/4249 292/5543/5264 5283/5549/5270\nf 5275/5542/5263 5283/5549/5270 292/5543/5264\nf 5279/5548/5269 5283/5549/5270 1325/5546/5267\nf 5282/5550/5271 1325/5546/5267 5283/5549/5270\nf 5282/5550/5271 1323/5538/5259 5285/5552/5273\nf 5272/5537/5258 5285/5552/5273 1323/5538/5259\nf 5284/5551/5272 5285/5552/5273 1246/5011/4809\nf 4911/5015/4813 1246/5011/4809 5285/5552/5273\nf 5284/5551/5272 5286/5553/5274 1325/5546/5267\nf 5280/5547/5268 1325/5546/5267 5286/5553/5274\nf 303/4983/4781 5265/5530/5251 4908/5010/4808\nf 5286/5553/5274 4908/5010/4808 5265/5530/5251\nf 5289/5556/5275 4917/5555/4817 5287/5559/5278\nf 1249/5560/4828 5287/5559/5278 4917/5555/4817\nf 1283/5246/5016 5071/5247/5017 5288/5557/5276\nf 5289/5556/5275 5288/5557/5276 5071/5247/5017\nf 5292/5561/5279 4925/5562/4829 5290/5565/5282\nf 311/5582/4849 5290/5565/5282 4925/5562/4829\nf 1327/5558/5277 5287/5559/5278 5291/5563/5280\nf 5292/5561/5279 5291/5563/5280 5287/5559/5278\nf 5295/5567/5284 5291/5563/5280 5293/5568/5285\nf 1326/5564/5281 5293/5568/5285 5291/5563/5280\nf 1143/4451/4265 5294/5566/5283 4505/4453/4267\nf 5295/5567/5284 4505/4453/4267 5294/5566/5283\nf 5296/5569/5286 5288/5557/5276 5294/5566/5283\nf 1327/5558/5277 5294/5566/5283 5288/5557/5276\nf 215/3169/3019 5063/5231/5003 4501/4446/4260\nf 5296/5569/5286 4501/4446/4260 5063/5231/5003\nf 4525/4480/4294 1148/4479/4293 5299/5570/5287\nf 5297/5571/5288 5299/5570/5287 1148/4479/4293\nf 5042/5209/4981 5299/5570/5287 1277/5210/4982\nf 5298/5572/5289 1277/5210/4982 5299/5570/5287\nf 5302/5574/5291 4522/4475/4289 5300/5575/5292\nf 293/4476/4290 5300/5575/5292 4522/4475/4289\nf 5297/5571/5288 5302/5574/5291 1329/5573/5290\nf 5301/5576/5293 1329/5573/5290 5302/5574/5291\nf 5301/5576/5293 1328/5577/5294 5305/5579/5296\nf 5303/5580/5297 5305/5579/5296 1328/5577/5294\nf 5304/5578/5295 5305/5579/5296 1251/5041/4839\nf 4933/5044/4842 1251/5041/4839 5305/5579/5296\nf 5298/5572/5289 1329/5573/5290 5306/5581/5298\nf 5304/5578/5295 5306/5581/5298 1329/5573/5290\nf 5045/5214/4986 5306/5581/5298 308/4623/4429\nf 4930/5039/4837 308/4623/4429 5306/5581/5298\nf 5309/5583/5299 4941/5584/4850 5307/5587/5302\nf 1255/5588/4861 5307/5587/5302 4941/5584/4850\nf 1326/5564/5281 5290/5565/5282 5308/5585/5300\nf 5309/5583/5299 5308/5585/5300 5290/5565/5282\nf 5312/5589/5303 4949/5590/4862 5310/5593/5306\nf 313/5631/4907 5310/5593/5306 4949/5590/4862\nf 1331/5586/5301 5307/5587/5302 5311/5591/5304\nf 5312/5589/5303 5311/5591/5304 5307/5587/5302\nf 5315/5595/5308 5311/5591/5304 5313/5597/5310\nf 1330/5592/5305 5313/5597/5310 5311/5591/5304\nf 1150/4487/4301 5314/5594/5307 4531/4488/4302\nf 5315/5595/5308 4531/4488/4302 5314/5594/5307\nf 5316/5598/5311 5308/5585/5300 5314/5594/5307\nf 1331/5586/5301 5314/5594/5307 5308/5585/5300\nf 295/4481/4295 5293/5568/5285 4527/4483/4297\nf 5316/5598/5311 4527/4483/4297 5293/5568/5285\nf 5319/5599/5312 4551/4515/4329 5317/5602/5315\nf 1155/4516/4330 5317/5602/5315 4551/4515/4329\nf 5300/5575/5292 5319/5599/5312 1328/5577/5294\nf 5318/5600/5313 1328/5577/5294 5319/5599/5312\nf 4548/4511/4325 296/4512/4326 5322/5603/5316\nf 5320/5604/5317 5322/5603/5316 296/4512/4326\nf 5317/5602/5315 5322/5603/5316 1333/5601/5314\nf 5321/5605/5318 1333/5601/5314 5322/5603/5316\nf 5321/5605/5318 1332/5606/5319 5325/5608/5321\nf 5323/5609/5322 5325/5608/5321 1332/5606/5319\nf 5324/5607/5320 5325/5608/5321 1257/5074/4872\nf 4957/5077/4875 1257/5074/4872 5325/5608/5321\nf 5318/5600/5313 1333/5601/5314 5326/5610/5323\nf 5324/5607/5320 5326/5610/5323 1333/5601/5314\nf 5303/5580/5297 5326/5610/5323 310/5046/4844\nf 4954/5072/4870 310/5046/4844 5326/5610/5323\nf 4547/4513/4327 1154/4507/4321 5329/5611/5324\nf 5327/5612/5325 5329/5611/5324 1154/4507/4321\nf 5320/5604/5317 5329/5611/5324 1332/5606/5319\nf 5328/5613/5326 1332/5606/5319 5329/5611/5324\nf 4544/4508/4322 297/4497/4311 5332/5615/5328\nf 5330/5616/5329 5332/5615/5328 297/4497/4311\nf 5327/5612/5325 5332/5615/5328 1335/5614/5327\nf 5331/5617/5330 1335/5614/5327 5332/5615/5328\nf 5333/5621/5334 5335/5619/5332 1334/5618/5331\nf 5331/5617/5330 1334/5618/5331 5335/5619/5332\nf 4969/5095/4893 1260/5090/4888 5335/5619/5332\nf 5334/5620/5333 5335/5619/5332 1260/5090/4888\nf 5334/5620/5333 5336/5622/5335 1335/5614/5327\nf 5328/5613/5326 1335/5614/5327 5336/5622/5335\nf 5323/5609/5322 5336/5622/5335 312/5079/4877\nf 4966/5088/4886 312/5079/4877 5336/5622/5335\nf 1151/4492/4306 5337/5624/5337 4535/4495/4309\nf 5339/5623/5336 4535/4495/4309 5337/5624/5337\nf 5339/5623/5336 5338/5626/5339 5330/5616/5329\nf 1334/5618/5331 5330/5616/5329 5338/5626/5339\nf 298/5596/5309 5313/5597/5310 4532/4490/4304\nf 5341/5627/5340 4532/4490/4304 5313/5597/5310\nf 5341/5627/5340 5340/5628/5341 5337/5624/5337\nf 1336/5625/5338 5337/5624/5337 5340/5628/5341\nf 1330/5592/5305 5310/5593/5306 5340/5628/5341\nf 5343/5629/5342 5340/5628/5341 5310/5593/5306\nf 5343/5629/5342 4981/5632/4908 5342/5630/5343\nf 1263/5634/4903 5342/5630/5343 4981/5632/4908\nf 1336/5625/5338 5342/5630/5343 5338/5626/5339\nf 5344/5633/5344 5338/5626/5339 5342/5630/5343\nf 5344/5633/5344 4978/5635/4904 5333/5621/5334\nf 309/5094/4892 5333/5621/5334 4978/5635/4904\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/java/com/huawei/hms/rn/ar/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHMSARDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/java/com/huawei/hms/rn/ar/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ar.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-ar/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"29.0.3\"\n        minSdkVersion = 26\n        compileSdkVersion = 29\n        targetSdkVersion = 29\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath 'com.huawei.agconnect:agcp:1.6.0.300'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ar/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ar/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.33.1\n"
  },
  {
    "path": "react-native-hms-ar/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ar/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ar/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHMSARDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'"
  },
  {
    "path": "react-native-hms-ar/example/app.json",
    "content": "{\n  \"name\": \"RNHMSARDemo\",\n  \"displayName\": \"RNHMSARDemo\"\n}"
  },
  {
    "path": "react-native-hms-ar/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-ar/example/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from \"react-native\";\nimport App from \"./App\";\nimport {name as appName} from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-ar/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-ar/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ar-demo\",\n  \"version\": \"3.7.0-3\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\",\n    \"devt\": \"react-devtools\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"dependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"@hmscore/react-native-hms-ar\": \"3.7.0-3\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.9.0\",\n    \"@babel/runtime\": \"^7.9.2\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  },\n  \"files\": [\n    \"android\",\n    \"src\",\n    \"app.json\",\n    \"App.js\",\n    \"index.js\",\n    \"LICENCE\",\n    \"metro.config.js\",\n    \"package.json\",\n    \"README.md\",\n    \"babel.config.js\"\n  ]\n}\n"
  },
  {
    "path": "react-native-hms-ar/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ar\",\n  \"title\": \"React Native Hms AR\",\n  \"description\": \"React Native HMS AR Kit\",\n  \"version\": \"3.7.0-3\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-ar\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ar\",\n    \"huawei-ar\",\n    \"hms-ar\",\n    \"ar\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENCE\",\n    \"package.json\",\n    \"README.md\",\n    \"THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"eslint\": \"^7.2.0\",\n    \"@react-native-community/eslint-config\": \"^2.0.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}\n"
  },
  {
    "path": "react-native-hms-ar/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-ar\" {\n  \n    import { Component } from \"react\";\n\n    interface AugmentedImageObject {\n\n        /**\n         * The name of the image file to detect in the assets folder.\n         */\n        imgFileFromAsset: string;\n\n        /**\n         * Specified physical width in meters for image.\n         */\n        widthInMeters: number;\n\n        /**\n         * The image name.\n         */\n        imgName: string;\n    }\n\n    interface PlaneText extends RGBAColor {\n\n        /**\n         * The text that will appear when the plane is detected.\n         */\n        text?: string;\n    }\n\n    interface PlaneImage {\n\n        /**\n         * The texture that will appear when the plane is detected.\n         */\n        image?: string;\n    }\n\n    interface RGBAColor {\n        red?: number;\n        blue?: number;\n        green?: number;\n        alpha?: number;\n    }\n\n    interface Semantic {\n        mode?: SemanticMode;\n        showSemanticModeSupportedInfo?: boolean;\n    }\n\n    interface HandDetail {\n\n        /**\n         * The box color.\n         */\n        boxColor?: RGBAColor;\n\n        /**\n         * The box width.\n         */\n        lineWidth?: number;\n\n        /**\n         * Enable to draw box.\n         */\n        drawBox?: boolean;\n\n        /**\n         * Enable to draw skeleton line.\n         */\n        drawLine?: boolean;\n\n        /**\n         * Enable to draw skeleton points.\n         */\n        drawPoint?: boolean;\n\n        /**\n         * The skeleton line width\n         */\n        lineWidthSkeleton?: number;\n\n        /**\n         * The skeleton point size.\n         */\n        pointSize?: number;\n\n        /**\n         * The skeleton line color.\n         */\n        lineColor?: RGBAColor;\n\n        /**\n         * The skeleton point color.\n         */\n        pointColor?: RGBAColor;\n\n        /**\n         * Front camera or rear camera setting.\n         */\n         cameraLensFacing?: CameraLensFacing;\n\n        /**\n         * The lighting estimate mode.\n         */        \n         lightMode?: LightMode;\n        \n         /**\n          * Semantic recognition mode.\n          */\n         semantic?: Semantic;\n         \n         /**\n          * The power consumption mode.\n          */\n         powerMode?: PowerMode;\n \n         /**\n          * The focus mode.\n          */\n         focusMode?: FocusMode;\n \n         /**\n          * The update mode.\n          */\n         updateMode?: UpdateMode;\n    }\n\n    interface Hand {\n        hand: HandDetail;\n    }\n\n    interface Hand {\n        hand: HandDetail;\n    }\n\n    interface HandProps extends BaseProps {\n\n        /**\n         * Set configurations of AR Hand View.\n         */\n        config: Hand;\n    }\n\n    interface BodyDetail {\n\n        /**\n         * Enable to draw skeleton line.\n         */\n        drawLine?: boolean;\n\n        /**\n         * Enable to draw skeleton points.\n         */\n        drawPoint?: boolean;\n        \n        /**\n         * The skeleton line width.\n         */\n        lineWidth?: number;\n\n        /**\n         * The skeleton point size.\n         */\n        pointSize?: number;\n\n        /**\n         * The skeleton line color.\n         */\n        lineColor?: RGBAColor;\n\n        /**\n         * The skeleton point color.\n         */\n        pointColor?: RGBAColor;\n\n        /**\n         * The lighting estimate mode.\n         */        \n         lightMode?: LightMode;\n        \n         /**\n          * Semantic recognition mode\n          */\n         semantic?: Semantic;\n         \n         /**\n          * The power consumption mode.\n          */\n         powerMode?: PowerMode;\n \n         /**\n          * The focus mode.\n          */\n         focusMode?: FocusMode;\n \n         /**\n          * The update mode.\n          */\n         updateMode?: UpdateMode;\n    }\n\n    interface Body {\n        body: BodyDetail;\n    }\n\n    interface BodyProps extends BaseProps {\n\n        /**\n         * Set configurations of AR Body View.\n         */\n        config: Body;\n    }\n\n    interface Healty {\n\n        /**\n         * Health check progress.\n         */\n        handleProcessProgressEvent?: (num: number) => void;\n\n        /**\n         * The status of detection of the face.\n         */\n        handleEvent?: (status: string) => void;\n\n        /**\n         * Detection result.\n         */\n        handleResult?: (result: string) => void;\n    }\n\n    interface FaceDetail {\n\n        /**\n         * Enable to health mode.\n         */\n        enableHealthDevice?: boolean;\n\n        /**\n         * If \"enableHealtyDevice\" is true, the events here are triggered.\n         */\n        healty?: Healty;\n\n        /**\n         * Enable to multiple face detection features.\n         */\n        multiFace?: boolean;\n        \n        /**\n         * Draw the face.\n         */\n        drawFace?: boolean;\n\n        /**\n         * Size of points.\n         */\n        pointSize?: number;\n\n        /**\n         * If \"texturePath\" is empty, it is created according to the color code in this field.\n         */\n        depthColor?: RGBAColor;\n\n        /**\n         * The texture is created according to the image given from the assets folder.\n         */\n        texturePath: string;\n\n        /**\n         * Front camera or rear camera setting.\n         */\n        cameraLensFacing?: CameraLensFacing;\n\n        /**\n         * The lighting estimate mode.\n         */        \n        lightMode?: LightMode;\n        \n        /**\n         * Semantic recognition mode\n         */\n        semantic?: Semantic;\n        \n        /**\n         * The power consumption mode.\n         */\n        powerMode?: PowerMode;\n\n        /**\n         * The focus mode.\n         */\n        focusMode?: FocusMode;\n\n        /**\n         * The update mode.\n         */\n        updateMode?: UpdateMode;\n    }\n\n    interface Face {\n        face: FaceDetail;\n    }\n\n    interface FaceProps extends BaseProps {\n\n        /**\n         * Set configurations of AR Face View.\n         */\n        config: Face;\n    }\n\n    interface WorldDetail {\n        /**\n         * The file name in the asset folder of the 3D object to be added when the screen is clicked.\n         */\n        objectName?: string;\n\n        /**\n         * The file name of the texture of the object to be added when clicking on the screen in the asset folder.\n         */\n        objectTexture?: string;\n\n        /**\n         * Enable to draw planes.\n         */\n        showPlanes?: boolean;\n\n        /**\n         * Configuration for planes not listed.\n         */\n        planeOther?: PlaneText | PlaneImage;\n\n        /**\n         * Configuration to specify the wall.\n         */\n        planeWall?: PlaneText | PlaneImage;\n\n        /**\n         * Configuration to specify the floor.\n         */\n        planeFloor?: PlaneText | PlaneImage;\n\n        /**\n         * Configuration to specify the seat.\n         */\n        planeSeat?: PlaneText | PlaneImage;\n\n        /**\n         * Configuration to specify the table.\n         */\n        planeTable?: PlaneText | PlaneImage;\n\n        /**\n         * Configuration to specify the ceiling.\n         */\n        planeCeiling?: PlaneText | PlaneImage;\n\n        /**\n         * Sets the maximum memory size for storing map data.\n         */\n        maxMapSize?: number;\n\n        /**\n         * 2D image information to tracking.\n         */\n        augmentedImages?: AugmentedImageObject[];\n\n        /**\n         * The plane finding mode.\n         */\n        planeFindingMode?: PlaneFindingMode;\n\n        /**\n         * The lighting estimate mode.\n         */\n        lightMode?: LightMode;\n        \n        /**\n         * Semantic recognition mode.\n         */\n        semantic?: Semantic;\n        \n        /**\n         * The power consumption mode.\n         */\n        powerMode?: PowerMode;\n\n        /**\n         * The focus mode.\n         */\n        focusMode?: FocusMode;\n\n        /**\n         * The update mode.\n         */\n        updateMode?: UpdateMode;\n\n        /**\n         * Enable to draw line for Augmented Images.\n         */\n         drawLineAI?: boolean;\n\n         /**\n          * Enable to draw points for Augmented Images.\n          */\n         drawPointAI?: boolean;\n \n         /**\n          * The line width for Augmented Images.\n          */\n         lineWidthAI?: number;\n \n         /**\n          * The point size for Augmented Images.\n          */\n         pointSizeAI?: number;\n \n         /**\n          * The line color for Augmented Images.\n          */\n         lineColorAI?: RGBAColor;\n \n         /**\n          * The point color for Augmented Images.\n          */\n         pointColorAI?: RGBAColor;\n    }\n\n    interface World {\n        world: WorldDetail;\n    }\n\n    interface WorldProps extends BaseProps {\n\n        /**\n         * Set configurations of AR World View.\n         */\n        config: World;\n    }\n\n    interface AugmentedImageDetail {\n\n        /**\n         * 2D image information to tracking.\n         */\n        augmentedImages?: AugmentedImageObject[];\n\n        /**\n         * The lighting estimate mode.\n         */\n         lightMode?: LightMode;\n        \n         /**\n          * Semantic recognition mode.\n          */\n         semantic?: Semantic;\n         \n         /**\n          * The power consumption mode.\n          */\n         powerMode?: PowerMode;\n \n         /**\n          * The focus mode.\n          */\n         focusMode?: FocusMode;\n \n         /**\n          * The update mode.\n          */\n         updateMode?: UpdateMode;\n\n         /**\n         * Enable to draw line.\n         */\n        drawLine?: boolean;\n\n        /**\n         * Enable to draw points.\n         */\n        drawPoint?: boolean;\n\n        /**\n         * The line width\n         */\n        lineWidth?: number;\n\n        /**\n         * The point size.\n         */\n        pointSize?: number;\n\n        /**\n         * The line color.\n         */\n        lineColor?: RGBAColor;\n\n        /**\n         * The point color.\n         */\n        pointColor?: RGBAColor;\n    }\n\n    interface AugmentedImage {\n        augmentedImage: AugmentedImageDetail;\n    }\n\n    interface AugmentedImageProps extends DrawProps, HandleCameraProps {\n\n        /**\n         * Set configurations of AR Augmented Image View.\n         */\n        config: AugmentedImage;\n    }\n\n    interface WorldBodyDetail {\n\n        /**\n         * The file name in the asset folder of the 3D object to be added when the screen is clicked.\n         */\n         objectName?: string;\n\n         /**\n          * The file name of the texture of the object to be added when clicking on the screen in the asset folder.\n          */\n         objectTexture?: string;\n \n         /**\n          * Enable to draw planes.\n          */\n         showPlanes?: boolean;\n \n         /**\n          * Configuration for planes not listed.\n          */\n         planeOther?: PlaneText | PlaneImage;\n \n         /**\n          * Configuration to specify the wall.\n          */\n         planeWall?: PlaneText | PlaneImage;\n \n         /**\n          * Configuration to specify the floor.\n          */\n         planeFloor?: PlaneText | PlaneImage;\n \n         /**\n          * Configuration to specify the seat.\n          */\n         planeSeat?: PlaneText | PlaneImage;\n \n         /**\n          * Configuration to specify the table.\n          */\n         planeTable?: PlaneText | PlaneImage;\n \n         /**\n          * Configuration to specify the ceiling.\n          */\n         planeCeiling?: PlaneText | PlaneImage;\n\n        /**\n         * Sets the maximum memory size for storing map data.\n         */\n        maxMapSize?: number;\n\n        /**\n         * 2D image information to tracking.\n         */\n        augmentedImages?: AugmentedImageObject[];\n\n        /**\n         * The plane finding mode.\n         */\n        planeFindingMode?: PlaneFindingMode;\n\n        /**\n         * Enable to draw skeleton line.\n         */\n        drawLine?: boolean;\n\n        /**\n         * Enable to draw skeleton points.\n         */\n        drawPoint?: boolean;\n        \n        /**\n         * The skeleton line width.\n         */\n        lineWidth?: number;\n\n        /**\n         * The skeleton point size.\n         */\n        pointSize?: number;\n\n        /**\n         * The skeleton line color.\n         */\n        lineColor?: RGBAColor;\n\n        /**\n         * The skeleton point color.\n         */\n        pointColor?: RGBAColor;\n        \n        /**\n         * The lighting estimate mode.\n         */\n        lightMode?: LightMode;\n        \n        /**\n         * Semantic recognition mode.\n         */\n        semantic?: Semantic;\n        \n        /**\n         * The power consumption mode.\n         */\n        powerMode?: PowerMode;\n\n        /**\n         * The focus mode.\n         */\n        focusMode?: FocusMode;\n\n        /**\n         * The update mode.\n         */\n        updateMode?: UpdateMode;\n    }\n\n    interface WorldBody {\n        worldBody: WorldBodyDetail;\n    }\n\n    interface WorldBodyProps extends BaseProps {\n\n        /**\n         * Set configurations of AR World Body View.\n         */\n        config: WorldBody;\n    }\n\n    interface SceneMeshDetail {\n        objectName?: string;\n        objectTexture?: string;\n        \n        /**\n         * The lighting estimate mode.\n         */\n         lightMode?: LightMode;\n        \n         /**\n          * Semantic recognition mode.\n          */\n         semantic?: Semantic;\n         \n         /**\n          * The power consumption mode.\n          */\n         powerMode?: PowerMode;\n \n         /**\n          * The focus mode.\n          */\n         focusMode?: FocusMode;\n \n         /**\n          * The update mode.\n          */\n         updateMode?: UpdateMode;\n    }\n\n    interface SceneMesh {\n        sceneMesh: SceneMeshDetail;\n    }\n\n    interface SceneMeshProps extends BaseProps {\n\n        /**\n         * Set configurations of AR Scene Mesh View.\n         */\n        config: SceneMesh;\n    }\n\n    export default class ARView extends Component< HandProps | FaceProps | WorldBodyProps | BodyProps | WorldProps | AugmentedImageProps | SceneMeshProps, any > {\n        constructor(props: HandProps | FaceProps | WorldBodyProps | BodyProps | WorldProps | AugmentedImageProps | SceneMeshProps);\n    }\n\n    export class HmsARModule {\n\n        /**\n         * Check if the AR Engine Service APK is ready.\n         */\n        static isAREngineReady(): Promise<boolean>;\n\n        /**\n         * Opens the AR Engine app page in the AppGallery.\n         */\n        static navigateToAppMarket(): void;\n\n        /**\n         * Enables HMSLogger capability which is used for sending usage analytics of AR Engine SDK's methods to improve the service quality.\n         */\n        static enableLogger(): void;\n\n        /**\n         * Disables HMSLogger capability which is used for sending usage analytics of AR Engine SDK's methods to improve the service quality.\n         */\n        static disableLogger(): void;\n\n        static LightMode: LightMode;\n        static CameraLensFacing: CameraLensFacing;\n        static SemanticMode: SemanticMode;\n        static PowerMode: PowerMode;\n        static FocusMode: FocusMode;\n        static UpdateMode: UpdateMode;\n        static PlaneFindingMode: PlaneFindingMode;\n        static TracingState: TracingState;\n        static HandTypes: HandTypes;\n        static HandSkeletonType: HandSkeletonType;\n        static BodySkeletonType: BodySkeletonType;\n        static SemanticPlaneLabel: SemanticPlaneLabel;\n        static PlaneTypes: PlaneTypes;\n        static CoordinateSystemType: CoordinateSystemType;\n    }\n\n    interface BaseProps extends DrawProps, MessageListenerProps, HandleCameraProps { }\n\n    interface DrawProps {\n        /**\n         * Register a callback method on gl surface view's onDrawFrame method.\n         */\n        onDrawFrame: (e: string) => void;\n    }\n\n    interface MessageListenerProps {\n        messageListener: (text: string) => void;\n    }\n\n    interface HandleCameraProps {\n        handleCameraConfig: (e: string) => void;\n        handleCameraIntrinsics: (e: string) => void;\n    }\n\n    /**\n     * The lighting estimate mode.\n     */\n    export enum LightMode {\n        \n        /**\n         * None.\n         */\n        NONE = 0,\n\n        /**\n         * Enable the lighting intensity estimate capability.\n         */\n        AMBIENT_INTENSITY = 1,\n\n        /**\n         * Enable the ambient lighting estimate capability.\n         */\n        ENVIRONMENT_LIGHTING = 2,\n\n        /**\n         * Enable the lighting environment texture estimate capability.\n         */\n        ENVIRONMENT_TEXTURE = 4,\n\n        /**\n         * Enable all lighting estimate capabilities.\n         */\n        ALL = 65535\n    }\n\n    /**\n     * The camera type, which can be front or rear.\n     */\n    export enum CameraLensFacing {\n\n        /**\n         * Rear camera.\n         */\n        REAR = 1,\n\n        /**\n         * Front camera.\n         */\n        FRONT = 2\n    }\n\n    /**\n     * Semantic recognition mode\n     */\n    export enum SemanticMode {\n        \n        /**\n         * None.\n         */\n        NONE = 0,\n        \n        /**\n         * Plane.\n         */\n        PLANE = 1,\n\n        /**\n         * Target.\n         */\n        TARGET = 2,\n\n        /**\n         * All.\n         */\n        ALL = 3\n    }\n\n    /**\n     * The power consumption mode.\n     */\n    export enum PowerMode {\n\n        /**\n         * Common mode.\n         */\n        NORMAL = 1,\n\n        /**\n         * Power saving mode.\n         */\n        POWER_SAVING = 2,\n\n        /**\n         * Ultra power saving mode.\n         */\n        ULTRA_POWER_SAVING = 3,\n\n        /**\n         * Performance first.\n         */\n        PERFORMANCE_FIRST = 4\n    }\n\n    /**\n     * The focus mode.\n     */\n    export enum FocusMode {\n\n        /**\n         * Fixed focus to infinity focus.\n         */\n        FIXED_FOCUS = 1,\n\n        /**\n         * Auto focus.\n         */\n        AUTO_FOCUS = 2\n    }\n\n    /**\n     * The update mode.\n     */\n    export enum UpdateMode {\n\n        /**\n         * The update() method of ARSession returns data only when a new frame is available.\n         */\n        BLOCKING = 1,\n\n        /**\n         * The update() method of ARSession returns data immediately.\n         */\n        LATEST_CAMERA_IMAGE = 2\n    }\n\n    /**\n     * The plane finding mode.\n     */\n    export enum PlaneFindingMode {\n\n        /**\n         * Plane detection is disabled.\n         */\n        DISABLED = 1,\n\n        /**\n         * Plane detection is enabled, including horizontal and vertical planes.\n         */\n        ENABLE = 2,\n\n        /**\n         * Only the vertical plane is detected.\n         */\n        HORIZONTAL_ONLY = 3,\n\n        /**\n         * Only the vertical plane is detected.\n         */\n        VERTICAL_ONLY = 4\n    }\n\n    /**\n     * The tracking status of the trackable object.\n     */\n    export enum TracingState {\n\n        /**\n         * Unknown.\n         */\n        UNKNOWN_STATE = 0,\n\n        /**\n         * Tracking status.\n         */\n        TRACKING = 1,\n\n        /**\n         * Paused status.\n         */\n        PAUSED = 2,\n\n        /**\n         * Stopped status.\n         */\n        STOPPED = 3,\n    }\n\n    /**\n     * The type of hand, which can be left or right.\n     */\n    export enum HandTypes {\n\n        /**\n         * Unknown or the hand type cannot be distinguished.\n         */\n        AR_HAND_UNKNOWN = 0,\n\n        /**\n         * Right hand.\n         */\n        AR_HAND_RIGHT = 1,\n\n        /**\n         * Left hand.\n         */\n        AR_HAND_LEFT = 2,\n    }\n\n    /**\n     * The hand skeleton point types.\n     */\n    export enum HandSkeletonType {\n\n        /**\n         * Unknown.\n         */\n        UNKNOWN = 0,\n\n        /**\n         * The root point of the hand bone, that is, the wrist.\n         */\n        ROOT = 1,\n\n        /**\n         * Pinky knuckle 1.\n         */\n        PINKY_1 = 2,\n\n        /**\n         * Pinky knuckle 2.\n         */\n        PINKY_2 = 3,\n\n        /**\n         * Pinky knuckle 3.\n         */\n        PINKY_3 = 4,\n\n        /**\n         * Pinky finger tip.\n         */\n        PINKY_4 = 5,\n\n        /**\n         * Ring finger knuckle 1.\n         */\n        RING_1 = 6,\n\n        /**\n         * Ring finger knuckle 2.\n         */\n        RING_2 = 7,\n\n        /**\n         * Ring finger knuckle 3.\n         */\n        RING_3 = 8,\n\n        /**\n         * Ring finger tip.\n         */\n        RING_4 = 9,\n\n        /**\n         * Middle finger knuckle 1.\n         */\n        MIDDLE_1 = 10,\n\n        /**\n         * Middle finger knuckle 2.\n         */\n        MIDDLE_2 = 11,\n\n        /**\n         * Middle finger knuckle 3.\n         */\n        MIDDLE_3 = 12,\n\n        /**\n         * Middle finger tip.\n         */\n        MIDDLE_4 = 13,\n\n        /**\n         * Index finger knuckle 1.\n         */\n        INDEX_1 = 14,\n\n        /**\n         * Index finger knuckle 2.\n         */\n        INDEX_2 = 15,\n\n        /**\n         * Index finger knuckle 3.\n         */\n        INDEX_3 = 16,\n\n        /**\n         * Index finger tip.\n         */\n        INDEX_4 = 17,\n\n        /**\n         * Thumb knuckle 1.\n         */\n        THUMB_1 = 18,\n\n        /**\n         * Thumb knuckle 2.\n         */\n        THUMB_2 = 19,\n\n        /**\n         * Thumb knuckle 3.\n         */\n        THUMB_3 = 20,\n\n        /**\n         * Thumb tip.\n         */\n        THUMB_4 = 21,\n\n        /**\n         * Number of knuckles.\n         */\n        LENGTH = 22\n    }\n\n    /**\n     * The body skeleton point types.\n     */\n    export enum BodySkeletonType {\n        /**\n         * Unknown.\n         */\n        UNKNOWN = 0,\n\n        /**\n         * Head.\n         */\n        HEAD = 1,\n\n        /**\n         * Neck.\n         */\n        NECK = 2,\n\n        /**\n         * Right shoulder.\n         */\n        R_SHO = 3,\n\n        /**\n         * Right elbow.\n         */\n        R_ELBOW = 4,\n\n        /**\n         * Right wrist.\n         */\n        R_WRIST = 5,\n\n        /**\n         * Left shoulder.\n         */\n        L_SHO = 6,\n\n        /**\n         * Left elbow.\n         */\n        L_ELBOW = 7,\n\n        /**\n         * Left wrist.\n         */\n        L_WRIST = 8,\n\n        /**\n         * Right hip.\n         */\n        R_HIP = 9,\n\n        /**\n         * Right knee.\n         */\n        R_KNEE = 10,\n\n        /**\n         * Right ankle.\n         */\n        R_ANKLE = 11,\n\n        /**\n         * Left hip joint.\n         */\n        L_HIP = 12,\n\n        /**\n         * Left knee.\n         */\n        L_KNEE = 13,\n\n        /**\n         * Left ankle.\n         */\n        L_ANKLE = 14,\n\n        /**\n         * Center of hip joint.\n         */\n        HIP_MID = 15,\n\n        /**\n         * Right ear.\n         */\n        R_EAR = 16,\n\n        /**\n         * Right eye.\n         */\n        R_EYE = 17,\n\n        /**\n         * Nose.\n         */\n        NOSE = 18,\n\n        /**\n         * Left eye.\n         */\n        L_EYE = 19,\n\n        /**\n         * Left ear.\n         */\n        L_EAR = 20,\n\n        /**\n         * Spine.\n         */\n        SPINE = 21,\n\n        /**\n         * Right toe.\n         */\n        R_TOE = 22,\n\n        /**\n         * Left toe.\n         */\n        L_TOE = 23,\n\n        /**\n         * Number of joints, instead of a joint point.\n         */\n        LENGTH = 24\n    }\n\n    /**\n     * Semantic types of the current plane.\n     */\n    export enum SemanticPlaneLabel {\n        \n        /**\n         * Other.\n         */\n        PLANE_OTHER = 0,\n        \n        /**\n         * Wall.\n         */\n        PLANE_WALL = 1,\n        \n        /**\n         * Floor.\n         */\n        PLANE_FLOOR = 2,\n        \n        /**\n         * Seat.\n         */\n        PLANE_SEAT = 3,\n\n        /**\n         * Table.\n         */\n        PLANE_TABLE = 4,\n\n        /**\n         * Ceiling.\n         */\n        PLANE_CEILING = 5,\n\n        /**\n         * Door.\n         */\n        PLANE_DOOR = 6,\n\n        /**\n         * Window.\n         */\n        PLANE_WINDOW = 7,\n\n        /**\n         * Bed.\n         */\n        PLANE_BED = 8\n    }\n\n    /**\n     * The plane type.\n     */\n    export enum PlaneTypes {\n\n        /**\n         * A horizontal plane facing up (such as the ground and desk platform).\n         */\n        HORIZONTAL_UPWARD_FACING = 0,\n\n        /**\n         * A horizontal plane facing down (such as the ceiling).\n         */\n        HORIZONTAL_DOWNWARD_FACING = 1,\n\n        /**\n         * A vertical plane.\n         */\n        VERTICAL_FACING = 2,\n\n        /**\n         * Unsupported type.\n         */\n        UNKNOWN_FACING = 3,\n    }\n\n    /**\n     * The coordinate system type.\n     */\n    export enum CoordinateSystemType {\n        \n        /**\n         * Unknown coordinate system.\n         */\n        UNKNOWN = 0,\n\n        /**\n         * World coordinate system.\n         */\n        \"3D_WORLD\" = 1,\n\n        /**\n         * Local coordinate system.\n         */\n        \"3D_SELF\" = 2,\n\n        /**\n         * OpenGL NDC coordinate system.\n         */\n        \"2D_IMAGE\" = 3,\n\n        /**\n         * Camera coordinate system.\n         */\n        \"3D_CAMERA\" = 4\n    }\n}"
  },
  {
    "path": "react-native-hms-ar/src/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { requireNativeComponent, NativeEventEmitter, NativeModules } from \"react-native\";\nimport React from \"react\";\n\nconst ARSurfaceView = requireNativeComponent(\"ARSurfaceView\");\nexport const { HmsARModule } = NativeModules;\n\nexport default class ARView extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    const eventEmitter = new NativeEventEmitter(ARSurfaceView);\n    if (typeof this.props.onDrawFrame === \"function\")\n      eventEmitter.addListener(\"onDrawFrame\", this.props.onDrawFrame);\n    if (typeof this.props.messageListener === \"function\")\n      eventEmitter.addListener(\"messageListener\", this.props.messageListener);\n    if (typeof this.props.handleCameraConfig === \"function\")\n      eventEmitter.addListener(\"handleCameraConfig\", this.props.handleCameraConfig);\n    if (typeof this.props.handleCameraIntrinsics === \"function\")\n      eventEmitter.addListener(\"handleCameraIntrinsics\", this.props.handleCameraIntrinsics);\n    if (this.props.config.face && this.props.config.face.enableHealthDevice) {\n      if (typeof this.props.config.face.healty.handleProcessProgressEvent === \"function\")\n        eventEmitter.addListener(\"handleProcessProgressEvent\", this.props.config.face.healty.handleProcessProgressEvent);\n      if (typeof this.props.config.face.healty.handleEvent === \"function\")\n        eventEmitter.addListener(\"handleEvent\", this.props.config.face.healty.handleEvent);\n      if (typeof this.props.config.face.healty.handleResult === \"function\")\n        eventEmitter.addListener(\"handleResult\", this.props.config.face.healty.handleResult);\n    }\n  }\n\n  render() {\n    return <ARSurfaceView {...this.props} />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-availability/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-availability/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Availability</h1>\n</p>\n\n---\n\nThe React Native Plugin enables communication between HUAWEI Availability SDK and React Native platform. The Plugin exposes all the functionality provided by Huawei Availability SDK.\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-availability\n```\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-availability/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven { url 'https://developer.huawei.com/repo/' }\n    google()\n    jcenter()\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:base:6.12.0.300'\n\n}\n"
  },
  {
    "path": "react-native-hms-availability/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-availability/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-availability/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-availability/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-availability/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.availability\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application android:usesCleartextTraffic=\"true\"></application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-availability/android/src/main/java/com/huawei/hms/rn/availability/HMSAvailabilityModule.java",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.availability;\n\nimport static com.huawei.hms.rn.availability.Util.mapToWM;\n\nimport android.util.ArrayMap;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.api.HuaweiApiAvailability;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\npublic class HMSAvailabilityModule extends ReactContextBaseJavaModule {\n\n    private final ReactApplicationContext reactContext;\n\n    HMSAvailabilityModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAvailabilityModule\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n\n        Map<String, Object> errorCode = new ArrayMap<>();\n        errorCode.put(\"HMS_CORE_APK_AVAILABLE\", 0);\n        errorCode.put(\"NO_HMS_CORE_APK\", 1);\n        errorCode.put(\"HMS_CORE_APK_OUT_OF_DATE\", 2);\n        errorCode.put(\"HMS_CORE_APK_UNAVAILABLE\", 3);\n        errorCode.put(\"APK_IS_NOT_OFFICIAL_VERSION\", 9);\n        errorCode.put(\"HMS_CORE_APK_TOO_OLD\", 21);\n        constants.put(\"ErrorCode\", errorCode);\n        return constants;\n    }\n\n    @ReactMethod\n    public void isHuaweiMobileServicesAvailableWithoutParam(final Promise promise) {\n        int isHuaweiMobileServicesAvailable = HuaweiApiAvailability.getInstance()\n            .isHuaweiMobileServicesAvailable(reactContext);\n        promise.resolve(isHuaweiMobileServicesAvailable);\n    }\n\n    @ReactMethod\n    public void isHuaweiMobileServicesAvailableWithParam(int minApkVersion, final Promise promise) {\n        int isHuaweiMobileServicesAvailable = HuaweiApiAvailability.getInstance()\n            .isHuaweiMobileServicesAvailable(reactContext, minApkVersion);\n        promise.resolve(isHuaweiMobileServicesAvailable);\n    }\n\n    @ReactMethod\n    public void getApiMap(final Promise promise) {\n        Map<String, Integer> map = HuaweiApiAvailability.getApiMap();\n        WritableMap result = mapToWM(map);\n        promise.resolve(result);\n    }\n\n    @ReactMethod\n    public void getServicesVersionCode(final Promise promise) {\n        int code = HuaweiApiAvailability.getServicesVersionCode();\n        promise.resolve(code);\n    }\n\n    @ReactMethod\n    public void getErrorString(int code, final Promise promise) {\n        String result = HuaweiApiAvailability.getInstance().getErrorString(code);\n        promise.resolve(result);\n    }\n\n    @ReactMethod\n    public void isUserResolvableError(int code, final Promise promise) {\n        boolean result = HuaweiApiAvailability.getInstance().isUserResolvableError(code);\n        promise.resolve(result);\n    }\n\n    @ReactMethod\n    public void isHuaweiMobileNoticeAvailable(final Promise promise) {\n        int isHuaweiMobileNoticeAvailable = HuaweiApiAvailability.getInstance()\n            .isHuaweiMobileNoticeAvailable(reactContext);\n        promise.resolve(isHuaweiMobileNoticeAvailable);\n    }\n\n    @ReactMethod\n    public void resolveError(int errorCode, int requestCode, final Promise promise) {\n        HuaweiApiAvailability.getInstance().resolveError(getCurrentActivity(), errorCode, requestCode);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void setServicesVersionCode(int code, final Promise promise) {\n        HuaweiApiAvailability.setServicesVersionCode(code);\n        promise.resolve(null);\n    }\n\n    @ReactMethod\n    public void showErrorDialogFragment(int errorCode, int requestCode, final Promise promise) {\n        getCurrentActivity().runOnUiThread(() -> {\n            boolean result = HuaweiApiAvailability.getInstance()\n                .showErrorDialogFragment(getCurrentActivity(), errorCode, requestCode, dialog -> {\n                    sendEvent(reactContext, \"OnErrorDialogFragmentCancelled\");\n                });\n            promise.resolve(result);\n        });\n    }\n\n    private void sendEvent(ReactContext reactContext, String eventName) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, null);\n    }\n\n    @ReactMethod\n    public void showErrorNotification(int code, final Promise promise) {\n        HuaweiApiAvailability.getInstance().showErrorNotification(getCurrentActivity(), code);\n        promise.resolve(null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-availability/android/src/main/java/com/huawei/hms/rn/availability/HMSAvailabilityPackage.java",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.availability;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSAvailabilityPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(new HMSAvailabilityModule(reactContext));\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-availability/android/src/main/java/com/huawei/hms/rn/availability/Util.java",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.availability;\n\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport java.util.Map;\n\npublic class Util {\n\n    private Util() {\n    }\n\n    public static WritableMap mapToWM(Map<String, Integer> map) {\n        WritableMap resultData = new WritableNativeMap();\n        for (Map.Entry<String, Integer> entry : map.entrySet()) {\n            resultData.putInt(entry.getKey(), entry.getValue());\n        }\n        return resultData;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-availability/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-availability/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.facebook.react\"\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile   : \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\t\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-availability/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-availability/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:ignore=\"GoogleAppIndexingWarning\"\n            tools:targetApi=\"28\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-availability/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.availability.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n            android:name=\".MainApplication\"\n            android:label=\"RNHmsAvailabilityDemo\"\n            android:icon=\"@mipmap/ic_launcher\"\n            android:roundIcon=\"@mipmap/ic_launcher_round\"\n            android:allowBackup=\"false\"\n            android:usesCleartextTraffic=\"true\"\n            android:theme=\"@style/AppTheme\">\n        <activity\n                android:name=\".MainActivity\"\n                android:label=\"RNHmsAvailabilityDemo\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-availability/example/android/app/src/main/java/com/huawei/hms/rn/availability/demo/MainActivity.java",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.availability.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsAvailabilityDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-availability/example/android/app/src/main/java/com/huawei/hms/rn/availability/demo/MainApplication.java",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.availability.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            // Packages that cannot be autolinked yet can be added manually here, for example:\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-availability/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-availability/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath('com.facebook.react:react-native-gradle-plugin')\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n        google()\n        mavenCentral()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-availability/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-availability/example/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\nFLIPPER_VERSION=0.33.1\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-availability/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-availability/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-availability/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsAvailabilityDemo'\n\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");\napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-availability/example/app.json",
    "content": "{\n  \"name\": \"RNHmsAvailabilityDemo\",\n  \"displayName\": \"RNHmsAvailabilityDemo\"\n}"
  },
  {
    "path": "react-native-hms-availability/example/babel.config.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-availability/example/index.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nimport {AppRegistry} from \"react-native\";\nimport App from \"./src/App\";\nimport {name as appName} from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-availability/example/jest.config.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nmodule.exports = {\n  preset: \"react-native\",\n  moduleFileExtensions: [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"node\"],\n};\n"
  },
  {
    "path": "react-native-hms-availability/example/metro.config.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-availability/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-availability-demo\",\n  \"version\": \"6.12.0-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"lint\": \"eslint .\",\n    \"devt\": \"react-devtools\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"@hmscore/react-native-hms-availability\": \"6.12.0-300\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.9\",\n    \"@babel/runtime\": \"^7.12.5\",\n    \"@babel/traverse\": \"7.22.8\",\n    \"metro-react-native-babel-preset\": \"^0.64.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-availability/example/src/App.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nimport React, {useEffect} from \"react\";\nimport {\n  TouchableOpacity,\n  View,\n  Text,\n  ScrollView,\n  Alert} from \"react-native\";\nimport HMSAvailability, {ErrorCode} from \"@hmscore/react-native-hms-availability\";\nimport { styles } from \"./styles\";\n\nconst Button = (props) => (\n  <TouchableOpacity\n    style={[\n      styles.buttonContainer,\n      styles.secondaryButton,\n      styles.buttonContainerSlim,\n    ]}\n    onPress={props.onPress}\n  >\n    <Text style={styles.buttonText}>{props.text}</Text>\n  </TouchableOpacity>\n);\n\nconst showResult = (res) => Alert.alert(\"Result\", JSON.stringify(res, null, 4));\nclass App extends React.Component {\n\n  componentDidMount() {\n    HMSAvailability.OnErrorDialogFragmentCancelledListenerAdd(() => {\n       console.log(\"Dialog Fragment Cancelled\");\n    })\n  };\n\n  componentWillUnmount(){\n    HMSAvailability.OnErrorDialogFragmentCancelledListenerRemove();    \n  }\n\n  isHuaweiMobileServicesAvailable() {\n   \n    HMSAvailability.isHuaweiMobileServicesAvailable()\n      .then((res) => this.getErrorString(res))\n      .catch((err) => showResult(err));\n  }\n\n  getApiMap() {\n    HMSAvailability.getApiMap()\n     .then((res) => showResult(res))\n     .catch((err) => showResult(err));\n  }\n\n  getServicesVersionCode() {\n    HMSAvailability.getServicesVersionCode()\n     .then((res) => showResult(res))\n     .catch((err) => showResult(err));\n  }\n\n  getErrorString(errorCode = ErrorCode.HMS_CORE_APK_OUT_OF_DATE) {\n    HMSAvailability.getErrorString(errorCode)\n     .then((res) => showResult(errorCode +\": \"+res))\n     .catch((err) => showResult(err));\n  }\n\n  resolveError() {\n    HMSAvailability.resolveError(ErrorCode.HMS_CORE_APK_OUT_OF_DATE, 111)  \n     .then(() => console.log(\"resolveError\"))\n    .catch((err) => showResult(err));\n  }\n\n  isUserResolvableError() {\n    HMSAvailability.isUserResolvableError(1)\n     .then((res) => showResult(res))\n     .catch((err) => showResult(err));\n  }\n\n  isHuaweiMobileNoticeAvailable() {\n    HMSAvailability.isHuaweiMobileNoticeAvailable()\n     .then((res) => showResult(res))\n     .catch((err) => showResult(err));\n  }\n\n  setServicesVersionCode() {\n    HMSAvailability.setServicesVersionCode(50000000)\n     .then(() => this.getServicesVersionCode())\n     .catch((err) => showResult(err));\n  }\n\n  showErrorDialogFragment() {\n    HMSAvailability.showErrorDialogFragment(ErrorCode.HMS_CORE_APK_OUT_OF_DATE, 111)    \n     .then((res) => console.log(\"ShowErrorDialogFragment result: \" + res))\n     .catch((err) => showResult(err));\n  }\n\n  showErrorNotification() {\n    HMSAvailability.showErrorNotification(ErrorCode.HMS_CORE_APK_OUT_OF_DATE)\n    .then(() => console.log(\"showErrorNotification\"))\n    .catch((err) => showResult(err));\n  }\n  render(){\n    return (\n    \n      <ScrollView>\n        <View style={styles.title}>\n          <Text style={styles.header}>HMS Availability</Text>\n        </View>\n  \n        <Button\n          text=\"IsHuaweiMobileServicesAvailable\"\n          onPress={() => {\n            this.isHuaweiMobileServicesAvailable();\n          }}\n        />\n  \n        <Button\n          text=\"isHuaweiMobileNoticeAvailable\"\n          onPress={() => {\n            this.isHuaweiMobileNoticeAvailable();\n          }}\n        />\n  \n        <Button\n          text=\"getApiMap\"\n          onPress={() => {\n            this.getApiMap();\n          }}\n        />\n  \n        <Button\n          text=\"getServicesVersionCode\"\n          onPress={() => {\n            this.getServicesVersionCode();\n          }}\n        />\n  \n        <Button\n          text=\"setServicesVersionCode\"\n          onPress={() => {\n            this.setServicesVersionCode();\n          }}\n        />\n  \n        <Button\n          text=\"getErrorString\"\n          onPress={() => {\n            this.getErrorString();\n          }}\n        />\n  \n        <Button\n          text=\"isUserResolvableError\"\n          onPress={() => {\n            this.isUserResolvableError();\n          }}\n        />\n  \n        <Button\n          text=\"resolveError\"\n          onPress={() => {\n            this.resolveError();\n          }}\n        />\n  \n        <Button\n          text=\"showErrorDialogFragment\"\n          onPress={() => {\n            this.showErrorDialogFragment();\n          }}\n        />\n  \n        <Button\n          text=\"showErrorNotification\"\n          onPress={() => {\n            this.showErrorNotification();\n          }}\n        />\n  \n      </ScrollView>\n    );\n  }\n};\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-availability/example/src/styles.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nimport { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n  title: {\n    flex: 1,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    height: 50,\n    backgroundColor: \"#1039ff\",\n    marginBottom: 20,\n  },\n\n\n  header: {\n    color: \"#fff\",\n    fontSize: 26,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n  },\n\n  containerShowResultMsg: {\n    flexDirection: \"row\",\n    margin: 15,\n    borderTopWidth: 1,\n    paddingTop: 10,\n    borderColor: \"#aaa\",\n  },\n\n  inputTopic: {\n    textAlign: \"center\",\n    padding: 10,\n    width: \"100%\",\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n    borderWidth: 1,\n    borderRadius: 5,\n    borderColor: \"#aaa\",\n  },\n\n  width70: {\n    width: \"70%\",\n  },\n\n  width35: {\n    width: \"35%\",\n  },\n\n  width30: {\n    width: \"30%\",\n  },\n\n  paddingTop20: {\n    paddingTop: 20,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: \"#fff\",\n    flexDirection: \"column\",\n  },\n\n  image: {\n    justifyContent: \"flex-start\",\n    width: 400,\n    height: 80,\n  },\n\n  paddingX: {\n    paddingTop: 75,\n  },\n\n  container: {\n    margin: 5,\n    flex: 1,\n    flexDirection: \"row\",\n  },\n\n  containerSlim: {\n    marginBottom: 0,\n    marginTop: 2,\n  },\n\n  buttonContainer: {\n    flex: 1,\n    margin: 5,\n    marginHorizontal: 20,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    height: 35,\n    borderRadius: 5,\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: 3,\n    },\n    shadowOpacity: 0.27,\n    shadowRadius: 4.65,\n    elevation: 6,\n  },\n\n  buttonContainerSlim: {\n    marginBottom: 2,\n    marginTop: 2,\n  },\n\n  primaryButton: {\n    backgroundColor: \"#c9c9c9\",\n  },\n\n  secondaryButton: {\n    backgroundColor: \"#5ea6ff\",\n  },\n\n  tertiaryButton: {\n    backgroundColor: \"#ff825c\",\n  },\n\n  buttonText: {\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n  },\n\n  buttonTextSmall: {\n    fontSize: 16,\n  },\n\n  textSmall: {\n    margin: 25,\n    fontSize: 16,\n    alignItems: \"center\",\n\n  },\n\n  buttonTextSmallest: {\n    fontSize: 14,\n  },\n\n  fontSizeSmall: {\n    fontSize: 16,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-availability/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-availability\",\n  \"title\": \"React Native HMS AVailability Kit\",\n  \"description\": \"React Native HMS Availability Kit\",\n  \"version\": \"6.12.0-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-availability\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-availability\",\n    \"huawei-availability\",\n    \"hms-availability\",\n    \"availability\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-availability/src/Availability.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nimport {NativeModules, Platform, NativeEventEmitter} from \"react-native\";\nconst {HMSAvailabilityModule} = NativeModules;\n\nclass HMSAvailability {\n\n     static eventEmitter = new NativeEventEmitter(HMSAvailabilityModule)\n     static event = null;\n \n    static OnErrorDialogFragmentCancelledListenerAdd(handler){\n        if(this.event == null){\n            this.event = this.eventEmitter.addListener('OnErrorDialogFragmentCancelled', handler); \n        }\n       }\n\n    static OnErrorDialogFragmentCancelledListenerRemove(handler){\n       this.event.remove();\n       this.event = null;\n    }\n\n    static isHuaweiMobileServicesAvailable(minApkVersion){\n        if(arguments.length === 0){\n            return HMSAvailabilityModule.isHuaweiMobileServicesAvailableWithoutParam();\n        }else{\n            return HMSAvailabilityModule.isHuaweiMobileServicesAvailableWithParam(minApkVersion);\n        }      \n    }\n\n    static getApiMap(){\n        return HMSAvailabilityModule.getApiMap();\n    }\n\n    static getServicesVersionCode(){\n        return HMSAvailabilityModule.getServicesVersionCode();\n    }\n\n    static setServicesVersionCode(versionCode){\n        return HMSAvailabilityModule.setServicesVersionCode(versionCode);\n    }\n\n    static getErrorString(errorCode){\n        return HMSAvailabilityModule.getErrorString(errorCode);\n    }\n\n    static resolveError(errorCode, requestCode){\n        return HMSAvailabilityModule.resolveError(errorCode, requestCode);\n    }\n\n    static isUserResolvableError(errorCode){\n        return HMSAvailabilityModule.isUserResolvableError(errorCode);\n    }\n\n    static isHuaweiMobileNoticeAvailable(){\n        return HMSAvailabilityModule.isHuaweiMobileNoticeAvailable();\n    }\n\n    static setServicesVersionCode(versionCode){\n        return HMSAvailabilityModule.setServicesVersionCode(versionCode);\n    }\n\n    static showErrorDialogFragment(errorCode, resultCode){\n        return HMSAvailabilityModule.showErrorDialogFragment(errorCode, resultCode);\n    }\n\n    static showErrorNotification(errorCode){\n        return HMSAvailabilityModule.showErrorNotification(errorCode);\n    }\n}\n   \nexport const ErrorCode = Platform.OS === \"android\" ? HMSAvailabilityModule.ErrorCode : null;\n\nexport default HMSAvailability;\n\n\n\n"
  },
  {
    "path": "react-native-hms-availability/src/index.d.ts",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\ndeclare module \"@hmscore/react-native-hms-availability\" {\n\n  \n  export enum ErrorCode {\n    HMS_CORE_APK_AVAILABLE = \"0\",\n    NO_HMS_CORE_APK = \"1\",\n    HMS_CORE_APK_OUT_OF_DATE = \"2\",\n    HMS_CORE_APK_UNAVAILABLE = \"3\",\n    HMS_CORE_APK_IS_NOT_OFFICIAL_VERSION = \"9\",\n    HMS_CORE_APK_TOO_OLD = \"21\",\n  }\n\n  export interface ApiMap {\n    'HuaweiIap.API': number,\n    'HuaweiID.API': number,\n    'HuaweiGame.API': number,\n    'HuaweiPay.API': number,\n    'HuaweiSns.API': number,\n    'HuaweiOpenDevice.API': number,\n    'HuaweiPPSkit.API': number,\n    'HuaweiPush.API': number\n  }\n  \n  export class HMSAvailability{\n\n    /**\n     * Obtains the API verssion number of each service.\n     */\n    getApiMap(): Promise<ApiMap>;\n\n    /**\n     * Obtains the minimum version number of HMS Core that is supported currently.\n     */\n    getServicesVersionCode(): Promise<number>;\n\n    \n    /**\n     * Displays a readable text result code returned by the isHuaweiMobileServicesAvailable\n     * (minApkVersion?: number) method.\n     */\n    getErrorString(errorCode: number): Promise<string>;\n\n    /**\n     * Checks whether HMS Core (APK) is successfully installed and integrated on a device, \n     * and whether the version of the installed APK is that required by the client or is later \n     * than the required version.\n     */\n    isHuaweiMobileServicesAvailable(minApkVersion?: number): Promise<number>;\n\n    /**\n     * Checks whether the HMS Core (APK) version supports notice obtaining.\n     */\n    isHuaweiMobileNoticeAvailable(): Promise<number>;\n\n    /**\n     * Checks whether an exception is rectified through user operations.\n     */\n    isUserResolvableError(errorCode: number): Promise<boolean>; \n\n    \n    /**\n     * Displays a notification or dialog box is displayed for the returned result code if\n     * an exception can be rectified through user operations.\n     */\n    resolveError(errorCode: number, requestCode: number): Promise<void>;\n\n    \n    /**\n     * Sets the minimum version number of HMS Core that is supported currently.\n     */\n    setServicesVersionCode(servicesVersionCode: number): Promise<void>;\n    \n    /**\n     * Creates and displays a dialog box for a result code.\n     */\n    showErrorDialogFragment(errorCode: number, requestCode: number): Promise<boolean>;\n\n    \n    /**\n     * Creates and displays a dialog box for a result code.\n     */\n    showErrorNotification(errorCode: number): Promise<void>;\n\n    \n    /**\n     * Add a listener for the event when dialog fragment cancelled.\n     */\n    OnErrorDialogFragmentCancelledListenerAdd(listenerFn: () => void): void;\n\n    \n    /**\n    * Remove the listener for the event when dialog fragment cancelled.\n     */\n    OnErrorDialogFragmentCancelledListenerRemove(): void;\n\n  }\n\n}"
  },
  {
    "path": "react-native-hms-availability/src/index.js",
    "content": "/*\n *    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\")\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n*/\n\nimport HMSAvailability, {ErrorCode}from \"./Availability\";\n\nexport{\n    ErrorCode,\n};\nexport default HMSAvailability;\n"
  },
  {
    "path": "react-native-hms-awareness/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-awareness/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Awareness</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-awareness\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-awareness?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-awareness\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-awareness?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-awareness.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThis plugin enables communication between Huawei Awareness SDK and React Native platform. HUAWEI's Awareness service provides your app with the ability to obtain contextual information including users' current time, location, behavior, audio device status, ambient light, weather, and nearby beacons. Your app can gain insight into a user's current situation more efficiently, making it possible to deliver a smarter, more considerate user experience. Users can purchase a variety of virtual products, including one-time virtual products and subscriptions, directly within your app.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/about-the-service-0000001055654101?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-awareness\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/integrating-sdk-0000001077774624?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001057153998-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Before You Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/before-you-start-0000001073780465?ha_source=hms1)\n- [Development Guide](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/integrating-sdk-0000001073884077?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with \n**huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-awareness/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        mavenCentral()\n        jcenter()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.9.1.301\")\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n    defaultConfig {\n        minSdkVersion 24\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    jcenter()\n    mavenCentral()\n    google()\n    maven { url 'https://developer.huawei.com/repo/' }\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n}\n\ndef safeExtGet(prop, fallback) {\n    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n    implementation \"com.huawei.agconnect:agconnect-core:1.9.1.300\"\n    implementation 'com.huawei.hms:awareness:3.8.0.300'\n\n    def supportLibVersion = safeExtGet('supportLibVersion', '27.1.1')\n    def supportLibMajorVersion = supportLibVersion.split('\\\\.')[0] as int\n    def appCompatLibName = (supportLibMajorVersion < 20) ? \"androidx.appcompat:appcompat\" : \"com.android.support:appcompat-v7\"\n    implementation \"$appCompatLibName:$supportLibVersion\"\n}"
  },
  {
    "path": "react-native-hms-awareness/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-awareness/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-awareness/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-awareness/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.awareness\">\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>\n    <uses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/HMSAwarenessPackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\nimport com.huawei.hms.rn.awareness.modules.HMSAwarenessBarrierModule;\nimport com.huawei.hms.rn.awareness.modules.HMSAwarenessCaptureModule;\nimport com.huawei.hms.rn.awareness.modules.HMSLoggerModule;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSAwarenessPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new HMSAwarenessCaptureModule(reactContext));\n        modules.add(new HMSAwarenessBarrierModule(reactContext));\n        modules.add(new HMSLoggerModule(reactContext));\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/constants/Constants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.constants;\n\nimport com.facebook.common.internal.ImmutableMap;\nimport com.huawei.hms.kit.awareness.AwarenessStatusCodes;\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatus;\nimport com.huawei.hms.kit.awareness.barrier.BehaviorBarrier;\nimport com.huawei.hms.kit.awareness.barrier.TimeBarrier;\nimport com.huawei.hms.kit.awareness.status.ApplicationStatus;\nimport com.huawei.hms.kit.awareness.status.BluetoothStatus;\nimport com.huawei.hms.kit.awareness.status.CapabilityStatus;\nimport com.huawei.hms.kit.awareness.status.DarkModeStatus;\nimport com.huawei.hms.kit.awareness.status.HeadsetStatus;\nimport com.huawei.hms.kit.awareness.status.ScreenStatus;\nimport com.huawei.hms.kit.awareness.status.WeatherStatus;\nimport com.huawei.hms.kit.awareness.status.WifiStatus;\nimport com.huawei.hms.kit.awareness.status.weather.constant.CNWeatherId;\nimport com.huawei.hms.kit.awareness.status.weather.constant.WeatherId;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Constants {\n    /*\n     *All constants are expose through the getAllConstants() method.\n     */\n    private static final Map<String, Object> ALL_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"AwarenessSC_SUCCESS\", AwarenessStatusCodes.AWARENESS_SUCCESS_CODE);\n            put(\"AwarenessSC_UNKNOWN_ERROR\", AwarenessStatusCodes.AWARENESS_UNKNOWN_ERROR_CODE);\n            put(\"AwarenessSC_BINDER_ERROR\", AwarenessStatusCodes.AWARENESS_BINDER_ERROR_CODE);\n            put(\"AwarenessSC_REGISTER_FAILED\", AwarenessStatusCodes.AWARENESS_REGISTER_FAILED_CODE);\n            put(\"AwarenessSC_TIMEOUT\", AwarenessStatusCodes.AWARENESS_TIMEOUT_CODE);\n            put(\"AwarenessSC_COUNT_LIMIT\", AwarenessStatusCodes.AWARENESS_COUNT_LIMIT_CODE);\n            put(\"AwarenessSC_FREQUENCY_LIMIT\", AwarenessStatusCodes.AWARENESS_FREQUENCY_LIMIT_CODE);\n            put(\"AwarenessSC_BARRIER_PARAMETER_ERROR\", AwarenessStatusCodes.AWARENESS_BARRIER_PARAMETER_ERROR_CODE);\n            put(\"AwarenessSC_REQUEST_ERROR\", AwarenessStatusCodes.AWARENESS_REQUEST_ERROR_CODE);\n            put(\"AwarenessSC_AGC_FILE_ERROR\", AwarenessStatusCodes.AWARENESS_AGC_FILE_ERROR);\n            put(\"AwarenessSC_RESULT_INVALID_ERROR\", AwarenessStatusCodes.AWARENESS_RESULT_INVALID_ERROR);\n            put(\"AwarenessSC_REMOTE_EXCEPTION_ERROR\", AwarenessStatusCodes.AWARENESS_REMOTE_EXCEPTION_ERROR);\n            put(\"AwarenessSC_WAIT_CALLBACK\", AwarenessStatusCodes.AWARENESS_WAIT_CALLBACK_CODE);\n            put(\"AwarenessSC_INTERFACE_INVALID\", AwarenessStatusCodes.AWARENESS_INTERFACE_INVALID);\n            put(\"AwarenessSC_NO_ENOUGH_RESOURCE\", AwarenessStatusCodes.AWARENESS_NO_ENOUGH_RESOURCE);\n            put(\"AwarenessSC_SDK_VERSION_ERROR\", AwarenessStatusCodes.AWARENESS_SDK_VERSION_ERROR);\n            put(\"AwarenessSC_LOCATION_PERMISSION\", AwarenessStatusCodes.AWARENESS_LOCATION_PERMISSION_CODE);\n            put(\"AwarenessSC_LOCATION_CORE_PERMISSION\", AwarenessStatusCodes.AWARENESS_LOCATION_CORE_PERMISSION_CODE);\n            put(\"AwarenessSC_BEHAVIOR_PERMISSION\", AwarenessStatusCodes.AWARENESS_BEHAVIOR_PERMISSION_CODE);\n            put(\"AwarenessSC_BLUETOOTH_PERMISSION\", AwarenessStatusCodes.AWARENESS_BLUETOOTH_PERMISSION_CODE);\n            put(\"AwarenessSC_WIFI_PERMISSION_CODE\", AwarenessStatusCodes.AWARENESS_WIFI_PERMISSION_CODE);\n            put(\"AwarenessSC_WIFI_CORE_PERMISSION\", AwarenessStatusCodes.AWARENESS_WIFI_CORE_PERMISSION_CODE);\n            put(\"AwarenessSC_LOCATION_NOCACHE\", AwarenessStatusCodes.AWARENESS_LOCATION_NOCACHE_CODE);\n            put(\"AwarenessSC_LOCATION_NOT_AVAILABLE\", AwarenessStatusCodes.AWARENESS_LOCATION_NOT_AVAILABLE_CODE);\n            put(\"AwarenessSC_BEACON_NOT_AVAILABLE\", AwarenessStatusCodes.AWARENESS_BEACON_NOT_AVAILABLE_CODE);\n            put(\"AwarenessSC_BLUETOOTH_NOT_AVAILABLE\", AwarenessStatusCodes.AWARENESS_BLUETOOTH_NOT_AVAILABLE_CODE);\n            put(\"AwarenessSC_APPLICATION_NOT_HUAWEI_PHONE\", AwarenessStatusCodes.AWARENESS_APPLICATION_NOT_HUAWEI_PHONE);\n            put(\"AwarenessSC_UPDATE_KIT\", AwarenessStatusCodes.UPDATE_KIT_CODE);\n            put(\"AwarenessSC_UPDATE_HMS\", AwarenessStatusCodes.UPDATE_HMS_CODE);\n\n            put(\"BehaviorBarrier_BEHAVIOR_IN_VEHICLE\", BehaviorBarrier.BEHAVIOR_IN_VEHICLE);\n            put(\"BehaviorBarrier_BEHAVIOR_ON_BICYCLE\", BehaviorBarrier.BEHAVIOR_ON_BICYCLE);\n            put(\"BehaviorBarrier_BEHAVIOR_ON_FOOT\", BehaviorBarrier.BEHAVIOR_ON_FOOT);\n            put(\"BehaviorBarrier_BEHAVIOR_STILL\", BehaviorBarrier.BEHAVIOR_STILL);\n            put(\"BehaviorBarrier_BEHAVIOR_UNKNOWN\", BehaviorBarrier.BEHAVIOR_UNKNOWN);\n            put(\"BehaviorBarrier_BEHAVIOR_WALKING\", BehaviorBarrier.BEHAVIOR_WALKING);\n            put(\"BehaviorBarrier_BEHAVIOR_RUNNING\", BehaviorBarrier.BEHAVIOR_RUNNING);\n\n            put(\"TimeBarrier_TIME_CATEGORY_WEEKDAY\", TimeBarrier.TIME_CATEGORY_WEEKDAY);\n            put(\"TimeBarrier_TIME_CATEGORY_WEEKEND\", TimeBarrier.TIME_CATEGORY_WEEKEND);\n            put(\"TimeBarrier_TIME_CATEGORY_HOLIDAY\", TimeBarrier.TIME_CATEGORY_HOLIDAY);\n            put(\"TimeBarrier_TIME_CATEGORY_NOT_HOLIDAY\", TimeBarrier.TIME_CATEGORY_NOT_HOLIDAY);\n            put(\"TimeBarrier_TIME_CATEGORY_MORNING\", TimeBarrier.TIME_CATEGORY_MORNING);\n            put(\"TimeBarrier_TIME_CATEGORY_AFTERNOON\", TimeBarrier.TIME_CATEGORY_AFTERNOON);\n            put(\"TimeBarrier_TIME_CATEGORY_EVENING\", TimeBarrier.TIME_CATEGORY_EVENING);\n            put(\"TimeBarrier_TIME_CATEGORY_NIGHT\", TimeBarrier.TIME_CATEGORY_NIGHT);\n            put(\"TimeBarrier_FRIDAY_CODE\", TimeBarrier.FRIDAY_CODE);\n            put(\"TimeBarrier_MONDAY_CODE\", TimeBarrier.MONDAY_CODE);\n            put(\"TimeBarrier_SATURDAY_CODE\", TimeBarrier.SATURDAY_CODE);\n            put(\"TimeBarrier_SUNDAY_CODE\", TimeBarrier.SUNDAY_CODE);\n            put(\"TimeBarrier_THURSDAY_CODE\", TimeBarrier.THURSDAY_CODE);\n            put(\"TimeBarrier_TUESDAY_CODE\", TimeBarrier.TUESDAY_CODE);\n            put(\"TimeBarrier_WEDNESDAY_CODE\", TimeBarrier.WEDNESDAY_CODE);\n            put(\"TimeBarrier_SUNRISE_CODE\", TimeBarrier.SUNRISE_CODE);\n            put(\"TimeBarrier_SUNSET_CODE\", TimeBarrier.SUNSET_CODE);\n\n            put(\"CapabilityStatus_HEADSET\", CapabilityStatus.AWA_CAP_CODE_HEADSET);\n            put(\"CapabilityStatus_LOCATION_CAPTURE\", CapabilityStatus.AWA_CAP_CODE_LOCATION_CAPTURE);\n            put(\"CapabilityStatus_LOCATION_NORMAL_BARRIER\", CapabilityStatus.AWA_CAP_CODE_LOCATION_NORMAL_BARRIER);\n            put(\"CapabilityStatus_LOCATION_LOW_POWER_BARRIER\", CapabilityStatus.AWA_CAP_CODE_LOCATION_LOW_POWER_BARRIER);\n            put(\"CapabilityStatus_BEHAVIOR\", CapabilityStatus.AWA_CAP_CODE_BEHAVIOR);\n            put(\"CapabilityStatus_TIME\", CapabilityStatus.AWA_CAP_CODE_TIME);\n            put(\"CapabilityStatus_AMBIENT_LIGHT\", CapabilityStatus.AWA_CAP_CODE_AMBIENT_LIGHT);\n            put(\"CapabilityStatus_WEATHER\", CapabilityStatus.AWA_CAP_CODE_WEATHER);\n            put(\"CapabilityStatus_BEACON\", CapabilityStatus.AWA_CAP_CODE_WEATHER);\n            put(\"CapabilityStatus_INCAR_BLUETOOTH\", CapabilityStatus.AWA_CAP_CODE_INCAR_BLUETOOTH);\n            put(\"CapabilityStatus_SCREEN\", CapabilityStatus.AWA_CAP_CODE_SCREEN);\n            put(\"CapabilityStatus_WIFI\", CapabilityStatus.AWA_CAP_CODE_WIFI);\n            put(\"CapabilityStatus_APPLICATION\", CapabilityStatus.AWA_CAP_CODE_APPLICATION);\n            put(\"CapabilityStatus_DARK_MODE\", CapabilityStatus.AWA_CAP_CODE_DARK_MODE);\n\n            put(\"WeatherId_SUNNY\", WeatherId.SUNNY);\n            put(\"WeatherId_MOSTLY_SUNNY\", WeatherId.MOSTLY_SUNNY);\n            put(\"WeatherId_PARTLY_SUNNY\", WeatherId.PARTLY_SUNNY);\n            put(\"WeatherId_INTERMITTENT_CLOUDS\", WeatherId.INTERMITTENT_CLOUDS);\n            put(\"WeatherId_HAZY_SUNSHINE\", WeatherId.HAZY_SUNSHINE);\n            put(\"WeatherId_MOSTLY_CLOUDY\", WeatherId.MOSTLY_CLOUDY);\n            put(\"WeatherId_CLOUDY\", WeatherId.CLOUDY);\n            put(\"WeatherId_DREARY\", WeatherId.DREARY);\n            put(\"WeatherId_FOG\", WeatherId.FOG);\n            put(\"WeatherId_SHOWERS\", WeatherId.SHOWERS);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_SHOWERS\", WeatherId.MOSTLY_CLOUDY_WITH_SHOWERS);\n            put(\"WeatherId_PARTLY_SUNNY_WITH_SHOWERS\", WeatherId.PARTLY_SUNNY_WITH_SHOWERS);\n            put(\"WeatherId_T_STORMS\", WeatherId.T_STORMS);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_T_STORMS\", WeatherId.MOSTLY_CLOUDY_WITH_T_STORMS);\n            put(\"WeatherId_PARTLY_SUNNY_WITH_T_STORMS\", WeatherId.PARTLY_SUNNY_WITH_T_STORMS);\n            put(\"WeatherId_RAIN\", WeatherId.RAIN);\n            put(\"WeatherId_FLURRIES\", WeatherId.FLURRIES);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_FLURRIES\", WeatherId.MOSTLY_CLOUDY_WITH_FLURRIES);\n            put(\"WeatherId_PARTLY_SUNNY_WITH_FLURRIES\", WeatherId.PARTLY_SUNNY_WITH_FLURRIES);\n            put(\"WeatherId_SNOW\", WeatherId.SNOW);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_SNOW\", WeatherId.MOSTLY_CLOUDY_WITH_SNOW);\n            put(\"WeatherId_ICE\", WeatherId.ICE);\n            put(\"WeatherId_SLEET\", WeatherId.SLEET);\n            put(\"WeatherId_FREEZING_RAIN\", WeatherId.FREEZING_RAIN);\n            put(\"WeatherId_RAIN_AND_SNOW\", WeatherId.RAIN_AND_SNOW);\n            put(\"WeatherId_HOT\", WeatherId.HOT);\n            put(\"WeatherId_COLD\", WeatherId.COLD);\n            put(\"WeatherId_WINDY\", WeatherId.WINDY);\n            put(\"WeatherId_CLEAR\", WeatherId.CLEAR);\n            put(\"WeatherId_PARTLY_CLOUDY\", WeatherId.PARTLY_CLOUDY);\n            put(\"WeatherId_INTERMITTENT_CLOUDS_2\", WeatherId.INTERMITTENT_CLOUDS_2);\n            put(\"WeatherId_HAZY_MOONLIGHT\", WeatherId.HAZY_MOONLIGHT);\n            put(\"WeatherId_MOSTLY_CLOUDY_2\", WeatherId.MOSTLY_CLOUDY_2);\n            put(\"WeatherId_PARTLY_CLOUDY_WITH_SHOWERS\", WeatherId.PARTLY_CLOUDY_WITH_SHOWERS);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_SHOWERS_2\", WeatherId.MOSTLY_CLOUDY_WITH_SHOWERS_2);\n            put(\"WeatherId_PARTLY_CLOUDY_WITH_T_STORMS\", WeatherId.PARTLY_CLOUDY_WITH_T_STORMS);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_T_STORMS_2\", WeatherId.MOSTLY_CLOUDY_WITH_T_STORMS_2);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_FLURRIES_2\", WeatherId.MOSTLY_CLOUDY_WITH_FLURRIES_2);\n            put(\"WeatherId_MOSTLY_CLOUDY_WITH_SNOW_2\", WeatherId.MOSTLY_CLOUDY_WITH_SNOW_2);\n\n            put(\"CNWeatherId_INVALID_VALUE\", CNWeatherId.INVALID_VALUE);\n            put(\"CNWeatherId_SUNNY\", CNWeatherId.SUNNY);\n            put(\"CNWeatherId_CLOUDY\", CNWeatherId.CLOUDY);\n            put(\"CNWeatherId_OVERCAST\", CNWeatherId.OVERCAST);\n            put(\"CNWeatherId_SHOWER\", CNWeatherId.SHOWER);\n            put(\"CNWeatherId_THUNDERSHOWER\", CNWeatherId.THUNDERSHOWER);\n            put(\"CNWeatherId_THUNDERSHOWER_WITH_HAIL\", CNWeatherId.THUNDERSHOWER_WITH_HAIL);\n            put(\"CNWeatherId_SLEET\", CNWeatherId.SLEET);\n            put(\"CNWeatherId_LIGHT_RAIN\", CNWeatherId.LIGHT_RAIN);\n            put(\"CNWeatherId_MODERATE_RAIN\", CNWeatherId.MODERATE_RAIN);\n            put(\"CNWeatherId_HEAVY_RAIN\", CNWeatherId.HEAVY_RAIN);\n            put(\"CNWeatherId_STORM\", CNWeatherId.STORM);\n            put(\"CNWeatherId_HEAVY_STORM\", CNWeatherId.HEAVY_STORM);\n            put(\"CNWeatherId_SEVERE_STORM\", CNWeatherId.SEVERE_STORM);\n            put(\"CNWeatherId_SNOW_FLURRY\", CNWeatherId.SNOW_FLURRY);\n            put(\"CNWeatherId_LIGHT_SNOW\", CNWeatherId.LIGHT_SNOW);\n            put(\"CNWeatherId_MODERATE_SNOW\", CNWeatherId.MODERATE_SNOW);\n            put(\"CNWeatherId_HEAVY_SNOW\", CNWeatherId.HEAVY_SNOW);\n            put(\"CNWeatherId_SNOWSTORM\", CNWeatherId.SNOWSTORM);\n            put(\"CNWeatherId_FOGGY\", CNWeatherId.FOGGY);\n            put(\"CNWeatherId_ICE_RAIN\", CNWeatherId.ICE_RAIN);\n            put(\"CNWeatherId_DUSTSTORM\", CNWeatherId.DUSTSTORM);\n            put(\"CNWeatherId_LIGHT_TO_MODERATE_RAIN\", CNWeatherId.LIGHT_TO_MODERATE_RAIN);\n            put(\"CNWeatherId_MODERATE_TO_HEAVY_RAIN\", CNWeatherId.MODERATE_TO_HEAVY_RAIN);\n            put(\"CNWeatherId_HEAVY_RAIN_TO_STORM\", CNWeatherId.HEAVY_RAIN_TO_STORM);\n            put(\"CNWeatherId_STORM_TO_HEAVY_STORM\", CNWeatherId.STORM_TO_HEAVY_STORM);\n            put(\"CNWeatherId_HEAVY_TO_SEVERE_STORM\", CNWeatherId.HEAVY_TO_SEVERE_STORM);\n            put(\"CNWeatherId_LIGHT_TO_MODERATE_SNOW\", CNWeatherId.LIGHT_TO_MODERATE_SNOW);\n            put(\"CNWeatherId_MODERATE_TO_HEAVY_SNOW\", CNWeatherId.MODERATE_TO_HEAVY_SNOW);\n            put(\"CNWeatherId_HEAVY_SNOW_TO_SNOWSTORM\", CNWeatherId.HEAVY_SNOW_TO_SNOWSTORM);\n            put(\"CNWeatherId_DUST\", CNWeatherId.DUST);\n            put(\"CNWeatherId_SAND\", CNWeatherId.SAND);\n            put(\"CNWeatherId_SANDSTORM\", CNWeatherId.SANDSTORM);\n            put(\"CNWeatherId_DENSE_FOGGY\", CNWeatherId.DENSE_FOGGY);\n            put(\"CNWeatherId_SNOW\", CNWeatherId.SNOW);\n            put(\"CNWeatherId_MODERATE_FOGGY\", CNWeatherId.MODERATE_FOGGY);\n            put(\"CNWeatherId_HAZE\", CNWeatherId.HAZE);\n            put(\"CNWeatherId_MODERATE_HAZE\", CNWeatherId.MODERATE_HAZE);\n            put(\"CNWeatherId_HEAVY_HAZE\", CNWeatherId.HEAVY_HAZE);\n            put(\"CNWeatherId_SEVERE_HAZE\", CNWeatherId.SEVERE_HAZE);\n            put(\"CNWeatherId_HEAVY_FOGGY\", CNWeatherId.HEAVY_FOGGY);\n            put(\"CNWeatherId_SEVERE_FOGGY\", CNWeatherId.SEVERE_FOGGY);\n            put(\"CNWeatherId_RAINFALL\", CNWeatherId.RAINFALL);\n            put(\"CNWeatherId_SNOWFALL\", CNWeatherId.SNOWFALL);\n            put(\"CNWeatherId_UNKNOWN\", CNWeatherId.UNKNOWN);\n\n            put(\"WeatherStatus_CLOTHING_INDEX\", WeatherStatus.CLOTHING_INDEX);\n            put(\"WeatherStatus_SPORT_INDEX\", WeatherStatus.SPORT_INDEX);\n            put(\"WeatherStatus_COLD_INDEX\", WeatherStatus.COLD_INDEX);\n            put(\"WeatherStatus_CAR_WASH_INDEX\", WeatherStatus.CAR_WASH_INDEX);\n            put(\"WeatherStatus_TOURISM_INDEX\", WeatherStatus.TOURISM_INDEX);\n            put(\"WeatherStatus_UV_INDEX\", WeatherStatus.UV_INDEX);\n            put(\"WeatherStatus_DOWN_JACKET\", WeatherStatus.DOWN_JACKET);\n            put(\"WeatherStatus_HEAVY_COAT\", WeatherStatus.HEAVY_COAT);\n            put(\"WeatherStatus_SWEATER\", WeatherStatus.SWEATER);\n            put(\"WeatherStatus_THIN_COAT\", WeatherStatus.THIN_COAT);\n            put(\"WeatherStatus_LONG_SLEEVES\", WeatherStatus.LONG_SLEEVES);\n            put(\"WeatherStatus_SHORT_SLEEVE\", WeatherStatus.SHORT_SLEEVE);\n            put(\"WeatherStatus_THIN_SHORT_SLEEVE\", WeatherStatus.THIN_SHORT_SLEEVE);\n            put(\"WeatherStatus_SUITABLE_SPORT\", WeatherStatus.SUITABLE_SPORT);\n            put(\"WeatherStatus_MORE_SUITABLE_SPORT\", WeatherStatus.MORE_SUITABLE_SPORT);\n            put(\"WeatherStatus_NOT_SUITABLE_SPORT\", WeatherStatus.NOT_SUITABLE_SPORT);\n            put(\"WeatherStatus_NOT_EASY_CATCH_COLD\", WeatherStatus.NOT_EASY_CATCH_COLD);\n            put(\"WeatherStatus_EASIER_CATCH_COLD\", WeatherStatus.EASIER_CATCH_COLD);\n            put(\"WeatherStatus_BE_SUSCEPTIBLE_COLD\", WeatherStatus.BE_SUSCEPTIBLE_COLD);\n            put(\"WeatherStatus_EXTREMELY_SUSCEPTIBLE_COLD\", WeatherStatus.EXTREMELY_SUSCEPTIBLE_COLD);\n            put(\"WeatherStatus_UNSUITABLE\", WeatherStatus.UNSUITABLE);\n            put(\"WeatherStatus_NOT_VERY_SUITABLE\", WeatherStatus.NOT_VERY_SUITABLE);\n            put(\"WeatherStatus_MORE_SUITABLE\", WeatherStatus.MORE_SUITABLE);\n            put(\"WeatherStatus_SUITABLE\", WeatherStatus.SUITABLE);\n            put(\"WeatherStatus_WEAKEST\", WeatherStatus.WEAKEST);\n            put(\"WeatherStatus_WEAK\", WeatherStatus.WEAK);\n            put(\"WeatherStatus_MEDIUM\", WeatherStatus.MEDIUM);\n            put(\"WeatherStatus_STRONG\", WeatherStatus.STRONG);\n            put(\"WeatherStatus_VERY_STRONG\", WeatherStatus.VERY_STRONG);\n\n            put(\"HeadsetStatus_CONNECTED\", HeadsetStatus.CONNECTED);\n            put(\"HeadsetStatus_DISCONNECTED\", HeadsetStatus.DISCONNECTED);\n            put(\"HeadsetStatus_UNKNOWN\", HeadsetStatus.UNKNOWN);\n\n            put(\"BluetoothStatus_CONNECTED\", BluetoothStatus.CONNECTED);\n            put(\"BluetoothStatus_DISCONNECTED\", BluetoothStatus.DISCONNECTED);\n            put(\"BluetoothStatus_UNKNOWN\", BluetoothStatus.UNKNOWN);\n            put(\"BluetoothStatus_DEVICE_CAR\", BluetoothStatus.DEVICE_CAR);\n\n            put(\"ScreenStatus_UNLOCK\", ScreenStatus.UNLOCK);\n            put(\"ScreenStatus_SCREEN_OFF\", ScreenStatus.UNKNOWN);\n            put(\"ScreenStatus_SCREEN_ON\", ScreenStatus.UNKNOWN);\n            put(\"ScreenStatus_UNKNOWN\", ScreenStatus.UNKNOWN);\n\n            put(\"WifiStatus_CONNECTED\", WifiStatus.CONNECTED);\n            put(\"WifiStatus_DISCONNECTED\", WifiStatus.DISCONNECTED);\n            put(\"WifiStatus_ENABLED\", WifiStatus.ENABLED);\n            put(\"WifiStatus_DISABLED\", WifiStatus.DISABLED);\n            put(\"WifiStatus_UNKNOWN\", WifiStatus.UNKNOWN);\n\n            put(\"BarrierStatus_TRUE\", BarrierStatus.TRUE);\n            put(\"BarrierStatus_FALSE\", BarrierStatus.FALSE);\n            put(\"BarrierStatus_UNKNOWN\", BarrierStatus.UNKNOWN);\n\n            put(\"ApplicationStatus_RUNNING\", ApplicationStatus.RUNNING);\n            put(\"ApplicationStatus_SILENT\", ApplicationStatus.SILENT);\n            put(\"ApplicationStatus_UNKNOWN\", ApplicationStatus.UNKNOWN);\n\n            put(\"DarkModeStatus_DARK_MODE_OFF\", DarkModeStatus.DARK_MODE_OFF);\n            put(\"DarkModeStatus_DARK_MODE_ON\", DarkModeStatus.DARK_MODE_ON);\n            put(\"DarkModeStatus_DARK_MODE_UNKNOWN\", DarkModeStatus.DARK_MODE_UNKNOWN);\n\n            put(\"EVENT_HEADSET\", \"HEADSET_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_AMBIENTLIGHT\", \"AMBIENT_LIGHT_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_WIFI\", \"WIFI_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_BLUETOOTH\", \"BLUETOOTH_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_BEHAVIOR\", \"BEHAVIOR_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_LOCATION\", \"LOCATION_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_SCREEN\", \"SCREEN_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_TIME\", \"TIME_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_BEACON\", \"BEACON_BARRIER_RECEIVER_ACTION\");\n            put(\"EVENT_UPDATE_WINDOW\", \"EVENT_UPDATE_WINDOW\");\n            put(\"EVENT_COMBINED\", \"COMBINED_BARRIER_RECEIVER_ACTION\");\n\n            put(\"AMBIENTLIGHT_ABOVE\", \"AMBIENTLIGHT_ABOVE\");\n            put(\"AMBIENTLIGHT_BELOW\", \"AMBIENTLIGHT_BELOW\");\n            put(\"AMBIENTLIGHT_RANGE\", \"AMBIENTLIGHT_RANGE\");\n\n            put(\"EVENT_HEADSET_KEEPING\", \"EVENT_HEADSET_KEEPING\");\n            put(\"EVENT_HEADSET_CONNECTING\", \"EVENT_HEADSET_CONNECTING\");\n            put(\"EVENT_HEADSET_DISCONNECTING\", \"EVENT_HEADSET_DISCONNECTING\");\n\n            put(\"BEACON_DISCOVER\", \"BEACON_DISCOVER\");\n            put(\"BEACON_KEEP\", \"BEACON_KEEP\");\n            put(\"BEACON_MISSED\", \"BEACON_MISSED\");\n\n            put(\"BEHAVIOR_KEEPING\", \"BEHAVIOR_KEEPING\");\n            put(\"BEHAVIOR_BEGINNING\", \"BEHAVIOR_BEGINNING\");\n            put(\"BEHAVIOR_ENDING\", \"BEHAVIOR_ENDING\");\n\n            put(\"BLUETOOTH_KEEP\", \"BLUETOOTH_KEEP\");\n            put(\"BLUETOOTH_CONNECTING\", \"BLUETOOTH_CONNECTING\");\n            put(\"BLUETOOTH_DISCONNECTING\", \"BLUETOOTH_DISCONNECTING\");\n\n            put(\"LOCATION_ENTER\", \"LOCATION_ENTER\");\n            put(\"LOCATION_STAY\", \"LOCATION_STAY\");\n            put(\"LOCATION_EXIT\", \"LOCATION_EXIT\");\n\n            put(\"SCREEN_KEEPING\", \"SCREEN_KEEPING\");\n            put(\"SCREEN_ON\", \"SCREEN_ON\");\n            put(\"SCREEN_OFF\", \"SCREEN_OFF\");\n            put(\"SCREEN_UNLOCK\", \"SCREEN_UNLOCK\");\n\n            put(\"TIME_IN_SUNRISE_OR_SUNSET_PERIOD\", \"TIME_IN_SUNRISE_OR_SUNSET_PERIOD\");\n            put(\"TIME_DURING_PERIOD_OF_DAY\", \"TIME_DURING_PERIOD_OF_DAY\");\n            put(\"TIME_DURING_TIME_PERIOD\", \"TIME_DURING_TIME_PERIOD\");\n            put(\"TIME_DURING_PERIOD_OF_WEEK\", \"TIME_DURING_PERIOD_OF_WEEK\");\n            put(\"TIME_IN_TIME_CATEGORY\", \"TIME_IN_TIME_CATEGORY\");\n\n            put(\"WIFI_KEEPING\", \"WIFI_KEEPING\");\n            put(\"WIFI_CONNECTING\", \"WIFI_CONNECTING\");\n            put(\"WIFI_DISCONNECTING\", \"WIFI_DISCONNECTING\");\n            put(\"WIFI_ENABLING\", \"WIFI_ENABLING\");\n            put(\"WIFI_DISABLING\", \"WIFI_DISABLING\");\n\n            put(\"BARRIER_TYPE_AND\", \"and\");\n            put(\"BARRIER_TYPE_OR\", \"or\");\n            put(\"BARRIER_TYPE_NOT\", \"not\");\n\n            put(\"TASK_NAME\",\"barrierReceiver\");\n        }\n    };\n\n    public static Map<String, Object> getAllConstants() {\n        return ImmutableMap.copyOf(ALL_CONSTANTS);\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/constants/LocaleConstants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.constants;\n\nimport android.util.SparseArray;\n\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatus;\nimport com.huawei.hms.kit.awareness.barrier.TimeBarrier;\nimport com.huawei.hms.kit.awareness.status.ApplicationStatus;\nimport com.huawei.hms.kit.awareness.status.BluetoothStatus;\nimport com.huawei.hms.kit.awareness.status.CapabilityStatus;\nimport com.huawei.hms.kit.awareness.status.DarkModeStatus;\nimport com.huawei.hms.kit.awareness.status.HeadsetStatus;\nimport com.huawei.hms.kit.awareness.status.ScreenStatus;\nimport com.huawei.hms.kit.awareness.status.WifiStatus;\nimport com.huawei.hms.kit.awareness.status.weather.constant.CNWeatherId;\nimport com.huawei.hms.kit.awareness.status.weather.constant.WeatherId;\n\npublic class LocaleConstants {\n\n    public static final String KEY_CONTENT_TITLE = \"contentTitle\";\n    public static final String KEY_CONTENT_TEXT = \"contentText\";\n    public static final String KEY_DEF_TYPE = \"defType\";\n    public static final String KEY_RESOURCE_NAME = \"resourceName\";\n    public static final String DEFAULT_CONTENT_TITLE = \"Awareness Kit\";\n    public static final String DEFAULT_CONTENT_TEXT = \"Service is running\";\n    public static final String DEFAULT_DEF_TYPE = \"mipmap\";\n    public static final String DEFAULT_RESOURCE_NAME = \"ic_launcher\";\n\n    public static final SparseArray<String> CAPABILITY_STATUS = new SparseArray<>();\n\n    static {\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_HEADSET, \"AWA_CAP_CODE_HEADSET\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_LOCATION_CAPTURE, \"AWA_CAP_CODE_LOCATION_CAPTURE\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_LOCATION_NORMAL_BARRIER, \"AWA_CAP_CODE_LOCATION_NORMAL_BARRIER\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_LOCATION_LOW_POWER_BARRIER, \"AWA_CAP_CODE_LOCATION_LOW_POWER_BARRIER\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_BEHAVIOR, \"AWA_CAP_CODE_BEHAVIOR\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_TIME, \"AWA_CAP_CODE_TIME\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_AMBIENT_LIGHT, \"AWA_CAP_CODE_AMBIENT_LIGHT\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_WEATHER, \"AWA_CAP_CODE_WEATHER\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_BEACON, \"AWA_CAP_CODE_BEACON\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_INCAR_BLUETOOTH, \"AWA_CAP_CODE_INCAR_BLUETOOTH\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_SCREEN, \"AWA_CAP_CODE_SCREEN\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_WIFI, \"AWA_CAP_CODE_WIFI\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_APPLICATION, \"AWA_CAP_CODE_APPLICATION\");\n        CAPABILITY_STATUS.put(CapabilityStatus.AWA_CAP_CODE_DARK_MODE, \"AWA_CAP_CODE_DARK_MODE\");\n    }\n\n    public static final SparseArray<String> WEATHER_ID = new SparseArray<>();\n\n    static {\n        WEATHER_ID.put(WeatherId.SUNNY, \"SUNNY\");\n        WEATHER_ID.put(WeatherId.MOSTLY_SUNNY, \"MOSTLY_SUNNY\");\n        WEATHER_ID.put(WeatherId.PARTLY_SUNNY, \"PARTLY_SUNNY\");\n        WEATHER_ID.put(WeatherId.INTERMITTENT_CLOUDS, \"INTERMITTENT_CLOUDS\");\n        WEATHER_ID.put(WeatherId.HAZY_SUNSHINE, \"HAZY_SUNSHINE\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY, \"MOSTLY_CLOUDY\");\n        WEATHER_ID.put(WeatherId.CLOUDY, \"CLOUDY\");\n        WEATHER_ID.put(WeatherId.DREARY, \"DREARY\");\n        WEATHER_ID.put(WeatherId.FOG, \"FOG\");\n        WEATHER_ID.put(WeatherId.SHOWERS, \"SHOWERS\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_SHOWERS, \"MOSTLY_CLOUDY_WITH_SHOWERS\");\n        WEATHER_ID.put(WeatherId.PARTLY_SUNNY_WITH_SHOWERS, \"PARTLY_SUNNY_WITH_SHOWERS\");\n        WEATHER_ID.put(WeatherId.T_STORMS, \"T_STORMS\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_T_STORMS, \"MOSTLY_CLOUDY_WITH_T_STORMS\");\n        WEATHER_ID.put(WeatherId.PARTLY_SUNNY_WITH_T_STORMS, \"PARTLY_SUNNY_WITH_T_STORMS\");\n        WEATHER_ID.put(WeatherId.RAIN, \"RAIN\");\n        WEATHER_ID.put(WeatherId.FLURRIES, \"FLURRIES\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_FLURRIES, \"MOSTLY_CLOUDY_WITH_FLURRIES\");\n        WEATHER_ID.put(WeatherId.PARTLY_SUNNY_WITH_FLURRIES, \"PARTLY_SUNNY_WITH_FLURRIES\");\n        WEATHER_ID.put(WeatherId.SNOW, \"SNOW\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_SNOW, \"MOSTLY_CLOUDY_WITH_SNOW\");\n        WEATHER_ID.put(WeatherId.ICE, \"ICE\");\n        WEATHER_ID.put(WeatherId.SLEET, \"SLEET\");\n        WEATHER_ID.put(WeatherId.FREEZING_RAIN, \"FREEZING_RAIN\");\n        WEATHER_ID.put(WeatherId.RAIN_AND_SNOW, \"RAIN_AND_SNOW\");\n        WEATHER_ID.put(WeatherId.HOT, \"HOT\");\n        WEATHER_ID.put(WeatherId.COLD, \"COLD\");\n        WEATHER_ID.put(WeatherId.WINDY, \"WINDY\");\n        WEATHER_ID.put(WeatherId.CLEAR, \"CLEAR\");\n        WEATHER_ID.put(WeatherId.PARTLY_CLOUDY, \"PARTLY_CLOUDY\");\n        WEATHER_ID.put(WeatherId.INTERMITTENT_CLOUDS_2, \"INTERMITTENT_CLOUDS_2\");\n        WEATHER_ID.put(WeatherId.HAZY_MOONLIGHT, \"HAZY_MOONLIGHT\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_2, \"MOSTLY_CLOUDY_2\");\n        WEATHER_ID.put(WeatherId.PARTLY_CLOUDY_WITH_SHOWERS, \"PARTLY_CLOUDY_WITH_SHOWERS\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_SHOWERS_2, \"MOSTLY_CLOUDY_WITH_SHOWERS_2\");\n        WEATHER_ID.put(WeatherId.PARTLY_CLOUDY_WITH_T_STORMS, \"PARTLY_CLOUDY_WITH_T_STORMS\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_T_STORMS_2, \"MOSTLY_CLOUDY_WITH_T_STORMS_2\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_FLURRIES_2, \"MOSTLY_CLOUDY_WITH_FLURRIES_2\");\n        WEATHER_ID.put(WeatherId.MOSTLY_CLOUDY_WITH_SNOW_2, \"MOSTLY_CLOUDY_WITH_SNOW_2\");\n    }\n\n    public static final SparseArray<String> CN_WEATHER_ID = new SparseArray<>();\n\n    static {\n        CN_WEATHER_ID.put(CNWeatherId.INVALID_VALUE, \"INVALID_VALUE\");\n        CN_WEATHER_ID.put(CNWeatherId.SUNNY, \"SUNNY\");\n        CN_WEATHER_ID.put(CNWeatherId.CLOUDY, \"CLOUDY\");\n        CN_WEATHER_ID.put(CNWeatherId.OVERCAST, \"OVERCAST\");\n        CN_WEATHER_ID.put(CNWeatherId.SHOWER, \"SHOWER\");\n        CN_WEATHER_ID.put(CNWeatherId.THUNDERSHOWER, \"THUNDERSHOWER\");\n        CN_WEATHER_ID.put(CNWeatherId.THUNDERSHOWER_WITH_HAIL, \"THUNDERSHOWER_WITH_HAIL\");\n        CN_WEATHER_ID.put(CNWeatherId.SLEET, \"SLEET\");\n        CN_WEATHER_ID.put(CNWeatherId.LIGHT_RAIN, \"LIGHT_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_RAIN, \"MODERATE_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_RAIN, \"HEAVY_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.STORM, \"STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_STORM, \"HEAVY_STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.SEVERE_STORM, \"SEVERE_STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.SNOW_FLURRY, \"SNOW_FLURRY\");\n        CN_WEATHER_ID.put(CNWeatherId.LIGHT_SNOW, \"LIGHT_SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_SNOW, \"MODERATE_SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_SNOW, \"HEAVY_SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.SNOWSTORM, \"SNOWSTORM\");\n        CN_WEATHER_ID.put(CNWeatherId.FOGGY, \"FOGGY\");\n        CN_WEATHER_ID.put(CNWeatherId.ICE_RAIN, \"ICE_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.DUSTSTORM, \"DUSTSTORM\");\n        CN_WEATHER_ID.put(CNWeatherId.LIGHT_TO_MODERATE_RAIN, \"LIGHT_TO_MODERATE_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_TO_HEAVY_RAIN, \"MODERATE_TO_HEAVY_RAIN\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_RAIN_TO_STORM, \"HEAVY_RAIN_TO_STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.STORM_TO_HEAVY_STORM, \"STORM_TO_HEAVY_STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_TO_SEVERE_STORM, \"HEAVY_TO_SEVERE_STORM\");\n        CN_WEATHER_ID.put(CNWeatherId.LIGHT_TO_MODERATE_SNOW, \"LIGHT_TO_MODERATE_SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_TO_HEAVY_SNOW, \"MODERATE_TO_HEAVY_SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_SNOW_TO_SNOWSTORM, \"HEAVY_SNOW_TO_SNOWSTORM\");\n        CN_WEATHER_ID.put(CNWeatherId.DUST, \"DUST\");\n        CN_WEATHER_ID.put(CNWeatherId.SAND, \"SAND\");\n        CN_WEATHER_ID.put(CNWeatherId.SANDSTORM, \"SANDSTORM\");\n        CN_WEATHER_ID.put(CNWeatherId.DENSE_FOGGY, \"DENSE_FOGGY\");\n        CN_WEATHER_ID.put(CNWeatherId.SNOW, \"SNOW\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_FOGGY, \"MODERATE_FOGGY\");\n        CN_WEATHER_ID.put(CNWeatherId.HAZE, \"HAZE\");\n        CN_WEATHER_ID.put(CNWeatherId.MODERATE_HAZE, \"MODERATE_HAZE\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_HAZE, \"HEAVY_HAZE\");\n        CN_WEATHER_ID.put(CNWeatherId.SEVERE_HAZE, \"SEVERE_HAZE\");\n        CN_WEATHER_ID.put(CNWeatherId.HEAVY_FOGGY, \"HEAVY_FOGGY\");\n        CN_WEATHER_ID.put(CNWeatherId.SEVERE_FOGGY, \"SEVERE_FOGGY\");\n        CN_WEATHER_ID.put(CNWeatherId.RAINFALL, \"RAINFALL\");\n        CN_WEATHER_ID.put(CNWeatherId.SNOWFALL, \"SNOWFALL\");\n        CN_WEATHER_ID.put(CNWeatherId.UNKNOWN, \"UNKNOWN\");\n    }\n\n    public static final SparseArray<String> APPLICATION_STATUS = new SparseArray<>();\n\n    static {\n        APPLICATION_STATUS.put(ApplicationStatus.RUNNING, \"RUNNING\");\n        APPLICATION_STATUS.put(ApplicationStatus.SILENT, \"SILENT\");\n        APPLICATION_STATUS.put(ApplicationStatus.UNKNOWN, \"UNKNOWN\");\n    }\n\n    public static final SparseArray<String> BLUETOOTH_STATUS = new SparseArray<>();\n\n    static {\n        BLUETOOTH_STATUS.put(BluetoothStatus.CONNECTED, \"CONNECTED\");\n        BLUETOOTH_STATUS.put(BluetoothStatus.DISCONNECTED, \"DISCONNECTED\");\n        BLUETOOTH_STATUS.put(BluetoothStatus.UNKNOWN, \"UNKNOWN\");\n        BLUETOOTH_STATUS.put(BluetoothStatus.DEVICE_CAR, \"DEVICE_CAR\");\n    }\n\n    public static final SparseArray<String> HEADSET_STATUS = new SparseArray<>();\n\n    static {\n        HEADSET_STATUS.put(HeadsetStatus.CONNECTED, \"CONNECTED\");\n        HEADSET_STATUS.put(HeadsetStatus.DISCONNECTED, \"DISCONNECTED\");\n        HEADSET_STATUS.put(HeadsetStatus.UNKNOWN, \"UNKNOWN\");\n    }\n\n    public static final SparseArray<String> SCREEN_STATUS = new SparseArray<>();\n\n    static {\n        SCREEN_STATUS.put(ScreenStatus.UNLOCK, \"UNLOCK\");\n        SCREEN_STATUS.put(ScreenStatus.SCREEN_OFF, \"UNKNOWN\");\n        SCREEN_STATUS.put(ScreenStatus.SCREEN_ON, \"UNKNOWN\");\n        SCREEN_STATUS.put(ScreenStatus.UNKNOWN, \"UNKNOWN\");\n    }\n\n    public static final SparseArray<String> WIFI_STATUS = new SparseArray<>();\n\n    static {\n        WIFI_STATUS.put(WifiStatus.CONNECTED, \"CONNECTED\");\n        WIFI_STATUS.put(WifiStatus.DISCONNECTED, \"DISCONNECTED\");\n        WIFI_STATUS.put(WifiStatus.ENABLED, \"ENABLED\");\n        WIFI_STATUS.put(WifiStatus.DISABLED, \"DISABLED\");\n        WIFI_STATUS.put(WifiStatus.UNKNOWN, \"UNKNOWN\");\n    }\n\n    public static final SparseArray<String> TIME_BARRIER = new SparseArray<>();\n\n    static {\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_WEEKDAY, \"TIME_CATEGORY_WEEKDAY\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_WEEKEND, \"TIME_CATEGORY_WEEKEND\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_HOLIDAY, \"TIME_CATEGORY_HOLIDAY\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_NOT_HOLIDAY, \"TIME_CATEGORY_NOT_HOLIDAY\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_MORNING, \"TIME_CATEGORY_MORNING\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_AFTERNOON, \"TIME_CATEGORY_AFTERNOON\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_EVENING, \"TIME_CATEGORY_EVENING\");\n        TIME_BARRIER.put(TimeBarrier.TIME_CATEGORY_NIGHT, \"TIME_CATEGORY_NIGHT\");\n    }\n\n    public static final SparseArray<String> DARK_MODE_STATUS = new SparseArray<>();\n\n    static {\n        DARK_MODE_STATUS.put(DarkModeStatus.DARK_MODE_OFF, \"DarkModeStatus.DARK_MODE_OFF\");\n        DARK_MODE_STATUS.put(DarkModeStatus.DARK_MODE_ON, \"DarkModeStatus.DARK_MODE_ON\");\n        DARK_MODE_STATUS.put(DarkModeStatus.DARK_MODE_UNKNOWN, \"DarkModeStatus.DARK_MODE_UNKNOWN\");\n    }\n\n    public static final SparseArray<String> BARRIER_STATUS = new SparseArray<>();\n\n    static {\n        BARRIER_STATUS.put(BarrierStatus.FALSE, \"FALSE\");\n        BARRIER_STATUS.put(BarrierStatus.TRUE, \"TRUE\");\n        BARRIER_STATUS.put(BarrierStatus.UNKNOWN, \"UNKNOWN\");\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ReactNativeAwareness\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"3.8.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n                                                    final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/modules/HMSAwarenessBarrierModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.modules;\n\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.content.SharedPreferences;\nimport android.os.Build;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport com.huawei.hms.rn.awareness.constants.Constants;\nimport com.huawei.hms.rn.awareness.constants.LocaleConstants;\nimport com.huawei.hms.rn.awareness.utils.BarrierReceiver;\nimport com.huawei.hms.rn.awareness.utils.DataUtils;\nimport com.huawei.hms.rn.awareness.wrapper.AwarenessBarrierWrapper;\nimport com.huawei.hms.rn.awareness.wrapper.AwarenessCombinationBarrierWrapper;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\n\npublic class HMSAwarenessBarrierModule extends ReactContextBaseJavaModule {\n\n    AwarenessBarrierWrapper awarenessBarrierWrapper;\n\n    AwarenessCombinationBarrierWrapper combinationBarrierWrapper;\n\n    PendingIntent pendingIntent;\n\n    public HMSAwarenessBarrierModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        final String barrierReceiverAction = \"com.huawei.hms.rn.awareness.modules.ReceiverAction\";\n\n        Intent intent = new Intent();\n        intent.setPackage(reactContext.getPackageName());\n        intent.setAction(barrierReceiverAction);\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n            pendingIntent = PendingIntent.getBroadcast(reactContext, 1, intent,\n                PendingIntent.FLAG_UPDATE_CURRENT | pendingIntent.FLAG_MUTABLE);\n        } else {\n            pendingIntent = PendingIntent.getBroadcast(reactContext, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);\n        }\n\n        BarrierReceiver barrierReceiver = new BarrierReceiver(reactContext);\n        reactContext.registerReceiver(barrierReceiver, new IntentFilter(barrierReceiverAction));\n\n        awarenessBarrierWrapper = new AwarenessBarrierWrapper(reactContext, pendingIntent);\n        combinationBarrierWrapper = new AwarenessCombinationBarrierWrapper(reactContext, pendingIntent);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAwarenessBarrierModule\";\n    }\n\n    /**\n     * Allows you to customize notifications.\n     *\n     * @param map : WritableMap\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void setBackgroundNotification(final ReadableMap map, final Promise promise) {\n        try {\n            SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences(\n                getReactApplicationContext().getPackageName(), Context.MODE_PRIVATE).edit();\n            String title = LocaleConstants.KEY_CONTENT_TITLE;\n            String defTitle = LocaleConstants.DEFAULT_CONTENT_TITLE;\n            String text = LocaleConstants.KEY_CONTENT_TEXT;\n            String defText = LocaleConstants.DEFAULT_CONTENT_TEXT;\n            String type = LocaleConstants.KEY_DEF_TYPE;\n            String defType = LocaleConstants.DEFAULT_DEF_TYPE;\n            String resource = LocaleConstants.KEY_RESOURCE_NAME;\n            String defResource = LocaleConstants.DEFAULT_RESOURCE_NAME;\n\n            editor.putString(title, map.hasKey(title) ? map.getString(title) : defTitle);\n            editor.putString(text, map.hasKey(text) ? map.getString(text) : defText);\n            editor.putString(type, map.hasKey(type) ? map.getString(type) : defType);\n            editor.putString(resource, map.hasKey(resource) ? map.getString(resource) : defResource);\n            editor.apply();\n            promise.resolve(DataUtils.valueConvertToMap(\"Response\", \"success\"));\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"barrierModule\", \"setNotification\", e, promise);\n        }\n    }\n\n    /**\n     * Returns the registered barriers and their properties in the array.\n     *\n     * @param queryBarrierReq : WritableMap\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void queryBarrier(ReadableArray queryBarrierReq, Promise promise) {\n        awarenessBarrierWrapper.queryBarrier(queryBarrierReq, promise);\n    }\n\n    /**\n     * Returns all added barriers and their attributes.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void queryAllBarrier(Promise promise) {\n        awarenessBarrierWrapper.queryAllBarrier(promise);\n    }\n\n    /**\n     * This method removes barrier labels in the array.\n     *\n     * @param promise : return WritableMap\n     * @param updateBarrierReq : Barrier object to be added.\n     * @param barrierEventType : Must match one of the values ​​starting with \"EVENT_ ...\"\n     * in the {@link Constants} class. Example: EVENT_HEADSET\n     */\n    @ReactMethod\n    public void updateBarrier(String barrierEventType, ReadableMap updateBarrierReq, Promise promise) {\n        awarenessBarrierWrapper.updateBarrier(barrierEventType, updateBarrierReq, promise);\n    }\n\n    /**\n     * You can create a combination of barriers using \"and\", \"or\" and \"not\".\n     * You can listen to different awareness features with a single barrier.\n     *\n     * @param barrierLabel : It is a unique value for barrier. This value makes it stand out from other barriers.\n     * @param combinationBarrierReq : It includes barrier arrays that need to be added.\n     * @param promise : return WritableMap\n     */\n    @ReactMethod\n    public void combinationBarrier(String barrierLabel, ReadableArray combinationBarrierReq, Promise promise) {\n        combinationBarrierWrapper.addCombinationBarrier(barrierLabel, combinationBarrierReq, promise);\n    }\n\n    /**\n     * This method removes barrier labels in the array.\n     *\n     * @param promise : WritableMap\n     * @param deleteBarrierReq: barrierLabel array\n     */\n    @ReactMethod\n    public void deleteBarrier(ReadableArray deleteBarrierReq, Promise promise) {\n        awarenessBarrierWrapper.deleteBarrier(deleteBarrierReq, promise);\n    }\n\n    /**\n     * This method deletes all registered barriers.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void deleteAllBarrier(Promise promise) {\n        awarenessBarrierWrapper.deleteAllBarrier(promise);\n    }\n\n    /**\n     * You can use constants values for request objects.\n     *\n     * @return {@link Constants} class.\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return Constants.getAllConstants();\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/modules/HMSAwarenessCaptureModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.modules;\n\nimport android.os.Build;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.RequiresApi;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hms.rn.awareness.wrapper.AwarenessCaptureWrapper;\n\npublic class HMSAwarenessCaptureModule extends ReactContextBaseJavaModule {\n\n    private AwarenessCaptureWrapper awarenessCapture;\n\n    public HMSAwarenessCaptureModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        awarenessCapture = new AwarenessCaptureWrapper(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSAwarenessCaptureModule\";\n    }\n\n    /**\n     * Uses a variable number of the filters parameters to obtain beacon information.\n     * The method is available only on devices with API level 24 or later.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getBeaconStatus(ReadableMap beaconStatusReq, Promise promise) {\n        awarenessCapture.getBeaconStatus(beaconStatusReq, promise);\n    }\n\n    /**\n     * Obtains current user behavior, for example, running, walking, cycling, or driving.\n     * The method is available only on devices with API level 29 or later.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getBehavior(Promise promise) {\n        awarenessCapture.getBehavior(promise);\n    }\n\n    /**\n     * Obtains headset connection status.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getHeadsetStatus(Promise promise) {\n        awarenessCapture.getHeadsetStatus(promise);\n    }\n\n    /**\n     * Re-Obtains the current location (latitude and longitude) of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getLocation(Promise promise) {\n        awarenessCapture.getLocation(promise);\n    }\n\n    /**\n     * Obtains the current location (latitude and longitude) of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getCurrentLocation(Promise promise) {\n        awarenessCapture.getCurrentLocation(promise);\n    }\n\n    /**\n     * Obtains the current time.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getTimeCategories(Promise promise) {\n        awarenessCapture.getTimeCategories(promise);\n    }\n\n    /**\n     * Obtains the current time of a specified location.\n     *\n     * @param timeCategoriesByUserReq : ReadableMap\n     * @param promise                 : WritableMap\n     */\n    @ReactMethod\n    public void getTimeCategoriesByUser(ReadableMap timeCategoriesByUserReq, Promise promise) {\n        awarenessCapture.getTimeCategoriesByUser(timeCategoriesByUserReq, promise);\n    }\n\n    /**\n     * Obtains the current time by country/region code that complies with ISO 3166-1 alpha-2.\n     *\n     * @param timeCategoriesByCountryCodeReq : ReadableMap<\n     * @param promise                        : WritableMap\n     */\n    @ReactMethod\n    public void getTimeCategoriesByCountryCode(ReadableMap timeCategoriesByCountryCodeReq, Promise promise) {\n        awarenessCapture.getTimeCategoriesByCountryCode(timeCategoriesByCountryCodeReq, promise);\n    }\n\n    /**\n     * Obtains the current time by IP address.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getTimeCategoriesByIP(Promise promise) {\n        awarenessCapture.getTimeCategoriesByIP(promise);\n    }\n\n    /**\n     * Obtains the time of a specified date by IP address.\n     *\n     * @param timeCategoriesForFutureReq: ReadableMap\n     * @param promise                     : WritableMap\n     */\n    @ReactMethod\n    public void getTimeCategoriesForFuture(ReadableMap timeCategoriesForFutureReq, Promise promise) {\n        awarenessCapture.getTimeCategoriesForFuture(timeCategoriesForFutureReq, promise);\n    }\n\n    /**\n     * Obtains the illuminance.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getLightIntensity(Promise promise) {\n        awarenessCapture.getLightIntensity(promise);\n    }\n\n    /**\n     * Obtains the weather of the current location of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getWeatherByDevice(Promise promise) {\n        awarenessCapture.getWeatherByDevice(promise);\n    }\n\n    /**\n     * Obtains weather information about a specified address.\n     *\n     * @param weatherByPositionReq: ReadableMap\n     * @param promise               : WritableMap\n     */\n    @ReactMethod\n    public void getWeatherByPosition(ReadableMap weatherByPositionReq, Promise promise) {\n        awarenessCapture.getWeatherByPosition(weatherByPositionReq, promise);\n    }\n\n    /**\n     * Obtains the Bluetooth connection status.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getBluetoothStatus(Promise promise) {\n        awarenessCapture.getBluetoothStatus(promise);\n    }\n\n    /**\n     * Obtains capabilities supported by Awareness Kit on the current device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void querySupportingCapabilities(Promise promise) {\n        awarenessCapture.querySupportingCapabilities(promise);\n    }\n\n    /**\n     * Indicates whether to display a dialog box before\n     * Awareness Kit or HMS Core (APK) starts an upgrade in your app.\n     *\n     * @param isEnabled : boolean\n     * @param promise   : WritableMap\n     */\n    @ReactMethod\n    public void enableUpdateWindow(boolean isEnabled, Promise promise) {\n        awarenessCapture.enableUpdateWindow(isEnabled, promise);\n    }\n\n    /**\n     * Obtains the screen status response of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getScreenStatus(Promise promise) {\n        awarenessCapture.getScreenStatus(promise);\n    }\n\n    /**\n     * Obtains the Wi-Fi connection status of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getWifiStatus(Promise promise) {\n        awarenessCapture.getWifiStatus(promise);\n    }\n\n    /**\n     * Obtains the app status of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @ReactMethod\n    public void getApplicationStatus(Promise promise) {\n        awarenessCapture.getApplicationStatus(promise);\n    }\n\n    /**\n     * Obtains the dark mode status of a device.\n     *\n     * @param promise : WritableMap\n     */\n    @RequiresApi(api = Build.VERSION_CODES.Q)\n    @ReactMethod\n    public void getDarkModeStatus(Promise promise) {\n        awarenessCapture.getDarkModeStatus(promise);\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/modules/HMSLoggerModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.modules;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\nimport com.huawei.hms.rn.awareness.utils.DataUtils;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\n\npublic class HMSLoggerModule extends ReactContextBaseJavaModule {\n\n    ReactContext context;\n    String TAG = \"HMSLoggerModule\";\n\n    public HMSLoggerModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        context = reactContext;\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSLoggerModule\";\n    }\n\n    /**\n     * Enables logging.\n     *\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void enableLogger(Promise promise) {\n        String method = \"enableLogger\";\n        try {\n            HMSLogger.getInstance(context).enableLogger();\n            DataUtils.valueConvertToMap(\"HMSLogger\", true, \"enableLogger\", promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    /**\n     * Disables logging.\n     *\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void disableLogger(Promise promise) {\n        String method = \"disableLogger\";\n        try {\n            HMSLogger.getInstance(context).disableLogger();\n            DataUtils.valueConvertToMap(\"HMSLogger\", false, \"disableLogger\", promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/utils/BackgroundBarrierReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.utils;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.facebook.react.HeadlessJsTaskService;\n\nimport static com.huawei.hms.rn.awareness.utils.BarrierReceiver.isAppOnForeground;\n\npublic class BackgroundBarrierReceiver extends BroadcastReceiver {\n    private static final String TAG = BackgroundBarrierReceiver.class.getName();\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        Log.d(TAG, \"onReceive\");\n\n        if (!isAppOnForeground((context))) {\n            intent.setClass(context, TaskService.class);\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                context.startForegroundService(intent);\n            } else {\n                context.startService(intent);\n            }\n            HeadlessJsTaskService.acquireWakeLockNow(context);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/utils/BarrierReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.utils;\n\nimport android.app.ActivityManager;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatus;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\n\nimport java.util.List;\nimport java.util.Objects;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.barrierStatusConvertToMap;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\n\npublic class BarrierReceiver extends BroadcastReceiver {\n    private ReactContext context;\n\n    public BarrierReceiver(ReactContext reactContext) {\n        context = reactContext;\n    }\n\n    @Override\n    public void onReceive(Context c, Intent intent) {\n        try {\n            HMSLogger.getInstance(context).sendPeriodicEvent(\"barrierReceiver-barrierStatusChanged\");\n            if (!isAppOnForeground(context)){\n                Log.d(\"BarrierReceiver:\", \"onReceive, app is not on foreground\");\n                return;\n            }\n            BarrierStatus barrierStatus = BarrierStatus.extract(intent);\n            WritableMap map = barrierStatusConvertToMap(barrierStatus);\n            if(map == null){\n                return;\n            }\n            String status = map.getString(\"presentStatusName\");\n            String barrierLabel = map.getString(\"barrierLabel\");\n            Log.i(\"barrierReceiver::\", barrierLabel + \"::\" + Objects.requireNonNull(status));\n\n            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(\"barrierReceiver\", map);\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, \"barrierReceiver-barrierStatusChanged\", \"AwarenessBarrier::\", e, null);\n        }\n    }\n\n    public static boolean isAppOnForeground(Context context) {\n        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();\n        if (appProcesses == null) {\n            return false;\n        }\n        final String packageName = context.getPackageName();\n        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {\n            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND\n                    && appProcess.processName.equals(packageName)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/utils/DataUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.utils;\n\nimport android.location.Location;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.common.StandardCharsets;\nimport com.huawei.hms.kit.awareness.barrier.BarrierQueryResponse;\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatus;\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatusMap;\nimport com.huawei.hms.kit.awareness.capture.AmbientLightResponse;\nimport com.huawei.hms.kit.awareness.capture.ApplicationStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.BeaconStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.BehaviorResponse;\nimport com.huawei.hms.kit.awareness.capture.BluetoothStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.CapabilityResponse;\nimport com.huawei.hms.kit.awareness.capture.DarkModeStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.HeadsetStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.LocationResponse;\nimport com.huawei.hms.kit.awareness.capture.ScreenStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.TimeCategoriesResponse;\nimport com.huawei.hms.kit.awareness.capture.WeatherPosition;\nimport com.huawei.hms.kit.awareness.capture.WeatherStatusResponse;\nimport com.huawei.hms.kit.awareness.capture.WifiStatusResponse;\nimport com.huawei.hms.kit.awareness.status.AmbientLightStatus;\nimport com.huawei.hms.kit.awareness.status.ApplicationStatus;\nimport com.huawei.hms.kit.awareness.status.BeaconStatus;\nimport com.huawei.hms.kit.awareness.status.BehaviorStatus;\nimport com.huawei.hms.kit.awareness.status.BluetoothStatus;\nimport com.huawei.hms.kit.awareness.status.CapabilityStatus;\nimport com.huawei.hms.kit.awareness.status.DarkModeStatus;\nimport com.huawei.hms.kit.awareness.status.DetectedBehavior;\nimport com.huawei.hms.kit.awareness.status.HeadsetStatus;\nimport com.huawei.hms.kit.awareness.status.ScreenStatus;\nimport com.huawei.hms.kit.awareness.status.TimeCategories;\nimport com.huawei.hms.kit.awareness.status.WeatherStatus;\nimport com.huawei.hms.kit.awareness.status.WifiStatus;\nimport com.huawei.hms.kit.awareness.status.weather.Aqi;\nimport com.huawei.hms.kit.awareness.status.weather.City;\nimport com.huawei.hms.kit.awareness.status.weather.DailyLiveInfo;\nimport com.huawei.hms.kit.awareness.status.weather.DailySituation;\nimport com.huawei.hms.kit.awareness.status.weather.DailyWeather;\nimport com.huawei.hms.kit.awareness.status.weather.HourlyWeather;\nimport com.huawei.hms.kit.awareness.status.weather.LiveInfo;\nimport com.huawei.hms.kit.awareness.status.weather.Situation;\nimport com.huawei.hms.kit.awareness.status.weather.WeatherSituation;\nimport com.huawei.hms.rn.awareness.constants.LocaleConstants;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Objects;\nimport java.util.Set;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.IntType.TIME;\n\npublic class DataUtils {\n\n    public enum IntType {\n        TIME(3),\n        CAPABILITY(4),\n        DEFAULT(5);\n        int intValue;\n\n        IntType(int IntType) {\n            this.intValue = IntType;\n        }\n    }\n\n    private static final String TAG = DataUtils.class.getSimpleName();\n\n    // For Barrier\n\n    /**\n     * Converts the WritableMap instance to BarrierStatus.\n     *\n     * @param obj : BarrierStatus instance.\n     * @return WritableMap\n     */\n    public static WritableMap barrierStatusConvertToMap(BarrierStatus obj) {\n        WritableMap map;\n        if (obj == null) {\n            return null;\n        }\n        try {\n            JSONObject j = new JSONObject();\n            int presentStatus = obj.getPresentStatus();\n            j.put(\"barrierLabel\", obj.getBarrierLabel());\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"lastBarrierUpdateTime\", obj.getLastBarrierUpdateTime());\n            j.put(\"lastStatus\", obj.getLastStatus());\n            j.put(\"presentStatus\", presentStatus);\n            j.put(\"presentStatusName\", LocaleConstants.BARRIER_STATUS.get(presentStatus));\n            map = toWritableMap(j);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            map = valueConvertToMap(\"error\", eMessage);\n        }\n        return map;\n    }\n\n    /**\n     * Converts the JSONObject instance to BarrierStatus.\n     *\n     * @param obj : BarrierStatus instance.\n     * @return JSONObject\n     */\n    public static JSONObject barrierStatusConvertToJSONObject(BarrierStatus obj) {\n        JSONObject j = new JSONObject();\n        if (obj == null) {\n            return null;\n        }\n        try {\n            j.put(\"barrierLabel\", obj.getBarrierLabel());\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"lastBarrierUpdateTime\", obj.getLastBarrierUpdateTime());\n            j.put(\"lastStatus\", obj.getLastStatus());\n            j.put(\"presentStatus\", obj.getPresentStatus());\n            j.put(\"presentStatusName\", LocaleConstants.BARRIER_STATUS.get(obj.getPresentStatus()));\n            j.put(\"lastStatusName\", LocaleConstants.BARRIER_STATUS.get(obj.getLastStatus()));\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            Log.e(\"Error\", eMessage);\n        }\n        return j;\n    }\n\n    /**\n     * Converts the JSONObject instance to BarrierStatusMap.\n     *\n     * @param obj : BarrierStatusMap instance.\n     * @return JSONObject\n     */\n    public static JSONObject barrierStatusMapConvertToJSONObject(BarrierStatusMap obj) {\n        if (obj == null) {\n            return null;\n        }\n\n        JSONObject j = new JSONObject();\n        try {\n            Set<String> barrierLabels = obj.getBarrierLabels();\n            JSONArray labelArray = new JSONArray();\n\n            for (String barrierLabel : barrierLabels) {\n                JSONObject labelObj = new JSONObject();\n                BarrierStatus barrierStatus = obj.getBarrierStatus(barrierLabel);\n                JSONObject barrierStatusObject = barrierStatusConvertToJSONObject(barrierStatus);\n                labelObj.put(\"barrierStatus\", barrierStatusObject);\n                labelObj.put(\"barrierLabel\", barrierLabel);\n                labelArray.put(labelObj);\n            }\n            j.put(\"barriers\", labelArray);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            Log.e(\"Error\", eMessage);\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * This method converts the BarrierQueryResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : BarrierQueryResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void barrierQueryResConvertToMap(BarrierQueryResponse obj, Promise promise) {\n        try {\n            if (obj == null) {\n                errorMessage(\"barrierQueryResAllConvertToMap\", \"object==null\", promise);\n                return;\n            }\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            BarrierStatusMap barrierStatusMap = obj.getBarrierStatusMap();\n            JSONObject barrierStatusMapObject = barrierStatusMapConvertToJSONObject(barrierStatusMap);\n            j.put(\"barrierStatusMap\", barrierStatusMapObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"barrierQueryResAllConvertToMap\", eMessage, promise);\n        }\n    }\n\n    // For Capture\n\n    /**\n     * This method converts ReadableMap to WeatherPosition.\n     *\n     * @param map : ReadableMap instance\n     * @return Returns a WeatherPosition\n     */\n    public static WeatherPosition weatherPositionReqObjToWeatherPosition(ReadableMap map) {\n        WeatherPosition position = new WeatherPosition();\n        if (map.hasKey(\"city\")) {\n            String city = map.getString(\"city\");\n            position.setCity(city);\n        }\n        if (map.hasKey(\"country\")) {\n            String country = map.getString(\"country\");\n            position.setCountry(country);\n        }\n        if (map.hasKey(\"locale\")) {\n            String locale = map.getString(\"locale\");\n            position.setLocale(locale);\n        }\n        if (map.hasKey(\"province\")) {\n            String province = map.getString(\"province\");\n            position.setProvince(province);\n        }\n        if (map.hasKey(\"district\")) {\n            String district = map.getString(\"district\");\n            position.setDistrict(district);\n        }\n        return position;\n    }\n\n    /**\n     * This method converts the BeaconStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : BeaconStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void beaconStatusResponseConvertToMap(BeaconStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n\n            BeaconStatus beaconStatus = obj.getBeaconStatus();\n            List<BeaconStatus.BeaconData> beaconDataList = beaconStatus.getBeaconData();\n            JSONArray beaconArray = new JSONArray();\n            for (int i = 0; i < beaconDataList.size(); i++) {\n                JSONObject beaconObject = new JSONObject();\n                BeaconStatus.BeaconData beaconData = beaconDataList.get(i);\n                String beaconId = beaconData.getBeaconId();\n                byte[] contentBytes = beaconData.getContent();\n                String content = new String(contentBytes, StandardCharsets.UTF_8);\n                String namespace = beaconData.getNamespace();\n                String type = beaconData.getType();\n                beaconObject.put(\"beaconId\", beaconId);\n                beaconObject.put(\"content\", content);\n                beaconObject.put(\"namespace\", namespace);\n                beaconObject.put(\"type\", type);\n                beaconArray.put(beaconObject);\n            }\n            j.put(\"beaconDataList\", beaconArray);\n\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"beaconStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the BehaviorResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : BehaviorResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void behaviorResponseConvertToMap(BehaviorResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            BehaviorStatus behaviorStatus = obj.getBehaviorStatus();\n            JSONObject detectedBehavior = detectedBehaviorConvertToJSONObject(behaviorStatus.getMostLikelyBehavior());\n            long elapsedRealtimeMills = behaviorStatus.getElapsedRealtimeMillis();\n            long time = behaviorStatus.getTime();\n            int describeContent = behaviorStatus.describeContents();\n\n            JSONArray probableBehaviorArray = new JSONArray();\n            List<DetectedBehavior> probableBehavior = behaviorStatus.getProbableBehavior();\n            for (int i = 0; i < probableBehavior.size(); i++) {\n                JSONObject detectorBehavior2 = detectedBehaviorConvertToJSONObject(probableBehavior.get(i));\n                probableBehaviorArray.put(detectorBehavior2);\n            }\n            int type = detectedBehavior.getInt(\"type\");\n            j.put(\"behaviourConfidence\", behaviorStatus.getBehaviorConfidence(type));\n            j.put(\"mostLikelyBehavior\", detectedBehavior);\n            j.put(\"elapsedRealtimeMills\", elapsedRealtimeMills);\n            j.put(\"probableBehavior\", probableBehaviorArray);\n            j.put(\"describeContent\", describeContent);\n            j.put(\"time\", time);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"behaviorResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the HeadsetStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : HeadsetStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void headsetStatusResponseConvertToMap(HeadsetStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            HeadsetStatus headsetStatus = obj.getHeadsetStatus();\n            JSONObject j = new JSONObject();\n            int status = headsetStatus.getStatus();\n            j.put(\"status\", LocaleConstants.HEADSET_STATUS.get(status));\n            j.put(\"statusCode\", status);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"headsetStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the TimeCategoriesResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : TimeCategoriesResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void timeCategoriesResponseConvertToMap(TimeCategoriesResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            TimeCategories timeCategories = obj.getTimeCategories();\n            JSONObject j = new JSONObject();\n            JSONArray timeCategoryArray = intArrayConvertToJSONArray(timeCategories.getTimeCategories(), TIME);\n            j.put(\"timeCategories\", timeCategoryArray);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"timeCategoriesResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the LocationResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : LocationResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void locationResponseConvertToMap(LocationResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            Location location = obj.getLocation();\n            JSONObject j = new JSONObject();\n\n            j.put(\"latitude\", location.getLatitude());\n            j.put(\"longitude\", location.getLongitude());\n            j.put(\"altitude\", location.getAltitude());\n            j.put(\"speed\", location.getSpeed());\n            j.put(\"bearing\", location.getBearing());\n            j.put(\"accuracy\", location.getAccuracy());\n            j.put(\"elapsedRealtimeNanos\", location.getElapsedRealtimeNanos());\n            j.put(\"time\", location.getTime());\n            j.put(\"fromMockProvider\", location.isFromMockProvider());\n            j.put(\"describeContents\", location.describeContents());\n            j.put(\"provider\", location.getProvider());\n            j.put(\"hasAccuracy\", location.hasAccuracy());\n            j.put(\"hasAltitude\", location.hasAltitude());\n            j.put(\"hasBearing\", location.hasBearing());\n            j.put(\"hasSpeed\", location.hasSpeed());\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                j.put(\"elapsedRealtimeUncertaintyNanos\", location.getElapsedRealtimeUncertaintyNanos());\n                j.put(\"hasElapsedRealtimeUncertaintyNanos\", location.hasElapsedRealtimeUncertaintyNanos());\n            }\n            \n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                j.put(\"verticalAccuracyMeters\", location.getVerticalAccuracyMeters());\n                j.put(\"bearingAccuracyDegrees\", location.getBearingAccuracyDegrees());\n                j.put(\"speedAccuracyMetersPerSecond\", location.getSpeedAccuracyMetersPerSecond());\n                j.put(\"hasSpeedAccuracy\", location.hasSpeedAccuracy());\n                j.put(\"hasBearingAccuracy\", location.hasBearingAccuracy());\n                j.put(\"hasVerticalAccuracy\", location.hasVerticalAccuracy());\n            } else {\n                j.put(\"verticalAccuracyMeters\", 0.0);\n                j.put(\"bearingAccuracyDegrees\", 0.0);\n                j.put(\"speedAccuracyMetersPerSecond\", 0.0);\n            }\n\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"locationResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the AmbientLightResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : AmbientLightResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void ambientLightResponseConvertToMap(AmbientLightResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            AmbientLightStatus ambientLightStatus = obj.getAmbientLightStatus();\n            JSONObject j = new JSONObject();\n            JSONObject ambientLightStatusObject = new JSONObject();\n            ambientLightStatusObject.put(\"lightIntensity\", ambientLightStatus.getLightIntensity());\n            j.put(\"ambientLightStatus\", ambientLightStatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"ambientLightResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the WeatherStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : WeatherStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void weatherStatusResponseConvertToMap(WeatherStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n\n            WeatherStatus weatherStatus = obj.getWeatherStatus();\n            WeatherSituation weatherSituation = weatherStatus.getWeatherSituation();\n            JSONObject weatherSituationObject = weatherSituationConvertToJSONObject(weatherSituation);\n\n            JSONArray hourlyWeatherArray = new JSONArray();\n            List<HourlyWeather> hourlyWeatherList = weatherStatus.getHourlyWeather();\n            for (int i = 0; i < hourlyWeatherList.size(); i++) {\n                HourlyWeather hourlyWeather = hourlyWeatherList.get(i);\n                hourlyWeatherArray.put(hourlyWeatherConvertToJSONObject(hourlyWeather));\n            }\n\n            JSONArray dailyWeatherArray = new JSONArray();\n            List<DailyWeather> dailyWeatherList = weatherStatus.getDailyWeather();\n            for (int i = 0; i < dailyWeatherList.size(); i++) {\n                DailyWeather dailyWeather = dailyWeatherList.get(i);\n                dailyWeatherArray.put(dailyWeatherConvertToJSONObject(dailyWeather));\n            }\n\n            JSONArray liveInfoArray = new JSONArray();\n            List<LiveInfo> liveInfoList = weatherStatus.getLiveInfo();\n            for (int i = 0; i < liveInfoList.size(); i++) {\n                LiveInfo liveInfo = liveInfoList.get(i);\n                liveInfoArray.put(liveInfoConvertToJSONObject(liveInfo));\n            }\n\n            j.put(\"aqi\", aqiConvertToJSONObject(weatherStatus.getAqi()));\n            j.put(\"liveInfoList\", liveInfoArray);\n            j.put(\"dailyWeatherList\", dailyWeatherArray);\n            j.put(\"hourlyWeatherList\", hourlyWeatherArray);\n            j.put(\"weatherSituation\", weatherSituationObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"weatherStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the BluetoothStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : BluetoothStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void bluetoothStatusResponseConvertToMap(BluetoothStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            BluetoothStatus bluetoothStatus = obj.getBluetoothStatus();\n            int status = bluetoothStatus.getStatus();\n            JSONObject bluetoothStatusObject = new JSONObject();\n            bluetoothStatusObject.put(\"status\", status);\n            bluetoothStatusObject.put(\"statusName\", LocaleConstants.BLUETOOTH_STATUS.get(status));\n            j.put(\"bluetoothStatus\", bluetoothStatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"bluetoothStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the CapabilityResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : CapabilityResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void capabilityResponseConvertToMap(CapabilityResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            CapabilityStatus capabilityStatus = obj.getCapabilityStatus();\n            int[] capabilitiesArray = capabilityStatus.getCapabilities();\n            JSONArray capabilityStatusJSONArray = intArrayConvertToJSONArray(capabilitiesArray, IntType.CAPABILITY);\n            j.put(\"capabilities\", capabilityStatusJSONArray);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"capabilityResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the ScreenStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : ScreenStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void screenStatusResponseConvertToMap(ScreenStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            JSONObject screenStatusObject = screenStatusConvertToJSONObject(obj.getScreenStatus());\n            j.put(\"screenStatus\", screenStatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"screenStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the WifiStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : WifiStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void wifiStatusResponseConvertToMap(WifiStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            JSONObject wifistatusObject = wifiStatusConvertToJSONObject(obj.getWifiStatus());\n            j.put(\"wifiStatus\", wifistatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"wifiStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the ApplicationStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : ApplicationStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void applicationStatusResponseConvertToMap(ApplicationStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            ApplicationStatus applicationStatus = obj.getApplicationStatus();\n            JSONObject aaplicationStatusObject = applicationStatusConvertToJSONObject(applicationStatus);\n            j.put(\"applicationStatus\", aaplicationStatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"applicationStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts the DarkModeStatusResponse type object to a WritableMap and returns to the RN side.\n     *\n     * @param obj     : DarkModeStatusResponse instance\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static void darkModeStatusResponseConvertToMap(DarkModeStatusResponse obj, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            JSONObject darkModestatusObject = darkModeStatusConvertToJSONObject(obj.getDarkModeStatus());\n            j.put(\"darkModeStatus\", darkModestatusObject);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(\"darkModeStatusResponseConvertToMap\", eMessage, promise);\n        }\n    }\n\n    /**\n     * This method converts an instance of generic type object\n     * and String type to WritableMap and returns a WritableMap type response to the RN side.\n     * There is a variable in WritableMap with key=key and value=instance.\n     *\n     * @param instance : Generic type\n     * @param key      : String\n     * @param method   : String\n     *                 When returning information to the RN side, it provides the method\n     *                 from which this information is returned.\n     * @param promise  :        Returns a WritableMap type promise to the RN side.\n     */\n    public static <T> void valueConvertToMap(String key, T instance, String method, Promise promise) {\n        try {\n            WritableMap writableMap;\n            JSONObject j = new JSONObject();\n            j.put(key, instance);\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            String eMessage = e.getMessage() != null ? e.getMessage() : \"error\";\n            errorMessage(method, eMessage, promise);\n        }\n    }\n\n    /**\n     * Converts an instance of a generic type object to WritableMap.\n     * There is a variable in WritableMap with key=key and value=instance.\n     *\n     * @param instance : Generic type\n     * @param key      : String\n     * @return a WritableMap\n     */\n    public static <T> WritableMap valueConvertToMap(String key, T instance) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(key, instance);\n            writableMap = toWritableMap(j);\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    /**\n     * Converts the DarkModeStatus instance to JSONObject.\n     *\n     * @param obj : DarkModeStatus instance.\n     * @return JSONObject\n     */\n    private static JSONObject darkModeStatusConvertToJSONObject(DarkModeStatus obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            boolean isDarkModeOn = obj.isDarkModeOn();\n            j.put(\"isDarkModeOn\", isDarkModeOn);\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the ApplicationStatus instance to JSONObject.\n     *\n     * @param obj : ApplicationStatus instance.\n     * @return JSONObject\n     */\n    private static JSONObject applicationStatusConvertToJSONObject(ApplicationStatus obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            int status = obj.getStatus();\n            j.put(\"status\", status);\n            j.put(\"statusName\", LocaleConstants.APPLICATION_STATUS.get(status));\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the WifiStatus instance to JSONObject.\n     *\n     * @param obj : WifiStatus instance.\n     * @return JSONObject\n     */\n    private static JSONObject wifiStatusConvertToJSONObject(WifiStatus obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            int status = obj.getStatus();\n            j.put(\"bssid\", obj.getBssid());\n            j.put(\"ssid\", obj.getSsid());\n            j.put(\"status\", status);\n            j.put(\"statusName\", LocaleConstants.WIFI_STATUS.get(status));\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the ScreenStatus instance to JSONObject.\n     *\n     * @param obj : ScreenStatus instance.\n     * @return JSONObject\n     */\n    private static JSONObject screenStatusConvertToJSONObject(ScreenStatus obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            int status = obj.getStatus();\n            j.put(\"status\", status);\n            j.put(\"statusName\", LocaleConstants.SCREEN_STATUS.get(status));\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the DetectedBehavior instance to JSONObject.\n     *\n     * @param obj : DetectedBehavior instance.\n     * @return JSONObject\n     */\n    private static JSONObject detectedBehaviorConvertToJSONObject(DetectedBehavior obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject jsonObject = new JSONObject();\n        try {\n            jsonObject.put(\"describeContents\", obj.describeContents());\n            jsonObject.put(\"confidence\", obj.getConfidence());\n            jsonObject.put(\"type\", obj.getType());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return jsonObject;\n    }\n\n    /**\n     * Converts the WeatherSituation instance to JSONObject.\n     *\n     * @param obj : WeatherSituation instance.\n     * @return JSONObject\n     */\n    private static JSONObject weatherSituationConvertToJSONObject(WeatherSituation obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject jsonObject = new JSONObject();\n        try {\n            Situation situation = obj.getSituation();\n            City city = obj.getCity();\n            jsonObject.put(\"city\", cityConvertToJSONObject(city));\n            jsonObject.put(\"situation\", situationConvertToJSONObject(situation));\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return jsonObject;\n    }\n\n    /**\n     * Converts the City instance to JSONObject.\n     *\n     * @param obj : City instance.\n     * @return JSONObject\n     */\n    private static JSONObject cityConvertToJSONObject(City obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"cityCode\", obj.getCityCode());\n            j.put(\"provinceName\", obj.getProvinceName());\n            j.put(\"timeZone\", obj.getTimeZone());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the Situation instance to JSONObject.\n     *\n     * @param obj : Situation instance.\n     * @return JSONObject\n     */\n    private static JSONObject situationConvertToJSONObject(Situation obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"cnWeatherId\", obj.getCnWeatherId());\n            j.put(\"cnWeather\", LocaleConstants.CN_WEATHER_ID.get(obj.getCnWeatherId()));\n            j.put(\"weatherId\", obj.getWeatherId());\n            j.put(\"weather\", LocaleConstants.WEATHER_ID.get(obj.getWeatherId()));\n            j.put(\"humidity\", obj.getHumidity());\n            j.put(\"pressure\", obj.getPressure());\n            j.put(\"realFeelC\", obj.getRealFeelC());\n            j.put(\"realFeelF\", obj.getRealFeelF());\n            j.put(\"temperatureC\", obj.getTemperatureC());\n            j.put(\"temperatureF\", obj.getTemperatureF());\n            j.put(\"updateTime\", obj.getUpdateTime());\n            j.put(\"uvIndex\", obj.getUvIndex());\n            j.put(\"windDir\", obj.getWindDir());\n            j.put(\"windSpeed\", obj.getWindSpeed());\n            j.put(\"windLevel\", obj.getWindLevel());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the Aqi instance to JSONObject.\n     *\n     * @param obj : Aqi instance.\n     * @return JSONObject\n     */\n    private static JSONObject aqiConvertToJSONObject(Aqi obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject object = new JSONObject();\n        try {\n            object.put(\"aqiValue\", obj.getAqiValue());\n            object.put(\"describeContents\", obj.describeContents());\n            object.put(\"co\", obj.getCo());\n            object.put(\"no2\", obj.getNo2());\n            object.put(\"getO3\", obj.getO3());\n            object.put(\"pm10\", obj.getPm10());\n            object.put(\"pm25\", obj.getPm25());\n            object.put(\"so2\", obj.getSo2());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return object;\n    }\n\n    /**\n     * Converts the DailyWeather instance to JSONObject.\n     *\n     * @param obj : DailyWeather instance.\n     * @return JSONObject\n     */\n    private static JSONObject dailyWeatherConvertToJSONObject(DailyWeather obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject object = new JSONObject();\n        try {\n            object.put(\"timeStamp\", obj.getDateTimeStamp());\n            object.put(\"maxTempC\", obj.getMaxTempC());\n            object.put(\"maxTempF\", obj.getMaxTempF());\n            object.put(\"minTempC\", obj.getMinTempC());\n            object.put(\"minTempF\", obj.getMinTempF());\n            object.put(\"moonphase\", obj.getMoonphase());\n            object.put(\"moonRise\", obj.getMoonRise());\n            object.put(\"moonSet\", obj.getMoonSet());\n            object.put(\"sunRise\", obj.getSunRise());\n            object.put(\"sunSet\", obj.getSunSet());\n            object.put(\"aqiValue\", obj.getAqiValue());\n            object.put(\"describeContents\", obj.describeContents());\n            object.put(\"situationDay\", dailySituationConvertToJSONObject(obj.getSituationDay()));\n            object.put(\"situationNight\", dailySituationConvertToJSONObject(obj.getSituationNight()));\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return object;\n    }\n\n    /**\n     * Converts the DailySituation instance to JSONObject.\n     *\n     * @param obj : DailySituation instance.\n     * @return JSONObject\n     */\n    private static JSONObject dailySituationConvertToJSONObject(DailySituation obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"cnWeatherId\", obj.getCnWeatherId());\n            j.put(\"cnWeather\", LocaleConstants.CN_WEATHER_ID.get(obj.getCnWeatherId()));\n            j.put(\"weatherId\", obj.getWeatherId());\n            j.put(\"weather\", LocaleConstants.WEATHER_ID.get(obj.getWeatherId()));\n            j.put(\"windDir\", obj.getWindDir());\n            j.put(\"windLevel\", obj.getWindLevel());\n            j.put(\"windSpeed\", obj.getWindSpeed());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the HourlyWeather instance to JSONObject.\n     *\n     * @param obj : HourlyWeather instance.\n     * @return JSONObject\n     */\n    private static JSONObject hourlyWeatherConvertToJSONObject(HourlyWeather obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"timeStamp\", obj.getDateTimeStamp());\n            j.put(\"cnWeatherId\", obj.getCnWeatherId());\n            j.put(\"cnWeather\", LocaleConstants.CN_WEATHER_ID.get(obj.getCnWeatherId()));\n            j.put(\"weatherId\", obj.getWeatherId());\n            j.put(\"weather\", LocaleConstants.WEATHER_ID.get(obj.getWeatherId()));\n            j.put(\"rainprobability\", obj.getRainprobability());\n            j.put(\"tempC\", obj.getTempC());\n            j.put(\"tempF\", obj.getTempF());\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"isDayNight\", obj.isDayNight());\n            j.put(\"timeStamp\", obj.getDateTimeStamp());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the LiveInfo instance to JSONObject.\n     *\n     * @param obj : LiveInfo instance.\n     * @return JSONObject\n     */\n    private static JSONObject liveInfoConvertToJSONObject(LiveInfo obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            JSONArray dailyLiveInfoArray = new JSONArray();\n            List<DailyLiveInfo> dailyLiveInfoList = obj.getLevelList();\n            for (int i = 0; i < dailyLiveInfoList.size(); i++) {\n                DailyLiveInfo dailyLiveInfo = dailyLiveInfoList.get(i);\n                dailyLiveInfoArray.put(dailyLiveInfoConvertToJSONObject(dailyLiveInfo));\n            }\n            j.put(\"dailyLiveInfoList\", dailyLiveInfoArray);\n            j.put(\"code\", obj.getCode());\n            j.put(\"describeContents\", obj.describeContents());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the DailyLiveInfo instance to JSONObject.\n     *\n     * @param obj : DailyLiveInfo instance.\n     * @return JSONObject\n     */\n    private static JSONObject dailyLiveInfoConvertToJSONObject(DailyLiveInfo obj) {\n        if (obj == null){\n            return null;\n        }\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"timeStamp\", obj.getDateTimeStamp());\n            j.put(\"level\", obj.getLevel());\n            j.put(\"describeContents\", obj.describeContents());\n        } catch (JSONException | IllegalArgumentException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n            return null;\n        }\n        return j;\n    }\n\n    /**\n     * Converts the int [] instance to JSONArray by type.\n     *\n     * @param intArray : ReadableArray instance.\n     * @param type     : enum\n     * @return JSONArray\n     */\n    private static JSONArray intArrayConvertToJSONArray(int[] intArray, IntType type) {\n        if (intArray == null){\n            return null;\n        }\n        JSONArray timeArray = new JSONArray();\n        for (int value : intArray) {\n            try {\n                JSONObject j = new JSONObject();\n                switch (type) {\n                    case TIME: {\n                        j.put(\"name\", LocaleConstants.TIME_BARRIER.get(value));\n                        break;\n                    }\n                    case CAPABILITY: {\n                        j.put(\"name\", LocaleConstants.CAPABILITY_STATUS.get(value));\n                        break;\n                    }\n                    case DEFAULT: {\n                        break;\n                    }\n                }\n                j.put(\"value\", value);\n                timeArray.put(j);\n            } catch (JSONException | IllegalArgumentException e) {\n                Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n                return null;\n            }\n        }\n        return timeArray;\n    }\n\n    /**\n     * Converts a ReadableArray instance to a int[].\n     *\n     * @param readableArray : ReadableArray instance.\n     * @return int[]\n     */\n    public static int[] readableArrayConvertToIntArray(ReadableArray readableArray) {\n        if (readableArray == null) {\n            return new int[0];\n        }\n\n        int[] intArray = new int[readableArray.size()];\n        for (int i = 0; i < readableArray.size(); i++) {\n            int item = readableArray.getInt(i);\n            intArray[i] = item;\n        }\n        return intArray;\n    }\n\n    /**\n     * Converts a JSONObject instance to a WritableMap.\n     *\n     * @param j: JSONObject instance.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final JSONObject j) {\n        if (j == null){\n            return null;\n        }\n        WritableMap map = new WritableNativeMap();\n        Iterator<String> iterator = j.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            try {\n                Object value = j.get(key);\n                if (value instanceof JSONObject) {\n                    map.putMap(key, toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    map.putArray(key, toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    map.putBoolean(key, (Boolean) value);\n                } else if (value instanceof Integer) {\n                    map.putInt(key, (Integer) value);\n                } else if (value instanceof Double) {\n                    map.putDouble(key, (Double) value);\n                } else if (value instanceof String) {\n                    map.putString(key, (String) value);\n                } else {\n                    map.putString(key, value.toString());\n                }\n            } catch (JSONException | IllegalArgumentException e) {\n                Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n                return null;\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts a JSONArray into a WritableArray.\n     *\n     * @param jsonArray: JSONArray instance.\n     * @return WritableArray\n     */\n    public static WritableArray toWritableArray(final JSONArray jsonArray) {\n        if (jsonArray == null){\n            return null;\n        }\n        WritableArray array = new WritableNativeArray();\n        for (int i = 0; i < jsonArray.length(); i++) {\n            try {\n                Object value = jsonArray.get(i);\n                if (value instanceof JSONObject) {\n                    array.pushMap(toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    array.pushArray(toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    array.pushBoolean((Boolean) value);\n                } else if (value instanceof Integer) {\n                    array.pushInt((Integer) value);\n                } else if (value instanceof Double) {\n                    array.pushDouble((Double) value);\n                } else if (value instanceof String) {\n                    array.pushString((String) value);\n                } else {\n                    array.pushString(value.toString());\n                }\n            } catch (JSONException | IllegalArgumentException e) {\n                Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n                return null;\n            }\n        }\n        return array;\n    }\n\n    /**\n     * This method converts an instance of generic type object and\n     * returns a WritableMap type errorObject for the RN side.\n     * Calls sendSingleEvent for HMSLogger.\n     *\n     * @param method  : method name\n     * @param tag     : class name\n     * @param error   :  generic type\n     * @param context : ReactContext instance.\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static <T> void errorMessage(ReactContext context, String method, String tag, T error, Promise promise) {\n        Log.i(tag, method + error.toString());\n        WritableMap writableMap;\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"tag\", tag);\n            j.put(\"method\", method);\n            if (error instanceof Exception) {\n                if (((Exception) error).getMessage() != null\n                        && Objects.requireNonNull(((Exception) error).getMessage()).isEmpty()) {\n                    String message = ((Exception) error).getMessage();\n                    j.put(\"message\", message);\n                    if (context != null) {\n                        HMSLogger.getInstance(context).sendSingleEvent(method, message);\n                    }\n                } else {\n                    if (context != null) {\n                        HMSLogger.getInstance(context).sendSingleEvent(method, \"unknown exception\");\n                    }\n                    j.put(\"message\", \"unknown exception\");\n                }\n\n            } else if (error instanceof String) {\n                HMSLogger.getInstance(context).sendSingleEvent(method, error + \"\");\n                j.put(\"message\", error);\n            } else {\n                HMSLogger.getInstance(context).sendSingleEvent(method, \"error\");\n                j.put(\"message\", \"error\");\n            }\n            writableMap = toWritableMap(j);\n            if (promise != null) {\n                promise.resolve(writableMap);\n            }\n        } catch (JSONException | IllegalArgumentException e) {\n            if (promise != null) {\n                promise.resolve(TAG + \"-\" + e.getMessage());\n            }\n        }\n    }\n\n    /**\n     * This method converts an instance of generic type object and\n     * returns a WritableMap type errorObject for the RN side.\n     *\n     * @param method  : method name\n     * @param error   :  generic type\n     * @param promise : Returns a WritableMap type promise to the RN side.\n     */\n    public static <T> void errorMessage(String method, T error, Promise promise) {\n        Log.i(TAG, method + error.toString());\n        WritableMap writableMap;\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"method\", method);\n            if (error instanceof Exception) {\n                String message = ((Exception) error).getMessage();\n                j.put(\"message\", message);\n            } else if (error instanceof String) {\n                j.put(\"message\", error);\n            } else {\n                j.put(\"message\", \"error\");\n            }\n            writableMap = toWritableMap(j);\n            promise.resolve(writableMap);\n        } catch (JSONException | IllegalArgumentException e) {\n            promise.resolve(TAG + \"-\" + e.getMessage());\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/utils/TaskService.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.utils;\n\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.os.Build;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\nimport androidx.core.app.NotificationCompat;\n\nimport com.facebook.react.HeadlessJsTaskService;\nimport com.facebook.react.jstasks.HeadlessJsTaskConfig;\nimport com.huawei.hms.kit.awareness.barrier.BarrierStatus;\nimport com.huawei.hms.rn.awareness.constants.LocaleConstants;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.barrierStatusConvertToMap;\n\npublic class TaskService extends HeadlessJsTaskService {\n    private static final String TAG = TaskService.class.getName();\n    private static final String CHANNEL_ID = \"hms_rn_location\";\n    private static final String CHANNEL_NAME = \"location\";\n\n    public Notification getNotification() {\n        SharedPreferences prefs =\n                getApplicationContext().getSharedPreferences(getApplicationContext().getPackageName(),\n                        Context.MODE_PRIVATE);\n\n        return new NotificationCompat.Builder(this, CHANNEL_ID)\n                .setContentTitle(prefs.getString(LocaleConstants.KEY_CONTENT_TITLE, LocaleConstants.DEFAULT_CONTENT_TITLE))\n                .setContentText(prefs.getString(LocaleConstants.KEY_CONTENT_TEXT, LocaleConstants.DEFAULT_CONTENT_TEXT))\n                .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, getMainActivityClass()),\n                        PendingIntent.FLAG_CANCEL_CURRENT))\n                .setSmallIcon(getApplicationContext().getResources().getIdentifier(\n                        prefs.getString(LocaleConstants.KEY_RESOURCE_NAME, LocaleConstants.DEFAULT_RESOURCE_NAME),\n                        prefs.getString(LocaleConstants.KEY_DEF_TYPE, LocaleConstants.DEFAULT_DEF_TYPE),\n                        getApplicationContext().getPackageName()))\n                .build();\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME,\n                    NotificationManager.IMPORTANCE_NONE);\n            getSystemService(NotificationManager.class).createNotificationChannel(channel);\n            startForeground(66666, getNotification());\n        }\n    }\n\n    public Class getMainActivityClass() {\n        Intent launchIntent =\n                getApplicationContext().getPackageManager().getLaunchIntentForPackage(getApplicationContext().getPackageName());\n        try {\n            String className = launchIntent.getComponent().getClassName();\n            return Class.forName(className);\n        } catch (ClassNotFoundException e) {\n            Log.e(TAG, \"Class not found\", e);\n            return null;\n        }\n    }\n\n    @Nullable\n    protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {\n        Log.d(TAG, \"getTaskConfig\");\n        if (intent != null) {\n            Log.d(TAG, \"has intent\");\n            return new HeadlessJsTaskConfig(\n                    \"barrierReceiver\",\n                    barrierStatusConvertToMap(BarrierStatus.extract(intent)),\n                    5000,\n                    false\n            );\n        }\n        return null;\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/wrapper/AwarenessBarrierWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.wrapper;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.app.PendingIntent;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.common.StandardCharsets;\n\nimport com.huawei.hms.kit.awareness.Awareness;\nimport com.huawei.hms.kit.awareness.barrier.AmbientLightBarrier;\nimport com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BarrierQueryRequest;\nimport com.huawei.hms.kit.awareness.barrier.BarrierUpdateRequest;\nimport com.huawei.hms.kit.awareness.barrier.BeaconBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BehaviorBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BluetoothBarrier;\nimport com.huawei.hms.kit.awareness.barrier.HeadsetBarrier;\nimport com.huawei.hms.kit.awareness.barrier.LocationBarrier;\nimport com.huawei.hms.kit.awareness.barrier.ScreenBarrier;\nimport com.huawei.hms.kit.awareness.barrier.TimeBarrier;\nimport com.huawei.hms.kit.awareness.barrier.WifiBarrier;\nimport com.huawei.hms.kit.awareness.status.BeaconStatus;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\n\nimport java.util.Objects;\nimport java.util.TimeZone;\n\nimport static com.huawei.hms.kit.awareness.status.BeaconStatus.Filter.match;\nimport static com.huawei.hms.rn.awareness.constants.Constants.getAllConstants;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.barrierQueryResConvertToMap;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.readableArrayConvertToIntArray;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.valueConvertToMap;\n\npublic class AwarenessBarrierWrapper {\n\n    private AwarenessBarrier awarenessBarrier;\n\n    private ReactContext context;\n\n    private PendingIntent pendingIntent;\n\n    private String barrierEventType;\n\n    private String TAG = \"AwarenessBarrier::\";\n\n    private String wrongParams = \"Wrong parameter! Please check your parameters.\";\n\n    public AwarenessBarrierWrapper(@NonNull ReactContext reactContext, @NonNull PendingIntent intent) {\n        context = reactContext;\n        pendingIntent = intent;\n    }\n\n    public void queryBarrier(ReadableArray array, Promise promise) {\n        String method = \"queryBarrier\";\n        try {\n            int size = array.size();\n            String[] labels = new String[size];\n            for (int i = 0; i < size; i++) {\n                labels[i] = array.getString(i);\n            }\n            BarrierQueryRequest request = BarrierQueryRequest.forBarriers(labels);\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).queryBarriers(request).addOnSuccessListener(barrierQueryResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                Log.i(TAG, \"queryBarrier\");\n                barrierQueryResConvertToMap(barrierQueryResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:queryBarrier\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void queryAllBarrier(Promise promise) {\n        String method = \"queryAllBarrier\";\n        try {\n            BarrierQueryRequest request = BarrierQueryRequest.all();\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).queryBarriers(request).addOnSuccessListener(barrierQueryResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                Log.i(TAG, \"queryAllBarrier\");\n                barrierQueryResConvertToMap(barrierQueryResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:queryAllBarrier\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void deleteBarrier(ReadableArray labels, Promise promise) {\n        String method = \"removeBarrier\";\n        try {\n            BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();\n            for (int i = 0; i < labels.size(); i++) {\n                String label = labels.getString(i);\n                if (label == null) {\n                    errorMessage(null, method, TAG, \"The label cannot be null!\", promise);\n                    return;\n                }\n                builder.deleteBarrier(label);\n            }\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).updateBarriers(builder.build()).addOnSuccessListener(aVoid -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                valueConvertToMap(\"Response\", \"Success\", method, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void deleteAllBarrier(Promise promise) {\n        String method = \"deleteAllBarrier\";\n        try {\n            BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();\n            builder.deleteAll();\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).updateBarriers(builder.build()).addOnSuccessListener(aVoid -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                Log.i(TAG, \"deleteAllBarrier\");\n                valueConvertToMap(\"Response\", \"Success\", method, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:deleteAllBarrier\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void updateBarrier(String barrierType, ReadableMap map, Promise promise) {\n        if (barrierEventType != null) {\n            barrierEventType = null;\n        }\n\n        if (map == null || barrierType == null) {\n            errorMessage(null, \"updateBarrier\", TAG, \"wrong parameter\", promise);\n            return;\n        }\n\n        barrierEventType = barrierType;\n\n        if (barrierType.equals(getAllConstants().get(\"EVENT_HEADSET\"))) {\n            headsetBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_AMBIENTLIGHT\"))) {\n            ambientLightBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_WIFI\"))) {\n            wifiBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_BLUETOOTH\"))) {\n            bluetoothBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_BEHAVIOR\"))) {\n            behaviorBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_LOCATION\"))) {\n            locationBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_SCREEN\"))) {\n            screenBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_TIME\"))) {\n            timeBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_BEACON\"))) {\n            beaconBarrier(map, promise);\n        } else if (barrierType.equals(getAllConstants().get(\"EVENT_UPDATE_WINDOW\"))) {\n            enableUpdateWindow(map, promise);\n        }\n    }\n\n    private void addBarrier(String barrierReceiverAction, ReadableMap map, Promise promise) {\n        String method = \"updateBarrier\";\n        try {\n            if (awarenessBarrier == null) {\n                errorMessage(null, method, TAG, \"awarenessBarrier = null!\", promise);\n                return;\n            }\n\n            String barrierLabel = barrierLabelControl(map, promise);\n            if (barrierLabel == null) {\n                return;\n            }\n\n            BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();\n            BarrierUpdateRequest request = builder.addBarrier(barrierLabel, awarenessBarrier, pendingIntent).build();\n\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context)\n                .updateBarriers(request)\n                .addOnSuccessListener(aVoid -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    Log.i(TAG, \"addBarrier\");\n                    valueConvertToMap(\"Response\", \"Success\", barrierEventType + \"::\" + barrierReceiverAction, promise);\n                })\n                .addOnFailureListener(\n                    e -> errorMessage(context, method + barrierEventType + \"::\" + barrierReceiverAction, TAG,\n                        e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:addBarrier\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    private String barrierReceiverActionControl(ReadableMap map, Promise promise) {\n        String paramErr = \"wrong parameter::barrierReceiverAction\";\n        String err = \"wrong parameter::barrierReceiverAction is null\";\n\n        if (map == null || !map.hasKey(\"barrierReceiverAction\") || map.getString(\"barrierReceiverAction\") == null) {\n            Log.i(TAG, \"Err:barrierReceiverAction\");\n            errorMessage(null, \"barrier\", TAG, paramErr, promise);\n            return null;\n        }\n        String barrierReceiverAction = map.getString(\"barrierReceiverAction\");\n        if (barrierReceiverAction == null) {\n            Log.i(TAG, \"Err:barrierReceiverAction\");\n            errorMessage(null, \"barrier\", TAG, err, promise);\n            return null;\n        }\n        return barrierReceiverAction;\n    }\n\n    private String barrierLabelControl(ReadableMap map, Promise promise) {\n        String typeErr = \"wrong parameter::barrierLabel\";\n\n        if (map == null || !map.hasKey(\"barrierLabel\") || map.getString(\"barrierLabel\") == null) {\n            errorMessage(null, \"barrier\", TAG, typeErr, promise);\n            return null;\n        }\n\n        String barrierLabel = map.getString(\"barrierLabel\");\n        if (barrierLabel == null) {\n            errorMessage(null, \"barrier\", TAG, typeErr, promise);\n            return null;\n        }\n        return barrierLabel;\n    }\n\n    private void headsetBarrier(ReadableMap map, Promise promise) {\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"EVENT_HEADSET_KEEPING\"))) {\n                if (!map.hasKey(\"headsetStatus\")) {\n                    errorMessage(null, \"headsetBarrier\", TAG, wrongParams + \"::headsetStatus\", promise);\n                    return;\n                }\n                int headsetStatus = map.getInt(\"headsetStatus\");\n                awarenessBarrier = HeadsetBarrier.keeping(headsetStatus);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"EVENT_HEADSET_CONNECTING\"))) {\n                awarenessBarrier = HeadsetBarrier.connecting();\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"EVENT_HEADSET_DISCONNECTING\"))) {\n                awarenessBarrier = HeadsetBarrier.disconnecting();\n            } else {\n                errorMessage(null, \"headsetBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"headsetBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void ambientLightBarrier(ReadableMap map, Promise promise) {\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"AMBIENTLIGHT_ABOVE\"))) {\n                ambientLightBarrierAbove(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"AMBIENTLIGHT_BELOW\"))) {\n                ambientLightBarrierBelow(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"AMBIENTLIGHT_RANGE\"))) {\n                ambientLightBarrierRange(map, promise);\n            } else {\n                errorMessage(null, \"ambientLightBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void ambientLightBarrierAbove(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"minLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, wrongParams + \"::minLightIntensity\", promise);\n            return;\n        }\n        final float minLightIntensity = (float) map.getDouble(\"minLightIntensity\");\n        awarenessBarrier = AmbientLightBarrier.above(minLightIntensity);\n    }\n\n    private void ambientLightBarrierBelow(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"maxLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, wrongParams + \"::maxLightIntensity\", promise);\n            return;\n        }\n        final float maxLightIntensity = (float) map.getDouble(\"maxLightIntensity\");\n        awarenessBarrier = AmbientLightBarrier.below(maxLightIntensity);\n    }\n\n    private void ambientLightBarrierRange(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"minLightIntensity\") || !map.hasKey(\"maxLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, wrongParams + \"::maxLightIntensity or minLightIntensity\",\n                promise);\n            return;\n        }\n        final float minLightIntensity = (float) map.getDouble(\"minLightIntensity\");\n        final float maxLightIntensity = (float) map.getDouble(\"maxLightIntensity\");\n        awarenessBarrier = AmbientLightBarrier.range(minLightIntensity, maxLightIntensity);\n    }\n\n    private void wifiBarrier(ReadableMap map, Promise promise) {\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"WIFI_KEEPING\"))) {\n                wifiKeeping(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"WIFI_CONNECTING\"))) {\n                wifiConnecting(map);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"WIFI_DISCONNECTING\"))) {\n                wifiDisconnecting(map);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"WIFI_ENABLING\"))) {\n                wifiEnabling();\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"WIFI_DISABLING\"))) {\n                wifiDisabling();\n            } else {\n                errorMessage(null, \"wifiBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"wifiBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void wifiKeeping(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"wifiStatus\")) {\n            errorMessage(null, \"wifiBarrier\", TAG, wrongParams + \"::wifiStatus\", promise);\n            return;\n        }\n        int wifiStatus = map.getInt(\"wifiStatus\");\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            awarenessBarrier = WifiBarrier.keeping(wifiStatus, bssid, ssid);\n        } else {\n            awarenessBarrier = WifiBarrier.keeping(wifiStatus);\n        }\n    }\n\n    private void wifiConnecting(ReadableMap map) {\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            awarenessBarrier = WifiBarrier.connecting(bssid, ssid);\n        } else {\n            awarenessBarrier = WifiBarrier.connecting();\n        }\n    }\n\n    private void wifiDisconnecting(ReadableMap map) {\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            awarenessBarrier = WifiBarrier.disconnecting(bssid, ssid);\n        } else {\n            awarenessBarrier = WifiBarrier.disconnecting();\n        }\n    }\n\n    private void wifiEnabling() {\n        awarenessBarrier = WifiBarrier.enabling();\n    }\n\n    private void wifiDisabling() {\n        awarenessBarrier = WifiBarrier.disabling();\n    }\n\n    private void screenBarrier(ReadableMap map, Promise promise) {\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"SCREEN_KEEPING\"))) {\n                if (!map.hasKey(\"screenStatus\")) {\n                    errorMessage(null, \"screenBarrier\", TAG, wrongParams + \"::screenStatus\", promise);\n                    return;\n                }\n                int screenStatus = map.getInt(\"screenStatus\");\n                awarenessBarrier = ScreenBarrier.keeping(screenStatus);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"SCREEN_ON\"))) {\n                awarenessBarrier = ScreenBarrier.screenOn();\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"SCREEN_OFF\"))) {\n                awarenessBarrier = ScreenBarrier.screenOff();\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"SCREEN_UNLOCK\"))) {\n                awarenessBarrier = ScreenBarrier.screenUnlock();\n            } else {\n                errorMessage(null, \"screenBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"screenBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void bluetoothBarrier(ReadableMap map, Promise promise) {\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"BLUETOOTH_KEEP\"))) {\n                bluetoothKeeping(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"BLUETOOTH_CONNECTING\"))) {\n                bluetoothConnecting(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"BLUETOOTH_DISCONNECTING\"))) {\n                bluetoothDisconnecting(map, promise);\n            } else {\n                errorMessage(null, \"bluetoothBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void bluetoothKeeping(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"deviceType\") && map.hasKey(\"bluetoothStatus\")) {\n            int deviceType = map.getInt(\"deviceType\");\n            int bluetoothStatus = map.getInt(\"bluetoothStatus\");\n            awarenessBarrier = BluetoothBarrier.keep(deviceType, bluetoothStatus);\n        } else {\n            errorMessage(null, \"bluetoothBarrier\", TAG, wrongParams + \"::deviceType and bluetoothStatus\", promise);\n        }\n    }\n\n    private void bluetoothConnecting(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"deviceType\")) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, wrongParams + \"::deviceType\", promise);\n            return;\n        }\n        int deviceType = map.getInt(\"deviceType\");\n        awarenessBarrier = BluetoothBarrier.connecting(deviceType);\n    }\n\n    private void bluetoothDisconnecting(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"deviceType\")) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, wrongParams + \"::deviceType\", promise);\n            return;\n        }\n        int deviceType = map.getInt(\"deviceType\");\n        awarenessBarrier = BluetoothBarrier.disconnecting(deviceType);\n    }\n\n    private void behaviorBarrier(ReadableMap map, Promise promise) {\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (!map.hasKey(\"behaviorTypes\") || Objects.requireNonNull(map.getArray(\"behaviorTypes\")).size() == 0) {\n                errorMessage(null, \"behaviorBarrier\", TAG, wrongParams + \"::behaviorTypes\", promise);\n                return;\n            }\n\n            ReadableArray readableTypes = map.getArray(\"behaviorTypes\");\n            readableArrayConvertToIntArray(readableTypes);\n            int[] behaviorTypes = readableArrayConvertToIntArray(readableTypes);\n            if (barrierReceiverAction.equals(getAllConstants().get(\"BEHAVIOR_KEEPING\"))) {\n                awarenessBarrier = BehaviorBarrier.keeping(behaviorTypes);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"BEHAVIOR_BEGINNING\"))) {\n                awarenessBarrier = BehaviorBarrier.beginning(behaviorTypes);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"BEHAVIOR_ENDING\"))) {\n                awarenessBarrier = BehaviorBarrier.ending(behaviorTypes);\n            } else {\n                errorMessage(null, \"behaviorBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"behaviorBarrier\", TAG, e, promise);\n        }\n    }\n\n    private void locationBarrier(ReadableMap map, Promise promise) {\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"LOCATION_ENTER\"))) {\n                locationEnter(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"LOCATION_STAY\"))) {\n                locationStay(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"LOCATION_EXIT\"))) {\n                locationExit(map, promise);\n            } else {\n                errorMessage(null, \"locationBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"locationBarrier\", TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void locationEnter(ReadableMap map, Promise promise) {\n\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            awarenessBarrier = LocationBarrier.enter(latitude, longitude, radius);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, wrongParams + \"::latitude,longitude,radius\", promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void locationExit(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            awarenessBarrier = LocationBarrier.exit(latitude, longitude, radius);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, wrongParams + \"::latitude,longitude,radius\", promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void locationStay(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\") && map.hasKey(\"timeOfDuration\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            long timeOfDuration = (long) map.getDouble(\"timeOfDuration\");\n            awarenessBarrier = LocationBarrier.stay(latitude, longitude, radius, timeOfDuration);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, wrongParams + \"::latitude,longitude,radius,timeOfDuration\",\n                promise);\n        }\n    }\n\n    private void timeBarrier(ReadableMap map, Promise promise) {\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_IN_SUNRISE_OR_SUNSET_PERIOD\"))) {\n                inSunriseOrSunsetPeriod(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_PERIOD_OF_DAY\"))) {\n                duringPeriodOfDay(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_TIME_PERIOD\"))) {\n                duringTimePeriod(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_PERIOD_OF_WEEK\"))) {\n                duringPeriodOfWeek(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_IN_TIME_CATEGORY\"))) {\n                inTimeCategory(map, promise);\n            } else {\n                errorMessage(null, \"timeBarrier\", TAG, wrongParams, promise);\n                return;\n            }\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"timeBarrier\", TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void inSunriseOrSunsetPeriod(ReadableMap map, Promise promise) {\n\n        if (map.hasKey(\"startTimeOffset\") && map.hasKey(\"stopTimeOffset\") && map.hasKey(\"timeInstant\")) {\n            long startTimeOffset = (long) map.getDouble(\"startTimeOffset\");\n            long stopTimeOffset = (long) map.getDouble(\"stopTimeOffset\");\n            int timeInstant = map.getInt(\"timeInstant\");\n            awarenessBarrier = TimeBarrier.inSunriseOrSunsetPeriod(timeInstant, startTimeOffset, stopTimeOffset);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, wrongParams + \"::startTimeOffset,stopTimeOffset,timeInstant\",\n                promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void duringPeriodOfDay(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"startTimeOfDay\") && map.hasKey(\"stopTimeOfDay\")) {\n            long startTimeOfDay = (long) map.getDouble(\"startTimeOfDay\");\n            long stopTimeOfDay = (long) map.getDouble(\"stopTimeOfDay\");\n            awarenessBarrier = TimeBarrier.duringPeriodOfDay(getTimeZone(map), startTimeOfDay, stopTimeOfDay);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, wrongParams + \"::startTimeOfDay,stopTimeOfDay,timeZoneId\", promise);\n        }\n    }\n\n    private void duringTimePeriod(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"startTimeStamp\") && map.hasKey(\"stopTimeStamp\")) {\n\n            long startTimeStamp = (long) map.getDouble(\"startTimeStamp\");\n            long stopTimeStamp = (long) map.getDouble(\"stopTimeStamp\");\n            awarenessBarrier = TimeBarrier.duringTimePeriod(startTimeStamp, stopTimeStamp);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, wrongParams + \"::startTimeStamp,stopTimeStamp\", promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void duringPeriodOfWeek(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"dayOfWeek\") && map.hasKey(\"startTimeOfSpecifiedDay\") && map.hasKey(\"stopTimeOfSpecifiedDay\")) {\n\n            int dayOfWeek = map.getInt(\"dayOfWeek\");\n            long startTimeOfSpecifiedDay = (long) map.getDouble(\"startTimeOfSpecifiedDay\");\n            long stopTimeOfSpecifiedDay = (long) map.getDouble(\"stopTimeOfSpecifiedDay\");\n            awarenessBarrier = TimeBarrier.duringPeriodOfWeek(dayOfWeek, TimeZone.getDefault(), startTimeOfSpecifiedDay,\n                stopTimeOfSpecifiedDay);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG,\n                wrongParams + \"::dayOfWeek,startTimeOfSpecifiedDay,stopTimeOfSpecifiedDay\", promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void inTimeCategory(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"timeCategory\")) {\n            int timeCategory = map.getInt(\"timeCategory\");\n            awarenessBarrier = TimeBarrier.inTimeCategory(timeCategory);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, wrongParams + \"::timeCategory\", promise);\n        }\n    }\n\n    private TimeZone getTimeZone(ReadableMap map) {\n        TimeZone timeZone;\n        if (map.hasKey(\"timeZoneId\") && map.getString(\"timeZoneId\") != null) {\n            String timeZoneId = map.getString(\"timeZoneId\");\n            timeZone = TimeZone.getTimeZone(timeZoneId);\n        } else {\n            timeZone = TimeZone.getDefault();\n        }\n        return timeZone;\n    }\n\n    private void beaconBarrier(ReadableMap map, Promise promise) {\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return;\n            }\n            createBeaconBarrier(barrierReceiverAction, map, promise);\n            addBarrier(barrierReceiverAction, map, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"beaconBarrier\", TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private void createBeaconBarrier(String barrierReceiverAction, ReadableMap map, Promise promise) {\n        String method = \"beaconBarrier\";\n        if (!map.hasKey(\"beaconArray\") || map.getArray(\"beaconArray\") == null) {\n            errorMessage(null, method, TAG, wrongParams, promise);\n            return;\n        }\n        ReadableArray array = map.getArray(\"beaconArray\");\n        if (array == null) {\n            errorMessage(null, method, TAG, wrongParams, promise);\n            return;\n        }\n        int size = array.size();\n        BeaconStatus.Filter[] filters = new BeaconStatus.Filter[size];\n        for (int i = 0; i < size; i++) {\n            ReadableMap item = array.getMap(i);\n            assert item != null;\n            BeaconStatus.Filter filter = null;\n            if (item.hasKey(\"beaconId\")) {\n                String beaconId = item.getString(\"beaconId\");\n                assert beaconId != null;\n                filter = match(beaconId);\n            } else if (item.hasKey(\"namespace\") && item.hasKey(\"type\") && item.hasKey(\"content\")) {\n                String namespace = item.getString(\"namespace\");\n                String type = item.getString(\"type\");\n                String contentString = item.getString(\"content\");\n                if (contentString == null) {\n                    errorMessage(null, method, TAG, wrongParams, promise);\n                    return;\n                }\n                byte[] content = contentString.getBytes(StandardCharsets.UTF_8);\n                assert namespace != null;\n                assert type != null;\n                filter = match(namespace, type, content);\n            } else if (item.hasKey(\"namespace\") && item.hasKey(\"content\")) {\n                String namespace = item.getString(\"namespace\");\n                String type = item.getString(\"type\");\n                assert namespace != null;\n                assert type != null;\n                match(namespace, type);\n            } else {\n                errorMessage(null, method, TAG, wrongParams, promise);\n                return;\n            }\n            filters[i] = filter;\n        }\n\n        if (barrierReceiverAction.equals(getAllConstants().get(\"BEACON_DISCOVER\"))) {\n            awarenessBarrier = BeaconBarrier.discover(filters);\n        } else if (barrierReceiverAction.equals(getAllConstants().get(\"BEACON_KEEP\"))) {\n            awarenessBarrier = BeaconBarrier.keep(filters);\n        } else if (barrierReceiverAction.equals(getAllConstants().get(\"BEACON_MISSED\"))) {\n            awarenessBarrier = BeaconBarrier.missed(filters);\n        } else {\n            errorMessage(null, \"beaconBarrier\", TAG, wrongParams, promise);\n        }\n    }\n\n    private void enableUpdateWindow(ReadableMap map, Promise promise) {\n        String method = \"enableUpdateWindowWithBarrierClient\";\n        try {\n            if (map == null || !map.hasKey(\"isEnable\")) {\n                errorMessage(null, \"enableUpdateWindow\", TAG, wrongParams, promise);\n                return;\n            }\n            boolean isEnable = map.getBoolean(\"isEnable\");\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).enableUpdateWindow(isEnable);\n            HMSLogger.getInstance(context).sendSingleEvent(method);\n            valueConvertToMap(\"isEnabled\", isEnable, method, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, method, TAG, e, promise);\n        }\n    }\n\n    private Activity getCurrentActivity() {\n        return context.getCurrentActivity();\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/wrapper/AwarenessCaptureWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.wrapper;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.os.Build;\nimport android.util.Log;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.common.StandardCharsets;\n\nimport com.huawei.hms.kit.awareness.Awareness;\nimport com.huawei.hms.kit.awareness.capture.WeatherPosition;\nimport com.huawei.hms.kit.awareness.status.BeaconStatus;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\nimport com.huawei.hms.rn.awareness.utils.DataUtils;\n\nimport java.util.Objects;\n\nimport static com.huawei.hms.kit.awareness.status.BluetoothStatus.DEVICE_CAR;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\n\npublic class AwarenessCaptureWrapper {\n\n    private ReactContext context;\n\n    private String TAG = \"AwarenessCapture::\";\n\n    private String WRONG_PARAMS = \"Wrong parameter! Please check your parameters.\";\n\n    public AwarenessCaptureWrapper(ReactContext reactContext) {\n        context = reactContext;\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getBeaconStatus(ReadableMap map, Promise promise) {\n\n        String method = \"getBeaconStatus\";\n        BeaconStatus.Filter filter = null;\n        try {\n            if (map == null) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n\n            if (map.hasKey(\"beaconId\")) {\n                String beaconId = map.getString(\"beaconId\");\n                if (beaconId == null) {\n                    errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                    return;\n                }\n                filter = BeaconStatus.Filter.match(beaconId);\n            } else if (map.hasKey(\"namespace\") && map.hasKey(\"type\") && map.hasKey(\"type\")) {\n                String namespace = map.getString(\"namespace\");\n                String type = map.getString(\"type\");\n                String content = map.getString(\"content\");\n                if (namespace == null || type == null || content == null) {\n                    errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                    return;\n                }\n                filter = BeaconStatus.Filter.match(namespace, type, content.getBytes(StandardCharsets.UTF_8));\n            } else if (map.hasKey(\"namespace\") && map.hasKey(\"type\")) {\n                String namespace = map.getString(\"namespace\");\n                String type = map.getString(\"type\");\n                if (namespace == null || type == null) {\n                    errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                    return;\n                }\n                filter = BeaconStatus.Filter.match(namespace, type);\n            }\n\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getBeaconStatus(filter).addOnSuccessListener(beaconStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.beaconStatusResponseConvertToMap(beaconStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getBehavior(Promise promise) {\n\n        String method = \"getBehavior\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getBehavior().addOnSuccessListener(behaviorResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.behaviorResponseConvertToMap(behaviorResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getHeadsetStatus(Promise promise) {\n\n        String method = \"getHeadsetStatus\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getHeadsetStatus().addOnSuccessListener(headsetStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.headsetStatusResponseConvertToMap(headsetStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getLocation(Promise promise) {\n\n        String method = \"getLocation\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getLocation().addOnSuccessListener(locationResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.locationResponseConvertToMap(locationResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getCurrentLocation(Promise promise) {\n\n        String method = \"getCurrentLocation\";\n        try {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n                Awareness.getCaptureClient(context)\n                    .getCurrentLocation()\n                    .addOnSuccessListener(currentLocationResponse -> {\n                        HMSLogger.getInstance(context).sendSingleEvent(method);\n                        DataUtils.locationResponseConvertToMap(currentLocationResponse, promise);\n                    })\n                    .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n            } else {\n                String warningMessage = \"The Build SDK Version must be greater than 26\";\n                errorMessage(context, method, TAG, warningMessage, promise);\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getTimeCategories(Promise promise) {\n\n        String method = \"getTimeCategories\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getTimeCategories().addOnSuccessListener(timeCategoriesResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.timeCategoriesResponseConvertToMap(timeCategoriesResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getTimeCategoriesByUser(ReadableMap map, Promise promise) {\n        String method = \"getTimeCategoriesByUser\";\n        try {\n            if (map == null || !map.hasKey(\"latitude\") || !map.hasKey(\"longitude\")) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .getTimeCategoriesByUser(latitude, longitude)\n                .addOnSuccessListener(timeCategoriesResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.timeCategoriesResponseConvertToMap(timeCategoriesResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getTimeCategoriesByCountryCode(ReadableMap map, Promise promise) {\n        String method = \"getTimeCategoriesByCountryCode\";\n        try {\n            if (map == null || !map.hasKey(\"countryCode\")) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            String countryCode = map.getString(\"countryCode\");\n\n            if (countryCode == null || countryCode.isEmpty()) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .getTimeCategoriesByCountryCode(countryCode)\n                .addOnSuccessListener(timeCategoriesResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.timeCategoriesResponseConvertToMap(timeCategoriesResponse, promise);\n                    Log.i(TAG, \"getTimeCategoriesByIP\");\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getTimeCategoriesByIP(Promise promise) {\n\n        String method = \"getTimeCategoriesByIP\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getTimeCategoriesByIP().addOnSuccessListener(timeCategoriesResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                Log.i(TAG, \"getTimeCategoriesByCountryCode\");\n                DataUtils.timeCategoriesResponseConvertToMap(timeCategoriesResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:getTimeCategoriesByCountryCode\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getTimeCategoriesForFuture(ReadableMap map, Promise promise) {\n        String method = \"getTimeCategoriesForFuture\";\n\n        try {\n            if (map == null || !map.hasKey(\"futureTimestamp\")) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            long featureTimestamp = (long) map.getDouble(\"futureTimestamp\");\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .getTimeCategoriesForFuture(featureTimestamp)\n                .addOnSuccessListener(timeCategoriesResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    Log.i(TAG, \"getTimeCategoriesForFuture\");\n                    DataUtils.timeCategoriesResponseConvertToMap(timeCategoriesResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:getTimeCategoriesForFuture\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getLightIntensity(Promise promise) {\n        String method = \"getLightIntensity\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getLightIntensity().addOnSuccessListener(ambientLightResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.ambientLightResponseConvertToMap(ambientLightResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getWeatherByDevice(Promise promise) {\n\n        String method = \"getWeatherByDevice\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getWeatherByDevice().addOnSuccessListener(weatherStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.weatherStatusResponseConvertToMap(weatherStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    public void getWeatherByPosition(ReadableMap map, Promise promise) {\n\n        String method = \"getWeatherByPosition\";\n        try {\n            if (!hasValidKey(map, \"locale\", ReadableType.String) || !hasValidKey(map, \"city\", ReadableType.String)) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            WeatherPosition position = DataUtils.weatherPositionReqObjToWeatherPosition(map);\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .getWeatherByPosition(position)\n                .addOnSuccessListener(weatherStatusResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.weatherStatusResponseConvertToMap(weatherStatusResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getBluetoothStatus(Promise promise) {\n        String method = \"getBluetoothStatus\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .getBluetoothStatus(DEVICE_CAR)\n                .addOnSuccessListener(bluetoothStatusResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.bluetoothStatusResponseConvertToMap(bluetoothStatusResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void querySupportingCapabilities(Promise promise) {\n        String method = \"querySupportingCapabilities\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context)\n                .querySupportingCapabilities()\n                .addOnSuccessListener(capabilityResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.capabilityResponseConvertToMap(capabilityResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void enableUpdateWindow(boolean isEnable, Promise promise) {\n        String method = \"enableUpdateWindowWithCaptureClient\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).enableUpdateWindow(isEnable);\n            HMSLogger.getInstance(context).sendSingleEvent(method);\n            DataUtils.valueConvertToMap(\"isEnabled\", isEnable, method, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getScreenStatus(Promise promise) {\n        String method = \"getScreenStatus\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getScreenStatus().addOnSuccessListener(screenStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.screenStatusResponseConvertToMap(screenStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getWifiStatus(Promise promise) {\n        String method = \"getWifiStatus\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getWifiStatus().addOnSuccessListener(wifiStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.wifiStatusResponseConvertToMap(wifiStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    public void getApplicationStatus(Promise promise) {\n        String method = \"getApplicationStatus\";\n        try {\n            String packageName = context != null ? context.getPackageName() : \"\";\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(Objects.requireNonNull(context))\n                .getApplicationStatus(packageName)\n                .addOnSuccessListener(applicationStatusResponse -> {\n                    HMSLogger.getInstance(context).sendSingleEvent(method);\n                    DataUtils.applicationStatusResponseConvertToMap(applicationStatusResponse, promise);\n                })\n                .addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.Q)\n    public void getDarkModeStatus(Promise promise) {\n        String method = \"getDarkModeStatus\";\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getCaptureClient(context).getDarkModeStatus().addOnSuccessListener(darkModeStatusResponse -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                DataUtils.darkModeStatusResponseConvertToMap(darkModeStatusResponse, promise);\n            }).addOnFailureListener(e -> errorMessage(context, method, TAG, e.toString(), promise));\n        } catch (IllegalArgumentException e) {\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    private Activity getCurrentActivity() {\n        return context.getCurrentActivity();\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        if (rm == null) {\n            return false;\n        }\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/android/src/main/java/com/huawei/hms/rn/awareness/wrapper/AwarenessCombinationBarrierWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.wrapper;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.app.PendingIntent;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.common.StandardCharsets;\n\nimport com.huawei.hms.kit.awareness.Awareness;\nimport com.huawei.hms.kit.awareness.barrier.WifiBarrier;\nimport com.huawei.hms.kit.awareness.barrier.AmbientLightBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BehaviorBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BluetoothBarrier;\nimport com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;\nimport com.huawei.hms.kit.awareness.barrier.BarrierUpdateRequest;\nimport com.huawei.hms.kit.awareness.barrier.BeaconBarrier;\nimport com.huawei.hms.kit.awareness.barrier.HeadsetBarrier;\nimport com.huawei.hms.kit.awareness.barrier.LocationBarrier;\nimport com.huawei.hms.kit.awareness.barrier.ScreenBarrier;\nimport com.huawei.hms.kit.awareness.status.BeaconStatus;\nimport com.huawei.hms.rn.awareness.constants.Constants;\nimport com.huawei.hms.kit.awareness.barrier.TimeBarrier;\nimport com.huawei.hms.rn.awareness.logger.HMSLogger;\n\nimport java.util.Objects;\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.TimeZone;\n\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.valueConvertToMap;\nimport static com.huawei.hms.rn.awareness.constants.Constants.getAllConstants;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.errorMessage;\nimport static com.huawei.hms.rn.awareness.utils.DataUtils.readableArrayConvertToIntArray;\n\npublic class AwarenessCombinationBarrierWrapper {\n\n    private ReactContext context;\n\n    private PendingIntent pendingIntent;\n\n    private String TAG = \"AwarenessCombinationBarrier::\";\n\n    private String barrierLabel;\n\n    private String WRONG_PARAMS = \"Wrong parameter! Please check your parameters.\";\n\n    public AwarenessCombinationBarrierWrapper(@NonNull ReactContext reactContext, @NonNull PendingIntent intent) {\n        context = reactContext;\n        pendingIntent = intent;\n    }\n\n    public void addCombinationBarrier(String bLabel, ReadableArray array, Promise promise) {\n        String method = \"addCombinationBarrier\";\n        barrierLabel = bLabel;\n        if (array.size() == 0) {\n            errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n            return;\n        }\n        try {\n            ReadableMap map = array.getMap(0);\n            if (map == null) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            String type = map.getString(\"type\");\n            ReadableArray children = map.getArray(\"children\");\n            if (children == null || type == null) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            AwarenessBarrier awarenessBarrier = addCombinationBarrierUtil(children, new ArrayList<>(), type, promise);\n            if (awarenessBarrier == null) {\n                errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n                return;\n            }\n            buildBroadcastReceiver(awarenessBarrier, promise);\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, method, TAG, e, promise);\n        }\n    }\n\n    private AwarenessBarrier addCombinationBarrierUtil(ReadableArray array, Collection<AwarenessBarrier> coll,\n        String type, Promise promise) {\n        for (int i = 0; i < array.size(); i++) {\n            ReadableMap map = array.getMap(i);\n            if (map != null && map.hasKey(\"type\") && map.getString(\"type\") != null) {\n                if (Objects.equals(map.getString(\"type\"), \"not\")) {\n                    ReadableMap child = map.getMap(\"child\");\n                    if (child == null) {\n                        return null;\n                    }\n                    String barrierEventType = child.getString(\"barrierEventType\");\n                    AwarenessBarrier awar = getAwarenessBarrier(barrierEventType, child, promise);\n                    if (awar != null) {\n                        coll.add(AwarenessBarrier.not(awar));\n                    }\n                } else {\n                    ReadableArray children = map.getArray(\"children\");\n                    String innerType = map.getString(\"type\");\n                    if (children == null || innerType == null) {\n                        return null;\n                    }\n                    AwarenessBarrier innerCombinationBarrier = addCombinationBarrierUtil(children, new ArrayList<>(),\n                        innerType, promise);\n                    coll.add(innerCombinationBarrier);\n                }\n            } else {\n                assert map != null;\n                String barrierEventType = map.getString(\"barrierEventType\");\n                AwarenessBarrier awareness = getAwarenessBarrier(barrierEventType, map, promise);\n                coll.add(awareness);\n            }\n        }\n        if (type.equals(\"and\")) {\n            return AwarenessBarrier.and(coll);\n        } else {\n            return AwarenessBarrier.or(coll);\n        }\n    }\n\n    private AwarenessBarrier getAwarenessBarrier(String barrierEventType, ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier = null;\n\n        if (map == null || barrierEventType == null) {\n            errorMessage(null, \"updateBarrier\", TAG, \"wrong parameter\", promise);\n            return null;\n        }\n\n        if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_HEADSET\"))) {\n            awarenessBarrier = headsetBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_AMBIENTLIGHT\"))) {\n            awarenessBarrier = ambientLightBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_WIFI\"))) {\n            awarenessBarrier = wifiBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_BLUETOOTH\"))) {\n            awarenessBarrier = bluetoothBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_BEHAVIOR\"))) {\n            awarenessBarrier = behaviorBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_LOCATION\"))) {\n            awarenessBarrier = locationBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_SCREEN\"))) {\n            awarenessBarrier = screenBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_TIME\"))) {\n            awarenessBarrier = timeBarrier(map, promise);\n        } else if (barrierEventType.equals(Constants.getAllConstants().get(\"EVENT_BEACON\"))) {\n            awarenessBarrier = beaconBarrier(map, promise);\n        }\n        return awarenessBarrier;\n    }\n\n    private void buildBroadcastReceiver(@NonNull AwarenessBarrier awarenessBarrier, @NonNull Promise promise) {\n        String method = \"buildBroadcastReceiver\";\n        BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();\n        BarrierUpdateRequest request = builder.addBarrier(barrierLabel, awarenessBarrier, pendingIntent).build();\n        try {\n            HMSLogger.getInstance(context).startMethodExecutionTimer(method);\n            Awareness.getBarrierClient(context).updateBarriers(request).addOnSuccessListener(aVoid -> {\n                HMSLogger.getInstance(context).sendSingleEvent(method);\n                Log.i(TAG, \"buildBroadcastReceiver\");\n                valueConvertToMap(\"Response:\", \"Success\", \"combination barrier\", promise);\n            }).addOnFailureListener(e -> {\n                Log.i(TAG, \"Err:buildBroadcastReceiver\");\n                errorMessage(context, method, TAG, e, promise);\n            });\n        } catch (IllegalArgumentException e) {\n            Log.i(TAG, \"Err:buildBroadcastReceiver\");\n            errorMessage(context, method, TAG, e, promise);\n        }\n    }\n\n    private String barrierReceiverActionControl(ReadableMap map, Promise promise) {\n        String typeErr = \"wrong parameter::barrierReceiverAction\";\n        String nullErr = \"wrong parameter::barrierReceiverAction is null\";\n\n        if (map == null || !map.hasKey(\"barrierReceiverAction\") || map.getString(\"barrierReceiverAction\") == null) {\n            Log.i(TAG, \"Err:barrierReceiverAction-combination\");\n            errorMessage(null, \"barrier\", TAG, typeErr, promise);\n            return null;\n        }\n        String barrierReceiverAction = map.getString(\"barrierReceiverAction\");\n        if (barrierReceiverAction == null) {\n            Log.i(TAG, \"Err:barrierReceiverAction-combination\");\n            errorMessage(null, \"barrier\", TAG, nullErr, promise);\n            return null;\n        }\n        return barrierReceiverAction;\n    }\n\n    private AwarenessBarrier headsetBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"EVENT_HEADSET_KEEPING\"))) {\n                if (!map.hasKey(\"headsetStatus\")) {\n                    errorMessage(null, \"headsetBarrier\", TAG, WRONG_PARAMS + \"::headsetStatus\", promise);\n                    return null;\n                }\n                int headsetStatus = map.getInt(\"headsetStatus\");\n                awarenessBarrier = HeadsetBarrier.keeping(headsetStatus);\n                Log.i(TAG, \"CombinationBarrier-HeadsetBarrier.keeping\");\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"EVENT_HEADSET_CONNECTING\"))) {\n                awarenessBarrier = HeadsetBarrier.connecting();\n                Log.i(TAG, \"CombinationBarrier-HeadsetBarrier.connecting\");\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"EVENT_HEADSET_DISCONNECTING\"))) {\n                awarenessBarrier = HeadsetBarrier.disconnecting();\n                Log.i(TAG, \"CombinationBarrier-HeadsetBarrier.disconnecting\");\n            } else {\n                errorMessage(null, \"headsetBarrier\", TAG, WRONG_PARAMS, promise);\n                Log.i(TAG, \"Err:HeadsetBarrier\");\n                return null;\n            }\n            return awarenessBarrier;\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"headsetBarrier\", TAG, e, promise);\n            return null;\n        }\n    }\n\n    private AwarenessBarrier ambientLightBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier = null;\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"AMBIENTLIGHT_ABOVE\"))) {\n                awarenessBarrier = ambientLightBarrierAbove(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"AMBIENTLIGHT_BELOW\"))) {\n                awarenessBarrier = ambientLightBarrierBelow(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"AMBIENTLIGHT_RANGE\"))) {\n                awarenessBarrier = ambientLightBarrierRange(map, promise);\n            } else {\n                errorMessage(null, \"ambientLightBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n            return awarenessBarrier;\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, e, promise);\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier ambientLightBarrierAbove(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"minLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, WRONG_PARAMS + \"::minLightIntensity\", promise);\n            return null;\n        }\n        final float minLightIntensity = (float) map.getDouble(\"minLightIntensity\");\n        return AmbientLightBarrier.above(minLightIntensity);\n    }\n\n    private AwarenessBarrier ambientLightBarrierBelow(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"maxLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, WRONG_PARAMS + \"::maxLightIntensity\", promise);\n            return null;\n        }\n        final float maxLightIntensity = (float) map.getDouble(\"maxLightIntensity\");\n        return AmbientLightBarrier.below(maxLightIntensity);\n    }\n\n    private AwarenessBarrier ambientLightBarrierRange(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"minLightIntensity\") || !map.hasKey(\"maxLightIntensity\")) {\n            errorMessage(null, \"ambientLightBarrier\", TAG, WRONG_PARAMS + \"::maxLightIntensity or minLightIntensity\",\n                promise);\n            return null;\n        }\n        final float minLightIntensity = (float) map.getDouble(\"minLightIntensity\");\n        final float maxLightIntensity = (float) map.getDouble(\"maxLightIntensity\");\n        return AmbientLightBarrier.range(minLightIntensity, maxLightIntensity);\n    }\n\n    private AwarenessBarrier wifiBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"WIFI_KEEPING\"))) {\n                awarenessBarrier = wifiKeeping(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"WIFI_CONNECTING\"))) {\n                awarenessBarrier = wifiConnecting(map);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"WIFI_DISCONNECTING\"))) {\n                awarenessBarrier = wifiDisconnecting(map);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"WIFI_ENABLING\"))) {\n                awarenessBarrier = wifiEnabling();\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"WIFI_DISABLING\"))) {\n                awarenessBarrier = wifiDisabling();\n            } else {\n                errorMessage(null, \"wifiBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"wifiBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier wifiKeeping(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"wifiStatus\")) {\n            errorMessage(null, \"wifiBarrier\", TAG, WRONG_PARAMS + \"::wifiStatus\", promise);\n            return null;\n        }\n        AwarenessBarrier awarenessBarrier;\n        int wifiStatus = map.getInt(\"wifiStatus\");\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            awarenessBarrier = WifiBarrier.keeping(wifiStatus, bssid, ssid);\n        } else {\n            awarenessBarrier = WifiBarrier.keeping(wifiStatus);\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier wifiConnecting(ReadableMap map) {\n        AwarenessBarrier awarenessBarrier;\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            awarenessBarrier = WifiBarrier.connecting(bssid, ssid);\n        } else {\n            awarenessBarrier = WifiBarrier.connecting();\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier wifiDisconnecting(ReadableMap map) {\n        if (map.hasKey(\"bssid\") && map.hasKey(\"ssid\")) {\n            String bssid = map.getString(\"bssid\");\n            String ssid = map.getString(\"ssid\");\n            return WifiBarrier.disconnecting(bssid, ssid);\n        } else {\n            return WifiBarrier.disconnecting();\n        }\n    }\n\n    private AwarenessBarrier wifiEnabling() {\n        return WifiBarrier.enabling();\n    }\n\n    private AwarenessBarrier wifiDisabling() {\n        return WifiBarrier.disabling();\n    }\n\n    private AwarenessBarrier screenBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"SCREEN_KEEPING\"))) {\n                if (!map.hasKey(\"screenStatus\")) {\n                    errorMessage(null, \"screenBarrier\", TAG, WRONG_PARAMS + \"::screenStatus\", promise);\n                    return null;\n                }\n                int screenStatus = map.getInt(\"screenStatus\");\n                awarenessBarrier = ScreenBarrier.keeping(screenStatus);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"SCREEN_ON\"))) {\n                awarenessBarrier = ScreenBarrier.screenOn();\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"SCREEN_OFF\"))) {\n                awarenessBarrier = ScreenBarrier.screenOff();\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"SCREEN_UNLOCK\"))) {\n                awarenessBarrier = ScreenBarrier.screenUnlock();\n            } else {\n                errorMessage(null, \"screenBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"screenBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier bluetoothBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BLUETOOTH_KEEP\"))) {\n                awarenessBarrier = bluetoothKeeping(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BLUETOOTH_CONNECTING\"))) {\n                awarenessBarrier = bluetoothConnecting(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BLUETOOTH_DISCONNECTING\"))) {\n                awarenessBarrier = bluetoothDisconnecting(map, promise);\n            } else {\n                errorMessage(null, \"bluetoothBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier bluetoothKeeping(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        if (map.hasKey(\"deviceType\") && map.hasKey(\"bluetoothStatus\")) {\n            int deviceType = map.getInt(\"deviceType\");\n            int bluetoothStatus = map.getInt(\"bluetoothStatus\");\n            awarenessBarrier = BluetoothBarrier.keep(deviceType, bluetoothStatus);\n        } else {\n            errorMessage(null, \"bluetoothBarrier\", TAG, WRONG_PARAMS + \"::deviceType and bluetoothStatus\", promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier bluetoothConnecting(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"bluetoothStatus\")) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, WRONG_PARAMS + \"::bluetoothStatus\", promise);\n            return null;\n        }\n        int bluetoothStatus = map.getInt(\"bluetoothStatus\");\n        return BluetoothBarrier.connecting(bluetoothStatus);\n    }\n\n    private AwarenessBarrier bluetoothDisconnecting(ReadableMap map, Promise promise) {\n        if (!map.hasKey(\"bluetoothStatus\")) {\n            errorMessage(null, \"bluetoothBarrier\", TAG, WRONG_PARAMS + \"::bluetoothStatus\", promise);\n            return null;\n        }\n        int bluetoothStatus = map.getInt(\"bluetoothStatus\");\n        return BluetoothBarrier.disconnecting(bluetoothStatus);\n    }\n\n    private AwarenessBarrier behaviorBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (!map.hasKey(\"behaviorTypes\") || Objects.requireNonNull(map.getArray(\"behaviorTypes\")).size() == 0) {\n                errorMessage(null, \"behaviorBarrier\", TAG, WRONG_PARAMS + \"::behaviorTypes\", promise);\n                return null;\n            }\n\n            ReadableArray readableTypes = map.getArray(\"behaviorTypes\");\n            readableArrayConvertToIntArray(readableTypes);\n            int[] behaviorTypes = readableArrayConvertToIntArray(readableTypes);\n\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEHAVIOR_KEEPING\"))) {\n                awarenessBarrier = BehaviorBarrier.keeping(behaviorTypes);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEHAVIOR_BEGINNING\"))) {\n                awarenessBarrier = BehaviorBarrier.beginning(behaviorTypes);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEHAVIOR_ENDING\"))) {\n                awarenessBarrier = BehaviorBarrier.ending(behaviorTypes);\n            } else {\n                errorMessage(null, \"behaviorBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"behaviorBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private AwarenessBarrier locationBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier = null;\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"LOCATION_ENTER\"))) {\n                awarenessBarrier = locationEnter(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"LOCATION_STAY\"))) {\n                awarenessBarrier = locationStay(map, promise);\n            } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"LOCATION_EXIT\"))) {\n                awarenessBarrier = locationExit(map, promise);\n            } else {\n                errorMessage(null, \"locationBarrier\", TAG, WRONG_PARAMS, promise);\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"locationBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier locationEnter(@NonNull ReadableMap map, @NonNull Promise promise) {\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            return LocationBarrier.enter(latitude, longitude, radius);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, WRONG_PARAMS + \"::latitude,longitude,radius\", promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier locationExit(@NonNull ReadableMap map, @NonNull Promise promise) {\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            return LocationBarrier.exit(latitude, longitude, radius);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, WRONG_PARAMS + \"::latitude,longitude,radius\", promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier locationStay(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"latitude\") && map.hasKey(\"longitude\") && map.hasKey(\"radius\") && map.hasKey(\"timeOfDuration\")) {\n            double latitude = map.getDouble(\"latitude\");\n            double longitude = map.getDouble(\"longitude\");\n            double radius = map.getDouble(\"radius\");\n            long timeOfDuration = (long) map.getDouble(\"timeOfDuration\");\n            return LocationBarrier.stay(latitude, longitude, radius, timeOfDuration);\n        } else {\n            errorMessage(null, \"locationBarrier\", TAG, WRONG_PARAMS + \"::latitude,longitude,radius,timeOfDuration\",\n                promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier timeBarrier(ReadableMap map, Promise promise) {\n        AwarenessBarrier awarenessBarrier;\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_IN_SUNRISE_OR_SUNSET_PERIOD\"))) {\n                awarenessBarrier = inSunriseOrSunsetPeriod(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_PERIOD_OF_DAY\"))) {\n                awarenessBarrier = duringPeriodOfDay(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_TIME_PERIOD\"))) {\n                awarenessBarrier = duringTimePeriod(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_DURING_PERIOD_OF_WEEK\"))) {\n                awarenessBarrier = duringPeriodOfWeek(map, promise);\n            } else if (barrierReceiverAction.equals(getAllConstants().get(\"TIME_IN_TIME_CATEGORY\"))) {\n                awarenessBarrier = inTimeCategory(map, promise);\n            } else {\n                errorMessage(null, \"timeBarrier\", TAG, WRONG_PARAMS, promise);\n                return null;\n            }\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"timeBarrier\", TAG, e, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier inSunriseOrSunsetPeriod(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"startTimeOffset\") && map.hasKey(\"stopTimeOffset\") && map.hasKey(\"timeInstant\")) {\n            long startTimeOffset = (long) map.getDouble(\"startTimeOffset\");\n            long stopTimeOffset = (long) map.getDouble(\"stopTimeOffset\");\n            int timeInstant = map.getInt(\"timeInstant\");\n            return TimeBarrier.inSunriseOrSunsetPeriod(timeInstant, startTimeOffset, stopTimeOffset);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, WRONG_PARAMS + \"::startTimeOffset,stopTimeOffset,timeInstant\",\n                promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier duringPeriodOfDay(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"startTimeOfDay\") && map.hasKey(\"stopTimeOfDay\")) {\n            long startTimeOfDay = (long) map.getDouble(\"startTimeOfDay\");\n            long stopTimeOfDay = (long) map.getDouble(\"stopTimeOfDay\");\n\n            TimeZone timeZone;\n            if (map.hasKey(\"timeZoneId\") && map.getString(\"timeZoneId\") != null) {\n                String timeZoneId = map.getString(\"timeZoneId\");\n                timeZone = TimeZone.getTimeZone(timeZoneId);\n            } else {\n                timeZone = TimeZone.getDefault();\n            }\n            return TimeBarrier.duringPeriodOfDay(timeZone, startTimeOfDay, stopTimeOfDay);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, WRONG_PARAMS + \"::startTimeOfDay,stopTimeOfDay,timeZoneId\", promise);\n            return null;\n        }\n    }\n\n    private AwarenessBarrier duringTimePeriod(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"startTimeStamp\") && map.hasKey(\"stopTimeStamp\")) {\n\n            long startTimeStamp = (long) map.getDouble(\"startTimeStamp\");\n            long stopTimeStamp = (long) map.getDouble(\"stopTimeStamp\");\n            return TimeBarrier.duringTimePeriod(startTimeStamp, stopTimeStamp);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, WRONG_PARAMS + \"::startTimeStamp,stopTimeStamp\", promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier duringPeriodOfWeek(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"dayOfWeek\") && map.hasKey(\"startTimeOfSpecifiedDay\") && map.hasKey(\"stopTimeOfSpecifiedDay\")) {\n\n            int dayOfWeek = map.getInt(\"dayOfWeek\");\n            long startTimeOfSpecifiedDay = (long) map.getDouble(\"startTimeOfSpecifiedDay\");\n            long stopTimeOfSpecifiedDay = (long) map.getDouble(\"stopTimeOfSpecifiedDay\");\n            return TimeBarrier.duringPeriodOfWeek(dayOfWeek, TimeZone.getDefault(), startTimeOfSpecifiedDay,\n                stopTimeOfSpecifiedDay);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG,\n                WRONG_PARAMS + \"::dayOfWeek,startTimeOfSpecifiedDay,stopTimeOfSpecifiedDay\", promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier inTimeCategory(ReadableMap map, Promise promise) {\n        if (map.hasKey(\"timeCategory\")) {\n            int timeCategory = map.getInt(\"timeCategory\");\n            return TimeBarrier.inTimeCategory(timeCategory);\n        } else {\n            errorMessage(null, \"timeBarrier\", TAG, WRONG_PARAMS + \"::timeCategory\", promise);\n            return null;\n        }\n    }\n\n    private AwarenessBarrier beaconBarrier(ReadableMap map, Promise promise) {\n        try {\n\n            String barrierReceiverAction = barrierReceiverActionControl(map, promise);\n            if (barrierReceiverAction == null) {\n                return null;\n            }\n            return createBeaconBarrier(barrierReceiverAction, map, promise);\n\n        } catch (IllegalArgumentException e) {\n            errorMessage(null, \"beaconBarrier\", TAG, e, promise);\n            return null;\n        }\n    }\n\n    @SuppressLint(\"MissingPermission\")\n    private AwarenessBarrier createBeaconBarrier(String barrierReceiverAction, ReadableMap map, Promise promise) {\n        String method = \"beaconBarrier\";\n        if (map == null || !map.hasKey(\"beaconArray\") || map.getArray(\"beaconArray\") == null\n            || Objects.requireNonNull(map.getArray(\"beaconArray\")).size() < 0) {\n            errorMessage(null, method, TAG, WRONG_PARAMS, promise);\n            return null;\n        }\n\n        ReadableArray array = map.getArray(\"beaconArray\");\n        int size = Objects.requireNonNull(array).size();\n\n        BeaconStatus.Filter[] filters = new BeaconStatus.Filter[size];\n        for (int i = 0; i < size; i++) {\n            ReadableMap item = array.getMap(i);\n            assert item != null;\n            String namespace = item.getString(\"namespace\");\n            String type = item.getString(\"type\");\n            String content = item.getString(\"content\");\n\n            if (namespace == null || type == null || content == null) {\n                errorMessage(null, \"beaconBarrier\", TAG, WRONG_PARAMS + \"::null::nameSpace,type,content\", promise);\n                return null;\n            }\n            BeaconStatus.Filter filter = BeaconStatus.Filter.match(namespace, type,\n                content.getBytes(StandardCharsets.UTF_8));\n            filters[i] = filter;\n        }\n\n        AwarenessBarrier awarenessBarrier;\n        if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEACON_DISCOVER\"))) {\n            awarenessBarrier = BeaconBarrier.discover(filters);\n        } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEACON_KEEP\"))) {\n            awarenessBarrier = BeaconBarrier.keep(filters);\n        } else if (barrierReceiverAction.equals(Constants.getAllConstants().get(\"BEACON_MISSED\"))) {\n            awarenessBarrier = BeaconBarrier.missed(filters);\n        } else {\n            errorMessage(null, \"beaconBarrier\", TAG, WRONG_PARAMS, promise);\n            return null;\n        }\n        return awarenessBarrier;\n    }\n\n    private Activity getCurrentActivity() {\n        return context.getCurrentActivity();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-awareness/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\nagconnect-services.json\n.settings\n.project\n.classpath\n*.tgz\n*.jks\n*.keystore\npackage-lock.json\nexample/android/gradle/wrapper/gradle-wrapper.jar"
  },
  {
    "path": "react-native-hms-awareness/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  StyleSheet,\n  TouchableOpacity,\n  Text,\n  View,\n  DrawerLayoutAndroid,\n  ScrollView,\n  LogBox\n} from \"react-native\";\nimport {\n  buttonWidth,\n  ScreenWidth,\n  Page,\n  ScreenHeight,\n  captureDesc,\n  barrierDesc,\n  captureConditions,\n  barrierConditions,\n} from \"./constants/Data.js\";\nimport {\n  platinum,\n  awesomepink,\n  darkJungleGreen,\n  green,\n} from \"./constants/Colors.js\";\nimport BarrierPage from \"./components/Barrier\";\nimport CapturePage from \"./components/Capture\";\nimport { HMSLoggerModule } from \"@hmscore/react-native-hms-awareness\";\n\nLogBox.ignoreLogs(['EventEmitter']);\n\nexport default class App extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      showProgress: false,\n      drawerState: false,\n      page: Page.Capture,\n    };\n  }\n\n  async enableLogger() {\n    try {\n      var res = await HMSLoggerModule.enableLogger();\n      alert(JSON.stringify(res));\n    } catch (e) {\n      alert(JSON.stringify(e));\n    }\n  }\n\n  async disableLogger() {\n    try {\n      var res = await HMSLoggerModule.disableLogger();\n      alert(JSON.stringify(res));\n    } catch (e) {\n      alert(JSON.stringify(e));\n    }\n  }\n\n  changeSelectPage(selectPage) {\n    this.setState({ page: selectPage });\n  }\n\n  render() {\n    drawerView = (\n      <View style={styles.drawerContainer}>\n        <TouchableOpacity\n          style={styles.closeBtn}\n          onPress={() => this._drawer.closeDrawer()}\n        >\n          <Text\n            style={styles.cancelIcon}\n          >x</Text>\n        </TouchableOpacity>\n        {this.state.page == Page.Capture ? (\n          <ScrollView>\n            <Text style={styles.txt}>Awareness Capture Api</Text>\n            <Text style={styles.descTxt}>{captureDesc}</Text>\n            <Text style={styles.warning}>Warnings !</Text>\n            <Text style={styles.descTxt}>{captureConditions}</Text>\n          </ScrollView>\n        ) : (\n          <ScrollView>\n            <Text style={styles.txt}>Awareness Barrier Api</Text>\n            <Text style={styles.descTxt}>{barrierDesc}</Text>\n            <Text style={styles.warning}>Warnings !</Text>\n            <Text style={styles.descTxt}>{barrierConditions}</Text>\n          </ScrollView>\n        )}\n      </View>\n    );\n    return (\n      <DrawerLayoutAndroid\n        ref={(component) => (this._drawer = component)}\n        drawerWidth={300}\n        drawerPosition=\"right\"\n        renderNavigationView={() => drawerView}\n      >\n        <View style={styles.mainContainer}>\n          <View style={styles.header}>\n            <Text style={styles.headerTitle}>HMS Awareness Plugin</Text>\n            <TouchableOpacity\n              style={styles.logoIcon}\n              onPress={() => this._drawer.openDrawer()}\n            >\n              <Text style={styles.logoText}>{'HUAWEI >'}</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.container}>\n            {this.state.page == Page.Capture ? (\n              <CapturePage />\n            ) : (\n              <BarrierPage />\n            )}\n          </View>\n\n          <View style={styles.navigationBar}>\n            <TouchableOpacity\n              onPress={() => this.changeSelectPage(Page.Capture)}\n              style={\n                this.state.page == Page.Capture\n                  ? styles.activeButton\n                  : styles.passiveButton\n              }\n            >\n              <Text style={styles.txt}>Capture</Text>\n              <Text style={styles.captureLogoTxt}>{'| o |'}</Text>\n\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              onPress={() => this.changeSelectPage(Page.Barrier)}\n              style={\n                this.state.page == Page.Barrier\n                  ? styles.activeButton2\n                  : styles.passiveButton2\n              }\n            >\n              <Text style={styles.txt}>Barrier</Text>\n            \n              <Text style={styles.barrierLogoTxt}>{'//////'}</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </DrawerLayoutAndroid>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  mainContainer: {\n    flex: 1,\n    backgroundColor: platinum,\n    borderColor: darkJungleGreen,\n    borderWidth: 1,\n    height: 110,\n  },\n  drawerContainer: {\n    flex: 1,\n    paddingTop: 30,\n    backgroundColor: \"gray\",\n    padding: 8,\n  },\n  container: {\n    flex: 1,\n    justifyContent: \"center\",\n    height: ScreenHeight - 160,\n    paddingBottom: 50,\n    alignSelf: \"center\",\n    width: ScreenWidth,\n  },\n  header: {\n    backgroundColor: \"black\",\n    height: 100,\n    width: ScreenWidth,\n    flexDirection: \"row\",\n    borderBottomColor: platinum,\n    borderBottomWidth: 1,\n  },\n  headerTitle: {\n    fontSize: 22,\n    fontWeight: \"bold\",\n    color: platinum,\n    flex: 1.1,\n    alignSelf: \"center\",\n    marginLeft: 20,\n  },\n  logoText: {\n    fontSize: 17,\n    fontWeight: \"bold\",\n    alignSelf: 'center',\n    color: green,\n    textDecorationLine: 'underline',\n    fontVariant: ['small-caps'],\n    textDecorationStyle: \"dotted\",\n    fontStyle: 'italic'\n  },\n  captureLogoTxt: {\n    fontSize: 22,\n    marginTop: 13,\n    fontWeight: \"bold\",\n    textAlignVertical: 'center',\n    color: platinum,\n    marginLeft: 50,\n    height: 35,\n    paddingBottom: 8,\n    textDecorationStyle: \"dotted\",\n    borderTopColor: platinum,\n    borderTopWidth: 2,\n    borderBottomColor: platinum,\n    borderBottomWidth: 2,\n  },\n  barrierLogoTxt: {\n    fontSize: 25,\n    position:'absolute',\n    fontWeight:\"bold\",\n    right:20,\n    overflow:'hidden',\n    color: platinum,\n    textAlign:'center',\n    alignSelf:'center',\n    textDecorationLine:'line-through',\n    textDecorationStyle:'dashed',\n    textDecorationColor:platinum,\n  },\n  txt: {\n    fontSize: 19,\n    color: platinum,\n    alignSelf: \"center\",\n    marginLeft: 20,\n    fontWeight: \"bold\",\n  },\n  warning: {\n    fontSize: 18,\n    color: \"yellow\",\n    marginLeft: 15,\n    marginTop: 15,\n    fontWeight: \"bold\",\n  },\n  title: {\n    fontSize: 18,\n    color: awesomepink,\n    width: buttonWidth,\n    alignSelf: \"center\",\n    borderBottomColor: awesomepink,\n    borderBottomWidth: 0.7,\n    textAlign: \"center\",\n    marginTop: 30,\n  },\n  navigationBar: {\n    width: ScreenWidth,\n    position: \"absolute\",\n    bottom: 0,\n    height: 55,\n    justifyContent: \"center\",\n    flexDirection: \"row\",\n    borderWidth: 1,\n    zIndex: 50,\n    backgroundColor: darkJungleGreen,\n  },\n  activeButton: {\n    flex: 1,\n    backgroundColor: green,\n    flexDirection: \"row\",\n    opacity: 1,\n    height: 55,\n    borderRightColor: darkJungleGreen,\n    borderRightWidth: 1,\n  },\n  passiveButton: {\n    flex: 1,\n    height: 55,\n    backgroundColor: darkJungleGreen,\n    flexDirection: \"row\",\n    borderRightColor: darkJungleGreen,\n    borderRightWidth: 1,\n  },\n  activeButton2: {\n    flex: 1,\n    height: 55,\n    backgroundColor: green,\n    flexDirection: \"row\",\n    opacity: 1,\n  },\n  passiveButton2: {\n    flex: 1,\n    height: 55,\n    backgroundColor: darkJungleGreen,\n    flexDirection: \"row\",\n  },\n  logoIcon: {\n    width: 95,\n    height: 95,\n    justifyContent: 'center'\n  },\n  icon: {\n    width: 30,\n    height: 30,\n    right: 20,\n    position: \"absolute\",\n    alignSelf: \"center\",\n  },\n  cancelIcon: {\n    width: 30,\n    height: 30,\n    marginLeft: 5,\n    fontSize: 20,\n    color: awesomepink,\n    borderRadius: 30,\n    borderWidth: 2,\n    borderColor: awesomepink,\n    textAlign: 'center'\n  },\n  descTxt: {\n    padding: 10,\n    color: platinum,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-awareness/example/README.md",
    "content": "# React-Native HMS DTM - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native DTM Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS DTM - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        enableHermes: false,\n        entryFile   : \"index.js\"\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false)\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility = 1.8\n        targetCompatibility = 1.8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\"\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"29\" tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.awareness.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" />\n    <uses-permission android:name=\"com.huawei.hms.permission.ACTIVITY_RECOGNITION\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n\n    <application\n        android:name=\".MainApplication\"\n        android:allowBackup=\"false\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"RNHMSAwareness Demo\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:theme=\"@style/AppTheme\">\n        <activity\n            android:name=\".MainActivity\"\n            android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n            android:label=\"RNHMSAwareness Demo\"\n            android:launchMode=\"singleTask\"\n            android:exported=\"true\"\n            android:screenOrientation=\"portrait\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n\n        <receiver\n            android:name=\"com.huawei.hms.rn.awareness.utils.BackgroundBarrierReceiver\"\n            android:enabled=\"true\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"com.huawei.hms.rn.awareness.modules.ReceiverAction\" />\n            </intent-filter>\n        </receiver>\n        <service android:name=\"com.huawei.hms.rn.awareness.utils.TaskService\" />\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/src/main/java/com/huawei/hms/rn/awareness/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHMSAwareness Demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/src/main/java/com/huawei/hms/rn/awareness/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.awareness.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\nimport com.huawei.hms.rn.awareness.BuildConfig;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}"
  },
  {
    "path": "react-native-hms-awareness/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 24\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-awareness/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHMSAwareness Demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-awareness/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-awareness/example/components/Barrier.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  StyleSheet,\n  TouchableOpacity,\n  Text,\n  View,\n  ActivityIndicator,\n  ScrollView,\n  ToastAndroid,\n} from \"react-native\";\n\nimport { platinum, darkJungleGreen, green } from \"../constants/Colors.js\";\nimport {\n  ScreenWidth,\n  ScreenHeight,\n  buttonWidth,\n  buttonHeight,\n  eventEmitter,\n} from \"../constants/Data.js\";\nimport { HMSAwarenessBarrierModule } from \"@hmscore/react-native-hms-awareness\";\nimport UpdateBarrier from \"./UpdateBarrier\";\n\nexport default class App extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      showProgress: false,\n      barrierList: [],\n      receiverMessage: \"\",\n    };\n  }\n\n  /**\n   * map: Object\n   * barriersReceiver fetches information when recorded barriers are triggered.\n   */\n  componentDidMount() {\n    eventEmitter.addListener(\"barrierReceiver\", (map) => {\n      let status = `${map.presentStatusName}`;\n      let eventType = `${map.barrierLabel}`;\n\n      this.setState({\n        receiverMessage: `${eventType} - ${status}`,\n      });\n      console.log(`Barrier Receiver: ${eventType} - ${status}`);\n    });\n  }\n\n  changeStateProgress(isProgressShowing) {\n    this.setState({ showProgress: isProgressShowing });\n  }\n\n  async setBackgroundNotification() {\n    try {\n      this.changeStateProgress(true);\n\n      const notificationReq = {\n        contentTitle: \"Custom title\",\n        contentText: \"Custom text\",\n        type: \"mipmap\",\n        resourceName: \"ic_launcher\"\n      }\n\n      var res = await HMSAwarenessBarrierModule.setBackgroundNotification(notificationReq);\n      this.changeStateProgress(false);\n      alert(JSON.stringify(res));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n\n  /**\n   * @param  QueryBarrierReq : Object\n   * Returns the registered barriers and their properties in the array.\n   */\n  async queryBarrier() {\n    try {\n      this.changeStateProgress(true);\n      this.setState({ receiverMessage: \"\" });\n      const QueryBarrierReq = [\n        \"headset connecting barrier\",\n        \"headset disconnecting barrier\",\n        \"light above barrier\",\n        \"wifi keeping with bssid barrier\",\n        \"wifi keeping barrier\",\n      ];\n      var res = await HMSAwarenessBarrierModule.queryBarrier(QueryBarrierReq);\n      this.changeStateProgress(false);\n      alert(JSON.stringify(res));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Returns all added barriers and their attributes.\n   */\n  async queryAllBarrier() {\n    try {\n      this.changeStateProgress(true);\n      this.setState({ receiverMessage: \"\" });\n      var BarrierQueryResponse = await HMSAwarenessBarrierModule.queryAllBarrier();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(BarrierQueryResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * @param DeleteBarrierReq : Object\n   * This method removes barrier labels in the array.\n   */\n  async deleteBarrier() {\n    try {\n      this.changeStateProgress(true);\n      this.setState({ receiverMessage: \"\" });\n      const DeleteBarrierReq = [\n        \"headset keeping barrier\",\n        \"wifi keeping barrier\",\n      ];\n      var BarrierDeleteRes = await HMSAwarenessBarrierModule.deleteBarrier(\n        DeleteBarrierReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(BarrierDeleteRes));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * This method deletes all registered barriers.\n   */\n  async deleteAllBarrier() {\n    try {\n      this.changeStateProgress(true);\n      this.setState({ receiverMessage: \"\" });\n      var AllBarrierDeleteRes = await HMSAwarenessBarrierModule.deleteAllBarrier();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(AllBarrierDeleteRes));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * @param CombinationBarrierReq : Object\n   * You can create a combination of barriers using \"and\", \"or\" and \"not\".\n   * You can listen to different awareness features with a single barrier.\n   */\n  async combinationBarrier() {\n    try {\n      this.changeStateProgress(true);\n      this.setState({ receiverMessage: \"\" });\n      const barrierLabel = \"Combination Barrier\";\n\n      //Ambient Light Barrier\n      const lightReceiverAction = HMSAwarenessBarrierModule.AMBIENTLIGHT_ABOVE;\n      const minLightIntensity = 1000.0;\n      const lightBarrier = {\n        barrierReceiverAction: lightReceiverAction,\n        minLightIntensity: minLightIntensity,\n        barrierEventType: HMSAwarenessBarrierModule.EVENT_AMBIENTLIGHT,\n      };\n\n      //Screen Barrier\n      const barrierReceiverAction = HMSAwarenessBarrierModule.SCREEN_KEEPING;\n      const screenStatus = HMSAwarenessBarrierModule.ScreenStatus_UNLOCK;\n      const screenBarrier = {\n        barrierReceiverAction: barrierReceiverAction,\n        screenStatus: screenStatus,\n        barrierEventType: HMSAwarenessBarrierModule.EVENT_SCREEN,\n      };\n\n      //Headset barrier\n      const headsetReceiverAction =\n        HMSAwarenessBarrierModule.EVENT_HEADSET_KEEPING;\n      const headsetStatus = HMSAwarenessBarrierModule.HeadsetStatus_CONNECTED;\n      const headsetBarrier = {\n        barrierReceiverAction: headsetReceiverAction,\n        headsetStatus: headsetStatus,\n        barrierEventType: HMSAwarenessBarrierModule.EVENT_HEADSET,\n      };\n\n      const notObject = {\n        type: HMSAwarenessBarrierModule.BARRIER_TYPE_NOT,\n        child: screenBarrier,\n      };\n\n      const andChildren = [];\n      andChildren.push(headsetBarrier);\n      andChildren.push(notObject);\n\n      const andObject = {\n        type: HMSAwarenessBarrierModule.BARRIER_TYPE_AND,\n        children: andChildren,\n      };\n\n      const orChildren = [];\n      orChildren.push(lightBarrier);\n      orChildren.push(andObject);\n\n      const orObject = {\n        type: HMSAwarenessBarrierModule.BARRIER_TYPE_OR,\n        children: orChildren,\n      };\n      const CombinationBarrierReq = [];\n      CombinationBarrierReq.push(orObject);\n\n      var CombiantionBarrierRes = await HMSAwarenessBarrierModule.combinationBarrier(\n        barrierLabel,\n        CombinationBarrierReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(CombiantionBarrierRes));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.barrierContainer}>\n        {this.state.showProgress ? (\n          <View style={styles.disableOverlayBarrier}>\n            <ActivityIndicator\n              size={\"large\"}\n              color={green}\n              style={styles.activityIndicatorBarrier}\n            />\n          </View>\n        ) : null}\n\n        <ScrollView nestedScrollEnabled={true} style={styles.scrollViewBarrier}>\n          <View style={styles.innerContainer}>\n            <Text style={styles.titleBarrier}>Combination Barrier</Text>\n\n            <TouchableOpacity\n              style={styles.barrierBtn}\n              onPress={() => this.combinationBarrier()}\n            >\n              <Text style={styles.txt}>Combination Barrier</Text>\n            </TouchableOpacity>\n\n            <Text style={styles.titleBarrier}>Query Barrier</Text>\n\n            <TouchableOpacity\n              style={styles.barrierBtn}\n              onPress={() => this.queryBarrier()}\n            >\n              <Text style={styles.txt}>Query Barrier</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.barrierBtn}\n              onPress={() => this.queryAllBarrier()}\n            >\n              <Text style={styles.txt}>Query Barrier All</Text>\n            </TouchableOpacity>\n\n            <Text style={styles.titleBarrier}>Update Barrier</Text>\n\n            <UpdateBarrier\n              changeStateProgress={(state) => this.changeStateProgress(state)}\n            />\n\n            <Text style={styles.titleBarrier}>Delete Barrier</Text>\n\n            <TouchableOpacity style={styles.barrierBtn}>\n              <Text style={styles.txt}>Delete All Barrier</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.barrierBtn}\n              onPress={() => this.deleteBarrier()}>\n              <Text style={styles.txt}>Delete Barrier (Or Barriers)</Text>\n            </TouchableOpacity>\n\n            <View style={styles.receiverMeesageView}>\n              <Text style={[styles.titleReceiverMessage, { color: \"red\" }]}>\n                {\" \"}\n                Receiver Message\n              </Text>\n              <Text style={styles.txt}>{this.state.receiverMessage}</Text>\n            </View>\n          </View>\n        </ScrollView>\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  barrierContainer: {\n    flex: 1,\n    backgroundColor: platinum,\n    borderColor: darkJungleGreen,\n    borderWidth: 1,\n  },\n  disableOverlayBarrier: {\n    zIndex: 10,\n    backgroundColor: \"gray\",\n    opacity: 0.8,\n    position: \"absolute\",\n    width: ScreenWidth,\n    height: ScreenHeight,\n  },\n  activityIndicatorBarrier: {\n    top: ScreenHeight / 3,\n    alignSelf: \"center\",\n    position: \"absolute\",\n    zIndex: 11,\n  },\n  scrollViewBarrier: {\n    flex: 1,\n  },\n  innerContainer: {\n    flex: 1,\n    justifyContent: \"center\",\n    paddingBottom: 50,\n    alignSelf: \"center\",\n  },\n  titleBarrier: {\n    color: green,\n    fontSize: 18,\n    fontStyle: \"italic\",\n    fontWeight: \"bold\",\n    marginTop: 20,\n  },\n  barrierBtn: {\n    borderRadius: 10,\n    marginLeft: 5,\n    marginRight: 5,\n    marginTop: 16,\n    width: buttonWidth,\n    height: buttonHeight,\n    justifyContent: \"center\",\n    alignSelf: \"center\",\n    borderColor: darkJungleGreen,\n    borderWidth: 1.4,\n  },\n  txt: {\n    fontSize: 14.5,\n    color: darkJungleGreen,\n    textAlign: \"center\",\n  },\n  receiverMeesageView: {\n    width: buttonWidth,\n    marginTop: 10,\n  },\n  titleReceiverMessage: {\n    fontSize: 14,\n    color: darkJungleGreen,\n    textAlign: \"center\",\n    borderBottomColor: \"red\",\n    borderBottomWidth: 0.6,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-awareness/example/components/Capture.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  StyleSheet,\n  TouchableOpacity,\n  Text,\n  View,\n  ActivityIndicator,\n  ScrollView,\n} from \"react-native\";\n\nimport { platinum, darkJungleGreen, green } from \"../constants/Colors.js\";\nimport {\n  ScreenWidth,\n  ScreenHeight,\n  buttonWidth,\n  buttonHeight,\n} from \"../constants/Data.js\";\n\nimport { HMSAwarenessCaptureModule } from \"@hmscore/react-native-hms-awareness\";\n\nexport default class Capture extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      showProgress: false,\n      drawerState: false,\n    };\n  }\n\n  changeStateProgress(isProgressShowing) {\n    this.setState({ showProgress: isProgressShowing });\n  }\n\n  /**\n   * @param  BeaconStatusReq : Object\n   * Uses a variable number of the filters parameters to obtain beacon information.\n   * Try it out with a beacon device registered on App Gallery Connect.\n   */\n  async getBeaconStatus() {\n    try {\n      this.changeStateProgress(true);\n      const BeaconStatusReq = {\n        namespace: \"dev736430079244559178\",\n        type: \"ibeacon\",\n        content: \"content\",\n      };\n      var BeaconStatusResponse = await HMSAwarenessCaptureModule.getBeaconStatus(\n        BeaconStatusReq\n      );\n      alert(JSON.stringify(BeaconStatusResponse));\n      this.changeStateProgress(false);\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains current user behavior, for example, running, walking, cycling, or driving.\n   */\n  async getBehavior() {\n    try {\n      this.changeStateProgress(true);\n      var BehaviorResponse = await HMSAwarenessCaptureModule.getBehavior();\n      alert(JSON.stringify(BehaviorResponse));\n      this.changeStateProgress(false);\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains headset connection status.\n   */\n  async getHeadsetStatus() {\n    try {\n      this.changeStateProgress(true);\n      var HeadsetStatusResponse = await HMSAwarenessCaptureModule.getHeadsetStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(HeadsetStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Re-obtains the latest device location information (latitude and longitude).\n   */\n  async getLocation() {\n    try {\n      this.changeStateProgress(true);\n      var LocationResponse = await HMSAwarenessCaptureModule.getLocation();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(LocationResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the current location (latitude and longitude) of a device.\n   */\n  async getCurrentLocation() {\n    try {\n      this.changeStateProgress(true);\n      var LocationResponse = await HMSAwarenessCaptureModule.getCurrentLocation();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(LocationResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the current time.\n   */\n  async getTimeCategories() {\n    try {\n      this.changeStateProgress(true);\n      var TimeCategoriesResponse = await HMSAwarenessCaptureModule.getTimeCategories();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(TimeCategoriesResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * TimeCategoriesByUserReq : Object\n   * Obtains the current time of a specified location.\n   */\n  async getTimeCategoriesByUser() {\n    try {\n      this.changeStateProgress(true);\n      const TimeCategoriesByUserReq = {\n        latitude: 36.314909917631724,\n        longitude: 30.166312199567606,\n      };\n      var TimeCategoriesResponse = await HMSAwarenessCaptureModule.getTimeCategoriesByUser(\n        TimeCategoriesByUserReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(TimeCategoriesResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * @param  TimeCategoriesByCountryCode : Object\n   * Obtains the current time by country/region code that complies with ISO 3166-1 alpha-2.\n   */\n  async getTimeCategoriesByCountryCode() {\n    try {\n      this.changeStateProgress(true);\n      const TimeCategoriesByCountryCodeReq = {\n        countryCode: \"TR\",\n      };\n\n      var TimeCategoriesResponse = await HMSAwarenessCaptureModule.getTimeCategoriesByCountryCode(\n        TimeCategoriesByCountryCodeReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(TimeCategoriesResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the current time by IP address.\n   */\n  async getTimeCategoriesByIP() {\n    try {\n      this.changeStateProgress(true);\n      var TimeCategoriesResponse = await HMSAwarenessCaptureModule.getTimeCategoriesByIP();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(TimeCategoriesResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the time of a specified date by IP address.\n   */\n  async getTimeCategoriesForFuture() {\n    try {\n      this.changeStateProgress(true);\n      const TimeCategoriesForFutureReq = {\n        futureTimestamp: 1606906743000.0,\n      };\n      var TimeCategoriesResponse = await HMSAwarenessCaptureModule.getTimeCategoriesForFuture(\n        TimeCategoriesForFutureReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(TimeCategoriesResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the illuminance.\n   */\n  async getLightIntensity() {\n    try {\n      this.changeStateProgress(true);\n      var AmbientLightResponse = await HMSAwarenessCaptureModule.getLightIntensity();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(AmbientLightResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the weather of the current location of a device.\n   */\n  async getWeatherByDevice() {\n    try {\n      this.changeStateProgress(true);\n      var WeatherStatusResponse = await HMSAwarenessCaptureModule.getWeatherByDevice();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(WeatherStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the weather status response by IP address.\n   */\n  async getWeatherByPosition() {\n    try {\n      this.changeStateProgress(true);\n      const WeatherByPositionReq = {\n        city: \"London\",\n        locale: \"en_GB\",\n        country: \"United Kingdom\",\n        province: \"London\",\n      };\n      var WeatherStatusResponse = await HMSAwarenessCaptureModule.getWeatherByPosition(\n        WeatherByPositionReq\n      );\n      this.changeStateProgress(false);\n      alert(JSON.stringify(WeatherStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the Bluetooth connection status.\n   */\n  async getBluetoothStatus() {\n    try {\n      this.changeStateProgress(true);\n      var BluetoothStatusResponse = await HMSAwarenessCaptureModule.getBluetoothStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(BluetoothStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains capabilities supported by Awareness Kit on the current device.\n   */\n  async querySupportingCapabilities() {\n    try {\n      this.changeStateProgress(true);\n      var CapabilityResponse = await HMSAwarenessCaptureModule.querySupportingCapabilities();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(CapabilityResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the screen status response of a device.\n   */\n  async getScreenStatus() {\n    try {\n      this.changeStateProgress(true);\n      var ScreenStatusResponse = await HMSAwarenessCaptureModule.getScreenStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(ScreenStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the Wi-Fi connection status of a device.\n   */\n  async getWifiStatus() {\n    try {\n      this.changeStateProgress(true);\n      var WifiStatusResponse = await HMSAwarenessCaptureModule.getWifiStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(WifiStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the app status of a device.\n   */\n  async getApplicationStatus() {\n    try {\n      this.changeStateProgress(true);\n      var ApplicationStatusResponse = await HMSAwarenessCaptureModule.getApplicationStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(ApplicationStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Obtains the dark mode status of a device.\n   */\n  async getDarkModeStatus() {\n    try {\n      this.changeStateProgress(true);\n      var DarkModeStatusResponse = await HMSAwarenessCaptureModule.getDarkModeStatus();\n      this.changeStateProgress(false);\n      alert(JSON.stringify(DarkModeStatusResponse));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  /**\n   * Indicates whether to display a dialog box before Awareness Kit or HMS Core (APK) starts an upgrade in your app.\n   */\n  async enableUpdateWindow() {\n    try {\n      this.changeStateProgress(true);\n      const isEnabled = true;\n      var res = await HMSAwarenessCaptureModule.enableUpdateWindow(isEnabled);\n      this.changeStateProgress(false);\n      alert(JSON.stringify(res));\n    } catch (e) {\n      this.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.captureContainer}>\n        {this.state.showProgress ? (\n          <View style={styles.disableOverlay}>\n            <ActivityIndicator\n              size={\"large\"}\n              color={darkJungleGreen}\n              style={styles.activityIndicator}\n            />\n          </View>\n        ) : null}\n\n        <ScrollView style={styles.scrollView}>\n          <View style={styles.container}>\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.querySupportingCapabilities()}\n            >\n              <Text style={styles.txt}>querySupportingCapabilities</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getBeaconStatus()}\n            >\n              <Text style={styles.txt}>getBeaconStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getBehavior()}\n            >\n              <Text style={styles.txt}>getBehavior</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getHeadsetStatus()}\n            >\n              <Text style={styles.txt}>getHeadsetStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getLocation()}\n            >\n              <Text style={styles.txt}>getLocation</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getCurrentLocation()}\n            >\n              <Text style={styles.txt}>getCurrentLocation</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getTimeCategories()}\n            >\n              <Text style={styles.txt}>getTimeCategories</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getTimeCategoriesByUser()}\n            >\n              <Text style={styles.txt}>getTimeCategoriesByUser</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getTimeCategoriesByCountryCode()}\n            >\n              <Text style={styles.txt}>getTimeCategoriesByCountryCode</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getTimeCategoriesByIP()}\n            >\n              <Text style={styles.txt}>getTimeCategoriesByIP</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getTimeCategoriesForFuture()}\n            >\n              <Text style={styles.txt}>getTimeCategoriesForFuture</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getLightIntensity()}\n            >\n              <Text style={styles.txt}>getLightIntensity</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getWeatherByDevice()}\n            >\n              <Text style={styles.txt}>getWeatherByDevice</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getWeatherByPosition()}\n            >\n              <Text style={styles.txt}>getWeatherByPosition</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getBluetoothStatus()}\n            >\n              <Text style={styles.txt}>getBluetoothStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.enableUpdateWindow()}\n            >\n              <Text style={styles.txt}>enableUpdateWindow</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getScreenStatus()}\n            >\n              <Text style={styles.txt}>getScreenStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getWifiStatus()}\n            >\n              <Text style={styles.txt}>getWifiStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getApplicationStatus()}\n            >\n              <Text style={styles.txt}>getApplicationStatus</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.captureBtn}\n              onPress={() => this.getDarkModeStatus()}\n            >\n              <Text style={styles.txt}>getDarkModeStatus</Text>\n            </TouchableOpacity>\n          </View>\n        </ScrollView>\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  captureContainer: {\n    flex: 1,\n    backgroundColor: \"white\",\n    borderColor: darkJungleGreen,\n    borderWidth: 1,\n  },\n  disableOverlay: {\n    zIndex: 10,\n    backgroundColor: \"gray\",\n    opacity: 0.8,\n    position: \"absolute\",\n    width: ScreenWidth,\n    height: ScreenHeight,\n  },\n  activityIndicator: {\n    top: 100,\n    alignSelf: \"center\",\n    position: \"absolute\",\n    zIndex: 11,\n  },\n  scrollView: {\n    flex: 1,\n  },\n  container: {\n    flex: 1,\n    justifyContent: \"center\",\n    paddingBottom: 50,\n    alignSelf: \"center\",\n  },\n  captureBtn: {\n    marginTop: 15,\n    width: buttonWidth,\n    height: buttonHeight,\n    justifyContent: \"center\",\n    alignSelf: \"center\",\n    borderRadius: 10,\n    marginLeft: 5,\n    marginRight: 5,\n    borderColor: darkJungleGreen,\n    borderWidth: 1.5,\n  },\n  txt: {\n    fontSize: 14,\n    color: green,\n    textAlign: \"center\",\n  },\n});\n"
  },
  {
    "path": "react-native-hms-awareness/example/components/UpdateBarrier.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { StyleSheet, TouchableOpacity, Text, View } from \"react-native\";\n\nimport { darkJungleGreen, green } from \"../constants/Colors\";\nimport {\n  buttonWidth,\n  buttonHeight,\n  AmbientLightTypes,\n  BeaconTypes,\n  BehaviorTypes,\n  BluetoothTypes,\n  HeadsetTypes,\n  LocationTypes,\n  ScreenTypes,\n  TimeTypes,\n  WifiTypes,\n} from \"../constants/Data.js\";\nimport { HMSAwarenessBarrierModule } from \"@hmscore/react-native-hms-awareness\";\n\nconst ssid = \"TTNET_AirTies_Air5650_5353\";\nconst bssid = \"18:28:61:f8:99:05\";\n\nexport default class BaseComponent extends React.Component {\n  async ambientLightBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var AmbientLightBarrierReq;\n\n      switch (type) {\n        case AmbientLightTypes.ABOVE: {\n          const AmbientLightAboveReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.AMBIENTLIGHT_ABOVE,\n            minLightIntensity: 500.0,\n            barrierLabel: \"light above barrier\",\n          };\n          AmbientLightBarrierReq = AmbientLightAboveReq;\n          break;\n        }\n        case AmbientLightTypes.BELOW: {\n          const AmbientLightBelowReq = {\n            barrierReceiverAction:  HMSAwarenessBarrierModule.AMBIENTLIGHT_BELOW,\n            barrierLabel: \"light below barrier\",\n            maxLightIntensity: 2500.0,\n          };\n          AmbientLightBarrierReq = AmbientLightBelowReq;\n          break;\n        }\n        case AmbientLightTypes.RANGE: {\n          const AmbientLightRangeReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.AMBIENTLIGHT_RANGE,\n            barrierLabel: \"light range barrier\",\n            minLightIntensity: 500.0,\n            maxLightIntensity: 2500.0,\n          };\n          AmbientLightBarrierReq = AmbientLightRangeReq;\n          break;\n        }\n      }\n      const UpdateBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_AMBIENTLIGHT,\n        AmbientLightBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(UpdateBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async beaconBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var BeaconBarrierReq;\n\n      const beaconArray = [\n        {\n          namespace: \"dev736430079244559178\",\n          type: \"ibeacon\",\n          content: \"content\",\n        },\n        {\n          namespace: \"dev736430079244559179\",\n          type: \"ibeacon\",\n          content: \"content2\",\n        },\n      ];\n\n      switch (type) {\n        case BeaconTypes.DISCOVER: {\n          const BeaconDiscoverReq = {\n            barrierReceiverAction:  HMSAwarenessBarrierModule.BEACON_DISCOVER,\n            beaconArray: beaconArray,\n            barrierLabel: \"discover beacon barrier\",\n          };\n          BeaconBarrierReq = BeaconDiscoverReq;\n          break;\n        }\n        case BeaconTypes.KEEP: {\n          const BeaconKeepReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BEACON_KEEP,\n            beaconArray: beaconArray,\n            barrierLabel: \"keep beacon barrier\",\n          };\n          BeaconBarrierReq = BeaconKeepReq;\n          break;\n        }\n        case BeaconTypes.MISSED: {\n          const BeaconMissedReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BEACON_MISSED,\n            beaconArray: beaconArray,\n            barrierLabel: \"missed beacon barrier\",\n          };\n          BeaconBarrierReq = BeaconMissedReq;\n          break;\n        }\n      }\n\n      const UpdateBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_BEACON,\n        BeaconBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(UpdateBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async behaviorBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var BehaviorBarrierReq;\n\n      switch (type) {\n        case BehaviorTypes.KEEPING: {\n          const behaviorTypes = [];\n          behaviorTypes.push(\n            HMSAwarenessBarrierModule.BehaviorBarrier_BEHAVIOR_STILL\n          );\n          const BehaviorKeepingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BEHAVIOR_KEEPING,\n            behaviorTypes: behaviorTypes,\n            barrierLabel: \"behavior keeping barrier\",\n          };\n          BehaviorBarrierReq = BehaviorKeepingReq;\n          break;\n        }\n        case BehaviorTypes.BEGINNING: {\n          const behaviorTypes = [];\n          behaviorTypes.push(\n            HMSAwarenessBarrierModule.BehaviorBarrier_BEHAVIOR_WALKING\n          );\n          behaviorTypes.push(\n            HMSAwarenessBarrierModule.BehaviorBarrier_BEHAVIOR_RUNNING\n          );\n          const BehaviorBeginningReq = {\n            barrierReceiverAction:  HMSAwarenessBarrierModule.BEHAVIOR_BEGINNING,\n            behaviorTypes: behaviorTypes,\n            barrierLabel: \"behavior beginning barrier\",\n          };\n          BehaviorBarrierReq = BehaviorBeginningReq;\n          break;\n        }\n        case BehaviorTypes.ENDING: {\n          const behaviorTypes = [];\n          behaviorTypes.push(\n            HMSAwarenessBarrierModule.BehaviorBarrier_BEHAVIOR_WALKING\n          );\n          const BehaviorEndingReq = {\n            barrierReceiverAction:  HMSAwarenessBarrierModule.BEHAVIOR_ENDING,\n            behaviorTypes: behaviorTypes,\n            barrierLabel: \"behavior ending barrier\",\n          };\n          BehaviorBarrierReq = BehaviorEndingReq;\n          break;\n        }\n      }\n\n      const UpdateBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_BEHAVIOR,\n        BehaviorBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(UpdateBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async bluetoothBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var BluetoothBarrierReq;\n\n      switch (type) {\n        case BluetoothTypes.KEEPING: {\n          const BluetoothKeepingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BLUETOOTH_KEEP,\n            barrierLabel: \"bluetooth keeping barrier\",\n            deviceType: HMSAwarenessBarrierModule.BluetoothStatus_DEVICE_CAR,\n            bluetoothStatus: HMSAwarenessBarrierModule.BluetoothStatus_CONNECTED,\n          };\n          BluetoothBarrierReq = BluetoothKeepingReq;\n          break;\n        }\n        case BluetoothTypes.CONNECTING: {\n          const BluetoothConnectingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BLUETOOTH_CONNECTING,\n            barrierLabel: \"bluetooth connecting barrier\",\n            deviceType: HMSAwarenessBarrierModule.BluetoothStatus_DEVICE_CAR,\n          };\n          BluetoothBarrierReq = BluetoothConnectingReq;\n          break;\n        }\n        case BluetoothTypes.DISCONNECTING: {\n          const BluetoothDisconnectingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.BLUETOOTH_DISCONNECTING,\n            barrierLabel: \"bluetooth disconnecting barrier\",\n            deviceType: HMSAwarenessBarrierModule.BluetoothStatus_DEVICE_CAR,\n          };\n          BluetoothBarrierReq = BluetoothDisconnectingReq;\n          break;\n        }\n      }\n\n      const UpdateBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_BLUETOOTH,\n        BluetoothBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(UpdateBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async headsetBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var HeadsetBarrierReq;\n\n      switch (type) {\n        case HeadsetTypes.KEEPING: {\n          const HeadsetKeepingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.EVENT_HEADSET_KEEPING,\n            headsetStatus: HMSAwarenessBarrierModule.HeadsetStatus_CONNECTED,\n            barrierLabel: \"headset keeping barrier\",\n          };\n          HeadsetBarrierReq = HeadsetKeepingReq;\n          break;\n        }\n        case HeadsetTypes.CONNECTING: {\n          const HeadsetConnectingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.EVENT_HEADSET_CONNECTING,\n            barrierLabel: \"headset connecting barrier\",\n          };\n          HeadsetBarrierReq = HeadsetConnectingReq;\n          break;\n        }\n        case HeadsetTypes.DISCONNECTING: {\n          const HeadsetDisonnectingReq = {\n            barrierReceiverAction:  HMSAwarenessBarrierModule.EVENT_HEADSET_DISCONNECTING,\n            barrierLabel: \"headset disconnecting barrier\",\n          };\n          HeadsetBarrierReq = HeadsetDisonnectingReq;\n          break;\n        }\n      }\n\n      const UpdateBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_HEADSET,\n        HeadsetBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(UpdateBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async locationBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var LocationBarrierReq;\n\n      switch (type) {\n        case LocationTypes.ENTER: {\n          const LocationEnterReq = {\n            latitude: 36.3148328,\n            longitude: 30.1663369,\n            radius: 10000,\n            barrierReceiverAction: HMSAwarenessBarrierModule.LOCATION_ENTER,\n            barrierLabel: \"location enter barrier\",\n          };\n          LocationBarrierReq = LocationEnterReq;\n          break;\n        }\n        case LocationTypes.STAY: {\n          const LocationStayReq = {\n            latitude: 36.3148328,\n            longitude: 30.1663369,\n            radius: 10000,\n            timeOfDuration: 10000,\n            barrierReceiverAction: HMSAwarenessBarrierModule.LOCATION_STAY,\n            barrierLabel: \"location stay barrier\",\n          };\n          LocationBarrierReq = LocationStayReq;\n          break;\n        }\n        case LocationTypes.EXIT: {\n          const LocationExitReq = {\n            latitude: 36.3148328,\n            longitude: 30.1663369,\n            radius: 10000,\n            barrierReceiverAction: HMSAwarenessBarrierModule.LOCATION_EXIT,\n            barrierLabel: \"location exit barrier\",\n          };\n          LocationBarrierReq = LocationExitReq;\n          break;\n        }\n      }\n\n      const LocationBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_LOCATION,\n        LocationBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(LocationBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async screenBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var ScreenBarrierReq;\n\n      switch (type) {\n        case ScreenTypes.SCREEN_KEEPING: {\n          const ScreenKeepingReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.SCREEN_KEEPING,\n            barrierLabel: \"SCREEN_ACTION_KEEPING\",\n            screenStatus: HMSAwarenessBarrierModule.ScreenStatus_UNLOCK,\n          };\n          ScreenBarrierReq = ScreenKeepingReq;\n          break;\n        }\n        case ScreenTypes.SCREEN_ON: {\n          const ScreenOnReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.SCREEN_ON,\n            barrierLabel: \"SCREEN_ACTION_ON\",\n          };\n          ScreenBarrierReq = ScreenOnReq;\n          break;\n        }\n        case ScreenTypes.SCREEN_OFF: {\n          const ScreenOffReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.SCREEN_OFF,\n            barrierLabel: \"SCREEN_ACTION_OFF\",\n          };\n          ScreenBarrierReq = ScreenOffReq;\n          break;\n        }\n        case ScreenTypes.SCREEN_UNLOCK: {\n          const ScreenUnlockReq = {\n            barrierReceiverAction: HMSAwarenessBarrierModule.SCREEN_UNLOCK,\n            barrierLabel:  \"SCREEN_ACTION_UNLOCK\",\n          };\n          ScreenBarrierReq = ScreenUnlockReq;\n          break;\n        }\n      }\n\n      const ScreenBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_SCREEN,\n        ScreenBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(ScreenBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error\" + JSON.stringify(e));\n    }\n  }\n\n  async timeBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var TimeBarrierReq = this.createTimeReqObj(type);\n      const TimeBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_TIME,\n        TimeBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(TimeBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(\"error::\" + JSON.stringify(e));\n    }\n  }\n\n  async wifiBarrier(type) {\n    try {\n      this.props.changeStateProgress(true);\n      var WifiBarrierReq = this.createWifiReqObj(type);\n      const WifiBarrierRes = await HMSAwarenessBarrierModule.updateBarrier(\n        HMSAwarenessBarrierModule.EVENT_WIFI,\n        WifiBarrierReq\n      );\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(WifiBarrierRes));\n    } catch (e) {\n      this.props.changeStateProgress(false);\n      alert(JSON.stringify(e));\n    }\n  }\n\n  createWifiReqObj(type) {\n    var WifiBarrierReq;\n    switch (type) {\n      case WifiTypes.WIFI_KEEPING: {\n        const WifiKeepingReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_KEEPING,\n          barrierLabel: \"wifi keeping barrier\",\n          wifiStatus: HMSAwarenessBarrierModule.WifiStatus_CONNECTED,\n        };\n        WifiBarrierReq = WifiKeepingReq;\n        break;\n      }\n      case WifiTypes.WIFI_KEEPING_WITH_BSSID: {\n        const WifiKeepingWithBssidReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_KEEPING,\n          barrierLabel: \"wifi keeping with bssid barrier\",\n          wifiStatus: HMSAwarenessBarrierModule.WifiStatus_CONNECTED,\n          bssid: bssid,\n          ssid: ssid,\n        };\n        WifiBarrierReq = WifiKeepingWithBssidReq;\n        break;\n      }\n      case WifiTypes.WIFI_CONNECTING: {\n        const WifiConnectingReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_CONNECTING,\n          barrierLabel: \"wifi connecting barrier\",\n        };\n        WifiBarrierReq = WifiConnectingReq;\n        break;\n      }\n      case WifiTypes.WIFI_CONNECTING_WITH_BSSID: {\n        const WifiConnectingBssidReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_CONNECTING,\n          barrierLabel: \"wifi connecting with bssid barrier\",\n          bssid: bssid,\n          ssid: ssid,\n        };\n        WifiBarrierReq = WifiConnectingBssidReq;\n        break;\n      }\n      case WifiTypes.WIFI_DISCONNECTING: {\n        const WifiDisconnectingReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_DISCONNECTING,\n          barrierLabel: \"wifi disconnecting barrier\",\n        };\n        WifiBarrierReq = WifiDisconnectingReq;\n        break;\n      }\n      case WifiTypes.WIFI_DISCONNECTING_WITH_BSSID: {\n        const WifiDisconnectingBssidReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_DISCONNECTING,\n          barrierLabel: \"wifi disconnecting with bssid barrier\",\n          bssid: bssid,\n          ssid: ssid,\n        };\n        WifiBarrierReq = WifiDisconnectingBssidReq;\n        break;\n      }\n      case WifiTypes.WIFI_ENABLING: {\n        const WifiEnablingReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_ENABLING,\n          barrierLabel: \"wifi enabling barrier\",\n        };\n        WifiBarrierReq = WifiEnablingReq;\n        break;\n      }\n      case WifiTypes.WIFI_DISABLING: {\n        const WifiDisablingReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.WIFI_DISABLING,\n          barrierLabel: \"wifi disabling barrier\",\n        };\n        WifiBarrierReq = WifiDisablingReq;\n        break;\n      }\n    }\n    return WifiBarrierReq;\n  }\n  createTimeReqObj(type) {\n    var TimeBarrierReq;\n    switch (type) {\n      case TimeTypes.SUNRISE_OR_SUNSET_PERIOD: {\n        const TimeSunriseandSunSetPerReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.TIME_IN_SUNRISE_OR_SUNSET_PERIOD,\n          barrierLabel: \"sunrice or sunset period barrier\",\n          timeInstant: HMSAwarenessBarrierModule.TimeBarrier_SUNSET_CODE,\n          startTimeOffset: -3600000.0,\n          stopTimeOffset: 36000000.0,\n        };\n        TimeBarrierReq = TimeSunriseandSunSetPerReq;\n        break;\n      }\n      case TimeTypes.DURING_PERIOD_OF_DAY: {\n        const TimeDuringPerOfDayReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.TIME_DURING_PERIOD_OF_DAY,\n          barrierLabel: \"period of day barrier\",\n          startTimeOfDay: 39600000,\n          stopTimeOfDay: 43200000,\n          timeZoneId: \"Europe/Istanbul\",\n        };\n        TimeBarrierReq = TimeDuringPerOfDayReq;\n        break;\n      }\n      case TimeTypes.DURING_TIME_PERIOD: {\n        const TimeDuringTimePerReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.TIME_DURING_TIME_PERIOD,\n          barrierLabel: \"time period barrier\",\n          startTimeStamp: 1607515517229.0,\n          stopTimeStamp: 1607515527229.0,\n        };\n        TimeBarrierReq = TimeDuringTimePerReq;\n        break;\n      }\n      case TimeTypes.PERIOD_OF_WEEK: {\n        const TimePerOfWeekReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.TIME_DURING_PERIOD_OF_WEEK,\n          barrierLabel: \"period of week barrier\",\n          dayOfWeek: HMSAwarenessBarrierModule.TimeBarrier_MONDAY_CODE,\n          startTimeOfSpecifiedDay: 32400000,\n          stopTimeOfSpecifiedDay: 36000000,\n          timeZoneId: \"Europe/Istanbul\",\n        };\n        TimeBarrierReq = TimePerOfWeekReq;\n        break;\n      }\n      case TimeTypes.IN_TIME_CATEGORY: {\n        const TimeInTimeCategoryReq = {\n          barrierReceiverAction: HMSAwarenessBarrierModule.TIME_IN_TIME_CATEGORY,\n          barrierLabel: \"in timecategory barrier\",\n          timeCategory: HMSAwarenessBarrierModule.TimeBarrier_TIME_CATEGORY_WEEKEND,\n        };\n        TimeBarrierReq = TimeInTimeCategoryReq;\n        break;\n      }\n    }\n    return TimeBarrierReq\n  }\n\n  render() {\n    return (\n      <View style={styles.container}>\n        <Text style={styles.updateBarrierTitle}>\n          Ambient Light Barrier Methods\n        </Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.ambientLightBarrier(AmbientLightTypes.ABOVE)}\n        >\n          <Text style={styles.text}>Ambient Light Above</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.ambientLightBarrier(AmbientLightTypes.BELOW)}\n        >\n          <Text style={styles.text}>Ambient Light Belove</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.ambientLightBarrier(AmbientLightTypes.RANGE)}\n        >\n          <Text style={styles.text}>Ambient Light Range</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Beacon Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.beaconBarrier(BeaconTypes.DISCOVER)}\n        >\n          <Text style={styles.text}>Beacon Discover</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.beaconBarrier(BeaconTypes.KEEP)}\n        >\n          <Text style={styles.text}>Beacon Keep</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.beaconBarrier(BeaconTypes.MISSED)}\n        >\n          <Text style={styles.text}>Beacon Missed</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Behavior Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.behaviorBarrier(BehaviorTypes.KEEPING)}\n        >\n          <Text style={styles.text}>Behavior Keeping</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.behaviorBarrier(BehaviorTypes.BEGINNING)}\n        >\n          <Text style={styles.text}>Behavior Beginning</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.behaviorBarrier(BehaviorTypes.ENDING)}\n        >\n          <Text style={styles.text}>Behavior Ending</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Bluetooth Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.bluetoothBarrier(BluetoothTypes.KEEPING)}\n        >\n          <Text style={styles.text}>Bluetooth Keeping</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.bluetoothBarrier(BluetoothTypes.CONNECTING)}\n        >\n          <Text style={styles.text}>Bluetooth Connecting</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.bluetoothBarrier(BluetoothTypes.DISCONNECTING)}\n        >\n          <Text style={styles.text}>Bluetooth Disconnecting</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Headset Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.headsetBarrier(HeadsetTypes.KEEPING)}\n        >\n          <Text style={styles.text}>Headset Keeping</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.headsetBarrier(HeadsetTypes.CONNECTING)}\n        >\n          <Text style={styles.text}>Headset Connecting</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.headsetBarrier(HeadsetTypes.DISCONNECTING)}\n        >\n          <Text style={styles.text}>Headset Disconnecting</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Location Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.locationBarrier(LocationTypes.ENTER)}\n        >\n          <Text style={styles.text}>Location Enter</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.locationBarrier(LocationTypes.EXIT)}\n        >\n          <Text style={styles.text}>Location Exit</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.locationBarrier(LocationTypes.STAY)}\n        >\n          <Text style={styles.text}>Location Stay</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Screen Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.screenBarrier(ScreenTypes.SCREEN_KEEPING)}\n        >\n          <Text style={styles.text}>Screen Keeping</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.screenBarrier(ScreenTypes.SCREEN_ON)}\n        >\n          <Text style={styles.text}>Screen On</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.screenBarrier(ScreenTypes.SCREEN_OFF)}\n        >\n          <Text style={styles.text}>Screen Off</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.screenBarrier(ScreenTypes.SCREEN_UNLOCK)}\n        >\n          <Text style={styles.text}>Screen Unlock</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Time Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.timeBarrier(TimeTypes.SUNRISE_OR_SUNSET_PERIOD)}\n        >\n          <Text style={styles.text}>Sunset or Sunrise Barrier</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.timeBarrier(TimeTypes.DURING_PERIOD_OF_DAY)}\n        >\n          <Text style={styles.text}>During Period Of Day Barrier</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.timeBarrier(TimeTypes.DURING_TIME_PERIOD)}\n        >\n          <Text style={styles.text}>During Time Period Barrier</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.timeBarrier(TimeTypes.PERIOD_OF_WEEK)}\n        >\n          <Text style={styles.text}>During Period Of Week Barrier</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.timeBarrier(TimeTypes.IN_TIME_CATEGORY)}\n        >\n          <Text style={styles.text}>In Time Category</Text>\n        </TouchableOpacity>\n\n        <Text style={styles.updateBarrierTitle}>Wifi Barrier Methods</Text>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_KEEPING)}\n        >\n          <Text style={styles.text}>Wifi Keeping</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_KEEPING_WITH_BSSID)}\n        >\n          <Text style={styles.text}>Wifi Keeping with bssi and ssid</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_CONNECTING)}\n        >\n          <Text style={styles.text}>Wifi Connecting</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_CONNECTING_WITH_BSSID)}\n        >\n          <Text style={styles.text}>Wifi Connecting with bssid and ssid</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_DISCONNECTING)}\n        >\n          <Text style={styles.text}>Wifi Disconnecting</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() =>\n            this.wifiBarrier(WifiTypes.WIFI_DISCONNECTING_WITH_BSSID)\n          }\n        >\n          <Text style={styles.text}>\n            Wifi Disconnecting with bssid and ssid{\" \"}\n          </Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_ENABLING)}\n        >\n          <Text style={styles.text}>Wifi Enabling</Text>\n        </TouchableOpacity>\n\n        <TouchableOpacity\n          style={styles.btn}\n          onPress={() => this.wifiBarrier(WifiTypes.WIFI_DISABLING)}\n        >\n          <Text style={styles.text}>Wifi Disabling</Text>\n        </TouchableOpacity>\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    justifyContent: \"center\",\n    alignSelf: \"center\",\n  },\n  updateBarrierTitle: {\n    color: \"black\",\n    fontSize: 13,\n    fontStyle: \"italic\",\n    fontWeight: \"bold\",\n    marginTop: 13,\n  },\n  btn: {\n    marginTop: 15,\n    width: buttonWidth,\n    height: buttonHeight,\n    justifyContent: \"center\",\n    alignSelf: \"center\",\n    borderRadius: 10,\n    marginLeft: 5,\n    marginRight: 5,\n    borderColor: green,\n    borderWidth: 1.5,\n  },\n  text: {\n    fontSize: 14,\n    color: darkJungleGreen,\n    textAlign: \"center\",\n  },\n});\n"
  },
  {
    "path": "react-native-hms-awareness/example/constants/Colors.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nexport default class Colors { }\nexport const platinum = \"#e2e6e8\";\nexport const awesomepink = \"#ff2048\";\nexport const darkJungleGreen = \"#1a1d1f\";\nexport const charcoal = \"#394149\";\nexport const green = \"#0ec0a2\";\nexport const darkGreen = \"#0c1b25\";\n"
  },
  {
    "path": "react-native-hms-awareness/example/constants/Data.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Dimensions, NativeEventEmitter } from \"react-native\";\nimport { HMSAwarenessBarrierModule } from \"@hmscore/react-native-hms-awareness\";\n\nexport default class Data { }\n\nexport const eventEmitter = new NativeEventEmitter(HMSAwarenessBarrierModule);\n\nexport const ScreenWidth = Dimensions.get(\"window\").width;\nexport const ScreenHeight = Dimensions.get(\"window\").height;\nexport const buttonWidth = 200;\nexport const buttonHeight = 50;\n\nexport const captureDesc =\n  \"The Capture API allows your app to request the current user status, such as time, location, behavior, \" +\n  \"and whether a headset is connected. For example, after your app runs, it can request the user's time and location in order to recommend entertainment activities available nearby at weekends to the user.\";\nexport const barrierDesc =\n  \"The Barrier API allows your app to set a barrier for specific contextual conditions. When the conditions are met, your app will receive a notification. For example, a notification is triggered when an audio device connects to a mobile phone for an audio device status barrier about connection or illuminance is less than 100 lux for an ambient light barrier whose trigger condition is set for illuminance that is less than 100 lux. You can also combine different types of barriers for your app to support different use cases. For example, your app can recommend nearby services if the user has stayed in a specified business zone (geofence) for the preset period of time (time barrier).After your app registers with a barrier, your app can be automatically started when the barrier is triggered. This is because the barrier function of Awareness Kit can run in the background. Your app can then recommend services based on the user's current situation.\";\nexport const captureConditions =\n  \"* getTimeCategoriesForFuture:  Note that cross-year query isn't supported.\" +\n  \"\\n\\n* getDarkModeStatus:  Use a device with Android 10 for DarkModeStatus to be true.\" +\n  \"\\n\\n* If your methods don't work, check HMSCore for updates. Check your HMSCore permissions. Try to delete the application and install it again.\" +\n  \"\\n\\n* The Aqi variable may be blank outside of the Chinese location.\";\n\nexport const barrierConditions =\n  \"* oneHourMilliSecond = 60 * 60 * 1000L \" +\n  \"\\n  You can use onehourmilisecond and its multiples for variables whose parameter value is millisecond.\" +\n  \"\\n  max = oneHourMilliSecond * 24 \" +\n  \"\\n  min = 0\" +\n  \"\\n\\n* If you don't send the timeZoneId parameter, the automatic TimeZone.getDefault is received. (for these methods duringPeriodOfWeek and duringPeriodOfDay)\" +\n  \"\\n\\n* In QueryBarrier =>\" +\n  \"\\n   - headset connecting barrier\" +\n  \"\\n   - headset disconnecting barrier\" +\n  \"\\n   - light above barrier\" +\n  \"\\n   - wifi keeping with bssid barrier\" +\n  \"\\n   - wifi keeping barrier\\n\";\n\nexport const Page = {\n  Barrier: 0,\n  Capture: 1,\n};\nexport const AmbientLightTypes = {\n  ABOVE: \"ABOVE\",\n  BELOW: \"BELOW\",\n  RANGE: \"RANGE\",\n};\nexport const ScreenTypes = {\n  SCREEN_KEEPING: \"SCREEN_KEEPING\",\n  SCREEN_ON: \"SCREEN_ON\",\n  SCREEN_OFF: \"SCREEN_OFF\",\n  SCREEN_UNLOCK: \"SCREEN_UNLOCK\",\n};\n\nexport const HeadsetTypes = {\n  KEEPING: \"HEADSET_KEEPING\",\n  CONNECTING: \"HEADSET_CONNECTING\",\n  DISCONNECTING: \"HEADSET_DISCONNECTING\",\n};\n\nexport const BluetoothTypes = {\n  KEEPING: \"BLUETOOTH_KEEPING\",\n  CONNECTING: \"BLUETOOTH_KEEPING\",\n  DISCONNECTING: \"BLUETOOTH_DISCONNECTING\",\n};\n\nexport const BehaviorTypes = {\n  KEEPING: \"BEHAVIOR_KEEPING\",\n  BEGINNING: \"BEHAVIOR_BEGINNING\",\n  ENDING: \"BEHAVIOR_ENDING\",\n};\n\nexport const BeaconTypes = {\n  DISCOVER: \"BEACON_DISCOVER\",\n  KEEP: \"BEACON_KEEP\",\n  MISSED: \"BEACON_MISSED\",\n};\nexport const LocationTypes = {\n  ENTER: \"LOCATION_ENTER\",\n  STAY: \"LOCATION_STAY\",\n  EXIT: \"LOCATION_EXIT\",\n};\nexport const TimeTypes = {\n  SUNRISE_OR_SUNSET_PERIOD: \"SUNRISE_OR_SUNSET_PERIOD\",\n  DURING_PERIOD_OF_DAY: \"DURING_PERIOD_OF_DAY\",\n  DURING_TIME_PERIOD: \"DURING_TIME_PERIOD\",\n  PERIOD_OF_WEEK: \"PERIOD_OF_WEEK\",\n  IN_TIME_CATEGORY: \"IN_TIME_CATEGORY\",\n};\nexport const WifiTypes = {\n  WIFI_KEEPING: \"WIFI_KEEPING\",\n  WIFI_KEEPING_WITH_BSSID: \"WIFI_KEEPING_WITH_BSSID\",\n  WIFI_CONNECTING: \"WIFI_CONNECTING\",\n  WIFI_CONNECTING_WITH_BSSID: \"WIFI_CONNECTING_WITH_BSSID\",\n  WIFI_DISCONNECTING: \"WIFI_DISCONNECTING\",\n  WIFI_DISCONNECTING_WITH_BSSID: \"WIFI_DISCONNECTING_WITH_BSSID\",\n  WIFI_ENABLING: \"WIFI_ENABLING\",\n  WIFI_DISABLING: \"WIFI_DISABLING\",\n};\nexport const MethodType = {\n  BeaconStatus: \"BeaconStatus\",\n  Behavior: \"Behavior\",\n  HeadsetStatus: \"HeadsetStatus\",\n  Location: \"Location\",\n  CurrentLocation: \"CurrentLocation\",\n  TimeCategories: \"TimeCategories\",\n  TimeCategoriesByUser: \"TimeCategoriesByUser\",\n  TimeCategoriesByCountryCode: \"TimeCategoriesByCountryCode\",\n  TimeCategoriesByIp: \"TimeCategoriesByIp\",\n  TimeCategoriesForFuture: \"TimeCategoriesForFuture\",\n  LightIntensity: \"LightIntensity\",\n  WeatherByDevice: \"WeatherByDevice\",\n  WeatherByPosition: \"WeatherByPosition\",\n  BluetoothStatus: \"BluetoothStatus\",\n  QuerySupportinCapabilities: \"QuerySupportinCapabilities\",\n  EnableUpdateWindow: \"EnableUpdateWindow\",\n  ScreenStatus: \"ScreenStatus\",\n  Wifistatus: \"WifiStatus\",\n  ApplicationStatus: \"ApplicationStatus\",\n  DarkModeStatus: \"DarkModeStatus\",\n};\n"
  },
  {
    "path": "react-native-hms-awareness/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nimport { AppRegistry, ToastAndroid } from \"react-native\";\nimport App from \"./App\";\nimport { HMSAwarenessBarrierModule } from \"@hmscore/react-native-hms-awareness\";\nAppRegistry.registerHeadlessTask(HMSAwarenessBarrierModule.TASK_NAME, () => async (taskData) => {\n    console.log(taskData);\n    ToastAndroid.show(JSON.stringify(taskData), ToastAndroid.SHORT);\n});\nAppRegistry.registerComponent(\"RNHMSAwareness Demo\", () => App);\n\n"
  },
  {
    "path": "react-native-hms-awareness/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-awareness/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-awareness-demo\",\n  \"version\": \"3.8.0-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"@hmscore/react-native-hms-awareness\": \"3.8.0-300\"  \n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-awareness/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\nimport { NativeModules } from \"react-native\";\n\nexport const {\n  HMSAwarenessCaptureModule,\n  HMSAwarenessBarrierModule,\n  HMSLoggerModule,\n} = NativeModules;\n\nexport default {\n  HMSAwarenessCaptureModule,\n  HMSAwarenessBarrierModule,\n  HMSLoggerModule,\n};\n"
  },
  {
    "path": "react-native-hms-awareness/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-awareness\",\n  \"title\": \"React Native HMS Awareness Kit\",\n  \"description\": \"React Native HMS Awareness Kit\",\n  \"version\": \"3.8.0-300\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"baseUrl\": \"react-native-hms-awareness\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"hms-awareness\",\n    \"awareness\",\n    \"react-native\",\n    \"react-native-awareness\",\n    \"rn-awareness\"\n  ],\n  \"files\": [\n    \".docs\",\n    \"android\",\n    \"example\",\n    \"index.js\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\"\n  }\n}"
  },
  {
    "path": "react-native-hms-contactshield/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-contactshield/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Contact Shield</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-contactshield\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-contactshield?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-contactshield\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-contactshield?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-contactshield.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI Contact Shield Kit enables communication between Huawei Contact Shield SDK and React Native platform. \n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001062825580?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-contactshield\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001062519333?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001062825598?ha_source=hms1)\n\n### Additional Topics\n\n- [Configuring App Information in AppGallery Connect](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/config-agc-0000001062777043?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native Plugin is licenced under [Apache 2.0 licence](LICENCE)"
  },
  {
    "path": "react-native-hms-contactshield/THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt",
    "content": "Please note we provide an open source software notice for the third party open source software\nalong with this software and/or this software component contributed by Huawei (in the following\njust “this SOFTWARE”). The open source software licenses are granted by the respective right\nholders.\n\nWarranty Disclaimer\nTHE OPEN SOURCE SOFTWARE IN THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT\nIT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED\nWARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE\nAPPLICABLE LICENSES FOR MORE DETAILS.\n\nCopyright Notice and License Texts\n\nSoftware:  react-native-file-picker  0.0.19\n----------------------------------------------------------------------\n\nCopyright notice:\n\nLuis Fuertes <luis.fuertes@clouddistrict.com>\n\nLicense: ISC\n\nPermission 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.\n\nTHE 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.\n"
  },
  {
    "path": "react-native-hms-contactshield/android/build.gradle",
    "content": "buildscript {\n    repositories {\n        jcenter()\n        google()\n\n        maven { url 'https://developer.huawei.com/repo/' }\n\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.4.2.301\")\n    }\n}\n\napply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.3\"\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    jcenter()\n    google()\n\n    maven { url 'https://developer.huawei.com/repo/' }\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n        // for import com.facebook.react.ReactApplication;\n    }\n\n}\n\ndef safeExtGet(prop, fallback) {\n    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n\n    implementation 'com.huawei.hms:contactshield:6.4.0.300'\n\n    def supportLibVersion = safeExtGet('supportLibVersion', '27.1.1')\n    def supportLibMajorVersion = supportLibVersion.split('\\\\.')[0] as int\n    def appCompatLibName = (supportLibMajorVersion < 20) ? \"androidx.appcompat:appcompat\" : \"com.android.support:appcompat-v7\"\n\n    implementation \"$appCompatLibName:$supportLibVersion\"\n}\n\napply plugin: 'com.huawei.agconnect'\n"
  },
  {
    "path": "react-native-hms-contactshield/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-contactshield/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-contactshield/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-contactshield/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.contactshield\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/HMSContactShieldModule.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield;\n\nimport android.app.PendingIntent;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.google.gson.Gson;\n\nimport com.huawei.hms.contactshield.ContactShield;\nimport com.huawei.hms.contactshield.ContactShieldEngine;\nimport com.huawei.hms.contactshield.ContactShieldSetting;\nimport com.huawei.hms.contactshield.ContactShieldStatus;\nimport com.huawei.hms.contactshield.DailySketchConfiguration;\nimport com.huawei.hms.contactshield.DiagnosisConfiguration;\nimport com.huawei.hms.contactshield.SharedKeyFileProvider;\nimport com.huawei.hms.contactshield.SharedKeysDataMapping;\nimport com.huawei.hms.rn.contactshield.constants.IntentAction;\nimport com.huawei.hms.rn.contactshield.constants.RequestCode;\nimport com.huawei.hms.rn.contactshield.logger.HMSLogger;\nimport com.huawei.hms.rn.contactshield.utils.Utils;\n\nimport java.io.File;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport com.huawei.hms.rn.contactshield.utils.ObjectProvider;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\npublic class HMSContactShieldModule extends ReactContextBaseJavaModule {\n    private final String TAG = HMSContactShieldModule.class.getSimpleName();\n\n    private static ReactApplicationContext context;\n\n    private final ContactShieldEngine mEngine;\n\n    private final HMSLogger logger;\n\n    private final Gson gson;\n\n    public HMSContactShieldModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        setContext(reactContext);\n        gson = new Gson();\n        logger = HMSLogger.getInstance(reactContext);\n        mEngine = ContactShield.getContactShieldEngine(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return new HashMap<>();\n    }\n\n    @Override\n    public void initialize() {\n        super.initialize();\n    }\n\n    public static ReactApplicationContext getContext() {\n        return context;\n    }\n\n    public static void setContext(ReactApplicationContext context) {\n        HMSContactShieldModule.context = context;\n    }\n\n    @ReactMethod\n    public void getStatus(Promise promise) {\n        logger.startMethodExecutionTimer(\"getStatus\");\n\n        mEngine.getStatus().addOnSuccessListener(result -> {\n            WritableNativeArray statusResult = new WritableNativeArray();\n            try {\n                for (ContactShieldStatus value : result) {\n                    WritableNativeMap keyMap = new WritableNativeMap();\n                    keyMap.putString(\"status\", value.name());\n                    keyMap.putDouble(\"value\", value.getStatusValue());\n                    statusResult.pushMap(keyMap);\n                }\n            } catch (Exception e) {\n                Log.e(TAG, \"getStatus: error ->\" + e.toString());\n            }\n            Log.d(TAG, \"getStatus succeeded\");\n            logger.sendSingleEvent(\"getStatus\");\n            promise.resolve(statusResult);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getStatus failed: \" + e.getMessage());\n            logger.sendSingleEvent(\"getStatus\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void getContactShieldVersion(Promise promise) {\n        logger.startMethodExecutionTimer(\"getContactShieldVersion\");\n\n        mEngine.getContactShieldVersion().addOnFailureListener(e -> {\n            Log.d(TAG, \"getContactShieldVersion failed: \" + e.getMessage());\n            logger.sendSingleEvent(\"getContactShieldVersion\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }).addOnSuccessListener(result -> {\n            Log.d(TAG, \"getContactShieldVersion succeeded\");\n            logger.sendSingleEvent(\"getContactShieldVersion\");\n            promise.resolve(result.toString());\n        });\n    }\n\n    @ReactMethod\n    public void getDeviceCalibrationConfidence(Promise promise) {\n        logger.startMethodExecutionTimer(\"getDeviceCalibrationConfidence\");\n\n        mEngine.getDeviceCalibrationConfidence().addOnFailureListener(e -> {\n            Log.d(TAG, \"getDeviceCalibrationConfidence failed: \" + e.getMessage());\n            logger.sendSingleEvent(\"getDeviceCalibrationConfidence\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }).addOnSuccessListener(result -> {\n            Log.d(TAG, \"getDeviceCalibrationConfidence succeeded\");\n            logger.sendSingleEvent(\"getDeviceCalibrationConfidence\");\n            promise.resolve(result.toString());\n        });\n    }\n\n    @ReactMethod\n    public void isSupportScanningWithoutLocation(Promise promise) {\n        logger.startMethodExecutionTimer(\"isSupportScanningWithoutLocation\");\n\n        final boolean isSupportScan = mEngine.isSupportScanningWithoutLocation();\n        logger.sendSingleEvent(\"isSupportScanningWithoutLocation\");\n\n        promise.resolve(isSupportScan);\n    }\n\n    @ReactMethod\n    public void setSharedKeysDataMapping(ReadableMap args, Promise promise) throws JSONException {\n        final ReadableMap daysSinceCreationToContagiousness = args.getMap(\"daysSinceCreationToContagiousness\");\n        final int defaultReportType = args.getInt(\"defaultReportType\");\n        final int defaultContagiousness = args.getInt(\"defaultContagiousness\");\n\n        // Convert ReadableMap to JsonObject\n        final JSONObject jsonObject = Utils.toJSONObject(daysSinceCreationToContagiousness);\n        // Convert JSONObject to Map<Integer,Integer>\n        Map<Integer, Integer> mapObject = Utils.getMapObject(jsonObject);\n\n        final SharedKeysDataMapping sharedKeysDataMapping\n            = new SharedKeysDataMapping.Builder().setDaysSinceCreationToContagiousness(mapObject)\n            .setDefaultContagiousness(defaultContagiousness)\n            .setDefaultReportType(defaultReportType)\n            .build();\n\n        logger.startMethodExecutionTimer(\"setSharedKeysDataMapping\");\n\n        mEngine.setSharedKeysDataMapping(sharedKeysDataMapping).addOnSuccessListener(aVoid -> {\n            Log.d(TAG, \"setSharedKeysDataMapping succeeded\");\n            logger.sendSingleEvent(\"setSharedKeysDataMapping\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"setSharedKeysDataMapping failed:\" + e.getMessage());\n            logger.sendSingleEvent(\"setSharedKeysDataMapping\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void getSharedKeysDataMapping(Promise promise) {\n\n        logger.startMethodExecutionTimer(\"getSharedKeysDataMapping\");\n\n        mEngine.getSharedKeysDataMapping().addOnSuccessListener(sharedKeysDataMapping -> {\n            logger.sendSingleEvent(\"getSharedKeysDataMapping\");\n            try {\n                promise.resolve(Utils.fromSharedKeysDataMappingToMap(sharedKeysDataMapping));\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException: error ->\" + e.toString());\n            }\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getSharedKeysDataMapping failed:\" + e.getMessage());\n            logger.sendSingleEvent(\"getSharedKeysDataMapping\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void getDailySketch(ReadableMap args, Promise promise) throws JSONException {\n        final ReadableMap dailySketchConfigurationObject = args.getMap(\"dailySketchConfiguration\");\n        final JSONObject dailySketchConfigurationJson = Utils.convertMapToJson(dailySketchConfigurationObject);\n        final DailySketchConfiguration dailySketchConfiguration = ObjectProvider.dailySketchConfiguration(\n            dailySketchConfigurationJson, gson);\n\n        logger.startMethodExecutionTimer(\"getDailySketch\");\n\n        mEngine.getDailySketch(dailySketchConfiguration).addOnSuccessListener(dailySketches -> {\n            Log.d(TAG, \"getDailySketch succeeded\");\n            logger.sendSingleEvent(\"getDailySketch\");\n            promise.resolve(Utils.fromDailySketchListToMap(dailySketches));\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getDailySketch error: \" + e.getMessage());\n            logger.sendSingleEvent(\"getDailySketch\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void putSharedKeyFilesProvider(ReadableArray paths, Promise promise) throws JSONException {\n        final JSONArray pathsJSON = Utils.convertArrayToJson(paths);\n        final List<File> files = Utils.convertJSONArrayToFileList(pathsJSON);\n\n        final PendingIntent pendingIntent = ObjectProvider.getPendingIntent(context, IntentAction.CHECK_CONTACT_STATUS,\n            RequestCode.PUT_SHARED_KEY_FILES);\n\n        final SharedKeyFileProvider provider = new SharedKeyFileProvider(files);\n\n        logger.startMethodExecutionTimer(\"putSharedKeyFilesProvider\");\n\n        mEngine.putSharedKeyFiles(pendingIntent, provider).addOnSuccessListener(aVoid -> {\n            Log.d(TAG, \"putSharedKeyFilesProvider succeeded\");\n            logger.sendSingleEvent(\"putSharedKeyFilesProvider\");\n            deleteFiles(files);\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"putSharedKeyFilesProvider error:\" + e.getMessage());\n            logger.sendSingleEvent(\"putSharedKeyFilesProvider\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void putSharedKeyFilesKeys(ReadableArray paths, ReadableMap args, Promise promise) throws JSONException {\n        final JSONArray pathsJSON = Utils.convertArrayToJson(paths);\n        final List<File> files = Utils.convertJSONArrayToFileList(pathsJSON);\n\n        final String token = args.getString(\"token\");\n\n        final ReadableMap diagnosisConfig = args.getMap(\"diagnosisConfiguration\");\n        final JSONObject diagnosisConfigJSON = Utils.toJSONObject(\n            diagnosisConfig); //Convert ReadableMap to JSONObject for diagnosisConfiguration\n\n        final ReadableArray publicKeysReadable = args.getArray(\"publicKeys\");\n        final JSONArray publicKeysJSON = Utils.convertArrayToJson(\n            publicKeysReadable); //Convert ReadableArray to JSONArray for publicKeys\n        final List<String> publicKeys = Utils.convertJSONArrayToList(\n            publicKeysJSON); //Convert JSONArray to List for publicKeys\n\n        final PendingIntent pendingIntent = ObjectProvider.getPendingIntent(context, IntentAction.CHECK_CONTACT_STATUS,\n            RequestCode.PUT_SHARED_KEY_FILES);\n\n        final DiagnosisConfiguration diagnosisConfiguration = ObjectProvider.getDiagnosisConfiguration(\n            diagnosisConfigJSON, gson);\n\n        logger.startMethodExecutionTimer(\"putSharedKeyFilesKeys\");\n\n        mEngine.putSharedKeyFiles(pendingIntent, files, publicKeys, diagnosisConfiguration, token)\n            .addOnSuccessListener(aVoid -> {\n                Log.d(TAG, \"putSharedKeyFilesKeys succeeded\");\n                logger.sendSingleEvent(\"putSharedKeyFilesKeys\");\n                promise.resolve(true);\n            })\n            .addOnFailureListener(e -> {\n                Log.d(TAG, \"putSharedKeyFilesKeys failed: \" + e.getMessage());\n                logger.sendSingleEvent(\"putSharedKeyFilesKeys\", e.getMessage());\n                promise.resolve(e.getMessage());\n            });\n    }\n\n    @ReactMethod\n    public void startContactShield(int incubationPeriod, Promise promise) {\n        ContactShieldSetting contactShieldSetting = new ContactShieldSetting.Builder().setIncubationPeriod(\n            incubationPeriod).build();\n\n        logger.startMethodExecutionTimer(\"startContactShield\");\n        mEngine.startContactShield(contactShieldSetting).addOnFailureListener(e -> {\n            Log.d(TAG, \"startContactShield failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"startContactShield\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }).addOnSuccessListener(aVoid -> {\n            Log.i(TAG, \"startContactShield succeed\");\n            logger.sendSingleEvent(\"startContactShield\");\n            promise.resolve(true);\n        });\n    }\n\n    @ReactMethod\n    public void startContactShieldCallback(int incubationPeriod, Promise promise) {\n        ContactShieldSetting contactShieldSetting = new ContactShieldSetting.Builder().setIncubationPeriod(\n            incubationPeriod).build();\n\n        logger.startMethodExecutionTimer(\"startContactShield\");\n\n        final PendingIntent pendingIntent = ObjectProvider.getPendingIntent(context, IntentAction.CHECK_CONTACT_STATUS,\n            RequestCode.PUT_SHARED_KEY_FILES);\n\n        mEngine.startContactShield(pendingIntent, contactShieldSetting).addOnSuccessListener(aVoid -> {\n            Log.i(TAG, \"startContactShield succeed\");\n            logger.sendSingleEvent(\"startContactShield\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"startContactShield failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"startContactShield\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void stopContactShield(Promise promise) {\n        logger.startMethodExecutionTimer(\"stopContactShield\");\n        mEngine.stopContactShield().addOnSuccessListener(aVoid -> {\n            Log.d(TAG, \"stopContactShield succeed.\");\n            logger.sendSingleEvent(\"stopContactShield\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"stopContactShield failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"stopContactShield\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    void getPeriodicKey(Promise promise) {\n        logger.startMethodExecutionTimer(\"getPeriodicKey\");\n        mEngine.getPeriodicKey().addOnCompleteListener(task -> task.addOnSuccessListener(periodicKeys -> {\n            Log.d(TAG, \"getPeriodicKey succeeded\");\n            logger.sendSingleEvent(\"getPeriodicKey\");\n            promise.resolve(Utils.fromPeriodicKeyListToMap(periodicKeys));\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getPeriodicKey failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"getPeriodicKey\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }));\n    }\n\n    @ReactMethod\n    void getContactWindow(String token, Promise promise) {\n        logger.startMethodExecutionTimer(\"getContactWindow\");\n        mEngine.getContactWindow(token).addOnCompleteListener(task -> task.addOnSuccessListener(contactWindow -> {\n            Log.d(TAG, \"getContactWindow succeeded\");\n            logger.sendSingleEvent(\"getContactWindow\");\n            promise.resolve(Utils.fromContactWindowListToMap(contactWindow));\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getContactWindow failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"getContactWindow\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }));\n    }\n\n    @ReactMethod\n    public void putSharedKeyFilesCallback(ReadableArray paths, String token, ReadableMap diagnosisConfiguration,\n        Promise promise) throws JSONException {\n        final JSONArray pathsJSON = Utils.convertArrayToJson(paths);\n        final List<File> files = Utils.convertJSONArrayToFileList(pathsJSON);\n\n        final PendingIntent pendingIntent = ObjectProvider.getPendingIntent(context, IntentAction.CHECK_CONTACT_STATUS,\n            RequestCode.PUT_SHARED_KEY_FILES);\n\n        final JSONObject diagnosisConfigJSON = Utils.toJSONObject(diagnosisConfiguration);\n        final DiagnosisConfiguration diagnosisConfig = ObjectProvider.getDiagnosisConfiguration(diagnosisConfigJSON,\n            gson);\n\n        logger.startMethodExecutionTimer(\"putSharedKeyFiles\");\n        mEngine.putSharedKeyFiles(pendingIntent, files, diagnosisConfig, token).addOnSuccessListener(aVoid -> {\n            logger.sendSingleEvent(\"putSharedKeyFiles\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            logger.sendSingleEvent(\"putSharedKeyFiles\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void putSharedKeyFiles(ReadableArray paths, String token, ReadableMap diagnosisConfiguration,\n        Promise promise) throws JSONException {\n        final JSONArray pathsJSON = Utils.convertArrayToJson(paths);\n        final List<File> files = Utils.convertJSONArrayToFileList(pathsJSON);\n\n        final JSONObject diagnosisConfigJSON = Utils.toJSONObject(diagnosisConfiguration);\n        final DiagnosisConfiguration diagnosisConfig = ObjectProvider.getDiagnosisConfiguration(diagnosisConfigJSON,\n            gson);\n\n        logger.startMethodExecutionTimer(\"putSharedKeyFiles\");\n        mEngine.putSharedKeyFiles(files, diagnosisConfig, token).addOnFailureListener(e -> {\n            logger.sendSingleEvent(\"putSharedKeyFiles\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }).addOnSuccessListener(aVoid -> {\n            logger.sendSingleEvent(\"putSharedKeyFiles\");\n            promise.resolve(true);\n        });\n    }\n\n    @ReactMethod\n    public void putSharedKeyFilesKeysProvider(ReadableArray paths, ReadableArray publicKeys, Promise promise)\n        throws JSONException {\n        final JSONArray pathsJSON = Utils.convertArrayToJson(paths);\n        final List<File> files = Utils.convertJSONArrayToFileList(pathsJSON);\n\n        final PendingIntent pendingIntent = ObjectProvider.getPendingIntent(context, IntentAction.CHECK_CONTACT_STATUS,\n            RequestCode.PUT_SHARED_KEY_FILES);\n\n        final SharedKeyFileProvider provider = new SharedKeyFileProvider(files);\n\n        final JSONArray publicKeysJSON = Utils.convertArrayToJson(publicKeys);\n        final List<String> publicKeysList = Utils.convertJSONArrayToList(publicKeysJSON);\n\n        logger.startMethodExecutionTimer(\"putSharedKeyFilesKeysProvider\");\n        mEngine.putSharedKeyFiles(pendingIntent, provider, publicKeysList).addOnFailureListener(e -> {\n            logger.sendSingleEvent(\"putSharedKeyFilesKeysProvider\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }).addOnSuccessListener(aVoid -> {\n            logger.sendSingleEvent(\"putSharedKeyFilesKeysProvider\");\n            promise.resolve(true);\n        });\n\n    }\n\n    @ReactMethod\n    public void getContactSketch(String token, Promise promise) {\n        logger.startMethodExecutionTimer(\"getContactSketch\");\n\n        mEngine.getContactSketch(token).addOnCompleteListener(task -> task.addOnSuccessListener(contactSketch -> {\n            Log.d(TAG, \"getContactSketch succeeded\");\n            logger.sendSingleEvent(\"getContactSketch\");\n            promise.resolve(Utils.fromContactSketchDataToMap(contactSketch));\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getContactSketch failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"getContactSketch\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }));\n    }\n\n    @ReactMethod\n    public void getContactDetail(String token, Promise promise) {\n        logger.startMethodExecutionTimer(\"getContactDetail\");\n\n        mEngine.getContactDetail(token).addOnCompleteListener(task -> task.addOnSuccessListener(contactDetails -> {\n            Log.d(TAG, \"getContactDetail succeeded.\");\n            logger.sendSingleEvent(\"getContactDetail\");\n            promise.resolve(Utils.fromContactDetailsListToMap(contactDetails));\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"getContactDetail failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"getContactDetail\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        }));\n    }\n\n    @ReactMethod\n    public void clearAllData(Promise promise) {\n        logger.startMethodExecutionTimer(\"clearData\");\n        mEngine.clearData().addOnSuccessListener(clearAllData -> {\n            Log.d(TAG, \"clearAllData succeeded.\");\n            logger.sendSingleEvent(\"clearData\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"clearAllData failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"clearData\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    void startContactShieldNoPersistent(int incubationPeriod, Promise promise) {\n        ContactShieldSetting contactShieldSetting = new ContactShieldSetting.Builder().setIncubationPeriod(\n            incubationPeriod).build();\n\n        logger.startMethodExecutionTimer(\"startContactShieldNoPersistent\");\n\n        mEngine.startContactShieldNoPersistent(contactShieldSetting).addOnSuccessListener(aVoid -> {\n            Log.d(TAG, \"startContactShieldNoPersistent succeed.\");\n            logger.sendSingleEvent(\"startContactShieldNoPersistent\");\n            promise.resolve(true);\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"startContactShieldNoPersistent failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"startContactShieldNoPersistent\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void isContactShieldRunning(Promise promise) {\n        logger.startMethodExecutionTimer(\"isContactShieldRunning\");\n\n        mEngine.isContactShieldRunning().addOnCompleteListener(task -> {\n            Log.d(TAG, \"isContactShieldRunning succeeded\");\n            logger.sendSingleEvent(\"isContactShieldRunning\");\n            promise.resolve(task.getResult());\n        }).addOnFailureListener(e -> {\n            Log.d(TAG, \"isContactShieldRunning failed, cause: \" + e.getMessage());\n            logger.sendSingleEvent(\"isContactShieldRunning\", e.getMessage());\n            promise.reject(\"\", e.getMessage());\n        });\n    }\n\n    @ReactMethod\n    public void getDiagnosisConfiguration(Promise promise) {\n        DiagnosisConfiguration config = new DiagnosisConfiguration.Builder().build();\n        promise.resolve(Utils.fromDiagnosisConfigurationToMap(config));\n    }\n\n    @ReactMethod\n    public void enableLogger() {\n        logger.enableLogger();\n    }\n\n    @ReactMethod\n    public void disableLogger() {\n        logger.disableLogger();\n    }\n\n    private void deleteFiles(List<File> files) {\n        for (File file : files) {\n            Log.i(TAG, \"isFileDelete: \" + file.delete());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/HMSContactShieldPackage.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSContactShieldPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSContactShieldModule(reactContext));\n\n        return modules;\n    }\n\n    // Deprecated from RN 0.47\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n\n        return Collections.emptyList();\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/constants/IntentAction.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.constants;\n\npublic class IntentAction {\n    public static final String CHECK_CONTACT_STATUS = \"com.huawei.hms.rn.contactshield.CheckContactStatus\";\n\n    public static final String CHECK_CONTACT_STATUS_OLD = \"com.huawei.hms.rn.contactshield.CheckContactStatusOld\";\n\n    private IntentAction() {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/constants/RequestCode.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.constants;\n\npublic class RequestCode {\n    public static final int PUT_SHARED_KEY_FILES = 1;\n\n    private RequestCode() {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/handlers/ContactShieldBroadcastReceiver.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.handlers;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\n\nimport com.huawei.hms.contactshield.ContactShield;\nimport com.huawei.hms.contactshield.ContactShieldCallback;\nimport com.huawei.hms.contactshield.ContactShieldEngine;\nimport com.huawei.hms.rn.contactshield.constants.IntentAction;\n\npublic class ContactShieldBroadcastReceiver extends BroadcastReceiver {\n    public final ContactShieldCallback callback;\n\n    public final ContactShieldEngine engine;\n\n    public ContactShieldBroadcastReceiver(final Context context, final ContactShieldCallback callback) {\n        this.callback = callback;\n        this.engine = ContactShield.getContactShieldEngine(context);\n    }\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        if (intent != null) {\n            switch (intent.getAction()) {\n                case IntentAction.CHECK_CONTACT_STATUS_OLD:\n                case IntentAction.CHECK_CONTACT_STATUS:\n                    this.engine.handleIntent(intent, this.callback);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/handlers/ContactShieldCallbackHandler.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.handlers;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.contactshield.ContactShieldCallback;\n\npublic class ContactShieldCallbackHandler implements ContactShieldCallback {\n    private ReactContext reactContext;\n\n    public ContactShieldCallbackHandler(ReactContext _reactContext) {\n        super();\n        reactContext = _reactContext;\n    }\n\n    @Override\n    public void onHasContact(String token) {\n        WritableMap params = new WritableNativeMap();\n        params.putString(\"token\", token);\n        sendEvent(reactContext, \"onHasContact\", params);\n    }\n\n    @Override\n    public void onNoContact(String token) {\n        WritableMap params = new WritableNativeMap();\n        params.putString(\"token\", token);\n        sendEvent(reactContext, \"onNoContact\", params);\n    }\n\n    private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ContactShield\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"6.4.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/utils/ObjectProvider.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.utils;\n\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\n\nimport com.google.gson.Gson;\n\nimport com.huawei.hms.contactshield.DailySketchConfiguration;\nimport com.huawei.hms.contactshield.DiagnosisConfiguration;\n\nimport org.json.JSONObject;\n\npublic class ObjectProvider {\n    private ObjectProvider() {\n    }\n\n    public static PendingIntent getPendingIntent(final Context context, final String action, final int requestCode) {\n        final Intent intent = new Intent(action).setPackage(context.getPackageName());\n        return PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);\n    }\n\n    public static DailySketchConfiguration dailySketchConfiguration(final JSONObject dailySketchConfigurationJson,\n        final Gson gson) {\n        return gson.fromJson(dailySketchConfigurationJson.toString(), DailySketchConfiguration.class);\n    }\n\n    public static DiagnosisConfiguration getDiagnosisConfiguration(final JSONObject diagnosisConfigJson,\n        final Gson gson) {\n        return gson.fromJson(diagnosisConfigJson.toString(), DiagnosisConfiguration.class);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/android/src/main/java/com/huawei/hms/rn/contactshield/utils/Utils.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.utils;\n\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.google.gson.Gson;\nimport com.google.gson.reflect.TypeToken;\n\nimport com.huawei.hms.contactshield.ContactDetail;\nimport com.huawei.hms.contactshield.ContactSketch;\nimport com.huawei.hms.contactshield.ContactWindow;\nimport com.huawei.hms.contactshield.DailySketch;\nimport com.huawei.hms.contactshield.DiagnosisConfiguration;\nimport com.huawei.hms.contactshield.PeriodicKey;\nimport com.huawei.hms.contactshield.ScanInfo;\nimport com.huawei.hms.contactshield.SharedKeysDataMapping;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.File;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\n\npublic class Utils {\n\n    public static WritableArray getIntArray(int[] i) {\n        WritableArray wa = new WritableNativeArray();\n        for (int intArray : i) {\n            wa.pushInt(intArray);\n        }\n        return wa;\n    }\n\n    public static WritableArray getByteArray(byte[] b) {\n        WritableArray wa = new WritableNativeArray();\n        for (byte byteArray : b) {\n            wa.pushInt(byteArray);\n        }\n        return wa;\n    }\n\n    public static WritableMap fromSharedKeysDataMappingToMap(SharedKeysDataMapping sharedKeysDataMapping)\n        throws JSONException {\n        WritableMap wm = new WritableNativeMap();\n        final JSONObject jsonObject = new JSONObject();\n        if (sharedKeysDataMapping == null) {\n            return null;\n        }\n\n        wm.putInt(\"defaultContagiousness\", sharedKeysDataMapping.getDefaultContagiousness());\n        wm.putInt(\"defaultReportType\", sharedKeysDataMapping.getDefaultReportType());\n        jsonObject.put(\"daysSinceCreationToContagiousness\",\n            sharedKeysDataMapping.getDaysSinceCreationToContagiousness());\n        wm.putMap(\"daysSinceCreationToContagiousness\", convertJsonToMap(jsonObject));\n        return wm;\n    }\n\n    public static WritableMap fromDailySketchDataToMap(DailySketch dailySketch) {\n        WritableMap wm = new WritableNativeMap();\n        if (dailySketch == null) {\n            return null;\n        }\n\n        wm.putInt(\"daysSinceEpoch\", dailySketch.getDaysSinceEpoch());\n        wm.putDouble(\"maxScore\", dailySketch.getSketchData().getMaxScore());\n        wm.putDouble(\"scoreSum\", dailySketch.getSketchData().getScoreSum());\n        wm.putDouble(\"weightedDurationSum\", dailySketch.getSketchData().getWeightedDurationSum());\n        return wm;\n    }\n\n    public static WritableArray fromDailySketchListToMap(List<DailySketch> dailySketches) {\n        WritableArray array = new WritableNativeArray();\n        for (DailySketch dailySketch : dailySketches) {\n            array.pushMap(fromDailySketchDataToMap(dailySketch));\n        }\n        return array;\n    }\n\n    public static WritableMap fromContactSketchDataToMap(ContactSketch contactSketch) {\n        WritableMap wm = new WritableNativeMap();\n        if (contactSketch == null) {\n            return null;\n        }\n\n        wm.putArray(\"attenuationDurations\", getIntArray(contactSketch.getAttenuationDurations()));\n        wm.putInt(\"daysSinceLastHit\", contactSketch.getDaysSinceLastHit());\n        wm.putInt(\"maxRiskValue\", contactSketch.getMaxRiskValue());\n        wm.putInt(\"numberOfHits\", contactSketch.getNumberOfHits());\n        wm.putInt(\"summationRiskValue\", contactSketch.getSummationRiskValue());\n        return wm;\n    }\n\n    public static WritableArray fromContactDetailsListToMap(List<ContactDetail> contactDetailList) {\n        WritableArray array = new WritableNativeArray();\n        for (ContactDetail contactDetail : contactDetailList) {\n            array.pushMap(fromContactDetailsDataToMap(contactDetail));\n        }\n        return array;\n    }\n\n    public static WritableMap fromContactDetailsDataToMap(ContactDetail contactDetail) {\n        WritableMap wm = new WritableNativeMap();\n        if (contactDetail == null) {\n            return null;\n        }\n        wm.putInt(\"attenuationRiskValue\", contactDetail.getAttenuationRiskValue());\n        wm.putInt(\"durationMinutes\", contactDetail.getDurationMinutes());\n        wm.putInt(\"totalRiskValue\", contactDetail.getTotalRiskValue());\n        wm.putInt(\"totalRiskLevel\", contactDetail.getInitialRiskLevel());\n        wm.putArray(\"attenuationDurations\", getIntArray(contactDetail.getAttenuationDurations()));\n        wm.putDouble(\"dayNumber\", contactDetail.getDayNumber());\n        return wm;\n    }\n\n    public static WritableArray fromPeriodicKeyListToMap(List<PeriodicKey> periodicKeyList) {\n        if (periodicKeyList == null) {\n            return null;\n        }\n        WritableArray array = new WritableNativeArray();\n        for (PeriodicKey periodicKey : periodicKeyList) {\n            array.pushMap(fromPeriodicKeyToMap(periodicKey));\n        }\n        return array;\n    }\n\n    public static WritableMap fromPeriodicKeyToMap(PeriodicKey periodicKey) {\n        WritableMap wm = new WritableNativeMap();\n        if (periodicKey == null) {\n            return null;\n        }\n        wm.putArray(\"content\", getByteArray(periodicKey.getContent()));\n        wm.putInt(\"initialRiskLevel\", periodicKey.getInitialRiskLevel());\n        wm.putDouble(\"periodicKeyLifeTime\", periodicKey.getPeriodicKeyLifeTime());\n        wm.putDouble(\"periodicKeyValidTime\", periodicKey.getPeriodicKeyValidTime());\n        wm.putInt(\"reportType\", periodicKey.getReportType());\n        return wm;\n    }\n\n    public static WritableArray fromContactWindowListToMap(List<ContactWindow> contactWindowList) {\n        if (contactWindowList == null) {\n            return null;\n        }\n        WritableArray array = new WritableNativeArray();\n        for (ContactWindow contactWindow : contactWindowList) {\n            array.pushMap(fromContactWindowToMap(contactWindow));\n        }\n        return array;\n    }\n\n    public static WritableMap fromContactWindowToMap(ContactWindow contactWindow) {\n        WritableMap wm = new WritableNativeMap();\n        WritableArray scanMap = new WritableNativeArray();\n        if (contactWindow == null) {\n            return null;\n        }\n\n        wm.putInt(\"reportType\", contactWindow.getReportType());\n        wm.putDouble(\"dateMillis\", contactWindow.getDateMillis());\n\n        for (final ScanInfo scanInfo : contactWindow.getScanInfos()) {\n            scanMap.pushMap(fromScanInfoToMap(scanInfo));\n        }\n        wm.putArray(\"scanInfos\", scanMap);\n        return wm;\n    }\n\n    public static WritableMap fromScanInfoToMap(ScanInfo scanInfo) {\n        WritableMap wm = new WritableNativeMap();\n        if (scanInfo == null) {\n            return null;\n        }\n\n        wm.putInt(\"averageAttenuation\", scanInfo.getAverageAttenuation());\n        wm.putInt(\"minimumAttenuation\", scanInfo.getMinimumAttenuation());\n        wm.putInt(\"secondsSinceLastScan\", scanInfo.getSecondsSinceLastScan());\n\n        return wm;\n    }\n\n    public static WritableMap fromDiagnosisConfigurationToMap(DiagnosisConfiguration diagnosisConfiguration) {\n        WritableMap wm = new WritableNativeMap();\n\n        wm.putArray(\"attenuationDurationThresholds\",\n            getIntArray(diagnosisConfiguration.getAttenuationDurationThresholds()));\n        wm.putArray(\"attenuationRiskValues\", getIntArray(diagnosisConfiguration.getAttenuationRiskValues()));\n        wm.putArray(\"daysAfterContactedRiskValues\",\n            getIntArray(diagnosisConfiguration.getDaysAfterContactedRiskValues()));\n        wm.putArray(\"durationRiskValues\", getIntArray(diagnosisConfiguration.getDurationRiskValues()));\n        wm.putArray(\"initialRiskLevelRiskValues\", getIntArray(diagnosisConfiguration.getInitialRiskLevelRiskValues()));\n        wm.putInt(\"minimumRiskValueThreshold\", diagnosisConfiguration.getMinimumRiskValueThreshold());\n\n        return wm;\n    }\n\n    public static JSONObject toJSONObject(ReadableMap readableMap) throws JSONException {\n        JSONObject jsonObject = new JSONObject();\n\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n\n            switch (type) {\n                case Null:\n                    jsonObject.put(key, null);\n                    break;\n                case Boolean:\n                    jsonObject.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    jsonObject.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    jsonObject.put(key, readableMap.getString(key));\n                    break;\n                case Map:\n                    jsonObject.put(key, Utils.toJSONObject(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    jsonObject.put(key, toJSONArray(readableMap.getArray(key)));\n                    break;\n                default:\n                    break;\n            }\n        }\n        return jsonObject;\n    }\n\n    public static Map<Integer, Integer> getMapObject(JSONObject daysSinceCreationToContagiousness) {\n        return new Gson().fromJson(String.valueOf(daysSinceCreationToContagiousness),\n            new TypeToken<HashMap<Integer, Integer>>() { }.getType());\n    }\n\n    public static JSONObject convertMapToJson(ReadableMap readableMap) throws JSONException {\n        JSONObject object = new JSONObject();\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            switch (readableMap.getType(key)) {\n                case Null:\n                    object.put(key, JSONObject.NULL);\n                    break;\n                case Boolean:\n                    object.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    object.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    object.put(key, readableMap.getString(key));\n                    break;\n                case Map:\n                    object.put(key, convertMapToJson(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    object.put(key, convertArrayToJson(readableMap.getArray(key)));\n                    break;\n                default:\n                    break;\n            }\n        }\n        return object;\n    }\n\n    public static JSONArray convertArrayToJson(ReadableArray readableArray) throws JSONException {\n        JSONArray array = new JSONArray();\n        for (int i = 0; i < readableArray.size(); i++) {\n            switch (readableArray.getType(i)) {\n                case Null:\n                    break;\n                case Boolean:\n                    array.put(readableArray.getBoolean(i));\n                    break;\n                case Number:\n                    array.put(readableArray.getDouble(i));\n                    break;\n                case String:\n                    array.put(readableArray.getString(i));\n                    break;\n                case Map:\n                    array.put(convertMapToJson(readableArray.getMap(i)));\n                    break;\n                case Array:\n                    array.put(convertArrayToJson(readableArray.getArray(i)));\n                    break;\n                default:\n                    break;\n            }\n        }\n        return array;\n\n    }\n\n    public static List<String> convertJSONArrayToList(JSONArray jsonArray) throws JSONException {\n        List<String> list = new ArrayList<>();\n        for (int i = 0; i < jsonArray.length(); i++) {\n            list.add(jsonArray.getString(i));\n        }\n        return list;\n    }\n\n    public static List<File> convertJSONArrayToFileList(JSONArray jsonArray) throws JSONException {\n        List<File> list = new ArrayList<>();\n        for (int i = 0; i < jsonArray.length(); i++) {\n            list.add(new File(jsonArray.getString(i)));\n        }\n        return list;\n    }\n\n    public static JSONArray toJSONArray(ReadableArray readableArray) throws JSONException {\n        JSONArray jsonArray = new JSONArray();\n\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Null:\n                    jsonArray.put(i, null);\n                    break;\n                case Boolean:\n                    jsonArray.put(i, readableArray.getBoolean(i));\n                    break;\n                case Number:\n                    jsonArray.put(i, readableArray.getDouble(i));\n                    break;\n                case String:\n                    jsonArray.put(i, readableArray.getString(i));\n                    break;\n                case Map:\n                    jsonArray.put(i, toJSONObject(readableArray.getMap(i)));\n                    break;\n                case Array:\n                    jsonArray.put(i, toJSONArray(readableArray.getArray(i)));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return jsonArray;\n    }\n\n    public static WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = new WritableNativeMap();\n\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    public static WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = new WritableNativeArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n        return array;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\npackage-lock.json\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n*.jks\nagconnect-services.json\n"
  },
  {
    "path": "react-native-hms-contactshield/example/App.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  View,\n  StyleSheet,\n  Button,\n  ScrollView,\n  NativeEventEmitter,\n} from \"react-native\";\nimport HMSContactShieldModule, {\n  HMSContactShieldSetting,\n  HMSTokenMode,\n} from \"@hmscore/react-native-hms-contactshield\";\nimport FilePickerManager from \"react-native-file-picker\";\n\nexport default class App extends React.Component {\n\n  filePicker(callback) {\n    FilePickerManager.showFilePicker(null, (response) => {\n      console.log(\"Response = \", response);\n\n      if (response.didCancel) {\n        console.log(\"User cancelled file picker\");\n      } else if (response.error) {\n        console.log(\"FilePickerManager Error: \", response.error);\n      } else {\n          callback(response);\n      } \n    });\n  }\n\nputSharedKeyFilesKeys(){\n  this.filePicker((response) => {\n    const args = {\n      token: \"TOKEN_TEST\",\n      publicKeys: [\"<public_key_list_of_the_shared_key_file>\"],\n      diagnosisConfiguration: {},\n  };\n    HMSContactShieldModule.putSharedKeyFilesKeys([response.path], args)\n      .then((res) => {\n        alert(\"putSharedKeyFilesKeys: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + JSON.stringify(err));\n      });\n  });\n}\n\nputSharedKeyFilesProvider() {\n  this.filePicker((response) => {\n    HMSContactShieldModule.putSharedKeyFilesProvider([response.path])\n      .then((res) => {\n        alert(\"putSharedKeyFilesProvider: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  });\n}\n\nputSharedKeyFilesKeysProvider() {\n  this.filePicker((response) => {\n    let publicKeys = [\"<public_key_list_of_the_shared_key_file>\"]\n    HMSContactShieldModule.putSharedKeyFilesKeysProvider([response.path], publicKeys)\n      .then((res) => {\n        alert(\"putSharedKeyFilesKeysProvider: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  });\n}\n\n  getDailySketch() {\n    const args = {\n      dailySketchConfiguration: {},\n    };\n    HMSContactShieldModule.getDailySketch(args)\n    .then((res) => {\n      alert(\"getDailySketch -> success \" + JSON.stringify(res));\n    }).catch((err) =>   {\n      alert(JSON.stringify(err));\n    });\n}\n\n  getSharedKeysDataMapping() {\n    HMSContactShieldModule.getSharedKeysDataMapping()\n    .then((res) => {\n      alert(\"getSharedKeysDataMapping: \" + JSON.stringify(res));\n    })\n    .catch((err) => {\n      alert(\"Error: \" + err);\n    });\n  }\n\n  setSharedKeysDataMapping() {\n    const params = {\n        daysSinceCreationToContagiousness: {\n          1: 2,\n        },\n        defaultContagiousness: 1,\n        defaultReportType: 0  \n      }\n      HMSContactShieldModule.setSharedKeysDataMapping(params)\n      .then((res) => {\n        alert(\"setSharedKeysDataMapping: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  isSupportScanningWithoutLocation() {\n    HMSContactShieldModule.isSupportScanningWithoutLocation()\n    .then((res) => {\n      alert(\"isSupportScanningWithoutLocation: \" + res);\n    })\n    .catch((err) => {\n      alert(\"Error: \" + err);\n    });\n  }\n\n  getDeviceCalibrationConfidence() {\n    HMSContactShieldModule.getDeviceCalibrationConfidence()\n    .then((res) => {\n      alert(\"getDeviceCalibrationConfidence: \" + res);\n    })\n    .catch((err) => {\n      alert(\"Error: \" + err);\n    });\n  }\n\n  getContactShieldVersion() {\n    HMSContactShieldModule.getContactShieldVersion()\n    .then((res) => {\n      alert(\"getContactShieldVersion: \" + res);\n    })\n    .catch((err) => {\n      alert(\"Error: \" + err);\n    });\n  }\n\n  getStatus() {\n    HMSContactShieldModule.getStatus()\n    .then((res) => {\n      alert(\"getStatus: \" + JSON.stringify(res));\n    })\n    .catch((err) => {\n      alert(\"Error: \" + err);\n    });\n  }\n\n  startContactShield() {\n    HMSContactShieldModule.startContactShield(HMSContactShieldSetting.DEFAULT)\n      .then((res) => {\n        alert(\"startContactShield: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  startContactShieldCallback() {\n    HMSContactShieldModule.startContactShieldCallback(\n      HMSContactShieldSetting.DEFAULT\n    )\n      .then((res) => {\n        alert(\"startContactShieldCallback: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  stopContactShield() {\n    HMSContactShieldModule.stopContactShield()\n      .then((res) => {\n        alert(\"stopContactShield: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  startContactShieldNoPersistent() {\n    HMSContactShieldModule.startContactShieldNoPersistent(\n      HMSContactShieldSetting.DEFAULT\n    )\n      .then((res) => {\n        alert(\"startContactShieldNoPersistent: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  putSharedKeyFilesCallback() {\n    this.filePicker((response) => {\n      const token = \"TOKEN_TEST\";\n      const diagnosisConfiguration = {}\n      HMSContactShieldModule.putSharedKeyFilesCallback([response.path], token, diagnosisConfiguration)\n        .then((res) => {\n          alert(\"putSharedKeyFilesCallback: \" + res);\n        })\n        .catch((err) => {\n          alert(\"Error: \" + err);\n        });\n    });\n  }\n\n  putSharedKeyFiles() {\n    this.filePicker((response) => {\n      const token = \"TOKEN_TEST\";\n      const diagnosisConfiguration = {}\n      HMSContactShieldModule.putSharedKeyFiles([response.path], token, diagnosisConfiguration)\n        .then((res) => {\n          alert(\"putSharedKeyFiles: \" + res);\n        })\n        .catch((err) => {\n          alert(\"Error: \" + err);\n        });\n    });\n  }\n\n  getContactSketch() {\n    const token = \"TOKEN_TEST\";\n    HMSContactShieldModule.getContactSketch(token)\n      .then((res) => {\n        alert(\"getContactSketch: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  getContactDetail() {\n    const token = \"TOKEN_TEST\";\n    HMSContactShieldModule.getContactDetail(token)\n      .then((res) => {\n        alert(\"getContactDetail: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  clearAllData() {\n    HMSContactShieldModule.clearAllData()\n      .then((res) => {\n        alert(\"clearAllData: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  getPeriodicKey() {\n    HMSContactShieldModule.getPeriodicKey()\n      .then((res) => {\n        alert(\"getPeriodicKey: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  getContactWindow() {\n    HMSContactShieldModule.getContactWindow(HMSTokenMode.TOKEN_A)\n      .then((res) => {\n        alert(\"getContactWindow: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  isContactShieldRunning() {\n    HMSContactShieldModule.isContactShieldRunning()\n      .then((res) => {\n        alert(\"isContactShieldRunning: \" + res);\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  getDiagnosisConfiguration() {\n    HMSContactShieldModule.getDiagnosisConfiguration()\n      .then((res) => {\n        alert(\"getDiagnosisConfiguration: \" + JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(\"Error: \" + err);\n      });\n  }\n\n  enableLogger() {\n    HMSContactShieldModule.enableLogger();\n    alert(\"HMS Plugin Dotting is Enabled!\")\n  }\n\n  disableLogger() {\n    HMSContactShieldModule.disableLogger();\n    alert(\"HMS Plugin Dotting is Disabled!\")\n  }\n\n  componentDidMount() {\n    const eventEmitter = new NativeEventEmitter(HMSContactShieldModule);\n    this.eventListener = eventEmitter.addListener(\"onHasContact\", (event) => {\n      console.log(event.token);\n      alert(event.token);\n    });\n\n    this.eventListener = eventEmitter.addListener(\"onNoContact\", (event) => {\n      console.log(event.token);\n      alert(event.token);\n    });\n  }\n\n  render() {\n    return (\n      <View style={styles.mainContainer}>\n        <ScrollView style={styles.scrollView} nestedScrollEnabled={true}>\n          <View style={styles.container}>\n            <Button\n              title=\"Start Contact Shield\"\n              color=\"green\"\n              onPress={() => this.startContactShield()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Start Contact Shield Callback\"\n              color=\"green\"\n              onPress={() => this.startContactShieldCallback()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Stop Contact Shield\"\n              color=\"green\"\n              onPress={() => this.stopContactShield()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Start Contact Shield No Persistent\"\n              color=\"green\"\n              onPress={() => this.startContactShieldNoPersistent()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Periodic Key\"\n              color=\"green\"\n              onPress={() => this.getPeriodicKey()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Put Key Callback\"\n              color=\"green\"\n              onPress={() => this.putSharedKeyFilesCallback()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Put Key\"\n              color=\"green\"\n              onPress={() => this.putSharedKeyFiles()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Put Keys with Provider and Keys\"\n              color=\"green\"\n              onPress={() => this.putSharedKeyFilesKeysProvider()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Sketch\"\n              color=\"green\"\n              onPress={() => this.getContactSketch()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Detail\"\n              color=\"green\"\n              onPress={() => this.getContactDetail()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Clear All Data\"\n              color=\"green\"\n              onPress={() => this.clearAllData()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Contact Window Detail\"\n              color=\"green\"\n              onPress={() => this.getContactWindow()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Contact Shield Running\"\n              color=\"green\"\n              onPress={() => this.isContactShieldRunning()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Diagnosis Configuration\"\n              color=\"green\"\n              onPress={() => this.getDiagnosisConfiguration()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Enable Logger\"\n              color=\"green\"\n              onPress={() => this.enableLogger()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Disable Logger\"\n              color=\"green\"\n              onPress={() => this.disableLogger()}\n            />\n          </View>\n\n          \n          <View style={styles.container}>\n            <Button\n              title=\"GetStatus\"\n              color=\"green\"\n              onPress={() => this.getStatus()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get CS Version\"\n              color=\"green\"\n              onPress={() => this.getContactShieldVersion()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Device Calibration Conf\"\n              color=\"green\"\n              onPress={() => this.getDeviceCalibrationConfidence()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"IsSupport Scan Without Location\"\n              color=\"green\"\n              onPress={() => this.isSupportScanningWithoutLocation()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Set Shared Keys Data Mapping\"\n              color=\"green\"\n              onPress={() => this.setSharedKeysDataMapping()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Shared Keys Data Mapping\"\n              color=\"green\"\n              onPress={() => this.getSharedKeysDataMapping()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Get Daily Sketch\"\n              color=\"green\"\n              onPress={() => this.getDailySketch()}\n            />\n          </View>\n\n          <View style={styles.container}>\n            <Button\n              title=\"Put Shared Key Files Provider\"\n              color=\"green\"\n              onPress={() => this.putSharedKeyFilesProvider()}\n            />\n          </View>\n          \n          <View style={styles.container}>\n            <Button\n              title=\"Put Shared Key Files Keys\"\n              color=\"green\"\n              onPress={() => this.putSharedKeyFilesKeys()}\n            />\n          </View>\n       \n        </ScrollView>\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  mainContainer: {\n    flex: 1,\n    borderColor: \"green\",\n    borderWidth: 1,\n  },\n  textStyle: {\n    margin: 0,\n    fontSize: 16,\n    fontWeight: \"bold\",\n    textAlign: \"center\",\n    color: \"#344953\",\n  },\n  top: {\n    flex: 1,\n    flexDirection: \"row\",\n    justifyContent: \"flex-start\",\n    alignItems: \"center\",\n    margin: 20,\n  },\n  container: {\n    flexDirection: \"column\",\n    justifyContent: \"flex-start\",\n    alignItems: \"stretch\",\n    margin: 20,\n  },\n  scrollView: {\n    flex: 1,\n  },\n  btn: {\n    justifyContent: \"center\",\n    backgroundColor: \"green\",\n  },\n});\n"
  },
  {
    "path": "react-native-hms-contactshield/example/README.md",
    "content": "# React-Native HMS Contact Shield - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Contact Shield Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\n\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n\n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Contact Shield - Demo is licensed under [Apache 2.0 license](LICENCE)"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    entryFile: \"index.js\",\n    enableHermes: false,  // clean and rebuild if changing\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n            minifyEnabled false\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.contactshield.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET \" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHMSContactShieldDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHMSContactShieldDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n      <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/src/main/java/com/huawei/hms/rn/contactshield/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHMSContactShieldDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/src/main/java/com/huawei/hms/rn/contactshield/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.contactshield.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return true;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    // Packages that cannot be autolinked yet can be added manually here, for example:\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"29.0.2\"\n        minSdkVersion = 21\n        compileSdkVersion = 29\n        targetSdkVersion = 29\n    }\n    repositories {\n        google()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n        classpath (\"com.huawei.agconnect:agcp:1.4.2.301\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n\n        google()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n        maven { url 'https://jitpack.io' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-contactshield/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-contactshield/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHMSContactShieldDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'"
  },
  {
    "path": "react-native-hms-contactshield/example/app.json",
    "content": "{\n  \"name\": \"RNHMSContactShieldDemo\",\n  \"displayName\": \"RNHMSContactShieldDemo\"\n}"
  },
  {
    "path": "react-native-hms-contactshield/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-contactshield/example/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-contactshield/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-contactshield/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-contactshield-demo\",\n  \"version\": \"6.4.0-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"@hmscore/react-native-hms-contactshield\": \"6.4.0-300\",\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"react-native-file-picker\": \"0.0.19\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/runtime\": \"^7.6.2\",\n    \"@react-native-community/eslint-config\": \"^0.0.5\",\n    \"babel-jest\": \"^24.9.0\",\n    \"eslint\": \"^6.5.1\",\n    \"jest\": \"^24.9.0\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\",\n    \"react-test-renderer\": \"16.9.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-contactshield\",\n  \"title\": \"React Native HMS Contact Shield Kit\",\n  \"description\": \"React Native HMS Contact Shield Kit\",\n  \"version\": \"6.4.0-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-contactshield\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-contactshield\",\n    \"react-native-notification\",\n    \"hms-contactshield\",\n    \"hms-notification\",\n    \"huawei-contactshield\",\n    \"contactshield-kit\",\n    \"contactshield-notification\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENCE\",\n    \"THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}\n"
  },
  {
    "path": "react-native-hms-contactshield/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-contactshield\" {\n\n    export default HMSContactShieldModule = {\n        startContactShield(incubationPeriod: number): Promise<void>;,\n        startContactShieldCallback(incubationPeriod: number): Promise<void>;,\n        startContactShieldNoPersistent(incubationPeriod: number): Promise<void>;,\n        stopContactShield(): Promise<void>;,\n        getContactDetail(token: string): Promise<ContactDetail[]>;,\n        getContactSketch(token: string): Promise<ContactSketch>;,\n        putSharedKeyFiles(paths: string[], token: string, diagnosisConfiguration: DiagnosisConfiguration): Promise<void>;,\n        putSharedKeyFilesCallback(paths: string[], token: string, diagnosisConfiguration: DiagnosisConfiguration): Promise<void>;,\n        putSharedKeyFilesKeys(paths: string[], sharedKeyFiles: SharedKeyData): Promise<void>;,\n        putSharedKeyFilesProvider(paths: string[]): Promise<void>;,\n        putSharedKeyFilesKeysProvider(paths: string[], publicKeys: string[]): Promise<void>;,\n        getContactWindow(token: string): Promise<ContactWindow[]>;,\n        clearAllData(): Promise<void>;,\n        getPeriodicKey(): Promise<PeriodicKey[]>;,\n        isContactShieldRunning(): Promise<void>;,\n        getDiagnosisConfiguration(): Promise<DiagnosisConfiguration>;,\n        getDailySketch(dailySketchConfiguration: DailySketchConfiguration): Promise<DailySketch[]>;,\n        getSharedKeysDataMapping(): Promise<SharedKeysDataMapping>;,\n        setSharedKeysDataMapping(sharedKeysDataMapping: SharedKeysDataMapping): Promise<void>;,\n        isSupportScanningWithoutLocation(): Promise<boolean>;,\n        getDeviceCalibrationConfidence(): Promise<number>;,\n        getContactShieldVersion(): Promise<number>;,\n        getStatus(): Promise<ContactShieldStatus>;,\n        enableLogger(): null;,\n        disableLogger(): null;,\n    }\n\n    export declare enum HMSContactShieldSetting {\n        DEFAULT = 14\n    }\n\n    export declare enum ContactShieldStatus {\n        RUNNING = 1,\n        NOT_RUNNING = 2,\n        BLUETOOTH_OFF = 4,\n        LOCATION_OFF = 8,\n        NO_LOCATION_PERMISSION = 16,\n        HARDWARE_NOT_SUPPORT = 32,\n        STORAGE_LIMITED = 64,\n        RUNNING_FOR_ANOTHER_APP = 128,\n        UNKNOWN = 1024\n    }\n\n    export declare enum CalibrationConfidence {\n        LOWEST = 0,\n        LOW = 1,\n        MEDIUM = 2,\n        HIGH = 3\n    }\n\n    export declare enum HMSTokenMode {\n        TOKEN_A = \"TOKEN_WINDOW_MODE\"\n    }\n\n    export declare enum  HMSRiskLevel {\n        RISK_LEVEL_INVALID = 0,\n        RISK_LEVEL_LOWEST = 1,\n        RISK_LEVEL_LOW = 2,\n        RISK_LEVEL_MEDIUM_LOW = 3,\n        RISK_LEVEL_MEDIUM = 4,\n        RISK_LEVEL_MEDIUM_HIGH = 5,\n        RISK_LEVEL_HIGH = 6,\n        RISK_LEVEL_EXT_HIGH = 7,\n        RISK_LEVEL_HIGHEST = 8\n    }\n\n    export declare enum  HMSStatusCode {\n        STATUS_SUCCESS = 0,\n        STATUS_FAILURE = -1,\n        STATUS_API_DISORDER = 8001,\n        STATUS_APP_QUOTA_LIMITED = 8100,\n        STATUS_DISK_FULL = 8101,\n        STATUS_BLUETOOTH_OPERATION_ERROR = 8102,\n        STATUS_MISSING_PERMISSION_BLUETOOTH = 8016,\n        STATUS_MISSING_SETTING_LOCATION_ON = 8020,\n        STATUS_INTERNAL_ERROR = 8060,\n        STATUS_MISSING_PERMISSION_INTERNET = 8064\n    }\n\n    interface ContactDetail {\n        attenuationDurations: number[],\n        attenuationRiskValue: number,\n        dayNumber: number,\n        durationMinutes: number,\n        initialRiskLevel: number,\n        totalRiskValue: number\n    }\n\n    interface ContactSketch {\n        attenuationDurations: number[],\n        daysSinceLastHint: number,\n        maxRiskValue: number,\n        numberOfHits: number,\n        summationRiskValue: number\n    }\n\n    interface ContactWindow {\n        dateMillis: number,\n        getReportType: number,\n        scanInfos: ScanInfo[]\n    }\n\n    interface DailySketch {\n        daysSinceEpoch: number,\n        reportSketches: SketchData[],\n        sketchData: SketchData\n    }\n\n    interface DailySketchConfiguration {\n        weightsOfReportType: number[],\n        weightsOfContagiousness: number[],\n        thresholdOfAttenuationInDb: number[],\n        weightsOfAttenuationBucket: number[],\n        thresholdOfDaysSinceHit: number,\n        minWindowScore: number,\n    }\n\n    interface DiagnosisConfiguration {\n        attenuationDurationThresholds: number[],\n        attenuationRiskValue: number[],\n        daysAfterContactedRiskValues: number[],\n        durationRiskValues: number[],\n        initialRiskLevelRiskValues: number[],\n        minimumRiskValueThresold: number\n    }\n\n    interface PeriodicKey {\n        content: number[],\n        initialRiskLevel: number,\n        periodicKeyLifeTime: number,\n        periodicKeyValidTime: number,\n        reportType: number\n    }\n\n    interface SketchData {\n        maxScore: number,\n        scoreSum: number,\n        weightedDurationSum: number\n    }\n\n    interface SharedKeyData {\n        token: string,\n        diagnosisConfiguration: DiagnosisConfiguration,\n        publicKeys: string[]\n    }\n\n    interface SharedKeysDataMapping {\n        daysSinceCreationToContagiousness: number[],\n        defaultReportType: number,\n        defaultContagiousness: number\n    }\n\n    interface ScanInfo {\n        averageAttenuation: number,\n        minimumAttenuation: number,\n        secondsSinceLastScan: number\n    }\n\n}"
  },
  {
    "path": "react-native-hms-contactshield/src/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n  NativeModules,\n} from \"react-native\";\n\nconst {\n  HMSContactShieldModule,\n} = NativeModules;\n\nconst HMSStatusCode = {\n  STATUS_SUCCESS: 0,\n  STATUS_FAILURE: -1,\n  STATUS_API_DISORDER: 8001,\n  STATUS_APP_QUOTA_LIMITED: 8100,\n  STATUS_DISK_FULL: 8101,\n  STATUS_BLUETOOTH_OPERATION_ERROR: 8102,\n  STATUS_MISSING_PERMISSION_BLUETOOTH: 8016,\n  STATUS_MISSING_SETTING_LOCATION_ON: 8020,\n  STATUS_INTERNAL_ERROR: 8060,\n  STATUS_MISSING_PERMISSION_INTERNET: 8064\n}\nObject.freeze(HMSStatusCode);\n\nconst HMSTokenMode = {\n  TOKEN_A: \"TOKEN_WINDOW_MODE\"\n}\nObject.freeze(HMSTokenMode);\n\nconst HMSContactShieldSetting = {\n  DEFAULT: 14\n}\nObject.freeze(HMSContactShieldSetting);\n\nconst HMSRiskLevel = {\n  RISK_LEVEL_INVALID: 0,\n  RISK_LEVEL_LOWEST: 1,\n  RISK_LEVEL_LOW: 2,\n  RISK_LEVEL_MEDIUM_LOW: 3,\n  RISK_LEVEL_MEDIUM: 4,\n  RISK_LEVEL_MEDIUM_HIGH: 5,\n  RISK_LEVEL_HIGH: 6,\n  RISK_LEVEL_EXT_HIGH: 7,\n  RISK_LEVEL_HIGHEST: 8\n}\nObject.freeze(HMSRiskLevel);\n\nconst ContactShieldStatus = {\n  RUNNING: 1,\n  NOT_RUNNING: 2,\n  BLUETOOTH_OFF: 4,\n  LOCATION_OFF: 8,\n  NO_LOCATION_PERMISSION: 16,\n  HARDWARE_NOT_SUPPORT: 32,\n  STORAGE_LIMITED: 64,\n  RUNNING_FOR_ANOTHER_APP: 128,\n  UNKNOWN: 1024\n}\nObject.freeze(ContactShieldStatus);\n\nconst CalibrationConfidence = {\n  LOWEST: 0,\n  LOW: 1,\n  MEDIUM: 2,\n  HIGH: 3\n}\nObject.freeze(CalibrationConfidence);\n\nexport default HMSContactShieldModule;\n\nexport { HMSContactShieldSetting, HMSTokenMode, HMSStatusCode, HMSRiskLevel, ContactShieldStatus, CalibrationConfidence};"
  },
  {
    "path": "react-native-hms-dtm/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-dtm/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS DTM</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-dtm\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-dtm?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-dtm\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-dtm?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-dtm.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI Dynamic Tag Manager (DTM) is a dynamic tag management system. With DTM, it allows you to dynamically update its tags in a web-based user interface to track specific events and report them to third-party analytics platforms, as well as tracking types of marketing activities.\n\nThe React Native Plugin enables communication between HUAWEI DTM SDK and React Native platform. HUAWEI DTM offers you a range of preset DTM models so you can gain a deeper insight in.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/about-the-service-0000001055654101?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-dtm\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/integrating-sdk-0000001077774624?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001057153998-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Operations on the Server](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/operation-server-overview-0000001077378810?ha_source=hms1)\n- [Development Guide](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/dev-guide-overiview-0000001096471561?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with \n**huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-dtm/android/build.gradle",
    "content": "buildscript {\n    repositories {\n        jcenter()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.5.0.300\")\n    }\n}\n\napply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.3\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    jcenter()\n    google()\n    maven { url 'https://developer.huawei.com/repo/' }\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n        // for import com.facebook.react.ReactApplication;\n    }\n}\n\ndef safeExtGet(prop, fallback) {\n    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n\n    implementation 'com.huawei.hms:hianalytics:6.7.0.300'\n    implementation 'com.huawei.hms:dtm-api:6.6.0.300'\n\n    def supportLibVersion = safeExtGet('supportLibVersion', '27.1.1')\n    def supportLibMajorVersion = supportLibVersion.split('\\\\.')[0] as int\n    def appCompatLibName = (supportLibMajorVersion < 20) ? \"androidx.appcompat:appcompat\" : \"com.android.support:appcompat-v7\"\n\n    implementation \"$appCompatLibName:$supportLibVersion\"\n}\n\napply plugin: 'com.huawei.agconnect'"
  },
  {
    "path": "react-native-hms-dtm/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-dtm/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-dtm/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-dtm/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.dtm\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application>\n        <provider\n            android:name=\".HMSDtmProvider\"\n            android:authorities=\"${applicationId}.hmsAnalyticsProvider\"\n            android:exported=\"false\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/HMSDtmModule.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSDtmModule extends ReactContextBaseJavaModule {\n    private final HMSDtmWrapper hmsDtmWrapper;\n\n    public HMSDtmModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        hmsDtmWrapper = new HMSDtmWrapper(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"HMSDTMModule\";\n    }\n\n    /**\n     * It is Analytics' onEvent API. It reports to Analytics.\n     *\n     * @param eventId: String\n     * @param map:     ReadableMap\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void onEvent(String eventId, ReadableMap map, Promise promise) {\n        hmsDtmWrapper.onEvent(eventId, map, promise);\n    }\n\n    /**\n     * Sets the returnValue value for CustomVariable.\n     *\n     * @param varName: String\n     * @param value:   String\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void setCustomVariable(String varName, String value, Promise promise) {\n        hmsDtmWrapper.setCustomVariable(varName, value, promise);\n    }\n\n    /**\n     * Enables logging.\n     *\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void enableLogger(Promise promise) {\n        hmsDtmWrapper.enableLogger(promise);\n    }\n\n    /**\n     * Disables logging.\n     *\n     * @param promise: WritableMap\n     */\n    @ReactMethod\n    public void disableLogger(Promise promise) {\n        hmsDtmWrapper.disableLogger(promise);\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/HMSDtmPackage.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSDtmPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new HMSDtmModule(reactContext));\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/HMSDtmProvider.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm;\n\nimport android.content.ContentProvider;\nimport android.content.ContentValues;\nimport android.database.Cursor;\nimport android.net.Uri;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.analytics.HiAnalytics;\nimport com.huawei.hms.analytics.HiAnalyticsInstance;\n\npublic class HMSDtmProvider extends ContentProvider {\n\n    private String TAG = HMSDtmProvider.class.getSimpleName();\n\n    @Override\n    public boolean onCreate() {\n        Log.i(TAG, \"::onCreate::\");\n        HiAnalyticsInstance instance = HiAnalytics.getInstance(this.getContext());\n        instance.setAnalyticsEnabled(true);\n        return false;\n    }\n\n    @Override\n    public Cursor query(@NonNull Uri uri, String[] strings, String s, String[] strings1, String s1) {\n        return null;\n    }\n\n    @Override\n    public String getType(@NonNull Uri uri) {\n        return null;\n    }\n\n    @Override\n    public Uri insert(@NonNull Uri uri, ContentValues contentValues) {\n        return null;\n    }\n\n    @Override\n    public int delete(@NonNull Uri uri, String s, String[] strings) {\n        return 0;\n    }\n\n    @Override\n    public int update(@NonNull Uri uri, ContentValues contentValues, String s, String[] strings) {\n        return 0;\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/HMSDtmWrapper.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm;\n\nimport android.content.Context;\nimport android.net.ConnectivityManager;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.analytics.HiAnalytics;\nimport com.huawei.hms.analytics.HiAnalyticsInstance;\nimport com.huawei.hms.rn.dtm.helpers.ContextHolder;\nimport com.huawei.hms.rn.dtm.helpers.MapHelper;\nimport com.huawei.hms.rn.dtm.interfaces.CustomVariable;\nimport com.huawei.hms.rn.dtm.logger.HMSLogger;\n\npublic class HMSDtmWrapper {\n    private static String errorMessage = \"Failed! Please check your params.\";\n    private static String successMessage = \"Success\";\n    private static String tag = \"DTM Wrapper:: \";\n    private final HiAnalyticsInstance analyticsInstance;\n    private final ReactContext cContext;\n\n    public HMSDtmWrapper(ReactContext context) {\n        cContext = context;\n        this.analyticsInstance = HiAnalytics.getInstance(context);\n        ContextHolder.getInstance().setContext(context);\n    }\n\n    public void onEvent(String eventId, ReadableMap map, Promise promise) {\n        if (!isNetworkAvailable()) {\n            String netWorkError = \"Check your internet access !\";\n            WritableMap responseObject = MapHelper.createResponseObject(true,\n                    \"onEvent\", netWorkError);\n            promise.resolve(responseObject);\n            return;\n        }\n        try {\n            if (map == null || eventId == null) {\n                WritableMap responseObject = MapHelper.createResponseObject(true,\n                        \"onEvent\", errorMessage);\n                promise.resolve(responseObject);\n                return;\n            }\n            Log.i(tag, \"onEvent:: \");\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                HMSLogger.getInstance(cContext).startMethodExecutionTimer(\"onEvent: \" + eventId);\n            }\n            Bundle bundle = MapHelper.mapToBundle(map);\n            analyticsInstance.onEvent(eventId, bundle);\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                HMSLogger.getInstance(cContext).sendSingleEvent(\"onEvent: \" + eventId);\n            }\n            WritableMap responseObject = MapHelper.createResponseObject(false,\n                    \"onEvent\", successMessage);\n            promise.resolve(responseObject);\n        } catch (IllegalArgumentException e) {\n            WritableMap responseObject = MapHelper.createResponseObject(true,\n                    \"onEvent\", e.toString());\n            promise.resolve(responseObject);\n        }\n    }\n\n    public void setCustomVariable(String varName, String value, Promise promise) {\n        try {\n            Log.i(tag, \"setCustomVariable:: \");\n            if (!varName.isEmpty() && !value.isEmpty()) {\n                CustomVariable.setter(varName, value);\n                WritableMap responseObject = MapHelper.createResponseObject(false,\n                        \"setCustomVariable\", successMessage);\n                promise.resolve(responseObject);\n            } else {\n                WritableMap responseObject = MapHelper.createResponseObject(true,\n                        \"setCustomVariable\", errorMessage);\n                promise.resolve(responseObject);\n            }\n        } catch (IllegalArgumentException e) {\n            WritableMap responseObject = MapHelper.createResponseObject(true,\n                    \"setCustomVariable\", e.toString());\n            promise.resolve(responseObject);\n        }\n    }\n\n    public void enableLogger(final Promise promise) {\n        Log.i(tag, \"enableLogger:: \");\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            HMSLogger.getInstance(cContext).enableLogger();\n        }\n        WritableMap responseObject = MapHelper.createResponseObject(false,\n                \"enableLogger\", true);\n        promise.resolve(responseObject);\n    }\n\n    public void disableLogger(final Promise promise) {\n        Log.i(tag, \"enableLogger:: \");\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            HMSLogger.getInstance(cContext).disableLogger();\n        }\n\n        WritableMap responseObject = MapHelper.createResponseObject(false,\n                \"disableLogger\", false);\n        promise.resolve(responseObject);\n    }\n\n    public boolean isNetworkAvailable() {\n        ConnectivityManager connectivityManager = ((ConnectivityManager) cContext.getSystemService(Context.CONNECTIVITY_SERVICE));\n        return connectivityManager.getActiveNetworkInfo() != null\n                && connectivityManager.getActiveNetworkInfo().isConnected();\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/helpers/ContextHolder.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.helpers;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\n\npublic final class ContextHolder {\n    @SuppressLint(\"StaticFieldLeak\")\n    private static ContextHolder instance;\n    private Context context;\n\n    private ContextHolder() {\n    }\n\n    public static synchronized ContextHolder getInstance() {\n        if (instance == null) {\n            instance = new ContextHolder();\n        }\n        return instance;\n    }\n\n    public Context getContext() {\n        return context;\n    }\n\n    public void setContext(Context context) {\n        this.context = context;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/helpers/MapHelper.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.helpers;\n\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.Iterator;\n\nimport static com.facebook.react.bridge.Arguments.createMap;\n\npublic class MapHelper {\n\n    /**\n     * Converts a ReadableMap instance to a Bundle.\n     *\n     * @param map: JSONObject instance.\n     * @return WritableMap\n     */\n\n    public static Bundle mapToBundle(ReadableMap map) {\n        String tag = \"DTM wrapper::\";\n        Bundle bundle = new Bundle();\n\n        if (map == null) {\n            Log.i(tag, \"event params is null\");\n            return bundle;\n        }\n\n        ReadableMapKeySetIterator keySetIterator = map.keySetIterator();\n        while (keySetIterator.hasNextKey()) {\n            String key = keySetIterator.nextKey();\n            switch (map.getType(key)) {\n                case Boolean:\n                    bundle.putBoolean(key, map.getBoolean(key));\n                    break;\n                case Number:\n                    bundle.putDouble(key, map.getDouble(key));\n                    break;\n                case String:\n                    bundle.putString(key, map.getString(key));\n                    break;\n                case Array: {\n                    ReadableArray rArray = map.getArray(key);\n                    assert rArray != null;\n                    ArrayList<Bundle> listBundle = bundleArrayList(rArray);\n                    bundle.putParcelableArrayList(\"items\", listBundle);\n                    break;\n                }\n                default:\n                    break;\n            }\n        }\n        return bundle;\n    }\n\n    private static ArrayList<Bundle> bundleArrayList(ReadableArray rArray) {\n        ArrayList<Bundle> bundleArrayList = new ArrayList<>();\n        for (int i = 0; i < rArray.size(); i++) {\n            ReadableMap map = rArray.getMap(i);\n            Bundle bundle = mapToBundle(map);\n            bundleArrayList.add(bundle);\n        }\n        return bundleArrayList;\n    }\n\n\n    /**\n     * Converts an DTM response Object to a WritableMap.\n     *\n     * @param instance: DTM response Object.\n     * @param <T>:      Generic class type.\n     * @param hasError: boolean.\n     * @return WritableMap\n     */\n    public static <T> WritableMap createResponseObject(boolean hasError, String methodName, final T instance) {\n        WritableMap writableMap = createMap();\n        if (methodName.isEmpty()) {\n            return writableMap;\n        }\n\n        // create an error message\n        if (hasError && instance instanceof String) {\n            String errorMessage = (String) instance;\n            writableMap.putString(\"errorMessage\", errorMessage);\n        } else if (hasError) {\n            writableMap.putString(\"errorMessage\", methodName + \" failed!\");\n        } else {\n            writableMap.putString(\"errorMessage\", null);\n        }\n\n        // create response data\n        if (instance == null) {\n            writableMap.putString(\"data\", null);\n        } else if (instance instanceof JSONObject) {\n            JSONObject jsonObject = (JSONObject) instance;\n            writableMap = toWritableMap(jsonObject);\n        } else if (instance instanceof String) {\n            String instanceString = (String) instance;\n            writableMap.putString(\"data\", instanceString);\n        } else if (instance instanceof Boolean) {\n            boolean instanceBoolean = (Boolean) instance;\n            writableMap.putBoolean(\"data\", instanceBoolean);\n        } else {\n            writableMap.putString(\"data\", \"Success\");\n        }\n        return writableMap;\n    }\n\n    /**\n     * Converts a JSONObject instance to a WritableMap.\n     *\n     * @param jsonObject: JSONObject instance.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final JSONObject jsonObject) {\n        WritableMap map = new WritableNativeMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            try {\n                Object value = jsonObject.get(key);\n                if (value instanceof JSONObject) {\n                    map.putMap(key, toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    map.putArray(key, toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    map.putBoolean(key, (Boolean) value);\n                } else if (value instanceof Integer) {\n                    map.putInt(key, (Integer) value);\n                } else if (value instanceof Double) {\n                    map.putDouble(key, (Double) value);\n                } else if (value instanceof String) {\n                    map.putString(key, (String) value);\n                } else {\n                    map.putString(key, value.toString());\n                }\n            } catch (JSONException e) {\n                createResponseObject(true, \"toWritableMap\", e.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts a JSONArray into a WritableArray.\n     *\n     * @param jsonArray: JSONArray instance.\n     * @return WritableArray\n     */\n    public static WritableArray toWritableArray(final JSONArray jsonArray) {\n        WritableArray array = new WritableNativeArray();\n        for (int i = 0; i < jsonArray.length(); i++) {\n            try {\n                Object value = jsonArray.get(i);\n                if (value instanceof JSONObject) {\n                    array.pushMap(toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    array.pushArray(toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    array.pushBoolean((Boolean) value);\n                } else if (value instanceof Integer) {\n                    array.pushInt((Integer) value);\n                } else if (value instanceof Double) {\n                    array.pushDouble((Double) value);\n                } else if (value instanceof String) {\n                    array.pushString((String) value);\n                } else {\n                    array.pushString(value.toString());\n                }\n            } catch (JSONException e) {\n                createResponseObject(true, \"toWritableArray\", e.toString());\n            }\n        }\n        return array;\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/interfaces/CustomTag.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.interfaces;\n\nimport android.os.Build;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.dtm.ICustomTag;\nimport com.huawei.hms.rn.dtm.helpers.ContextHolder;\nimport com.huawei.hms.rn.dtm.helpers.MapHelper;\nimport com.huawei.hms.rn.dtm.logger.HMSLogger;\n\nimport org.json.JSONObject;\n\nimport java.util.Map;\n\npublic class CustomTag implements ICustomTag {\n\n    @Override\n    public void call(Map<String, Object> map) {\n        ReactApplicationContext context = (ReactApplicationContext) ContextHolder.getInstance().getContext();\n        try {\n            if (ContextHolder.getInstance().getContext() != null) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    HMSLogger.getInstance(ContextHolder.getInstance().getContext()).startMethodExecutionTimer(\"CustomTag\");\n                }\n            }\n            JSONObject jsonObject = new JSONObject(map);\n            WritableMap writableMap = MapHelper.toWritableMap(jsonObject);\n\n            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(\"CustomTag\", writableMap);\n\n            if (ContextHolder.getInstance().getContext() != null) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    HMSLogger.getInstance(ContextHolder.getInstance().getContext()).sendSingleEvent(\"CustomTag\");\n                }\n            }\n        } catch (IllegalArgumentException e) {\n            WritableMap errorMap = MapHelper.createResponseObject(true, \"CustomTag-call\", e.toString());\n            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(\"CustomTag\", errorMap);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/interfaces/CustomVariable.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.interfaces;\n\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.dtm.ICustomVariable;\nimport com.huawei.hms.rn.dtm.helpers.ContextHolder;\nimport com.huawei.hms.rn.dtm.helpers.MapHelper;\nimport com.huawei.hms.rn.dtm.logger.HMSLogger;\n\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class CustomVariable implements ICustomVariable {\n\n    private static Map<String, String> RETURN_MAP = new HashMap<>();\n\n    public static void setter(String varName,String value) {\n        RETURN_MAP.put(varName,value);\n    }\n\n    @Override\n    public String getValue(Map<String, Object> map) {\n        String returnValue = \"\";\n        ReactApplicationContext context = (ReactApplicationContext) ContextHolder.getInstance().getContext();\n        try {\n            if (ContextHolder.getInstance().getContext() != null) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    HMSLogger.getInstance(ContextHolder.getInstance().getContext()).startMethodExecutionTimer(\"CustomVariable\");\n                }\n            }\n            JSONObject jsonObject = new JSONObject(map);\n            WritableMap writableMap = MapHelper.toWritableMap(jsonObject);\n            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(\"CustomVariable\", writableMap);\n\n            String name = \"\";\n            Object value = map.get(\"varName\");\n            if (!(value instanceof String)) {\n                Log.i(\"CustomVariable:: \", \"Non-empty String expected for varName\");\n            } else {\n                name = value.toString();\n            }\n\n            if (map.containsValue(name)) {\n                returnValue = (RETURN_MAP.get(\"varName\"))+\"\";\n            }\n\n            if (ContextHolder.getInstance().getContext() != null) {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    HMSLogger.getInstance(ContextHolder.getInstance().getContext()).sendSingleEvent(\"CustomVariable\");\n                }\n            }\n\n        } catch (IllegalArgumentException e) {\n            WritableMap requestObject = MapHelper.createResponseObject(true, \"CustomVariable-getValue\", e.toString());\n            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(\"CustomVariable\", requestObject);\n        }\n        return returnValue;\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/android/src/main/java/com/huawei/hms/rn/dtm/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ReactNativeDTM\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"6.6.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n                                                    final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n# VSCode\n.vscode\n\n*.project\n*.classpath\n*.tgz\n*.jks\nagconnect-services.json\npackage-lock.json\nexample/package-lock.json"
  },
  {
    "path": "react-native-hms-dtm/example/App.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  StyleSheet,\n  Text,\n  View,\n  ScrollView,\n  Dimensions,\n  TouchableOpacity,\n  ActivityIndicator,\n  DeviceEventEmitter,\n  Easing\n} from 'react-native';\n\nimport HMSDtmModule from '@hmscore/react-native-hms-dtm';\nexport const ScreenWidth = Dimensions.get(\"window\").width;\nexport const ScreenHeight = Dimensions.get(\"window\").height;\n\nexport default class App extends React.Component {\n\n  constructor() {\n    super();\n    this.state = { showProgress: false }\n  }\n  async componentDidMount() {\n\n    DeviceEventEmitter.addListener('CustomTag', (map) => {\n      console.log(\"CustomTag::\" + JSON.stringify(map))\n\n      //For CustomVariable\n      if (map.price == \"90\" && map.discount == \"10\") {\n        this.setCustomVariable(map)\n      }\n    })\n\n    DeviceEventEmitter.addListener('CustomVariable', (map) => {\n      console.log(\"CustomVariable::\" + JSON.stringify(map))\n    })\n  }\n\n  async customEvent() {\n    /*NOTE: \n      Firebase, AppsFlyer configurations can be related with this event.\n      In this case, platformName should be created as an \"Event parameter\" on the console.\n      You can use the documentation of the kit for examples.\n    */\n    this.setState({showProgress: true})\n    const eventId = \"Purchase\";\n    const bundle = {\n      price: 9,\n      quantity: 100,\n      currency: \"CNY\"\n    }\n\n    HMSDtmModule.onEvent(eventId, bundle)\n      .then((res) => { this.showResult(\"CustomEvent::\", true, res) })\n      .catch((err) => { this.showResult(\"CustomEvent Err::\", true, err) })\n\n  }\n\n  async customEventBundleList() {\n    const eventId = \"$ViewProductList\"\n    const bundleList = []\n    const product1 = {\n     \"$ProductId\":\"HUAWEI_Mate_40_AI8I03Q423G\",\n     \"$ProductName\":\"HUAWEI Mate 40 Pro\",\n     \"$Category\": \"Phone/Mate/Black\",\n     \"$ProductFeature\":\"Black\",\n     \"$Brand\": \"HUAWEI\",\n     \"$Price\":6999.00,\n     \"$CurrName\":\"CNY\",\n     \"$PositionId\":1\n    }\n\n    const product2 = {\n      \"$ProductId\":\"HUAWEI_Mate_40_AI8I03QJ2J90\",\n      \"$ProductName\":\"HUAWEI Mate 40 Pro\",\n      \"$Category\": \"Phone/Mate/Yellow\",\n      \"$ProductFeature\":\"Yellow\",\n      \"$Brand\": \"HUAWEI\",\n      \"$Price\":6999.00,\n      \"$CurrName\":\"CNY\",\n      \"$PositionId\":2\n    }\n\n    bundleList.push(product1)\n    bundleList.push(product2)\n\n    const ecommerceBundle = {\n      items: bundleList,\n      \"$ProductList\": \"Search Results\"\n    }\n    HMSDtmModule.onEvent(eventId, ecommerceBundle)\n    .then((res) => { this.showResult(\"CustomEventBundleList::\", true, res) })\n    .catch((err) => { this.showResult(\"CustomEventBundleList Err::\", true, err) })\n  }\n\n  //CustomTag\n  async customTag() {\n    this.setState({showProgress: true})\n    const eventId = \"PurchaseShoes\"\n    const bundle = {\n      \"itemName\": \"Shoes\",\n      \"quantity\": \"1\",\n    }\n\n    HMSDtmModule.onEvent(eventId, bundle)\n      .then((res) => { this.showResult(\"CustomTag::\", true, res) })\n      .catch((err) => { this.showResult(\"CustomTag Err::\", true, err) })\n  }\n\n  //CustomVariable with Tag\n  async tagWithCustVar() {\n    this.setState({showProgress: true})\n    const eventId = \"PantsSold\"\n    const bundle = {\n      \"discount\": \"10\",\n      \"price\": \"100\"\n    }\n\n    HMSDtmModule.onEvent(eventId, bundle)\n      .then((res) => { this.showResult(\"tagWithCustVar::\", false, res) })\n      .catch((err) => { this.showResult(\"tagWithCustVar Err::\", true, err) })\n  }\n\n  //Sets the return value for the CustomVariable.\n  async setCustomVariable(map) {\n    this.setState({showProgress: true})\n    var price = Number(map.price)\n    var discount = Number(map.discount)\n    const value = Number(price - (discount * price) / 100)\n\n    HMSDtmModule.setCustomVariable(\"varName\", value + \"\")\n      .then((res) => {\n        this.showResult(\"setCustomVariable:: \", false, res)\n        this.customVariable(res)\n      })\n      .catch((err) => { this.showResult(\"setCustomVariable Err::\", true, err) })\n  }\n\n  async customVariable(response) {\n\n    if (response.data == \"Success\") {\n      this.setState({showProgress: true})\n      const eventId = \"PurchasePants\"\n      const bundle = {\n        \"varName\": \"PantsPrice\"\n      }\n      HMSDtmModule.onEvent(eventId, bundle)\n        .then((res) => { this.showResult(\"customVariable::\", true, res) })\n        .catch((err) => { this.showResult(\"customVariable Err::\", true, err) })\n    } else {\n      this.showResult(\"customVariable-response.data::\", true, \"null\")\n    }\n\n  }\n\n  //HMS Logger\n  async enableLogger() {\n    HMSDtmModule.enableLogger()\n      .then((res) => { this.showResult(\"HMSLogger-enabled::\", true, res) })\n      .catch((err) => { this.showResult(\"HMSLogger-enabled Err::\", true, err) })\n  }\n\n  async disableLogger() {\n    HMSDtmModule.disableLogger()\n      .then((res) => { this.showResult(\"HMSLogger-disabled::\", true, res) })\n      .catch((err) => { this.showResult(\"HMSLogger-disabled Err::\", true, err) })\n  }\n\n  //UI\n  showResult(desc, hasAlert, res) {\n    if (res != undefined && hasAlert) {\n      alert(desc + \":\\n\" + JSON.stringify(res),Easing)\n      console.log(desc + \"::\" + res)\n    } else if (res != undefined && !hasAlert) {\n      console.log(desc + \":\\n\" + res)\n    }\n    this.setState({ showProgress: false })\n  }\n\n  render() {\n    return (\n      <View style={styles.mainContainer}>\n\n        <View style={styles.header}>\n          <Text style={styles.headerTitle}>\\|/   </Text>\n          <Text style={styles.headerTitle}>HMS DTM Plugin</Text>\n          <Text style={styles.headerTitle}>   \\|/</Text>\n        </View>\n\n        <ScrollView\n          ref={(scrollView) => { this._scrollView = scrollView; }}\n          onScroll={this.handleScroll}\n          style={styles.scrollView}\n          nestedScrollEnabled={true}>\n\n          {this.state.showProgress ? (\n            <View style={styles.disableOverlay}>\n              <ActivityIndicator\n                size={\"large\"}\n                color={\"orange\"}\n                style={styles.activityIndicator}\n              />\n            </View>\n          ) : null}\n\n          <View style={styles.container}>\n            <View style={styles.partialView}>\n              <Text style={styles.title}>DTM Module</Text>\n\n              <TouchableOpacity activeOpacity={.8} style={styles.btn}\n                onPress={() => this.customEvent()}>\n                <Text style={styles.txt}> Basic Custom Event </Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.8} style={styles.btn}\n                onPress={() => this.customEventBundleList()}>\n                <Text style={styles.txt}>Custom Event-Bundle List</Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.8} style={styles.btn}\n                onPress={() => this.customTag()}>\n                <Text style={styles.txt}> Custom Tag </Text>\n              </TouchableOpacity>\n\n              <TouchableOpacity activeOpacity={.8} style={styles.btn}\n                onPress={() => this.tagWithCustVar()}>\n                <Text style={styles.txt}>CustomVariable With CustomTag</Text>\n              </TouchableOpacity>\n\n            </View>\n\n          </View>\n\n        </ScrollView>\n      </View>\n    )\n  }\n}\n\nconst styles = StyleSheet.create({\n  mainContainer: {\n    flex: 1,\n    backgroundColor: 'black',\n    borderColor: 'orange',\n    borderWidth: 1\n  },\n  scrollView: {\n    flex: 1\n  },\n  disableOverlay: {\n    zIndex: 10,\n    backgroundColor: \"black\",\n    opacity: 0.8,\n    position: \"absolute\",\n    width: ScreenWidth,\n    height: ScreenHeight,\n  },\n  activityIndicator: {\n    top: 100,\n    alignSelf: \"center\",\n    position: \"absolute\",\n    zIndex: 11,\n  },\n  container: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'center',\n    paddingBottom: 50\n  },\n  partialView: {\n    marginTop: 10,\n    width: \"100%\"\n  },\n  header: {\n    backgroundColor: 'black',\n    height: 160,\n    width: '100%',\n    flexDirection: 'row',\n    borderBottomColor: 'orange',\n    borderBottomWidth: 1,\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  headerTitle: {\n    fontSize: 22,\n    fontWeight: 'bold',\n    color: '#FFB300'\n  },\n  btn: {\n    marginTop: 15,\n    width: 125,\n    height: 45,\n    justifyContent: 'center',\n    alignSelf: 'center',\n    borderRadius: 10,\n    marginLeft: 5,\n    marginRight: 5,\n    borderColor: \"orange\",\n    borderWidth: 1\n  },\n  txt: {\n    fontSize: 14,\n    color: '#FFA500',\n    textAlign: 'center'\n  },\n  title: {\n    fontSize: 18,\n    color: '#FFB300',\n    width: 200,\n    alignSelf: 'center',\n    borderBottomColor: '#FFB300',\n    borderBottomWidth: .7,\n    textAlign: 'center',\n    marginTop: 30\n  },\n  input: {\n    color: \"orange\",\n    width: 80,\n    height: 45,\n    alignSelf: 'center',\n    borderColor: \"yellow\",\n    borderWidth: .5,\n    marginTop: 20\n\n  }\n})"
  },
  {
    "path": "react-native-hms-dtm/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-dtm/example/README.md",
    "content": "# React-Native HMS DTM - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native DTM Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). You may need to change the package name on AndroidManifest.xml and MainActivity.java respectively.\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS DTM - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.hms.rn.dtm.demo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.hms.rn.dtm.demo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        enableHermes: false,\n        entryFile   : \"index.js\"\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n         applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"\n    implementation \"com.huawei.agconnect:agconnect-core:1.4.2.301\"\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.dtm.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHMSDTM Demo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHMSDTM Demo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:screenOrientation=\"portrait\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n      <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/src/main/java/com/huawei/hms/rn/dtm/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    // Returns the name of the main component registered from JavaScript.\n    // This is used to schedulerendering of the component.\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHMSDTM Demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/src/main/java/com/huawei/hms/rn/dtm/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.dtm.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"29.0.2\"\n        minSdkVersion = 19\n        compileSdkVersion = 29\n        targetSdkVersion = 29\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.7.2.300\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\n\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-dtm/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHMSDTM Demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'"
  },
  {
    "path": "react-native-hms-dtm/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-dtm/example/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry } from 'react-native';\nimport App from './App';\n\nAppRegistry.registerComponent(\"RNHMSDTM Demo\", () => App);\n"
  },
  {
    "path": "react-native-hms-dtm/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-dtm/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-dtm-demo\",\n  \"version\": \"6.6.0-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"@hmscore/react-native-hms-dtm\": \"6.6.0-300\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.9.0\",\n    \"@babel/runtime\": \"^7.9.0\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-dtm/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-dtm\",\n  \"title\": \"React Native HMS DTM Kit\",\n  \"description\": \"React Native HMS DTM Kit\",\n  \"version\": \"6.6.0-300\",\n  \"main\": \"./src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-dtm\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-dtm\",\n    \"react-native-dynamic-tag-manager\",\n    \"hms-dynamic-tag-manager\",\n    \"hms-dtm\",\n    \"huawei-dtm\",\n    \"dynamic-tag-manager\",\n    \"dtm-kit\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"README.md\",\n    \"package.json\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\"\n  },\n  \"types\": \"./src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-dtm/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-dtm\" { \n    \n    interface ResponseObject {\n\n        /**\n         * Succes scenario: The data is not null.\n         * Failure scenario: The data is null.\n         */\n         data: string | boolean | number;\n\n         /**\n          * Succes scenario: The value of errorMessage is null.\n          * Failure scenario: The value of errorMessage is not null.\n          */\n         errorMessage: string;\n    }\n\n    interface Map {\n\n        /**\n         * \"Value\" element of the key-value pair.\n         */\n         value: string | boolean | number;\n\n         /**\n          * \"Key\" element of a key-value pair.\n          */\n          key: string;\n    }\n\n    export default class HMSDtmModule {\n        \n        /**\n         * Reports an event.\n         */\n        static onEvent(eventId: string, map: Map): Promise<ResponseObject>;\n\n        /**\n         * Sets the variable value in the CustomVariable class which will return to the server.\n         */\n        static setCustomVariable(varName: string, value: string | boolean | number): Promise<ResponseObject>;\n\n        /**\n         * Enables HMS Plugin Function Analytics.\n         */\n        static enableLogger(): Promise<ResponseObject>;\n\n        /**\n         * Disables HMS Plugin Function Analytics.\n         */\n        static disableLogger(): Promise<ResponseObject>;\n    }\n}"
  },
  {
    "path": "react-native-hms-dtm/src/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nconst { HMSDTMModule } = NativeModules;\nexport default HMSDTMModule;"
  },
  {
    "path": "react-native-hms-health/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-health/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Health</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-health\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-health?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-health\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-health?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-health.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI Health Kit (Health Kit for short) allows ecosystem apps to access fitness and health data of users based on their HUAWEI ID and authorization. For consumers, Health Kit provides a mechanism for fitness and health data storage and sharing based on flexible authorization. For developers and partners, Health Kit provides a data platform and fitness and health open capabilities, so that they can build related apps and services based on a multitude of data types. Health Kit connects the hardware devices and ecosystem apps to provide consumers with health care, workout guidance, and ultimate service experience.\n\nThis module enables communication between Huawei Health SDK and React Native platform. It exposes all functionality provided by Huawei Health SDK.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050155802?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-health\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/overview-0000001053302178?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001074141482-V1?ha_source=hms1)\n\n## Additional Topics\n\n- [Signing In and Applying for Scopes](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/callsignapi-0000001050155812?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-health/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        //Add Maven HMS\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility = 1.8\n        targetCompatibility = 1.8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    jcenter()\n    mavenCentral()\n    google()\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    // HMS HEALTH\n    implementation \"com.huawei.hms:health:6.11.0.303\"\n    // AGCONNECT\n    implementation \"com.huawei.agconnect:agconnect-core:1.9.1.300\"\n}\n"
  },
  {
    "path": "react-native-hms-health/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-health/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-health/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-health/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.health\">\n\n    <uses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.BODY_SENSORS\" />\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application>\n        <service android:name=\"com.huawei.hms.rn.health.kits.activityrecords.util.ActivityRecordBackgroundService\" />\n\n\n        <!-- To Listen Data Register Events DataRegisterReceiver is initialized here. -->\n        <receiver\n                android:name=\"com.huawei.hms.rn.health.kits.datacontroller.receiver.DataRegisterReceiver\"\n                android:enabled=\"true\"\n                android:exported=\"true\" />\n        <!-- To Listen Activity Record Events ActivityRecordsMonitorReceiver is initialized here. -->\n        <receiver\n                android:name=\"com.huawei.hms.rn.health.kits.activityrecords.receiver.ActivityRecordsMonitorReceiver\"\n                android:enabled=\"true\"\n                android:exported=\"true\" />\n\n        <service \n                android:name=\"com.huawei.hms.rn.health.kits.autorecorder.utils.AutoRecorderBackgroundService\"\n                android:exported=\"false\">\n            <intent-filter android:priority=\"1000\">\n                <action android:name=\"HealthKitService\" />\n            </intent-filter>\n        </service>\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/HmsHealthPackage.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health;\n\nimport com.huawei.hms.rn.health.kits.account.HmsHealthAccount;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\nimport com.huawei.hms.rn.health.kits.autorecorder.HmsAutoRecorderController;\nimport com.huawei.hms.rn.health.kits.consents.HmsConsentsController;\nimport com.huawei.hms.rn.health.kits.datacontroller.HmsDataController;\nimport com.huawei.hms.rn.health.kits.healthrecordcontroller.HmsHealthRecordController;\nimport com.huawei.hms.rn.health.kits.settings.HmsSettingController;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\n/**\n * HmsHealthPackage registers {@link HmsHealthPackage into RN Side.}\n *\n * @since v.5.0.5\n */\npublic class HmsHealthPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new HmsHealthAccount(reactContext));\n        modules.add(new HmsActivityRecordsController(reactContext));\n        modules.add(new HmsAutoRecorderController(reactContext));\n        modules.add(new HmsConsentsController(reactContext));\n        modules.add(new HmsDataController(reactContext));\n        modules.add(new HmsSettingController(reactContext));\n        modules.add(new HmsHealthRecordController(reactContext));\n        return modules;\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/constant/Constants.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.constant;\n\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.data.Group;\nimport com.huawei.hms.hihealth.data.HealthDataTypes;\nimport com.huawei.hms.hihealth.data.HealthFields;\nimport com.huawei.hms.hihealth.data.SleepState;\n\nimport java.util.Collections;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.concurrent.TimeUnit;\n\n/**\n * Base Constant Values.\n *\n * @since v.5.0.1\n */\npublic interface Constants {\n\n    /**\n     * Constant Variable Keys That Will be Used among RN Side.\n     */\n    String ACTIVITY_RECORD_ID_KEY = \"activityRecordId\";\n    String NAME_KEY = \"name\";\n    String DESCRIPTION_KEY = \"description\";\n    String ACTIVITY_TYPE_KEY = \"activityType\";\n    String START_TIME_KEY = \"startTime\";\n    String TIME_ZONE_KEY = \"timeZone\";\n    String END_TIME_KEY = \"endTime\";\n    String DURATION_TIME_KEY = \"durationTime\";\n    String SAMPLING_TIME_KEY = \"samplingTime\";\n    String INSERTION_TIME_KEY = \"insertionTime\";\n    String TIME_UNIT_KEY = \"timeUnit\";\n    String DATA_TYPE_KEY = \"dataType\";\n    String IS_SUCCESS_KEY = \"isSuccess\";\n    String ERROR_MESSAGE_KEY = \"errorMessage\";\n    String RESULT_BODY_KEY = \"body\";\n    String META_DATA = \"metaData\";\n\n    /**\n     * {@link TimeConstants} used among converting time params from readableMaps\n     * into Java Side.\n     */\n    enum TimeConstants {\n        START,\n        END,\n        DURATION,\n        SAMPLING,\n        INSERTION\n    }\n\n    /**\n     * {@link TimeUnit} types.\n     */\n    enum TimeUnitTypes {\n        /* Time units */\n        NANOSECONDS(\"NANOSECONDS\", TimeUnit.NANOSECONDS),\n        MICROSECONDS(\"MICROSECONDS\", TimeUnit.MICROSECONDS),\n        MILLISECONDS(\"MILLISECONDS\", TimeUnit.MILLISECONDS),\n        SECONDS(\"SECONDS\", TimeUnit.SECONDS),\n        MINUTES(\"MINUTES\", TimeUnit.MINUTES),\n        HOURS(\"HOURS\", TimeUnit.HOURS),\n        DAYS(\"DAYS\", TimeUnit.DAYS);\n\n        private final String value;\n\n        private final TimeUnit type;\n\n        TimeUnitTypes(String value, TimeUnit type) {\n            this.value = value;\n            this.type = type;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public TimeUnit getTimeUnitType() {\n            return type;\n        }\n\n        public static TimeUnitTypes fromString(String text) {\n            for (TimeUnitTypes variable : TimeUnitTypes.values()) {\n                if (variable.value.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n    }\n\n    /**\n     * whole time unit constants variables as Map\n     **/\n    Map<String, Object> TIME_UNITS_MAP = initTimeUnitConstants();\n\n    /**\n     * Initializes TIME_UNIT Constants map.\n     *\n     * @return Map<String, Object> TIME_UNIT Constants\n     */\n    static Map<String, Object> initTimeUnitConstants() {\n        Map<String, Object> constantMap = new HashMap<>();\n\n        for (TimeUnitTypes variable : EnumSet.allOf(TimeUnitTypes.class)) {\n            String key = variable.name();\n            String value = variable.getValue();\n            constantMap.put(key, value);\n        }\n\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n    /**\n     * All the DataController constants.\n     */\n    enum DataTypeConstants {\n        /* Data Types */\n        DT_UNUSED_DATA_TYPE(\"DT_UNUSED_DATA_TYPE\", DataType.DT_UNUSED_DATA_TYPE),\n        DT_CONTINUOUS_STEPS_DELTA(\"DT_CONTINUOUS_STEPS_DELTA\", DataType.DT_CONTINUOUS_STEPS_DELTA),\n        DT_CONTINUOUS_STEPS_TOTAL(\"DT_CONTINUOUS_STEPS_TOTAL\", DataType.DT_CONTINUOUS_STEPS_TOTAL),\n        DT_CONTINUOUS_STEPS_RATE_STATISTIC(\"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n            DataType.DT_CONTINUOUS_STEPS_RATE_STATISTIC),\n        DT_INSTANTANEOUS_STEPS_RATE(\"DT_INSTANTANEOUS_STEPS_RATE\", DataType.DT_INSTANTANEOUS_STEPS_RATE),\n        DT_CONTINUOUS_ACTIVITY_SEGMENT(\"DT_CONTINUOUS_ACTIVITY_SEGMENT\", DataType.DT_CONTINUOUS_ACTIVITY_SEGMENT),\n        DT_CONTINUOUS_CALORIES_CONSUMED(\"DT_CONTINUOUS_CALORIES_CONSUMED\", DataType.DT_CONTINUOUS_CALORIES_CONSUMED),\n        DT_CONTINUOUS_CALORIES_BURNT(\"DT_CONTINUOUS_CALORIES_BURNT\", DataType.DT_CONTINUOUS_CALORIES_BURNT),\n        DT_INSTANTANEOUS_CALORIES_BMR(\"DT_INSTANTANEOUS_CALORIES_BMR\", DataType.DT_INSTANTANEOUS_CALORIES_BMR),\n        DT_INSTANTANEOUS_POWER_SAMPLE(\"DT_INSTANTANEOUS_POWER_SAMPLE\", DataType.DT_INSTANTANEOUS_POWER_SAMPLE),\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE(\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\", DataType.DT_INSTANTANEOUS_ACTIVITY_SAMPLE),\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES(\"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n            DataType.DT_INSTANTANEOUS_ACTIVITY_SAMPLES),\n        DT_INSTANTANEOUS_HEART_RATE(\"DT_INSTANTANEOUS_HEART_RATE\", DataType.DT_INSTANTANEOUS_HEART_RATE),\n        DT_INSTANTANEOUS_LOCATION_SAMPLE(\"DT_INSTANTANEOUS_LOCATION_SAMPLE\", DataType.DT_INSTANTANEOUS_LOCATION_SAMPLE),\n        DT_INSTANTANEOUS_LOCATION_TRACE(\"DT_INSTANTANEOUS_LOCATION_TRACE\", DataType.DT_INSTANTANEOUS_LOCATION_TRACE),\n        DT_CONTINUOUS_DISTANCE_DELTA(\"DT_CONTINUOUS_DISTANCE_DELTA\", DataType.DT_CONTINUOUS_DISTANCE_DELTA),\n        DT_CONTINUOUS_DISTANCE_TOTAL(\"DT_CONTINUOUS_DISTANCE_TOTAL\", DataType.DT_CONTINUOUS_DISTANCE_TOTAL),\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL(\"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n            DataType.DT_CONTINUOUS_CALORIES_BURNT_TOTAL),\n        DT_INSTANTANEOUS_SPEED(\"DT_INSTANTANEOUS_SPEED\", DataType.DT_INSTANTANEOUS_SPEED),\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL(\"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n            DataType.DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL),\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION(\"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n            DataType.DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION),\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL(\"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\",\n            DataType.DT_CONTINUOUS_BIKING_PEDALING_TOTAL),\n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE(\"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n            DataType.DT_INSTANTANEOUS_BIKING_PEDALING_RATE),\n        DT_INSTANTANEOUS_HEIGHT(\"DT_INSTANTANEOUS_HEIGHT\", DataType.DT_INSTANTANEOUS_HEIGHT),\n        DT_INSTANTANEOUS_BODY_WEIGHT(\"DT_INSTANTANEOUS_BODY_WEIGHT\", DataType.DT_INSTANTANEOUS_BODY_WEIGHT),\n        DT_INSTANTANEOUS_BODY_FAT_RATE(\"DT_INSTANTANEOUS_BODY_FAT_RATE\", DataType.DT_INSTANTANEOUS_BODY_FAT_RATE),\n        DT_INSTANTANEOUS_NUTRITION_FACTS(\"DT_INSTANTANEOUS_NUTRITION_FACTS\", DataType.DT_INSTANTANEOUS_NUTRITION_FACTS),\n        DT_INSTANTANEOUS_HYDRATE(\"DT_INSTANTANEOUS_HYDRATE\", DataType.DT_INSTANTANEOUS_HYDRATE),\n        DT_CONTINUOUS_WORKOUT_DURATION(\"DT_CONTINUOUS_WORKOUT_DURATION\", DataType.DT_CONTINUOUS_WORKOUT_DURATION),\n        DT_CONTINUOUS_EXERCISE_INTENSITY(\"DT_CONTINUOUS_EXERCISE_INTENSITY\", DataType.DT_CONTINUOUS_EXERCISE_INTENSITY),\n        DT_STATISTICS_SLEEP(\"DT_STATISTICS_SLEEP\", DataType.DT_STATISTICS_SLEEP),\n        DT_CONTINUOUS_SLEEP(\"DT_CONTINUOUS_SLEEP\", DataType.DT_CONTINUOUS_SLEEP),\n        DT_INSTANTANEOUS_STRESS(\"DT_INSTANTANEOUS_STRESS\", DataType.DT_INSTANTANEOUS_STRESS),\n        DT_INSTANTANEOUS_STRESS_STATISTICS(\"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n            DataType.DT_INSTANTANEOUS_STRESS_STATISTICS),\n        DT_INSTANTANEOUS_RESTING_HEART_RATE(\"DT_INSTANTANEOUS_RESTING_HEART_RATE\",\n            DataType.DT_INSTANTANEOUS_RESTING_HEART_RATE),\n        DT_CONTINUOUS_JUMP(\"DT_CONTINUOUS_JUMP\", DataType.DT_CONTINUOUS_JUMP),\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE(\"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\",\n            DataType.DT_INSTANTANEOUS_EXERCISE_HEART_RATE),\n        DT_INSTANTANEOUS_ALTITUDE(\"DT_INSTANTANEOUS_ALTITUDE\", DataType.DT_INSTANTANEOUS_ALTITUDE),\n        DT_INSTANTANEOUS_SKIP_SPEED(\"DT_INSTANTANEOUS_SKIP_SPEED\", DataType.DT_INSTANTANEOUS_SKIP_SPEED),\n        DT_CONTINUOUS_RUN_POSTURE(\"DT_CONTINUOUS_RUN_POSTURE\", DataType.DT_CONTINUOUS_RUN_POSTURE),\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS(\"DT_CONTINUOUS_RUN_POSTURE\",\n            DataType.DT_CONTINUOUS_RUN_POSTURE_STATISTICS),\n        DT_INSTANTANEOUS_STROKE_RATE(\"DT_INSTANTANEOUS_STROKE_RATE\", DataType.DT_INSTANTANEOUS_STROKE_RATE),\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS(\"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n            DataType.DT_CONTINUOUS_STROKE_RATE_STATISTICS),\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE(\"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n            DataType.DT_INSTANTANEOUS_SWIMMING_STROKE_RATE),\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS(\"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n            DataType.DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS),\n        DT_ACTIVITY_FEATURE_ROWING(\"DT_ACTIVITY_FEATURE_ROWING\", DataType.DT_ACTIVITY_FEATURE_ROWING),\n        DT_INSTANTANEOUS_SWIMMING_SWOLF(\"DT_INSTANTANEOUS_SWIMMING_SWOLF\", DataType.DT_INSTANTANEOUS_SWIMMING_SWOLF),\n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS(\"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\",\n            DataType.DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS),\n        DT_RESISTANCE(\"DT_RESISTANCE\", DataType.DT_RESISTANCE),\n        DT_RESISTANCE_STATISTICS(\"DT_RESISTANCE_STATISTICS\", DataType.DT_RESISTANCE_STATISTICS),\n        DT_VO2MAX(\"DT_VO2MAX\", DataType.DT_VO2MAX),\n        DT_VO2MAX_STATISTICS(\"DT_VO2MAX_STATISTICS\", DataType.DT_VO2MAX_STATISTICS),\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS(\"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n            DataType.DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS),\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN(\"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n            DataType.DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN),\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST(\"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\",\n            DataType.DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST),\n        DT_ACTIVITY_FEATURE_FREEDIVING(\"DT_ACTIVITY_FEATURE_FREEDIVING\", DataType.DT_ACTIVITY_FEATURE_FREEDIVING),\n\n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION(\"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n            DataType.POLYMERIZE_CONTINUOUS_WORKOUT_DURATION),\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS(\"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS),\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS(\"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS),\n        POLYMERIZE_STEP_COUNT_DELTA(\"POLYMERIZE_STEP_COUNT_DELTA\", DataType.POLYMERIZE_STEP_COUNT_DELTA),\n        POLYMERIZE_DISTANCE_DELTA(\"POLYMERIZE_DISTANCE_DELTA\", DataType.POLYMERIZE_DISTANCE_DELTA),\n        POLYMERIZE_CALORIES_CONSUMED(\"POLYMERIZE_CALORIES_CONSUMED\", DataType.POLYMERIZE_CALORIES_CONSUMED),\n        POLYMERIZE_CALORIES_EXPENDED(\"POLYMERIZE_CALORIES_EXPENDED\", DataType.POLYMERIZE_CALORIES_EXPENDED),\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS(\"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS),\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS(\"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE(\"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n            DataType.POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE),\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS(\"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_POWER_STATISTICS),\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS(\"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_SPEED_STATISTICS),\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS),\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS(\"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS),\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS(\"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\",\n            DataType.POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS),\n        POLYMERIZE_HYDRATION(\"POLYMERIZE_HYDRATION\", DataType.POLYMERIZE_HYDRATION),\n        POLYMERIZE_FREEDIVING_STATISTICS(\"POLYMERIZE_FREEDIVING_STATISTICS\", DataType.POLYMERIZE_FREEDIVING_STATISTICS),\n        DT_ACTIVITY_FEATURE_GOLF(\"DT_ACTIVITY_FEATURE_GOLF\",\n                DataType.DT_ACTIVITY_FEATURE_GOLF),\n        DT_CONTINUOUS_HYDRATE_TOTAL(\"DT_CONTINUOUS_HYDRATE_TOTAL\",\n                DataType.DT_CONTINUOUS_HYDRATE_TOTAL),\n        DT_CONTINUOUS_EXERCISE_INTENSITY_V2(\"DT_CONTINUOUS_EXERCISE_INTENSITY_V2\",\n                DataType.DT_CONTINUOUS_EXERCISE_INTENSITY_V2),\n        DT_STATISTICS_EXERCISE_INTENSITY_V2(\"DT_STATISTICS_EXERCISE_INTENSITY_V2\",\n                DataType.DT_STATISTICS_EXERCISE_INTENSITY_V2),\n        DT_RESTING_HEART_RATE_STATISTICS(\"DT_RESTING_HEART_RATE_STATISTICS\",\n                DataType.DT_RESTING_HEART_RATE_STATISTICS),\n        DT_CONTINUOUS_JUMP_STATISTICS(\"DT_CONTINUOUS_JUMP_STATISTICS\",\n                DataType.DT_CONTINUOUS_JUMP_STATISTICS),\n        DT_CONTINUOUS_SKIP_SPEED_STATISTICS(\"DT_CONTINUOUS_SKIP_SPEED_STATISTICS\",\n                DataType.DT_CONTINUOUS_SKIP_SPEED_STATISTICS),\n        DT_CONTINUOUS_ALTITUDE_STATISTICS(\"DT_CONTINUOUS_ALTITUDE_STATISTICS\",\n                DataType.DT_CONTINUOUS_ALTITUDE_STATISTICS),\n        DT_ACTIVITY_FEATURE_JUMPING_ROPE(\"DT_ACTIVITY_FEATURE_JUMPING_ROPE\",\n                DataType.DT_ACTIVITY_FEATURE_JUMPING_ROPE),\n        DT_ACTIVITY_FEATURE_BASKETBALL(\"DT_ACTIVITY_FEATURE_BASKETBALL\",\n                DataType.DT_ACTIVITY_FEATURE_BASKETBALL),\n        DT_INSTANTANEOUS_PEDALING_RATE(\"DT_INSTANTANEOUS_PEDALING_RATE\",\n                DataType.DT_INSTANTANEOUS_PEDALING_RATE),\n        DT_CONTINUOUS_PEDALING_RATE_STATISTICS(\"DT_CONTINUOUS_PEDALING_RATE_STATISTICS\",\n                DataType.DT_CONTINUOUS_PEDALING_RATE_STATISTICS),\n        DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER(\"DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER\",\n                DataType.DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER),\n        DT_ACTIVITY_FEATURE_SWIMMING_POOL(\"DT_ACTIVITY_FEATURE_SWIMMING_POOL\",\n                DataType.DT_ACTIVITY_FEATURE_SWIMMING_POOL),\n        DT_ACTIVITY_FEATURE_SKIING(\"DT_ACTIVITY_FEATURE_SKIING\",\n                DataType.DT_ACTIVITY_FEATURE_SKIING),\n        DT_DIVING_DEPTH(\"DT_DIVING_DEPTH\",DataType.DT_DIVING_DEPTH),\n        DT_DIVING_DEPTH_STATISTICS(\"DT_DIVING_DEPTH_STATISTICS\",DataType.DT_DIVING_DEPTH_STATISTICS),\n        DT_WATER_TEMPERATURE(\"DT_WATER_TEMPERATURE\",DataType.DT_WATER_TEMPERATURE),\n\n        // HEALTH DATA TYPES\n\n        DT_INSTANTANEOUS_BLOOD_PRESSURE(\"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n            HealthDataTypes.DT_INSTANTANEOUS_BLOOD_PRESSURE),\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE(\"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n            HealthDataTypes.DT_INSTANTANEOUS_BLOOD_GLUCOSE),\n        DT_CGM_BLOOD_GLUCOSE(\"DT_CGM_BLOOD_GLUCOSE\",\n                HealthDataTypes.DT_CGM_BLOOD_GLUCOSE),\n        DT_INSTANTANEOUS_SPO2(\"DT_INSTANTANEOUS_SPO2\", HealthDataTypes.DT_INSTANTANEOUS_SPO2),\n        DT_INSTANTANEOUS_BODY_TEMPERATURE(\"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n            HealthDataTypes.DT_INSTANTANEOUS_BODY_TEMPERATURE),\n        DT_INSTANTANEOUS_SKIN_TEMPERATURE(\"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n                HealthDataTypes.DT_INSTANTANEOUS_SKIN_TEMPERATURE),\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST(\"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n            HealthDataTypes.DT_INSTANTANEOUS_BODY_TEMPERATURE_REST),\n        DT_INSTANTANEOUS_CERVICAL_MUCUS(\"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n            HealthDataTypes.DT_INSTANTANEOUS_CERVICAL_MUCUS),\n        DT_INSTANTANEOUS_CERVICAL_STATUS(\"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n            HealthDataTypes.DT_INSTANTANEOUS_CERVICAL_STATUS),\n        DT_CONTINUOUS_MENSTRUAL_FLOW(\"DT_CONTINUOUS_MENSTRUAL_FLOW\", HealthDataTypes.DT_CONTINUOUS_MENSTRUAL_FLOW),\n        DT_DYSMENORRHOEA(\"DT_DYSMENORRHOEA\",\n                HealthDataTypes.DT_DYSMENORRHOEA),\n        DT_PHYSICAL_SYMPTOMS(\"DT_PHYSICAL_SYMPTOMS\",\n                HealthDataTypes.DT_PHYSICAL_SYMPTOMS),\n        DT_INSTANTANEOUS_OVULATION_DETECTION(\"DT_INSTANTANEOUS_OVULATION_DETECTION\",\n            HealthDataTypes.DT_INSTANTANEOUS_OVULATION_DETECTION),\n        DT_INSTANTANEOUS_VAGINAL_SPECKLE(\"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n            HealthDataTypes.DT_INSTANTANEOUS_VAGINAL_SPECKLE),\n        DT_HEALTH_RECORD_TACHYCARDIA(\"DT_HEALTH_RECORD_TACHYCARDIA\",\n                HealthDataTypes.DT_HEALTH_RECORD_TACHYCARDIA),\n        DT_HEALTH_RECORD_BRADYCARDIA(\"DT_HEALTH_RECORD_BRADYCARDIA\", HealthDataTypes.DT_HEALTH_RECORD_BRADYCARDIA),\n        DT_HEALTH_RECORD_SLEEP(\"DT_HEALTH_RECORD_SLEEP\", HealthDataTypes.DT_HEALTH_RECORD_SLEEP),\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS),\n        POLYMERIZE_CGM_BLOOD_GLUCOSE_STATISTICS(\"POLYMERIZE_CGM_BLOOD_GLUCOSE_STATISTICS\",\n                HealthDataTypes.POLYMERIZE_CGM_BLOOD_GLUCOSE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS(\"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_SPO2_STATISTICS),\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_SKIN_TEMPERATURE_STATISTICS(\"POLYMERIZE_CONTINUOUS_SKIN_TEMPERATURE_STATISTICS\",\n                HealthDataTypes.POLYMERIZE_CONTINUOUS_SKIN_TEMPERATURE_STATISTICS),\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS(\"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS),\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS(\"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n            HealthDataTypes.POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS),\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS(\"POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS\",\n            HealthDataTypes.POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS),\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW(\"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\",\n            HealthDataTypes.POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW),\n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION(\"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n            HealthDataTypes.POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION),\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE(\"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n            HealthDataTypes.POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE),\n        DT_HEALTH_RECORD_VENTILATOR(\"DT_HEALTH_RECORD_VENTILATOR\",\n                HealthDataTypes.DT_HEALTH_RECORD_VENTILATOR),\n        DT_SLEEP_RESPIRATORY_DETAIL(\"DT_SLEEP_RESPIRATORY_DETAIL\",\n                HealthDataTypes.DT_SLEEP_RESPIRATORY_DETAIL),\n        DT_SLEEP_RESPIRATORY_EVENT(\"DT_SLEEP_RESPIRATORY_EVENT\",\n                HealthDataTypes.DT_SLEEP_RESPIRATORY_EVENT);\n\n\n\n        private final String value;\n\n        private final DataType dataType;\n\n        DataTypeConstants(String value, DataType dataType) {\n            this.value = value;\n            this.dataType = dataType;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public DataType getDataType() {\n            return dataType;\n        }\n\n        public static DataTypeConstants fromString(String text) {\n            for (DataTypeConstants variable : DataTypeConstants.values()) {\n                if (variable.value.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n    }\n\n    /**\n     * whole data type constants variables as Map\n     **/\n    Map<String, Object> DATA_TYPES_MAP = initDataTypesMap();\n\n    /**\n     * Initializes Data Constants map.\n     *\n     * @return Map<String, Object> Data Constants map\n     */\n    static Map<String, Object> initDataTypesMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (DataTypeConstants variable : EnumSet.allOf(DataTypeConstants.class)) {\n            String key = variable.name();\n            String value = variable.getValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n    /**\n     * All the {@link Field} constants.\n     */\n    enum FieldConstants {\n        /* Field Types */\n        FIELD_PRECISION(\"FIELD_PRECISION\", Field.FIELD_PRECISION),\n        FIELD_ALTITUDE(\"FIELD_ALTITUDE\", Field.FIELD_ALTITUDE),\n        FIELD_TYPE_OF_ACTIVITY(\"FIELD_TYPE_OF_ACTIVITY\", Field.FIELD_TYPE_OF_ACTIVITY),\n        FIELD_POSSIBILITY_OF_ACTIVITY(\"FIELD_POSSIBILITY_OF_ACTIVITY\", Field.FIELD_POSSIBILITY_OF_ACTIVITY),\n        FIELD_BPM(\"FIELD_BPM\", Field.FIELD_BPM),\n        FIELD_POSSIBILITY(\"FIELD_POSSIBILITY\", Field.FIELD_POSSIBILITY),\n        FIELD_SPAN(\"FIELD_SPAN\", Field.FIELD_SPAN),\n        FIELD_DISTANCE(\"FIELD_DISTANCE\", Field.FIELD_DISTANCE),\n        FIELD_DISTANCE_DELTA(\"FIELD_DISTANCE_DELTA\", Field.FIELD_DISTANCE_DELTA),\n        FIELD_HEIGHT(\"FIELD_HEIGHT\", Field.FIELD_HEIGHT),\n        FIELD_STEPS_DELTA(\"FIELD_STEPS_DELTA\", Field.FIELD_STEPS_DELTA),\n        FIELD_STEPS(\"FIELD_STEPS\", Field.FIELD_STEPS),\n        FIELD_DURATION(\"FIELD_DURATION\", Field.FIELD_DURATION),\n        FIELD_STEP_LENGTH(\"FIELD_STEP_LENGTH\", Field.FIELD_STEP_LENGTH),\n        FIELD_LATITUDE(\"FIELD_LATITUDE\", Field.FIELD_LATITUDE),\n        FIELD_LONGITUDE(\"FIELD_LONGITUDE\", Field.FIELD_LONGITUDE),\n        FIELD_BODY_WEIGHT(\"FIELD_BODY_WEIGHT\", Field.FIELD_BODY_WEIGHT),\n        FIELD_BMI(\"FIELD_BMI\", Field.FIELD_BMI),\n        FIELD_BODY_FAT(\"FIELD_BODY_FAT\", Field.FIELD_BODY_FAT),\n        FIELD_BODY_FAT_RATE(\"FIELD_BODY_FAT_RATE\", Field.FIELD_BODY_FAT_RATE),\n        FIELD_MUSCLE_MASS(\"FIELD_MUSCLE_MASS\", Field.FIELD_MUSCLE_MASS),\n        FIELD_BASAL_METABOLISM(\"FIELD_BASAL_METABOLISM\", Field.FIELD_BASAL_METABOLISM),\n        FIELD_MOISTURE(\"FIELD_MOISTURE\", Field.FIELD_MOISTURE),\n        FIELD_MOISTURE_RATE(\"FIELD_MOISTURE_RATE\", Field.FIELD_MOISTURE_RATE),\n        FIELD_VISCERAL_FAT_LEVEL(\"FIELD_VISCERAL_FAT_LEVEL\", Field.FIELD_VISCERAL_FAT_LEVEL),\n        FIELD_BONE_SALT(\"FIELD_BONE_SALT\", Field.FIELD_BONE_SALT),\n        FIELD_PROTEIN_RATE(\"FIELD_PROTEIN_RATE\", Field.FIELD_PROTEIN_RATE),\n        FIELD_BODY_AGE(\"FIELD_BODY_AGE\", Field.FIELD_BODY_AGE),\n        FIELD_BODY_SCORE(\"FIELD_BODY_SCORE\", Field.FIELD_BODY_SCORE),\n        FIELD_SKELETAL_MUSCLEL_MASS(\"FIELD_SKELETAL_MUSCLEL_MASS\", Field.FIELD_SKELETAL_MUSCLEL_MASS),\n        FIELD_IMPEDANCE(\"FIELD_IMPEDANCE\", Field.FIELD_IMPEDANCE),\n        FIELD_CIRCUMFERENCE(\"FIELD_CIRCUMFERENCE\", Field.FIELD_CIRCUMFERENCE),\n        FIELD_SPEED(\"FIELD_SPEED\", Field.FIELD_SPEED),\n        FIELD_RPM(\"FIELD_RPM\", Field.FIELD_RPM),\n        FIELD_STEP_RATE(\"FIELD_STEP_RATE\", Field.FIELD_STEP_RATE),\n        FIELD_ROTATION(\"FIELD_ROTATION\", Field.FIELD_ROTATION),\n        FIELD_CALORIES(\"FIELD_CALORIES\", Field.FIELD_CALORIES),\n        FIELD_CALORIES_TOTAL(\"FIELD_CALORIES_TOTAL\", Field.FIELD_CALORIES_TOTAL),\n        FIELD_POWER(\"FIELD_POWER\", Field.FIELD_POWER),\n        FIELD_HYDRATE(\"FIELD_HYDRATE\", Field.FIELD_HYDRATE),\n        FIELD_MEAL(\"FIELD_MEAL\", Field.FIELD_MEAL),\n        FIELD_FOOD(\"FIELD_FOOD\", Field.FIELD_FOOD),\n        FIELD_NUTRIENTS(\"FIELD_NUTRIENTS\", Field.FIELD_NUTRIENTS),\n        FIELD_NUTRIENTS_FACTS(\"FIELD_NUTRIENTS_FACTS\", Field.FIELD_NUTRIENTS_FACTS),\n        FIELD_FRAGMENTS(\"FIELD_FRAGMENTS\", Field.FIELD_FRAGMENTS),\n        FIELD_AVG(\"FIELD_AVG\", Field.FIELD_AVG),\n        FIELD_MAX(\"FIELD_MAX\", Field.FIELD_MAX),\n        FIELD_MIN(\"FIELD_MIN\", Field.FIELD_MIN),\n        FIELD_MIN_LATITUDE(\"FIELD_MIN_LATITUDE\", Field.FIELD_MIN_LATITUDE),\n        FIELD_MIN_LONGITUDE(\"FIELD_MIN_LONGITUDE\", Field.FIELD_MIN_LONGITUDE),\n        FIELD_MAX_LATITUDE(\"FIELD_MAX_LATITUDE\", Field.FIELD_MAX_LATITUDE),\n        FIELD_MAX_LONGITUDE(\"FIELD_MAX_LONGITUDE\", Field.FIELD_MAX_LONGITUDE),\n        FIELD_ASCENT_TOTAL(\"FIELD_ASCENT_TOTAL\", Field.FIELD_ASCENT_TOTAL),\n        FIELD_DESCENT_TOTAL(\"FIELD_DESCENT_TOTAL\", Field.FIELD_DESCENT_TOTAL),\n        FIELD_APPEARANCE(\"FIELD_APPEARANCE\", Field.FIELD_APPEARANCE),\n        FIELD_INTENSITY(\"FIELD_INTENSITY\", Field.FIELD_INTENSITY),\n        FALL_ASLEEP_TIME(\"FALL_ASLEEP_TIME\", Field.FALL_ASLEEP_TIME),\n        DEPTH(\"DEPTH\",Field.DEPTH),\n        TEMPERATURE(\"TEMPERATURE\",Field.TEMPERATURE),\n        WAKE_UP_TIME(\"WAKE_UP_TIME\", Field.WAKE_UP_TIME),\n        SLEEP_SCORE(\"SLEEP_SCORE\", Field.SLEEP_SCORE),\n        SLEEP_LATENCY(\"SLEEP_LATENCY\", Field.SLEEP_LATENCY),\n        GO_BED_TIME(\"GO_BED_TIME\", Field.GO_BED_TIME),\n        SLEEP_EFFICIENCY(\"SLEEP_EFFICIENCY\", Field.SLEEP_EFFICIENCY),\n        LIGHT_SLEEP_TIME(\"LIGHT_SLEEP_TIME\", Field.LIGHT_SLEEP_TIME),\n        DEEP_SLEEP_TIME(\"DEEP_SLEEP_TIME\", Field.DEEP_SLEEP_TIME),\n        DREAM_TIME(\"DREAM_TIME\", Field.DREAM_TIME),\n        AWAKE_TIME(\"AWAKE_TIME\", Field.AWAKE_TIME),\n        ALL_SLEEP_TIME(\"ALL_SLEEP_TIME\", Field.ALL_SLEEP_TIME),\n        WAKE_UP_CNT(\"WAKE_UP_CNT\", Field.WAKE_UP_CNT),\n        DEEP_SLEEP_PART(\"DEEP_SLEEP_PART\", Field.DEEP_SLEEP_PART),\n        SLEEP_STATE(\"SLEEP_STATE\", Field.SLEEP_STATE),\n        SCORE(\"SCORE\", Field.SCORE),\n        GRADE(\"GRADE\", Field.GRADE),\n        MEASURE_TYPE(\"MEASURE_TYPE\", Field.MEASURE_TYPE),\n        STRESS_AVG(\"STRESS_AVG\", Field.STRESS_AVG),\n        STRESS_MAX(\"STRESS_MAX\", Field.STRESS_MAX),\n        STRESS_MIN(\"STRESS_MIN\", Field.STRESS_MIN),\n        STRESS_LAST(\"STRESS_LAST\", Field.STRESS_LAST),\n        MEASURE_COUNT(\"MEASURE_COUNT\", Field.MEASURE_COUNT),\n        GROUND_CONTACT_TIME(\"GROUND_CONTACT_TIME\", Field.GROUND_CONTACT_TIME),\n        GROUND_IMPACT_ACCELERATION(\"GROUND_IMPACT_ACCELERATION\", Field.GROUND_IMPACT_ACCELERATION),\n        SWING_ANGLE(\"SWING_ANGLE\", Field.SWING_ANGLE),\n        EVERSION_EXCURSION(\"EVERSION_EXCURSION\", Field.EVERSION_EXCURSION),\n        HANG_TIME(\"HANG_TIME\", Field.HANG_TIME),\n        GROUND_HANG_TIME_RATE(\"GROUND_HANG_TIME_RATE\", Field.GROUND_HANG_TIME_RATE),\n        FORE_FOOT_STRIKE_PATTERN(\"FORE_FOOT_STRIKE_PATTERN\", Field.FORE_FOOT_STRIKE_PATTERN),\n        HIND_FOOT_STRIKE_PATTERN(\"HIND_FOOT_STRIKE_PATTERN\", Field.HIND_FOOT_STRIKE_PATTERN),\n        WHOLE_FOOT_STRIKE_PATTERN(\"WHOLE_FOOT_STRIKE_PATTERN\", Field.WHOLE_FOOT_STRIKE_PATTERN),\n        IMPACT_PEAK(\"IMPACT_PEAK\", Field.IMPACT_PEAK),\n        VERTICAL_OSCILLATION(\"VERTICAL_OSCILLATION\", Field.VERTICAL_OSCILLATION),\n        VERTICAL_RATIO(\"VERTICAL_RATIO\", Field.VERTICAL_RATIO),\n        GC_TIME_BALANCE(\"GC_TIME_BALANCE\", Field.GC_TIME_BALANCE),\n        GO_BED_TIME_NEW(\"GO_BED_TIME_NEW\", Field.GO_BED_TIME_NEW),\n        SLEEP_TYPE(\"SLEEP_TYPE\", Field.SLEEP_TYPE),\n        PREPARE_SLEEP_TIME(\"PREPARE_SLEEP_TIME\", Field.PREPARE_SLEEP_TIME),\n        OFF_BED_TIME(\"OFF_BED_TIME\", Field.OFF_BED_TIME),\n        AVG_GROUND_CONTACT_TIME(\"AVG_GROUND_CONTACT_TIME\", Field.AVG_GROUND_CONTACT_TIME),\n        AVG_GROUND_IMPACT_ACCELERATION(\"AVG_GROUND_IMPACT_ACCELERATION\", Field.AVG_GROUND_IMPACT_ACCELERATION),\n        AVG_SWING_ANGLE(\"AVG_SWING_ANGLE\", Field.AVG_SWING_ANGLE),\n        AVG_EVERSION_EXCURSION(\"AVG_EVERSION_EXCURSION\", Field.AVG_EVERSION_EXCURSION),\n        AVG_HANG_TIME(\"AVG_HANG_TIME\", Field.AVG_HANG_TIME),\n        AVG_GROUND_HANG_TIME_RATE(\"AVG_GROUND_HANG_TIME_RATE\", Field.AVG_GROUND_HANG_TIME_RATE),\n        AVG_IMPACT_PEAK(\"AVG_IMPACT_PEAK\", Field.AVG_IMPACT_PEAK),\n        AVG_VERTICAL_IMPACT_RATE(\"AVG_VERTICAL_IMPACT_RATE\", Field.AVG_VERTICAL_IMPACT_RATE),\n        AVG_GC_TIME_BALANCE(\"AVG_GC_TIME_BALANCE\", Field.AVG_GC_TIME_BALANCE),\n        AVG_VERTICAL_OSCILLATION(\"AVG_VERTICAL_OSCILLATION\", Field.AVG_VERTICAL_OSCILLATION),\n        AVG_VERTICAL_RATIO(\"AVG_VERTICAL_RATIO\", Field.AVG_VERTICAL_RATIO),\n        RESISTANCE_LEVEL(\"RESISTANCE_LEVEL\", Field.RESISTANCE_LEVEL),\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT(\"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\", Field.RESISTANCE_LEVEL_ONE_LOWER_LIMIT),\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT(\"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\", Field.RESISTANCE_LEVEL_TWO_LOWER_LIMIT),\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT(\"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n            Field.RESISTANCE_LEVEL_THREE_LOWER_LIMIT),\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT(\"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\", Field.RESISTANCE_LEVEL_FOUR_LOWER_LIMIT),\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT(\"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\", Field.RESISTANCE_LEVEL_FIVE_LOWER_LIMIT),\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT(\"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\", Field.RESISTANCE_LEVEL_FIVE_UPPER_LIMIT),\n        RESISTANCE_LEVEL_ONE_TIME(\"RESISTANCE_LEVEL_ONE_TIME\", Field.RESISTANCE_LEVEL_ONE_TIME),\n        RESISTANCE_LEVEL_TWO_TIME(\"RESISTANCE_LEVEL_TWO_TIME\", Field.RESISTANCE_LEVEL_TWO_TIME),\n        RESISTANCE_LEVEL_THREE_TIME(\"RESISTANCE_LEVEL_THREE_TIME\", Field.RESISTANCE_LEVEL_THREE_TIME),\n        RESISTANCE_LEVEL_FOUR_TIME(\"RESISTANCE_LEVEL_FOUR_TIME\", Field.RESISTANCE_LEVEL_FOUR_TIME),\n        RESISTANCE_LEVEL_FIVE_TIME(\"RESISTANCE_LEVEL_FIVE_TIME\", Field.RESISTANCE_LEVEL_FIVE_TIME),\n        MAX_RES(\"MAX_RES\", Field.MAX_RES),\n        MIN_RES(\"MIN_RES\", Field.MIN_RES),\n        SPM(\"SPM\", Field.SPM),\n        SWOLF(\"SWOLF\", Field.SWOLF),\n        FIELD_LAST(\"FIELD_LAST\", Field.FIELD_LAST),\n        FIELD_AVG_BODY_FAT_RATE(\"FIELD_AVG_BODY_FAT_RATE\", Field.FIELD_AVG_BODY_FAT_RATE),\n        FIELD_MAX_BODY_FAT_RATE(\"FIELD_MAX_BODY_FAT_RATE\", Field.FIELD_MAX_BODY_FAT_RATE),\n        FIELD_MIN_BODY_FAT_RATE(\"FIELD_MIN_BODY_FAT_RATE\", Field.FIELD_MIN_BODY_FAT_RATE),\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS(\"FIELD_AVG_SKELETAL_MUSCLEL_MASS\", Field.FIELD_AVG_SKELETAL_MUSCLEL_MASS),\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS(\"FIELD_MAX_SKELETAL_MUSCLEL_MASS\", Field.FIELD_MAX_SKELETAL_MUSCLEL_MASS),\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS(\"FIELD_MIN_SKELETAL_MUSCLEL_MASS\", Field.FIELD_MIN_SKELETAL_MUSCLEL_MASS),\n        VO2MAX(\"VO2MAX\", Field.VO2MAX),\n        LAST(\"LAST\", Field.LAST),\n        AVG(\"AVG\", Field.AVG),\n        BREATH_TIME(\"BREATH_TIME\", Field.BREATH_TIME),\n        BREATH_HOLDING_TIME(\"BREATH_HOLDING_TIME\", Field.BREATH_HOLDING_TIME),\n        BREATH_HOLDING_TRAIN_RHYTHM(\"BREATH_HOLDING_TRAIN_RHYTHM\", Field.BREATH_HOLDING_TRAIN_RHYTHM),\n        DIAPHRAGM_TIME(\"DIAPHRAGM_TIME\", Field.DIAPHRAGM_TIME),\n        RUN_SCORE(\"RUN_SCORE\", Field.RUN_SCORE),\n        DIVING_TIME(\"DIVING_TIME\", Field.DIVING_TIME),\n        DIVING_COUNT(\"DIVING_COUNT\", Field.DIVING_COUNT),\n        MAX_DEPTH(\"MAX_DEPTH\", Field.MAX_DEPTH),\n        AVG_DEPTH(\"AVG_DEPTH\", Field.AVG_DEPTH),\n        MAX_UNDERWATER_TIME(\"MAX_UNDERWATER_TIME\", Field.MAX_UNDERWATER_TIME),\n        NO_FLY_TIME(\"NO_FLY_TIME\", Field.NO_FLY_TIME),\n        WATER_TYPE(\"WATER_TYPE\", Field.WATER_TYPE),\n        SURFACE_TIME(\"SURFACE_TIME\", Field.SURFACE_TIME),\n        FIELD_COORDINATE(\"FIELD_COORDINATE\", Field.FIELD_COORDINATE),\n        START_LAT(\"START_LAT\", Field.START_LAT),\n        START_LON(\"START_LON\", Field.START_LON),\n        END_LAT(\"END_LAT\", Field.END_LAT),\n        END_LON(\"END_LON\", Field.END_LON),\n        SKIING_TOTAL_TIME(\"SKIING_TOTAL_TIME\", Field.SKIING_TOTAL_TIME),\n        SKIING_TOTAL_DISTANCE(\"SKIING_TOTAL_DISTANCE\", Field.SKIING_TOTAL_DISTANCE),\n        SLEEP_RESPIRATORY_TYPE(\"SLEEP_RESPIRATORY_TYPE\", Field.SLEEP_RESPIRATORY_TYPE),\n        SLEEP_RESPIRATORY_VALUE(\"SLEEP_RESPIRATORY_VALUE\", Field.SLEEP_RESPIRATORY_VALUE),\n        EVENT_NAME(\"EVENT_NAME\", Field.EVENT_NAME),\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE(\"FIELD_SYSTOLIC_PRESSURE\", HealthFields.FIELD_SYSTOLIC_PRESSURE),\n        FIELD_SYSTOLIC_PRESSURE_AVG(\"FIELD_SYSTOLIC_PRESSURE_AVG\", HealthFields.FIELD_SYSTOLIC_PRESSURE_AVG),\n        FIELD_SYSTOLIC_PRESSURE_MIN(\"FIELD_SYSTOLIC_PRESSURE_MIN\", HealthFields.FIELD_SYSTOLIC_PRESSURE_MIN),\n        FIELD_THRESHOLD(\"FIELD_THRESHOLD\", HealthFields.FIELD_THRESHOLD),\n        FIELD_AVG_HEART_RATE(\"FIELD_AVG_HEART_RATE\", HealthFields.FIELD_AVG_HEART_RATE),\n        FIELD_MAX_HEART_RATE(\"FIELD_MAX_HEART_RATE\", HealthFields.FIELD_MAX_HEART_RATE),\n        FIELD_MIN_HEART_RATE(\"FIELD_MIN_HEART_RATE\", HealthFields.FIELD_MIN_HEART_RATE),\n        FIELD_SYSTOLIC_PRESSURE_MAX(\"FIELD_SYSTOLIC_PRESSURE_MAX\", HealthFields.FIELD_SYSTOLIC_PRESSURE_MAX),\n        FIELD_DIASTOLIC_PRESSURE(\"FIELD_DIASTOLIC_PRESSURE\", HealthFields.FIELD_DIASTOLIC_PRESSURE),\n        FIELD_DIASTOLIC_PRESSURE_AVG(\"FIELD_DIASTOLIC_PRESSURE_AVG\", HealthFields.FIELD_DIASTOLIC_PRESSURE_AVG),\n        FIELD_DIASTOLIC_PRESSURE_MIN(\"FIELD_DIASTOLIC_PRESSURE_MIN\", HealthFields.FIELD_DIASTOLIC_PRESSURE_MIN),\n        FIELD_DIASTOLIC_PRESSURE_MAX(\"FIELD_DIASTOLIC_PRESSURE_MAX\", HealthFields.FIELD_DIASTOLIC_PRESSURE_MAX),\n        FIELD_BODY_POSTURE(\"FIELD_BODY_POSTURE\", HealthFields.FIELD_BODY_POSTURE),\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE(\"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n            HealthFields.FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE),\n        FIELD_LEVEL(\"FIELD_LEVEL\", HealthFields.FIELD_LEVEL),\n        FIELD_MEASURE_TIME(\"FIELD_MEASURE_TIME\", HealthFields.FIELD_MEASURE_TIME),\n        FIELD_CORRELATION_WITH_MEALTIME(\"FIELD_CORRELATION_WITH_MEALTIME\",\n            HealthFields.FIELD_CORRELATION_WITH_MEALTIME),\n        FIELD_CORRELATION_WITH_SLEEP_STATE(\"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n            HealthFields.FIELD_CORRELATION_WITH_SLEEP_STATE),\n        FIELD_SAMPLE_SOURCE(\"FIELD_SAMPLE_SOURCE\", HealthFields.FIELD_SAMPLE_SOURCE),\n        FIELD_SATURATION(\"FIELD_SATURATION\", HealthFields.FIELD_SATURATION),\n        FIELD_SATURATION_AVG(\"FIELD_SATURATION_AVG\", HealthFields.FIELD_SATURATION_AVG),\n        FIELD_SATURATION_MIN(\"FIELD_SATURATION_MIN\", HealthFields.FIELD_SATURATION_MIN),\n        FIELD_SATURATION_MAX(\"FIELD_SATURATION_MAX\", HealthFields.FIELD_SATURATION_MAX),\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE(\"FIELD_OXYGEN_SUPPLY_FLOW_RATE\", HealthFields.FIELD_OXYGEN_SUPPLY_FLOW_RATE),\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG(\"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n            HealthFields.FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG),\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN(\"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n            HealthFields.FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN),\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX(\"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n            HealthFields.FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX),\n        FIELD_OXYGEN_THERAPY(\"FIELD_OXYGEN_THERAPY\", HealthFields.FIELD_OXYGEN_THERAPY),\n        FIELD_SPO2_MEASUREMENT_MECHANISM(\"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n            HealthFields.FIELD_SPO2_MEASUREMENT_MECHANISM),\n        FIELD_SPO2_MEASUREMENT_APPROACH(\"FIELD_SPO2_MEASUREMENT_APPROACH\",\n            HealthFields.FIELD_SPO2_MEASUREMENT_APPROACH),\n        FIELD_TEMPERATURE(\"FIELD_TEMPERATURE\", HealthFields.FIELD_TEMPERATURE),\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE(\"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n            HealthFields.FIELD_MEASURE_BODY_PART_OF_TEMPERATURE),\n        FIELD_TEXTURE(\"FIELD_TEXTURE\", HealthFields.FIELD_TEXTURE),\n        FIELD_AMOUNT(\"FIELD_AMOUNT\", HealthFields.FIELD_AMOUNT),\n        FIELD_POSITION(\"FIELD_POSITION\", HealthFields.FIELD_POSITION),\n        FIELD_DILATION_STATUS(\"FIELD_DILATION_STATUS\", HealthFields.FIELD_DILATION_STATUS),\n        FIELD_FIRMNESS_LEVEL(\"FIELD_FIRMNESS_LEVEL\", HealthFields.FIELD_FIRMNESS_LEVEL),\n        FIELD_VOLUME(\"FIELD_VOLUME\", HealthFields.FIELD_VOLUME),\n        FIELD_DETECTION_RESULT(\"FIELD_DETECTION_RESULT\", HealthFields.FIELD_DETECTION_RESULT),\n        FIELD_SPHYGMUS(\"FIELD_SPHYGMUS\", HealthFields.FIELD_SPHYGMUS),\n        FIELD_MEASUREMENT_ANOMALY_FLAG(\"FIELD_MEASUREMENT_ANOMALY_FLAG\", HealthFields.FIELD_MEASUREMENT_ANOMALY_FLAG),\n        FIELD_BEFORE_MEASURE_ACTIVITY(\"FIELD_BEFORE_MEASURE_ACTIVITY\", HealthFields.FIELD_BEFORE_MEASURE_ACTIVITY),\n        FIELD_RECORD_DAY(\"FIELD_RECORD_DAY\", HealthFields.FIELD_RECORD_DAY),\n        FIELD_STATUS(\"FIELD_STATUS\", HealthFields.FIELD_STATUS),\n        FIELD_SUB_STATUS(\"FIELD_SUB_STATUS\", HealthFields.FIELD_SUB_STATUS),\n        FIELD_TIME_ZONE(\"FIELD_TIME_ZONE\", HealthFields.FIELD_TIME_ZONE),\n        FIELD_REMARKS(\"FIELD_REMARKS\", HealthFields.FIELD_REMARKS),\n        FIELD_DYSMENORRHOEA_LEVEL(\"FIELD_DYSMENORRHOEA_LEVEL\", HealthFields.FIELD_DYSMENORRHOEA_LEVEL),\n        FIELD_PHYSICAL_SYMPTOMS(\"FIELD_PHYSICAL_SYMPTOMS\", HealthFields.FIELD_PHYSICAL_SYMPTOMS),\n        FIELD_SATURATION_LAST(\"FIELD_SATURATION_LAST\", HealthFields.FIELD_SATURATION_LAST),\n        FIELD_SYSTOLIC_PRESSURE_LAST(\"FIELD_SYSTOLIC_PRESSURE_LAST\", HealthFields.FIELD_SYSTOLIC_PRESSURE_LAST),\n        FIELD_DIASTOLIC_PRESSURE_LAST(\"FIELD_DIASTOLIC_PRESSURE_LAST\", HealthFields.FIELD_DIASTOLIC_PRESSURE_LAST),\n        FIELD_SPHYGMUS_AVG(\"FIELD_SPHYGMUS_AVG\", HealthFields.FIELD_SPHYGMUS_AVG),\n        FIELD_SPHYGMUS_MAX(\"FIELD_SPHYGMUS_MAX\", HealthFields.FIELD_SPHYGMUS_MAX),\n        FIELD_SPHYGMUS_MIN(\"FIELD_SPHYGMUS_MIN\", HealthFields.FIELD_SPHYGMUS_MIN),\n        FIELD_SPHYGMUS_LAST(\"FIELD_SPHYGMUS_LAST\", HealthFields.FIELD_SPHYGMUS_LAST),\n        SYS_MODE(\"SYS_MODE\", HealthFields.SYS_MODE),\n        SYS_SESSION_DATE(\"SYS_SESSION_DATE\", HealthFields.SYS_SESSION_DATE),\n        EVENT_AHI(\"EVENT_AHI\", HealthFields.EVENT_AHI),\n        SYS_DURATION(\"SYS_DURATION\", HealthFields.SYS_DURATION),\n        LUMIS_TIDVOL_MEDIAN(\"LUMIS_TIDVOL_MEDIAN\", HealthFields.LUMIS_TIDVOL_MEDIAN),\n        LUMIS_TIDVOL(\"LUMIS_TIDVOL\", HealthFields.LUMIS_TIDVOL),\n        LUMIS_TIDVOL_MAX(\"LUMIS_TIDVOL_MAX\", HealthFields.LUMIS_TIDVOL_MAX),\n        CLINICAL_RESPRATE_MEDIAN(\"CLINICAL_RESPRATE_MEDIAN\", HealthFields.CLINICAL_RESPRATE_MEDIAN),\n        CLINICAL_RESP_RATE(\"CLINICAL_RESP_RATE\", HealthFields.CLINICAL_RESP_RATE),\n        CLINICAL_RESP_RATE_MAX(\"CLINICAL_RESP_RATE_MAX\", HealthFields.CLINICAL_RESP_RATE_MAX),\n        LUMIS_IERATIO_MEDIAN(\"LUMIS_IERATIO_MEDIAN\", HealthFields.LUMIS_IERATIO_MEDIAN),\n        LUMIS_IERATIO_QUANTILE(\"LUMIS_IERATIO_QUANTILE\", HealthFields.LUMIS_IERATIO_QUANTILE),\n        LUMIS_IERATIO_MAX(\"LUMIS_IERATIO_MAX\", HealthFields.LUMIS_IERATIO_MAX),\n        MASK_OFF(\"MASK_OFF\", HealthFields.MASK_OFF),\n        HYPOVENTILATION_INDEX(\"HYPOVENTILATION_INDEX\", HealthFields.HYPOVENTILATION_INDEX),\n        OBSTRUCTIVE_APNEA_INDEX(\"OBSTRUCTIVE_APNEA_INDEX\", HealthFields.OBSTRUCTIVE_APNEA_INDEX),\n        PRESSURE_BELOW(\"PRESSURE_BELOW\", HealthFields.PRESSURE_BELOW),\n        HYPOVENTILATION_EVENT_TIMES(\"HYPOVENTILATION_EVENT_TIMES\", HealthFields.HYPOVENTILATION_EVENT_TIMES),\n        SNORING_EVENT_TIMES(\"SNORING_EVENT_TIMES\", HealthFields.SNORING_EVENT_TIMES),\n        CENTER_APNEA_EVENT_TIMES(\"CENTER_APNEA_EVENT_TIMES\", HealthFields.CENTER_APNEA_EVENT_TIMES),\n        OBSTRUCTIVE_APNEA_EVENT_TIMES(\"OBSTRUCTIVE_APNEA_EVENT_TIMES\", HealthFields.OBSTRUCTIVE_APNEA_EVENT_TIMES),\n        AIR_FLOW_LIMIT_EVENT_TIMES(\"AIR_FLOW_LIMIT_EVENT_TIMES\", HealthFields.AIR_FLOW_LIMIT_EVENT_TIMES),\n        MASSIVE_LEAK_EVENT_TIMES(\"MASSIVE_LEAK_EVENT_TIMES\", HealthFields.MASSIVE_LEAK_EVENT_TIMES),\n        UNKNOW_EVENT_TIMES(\"UNKNOW_EVENT_TIMES\", HealthFields.UNKNOW_EVENT_TIMES),\n        ALL_EVENT_TIMES(\"ALL_EVENT_TIMES\", HealthFields.ALL_EVENT_TIMES);\n\n       \n        private final String value;\n\n        private final Field fieldType;\n\n        FieldConstants(String value, Field fieldType) {\n            this.value = value;\n            this.fieldType = fieldType;\n        }\n\n        public String getValue() {\n            return value;\n        }\n\n        public Field getFieldType() {\n            return fieldType;\n        }\n\n        public static FieldConstants fromString(String text) {\n            for (FieldConstants variable : FieldConstants.values()) {\n                if (variable.value.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n    }\n\n    /**\n     * whole field constant variables as Map\n     **/\n    Map<String, Object> FIELD_TYPES_MAP = initFieldsMap();\n\n    /**\n     * Initializes Field Type Constants map.\n     *\n     * @return Map<String, Object> Field Type Constants map\n     */\n    static Map<String, Object> initFieldsMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (FieldConstants variable : EnumSet.allOf(FieldConstants.class)) {\n            String key = variable.name();\n            String value = variable.getValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n    enum FieldValueEnums {\n\n        // Formats\n        FORMAT_INT32(\"FORMAT_INT32\", Field.FORMAT_INT32),\n        FORMAT_FLOAT(\"FORMAT_FLOAT\", Field.FORMAT_FLOAT),\n        FORMAT_STRING(\"FORMAT_STRING\", Field.FORMAT_STRING),\n        FORMAT_MAP(\"FORMAT_MAP\", Field.FORMAT_MAP),\n        FORMAT_LONG(\"FORMAT_LONG\", Field.FORMAT_LONG),\n        FORMAT_DOUBLE(\"FORMAT_DOUBLE\", Field.FORMAT_DOUBLE),\n\n        MEAL_UNKNOWN(\"MEAL_UNKNOWN\", Field.MEAL_UNKNOWN),\n        MEAL_BREAKFAST(\"MEAL_BREAKFAST\", Field.MEAL_BREAKFAST),\n        MEAL_LUNCH(\"MEAL_LUNCH\", Field.MEAL_LUNCH),\n        MEAL_DINNER(\"MEAL_DINNER\", Field.MEAL_DINNER),\n        MEAL_SNACK(\"MEAL_SNACK\", Field.MEAL_SNACK),\n\n        TYPE_OF_RESISTANCE_UNKNOWN(\"TYPE_OF_RESISTANCE_UNKNOWN\", Field.TYPE_OF_RESISTANCE_UNKNOWN),\n        TYPE_OF_RESISTANCE_BARBELL(\"TYPE_OF_RESISTANCE_BARBELL\", Field.TYPE_OF_RESISTANCE_BARBELL),\n        TYPE_OF_RESISTANCE_CABLE(\"TYPE_OF_RESISTANCE_CABLE\", Field.TYPE_OF_RESISTANCE_CABLE),\n        TYPE_OF_RESISTANCE_DUMBBELL(\"TYPE_OF_RESISTANCE_DUMBBELL\", Field.TYPE_OF_RESISTANCE_DUMBBELL),\n        TYPE_OF_RESISTANCE_KETTLEBELL(\"TYPE_OF_RESISTANCE_KETTLEBELL\", Field.TYPE_OF_RESISTANCE_KETTLEBELL),\n        TYPE_OF_RESISTANCE_MACHINE(\"TYPE_OF_RESISTANCE_MACHINE\", Field.TYPE_OF_RESISTANCE_MACHINE),\n        TYPE_OF_RESISTANCE_BODY(\"TYPE_OF_RESISTANCE_BODY\", Field.TYPE_OF_RESISTANCE_BODY),\n\n        NUTRIENTS_FACTS_CALORIES(\"NUTRIENTS_FACTS_CALORIES\", Field.NUTRIENTS_FACTS_CALORIES),\n        NUTRIENTS_FACTS_TOTAL_FAT(\"NUTRIENTS_FACTS_TOTAL_FAT\", Field.NUTRIENTS_FACTS_TOTAL_FAT),\n        NUTRIENTS_FACTS_SATURATED_FAT(\"NUTRIENTS_FACTS_SATURATED_FAT\", Field.NUTRIENTS_FACTS_SATURATED_FAT),\n        NUTRIENTS_FACTS_UNSATURATED_FAT(\"NUTRIENTS_FACTS_UNSATURATED_FAT\", Field.NUTRIENTS_FACTS_UNSATURATED_FAT),\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT(\"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n            Field.NUTRIENTS_FACTS_POLYUNSATURATED_FAT),\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT(\"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n            Field.NUTRIENTS_FACTS_MONOUNSATURATED_FAT),\n        NUTRIENTS_FACTS_TRANS_FAT(\"NUTRIENTS_FACTS_TRANS_FAT\", Field.NUTRIENTS_FACTS_TRANS_FAT),\n        NUTRIENTS_FACTS_CHOLESTEROL(\"NUTRIENTS_FACTS_CHOLESTEROL\", Field.NUTRIENTS_FACTS_CHOLESTEROL),\n        NUTRIENTS_FACTS_SODIUM(\"NUTRIENTS_FACTS_SODIUM\", Field.NUTRIENTS_FACTS_SODIUM),\n        NUTRIENTS_FACTS_POTASSIUM(\"NUTRIENTS_FACTS_POTASSIUM\", Field.NUTRIENTS_FACTS_POTASSIUM),\n        NUTRIENTS_FACTS_TOTAL_CARBS(\"NUTRIENTS_FACTS_TOTAL_CARBS\", Field.NUTRIENTS_FACTS_TOTAL_CARBS),\n        NUTRIENTS_FACTS_DIETARY_FIBER(\"NUTRIENTS_FACTS_DIETARY_FIBER\", Field.NUTRIENTS_FACTS_DIETARY_FIBER),\n        NUTRIENTS_FACTS_SUGAR(\"NUTRIENTS_FACTS_SUGAR\", Field.NUTRIENTS_FACTS_SUGAR),\n        NUTRIENTS_FACTS_PROTEIN(\"NUTRIENTS_FACTS_PROTEIN\", Field.NUTRIENTS_FACTS_PROTEIN),\n        NUTRIENTS_FACTS_VITAMIN_A(\"NUTRIENTS_FACTS_VITAMIN_A\", Field.NUTRIENTS_FACTS_VITAMIN_A),\n        NUTRIENTS_FACTS_VITAMIN_C(\"NUTRIENTS_FACTS_VITAMIN_C\", Field.NUTRIENTS_FACTS_VITAMIN_C),\n        NUTRIENTS_FACTS_CALCIUM(\"NUTRIENTS_FACTS_CALCIUM\", Field.NUTRIENTS_FACTS_CALCIUM),\n        NUTRIENTS_FACTS_IRON(\"NUTRIENTS_FACTS_IRON\", Field.NUTRIENTS_FACTS_IRON),\n\n        BODY_POSTURE_STANDING(\"BODY_POSTURE_STANDING\", HealthFields.BODY_POSTURE_STANDING),\n        BODY_POSTURE_SITTING(\"BODY_POSTURE_SITTING\", HealthFields.BODY_POSTURE_SITTING),\n        BODY_POSTURE_LYING_DOWN(\"BODY_POSTURE_LYING_DOWN\", HealthFields.BODY_POSTURE_LYING_DOWN),\n        BODY_POSTURE_SEMI_RECUMBENT(\"BODY_POSTURE_SEMI_RECUMBENT\", HealthFields.BODY_POSTURE_SEMI_RECUMBENT),\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST(\"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n            HealthFields.MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST),\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST(\"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n            HealthFields.MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST),\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM(\"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n            HealthFields.MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM),\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM(\"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n            HealthFields.MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM),\n\n        MEASURE_TIME_RANDOM_TIME(\"MEASURE_TIME_RANDOM_TIME\", HealthFields.MEASURE_TIME_RANDOM_TIME),\n        MEASURE_TIME_BEFORE_BREAKFAST(\"MEASURE_TIME_BEFORE_BREAKFAST\", HealthFields.MEASURE_TIME_BEFORE_BREAKFAST),\n        MEASURE_TIME_AFTER_BREAKFAST(\"MEASURE_TIME_AFTER_BREAKFAST\", HealthFields.MEASURE_TIME_AFTER_BREAKFAST),\n        MEASURE_TIME_BEFORE_LUNCH(\"MEASURE_TIME_BEFORE_LUNCH\", HealthFields.MEASURE_TIME_BEFORE_LUNCH),\n        MEASURE_TIME_AFTER_LUNCH(\"MEASURE_TIME_AFTER_LUNCH\", HealthFields.MEASURE_TIME_AFTER_LUNCH),\n        MEASURE_TIME_BEFORE_DINNER(\"MEASURE_TIME_BEFORE_DINNER\", HealthFields.MEASURE_TIME_BEFORE_DINNER),\n        MEASURE_TIME_AFTER_DINNER(\"MEASURE_TIME_AFTER_DINNER\", HealthFields.MEASURE_TIME_AFTER_DINNER),\n        MEASURE_TIME_BEFORE_SLEEP(\"MEASURE_TIME_BEFORE_SLEEP\", HealthFields.MEASURE_TIME_BEFORE_SLEEP),\n        MEASURE_TIME_BEFORE_DAWN(\"MEASURE_TIME_BEFORE_DAWN\", HealthFields.MEASURE_TIME_BEFORE_DAWN),\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL(\"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n            HealthFields.FIELD_CORRELATION_WITH_MEALTIME_GENERAL),\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING(\"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n            HealthFields.FIELD_CORRELATION_WITH_MEALTIME_FASTING),\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL(\"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n            HealthFields.FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL),\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL(\"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n            HealthFields.FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL),\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE(\"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n            HealthFields.CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE),\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP(\"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n            HealthFields.CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP),\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING(\"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n            HealthFields.CORRELATION_WITH_SLEEP_STATE_ON_WAKING),\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP(\"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n            HealthFields.CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP),\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID(\"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n            HealthFields.SAMPLE_SOURCE_INTERSTITIAL_FLUID),\n        SAMPLE_SOURCE_CAPILLARY_BLOOD(\"SAMPLE_SOURCE_CAPILLARY_BLOOD\", HealthFields.SAMPLE_SOURCE_CAPILLARY_BLOOD),\n        SAMPLE_SOURCE_PLASMA(\"SAMPLE_SOURCE_PLASMA\", HealthFields.SAMPLE_SOURCE_PLASMA),\n        SAMPLE_SOURCE_SERUM(\"SAMPLE_SOURCE_SERUM\", HealthFields.SAMPLE_SOURCE_SERUM),\n        SAMPLE_SOURCE_TEARS(\"SAMPLE_SOURCE_TEARS\", HealthFields.SAMPLE_SOURCE_TEARS),\n        SAMPLE_SOURCE_WHOLE_BLOOD(\"SAMPLE_SOURCE_WHOLE_BLOOD\", HealthFields.SAMPLE_SOURCE_WHOLE_BLOOD),\n\n        OXYGEN_THERAPY_NASAL_CANULA(\"OXYGEN_THERAPY_NASAL_CANULA\", HealthFields.OXYGEN_THERAPY_NASAL_CANULA),\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY(\"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n            HealthFields.SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY),\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY(\"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n            HealthFields.SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY),\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY(\"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY),\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER(\"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_FINGER),\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD(\"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD),\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL(\"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_ORAL),\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL(\"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL),\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY(\"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY),\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE(\"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_TOE),\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC(\"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC),\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST(\"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_WRIST),\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL(\"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n            HealthFields.MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL),\n\n        TEXTURE_DRY(\"TEXTURE_DRY\", HealthFields.TEXTURE_DRY),\n        TEXTURE_STICKY(\"TEXTURE_STICKY\", HealthFields.TEXTURE_STICKY),\n        TEXTURE_CREAMY(\"TEXTURE_CREAMY\", HealthFields.TEXTURE_CREAMY),\n        TEXTURE_WATERY(\"TEXTURE_WATERY\", HealthFields.TEXTURE_WATERY),\n        TEXTURE_EGG_WHITE(\"TEXTURE_EGG_WHITE\", HealthFields.TEXTURE_EGG_WHITE),\n\n        AMOUNT_LIGHT(\"AMOUNT_LIGHT\", HealthFields.AMOUNT_LIGHT),\n        AMOUNT_MEDIUM(\"AMOUNT_MEDIUM\", HealthFields.AMOUNT_MEDIUM),\n        AMOUNT_HEAVY(\"AMOUNT_HEAVY\", HealthFields.AMOUNT_HEAVY),\n\n        POSITION_LOW(\"POSITION_LOW\", HealthFields.POSITION_LOW),\n        POSITION_MEDIUM(\"POSITION_MEDIUM\", HealthFields.POSITION_MEDIUM),\n        POSITION_HIGH(\"POSITION_HIGH\", HealthFields.POSITION_HIGH),\n\n        DILATION_STATUS_CLOSED(\"DILATION_STATUS_CLOSED\", HealthFields.DILATION_STATUS_CLOSED),\n        DILATION_STATUS_MEDIUM(\"DILATION_STATUS_MEDIUM\", HealthFields.DILATION_STATUS_MEDIUM),\n        DILATION_STATUS_OPEN(\"DILATION_STATUS_OPEN\", HealthFields.DILATION_STATUS_OPEN),\n\n        FIRMNESS_LEVEL_SOFT(\"FIRMNESS_LEVEL_SOFT\", HealthFields.FIRMNESS_LEVEL_SOFT),\n        FIRMNESS_LEVEL_MEDIUM(\"FIRMNESS_LEVEL_MEDIUM\", HealthFields.FIRMNESS_LEVEL_MEDIUM),\n        FIRMNESS_LEVEL_FIRM(\"FIRMNESS_LEVEL_FIRM\", HealthFields.FIRMNESS_LEVEL_FIRM),\n\n        VOLUME_SPOTTING(\"VOLUME_SPOTTING\", HealthFields.VOLUME_SPOTTING),\n        VOLUME_LIGHT(\"VOLUME_LIGHT\", HealthFields.VOLUME_LIGHT),\n        VOLUME_MEDIUM(\"VOLUME_MEDIUM\", HealthFields.VOLUME_MEDIUM),\n        VOLUME_HEAVY(\"VOLUME_HEAVY\", HealthFields.VOLUME_HEAVY),\n\n        DETECTION_RESULT_NEGATIVE(\"DETECTION_RESULT_NEGATIVE\", HealthFields.DETECTION_RESULT_NEGATIVE),\n        DETECTION_RESULT_POSITIVE(\"DETECTION_RESULT_POSITIVE\", HealthFields.DETECTION_RESULT_POSITIVE),\n\n        // Group Types\n        TYPE_TIME(\"TYPE_TIME\", Group.TYPE_TIME),\n        TYPE_INTERVALS(\"TYPE_INTERVALS\", Group.TYPE_INTERVALS);\n\n        private final String enumName;\n\n        private final Object enumValue;\n\n        FieldValueEnums(String enumName, Object enumValue) {\n            this.enumName = enumName;\n            this.enumValue = enumValue;\n        }\n\n        public String getEnumName() {\n            return enumName;\n        }\n\n        public Object getEnumValue() {\n            return enumValue;\n        }\n\n        public static FieldValueEnums fromString(String text) {\n            for (FieldValueEnums variable : FieldValueEnums.values()) {\n                if (variable.enumName.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n\n    }\n\n    /**\n     * whole field constant variables as Map\n     **/\n    Map<String, Object> FIELD_VALUE_ENUMS_MAP = initFieldValueEnums();\n\n    /**\n     * Initializes Field Type Constants map.\n     *\n     * @return Map<String, Object> Field Type Constants map\n     */\n    static Map<String, Object> initFieldValueEnums() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (FieldValueEnums variable : EnumSet.allOf(FieldValueEnums.class)) {\n            String key = variable.getEnumName();\n            Object value = variable.getEnumValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n    enum SleepStateConstants {\n        SLEEP_LIGHT(\"SLEEP_LIGHT\", SleepState.SLEEP_LIGHT),\n        SLEEP_DREAM(\"SLEEP_DREAM\", SleepState.SLEEP_DREAM),\n        SLEEP_DEEP(\"SLEEP_DEEP\", SleepState.SLEEP_DEEP),\n        SLEEP_AWAKE(\"SLEEP_AWAKE\", SleepState.SLEEP_AWAKE),\n        SLEEP_NAP(\"SLEEP_NAP\", SleepState.SLEEP_NAP);\n\n        private final String name;\n\n        private final int value;\n\n        SleepStateConstants(String name, int value) {\n            this.name = name;\n            this.value = value;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public int getValue() {\n            return value;\n        }\n\n        public static SleepStateConstants fromString(String text) {\n            for (SleepStateConstants variable : SleepStateConstants.values()) {\n                if (variable.name.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n\n    }\n\n    /**\n     * whole SleepState constant variables as Map\n     **/\n    Map<String, Object> SLEEP_STATE_CONSTANTS = initSleepStateConstants();\n\n    /**\n     * Initializes SleepState Constants map.\n     *\n     * @return Map<String, Object> SleepState Constants map\n     */\n    static Map<String, Object> initSleepStateConstants() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (SleepStateConstants variable : EnumSet.allOf(SleepStateConstants.class)) {\n            String key = variable.getName();\n            int value = variable.getValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n    enum DataCollectorConstants {\n        DATA_TYPE_CLEAN(\"DATA_TYPE_CLEAN\", DataCollector.DATA_TYPE_CLEAN),\n        DATA_TYPE_CONVERTED(\"DATA_TYPE_CONVERTED\", DataCollector.DATA_TYPE_CONVERTED),\n        DATA_TYPE_MERGED(\"DATA_TYPE_MERGED\", DataCollector.DATA_TYPE_MERGED),\n        DATA_TYPE_POLYMERIZED(\"DATA_TYPE_POLYMERIZED\", DataCollector.DATA_TYPE_POLYMERIZED),\n        DATA_TYPE_DERIVED(\"DATA_TYPE_DERIVED\", DataCollector.DATA_TYPE_DERIVED),\n        DATA_TYPE_INIT(\"DATA_TYPE_INIT\", DataCollector.DATA_TYPE_INIT),\n        DATA_TYPE_RAW(\"DATA_TYPE_RAW\", DataCollector.DATA_TYPE_RAW),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A),\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B(\"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B),\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003(\"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003),\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013(\"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n            DataCollector.HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013);\n\n        private final String name;\n\n        private final int value;\n\n        DataCollectorConstants(String name, int value) {\n            this.name = name;\n            this.value = value;\n        }\n\n        public String getName() {\n            return name;\n        }\n\n        public int getValue() {\n            return value;\n        }\n\n        public static DataCollectorConstants fromString(String text) {\n            for (DataCollectorConstants variable : DataCollectorConstants.values()) {\n                if (variable.name.equalsIgnoreCase(text)) {\n                    return variable;\n                }\n            }\n            return null;\n        }\n\n    }\n\n    /**\n     * whole DataCollectorConstants constant variables as Map\n     **/\n    Map<String, Object> DATA_COLLECTOR_CONSTANTS = initDataCollectorConstants();\n\n    /**\n     * Initializes DataCollectorConstants map.\n     *\n     * @return Map<String, Object> DataCollectorConstants map\n     */\n    static Map<String, Object> initDataCollectorConstants() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (DataCollectorConstants variable : EnumSet.allOf(DataCollectorConstants.class)) {\n            String key = variable.getName();\n            int value = variable.getValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/helper/ResultHelper.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.helper;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableArray;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableArraySampleSet;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMap;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMapWithMessage;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.wrapWritableObjectWithSuccessStatus;\n\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.data.ScopeLangItem;\nimport com.huawei.hms.hihealth.result.ActivityRecordReply;\nimport com.huawei.hms.hihealth.result.HealthRecordReply;\nimport com.huawei.hms.hihealth.result.ReadReply;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.util.ExceptionHandler;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\n\nimport java.util.List;\n\n/**\n * ResultHelper<T> is a helper class for reaching {@link ResultListener<T>}.\n * </br>\n * All the generic result request types will be converted into writable map and\n * returned via Promise instance.\n *\n * @since v.5.0.1\n */\npublic final class ResultHelper<T> implements ResultListener<T> {\n    // Internal promise instance that will be initialized during construction.\n    private final Promise promise;\n\n    // Internal Class type instance that will be initialized during construction.\n    private final Class<T> type;\n\n    // Log name for HMSLogger instance\n    private final String logName;\n\n    // HMSLogger instance\n    private final HMSLogger logger;\n\n    public ResultHelper(Class<T> classType, final Promise promise, final HMSLogger logger, final String logName) {\n        this.type = classType;\n        this.promise = promise;\n        this.logger = logger;\n        this.logName = logName;\n    }\n\n    /**\n     * Looks for class type, then\n     * Returns success result via Promise instance.\n     *\n     * @param result Health Result instance.\n     */\n    @Override\n    public void onSuccess(T result) {\n        if (type.equals(String.class)) {\n            promise.resolve(toWritableMapWithMessage((String) result, true));\n        } else if (type.equals(ActivityRecordReply.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableArray((ActivityRecordReply) result), true));\n        } else if (type.equals(List.class)) {\n            List<?> resultList = (List<?>) result;\n            if (!resultList.isEmpty() && resultList.get(0) instanceof ActivityRecord) {\n                promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableArray((List<ActivityRecord>) resultList), true));\n            } else {\n                promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableArraySampleSet((List<SampleSet>) resultList), true));\n            }\n        } else if (type.equals(ReadReply.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableMap((ReadReply) result), true));\n        } else if (type.equals(SampleSet.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableMap((SampleSet) result), true));\n        } else if (type.equals(Boolean.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus((Boolean) result, true));\n        } else if (type.equals(ScopeLangItem.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableMap((ScopeLangItem) result), true));\n        } else if (type.equals(DataType.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableMap((DataType) result), true));\n        } else if (type.equals(HealthRecordReply.class)) {\n            promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableArray((HealthRecordReply) result), true));\n        }\n        logger.sendSingleEvent(logName);\n    }\n\n    /**\n     * Returns exception via Promise instance.\n     *\n     * @param exception Exception instance.\n     */\n    @Override\n    public void onFail(Exception exception) {\n        ExceptionHandler.INSTANCE.fail(exception, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/helper/VoidResultHelper.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.helper;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.createWritableMapWithSuccessStatus;\n\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\nimport com.huawei.hms.rn.health.foundation.util.ExceptionHandler;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\n\n/**\n * VoidResultHelper is a helper class for reaching {@link VoidResultListener}.\n *\n * @since v.5.0.1\n */\npublic class VoidResultHelper implements VoidResultListener {\n\n    // Internal promise instance that will be initialized during construction.\n    private final Promise promise;\n\n    private final HMSLogger logger;\n\n    private final String logName;\n\n    public VoidResultHelper(final Promise promise, HMSLogger logger, String logName) {\n        this.promise = promise;\n        this.logger = logger;\n        this.logName = logName;\n    }\n\n    /**\n     * Returns success result via Promise instance.\n     *\n     * @param result Health Result instance.\n     */\n\n    @Override\n    public void onSuccess(Void result) {\n        promise.resolve(createWritableMapWithSuccessStatus(true));\n        logger.sendSingleEvent(logName);\n    }\n\n    /**\n     * Returns exception via Promise instance.\n     *\n     * @param exception Exception instance.\n     */\n    @Override\n    public void onFail(Exception exception) {\n        ExceptionHandler.INSTANCE.fail(exception, promise);\n    }\n\n    public void sendFail(String errMessage) {\n        WritableMap writableMap = createWritableMapWithSuccessStatus(false);\n        writableMap.putInt(\"statusCode\", -1);\n        writableMap.putString(\"errorMessage\", errMessage);\n        promise.resolve(writableMap);\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/listener/ResultListener.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.listener;\n\n/**\n * Base Result Listener.\n *\n * @param <T>\n * @since v.5.0.1\n */\npublic interface ResultListener<T> {\n    /**\n     * Presents the success scenario.\n     *\n     * @param result Health Result instance.\n     */\n    void onSuccess(T result);\n\n    /**\n     * Presents the failure scenario, Exception instance is returned.\n     *\n     * @param exception Exception instance.\n     */\n    void onFail(Exception exception);\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/listener/VoidResultListener.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.listener;\n\n/**\n * All the Void Results is used among {@link com.huawei.hms.rn.health} kit.\n *\n * @since v.5.0.1\n */\npublic interface VoidResultListener extends ResultListener<Void> { }"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/util/ExceptionHandler.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.util;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.addErrorMessage;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.createWritableMapWithSuccessStatus;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMapWithMessage;\n\nimport android.util.Log;\n\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.health.kits.account.HmsHealthAccount;\nimport com.huawei.hms.support.hwid.result.HuaweiIdAuthResult;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\n\n/**\n * {@link ExceptionHandler} simply looks for exception then,\n * whether gives an ApiException log information with return code\n * or throws an exception with localized message.\n *\n * @since v.5.0.1\n */\npublic enum ExceptionHandler {\n    INSTANCE;\n    private final String MODULE_NAME = \"HMSHealth\";\n\n    /**\n     * Exception Error Listener.\n     */\n    public interface ErrorListener {\n        /**\n         * Error Message Description.\n         *\n         * @param errMessage String value.\n         */\n        void onMessageReceived(String errMessage);\n    }\n\n    /**\n     * Simple handle method, which returns errorListener, onMessageReceived.\n     *\n     * @param exception Exception instance.\n     * @param errorListener ErrorListener instance.\n     */\n    public synchronized void fail(Exception exception, ErrorListener errorListener) {\n        if (exception instanceof ApiException) {\n            ApiException apiException = (ApiException) exception;\n            Log.i(MODULE_NAME, \"returnCode: \" + apiException.getStatusCode());\n            if (errorListener == null) {\n                return;\n            }\n            errorListener.onMessageReceived(String.valueOf(apiException.getStatusCode()));\n        } else {\n            Log.e(MODULE_NAME, exception.getMessage());\n            if (errorListener == null) {\n                return;\n            }\n            Log.i(MODULE_NAME, \"exception: \" + exception.getLocalizedMessage());\n            errorListener.onMessageReceived(exception.getLocalizedMessage());\n        }\n    }\n\n    /**\n     * Simple handle method.\n     *\n     * @param exception Exception instance.\n     */\n    public synchronized void fail(Exception exception) {\n        if (exception instanceof ApiException) {\n            ApiException apiException = (ApiException) exception;\n            Log.i(MODULE_NAME, \"returnCode: \" + apiException.getStatusCode());\n        } else {\n            Log.e(MODULE_NAME, exception.getMessage());\n        }\n    }\n\n    /**\n     * Promise handler method, in failure.\n     *\n     * @param exception Exception instance.\n     * @param promise Promise instance.\n     */\n    public synchronized void fail(final Exception exception, Promise promise) {\n        WritableMap writableMap = createWritableMapWithSuccessStatus(false);\n        if (exception instanceof ApiException) {\n            ApiException apiException = (ApiException) exception;\n            Log.i(MODULE_NAME, \"returnCode: \" + apiException.getStatusCode());\n            writableMap.putInt(\"returnCode\", apiException.getStatusCode());\n            promise.resolve(writableMap);\n            return;\n        }\n        Log.i(MODULE_NAME, \"exception: \" + exception.getLocalizedMessage());\n        promise.resolve(addErrorMessage(writableMap, exception.getLocalizedMessage()));\n    }\n\n    /**\n     * Promise handler method, in failure.\n     * This method is specifically useful through {@link HmsHealthAccount} operations.\n     *\n     * @param promise Promise instance.\n     * @param result {@link HuaweiIdAuthResult} instance.\n     */\n    public synchronized void fail(Promise promise, HuaweiIdAuthResult result) {\n        WritableMap writableMap = createWritableMapWithSuccessStatus(false);\n        writableMap.putInt(\"statusCode\", result.getStatus().getStatusCode());\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Fails promise with a requested message.\n     *\n     * @param promise Promise instance.\n     * @param message String message.\n     */\n    public synchronized void fail(Promise promise, String message) {\n        promise.resolve(toWritableMapWithMessage(message, false));\n    }\n\n    /**\n     * Fails promise with {@code \"isSuccess\", false} params.\n     *\n     * @param promise Promise instance.\n     */\n    public synchronized void fail(Promise promise) {\n        promise.resolve(createWritableMapWithSuccessStatus(false));\n    }\n\n    /**\n     * This method is used through Receivers. Checks whether receiver is already registered then,\n     * in case the pending intent object is in use, informs the RN Side.\n     *\n     * @param isRegistered Boolean value, aims to get info for whether receiver is registered or not.\n     * @param promise Promise instance.\n     */\n    public synchronized void failPendingIntent(final boolean isRegistered, final Promise promise) {\n        if (isRegistered) {\n            Log.d(\"RegisteringEvent\", \"There is already an listener\");\n            promise.resolve(toWritableMapWithMessage(\"There is already an listener, no need to re listener\", true));\n            return;\n        }\n        promise.resolve(toWritableMapWithMessage(\"There is no listener, no need to un listener\", true));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/util/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.util;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Health\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"6.11.0.303\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/util/MapUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.util;\n\nimport static com.facebook.react.bridge.Arguments.createArray;\nimport static com.facebook.react.bridge.Arguments.createMap;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.ERROR_MESSAGE_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.IS_SUCCESS_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.RESULT_BODY_KEY;\n\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.ActivitySummary;\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.DeviceInfo;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.data.Group;\nimport com.huawei.hms.hihealth.data.HealthRecord;\nimport com.huawei.hms.hihealth.data.MapValue;\nimport com.huawei.hms.hihealth.data.PaceSummary;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.data.ScopeLangItem;\nimport com.huawei.hms.hihealth.data.Value;\nimport com.huawei.hms.hihealth.result.ActivityRecordReply;\nimport com.huawei.hms.hihealth.result.HealthRecordReply;\nimport com.huawei.hms.hihealth.result.ReadReply;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\nimport com.huawei.hms.support.hwid.result.HuaweiIdAuthResult;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.concurrent.TimeUnit;\n\nimport javax.annotation.Nullable;\n\n/**\n * MapUtil exposes a set of helper methods for working with\n * {@link ReadableMap}, {@link Map <>}.\n *\n * @since v.5.0.1\n */\npublic class MapUtils {\n\n    /**\n     * Converts an Object to a WritableMap.\n     *\n     * @param message String instance.\n     * @return WritableMap.\n     */\n    public static WritableMap toWritableMapWithMessage(final String message, final @Nullable Boolean isSuccess) {\n        WritableMap writableMap = createMap();\n        writableMap.putString(\"msg\", message);\n        if (isSuccess != null) {\n            return addIsSuccess(writableMap, isSuccess);\n        }\n\n        return writableMap;\n    }\n\n    /**\n     * Adds isSuccess value to an empty or already initialized writableMap instance.\n     *\n     * @param writableMap WritableMap instance, that can either be null or already initialized.\n     * @param isSuccess Boolean Value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap addIsSuccess(@Nullable WritableMap writableMap, final @Nullable Boolean isSuccess) {\n        if (writableMap == null) {\n            writableMap = createMap();\n        }\n\n        if (isSuccess != null) {\n            writableMap.putBoolean(IS_SUCCESS_KEY, isSuccess);\n        }\n\n        return writableMap;\n    }\n\n    /**\n     * Adds errorMessage value to an empty or already initialized writableMap instance.\n     *\n     * @param writableMap WritableMap instance, that can either be null or already initialized.\n     * @param errorMessage String Value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap addErrorMessage(@Nullable WritableMap writableMap, final String errorMessage) {\n        if (writableMap == null) {\n            writableMap = createMap();\n        }\n        writableMap.putString(ERROR_MESSAGE_KEY, errorMessage);\n        return writableMap;\n    }\n\n    /**\n     * Converts a HashMap into a WritableMap.\n     *\n     * @param map Map<String, Object> to be converted.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final Map<String, ?> map) {\n        WritableMap writableMap = Arguments.createMap();\n        Iterator iterator = map.entrySet().iterator();\n        try {\n            while (iterator.hasNext()) {\n                Map.Entry pair = (Map.Entry) iterator.next();\n                Object value = pair.getValue();\n\n                if (value == null) {\n                    writableMap.putNull((String) pair.getKey());\n                } else if (value instanceof Boolean) {\n                    writableMap.putBoolean((String) pair.getKey(), (Boolean) value);\n                } else if (value instanceof Double) {\n                    writableMap.putDouble((String) pair.getKey(), (Double) value);\n                } else if (value instanceof Float) {\n                    writableMap.putDouble((String) pair.getKey(), ((Float) value).doubleValue());\n                } else if (value instanceof Integer) {\n                    writableMap.putInt((String) pair.getKey(), (Integer) value);\n                } else if (value instanceof String) {\n                    writableMap.putString((String) pair.getKey(), (String) value);\n                } else if (value instanceof Map) {\n                    writableMap.putMap((String) pair.getKey(), toWritableMap((Map<String, Object>) value));\n                } else if (value.getClass().isArray()) {\n                    writableMap.putArray((String) pair.getKey(), toWritableArray((Object[]) value));\n                } else if (value instanceof Value) {\n                    switch (((Value) value).getFormat()) {\n                        case Field.FORMAT_INT32:\n                            writableMap.putInt((String) pair.getKey(), ((Value) value).asIntValue());\n                            break;\n                        case Field.FORMAT_FLOAT:\n                            writableMap.putDouble((String) pair.getKey(), ((Value) value).asDoubleValue());\n                            break;\n                        case Field.FORMAT_STRING:\n                            writableMap.putString((String) pair.getKey(), ((Value) value).asStringValue());\n                            break;\n                        case Field.FORMAT_MAP:\n                            Map<String, MapValue> floatMap = new HashMap<>();\n                            for (String key : ((Value) value).getMap().keySet()) {\n                                floatMap.put(key, ((Value) value).getMapValue(key));\n                            }\n                            writableMap.putMap((String) pair.getKey(), toWritableMap(floatMap));\n                            break;\n                        case Field.FORMAT_LONG:\n                            writableMap.putInt((String) pair.getKey(), (int) ((Value) value).asLongValue());\n                            break;\n                        default:\n                            break;\n                    }\n                }\n\n                iterator.remove();\n            }\n        } catch (RuntimeException e) {\n            ExceptionHandler.INSTANCE.fail(e);\n        } catch (Exception exception) {\n            ExceptionHandler.INSTANCE.fail(exception);\n        }\n\n        return writableMap;\n    }\n\n    /**\n     * Converts a JSONObject instance to a WritableMap.\n     *\n     * @param jsonObject JSONObject instance.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final JSONObject jsonObject) {\n        WritableMap map = new WritableNativeMap();\n        Iterator<String> iterator = jsonObject.keys();\n        try {\n            while (iterator.hasNext()) {\n                String key = iterator.next();\n                Object value = jsonObject.get(key);\n                if (value instanceof JSONObject) {\n                    map.putMap(key, toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    map.putArray(key, toWritableArray((JSONArray) value));\n                }\n                checkPrimitiveValuesInMap(map, key, value);\n            }\n        } catch (Exception exception) {\n            ExceptionHandler.INSTANCE.fail(exception);\n        }\n        return map;\n    }\n\n    /**\n     * Converts ReadableMap instance to a JSONObject.\n     *\n     * @param readableMap ReadableMap instance.\n     * @return JSONObject.\n     */\n    public static JSONObject toJson(final ReadableMap readableMap) {\n        JSONObject object = new JSONObject();\n        if (readableMap == null) {\n            return object;\n        }\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            try {\n                switch (readableMap.getType(key)) {\n                    case Null:\n                        object.put(key, JSONObject.NULL);\n                        break;\n                    case Boolean:\n                        object.put(key, readableMap.getBoolean(key));\n                        break;\n                    case Number:\n                        object.put(key, readableMap.getDouble(key));\n                        break;\n                    case String:\n                        object.put(key, readableMap.getString(key));\n                        break;\n                    case Map:\n                        object.put(key, toJson(readableMap.getMap(key)));\n                        break;\n                    case Array:\n                        object.put(key, toJson(readableMap.getArray(key)));\n                        break;\n                    default:\n                        break;\n                }\n            } catch (Exception exception) {\n                ExceptionHandler.INSTANCE.fail(exception);\n            }\n        }\n        return object;\n    }\n\n    /**\n     * toArrayList converts a ReadableArray into a ArrayList<Object>.\n     *\n     * @param array The ReadableArray to be converted.\n     * @return ArrayList<Object>\n     */\n    public static ArrayList<Object> toArrayList(ReadableArray array) {\n        if (array == null || array.size() == 0) {\n            return new ArrayList<>();\n        }\n        ArrayList<Object> arrayList = new ArrayList<>(array.size());\n        for (int i = 0, size = array.size(); i < size; i++) {\n            switch (array.getType(i)) {\n                case Null:\n                    arrayList.add(null);\n                    break;\n                case Boolean:\n                    arrayList.add(array.getBoolean(i));\n                    break;\n                case Number:\n                    arrayList.add(array.getDouble(i));\n                    break;\n                case String:\n                    arrayList.add(array.getString(i));\n                    break;\n                case Map:\n                    arrayList.add(toMap(array.getMap(i)));\n                    break;\n                case Array:\n                    arrayList.add(toArrayList(array.getArray(i)));\n                    break;\n                default:\n                    throw new IllegalArgumentException(\"Could not convert object at index \" + i + \".\");\n            }\n        }\n        return arrayList;\n    }\n\n    /* Private Helper Methods */\n\n    /**\n     * Converts a Object[] array into a WritableArray.\n     *\n     * @param array The Object[] array to be converted.\n     * @return WritableArray\n     */\n    private static WritableArray toWritableArray(final Object[] array) {\n        WritableArray writableArray = createArray();\n        if (array == null) {\n            return writableArray;\n        }\n\n        for (Object value : array) {\n            if (value == null) {\n                writableArray.pushNull();\n            }\n            if (value instanceof Boolean) {\n                writableArray.pushBoolean((Boolean) value);\n            }\n            if (value instanceof Double) {\n                writableArray.pushDouble((Double) value);\n            }\n            if (value instanceof Integer) {\n                writableArray.pushInt((Integer) value);\n            }\n            if (value instanceof String) {\n                writableArray.pushString((String) value);\n            }\n            if (value instanceof Map) {\n                Map<String, Object> valueMap = (Map<String, Object>) value;\n                writableArray.pushMap(toWritableMap(valueMap));\n            }\n            if (value != null && value.getClass().isArray()) {\n                if (value instanceof Object[]) {\n                    writableArray.pushArray(toWritableArray((Object[]) value));\n                }\n            }\n        }\n\n        return writableArray;\n    }\n\n    /**\n     * Converts JsonArray into WritableArray.\n     *\n     * @param jsonArray JsonArray instance.\n     * @return WritableArray instance\n     * @throws JSONException JsonException\n     */\n    private static WritableArray convertJsonToArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = new WritableNativeArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToArray((JSONArray) value));\n            }\n            checkPrimitiveValuesInArray(array, value);\n        }\n        return array;\n    }\n\n    /**\n     * Converts JsonObject into WritableMap instance.\n     *\n     * @param jsonObject JsonObject instance.\n     * @return WritableMap instance\n     * @throws JSONException JsonException\n     */\n    private static WritableMap convertJsonToMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = new WritableNativeMap();\n\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToArray((JSONArray) value));\n            }\n            checkPrimitiveValuesInMap(map, key, value);\n        }\n        return map;\n    }\n\n    /**\n     * Check for primitive values in the map.\n     *\n     * @param map WritableMap instance.\n     * @param key String key.\n     * @param value Object that will be saved into map as a value.\n     */\n    private static void checkPrimitiveValuesInMap(WritableMap map, String key, Object value) {\n        if (value instanceof Boolean) {\n            map.putBoolean(key, (Boolean) value);\n        } else if (value instanceof Integer) {\n            map.putInt(key, (Integer) value);\n        } else if (value instanceof Double) {\n            map.putDouble(key, (Double) value);\n        } else if (value instanceof String) {\n            map.putString(key, (String) value);\n        } else {\n            map.putString(key, value.toString());\n        }\n    }\n\n    /**\n     * Check for primitive values in the array.\n     *\n     * @param array WritableArray instance.\n     * @param value Object that will be saved into map as a value.\n     */\n    private static void checkPrimitiveValuesInArray(WritableArray array, Object value) {\n        if (value instanceof Boolean) {\n            array.pushBoolean((Boolean) value);\n        } else if (value instanceof Integer) {\n            array.pushInt((Integer) value);\n        } else if (value instanceof Double) {\n            array.pushDouble((Double) value);\n        } else if (value instanceof String) {\n            array.pushString((String) value);\n        } else {\n            array.pushString(value.toString());\n        }\n    }\n\n    /**\n     * toArray converts a ReadableArray into a Object[].\n     *\n     * @param readableArray The ReadableArray to be converted.\n     * @return Object[]\n     */\n    public static Object[] toArray(final ReadableArray readableArray) {\n        if (readableArray == null || readableArray.size() == 0) {\n            return new Object[0];\n        }\n\n        Object[] array = new Object[readableArray.size()];\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Null:\n                    array[i] = null;\n                    break;\n                case Boolean:\n                    array[i] = readableArray.getBoolean(i);\n                    break;\n                case Number:\n                    array[i] = readableArray.getDouble(i);\n                    break;\n                case String:\n                    array[i] = readableArray.getString(i);\n                    break;\n                case Map:\n                    array[i] = toMap(readableArray.getMap(i));\n                    break;\n                case Array:\n                    array[i] = toArray(readableArray.getArray(i));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return array;\n    }\n\n    public static List<String> toList(Object[] array) {\n        List<String> list = new ArrayList<String>();\n\n        for (int i = 0; i < array.length; i++) {\n            list.add(String.valueOf(array[i]));\n        }\n        return list;\n    }\n\n    /**\n     * Converts a ReadableMap into a HashMap.\n     *\n     * @param readableMap The ReadableMap to be converted.\n     * @return A HashMap containing the data that was in the ReadableMap.\n     */\n    public static Map<String, ?> toMap(final ReadableMap readableMap) {\n        Map<String, Object> map = new HashMap<>();\n        if (readableMap == null) {\n            return map;\n        }\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n\n            switch (type) {\n                case Null:\n                    map.put(key, null);\n                    break;\n                case Boolean:\n                    map.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    map.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    String valueStr = readableMap.getString(key);\n                    if (valueStr != null) {\n                        map.put(key, valueStr);\n                        break;\n                    }\n                    break;\n                case Map:\n                    map.put(key, MapUtils.toMap(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    map.put(key, toArray(readableMap.getArray(key)));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return map;\n    }\n\n    /**\n     * Converts a JSONArray into a WritableArray.\n     *\n     * @param jsonArray JSONArray instance.\n     * @return WritableArray\n     */\n    private static WritableArray toWritableArray(final JSONArray jsonArray) {\n        WritableArray array = new WritableNativeArray();\n        try {\n            for (int i = 0; i < jsonArray.length(); i++) {\n                Object value = jsonArray.get(i);\n                if (value instanceof JSONObject) {\n                    array.pushMap(toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    array.pushArray(toWritableArray((JSONArray) value));\n                }\n                checkPrimitiveValuesInArray(array, value);\n            }\n        } catch (Exception exception) {\n            ExceptionHandler.INSTANCE.fail(exception);\n        }\n        return array;\n    }\n\n    /**\n     * Converts a ReadableArray to a JSONArray.\n     *\n     * @param readableArray ReadableArray instance.\n     * @return JSONArray\n     */\n    private static JSONArray toJson(final ReadableArray readableArray) {\n        JSONArray array = new JSONArray();\n        if (readableArray == null) {\n            return array;\n        }\n        try {\n            for (int i = 0; i < readableArray.size(); i++) {\n                switch (readableArray.getType(i)) {\n                    case Boolean:\n                        array.put(readableArray.getBoolean(i));\n                        break;\n                    case Number:\n                        array.put(readableArray.getDouble(i));\n                        break;\n                    case String:\n                        array.put(readableArray.getString(i));\n                        break;\n                    case Map:\n                        array.put(toJson(readableArray.getMap(i)));\n                        break;\n                    case Array:\n                        array.put(toJson(readableArray.getArray(i)));\n                        break;\n                    default:\n                        break;\n                }\n            }\n        } catch (Exception exception) {\n            ExceptionHandler.INSTANCE.fail(exception);\n        }\n        return array;\n    }\n\n    /**\n     * Transform ReadableArray to List<String>\n     *\n     * @param array ReadableArray\n     * @return List<String>\n     */\n    public static List<String> toStringList(ReadableArray array) {\n        List<String> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(array.getString(i));\n            }\n        }\n        return list;\n    }\n\n    /**\n     * Creates writableMap instance with isSuccess status.\n     *\n     * @param isSuccess Boolean value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap createWritableMapWithSuccessStatus(final @Nullable Boolean isSuccess) {\n        WritableMap writableMap = new WritableNativeMap();\n        return addIsSuccess(writableMap, isSuccess);\n    }\n\n    /**\n     * Convert the WritableArray to a WritableMap with Success Status\n     *\n     * @param writableArray WritableArray Instance\n     * @param isSuccess Boolean value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap wrapWritableObjectWithSuccessStatus(final WritableArray writableArray,\n        final @Nullable Boolean isSuccess) {\n        WritableMap resultMap = createMap();\n        resultMap.putArray(RESULT_BODY_KEY, writableArray);\n        return addIsSuccess(resultMap, isSuccess);\n    }\n\n    /**\n     * Convert the WritableMap to a WritableMap with Success Status\n     *\n     * @param writableMap WritableMap Instance\n     * @param isSuccess Boolean value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap wrapWritableObjectWithSuccessStatus(final WritableMap writableMap,\n        final @Nullable Boolean isSuccess) {\n        WritableMap resultMap = createMap();\n        resultMap.putMap(RESULT_BODY_KEY, writableMap);\n        return addIsSuccess(resultMap, isSuccess);\n    }\n\n    /**\n     * Convert the boolean to a WritableMap with Success Status\n     *\n     * @param isSuccess Boolean value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap wrapWritableObjectWithSuccessStatus(final Boolean bool, final Boolean isSuccess) {\n        WritableMap resultMap = createMap();\n        resultMap.putBoolean(RESULT_BODY_KEY, bool);\n        return addIsSuccess(resultMap, isSuccess);\n    }\n\n    /**\n     * Creates a WritableMap from a SampleSet Object.\n     *\n     * @param sampleSet SampleSet Object\n     * @return WritableMap instance\n     */\n    public static WritableMap toWritableMap(final SampleSet sampleSet) {\n        WritableMap writableMap = createMap();\n        if (sampleSet != null) {\n            writableMap.putMap(\"dataCollector\", toWritableMap(sampleSet.getDataCollector()));\n            writableMap.putBoolean(\"isEmpty\", sampleSet.isEmpty());\n            WritableArray points = new WritableNativeArray();\n            for (SamplePoint samplePoint : sampleSet.getSamplePoints()) {\n                points.pushMap(toWritableMap(samplePoint));\n            }\n            writableMap.putArray(\"samplePoints\", points);\n        }\n\n        return writableMap;\n    }\n\n    /**\n     * Creates a WritableArray instance from ReadReply Object.\n     *\n     * @param readReply ReadReply Object\n     * @return WritableArray\n     */\n    public static WritableMap toWritableMap(final ReadReply readReply) {\n        WritableMap writableMap = new WritableNativeMap();\n\n        if (readReply != null) {\n            WritableArray setArray = new WritableNativeArray();\n            for (SampleSet set : readReply.getSampleSets()) {\n                setArray.pushMap(toWritableMap(set));\n            }\n            WritableArray groupArray = new WritableNativeArray();\n\n            for (Group group : readReply.getGroups()) {\n                groupArray.pushMap(toWritableMap(group));\n            }\n\n            writableMap.putArray(\"sampleSets\", setArray);\n            writableMap.putArray(\"groups\", groupArray);\n        }\n        return writableMap;\n    }\n\n    /**\n     * Creates a WritableMap instance from DataType Object\n     *\n     * @param dataType DataType Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final DataType dataType) {\n        WritableMap writableMap = createMap();\n        if (dataType != null) {\n            writableMap.putString(\"name\", dataType.getName());\n            WritableArray fieldsArray = new WritableNativeArray();\n            for (Field field : dataType.getFields()) {\n                fieldsArray.pushMap(toWritableMap(field));\n            }\n            writableMap.putArray(\"fields\", fieldsArray);\n        }\n        return writableMap;\n    }\n\n    /**\n     * Creates a WritableMap instance from Field Object\n     *\n     * @param field Field Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final Field field) {\n        WritableMap map = createMap();\n        if (field != null) {\n            map.putString(\"name\", field.getName());\n            map.putInt(\"format\", field.getFormat());\n            map.putBoolean(\"isOptional\", field.isOptional());\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableArray instance from Set of Scope Object\n     *\n     * @param scopeSet Scope<Set>\n     * @return WritableArray instance\n     */\n    public static WritableArray toWritableArray(Set<Scope> scopeSet) {\n        WritableArray array = createArray();\n        if (scopeSet != null) {\n            for (Scope scope : scopeSet) {\n                array.pushString(scope.getScopeUri());\n            }\n        }\n        return array;\n    }\n\n    /**\n     * Creates a WritableMap instance from DataCollector Object\n     *\n     * @param dataCollector DataCollector Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final DataCollector dataCollector) {\n        WritableMap map = createMap();\n        if (dataCollector != null) {\n            map.putString(\"dataCollectorName\", dataCollector.getDataCollectorName());\n            map.putString(\"packageName\", dataCollector.getPackageName());\n            map.putString(\"dataStreamId\", dataCollector.getDataStreamId());\n            map.putString(\"dataStreamName\", dataCollector.getDataStreamName());\n            map.putInt(\"dataGenerateType\", dataCollector.getDataGenerateType());\n            map.putString(\"deviceId\", dataCollector.getDeviceId());\n            map.putMap(\"dataType\", toWritableMap(dataCollector.getDataType()));\n            map.putMap(\"deviceInfo\", toWritableMap(dataCollector.getDeviceInfo()));\n            map.putBoolean(\"isLocalized\", dataCollector.isLocalized());\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from DeviceInfo Object\n     *\n     * @param deviceInfo DeviceInfo Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final DeviceInfo deviceInfo) {\n        WritableMap map = createMap();\n        if (deviceInfo != null) {\n            map.putString(\"deviceIdentifier\", deviceInfo.getDeviceIdentifier());\n            map.putInt(\"deviceType\", deviceInfo.getDeviceType());\n            map.putString(\"manufacturer\", deviceInfo.getManufacturer());\n            map.putString(\"modelName\", deviceInfo.getModelName());\n            map.putInt(\"platformType\", deviceInfo.getPlatformType());\n            map.putString(\"uuid\", deviceInfo.getUuid());\n            map.putBoolean(\"isFromBleDevice\", deviceInfo.isFromBleDevice());\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from SamplePoint Object\n     *\n     * @param samplePoint SamplePoint Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final SamplePoint samplePoint) {\n        WritableMap map = createMap();\n        if (samplePoint != null) {\n            map.putMap(\"fieldValues\", toWritableMap(samplePoint.getFieldValues()));\n            map.putString(\"startTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(samplePoint.getStartTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"endTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(samplePoint.getEndTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"samplingTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(samplePoint.getSamplingTime(TimeUnit.MILLISECONDS))));\n            map.putMap(\"dataCollector\", toWritableMap(samplePoint.getDataCollector()));\n        }\n\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from Group Object\n     *\n     * @param group Group Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final Group group) {\n        WritableMap map = createMap();\n        if (group != null) {\n            map.putString(\"startTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(group.getStartTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"endTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(group.getEndTime(TimeUnit.MILLISECONDS))));\n            map.putInt(\"groupType\", group.getGroupType());\n            WritableArray sampleSets = new WritableNativeArray();\n            for (SampleSet set : group.getSampleSets()) {\n                sampleSets.pushMap(toWritableMap(set));\n            }\n            map.putArray(\"sampleSets\", sampleSets);\n            map.putBoolean(\"hasMoreSample\", group.hasMoreSample());\n            map.putInt(\"activityType\", group.getActivityType());\n            map.putString(\"activity\", group.getActivity());\n            map.putMap(\"activityRecord\", toWritableMap(group.getActivityRecord()));\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from ActivityRecord Object\n     *\n     * @param activityRecord ActivityRecord Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final ActivityRecord activityRecord) {\n        WritableMap map = createMap();\n        if (activityRecord != null) {\n            map.putString(\"activityType\", activityRecord.getActivityType());\n            map.putString(\"appDetailsUrl\", activityRecord.getAppDetailsUrl());\n            map.putString(\"appDomainName\", activityRecord.getAppDomainName());\n            map.putString(\"appVersion\", activityRecord.getAppVersion());\n            map.putString(\"description\", activityRecord.getDesc());\n            map.putString(\"id\", activityRecord.getId());\n            map.putString(\"startTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(activityRecord.getStartTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"endTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(activityRecord.getEndTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"durationTime\", Utils.INSTANCE.getDurationStringFromMilliseconds(\n                activityRecord.getDurationTime(TimeUnit.MILLISECONDS)));\n            map.putString(\"name\", activityRecord.getName());\n            map.putString(\"packageName\", activityRecord.getPackageName());\n            map.putBoolean(\"hasDurationTime\", activityRecord.hasDurationTime());\n            map.putBoolean(\"isKeepGoing\", activityRecord.isKeepGoing());\n            map.putString(\"timeZone\", activityRecord.getTimeZone());\n            map.putMap(\"activitySummary\", toWritableMap(activityRecord.getActivitySummary()));\n            map.putMap(\"deviceInfo\", toWritableMap(activityRecord.getDeviceInfo()));\n        }\n        return map;\n    }\n\n    public static WritableMap toWritableMap(final HealthRecord healthRecord) {\n        WritableMap map = createMap();\n        if (healthRecord != null) {\n            map.putString(\"metaData\", healthRecord.getMetadata());\n            map.putString(\"startTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(healthRecord.getStartTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"endTime\",\n                Utils.INSTANCE.getDateFormat().format(new Date(healthRecord.getEndTime(TimeUnit.MILLISECONDS))));\n            map.putString(\"getHealthRecordId\", healthRecord.getHealthRecordId());\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from ActivitySummary Object\n     *\n     * @param activitySummary ActivitySummary Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final ActivitySummary activitySummary) {\n        WritableMap map = createMap();\n        if (activitySummary != null) {\n            map.putMap(\"paceSummary\", toWritableMap(activitySummary.getPaceSummary()));\n            WritableArray dataSummary = new WritableNativeArray();\n            for (SamplePoint point : activitySummary.getDataSummary()) {\n                dataSummary.pushMap(toWritableMap(point));\n            }\n            map.putArray(\"dataSummary\", dataSummary);\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableMap instance from PaceSummary Object\n     *\n     * @param paceSummary PaceSummary Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final PaceSummary paceSummary) {\n        WritableMap map = createMap();\n        if (paceSummary != null) {\n\n            map.putDouble(\"avgPace\", paceSummary.getAvgPace() != null ? paceSummary.getAvgPace() : 0);\n            map.putDouble(\"bestPace\", paceSummary.getBestPace() != null ? paceSummary.getBestPace() : 0);\n            map.putMap(\"paceMap\", toWritableMap(paceSummary.getPaceMap()));\n            map.putMap(\"britishPaceMap\", toWritableMap(paceSummary.getBritishPaceMap()));\n            map.putMap(\"partTimeMap\", toWritableMap(paceSummary.getPartTimeMap()));\n            map.putMap(\"britishPartTimeMap\", toWritableMap(paceSummary.getBritishPartTimeMap()));\n            map.putMap(\"sportHealthPaceMap\", toWritableMap(paceSummary.getSportHealthPaceMap()));\n        }\n        return map;\n    }\n\n    /**\n     * Creates a WritableArray instance from ActivityRecordReply Object\n     *\n     * @param recordReply ActivityRecordReply Object\n     * @return WritableArray\n     */\n    public static WritableArray toWritableArray(final ActivityRecordReply recordReply) {\n        WritableArray writableArray = new WritableNativeArray();\n        for (ActivityRecord record : recordReply.getActivityRecords()) {\n            WritableMap activityRecordMap = toWritableMap(record);\n            if (!recordReply.getSampleSet(record).isEmpty()) {\n                WritableArray sampleSetArray = new WritableNativeArray();\n                for (SampleSet set : recordReply.getSampleSet(record)) {\n                    sampleSetArray.pushMap(toWritableMap(set));\n                }\n                activityRecordMap.putArray(\"sampleSets\", sampleSetArray);\n            }\n            writableArray.pushMap(activityRecordMap);\n        }\n\n        return writableArray;\n    }\n\n    public static WritableArray toWritableArray(final HealthRecordReply recordReply) {\n        WritableArray writableArray = new WritableNativeArray();\n\n        for (HealthRecord healthRecord : recordReply.getHealthRecords()) {\n            WritableMap healthRecordMap = toWritableMap(healthRecord);\n            writableArray.pushMap(healthRecordMap);\n        }\n\n        return writableArray;\n    }\n\n    /**\n     * Creates a WritableArray instance from List<ActivityRecord> Object\n     *\n     * @param recordList List<ActivityRecord> Object\n     * @return WritableArray\n     */\n    public static WritableArray toWritableArray(final List<ActivityRecord> recordList) {\n        WritableArray writableArray = new WritableNativeArray();\n        for (ActivityRecord record : recordList) {\n            writableArray.pushMap(toWritableMap(record));\n        }\n        return writableArray;\n    }\n    public static WritableArray toWritableArraySampleSet(final List<SampleSet> recordList) {\n        WritableArray writableArray = new WritableNativeArray();\n        for (SampleSet record : recordList) {\n            writableArray.pushMap(toWritableMap(record));\n        }\n        return writableArray;\n    }\n\n    /**\n     * Creates a WritableMap instance from ScopeLangItem Object\n     *\n     * @param scopeLangItem ScopeLangItem Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final ScopeLangItem scopeLangItem) {\n        WritableMap writableMap = createMap();\n        if (scopeLangItem != null) {\n            writableMap.putString(\"appIconPath\", scopeLangItem.getAppIconPath());\n            writableMap.putString(\"appName\", scopeLangItem.getAppName());\n            writableMap.putString(\"authTime\", scopeLangItem.getAuthTime());\n            writableMap.putMap(\"url2Desc\", toWritableMap(scopeLangItem.getUrl2Desc()));\n        }\n        return writableMap;\n    }\n\n    /**\n     * Creates a WritableMap instance from HuaweiIdAuthResult Object\n     *\n     * @param authResult HuaweiIdAuthResult Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(HuaweiIdAuthResult authResult) {\n        WritableMap writableMap = createMap();\n        if (authResult != null) {\n            writableMap.putMap(\"huaweiId\", toWritableMap(authResult.getHuaweiId()));\n        }\n        return writableMap;\n    }\n\n    /**\n     * Creates a WritableMap instance from AuthHuaweiId Object\n     *\n     * @param huaweiId AuthHuaweiId Object\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(AuthHuaweiId huaweiId) {\n        WritableMap map = createMap();\n        if (huaweiId != null) {\n            map.putString(\"accessToken\", huaweiId.getAccessToken());\n            map.putString(\"authorizationCode\", huaweiId.getAuthorizationCode());\n            map.putString(\"avatarUriString\", huaweiId.getAvatarUriString());\n            map.putString(\"displayName\", huaweiId.getDisplayName());\n            map.putString(\"email\", huaweiId.getEmail());\n            map.putString(\"familyName\", huaweiId.getFamilyName());\n            map.putString(\"givenName\", huaweiId.getGivenName());\n            map.putString(\"idToken\", huaweiId.getIdToken());\n            map.putString(\"openId\", huaweiId.getOpenId());\n            map.putString(\"unionId\", huaweiId.getUnionId());\n            map.putArray(\"authorizedScopes\", toWritableArray(huaweiId.getAuthorizedScopes()));\n        }\n        return map;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/util/Utils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.util;\n\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.DATA_TYPE_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.END_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.INSERTION_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.SAMPLING_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.START_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.TIME_UNIT_KEY;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArrayList;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DATA_COLLECTOR_NAME_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DATA_GENERATE_TYPE_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DATA_STREAM_NAME_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DEVICE_ID_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DEVICE_INFO_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.IS_LOCALIZED_KEY;\n\nimport android.content.Intent;\n\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.DeviceInfo;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.rn.health.foundation.constant.Constants;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.Map;\nimport java.util.concurrent.TimeUnit;\n\nimport javax.annotation.Nullable;\n\n/**\n * All the util methods for internal {@link com.huawei.hms.rn.health} kits.\n *\n * @since v.5.0.1\n */\npublic enum Utils {\n    INSTANCE;\n\n    /**\n     * Date format which is used in the project\n     */\n    public synchronized SimpleDateFormat getDateFormat() {\n        return new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\", Locale.ENGLISH);\n    }\n\n    /**\n     * Returns whether key is in the ReadableMap instance or not.\n     *\n     * @param readableMap ReadableMap instance.\n     * @param key String key.\n     * @return Boolean\n     */\n    public synchronized Boolean hasKey(final ReadableMap readableMap, final String key) {\n        return readableMap.hasKey(key);\n    }\n\n    /**\n     * In case readableMap instance has requested key, returns the String Value,\n     * in case not, returns empty string.\n     *\n     * @param readableMap ReadableMap instance.\n     * @param key String key value.\n     * @return String\n     */\n    public synchronized String createEmptyStringIfNull(final ReadableMap readableMap, final String key) {\n        if (readableMap.hasKey(key)) {\n            return readableMap.getString(key);\n        }\n        return \"\";\n    }\n\n    /**\n     * In case String value is not pull, puts value into writableMap.\n     *\n     * @param writableMap WritableMap instance.\n     * @param value refers to added value.\n     * @param key String key value.\n     * @return String\n     */\n    public synchronized <T> WritableMap putKeyIfNotNull(final WritableMap writableMap, final @Nullable T value,\n        final String key) {\n        if (value != null) {\n            if (value instanceof String) {\n                writableMap.putString(key, (String) value);\n            } else if (value instanceof DataType) {\n                writableMap.putString(key, ((DataType) value).getName());\n            } else if (value instanceof DataCollector) {\n                writableMap.putString(key, value.toString());\n            } else if (value instanceof Date) {\n                writableMap.putString(key, getDateFormat().format((Date) value));\n            }\n        }\n        return writableMap;\n    }\n\n    /**\n     * In case readableMap instance has requested key, returns the Date Value,\n     * in case not, returns null.\n     *\n     * @param readableMap ReadableMap instance.\n     * @param key String key value.\n     * @return String\n     */\n    @Nullable\n    public synchronized Date toDate(final ReadableMap readableMap, final String key) {\n        if (hasKey(readableMap, key)) {\n            try {\n                return getDateFormat().parse(readableMap.getString(key));\n            } catch (ParseException error) {\n                ExceptionHandler.INSTANCE.fail(error);\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Returns String into {@link TimeUnit} Instance.\n     * In case it doesn't exist returns {@code TimeUnit.MILLISECONDS}\n     *\n     * @param timeUnitStr String value.\n     * @return {@link TimeUnit} instance.\n     */\n    public synchronized TimeUnit toTimeUnit(final String timeUnitStr) {\n        Constants.TimeUnitTypes variable = Constants.TimeUnitTypes.fromString(timeUnitStr);\n        return variable != null ? variable.getTimeUnitType() : TimeUnit.MILLISECONDS;\n    }\n\n    /**\n     * Returns ReadableMap instance into {@link TimeUnit} Instance.\n     * In case it doesn't exist returns {@code TimeUnit.MILLISECONDS}\n     *\n     * @param readableMap ReadableMap value.\n     * @return {@link TimeUnit} instance.\n     */\n    public synchronized TimeUnit toTimeUnit(final ReadableMap readableMap) {\n        if (hasKey(readableMap, TIME_UNIT_KEY)) {\n            return toTimeUnit(readableMap.getString(TIME_UNIT_KEY));\n        }\n\n        return TimeUnit.MILLISECONDS;\n    }\n\n    /**\n     * Returns Map<String, Object> instance into {@link TimeUnit} Instance.\n     * In case it doesn't exist returns {@code TimeUnit.MILLISECONDS}\n     *\n     * @param map Map<String, Object> value.\n     * @return {@link TimeUnit} instance.\n     */\n    public synchronized TimeUnit toTimeUnit(final Map<String, Object> map) {\n        if (map.containsKey(TIME_UNIT_KEY)) {\n            return toTimeUnit(String.valueOf(map.get(TIME_UNIT_KEY)));\n        }\n        return TimeUnit.MILLISECONDS;\n    }\n\n    /**\n     * Returns String into {@link DataType} Instance.\n     * In case it doesn't exist returns null.\n     *\n     * @param dataTypeStr String Value.\n     * @return {@link DataType} Instance\n     */\n    @Nullable\n    public synchronized DataType toDataType(final String dataTypeStr) {\n        Constants.DataTypeConstants variable = Constants.DataTypeConstants.fromString(dataTypeStr);\n        return variable != null ? variable.getDataType() : null;\n    }\n\n    /**\n     * Returns ReadableMap instance into {@link DataType} Instance.\n     * In case it doesn't exist returns null.\n     *\n     * @param readableMap ReadableMap instance.\n     * @return {@link DataType} Instance\n     */\n    @Nullable\n    public synchronized DataType toDataType(final ReadableMap readableMap) {\n        if (hasKey(readableMap, DATA_TYPE_KEY)) {\n            return toDataType(readableMap.getString(DATA_TYPE_KEY));\n        } else {\n            return null;\n        }\n    }\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n    \n    /**\n     * Returns Map<String, Object> instance into {@link DataType} Instance.\n     * In case it doesn't exist returns null.\n     *\n     * @param map Map<String, Object> instance.\n     * @return {@link DataType} Instance\n     */\n    @Nullable\n    public synchronized DataType toDataType(final Map<String, Object> map) {\n        if (map.containsKey(DATA_TYPE_KEY)) {\n            return toDataType(String.valueOf(map.get(DATA_TYPE_KEY)));\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Checks all the array variables of words, then returns if it contains all or not.\n     */\n    public synchronized boolean stringContainsItemFromList(String inputStr, String[] items) {\n        for (String item : items) {\n            if (inputStr.contains(item)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Converts DateMap into a Date. As requested startDate instance.\n     */\n    @Nullable\n    public synchronized Date toDate(final Constants.TimeConstants type, final @Nullable Map<String, Object> dateMap,\n        final @Nullable ReadableMap dateReadableMap, final Promise promise) {\n        Date date = null;\n        String key;\n        try {\n            switch (type) {\n                case START:\n                    key = START_TIME_KEY;\n                    break;\n                case END:\n                    key = END_TIME_KEY;\n                    break;\n                case SAMPLING:\n                    key = SAMPLING_TIME_KEY;\n                    break;\n                case INSERTION:\n                    key = INSERTION_TIME_KEY;\n                    break;\n                default:\n                    return null;\n            }\n            if (dateReadableMap != null && dateReadableMap.hasKey(key)) {\n                date = getDateFormat().parse(dateReadableMap.getString(key));\n            } else if (dateMap != null && dateMap.containsKey(key)) {\n                date = getDateFormat().parse(String.valueOf(dateMap.get(key)));\n            }\n            return date;\n        } catch (ParseException parseException) {\n            ExceptionHandler.INSTANCE.fail(parseException, promise);\n            return null;\n        }\n    }\n\n    /**\n     * Converts String FieldType value into {@link Field}.\n     */\n    public synchronized Field toFieldType(final String fieldTypeStr) {\n        Constants.FieldConstants variable = Constants.FieldConstants.fromString(fieldTypeStr);\n        return variable != null ? variable.getFieldType() : null;\n    }\n\n    public synchronized void fillServiceIntent(final Intent serviceIntent, ReadableMap map) {\n        if (map != null) {\n            serviceIntent.putExtra(\"title\", createEmptyStringIfNull(map, \"title\"));\n            serviceIntent.putExtra(\"text\", createEmptyStringIfNull(map, \"text\"));\n            serviceIntent.putExtra(\"subText\", createEmptyStringIfNull(map, \"subText\"));\n            serviceIntent.putExtra(\"ticker\", createEmptyStringIfNull(map, \"ticker\"));\n            serviceIntent.putExtra(\"chronometer\", map.hasKey(\"chronometer\") && map.getBoolean(\"chronometer\"));\n            if (map.hasKey(\"largeIcon\")) {\n                serviceIntent.putExtra(\"largeIcon\", map.getString(\"largeIcon\"));\n            }\n        }\n\n    }\n\n    /**\n     * Converts into {@link SampleSet} instance.\n     *\n     * @param sampleSetMapArr ReadableArray instance.\n     * @param dataCollector DataCollector instance.\n     * @param promise Promise resolved with fail status in case of missing parameters.\n     * @return SampleSet instance.\n     */\n    public synchronized SampleSet toSampleSet(final ReadableArray sampleSetMapArr, final DataCollector dataCollector,\n        final Promise promise) {\n        final SampleSet sampleSet = SampleSet.create(dataCollector);\n\n        List<Object> sampleSetList = toArrayList(sampleSetMapArr);\n        Map<?, ?> metaData = null;\n        for (Object samplePointObj : sampleSetList) {\n            Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n\n            // Build a DT_CONTINUOUS_STEPS_DELTA sampling point.\n            SamplePoint samplePoint = toSamplePoint(sampleSet.getDataCollector(), samplePointMap, promise);\n\n            if (((Map<?, ?>) samplePointObj).containsKey(\"metaData\")) {\n                metaData = (Map<?, ?>) ((Map<?, ?>) samplePointObj).get(\"metaData\");\n                String key = (String) metaData.get(\"metaDataKey\");\n                String value = (String) metaData.get(\"metaDataValue\");\n                samplePoint.addMetadata(key, value);\n            }\n\n            // Save a DT_CONTINUOUS_STEPS_DELTA sampling point to the sampling dataset.\n            // You can repeat steps 3 through 5 to add more sampling points to the sampling dataset.\n            sampleSet.addSample(samplePoint);\n        }\n        return sampleSet;\n    }\n\n    /**\n     * Converts into {@link SampleSet} instance.\n     *\n     * @param sampleSetMap ReadableMap instance.\n     * @param context ReactContext instance.\n     * @param promise Promise resolved with fail status in case of missing parameters.\n     * @return SampleSet instance.\n     */\n    public synchronized SampleSet toSampleSet(final ReadableMap sampleSetMap, ReactContext context,\n        final Promise promise) {\n\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(sampleSetMap.getMap(\"dataCollector\"), context);\n\n        final SampleSet.Builder builder = new SampleSet.Builder(dataCollector);\n\n        ReadableArray samplePointArray = sampleSetMap.getArray(\"samplePoints\");\n        List<Object> sampleSetList = toArrayList(samplePointArray);\n        Map<?, ?> metaData = null;\n        for (Object samplePointObj : sampleSetList) {\n            Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n\n            // Build a DT_CONTINUOUS_STEPS_DELTA sampling point.\n            SamplePoint samplePoint = toSamplePoint(dataCollector, samplePointMap, promise);\n\n            if (((Map<?, ?>) samplePointObj).containsKey(\"metaData\")) {\n                metaData = (Map<?, ?>) ((Map<?, ?>) samplePointObj).get(\"metaData\");\n                String key = (String) metaData.get(\"metaDataKey\");\n                String value = (String) metaData.get(\"metaDataValue\");\n                samplePoint.addMetadata(key, value);\n            }\n\n            // Save a DT_CONTINUOUS_STEPS_DELTA sampling point to the sampling dataset.\n            // You can repeat steps 3 through 5 to add more sampling points to the sampling dataset.\n            builder.addSample(samplePoint);\n        }\n        return builder.build();\n    }\n\n    public synchronized List<SampleSet> toSampleSetList(final ReadableArray sampleSetList, ReactContext context,\n        final Promise promise) {\n        List<SampleSet> sampleSets = new ArrayList<>();\n\n        for (int i = 0; i < sampleSetList.size(); i++) {\n            ReadableMap sampleSetMap = sampleSetList.getMap(i);\n            if (sampleSetMap != null) {\n                sampleSets.add(toSampleSet(sampleSetMap, context, promise));\n            }\n        }\n\n        return sampleSets;\n    }\n\n    public synchronized List<DataType> toDataTypeList(final ReadableArray dataTypeArray) {\n        List<DataType> dataTypes = new ArrayList<>();\n        if (dataTypeArray != null) {\n            for (int i = 0; i < dataTypeArray.size(); i++) {\n                dataTypes.add(toDataType(dataTypeArray.getMap(i).getString(\"dataType\")));\n            }\n        }\n\n        return dataTypes;\n    }\n\n    /**\n     * Converts into {@link SamplePoint} instance.\n     *\n     * @param dataCollector {@link DataCollector} instance.\n     * @param samplePointMap ReadableMap instance that will be converted into SamplePoint instance.\n     * @param promise Promise resolved with fail status in case of missing parameters.\n     * @return SamplePoint\n     */\n    public synchronized SamplePoint toSamplePoint(final DataCollector dataCollector,\n        final Map<String, Object> samplePointMap, final Promise promise) {\n        SamplePoint.Builder samplePoint = new SamplePoint.Builder(dataCollector);\n\n        Date startTime = Utils.INSTANCE.toDate(Constants.TimeConstants.START, samplePointMap, null, promise);\n        Date endTime = Utils.INSTANCE.toDate(Constants.TimeConstants.END, samplePointMap, null, promise);\n        Date samplingTime = Utils.INSTANCE.toDate(Constants.TimeConstants.SAMPLING, samplePointMap, null, promise);\n\n        if (startTime != null && endTime != null) {\n            samplePoint.setTimeInterval(startTime.getTime(), endTime.getTime(),\n                Utils.INSTANCE.toTimeUnit(samplePointMap));\n        }\n\n        if (samplePointMap.containsKey(Constants.SAMPLING_TIME_KEY) && samplingTime != null) {\n            samplePoint.setSamplingTime(samplingTime.getTime(), Utils.INSTANCE.toTimeUnit(samplePointMap));\n        }\n\n        Object[] fieldsList = (Object[]) samplePointMap.get(\"fields\");\n        if (fieldsList != null) {\n            for (Object obj : fieldsList) {\n                Map<String, Object> fieldMap = (Map<String, Object>) obj;\n                Field field = toFieldType(String.valueOf(fieldMap.get(\"fieldName\")));\n                if (field != null) {\n                    switch (field.getFormat()) {\n                        case Field.FORMAT_INT32:\n                            samplePoint.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).intValue());\n                            break;\n                        case Field.FORMAT_FLOAT:\n                            samplePoint.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).floatValue());\n                            break;\n                        case Field.FORMAT_STRING:\n                            samplePoint.setFieldValue(field, (String) fieldMap.get(\"fieldValue\"));\n                            break;\n                        case Field.FORMAT_MAP:\n                            Map<String, Double> doubleMap = (Map<String, Double>) fieldMap.get(\"fieldValue\");\n                            for (Map.Entry<String, Double> entry : doubleMap.entrySet()) {\n                                samplePoint.setFieldValue(entry.getKey(), entry.getValue());\n                            }\n                            break;\n                        case Field.FORMAT_LONG:\n                            samplePoint.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).longValue());\n                            break;\n                        default:\n                            break;\n                    }\n                }\n\n            }\n        }\n\n        return samplePoint.build();\n    }\n\n    public synchronized List<SamplePoint> toSamplePointList(final ReadableArray sampleSetList, ReactContext context,\n        Promise promise) {\n        List<SamplePoint> samplePoints = new ArrayList<>();\n\n        for (int i = 0; i < sampleSetList.size(); i++) {\n            ReadableMap sampleSetMap = sampleSetList.getMap(i);\n            if (sampleSetMap != null) {\n                DataCollector dataCollector = Utils.INSTANCE.toDataCollector(sampleSetMap.getMap(\"dataCollector\"),\n                    context);\n                ReadableArray samplePointArray = sampleSetMap.getArray(\"samplePoints\");\n                List<Object> sampleSetArrayList = toArrayList(samplePointArray);\n                for (Object samplePointObj : sampleSetArrayList) {\n                    Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n\n                    SamplePoint samplePoint = toSamplePoint(dataCollector, samplePointMap, promise);\n\n                    samplePoints.add(samplePoint);\n                }\n            }\n        }\n\n        return samplePoints;\n    }\n\n    /**\n     * Converts into {@link DataCollector} instance.\n     */\n    public synchronized DataCollector toDataCollector(final ReadableMap dataCollectorMap, ReactContext context) {\n        DataCollector.Builder builder = new DataCollector.Builder();\n        builder.setDataType(Utils.INSTANCE.toDataType(dataCollectorMap));\n        builder = new HmsDataCollectorBuilder(builder, dataCollectorMap).setDataStreamName()\n            .setDeviceId()\n            .setDataCollectorName()\n            .setDeviceInfo(context)\n            .setLocalized()\n            .setDataGenerateType()\n            .build();\n        return builder.setPackageName(context.getPackageName()).build();\n    }\n\n    /**\n     * @param millis Returns a formatted string that presents the milliseconds value\n     * @return formatted String\n     */\n    public String getDurationStringFromMilliseconds(long millis) {\n        long hours = TimeUnit.MILLISECONDS.toHours(millis);\n        long minutes = TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(hours);\n        long seconds = TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(minutes)\n            - TimeUnit.HOURS.toSeconds(hours);\n        long remainingMillis = millis - TimeUnit.SECONDS.toMillis(seconds) - TimeUnit.MINUTES.toMillis(minutes)\n            - TimeUnit.HOURS.toMillis(hours);\n        return String.format(Locale.ENGLISH, \"%02d:%02d:%02d.%03d\", hours, minutes, seconds, remainingMillis);\n    }\n\n    /* Private Declarations */\n\n    /**\n     * {@link HmsDataCollectorBuilder} is a helper inner class to convert ReadableMap instance\n     * into {@link DataCollector.Builder}.\n     */\n    private static class HmsDataCollectorBuilder {\n        private DataCollector.Builder builder;\n\n        private ReadableMap dataCollectorMap;\n\n        HmsDataCollectorBuilder(DataCollector.Builder builder, final ReadableMap dataCollectorMap) {\n            this.builder = builder;\n            this.dataCollectorMap = dataCollectorMap;\n        }\n\n        HmsDataCollectorBuilder setDataStreamName() {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, DATA_STREAM_NAME_KEY)) {\n                return this;\n            }\n            this.builder.setDataStreamName(dataCollectorMap.getString(DATA_STREAM_NAME_KEY));\n            return this;\n        }\n\n        HmsDataCollectorBuilder setDeviceId() {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, DEVICE_ID_KEY)) {\n                return this;\n            }\n            this.builder.setDeviceId(dataCollectorMap.getString(DEVICE_ID_KEY));\n            return this;\n        }\n\n        HmsDataCollectorBuilder setDataCollectorName() {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, DATA_COLLECTOR_NAME_KEY)) {\n                return this;\n            }\n            this.builder.setDataCollectorName(dataCollectorMap.getString(DATA_COLLECTOR_NAME_KEY));\n            return this;\n        }\n\n        HmsDataCollectorBuilder setDeviceInfo(ReactContext context) {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, DEVICE_INFO_KEY)) {\n                return this;\n            }\n            this.builder.setDeviceInfo(DeviceInfo.getLocalDevice(context));\n            return this;\n        }\n\n        HmsDataCollectorBuilder setLocalized() {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, IS_LOCALIZED_KEY)) {\n                return this;\n            }\n            this.builder.setLocalized(dataCollectorMap.getBoolean(IS_LOCALIZED_KEY));\n            return this;\n        }\n\n        HmsDataCollectorBuilder setDataGenerateType() {\n            if (!Utils.INSTANCE.hasKey(dataCollectorMap, DATA_GENERATE_TYPE_KEY)) {\n                return this;\n            }\n            this.builder.setDataGenerateType(dataCollectorMap.getInt(DATA_GENERATE_TYPE_KEY));\n            return this;\n        }\n\n        DataCollector.Builder build() {\n            return builder;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/view/BaseController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.view;\n\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DATA_CONSTANTS_MAP;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\n\nimport java.util.Map;\n\n/**\n * BaseController of all the {@link com.huawei.hms.rn.health} Module implementations.\n *\n * @since v.5.0.1\n */\npublic class BaseController extends ReactContextBaseJavaModule {\n    private String name;\n\n    public BaseController(String name, @NonNull ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.name = name;\n    }\n\n    /**\n     * \"com.huawei.hms.rn.health\" package class names.\n     *\n     * @return class name\n     */\n    @NonNull\n    @Override\n    public String getName() {\n        return name;\n    }\n\n    /**\n     * getConstants exposes the constant values\n     * to RN Side.\n     *\n     * @return constants\n     */\n    @Override\n    public Map<String, Object> getConstants() {\n        return DATA_CONSTANTS_MAP;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/foundation/view/BaseProtocol.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.foundation.view;\n\nimport android.app.Activity;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.lang.ref.WeakReference;\n\n/**\n * BaseProtocol of all the {@link com.huawei.hms.rn.health} Module implementations.\n *\n * @since v.5.0.1\n */\npublic interface BaseProtocol {\n    /**\n     * View protocol that represents the current Activity.\n     */\n    enum View {\n        INSTANCE;\n\n        /**\n         * Represents the current activity.\n         *\n         * @return Activity instance.\n         */\n        public static synchronized Activity getActivity(Activity activity) {\n            return new WeakReference<>(activity).get();\n        }\n    }\n\n    /**\n     * Event protocol that sends event to JS side.\n     */\n    interface Event {\n        /**\n         * Sends event to RN Side.\n         *\n         * @param reactContext ReactContext instance.\n         * @param eventName Event name that will be available via modules.\n         * @param params Event params.\n         */\n        void sendEvent(ReactContext reactContext, @Nullable String eventName, @Nullable WritableMap params);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/HmsHealthAccount.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMap;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.wrapWritableObjectWithSuccessStatus;\nimport static com.huawei.hms.rn.health.foundation.view.BaseProtocol.View.getActivity;\nimport static com.huawei.hms.rn.health.kits.account.util.AccountConstants.CONSTANTS_MAP;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.health.foundation.util.ExceptionHandler;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.kits.account.listener.AccountResultListener;\nimport com.huawei.hms.rn.health.kits.account.util.AccountConstants;\nimport com.huawei.hms.rn.health.kits.account.util.AccountUtils;\nimport com.huawei.hms.rn.health.kits.account.viewmodel.AccountService;\nimport com.huawei.hms.rn.health.kits.account.viewmodel.AccountViewModel;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.hwid.HuaweiIdAuthAPIManager;\nimport com.huawei.hms.support.hwid.HuaweiIdAuthManager;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParams;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParamsHelper;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\nimport com.huawei.hms.support.hwid.result.HuaweiIdAuthResult;\nimport com.huawei.hms.support.hwid.service.HuaweiIdAuthService;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * {@link HmsHealthAccount} class is a module to do signIn in RN Side.\n *\n * @since v.5.0.1\n */\npublic class HmsHealthAccount extends ReactContextBaseJavaModule {\n\n    private static final String TAG = HmsHealthAccount.class.getSimpleName();\n\n    // Internal signInPickerPromise that will be used in activityEventListener\n    private Promise signInPickerPromise;\n\n    /**\n     * activityEventListener listens for signing in method, obtain the authorization result and informs via Promise.\n     * In case of failure informs RN Side via Promise.\n     */\n    private final ActivityEventListener activityEventListener = new ActivityEventListener() {\n        @Override\n        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n            Log.i(TAG, \"onActivityResult, requestCode=\" + requestCode + \", resultCode=\" + resultCode);\n            if (signInPickerPromise != null) {\n                if (requestCode == AccountConstants.RequestTypes.SIGN_IN.getValue()) {\n                    if (intent == null) {\n                        Log.e(TAG, \"intent is null\");\n                        return;\n                    }\n                    // Obtain the authorization response from the intent.\n                    HuaweiIdAuthResult result = HuaweiIdAuthAPIManager.HuaweiIdAuthAPIService.parseHuaweiIdFromIntent(\n                        intent);\n                    if (result != null) {\n                        Log.d(TAG,\n                            \"handleSignInResult status = \" + result.getStatus() + \", result = \" + result.isSuccess());\n                        if (result.isSuccess()) {\n                            Log.d(TAG, \"sign in is success\");\n                            // Obtain the authorization result.\n                            HuaweiIdAuthResult authResult\n                                = HuaweiIdAuthAPIManager.HuaweiIdAuthAPIService.parseHuaweiIdFromIntent(intent);\n\n                            WritableMap authResultMap = toWritableMap(authResult.getHuaweiId());\n                            signInPickerPromise.resolve(wrapWritableObjectWithSuccessStatus(authResultMap, true));\n                            HMSLogger.getInstance(getReactApplicationContext())\n                                .sendSingleEvent(\"HmsHealthAccount.signIn\");\n\n                        } else {\n                            ExceptionHandler.INSTANCE.fail(signInPickerPromise, result);\n                        }\n                    } else {\n                        ExceptionHandler.INSTANCE.fail(signInPickerPromise);\n                    }\n\n                }\n            }\n        }\n\n        @Override\n        public void onNewIntent(Intent intent) {\n            Log.d(TAG, \"onNewIntent\");\n        }\n    };\n\n    /**\n     * Initialization\n     */\n    public HmsHealthAccount(ReactApplicationContext reactContext) {\n        super(reactContext);\n        // Internal context object\n        reactContext.addActivityEventListener(activityEventListener);\n    }\n\n    /**\n     * {@link HmsHealthAccount} class name.\n     *\n     * @return class name\n     */\n    @NonNull\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    /**\n     * getConstants exposes the constant values\n     * to RN Side.\n     *\n     * @return constants\n     */\n    @Override\n    public Map<String, Object> getConstants() {\n        return CONSTANTS_MAP;\n    }\n\n    /**\n     * Sign-in and authorization method.\n     * The authorization screen will display up if authorization has not granted by the current account.\n     *\n     * @param promise In the success scenario, {@link AuthHuaweiId} instance is returned , or {@link ApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void signIn(final ReadableArray scopeListReadableArr, final Promise promise) {\n        HMSLogger.getInstance(getReactApplicationContext()).startMethodExecutionTimer(\"HmsHealthAccount.signIn\");\n        AccountService loginViewModel = new AccountViewModel();\n        Log.i(TAG, \"begin sign in\");\n        final List<Scope> scopeList = AccountUtils.INSTANCE.toScopeList(scopeListReadableArr);\n\n        /* Configure authorization parameters. */\n        final HuaweiIdAuthParamsHelper authParamsHelper = AccountUtils.INSTANCE.getAuthParamsHelper();\n        final HuaweiIdAuthParams authParams = AccountUtils.INSTANCE.getAuthParams(authParamsHelper, scopeList);\n\n        /* Initialize the HuaweiIdAuthService object. */\n        final HuaweiIdAuthService authService = HuaweiIdAuthManager.getService(getActivity(getCurrentActivity()),\n            authParams);\n\n        loginViewModel.signIn(authService, new AccountResultListener() {\n            @Override\n            public void onSilentSignInFail() {\n                Log.i(TAG, \"begin sign in by intent\");\n                Intent signInIntent = authService.getSignInIntent();\n                signInPickerPromise = promise;\n                getActivity(getCurrentActivity()).startActivityForResult(signInIntent,\n                    AccountConstants.RequestTypes.SIGN_IN.getValue());\n            }\n\n            @Override\n            public void onSuccess(AuthHuaweiId result) {\n                promise.resolve(wrapWritableObjectWithSuccessStatus(toWritableMap(result), true));\n                HMSLogger.getInstance(getReactApplicationContext()).sendSingleEvent(\"HmsHealthAccount.signIn\");\n            }\n\n            @Override\n            public void onFail(Exception exception) {\n                ExceptionHandler.INSTANCE.fail(exception, promise);\n                HMSLogger.getInstance(getReactApplicationContext()).sendSingleEvent(\"HmsHealthAccount.signIn\");\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/listener/AccountResultListener.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account.listener;\n\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\n\n/**\n * LoginResultListener returns {@link AuthHuaweiId} instance.\n *\n * @since v.5.0.1\n */\npublic interface AccountResultListener extends ResultListener<AuthHuaweiId> {\n    /**\n     * Presents the silent sign in scenario.\n     */\n    void onSilentSignInFail();\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/util/AccountConstants.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account.util;\n\nimport com.huawei.hms.rn.health.kits.account.HmsHealthAccount;\n\nimport java.util.Collections;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * {@link HmsHealthAccount} Constant Values.\n *\n * @since v.5.0.1\n */\npublic interface AccountConstants {\n    /**\n     * {@link HmsHealthAccount} Activity Request types.\n     */\n    enum RequestTypes {\n        SIGN_IN(1022);\n\n        private final int value;\n\n        RequestTypes(int value) {\n            this.value = value;\n        }\n\n        public int getValue() {\n            return value;\n        }\n    }\n\n    /**\n     * {@link HmsHealthAccount} constants.\n     */\n    enum AccConstants {\n        MODULE_NAME(\"HmsHealthAccount\"),\n\n        /* Scopes */\n        HEALTHKIT_HEIGHTWEIGHT_READ(\"https://www.huawei.com/healthkit/heightweight.read\"),\n        HEALTHKIT_HEIGHTWEIGHT_WRITE(\"https://www.huawei.com/healthkit/heightweight.write\"),\n        HEALTHKIT_STEP_READ(\"https://www.huawei.com/healthkit/step.read\"),\n        HEALTHKIT_STEP_WRITE(\"https://www.huawei.com/healthkit/step.write\"),\n        HEALTHKIT_LOCATION_READ(\"https://www.huawei.com/healthkit/location.read\"),\n        HEALTHKIT_LOCATION_WRITE(\"https://www.huawei.com/healthkit/location.write\"),\n        HEALTHKIT_HEARTRATE_READ(\"https://www.huawei.com/healthkit/heartrate.read\"),\n        HEALTHKIT_HEARTRATE_WRITE(\"https://www.huawei.com/healthkit/heartrate.write\"),\n        HEALTHKIT_BLOODGLUCOSE_READ(\"https://www.huawei.com/healthkit/bloodglucose.read\"),\n        HEALTHKIT_BLOODGLUCOSE_WRITE(\"https://www.huawei.com/healthkit/bloodglucose.write\"),\n        HEALTHKIT_DISTANCE_READ(\"https://www.huawei.com/healthkit/distance.read\"),\n        HEALTHKIT_DISTANCE_WRITE(\"https://www.huawei.com/healthkit/distance.write\"),\n        HEALTHKIT_SPEED_READ(\"https://www.huawei.com/healthkit/speed.read\"),\n        HEALTHKIT_SPEED_WRITE(\"https://www.huawei.com/healthkit/speed.write\"),\n        HEALTHKIT_CALORIES_READ(\"https://www.huawei.com/healthkit/calories.read\"),\n        HEALTHKIT_CALORIES_WRITE(\"https://www.huawei.com/healthkit/calories.write\"),\n        HEALTHKIT_PULMONARY_READ(\"https://www.huawei.com/healthkit/pulmonary.read\"),\n        HEALTHKIT_PULMONARY_WRITE(\"https://www.huawei.com/healthkit/pulmonary.write\"),\n        HEALTHKIT_STRENGTH_READ(\"https://www.huawei.com/healthkit/strength.read\"),\n        HEALTHKIT_STRENGTH_WRITE(\"https://www.huawei.com/healthkit/strength.write\"),\n        HEALTHKIT_ACTIVITY_READ(\"https://www.huawei.com/healthkit/activity.read\"),\n        HEALTHKIT_ACTIVITY_WRITE(\"https://www.huawei.com/healthkit/activity.write\"),\n        HEALTHKIT_BODYFAT_READ(\"https://www.huawei.com/healthkit/bodyfat.read\"),\n        HEALTHKIT_BODYFAT_WRITE(\"https://www.huawei.com/healthkit/bodyfat.write\"),\n        HEALTHKIT_SLEEP_READ(\"https://www.huawei.com/healthkit/sleep.read\"),\n        HEALTHKIT_SLEEP_WRITE(\"https://www.huawei.com/healthkit/sleep.write\"),\n        HEALTHKIT_NUTRITION_READ(\"https://www.huawei.com/healthkit/nutrition.read\"),\n        HEALTHKIT_NUTRITION_WRITE(\"https://www.huawei.com/healthkit/nutrition.write\"),\n        HEALTHKIT_BLOODPRESSURE_READ(\"https://www.huawei.com/healthkit/bloodpressure.read\"),\n        HEALTHKIT_BLOODPRESSURE_WRITE(\"https://www.huawei.com/healthkit/bloodpressure.write\"),\n        HEALTHKIT_OXYGENSTATURATION_READ(\"https://www.huawei.com/healthkit/oxygensaturation.read\"),\n        HEALTHKIT_OXYGENSTATURATION_WRITE(\"https://www.huawei.com/healthkit/oxygensaturation.write\"),\n        HEALTHKIT_BODYTEMPERATURE_READ(\"https://www.huawei.com/healthkit/bodytemperature.read\"),\n        HEALTHKIT_BODYTEMPERATURE_WRITE(\"https://www.huawei.com/healthkit/bodytemperature.write\"),\n        HEALTHKIT_REPRODUCTIVE_READ(\"https://www.huawei.com/healthkit/reproductive.read\"),\n        HEALTHKIT_REPRODUCTIVE_WRITE(\"https://www.huawei.com/healthkit/reproductive.write\"),\n        HEALTHKIT_ACTIVITY_RECORD_READ(\"https://www.huawei.com/healthkit/activityrecord.read\"),\n        HEALTHKIT_ACTIVITY_RECORD_WRITE(\"https://www.huawei.com/healthkit/activityrecord.write\"),\n        HEALTHKIT_STRESS_READ(\"https://www.huawei.com/healthkit/stress.read\"),\n        HEALTHKIT_STRESS_WRITE(\"https://www.huawei.com/healthkit/stress.write\"),\n        HEALTHKIT_HEARTHEALTH_READ(\"https://www.huawei.com/healthkit/hearthealth.read\"),\n        HEALTHKIT_HEARTHEALTH_WRITE(\"https://www.huawei.com/healthkit/hearthealth.write\"),\n        HEALTHKIT_HISTORYDATA_OPEN_WEEK(\"https://www.huawei.com/healthkit/historydata.open.week\"),\n        HEALTHKIT_HISTORYDATA_OPEN_MONTH(\"https://www.huawei.com/healthkit/historydata.open.month\"),\n        HEALTHKIT_HISTORYDATA_OPEN_YEAR(\"https://www.huawei.com/healthkit/historydata.open.year\");\n\n        private final String value;\n\n        AccConstants(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    /**\n     * Whole base constants variables as Map\n     **/\n    Map<String, Object> CONSTANTS_MAP = initMap();\n\n    /**\n     * Initializes Account Constants Map.\n     *\n     * @return Constants map\n     */\n    static Map<String, Object> initMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n        for (AccConstants variable : EnumSet.allOf(AccConstants.class)) {\n            String key = variable.name();\n            String value = variable.getValue();\n            constantMap.put(key, value);\n        }\n        return Collections.unmodifiableMap(constantMap);\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/util/AccountUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account.util;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArrayList;\n\nimport com.huawei.hms.rn.health.kits.account.HmsHealthAccount;\nimport com.huawei.hms.support.api.entity.auth.Scope;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParams;\nimport com.huawei.hms.support.hwid.request.HuaweiIdAuthParamsHelper;\n\nimport com.facebook.react.bridge.ReadableArray;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * {@link AccountUtils} exposes a set of helper methods for working with\n * {@link HmsHealthAccount}.\n *\n * @since v.5.0.1\n */\npublic enum AccountUtils {\n    INSTANCE;\n\n    /**\n     * Converts ReadableArray into {@link List<Scope>} instance.\n     *\n     * @param readableArray ReadableArray instance that will be referred to {@code List<Scope>}\n     * @return List<Scope>\n     */\n    public synchronized List<Scope> toScopeList(final ReadableArray readableArray) {\n        List<Object> scopeList = toArrayList(readableArray);\n        List<Scope> scopes = new ArrayList<>();\n        for (Object scope : scopeList) {\n            scopes.add(new Scope((String) scope));\n        }\n        return scopes;\n    }\n\n    /**\n     * Creates and returns {@link HuaweiIdAuthParamsHelper} instance.\n     *\n     * @return {@link HuaweiIdAuthParamsHelper} instance\n     */\n    public synchronized HuaweiIdAuthParamsHelper getAuthParamsHelper() {\n        return new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM);\n    }\n\n    /**\n     * Creates and returns {@link HuaweiIdAuthParams} instance.\n     *\n     * @return {@link HuaweiIdAuthParams} instance\n     */\n    public synchronized HuaweiIdAuthParams getAuthParams(final HuaweiIdAuthParamsHelper authParamsHelper,\n        final List<Scope> scopeList) {\n        return authParamsHelper.setIdToken().setAccessToken().setScopeList(scopeList).createParams();\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/viewmodel/AccountService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account.viewmodel;\n\nimport com.huawei.hms.rn.health.kits.account.listener.AccountResultListener;\nimport com.huawei.hms.support.hwid.service.HuaweiIdAuthService;\n\n/**\n * Blueprint of {@link AccountViewModel}.\n *\n * @since v.5.0.1\n */\npublic interface AccountService {\n    /**\n     * Blueprint of signIn function\n     *\n     * @param authService HuaweiIdAuthService instance.\n     * @param accountResultListener LoginResultListener instance.\n     */\n    void signIn(final HuaweiIdAuthService authService, final AccountResultListener accountResultListener);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/account/viewmodel/AccountViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.account.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.health.kits.account.listener.AccountResultListener;\nimport com.huawei.hms.support.hwid.result.AuthHuaweiId;\nimport com.huawei.hms.support.hwid.service.HuaweiIdAuthService;\n\n/**\n * The authorization and sign-in API must be called before each time the health module is used.\n *\n * @since v.5.0.1\n */\npublic class AccountViewModel implements AccountService {\n\n    private static final String TAG = AccountService.class.getSimpleName();\n\n    /**\n     * Silent sign-in.\n     * </br>\n     * If authorization has been granted by the current account,\n     * the authorization screen will not display.\n     *\n     * @param accountResultListener returns LoginResultListener instance.\n     */\n    @Override\n    public void signIn(final HuaweiIdAuthService authService, final AccountResultListener accountResultListener) {\n        Log.i(TAG, \"call signIn\");\n        Task<AuthHuaweiId> authHuaweiIdTask = authService.silentSignIn();\n        authHuaweiIdTask.addOnSuccessListener(huaweiId -> {\n            /* The silent sign-in is successful. */\n            Log.i(TAG, \"silentSignIn success\");\n            accountResultListener.onSuccess(huaweiId);\n        }).addOnFailureListener(exception -> {\n            if (exception instanceof ApiException) {\n                ApiException apiException = (ApiException) exception;\n                Log.i(TAG, \"sign failed status:\" + apiException.getStatusCode());\n                /* The silent sign-in fails. */\n                /* This indicates that the authorization has not been granted by the current account. */\n                accountResultListener.onSilentSignInFail();\n            } else {\n                accountResultListener.onFail(exception);\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/HmsActivityRecordsController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords;\n\nimport static com.huawei.hms.rn.health.kits.activityrecords.util.ActivityRecordsConstants.ACTIVITY_CONSTANTS_MAP;\n\nimport android.content.ComponentName;\nimport android.content.Intent;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.hihealth.ActivityRecordsController;\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.HiHealthStatusCodes;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.ActivityRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.ActivityRecordReadOptions;\nimport com.huawei.hms.hihealth.options.OnActivityRecordListener;\nimport com.huawei.hms.hihealth.result.ActivityRecordReply;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.foundation.view.BaseProtocol;\nimport com.huawei.hms.rn.health.kits.activityrecords.util.ActivityRecordsUtils;\nimport com.huawei.hms.rn.health.kits.activityrecords.viewmodel.ActivityRecordsService;\nimport com.huawei.hms.rn.health.kits.activityrecords.viewmodel.ActivityRecordsViewModel;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\n/**\n * {@link HmsActivityRecordsController} class is a module that refers to {@link ActivityRecordsController}\n * <p>\n * Create ActivityRecords for ongoing workout activities.\n * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n *\n * <p>\n * Note: When the user initiates a workout activity, use the {@code ActivityRecordsController.beginActivityRecord} method to start an ActivityRecord.\n * When the user stops a workout activity, use the {@code ActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n * </p>\n *\n * @since v.5.0.1\n */\npublic class HmsActivityRecordsController extends ReactContextBaseJavaModule implements BaseProtocol.Event {\n\n    private static final String TAG = HmsActivityRecordsController.class.getSimpleName();\n\n    // Internal context object\n    public static ReactContext reactContext;\n\n    // ActivityRecordsController for managing activity records\n    private ActivityRecordsController activityRecordsController;\n\n    // DataController for deleting activity records\n    private DataController dataController;\n\n    // ViewModel instance to reach ActivityRecordsController tasks\n    private final ActivityRecordsService activityRecordsViewModel;\n\n    private final HMSLogger logger;\n\n    /**\n     * Initialization\n     */\n    public HmsActivityRecordsController(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        this.activityRecordsViewModel = new ActivityRecordsViewModel();\n        logger = HMSLogger.getInstance(reactContext);\n        initActivityRecordsController();\n    }\n\n    /**\n     * Creating ActivityRecords in Real Time\n     * <p>\n     * Create ActivityRecords for ongoing workout activities.\n     * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n     * <p>\n     * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n     * </p>\n     *\n     * @param readableMap ReadableMap instance that refers to {@link ActivityRecord} instance.\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void beginActivityRecord(final ReadableMap readableMap, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.beginActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n        checkActivityRecordsController();\n        // Build an ActivityRecord object\n        ActivityRecord activityRecord = ActivityRecordsUtils.INSTANCE.toActivityRecord(readableMap, reactContext,\n            promise);\n\n        // Calling beginActivity.\n        activityRecordsViewModel.startActivityRecord(this.activityRecordsController, activityRecord,\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Starts an activity record that can run in the background and allows it to continue for 10 minutes by default.\n     * <p>\n     * Create ActivityRecords for ongoing workout activities.\n     * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n     * <p>\n     * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n     * </p>\n     *\n     * @param readableMap ReadableMap instance that refers to {@link ActivityRecord} instance.\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void beginBackgroundActivityRecord(final ReadableMap readableMap, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.beginBackgroundActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n        checkActivityRecordsController();\n        // Build an ActivityRecord object\n        ActivityRecord activityRecord = ActivityRecordsUtils.INSTANCE.toActivityRecord(readableMap, reactContext,\n            promise);\n\n        ComponentName componentName = new ComponentName(reactContext, HmsActivityRecordsController.class);\n\n        OnActivityRecordListener activityRecordListener = new OnActivityRecordListener() {\n            @Override\n            public void onStatusChange(int statusCode) {\n\n                if (HiHealthStatusCodes.WORK_OUT_TIME_OUT == statusCode\n                    || HiHealthStatusCodes.WORK_OUT_BE_OCCUPIED == statusCode) {\n                    reactContext.stopService(getForegroundServiceIntent());\n                }\n            }\n        };\n\n        // Calling beginActivity.\n        activityRecordsViewModel.startBackgroundActivityRecord(this.activityRecordsController, activityRecord,\n            activityRecordListener, componentName, reactContext, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Applies for an activity record to continue in the background for another 10 minutes.\n     *\n     * @param activityRecordId Unique ID of an activity record.\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void continueActivityRecord(final String activityRecordId, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.continueActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n        checkActivityRecordsController();\n\n        // Calling continueActivityRecord.\n        activityRecordsViewModel.continueActivityRecord(this.activityRecordsController, activityRecordId,\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Stop the ActivityRecord\n     * <p>\n     * The app uses the {@code HmsActivityRecordsController.endActivityRecord} method to stop a specified ActivityRecord.\n     * <p>\n     * Note: When the user stops a workout activity, use the {@code HmsActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordId the ID string of {@link ActivityRecord} or null\n     * @param promise In the success scenario, {@link List<ActivityRecord>} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void endActivityRecord(final @Nullable String activityRecordId, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.endActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        // Call the related method of ActivityRecordsController to stop activity records.\n        // The input parameter can be the ID string of ActivityRecord or null\n        // Stop an activity record of the current app by specifying the ID string as the input parameter\n        // Stop activity records of the current app by specifying null as the input parameter\n        // Return the list of activity records that have stopped\n        activityRecordsViewModel.endActivityRecord(this.activityRecordsController, activityRecordId,\n            new ResultHelper<>(List.class, promise, logger, logName));\n    }\n\n    @ReactMethod\n    public void endBackgroundActivityRecord(final @Nullable String activityRecordId, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.endBackgroundActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        reactContext.stopService(getForegroundServiceIntent());\n\n        // Call the related method of ActivityRecordsController to stop activity records.\n        // The input parameter can be the ID string of ActivityRecord or null\n        // Stop an activity record of the current app by specifying the ID string as the input parameter\n        // Stop activity records of the current app by specifying null as the input parameter\n        // Return the list of activity records that have stopped\n        activityRecordsViewModel.endActivityRecord(this.activityRecordsController, activityRecordId,\n            new ResultHelper<>(List.class, promise, logger, logName));\n    }\n\n    /**\n     * Stop activity records of the current app by calling {@code HmsActivityRecordsController.endAllActivityRecords}.\n     * <p>\n     * The app uses the {@code HmsActivityRecordsController.endAllActivityRecords} method to stop all the activity records.\n     * <p>\n     * Note: When ending all activity records, use the {@code HmsActivityRecordsController.endAllActivityRecords} method to stop an ActivityRecord.\n     * </p>\n     *\n     * @param promise In the success scenario, {@link List<ActivityRecord>} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void endAllActivityRecords(final Promise promise) {\n        String logName = \"HmsActivityRecordsController.endAllActivityRecords\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        // Call the related method of ActivityRecordsController to stop activity records.\n        // The input parameter can be the ID string of ActivityRecord or null\n        // Stop an activity record of the current app by specifying the ID string as the input parameter\n        // Stop activity records of the current app by specifying null as the input parameter\n        activityRecordsViewModel.endActivityRecord(this.activityRecordsController, null,\n            new ResultHelper<>(List.class, promise, logger, logName));\n    }\n\n    /**\n     * Inserting ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordReadableMap ReadableMap instance that refers to {@link ActivityRecord} instance.\n     * @param sampleSetMap ReadableMap instance that refers to {@link SampleSet} instance.\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void addActivityRecord(final ReadableMap activityRecordReadableMap, final ReadableMap sampleSetMap,\n        final Promise promise) {\n        String logName = \"HmsActivityRecordsController.addActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        // Build the time range of the request object: start time and end time\n        // Build the activity record request object\n        ActivityRecord activityRecord = ActivityRecordsUtils.INSTANCE.toActivityRecord(activityRecordReadableMap,\n            reactContext, promise);\n\n        // Build the sampling sampleSet based on the dataCollector\n        // Build the data type and add it to the sampling dataSet\n        SampleSet sampleSet = Utils.INSTANCE.toSampleSet(sampleSetMap, reactContext, promise);\n\n        activityRecordsViewModel.addActivityRecord(this.activityRecordsController, activityRecord, sampleSet,\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Inserting ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordReadableMap ReadableMap instance that refers to {@link ActivityRecord} instance.\n     * @param sampleSetMapArr ReadableMap instance that refers to {@link SampleSet} instance.\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void addMultipleActivityRecords(final ReadableMap activityRecordReadableMap,\n        final ReadableArray sampleSetMapArr, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.addMultipleActivityRecords\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        // Build the time range of the request object: start time and end time\n        // Build the activity record request object\n        ActivityRecord activityRecord = ActivityRecordsUtils.INSTANCE.toActivityRecord(activityRecordReadableMap,\n            reactContext, promise);\n\n        // Build the sampling sampleSet based on the dataCollector\n        // Build the data type and add it to the sampling dataSet\n        List<SampleSet> sampleSetList = Utils.INSTANCE.toSampleSetList(sampleSetMapArr, reactContext, promise);\n\n        activityRecordsViewModel.addMultipleActivityRecord(this.activityRecordsController, activityRecord,\n            sampleSetList, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Reading ActivityRecords and Associated Data from the Health Platform\n     * </br>\n     * To obtain a list of ActivityRecords that meet the criteria, create an ActivityRecordReadOptions instance first.\n     * Use the ActivityRecordsController.getActivityRecord method to obtain data.\n     * <p>\n     * Note: The user can obtain a list of ActivityRecords and associated data that meets certain criteria from the Health platform.\n     * For example, you can obtain all ActivityRecords within a specific period of time for particular data, or obtain a specific ActivityRecord by name or ID.\n     * You can also obtain ActivityRecords created by other apps.\n     * </p>\n     *\n     * @param dataTypeMap ReadableMap instance that refers to {@link DataType} instance.\n     * @param dateMap ReadableMap instance that refers to startTime, endTime and timeUnit params.\n     * @param promise In the success scenario, {@link List<ActivityRecord>} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void getActivityRecord(final ReadableMap dataTypeMap, final ReadableMap dateMap,\n        final @Nullable String activityRecordId, final @Nullable String activityRecordName, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.getActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkActivityRecordsController();\n\n        // Build the request body for reading activity records\n        ActivityRecordReadOptions readRequest = ActivityRecordsUtils.INSTANCE.toActivityRecordReadOptions(dataTypeMap,\n            dateMap, activityRecordId, activityRecordName, promise);\n\n        // Get the requested ActivityRecords\n        activityRecordsViewModel.getActivityRecord(this.activityRecordsController, readRequest,\n            new ResultHelper<>(ActivityRecordReply.class, promise, logger, logName));\n\n    }\n\n    /**\n     * Delete the activity record.\n     *\n     * @param readableMap ReadableMap instance that refers to ActivityRecordDeleteOptions instance.\n     * @param promise In the success scenario, {@link String} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void deleteActivityRecord(final ReadableMap readableMap, final Promise promise) {\n        String logName = \"HmsActivityRecordsController.deleteActivityRecord\";\n        logger.startMethodExecutionTimer(logName);\n        checkActivityRecordsController();\n\n        ActivityRecordDeleteOptions deleteOptions = ActivityRecordsUtils.INSTANCE.toActivityRecordDeleteOptions(\n            readableMap, promise);\n\n        activityRecordsViewModel.deleteActivityRecord(this.activityRecordsController, deleteOptions,\n            new VoidResultHelper(promise, logger, logName));\n\n    }\n\n    /**\n     * {@link HmsActivityRecordsController} class name.\n     *\n     * @return class name\n     */\n    @NonNull\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    /**\n     * getConstants exposes the constant values\n     * to RN Side.\n     *\n     * @return constants\n     */\n    @Override\n    public Map<String, Object> getConstants() {\n        return ACTIVITY_CONSTANTS_MAP;\n    }\n\n    /**\n     * Sends event to RN Side.\n     *\n     * @param reactContext ReactContext instance.\n     * @param eventName Event name that will be available via {@link HmsActivityRecordsController}.\n     * @param params Event params.\n     */\n    @Override\n    public void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n            .emit(\"addActivityRecordsMonitor\", params);\n    }\n\n    /* Private Methods */\n\n    /**\n     * Check whether activityRecordsController is initialized, or not.\n     */\n    private void checkActivityRecordsController() {\n        if (this.activityRecordsController == null || this.dataController == null) {\n            initActivityRecordsController();\n        }\n    }\n\n    /**\n     * Initialize {@link ActivityRecordsController}.\n     */\n    private void initActivityRecordsController() {\n        dataController= HuaweiHiHealth.getDataController(reactContext);\n        activityRecordsController = HuaweiHiHealth.getActivityRecordsController(reactContext);\n\n    }\n\n    public static Intent getForegroundServiceIntent() {\n\n        Intent intent = new Intent();\n        intent.setClassName(reactContext.getPackageName(),\n            \"com.huawei.hms.rn.health.kits.activityrecords.util.ActivityRecordBackgroundService\");\n        return intent;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/receiver/ActivityRecordsMonitorReceiver.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.receiver;\n\nimport static com.facebook.react.bridge.Arguments.createMap;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.addIsSuccess;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\n\nimport com.facebook.react.bridge.WritableMap;\n\n/**\n * ActivityRecord status receiving and processing class.\n * <p>\n * {@link ActivityRecordsMonitorReceiver} uses an intent in the {@link HmsActivityRecordsController},\n * gives to result via {@link OnActivityRegisterReceiverListener} to HmsActivityRecordsController.\n *\n * @since v.5.0.1\n */\npublic class ActivityRecordsMonitorReceiver extends BroadcastReceiver {\n    private static final String TAG = ActivityRecordsMonitorReceiver.class.getSimpleName();\n\n    private static OnActivityRegisterReceiverListener listener = null;\n\n    /**\n     * OnActivityRegisterReceiverListener informs the {@link HmsActivityRecordsController}\n     * for the ActivityRecord Status.\n     */\n    public interface OnActivityRegisterReceiverListener {\n        /**\n         * Gets WritableMap instance and informs the calling side,\n         * every time onReceive is triggered.\n         *\n         * @param writableMap WritableMap instance.\n         */\n        void onReceived(WritableMap writableMap);\n    }\n\n    /**\n     * Setting {@link OnActivityRegisterReceiverListener}\n     *\n     * @param listener static ActivityRecordsMonitorReceiver.OnActivityRegisterReceiverListener\n     */\n    public static void setActivityRegisterReceiverListener(OnActivityRegisterReceiverListener listener) {\n        ActivityRecordsMonitorReceiver.listener = listener;\n    }\n\n    /**\n     * This method is called when the {@link ActivityRecordsMonitorReceiver} is receiving an Intent broadcast.\n     * During this time you can use the other methods on {@link ActivityRecordsMonitorReceiver}  to view/modify the current result values.\n     *\n     * @param context ReactContext instance.\n     * @param intent PendingIntent instance\n     */\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        Log.i(TAG, \"onReceive\");\n        // an Intent broadcast.\n        if (intent != null) {\n            ActivityRecord activityRecord = ActivityRecord.extract(intent);\n            WritableMap writableMap = createMap();\n            if (activityRecord != null) {\n                writableMap.putString(\"activityRecordInfo\", activityRecord.toString());\n            }\n            if (ActivityRecordsMonitorReceiver.listener != null) {\n                ActivityRecordsMonitorReceiver.listener.onReceived(addIsSuccess(writableMap, true));\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/util/ActivityRecordBackgroundService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.util;\n\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.app.Service;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.os.Handler;\nimport android.os.HandlerThread;\nimport android.os.IBinder;\nimport android.os.Message;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.app.NotificationCompat;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.hihealth.ActivityRecordsController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\n\n/**\n * Defining a Frontend ActivityRecordForegroundService\n *\n * @since 2020-09-05\n */\npublic class ActivityRecordBackgroundService extends Service {\n    private static final String TAG = \"ForegroundService\";\n\n    // Internal context object\n    private Context context;\n\n    // Handler to send continue workout msg\n    private Handler mHandler;\n\n    // Handler thread\n    private HandlerThread mHandlerThread;\n\n    // HMS Health ActivityRecordsController\n    private ActivityRecordsController activityRecordsController;\n\n    // Continue ActivityRecord Msg what\n    private static final int MSG_WORKOUT_TIMEOUT = 1005;\n\n    // delayed time\n    private static final int WORKOUT_TIMEOUT = 600000;\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        context = this;\n        Log.i(TAG, \"ActivityRecordForegroundService is create.\");\n    }\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n        // Binding a notification bar\n        getNotification();\n        initActivityRecordController();\n        initHandler();\n        // send continue ActivityRecord delayed message\n        mHandler.sendEmptyMessageDelayed(MSG_WORKOUT_TIMEOUT, WORKOUT_TIMEOUT);\n        return super.onStartCommand(intent, flags, startId);\n    }\n\n    /**\n     * init ActivityRecordsController\n     */\n    private void initActivityRecordController() {\n        activityRecordsController = HuaweiHiHealth.getActivityRecordsController(context);\n    }\n\n    /**\n     * init handler to handle continue ActivityRecord msg\n     */\n    private void initHandler() {\n        if (mHandlerThread == null) {\n            Log.i(TAG, \"mHandlerThread is null, begin to create\");\n            mHandlerThread = new HandlerThread(\"healthkit_workout_thread_handler\");\n            mHandlerThread.start();\n            mHandler = new Handler(mHandlerThread.getLooper()) {\n                @Override\n                public void handleMessage(@NonNull Message msg) {\n                    Log.d(TAG, \"meed handle js unbind msg: \" + msg.what);\n                    super.handleMessage(msg);\n                    if (msg.what == MSG_WORKOUT_TIMEOUT) {\n                        continueBackgroundActivityRecord();\n                    }\n                }\n            };\n        }\n    }\n\n    /**\n     * Continue activity records run in background\n     */\n    public void continueBackgroundActivityRecord() {\n        Log.i(TAG, \"this is continue backgroundActivityRecord\");\n\n        // Call the related method of ActivityRecordsController to continue activity records run in background.\n        // The input parameter can be the ID string of ActivityRecord\n        Task<Void> endTask = activityRecordsController.continueActivityRecord(\"MyBackgroundActivityRecordId\");\n        endTask.addOnSuccessListener(new OnSuccessListener<Void>() {\n            @Override\n            public void onSuccess(Void aVoid) {\n                Log.i(TAG, \"continue backgroundActivityRecord was successful!\");\n                mHandler.sendEmptyMessageDelayed(MSG_WORKOUT_TIMEOUT, WORKOUT_TIMEOUT);\n            }\n        }).addOnFailureListener(new OnFailureListener() {\n            @Override\n            public void onFailure(Exception e) {\n                Log.i(TAG, \"continue backgroundActivityRecord error \" + e.getMessage());\n            }\n        });\n    }\n\n    /**\n     * Bind the service to the notification bar so that the service can be changed to a foreground service.\n     */\n    private void getNotification() {\n        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);\n        Notification notification = new NotificationCompat.Builder(this, \"1\").setContentTitle(\"ActivityRecord\")\n            .setContentText(\"ActivityRecord Ongoing\")\n            .setWhen(System.currentTimeMillis())\n            .setSmallIcon(android.R.mipmap.sym_def_app_icon)\n            .setContentIntent(\n                PendingIntent.getActivity(this, 0, new Intent(this, HmsActivityRecordsController.class), 0))\n            .build();\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            NotificationChannel channel = new NotificationChannel(\"1\", \"subscribeName\",\n                NotificationManager.IMPORTANCE_DEFAULT);\n            channel.setDescription(\"description\");\n            notificationManager.createNotificationChannel(channel);\n        }\n        notification.flags = Notification.FLAG_ONGOING_EVENT;\n        startForeground(1, notification);\n\n    }\n\n    @Override\n    public void onDestroy() {\n        super.onDestroy();\n        mHandler.removeCallbacksAndMessages(null);\n        Log.i(TAG, \"ActivityRecordForegroundService is destroy.\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/util/ActivityRecordsConstants.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.util;\n\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.DATA_CONSTANTS_MAP;\n\nimport com.huawei.hms.hihealth.HiHealthActivities;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\n\nimport java.util.Collections;\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * {@link HmsActivityRecordsController} Constant Values.\n *\n * @since v.5.0.1\n */\npublic interface ActivityRecordsConstants {\n    /**\n     * All the {@link HiHealthActivities} constants.\n     */\n    enum HiHealthConstants {\n        /* Data Types */\n        MIME_TYPE_PREFIX(\"vnd.huawei.hihealth.activity/\"),\n        EXTRA_ACTION_STATUS(\"actionStatus\"),\n        STATUS_ACTION_START(\"StartedActionStatus\"),\n        STATUS_ACTION_END(\"EndedActionStatus\"),\n        AEROBICS(\"aerobics\"),\n        ARCHERY(\"archery\"),\n        APNEA_TRAINING(\"apnea_training\"),\n        APNEA_TEST(\"apnea_test\"),\n        BADMINTON(\"badminton\"),\n        BASEBALL(\"baseball\"),\n        BASKETBALL(\"basketball\"),\n        BIATHLON(\"biathlon\"),\n        BOXING(\"boxing\"),\n        CALISTHENICS(\"calisthenics\"),\n        CIRCUIT_TRAINING(\"circuit_training\"),\n        CRICKET(\"cricket\"),\n        CROSSFIT(\"crossfit\"),\n        CURLING(\"curling\"),\n        CYCLING(\"cycling\"),\n        CYCLING_INDOOR(\"cycling_indoor\"),\n        DANCING(\"dancing\"),\n        DIVING(\"diving\"),\n        ELEVATOR(\"elevator\"),\n        ELLIPTICAL(\"elliptical\"),\n        ERGOMETER(\"ergometer\"),\n        ESCALATOR(\"escalator\"),\n        FENCING(\"fencing\"),\n        FOOTBALL_AMERICAN(\"football.american\"),\n        FOOTBALL_AUSTRALIAN(\"football.australian\"),\n        FOOTBALL_SOCCER(\"football.soccer\"),\n        FLYING_DISC(\"flying_disc\"),\n        GARDENING(\"gardening\"),\n        GOLF(\"golf\"),\n        GYMNASTICS(\"gymnastics\"),\n        HANDBALL(\"handball\"),\n        HIIT(\"interval_training.high_intensity\"),\n        HIKING(\"hiking\"),\n        HOCKEY(\"hockey\"),\n        HORSE_RIDING(\"horse_riding\"),\n        HOUSEWORK(\"housework\"),\n        ICE_SKATING(\"ice_skating\"),\n        IN_VEHICLE(\"in_vehicle\"),\n        INTERVAL_TRAINING(\"interval_training\"),\n        JUMPING_ROPE(\"jumping_rope\"),\n        KAYAKING(\"kayaking\"),\n        KETTLEBELL_TRAINING(\"kettlebell_training\"),\n        KICKBOXING(\"kickboxing\"),\n        KITESURFING(\"kitesurfing\"),\n        MARTIAL_ARTS(\"martial_arts\"),\n        MEDITATION(\"meditation\"),\n        MIXED_MARTIAL_ARTS(\"martial_arts.mixed\"),\n        ON_FOOT(\"on_foot\"),\n        OTHER(\"other\"),\n        P90X(\"p90x\"),\n        PARAGLIDING(\"paragliding\"),\n        PILATES(\"pilates\"),\n        POLO(\"polo\"),\n        RACQUETBALL(\"racquetball\"),\n        ROCK_CLIMBING(\"rock_climbing\"),\n        ROWING(\"rowing\"),\n        ROWING_MACHINE(\"rowing.machine\"),\n        RUGBY(\"rugby\"),\n        RUNNING(\"running\"),\n        RUNNING_MACHINE(\"running.machine\"),\n        SAILING(\"sailing\"),\n        SCUBA_DIVING(\"scuba_diving\"),\n        SCOOTER_RIDING(\"scooter_riding\"),\n        SKATEBOARDING(\"skateboarding\"),\n        SKATING(\"skating\"),\n        SKIING(\"skiing\"),\n        SLEDDING(\"sledding\"),\n        SLEEP(\"sleep\"),\n        SLEEP_LIGHT(\"sleep.light\"),\n        SLEEP_DEEP(\"sleep.deep\"),\n        SLEEP_REM(\"sleep.rem\"),\n        SLEEP_AWAKE(\"sleep.awake\"),\n        SNOWBOARDING(\"snowboarding\"),\n        SNOWMOBILE(\"snowmobile\"),\n        SNOWSHOEING(\"snowshoeing\"),\n        SOFTBALL(\"softball\"),\n        SQUASH(\"squash\"),\n        STAIR_CLIMBING(\"stair_climbing\"),\n        STAIR_CLIMBING_MACHINE(\"stair_climbing.machine\"),\n        STANDUP_PADDLEBOARDING(\"standup_paddleboarding\"),\n        STILL(\"still\"),\n        STRENGTH_TRAINING(\"strength_training\"),\n        SURFING(\"surfing\"),\n        SWIMMING(\"swimming\"),\n        SWIMMING_POOL(\"swimming.pool\"),\n        SWIMMING_OPEN_WATER(\"swimming.open_water\"),\n        TABLE_TENNIS(\"table_tennis\"),\n        TEAM_SPORTS(\"team_sports\"),\n        TENNIS(\"tennis\"),\n        TILTING(\"tilting\"),\n        UNKNOWN(\"unknown\"),\n        VOLLEYBALL(\"volleyball\"),\n        WAKEBOARDING(\"wakeboarding\"),\n        WALKING(\"walking\"),\n        WATER_POLO(\"water_polo\"),\n        WEIGHTLIFTING(\"weightlifting\"),\n        WHEELCHAIR(\"wheelchair\"),\n        WINDSURFING(\"windsurfing\"),\n        YOGA(\"yoga\"),\n        ZUMBA(\"zumba\");\n\n        private final String value;\n\n        HiHealthConstants(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n\n    /**\n     * Whole base constants variables as Map\n     **/\n    Map<String, Object> ACTIVITY_CONSTANTS_MAP = initMap();\n\n    /**\n     * Initializes Constants map.\n     *\n     * @return Map<String, Object> Constants map\n     */\n    static Map<String, Object> initMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n        // Hi-health Constants\n        for (HiHealthConstants variable : EnumSet.allOf(HiHealthConstants.class)) {\n            String key = variable.name();\n            String value = variable.getValue();\n            constantMap.put(key, value);\n        }\n\n        // Put DATA_CONSTANTS_MAP\n        constantMap.putAll(DATA_CONSTANTS_MAP);\n\n        return Collections.unmodifiableMap(constantMap);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/util/ActivityRecordsUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.util;\n\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.ACTIVITY_RECORD_ID_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.ACTIVITY_TYPE_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.DESCRIPTION_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.DURATION_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.END_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.NAME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.START_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.TIME_ZONE_KEY;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArray;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArrayList;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toList;\n\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.ActivitySummary;\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.DeviceInfo;\nimport com.huawei.hms.hihealth.data.PaceSummary;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.options.ActivityRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.ActivityRecordReadOptions;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.rn.health.foundation.constant.Constants;\nimport com.huawei.hms.rn.health.foundation.util.MapUtils;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.TimeUnit;\n\nimport javax.annotation.Nullable;\n\n/**\n * ActivityRecordsUtils exposes a set of helper methods for working with\n * {@link HmsActivityRecordsController}.\n *\n * @since v.5.0.1\n */\npublic enum ActivityRecordsUtils {\n    INSTANCE;\n\n    /**\n     * ActivityBuilder Record Types\n     */\n    enum RecordTypes {\n        ID,\n        NAME\n    }\n\n    /**\n     * Looks for each key and converts ReadableMap instance into {@link ActivityRecord} instance.\n     *\n     * @param readableMap ReadableMap instance that will be converted.\n     * @return {@link ActivityRecord} instance.\n     */\n    public synchronized ActivityRecord toActivityRecord(final ReadableMap readableMap, final ReactContext context,\n        final Promise promise) {\n        // Build an ActivityRecord object\n        ActivityRecord.Builder builder = new ActivityRecord.Builder();\n\n        builder.setId(Utils.INSTANCE.createEmptyStringIfNull(readableMap, ACTIVITY_RECORD_ID_KEY));\n        builder.setName(Utils.INSTANCE.createEmptyStringIfNull(readableMap, NAME_KEY));\n        builder.setDesc(Utils.INSTANCE.createEmptyStringIfNull(readableMap, DESCRIPTION_KEY));\n        builder.setActivityTypeId(Utils.INSTANCE.createEmptyStringIfNull(readableMap, ACTIVITY_TYPE_KEY));\n        builder.setTimeZone(Utils.INSTANCE.createEmptyStringIfNull(readableMap, TIME_ZONE_KEY));\n        builder.setDeviceInfo(DeviceInfo.getLocalDevice(context));\n        setBuilderTime(builder, readableMap, Constants.TimeConstants.START);\n        setBuilderTime(builder, readableMap, Constants.TimeConstants.END);\n        setBuilderTime(builder, readableMap, Constants.TimeConstants.DURATION);\n\n        if (Utils.INSTANCE.hasKey(readableMap, \"activitySummary\")) {\n            builder.setActivitySummary(toActivitySummary(readableMap.getMap(\"activitySummary\"), context, promise));\n        }\n        return builder.build();\n    }\n\n    /**\n     * Converts into {@link ActivityRecordReadOptions} instance.\n     */\n    public synchronized ActivityRecordReadOptions toActivityRecordReadOptions(final ReadableMap dataTypeMap,\n        final ReadableMap dateReadableMap, final @Nullable String activityRecordId,\n        final @Nullable String activityRecordName, final Promise promise) {\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeMap);\n\n        ActivityRecordReadOptions.Builder builder = new ActivityRecordReadOptions.Builder();\n        // Build the time range of the request object: start time and end time\n        Date startDate = Utils.INSTANCE.toDate(Constants.TimeConstants.START, null, dateReadableMap, promise);\n        Date endDate = Utils.INSTANCE.toDate(Constants.TimeConstants.END, null, dateReadableMap, promise);\n\n        if (startDate != null && endDate != null && dataType != null) {\n            builder.setTimeInterval(startDate.getTime(), endDate.getTime(), Utils.INSTANCE.toTimeUnit(dateReadableMap))\n                .readActivityRecordsFromAllApps()\n                .read(dataType);\n        }\n\n        setBuilderRecord(builder, activityRecordId, RecordTypes.ID);\n        setBuilderRecord(builder, activityRecordName, RecordTypes.NAME);\n        return builder.build();\n    }\n\n    /**\n     * Converts into {@link DeleteOptions} instance.\n     */\n    public synchronized DeleteOptions toActivityDeleteOptions(final ActivityRecord activityRecord,\n        final TimeUnit timeUnit) {\n        return new DeleteOptions.Builder().addActivityRecord(activityRecord)\n            .setTimeInterval(activityRecord.getStartTime(timeUnit), activityRecord.getEndTime(timeUnit), timeUnit)\n            .build();\n    }\n\n    public synchronized ActivityRecordDeleteOptions toActivityRecordDeleteOptions(final ReadableMap readableMap,\n        final Promise promise) {\n        ActivityRecordDeleteOptions.Builder builder = new ActivityRecordDeleteOptions.Builder();\n\n        Date startDate = Utils.INSTANCE.toDate(Constants.TimeConstants.START, null, readableMap, promise);\n        Date endDate = Utils.INSTANCE.toDate(Constants.TimeConstants.END, null, readableMap, promise);\n\n        if (startDate != null && endDate != null) {\n            builder.setTimeInterval(startDate.getTime(), endDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n        }\n\n        Boolean isDeleteSubData = readableMap.getBoolean(\"isDeleteSubData\");\n\n        ReadableArray activityRecordIdsRA = readableMap.getArray(\"activityRecordIds\");\n        List<String> activityRecordIds = toList(toArray(activityRecordIdsRA));\n\n        ReadableArray subDataTypesRA = readableMap.getArray(\"subDataTypes\");\n        List<DataType> subDataTypes = Utils.INSTANCE.toDataTypeList(subDataTypesRA);\n\n        builder.setSubDataTypeList(subDataTypes)\n            .setActivityRecordIds(activityRecordIds)\n            .isDeleteSubData(isDeleteSubData);\n\n        return builder.build();\n    }\n\n    /* Private Methods */\n\n    /**\n     * Sets {@link ActivityRecord.Builder} Time\n     */\n    private synchronized void setBuilderTime(ActivityRecord.Builder builder, final ReadableMap readableMap,\n        final Constants.TimeConstants time) {\n        switch (time) {\n            case START:\n                Date startDate = Utils.INSTANCE.toDate(readableMap, START_TIME_KEY);\n                if (startDate != null) {\n                    builder.setStartTime(startDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n                }\n                break;\n            case DURATION:\n                if (readableMap.hasKey(DURATION_TIME_KEY)) {\n                    builder.setDurationTime((long) readableMap.getInt(DURATION_TIME_KEY),\n                        Utils.INSTANCE.toTimeUnit(readableMap));\n                }\n                break;\n            case END:\n                Date endDate = Utils.INSTANCE.toDate(readableMap, END_TIME_KEY);\n                if (endDate != null) {\n                    builder.setEndTime(endDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Sets {@link ActivityRecordReadOptions.Builder} Records\n     */\n    private synchronized void setBuilderRecord(final ActivityRecordReadOptions.Builder builder,\n        final @Nullable String recordVal, final RecordTypes types) {\n        if (recordVal == null) {\n            return;\n        }\n\n        switch (types) {\n            case ID:\n                builder.setActivityRecordId(recordVal);\n                return;\n            case NAME:\n                builder.setActivityRecordName(recordVal);\n        }\n    }\n\n    /**\n     * Converts the ReadableMap into ActivitySummary\n     *\n     * @param readableMap ReadableMap Object\n     * @param context Package context of the app for data collector\n     * @param promise Promise for giving error if a parsing error occurs in time\n     * @return ActivitySummary Object\n     */\n    private ActivitySummary toActivitySummary(ReadableMap readableMap, final ReactContext context,\n        final Promise promise) {\n        ActivitySummary activitySummary = new ActivitySummary();\n        if (Utils.INSTANCE.hasKey(readableMap, \"paceSummary\")) {\n            activitySummary.setPaceSummary(toPaceSummary(readableMap.getMap(\"paceSummary\")));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"dataSummary\")) {\n            activitySummary.setDataSummary(toDataSummary(readableMap.getArray(\"dataSummary\"), context, promise));\n        }\n\n        return activitySummary;\n    }\n\n    /**\n     * Converts ReadableMap Object to List of SamplePoint objects in DataSummary\n     *\n     * @param dataSummaryArray ReadableMap Array\n     * @param context Package context of the app for data collector\n     * @param promise Promise for giving error if a parsing error occurs in time\n     * @return List of SamplePoint Object\n     */\n    private synchronized List<SamplePoint> toDataSummary(final ReadableArray dataSummaryArray,\n        final ReactContext context, final Promise promise) {\n        List<SamplePoint> dataSummary = new ArrayList<>();\n        for (int i = 0; i < dataSummaryArray.size(); i++) {\n            ReadableMap dataSummaryMap = dataSummaryArray.getMap(i);\n            if (dataSummaryArray != null && Utils.INSTANCE.hasKey(dataSummaryMap, \"dataCollector\")) {\n                DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataSummaryMap.getMap(\"dataCollector\"),\n                    context);\n                List<Object> samplePointList = toArrayList(dataSummaryMap.getArray(\"samplePoints\"));\n                if (dataCollector != null) {\n                    for (Object samplePointObj : samplePointList) {\n                        Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n                        SamplePoint samplePoint = Utils.INSTANCE.toSamplePoint(dataCollector, samplePointMap, promise);\n                        dataSummary.add(samplePoint);\n                    }\n                }\n            }\n        }\n\n        return dataSummary;\n    }\n\n    /**\n     * Converts ReadableArray to PaceSummary Object\n     *\n     * @param readableMap ReadableMap Object\n     * @return PaceSummary Object\n     */\n    private synchronized PaceSummary toPaceSummary(final ReadableMap readableMap) {\n        PaceSummary paceSummary = new PaceSummary();\n        if (Utils.INSTANCE.hasKey(readableMap, \"avgPace\")) {\n            paceSummary.setAvgPace(readableMap.getDouble(\"avgPace\"));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"bestPace\")) {\n            paceSummary.setBestPace(readableMap.getDouble(\"bestPace\"));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"paceMap\")) {\n            paceSummary.setPaceMap((Map<String, Double>) MapUtils.toMap(readableMap.getMap(\"paceMap\")));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"britishPaceMap\")) {\n            paceSummary.setBritishPaceMap((Map<String, Double>) MapUtils.toMap(readableMap.getMap(\"britishPaceMap\")));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"partTimeMap\")) {\n            paceSummary.setPartTimeMap((Map<String, Double>) MapUtils.toMap(readableMap.getMap(\"partTimeMap\")));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"britishPartTimeMap\")) {\n            paceSummary.setBritishPartTimeMap(\n                (Map<String, Double>) MapUtils.toMap(readableMap.getMap(\"britishPartTimeMap\")));\n        }\n        if (Utils.INSTANCE.hasKey(readableMap, \"sportHealthPaceMap\")) {\n            paceSummary.setSportHealthPaceMap(\n                (Map<String, Double>) MapUtils.toMap(readableMap.getMap(\"sportHealthPaceMap\")));\n        }\n\n        return paceSummary;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/viewmodel/ActivityRecordsService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.viewmodel;\n\nimport android.content.ComponentName;\n\nimport com.huawei.hms.hihealth.ActivityRecordsController;\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.ActivityRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.ActivityRecordReadOptions;\nimport com.huawei.hms.hihealth.options.OnActivityRecordListener;\nimport com.huawei.hms.hihealth.result.ActivityRecordReply;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\n\nimport com.facebook.react.bridge.ReactContext;\n\nimport java.util.List;\n\nimport javax.annotation.Nullable;\n\n/**\n * Blueprint of {@link ActivityRecordsViewModel}.\n *\n * @since v.5.0.1\n */\npublic interface ActivityRecordsService {\n    /**\n     * Creating ActivityRecords in Real Time\n     * <p>\n     * Create ActivityRecords for ongoing workout activities.\n     * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n     * <p>\n     * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    void startActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final VoidResultListener listener);\n\n    void startBackgroundActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, OnActivityRecordListener activityRecordListener,\n        ComponentName componentName, ReactContext reactContext, final VoidResultListener listener);\n\n    /**\n     * Applies for an activity record to continue in the background for another 10 minutes.\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecordId Unique ID of an activity record.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    void continueActivityRecord(final ActivityRecordsController activityRecordsController,\n        final String activityRecordId, final VoidResultListener listener);\n\n    /**\n     * Stop the ActivityRecord\n     * <p>\n     * The app uses the {@code HmsActivityRecordsController.endActivityRecord} method to stop a specified ActivityRecord.\n     * <p>\n     * Note: When the user stops a workout activity, use the {@code HmsActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecordId the ID string of {@link ActivityRecord}.\n     * @param listener List ActivityRecord instance.\n     */\n    void endActivityRecord(final ActivityRecordsController activityRecordsController,\n        final @Nullable String activityRecordId, final ResultListener<List> listener);\n\n    /**\n     * Inserting ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param sampleSet {@link SampleSet} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    void addActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final SampleSet sampleSet, final VoidResultListener listener);\n\n    /**\n     * Inserting Multiple ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param sampleSetList {@link SampleSet} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    void addMultipleActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final List<SampleSet> sampleSetList, final VoidResultListener listener);\n\n    /**\n     * Delete the activity record.\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param deleteOptions ActivityRecordDeleteOptions instance.\n     * @param listener {@link ResultListener<ActivityRecordReply>} instance.\n     */\n    void deleteActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecordDeleteOptions deleteOptions, final VoidResultListener listener);\n\n    /**\n     * Reading ActivityRecords and Associated Data from the Health Platform\n     * </br>\n     * To obtain a list of ActivityRecords that meet the criteria, create an ActivityRecordReadOptions instance first.\n     * Use the ActivityRecordsController.getActivityRecord method to obtain data.\n     * <p>\n     * Note: The user can obtain a list of ActivityRecords and associated data that meets certain criteria from the Health platform.\n     * For example, you can obtain all ActivityRecords within a specific period of time for particular data, or obtain a specific ActivityRecord by name or ID.\n     * You can also obtain ActivityRecords created by other apps.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param readRequest {@link ActivityRecordReadOptions} request.\n     * @param listener {@link ResultListener<ActivityRecordReply>} instance.\n     */\n    void getActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecordReadOptions readRequest, final ResultListener<ActivityRecordReply> listener);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/activityrecords/viewmodel/ActivityRecordsViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.activityrecords.viewmodel;\n\nimport android.content.ComponentName;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.hihealth.ActivityRecordsController;\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.data.ActivityRecord;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.ActivityRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.ActivityRecordInsertOptions;\nimport com.huawei.hms.hihealth.options.ActivityRecordReadOptions;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.hihealth.options.OnActivityRecordListener;\nimport com.huawei.hms.hihealth.result.ActivityRecordReply;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.kits.activityrecords.HmsActivityRecordsController;\nimport com.huawei.hms.rn.health.kits.activityrecords.util.ActivityRecordsUtils;\n\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.List;\n\n/**\n * All the tasks for {@link ActivityRecordsController} methods\n * are used in {@link ActivityRecordsViewModel} class.\n *\n * @since v.5.0.1\n */\npublic class ActivityRecordsViewModel implements ActivityRecordsService {\n\n    private static final String TAG = ActivityRecordsViewModel.class.getSimpleName();\n\n    /**\n     * Creating ActivityRecords in Real Time\n     * <p>\n     * Create ActivityRecords for ongoing workout activities.\n     * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n     * <p>\n     * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    @Override\n    public void startActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final VoidResultListener listener) {\n        Log.i(TAG, \"call startActivityRecord\");\n        // Add a listener for the ActivityRecord start success\n        Task<Void> beginTask = activityRecordsController.beginActivityRecord(activityRecord);\n\n        // Add a listener for the ActivityRecord start failure\n        beginTask.addOnSuccessListener(voidValue -> {\n            Log.i(TAG, \"startActivityRecord success\");\n            listener.onSuccess(voidValue);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"startActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Starts an activity record that can run in the background and allows it to continue for 10 minutes by default.\n     * <p>\n     * Create ActivityRecords for ongoing workout activities.\n     * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n     * <p>\n     * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    @Override\n    public void startBackgroundActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, OnActivityRecordListener activityRecordListener,\n        ComponentName componentName, ReactContext reactContext, final VoidResultListener listener) {\n        Log.i(TAG, \"call startBackgroundActivityRecord\");\n        // Add a listener for the ActivityRecord start success\n        Task<Void> beginTask = activityRecordsController.beginActivityRecord(activityRecord, componentName,\n            activityRecordListener);\n\n        // Add a listener for the ActivityRecord start failure\n        beginTask.addOnSuccessListener(voidValue -> {\n            Log.i(TAG, \"startBackgroundActivityRecord success\");\n            reactContext.startService(HmsActivityRecordsController.getForegroundServiceIntent());\n            listener.onSuccess(voidValue);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"startBackgroundActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Applies for an activity record to continue in the background for another 10 minutes.\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecordId Unique ID of an activity record.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    @ReactMethod\n    public void continueActivityRecord(final ActivityRecordsController activityRecordsController,\n        final String activityRecordId, final VoidResultListener listener) {\n        Log.i(TAG, \"call continueActivityRecord\");\n\n        // Add a listener for the ActivityRecord start success\n        Task<Void> beginTask = activityRecordsController.continueActivityRecord(activityRecordId);\n\n        // Add a listener for the ActivityRecord start failure\n        beginTask.addOnSuccessListener(voidValue -> {\n            Log.i(TAG, \"continueActivityRecord success\");\n            listener.onSuccess(voidValue);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"continueActivityRecord error\");\n            listener.onFail(error);\n        });\n\n    }\n\n    /**\n     * Stop the ActivityRecord\n     * <p>\n     * The app uses the {@code HmsActivityRecordsController.endActivityRecord} method to stop a specified ActivityRecord.\n     * <p>\n     * Note: When the user stops a workout activity, use the {@code HmsActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecordId the ID string of {@link ActivityRecord}.\n     * @param listener List ActivityRecord instance.\n     */\n    @Override\n    public void endActivityRecord(final ActivityRecordsController activityRecordsController,\n        final String activityRecordId, final ResultListener<List> listener) {\n        Log.i(TAG, \"call endActivityRecord\");\n        // Call the related method of ActivityRecordsController to stop activity records.\n        // The input parameter can be the ID string of ActivityRecord or null\n        // Stop an activity record of the current app by specifying the ID string as the input parameter\n        // Stop activity records of the current app by specifying null as the input parameter\n        Task<List<ActivityRecord>> endTask = activityRecordsController.endActivityRecord(activityRecordId);\n        endTask.addOnSuccessListener(activityRecords -> {\n            // Return the list of activity records that have stopped\n            Log.i(TAG, \"endActivityRecord success\");\n            // Return the list of activity records that have stopped\n            listener.onSuccess(activityRecords);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"endActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Inserting ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param sampleSet {@link SampleSet} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    @Override\n    public void addActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final SampleSet sampleSet, final VoidResultListener listener) {\n        Log.i(TAG, \"call addActivityRecord\");\n        // Build the activity record addition request object\n        ActivityRecordInsertOptions insertRequest = new ActivityRecordInsertOptions.Builder().setActivityRecord(\n            activityRecord).addSampleSet(sampleSet).build();\n\n        // Call the related method in the ActivityRecordsController to add activity records\n        Task<Void> addTask = activityRecordsController.addActivityRecord(insertRequest);\n        addTask.addOnSuccessListener(voidValue -> {\n            Log.i(TAG, \"addActivityRecord success\");\n            listener.onSuccess(voidValue);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"addActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Inserting Multiple ActivityRecords to the Health Platform\n     * </br>\n     * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n     * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n     * 2. Create an ActivityRecordInsertOptions using the ActivityRecord and optional data set or grouped sampling point data.\n     * 3. Use the ActivityRecordsController.addActivityRecord method to insert an ActivityRecordInsertOptions.\n     * <p>\n     * Note: The app uses the ActivityRecordsController.addActivityRecord method to insert the ActivityRecord and associated data to the Health platform.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param activityRecord {@link ActivityRecord} instance.\n     * @param sampleSetList {@link SampleSet} instance.\n     * @param listener {@link VoidResultListener} instance.\n     */\n    @Override\n    public void addMultipleActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecord activityRecord, final List<SampleSet> sampleSetList, final VoidResultListener listener) {\n        Log.i(TAG, \"call addMultipleActivityRecord\");\n        // Build the activity record addition request object\n        ActivityRecordInsertOptions.Builder builder = new ActivityRecordInsertOptions.Builder().setActivityRecord(\n            activityRecord);\n\n        for (SampleSet set : sampleSetList) {\n            builder.addSampleSet(set);\n        }\n\n        // Call the related method in the ActivityRecordsController to add activity records\n        Task<Void> addTask = activityRecordsController.addActivityRecord(builder.build());\n        addTask.addOnSuccessListener(voidValue -> {\n            Log.i(TAG, \"addMultipleActivityRecord success\");\n            listener.onSuccess(voidValue);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"addMultipleActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Delete the activity record.\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param deleteOptions ActivityRecordDeleteOptions instance.\n     * @param listener {@link ResultListener<ActivityRecordReply>} instance.\n     */\n    @Override\n    public void deleteActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecordDeleteOptions deleteOptions, final VoidResultListener listener) {\n        Log.i(TAG, \"call deleteActivityRecord\");\n        // Call the read method of the ActivityRecordsController to obtain activity records\n        Task<Void> task = activityRecordsController.deleteActivityRecord(deleteOptions);\n        task.addOnSuccessListener(activityRecordReply -> {\n            Log.i(\"DeleteActivityRecords\", \"DeleteActivityRecords success\");\n            listener.onSuccess(activityRecordReply);\n        }).addOnFailureListener(error -> {\n            Log.i(\"DeleteActivityRecords\", \"DeleteActivityRecords error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Reading ActivityRecords and Associated Data from the Health Platform\n     * </br>\n     * To obtain a list of ActivityRecords that meet the criteria, create an ActivityRecordReadOptions instance first.\n     * Use the ActivityRecordsController.getActivityRecord method to obtain data.\n     * <p>\n     * Note: The user can obtain a list of ActivityRecords and associated data that meets certain criteria from the Health platform.\n     * For example, you can obtain all ActivityRecords within a specific period of time for particular data, or obtain a specific ActivityRecord by name or ID.\n     * You can also obtain ActivityRecords created by other apps.\n     * </p>\n     *\n     * @param activityRecordsController {@link ActivityRecordsController} instance.\n     * @param readRequest {@link ActivityRecordReadOptions} request.\n     * @param listener {@link ResultListener<ActivityRecordReply>} instance.\n     */\n    @Override\n    public void getActivityRecord(final ActivityRecordsController activityRecordsController,\n        final ActivityRecordReadOptions readRequest, final ResultListener<ActivityRecordReply> listener) {\n        // Call the read method of the ActivityRecordsController to obtain activity records\n        Log.i(\"ActivityRecords\", \"call getActivityRecord\");\n        // from the Health platform based on the conditions in the request body\n        Task<ActivityRecordReply> getTask = activityRecordsController.getActivityRecord(readRequest);\n        getTask.addOnSuccessListener(activityRecordReply -> {\n            Log.i(\"ActivityRecords\", \"getActivityRecord success\");\n            listener.onSuccess(activityRecordReply);\n        }).addOnFailureListener(error -> {\n            Log.i(\"ActivityRecords\", \"getActivityRecord error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Deleting ActivityRecords and Associated Data from the Health Platform\n     */\n    private final static class DeleteActivityRecordHelper implements ResultListener<ActivityRecordReply> {\n        /* Private Variables */\n        private final ReadableMap dateReadableMap;\n\n        private final DataController dataController;\n\n        private final ResultListener<List> listener;\n\n        /**\n         * Calls the read method of the ActivityRecordsController to obtain activity records then deletes the requested activityRecords.\n         *\n         * @param dateReadableMap ReadableMap instance that will be referred into date.\n         * @param dataController DataController instance.\n         * @param listener ResultListener<String> returned with a requested activityRecordId.\n         */\n        DeleteActivityRecordHelper(final ReadableMap dateReadableMap, final DataController dataController,\n            final ResultListener<List> listener) {\n            this.dataController = dataController;\n            this.dateReadableMap = dateReadableMap;\n            this.listener = listener;\n        }\n\n        @Override\n        public void onSuccess(ActivityRecordReply result) {\n            Log.i(TAG, \"Reading ActivityRecord  response status \" + result.getStatus());\n            List<ActivityRecord> activityRecords = result.getActivityRecords();\n\n            // Get ActivityRecord and corresponding activity data in the result, then delete for the requested time and other data.\n            for (final ActivityRecord activityRecord : activityRecords) {\n                DeleteOptions deleteOptions = ActivityRecordsUtils.INSTANCE.toActivityDeleteOptions(activityRecord,\n                    Utils.INSTANCE.toTimeUnit(dateReadableMap));\n                Log.i(TAG, (\"begin delete ActivityRecord is :\" + activityRecord.getId()));\n                // Delete ActivityRecord\n                Task<Void> deleteTask = dataController.delete(deleteOptions);\n                deleteTask.addOnSuccessListener(\n                    voidValue -> Log.i(TAG, \"delete ActivityRecord is Success:\" + activityRecord.getId()))\n                    .addOnFailureListener(error -> {\n                        Log.i(TAG, \"deleteActivityRecord error\");\n                        listener.onFail(error);\n                    });\n            }\n            listener.onSuccess(activityRecords);\n        }\n\n        @Override\n        public void onFail(Exception exception) {\n            Log.i(TAG, \"deleteActivityRecord error\");\n            listener.onFail(exception);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/HmsAutoRecorderController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.createWritableMapWithSuccessStatus;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMap;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toWritableMapWithMessage;\nimport static com.huawei.hms.rn.health.foundation.view.BaseProtocol.View.getActivity;\nimport static com.huawei.hms.rn.health.kits.autorecorder.utils.AutoRecorderConstants.BACKGROUND_SERVICE_KEY;\n\nimport android.Manifest;\nimport android.app.Activity;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.hihealth.AutoRecorderController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.foundation.view.BaseController;\nimport com.huawei.hms.rn.health.foundation.view.BaseProtocol;\nimport com.huawei.hms.rn.health.kits.autorecorder.listener.TaskVoidResultListener;\nimport com.huawei.hms.rn.health.kits.autorecorder.utils.AutoRecorderBackgroundService;\nimport com.huawei.hms.rn.health.kits.autorecorder.utils.AutoRecorderConstants;\nimport com.huawei.hms.rn.health.kits.autorecorder.viewmodel.AutoRecorderService;\nimport com.huawei.hms.rn.health.kits.autorecorder.viewmodel.AutoRecorderViewModel;\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\n/**\n * {@link HmsAutoRecorderController} class is a module that refers to {@link AutoRecorderController}\n *\n * @since v.5.0.1\n */\npublic class HmsAutoRecorderController extends BaseController implements BaseProtocol.Event {\n\n    private static final String TAG = HmsAutoRecorderController.class.getSimpleName();\n\n    // Internal context object\n    private final ReactContext reactContext;\n\n    // ViewModel instance to reach AutoRecorderController tasks\n    private final AutoRecorderService autoRecorderViewModel;\n\n    // HMS Health AutoRecorderController\n    private AutoRecorderController autoRecorderController;\n\n    // Intent for background service\n    private final Intent serviceIntent;\n\n    // Broadcast receiver for getting data from service\n    private AutoRecorderReceiver receiver;\n\n    // Whether is recording now\n    private boolean isRecording;\n\n    // HMSLogger instance\n    private HMSLogger logger;\n\n    private final ActivityEventListener activityEventListener = new ActivityEventListener() {\n        @Override\n        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n            Log.i(TAG, \"onActivityResult, requestCode=\" + requestCode + \", resultCode=\" + resultCode);\n            initAutoRecorderController();\n        }\n\n        @Override\n        public void onNewIntent(Intent intent) {\n            Log.d(TAG, \"onNewIntent\");\n        }\n    };\n\n    /**\n     * Initialization\n     */\n    public HmsAutoRecorderController(ReactApplicationContext reactContext) {\n        super(TAG, reactContext);\n        this.reactContext = reactContext;\n        this.reactContext.addActivityEventListener(activityEventListener);\n        autoRecorderViewModel = new AutoRecorderViewModel();\n        serviceIntent = new Intent(reactContext, AutoRecorderBackgroundService.class);\n        serviceIntent.setPackage(reactContext.getPackageName());\n        serviceIntent.setAction(BACKGROUND_SERVICE_KEY);\n        isRecording = false;\n\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    /**\n     * Record data via DataType supported by Huawei.\n     * </br>\n     * Start record By DataType, the data from sensor will be inserted into database automatically until call Stop\n     * Interface\n     *\n     * @param readableMap ReadableMap instance to get {@link DataType} object that contains request information.\n     * @param promise In the success scenario, Void instance is returned , or Exception is returned in the failure scenario.\n     * Also, the interface won't always success, onCompleteStartRecordByType event will be triggered once the task is completed to get the judgement of result is successful or not.\n     * The fail reason includes:\n     * 1. The app hasn't been granted the scopes.\n     * 2. This type is not supported so far.\n     */\n    @ReactMethod\n    public void startRecord(final ReadableMap readableMap, final ReadableMap notificationOptions,\n        final Promise promise) {\n        String logName = \"HmsAutoRecorderController.startRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkAutoRecorderController();\n        DataType dataType = Utils.INSTANCE.toDataType(readableMap);\n\n        if (!isRecording) {\n            registerReceiver(dataType, notificationOptions);\n            isRecording = true;\n            sendEvent(reactContext, AutoRecorderConstants.OnCompleteEventType.START_RECORD_BY_TYPE.getValue(),\n                toWritableMapWithMessage(\"onComplete - startRecordByType completed.\", true));\n            promise.resolve(createWritableMapWithSuccessStatus(true));\n        } else {\n            promise.reject(\"record_already_started\", \"Recorder is already started\");\n        }\n\n    }\n\n    /**\n     * Stop recoding by specifying the data type.\n     * </br>\n     * Stop record By DataType, the data from sensor will NOT be inserted into database automatically\n     *\n     * <p>\n     * Note: You are advised to obtain the record using the getRecords method or create the record by specifying the data type and/or data collector.\n     * If both the data type and data collector are specified, ensure that the data type in the data collector is the same as that in the record information. Otherwise, errors will occur.\n     * </p>\n     *\n     * @param dataTypeMap ReadableMap instance to get {@link DataType} object that contains request information.\n     * @param promise In the success scenario, Void instance is returned , or Exception is returned in the failure scenario. Also,\n     * the interface won't always success, onCompleteStartRecordByType event will be triggered once the task is completed to get the judgement of\n     * result is successful or not.\n     * The fail reason includes:\n     * 1. The app hasn't been granted the scopes.\n     * 2. This type is not supported so far.\n     */\n    @ReactMethod\n    public void stopRecord(final ReadableMap dataTypeMap, final Promise promise) {\n        String logName = \"HmsAutoRecorderController.stopRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkAutoRecorderController();\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeMap);\n\n        try {\n            unregisterReceiver();\n            autoRecorderViewModel.stopRecord(this.autoRecorderController, dataType,\n                new TaskVoidReqHelper(promise, \"onComplete - stopRecordByType completed.\",\n                    AutoRecorderConstants.OnCompleteEventType.STOP_RECORD_BY_TYPE, logger, logName));\n            isRecording = false;\n        } catch (RuntimeException e) {\n            promise.reject(\"runtime_exeception\", \"There is a runtime problem\");\n        } catch (Exception e) {\n            promise.reject(\"record_not_found\", \"Ongoing record is not found\");\n        }\n    }\n\n    /**\n     * Sends event to RN Side.\n     *\n     * @param reactContext ReactContext instance.\n     * @param eventName Event name that will be available via {@link HmsAutoRecorderController}.\n     * @param params Event params.\n     */\n    @Override\n    public void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n\n    /* Private Methods */\n\n    /**\n     * Sends event with requested ON_COMPLETE_EVENT_TYPE.\n     */\n\n    private void registerReceiver(DataType dataType, ReadableMap notification) {\n        serviceIntent.putExtra(\"DataType\", dataType);\n        Utils.INSTANCE.fillServiceIntent(serviceIntent, notification);\n        reactContext.startService(serviceIntent);\n        receiver = new AutoRecorderReceiver();\n        IntentFilter filter = new IntentFilter();\n        filter.addAction(BACKGROUND_SERVICE_KEY);\n        reactContext.registerReceiver(receiver, filter, Manifest.permission.FOREGROUND_SERVICE, null);\n    }\n\n    private void unregisterReceiver() {\n        reactContext.stopService(serviceIntent);\n        reactContext.unregisterReceiver(receiver);\n    }\n\n    private void sendEvent(final AutoRecorderConstants.OnCompleteEventType type, final WritableMap writableMap) {\n        sendEvent(reactContext, type.getValue(), writableMap);\n    }\n\n    /**\n     * Initialize {@link AutoRecorderController}.\n     */\n    private void initAutoRecorderController() {\n        this.autoRecorderController = HuaweiHiHealth.getAutoRecorderController(getActivity(getCurrentActivity()));\n    }\n\n    /**\n     * Check whether autoRecorderController is initialized, or not.\n     */\n    private void checkAutoRecorderController() {\n        if (this.autoRecorderController == null) {\n            initAutoRecorderController();\n        }\n    }\n\n    /* Private Inner Classes */\n\n    /**\n     * TaskVoidReqHelper final nested class is a helper class for reaching {@link TaskVoidResultListener}.\n     */\n    private final class TaskVoidReqHelper extends VoidResultHelper implements TaskVoidResultListener {\n\n        private String message;\n\n        private AutoRecorderConstants.OnCompleteEventType type;\n\n        TaskVoidReqHelper(final Promise promise, final String message,\n            final AutoRecorderConstants.OnCompleteEventType type, HMSLogger logger, String logName) {\n            super(promise, logger, logName);\n            this.message = message;\n            this.type = type;\n        }\n\n        @Override\n        public void onComplete(Task<Void> taskResult) {\n            sendEvent(type, toWritableMapWithMessage(message, taskResult.isSuccessful()));\n        }\n    }\n\n    /**\n     * Broadcast receiver\n     */\n    public class AutoRecorderReceiver extends BroadcastReceiver {\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            Bundle bundle = intent.getExtras();\n            if (bundle != null) {\n                SamplePoint samplePoint = (SamplePoint) bundle.get(\"SamplePoint\");\n                sendEvent(reactContext, \"onSamplePointListener\", toWritableMap(samplePoint));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/listener/RecordListResultListener.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.listener;\n\nimport com.huawei.hms.hihealth.AutoRecorderController;\nimport com.huawei.hms.hihealth.data.Record;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\n\nimport java.util.List;\n\n/**\n * {@link RecordListResultListener} is used among {@link AutoRecorderController} - startRecord Methods.\n *\n * @since v.5.0.1\n */\npublic interface RecordListResultListener extends ResultListener<List<Record>> { }\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/listener/TaskVoidResultListener.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.listener;\n\nimport com.huawei.hmf.tasks.OnCompleteListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\n\n/**\n * {@link TaskVoidResultListener} has one more listener method than {@link VoidResultListener} method implementations,\n * to be notified in onComplete success scenarios.\n *\n * @since v.5.0.1\n */\npublic interface TaskVoidResultListener extends VoidResultListener {\n    /**\n     * the {@link OnCompleteListener} interface won't always success, if u use the onComplete interface, u should add the judgement of\n     * result is successful or not.\n     * <p>\n     * Handling of callback exceptions needs to be added for the case that the calling fails\n     * due to the app not being authorized or type not being supported.\n     * the fail reason includes:\n     * 1. The app hasn't been granted the scopes.\n     * 2. This type is not supported so far.\n     *\n     * @param taskResult Task<Void> result.\n     */\n    void onComplete(Task<Void> taskResult);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/utils/AutoRecorderBackgroundService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.utils;\n\nimport static com.huawei.hms.rn.health.kits.autorecorder.utils.AutoRecorderConstants.BACKGROUND_SERVICE_KEY;\n\nimport android.Manifest;\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.app.Service;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.content.res.AssetManager;\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.os.IBinder;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\nimport androidx.core.app.NotificationCompat;\n\nimport com.huawei.hms.hihealth.AutoRecorderController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport java.io.Closeable;\nimport java.io.IOException;\nimport java.io.InputStream;\n\npublic class AutoRecorderBackgroundService extends Service {\n\n    private static final String TAG = AutoRecorderBackgroundService.class.getSimpleName();\n\n    private static final String NOTIFICATION_CHANNEL_ID = \"hms-health\";\n\n    // HMS Health AutoRecorderController\n    private AutoRecorderController autoRecorderController;\n\n    private Context context;\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        context = this;\n        initAutoRecorderController();\n        Log.i(TAG, \"service is created.\");\n    }\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n        // Invoke the real-time callback interface of the HealthKit.\n        getRemoteService(intent.getParcelableExtra(\"DataType\"));\n        // Binding a notification bar\n        getNotification(intent.getExtras());\n        return super.onStartCommand(intent, flags, startId);\n    }\n\n    /**\n     * init AutoRecorderController\n     */\n    private void initAutoRecorderController() {\n        autoRecorderController = HuaweiHiHealth.getAutoRecorderController(context);\n    }\n\n    /**\n     * Bind the service to the notification bar so that the service can be changed to a foreground service.\n     */\n    private void getNotification(Bundle bundle) {\n        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, \"HmsHealth\",\n                NotificationManager.IMPORTANCE_DEFAULT);\n            notificationManager.createNotificationChannel(channel);\n        }\n        PackageManager pm = context.getPackageManager();\n        Intent notificationIntent = pm.getLaunchIntentForPackage(context.getPackageName());\n        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);\n        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context,\n            NOTIFICATION_CHANNEL_ID).setWhen(System.currentTimeMillis())\n            .setPriority(NotificationCompat.PRIORITY_MAX)\n            .setSmallIcon(configSmallIcon(bundle, context))\n            .setContentTitle(getBundleString(bundle, \"title\"))\n            .setContentText(getBundleString(bundle, \"text\"))\n            .setContentIntent(pendingIntent)\n            .setUsesChronometer(getBundleBoolean(bundle, \"chronometer\"))\n            .setCategory(NotificationCompat.CATEGORY_SERVICE)\n            .setOngoing(true);\n\n        if (hasValue(bundle, \"ticker\")) {\n            notificationBuilder.setTicker(getBundleString(bundle, \"ticker\"));\n        }\n        if (hasValue(bundle, \"subText\")) {\n            notificationBuilder.setSubText(getBundleString(bundle, \"subText\"));\n        }\n\n        if (hasValue(bundle, \"largeIcon\")) {\n            notificationBuilder.setLargeIcon(getIconFromAsset(getBundleString(bundle, \"largeIcon\")));\n        }\n        Notification notification = notificationBuilder.build();\n        notification.flags = Notification.FLAG_ONGOING_EVENT;\n        startForeground(1, notification);\n\n    }\n\n    /**\n     * Callback Interface for Starting the Total Step Count\n     */\n    private void getRemoteService(DataType datatype) {\n        if (autoRecorderController == null) {\n            initAutoRecorderController();\n        }\n        // Start recording real-time steps.\n        autoRecorderController.startRecord(datatype, samplePoint -> {\n            // The step count, time, and type data reported by the pedometer is called back to the app through\n            // samplePoint.\n            Intent intent = new Intent();\n            intent.putExtra(\"SamplePoint\", samplePoint);\n            intent.setAction(BACKGROUND_SERVICE_KEY);\n            // Transmits service data to activities through broadcast.\n            sendBroadcast(intent, Manifest.permission.FOREGROUND_SERVICE);\n\n        }).addOnSuccessListener(aVoid -> {\n            Log.i(TAG, \"record steps success... \");\n            HMSLogger.getInstance(context).sendSingleEvent(\"HmsAutoRecorderController.startRecord\");\n\n        }).addOnFailureListener(e -> Log.i(TAG, \"report steps failed... \"));\n    }\n\n    private Bitmap getIconFromAsset(String name) {\n        AssetManager assetManager = getAssets();\n        InputStream inputStream = null;\n        Bitmap bitmap;\n        try {\n            inputStream = assetManager.open(name);\n            bitmap = BitmapFactory.decodeStream(inputStream);\n            inputStream.close();\n        } catch (IOException ignored) {\n            bitmap = null;\n        } finally {\n            closeStream(inputStream);\n        }\n\n        return bitmap;\n    }\n\n    private void closeStream(Closeable stream) {\n        try{\n            if(stream != null){\n                stream.close();\n            }\n        }catch(IOException e){\n            Log.e(TAG, \"There is a problem with closing the input stream\");\n        }\n    }\n\n    private static String getBundleString(Bundle bundle, String key) {\n        if (bundle != null) {\n            return bundle.getString(key);\n        }\n        return \"\";\n    }\n\n    private static boolean getBundleBoolean(Bundle bundle, String key) {\n        if (bundle != null) {\n            return bundle.getBoolean(key);\n        }\n        return false;\n    }\n\n    private static boolean hasValue(Bundle bundle, String key) {\n        if (bundle != null) {\n            String val = bundle.getString(key);\n            if (val != null) {\n                return !val.isEmpty();\n            }\n        }\n        return false;\n    }\n\n    private static int configSmallIcon(Bundle bundle, Context context) {\n        Resources res = context.getResources();\n        String packageName = context.getPackageName();\n\n        int resourceId;\n        String value = null;\n        if (bundle != null) {\n            value = bundle.getString(\"smallIcon\");\n\n        }\n\n        resourceId = value != null\n            ? res.getIdentifier(value, \"mipmap\", packageName)\n            : res.getIdentifier(\"ic_notification\", \"mipmap\", packageName);\n\n        if (resourceId == 0) {\n            resourceId = res.getIdentifier(\"ic_launcher\", \"mipmap\", packageName);\n\n            if (resourceId == 0) {\n                resourceId = android.R.drawable.ic_dialog_info;\n            }\n        }\n        return resourceId;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/utils/AutoRecorderConstants.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.utils;\n\nimport com.huawei.hms.rn.health.kits.autorecorder.HmsAutoRecorderController;\n\n/**\n * {@link HmsAutoRecorderController} Constant Values.\n *\n * @since v.5.0.1\n */\npublic interface AutoRecorderConstants {\n    /**\n     * Constant Variable Keys That Will be Used in {@link HmsAutoRecorderController}.\n     */\n    String ACCURACY_LEVEL_KEY = \"accuracyLevel\";\n    String SAMPLING_RATE_KEY = \"samplingRate\";\n    String DATA_COLLECTOR_KEY = \"dataCollector\";\n    String BACKGROUND_SERVICE_KEY = \"HealthKitService\";\n\n    /**\n     * {@link HmsAutoRecorderController} OnComplete Event types.\n     */\n    enum OnCompleteEventType {\n        /**\n         * START RECORD TYPES\n         */\n        START_RECORD_BY_TYPE(\"onCompleteStartRecordByType\"),\n        START_RECORD_BY_COLLECTOR(\"onCompleteStartRecordByCollector\"),\n\n        /**\n         * STOP RECORD TYPES\n         */\n        STOP_RECORD_BY_RECORD(\"onCompleteStopRecordByRecord\"),\n        STOP_RECORD_BY_TYPE(\"onCompleteStopRecordByType\"),\n        STOP_RECORD_BY_COLLECTOR(\"onCompleteStopRecordByCollector\");\n\n        private final String value;\n\n        OnCompleteEventType(String value) {\n            this.value = value;\n        }\n\n        public String getValue() {\n            return value;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/viewmodel/AutoRecorderService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.viewmodel;\n\nimport com.huawei.hms.hihealth.AutoRecorderController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.rn.health.kits.autorecorder.listener.TaskVoidResultListener;\n\n/**\n * Blueprint of {@link AutoRecorderViewModel}.\n *\n * @since v.5.0.1\n */\npublic interface AutoRecorderService {\n    /**\n     * Record data via DataType supported by Huawei.\n     *\n     * @param autoRecorderController AutoRecorderController instance.\n     * @param dataType DataType instance.\n     * @param listener AutoRecorderTaskResultListener instance.\n     */\n    void startRecord(final AutoRecorderController autoRecorderController, final DataType dataType,\n        final TaskVoidResultListener listener);\n\n    /**\n     * Stop recording by specifying the data type.\n     *\n     * @param autoRecorderController AutoRecorderController instance.\n     * @param dataType DataType instance.\n     * @param listener AutoRecorderTaskResultListener instance.\n     */\n    void stopRecord(final AutoRecorderController autoRecorderController, final DataType dataType,\n        final TaskVoidResultListener listener);\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/autorecorder/viewmodel/AutoRecorderViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.autorecorder.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hms.hihealth.AutoRecorderController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.options.OnSamplePointListener;\nimport com.huawei.hms.rn.health.kits.autorecorder.listener.TaskVoidResultListener;\n\n/**\n * All the tasks for {@link AutoRecorderController} methods\n * are used in {@link AutoRecorderViewModel} class.\n *\n * @since v.5.0.1\n */\npublic class AutoRecorderViewModel implements AutoRecorderService {\n\n    private static final String TAG = AutoRecorderViewModel.class.getSimpleName();\n\n    /**\n     * Record data via DataType supported by Huawei.\n     *\n     * @param autoRecorderController AutoRecorderController instance.\n     * @param dataType DataType instance.\n     * @param listener AutoRecorderTaskResultListener instance.\n     */\n    @Override\n    public void startRecord(final AutoRecorderController autoRecorderController, final DataType dataType,\n        final TaskVoidResultListener listener) {\n        Log.i(TAG, \"call startRecordByType\");\n\n        OnSamplePointListener onSamplePointListener = samplePoint -> Log.i(TAG, samplePoint.toString());\n\n        // Calling the autoRecorderController to startRecord by DataType is an asynchronous operation.\n        autoRecorderController.startRecord(dataType, onSamplePointListener).addOnCompleteListener(taskResult -> {\n            // The fail reason includes:\n            //  1.the app hasn't been granted the scopes\n            //  2.this type is not supported so far\n            Log.i(TAG, \"startRecordByType onComplete\");\n            listener.onComplete(taskResult);\n        }).addOnSuccessListener(result -> {\n            Log.i(TAG, \"startRecordByType success\");\n            listener.onSuccess(result);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"startRecordByType error\");\n            listener.onFail(error);\n        });\n    }\n\n    /**\n     * Stop recording by specifying the data type.\n     *\n     * @param autoRecorderController AutoRecorderController instance.\n     * @param dataType DataType instance.\n     * @param listener AutoRecorderTaskResultListener instance.\n     */\n    @Override\n    public void stopRecord(final AutoRecorderController autoRecorderController, final DataType dataType,\n        final TaskVoidResultListener listener) {\n        Log.i(TAG, \"call stopRecordByType\");\n\n        OnSamplePointListener onSamplePointListener = samplePoint -> {\n            // Nothing will happen here\n        };\n        // Calling the autoRecorderController to stopRecord by DataType is an asynchronous operation.\n        autoRecorderController.stopRecord(dataType, onSamplePointListener).addOnCompleteListener(taskResult -> {\n            // The fail reason includes:\n            //  1.the app hasn't been granted the scopes\n            //  2.this type is not supported so far\n            Log.i(TAG, \"stopRecordByType onComplete\");\n            listener.onComplete(taskResult);\n        }).addOnSuccessListener(result -> {\n            Log.i(TAG, \"stopRecordByType success\");\n            listener.onSuccess(result);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"stopRecordByType error\");\n            listener.onFail(error);\n        });\n    }\n}\n\n\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/consents/HmsConsentsController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.consents;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.ScopeLangItem;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.MapUtils;\nimport com.huawei.hms.rn.health.foundation.view.BaseController;\nimport com.huawei.hms.rn.health.kits.consents.viewmodel.ConsentsService;\nimport com.huawei.hms.rn.health.kits.consents.viewmodel.ConsentsViewModel;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\nimport java.util.List;\n\npublic class HmsConsentsController extends BaseController {\n\n    private static final String TAG = HmsConsentsController.class.getSimpleName();\n\n    // Internal context object\n    private final ReactApplicationContext reactContext;\n\n    // ViewModel instance to reach SettingController tasks\n    private ConsentsService consentsViewModel;\n\n    // Huawei Account authentication and identification information\n\n    private HMSLogger logger;\n\n    public HmsConsentsController(@NonNull ReactApplicationContext reactContext) {\n        super(TAG, reactContext);\n        this.reactContext = reactContext;\n        consentsViewModel = new ConsentsViewModel();\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    /**\n     * Queries the list of permissions granted to your app.\n     *\n     * @param language Language code. If the specified value is invalid, \"en-us\" will be used.\n     * @param appId ID of your app.\n     * @param promise React promise Object\n     */\n    @ReactMethod\n    public void get(String language, String appId, Promise promise) {\n        String logName = \"HmsConsentsController.get\";\n        logger.startMethodExecutionTimer(logName);\n        consentsViewModel.get(HuaweiHiHealth.getConsentsController(reactContext), language, appId,\n            new ResultHelper<>(ScopeLangItem.class, promise, logger, logName));\n    }\n\n    /**\n     * Revokes certain Health Kit related permissions granted to your app.\n     *\n     * @param appId ID of your app.\n     * @param scopeArray List of Health Kit related permissions to be revoked. The value is the key value of url2Desc in ScopeLangItem.\n     * @param promise React Promise Object\n     */\n    @ReactMethod\n    public void revoke(String appId, ReadableArray scopeArray, Promise promise) {\n        String logName = \"HmsConsentsController.revoke\";\n        logger.startMethodExecutionTimer(logName);\n\n        List<String> scopeList = null;\n        if (scopeArray != null) {\n            scopeList = MapUtils.toStringList(scopeArray);\n        }\n\n        consentsViewModel.revoke(HuaweiHiHealth.getConsentsController(reactContext), appId, scopeList,\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Cancels certain Health Kit related scopes granted to your app.\n     *\n     * @param appId ID of your app.\n     * @param scopeArray List of Health Kit related permissions to be revoked. The value is the key value of url2Desc in ScopeLangItem.\n     * @param promise React Promise Object\n     */\n    @ReactMethod\n    public void cancelAuthorization(String appId, ReadableArray scopeArray, Promise promise) {\n        String logName = \"HmsConsentsController.cancelAuthorization\";\n        logger.startMethodExecutionTimer(logName);\n        List<String> scopeList = null;\n        if (scopeArray != null) {\n            scopeList = MapUtils.toStringList(scopeArray);\n        }\n\n        consentsViewModel.cancelAuthorization(HuaweiHiHealth.getConsentsController(reactContext), appId,\n            scopeList, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Specifies whether to delete user data when all scopes granted to your app are canceled.\n     *\n     * @param deleteData Whether to delete user data.\n     * @param promise React Promise Object\n     */\n    @ReactMethod\n    public void cancelAuthorizationAll(boolean deleteData, Promise promise) {\n        String logName = \"HmsConsentsController.cancelAuthorizationAll\";\n        logger.startMethodExecutionTimer(logName);\n\n        consentsViewModel.cancelAuthorizationAll(HuaweiHiHealth.getConsentsController(reactContext),\n            deleteData, new VoidResultHelper(promise, logger, logName));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/consents/viewmodel/ConsentsService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.consents.viewmodel;\n\nimport com.huawei.hms.hihealth.ConsentsController;\nimport com.huawei.hms.hihealth.data.ScopeLangItem;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\n\nimport java.util.List;\n\npublic interface ConsentsService {\n\n    /**\n     * This methods gets will return a list of scopes that is given to the application.\n     *\n     * @param consentsController ConsentsController instance\n     * @param language Language string. If it's not specified the default is 'en-us'\n     * @param appId ID of your app (not the package name)\n     * @param scopeLangItemResultHelper Helper class for returning result.\n     */\n    void get(ConsentsController consentsController, String language, String appId,\n        ResultListener<ScopeLangItem> scopeLangItemResultHelper);\n\n    /**\n     * Revokes certain Health Kit related permissions granted to your app.\n     *\n     * @param consentsController ConsentsController instance\n     * @param appId Id of your app (not the package name)\n     * @param scopeList List of the scopes that are wanted to be removed. If it's null, revokes every scope.\n     * @param voidResultHelper Helper class for returning result.\n     */\n    void revoke(ConsentsController consentsController, String appId, List<String> scopeList,\n        VoidResultHelper voidResultHelper);\n\n    /**\n     * Cancels certain Health Kit related scopes granted to your app.\n     *\n     * @param consentsController ConsentsController instance\n     * @param appId ID of your app.\n     * @param scopeList List of Health Kit related permissions to be revoked. The value is the key value of url2Desc in ScopeLangItem.\n     * @param @param listener Helper class for returning result.\n     */\n    public void cancelAuthorization(ConsentsController consentsController, String appId, List<String> scopeList,\n        VoidResultHelper listener);\n\n    /**\n     * Specifies whether to delete user data when all scopes granted to your app are canceled.\n     *\n     * @param consentsController ConsentsController instance\n     * @param deleteData Whether to delete user data.\n     * @param voidResultHelper Helper class for returning result.\n     */\n    void cancelAuthorizationAll(ConsentsController consentsController, boolean deleteData,\n        VoidResultHelper voidResultHelper);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/consents/viewmodel/ConsentsViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.consents.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hms.hihealth.ConsentsController;\nimport com.huawei.hms.hihealth.data.ScopeLangItem;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\n\nimport java.util.List;\n\npublic class ConsentsViewModel implements ConsentsService {\n    private static final String TAG = ConsentsViewModel.class.getSimpleName();\n\n    /**\n     * This methods gets will return a list of scopes that is given to the application.\n     *\n     * @param consentsController ConsentsController instance\n     * @param language Language string. If it's not specified the default is 'en-us'\n     * @param appId ID of your app (not the package name)\n     * @param listener Helper class for returning result.\n     */\n    @Override\n    public void get(ConsentsController consentsController, String language, String appId,\n        ResultListener<ScopeLangItem> listener) {\n        Log.i(TAG, \"call ConsentsController.get\");\n        consentsController.get(language, appId)\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n\n    /**\n     * Revokes certain Health Kit related permissions granted to your app.\n     *\n     * @param consentsController ConsentsController instance\n     * @param appId Id of your app (not the package name)\n     * @param scopeList List of the scopes that are wanted to be removed. If it's null, revokes every scope.\n     * @param listener Helper class for returning result.\n     */\n    @Override\n    public void revoke(ConsentsController consentsController, String appId, List<String> scopeList,\n        VoidResultHelper listener) {\n        Log.i(TAG, \"call ConsentsController.revoke\");\n\n        if (scopeList == null) {\n            consentsController.revoke(appId)\n                .addOnSuccessListener(listener::onSuccess)\n                .addOnFailureListener(listener::onFail);\n        } else {\n            consentsController.revoke(appId, scopeList)\n                .addOnSuccessListener(listener::onSuccess)\n                .addOnFailureListener(listener::onFail);\n        }\n\n    }\n\n    /**\n     * Cancels certain Health Kit related scopes granted to your app.\n     *\n     * @param consentsController ConsentsController instance\n     * @param appId ID of your app.\n     * @param scopeList List of Health Kit related permissions to be revoked. The value is the key value of url2Desc in ScopeLangItem.\n     * @param @param listener Helper class for returning result.\n     */\n    @Override\n    public void cancelAuthorization(ConsentsController consentsController, String appId, List<String> scopeList,\n        VoidResultHelper listener) {\n        Log.i(TAG, \"call ConsentsController.cancelAuthorization\");\n\n        consentsController.cancelAuthorization(appId, scopeList)\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n\n    }\n\n    /**\n     * Specifies whether to delete user data when all scopes granted to your app are canceled.\n     *\n     * @param consentsController ConsentsController instance\n     * @param deleteData Whether to delete user data.\n     * @param listener Helper class for returning result.\n     */\n    @Override\n    public void cancelAuthorizationAll(ConsentsController consentsController, boolean deleteData,\n        VoidResultHelper listener) {\n        Log.i(TAG, \"call ConsentsController.cancelAuthorizationAll\");\n\n        consentsController.cancelAuthorization(deleteData)\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/HmsDataController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.createWritableMapWithSuccessStatus;\n\nimport android.app.PendingIntent;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.hihealth.options.ReadOptions;\nimport com.huawei.hms.hihealth.options.UpdateOptions;\nimport com.huawei.hms.hihealth.result.ReadReply;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.foundation.view.BaseController;\nimport com.huawei.hms.rn.health.foundation.view.BaseProtocol;\nimport com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerUtils;\nimport com.huawei.hms.rn.health.kits.datacontroller.viewmodel.DataService;\nimport com.huawei.hms.rn.health.kits.datacontroller.viewmodel.DataViewModel;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * {@link HmsDataController} class is a module that refers to {@link DataController}\n * <p>\n * DataController is used to manage fitness and health data (DataType, HealthDataTypes, and SportDataTypes).\n * The related operations include adding, deleting, modifying, and querying of the data.\n * </br>\n * In addition, DataController allows for feature-based query on the summary data of the current day,\n * as well as the summary data on the local device of the current day.\n * Listeners can be registered for updates of six data types:\n * 1. Basic metabolic rate per day (unit: kcal): HmsDataController.DT_INSTANTANEOUS_CALORIES_BMR\n * 2. Body fat rate: HmsDataController.DT_INSTANTANEOUS_BODY_FAT_RATE\n * 3. Height (unit: meter): HmsDataController.DT_INSTANTANEOUS_HEIGHT\n * 4. Water taken over a single drink (unit: liter): HmsDataController.DT_INSTANTANEOUS_HYDRATE\n * 5. Nutrient intake over a meal: HmsDataController.DT_INSTANTANEOUS_NUTRITION_FACTS\n * 6. Weight (unit: kg): HmsDataController.DT_INSTANTANEOUS_BODY_WEIGHT\n *\n * @since v.5.0.1\n */\npublic class HmsDataController extends BaseController implements BaseProtocol.Event {\n\n    private static final String TAG = HmsDataController.class.getSimpleName();\n\n    // PendingIntent, required when registering or unregistering a listener within the data controller\n    private PendingIntent pendingIntent;\n\n    // ViewModel instance to reach DataController tasks\n    private final DataService dataViewModel;\n\n    // Internal context object\n    private final ReactContext reactContext;\n\n    // Object of controller for fitness and health data, providing APIs for read/write, batch read/write, and listening\n    private DataController dataController;\n    private List<DataType> dataTypeList;\n\n    private final HMSLogger logger;\n\n    /**\n     * Initialization\n     */\n    public HmsDataController(ReactApplicationContext reactContext) {\n        super(TAG, reactContext);\n        this.reactContext = reactContext;\n        dataViewModel = new DataViewModel();\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    /**\n     * Initialize a data controller object.\n     * <p>\n     * Note:  Before using {@link HmsDataController} methods,\n     * always initDataController method must be called with requested dataTypes.\n     * </p>\n     *\n     * @param promise In the success scenario, promise is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void initDataController(final Promise promise) {\n        String logName = \"HmsDataController.initDataController\";\n        logger.startMethodExecutionTimer(logName);\n        this.dataController = HuaweiHiHealth.getDataController(reactContext);\n        promise.resolve(createWritableMapWithSuccessStatus(true));\n        logger.sendSingleEvent(logName);\n    }\n\n    /**\n     * Insert the user's fitness and health data into the Health platform.\n     *\n     * @param dataCollectorMap Refers to {@link DataCollector} instance.\n     * @param sampleSetMapArr Refers to List<Object> sampleSetList instance.\n     * @param promise In the success scenario, Void is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void insert(final ReadableMap dataCollectorMap, final ReadableArray sampleSetMapArr, final Promise promise) {\n        String logName = \"HmsDataController.insert\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n        // Build a DataCollector object.\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorMap, reactContext);\n\n        // Create a sampling dataset set based on the data collector.\n        final SampleSet sampleSet = Utils.INSTANCE.toSampleSet(sampleSetMapArr, dataCollector, promise);\n\n        dataViewModel.insertData(dataController, sampleSet, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Updating the User's Fitness and Health Data\n     * </br>\n     * 1. Build the condition for data update: a DataCollector object.\n     * 2. Build the sampling data set for the update: create a sampling data set for the update based on the data collector.\n     * 3. Build the start time, end time, and incremental step count for a DataType sampling point for the update.\n     * 4. Build a DataType sampling point for the update\n     * 5. Add an updated DataType sampling point to the sampling data set for the update. You can add more updated sampling points to the sampling data set for the update.\n     * 6. Build a parameter object for the update.\n     * 7. Use the specified parameter object for the update to call the data controller to modify the sampling dataset.\n     *\n     * @param dataCollectorMap Refers to {@link DataCollector} instance.\n     * @param sampleSetMapArr Refers to List<Object> sampleSetList instance.\n     * @param updateOptionsReadableMap Refers to {@link UpdateOptions} instance.\n     * @param promise In the success scenario, Void is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void update(final ReadableMap dataCollectorMap, final ReadableArray sampleSetMapArr,\n        final ReadableMap updateOptionsReadableMap, final Promise promise) {\n        String logName = \"HmsDataController.update\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n        // Build a DataCollector object.\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorMap, reactContext);\n\n        // Create a sampling data set based on the data collector.\n        final SampleSet sampleSet = Utils.INSTANCE.toSampleSet(sampleSetMapArr, dataCollector, promise);\n\n        // Build a parameter object for the update.\n        // Note: (1) The start time of the modified object updateOptions cannot be greater than the minimum\n        // value of the start time of all sample data points in the modified data sample set\n        // (2) The end time of the modified object updateOptions cannot be less than the maximum value of the\n        // end time of all sample data points in the modified data sample set\n        UpdateOptions updateOptions = DataControllerUtils.INSTANCE.toUpdateOptions(updateOptionsReadableMap, sampleSet,\n            promise);\n\n        dataViewModel.updateData(dataController, updateOptions, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Querying the User's Fitness and Health Data\n     * <p>\n     * Note: To read historical data from the Health platform,\n     * for example, to read the number of steps taken within a period of time, you can specify the read conditions in ReadOptions.\n     * Furthermore, you can specify the data collector, data type, and detailed data.\n     * If data is read, the data set will be returned.\n     * </p>\n     *\n     * @param dataCollectorMap Refers to {@link DataCollector} instance.\n     * @param dateMap Refers to to get startDate and EndDate.\n     * @param promise In the success scenario, {@link ReadReply} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void read(final ReadableMap dataCollectorMap, final ReadableMap dateMap, final ReadableMap groupingMap,\n        final Promise promise) {\n        String logName = \"HmsDataController.read\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n        // Build a DataCollector object.\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorMap, reactContext);\n\n        // Build the start time, end time, and incremental step count for a DT_CONTINUOUS_STEPS_DELTA sampling point.\n        // Build the condition-based query object\n        ReadOptions readOptions = DataControllerUtils.INSTANCE.toReadOptions(dataCollector, dateMap, groupingMap,\n            promise);\n\n        dataViewModel.readData(dataController, readOptions,\n            new ResultHelper<>(ReadReply.class, promise, logger, logName));\n    }\n\n    /**\n     * Querying the User's Fitness and Health Data\n     * <p>\n     * Note: To read historical data from the Health platform,\n     * for example, to read the number of steps taken within a period of time, you can specify the read conditions in ReadOptions.\n     * Furthermore, you can specify the data collector, data type, and detailed data.\n     * If data is read, the data set will be returned.\n     * </p>\n     *\n     * @param dataTypeArray Refers to {@link List<DataType>} instance.\n     * @param dateMap Refers to to get startDate and EndDate.\n     * @param promise In the success scenario, {@link ReadReply} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void readByDataType(final ReadableArray dataTypeArray, final ReadableMap dateMap,\n        final ReadableMap groupingMap, final Promise promise) {\n        String logName = \"HmsDataController.readByDataType\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n\n        List<DataType> dataTypes = Utils.INSTANCE.toDataTypeList(dataTypeArray);\n        // Build the start time, end time, and incremental step count for a DT_CONTINUOUS_STEPS_DELTA sampling point.\n        // Build the condition-based query object\n        ReadOptions readOptions = DataControllerUtils.INSTANCE.toReadOptions(dataTypes, dateMap, groupingMap, promise);\n\n        dataViewModel.readData(dataController, readOptions,\n            new ResultHelper<>(ReadReply.class, promise, logger, logName));\n    }\n\n    /**\n     * Deleting the User's Fitness and Health Data\n     *\n     * <p>\n     * Note: Only historical data that has been inserted by the current app can be deleted from the Health platform.     * </p>\n     *\n     * @param dataCollectorMap Refers to {@link DataCollector} instance.\n     * @param dateMap Refers to to get startDate and EndDate.\n     * @param promise In the success scenario, Void is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void delete(final ReadableMap dataCollectorMap, final ReadableMap dateMap, final Promise promise) {\n        String logName = \"HmsDataController.delete\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n        // Build the condition for data deletion: a DataCollector object.\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorMap, reactContext);\n        // Build the time range for the deletion: start time and end time.\n        // Build a parameter object as the conditions for the deletion.\n        DeleteOptions deleteOptions = DataControllerUtils.INSTANCE.toDeleteOptions(dataCollector, dateMap, promise);\n\n        dataViewModel.deleteData(dataController, deleteOptions, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Deleting the User's Fitness and Health Data\n     *\n     * <p>\n     * Note: Only historical data that has been inserted by the current app can be deleted from the Health platform.     * </p>\n     *\n     * @param dataTypeArray Refers to {@link List<DataType>} instance.\n     * @param dateMap Refers to to get startDate and EndDate.\n     * @param promise In the success scenario, Void is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void deleteByDataType(final ReadableArray dataTypeArray, final ReadableMap dateMap, final Promise promise) {\n        String logName = \"HmsDataController.deleteByDataType\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n\n        List<DataType> dataTypes = Utils.INSTANCE.toDataTypeList(dataTypeArray);\n        // Build the time range for the deletion: start time and end time.\n        // Build a parameter object as the conditions for the deletion.\n        DeleteOptions deleteOptions = DataControllerUtils.INSTANCE.toDeleteOptions(dataTypes, dateMap, promise);\n\n        dataViewModel.deleteData(dataController, deleteOptions, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataTypeMap Refers to {@link DataType} instance.\n     * @param promise In the success scenario, {@link SampleSet} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void readTodaySummation(final ReadableMap dataTypeMap, final Promise promise) {\n        String logName = \"HmsDataController.readTodaySummation\";\n        logger.startMethodExecutionTimer(logName);\n\ncheckDataController();\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeMap);\n\n        // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n        // the summary data of this data type of the current day.\n        dataViewModel.readToday(dataController, dataType,\n            new ResultHelper<>(SampleSet.class, promise, logger, logName));\n    }\n\n    @ReactMethod\n    public void readTodaySummationList(final ReadableMap dataTypeMap, final Promise promise) {\n        String logName = \"HmsDataController.readTodaySummation\";\n        DataType dataType = null;\n        ReadableArray actionArray = null;\n        dataTypeList= new ArrayList<>();\n        logger.startMethodExecutionTimer(logName);\n\n\n        if(Utils.INSTANCE.hasValidKey(dataTypeMap,\"dataType\", ReadableType.Array)){\n            actionArray=dataTypeMap.getArray(\"dataType\");\n            for (int i=0 ; i<actionArray.size(); i++){\n                dataType = Utils.INSTANCE.toDataType(actionArray.getString(i));\n                dataTypeList.add(dataType);\n            }\n        }\n\n        // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n        // the summary data of this data type of the current day.\n        dataViewModel.readTodayList(dataController, dataTypeList,\n            new ResultHelper<>(List.class, promise, logger, logName));\n    }\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataTypeMap Refers to {@link DataType} instance.\n     * @param startTime An 8-digit integer in the format of YYYYMMDD, for example, 20200803.\n     * @param endTime An 8-digit integer in the format of YYYYMMDD, for example, 20200903.\n     * @param promise In the success scenario, {@link SampleSet} instance is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void readDailySummation(final ReadableMap dataTypeMap, int startTime, int endTime, Promise promise) {\n        String logName = \"HmsDataController.readDailySummation\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkDataController();\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeMap);\n\n        dataViewModel.readDailySummation(dataController, dataType, startTime, endTime,\n            new ResultHelper<>(SampleSet.class, promise, logger, logName));\n    }\n    @ReactMethod\n    public void readDailySummationList(final ReadableMap dataTypeMap, int startTime, int endTime, Promise promise) {\n        String logName = \"HmsDataController.readDailySummationMultiple\";\n        ReadableArray actionArray = null;\n        DataType dataType = null;\n        dataTypeList= new ArrayList<>();\n\n        if(Utils.INSTANCE.hasValidKey(dataTypeMap,\"dataType\", ReadableType.Array)){\n            actionArray=dataTypeMap.getArray(\"dataType\");\n            for (int i=0 ; i<actionArray.size(); i++){\n                dataType = Utils.INSTANCE.toDataType(actionArray.getString(i));\n                dataTypeList.add(dataType);\n            }\n        }\n\n        dataViewModel.readDailySummationList(dataController, dataTypeList, startTime, endTime,\n            new ResultHelper<>(List.class, promise, logger, logName));\n    }\n\n    /**\n     * Clearing the User's Fitness and Health Data from the Device and Cloud\n     *\n     * @param promise In the success scenario, Void is returned , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void clearAll(final Promise promise) {\n        String logName = \"HmsDataController.clearAll\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkDataController();\n        dataViewModel.clearTaskData(dataController, new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Sends event to RN Side.\n     *\n     * @param reactContext ReactContext instance.\n     * @param eventName Event name that will be available via {@link HmsDataController}.\n     * @param params Event params.\n     */\n    @Override\n    public void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        String eventTitle = eventName == null ? \"registerModifyDataMonitor\" : eventName;\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventTitle, params);\n    }\n\n    /* Private Methods */\n\n    /**\n     * Initialize variable of dataController with no dataType params,\n     * in case it is null.\n     */\n    private void initDataController() {\n        this.dataController = HuaweiHiHealth.getDataController(reactContext);\n    }\n\n    /**\n     * Check whether dataController is initialized, or not.\n     */\n    private void checkDataController() {\n        if (this.dataController == null) {\n            initDataController();\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/model/OptionModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller.model;\n\nimport com.huawei.hms.rn.health.kits.datacontroller.HmsDataController;\n\nimport java.util.Date;\nimport java.util.concurrent.TimeUnit;\n\n/**\n * {@link OptionModel} is used among creating UpdateOptions, DeleteOptions, ReadOptions operations,\n * In {@link HmsDataController}\n *\n * @since v.5.0.1\n */\npublic class OptionModel {\n    private Date startDate;\n\n    private Date endDate;\n\n    private TimeUnit timeUnit;\n\n    /**\n     * Initialization\n     */\n    public OptionModel(Date startDate, Date endDate, TimeUnit timeUnit) {\n        this.startDate = new Date(startDate.getTime());\n        this.endDate = new Date(endDate.getTime());\n        this.timeUnit = timeUnit;\n    }\n\n    /* Getter Methods */\n\n    public Date getStartDate() {\n        return new Date(startDate.getTime());\n    }\n\n    public Date getEndDate() {\n        return new Date(endDate.getTime());\n    }\n\n    public TimeUnit getTimeUnit() {\n        return timeUnit;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/util/DataControllerConstants.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller.util;\n\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.DATA_COLLECTOR_CONSTANTS;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.DATA_TYPES_MAP;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.FIELD_TYPES_MAP;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.FIELD_VALUE_ENUMS_MAP;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.SLEEP_STATE_CONSTANTS;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.TIME_UNITS_MAP;\nimport com.huawei.hms.rn.health.kits.datacontroller.HmsDataController;\n\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * {@link HmsDataController} Constant Values.\n *\n * @since v.5.0.1\n */\npublic interface DataControllerConstants {\n\n    /**\n     * Constant Variable Keys That will be Used in {@link HmsDataController}.\n     */\n    String DATA_STREAM_NAME_KEY = \"dataStreamName\";\n    String DEVICE_ID_KEY = \"deviceId\";\n    String DEVICE_INFO_KEY = \"deviceInfo\";\n    String DATA_COLLECTOR_NAME_KEY = \"dataCollectorName\";\n    String IS_LOCALIZED_KEY = \"isLocalized\";\n    String DATA_GENERATE_TYPE_KEY = \"dataGenerateType\";\n    String GROUP_BY_TIME_KEY = \"groupByTime\";\n\n    /**\n     * whole base constants variables as Map\n     **/\n    Map<String, Object> DATA_CONSTANTS_MAP = initMap();\n\n    /**\n     * Initializes Constants map.\n     *\n     * @return Map<String, Object> Constants map.\n     */\n    static Map<String, Object> initMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n\n        constantMap.putAll(FIELD_TYPES_MAP);\n        constantMap.putAll(TIME_UNITS_MAP);\n        constantMap.putAll(DATA_TYPES_MAP);\n        constantMap.putAll(FIELD_VALUE_ENUMS_MAP);\n        constantMap.putAll(SLEEP_STATE_CONSTANTS);\n        constantMap.putAll(DATA_COLLECTOR_CONSTANTS);\n\n        constantMap.put(\"AUTO_RECORDER_POINT_LISTENER\", \"onSamplePointListener\");\n\n        return Collections.unmodifiableMap(constantMap);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/util/DataControllerUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller.util;\n\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.TIME_UNIT_KEY;\nimport static com.huawei.hms.rn.health.kits.datacontroller.util.DataControllerConstants.GROUP_BY_TIME_KEY;\n\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.hihealth.options.ReadOptions;\nimport com.huawei.hms.hihealth.options.UpdateOptions;\nimport com.huawei.hms.rn.health.foundation.constant.Constants;\nimport com.huawei.hms.rn.health.foundation.util.ExceptionHandler;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.kits.datacontroller.HmsDataController;\nimport com.huawei.hms.rn.health.kits.datacontroller.model.OptionModel;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.Date;\nimport java.util.List;\nimport java.util.concurrent.TimeUnit;\n\nimport javax.annotation.Nullable;\n\n/**\n * DataControllerUtils exposes a set of helper methods for working with\n * {@link HmsDataController}.\n *\n * @since v.5.0.1\n */\npublic enum DataControllerUtils {\n    INSTANCE;\n\n\n    /**\n     * Converts into {@link UpdateOptions} instance.\n     */\n    @Nullable\n    public synchronized UpdateOptions toUpdateOptions(final ReadableMap dateReadableMap, final SampleSet sampleSet,\n        final Promise promise) {\n        // Build the start time, end time, and incremental step count for a DT_CONTINUOUS_STEPS_DELTA sampling point.\n        OptionModel optionModel = createOptionModel(dateReadableMap, promise);\n\n        // Build a parameter object for the update.\n        // Note: (1) The start time of the modified object updateOptions cannot be greater than the minimum\n        // value of the start time of all sample data points in the modified data sample set\n        // (2) The end time of the modified object updateOptions cannot be less than the maximum value of the\n        // end time of all sample data points in the modified data sample set\n        return new UpdateOptions.Builder().setTimeInterval(optionModel.getStartDate().getTime(),\n            optionModel.getEndDate().getTime(), optionModel.getTimeUnit()).setSampleSet(sampleSet).build();\n    }\n\n    /**\n     * Converts into {@link DeleteOptions} instance.\n     */\n    @Nullable\n    public synchronized DeleteOptions toDeleteOptions(final DataCollector dataCollector,\n        final ReadableMap dateReadableMap, final Promise promise) {\n        // Build the time range for the deletion: start time and end time.\n        OptionModel optionModel = createOptionModel(dateReadableMap, promise);\n\n        // Build a parameter object as the conditions for the deletion.\n        return new DeleteOptions.Builder().addDataCollector(dataCollector)\n            .setTimeInterval(optionModel.getStartDate().getTime(), optionModel.getEndDate().getTime(),\n                optionModel.getTimeUnit())\n            .build();\n    }\n\n    /**\n     * Converts into {@link DeleteOptions} instance.\n     */\n    @Nullable\n    public synchronized DeleteOptions toDeleteOptions(final List<DataType> dataTypes, final ReadableMap dateReadableMap,\n        final Promise promise) {\n        // Build the time range for the deletion: start time and end time.\n        OptionModel optionModel = createOptionModel(dateReadableMap, promise);\n\n        // Build a parameter object as the conditions for the deletion.\n        DeleteOptions.Builder options = new DeleteOptions.Builder().setTimeInterval(\n            optionModel.getStartDate().getTime(), optionModel.getEndDate().getTime(), optionModel.getTimeUnit());\n\n        for (DataType dataType : dataTypes) {\n            options.addDataType(dataType);\n        }\n\n        return options.build();\n    }\n\n    /**\n     * Converts into {@link ReadOptions} instance.\n     */\n    @Nullable\n    public synchronized ReadOptions toReadOptions(final DataCollector dataCollector, final ReadableMap dateReadableMap,\n        final ReadableMap groupingMap, final Promise promise) {\n        // Build the time range for the deletion: start time and end time.\n        // Build the start time, end time, and incremental step count for a DT_CONTINUOUS_STEPS_DELTA sampling point.\n        OptionModel optionModel = createOptionModel(dateReadableMap, promise);\n\n        // Build the condition-based query object.\n        ReadOptions.Builder builder = new ReadOptions.Builder().read(dataCollector)\n            .setTimeRange(optionModel.getStartDate().getTime(), optionModel.getEndDate().getTime(),\n                optionModel.getTimeUnit());\n\n        groupingByTime(builder, groupingMap);\n\n        return builder.build();\n    }\n\n    /**\n     * Converts into {@link ReadOptions} instance.\n     */\n    @Nullable\n    public synchronized ReadOptions toReadOptions(final List<DataType> dataTypes, final ReadableMap dateReadableMap,\n        final ReadableMap groupingMap, final Promise promise) {\n        // Build the time range for the deletion: start time and end time.\n        // Build the start time, end time, and incremental step count for a DT_CONTINUOUS_STEPS_DELTA sampling point.\n        OptionModel optionModel = createOptionModel(dateReadableMap, promise);\n\n        // Build the condition-based query object.\n        ReadOptions.Builder builder = new ReadOptions.Builder().setTimeRange(optionModel.getStartDate().getTime(),\n            optionModel.getEndDate().getTime(), optionModel.getTimeUnit());\n\n        for (DataType dataType : dataTypes) {\n            builder.read(dataType);\n        }\n\n        groupingByTime(builder, groupingMap);\n        return builder.build();\n    }\n\n    /* Private Methods */\n\n    /**\n     * Grouping map helper function\n     *\n     * @param builder Builder instance\n     * @param groupingMap ReadableMap\n     */\n    private synchronized void groupingByTime(ReadOptions.Builder builder, ReadableMap groupingMap) {\n        if (groupingMap != null) {\n            if (groupingMap.hasKey(GROUP_BY_TIME_KEY)) {\n                ReadableMap durationMap = groupingMap.getMap(GROUP_BY_TIME_KEY);\n                if (durationMap != null && durationMap.hasKey(\"duration\") && durationMap.hasKey(TIME_UNIT_KEY)) {\n                    int duration = durationMap.getInt(\"duration\");\n                    builder.groupByTime(duration, Utils.INSTANCE.toTimeUnit(durationMap));\n                }\n\n            }\n\n            if (groupingMap.hasKey(\"inputDataType\") && groupingMap.hasKey(\"outputDataType\")) {\n                DataType input = Utils.INSTANCE.toDataType(groupingMap.getString(\"inputDataType\"));\n                DataType output = Utils.INSTANCE.toDataType(groupingMap.getString(\"outputDataType\"));\n                builder.polymerize(input, output);\n            }\n        }\n    }\n\n    /**\n     * Creates {@link OptionModel} instance.\n     */\n    private synchronized OptionModel createOptionModel(final @Nullable ReadableMap dateReadableMap,\n        final Promise promise) {\n        if (dateReadableMap == null) {\n            return new OptionModel(new Date(), new Date(), TimeUnit.MILLISECONDS);\n        }\n        Date startDate = Utils.INSTANCE.toDate(Constants.TimeConstants.START, null, dateReadableMap, promise);\n        Date endDate = Utils.INSTANCE.toDate(Constants.TimeConstants.END, null, dateReadableMap, promise);\n        TimeUnit timeUnit = Utils.INSTANCE.toTimeUnit(dateReadableMap);\n\n        if (startDate == null || endDate == null) {\n            ExceptionHandler.INSTANCE.fail(promise, \"Add Time Parameters.\");\n        }\n\n        return new OptionModel(startDate, endDate, timeUnit);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/viewmodel/DataService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller.viewmodel;\n\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.hihealth.options.ReadOptions;\nimport com.huawei.hms.hihealth.options.UpdateOptions;\nimport com.huawei.hms.hihealth.result.ReadReply;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\nimport java.util.List;\n\n/**\n * Blueprint of {@link DataViewModel}.\n *\n * @since v.5.0.1\n */\npublic interface DataService {\n\n    /**\n     * Insert the user's fitness and health data into the Health platform.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param sampleSet {@link SampleSet} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    void insertData(final DataController dataController, final SampleSet sampleSet,\n        final VoidResultListener voidResultListener);\n\n    /**\n     * Deleting the User's Fitness and Health Data\n     *\n     * <p>\n     * Note: Only historical data that has been inserted by the current app can be deleted from the Health platform.\n     * </p>\n     *\n     * @param dataController {@link DataController} instance.\n     * @param deleteOptions {@link DeleteOptions} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    void deleteData(final DataController dataController, final DeleteOptions deleteOptions,\n        final VoidResultListener voidResultListener);\n\n    /**\n     * Updating the User's Fitness and Health Data\n     * </br>\n     * 1. Build the condition for data update: a DataCollector object.\n     * 2. Build the sampling data set for the update: create a sampling data set for the update based on the data collector.\n     * 3. Build the start time, end time, and incremental step count for a DataType sampling point for the update.\n     * 4. Build a DataType sampling point for the update\n     * 5. Add an updated DataType sampling point to the sampling data set for the update. You can add more updated sampling points to the sampling data set for the update.\n     * 6. Build a parameter object for the update.\n     * 7. Use the specified parameter object for the update to call the data controller to modify the sampling dataset.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param updateOptions {@link UpdateOptions} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    void updateData(final DataController dataController, final UpdateOptions updateOptions,\n        final VoidResultListener voidResultListener);\n\n    /**\n     * Querying the User's Fitness and Health Data\n     * <p>\n     * Note: To read historical data from the Health platform,\n     * for example, to read the number of steps taken within a period of time, you can specify the read conditions in ReadOptions.\n     * Furthermore, you can specify the data collector, data type, and detailed data.\n     * If data is read, the data set will be returned.\n     * </p>\n     *\n     * @param dataController {@link DataController} instance.\n     * @param readOptions {@link ReadOptions} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    void readData(final DataController dataController, final ReadOptions readOptions,\n        final ResultListener<ReadReply> dataResultListener);\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    void readToday(final DataController dataController, final DataType dataType,\n        final ResultListener<SampleSet> dataResultListener);\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    void readTodayList(final DataController dataController, final List<DataType> dataType,\n        final ResultListener<List> dataResultListener);\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User between selected dates.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param startTime An 8-digit integer in the format of YYYYMMDD, for example, 20200803.\n     * @param endTime An 8-digit integer in the format of YYYYMMDD, for example, 20200903.\n     * @param dataResultListener {@link ResultListener } listener.\n     */\n    void readDailySummation(DataController dataController, DataType dataType, int startTime, int endTime,\n        final ResultListener<SampleSet> dataResultListener);\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User between selected dates.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param startTime An 8-digit integer in the format of YYYYMMDD, for example, 20200803.\n     * @param endTime An 8-digit integer in the format of YYYYMMDD, for example, 20200903.\n     * @param dataResultListener {@link ResultListener } listener.\n     */\n    void readDailySummationList(DataController dataController,List <DataType> dataType, int startTime, int endTime,\n        final ResultListener<List> dataResultListener);\n\n    /**\n     * Clearing the User's Fitness and Health Data from the Device and Cloud\n     *\n     * @param dataController {@link DataController} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    void clearTaskData(final DataController dataController, final VoidResultListener voidResultListener);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/datacontroller/viewmodel/DataViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.datacontroller.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.DeleteOptions;\nimport com.huawei.hms.hihealth.options.ReadOptions;\nimport com.huawei.hms.hihealth.options.UpdateOptions;\nimport com.huawei.hms.hihealth.result.ReadReply;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\nimport java.util.List;\n\n/**\n * All the tasks for {@link DataController} methods\n * are used in {@link DataViewModel} class.\n *\n * @since v.5.0.1\n */\npublic class DataViewModel implements DataService {\n\n    private static final String TAG = DataViewModel.class.getSimpleName();\n\n    /**\n     * Insert the user's fitness and health data into the Health platform.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param sampleSet {@link SampleSet} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void insertData(final DataController dataController, final SampleSet sampleSet,\n        final VoidResultListener voidResultListener) {\n        Log.i(TAG, \"call insertData\");\n        /* Call the data controller to insert the sampling dataset into the Health platform. */\n        Task<Void> insertTask = dataController.insert(sampleSet);\n\n        /* Calling the data controller to insert the sampling dataset. */\n        insertTask.addOnSuccessListener(result -> {\n            // Result is void instance\n            Log.i(TAG, \"insertData success\");\n            voidResultListener.onSuccess(result);\n\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"insertData error\");\n            voidResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Deleting the User's Fitness and Health Data\n     *\n     * <p>\n     * Note: Only historical data that has been inserted by the current app can be deleted from the Health platform.\n     * </p>\n     *\n     * @param dataController {@link DataController} instance.\n     * @param deleteOptions {@link DeleteOptions} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void deleteData(final DataController dataController, final DeleteOptions deleteOptions,\n        final VoidResultListener voidResultListener) {\n        Log.i(TAG, \"call deleteData\");\n        /* Use the specified condition deletion object to call the data controller to delete the sampling dataset. */\n        Task<Void> deleteTask = dataController.delete(deleteOptions);\n\n        /*  Calling the data controller to delete the sampling dataset. */\n        deleteTask.addOnSuccessListener(result -> {\n            // Result is void instance\n            Log.i(TAG, \"deleteData success\");\n            voidResultListener.onSuccess(result);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"deleteData error\");\n            voidResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Updating the User's Fitness and Health Data\n     * </br>\n     * 1. Build the condition for data update: a DataCollector object.\n     * 2. Build the sampling data set for the update: create a sampling data set for the update based on the data collector.\n     * 3. Build the start time, end time, and incremental step count for a DataType sampling point for the update.\n     * 4. Build a DataType sampling point for the update\n     * 5. Add an updated DataType sampling point to the sampling data set for the update. You can add more updated sampling points to the sampling data set for the update.\n     * 6. Build a parameter object for the update.\n     * 7. Use the specified parameter object for the update to call the data controller to modify the sampling dataset.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param updateOptions {@link UpdateOptions} instance.\n     * @param voidResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void updateData(final DataController dataController, final UpdateOptions updateOptions,\n        final VoidResultListener voidResultListener) {\n        Log.i(TAG, \"call updateData\");\n        /*  Use the specified parameter object for the update to call the */\n        /*  data controller to modify the sampling dataset. */\n        Task<Void> updateTask = dataController.update(updateOptions);\n\n        /* Calling the data controller to modify the sampling dataset. */\n        updateTask.addOnSuccessListener(result -> {\n            // Result is void instance\n            Log.i(TAG, \"updateData success\");\n            voidResultListener.onSuccess(result);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"updateData error\");\n            voidResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Querying the User's Fitness and Health Data\n     * <p>\n     * Note: To read historical data from the Health platform,\n     * for example, to read the number of steps taken within a period of time, you can specify the read conditions in ReadOptions.\n     * Furthermore, you can specify the data collector, data type, and detailed data.\n     * If data is read, the data set will be returned.\n     * </p>\n     *\n     * @param dataController {@link DataController} instance.\n     * @param readOptions {@link ReadOptions} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void readData(final DataController dataController, final ReadOptions readOptions,\n        final ResultListener<ReadReply> dataResultListener) {\n        Log.i(TAG, \"call readData\");\n        /* Use the specified condition query object to call the data controller to query the sampling dataset. */\n        Task<ReadReply> readReplyTask = dataController.read(readOptions);\n\n        /*  Calling the data controller to delete the sampling dataset. */\n        readReplyTask.addOnSuccessListener(readReply -> {\n            // Result is ReadReply instance\n            Log.i(TAG, \"readData success\");\n            dataResultListener.onSuccess(readReply);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"readData error\");\n            dataResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void readToday(final DataController dataController, final DataType dataType,\n        final ResultListener<SampleSet> dataResultListener) {\n        Log.i(TAG, \"call readToday\");\n        /* Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n         * the summary data of this data type of the current day. */\n        Task<SampleSet> todaySummationTask = dataController.readTodaySummation(dataType);\n\n        /* Calling the data controller to query the summary data of the current day.\n         * Note: In this example, the inserted data time is fixed at 2020-03-17 09:05:00.\n         * When commissioning the API, you need to change the inserted data time to the current date\n         * for data to be queried. */\n        todaySummationTask.addOnSuccessListener(sampleSet -> {\n            // Result is ReadReply instance\n            Log.i(TAG, \"readToday success\");\n            dataResultListener.onSuccess(sampleSet);\n        });\n        todaySummationTask.addOnFailureListener(error -> {\n            Log.i(TAG, \"readToday error\");\n            dataResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User of the Current day\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void readTodayList(DataController dataController,List<DataType> dataType,\n        ResultListener<List> dataResultListener) {\n        Log.i(TAG, \"call readTodayMultiple\");\n        /* Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n         * the summary data of this data type of the current day. */\n        Task<List<SampleSet>> todaySummationTask = dataController.readTodaySummation(dataType);\n\n        /* Calling the data controller to query the summary data of the current day.\n         * Note: In this example, the inserted data time is fixed at 2020-03-17 09:05:00.\n         * When commissioning the API, you need to change the inserted data time to the current date\n         * for data to be queried. */\n        todaySummationTask.addOnSuccessListener( sampleSet -> {\n            // Result is ReadReply instance\n            Log.i(TAG, \"readToday success\");\n            dataResultListener.onSuccess(sampleSet);\n        });\n        todaySummationTask.addOnFailureListener(error -> {\n            Log.i(TAG, \"readToday error\");\n            dataResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Clearing the User's Fitness and Health Data from the Device and Cloud\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataResultListener {@link VoidResultListener} listener.\n     */\n    @Override\n    public void clearTaskData(final DataController dataController, final VoidResultListener dataResultListener) {\n        Log.i(TAG, \"call clearTaskData\");\n             \n        /* Call the clearAll method of the data controller to delete data\n         * inserted by the current app from the device and cloud. */\n        Task<Void> clearTask = dataController.clearAll();\n\n        /* Calling the data controller to clear user data from the device and cloud.\n         * Listener needs to be registered to monitor whether the clearance is successful or not. */\n        clearTask.addOnSuccessListener(result -> {\n            Log.i(TAG, \"clearTaskData success\");\n            dataResultListener.onSuccess(result);\n        }).addOnFailureListener(error -> {\n            Log.i(TAG, \"clearTaskData error\");\n            dataResultListener.onFail(error);\n        });\n    }\n\n    /**\n     * Querying the Summary Fitness and Health Data of the User between selected dates.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param startTime An 8-digit integer in the format of YYYYMMDD, for example, 20200803.\n     * @param endTime An 8-digit integer in the format of YYYYMMDD, for example, 20200903.\n     * @param dataResultListener {@link ResultListener } listener.\n     */\n    @Override\n    public void readDailySummation(DataController dataController, DataType dataType, int startTime, int endTime,\n        ResultListener<SampleSet> dataResultListener) {\n        Log.i(TAG, \"call readDailySummation\");\n        /* Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n         * the summary data of this data type of the selected days. */\n        Task<SampleSet> readDailySummationTask = dataController.readDailySummation(dataType, startTime, endTime);\n\n        readDailySummationTask.addOnSuccessListener(sampleSet -> {\n            // Result is SampleSet instance\n            Log.i(TAG, \"readDailySummation success\");\n            dataResultListener.onSuccess(sampleSet);\n        });\n        readDailySummationTask.addOnFailureListener(error -> {\n            Log.i(TAG, \"readDailySummation error\");\n            dataResultListener.onFail(error);\n        });\n    }\n    \n    /**\n     * Querying the Summary Fitness and Health Data of the User between selected dates.\n     *\n     * @param dataController {@link DataController} instance.\n     * @param dataType {@link DataType} instance.\n     * @param startTime An 8-digit integer in the format of YYYYMMDD, for example, 20200803.\n     * @param endTime An 8-digit integer in the format of YYYYMMDD, for example, 20200903.\n     * @param dataResultListener {@link ResultListener } listener.\n     */\n    @Override\n    public void readDailySummationList(DataController dataController,List<DataType>  dataType, int startTime,\n        int endTime, ResultListener<List> dataResultListener) {\n        Log.i(TAG, \"call readDailySummationMultiple\");\n        /* Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n         * the summary data of this data type of the selected days. */\n        Task<List<SampleSet>> readDailySummationTask = dataController.readDailySummation(dataType, startTime, endTime);\n\n        readDailySummationTask.addOnSuccessListener(sampleSet -> {\n            // Result is SampleSet instance\n            Log.i(TAG, \"readDailySummation success\");\n            dataResultListener.onSuccess(sampleSet);\n        });\n        readDailySummationTask.addOnFailureListener(error -> {\n            Log.i(TAG, \"readDailySummation error\");\n            dataResultListener.onFail(error);\n        });\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/healthrecordcontroller/HmsHealthRecordController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.healthrecordcontroller;\n\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArrayList;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.hihealth.HealthRecordController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.HealthRecord;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.HealthRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordReadOptions;\nimport com.huawei.hms.hihealth.result.HealthRecordReply;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.foundation.view.BaseController;\nimport com.huawei.hms.rn.health.foundation.view.BaseProtocol;\nimport com.huawei.hms.rn.health.kits.datacontroller.HmsDataController;\nimport com.huawei.hms.rn.health.kits.healthrecordcontroller.util.HealthRecordControllerUtils;\nimport com.huawei.hms.rn.health.kits.healthrecordcontroller.viewmodel.HealthRecordService;\nimport com.huawei.hms.rn.health.kits.healthrecordcontroller.viewmodel.HealthRecordViewModel;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @since 5.0.5-300\n * {@link HmsHealthRecordController} class is a module that refers to {@link HealthRecordController}\n */\n\npublic class HmsHealthRecordController extends BaseController implements BaseProtocol.Event {\n\n    private static final String TAG = HmsHealthRecordController.class.getSimpleName();\n\n    private final HMSLogger logger;\n\n    private final ReactContext reactContext;\n\n    private final HealthRecordService healthRecordViewModel;\n\n    private HealthRecordController healthRecordController;\n\n    public HmsHealthRecordController(ReactApplicationContext reactContext) {\n        super(TAG, reactContext);\n        logger = HMSLogger.getInstance(reactContext);\n        healthRecordViewModel = new HealthRecordViewModel();\n        this.reactContext = reactContext;\n    }\n\n    /**\n     * Inserts the health records into Health Kit.\n     *\n     * @param healthRecordBuilder ReadableArray instance, referred to healthRecordBuilder that will be reached to create builder.\n     * @param dataCollectorArray ReadableArray instance, referred to dataTypeList that will be reached to create healthRecordController.\n     * @param sampleSet Refers to List<Object> sampleSetList instance.\n     * @param promise In the success scenario, promise is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void addHealthRecord(ReadableArray healthRecordBuilder, final ReadableArray dataCollectorArray,\n        final ReadableArray sampleSet, final ReadableArray samplePoint, final Promise promise) {\n\n        String logName = \"HmsHealthRecordController.addHealthRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkDataController();\n\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(0), reactContext);\n        final SampleSet sampleSet1 = Utils.INSTANCE.toSampleSet(sampleSet, dataCollector, promise);\n        List<SampleSet> sampleSetList1 = new ArrayList<>();\n        sampleSetList1.add(sampleSet1);\n\n        DataCollector dataCollector1 = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(1), reactContext);\n        List<SamplePoint> samplePointList = new ArrayList<>();\n        SamplePoint samplePoint1 = null;\n\n        List<Object> sampleSetList = toArrayList(samplePoint);\n        for (Object samplePointObj : sampleSetList) {\n            Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n            samplePoint1 = Utils.INSTANCE.toSamplePoint(dataCollector1, samplePointMap, promise);\n        }\n\n        samplePointList.add(samplePoint1);\n\n        DataCollector dataCollector2 = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(2), reactContext);\n\n        HealthRecord healthRecord = HealthRecordControllerUtils.INSTANCE.toHealthRecord(healthRecordBuilder,\n            sampleSetList1, samplePointList, dataCollector2);\n\n        healthRecordViewModel.addHealthRecord(healthRecordController, healthRecord,\n            new ResultHelper(String.class, promise, logger, logName));\n    }\n\n    /**\n     * Updates the health records. If the data to be updated does not exist, an error message is displayed.\n     *\n     * @param healthRecordBuilder ReadableArray instance, referred to healthRecordBuilder that will be reached to create builder.\n     * @param dataCollectorArray ReadableArray instance, referred to dataTypeList that will be reached to create healthRecordController.\n     * @param sampleSet Refers to List<Object> sampleSetList instance.\n     * @param promise In the success scenario, promise is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void updateHealthRecord(ReadableArray healthRecordBuilder, final ReadableArray dataCollectorArray,\n        final ReadableArray sampleSet, final ReadableArray samplePoint, final Promise promise) {\n\n        String updateLogName = \"HmsHealthRecordController.updateHealthRecord\";\n\n        checkDataController();\n\n        logger.startMethodExecutionTimer(updateLogName);\n\n        DataCollector dataCollector = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(0), reactContext);\n        final SampleSet sampleSet1 = Utils.INSTANCE.toSampleSet(sampleSet, dataCollector, promise);\n        List<SampleSet> sampleSetList1 = new ArrayList<>();\n        sampleSetList1.add(sampleSet1);\n\n        DataCollector dataCollector1 = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(1), reactContext);\n        List<SamplePoint> samplePointList = new ArrayList<>();\n        SamplePoint samplePoint1 = null;\n\n        List<Object> sampleSetList = toArrayList(samplePoint);\n        for (Object samplePointObj : sampleSetList) {\n            Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n            samplePoint1 = Utils.INSTANCE.toSamplePoint(dataCollector1, samplePointMap, promise);\n        }\n\n        DataCollector dataCollector2 = Utils.INSTANCE.toDataCollector(dataCollectorArray.getMap(2), reactContext);\n        samplePointList.add(samplePoint1);\n        HealthRecord updateHealthRecord = HealthRecordControllerUtils.INSTANCE.toHealthRecord(healthRecordBuilder,\n            sampleSetList1, samplePointList, dataCollector2);\n\n        healthRecordViewModel.updateHealthRecord(healthRecordController, updateHealthRecord,\n            new VoidResultHelper(promise, logger, updateLogName));\n    }\n\n    /**\n     * Reads the API of the user health record data. You can read data by time, data type, data collector, and more by specifying the related parameters in ReadOptions.\n     *\n     * @param dataType ReadableMap instance that refers to {@link DataType} instance.\n     * @param dateMap ReadableMap instance that refers to startTime, endTime and timeUnit params.\n     * @param promise In the success scenario, promise is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void getHealthRecord(final ReadableMap dataType, final ReadableMap dateMap, final Promise promise) {\n        String logName = \"HmsHealthRecordController.getHealthRecord\";\n        logger.startMethodExecutionTimer(logName);\n\n        checkDataController();\n\n        HealthRecordReadOptions healthRecordReadOptions\n            = HealthRecordControllerUtils.INSTANCE.toReadHealthRecordOptions(dataType, dateMap, promise);\n\n        healthRecordViewModel.getHealthRecord(healthRecordController, healthRecordReadOptions,\n            new ResultHelper<>(HealthRecordReply.class, promise, logger, logName));\n    }\n\n    /**\n     * Deletes health records based on the request parameters.\n     *\n     * @param readableMap ReadableMap instance that refers to HealthRecordDeleteOptions instance.\n     * @param promise In the success scenario, promise is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void deleteHealthRecord(final ReadableMap readableMap, final Promise promise) {\n        String logName = \"HmsHealthRecordController.deleteHealthRecord\";\n        logger.startMethodExecutionTimer(logName);\n        checkDataController();\n\n        HealthRecordDeleteOptions deleteOptions = HealthRecordControllerUtils.INSTANCE.toHealthRecordDeleteOptions(\n            readableMap, promise);\n\n        healthRecordViewModel.deleteHealthRecord(healthRecordController, deleteOptions,\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Sends event to RN Side.\n     *\n     * @param reactContext ReactContext instance.\n     * @param eventName Event name that will be available via {@link HmsDataController}.\n     * @param params Event params.\n     */\n    @Override\n    public void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        String eventTitle = eventName == null ? \"registerModifyDataMonitor\" : eventName;\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventTitle, params);\n    }\n\n    /* Private Methods */\n\n    /**\n     * Initialize variable of healthRecordController with no dataType params,\n     * in case it is null.\n     */\n    private void initDataController() {\n        this.healthRecordController = HuaweiHiHealth.getHealthRecordController(reactContext);\n    }\n\n    /**\n     * Check whether dataController is initialized, or not.\n     */\n    private void checkDataController() {\n        if (this.healthRecordController == null) {\n            initDataController();\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/healthrecordcontroller/util/HealthRecordControllerUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.healthrecordcontroller.util;\n\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.END_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.META_DATA;\nimport static com.huawei.hms.rn.health.foundation.constant.Constants.START_TIME_KEY;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArray;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toArrayList;\nimport static com.huawei.hms.rn.health.foundation.util.MapUtils.toList;\n\nimport com.huawei.hms.hihealth.data.DataCollector;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.data.HealthDataTypes;\nimport com.huawei.hms.hihealth.data.HealthRecord;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.HealthRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordReadOptions;\nimport com.huawei.hms.rn.health.foundation.constant.Constants;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.TimeUnit;\n\npublic enum HealthRecordControllerUtils {\n\n    INSTANCE;\n\n    /**\n     * Looks for each key and converts ReadableMap instance into {@link HealthRecord} instance.\n     *\n     * @param healthRecordReadableMap ReadableMap instance that will be converted.\n     * @param sampleSetList {@link SampleSet} instance.\n     * @param samplePointsList {@link SamplePoint} instance.\n     * @param dataCollectorMap DataCollector Object\n     * @return {@link HealthRecord} instance.\n     */\n    public synchronized HealthRecord toHealthRecord(final ReadableArray healthRecordReadableMap,\n        final List<SampleSet> sampleSetList, List<SamplePoint> samplePointsList, DataCollector dataCollectorMap) {\n\n        HealthRecord.Builder builder = new HealthRecord.Builder(dataCollectorMap);\n        builder.setSubDataSummary(samplePointsList);\n        builder.setSubDataDetails(sampleSetList);\n        builder.setMetadata(Utils.INSTANCE.createEmptyStringIfNull(healthRecordReadableMap.getMap(0), META_DATA));\n        setBuilderTime(builder, healthRecordReadableMap.getMap(0), Constants.TimeConstants.START);\n        setBuilderTime(builder, healthRecordReadableMap.getMap(0), Constants.TimeConstants.END);\n\n        List<Object> sampleSetList1 = toArrayList(healthRecordReadableMap);\n        for (Object samplePointObj : sampleSetList1) {\n            Map<String, Object> samplePointMap = (Map<String, Object>) samplePointObj;\n            setFieldValue(builder, samplePointMap);\n        }\n\n        return builder.build();\n    }\n\n    /**\n     * @param builder HealthRecord.Builder object.\n     */\n    private synchronized void setFieldValue(HealthRecord.Builder builder, Map<String, Object> samplePointMap) {\n        Object[] fieldsList = (Object[]) samplePointMap.get(\"fields\");\n        if (fieldsList != null) {\n            for (Object obj : fieldsList) {\n                Map<String, Object> fieldMap = (Map<String, Object>) obj;\n                Field field = toFieldType(String.valueOf(fieldMap.get(\"fieldName\")));\n                if (field != null) {\n                    switch (field.getFormat()) {\n                        case Field.FORMAT_FLOAT:\n                            builder.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).floatValue());\n                            break;\n                        case Field.FORMAT_STRING:\n                            builder.setFieldValue(field, (String) fieldMap.get(\"fieldValue\"));\n                            break;\n                        case Field.FORMAT_MAP:\n                            Map<String, Double> doubleMap = (Map<String, Double>) fieldMap.get(\"fieldValue\");\n                            Map<String, Float> floatMap = new HashMap<>();\n                            for (Map.Entry<String, Double> entry : doubleMap.entrySet()) {\n                                floatMap.put(entry.getKey(), entry.getValue().floatValue());\n                            }\n                            builder.setFieldValue(field, String.valueOf(floatMap));\n                            break;\n                        case Field.FORMAT_LONG:\n                            builder.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).longValue());\n                            break;\n                        case Field.FORMAT_INT32:\n                            builder.setFieldValue(field, ((Double) fieldMap.get(\"fieldValue\")).intValue());\n                            break;\n                        default:\n                            break;\n                    }\n                }\n            }\n        }\n    }\n\n    public synchronized Field toFieldType(final String fieldTypeStr) {\n        Constants.FieldConstants variable = Constants.FieldConstants.fromString(fieldTypeStr);\n        return variable != null ? variable.getFieldType() : null;\n    }\n\n    public synchronized HealthRecordDeleteOptions toHealthRecordDeleteOptions(final ReadableMap readableMap,\n        final Promise promise) {\n        HealthRecordDeleteOptions.Builder builder = new HealthRecordDeleteOptions.Builder();\n\n        Date startDate = Utils.INSTANCE.toDate(Constants.TimeConstants.START, null, readableMap, promise);\n        Date endDate = Utils.INSTANCE.toDate(Constants.TimeConstants.END, null, readableMap, promise);\n\n        if (startDate != null && endDate != null) {\n            builder.setTimeInterval(startDate.getTime(), endDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n        }\n\n        Boolean isDeleteSubData = readableMap.getBoolean(\"isDeleteSubData\");\n\n        ReadableArray healthRecordIdsRA = readableMap.getArray(\"healthRecordIds\");\n        List<String> healthRecordIds = toList(toArray(healthRecordIdsRA));\n\n        String dataTypeName = readableMap.getString(\"dataType\");\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeName);\n\n        ReadableArray subDataTypesRA = readableMap.getArray(\"subDataTypes\");\n        List<DataType> subDataTypes = Utils.INSTANCE.toDataTypeList(subDataTypesRA);\n\n        builder.setHealthRecordIds(healthRecordIds)\n            .isDeleteSubData(isDeleteSubData)\n            .setDataType(dataType)\n            .setSubDataTypeList(subDataTypes);\n\n        return builder.build();\n    }\n\n    /**\n     * Sets {@link HealthRecord.Builder} Time\n     */\n    private synchronized void setBuilderTime(HealthRecord.Builder builder, final ReadableMap readableMap,\n        final Constants.TimeConstants time) {\n        switch (time) {\n            case END:\n                Date endDate = Utils.INSTANCE.toDate(readableMap, END_TIME_KEY);\n                if (endDate != null) {\n                    builder.setEndTime(endDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n                }\n                break;\n            case START:\n                Date startDate = Utils.INSTANCE.toDate(readableMap, START_TIME_KEY);\n                if (startDate != null) {\n                    builder.setStartTime(startDate.getTime(), Utils.INSTANCE.toTimeUnit(readableMap));\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Looks for each key and converts ReadableMap instance into {@link HealthRecord} instance.\n     *\n     * @param dataTypeMap ReadableMap instance that refers to {@link DataType} instance.\n     * @param dateReadableMap ReadableMap instance that will be referred into date.\n     */\n    public synchronized HealthRecordReadOptions toReadHealthRecordOptions(final ReadableMap dataTypeMap,\n        final ReadableMap dateReadableMap, final Promise promise) {\n        DataType dataType = Utils.INSTANCE.toDataType(dataTypeMap);\n\n        HealthRecordReadOptions.Builder builder = new HealthRecordReadOptions.Builder();\n\n        List<DataType> subDataTypeList = new ArrayList<>();\n        subDataTypeList.add(dataType);\n\n        Date startDate = Utils.INSTANCE.toDate(Constants.TimeConstants.START, null, dateReadableMap, promise);\n        Date endDate = Utils.INSTANCE.toDate(Constants.TimeConstants.END, null, dateReadableMap, promise);\n\n        builder.setTimeInterval(startDate.getTime(), endDate.getTime(), TimeUnit.MILLISECONDS)\n            .readHealthRecordsFromAllApps()\n            .readByDataType(HealthDataTypes.DT_HEALTH_RECORD_BRADYCARDIA)\n            .setSubDataTypeList(subDataTypeList)\n            .build();\n\n        return builder.build();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/healthrecordcontroller/viewmodel/HealthRecordService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.healthrecordcontroller.viewmodel;\n\nimport com.huawei.hms.hihealth.HealthRecordController;\nimport com.huawei.hms.hihealth.data.HealthRecord;\nimport com.huawei.hms.hihealth.options.HealthRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordReadOptions;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\n\npublic interface HealthRecordService {\n\n    /**\n     * Inserts the health records into Health Kit.\n     *\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecord {@link HealthRecord} instance.\n     * @param resultHelper {@link ResultHelper} instance.\n     */\n    void addHealthRecord(final HealthRecordController healthRecordController, final HealthRecord healthRecord,\n        final ResultHelper resultHelper);\n\n    /**\n     * update the health records into Health Kit.\n     *\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecord {@link HealthRecord} instance.\n     * @param resultHelper {@link VoidResultHelper} instance.\n     */\n    void updateHealthRecord(final HealthRecordController healthRecordController, final HealthRecord healthRecord,\n        final VoidResultHelper resultHelper);\n\n    /**\n     * get the health records into Health Kit.\n     *\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecordReadOptions {@link HealthRecordReadOptions} instance.\n     * @param resultHelper {@link ResultHelper} instance.\n     */\n    void getHealthRecord(final HealthRecordController healthRecordController,\n        final HealthRecordReadOptions healthRecordReadOptions, final ResultHelper resultHelper);\n\n    /**\n     * Deletes health records based on the request parameters.\n     *\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param deleteOptions Request for querying health records to be deleted.\n     * @param resultHelper {@link VoidResultListener} instance.\n     */\n    void deleteHealthRecord(final HealthRecordController healthRecordController,\n        final HealthRecordDeleteOptions deleteOptions, final VoidResultHelper resultHelper);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/healthrecordcontroller/viewmodel/HealthRecordViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.healthrecordcontroller.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.hihealth.HealthRecordController;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.data.HealthRecord;\nimport com.huawei.hms.hihealth.data.SamplePoint;\nimport com.huawei.hms.hihealth.data.SampleSet;\nimport com.huawei.hms.hihealth.options.HealthRecordDeleteOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordInsertOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordReadOptions;\nimport com.huawei.hms.hihealth.options.HealthRecordUpdateOptions;\nimport com.huawei.hms.hihealth.result.HealthRecordReply;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\n\nimport java.text.DateFormat;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Locale;\nimport java.util.concurrent.TimeUnit;\n\n/**\n * @since 5.0.5-300\n * All the tasks for {@link HealthRecordController} methods\n * are used in {@link HealthRecordViewModel} class.\n */\npublic class HealthRecordViewModel implements HealthRecordService {\n\n    private static final String TAG = HealthRecordViewModel.class.getSimpleName();\n\n    private String healthRecordIdFromInsertResult = \"\";\n\n    /**\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecord {@link HealthRecord} instance.\n     * @param resultHelper {@link VoidResultListener} instance.\n     */\n    @Override\n    public void addHealthRecord(HealthRecordController healthRecordController, final HealthRecord healthRecord,\n        ResultHelper resultHelper) {\n        HealthRecordInsertOptions insertOptions = new HealthRecordInsertOptions.Builder().setHealthRecord(healthRecord)\n            .build();\n\n        Task<String> addTask = healthRecordController.addHealthRecord(insertOptions);\n\n        addTask.addOnSuccessListener(healthRecordId -> {\n            healthRecordIdFromInsertResult = healthRecordId;\n            resultHelper.onSuccess(healthRecordIdFromInsertResult);\n        }).addOnFailureListener(e -> {\n            Log.i(\"addHealthRecord: \", e.getMessage());\n            resultHelper.onFail(e);\n        });\n    }\n\n    /**\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecord {@link HealthRecord} instance.\n     * @param resultHelper {@link VoidResultListener} instance.\n     */\n    @Override\n    public void updateHealthRecord(HealthRecordController healthRecordController, HealthRecord healthRecord,\n        VoidResultHelper resultHelper) {\n        if (healthRecordIdFromInsertResult.equals(\"\")) {\n            Log.e(\"updateHealthRecord\",\n                \"Health record id is empty. Call addHealthRecord function before calling this function\");\n            resultHelper.sendFail(\n                \"Health record id is empty. Call addHealthRecord function before calling this function\");\n            return;\n        }\n\n        HealthRecordUpdateOptions updateOptions = new HealthRecordUpdateOptions.Builder().setHealthRecord(healthRecord)\n            .setHealthRecordId(healthRecordIdFromInsertResult)\n            .build();\n\n        Task<Void> updateTask = healthRecordController.updateHealthRecord(updateOptions);\n\n        updateTask.addOnSuccessListener(aVoid -> resultHelper.onSuccess(aVoid))\n            .addOnFailureListener(e -> resultHelper.onFail(e));\n    }\n\n    /**\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param healthRecordReadOptions {@link HealthRecordReadOptions} instance.\n     * @param resultHelper {@link VoidResultListener} instance.\n     */\n    @Override\n    public void getHealthRecord(HealthRecordController healthRecordController,\n        HealthRecordReadOptions healthRecordReadOptions, ResultHelper resultHelper) {\n\n        Task<HealthRecordReply> task = healthRecordController.getHealthRecord(healthRecordReadOptions);\n\n        task.addOnSuccessListener(readResponse -> {\n            List<HealthRecord> recordList = readResponse.getHealthRecords();\n            for (HealthRecord record : recordList) {\n                if (record == null) {\n                    continue;\n                }\n                dumpHealthRecord(record);\n                for (SampleSet dataSet : record.getSubDataDetails()) {\n                    dumpDataSet(dataSet);\n                }\n                resultHelper.onSuccess(readResponse);\n            }\n        });\n        task.addOnFailureListener(e -> resultHelper.onFail(e));\n    }\n\n    /**\n     * Deletes health records based on the request parameters.\n     *\n     * @param healthRecordController {@link HealthRecordController} instance.\n     * @param deleteOptions Request for querying health records to be deleted.\n     * @param resultHelper {@link VoidResultListener} instance.\n     */\n    @Override\n    public void deleteHealthRecord(HealthRecordController healthRecordController,\n        HealthRecordDeleteOptions deleteOptions, VoidResultHelper resultHelper) {\n        Task<Void> task = healthRecordController.deleteHealthRecord(deleteOptions);\n        task.addOnSuccessListener(activityRecordReply -> {\n            Log.i(\"DeleteHealthRecord\", \"DeleteHealthRecord success\");\n            resultHelper.onSuccess(activityRecordReply);\n        }).addOnFailureListener(error -> {\n            Log.i(\"DeleteHealthRecord\", \"DeleteHealthRecord error\");\n            resultHelper.onFail(error);\n        });\n    }\n\n    private void dumpHealthRecord(HealthRecord healthRecord) {\n        DateFormat dateFormat = DateFormat.getDateInstance();\n        DateFormat timeFormat = DateFormat.getTimeInstance();\n        if (healthRecord != null) {\n            logger(\"\\tHealthRecordIdentifier: \" + healthRecord.getHealthRecordId() + \"\\n\\tpackageName: \"\n                + healthRecord.getDataCollector().getPackageName() + \"\\n\\tStartTime: \" + dateFormat.format(\n                healthRecord.getStartTime(TimeUnit.MILLISECONDS)) + \" \" + timeFormat.format(\n                healthRecord.getStartTime(TimeUnit.MILLISECONDS)) + \"\\n\\tEndTime: \" + dateFormat.format(\n                healthRecord.getEndTime(TimeUnit.MILLISECONDS)) + \" \" + timeFormat.format(\n                healthRecord.getEndTime(TimeUnit.MILLISECONDS)) + \"\\n\\tHealthRecordDataType: \"\n                + healthRecord.getDataCollector().getDataType().getName() + \"\\n\\tHealthRecordDataCollectorId: \"\n                + healthRecord.getDataCollector().getDataStreamId() + \"\\n\\tmetaData: \" + healthRecord.getMetadata()\n                + \"\\n\\tFileValueMap: \" + healthRecord.getFieldValues());\n\n            if (healthRecord.getSubDataSummary() != null && !healthRecord.getSubDataSummary().isEmpty()) {\n                SimpleDateFormat sDateFormat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\", Locale.getDefault());\n\n                for (SamplePoint samplePoint : healthRecord.getSubDataSummary()) {\n                    logger(\"Sample point type: \" + samplePoint.getDataType().getName());\n                    logger(\"Start: \" + sDateFormat.format(new Date(samplePoint.getStartTime(TimeUnit.MILLISECONDS))));\n                    logger(\"End: \" + sDateFormat.format(new Date(samplePoint.getEndTime(TimeUnit.MILLISECONDS))));\n                    for (Field field : samplePoint.getDataType().getFields()) {\n                        logger(\"Field: \" + field.getName() + \" Value: \" + samplePoint.getFieldValue(field));\n                    }\n                    logger(System.lineSeparator());\n                }\n            }\n        }\n    }\n\n    private void dumpDataSet(SampleSet sampleSet) {\n        SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n\n        for (SamplePoint samplePoint : sampleSet.getSamplePoints()) {\n            logger(\"Sample point type: \" + samplePoint.getDataType().getName());\n            logger(\"Start: \" + dateFormat.format(new Date(samplePoint.getStartTime(TimeUnit.MILLISECONDS))));\n            logger(\"End: \" + dateFormat.format(new Date(samplePoint.getEndTime(TimeUnit.MILLISECONDS))));\n            for (Field field : samplePoint.getDataType().getFields()) {\n                logger(\"Field: \" + field.getName() + \" Value: \" + samplePoint.getFieldValue(field));\n            }\n        }\n    }\n\n    private void logger(String string) {\n        Log.i(TAG, string);\n    }\n}"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/settings/HmsSettingController.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.settings;\n\nimport com.huawei.hms.hihealth.DataController;\nimport com.huawei.hms.hihealth.HuaweiHiHealth;\nimport com.huawei.hms.hihealth.SettingController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.data.Field;\nimport com.huawei.hms.hihealth.options.DataTypeAddOptions;\nimport com.huawei.hms.rn.health.foundation.helper.ResultHelper;\nimport com.huawei.hms.rn.health.foundation.helper.VoidResultHelper;\nimport com.huawei.hms.rn.health.foundation.util.HMSLogger;\nimport com.huawei.hms.rn.health.foundation.util.MapUtils;\nimport com.huawei.hms.rn.health.foundation.util.Utils;\nimport com.huawei.hms.rn.health.foundation.view.BaseController;\nimport com.huawei.hms.rn.health.kits.settings.viewmodel.SettingsService;\nimport com.huawei.hms.rn.health.kits.settings.viewmodel.SettingsViewModel;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\n/**\n * {@link HmsSettingController} class is a module that refers to {@link SettingController}\n *\n * @since v.5.0.1\n */\npublic class HmsSettingController extends BaseController {\n\n    private static final String TAG = HmsSettingController.class.getSimpleName();\n\n    // Internal context object\n    private final ReactApplicationContext reactContext;\n\n    // ViewModel instance to reach SettingController tasks\n    private SettingsService settingsViewModel;\n    private DataController dataController;\n    private SettingController settingController;\n    private final HMSLogger logger;\n\n    /**\n     * Initialization\n     */\n    public HmsSettingController(ReactApplicationContext reactContext) {\n        super(TAG, reactContext);\n        this.reactContext = reactContext;\n        settingsViewModel = new SettingsViewModel();\n        logger = HMSLogger.getInstance(reactContext);\n    }\n\n    /**\n     * Creates and adds a customized data type.\n     * The name of the created data type must be prefixed with the package name of the app.\n     * Otherwise, the creation fails.\n     *\n     * @param dataTypeName String value of DataType name.\n     * @param fieldTypes String value of Field Type.\n     * @param promise In the success scenario, {@link DataType} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void addNewDataType(final String dataTypeName, final ReadableArray fieldTypes, final Promise promise) {\n        String logName = \"HmsSettingController.addNewDataType\";\n        logger.startMethodExecutionTimer(logName);\n\n        // get DataType name from EditText view,\n        // The name must start with package name, and End with a custom name.\n        DataTypeAddOptions.Builder builder = new DataTypeAddOptions.Builder().setName(dataTypeName);\n        // create DataTypeAddOptions,You must specify the Field that you want to add,\n        // You can add multiple Fields here.\n        if (fieldTypes != null) {\n            for (int i = 0; i < fieldTypes.size(); i++) {\n                Field requestedField = Utils.INSTANCE.toFieldType(fieldTypes.getString(i));\n                builder.addField(requestedField);\n            }\n        }\n        DataTypeAddOptions dataTypeAddOptions = builder.build();\n\n        // create SettingController and add new DataType\n        // The added results are displayed in the phone screen\n        settingsViewModel.addNewDataType(HuaweiHiHealth.getSettingController(reactContext),\n            dataTypeAddOptions, new ResultHelper<>(DataType.class, promise, logger, logName));\n\n    }\n\n    /**\n     * Reads the data type based on the data type name.\n     * This method is used to read the customized data types of the app.\n     *\n     * @param dataTypeName String value of DataType name.\n     * @param promise In the success scenario, {@link DataType} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void readDataType(final String dataTypeName, final Promise promise) {\n        String logName = \"HmsSettingController.readDataType\";\n        logger.startMethodExecutionTimer(logName);\n\n        // create SettingController and get the DataType with requested dataTypeName\n        settingsViewModel.readDataType(HuaweiHiHealth.getSettingController(reactContext), dataTypeName,\n            new ResultHelper<>(DataType.class, promise, logger, logName));\n    }\n\n    /**\n     * Disables the Health Kit function, cancels user authorization, and cancels all data records.\n     * (The task takes effect in 24 hours.)\n     *\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void disableHiHealth(final Promise promise) {\n        String logName = \"HmsSettingController.disableHiHealth\";\n        logger.startMethodExecutionTimer(logName);\n\n\n        // create SettingController and disable HiHealth (cancel All your Records).\n        settingsViewModel.disableHiHealth(HuaweiHiHealth.getSettingController(reactContext),\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Checks the user privacy authorization to Health Kit.\n     * If the authorization has not been granted, the user will be redirected to the authorization screen\n     * where they can authorize the Huawei Health app to open data to Health Kit.\n     *\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void checkHealthAppAuthorization(final Promise promise) {\n        String logName = \"HmsSettingController.checkHealthAppAuthorization\";\n        logger.startMethodExecutionTimer(logName);\n\n        settingsViewModel.checkHealthAppAuthorization(HuaweiHiHealth.getSettingController(reactContext),\n            new VoidResultHelper(promise, logger, logName));\n    }\n\n    /**\n     * Checks the user privacy authorization to Health Kit. Task returns true if authorized, false if unauthorized.\n     *\n     * @param promise In the success scenario, {@link Boolean} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void getHealthAppAuthorization(final Promise promise) {\n        String logName = \"HmsSettingController.getHealthAppAuthorization\";\n        logger.startMethodExecutionTimer(logName);\n        settingsViewModel.getHealthAppAuthorization(HuaweiHiHealth.getSettingController(reactContext),\n            new ResultHelper<>(Boolean.class, promise, logger, logName));\n    }\n\n    /**\n     * Enables HMSLogger\n     *\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        String logName = \"HmsSettingController.enableLogger\";\n        logger.startMethodExecutionTimer(logName);\n\n        logger.enableLogger();\n        promise.resolve(MapUtils.createWritableMapWithSuccessStatus(true));\n        logger.sendSingleEvent(logName);\n    }\n\n    /**\n     * Disables HMSLogger\n     *\n     * @param promise In the success scenario, {@link Void} instance is returned with {@code isSuccess: true} params , or Exception is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        String logName = \"HmsSettingController.disableLogger\";\n        logger.startMethodExecutionTimer(logName);\n\n        logger.disableLogger();\n        promise.resolve(MapUtils.createWritableMapWithSuccessStatus(true));\n        logger.sendSingleEvent(logName);\n    }\n\n/* Private Methods */\n\n    /**\n     * Initialize variable of mSignInHuaweiId.\n     */\n    private void initSettingController() {\n        // get DataController.\n        dataController = HuaweiHiHealth.getDataController(reactContext);\n        settingController = HuaweiHiHealth.getSettingController(reactContext);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/settings/viewmodel/SettingsService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.settings.viewmodel;\n\nimport com.huawei.hms.hihealth.SettingController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.options.DataTypeAddOptions;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\n\n/**\n * Blueprint of {@link SettingsViewModel}.\n *\n * @since v.5.0.1\n */\npublic interface SettingsService {\n\n    /**\n     * Creates and adds a customized data type.\n     * The name of the created data type must be prefixed with the package name of the app.\n     * Otherwise, the creation fails.\n     *\n     * @param settingController SettingController instance.\n     * @param dataTypeAddOptions DataTypeAddOptions instance.\n     * @param listener ResultListener<DataType> instance.\n     */\n    void addNewDataType(final SettingController settingController, final DataTypeAddOptions dataTypeAddOptions,\n        ResultListener<DataType> listener);\n\n    /**\n     * Reads the data type based on the data type name.\n     * This method is used to read the customized data types of the app.\n     *\n     * @param settingController SettingController instance.\n     * @param dataTypeName String value of DataType name.\n     * @param listener ResultListener<DataType> instance.\n     */\n    void readDataType(final SettingController settingController, final String dataTypeName,\n        ResultListener<DataType> listener);\n\n    /**\n     * Disables the Health Kit function, cancels user authorization, and cancels all data records.\n     * (The task takes effect in 24 hours.)\n     *\n     * @param settingController SettingController instance.\n     * @param listener VoidResultListener instance.\n     */\n    void disableHiHealth(final SettingController settingController, VoidResultListener listener);\n\n    /**\n     * Checks the user privacy authorization to Health Kit.\n     * If the authorization has not been granted, the user will be redirected to the authorization screen\n     * where they can authorize the Huawei Health app to open data to Health Kit.\n     *\n     * @param settingController SettingController instance.\n     * @param listener VoidResultListener instance.\n     */\n    void checkHealthAppAuthorization(SettingController settingController, VoidResultListener listener);\n\n    /**\n     * Checks the user privacy authorization to Health Kit. Task returns true if authorized, false if unauthorized.\n     *\n     * @param settingController SettingController instance.\n     * @param listener ResultListener instance.\n     */\n    void getHealthAppAuthorization(SettingController settingController, ResultListener<Boolean> listener);\n}\n"
  },
  {
    "path": "react-native-hms-health/android/src/main/java/com/huawei/hms/rn/health/kits/settings/viewmodel/SettingsViewModel.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.kits.settings.viewmodel;\n\nimport android.util.Log;\n\nimport com.huawei.hms.hihealth.SettingController;\nimport com.huawei.hms.hihealth.data.DataType;\nimport com.huawei.hms.hihealth.options.DataTypeAddOptions;\nimport com.huawei.hms.rn.health.foundation.listener.ResultListener;\nimport com.huawei.hms.rn.health.foundation.listener.VoidResultListener;\nimport com.huawei.hms.rn.health.kits.settings.HmsSettingController;\n\n/**\n * All the tasks for {@link HmsSettingController} methods\n * are used in {@link SettingsViewModel} class.\n *\n * @since v.5.0.1\n */\npublic class SettingsViewModel implements SettingsService {\n    private static final String TAG = SettingsViewModel.class.getSimpleName();\n\n    /**\n     * Creates and adds a customized data type.\n     * The name of the created data type must be prefixed with the package name of the app.\n     * Otherwise, the creation fails.\n     *\n     * @param settingController SettingController instance.\n     * @param dataTypeAddOptions DataTypeAddOptions instance.\n     * @param listener ResultListener<DataType> instance.\n     */\n    @Override\n    public void addNewDataType(final SettingController settingController, final DataTypeAddOptions dataTypeAddOptions,\n        ResultListener<DataType> listener) {\n        Log.i(TAG, \"call addNewDataType\");\n\n        // create SettingController and add new DataType\n        settingController.addDataType(dataTypeAddOptions)\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n\n    /**\n     * Reads the data type based on the data type name.\n     * This method is used to read the customized data types of the app.\n     *\n     * @param settingController SettingController instance.\n     * @param dataTypeName String value of DataType name.\n     * @param listener ResultListener<DataType> instance.\n     */\n    @Override\n    public void readDataType(final SettingController settingController, final String dataTypeName,\n        ResultListener<DataType> listener) {\n        Log.i(TAG, \"call readDataType\");\n\n        // create SettingController and get DataType with the specified name\n        settingController.readDataType(dataTypeName)\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n\n    /**\n     * Disables the Health Kit function, cancels user authorization, and cancels all data records.\n     * (The task takes effect in 24 hours.)\n     *\n     * @param settingController SettingController instance.\n     * @param listener VoidResultListener instance.\n     */\n    @Override\n    public void disableHiHealth(final SettingController settingController, VoidResultListener listener) {\n        Log.i(TAG, \"call disableHiHealth\");\n\n        // create SettingController and get DataType with the specified name\n        settingController.disableHiHealth()\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n\n    /**\n     * Checks the user privacy authorization to Health Kit.\n     * If the authorization has not been granted, the user will be redirected to the authorization screen\n     * where they can authorize the Huawei Health app to open data to Health Kit.\n     *\n     * @param settingController SettingController instance.\n     * @param listener VoidResultListener instance.\n     */\n    @Override\n    public void checkHealthAppAuthorization(SettingController settingController, VoidResultListener listener) {\n\n        settingController.checkHealthAppAuthorization()\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n\n    /**\n     * Checks the user privacy authorization to Health Kit. Task returns true if authorized, false if unauthorized.\n     *\n     * @param settingController SettingController instance.\n     * @param listener ResultListener instance.\n     */\n    @Override\n    public void getHealthAppAuthorization(SettingController settingController, ResultListener<Boolean> listener) {\n\n        settingController.getHealthAppAuthorization()\n            .addOnSuccessListener(listener::onSuccess)\n            .addOnFailureListener(listener::onFail);\n    }\n}"
  },
  {
    "path": "react-native-hms-health/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\npackage-lock.json\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n"
  },
  {
    "path": "react-native-hms-health/example/App.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\n/**\n * Sample React Native App\n * https://github.com/facebook/react-native\n *\n * @format\n * @flow strict-local\n */\n\nimport React, { Component } from \"react\";\nimport MainPage from \"./src/MainPage\";\n\nexport default class App extends Component {\n  render() {\n    return <MainPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/README.md",
    "content": "# React-Native HMS Health - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Health Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Health - Demo is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.hms.rn.health.demo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.hms.rn.health.demo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion 23\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\t\t\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n-ignorewarnings\n\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n\n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.health.demo\">\n\n    <uses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.BODY_SENSORS\" />\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n            android:name=\".MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/ic_launcher\"\n            android:label=\"HMS Health Demo\"\n            android:roundIcon=\"@mipmap/ic_launcher_round\"\n            android:theme=\"@style/AppTheme\">\n        <activity\n                android:name=\".MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"HMS Health Demo\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n\n        <meta-data\n                android:name=\"com.huawei.hms.client.appid\"\n                android:value=\"<APP_ID>\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/src/main/java/com/huawei/hms/rn/health/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    /**\n     * Returns the name of the main component registered from JavaScript. This is used to schedule\n     * rendering of the component.\n     */\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHMSHealthDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/src/main/java/com/huawei/hms/rn/health/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.health.demo;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            // Packages that cannot be autolinked yet can be added manually here, for example:\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-health/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\ndef REACT_NATIVE_VERSION = new File(['node', '--print',\"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version\"].execute(null, rootDir).text.trim())\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.300'\n        classpath('com.facebook.react:react-native-gradle-plugin')\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    \n\n    configurations.all {\n        resolutionStrategy {\n            // Remove this override in 0.65+, as a proper fix is included in react-native itself.\n            force \"com.facebook.react:react-native:\" + REACT_NATIVE_VERSION\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-health/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-health/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-health/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-health/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-health/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHMSHealthDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");\napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-health/example/app.json",
    "content": "{\n  \"name\": \"RNHMSHealthDemo\",\n  \"displayName\": \"RNHMSHealthDemo\"\n}"
  },
  {
    "path": "react-native-hms-health/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-health/example/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-health/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\n/**\n * Metro configuration for React Native\n * https://github.com/facebook/react-native\n *\n * @format\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-health/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-health-demo\",\n  \"version\": \"6.11.0-303\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"@hmscore/react-native-hms-health\": \"^6.11.0-303\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-health/example/src/ActivityRecordsController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { NativeEventEmitter, Text, TouchableOpacity, View, ToastAndroid } from \"react-native\";\n\nimport { styles } from \"./styles\";\n\nimport { HmsActivityRecordsController, HmsDataController } from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\n/**\n * {@link ActivityRecordsController} class has sample codes for {@link HmsActivityRecordsController}\n * <p>\n * Create ActivityRecords for ongoing workout activities.\n * The workout data during an active ActivityRecord is implicitly associated with the ActivityRecord on the Health platform.\n *\n * <p>\n * Note: When the user initiates a workout activity, use the {@code HmsActivityRecordsController.beginActivityRecord} method to start an ActivityRecord.\n * When the user stops a workout activity, use the {@code HmsActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n * </p>\n */\nexport default class ActivityRecordsController extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activityRecordId: \"AR:\" + 124545875278785445, //Date.now().toLocaleString(),\n      dateMap: {\n        startTime: \"2023-05-15 09:00:00\",\n        endTime:  \"2023-05-24 23:00:00\",\n        timeUnit: HmsActivityRecordsController.MILLISECONDS,\n      },\n      dataType: {\n        dataType: HmsActivityRecordsController.DT_CONTINUOUS_STEPS_DELTA,\n      },\n    };\n  }\n\n  componentDidMount() {\n    Utils.logCall(\"call componentDidMount - ActivityRecordsController\");\n\n    const eventEmitter = new NativeEventEmitter(ActivityRecordsController);\n    /**\n     * While registering an event to Monitor the Status Changes of Activity Records for RN Side,\n     * The user can use addActivityRecordsMonitor to register a listener to monitor the status changes of activity records.\n     * When an activity record starts or stops, the caller will be notified via the \"addActivityRecordsMonitor\" event.\n     * The user can use removeActivityRecordsMonitor to unregister the event for activity records they no longer wish to monitor.\n     * <p>\n     * Note: The events can be listened via event name: \"addActivityRecordsMonitor\" on RN Side.\n     * </p>\n     */\n    this.eventListener = eventEmitter.addListener(\n      \"addActivityRecordsMonitor\",\n      (event) => {\n        console.log(event);\n        Utils.notify(\"addActivityRecordsMonitor - \" + JSON.stringify(event));\n      }\n    );\n  }\n\n  componentWillUnmount() {}\n\n  /**\n   * Start an activity record\n   * <p>\n   * Note: When the user initiates a workout activity, use the ActivityRecordsController.beginActivityRecord method to start an ActivityRecord.\n   * </p>\n   *\n   * @returns {Promise<void>}\n   */\n  async beginActivityRecord() {\n    try {\n      Utils.logCall(\"beginActivityRecord - ActivityRecordsController\");\n      // Build an ActivityRecord object\n      const activityRecord = {\n        activityRecordId: this.state.activityRecordId,\n        name: this.state.activityRecordId,\n        description:\n          \"This is ActivityRecord begin test!: \" + this.state.activityRecordId,\n        activityType: HmsActivityRecordsController.RUNNING,\n        startTime: \"2023-05-17 12:39:00\",\n        timeUnit: HmsActivityRecordsController.MILLISECONDS,\n        timeZone: \"+0100\",\n      };\n      const result = await HmsActivityRecordsController.beginActivityRecord(\n        activityRecord\n      );\n      Utils.logResult(\"beginActivityRecord\", result);\n      Utils.notify(\"beginActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async beginBackgroundActivityRecord() {\n    try {\n      Utils.logCall(\"beginActivityRecord - ActivityRecordsController\");\n      // Build an ActivityRecord object\n      const activityRecord = {\n        activityRecordId: this.state.activityRecordId,\n        name: this.state.activityRecordId,\n        description:\n          \"This is ActivityRecord begin test!: \" + this.state.activityRecordId,\n        activityType: HmsActivityRecordsController.RUNNING,\n        startTime: \"2023-05-17 12:39:00\",\n        timeUnit: HmsActivityRecordsController.MILLISECONDS,\n        timeZone: \"+0100\",\n      };\n      const result = await HmsActivityRecordsController.beginBackgroundActivityRecord(\n        activityRecord\n      );\n      Utils.logResult(\"beginBackgroundActivityRecord\", result);\n      Utils.notify(\"beginBackgroundActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Stop the ActivityRecord\n   * <p>\n   * The app uses the {@code HmsActivityRecordsController.endActivityRecord} method to stop a specified ActivityRecord.\n   * <p>\n   * Note: When the user stops a workout activity, use the {@code HmsActivityRecordsController.endActivityRecord} method to stop an ActivityRecord.\n   * </p>\n   *\n   * @returns {Promise<void>}\n   */\n  async endActivityRecord() {\n    try {\n      Utils.logCall(\"endActivityRecord - ActivityRecordsController\");\n      const result = await HmsActivityRecordsController.endActivityRecord(\n        this.state.activityRecordId\n      );\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"endActivityRecord\", result);\n      Utils.notify(\"endActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async endBackgroundActivityRecord() {\n    try {\n      Utils.logCall(\"endBackgroundActivityRecord - ActivityRecordsController\");\n      const result = await HmsActivityRecordsController.endBackgroundActivityRecord(\n        this.state.activityRecordId\n      );\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"endBackgroundActivityRecord\", result);\n      Utils.notify(\"endBackgroundActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Stop activity records of the current app by calling {@code HmsActivityRecordsController.endAllActivityRecords}.\n   * <p>\n   * The app uses the {@code HmsActivityRecordsController.endAllActivityRecords} method to stop all the activity records.\n   * <p>\n   * Note: When ending all activity records, use the {@code HmsActivityRecordsController.endAllActivityRecords} method to stop an ActivityRecord.\n   * </p>\n   *\n   * @returns {Promise<void>}\n   */\n  async endAllActivityRecords() {\n    try {\n      Utils.logCall(\"endAllActivityRecords - ActivityRecordsController\");\n      // Return the list of activity records that have stopped\n      const result = await HmsActivityRecordsController.endAllActivityRecords();\n      Utils.logResult(\"endAllActivityRecords\", result);\n      Utils.notify(\"endAllActivityRecords - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Inserting ActivityRecords to the Health Platform\n   * </br>\n   * To insert ActivityRecords with data that has been previously collected to the Health platform, perform the following:\n   * 1. Create an ActivityRecord by specifying a time period and other necessary information.\n   * 2. Create a DataCollector using the ActivityRecord and optional data set or grouped sampling point data.\n   * 3. Use the {@code HmsActivityRecordsController.addActivityRecord} method to insert an ActivityRecord.\n   * <p>\n   * Note: The app uses the {@code HmsActivityRecordsController.addActivityRecord} method to insert the ActivityRecord and associated data to the Health platform.\n   * </p>\n   *\n   * @returns {Promise<void>}\n   */\n   async addActivityRecord() {\n    try {\n      Utils.logCall(\"addActivityRecord - ActivityRecordsController\");\n      // Create start time that will be used to add activity record.\n      const startTime = \"2023-05-17 18:00:00\";\n\n      // Create end time that will be used to add activity record.\n      const endTime = \"2023-05-17 19:00:00\";\n\n      const dataCollector1 = {\n        dataType: HmsActivityRecordsController.DT_CONTINUOUS_DISTANCE_TOTAL,\n        dataGenerateType: HmsActivityRecordsController.DATA_TYPE_RAW,\n        dataCollectorName: \"test1\",\n      };\n\n      const dataCollector2 = {\n        dataType: HmsActivityRecordsController.POLYMERIZE_CONTINUOUS_SPEED_STATISTICS,\n        dataGenerateType: HmsActivityRecordsController.DATA_TYPE_RAW,\n        dataCollectorName: \"test1\",\n      };\n\n      const dataCollector3 = {\n        dataType: HmsActivityRecordsController.DT_CONTINUOUS_STEPS_TOTAL,\n        dataGenerateType: HmsActivityRecordsController.DATA_TYPE_RAW,\n        dataCollectorName: \"test1\",\n      };\n\n      const dataCollector4 = {\n        dataType: HmsActivityRecordsController.DT_INSTANTANEOUS_STEPS_RATE,\n        dataGenerateType: HmsActivityRecordsController.DATA_TYPE_RAW,\n        dataCollectorName: \"test1\",\n      };\n\n      const samplePoint1 = {\n        startTime: startTime,\n        endTime: endTime,\n        fields: [\n          {\n            fieldName: HmsActivityRecordsController.FIELD_DISTANCE,\n            fieldValue: 400.0,\n          },\n        ],\n      };\n\n      const samplePoint2 = {\n        startTime: startTime,\n        endTime: endTime,\n        fields: [\n          {\n            fieldName: HmsActivityRecordsController.FIELD_AVG,\n            fieldValue: 60.0,\n          },\n          {\n            fieldName: HmsActivityRecordsController.FIELD_MIN,\n            fieldValue: 40.0,\n          },\n          {\n            fieldName: HmsActivityRecordsController.FIELD_MAX,\n            fieldValue: 80.0,\n          },\n        ],\n      };\n\n      const samplePoint3 = {\n        startTime: startTime,\n        endTime: endTime,\n        fields: [\n          {\n            fieldName: HmsActivityRecordsController.FIELD_STEPS,\n            fieldValue: 1024,\n          },\n        ],\n      };\n\n      const activitySummmary = {\n        dataSummary: [{\n          dataCollector: dataCollector1,\n          samplePoints: [samplePoint1],\n        }, {\n          dataCollector: dataCollector2,\n          samplePoints: [samplePoint2],\n        }, {\n          dataCollector: dataCollector3,\n          samplePoints: [samplePoint3],\n        }],\n      };\n\n      // Build an ActivityRecord object\n      const activityRecord = {\n        activityRecordId: this.state.activityRecordId,\n        name: \"BeginActivityRecord\",\n        description: \"This is ActivityRecord begin test!\",\n        activityType: HmsActivityRecordsController.RUNNING,\n        startTime: startTime,\n        endTime: endTime,\n        timeUnit: HmsActivityRecordsController.MILLISECONDS,\n        activitySummary: activitySummmary,\n        timeZone: \"+0800\",\n      };\n\n      //You can use sampleSets to add more sampling points to the sampling dataset.\n      //Build the (DT_CONTINUOUS_STEPS_DELTA) sampling data object and add it to the sampling dataSet\n      const sampleSetMapObject = {\n        dataCollector: dataCollector4,\n        samplePoints: [\n          {\n            startTime: startTime,\n            endTime: endTime,\n            timeUnit: HmsActivityRecordsController.MILLISECONDS,\n            fields: [\n              {\n                fieldName: HmsActivityRecordsController.FIELD_STEP_RATE,\n                fieldValue: 10,\n              },\n            ]\n          },\n        ]\n      };\n\n      // Call the related method in the HmsActivityRecordsController to add activity records\n      const result = await HmsActivityRecordsController.addActivityRecord(\n        activityRecord,\n        sampleSetMapObject\n      );\n      Utils.logResult(\"addActivityRecord\", result);\n      Utils.notify(\"addActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n\n  /**\n   * Reading ActivityRecords and Associated Data from the Health Platform\n   * </br>\n   * To obtain a list of ActivityRecords that meet the criteria, create an date and data type instance first.\n   * Use the HmsActivityRecordsController.getActivityRecord method to obtain data.\n   * <p>\n   * Note:  The user can obtain a list of ActivityRecords and associated data that meets certain criteria from the Health platform.\n   * For example, you can obtain all ActivityRecords within a specific period of time for particular data, or obtain a specific ActivityRecord by name or ID.\n   * You can also obtain ActivityRecords created by other apps.\n   * </p>\n   *\n   *\n   * @returns {Promise<void>}\n   */\n  async getActivityRecord() {\n    try {\n      Utils.logCall(\"getActivityRecord - ActivityRecordsController\");\n\n      // In this example we will get all the activities for the requested times.\n      // Thus, activityRecordId and activityRecordName will be null.\n      const activityRecordId = null;\n      const activityRecordName = null;\n\n      // Call the related method in the HmsActivityRecordsController to get activity records\n      const result = await HmsActivityRecordsController.getActivityRecord(\n        this.state.dataType,\n        this.state.dateMap,\n        activityRecordId,\n        activityRecordName\n      );\n      Utils.logResult(\"getActivityRecord\", result);\n      Utils.notify(\"getActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async deleteActivityRecord() {\n    try {\n      Utils.logCall(\"deleteActivityRecord - ActivityRecordsController\");\n      // In this example we will delete all the activities for the requested times.\n      // Thus, activityRecordId and activityRecordName will be null.\n\n      const activityRecordOptions = {\n        startTime: \"2023-05-17 18:00:00\",\n        endTime: \"2023-05-20 18:00:00\",\n        timeUnit: HmsActivityRecordsController.MILLISECONDS,\n        activityRecordIds: [\"MyBackgroundActivityRecordId\"],\n        subDataTypes: [{\n         dataType: HmsActivityRecordsController.DT_CONTINUOUS_STEPS_TOTAL, \n         hiHealthOption: HmsDataController.ACCESS_READ\n         },\n         ],\n         isDeleteSubData: true\n         }\n\n      const result = await HmsActivityRecordsController.deleteActivityRecord(activityRecordOptions); \n\n      Utils.logResult(\"deleteActivityRecord\", result);\n      Utils.notify(\"deleteActivityRecord - \" + JSON.stringify(result));\n      } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>ACTIVITY RECORDS CONTROLLER</Text>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\"Starting or stopping an activity record\"}\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.beginActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> beginActivityRecord </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.beginBackgroundActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> beginBackgroundActivityRecord </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.endActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> endActivityRecord </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.endBackgroundActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> endBackgroundActivityRecord </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.endAllActivityRecords()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>\n                {\" \"}\n                endAllActivityRecords{\" \"}\n              </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\"Adding or reading an activity record\"}\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.addActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> addActivityRecord </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.getActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> getActivityRecord </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>{\"Deleting an activity record\"}</Text>\n          <View style={styles.buttonDataController}>\n          </View>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.deleteActivityRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>deleteActivityRecord</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/AutoRecorderController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n} from \"react-native\";\n\nimport { styles } from \"./styles\";\n\nimport { HmsAutoRecorderController } from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\n/**\n * {@link AutoRecorderController} class has sample codes for {@link HmsAutoRecorderController}\n */\nexport default class AutoRecorderController extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      record: {},\n      text: \"\",\n    };\n  }\n\n  componentDidMount() {\n    Utils.logCall(\"call componentDidMount - AutoRecorderController\");\n    const eventEmitter = new NativeEventEmitter(HmsAutoRecorderController);\n\n    this.eventListener = eventEmitter.addListener(\n      HmsAutoRecorderController.AUTO_RECORDER_POINT_LISTENER,\n      (event) => {\n        console.log(event);\n        this.setState((state, props) => ({\n          text:\n            state.text +\n            `${event.samplingTime}: Steps: ${event.fieldValues[\"steps(i)\"]}\\n`,\n        }));\n      }\n    );\n\n    this.eventListener = eventEmitter;\n  }\n\n  componentWillUnmount() {\n    try {\n      this.eventListener.remove();\n    } catch (error) {\n      return;\n    }\n  }\n\n  /**\n   * Start record By DataType, the data from sensor will be inserted into database automatically until call Stop\n   * Interface.\n   *\n   * DT_CONTINUOUS_STEPS_TOTAL as sample, after startRecord this type, the total steps will be inserted into\n   * database when u shake ur handset.\n   *\n   * @returns {Promise<void>}\n   */\n  async startRecord() {\n    try {\n      Utils.logCall(\"startRecordByType - AutoRecorderController\");\n      const dataType = {\n        dataType: HmsAutoRecorderController.DT_CONTINUOUS_STEPS_TOTAL,\n      };\n\n      const notificationOptions = {\n        title: \"AutoRecorderDemo\",\n        text: \"It's running\",\n        subText: \"Oh is this subtext?\",\n        ticker: \"Ticker text\",\n        chronometer: false,\n        largeIcon: \"hearth.png\",\n      };\n\n      const result = await HmsAutoRecorderController.startRecord(\n        dataType,\n        notificationOptions\n      );\n      this.setState((state, props) => ({\n        text: state.text + \"** Record Started ***\\n\",\n      }));\n      Utils.logResult(\"startRecordByType\", result);\n      Utils.notify(\"startRecordByType - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Stop record By DataType, the data from sensor will NOT be inserted into database automatically\n   *\n   * DT_CONTINUOUS_STEPS_TOTAL as sample, after stopRecord this type, the total steps will NOT be inserted into\n   * database when u shake ur handset\n   *\n   * @returns {Promise<void>}\n   */\n  async stopRecord() {\n    try {\n      Utils.logCall(\"stopRecordByType - AutoRecorderController\");\n      const dataType = {\n        dataType: HmsAutoRecorderController.DT_CONTINUOUS_STEPS_TOTAL,\n      };\n      const result = await HmsAutoRecorderController.stopRecord(dataType);\n      this.setState((state, props) => ({\n        text: state.text + \"** Record Started ***\\n\",\n      }));\n      Utils.logResult(\"stopRecordByType\", result);\n      Utils.notify(\"stopRecordByType - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>AUTO RECORDER CONTROLLER</Text>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\n              \"Starting or stopping automatic recording of accumulated step count by data type\"\n            }\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.startRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>\n                {\"startRecord\"}\n              </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.autoRecorderButton}\n              onPress={() => this.stopRecord()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>\n                {\"stopRecord\"}\n              </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <View\n            style={{\n              backgroundColor: \"white\",\n              margin: 8,\n            }}\n          >\n            <TextInput\n              multiline\n              numberOfLines={16}\n              value={this.state.text}\n              // editable={false}\n            />\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/ConsentsController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { Text, TouchableOpacity, View } from \"react-native\";\nimport { styles } from \"./styles\";\n\nimport { HmsConsentsController } from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\nexport default class ConsentsController extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      lang: \"en-us\",\n      appId: \"107024979\",\n      scopeList: [\n        \"https://www.huawei.com/healthkit/step.read\",\n        \"https://www.huawei.com/healthkit/calories.read\"\n      ],\n    };\n  }\n\n  async getScope() {\n    try {\n      const result = await HmsConsentsController.get(\n        this.state.lang,\n        this.state.appId\n      );\n\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"getScopes\", result);\n      Utils.notify(\"getScopes - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async revokeAll() {\n    try {\n      const result = await HmsConsentsController.revoke(this.state.appId, null);\n\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"revokeAllScopes\", result);\n      Utils.notify(\"revokeAllScopes - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async revokeSelected() {\n    try {\n      const result = await HmsConsentsController.revoke(\n        this.state.appId,\n        this.state.scopeList\n      );\n\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"revokeSelectedScopes\", result);\n      Utils.notify(\"revokeSelectedScopes - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async cancelAuthorization() {\n    try {\n      const result = await HmsConsentsController.cancelAuthorization(\n        this.state.appId,\n        this.state.scopeList\n      );\n\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"cancelAuthorization\", result);\n      Utils.notify(\"cancelAuthorization - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async cancelAuthorizationAll() {\n    try {\n      const result = await HmsConsentsController.cancelAuthorizationAll(false);\n\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"cancelAuthorizationAll\", result);\n      Utils.notify(\"cancelAuthorizationAll - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>CONSENTS CONTROLLER</Text>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            You can manage the permissions given to the app.\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.getScope()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> getScopes </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.revokeAll()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> revokeAll </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.revokeSelected()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> revokeSelected </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.cancelAuthorization()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> cancelAuthorization </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.cancelAuthorizationAll()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> cancelAuthorizationAll </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/DataController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { NativeEventEmitter, Text, TouchableOpacity, View } from \"react-native\";\n\nimport { styles } from \"./styles\";\n\nimport { HmsDataController } from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\n/**\n * {@link DataController} class has sample codes for managing fitness and health data that refers to {@link DataController}\n *\n * DataController is used to manage fitness and health data (DataType, HealthDataTypes, and SportDataTypes).\n * The related operations include adding, deleting, modifying, and querying of the data.\n * </br>\n * In addition, DataController allows for feature-based query on the summary data of the current day,\n * as well as the summary data on the local device of the current day.\n * Events can be registered for updates of six data types.\n * 1. Basic metabolic rate per day (unit: kcal): HmsDataController.DT_INSTANTANEOUS_CALORIES_BMR\n * 2. Body fat rate: HmsDataController.DT_INSTANTANEOUS_BODY_FAT_RATE\n * 3. Height (unit: meter): HmsDataController.DT_INSTANTANEOUS_HEIGHT\n * 4. Water taken over a single drink (unit: liter): HmsDataController.DT_INSTANTANEOUS_HYDRATE\n * 5. Nutrient intake over a meal: HmsDataController.DT_INSTANTANEOUS_NUTRITION_FACTS\n * 6. Weight (unit: kg): HmsDataController.DT_INSTANTANEOUS_BODY_WEIGHT\n */\nexport default class DataController extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      dataType: HmsDataController.DT_CONTINUOUS_STEPS_DELTA,\n      samplingTime: \"2023-05-18 08:00:00\",\n      streamName: \"HEALTH_DEMO\",\n      startTime: \"2023-05-18 05:00:00\",\n      endTime: \"2023-05-18 21:00:00\",\n    };\n  }\n\n  componentDidMount() {\n    Utils.logCall(\"call componentDidMount - DataController\");\n    (async () => {\n      await this.create.call(this);\n    })();\n\n    const eventEmitter = new NativeEventEmitter(HmsDataController);\n    /**\n     *     Events can be registered for updates of the following six data types:\n     *     1. Basic metabolic rate per day (unit: kcal): DataType.DT_INSTANTANEOUS_CALORIES_BMR\n     *     2. Body fat rate: DataType.DT_INSTANTANEOUS_BODY_FAT_RATE\n     *     3. Height (unit: meter): DataType.DT_INSTANTANEOUS_HEIGHT\n     *     4. Water taken over a single drink (unit: liter): DataType.DT_INSTANTANEOUS_HYDRATE\n     *     5. Nutrient intake over a meal: DataType.DT_INSTANTANEOUS_NUTRITION_FACTS\n     *     6. Weight (unit: kg): DataType.DT_INSTANTANEOUS_BODY_WEIGHT\n     *\n     */\n    this.eventListener = eventEmitter.addListener(\n      \"registerModifyDataMonitor\",\n      (event) => {\n        console.log(event);\n        Utils.notify(\"registerModifyDataMonitor - \" + JSON.stringify(event));\n      }\n    );\n  }\n\n  componentWillUnmount() {\n    try {\n      this.eventListener.remove();\n    } catch (error) {}\n  }\n\n  /**\n   * Initialize a data controller object.\n   * <p>\n   * Note:  Before using {@link HmsDataController} methods,\n   * always initDataController method must be called with requested dataTypes.\n   * </p>\n   *\n   * @returns {Promise<void>}\n   */\n  async create() {\n    try {\n      Utils.logCall(\"init  - DataController\");\n\n      // Obtain and set the read & write permissions for DT_CONTINUOUS_STEPS_DELTA and DT_INSTANTANEOUS_HEIGHT.\n      const result = await HmsDataController.initDataController();\n\n      // Use the obtained permissions in account page, to create the data controller object.\n      Utils.logResult(\"init  - DataController\", result);\n      Utils.notify(\n        \"init  - DataController - success!\" + JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Add a sampling dataset.\n   *\n   * @returns {Promise<void>}\n   */\n  async insert() {\n    try {\n      Utils.logCall(\"insert  - DataController\");\n\n      // Build the dataCollector object\n      const dataCollector = {\n        dataType: this.state.dataType,\n        dataStreamName: this.state.streamName,\n        dataGenerateType: 0,\n      };\n\n      //You can use sampleSets to add more sampling points to the sampling dataset.\n      const sampleSets = [\n        {\n          startTime: this.state.startTime,\n          endTime: this.state.endTime,\n          // samplingTime: this.state.samplingTime,\n          fields: [\n            {\n              fieldName: HmsDataController.FIELD_STEPS_DELTA,\n              fieldValue: 90,\n            },\n          ],\n          timeUnit: HmsDataController.MILLISECONDS,\n          metaData: {\n            metaDataKey: \"Key\",\n            metaDataValue: \"Value\"\n          }\n        },\n      ];\n\n      // Call the data controller to insert the sampling dataset\n      const result = await HmsDataController.insert(dataCollector, sampleSets);\n      Utils.logResult(\"insert  - DataController\", result);\n      Utils.notify(\n        \"insert  - DataController - success!\" + JSON.stringify(sampleSets)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Delete the sampling data by specific criteria.\n   *\n   * @returns {Promise<void>}\n   */\n  async delete() {\n    try {\n      Utils.logCall(\"delete  - DataController\");\n\n      // Build the dataCollector object for deletion\n      const dataCollectorForDeletion = {\n        dataType: this.state.dataType,\n        dataStreamName: this.state.streamName,\n        dataGenerateType: 0,\n      };\n\n      // Build the time range for the deletion: start time and end time.\n      const dateMapForDeletion = {\n        startTime: this.state.startTime,\n        endTime: this.state.endTime,\n        timeUnit: HmsDataController.MILLISECONDS,\n      };\n\n      //Call the data controller to delete the sampling dataset\n      const result = await HmsDataController.delete(\n        dataCollectorForDeletion,\n        dateMapForDeletion\n      );\n      Utils.logResult(\"delete  - DataController\", result);\n      Utils.notify(\n        \"delete  - DataController - success!\" + JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n\n  /**\n   * Modify the sampling data by specific criteria.\n   *\n   * @returns {Promise<void>}\n   */\n  async update() {\n    try {\n      Utils.logCall(\"update  - DataController\");\n\n      // Build the dataCollector object\n      const dataCollector = {\n        dataType: HmsDataController.DT_CONTINUOUS_STEPS_DELTA,\n        dataStreamName: this.state.streamName,\n        dataGenerateType: 0,\n      };\n\n      // You can use sampleSets to add more sampling points to the sampling dataset.\n      const sampleSets = [\n        {\n          startTime: this.state.startTime,\n          endTime: this.state.endTime,\n          samplingTime: this.state.samplingTime,\n          fields: [\n            {\n              fieldName: HmsDataController.FIELD_STEPS_DELTA,\n              fieldValue: 2000,\n            }\n          ],\n        },\n      ];\n\n      // Build a parameter object for the update.\n      // Note: (1) The start time of the modified object updateOptions cannot be greater than the minimum\n      // value of the start time of all sample data points in the modified data sample set\n      // (2) The end time of the modified object updateOptions cannot be less than the maximum value of the\n      // end time of all sample data points in the modified data sample set\n      const updateOptions = {\n        startTime: this.state.startTime,\n        endTime: this.state.endTime,\n        timeUnit: HmsDataController.MILLISECONDS,\n      };\n\n      const result = await HmsDataController.update(\n        dataCollector,\n        sampleSets,\n        updateOptions\n      );\n      // Call the data controller to modify the sampling dataset.\n      Utils.logResult(\"update  - DataController\", result);\n      Utils.notify(\n        \"update  - DataController - success!\" + JSON.stringify(sampleSets)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Query the sampling dataset by specific criteria.\n   *\n   * @returns {Promise<void>}\n   */\n  async read() {\n    try {\n      Utils.logCall(\"read  - DataController\");\n\n      // Build the dataCollector object\n      const dataCollector = {\n        dataType: this.state.dataType,\n        dataStreamName: this.state.streamName,\n        dataGenerateType: 0,\n      };\n\n      // Group the resultData with this object\n      const groupData = {\n        groupByTime: { duration: 6, timeUnit: HmsDataController.HOURS },\n        inputDataType: HmsDataController.DT_CONTINUOUS_STEPS_DELTA,\n        outputDataType: HmsDataController.DT_CONTINUOUS_STEPS_TOTAL,\n      };\n\n      // Build the time range for the query: start time and end time.\n      const dateMap = {\n        startTime: this.state.startTime,\n        endTime: this.state.endTime,\n        timeUnit: HmsDataController.MILLISECONDS,\n      };\n\n      // Call the data controller to query the sampling dataset.\n      const result = await HmsDataController.read(\n        dataCollector,\n        dateMap,\n        groupData\n      );\n\n      Utils.logResult(\"read  - DataController\", result);\n      Utils.notify(\n        \"read  - DataController - success!\" + JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Query the summary data of the current day by data type.\n   *\n   * @returns {Promise<void>}\n   */\n  async readToday() {\n    try {\n      Utils.logCall(\"readTodaySummation  - DataController\");\n\n      // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n      const dataType = {\n        dataType: HmsDataController.DT_CONTINUOUS_CALORIES_BURNT,\n      };\n      // Call the data controller to query the summary data of the current day.\n      const result = await HmsDataController.readTodaySummation(dataType);      \n      Utils.logResult(\"readTodaySummation  - DataController\", result);\n      Utils.notify(\n        \"readTodaySummation  - DataController - success!\" +\n          JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async readTodayList() {\n    try {\n      Utils.logCall(\"readTodaySummation  - DataController\");\n\n      // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n     \n      const dataType = {\n        dataType: [HmsDataController.DT_CONTINUOUS_CALORIES_BURNT,HmsDataController.DT_INSTANTANEOUS_HEART_RATE,HmsDataController.DT_INSTANTANEOUS_EXERCISE_HEART_RATE]\n      };\n      //HmsDataController.DT_CONTINUOUS_DISTANCE_DELTA,HmsDataController.DT_INSTANTANEOUS_HEART_RATE\n      // Call the data controller to query the summary data of the current day.\n      const result = await HmsDataController.readTodaySummationList(\n        dataType\n      );\n      Utils.logResult(\"readTodaySummationList  - DataController\", result);\n      Utils.notify(\n        \"readTodaySummationList  - DataController - success!\" +\n          JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Query the summary data of the the duration that is specified\n   *\n   * @returns {Promise<void>}\n   */\n  async readDailySummation() {\n    try {\n      Utils.logCall(\"readDailySummation  - DataController\");\n\n      // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n      const dataType = {\n        dataType: HmsDataController.DT_CONTINUOUS_CALORIES_BURNT,\n      };\n      const startTime = 20230518;\n      const endTime = 20230518;\n\n      //Call the data controller to query the summary data of the current day.\n      const result = await HmsDataController.readDailySummation(\n        dataType,\n        startTime,\n        endTime\n      ); \n      Utils.logResult(\"readDailySummation  - DataController\", result);\n      Utils.notify(\n        \"readDailySummation  - DataController - success!\" +\n          JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async readDailySummationList() {\n    try {\n      Utils.logCall(\"readDailySummation  - DataController\");\n\n      // Use the specified data type (DT_CONTINUOUS_STEPS_DELTA) to call the data controller to query\n      const dataType = {\n        dataType: [HmsDataController.DT_CONTINUOUS_CALORIES_BURNT,HmsDataController.DT_INSTANTANEOUS_HEART_RATE,HmsDataController.DT_INSTANTANEOUS_EXERCISE_HEART_RATE]\n      };\n\n      const startTime = 20230518;\n      const endTime = 20230518;\n\n      //Call the data controller to query the summary data of the current day.\n      const result = await HmsDataController.readDailySummationList(\n        dataType,\n        startTime,\n        endTime\n      );\n      Utils.logResult(\"readDailySummationList  - DataController\", result);\n      Utils.notify(\n        \"readDailySummationList  - DataController - success!\" +\n          JSON.stringify(result)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Trigger the listener for data changes for testing purposes by inserting a data entry.\n   *\n   * @returns {Promise<void>}\n   */\n  async insertTestData() {\n    try {\n      Utils.logCall(\"insertTestData\");\n\n      // Build the dataCollector object\n      const dataCollector = {\n        dataType: HmsDataController.DT_INSTANTANEOUS_HEIGHT,\n        dataStreamName: \"STEPS_DELTA\",\n        dataGenerateType: 0,\n      };\n\n      //You can use sampleSets to add more sampling points to the sampling dataset.\n      const sampleSets = [\n        {\n          startTime: \"2023-05-18 13:12:00\",\n          endTime: \"2023-05-18 13:12:00\",\n          fieldValue: HmsDataController.FIELD_HEIGHT,\n          floatValue: 1.56,\n          timeUnit: HmsDataController.MILLISECONDS,\n        },\n      ];\n      const result = await HmsDataController.insert(dataCollector, sampleSets);\n      Utils.logResult(\"insertTestData  - DataController\", result);\n      Utils.notify(\n        \"insertTestData  - DataController - success!\" +\n          JSON.stringify(sampleSets)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Clear all user data from the device and cloud.\n   *\n   * @returns {Promise<void>}\n   */\n  async clearAll() {\n    try {\n      Utils.logCall(\"clearAll  - DataController\");\n\n      // Call the clearAll method of the data controller to delete data\n      const result = await HmsDataController.clearAll();\n      Utils.logResult(\"clearAll\", result);\n      Utils.notify(\"clearAll - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>DATA CONTROLLER</Text>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\n              \"Managing fitness and health data, including inserting, updating, reading, and deleting data\"\n            }\n          </Text>\n          <View style={styles.horizontalButtons}>\n            <TouchableOpacity\n              style={styles.smallButton}\n              onPress={() => this.insert()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> insert </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.smallButton}\n              onPress={() => this.delete()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> delete </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.smallButton}\n              onPress={() => this.update()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> update </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.smallButton}\n              onPress={() => this.read()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> read </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\n              \"Feature-based query APIs: Querying the summary data of the current day, as well as the summary data on the local device of the current day\"\n            }\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readToday()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> readTodaySummation </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readTodayList()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> readTodaySummationList </Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readDailySummation()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>readDailySummation</Text>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readDailySummationList()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> readDailySummationList </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\n              \"Synchronizing fitness and health data between the device and cloud, as well as clearing all data\"\n            }\n          </Text>\n          <View style={styles.horizontalCenterButtons}>\n            <TouchableOpacity\n              style={styles.smallButton}\n              onPress={() => this.clearAll()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}>clearAll</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/HealthRecordController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { Text, TouchableOpacity, View } from \"react-native\";\n\nimport { styles } from \"./styles\";\n\nimport { HmsHealthRecordController, HmsDataController } from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\n\nexport default class HealthRecordController extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      dateMap: {\n        startTime: \"2023-05-17 23:00:00\",\n        endTime: \"2023-05-17 23:25:00\",\n        timeUnit: HmsHealthRecordController.MILLISECONDS,\n      },\n      dataType: {\n        dataType: HmsHealthRecordController.DT_INSTANTANEOUS_HEART_RATE,\n        dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n        dataCollectorName: \"such as step count\",\n      },\n    };\n  }\n\n  async addHealthRecord() {\n    try {\n      Utils.logCall(\"addHealthRecord - HealthRecordController\");\n\n      const startTime = \"2023-05-17 23:00:00\";\n      const endTime = \"2023-05-17 23:25:00\";\n\n      const samplePoint = [\n        {\n          fieldName: HmsHealthRecordController.FIELD_AVG,\n          fieldValue: 90,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MAX,\n          fieldValue: 100,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MIN,\n          fieldValue: 80,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_LAST,\n          fieldValue: 75,\n        }\n      ]\n\n      const sampleSet = [\n        {\n          fieldName: HmsHealthRecordController.FIELD_BPM,\n          fieldValue: 88,\n        }\n      ]\n\n      const samplePointForHealthBuilder = [\n        {\n          fieldName: HmsHealthRecordController.FIELD_THRESHOLD,\n          fieldValue: 40,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_AVG_HEART_RATE,\n          fieldValue: 44,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MAX_HEART_RATE,\n          fieldValue: 48,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MIN_HEART_RATE,\n          fieldValue: 40,\n        },\n      ]\n\n      const healthRecordBuilder = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: samplePointForHealthBuilder\n        }\n      ]\n\n      const sampleSetMapArr = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: sampleSet\n        },\n      ];\n\n      const samplePointMapArr = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: samplePoint\n        },\n      ];\n\n      const dataCollectorArray = [{\n        dataType: HmsHealthRecordController.DT_INSTANTANEOUS_HEART_RATE,\n        dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n        dataStreamName: \"such as step count\",\n      }, {\n        dataType: HmsHealthRecordController.POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS,\n        dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n        dataCollectorName: \"such as step count\",\n      }, {\n        dataType: HmsHealthRecordController.DT_HEALTH_RECORD_BRADYCARDIA,\n        dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n        dataCollectorName: \"such as step count\",\n      }\n      ]\n\n      const result = await HmsHealthRecordController.addHealthRecord(\n        healthRecordBuilder,\n        dataCollectorArray,\n        sampleSetMapArr,\n        samplePointMapArr\n      );\n      alert(JSON.stringify(result));\n      Utils.logResult(\"addActivityRecord\", result);\n      Utils.notify(\"addActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async updateHealthRecord() {\n    try {\n      Utils.logCall(\"addHealthRecord - HealthRecordController\");\n\n      const startTime = \"2023-05-17 23:00:00\";\n      const endTime = \"2023-05-17 23:25:00\";\n\n      const sampleSet = [{\n        fieldName: HmsHealthRecordController.FIELD_BPM,\n        fieldValue: 90,\n      }]\n\n      const samplePoint = [{\n        fieldName: HmsHealthRecordController.FIELD_AVG,\n        fieldValue: 90,\n      },\n      {\n        fieldName: HmsHealthRecordController.FIELD_MAX,\n        fieldValue: 100,\n      },\n      {\n        fieldName: HmsHealthRecordController.FIELD_MIN,\n        fieldValue: 80,\n      },\n      {\n        fieldName: HmsHealthRecordController.FIELD_LAST,\n        fieldValue: 75,\n      }]\n\n      const samplePointForHealthBuilder = [\n        {\n          fieldName: HmsHealthRecordController.FIELD_THRESHOLD,\n          fieldValue: 42,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_AVG_HEART_RATE,\n          fieldValue: 45,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MAX_HEART_RATE,\n          fieldValue: 48,\n        },\n        {\n          fieldName: HmsHealthRecordController.FIELD_MIN_HEART_RATE,\n          fieldValue: 42,\n        },\n      ]\n\n      const healthRecordBuilder = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: samplePointForHealthBuilder\n        }\n      ]\n\n      const sampleSetMapArr = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: sampleSet\n        },\n      ];\n\n      const samplePointMapArr = [\n        {\n          startTime: startTime,\n          endTime: endTime,\n          timeUnit: HmsHealthRecordController.MILLISECONDS,\n          fields: samplePoint\n        },\n      ];\n\n      const dataCollectorArray = [\n\n        dataCollector = {\n          dataType: HmsHealthRecordController.DT_INSTANTANEOUS_HEART_RATE,\n          dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n          dataStreamName: \"such as step count\",\n        },\n\n        dataCollector1 = {\n          dataType: HmsHealthRecordController.POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS,\n          dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n          dataCollectorName: \"such as step count\",\n        },\n\n        dataCollector2 = {\n          dataType: HmsHealthRecordController.DT_HEALTH_RECORD_BRADYCARDIA,\n          dataGenerateType: HmsHealthRecordController.DATA_TYPE_RAW,\n          dataCollectorName: \"such as step count\",\n        }\n\n      ]\n\n      const result = await HmsHealthRecordController.updateHealthRecord(\n        healthRecordBuilder,\n        dataCollectorArray,\n        sampleSetMapArr,\n        samplePointMapArr\n      );\n      alert(JSON.stringify(result));\n      Utils.logResult(\"addActivityRecord\", result);\n      Utils.notify(\"addActivityRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async getHealthRecord() {\n    try {\n      const result = await HmsHealthRecordController.getHealthRecord(\n        this.state.dataType,\n        this.state.dateMap\n      );\n      Utils.logResult(\"getHealthRecord\", result);\n      Utils.notify(\"getHealthRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  async deleteHealthRecord() {\n    try {\n\n      const healthRecordDeleteOptions = {\n        startTime: this.state.dateMap.startTime,\n        endTime: this.state.dateMap.endTime,\n        timeUnit: this.state.dateMap.timeUnit,\n\n        isDeleteSubData: false,\n\n        healthRecordIds: [\"id\"],\n\n        dataType: HmsHealthRecordController.DT_HEALTH_RECORD_BRADYCARDIA,\n\n        subDataTypes: [{\n          dataType: HmsDataController.DT_INSTANTANEOUS_HEART_RATE,\n          hiHealthOption: HmsDataController.ACCESS_READ\n        }\n        ]\n\n\n      }\n\n      const result = await HmsHealthRecordController.deleteHealthRecord(\n        healthRecordDeleteOptions\n      );\n      Utils.logResult(\"deleteHealthRecord\", result);\n      Utils.notify(\"deleteHealthRecord - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>Health Recorder CONTROLLER</Text>\n        <View style={styles.innerBody}>\n          <TouchableOpacity\n            style={styles.horizontalButton}\n            onPress={() => this.addHealthRecord()}\n            underlayColor=\"#fff\">\n            <Text style={styles.smallButtonLabel}> Add Health Record </Text>\n          </TouchableOpacity>\n\n          <TouchableOpacity\n            style={styles.horizontalButton}\n            onPress={() => this.updateHealthRecord()}\n            underlayColor=\"#fff\">\n            <Text style={styles.smallButtonLabel}> Update Health Record </Text>\n          </TouchableOpacity>\n\n          <TouchableOpacity\n            style={styles.horizontalButton}\n            onPress={() => this.getHealthRecord()}\n            underlayColor=\"#fff\">\n            <Text style={styles.smallButtonLabel}> Get Health Record </Text>\n          </TouchableOpacity>\n\n          <TouchableOpacity\n            style={styles.horizontalButton}\n            onPress={() => this.deleteHealthRecord()}\n            underlayColor=\"#fff\">\n            <Text style={styles.smallButtonLabel}> Delete Health Record </Text>\n          </TouchableOpacity>\n        </View>\n\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/MainPage.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableHighlight,\n  TouchableOpacity,\n  StyleSheet,\n} from \"react-native\";\n\nimport { HmsHealthAccount } from \"@hmscore/react-native-hms-health\";\nimport { styles } from \"./styles\";\nimport Utils from \"./Utils\";\nimport DataController from \"./DataController\";\nimport AutoRecorderController from \"./AutoRecorderController\";\nimport ActivityRecordsController from \"./ActivityRecordsController\";\nimport SettingController from \"./SettingController\";\nimport ConsentsController from \"./ConsentsController\"; \nimport HealthRecordController from \"./HealthRecordController\";\n\n// Add scopes to apply for. The following only shows an example.\n// Developers need to add scopes according to their specific needs.\nconst scopes = [\n  // View and save steps in HUAWEI Health Kit.\n  HmsHealthAccount.HEALTHKIT_STEP_READ,\n  HmsHealthAccount.HEALTHKIT_STEP_WRITE,\n  // View and save height and weight in HUAWEI Health Kit.\n  HmsHealthAccount.HEALTHKIT_HEIGHTWEIGHT_READ,\n  HmsHealthAccount.HEALTHKIT_HEIGHTWEIGHT_WRITE,\n  // View and save the heart rate data in HUAWEI Health Kit.\n  HmsHealthAccount.HEALTHKIT_HEARTRATE_READ,\n  HmsHealthAccount.HEALTHKIT_HEARTRATE_WRITE,\n  // View and save activity data\n  HmsHealthAccount.HEALTHKIT_ACTIVITY_READ,\n  HmsHealthAccount.HEALTHKIT_ACTIVITY_WRITE,\n  //View and save workout record data\n  HmsHealthAccount.HEALTHKIT_ACTIVITY_RECORD_READ,\n  HmsHealthAccount.HEALTHKIT_ACTIVITY_RECORD_WRITE,\n  //Calories Burnt\n  HmsHealthAccount.HEALTHKIT_CALORIES_READ,\n  HmsHealthAccount.HEALTHKIT_NUTRITION_READ,\n  HmsHealthAccount.HEALTHKIT_LOCATION_READ,\n  HmsHealthAccount.HEALTHKIT_CALORIES_WRITE,\n  HmsHealthAccount.HEALTHKIT_NUTRITION_WRITE,\n  HmsHealthAccount.HEALTHKIT_LOCATION_WRITE,\n  //Health Record\n  HmsHealthAccount.HEALTHKIT_HEARTHEALTH_READ,\n  HmsHealthAccount.HEALTHKIT_HEARTHEALTH_WRITE\n];\n\nconst pages = [\n  {\n    title: \"DataController\",\n    component: DataController,\n  },\n  {\n    title: \"AutoRecorderController\",\n    component: AutoRecorderController,\n  },\n  {\n    title: \"ActivityRecordsController\",\n    component: ActivityRecordsController,\n  },\n  {\n    title: \"SettingController\",\n    component: SettingController,\n  },\n  {\n    title: \"ConsentsController\",\n    component: ConsentsController,\n  },\n  {\n    title: \"HealthRecordController\",\n    component: HealthRecordController,\n  }, \n];\n\n/**\n * Signing In and applying for Scopes.\n * </br>\n * Sign-in and authorization method.\n * The authorization screen will display up if authorization has not granted by the current account.\n */\nasync function signIn(scopes) {\n  try {\n    Utils.logCall(\"signIn\");\n    const result = await HmsHealthAccount.signIn(scopes);\n    Utils.logResult(\"signIn\", result);\n    Utils.notify(\"signIn success\");\n  } catch (error) {\n    Utils.logError(error);\n    Utils.notify(\"signIn fail\");\n  }\n}\n/**\n * Main page for functional description.\n *\n */\nexport default class MainPage extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      currentPage: pages[0],\n    };\n  }\n\n  renderButtons() {\n    return pages.map((b) => (\n      <View\n        key={b.title}\n        style={[\n          { padding: 4, margin: 2 },\n          this.state.currentPage == b ? customStyle.buttonBorder : null,\n        ]}\n      >\n        <TouchableHighlight\n          onPress={() => {\n            this.setState({ currentPage: b });\n          }}\n        >\n          <Text>{b.title}</Text>\n        </TouchableHighlight>\n      </View>\n    ));\n  }\n\n  renderScreen() {\n    const Page = this.state.currentPage.component;\n    return <Page />;\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Health Kit Demo App</Text>\n        <ScrollView horizontal style={{ padding: 4 }}>\n          {this.renderButtons()}\n        </ScrollView>\n        <View style={customStyle.lineStyle} />\n        <Text style={styles.h3}>\n          Touch Sign In to HMS Account to complete login and authorization, and\n          then use other buttons to try the related API functions.\n        </Text>\n        <View style={styles.containerFlex}>\n          <View style={styles.mainPageButton}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => signIn(scopes)}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.buttonText}>Sign In to HMS Account</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        {this.renderScreen()}\n      </ScrollView>\n    );\n  }\n}\n\nconst customStyle = StyleSheet.create({\n  lineStyle: {\n    marginTop: 8,\n    borderBottomColor: \"gray\",\n    borderBottomWidth: 1,\n  },\n  buttonBorder: {\n    borderColor: \"black\",\n    borderWidth: 1,\n    borderRadius: 5,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-health/example/src/SettingController.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { Text, TouchableOpacity, View } from \"react-native\";\n\nimport { styles } from \"./styles\";\n\nimport {\n  HmsDataController,\n  HmsSettingController,\n} from \"@hmscore/react-native-hms-health\";\nimport Utils from \"./Utils\";\n\nconst dataTypeName = \"com.demo.health.anyExtendedCustomDataType\";\n\nexport default class SettingController extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {}\n\n  componentWillUnmount() {}\n\n  /**\n   * add new DataType.\n   * you need two object to add new DataType: DataTypeAddOptions and SettingController.\n   * specify the field by drop-down box, You cannot add DataType with duplicate DataType's name.\n   * You can add multiple field，For simplicity, only one field is added here.\n   *\n   * @returns {Promise<void>}\n   */\n  async addNewDataType() {\n    try {\n      Utils.logCall(\"addNewDataType - SettingController\");\n\n      const result = await HmsSettingController.addNewDataType(\n        dataTypeName,\n        [HmsSettingController.FIELD_STEPS_DELTA, HmsSettingController.FIELD_DISTANCE_DELTA]\n      );\n\n      Utils.logResult(\"addNewDataType\", result);\n      Utils.notify(\"addNewDataType - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * read DataType.\n   * Get DataType with the specified name\n   *\n   * @returns {Promise<void>}\n   */\n  async readDataType() {\n    try {\n      Utils.logCall(\"readDataType - SettingController\");\n\n      const result = await HmsSettingController.readDataType(dataTypeName);\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"readDataType\", result);\n      Utils.notify(\"readDataType - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * disable HiHealth.\n   * After calling this function, HiHealth will cancel All your Records.\n   *\n   * @returns {Promise<void>}\n   */\n  async disableHiHealth() {\n    try {\n      Utils.logCall(\"disableHiHealth - SettingController\");\n\n      const result = await HmsSettingController.disableHiHealth();\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"disableHiHealth\", result);\n      Utils.notify(\"disableHiHealth - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Use the data controller to add a sampling dataset.\n   *\n   * @returns {Promise<void>}\n   */\n  async insertSelfData() {\n    try {\n      Utils.logCall(\"insertTestData - DataController\");\n      // Build the dataCollector object\n      const dataCollector = {\n        dataType: HmsDataController.DT_CONTINUOUS_STEPS_DELTA,\n        dataStreamName: \"STEPS_DELTA\",\n        dataGenerateType: 0,\n      };\n      //You can use sampleSets to add more sampling points to the sampling dataset.\n      const sampleSets = [\n        {\n          startTime: \"2023-05-17 12:00:00\",\n          endTime: \"2023-05-17 12:12:00\",\n          fields: [\n            {\n              fieldName: HmsDataController.FIELD_STEPS_DELTA,\n              fieldValue: 1000,\n            },\n          ],\n          timeUnit: HmsDataController.MILLISECONDS,\n        },\n      ];\n      const result = await HmsDataController.insert(dataCollector, sampleSets);\n      Utils.logResult(\"insert  - SettingController\", result);\n      Utils.notify(\n        \"insert  - SettingController - success!\" + JSON.stringify(sampleSets)\n      );\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  /**\n   * Use the data controller to query the sampling dataset by specific criteria.\n   *\n   * @returns {Promise<void>}\n   */\n  async readSelfData() {\n    try {\n      Utils.logCall(\"readSelfData - SettingController\");\n      // Return the list of activity records that have stopped\n      Utils.logResult(\"readSelfData\", result);\n\n      const dataCollector = {\n        dataType: HmsDataController.DT_CONTINUOUS_STEPS_DELTA,\n        dataStreamName: \"STEPS_DELTA\",\n        dataGenerateType: 0,\n      };\n      const dateMap = {\n        startTime: \"2023-05-17 12:00:00\",\n        endTime: \"2023-05-17 12:12:00\",\n        timeUnit: HmsDataController.MILLISECONDS,\n      };\n      const result = await HmsDataController.read(dataCollector, dateMap, null);\n      Utils.logResult(\"read  - DataController\", result);\n      Utils.notify(\"readSelfData - \" + JSON.stringify(result));\n    } catch (error) {\n      Utils.logError(error);\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.bg}>\n        <Text style={styles.h1}>SETTTING CONTROLLER</Text>\n\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\"Set new data type name, Duplicate names are unacceptable, this name must start with package name, and End with a custom name.\" +\n              \"\\n \\n In this demo app it is \" +\n              dataTypeName +\n              \"\\n \\n Choose which Field to select via HmsSettingController.FIELD_VALUES.\"}\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.addNewDataType()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> addNewDataType </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readDataType()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> readDataType </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.disableHiHealth()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> disableHiHealth </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>\n            {\"Use the newly added data type to write or read value.\"}\n          </Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.insertSelfData()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> insertSelfData </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() => this.readSelfData()}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> readSelfData </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>{\"Authorization methods\"}</Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() =>\n                HmsSettingController.getHealthAppAuthorization().then((e) => {\n                  console.log(e);\n                })\n              }\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> getAuthorization </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() =>\n                HmsSettingController.checkHealthAppAuthorization().then((e) => {\n                  console.log(e);\n                })\n              }\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> checkAuthorization </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <View style={styles.innerBody}>\n          <Text style={styles.h2}>{\"Logger methods\"}</Text>\n          <View style={styles.buttonDataController}>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() =>\n                HmsSettingController.enableLogger().then((e) => {\n                  console.log(e);\n                })\n              }\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> enableLogger </Text>\n            </TouchableOpacity>\n            <TouchableOpacity\n              style={styles.horizontalButton}\n              onPress={() =>\n                HmsSettingController.disableLogger().then((e) => {\n                  console.log(e);\n                })\n              }\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.smallButtonLabel}> disableLogger </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/Utils.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {Platform, ToastAndroid} from 'react-native';\n\nexport default class Utils {\n  static notify(message) {\n    if (Platform.OS === 'android') {\n      ToastAndroid.show(message, ToastAndroid.SHORT);\n    }\n  }\n\n  static logCall(msg) {\n    console.log('call ' + msg);\n  }\n\n  static logResult(msg, result) {\n    console.log('*'.repeat(20 + msg.length));\n    console.log('****** ' + msg + ' *****');\n    console.log('*'.repeat(20 + msg.length));\n    console.log(JSON.stringify(result));\n    console.log('*'.repeat(20 + msg.length));\n  }\n\n  static logError(error) {\n    console.log('*'.repeat(20 + error.length));\n    console.log('******ERROR*****');\n    console.log('*'.repeat(20 + error.length));\n    console.log(JSON.stringify(error));\n    console.log('*'.repeat(20 + error.length));\n  }\n}\n"
  },
  {
    "path": "react-native-hms-health/example/src/styles.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {StyleSheet} from 'react-native';\n\nexport const styles = StyleSheet.create({\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  buttonDataController: {\n    width: '100%',\n    alignSelf: 'center',\n    marginTop: 15,\n  },\n\n  horizontalButtons: {\n    flexDirection: 'row',\n    margin: 5,\n    paddingRight: 15,\n    width: '90%',\n    height: 50,\n  },\n\n  horizontalCenterButtons: {\n    flexDirection: 'row',\n    justifyContent: 'center',\n    width: '100%',\n    height: 50,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    borderBottomWidth: 1,\n    padding: 25,\n    borderBottomColor: '#D3D3D3',\n  },\n\n  h2: {\n    borderTopColor: '#D3D3D3',\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 14,\n    padding: 5,\n  },\n\n  h3: {\n    textAlign: 'center',\n    fontSize: 14,\n    padding: 20,\n    paddingBottom: 0,\n  },\n\n  h5: {\n    textAlign: 'center',\n    fontSize: 14,\n    padding: 20,\n    paddingTop: 0,\n    paddingBottom: 0,\n  },\n\n  h3Color: {\n    textAlign: 'center',\n    fontSize: 14,\n    padding: 20,\n    paddingTop: 0,\n    paddingBottom: 0,\n    color: '#42aaf5',\n  },\n\n  innerBody: {\n    borderBottomWidth: 1,\n    borderBottomColor: '#D3D3D3',\n  },\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  smallButton: {\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    paddingTop: 10,\n    paddingBottom: 10,\n    margin: 5,\n    backgroundColor: '#42aaf5',\n    width: '25%',\n  },\n\n  sensorButton: {\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#42aaf5',\n    alignSelf: 'center',\n    justifyContent: 'center',\n    margin: 10,\n    width: '50%',\n    height: 44,\n  },\n\n  autoRecorderButton: {\n    backgroundColor: '#42aaf5',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    alignSelf: 'center',\n    justifyContent: 'center',\n    margin: 5,\n    width: '70%',\n    height: 40,\n  },\n\n  sensorButtonLarge: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#42aaf5',\n    alignSelf: 'center',\n    justifyContent: 'center',\n    margin: 10,\n    width: '80%',\n    height: 80,\n  },\n\n  mainPageButton: {\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#42aaf5',\n    width: '100%',\n    marginBottom: 10,\n    alignSelf: 'center',\n    justifyContent: 'center',\n    height: 40,\n  },\n\n  horizontalButton: {\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#42aaf5',\n    width: '80%',\n    marginBottom: 10,\n    alignSelf: 'center',\n    justifyContent: 'center',\n    height: 40,\n  },\n\n  smallButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  container: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n});\n"
  },
  {
    "path": "react-native-hms-health/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-health\",\n  \"title\": \"React Native Hms Health\",\n  \"description\": \"React Native Hms Health\",\n  \"version\": \"6.11.0-303\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-health\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-health\",\n    \"huawei-health\",\n    \"hms-health\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}\n"
  },
  {
    "path": "react-native-hms-health/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-health\" {\n\n    export const HmsHealthAccount = {\n        signIn(scopes: HmsHealthAccount): Promise<Object>;\n    }\n\n    export const HmsDataController = {\n        initDataController(): Promise<SuccessObject>;,\n        insert(dataCollector: DataCollector, sampleSet: SamplePoint[]): Promise<SuccessObject>;,\n        delete(dataCollector: DataCollector, dateMap: DateMap): Promise<SuccessObject>;,\n        update(dataCollector: DataCollector, sampleSet: SamplePoint[], dateMap: DateMap): Promise<SuccessObject>;,\n        read(dataCollector: DataCollector, dateMap: DateMap, groupOptions: GroupOptions): Promise<SuccessObject>;,\n        readTodaySummation(dataType: HmsDataController): Promise<Object>;,\n        readTodaySummationList(dataType: HmsDataController[]): Promise<Object>;,\n        readDailySummation(dataType: HmsDataController, startTime: number, endTime: number): Promise<Object>;,\n        readDailySummationList(dataType: HmsDataController[], startTime: number, endTime: number): Promise<Object>;,\n        clearAll(): Promise<SuccessObject>;\n    }\n\n    interface SuccessObject {\n        isSuccess: boolean\n    }\n\n    interface DataTypeOption {\n        dataType: HmsDataController,\n        acces: HmsHealthAccount\n    }\n\n    interface DataCollector {\n        dataType: HmsDataController,\n        dataGenerateType: HmsDataController,\n        dataCollectorName: string,\n        dataStreamName: string,\n        deviceId: string,\n        isLocalized: boolean\n    }\n\n    interface SamplePoint {\n        startTime: string,\n        endTime: string,\n        samplingTime: string,\n        fields: Field[],\n        timeUnit: HmsDataController\n    }\n\n    interface Field {\n        fieldName: HmsDataController,\n        fieldValue: ?\n    }\n\n    interface DateMap {\n        startTime: string,\n        endTime: string,\n        timeUnit: HmsDataController\n    }\n\n    interface GroupOptions {\n        groupByTime: GroupByTime,\n        inputDataType: HmsDataController,\n        outputDataType: HmsDataController\n    }\n\n    interface GroupByTime {\n        duration: number,\n        timeUnit: HmsDataController\n    }\n    \n\n    export declare enum HmsDataController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n        DT_ACTIVITY_FEATURE_GOLF = \"DT_ACTIVITY_FEATURE_GOLF\",\n        DT_CONTINUOUS_HYDRATE_TOTAL = \"DT_CONTINUOUS_HYDRATE_TOTAL\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY_V2 = \"DT_CONTINUOUS_EXERCISE_INTENSITY_V2\",\n        DT_STATISTICS_EXERCISE_INTENSITY_V2 = \"DT_STATISTICS_EXERCISE_INTENSITY_V2\",\n        DT_RESTING_HEART_RATE_STATISTICS = \"DT_RESTING_HEART_RATE_STATISTICS\",\n        DT_CONTINUOUS_JUMP_STATISTICS = \"DT_CONTINUOUS_JUMP_STATISTICS\",\n        DT_CONTINUOUS_SKIP_SPEED_STATISTICS = \"DT_CONTINUOUS_SKIP_SPEED_STATISTICS\",\n        DT_CONTINUOUS_ALTITUDE_STATISTICS = \"DT_CONTINUOUS_ALTITUDE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_JUMPING_ROPE = \"DT_ACTIVITY_FEATURE_JUMPING_ROPE\",\n        DT_ACTIVITY_FEATURE_BASKETBALL = \"DT_ACTIVITY_FEATURE_BASKETBALL\",\n        DT_INSTANTANEOUS_PEDALING_RATE = \"DT_INSTANTANEOUS_PEDALING_RATE\",\n        DT_CONTINUOUS_PEDALING_RATE_STATISTICS = \"DT_CONTINUOUS_PEDALING_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER = \"DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER\",\n        DT_ACTIVITY_FEATURE_SWIMMING_POOL = \"DT_ACTIVITY_FEATURE_SWIMMING_POOL\",\n        DT_ACTIVITY_FEATURE_SKIING = \"DT_ACTIVITY_FEATURE_SKIING\",\n        DT_DIVING_DEPTH=\"DT_DIVING_DEPTH\",\n        DT_DIVING_DEPTH_STATISTICS=\"DT_DIVING_DEPTH_STATISTICS\",\n        DT_WATER_TEMPERATURE=\"DT_WATER_TEMPERATURE\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_CGM_BLOOD_GLUCOSE = \"DT_CGM_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_SKIN_TEMPERATURE = \"DT_INSTANTANEOUS_SKIN_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_DYSMENORRHOEA = \"DT_DYSMENORRHOEA\",\n        DT_PHYSICAL_SYMPTOMS = \"DT_PHYSICAL_SYMPTOMS\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_TACHYCARDIA = \"DT_HEALTH_RECORD_TACHYCARDIA\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CGM_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CGM_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SKIN_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_SKIN_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_VENTILATOR = \"DT_HEALTH_RECORD_VENTILATOR\", \n        DT_SLEEP_RESPIRATORY_DETAIL = \"DT_SLEEP_RESPIRATORY_DETAIL\",\n        DT_SLEEP_RESPIRATORY_EVENT = \"DT_SLEEP_RESPIRATORY_EVENT\",\n\n       \n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n        SLEEP_RESPIRATORY_TYPE = \"SLEEP_RESPIRATORY_TYPE\",\n        SLEEP_RESPIRATORY_VALUE = \"SLEEP_RESPIRATORY_VALUE\",\n        EVENT_NAME = \"EVENT_NAME\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n        SYS_MODE = \"SYS_MODE\",\n        SYS_SESSION_DATE = \"SYS_SESSION_DATE\",\n        EVENT_AHI = \"EVENT_AHI\",\n        SYS_DURATION = \"SYS_DURATION\",\n        LUMIS_TIDVOL_MEDIAN = \"LUMIS_TIDVOL_MEDIAN\",\n        LUMIS_TIDVOL = \"LUMIS_TIDVOL\",\n        LUMIS_TIDVOL_MAX = \"LUMIS_TIDVOL_MAX\",\n        CLINICAL_RESPRATE_MEDIAN = \"CLINICAL_RESPRATE_MEDIAN\",\n        CLINICAL_RESP_RATE = \"CLINICAL_RESP_RATE\",\n        CLINICAL_RESP_RATE_MAX = \"CLINICAL_RESP_RATE_MAX\",\n        LUMIS_IERATIO_MEDIAN = \"LUMIS_IERATIO_MEDIAN\",\n        LUMIS_IERATIO_QUANTILE = \"LUMIS_IERATIO_QUANTILE\",\n        LUMIS_IERATIO_MAX = \"LUMIS_IERATIO_MAX\",\n        MASK_OFF = \"MASK_OFF\",\n        HYPOVENTILATION_INDEX = \"HYPOVENTILATION_INDEX\",\n        OBSTRUCTIVE_APNEA_INDEX = \"OBSTRUCTIVE_APNEA_INDEX\",\n        PRESSURE_BELOW = \"PRESSURE_BELOW\",\n        HYPOVENTILATION_EVENT_TIMES = \"HYPOVENTILATION_EVENT_TIMES\",\n        SNORING_EVENT_TIMES = \"SNORING_EVENT_TIMES\",\n        CENTER_APNEA_EVENT_TIMES = \"CENTER_APNEA_EVENT_TIMES\",\n        OBSTRUCTIVE_APNEA_EVENT_TIMES = \"OBSTRUCTIVE_APNEA_EVENT_TIMES\",\n        AIR_FLOW_LIMIT_EVENT_TIMES = \"AIR_FLOW_LIMIT_EVENT_TIMES\",\n        MASSIVE_LEAK_EVENT_TIMES = \"MASSIVE_LEAK_EVENT_TIMES\",\n        UNKNOW_EVENT_TIMES = \"UNKNOW_EVENT_TIMES\",\n        ALL_EVENT_TIMES = \"ALL_EVENT_TIMES\",\n        \n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n    }\n\n    export declare enum HmsHealthAccount {\n        HEALTHKIT_HEIGHTWEIGHT_READ = \"https://www.huawei.com/healthkit/heightweight.read\",\n        HEALTHKIT_HEIGHTWEIGHT_WRITE = \"https://www.huawei.com/healthkit/heightweight.write\",\n        HEALTHKIT_STEP_READ = \"https://www.huawei.com/healthkit/step.read\",\n        HEALTHKIT_STEP_WRITE = \"https://www.huawei.com/healthkit/step.write\",\n        HEALTHKIT_LOCATION_READ = \"https://www.huawei.com/healthkit/location.read\",\n        HEALTHKIT_LOCATION_WRITE = \"https://www.huawei.com/healthkit/location.write\",\n        HEALTHKIT_HEARTRATE_READ = \"https://www.huawei.com/healthkit/heartrate.read\",\n        HEALTHKIT_HEARTRATE_WRITE = \"https://www.huawei.com/healthkit/heartrate.write\",\n        HEALTHKIT_BLOODGLUCOSE_READ = \"https://www.huawei.com/healthkit/bloodglucose.read\",\n        HEALTHKIT_BLOODGLUCOSE_WRITE = \"https://www.huawei.com/healthkit/bloodglucose.write\",\n        HEALTHKIT_DISTANCE_READ = \"https://www.huawei.com/healthkit/distance.read\",\n        HEALTHKIT_DISTANCE_WRITE = \"https://www.huawei.com/healthkit/distance.write\",\n        HEALTHKIT_SPEED_READ = \"https://www.huawei.com/healthkit/speed.read\",\n        HEALTHKIT_SPEED_WRITE = \"https://www.huawei.com/healthkit/speed.write\",\n        HEALTHKIT_CALORIES_READ = \"https://www.huawei.com/healthkit/calories.read\",\n        HEALTHKIT_CALORIES_WRITE = \"https://www.huawei.com/healthkit/calories.write\",\n        HEALTHKIT_PULMONARY_READ = \"https://www.huawei.com/healthkit/pulmonary.read\",\n        HEALTHKIT_PULMONARY_WRITE = \"https://www.huawei.com/healthkit/pulmonary.write\",\n        HEALTHKIT_STRENGTH_READ = \"https://www.huawei.com/healthkit/strength.read\",\n        HEALTHKIT_STRENGTH_WRITE = \"https://www.huawei.com/healthkit/strength.write\",\n        HEALTHKIT_ACTIVITY_READ = \"https://www.huawei.com/healthkit/activity.read\",\n        HEALTHKIT_ACTIVITY_WRITE = \"https://www.huawei.com/healthkit/activity.write\",\n        HEALTHKIT_BODYFAT_READ = \"https://www.huawei.com/healthkit/bodyfat.read\",\n        HEALTHKIT_BODYFAT_WRITE = \"https://www.huawei.com/healthkit/bodyfat.write\",\n        HEALTHKIT_SLEEP_READ = \"https://www.huawei.com/healthkit/sleep.read\",\n        HEALTHKIT_SLEEP_WRITE = \"https://www.huawei.com/healthkit/sleep.write\",\n        HEALTHKIT_NUTRITION_READ = \"https://www.huawei.com/healthkit/nutrition.read\",\n        HEALTHKIT_NUTRITION_WRITE = \"https://www.huawei.com/healthkit/nutrition.write\",\n        HEALTHKIT_BLOODPRESSURE_READ = \"https://www.huawei.com/healthkit/bloodpressure.read\",\n        HEALTHKIT_BLOODPRESSURE_WRITE = \"https://www.huawei.com/healthkit/bloodpressure.write\",\n        HEALTHKIT_OXYGENSTATURATION_READ = \"https://www.huawei.com/healthkit/oxygensaturation.read\",\n        HEALTHKIT_OXYGENSTATURATION_WRITE = \"https://www.huawei.com/healthkit/oxygensaturation.write\",\n        HEALTHKIT_BODYTEMPERATURE_READ = \"https://www.huawei.com/healthkit/bodytemperature.read\",\n        HEALTHKIT_BODYTEMPERATURE_WRITE = \"https://www.huawei.com/healthkit/bodytemperature.write\",\n        HEALTHKIT_REPRODUCTIVE_READ = \"https://www.huawei.com/healthkit/reproductive.read\",\n        HEALTHKIT_REPRODUCTIVE_WRITE = \"https://www.huawei.com/healthkit/reproductive.write\",\n        HEALTHKIT_ACTIVITY_RECORD_READ = \"https://www.huawei.com/healthkit/activityrecord.read\",\n        HEALTHKIT_ACTIVITY_RECORD_WRITE = \"https://www.huawei.com/healthkit/activityrecord.write\",\n        HEALTHKIT_STRESS_READ = \"https://www.huawei.com/healthkit/stress.read\",\n        HEALTHKIT_STRESS_WRITE = \"https://www.huawei.com/healthkit/stress.write\",\n        HEALTHKIT_HEARTHEALTH_READ = \"https://www.huawei.com/healthkit/hearthealth.read\",\n        HEALTHKIT_HEARTHEALTH_WRITE = \"https://www.huawei.com/healthkit/hearthealth.write\",\n        HEALTHKIT_HISTORYDATA_OPEN_WEEK = \"https://www.huawei.com/healthkit/historydata.open.week\",\n        HEALTHKIT_HISTORYDATA_OPEN_MONTH = \"https://www.huawei.com/healthkit/historydata.open.month\",\n        HEALTHKIT_HISTORYDATA_OPEN_YEAR = \"https://www.huawei.com/healthkit/hearthealth.write\"\n    }\n\n\n    export const HmsActivityRecordsController = {\n        beginActivityRecord(activityRecord: ActivityRecord): Promise<SuccessObject>;,\n        beginBackgroundActivityRecord(activityRecord: ActivityRecord): Promise<SuccessObject>;,\n        continueActivityRecord(activityRecordId: string): Promise<SuccessObject>;,\n        endActivityRecord(activityRecordId: string): Promise<Object>;,\n        endBackgroundActivityRecord(activityRecordId: string): Promise<Object>;,\n        endAllActivityRecords(): Promise<Object>;,\n        addActivityRecord(activityRecord: ActivityRecord, sampleSetMapObject: SampleSetMapObject): Promise<SuccessObject>;,\n        getActivityRecord(dataType: HmsActivityRecordsController, dateMap: DateMap, activityRecordId: string, activityRecordName: string): Promise<Object>;,\n        deleteActivityRecord(deleteOptions: DeleteOptions): Promise<Object>;\n    }\n\n    interface ActivityRecord {\n        activityRecordId: string,\n        name?: string,\n        description?: string,\n        activityType: HmsActivityRecordsController,\n        startTime: string,\n        endTime: string,\n        timeUnit?: HmsActivityRecordsController,\n        activitySummary: ActivitySummary\n    }\n\n    interface ActivitySummary {\n        paceSummary: PaceSummary,\n        dataSummary: DataSummary\n    }\n\n    interface PaceSummary {\n        avgPace: number,\n        bestPace: number,\n        paceMap: Object,\n        britishPaceMap: Object,\n        partTimeMap: Object,\n        britishPartTimeMap: Object,\n        sportHealthPaceMap: Object\n    }\n\n    interface DataSummary {\n        dataCollector: DataCollector,\n        samplePoints: SamplePoint[]\n    }\n\n    interface DeleteOptions {\n        startTime: string,\n        endTime: string,\n        timeUnit: HmsActivityRecordsController,\n        activityRecordIds: string[],\n        subDataTypes: SubDataType[],\n        isDeleteSubData: boolean\n    }\n\n    interface SubDataType {\n        dataType: HmsActivityRecordsController,\n        hiHealthOption: HmsHealthAccount\n    }\n\n    interface SampleSetMapObject {\n        dataColector: DataCollector,\n        samplePoints: SamplePoint[]\n    }\n\n\n    export declare enum HmsActivityRecordsController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n\n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n\n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n\n        MIME_TYPE_PREFIX = \"vnd.huawei.hihealth.activity/\",\n        EXTRA_ACTION_STATUS = \"actionStatus\",\n        STATUS_ACTION_START = \"StartedActionStatus\",\n        STATUS_ACTION_END = \"EndedActionStatus\",\n        AEROBICS = \"aerobics\",\n        ARCHERY = \"archery\",\n        APNEA_TRAINING = \"apnea_training\",\n        APNEA_TEST = \"apnea_test\",\n        BADMINTON = \"badminton\",\n        BASEBALL = \"baseball\",\n        BASKETBALL = \"basketball\",\n        BIATHLON = \"biathlon\",\n        BOXING = \"boxing\",\n        CALISTHENICS = \"calisthenics\",\n        CIRCUIT_TRAINING = \"circuit_training\",\n        CRICKET = \"cricket\",\n        CROSSFIT = \"crossfit\",\n        CURLING = \"curling\",\n        CYCLING = \"cycling\",\n        CYCLING_INDOOR = \"cycling_indoor\",\n        DANCING = \"dancing\",\n        DIVING = \"diving\",\n        ELEVATOR = \"elevator\",\n        ELLIPTICAL = \"elliptical\",\n        ERGOMETER = \"ergometer\",\n        ESCALATOR = \"escalator\",\n        FENCING = \"fencing\",\n        FOOTBALL_AMERICAN = \"football.american\",\n        FOOTBALL_AUSTRALIAN = \"football.australian\",\n        FOOTBALL_SOCCER = \"football.soccer\",\n        FLYING_DISC = \"flying_disc\",\n        GARDENING = \"gardening\",\n        GOLF = \"golf\",\n        GYMNASTICS = \"gymnastics\",\n        HANDBALL = \"handball\",\n        HIIT = \"interval_training.high_intensity\",\n        HIKING = \"hiking\",\n        HOCKEY = \"hockey\",\n        HORSE_RIDING = \"horse_riding\",\n        HOUSEWORK = \"housework\",\n        ICE_SKATING = \"ice_skating\",\n        IN_VEHICLE = \"in_vehicle\",\n        INTERVAL_TRAINING = \"interval_training\",\n        JUMPING_ROPE = \"jumping_rope\",\n        KAYAKING = \"kayaking\",\n        KETTLEBELL_TRAINING = \"kettlebell_training\",\n        KICKBOXING = \"kickboxing\",\n        KITESURFING = \"kitesurfing\",\n        MARTIAL_ARTS = \"martial_arts\",\n        MEDITATION = \"meditation\",\n        MIXED_MARTIAL_ARTS = \"martial_arts.mixed\",\n        ON_FOOT = \"on_foot\",\n        OTHER = \"other\",\n        P90X = \"p90x\",\n        PARAGLIDING = \"paragliding\",\n        PILATES = \"pilates\",\n        POLO = \"polo\",\n        RACQUETBALL = \"racquetball\",\n        ROCK_CLIMBING = \"rock_climbing\",\n        ROWING = \"rowing\",\n        ROWING_MACHINE = \"rowing.machine\",\n        RUGBY = \"rugby\",\n        RUNNING = \"running\",\n        RUNNING_MACHINE = \"running.machine\",\n        SAILING = \"sailing\",\n        SCUBA_DIVING = \"scuba_diving\",\n        SCOOTER_RIDING = \"scooter_riding\",\n        SKATEBOARDING = \"skateboarding\",\n        SKATING = \"skating\",\n        SKIING = \"skiing\",\n        SLEDDING = \"sledding\",\n        SLEEP = \"sleep\",\n        SLEEP_LIGHT = \"sleep.light\",\n        SLEEP_DEEP = \"sleep.deep\",\n        SLEEP_REM = \"sleep.rem\",\n        SLEEP_AWAKE = \"sleep.awake\",\n        SNOWBOARDING = \"snowboarding\",\n        SNOWMOBILE = \"snowmobile\",\n        SNOWSHOEING = \"snowshoeing\",\n        SOFTBALL = \"softball\",\n        SQUASH = \"squash\",\n        STAIR_CLIMBING = \"stair_climbing\",\n        STAIR_CLIMBING_MACHINE = \"stair_climbing.machine\",\n        STANDUP_PADDLEBOARDING = \"standup_paddleboarding\",\n        STILL = \"still\",\n        STRENGTH_TRAINING = \"strength_training\",\n        SURFING = \"surfing\",\n        SWIMMING = \"swimming\",\n        SWIMMING_POOL = \"swimming.pool\",\n        SWIMMING_OPEN_WATER = \"swimming.open_water\",\n        TABLE_TENNIS = \"table_tennis\",\n        TEAM_SPORTS = \"team_sports\",\n        TENNIS = \"tennis\",\n        TILTING = \"tilting\",\n        UNKNOWN = \"unknown\",\n        VOLLEYBALL = \"volleyball\",\n        WAKEBOARDING = \"wakeboarding\",\n        WALKING = \"walking\",\n        WATER_POLO = \"water_polo\",\n        WEIGHTLIFTING = \"weightlifting\",\n        WHEELCHAIR = \"wheelchair\",\n        WINDSURFING = \"windsurfing\",\n        YOGA = \"yoga\",\n        ZUMBA = \"zumba\"\n    }\n\n    export const HmsAutoRecorderController = {\n        startRecord(dataType: HmsAutoRecorderController, notificationOptions: NotificationOptions): Promise<SuccessObject>;,\n        stopRecord(dataType: HmsAutoRecorderController): Promise<SuccessObject>;\n    }\n\n    interface NotificationOptions {\n        title: string,\n        text: string,\n        subText: string,\n        ticker: string,\n        chronometer: string,\n        largeIcon: string\n    }\n\n\n    export declare enum HmsAutoRecorderController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n\n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n    }\n\n    export const HmsHealthRecordController = {\n        addHealthRecord(healthRecordBuilder: HealthRecord, dataCollectorArray: DataCollector[], sampleSetMapArr: SampleSet[], samplePointMapArr: SampleSet[]): Promise<string>;,\n        updateHealthRecord(healthRecordBuilder: HealthRecord, dataCollectorArray: DataCollector[], sampleSetMapArr: SampleSet[], samplePointMapArr: SampleSet[]): Promise<void>;,\n        getHealthRecord(dataType: HmsHealthRecordController, dateMap: DateMap);,\n        deleteHealthRecord(deleteOptions: HealthRecordDeleteOptions): Promise<Object>;\n    }\n\n    interface HealthRecord {\n        startTime: string,\n        endTime: string,\n        timeUnit: HmsHealthRecordController,\n        fields: Field[]\n    }\n\n    interface HealthRecordDeleteOptions {\n        startTime: string,\n        endTime: string,\n        timeUnit: HmsHealthRecordController,\n        isDeleteSubData: boolean,\n        healthRecordIds: string[],\n        dataType: HmsHealthRecordController,\n        subDataTypes: SubDataType[]\n    }\n\n    export declare enum HmsHealthRecordController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n\n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n\n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n    }\n\n    export const HmsSettingController = {\n        addNewDataType(dataTypeName: string, fields: HmsSettingController[]): Promise<Object>;,\n        readDataType(dataTypeName: string): Promise<Object>;,\n        disableHiHealth(): Promise<SuccessObject>;,\n        getHealthAppAuthorization(): Promise<Object>;,\n        checkHealthAppAuthorization(): Promise<SuccessObject>;,\n        enableLogger(): Promise<SuccessObject>;,\n        disableLogger(): Promise<SuccessObject>;\n    }\n\n    export declare enum HmsSettingController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n\n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n\n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n    }\n\n    export const HmsConsentsController = {\n        get(lang: string, appId: string): Promise<Object>;,\n        revoke(appId: string, scopes: HmsHealthAccount[]): Promise<SuccessObject>;\n    }\n\n    export declare enum HmsConsentsController {\n        DT_UNUSED_DATA_TYPE = \"DT_UNUSED_DATA_TYPE\",\n        DT_CONTINUOUS_STEPS_DELTA = \"DT_CONTINUOUS_STEPS_DELTA\",\n        DT_CONTINUOUS_STEPS_TOTAL = \"DT_CONTINUOUS_STEPS_TOTAL\", \n        DT_CONTINUOUS_STEPS_RATE_STATISTIC = \"DT_CONTINUOUS_STEPS_RATE_STATISTIC\",\n        DT_INSTANTANEOUS_STEPS_RATE = \"DT_INSTANTANEOUS_STEPS_RATE\",\n        DT_CONTINUOUS_ACTIVITY_SEGMENT = \"DT_CONTINUOUS_ACTIVITY_SEGMENT\",\n        DT_CONTINUOUS_CALORIES_CONSUMED = \"DT_CONTINUOUS_CALORIES_CONSUMED\", \n        DT_CONTINUOUS_CALORIES_BURNT = \"DT_CONTINUOUS_CALORIES_BURNT\",\n        DT_INSTANTANEOUS_CALORIES_BMR = \"DT_INSTANTANEOUS_CALORIES_BMR\", \n        DT_INSTANTANEOUS_POWER_SAMPLE = \"DT_INSTANTANEOUS_POWER_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLE =\"DT_INSTANTANEOUS_ACTIVITY_SAMPLE\",\n        DT_INSTANTANEOUS_ACTIVITY_SAMPLES = \"DT_INSTANTANEOUS_ACTIVITY_SAMPLES\",\n        DT_INSTANTANEOUS_HEART_RATE = \"DT_INSTANTANEOUS_HEART_RATE\", \n        DT_INSTANTANEOUS_LOCATION_SAMPLE = \"DT_INSTANTANEOUS_LOCATION_SAMPLE\",\n        DT_INSTANTANEOUS_LOCATION_TRACE = \"DT_INSTANTANEOUS_LOCATION_TRACE\",\n        DT_CONTINUOUS_DISTANCE_DELTA = \"DT_CONTINUOUS_DISTANCE_DELTA\", \n        DT_CONTINUOUS_DISTANCE_TOTAL = \"DT_CONTINUOUS_DISTANCE_TOTAL\",\n        DT_CONTINUOUS_CALORIES_BURNT_TOTAL = \"DT_CONTINUOUS_CALORIES_BURNT_TOTAL\",\n        DT_INSTANTANEOUS_SPEED = \"DT_INSTANTANEOUS_SPEED\",\n        DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL = \"DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL\",\n        DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION = \"DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION\",\n        DT_CONTINUOUS_BIKING_PEDALING_TOTAL = \"DT_CONTINUOUS_BIKING_PEDALING_TOTAL\", \n        DT_INSTANTANEOUS_BIKING_PEDALING_RATE = \"DT_INSTANTANEOUS_BIKING_PEDALING_RATE\",\n        DT_INSTANTANEOUS_HEIGHT = \"DT_INSTANTANEOUS_HEIGHT\", \n        DT_INSTANTANEOUS_BODY_WEIGHT = \"DT_INSTANTANEOUS_BODY_WEIGHT\",\n        DT_INSTANTANEOUS_BODY_FAT_RATE = \"DT_INSTANTANEOUS_BODY_FAT_RATE\",\n        DT_INSTANTANEOUS_NUTRITION_FACTS = \"DT_INSTANTANEOUS_NUTRITION_FACTS\",\n        DT_INSTANTANEOUS_HYDRATE = \"DT_INSTANTANEOUS_HYDRATE\",\n        DT_CONTINUOUS_WORKOUT_DURATION = \"DT_CONTINUOUS_WORKOUT_DURATION\",\n        DT_CONTINUOUS_EXERCISE_INTENSITY = \"DT_CONTINUOUS_EXERCISE_INTENSITY\",\n        DT_STATISTICS_SLEEP = \"DT_STATISTICS_SLEEP\",\n        DT_CONTINUOUS_SLEEP = \"DT_CONTINUOUS_SLEEP\", \n        DT_INSTANTANEOUS_STRESS = \"DT_INSTANTANEOUS_STRESS\",\n        DT_INSTANTANEOUS_STRESS_STATISTICS = \"DT_INSTANTANEOUS_STRESS_STATISTICS\",\n        DT_INSTANTANEOUS_RESTING_HEART_RATE = \"DT_INSTANTANEOUS_RESTING_HEART_RATE\", \n        DT_CONTINUOUS_JUMP = \"DT_CONTINUOUS_JUMP\",\n        DT_INSTANTANEOUS_EXERCISE_HEART_RATE = \"DT_INSTANTANEOUS_EXERCISE_HEART_RATE\", \n        DT_INSTANTANEOUS_ALTITUDE = \"DT_INSTANTANEOUS_ALTITUDE\", \n        DT_INSTANTANEOUS_SKIP_SPEED = \"DT_INSTANTANEOUS_SKIP_SPEED\",\n        DT_CONTINUOUS_RUN_POSTURE = \"DT_CONTINUOUS_RUN_POSTURE\",\n        DT_CONTINUOUS_RUN_POSTURE_STATISTICS = \"DT_CONTINUOUS_RUN_POSTURE\", \n        DT_INSTANTANEOUS_STROKE_RATE = \"DT_INSTANTANEOUS_STROKE_RATE\",\n        DT_CONTINUOUS_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_STROKE_RATE_STATISTICS\",\n        DT_INSTANTANEOUS_SWIMMING_STROKE_RATE = \"DT_INSTANTANEOUS_SWIMMING_STROKE_RATE\",\n        DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS = \"DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_ROWING = \"DT_ACTIVITY_FEATURE_ROWING\",\n        DT_INSTANTANEOUS_SWIMMING_SWOLF = \"DT_INSTANTANEOUS_SWIMMING_SWOLF\", \n        DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS = \"DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS\", \n        DT_RESISTANCE = \"DT_RESISTANCE\",\n        DT_RESISTANCE_STATISTICS = \"DT_RESISTANCE_STATISTICS\",\n        DT_VO2MAX = \"DT_VO2MAX\",\n        DT_VO2MAX_STATISTICS = \"DT_VO2MAX_STATISTICS\",\n        DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS = \"DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN\",\n        DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST = \"DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST\", \n        DT_ACTIVITY_FEATURE_FREEDIVING = \"DT_ACTIVITY_FEATURE_FREEDIVING\",\n        \n        POLYMERIZE_CONTINUOUS_WORKOUT_DURATION = \"POLYMERIZE_CONTINUOUS_WORKOUT_DURATION\",\n        POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS = \"POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS\",\n        POLYMERIZE_STEP_COUNT_DELTA = \"POLYMERIZE_STEP_COUNT_DELTA\",\n        POLYMERIZE_DISTANCE_DELTA = \"POLYMERIZE_DISTANCE_DELTA\",\n        POLYMERIZE_CALORIES_CONSUMED = \"POLYMERIZE_CALORIES_CONSUMED\",\n        POLYMERIZE_CALORIES_EXPENDED = \"POLYMERIZE_CALORIES_EXPENDED\",\n        POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS = \"POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE = \"POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE\",\n        POLYMERIZE_CONTINUOUS_POWER_STATISTICS = \"POLYMERIZE_CONTINUOUS_POWER_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPEED_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPEED_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS\", \n        POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS = \"POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS = \"POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS\", \n        POLYMERIZE_HYDRATION = \"POLYMERIZE_HYDRATION\",\n        POLYMERIZE_FREEDIVING_STATISTICS = \"POLYMERIZE_FREEDIVING_STATISTICS\",\n\n\n        // HEALTH DATA TYPES\n        DT_INSTANTANEOUS_BLOOD_PRESSURE = \"DT_INSTANTANEOUS_BLOOD_PRESSURE\",\n        DT_INSTANTANEOUS_BLOOD_GLUCOSE = \"DT_INSTANTANEOUS_BLOOD_GLUCOSE\",\n        DT_INSTANTANEOUS_SPO2 = \"DT_INSTANTANEOUS_SPO2\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE = \"DT_INSTANTANEOUS_BODY_TEMPERATURE\",\n        DT_INSTANTANEOUS_BODY_TEMPERATURE_REST = \"DT_INSTANTANEOUS_BODY_TEMPERATURE_REST\",\n        DT_INSTANTANEOUS_CERVICAL_MUCUS = \"DT_INSTANTANEOUS_CERVICAL_MUCUS\",\n        DT_INSTANTANEOUS_CERVICAL_STATUS = \"DT_INSTANTANEOUS_CERVICAL_STATUS\",\n        DT_CONTINUOUS_MENSTRUAL_FLOW = \"DT_CONTINUOUS_MENSTRUAL_FLOW\",\n        DT_INSTANTANEOUS_OVULATION_DETECTION = \"DT_INSTANTANEOUS_OVULATION_DETECTION\", \n        DT_INSTANTANEOUS_VAGINAL_SPECKLE = \"DT_INSTANTANEOUS_VAGINAL_SPECKLE\",\n        DT_HEALTH_RECORD_BRADYCARDIA = \"DT_HEALTH_RECORD_BRADYCARDIA\",\n        DT_HEALTH_RECORD_SLEEP = \"DT_HEALTH_RECORD_SLEEP\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_PRESSURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_BLOOD_GLUCOSE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_SPO2_STATISTICS = \"POLYMERIZE_CONTINUOUS_SPO2_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_STATISTICS\",\n        POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS = \"POLYMERIZE_CONTINUOUS_BODY_TEMPERATURE_REST_STATISTICS\", \n        POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_INSTANTANEOUS_CERVICAL_STATUS = \"POLYMERIZE_INSTANTANEOUS_CERVICAL_MUCUS\",\n        POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW = \"POLYMERIZE_CONTINUOUS_MENSTRUAL_FLOW\", \n        POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION = \"POLYMERIZE_INSTANTANEOUS_OVULATION_DETECTION\",\n        POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE = \"POLYMERIZE_INSTANTANEOUS_VAGINAL_SPECKLE\",\n\n        DATA_TYPE_CLEAN = \"DATA_TYPE_CLEAN\",\n        DATA_TYPE_CONVERTED = \"DATA_TYPE_CONVERTED\",\n        DATA_TYPE_MERGED = \"DATA_TYPE_MERGED\",\n        DATA_TYPE_POLYMERIZED = \"DATA_TYPE_POLYMERIZED\",\n        DATA_TYPE_DERIVED = \"DATA_TYPE_DERIVED\",\n        DATA_TYPE_INIT = \"DATA_TYPE_INIT\",\n        DATA_TYPE_RAW = \"DATA_TYPE_RAW\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2002\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010 = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_ESH2010\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_AAMI\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_A_B\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_A\",\n        HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B = \"HEALTH_DATA_QUALITY_BLOOD_PRESSURE_BHS_B_B\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972003\",\n        HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013 = \"HEALTH_DATA_QUALITY_BLOOD_GLUCOSE_ISO151972013\",\n\n        NANOSECONDS = \"NANOSECONDS\",\n        MICROSECONDS = \"MICROSECONDS\",\n        MILLISECONDS = \"MILLISECONDS\",\n        SECONDS = \"SECONDS\",\n        MINUTES = \"MINUTES\",\n        HOURS = \"HOURS\",\n        DAYS = \"DAYS\",\n\n        FIELD_PRECISION = \"FIELD_PRECISION\",\n        FIELD_ALTITUDE = \"FIELD_ALTITUDE\",\n        FIELD_TYPE_OF_ACTIVITY = \"FIELD_TYPE_OF_ACTIVITY\",\n        FIELD_POSSIBILITY_OF_ACTIVITY = \"FIELD_POSSIBILITY_OF_ACTIVITY\",\n        FIELD_BPM = \"FIELD_BPM\",\n        FIELD_POSSIBILITY = \"FIELD_POSSIBILITY\",\n        FIELD_SPAN = \"FIELD_SPAN\",\n        FIELD_DISTANCE = \"FIELD_DISTANCE\",\n        FIELD_DISTANCE_DELTA = \"FIELD_DISTANCE_DELTA\",\n        FIELD_HEIGHT = \"FIELD_HEIGHT\",\n        FIELD_STEPS_DELTA = \"FIELD_STEPS_DELTA\",\n        FIELD_STEPS = \"FIELD_STEPS\",\n        FIELD_DURATION = \"FIELD_DURATION\",\n        FIELD_STEP_LENGTH = \"FIELD_STEP_LENGTH\",\n        FIELD_LATITUDE = \"FIELD_LATITUDE\",\n        FIELD_LONGITUDE = \"FIELD_LONGITUDE\",\n        FIELD_BODY_WEIGHT = \"FIELD_BODY_WEIGHT\",\n        FIELD_BMI = \"FIELD_BMI\",\n        FIELD_BODY_FAT = \"FIELD_BODY_FAT\",\n        FIELD_BODY_FAT_RATE = \"FIELD_BODY_FAT_RATE\",\n        FIELD_MUSCLE_MASS = \"FIELD_MUSCLE_MASS\",\n        FIELD_BASAL_METABOLISM = \"FIELD_BASAL_METABOLISM\",\n        FIELD_MOISTURE = \"FIELD_MOISTURE\",\n        FIELD_MOISTURE_RATE = \"FIELD_MOISTURE_RATE\",\n        FIELD_VISCERAL_FAT_LEVEL = \"FIELD_VISCERAL_FAT_LEVEL\",\n        FIELD_BONE_SALT = \"FIELD_BONE_SALT\",\n        FIELD_PROTEIN_RATE = \"FIELD_PROTEIN_RATE\",\n        FIELD_BODY_AGE = \"FIELD_BODY_AGE\",\n        FIELD_BODY_SCORE = \"FIELD_BODY_SCORE\",\n        FIELD_SKELETAL_MUSCLEL_MASS = \"FIELD_SKELETAL_MUSCLEL_MASS\",\n        FIELD_IMPEDANCE = \"FIELD_IMPEDANCE\",\n        FIELD_CIRCUMFERENCE = \"FIELD_CIRCUMFERENCE\",\n        FIELD_SPEED = \"FIELD_SPEED\",\n        FIELD_RPM = \"FIELD_RPM\",\n        FIELD_STEP_RATE = \"FIELD_STEP_RATE\",\n        FIELD_ROTATION = \"FIELD_ROTATION\",\n        FIELD_CALORIES = \"FIELD_CALORIES\",\n        FIELD_CALORIES_TOTAL = \"FIELD_CALORIES_TOTAL\",\n        FIELD_POWER = \"FIELD_POWER\",\n        FIELD_HYDRATE = \"FIELD_HYDRATE\",\n        FIELD_MEAL = \"FIELD_MEAL\",\n        FIELD_FOOD = \"FIELD_FOOD\",\n        FIELD_NUTRIENTS = \"FIELD_NUTRIENTS\",\n        FIELD_NUTRIENTS_FACTS = \"FIELD_NUTRIENTS_FACTS\",\n        FIELD_FRAGMENTS = \"FIELD_FRAGMENTS\",\n        FIELD_AVG = \"FIELD_AVG\",\n        FIELD_MAX = \"FIELD_MAX\",\n        FIELD_MIN = \"FIELD_MIN\",\n        FIELD_MIN_LATITUDE = \"FIELD_MIN_LATITUDE\",\n        FIELD_MIN_LONGITUDE = \"FIELD_MIN_LONGITUDE\",\n        FIELD_MAX_LATITUDE = \"FIELD_MAX_LATITUDE\",\n        FIELD_MAX_LONGITUDE = \"FIELD_MAX_LONGITUDE\",\n        FIELD_ASCENT_TOTAL = \"FIELD_ASCENT_TOTAL\",\n        FIELD_DESCENT_TOTAL = \"FIELD_DESCENT_TOTAL\",\n        FIELD_APPEARANCE = \"FIELD_APPEARANCE\",\n        FIELD_INTENSITY = \"FIELD_INTENSITY\",\n        FALL_ASLEEP_TIME = \"FALL_ASLEEP_TIME\",\n        DEPTH=\"DEPTH\",\n        TEMPERATURE=\"TEMPERATURE\",\n        WAKE_UP_TIME = \"WAKE_UP_TIME\",\n        SLEEP_SCORE = \"SLEEP_SCORE\",\n        SLEEP_LATENCY = \"SLEEP_LATENCY\",\n        GO_BED_TIME = \"GO_BED_TIME\",\n        SLEEP_EFFICIENCY = \"SLEEP_EFFICIENCY\",\n        LIGHT_SLEEP_TIME = \"LIGHT_SLEEP_TIME\",\n        DEEP_SLEEP_TIME = \"DEEP_SLEEP_TIME\",\n        DREAM_TIME = \"DREAM_TIME\",\n        AWAKE_TIME = \"AWAKE_TIME\",\n        ALL_SLEEP_TIME = \"ALL_SLEEP_TIME\",\n        WAKE_UP_CNT = \"WAKE_UP_CNT\",\n        DEEP_SLEEP_PART = \"DEEP_SLEEP_PART\",\n        SLEEP_STATE = \"SLEEP_STATE\",\n        SCORE = \"SCORE\",\n        GRADE = \"GRADE\",\n        MEASURE_TYPE = \"MEASURE_TYPE\",\n        STRESS_AVG = \"STRESS_AVG\",\n        STRESS_MAX = \"STRESS_MAX\",\n        STRESS_MIN = \"STRESS_MIN\",\n        STRESS_LAST = \"STRESS_LAST\",\n        MEASURE_COUNT = \"MEASURE_COUNT\",\n        GROUND_CONTACT_TIME = \"GROUND_CONTACT_TIME\",\n        GROUND_IMPACT_ACCELERATION = \"GROUND_IMPACT_ACCELERATION\",\n        SWING_ANGLE = \"SWING_ANGLE\",\n        EVERSION_EXCURSION = \"EVERSION_EXCURSION\",\n        HANG_TIME = \"HANG_TIME\",\n        GROUND_HANG_TIME_RATE = \"GROUND_HANG_TIME_RATE\",\n        FORE_FOOT_STRIKE_PATTERN = \"FORE_FOOT_STRIKE_PATTERN\",\n        HIND_FOOT_STRIKE_PATTERN = \"HIND_FOOT_STRIKE_PATTERN\",\n        WHOLE_FOOT_STRIKE_PATTERN = \"WHOLE_FOOT_STRIKE_PATTERN\",\n        IMPACT_PEAK = \"IMPACT_PEAK\",\n        VERTICAL_OSCILLATION = \"VERTICAL_OSCILLATION\",\n        VERTICAL_RATIO = \"VERTICAL_RATIO\",\n        GC_TIME_BALANCE = \"GC_TIME_BALANCE\",\n        GO_BED_TIME_NEW = \"GO_BED_TIME_NEW\",\n        SLEEP_TYPE = \"SLEEP_TYPE\",\n        PREPARE_SLEEP_TIME = \"PREPARE_SLEEP_TIME\",\n        OFF_BED_TIME = \"OFF_BED_TIME\",\n        AVG_GROUND_CONTACT_TIME = \"AVG_GROUND_CONTACT_TIME\",\n        AVG_GROUND_IMPACT_ACCELERATION = \"AVG_GROUND_IMPACT_ACCELERATION\",\n        AVG_SWING_ANGLE = \"AVG_SWING_ANGLE\",\n        AVG_EVERSION_EXCURSION = \"AVG_EVERSION_EXCURSION\",\n        AVG_HANG_TIME = \"AVG_HANG_TIME\",\n        AVG_GROUND_HANG_TIME_RATE = \"AVG_GROUND_HANG_TIME_RATE\",\n        AVG_IMPACT_PEAK = \"AVG_IMPACT_PEAK\",\n        AVG_VERTICAL_IMPACT_RATE = \"AVG_VERTICAL_IMPACT_RATE\",\n        AVG_GC_TIME_BALANCE = \"AVG_GC_TIME_BALANCE\",\n        AVG_VERTICAL_OSCILLATION = \"AVG_VERTICAL_OSCILLATION\",\n        AVG_VERTICAL_RATIO = \"AVG_VERTICAL_RATIO\",\n        RESISTANCE_LEVEL = \"RESISTANCE_LEVEL\",\n        RESISTANCE_LEVEL_ONE_LOWER_LIMIT = \"RESISTANCE_LEVEL_ONE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_TWO_LOWER_LIMIT = \"RESISTANCE_LEVEL_TWO_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_THREE_LOWER_LIMIT = \"RESISTANCE_LEVEL_THREE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FOUR_LOWER_LIMIT = \"RESISTANCE_LEVEL_FOUR_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_LOWER_LIMIT = \"RESISTANCE_LEVEL_FIVE_LOWER_LIMIT\",\n        RESISTANCE_LEVEL_FIVE_UPPER_LIMIT = \"RESISTANCE_LEVEL_FIVE_UPPER_LIMIT\",\n        RESISTANCE_LEVEL_ONE_TIME = \"RESISTANCE_LEVEL_ONE_TIME\",\n        RESISTANCE_LEVEL_TWO_TIME = \"RESISTANCE_LEVEL_TWO_TIME\",\n        RESISTANCE_LEVEL_THREE_TIME = \"RESISTANCE_LEVEL_THREE_TIME\",\n        RESISTANCE_LEVEL_FOUR_TIME = \"RESISTANCE_LEVEL_FOUR_TIME\",\n        RESISTANCE_LEVEL_FIVE_TIME = \"RESISTANCE_LEVEL_FIVE_TIME\",\n        MAX_RES = \"MAX_RES\",\n        MIN_RES = \"MIN_RES\",\n        SPM = \"SPM\",\n        SWOLF = \"SWOLF\",\n        FIELD_LAST = \"FIELD_LAST\",\n        FIELD_AVG_BODY_FAT_RATE = \"FIELD_AVG_BODY_FAT_RATE\",\n        FIELD_MAX_BODY_FAT_RATE = \"FIELD_MAX_BODY_FAT_RATE\",\n        FIELD_MIN_BODY_FAT_RATE = \"FIELD_MIN_BODY_FAT_RATE\",\n        FIELD_AVG_SKELETAL_MUSCLEL_MASS = \"FIELD_AVG_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MAX_SKELETAL_MUSCLEL_MASS = \"FIELD_MAX_SKELETAL_MUSCLEL_MASS\",\n        FIELD_MIN_SKELETAL_MUSCLEL_MASS = \"FIELD_MIN_SKELETAL_MUSCLEL_MASS\",\n        VO2MAX = \"VO2MAX\",\n        LAST = \"LAST\",\n        AVG = \"AVG\",\n        BREATH_TIME = \"BREATH_TIME\",\n        BREATH_HOLDING_TIME = \"BREATH_HOLDING_TIME\",\n        BREATH_HOLDING_TRAIN_RHYTHM = \"BREATH_HOLDING_TRAIN_RHYTHM\",\n        DIAPHRAGM_TIME = \"DIAPHRAGM_TIME\",\n        RUN_SCORE = \"RUN_SCORE\",\n        DIVING_TIME = \"DIVING_TIME\",\n        DIVING_COUNT = \"DIVING_COUNT\",\n        MAX_DEPTH = \"MAX_DEPTH\",\n        AVG_DEPTH = \"AVG_DEPTH\",\n        MAX_UNDERWATER_TIME = \"MAX_UNDERWATER_TIME\",\n        NO_FLY_TIME = \"NO_FLY_TIME\",\n        WATER_TYPE = \"WATER_TYPE\",\n        SURFACE_TIME = \"SURFACE_TIME\",\n        FIELD_COORDINATE = \"FIELD_COORDINATE\",\n        START_LAT = \"START_LAT\",\n        START_LON = \"START_LON\",\n        END_LAT = \"END_LAT\",\n        END_LON = \"END_LON\",\n        SKIING_TOTAL_TIME = \"SKIING_TOTAL_TIME\",\n        SKIING_TOTAL_DISTANCE = \"SKIING_TOTAL_DISTANCE\",\n\n        // HEALTH FIELDS\n        FIELD_SYSTOLIC_PRESSURE = \"FIELD_SYSTOLIC_PRESSURE\",\n        FIELD_SYSTOLIC_PRESSURE_AVG = \"FIELD_SYSTOLIC_PRESSURE_AVG\",\n        FIELD_SYSTOLIC_PRESSURE_MIN = \"FIELD_SYSTOLIC_PRESSURE_MIN\",\n        FIELD_THRESHOLD = \"FIELD_THRESHOLD\",\n        FIELD_AVG_HEART_RATE = \"FIELD_AVG_HEART_RATE\",\n        FIELD_MAX_HEART_RATE = \"FIELD_MAX_HEART_RATE\",\n        FIELD_MIN_HEART_RATE = \"FIELD_MIN_HEART_RATE\",\n        FIELD_SYSTOLIC_PRESSURE_MAX = \"FIELD_SYSTOLIC_PRESSURE_MAX\",\n        FIELD_DIASTOLIC_PRESSURE = \"FIELD_DIASTOLIC_PRESSURE\",\n        FIELD_DIASTOLIC_PRESSURE_AVG = \"FIELD_DIASTOLIC_PRESSURE_AVG\",\n        FIELD_DIASTOLIC_PRESSURE_MIN = \"FIELD_DIASTOLIC_PRESSURE_MIN\",\n        FIELD_DIASTOLIC_PRESSURE_MAX = \"FIELD_DIASTOLIC_PRESSURE_MAX\",\n        FIELD_BODY_POSTURE = \"FIELD_BODY_POSTURE\",\n        FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE = \"FIELD_MEASURE_BODY_PART_OF_BLOOD_PRESSURE\",\n        FIELD_LEVEL = \"FIELD_LEVEL\",\n        FIELD_MEASURE_TIME = \"FIELD_MEASURE_TIME\",\n        FIELD_CORRELATION_WITH_MEALTIME = \"FIELD_CORRELATION_WITH_MEALTIME\",\n        FIELD_CORRELATION_WITH_SLEEP_STATE = \"FIELD_CORRELATION_WITH_SLEEP_STATE\",\n        FIELD_SAMPLE_SOURCE = \"FIELD_SAMPLE_SOURCE\",\n        FIELD_SATURATION = \"FIELD_SATURATION\",\n        FIELD_SATURATION_AVG = \"FIELD_SATURATION_AVG\",\n        FIELD_SATURATION_MIN = \"FIELD_SATURATION_MIN\",\n        FIELD_SATURATION_MAX = \"FIELD_SATURATION_MAX\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_AVG\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MIN\",\n        FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX = \"FIELD_OXYGEN_SUPPLY_FLOW_RATE_MAX\",\n        FIELD_OXYGEN_THERAPY = \"FIELD_OXYGEN_THERAPY\",\n        FIELD_SPO2_MEASUREMENT_MECHANISM = \"FIELD_SPO2_MEASUREMENT_MECHANISM\",\n        FIELD_SPO2_MEASUREMENT_APPROACH = \"FIELD_SPO2_MEASUREMENT_APPROACH\",\n        FIELD_TEMPERATURE = \"FIELD_TEMPERATURE\",\n        FIELD_MEASURE_BODY_PART_OF_TEMPERATURE = \"FIELD_MEASURE_BODY_PART_OF_TEMPERATURE\",\n        FIELD_TEXTURE = \"FIELD_TEXTURE\",\n        FIELD_AMOUNT = \"FIELD_AMOUNT\",\n        FIELD_POSITION = \"FIELD_POSITION\",\n        FIELD_DILATION_STATUS = \"FIELD_DILATION_STATUS\",\n        FIELD_FIRMNESS_LEVEL = \"FIELD_FIRMNESS_LEVEL\",\n        FIELD_VOLUME = \"FIELD_VOLUME\",\n        FIELD_DETECTION_RESULT = \"FIELD_DETECTION_RESULT\",\n        FIELD_SPHYGMUS = \"FIELD_SPHYGMUS\",\n        FIELD_MEASUREMENT_ANOMALY_FLAG = \"FIELD_MEASUREMENT_ANOMALY_FLAG\",\n        FIELD_BEFORE_MEASURE_ACTIVITY = \"FIELD_BEFORE_MEASURE_ACTIVITY\",\n        FIELD_RECORD_DAY = \"FIELD_RECORD_DAY\",\n        FIELD_STATUS = \"FIELD_STATUS\",\n        FIELD_SUB_STATUS = \"FIELD_SUB_STATUS\",\n        FIELD_TIME_ZONE = \"FIELD_TIME_ZONE\",\n        FIELD_REMARKS = \"FIELD_REMARKS\",\n        FIELD_DYSMENORRHOEA_LEVEL = \"FIELD_DYSMENORRHOEA_LEVEL\",\n        FIELD_PHYSICAL_SYMPTOMS = \"FIELD_PHYSICAL_SYMPTOMS\",\n        FIELD_SATURATION_LAST = \"FIELD_SATURATION_LAST\",\n        FIELD_SYSTOLIC_PRESSURE_LAST = \"FIELD_SYSTOLIC_PRESSURE_LAST\",\n        FIELD_DIASTOLIC_PRESSURE_LAST = \"FIELD_DIASTOLIC_PRESSURE_LAST\",\n        FIELD_SPHYGMUS_AVG = \"FIELD_SPHYGMUS_AVG\",\n        FIELD_SPHYGMUS_MAX = \"FIELD_SPHYGMUS_MAX\",\n        FIELD_SPHYGMUS_MIN = \"FIELD_SPHYGMUS_MIN\",\n        FIELD_SPHYGMUS_LAST = \"FIELD_SPHYGMUS_LAST\",\n\n        // SPORT FIELDS\n        FIELD_TREADMILL_INSTANTANEOUS_SPEED = \"FIELD_TREADMILL_INSTANTANEOUS_SPEED\",\n        FIELD_TREADMILL_AVERAGE_SPEED = \"FIELD_TREADMILL_AVERAGE_SPEED\",\n        FIELD_TREADMILL_TOTAL_DISTANCE = \"FIELD_TREADMILL_TOTAL_DISTANCE\",\n        FIELD_TREADMILL_INCLINATION = \"FIELD_TREADMILL_INCLINATION\",\n        FIELD_TREADMILL_RAMP_ANGLE_SETTING = \"FIELD_TREADMILL_RAMP_ANGLE_SETTING\",\n        FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_POSITIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN = \"FIELD_TREADMILL_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_TREADMILL_INSTANTANEOUS_PACE = \"FIELD_TREADMILL_INSTANTANEOUS_PACE\",\n        FIELD_TREADMILL_AVERAGE_PACE = \"FIELD_TREADMILL_AVERAGE_PACE\",\n        FIELD_TREADMILL_TOTAL_ENERGY = \"FIELD_TREADMILL_TOTAL_ENERGY\",\n        FIELD_TREADMILL_ENERGY_PER_HOUR = \"FIELD_TREADMILL_ENERGY_PER_HOUR\",\n        FIELD_TREADMILL_ENERGY_PER_MINUTE = \"FIELD_TREADMILL_ENERGY_PER_MINUTE\",\n        FIELD_TREADMILL_METABOLIC_EQUIVALENT = \"FIELD_TREADMILL_METABOLIC_EQUIVALENT\",\n        FIELD_TREADMILL_HEART_RATE = \"FIELD_TREADMILL_HEART_RATE\",\n        FIELD_TREADMILL_ELAPSED_TIME = \"FIELD_TREADMILL_ELAPSED_TIME\",\n        FIELD_TREADMILL_REMAINING_TIME = \"FIELD_TREADMILL_REMAINING_TIME\",\n        FIELD_TREADMILL_FORCE_ON_BELT = \"FIELD_TREADMILL_FORCE_ON_BELT\",\n        FIELD_TREADMILL_POWER_OUTPUT = \"FIELD_TREADMILL_POWER_OUTPUT\",\n        FIELD_TRAINING_STATUS = \"FIELD_TRAINING_STATUS\",\n        FIELD_TRAINING_STATUS_STRING = \"FIELD_TRAINING_STATUS_STRING\",\n        FIELD_SUPPORTED_MINIMUM_SPEED = \"FIELD_SUPPORTED_MINIMUM_SPEED\",\n        FIELD_SUPPORTED_MAXIMUM_SPEED = \"FIELD_SUPPORTED_MAXIMUM_SPEED\",\n        FIELD_SUPPORTED_MINIMUM_INCREMENT = \"FIELD_SUPPORTED_MINIMUM_INCREMENT\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MIN_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION = \"FIELD_SUPPORTED_INCLINATION_MAX_INCLINATION\",\n        FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT = \"FIELD_SUPPORTED_INCLINATION_MIN_INCREMENT\",\n        FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MIN_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL = \"FIELD_SUPPORTED_LEVEL_MAX_RESISTANCE_LEVEL\",\n        FIELD_SUPPORTED_LEVEL_MIN_INCREMENT = \"FIELD_SUPPORTED_LEVEL_MIN_INCREMENT\",\n        FIELD_SUPPORTED_HEART_MIN_HEART_RATE = \"FIELD_SUPPORTED_HEART_MIN_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MAX_HEART_RATE = \"FIELD_SUPPORTED_HEART_MAX_HEART_RATE\",\n        FIELD_SUPPORTED_HEART_MIN_INCREMENT = \"FIELD_SUPPORTED_HEART_MIN_INCREMENT\",\n        FIELD_SUPPORTED_POWER_MIN_POWER = \"FIELD_SUPPORTED_POWER_MIN_POWER\",\n        FIELD_SUPPORTED_POWER_MAX_POWER = \"FIELD_SUPPORTED_POWER_MAX_POWER\",\n        FIELD_SUPPORTED_POWER_MIN_INCREMENT = \"FIELD_SUPPORTED_POWER_MIN_INCREMENT\",\n        FIELD_FITNESS_MACHINE_FEATURE = \"FIELD_FITNESS_MACHINE_FEATURE\",\n        FIELD_FITNESS_TARGET_SETTING = \"FIELD_FITNESS_TARGET_SETTING\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESPONSE_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_REQUEST_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE = \"FIELD_FITNESS_MACHINE_CONTROL_RESULT_OP_CODE\",\n        FIELD_FITNESS_MACHINE_CONTROL_PARAMETER = \"FIELD_FITNESS_MACHINE_CONTROL_PARAMETER\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_SPEED\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE = \"FIELD_CROSS_TRAINER_DATA_TOTAL_DISTANCE\",\n        FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_STEP_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_STEP_RATE\",\n        FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT = \"FIELD_CROSS_TRAINER_DATA_STRIDE_COUNT\",\n        FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_POSITIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN = \"FIELD_CROSS_TRAINER_DATA_NEGATIVE_ELEVATION_GAIN\",\n        FIELD_CROSS_TRAINER_DATA_INCLINATION = \"FIELD_CROSS_TRAINER_DATA_INCLINATION\",\n        FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL = \"FIELD_CROSS_TRAINER_DATA_RESISTANCE_LEVEL\",\n        FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING = \"FIELD_CROSS_TRAINER_DATA_RAMP_ANGLE_SETTING\",\n        FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER = \"FIELD_CROSS_TRAINER_DATA_INSTANTANEOUS_POWER\",\n        FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER = \"FIELD_CROSS_TRAINER_DATA_AVERAGE_POWER\",\n        FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY = \"FIELD_CROSS_TRAINER_DATA_TOTAL_ENERGY\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_HOUR\",\n        FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE = \"FIELD_CROSS_TRAINER_DATA_ENERGY_PER_MINUTE\",\n        FIELD_CROSS_TRAINER_DATA_HEART_RATE = \"FIELD_CROSS_TRAINER_DATA_HEART_RATE\",\n        FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT = \"FIELD_CROSS_TRAINER_DATA_METABOLIC_EQUIVALENT\",\n        FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME = \"FIELD_CROSS_TRAINER_DATA_ELAPSED_TIME\",\n        FIELD_CROSS_TRAINER_DATA_REMAINING_TIME = \"FIELD_CROSS_TRAINER_DATA_REMAINING_TIME\",\n        FIELD_MACHINE_STATUS_OP_CODE = \"FIELD_MACHINE_STATUS_OP_CODE\",\n        FIELD_EXTENSION_DATA_UNLOCK_CODE = \"FIELD_EXTENSION_DATA_UNLOCK_CODE\",\n        FIELD_EXTENSION_DATA_HEART_RATE = \"FIELD_EXTENSION_DATA_HEART_RATE\",\n        FIELD_EXTENSION_DATA_TOTAL_ENERGY = \"FIELD_EXTENSION_DATA_TOTAL_ENERGY\",\n        FIELD_EXTENSION_DATA_DYNAMIC_ENERGY = \"FIELD_EXTENSION_DATA_DYNAMIC_ENERGY\",\n        FIELD_EXTENSION_DATA_STEP_COUNT = \"FIELD_EXTENSION_DATA_STEP_COUNT\",\n        FIELD_MACHINE_STATUS_PARAMETER = \"FIELD_MACHINE_STATUS_PARAMETER\",\n        FIELD_CHARACTERISTIC_UUID = \"FIELD_CHARACTERISTIC_UUID\",\n        FIELD_SERVICES_UUID = \"FIELD_SERVICES_UUID\",\n        FIELD_CUSTOM_COMMAND_CONTENT = \"FIELD_CUSTOM_COMMAND_CONTENT\",\n        FIELD_DIS_MANUFACTURER_NAME = \"FIELD_DIS_MANUFACTURER_NAME\",\n        FIELD_DIS_MODEL_NUMBER = \"FIELD_DIS_MODEL_NUMBER\",\n        FIELD_DIS_SERIAL_NUMBER = \"FIELD_DIS_SERIAL_NUMBER\",\n        FIELD_DIS_HARDWARE_REVISION = \"FIELD_DIS_HARDWARE_REVISION\",\n        FIELD_DIS_FIRMWARE_REVISION = \"FIELD_DIS_FIRMWARE_REVISION\",\n        FIELD_DIS_SOFTWARE_REVISION = \"FIELD_DIS_SOFTWARE_REVISION\",\n        FIELD_DIS_SYSTEM_ID = \"FIELD_DIS_SYSTEM_ID\",\n\n        MEAL_UNKNOWN = \"MEAL_UNKNOWN\",\n        MEAL_BREAKFAST = \"MEAL_BREAKFAST\",\n        MEAL_LUNCH = \"MEAL_LUNCH\",\n        MEAL_DINNER = \"MEAL_DINNER\",\n        MEAL_SNACK = \"MEAL_SNACK\",\n\n        TYPE_OF_RESISTANCE_UNKNOWN = \"TYPE_OF_RESISTANCE_UNKNOWN\",\n        TYPE_OF_RESISTANCE_BARBELL = \"TYPE_OF_RESISTANCE_BARBELL\",\n        TYPE_OF_RESISTANCE_CABLE = \"TYPE_OF_RESISTANCE_CABLE\",\n        TYPE_OF_RESISTANCE_DUMBBELL = \"TYPE_OF_RESISTANCE_DUMBBELL\",\n        TYPE_OF_RESISTANCE_KETTLEBELL = \"TYPE_OF_RESISTANCE_KETTLEBELL\",\n        TYPE_OF_RESISTANCE_MACHINE = \"TYPE_OF_RESISTANCE_MACHINE\",\n        TYPE_OF_RESISTANCE_BODY = \"TYPE_OF_RESISTANCE_BODY\",\n\n        NUTRIENTS_FACTS_CALORIES = \"NUTRIENTS_FACTS_CALORIES\",\n        NUTRIENTS_FACTS_TOTAL_FAT = \"NUTRIENTS_FACTS_TOTAL_FAT\",\n        NUTRIENTS_FACTS_SATURATED_FAT = \"NUTRIENTS_FACTS_SATURATED_FAT\",\n        NUTRIENTS_FACTS_UNSATURATED_FAT = \"NUTRIENTS_FACTS_UNSATURATED_FAT\",\n        NUTRIENTS_FACTS_POLYUNSATURATED_FAT = \"NUTRIENTS_FACTS_POLYUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_MONOUNSATURATED_FAT = \"NUTRIENTS_FACTS_MONOUNSATURATED_FAT\",\n        NUTRIENTS_FACTS_TRANS_FAT = \"NUTRIENTS_FACTS_TRANS_FAT\",\n        NUTRIENTS_FACTS_CHOLESTEROL = \"NUTRIENTS_FACTS_CHOLESTEROL\",\n        NUTRIENTS_FACTS_SODIUM = \"NUTRIENTS_FACTS_SODIUM\",\n        NUTRIENTS_FACTS_POTASSIUM = \"NUTRIENTS_FACTS_POTASSIUM\",\n        NUTRIENTS_FACTS_TOTAL_CARBS = \"NUTRIENTS_FACTS_TOTAL_CARBS\",\n        NUTRIENTS_FACTS_DIETARY_FIBER = \"NUTRIENTS_FACTS_DIETARY_FIBER\",\n        NUTRIENTS_FACTS_SUGAR = \"NUTRIENTS_FACTS_SUGAR\",\n        NUTRIENTS_FACTS_PROTEIN = \"NUTRIENTS_FACTS_PROTEIN\",\n        NUTRIENTS_FACTS_VITAMIN_A = \"NUTRIENTS_FACTS_VITAMIN_A\",\n        NUTRIENTS_FACTS_VITAMIN_C = \"NUTRIENTS_FACTS_VITAMIN_C\",\n        NUTRIENTS_FACTS_CALCIUM = \"NUTRIENTS_FACTS_CALCIUM\",\n        NUTRIENTS_FACTS_IRON = \"NUTRIENTS_FACTS_IRON\",\n\n        BODY_POSTURE_STANDING = \"BODY_POSTURE_STANDING\",\n        BODY_POSTURE_SITTING = \"BODY_POSTURE_SITTING\",\n        BODY_POSTURE_LYING_DOWN = \"BODY_POSTURE_LYING_DOWN\",\n        BODY_POSTURE_SEMI_RECUMBENT = \"BODY_POSTURE_SEMI_RECUMBENT\",\n\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_WRIST\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_LEFT_UPPER_ARM\",\n        MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM = \"MEASURE_BODY_PART_OF_BLOOD_PRESSURE_RIGHT_UPPER_ARM\",\n\n        MEASURE_TIME_RANDOM_TIME = \"MEASURE_TIME_RANDOM_TIME\",\n        MEASURE_TIME_BEFORE_BREAKFAST = \"MEASURE_TIME_BEFORE_BREAKFAST\",\n        MEASURE_TIME_AFTER_BREAKFAST = \"MEASURE_TIME_AFTER_BREAKFAST\",\n        MEASURE_TIME_BEFORE_LUNCH = \"MEASURE_TIME_BEFORE_LUNCH\",\n        MEASURE_TIME_AFTER_LUNCH = \"MEASURE_TIME_AFTER_LUNCH\",\n        MEASURE_TIME_BEFORE_DINNER = \"MEASURE_TIME_BEFORE_DINNER\",\n        MEASURE_TIME_AFTER_DINNER = \"MEASURE_TIME_AFTER_DINNER\",\n        MEASURE_TIME_BEFORE_SLEEP = \"MEASURE_TIME_BEFORE_SLEEP\",\n        MEASURE_TIME_BEFORE_DAWN = \"MEASURE_TIME_BEFORE_DAWN\",\n\n        FIELD_CORRELATION_WITH_MEALTIME_GENERAL = \"FIELD_CORRELATION_WITH_MEALTIME_GENERAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_FASTING = \"FIELD_CORRELATION_WITH_MEALTIME_FASTING\",\n        FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_BEFORE_MEAL\",\n        FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL = \"FIELD_CORRELATION_WITH_MEALTIME_AFTER_MEAL\",\n\n        CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE = \"CORRELATION_WITH_SLEEP_STATE_FULLY_AWAKE\",\n        CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_BEFORE_SLEEP\",\n        CORRELATION_WITH_SLEEP_STATE_ON_WAKING = \"CORRELATION_WITH_SLEEP_STATE_ON_WAKING\",\n        CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP = \"CORRELATION_WITH_SLEEP_STATE_DURING_SLEEP\",\n\n        SAMPLE_SOURCE_INTERSTITIAL_FLUID = \"SAMPLE_SOURCE_INTERSTITIAL_FLUID\",\n        SAMPLE_SOURCE_CAPILLARY_BLOOD = \"SAMPLE_SOURCE_CAPILLARY_BLOOD\",\n        SAMPLE_SOURCE_PLASMA = \"SAMPLE_SOURCE_PLASMA\",\n        SAMPLE_SOURCE_SERUM = \"SAMPLE_SOURCE_SERUM\",\n        SAMPLE_SOURCE_TEARS = \"SAMPLE_SOURCE_TEARS\",\n        SAMPLE_SOURCE_WHOLE_BLOOD = \"SAMPLE_SOURCE_WHOLE_BLOOD\",\n\n        OXYGEN_THERAPY_NASAL_CANULA = \"OXYGEN_THERAPY_NASAL_CANULA\",\n\n        SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY = \"SPO2_MEASUREMENT_MECHANISM_PERIPHERAL_CAPILLARY\",\n\n        SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY = \"SPO2_MEASUREMENT_APPROACH_PULSE_OXIMETRY\",\n\n        MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY = \"MEASURE_BODY_PART_OF_TEMPERATURE_AXILLARY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FINGER = \"MEASURE_BODY_PART_OF_TEMPERATURE_FINGER\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD = \"MEASURE_BODY_PART_OF_TEMPERATURE_FOREHEAD\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_ORAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_ORAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_RECTAL\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY = \"MEASURE_BODY_PART_OF_TEMPERATURE_TEMPORAL_ARTERY\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TOE = \"MEASURE_BODY_PART_OF_TEMPERATURE_TOE\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC = \"MEASURE_BODY_PART_OF_TEMPERATURE_TYMPANIC\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_WRIST = \"MEASURE_BODY_PART_OF_TEMPERATURE_WRIST\",\n        MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL = \"MEASURE_BODY_PART_OF_TEMPERATURE_VAGINAL\",\n\n        TEXTURE_DRY = \"TEXTURE_DRY\",\n        TEXTURE_STICKY = \"TEXTURE_STICKY\",\n        TEXTURE_CREAMY = \"TEXTURE_CREAMY\",\n        TEXTURE_WATERY = \"TEXTURE_WATERY\",\n        TEXTURE_EGG_WHITE = \"TEXTURE_EGG_WHITE\",\n\n        AMOUNT_LIGHT = \"AMOUNT_LIGHT\",\n        AMOUNT_MEDIUM = \"AMOUNT_MEDIUM\",\n        AMOUNT_HEAVY = \"AMOUNT_HEAVY\",\n\n        POSITION_LOW = \"POSITION_LOW\",\n        POSITION_MEDIUM = \"POSITION_MEDIUM\",\n        POSITION_HIGH = \"POSITION_HIGH\",\n\n        DILATION_STATUS_CLOSED = \"DILATION_STATUS_CLOSED\",\n        DILATION_STATUS_MEDIUM = \"DILATION_STATUS_MEDIUM\",\n        DILATION_STATUS_OPEN = \"DILATION_STATUS_OPEN\",\n\n        FIRMNESS_LEVEL_SOFT = \"FIRMNESS_LEVEL_SOFT\",\n        FIRMNESS_LEVEL_MEDIUM = \"FIRMNESS_LEVEL_MEDIUM\",\n        FIRMNESS_LEVEL_FIRM = \"FIRMNESS_LEVEL_FIRM\",\n\n        VOLUME_SPOTTING = \"VOLUME_SPOTTING\",\n        VOLUME_LIGHT = \"VOLUME_LIGHT\",\n        VOLUME_MEDIUM = \"VOLUME_MEDIUM\",\n        VOLUME_HEAVY = \"VOLUME_HEAVY\",\n\n        DETECTION_RESULT_NEGATIVE = \"DETECTION_RESULT_NEGATIVE\",\n        DETECTION_RESULT_POSITIVE = \"DETECTION_RESULT_POSITIVE\",\n\n        //Group Types\n        TYPE_TIME = \"TYPE_TIME\",\n        TYPE_INTERVALS = \"TYPE_INTERVALS\",\n    }\n\n}"
  },
  {
    "path": "react-native-hms-health/src/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from \"react-native\";\n\nexport const {\n  HmsDataController,\n  HmsHealthAccount,\n  HmsAutoRecorderController,\n  HmsActivityRecordsController,\n  HmsSettingController,\n  HmsConsentsController,\n  HmsHealthRecordController\n} = NativeModules;\n\nexport default {\n  HmsDataController,\n  HmsHealthAccount,\n  HmsAutoRecorderController,\n  HmsActivityRecordsController,\n  HmsSettingController,\n  HmsConsentsController,\n  HmsHealthRecordController\n};\n"
  },
  {
    "path": "react-native-hms-iap/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-iap/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: &nbsp;com.google.code.gson:gson 2.9.1</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright 2008 Google Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">Apache License&nbsp;</span></span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<br />\nyou may not use this file except in compliance with the License.<br />\nYou may obtain a copy of the License at</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; http://www.apache.org/licenses/LICENSE-2.0</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Unless required by applicable law or agreed to in writing, software<br />\ndistributed under the License is distributed on an &quot;AS IS&quot; BASIS,<br />\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />\nSee the License for the specific language governing permissions and<br />\nlimitations under the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Apache License<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Version 2.0, January 2004<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; http://www.apache.org/licenses/</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;1. Definitions.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;License&quot; shall mean the terms and conditions for use, reproduction,<br />\n&nbsp; &nbsp; &nbsp; and distribution as defined by Sections 1 through 9 of this document.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Licensor&quot; shall mean the copyright owner or entity authorized by<br />\n&nbsp; &nbsp; &nbsp; the copyright owner that is granting the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Legal Entity&quot; shall mean the union of the acting entity and all<br />\n&nbsp; &nbsp; &nbsp; other entities that control, are controlled by, or are under common<br />\n&nbsp; &nbsp; &nbsp; control with that entity. For the purposes of this definition,<br />\n&nbsp; &nbsp; &nbsp; &quot;control&quot; means (i) the power, direct or indirect, to cause the<br />\n&nbsp; &nbsp; &nbsp; direction or management of such entity, whether by contract or<br />\n&nbsp; &nbsp; &nbsp; otherwise, or (ii) ownership of fifty percent (50%) or more of the<br />\n&nbsp; &nbsp; &nbsp; outstanding shares, or (iii) beneficial ownership of such entity.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity<br />\n&nbsp; &nbsp; &nbsp; exercising permissions granted by this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Source&quot; form shall mean the preferred form for making modifications,<br />\n&nbsp; &nbsp; &nbsp; including but not limited to software source code, documentation<br />\n&nbsp; &nbsp; &nbsp; source, and configuration files.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Object&quot; form shall mean any form resulting from mechanical<br />\n&nbsp; &nbsp; &nbsp; transformation or translation of a Source form, including but<br />\n&nbsp; &nbsp; &nbsp; not limited to compiled object code, generated documentation,<br />\n&nbsp; &nbsp; &nbsp; and conversions to other media types.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Work&quot; shall mean the work of authorship, whether in Source or<br />\n&nbsp; &nbsp; &nbsp; Object form, made available under the License, as indicated by a<br />\n&nbsp; &nbsp; &nbsp; copyright notice that is included in or attached to the work<br />\n&nbsp; &nbsp; &nbsp; (an example is provided in the Appendix below).</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Derivative Works&quot; shall mean any work, whether in Source or Object<br />\n&nbsp; &nbsp; &nbsp; form, that is based on (or derived from) the Work and for which the<br />\n&nbsp; &nbsp; &nbsp; editorial revisions, annotations, elaborations, or other modifications<br />\n&nbsp; &nbsp; &nbsp; represent, as a whole, an original work of authorship. For the purposes<br />\n&nbsp; &nbsp; &nbsp; of this License, Derivative Works shall not include works that remain<br />\n&nbsp; &nbsp; &nbsp; separable from, or merely link (or bind by name) to the interfaces of,<br />\n&nbsp; &nbsp; &nbsp; the Work and Derivative Works thereof.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Contribution&quot; shall mean any work of authorship, including<br />\n&nbsp; &nbsp; &nbsp; the original version of the Work and any modifications or additions<br />\n&nbsp; &nbsp; &nbsp; to that Work or Derivative Works thereof, that is intentionally<br />\n&nbsp; &nbsp; &nbsp; submitted to Licensor for inclusion in the Work by the copyright owner<br />\n&nbsp; &nbsp; &nbsp; or by an individual or Legal Entity authorized to submit on behalf of<br />\n&nbsp; &nbsp; &nbsp; the copyright owner. For the purposes of this definition, &quot;submitted&quot;<br />\n&nbsp; &nbsp; &nbsp; means any form of electronic, verbal, or written communication sent<br />\n&nbsp; &nbsp; &nbsp; to the Licensor or its representatives, including but not limited to<br />\n&nbsp; &nbsp; &nbsp; communication on electronic mailing lists, source code control systems,<br />\n&nbsp; &nbsp; &nbsp; and issue tracking systems that are managed by, or on behalf of, the<br />\n&nbsp; &nbsp; &nbsp; Licensor for the purpose of discussing and improving the Work, but<br />\n&nbsp; &nbsp; &nbsp; excluding communication that is conspicuously marked or otherwise<br />\n&nbsp; &nbsp; &nbsp; designated in writing by the copyright owner as &quot;Not a Contribution.&quot;</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity<br />\n&nbsp; &nbsp; &nbsp; on behalf of whom a Contribution has been received by Licensor and<br />\n&nbsp; &nbsp; &nbsp; subsequently incorporated within the Work.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;2. Grant of Copyright License. Subject to the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, each Contributor hereby grants to You a perpetual,<br />\n&nbsp; &nbsp; &nbsp; worldwide, non-exclusive, no-charge, royalty-free, irrevocable<br />\n&nbsp; &nbsp; &nbsp; copyright license to reproduce, prepare Derivative Works of,<br />\n&nbsp; &nbsp; &nbsp; publicly display, publicly perform, sublicense, and distribute the<br />\n&nbsp; &nbsp; &nbsp; Work and such Derivative Works in Source or Object form.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;3. Grant of Patent License. Subject to the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, each Contributor hereby grants to You a perpetual,<br />\n&nbsp; &nbsp; &nbsp; worldwide, non-exclusive, no-charge, royalty-free, irrevocable<br />\n&nbsp; &nbsp; &nbsp; (except as stated in this section) patent license to make, have made,<br />\n&nbsp; &nbsp; &nbsp; use, offer to sell, sell, import, and otherwise transfer the Work,<br />\n&nbsp; &nbsp; &nbsp; where such license applies only to those patent claims licensable<br />\n&nbsp; &nbsp; &nbsp; by such Contributor that are necessarily infringed by their<br />\n&nbsp; &nbsp; &nbsp; Contribution(s) alone or by combination of their Contribution(s)<br />\n&nbsp; &nbsp; &nbsp; with the Work to which such Contribution(s) was submitted. If You<br />\n&nbsp; &nbsp; &nbsp; institute patent litigation against any entity (including a<br />\n&nbsp; &nbsp; &nbsp; cross-claim or counterclaim in a lawsuit) alleging that the Work<br />\n&nbsp; &nbsp; &nbsp; or a Contribution incorporated within the Work constitutes direct<br />\n&nbsp; &nbsp; &nbsp; or contributory patent infringement, then any patent licenses<br />\n&nbsp; &nbsp; &nbsp; granted to You under this License for that Work shall terminate<br />\n&nbsp; &nbsp; &nbsp; as of the date such litigation is filed.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;4. Redistribution. You may reproduce and distribute copies of the<br />\n&nbsp; &nbsp; &nbsp; Work or Derivative Works thereof in any medium, with or without<br />\n&nbsp; &nbsp; &nbsp; modifications, and in Source or Object form, provided that You<br />\n&nbsp; &nbsp; &nbsp; meet the following conditions:</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (a) You must give any other recipients of the Work or<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Derivative Works a copy of this License; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (b) You must cause any modified files to carry prominent notices<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stating that You changed the files; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (c) You must retain, in the Source form of any Derivative Works<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; that You distribute, all copyright, patent, trademark, and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attribution notices from the Source form of the Work,<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excluding those notices that do not pertain to any part of<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the Derivative Works; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (d) If the Work includes a &quot;NOTICE&quot; text file as part of its<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distribution, then any Derivative Works that You distribute must<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include a readable copy of the attribution notices contained<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; within such NOTICE file, excluding those notices that do not<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pertain to any part of the Derivative Works, in at least one<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the following places: within a NOTICE text file distributed<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as part of the Derivative Works; within the Source form or<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; documentation, if provided along with the Derivative Works; or,<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; within a display generated by the Derivative Works, if and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wherever such third-party notices normally appear. The contents<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the NOTICE file are for informational purposes only and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do not modify the License. You may add Your own attribution<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; notices within Derivative Works that You distribute, alongside<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; or as an addendum to the NOTICE text from the Work, provided<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; that such additional attribution notices cannot be construed<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as modifying the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; You may add Your own copyright statement to Your modifications and<br />\n&nbsp; &nbsp; &nbsp; may provide additional or different license terms and conditions<br />\n&nbsp; &nbsp; &nbsp; for use, reproduction, or distribution of Your modifications, or<br />\n&nbsp; &nbsp; &nbsp; for any such Derivative Works as a whole, provided Your use,<br />\n&nbsp; &nbsp; &nbsp; reproduction, and distribution of the Work otherwise complies with<br />\n&nbsp; &nbsp; &nbsp; the conditions stated in this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;5. Submission of Contributions. Unless You explicitly state otherwise,<br />\n&nbsp; &nbsp; &nbsp; any Contribution intentionally submitted for inclusion in the Work<br />\n&nbsp; &nbsp; &nbsp; by You to the Licensor shall be under the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, without any additional terms or conditions.<br />\n&nbsp; &nbsp; &nbsp; Notwithstanding the above, nothing herein shall supersede or modify<br />\n&nbsp; &nbsp; &nbsp; the terms of any separate license agreement you may have executed<br />\n&nbsp; &nbsp; &nbsp; with Licensor regarding such Contributions.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;6. Trademarks. This License does not grant permission to use the trade<br />\n&nbsp; &nbsp; &nbsp; names, trademarks, service marks, or product names of the Licensor,<br />\n&nbsp; &nbsp; &nbsp; except as required for reasonable and customary use in describing the<br />\n&nbsp; &nbsp; &nbsp; origin of the Work and reproducing the content of the NOTICE file.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;7. Disclaimer of Warranty. Unless required by applicable law or<br />\n&nbsp; &nbsp; &nbsp; agreed to in writing, Licensor provides the Work (and each<br />\n&nbsp; &nbsp; &nbsp; Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,<br />\n&nbsp; &nbsp; &nbsp; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or<br />\n&nbsp; &nbsp; &nbsp; implied, including, without limitation, any warranties or conditions<br />\n&nbsp; &nbsp; &nbsp; of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A<br />\n&nbsp; &nbsp; &nbsp; PARTICULAR PURPOSE. You are solely responsible for determining the<br />\n&nbsp; &nbsp; &nbsp; appropriateness of using or redistributing the Work and assume any<br />\n&nbsp; &nbsp; &nbsp; risks associated with Your exercise of permissions under this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;8. Limitation of Liability. In no event and under no legal theory,<br />\n&nbsp; &nbsp; &nbsp; whether in tort (including negligence), contract, or otherwise,<br />\n&nbsp; &nbsp; &nbsp; unless required by applicable law (such as deliberate and grossly<br />\n&nbsp; &nbsp; &nbsp; negligent acts) or agreed to in writing, shall any Contributor be<br />\n&nbsp; &nbsp; &nbsp; liable to You for damages, including any direct, indirect, special,<br />\n&nbsp; &nbsp; &nbsp; incidental, or consequential damages of any character arising as a<br />\n&nbsp; &nbsp; &nbsp; result of this License or out of the use or inability to use the<br />\n&nbsp; &nbsp; &nbsp; Work (including but not limited to damages for loss of goodwill,<br />\n&nbsp; &nbsp; &nbsp; work stoppage, computer failure or malfunction, or any and all<br />\n&nbsp; &nbsp; &nbsp; other commercial damages or losses), even if such Contributor<br />\n&nbsp; &nbsp; &nbsp; has been advised of the possibility of such damages.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;9. Accepting Warranty or Additional Liability. While redistributing<br />\n&nbsp; &nbsp; &nbsp; the Work or Derivative Works thereof, You may choose to offer,<br />\n&nbsp; &nbsp; &nbsp; and charge a fee for, acceptance of support, warranty, indemnity,<br />\n&nbsp; &nbsp; &nbsp; or other liability obligations and/or rights consistent with this<br />\n&nbsp; &nbsp; &nbsp; License. However, in accepting such obligations, You may act only<br />\n&nbsp; &nbsp; &nbsp; on Your own behalf and on Your sole responsibility, not on behalf<br />\n&nbsp; &nbsp; &nbsp; of any other Contributor, and only if You agree to indemnify,<br />\n&nbsp; &nbsp; &nbsp; defend, and hold each Contributor harmless for any liability<br />\n&nbsp; &nbsp; &nbsp; incurred by, or claims asserted against, such Contributor by reason<br />\n&nbsp; &nbsp; &nbsp; of your accepting any such warranty or additional liability.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;END OF TERMS AND CONDITIONS</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;APPENDIX: How to apply the Apache License to your work.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; To apply the Apache License to your work, attach the following<br />\n&nbsp; &nbsp; &nbsp; boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;<br />\n&nbsp; &nbsp; &nbsp; replaced with your own identifying information. (Don&#39;t include<br />\n&nbsp; &nbsp; &nbsp; the brackets!) &nbsp;The text should be enclosed in the appropriate<br />\n&nbsp; &nbsp; &nbsp; comment syntax for the file format. We also recommend that a<br />\n&nbsp; &nbsp; &nbsp; file or class name and description of purpose be included on the<br />\n&nbsp; &nbsp; &nbsp; same &quot;printed page&quot; as the copyright notice for easier<br />\n&nbsp; &nbsp; &nbsp; identification within third-party archives.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Copyright [yyyy] [name of copyright owner]</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<br />\n&nbsp; &nbsp;you may not use this file except in compliance with the License.<br />\n&nbsp; &nbsp;You may obtain a copy of the License at</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &nbsp;http://www.apache.org/licenses/LICENSE-2.0</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Unless required by applicable law or agreed to in writing, software<br />\n&nbsp; &nbsp;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,<br />\n&nbsp; &nbsp;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />\n&nbsp; &nbsp;See the License for the specific language governing permissions and<br />\n&nbsp; &nbsp;limitations under the License.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-iap/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS IAP</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-iap\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-iap?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-iap\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-iap?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-iap.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nHUAWEI IAP Kit enables communication between Huawei IAP SDK and React Native platform. Huawei's In-App Purchases (IAP) service allows you to offer in-app purchases and facilitates in-app payment. Users can purchase a variety of virtual products, including one-time virtual products and subscriptions, directly within your app.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050766239?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-iap\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050766241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051087324?ha_source=hms1)\n\n### Additional Topics\n- [Subscription Functions](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/subscription-functions-0000001051086186-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-iap/android/README.md",
    "content": "README\n======\n\nIf you want to publish the lib as a maven dependency, follow these steps before publishing a new version to npm:\n\n1. Be sure to have the Android [SDK](https://developer.android.com/studio/index.html) and [NDK](https://developer.android.com/ndk/guides/index.html) installed\n2. Be sure to have a `local.properties` file in this folder that points to the Android SDK and NDK\n```\nndk.dir=/Users/{username}/Library/Android/sdk/ndk-bundle\nsdk.dir=/Users/{username}/Library/Android/sdk\n```\n3. Delete the `maven` folder\n4. Run `./gradlew installArchives`\n5. Verify that latest set of generated files is in the maven folder with the correct version number\n"
  },
  {
    "path": "react-native-hms-iap/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\nbuildscript {\n    repositories {\n        mavenCentral()\n        jcenter()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility = 1.8\n        targetCompatibility = 1.8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    jcenter()\n    mavenCentral()\n    google()\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    // AGCONNECT\n    implementation \"com.huawei.agconnect:agconnect-core:1.9.1.301\"\n    // IAP\n    implementation \"com.huawei.hms:iap:6.13.0.300\"\n    // GSON\n    implementation \"com.google.code.gson:gson:2.9.1\"\n}"
  },
  {
    "path": "react-native-hms-iap/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-iap/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-iap/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-iap/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-iap/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.iap\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/HMSIapModule.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap;\n\nimport static com.huawei.hms.rn.iap.client.Helper.toIAPObject;\nimport static com.huawei.hms.rn.iap.client.utils.Constants.CONSTANTS;\nimport static com.huawei.hms.rn.iap.client.utils.Constants.REQ_CODE_PURCHASE_INTENT;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.createWritableMapWithSuccessStatus;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.toWritableMap;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.iap.Iap;\nimport com.huawei.hms.iap.IapApiException;\nimport com.huawei.hms.iap.IapClient;\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseReq;\nimport com.huawei.hms.iap.entity.IsEnvReadyResult;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedResult;\nimport com.huawei.hms.iap.entity.OrderStatusCode;\nimport com.huawei.hms.iap.entity.OwnedPurchasesReq;\nimport com.huawei.hms.iap.entity.OwnedPurchasesResult;\nimport com.huawei.hms.iap.entity.ProductInfoReq;\nimport com.huawei.hms.iap.entity.ProductInfoResult;\nimport com.huawei.hms.iap.entity.PurchaseIntentReq;\nimport com.huawei.hms.iap.entity.PurchaseIntentResult;\nimport com.huawei.hms.iap.entity.PurchaseResultInfo;\nimport com.huawei.hms.iap.entity.StartIapActivityReq;\nimport com.huawei.hms.iap.entity.StartIapActivityResult;\nimport com.huawei.hms.iap.util.IapClientHelper;\nimport com.huawei.hms.rn.iap.client.Helper;\nimport com.huawei.hms.rn.iap.client.utils.Constants;\nimport com.huawei.hms.rn.iap.client.utils.DataUtils;\nimport com.huawei.hms.rn.iap.client.utils.ExceptionHandler;\nimport com.huawei.hms.rn.iap.client.utils.MapUtil;\nimport com.huawei.hms.rn.iap.client.viewmodel.Service;\nimport com.huawei.hms.rn.iap.client.viewmodel.ViewModel;\nimport com.huawei.hms.support.api.client.Status;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Map;\nimport java.util.Objects;\n\n/**\n * IapModule class is the tool class of {@link IapClient}.\n *\n * @since v.5.0.0\n */\npublic class HMSIapModule extends ReactContextBaseJavaModule implements Service.View {\n\n    private final String tag = HMSIapModule.class.getSimpleName();\n\n    private IapClient iapClient;\n\n    private Service.Presenter viewModel;\n\n    private Promise mPickerPromise;\n\n    private ReactApplicationContext context;\n\n    private final ActivityEventListener activityEventListener = new ActivityEventListener() {\n        @Override\n        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n            Log.i(tag, \"onActivityResult, requestCode=\" + requestCode + \", resultCode=\" + resultCode);\n            if (mPickerPromise != null) {\n                if (requestCode == Constants.REQ_CODE_PURCHASE_INTENT) {\n                    if (intent == null) {\n                        Log.e(tag, \"intent is null\");\n                        return;\n                    }\n                    PurchaseResultInfo purchaseIntentResult = Iap.getIapClient(getActivity())\n                        .parsePurchaseResultInfoFromIntent(intent);\n                    WritableMap purchaseIntentResultMap = DataUtils.getMapCreatePurchaseIntent(purchaseIntentResult);\n                    mPickerPromise.resolve(purchaseIntentResultMap);\n                    Log.i(tag, String.valueOf(purchaseIntentResult.getReturnCode()));\n                }\n                if (requestCode == Constants.REQ_IS_ENVIRONMENT_READY) {\n                    Log.i(tag, \"onActivityResult from isEnvReady\");\n                    final int accountFlag = IapClientHelper.parseAccountFlagFromIntent(intent);\n                    final int returnCode = IapClientHelper.parseRespCodeFromIntent(intent);\n                    final String country = IapClientHelper.parseCountryFromIntent(intent);\n                    final String carrierId = IapClientHelper.parseCarrierIdFromIntent(intent);\n                    if (returnCode == 0) {\n                        WritableMap writableMap = null;\n                        try {\n                            JSONObject j = new JSONObject();\n                            j.put(\"accountFlag\", accountFlag);\n                            j.put(\"returnCode\", returnCode);\n                            j.put(\"country\", country);\n                            j.put(\"carrierId\", carrierId);\n                            writableMap = MapUtil.toWritableMap(j);\n                            mPickerPromise.resolve(writableMap);\n                        } catch (JSONException e) {\n                            Log.e(tag, Objects.requireNonNull(e.getMessage()));\n                        }\n                    }\n                }\n                mPickerPromise = null;\n            }\n        }\n\n        @Override\n        public void onNewIntent(Intent intent) {\n            Log.d(tag, \"onNewIntent\");\n        }\n    };\n\n    HMSIapModule(ReactApplicationContext context) {\n        super(context);\n        this.context = context;\n        initializeIapClient(this.context);\n    }\n\n    private void initializeIapClient(ReactApplicationContext context) {\n        if (getActivity() == null) {\n            iapClient = Iap.getIapClient(this.context);\n        } else {\n            iapClient = Iap.getIapClient(getActivity());\n        }\n        // Initialize iapClientPresenter\n        viewModel = new ViewModel(this.context);\n        context.addActivityEventListener(activityEventListener);\n    }\n\n    /**\n     * Here we will call this IapModule so that\n     * we can access it through\n     * React.NativeModules.IapModule in RN Side.\n     *\n     * @return name\n     */\n    @NonNull\n    @Override\n    public String getName() {\n        return tag;\n    }\n\n    /**\n     * getConstants returns the constant values\n     * exposed to RN Side.\n     *\n     * @return constants\n     */\n    @Override\n    public Map<String, Object> getConstants() {\n        return CONSTANTS;\n    }\n\n    // Enables logging.\n    @ReactMethod\n    public void enableLogger(Promise promise) {\n        viewModel.enableLogger(promise);\n    }\n\n    // Disables logging.\n    @ReactMethod\n    public void disableLogger(Promise promise) {\n        viewModel.disableLogger(promise);\n    }\n\n    /**\n     * Checks whether the currently signed-in HUAWEI ID\n     * is located in a country or region where HUAWEI IAP is available.\n     *\n     * @param isSupportAppTouch: Indicates whether your app is to be released on AppTouch.\n     * @param promise: In the success scenario, {@link IsEnvReadyResult} instance is returned ,\n     * or {@link IapApiException} is returned in the failure scenario.\n     */\n\n    @ReactMethod\n    public void isEnvironmentReady(boolean isSupportAppTouch, final Promise promise) {\n        viewModel.isEnvironmentReady(isSupportAppTouch, iapClient, new Service.IAPResultListener<IsEnvReadyResult>() {\n            @Override\n            public void onSuccess(IsEnvReadyResult result) {\n                promise.resolve(DataUtils.getMapFromIsEnvReadyResult(result));\n            }\n\n            @Override\n            public void onFail(Exception exception) {\n                if (exception instanceof IapApiException) {\n                    IapApiException apiException = (IapApiException) exception;\n                    Status status = apiException.getStatus();\n                    mPickerPromise = promise;\n                    if (status.getStatusCode() == OrderStatusCode.ORDER_HWID_NOT_LOGIN) {\n                        Helper.startResolutionForResult(getActivity(), status, Constants.REQ_IS_ENVIRONMENT_READY);\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Checks whether the sign-in HUAWEI ID and app APK version meets the requirements\n     * of the sandbox testing.\n     *\n     * @param promise: In the success scenario,\n     * {@link IsSandboxActivatedResult} instance is returned ,\n     * or {@link IapApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void isSandboxActivated(final Promise promise) {\n        viewModel.isSandboxActivated(iapClient, new IapReqHelper(promise));\n    }\n\n    /**\n     * Queries information about all purchased in-app products, including consumables,\n     * non-consumables, and auto-renewable subscriptions.\n     * </br>\n     * If the information about consumables is returned,\n     * the consumables might not be delivered due to some exceptions.\n     * In this case, your app needs to check whether the consumables are delivered.\n     * If not, the app needs to deliver them and calls the consumeOwnedPurchase API to consume them.\n     * If the information about non-consumables is returned,\n     * the non-consumables do not need to be consumed.\n     * If the information about subscriptions is returned,\n     * all existing subscription relationships of the user in the app are returned.\n     * The subscription relationships are as follows:\n     * Renewal (normal use and normal renewal in the next period)\n     * Expiring (expiration instead of renewal when the next period starts)\n     * Expired (The subscription is unavailable but can still be found in the subscription history.)\n     *\n     * @param ownedPurchasesReq: ReadableMap instance to get {@link OwnedPurchasesReq} object.\n     * @param promise: In the success scenario, {@link OwnedPurchasesResult}\n     * instance is returned , or {@link IapApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void obtainOwnedPurchases(final ReadableMap ownedPurchasesReq, final Promise promise) {\n        OwnedPurchasesReq ownedPurchasesRequest = toIAPObject(ownedPurchasesReq, OwnedPurchasesReq.class);\n        viewModel.obtainOwnedPurchases(iapClient, ownedPurchasesRequest, new IapReqHelper(promise));\n    }\n\n    /**\n     * Obtains in-app product details configured in AppGallery Connect.\n     * If you use Huawei’s PMS to price in-app products, you can use this API to obtain\n     * in-app product details from the PMS to ensure that the in-app product\n     * information in your app is the same as that displayed on the checkout page of HUAWEI IAP.\n     * </br>\n     * Avoid obtaining in-app product information from your own server.\n     * Otherwise, price information may be inconsistent between your app and the checkout page.\n     *\n     * @param productInfoReq: ReadableMap instance to get {@link ProductInfoReq} object that contains\n     * request information.\n     * @param promise: In the success scenario, {@link ProductInfoResult} instance is returned ,\n     * or {@link IapApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void obtainProductInfo(final ReadableMap productInfoReq, final Promise promise) {\n        ProductInfoReq productInfoRequest = toIAPObject(productInfoReq, ProductInfoReq.class);\n        viewModel.obtainProductInfo(iapClient, productInfoRequest, new IapReqHelper(promise));\n    }\n\n    /**\n     * Creates orders for PMS products, including consumables, non-consumables, and subscriptions.\n     * </br>\n     * After creating an in-app product in AppGallery Connect, you can call this API to open\n     * the HUAWEI IAP checkout page and display the product, price, and payment method.\n     *\n     * @param purchaseIntentReq: ReadableMap instance to get {@link PurchaseIntentReq} object.\n     * @param promise:{@link PurchaseResultInfo } instance returned via promise in the success scenario,\n     * {@link IapApiException} instance returned in the failure scenario.\n     */\n    @ReactMethod\n    public void createPurchaseIntent(final ReadableMap purchaseIntentReq, final Promise promise) {\n        PurchaseIntentReq purchaseIntentRequest = toIAPObject(purchaseIntentReq, PurchaseIntentReq.class);\n        viewModel.createPurchaseIntent(iapClient, purchaseIntentRequest,\n            new Service.IAPResultListener<PurchaseIntentResult>() {\n                @Override\n                public void onSuccess(PurchaseIntentResult result) {\n                    if (result == null) {\n                        Log.e(tag, \"PurchaseIntentResult is null\");\n                        return;\n                    }\n                    // Store the promise to resolve/reject when picker returns data\n                    mPickerPromise = promise;\n                    Helper.startResolutionForResult(getActivity(), result.getStatus(), REQ_CODE_PURCHASE_INTENT);\n                }\n\n                @Override\n                public void onFail(Exception exception) {\n                    promise.reject(tag, exception.getLocalizedMessage());\n                }\n            });\n    }\n\n    /**\n     * Consumes a consumable after the consumable is delivered to a user who has completed payment.\n     *\n     * @param consumeOwnedPurchaseReq: ReadableMap instance to get\n     * {@link ConsumeOwnedPurchaseReq} object that contains request information.\n     * @param promise: In the success scenario,\n     * {@link ConsumeOwnedPurchaseResult} instance is returned , or {@link IapApiException} is returned\n     * in the failure scenario.\n     */\n    @ReactMethod\n    public void consumeOwnedPurchase(final ReadableMap consumeOwnedPurchaseReq, final Promise promise) {\n        ConsumeOwnedPurchaseReq consumeOwnedPurchaseRequest = toIAPObject(consumeOwnedPurchaseReq,\n            ConsumeOwnedPurchaseReq.class);\n        viewModel.consumeOwnedPurchase(iapClient, consumeOwnedPurchaseRequest, new IapReqHelper(promise));\n    }\n\n    /**\n     * Obtains the historical consumption information about a consumable or all subscription receipts of\n     * a subscription.\n     * </br>\n     * For consumables, this method returns information about products that have been delivered or consumed\n     * in the product list.\n     * For non-consumables, this method does not return product information.\n     * For subscriptions, this method returns all subscription receipts of the current user in this app.\n     *\n     * @param ownedPurchasesReq: ReadableMap instance to get {@link OwnedPurchasesResult}\n     * object that contains request information.\n     * @param promise: In the success scenario, {@link ProductInfoResult} instance is returned ,\n     * or {@link IapApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void obtainOwnedPurchaseRecord(final ReadableMap ownedPurchasesReq, final Promise promise) {\n        OwnedPurchasesReq ownedPurchasesRequest = toIAPObject(ownedPurchasesReq, OwnedPurchasesReq.class);\n        viewModel.obtainOwnedPurchaseRecord(iapClient, ownedPurchasesRequest, new IapReqHelper(promise));\n    }\n\n    /**\n     * Brings up in-app payment pages, including:\n     * </br>\n     * Subscription editing page\n     * Subscription management page\n     *\n     * @param startIapActivityReq: ReadableMap instance to get\n     * {@link StartIapActivityReq} object that contains request information.\n     * @param promise: In the success scenario, starts activity with the StartIapActivityResult instance,\n     * or {@link IapApiException} is returned in the failure scenario.\n     */\n    @ReactMethod\n    public void startIapActivity(final ReadableMap startIapActivityReq, final Promise promise) {\n        StartIapActivityReq startIapActivityRequest = toIAPObject(startIapActivityReq, StartIapActivityReq.class);\n        viewModel.startIapActivity(iapClient, startIapActivityRequest,\n            new Service.IAPResultListener<StartIapActivityResult>() {\n                @Override\n                public void onSuccess(StartIapActivityResult result) {\n                    result.startActivity(getActivity());\n                    Log.d(tag, \":: StartIapActivity Success\");\n                    promise.resolve(createWritableMapWithSuccessStatus(true));\n                }\n\n                @Override\n                public void onFail(Exception exception) {\n                    ExceptionHandler.handle(exception, promise);\n                }\n            });\n    }\n\n    // Enables pending purchase\n    @ReactMethod\n    public void enablePendingPurchase(final Promise promise) {\n        viewModel.enablePendingPurchase(iapClient, promise);\n    }\n\n    @Override\n    public Activity getActivity() {\n        return getCurrentActivity();\n    }\n\n    /* Private Inner Class */\n\n    /**\n     * IapReqHelper static nested class is a helper class for reaching {@link Service.IAPResultListener}.\n     */\n    private static final class IapReqHelper implements Service.IAPResultListener {\n\n        private Promise promise;\n\n        IapReqHelper(final Promise promise) {\n            this.promise = promise;\n        }\n\n        @Override\n        public void onSuccess(Object result) {\n            promise.resolve(toWritableMap(result));\n        }\n\n        @Override\n        public void onFail(Exception exception) {\n            ExceptionHandler.handle(exception, promise);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/HMSIapPackage.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSIapPackage implements ReactPackage {\n    /**\n     * The last step within Java is to register\n     * the Module; this happens in the createNativeModules\n     * of your apps package.\n     * If a module is not registered it will not be available from JavaScript.\n     *\n     * @param reactContext: ReactApplicationContext instance.\n     * @return List<NativeModule>\n     */\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n        modules.add(new HMSIapModule(reactContext));\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/Helper.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client;\n\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.fromJson;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.toArrayList;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.toJson;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.toStringArrayList;\n\nimport android.app.Activity;\nimport android.content.IntentSender;\nimport android.util.Log;\n\nimport com.huawei.hms.iap.entity.ProductInfoReq;\nimport com.huawei.hms.rn.iap.client.viewmodel.ViewModel;\nimport com.huawei.hms.support.api.client.Status;\n\nimport com.facebook.react.bridge.ReadableMap;\n\nimport org.json.JSONObject;\n\nimport java.util.List;\nimport java.util.Objects;\n\n/**\n * IapClientReqHelper is the tool class of {@link ViewModel}.\n *\n * @since v.5.0.0\n */\npublic class Helper {\n    public final static String TAG = Helper.class.getSimpleName();\n\n    /**\n     * Converts ReadableMap to a\n     * requested generic IAP instance(ProductInfoReq, PurchaseIntentReq, PurchaseIntentReq,\n     * ConsumeOwnedPurchaseReq, StartIapActivityReq).\n     *\n     * @param readableMap: ReadableMap instance.\n     * @param type: Requested class type.\n     * @return <T> IAP instance.\n     */\n    public static <T> T toIAPObject(final ReadableMap readableMap, Class<? extends T> type) {\n        T instance;\n        JSONObject jsonObject = toJson(readableMap);\n        instance = fromJson(jsonObject.toString(), type);\n        if (instance instanceof ProductInfoReq) {\n            if (readableMap.hasKey(\"productList\") && readableMap.getArray(\"productList\") != null) {\n                List<Object> productList = toArrayList(readableMap.getArray(\"productList\"));\n                ((ProductInfoReq) instance).setProductIds(toStringArrayList(productList));\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * To start an activity.\n     *\n     * @param activity: the activity to launch a new page.\n     * @param status: This parameter contains the pendingIntent object of the payment page.\n     * @param resultCode: Result code.\n     */\n    public static void startResolutionForResult(final Activity activity, final Status status, final int resultCode) {\n        if (status == null) {\n            Log.e(TAG, \"status is null\");\n            return;\n        }\n        if (status.hasResolution()) {\n            try {\n                status.startResolutionForResult(activity, resultCode);\n            } catch (IntentSender.SendIntentException exp) {\n                Log.e(TAG, Objects.requireNonNull(exp.getMessage()));\n            }\n        } else {\n            Log.e(TAG, \"intent is null\");\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/logger/HMSLogger.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"IAP\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"6.13.0.302\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/utils/Constants.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.utils;\n\nimport com.huawei.hms.iap.IapClient;\nimport com.huawei.hms.iap.entity.InAppPurchaseData;\nimport com.huawei.hms.iap.entity.OrderStatusCode;\nimport com.huawei.hms.iap.entity.SignAlgorithmConstants;\nimport com.huawei.hms.iap.entity.StartIapActivityReq;\nimport com.huawei.hms.rn.iap.HMSIapModule;\n\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic interface Constants {\n    \n    /**\n     * requestCode for pull up the pmsPay page\n     */\n    Integer REQ_IS_ENVIRONMENT_READY = 111;\n    Integer REQ_CODE_PURCHASE_INTENT = 222;\n    String IS_SUCCESS_KEY = \"isSuccess\";\n    String ERROR_MESSAGE_KEY = \"errorMessage\";\n\n    /**\n     * iapReqConstants variables that are used by {@link HMSIapModule} class.\n     **/\n    Map<String, Object> CONSTANTS = initMap();\n\n    /**\n     * Constant HashMap Value.\n     *\n     * @return HashMap Instance.\n     */\n    static Map<String, Object> initMap() {\n        Map<String, Object> constantMap = new HashMap<>();\n        // OrderStatusCode\n        constantMap.put(\"ORDER_ACCOUNT_AREA_NOT_SUPPORTED\", OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED);\n        constantMap.put(\"ORDER_HIGH_RISK_OPERATIONS\", OrderStatusCode.ORDER_HIGH_RISK_OPERATIONS);\n        constantMap.put(\"ORDER_HWID_NOT_LOGIN\", OrderStatusCode.ORDER_HWID_NOT_LOGIN);\n        constantMap.put(\"ORDER_NOT_ACCEPT_AGREEMENT\", OrderStatusCode.ORDER_NOT_ACCEPT_AGREEMENT);\n        constantMap.put(\"ORDER_PRODUCT_CONSUMED\", OrderStatusCode.ORDER_PRODUCT_CONSUMED);\n        constantMap.put(\"ORDER_PRODUCT_NOT_OWNED\", OrderStatusCode.ORDER_PRODUCT_NOT_OWNED);\n        constantMap.put(\"ORDER_PRODUCT_OWNED\", OrderStatusCode.ORDER_PRODUCT_OWNED);\n        constantMap.put(\"ORDER_STATE_CANCEL\", OrderStatusCode.ORDER_STATE_CANCEL);\n        constantMap.put(\"ORDER_STATE_FAILED\", OrderStatusCode.ORDER_STATE_FAILED);\n        constantMap.put(\"ORDER_STATE_NET_ERROR\", OrderStatusCode.ORDER_STATE_NET_ERROR);\n        constantMap.put(\"ORDER_STATE_PARAM_ERROR\", OrderStatusCode.ORDER_STATE_PARAM_ERROR);\n        constantMap.put(\"ORDER_STATE_SUCCESS\", OrderStatusCode.ORDER_STATE_SUCCESS);\n        constantMap.put(\"ORDER_VR_UNINSTALL_ERROR\", OrderStatusCode.ORDER_VR_UNINSTALL_ERROR);\n        constantMap.put(\"ORDER_STATE_IAP_NOT_ACTIVATED\", OrderStatusCode.ORDER_STATE_IAP_NOT_ACTIVATED);\n        constantMap.put(\"ORDER_STATE_PRODUCT_INVALID\", OrderStatusCode.ORDER_STATE_PRODUCT_INVALID);\n        constantMap.put(\"ORDER_STATE_CALLS_FREQUENT\", OrderStatusCode.ORDER_STATE_CALLS_FREQUENT);\n        constantMap.put(\"ORDER_STATE_PMS_TYPE_NOT_MATCH\", OrderStatusCode.ORDER_STATE_PMS_TYPE_NOT_MATCH);\n        constantMap.put(\"ORDER_STATE_PRODUCT_COUNTRY_NOT_SUPPORTED\",\n            OrderStatusCode.ORDER_STATE_PRODUCT_COUNTRY_NOT_SUPPORTED);\n        constantMap.put(\"ORDER_STATE_PENDING\", OrderStatusCode.ORDER_STATE_PENDING);\n        // StartIapActivityReq\n        constantMap.put(\"TYPE_SUBSCRIBE_MANAGER_ACTIVITY\", StartIapActivityReq.TYPE_SUBSCRIBE_MANAGER_ACTIVITY);\n        constantMap.put(\"TYPE_SUBSCRIBE_EDIT_ACTIVITY\", StartIapActivityReq.TYPE_SUBSCRIBE_EDIT_ACTIVITY);\n        // SignAlgorithmConstant\n        constantMap.put(\"SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS\",\n            SignAlgorithmConstants.SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS);\n        // InAppPurchaseData\n        constantMap.put(\"PURCHASE_DATA_NOT_PRESENT\", InAppPurchaseData.NOT_PRESENT);\n        // PurchaseState\n        constantMap.put(\"PURCHASE_STATE_CANCELED\", InAppPurchaseData.PurchaseState.CANCELED);\n        constantMap.put(\"PURCHASE_STATE_INITIALIZED\", InAppPurchaseData.PurchaseState.INITIALIZED);\n        constantMap.put(\"PURCHASE_STATE_PURCHASED\", InAppPurchaseData.PurchaseState.PURCHASED);\n        constantMap.put(\"PURCHASE_STATE_REFUNDED\", InAppPurchaseData.PurchaseState.REFUNDED);\n        constantMap.put(\"PURCHASE_STATE_PENDING\", InAppPurchaseData.PurchaseState.PENDING);\n        // PriceType\n        constantMap.put(\"PRICE_TYPE_IN_APP_CONSUMABLE\", IapClient.PriceType.IN_APP_CONSUMABLE);\n        constantMap.put(\"PRICE_TYPE_IN_APP_NONCONSUMABLE\", IapClient.PriceType.IN_APP_NONCONSUMABLE);\n        constantMap.put(\"PRICE_TYPE_IN_APP_SUBSCRIPTION\", IapClient.PriceType.IN_APP_SUBSCRIPTION);\n        return Collections.unmodifiableMap(constantMap);\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/utils/DataUtils.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.utils;\n\nimport android.util.Log;\n\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;\nimport com.huawei.hms.iap.entity.InAppPurchaseData;\nimport com.huawei.hms.iap.entity.IsEnvReadyResult;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedResult;\nimport com.huawei.hms.iap.entity.OwnedPurchasesResult;\nimport com.huawei.hms.iap.entity.ProductInfo;\nimport com.huawei.hms.iap.entity.ProductInfoResult;\nimport com.huawei.hms.iap.entity.PurchaseIntentResult;\nimport com.huawei.hms.iap.entity.PurchaseResultInfo;\nimport com.huawei.hms.support.api.client.Status;\n\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.List;\nimport java.util.Objects;\n\npublic class DataUtils {\n    private static final String TAG = DataUtils.class.getSimpleName();\n\n    public static JSONObject getJSONFromStatus(Status obj) {\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"errorString\", obj.getErrorString());\n            j.put(\"statusCode\", obj.getStatusCode());\n            j.put(\"statusMessage\", obj.getStatusMessage());\n            j.put(\"hasResolution\", obj.hasResolution());\n            j.put(\"isCanceled\", obj.isCanceled());\n            j.put(\"isInterrupted\", obj.isInterrupted());\n            j.put(\"isSuccess\", obj.isSuccess());\n            j.put(\"hasResolution\", obj.hasResolution());\n            j.put(\"describeContents\", obj.describeContents());\n            j.put(\"hashCode\", obj.hashCode());\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return j;\n    }\n\n    public static WritableMap getMapCreatePurchaseIntent(PurchaseResultInfo obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"inAppPurchaseData\", obj.getInAppPurchaseData());\n            j.put(\"inAppDataSignature\", obj.getInAppDataSignature());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"signatureAlgorithm\", obj.getSignatureAlgorithm());\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromConsumeOwnedPurchaseResult(ConsumeOwnedPurchaseResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"consumePurchaseData\", obj.getConsumePurchaseData());\n            j.put(\"dataSignature\", obj.getDataSignature());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"signatureAlgorithm\", obj.getSignatureAlgorithm());\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromInAppPurchaseData(InAppPurchaseData obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"appInfo\", obj.getAppInfo());\n            j.put(\"applicationId\", obj.getApplicationId());\n            j.put(\"cancelledSubKeepDays\", obj.getCancelledSubKeepDays());\n            j.put(\"cancelReason\", obj.getCancelReason());\n            j.put(\"cancelTime\", obj.getCancelTime());\n            j.put(\"country\", obj.getCountry());\n            j.put(\"currency\", obj.getCurrency());\n            j.put(\"daysLasted\", obj.getDaysLasted());\n            j.put(\"developerPayload\", obj.getDeveloperPayload());\n            j.put(\"expirationDate\", obj.getExpirationDate());\n            j.put(\"expirationIntent\", obj.getExpirationIntent());\n            j.put(\"introductoryFlag\", obj.getIntroductoryFlag());\n            j.put(\"lastOrderId\", obj.getLastOrderId());\n            j.put(\"notifyClosed\", obj.getNotifyClosed());\n            j.put(\"numOfDiscount\", obj.getNumOfDiscount());\n            j.put(\"numOfPeriods\", obj.getNumOfPeriods());\n            j.put(\"orderID\", obj.getOrderID());\n            j.put(\"oriPurchaseTime\", obj.getOriPurchaseTime());\n            j.put(\"packageName\", obj.getPackageName());\n            j.put(\"price\", obj.getPrice());\n            j.put(\"priceConsentStatus\", obj.getPriceConsentStatus());\n            j.put(\"productGroup\", obj.getProductGroup());\n            j.put(\"productId\", obj.getProductId());\n            j.put(\"productName\", obj.getProductName());\n            j.put(\"purchaseState\", obj.getPurchaseState());\n            j.put(\"purchaseTime\", obj.getPurchaseTime());\n            j.put(\"purchaseToken\", obj.getPurchaseToken());\n            j.put(\"purchaseType\", obj.getPurchaseType());\n            j.put(\"quantity\", obj.getQuantity());\n            j.put(\"renewPrice\", obj.getRenewPrice());\n            j.put(\"renewStatus\", obj.getRenewStatus());\n            j.put(\"retryFlag\", obj.getRetryFlag());\n            j.put(\"subscriptionId\", obj.getSubscriptionId());\n            j.put(\"trialFlag\", obj.getTrialFlag());\n            j.put(\"isAutoRenewing\", obj.isAutoRenewing());\n            j.put(\"isSubValid\", obj.isSubValid());\n            j.put(\"cancelledSubKeepDays\", obj.getCancelledSubKeepDays());\n            j.put(\"kind\", obj.getKind());\n            j.put(\"developerChallenge\", obj.getDeveloperChallenge());\n            j.put(\"consumptionState\", obj.getConsumptionState());\n            j.put(\"payOrderId\", obj.getPayOrderId());\n            j.put(\"payType\", obj.getPayType());\n            j.put(\"deferFlag\", obj.getDeferFlag());\n            j.put(\"oriSubscriptionId\", obj.getOriSubscriptionId());\n            j.put(\"cancelWay\", obj.getCancelWay());\n            j.put(\"cancellationTime\", obj.getCancellationTime());\n            j.put(\"resumeTime\", obj.getResumeTime());\n\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromIsEnvReadyResult(IsEnvReadyResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            j.put(\"carrierId\", obj.getCarrierId());\n            j.put(\"country\", obj.getCountry());\n            j.put(\"accountFlag\", obj.getAccountFlag());\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromIsSandboxActivatedResult(IsSandboxActivatedResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"isSandboxApk\", obj.getIsSandboxApk());\n            j.put(\"isSandboxUser\", obj.getIsSandboxUser());\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"versionFrMarket\", obj.getVersionFrMarket());\n            j.put(\"versionInApk\", obj.getVersionInApk());\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromOwnedPurchasesResult(OwnedPurchasesResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"continuationToken\", obj.getContinuationToken());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"itemList\", new JSONArray(obj.getItemList()));\n            j.put(\"inAppPurchaseDataList\", getArrayFromInAppPurchaseDataList(obj));\n            j.put(\"inAppSignature\", new JSONArray(obj.getInAppSignature()));\n            j.put(\"placedInappPurchaseDataList\", new JSONArray(obj.getPlacedInappPurchaseDataList()));\n            j.put(\"placedInappSignatureList\", new JSONArray(obj.getPlacedInappSignatureList()));\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"signatureAlgorithm\", obj.getSignatureAlgorithm());\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static JSONArray getArrayFromInAppPurchaseDataList(OwnedPurchasesResult obj) {\n        List<String> inAppPurchaseDataList = obj.getInAppPurchaseDataList();\n        JSONArray productArray = new JSONArray();\n        for (int i = 0; i < inAppPurchaseDataList.size(); i++) {\n            String item = inAppPurchaseDataList.get(i);\n            productArray.put(item);\n        }\n        return productArray;\n    }\n\n    public static WritableMap getMapFromProductInfoResult(ProductInfoResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"productInfoList\", getArrayFromProductInfoList(obj));\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static JSONArray getArrayFromProductInfoList(ProductInfoResult obj) {\n        List<ProductInfo> productInfoList = obj.getProductInfoList();\n        JSONArray productArray = new JSONArray();\n        for (int i = 0; i < productInfoList.size(); i++) {\n            ProductInfo item = productInfoList.get(i);\n            JSONObject product = getMapFromProductInfo(item);\n            productArray.put(product);\n        }\n        return productArray;\n    }\n\n    public static WritableMap getMapFromPurchaseIntentResult(PurchaseIntentResult obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"status\", getJSONFromStatus(obj.getStatus()));\n            j.put(\"signatureAlgorithm\", obj.getSignatureAlgorithm());\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static WritableMap getMapFromPurchaseResultInfo(PurchaseResultInfo obj) {\n        WritableMap writableMap = null;\n        try {\n            JSONObject j = new JSONObject();\n            j.put(\"returnCode\", obj.getReturnCode());\n            j.put(\"errMsg\", obj.getErrMsg());\n            j.put(\"inAppPurchaseData\", obj.getInAppPurchaseData());\n            j.put(\"inAppDataSignature\", obj.getInAppDataSignature());\n            j.put(\"signatureAlgorithm\", obj.getSignatureAlgorithm());\n            writableMap = MapUtil.toWritableMap(j);\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return writableMap;\n    }\n\n    public static JSONObject getMapFromProductInfo(ProductInfo obj) {\n        JSONObject j = new JSONObject();\n        try {\n            j.put(\"productId\", obj.getProductId());\n            j.put(\"priceType\", obj.getPriceType());\n            j.put(\"price\", obj.getPrice());\n            j.put(\"microsPrice\", obj.getMicrosPrice());\n            j.put(\"originalLocalPrice\", obj.getOriginalLocalPrice());\n            j.put(\"originalMicroPrice\", obj.getOriginalMicroPrice());\n            j.put(\"currency\", obj.getCurrency());\n            j.put(\"productName\", obj.getProductName());\n            j.put(\"productDesc\", obj.getProductDesc());\n            j.put(\"subPeriod\", obj.getSubPeriod());\n            j.put(\"subSpecialPrice\", obj.getSubSpecialPrice());\n            j.put(\"subSpecialPriceMicros\", obj.getSubSpecialPriceMicros());\n            j.put(\"subSpecialPeriod\", obj.getSubSpecialPeriod());\n            j.put(\"subSpecialPeriodCycles\", obj.getSubSpecialPeriodCycles());\n            j.put(\"subFreeTrialPeriod\", obj.getSubFreeTrialPeriod());\n            j.put(\"subGroupId\", obj.getSubGroupId());\n            j.put(\"subGroupTitle\", obj.getSubGroupTitle());\n            j.put(\"subProductLevel\", obj.getSubProductLevel());\n            j.put(\"offerUsedStatus\", obj.getOfferUsedStatus());\n        } catch (JSONException e) {\n            Log.e(TAG, Objects.requireNonNull(e.getMessage()));\n        }\n        return j;\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/utils/ExceptionHandler.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.utils;\n\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.addErrorMessage;\nimport static com.huawei.hms.rn.iap.client.utils.MapUtil.createWritableMapWithSuccessStatus;\n\nimport android.util.Log;\n\nimport com.huawei.hms.iap.IapApiException;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\n\n/**\n * ExceptionHandler simply looks for exception then whether gives an IapApiException log information with return code\n * or throws an exception with localized message.\n *\n * @since v.5.0.0\n */\npublic enum ExceptionHandler {\n    INSTANCE;\n\n    public static final String TAG = ExceptionHandler.class.getSimpleName();\n\n    /**\n     * Promise handler method, in failure.\n     *\n     * @param exception Exception instance.\n     * @param promise Promise instance.\n     */\n    public synchronized static void handle(Exception exception, Promise promise) {\n        WritableMap writableMap = createWritableMapWithSuccessStatus(false);\n        if (exception instanceof IapApiException) {\n            IapApiException iapApiException = (IapApiException) exception;\n            Log.i(TAG, \"returnCode: \" + iapApiException.getStatusCode());\n            writableMap.putInt(\"statusCode\", iapApiException.getStatusCode());\n            promise.resolve(writableMap);\n        } else {\n            promise.resolve(addErrorMessage(writableMap, exception.getLocalizedMessage()));\n        }\n    }\n\n    /**\n     * Exception logger.\n     *\n     * @param exception Exception instance.\n     */\n    public synchronized void handle(Exception exception) {\n        Log.e(TAG, exception.toString());\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/utils/MapUtil.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.utils;\n\nimport static com.facebook.react.bridge.Arguments.createArray;\nimport static com.facebook.react.bridge.Arguments.createMap;\nimport static com.huawei.hms.rn.iap.client.utils.Constants.ERROR_MESSAGE_KEY;\nimport static com.huawei.hms.rn.iap.client.utils.Constants.IS_SUCCESS_KEY;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromConsumeOwnedPurchaseResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromInAppPurchaseData;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromIsEnvReadyResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromIsSandboxActivatedResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromOwnedPurchasesResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromProductInfoResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromPurchaseIntentResult;\nimport static com.huawei.hms.rn.iap.client.utils.DataUtils.getMapFromPurchaseResultInfo;\n\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;\nimport com.huawei.hms.iap.entity.InAppPurchaseData;\nimport com.huawei.hms.iap.entity.IsEnvReadyResult;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedResult;\nimport com.huawei.hms.iap.entity.OwnedPurchasesResult;\nimport com.huawei.hms.iap.entity.ProductInfoResult;\nimport com.huawei.hms.iap.entity.PurchaseIntentResult;\nimport com.huawei.hms.iap.entity.PurchaseResultInfo;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\nimport java.util.stream.Collectors;\n\nimport javax.annotation.Nullable;\n\n/**\n * MapUtil exposes a set of helper methods for working with\n * {@link ReadableMap}, {@link Map<>}.\n **/\npublic class MapUtil {\n    private static final Gson GSON = createGson();\n\n    public static final String TAG = \"Response Success:: \";\n\n    /**\n     * Converts an IAP Object to a WritableMap.\n     *\n     * @param instance: IAP Object.\n     * @param <T>: Generic class type.\n     * @return WritableMap\n     */\n    public static <T> WritableMap toWritableMap(final T instance) {\n        WritableMap writableMap = createMap();\n        if (instance instanceof ConsumeOwnedPurchaseResult) {\n            Log.i(TAG, \"consumeOwnedPurchaseResult\");\n            return getMapFromConsumeOwnedPurchaseResult((ConsumeOwnedPurchaseResult) instance);\n        } else if (instance instanceof InAppPurchaseData) {\n            Log.i(TAG, \"inAppPurchaseData\");\n            return getMapFromInAppPurchaseData((InAppPurchaseData) instance);\n        } else if (instance instanceof IsEnvReadyResult) {\n            Log.i(TAG, \"isEnvReadyResult\");\n            return getMapFromIsEnvReadyResult((IsEnvReadyResult) instance);\n        } else if (instance instanceof IsSandboxActivatedResult) {\n            Log.i(TAG, \"isSandboxActivatedResult\");\n            return getMapFromIsSandboxActivatedResult((IsSandboxActivatedResult) instance);\n        } else if (instance instanceof OwnedPurchasesResult) {\n            Log.i(TAG, \"ownedPurchasesResult\");\n            return getMapFromOwnedPurchasesResult((OwnedPurchasesResult) instance);\n        } else if (instance instanceof ProductInfoResult) {\n            Log.i(TAG, \"productInfoResult\");\n            return getMapFromProductInfoResult((ProductInfoResult) instance);\n        } else if (instance instanceof PurchaseIntentResult) {\n            Log.i(TAG, \"purchaseIntentResult\");\n            return getMapFromPurchaseIntentResult((PurchaseIntentResult) instance);\n        } else if (instance instanceof PurchaseResultInfo) {\n            Log.i(TAG, \"purchaseResultInfo\");\n            return getMapFromPurchaseResultInfo((PurchaseResultInfo) instance);\n        }\n        String jsonStr = GSON.toJson(instance);\n        try {\n            JSONObject jsonObj = new JSONObject(jsonStr);\n            return toWritableMap(jsonObj);\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONException: error ->\" + e.toString());\n        }\n        return writableMap;\n    }\n\n    /**\n     * Helper method to get map values from its keys.\n     *\n     * @param map: A HashMap value.\n     * @param value: Value of the key.\n     * @param <T>: Generic class type.\n     * @param <E>: Generic class type.\n     * @return Requested class instance.\n     */\n    public static <T, E> T getKeyByValue(final Map<T, E> map, final E value) {\n        for (Map.Entry<T, E> entry : map.entrySet()) {\n            if (Objects.equals(value, entry.getValue())) {\n                return entry.getKey();\n            }\n        }\n        return null;\n    }\n\n    // Private Helper Methods\n\n    /**\n     * Converts a String formatted JSON to a requested object.\n     *\n     * @param json: String value that represents json object in string format.\n     * @param type: Requested class type.\n     * @param <T>: Generic class type.\n     * @return Requested Instance.\n     */\n    public static <T> T fromJson(final String json, final Class<T> type) {\n        return GSON.fromJson(json, type);\n    }\n\n    /**\n     * Converts a HashMap into a WritableMap.\n     *\n     * @param map: Map<String, Object> to be converted.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final Map<String, Object> map) {\n        WritableMap writableMap = Arguments.createMap();\n        Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();\n        while (iterator.hasNext()) {\n            Map.Entry<String, Object> pair = iterator.next();\n            Object value = pair.getValue();\n            if (value == null) {\n                writableMap.putNull(pair.getKey());\n            } else if (value instanceof Boolean) {\n                writableMap.putBoolean(pair.getKey(), (Boolean) value);\n            } else if (value instanceof Double) {\n                writableMap.putDouble(pair.getKey(), (Double) value);\n            } else if (value instanceof Integer) {\n                writableMap.putInt(pair.getKey(), (Integer) value);\n            } else if (value instanceof String) {\n                writableMap.putString(pair.getKey(), (String) value);\n            } else if (value instanceof Map) {\n                writableMap.putMap(pair.getKey(), toWritableMap(value));\n            } else if (value.getClass().isArray()) {\n                writableMap.putArray(pair.getKey(), toWritableArray((Object[]) value));\n            }\n            iterator.remove();\n        }\n        return writableMap;\n    }\n\n    /**\n     * Converts a JSONObject instance to a WritableMap.\n     *\n     * @param jsonObject: JSONObject instance.\n     * @return WritableMap\n     */\n    public static WritableMap toWritableMap(final JSONObject jsonObject) {\n        WritableMap map = new WritableNativeMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            try {\n                Object value = jsonObject.get(key);\n                if (value instanceof JSONObject) {\n                    map.putMap(key, toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    map.putArray(key, toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    map.putBoolean(key, (Boolean) value);\n                } else if (value instanceof Integer) {\n                    map.putInt(key, (Integer) value);\n                } else if (value instanceof Double) {\n                    map.putDouble(key, (Double) value);\n                } else if (value instanceof String) {\n                    map.putString(key, (String) value);\n                } else {\n                    map.putString(key, value.toString());\n                }\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException: error ->\" + e.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts ReadableMap instance to a JSONObject.\n     *\n     * @param readableMap: ReadableMap instance.\n     * @return JSONObject.\n     */\n    public static JSONObject toJson(final ReadableMap readableMap) {\n        JSONObject object = new JSONObject();\n        if (readableMap == null) {\n            return object;\n        }\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            try {\n                switch (readableMap.getType(key)) {\n                    case Null:\n                        object.put(key, JSONObject.NULL);\n                        break;\n                    case Boolean:\n                        object.put(key, readableMap.getBoolean(key));\n                        break;\n                    case Number:\n                        object.put(key, readableMap.getDouble(key));\n                        break;\n                    case String:\n                        object.put(key, readableMap.getString(key));\n                        break;\n                    case Map:\n                        object.put(key, toJson(readableMap.getMap(key)));\n                        break;\n                    case Array:\n                        object.put(key, toJson(readableMap.getArray(key)));\n                        break;\n                    default:\n                        break;\n                }\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException: error ->\" + e.toString());\n            }\n        }\n        return object;\n    }\n\n    /**\n     * toStringArrayList converts a List<Object> into a List<String>.\n     *\n     * @param objectList: The List<Object> to be converted.\n     * @return List<String>\n     */\n    public static List<String> toStringArrayList(List<Object> objectList) {\n        if (objectList.isEmpty()) {\n            return new ArrayList<>();\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n            return objectList.stream().map(object -> Objects.toString(objectList)).collect(Collectors.toList());\n        } else {\n            List<String> strings = new ArrayList<>(objectList.size());\n            for (Object object : objectList) {\n                strings.add(Objects.toString(object));\n            }\n            return strings;\n        }\n    }\n\n    /**\n     * toArrayList converts a ReadableArray into a ArrayList<Object>.\n     *\n     * @param array: The ReadableArray to be converted.\n     * @return ArrayList<Object>\n     */\n    public static ArrayList<Object> toArrayList(ReadableArray array) {\n        if (array == null || array.size() == 0) {\n            return new ArrayList<>();\n        }\n        ArrayList<Object> arrayList = new ArrayList<>(array.size());\n        for (int i = 0, size = array.size(); i < size; i++) {\n            switch (array.getType(i)) {\n                case Null:\n                    arrayList.add(null);\n                    break;\n                case Boolean:\n                    arrayList.add(array.getBoolean(i));\n                    break;\n                case Number:\n                    arrayList.add(array.getDouble(i));\n                    break;\n                case String:\n                    arrayList.add(array.getString(i));\n                    break;\n                case Map:\n                    arrayList.add(toMap(array.getMap(i)));\n                    break;\n                case Array:\n                    arrayList.add(toArrayList(array.getArray(i)));\n                    break;\n                default:\n                    throw new IllegalArgumentException(\"Could not convert object at index: \" + i + \".\");\n            }\n        }\n        return arrayList;\n    }\n\n    /**\n     * Converts a Object[] array into a WritableArray.\n     *\n     * @param array: The Object[] array to be converted.\n     * @return WritableArray\n     */\n    private static WritableArray toWritableArray(final Object[] array) {\n        WritableArray writableArray = createArray();\n        if (array == null) {\n            return writableArray;\n        }\n\n        for (Object value : array) {\n            if (value == null) {\n                writableArray.pushNull();\n            }\n            if (value instanceof Boolean) {\n                writableArray.pushBoolean((Boolean) value);\n            }\n            if (value instanceof Double) {\n                writableArray.pushDouble((Double) value);\n            }\n            if (value instanceof Integer) {\n                writableArray.pushInt((Integer) value);\n            }\n            if (value instanceof String) {\n                writableArray.pushString((String) value);\n            }\n            if (value instanceof Map) {\n                Map<String, Object> valueMap = (Map<String, Object>) value;\n                writableArray.pushMap(toWritableMap(valueMap));\n            }\n            if (value != null && value.getClass().isArray()) {\n                if (value instanceof Object[]) {\n                    writableArray.pushArray(toWritableArray((Object[]) value));\n                }\n            }\n        }\n        return writableArray;\n    }\n\n    /**\n     * toArray converts a ReadableArray into a Object[].\n     *\n     * @param readableArray: The ReadableArray to be converted.\n     * @return Object[]\n     */\n    private static Object[] toArray(final ReadableArray readableArray) {\n        if (readableArray == null || readableArray.size() == 0) {\n            return new Object[0];\n        }\n        Object[] array = new Object[readableArray.size()];\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Null:\n                    array[i] = null;\n                    break;\n                case Boolean:\n                    array[i] = readableArray.getBoolean(i);\n                    break;\n                case Number:\n                    array[i] = readableArray.getDouble(i);\n                    break;\n                case String:\n                    array[i] = readableArray.getString(i);\n                    break;\n                case Map:\n                    array[i] = toMap(readableArray.getMap(i));\n                    break;\n                case Array:\n                    array[i] = toArray(readableArray.getArray(i));\n                    break;\n                default:\n                    break;\n            }\n        }\n        return array;\n    }\n\n    /**\n     * Converts a ReadableMap into a HashMap.\n     *\n     * @param readableMap: The ReadableMap to be converted.\n     * @return A HashMap containing the data that was in the ReadableMap.\n     */\n    private static Map<String, Object> toMap(final ReadableMap readableMap) {\n        Map<String, Object> map = new HashMap<>();\n        if (readableMap == null) {\n            return map;\n        }\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n            switch (type) {\n                case Null:\n                    map.put(key, null);\n                    break;\n                case Boolean:\n                    map.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    map.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    String valueStr = readableMap.getString(key);\n                    if (valueStr != null) {\n                        map.put(key, valueStr);\n                        break;\n                    }\n                    break;\n                case Map:\n                    map.put(key, MapUtil.toMap(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    map.put(key, toArray(readableMap.getArray(key)));\n                    break;\n                default:\n                    break;\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts a JSONArray into a WritableArray.\n     *\n     * @param jsonArray: JSONArray instance.\n     * @return WritableArray\n     */\n    private static WritableArray toWritableArray(final JSONArray jsonArray) {\n        WritableArray array = new WritableNativeArray();\n        for (int i = 0; i < jsonArray.length(); i++) {\n            try {\n                Object value = jsonArray.get(i);\n                if (value instanceof JSONObject) {\n                    array.pushMap(toWritableMap((JSONObject) value));\n                } else if (value instanceof JSONArray) {\n                    array.pushArray(toWritableArray((JSONArray) value));\n                } else if (value instanceof Boolean) {\n                    array.pushBoolean((Boolean) value);\n                } else if (value instanceof Integer) {\n                    array.pushInt((Integer) value);\n                } else if (value instanceof Double) {\n                    array.pushDouble((Double) value);\n                } else if (value instanceof String) {\n                    array.pushString((String) value);\n                } else {\n                    array.pushString(value.toString());\n                }\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException: error ->\" + e.toString());\n            }\n        }\n        return array;\n    }\n\n    /**\n     * Converts a ReadableArray to a JSONArray.\n     *\n     * @param readableArray: ReadableArray instance.\n     * @return JSONArray\n     */\n    private static JSONArray toJson(final ReadableArray readableArray) {\n        JSONArray array = new JSONArray();\n        if (readableArray == null) {\n            return array;\n        }\n        for (int i = 0; i < readableArray.size(); i++) {\n            try {\n                switch (readableArray.getType(i)) {\n                    case Boolean:\n                        array.put(readableArray.getBoolean(i));\n                        break;\n                    case Number:\n                        array.put(readableArray.getDouble(i));\n                        break;\n                    case String:\n                        array.put(readableArray.getString(i));\n                        break;\n                    case Map:\n                        array.put(toJson(readableArray.getMap(i)));\n                        break;\n                    case Array:\n                        array.put(toJson(readableArray.getArray(i)));\n                        break;\n                    default:\n                        break;\n                }\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException: error ->\" + e.toString());\n            }\n        }\n        return array;\n    }\n\n    /**\n     * Creates writableMap instance with isSuccess status.\n     *\n     * @param isSuccess Boolean value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap createWritableMapWithSuccessStatus(final @Nullable Boolean isSuccess) {\n        WritableMap writableMap = new WritableNativeMap();\n        return addIsSuccess(writableMap, isSuccess);\n    }\n\n    /**\n     * Adds isSuccess value to an empty or already initialized writableMap instance.\n     *\n     * @param writableMap WritableMap instance, that can either be null or already initialized.\n     * @param isSuccess Boolean Value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap addIsSuccess(@Nullable WritableMap writableMap, final @Nullable Boolean isSuccess) {\n        if (writableMap == null) {\n            writableMap = createMap();\n        }\n        if (isSuccess != null) {\n            writableMap.putBoolean(IS_SUCCESS_KEY, isSuccess);\n        }\n        return writableMap;\n    }\n\n    /**\n     * Adds errorMessage value to an empty or already initialized writableMap instance.\n     *\n     * @param writableMap WritableMap instance, that can either be null or already initialized.\n     * @param errorMessage String Value.\n     * @return WritableMap instance.\n     */\n    public static WritableMap addErrorMessage(@Nullable WritableMap writableMap, final String errorMessage) {\n        if (writableMap == null) {\n            writableMap = createMap();\n        }\n        writableMap.putString(ERROR_MESSAGE_KEY, errorMessage);\n        return writableMap;\n    }\n\n    /**\n     * Creates Gson instance.\n     *\n     * @return Gson\n     */\n    private static Gson createGson() {\n        final GsonBuilder builder = new GsonBuilder();\n        builder.serializeNulls();\n        return builder.create();\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/viewmodel/Service.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.viewmodel;\n\nimport android.app.Activity;\n\nimport com.huawei.hms.iap.IapClient;\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseReq;\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;\nimport com.huawei.hms.iap.entity.IsEnvReadyResult;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedResult;\nimport com.huawei.hms.iap.entity.OwnedPurchasesReq;\nimport com.huawei.hms.iap.entity.OwnedPurchasesResult;\nimport com.huawei.hms.iap.entity.ProductInfoReq;\nimport com.huawei.hms.iap.entity.ProductInfoResult;\nimport com.huawei.hms.iap.entity.PurchaseIntentReq;\nimport com.huawei.hms.iap.entity.PurchaseIntentResult;\nimport com.huawei.hms.iap.entity.StartIapActivityReq;\nimport com.huawei.hms.iap.entity.StartIapActivityResult;\n\nimport com.facebook.react.bridge.Promise;\n\n/**\n * IapClientReqPresenter defines a blueprint of {@link ViewModel} methods.\n *\n * @since v.5.0.0\n */\npublic interface Service {\n    /**\n     * View protocol that presents current Activity.\n     */\n    interface View {\n        /**\n         * Represents current activity.\n         *\n         * @return Activity instance.\n         */\n        Activity getActivity();\n    }\n\n    /**\n     *\n     */\n    interface Presenter {\n\n        /**\n         * isEnvironmentReady presents to check whether the currently signed-in HUAWEI ID\n         * is located in a country or region where HUAWEI IAP is available.\n         *\n         * @param isSupportAppTouch: Indicates whether your app is to be released on AppTouch.\n         * @param mClient: IapClient instance to call the isEnvReady API.\n         * @param isEnvReadyResultListener: IAPResultListener with IsEnvReadyResult instance.\n         */\n        void isEnvironmentReady(boolean isSupportAppTouch, IapClient mClient,\n            IAPResultListener<IsEnvReadyResult> isEnvReadyResultListener);\n\n        /**\n         * Enables logging.\n         *\n         * @param promise: The promise value of the HmsLogger enableLogger function.\n         */\n        void enableLogger(Promise promise);\n\n        /**\n         * Enables logging.\n         *\n         * @param promise: The promise value of the HmsLogger disableLogger function.\n         */\n        void disableLogger(Promise promise);\n\n        /**\n         * Enables pending purchase.\n         *\n         * @param mClient: IapClient instance to call the enablePendingPurchase API.\n         * @param promise: The promise value of the HmsLogger enableLogger function.\n         */\n        void enablePendingPurchase(final IapClient mClient, Promise promise);\n\n        /**\n         * isSandboxActivated presents to check whether the sign-in HUAWEI ID and app APK version meets the requirements\n         * of the sandbox testing.\n         *\n         * @param mClient: IapClient instance to call the isSandboxActivated API.\n         * @param isSandboxActivatedResultListener: IAPResultListener with IsSandboxActivatedListener instance.\n         */\n        void isSandboxActivated(IapClient mClient,\n            IAPResultListener<IsSandboxActivatedResult> isSandboxActivatedResultListener);\n\n        /**\n         * Presents to query information about all purchased in-app products,\n         * including consumables, non-consumables, and auto-renewable subscriptions.</br>\n         *\n         * @param mClient: IapClient instance to call the obtainOwnedPurchases API.\n         * @param ownedPurchasesReq: OwnedPurchasesReq object.\n         * @param ownedPurchasesResultListener: IAPResultListener with QueryPurchasesListener instance.\n         */\n        void obtainOwnedPurchases(IapClient mClient, OwnedPurchasesReq ownedPurchasesReq,\n            IAPResultListener<OwnedPurchasesResult> ownedPurchasesResultListener);\n\n        /**\n         * Presents to obtain in-app product details configured in AppGallery Connect.\n         * If you use Huawei’s PMS to price in-app products,\n         * you can use this API to obtain in-app product details from the PMS to ensure that the in-app product\n         * information in your app is the same as that displayed on the checkout page of HUAWEI IAP.\n         * </br>\n         *\n         * @param iapClient: IapClient instance to call the obtainOwnedPurchases API.\n         * @param productInfoReq: ProductInfoReq object.\n         * @param productInfoResultListener: IAPResultListener with ProductInfoResultListener instance.\n         */\n        void obtainProductInfo(IapClient iapClient, ProductInfoReq productInfoReq,\n            final IAPResultListener<ProductInfoResult> productInfoResultListener);\n\n        /**\n         * Presents to create orders for PMS products, including consumables, non-consumables, and subscriptions.\n         *\n         * @param mClient: IapClient instance to call the obtainOwnedPurchases API.\n         * @param purchaseIntentReq: PurchaseIntentReq object.\n         * @param purchaseIntentResultListener: IAPResultListener with PurchaseIntentResultListener instance.\n         */\n        void createPurchaseIntent(IapClient mClient, PurchaseIntentReq purchaseIntentReq,\n            IAPResultListener<PurchaseIntentResult> purchaseIntentResultListener);\n\n        /**\n         * Presents to consume a consumable after the consumable is delivered to a user who has completed payment.\n         *\n         * @param iapClient: IapClient instance to call the consumeOwnedPurchase API.\n         * @param consumeOwnedPurchaseReq: ConsumeOwnedPurchaseReq instance which contains request\n         * information.\n         * @param consumeOwnedPurchaseResultListener: IAPResultListener with ConsumeOwnedPurchaseResultListener\n         * instance.\n         */\n        void consumeOwnedPurchase(IapClient iapClient, ConsumeOwnedPurchaseReq consumeOwnedPurchaseReq,\n            IAPResultListener<ConsumeOwnedPurchaseResult> consumeOwnedPurchaseResultListener);\n\n        /**\n         * Presents to obtain the historical consumption information about a consumable\n         * or all subscription receipts of a subscription.\n         *\n         * @param iapClient: IapClient instance to call the obtainOwnedPurchaseRecord API.\n         * @param ownedPurchasesReq: OwnedPurchasesReq instance.\n         * @param ownedPurchasesResultListener: IAPResultListener with QueryPurchasesListener instance.\n         */\n        void obtainOwnedPurchaseRecord(IapClient iapClient, OwnedPurchasesReq ownedPurchasesReq,\n            IAPResultListener<OwnedPurchasesResult> ownedPurchasesResultListener);\n\n        /**\n         * Presents to bring up in-app payment pages, including:\n         * </br>\n         * Subscription editing page\n         * Subscription management page\n         *\n         * @param iapClient: IapClient instance to call the obtainOwnedPurchaseRecord API.\n         * @param startIapActivityReq: StartIapActivityReq instance.\n         * @param startIapActivityResultListener: IAPResultListener with StartIapActivityResult instance.\n         */\n        void startIapActivity(IapClient iapClient, StartIapActivityReq startIapActivityReq,\n            IAPResultListener<StartIapActivityResult> startIapActivityResultListener);\n    }\n\n    /**\n     * IAPResultListener\n     *\n     * @param <T>: IAPInstances.\n     */\n    interface IAPResultListener<T> {\n        /**\n         * Presents the success scenario, IAP Result instance is returned.\n         *\n         * @param result: IAP Result instance.\n         */\n        void onSuccess(T result);\n\n        /**\n         * Presents the failure scenario, Exception instance is returned.\n         *\n         * @param exception: Exception instance.\n         */\n        void onFail(Exception exception);\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/android/src/main/java/com/huawei/hms/rn/iap/client/viewmodel/ViewModel.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.client.viewmodel;\n\nimport android.content.Context;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.iap.IapClient;\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseReq;\nimport com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;\nimport com.huawei.hms.iap.entity.IsEnvReadyResult;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedReq;\nimport com.huawei.hms.iap.entity.IsSandboxActivatedResult;\nimport com.huawei.hms.iap.entity.OwnedPurchasesReq;\nimport com.huawei.hms.iap.entity.OwnedPurchasesResult;\nimport com.huawei.hms.iap.entity.ProductInfoReq;\nimport com.huawei.hms.iap.entity.ProductInfoResult;\nimport com.huawei.hms.iap.entity.PurchaseIntentReq;\nimport com.huawei.hms.iap.entity.PurchaseIntentResult;\nimport com.huawei.hms.iap.entity.StartIapActivityReq;\nimport com.huawei.hms.iap.entity.StartIapActivityResult;\nimport com.huawei.hms.rn.iap.HMSIapModule;\nimport com.huawei.hms.rn.iap.client.logger.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\n\nimport java.lang.ref.WeakReference;\n\nimport javax.annotation.Nullable;\n\n/**\n * IapClientReqPresenter works as a mediator between {@link IapClient} and {@link HMSIapModule}.\n * <p>\n * It fetches data from the {@link IapClient}, format the data and return to the {@link HMSIapModule}.\n *\n * @since v.5.0.0\n */\n\npublic class ViewModel implements Service.Presenter {\n    // Context Variable\n    private WeakReference<Context> weakContext;\n\n    public ViewModel(@Nullable Context context) {\n        this.weakContext = new WeakReference<>(context);\n    }\n\n    /**\n     * isEnvironmentReady Checks whether the currently signed-in HUAWEI ID\n     * is located in a country or region where HUAWEI IAP is available.\n     *\n     * @param isSupportAppTouch: Indicates whether your app is to be released on AppTouch.\n     * @param mClient: IapClient instance to call the isEnvReady API.\n     * @param isEnvReadyResultListener: IAPResultListener with IsEnvReadyResult instance.\n     */\n    public void isEnvironmentReady(boolean isSupportAppTouch, final IapClient mClient,\n        final Service.IAPResultListener<IsEnvReadyResult> isEnvReadyResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"isEnvironmentReady\");\n        Task<IsEnvReadyResult> task = isSupportAppTouch ? mClient.isEnvReady(isSupportAppTouch) : mClient.isEnvReady();\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isEnvironmentReady\");\n            if (result != null) {\n                isEnvReadyResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isEnvironmentReady\", exception.getLocalizedMessage());\n            isEnvReadyResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Checks whether the sign-in HUAWEI ID and app APK version meets the requirements\n     * of the sandbox testing.\n     *\n     * @param mClient: IapClient instance to call the isSandboxActivated API.\n     * @param isSandboxActivatedResultListener: IAPResultListener with IsSandboxActivatedListener instance.\n     */\n    public void isSandboxActivated(final IapClient mClient,\n        final Service.IAPResultListener<IsSandboxActivatedResult> isSandboxActivatedResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"isSandboxActivated\");\n        Task<IsSandboxActivatedResult> task = mClient.isSandboxActivated(new IsSandboxActivatedReq());\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isSandboxActivated\");\n            if (result != null) {\n                isSandboxActivatedResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isSandboxActivated\", exception.getLocalizedMessage());\n            isSandboxActivatedResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Enables pending purchase.\n     *\n     * @param mClient: IapClient instance to call the enablePendingPurchase API.\n     * @param promise: The promise value of the HmsLogger enableLogger function.\n     */\n    public void enablePendingPurchase(final IapClient mClient, Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"enablePendingPurchase\");\n        mClient.enablePendingPurchase();\n        HMSLogger.getInstance(getContext()).sendSingleEvent(\"enablePendingPurchase\");\n        promise.resolve(\"Success\");\n    }\n\n    /**\n     * Queries information about all purchased in-app products, including consumables, non-consumables,\n     * and auto-renewable subscriptions.</br>\n     * If the information about consumables is returned,\n     * the consumables might not be delivered due to some exceptions.\n     * In this case, your app needs to check whether the consumables are delivered.\n     * If not, the app needs to deliver them and calls the consumeOwnedPurchase API to consume them.\n     * If the information about non-consumables is returned,\n     * the non-consumables do not need to be consumed.\n     * If the information about subscriptions is returned,\n     * all existing subscription relationships of the user in the app are returned.\n     * The subscription relationships are as follows:\n     * Renewal (normal use and normal renewal in the next period)\n     * Expiring (expiration instead of renewal when the next period starts)\n     * Expired (The subscription is unavailable but can still be found in the subscription history.)\n     *\n     * @param mClient: IapClient instance to call the obtainOwnedPurchases API.\n     * @param ownedPurchasesReq: OwnedPurchasesReq object.\n     * @param ownedPurchasesResultListener: IAPResultListener with QueryPurchasesListener instance.\n     */\n    public void obtainOwnedPurchases(final IapClient mClient, final OwnedPurchasesReq ownedPurchasesReq,\n        final Service.IAPResultListener<OwnedPurchasesResult> ownedPurchasesResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"obtainOwnedPurchases\");\n        Task<OwnedPurchasesResult> task = mClient.obtainOwnedPurchases(ownedPurchasesReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"obtainOwnedPurchases\");\n            if (result != null) {\n                ownedPurchasesResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext())\n                .sendSingleEvent(\"obtainOwnedPurchases\", exception.getLocalizedMessage());\n            ownedPurchasesResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Obtains in-app product details configured in AppGallery Connect.\n     * If you use Huawei’s PMS to price in-app products, you can use this API to obtain\n     * in-app product details from the PMS to ensure that the in-app product information\n     * in your app is the same as that displayed on the checkout page of HUAWEI IAP.\n     * </br>\n     * Avoid obtaining in-app product information from your own server. Otherwise,\n     * price information may be inconsistent between your app and the checkout page.\n     *\n     * @param iapClient:IapClient instance to call the obtainOwnedPurchases API.\n     * @param productInfoReq:ProductInfoReq object.\n     * @param productInfoResultListener: IAPResultListener with ProductInfoResultListener instance.\n     */\n    public void obtainProductInfo(final IapClient iapClient, final ProductInfoReq productInfoReq,\n        final Service.IAPResultListener<ProductInfoResult> productInfoResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"obtainProductInfo\");\n        Task<ProductInfoResult> task = iapClient.obtainProductInfo(productInfoReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"obtainProductInfo\");\n            if (result != null) {\n                productInfoResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"obtainProductInfo\", exception.getLocalizedMessage());\n            productInfoResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Creates orders for PMS products, including consumables, non-consumables, and subscriptions.\n     * </br>\n     * After creating an in-app product in AppGallery Connect,\n     * you can call this API to open the HUAWEI IAP checkout page and display the product,\n     * price, and payment method.\n     *\n     * @param mClient: IapClient instance to call the obtainOwnedPurchases API.\n     * @param purchaseIntentReq: PurchaseIntentReq object.\n     * @param purchaseIntentResultListener: IAPResultListener with PurchaseIntentResultListener instance.\n     */\n    public void createPurchaseIntent(final IapClient mClient, final PurchaseIntentReq purchaseIntentReq,\n        final Service.IAPResultListener<PurchaseIntentResult> purchaseIntentResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"createPurchaseIntent\");\n        Task<PurchaseIntentResult> task = mClient.createPurchaseIntent(purchaseIntentReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"createPurchaseIntent\");\n            if (result != null) {\n                purchaseIntentResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext())\n                .sendSingleEvent(\"createPurchaseIntent\", exception.getLocalizedMessage());\n            purchaseIntentResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Consumes a consumable after the consumable is delivered to a user who has completed payment.\n     *\n     * @param iapClient: IapClient instance to call the consumeOwnedPurchase API.\n     * @param consumeOwnedPurchaseReq: ConsumeOwnedPurchaseReq instance which contains request information.\n     * @param consumeOwnedPurchaseResultListener: IAPResultListener with ConsumeOwnedPurchaseResultListener instance.\n     */\n    public void consumeOwnedPurchase(final IapClient iapClient, final ConsumeOwnedPurchaseReq consumeOwnedPurchaseReq,\n        final Service.IAPResultListener<ConsumeOwnedPurchaseResult> consumeOwnedPurchaseResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"consumeOwnedPurchase\");\n        Task<ConsumeOwnedPurchaseResult> task = iapClient.consumeOwnedPurchase(consumeOwnedPurchaseReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"consumeOwnedPurchase\");\n            if (result != null) {\n                consumeOwnedPurchaseResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext())\n                .sendSingleEvent(\"consumeOwnedPurchase\", exception.getLocalizedMessage());\n            consumeOwnedPurchaseResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Obtains the historical consumption information about a consumable\n     * or all subscription receipts of a subscription.\n     * </br>\n     * For consumables, this method returns information about products that have been delivered\n     * or consumed in the product list.\n     * For non-consumables, this method does not return product information.\n     * For subscriptions, this method returns all subscription receipts of the current user in this app.\n     *\n     * @param iapClient: IapClient instance fto call the obtainOwnedPurchaseRecord API.\n     * @param ownedPurchasesReq: OwnedPurchasesReq instance.\n     * @param ownedPurchasesResultListener: IAPResultListener with QueryPurchasesListener instance.\n     */\n    public void obtainOwnedPurchaseRecord(final IapClient iapClient, final OwnedPurchasesReq ownedPurchasesReq,\n        final Service.IAPResultListener<OwnedPurchasesResult> ownedPurchasesResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"obtainOwnedPurchaseRecord\");\n        Task<OwnedPurchasesResult> task = iapClient.obtainOwnedPurchaseRecord(ownedPurchasesReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"obtainOwnedPurchaseRecord\");\n            if (result != null) {\n                ownedPurchasesResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext())\n                .sendSingleEvent(\"obtainOwnedPurchaseRecord\", exception.getLocalizedMessage());\n            ownedPurchasesResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Brings up in-app payment pages, including:\n     * </br>\n     * Subscription editing page\n     * Subscription management page\n     *\n     * @param iapClient: IapClient instance to call the obtainOwnedPurchaseRecord API.\n     * @param startIapActivityReq: StartIapActivityReq instance.\n     * @param startIapActivityResultListener: IAPResultListener with StartIapActivityResult instance.\n     */\n    public void startIapActivity(final IapClient iapClient, final StartIapActivityReq startIapActivityReq,\n        final Service.IAPResultListener<StartIapActivityResult> startIapActivityResultListener) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"startIapActivity\");\n        Task<StartIapActivityResult> task = iapClient.startIapActivity(startIapActivityReq);\n        task.addOnSuccessListener(result -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"startIapActivity\");\n            if (result != null) {\n                startIapActivityResultListener.onSuccess(result);\n            }\n        }).addOnFailureListener(exception -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"startIapActivity\", exception.getLocalizedMessage());\n            startIapActivityResultListener.onFail(exception);\n        });\n    }\n\n    /**\n     * Enables logging.\n     *\n     * @param promise: The promise value of the HmsLogger enableLogger function.\n     */\n    public void enableLogger(Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n    }\n\n    /**\n     * Disables logging.\n     *\n     * @param promise: The promise value of the HmsLogger disableLogger function.\n     */\n    public void disableLogger(Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        promise.resolve(true);\n    }\n\n    /**\n     * Returns Context instance.\n     *\n     * @return Context\n     */\n    private Context getContext() {\n        return weakContext.get();\n    }\n}"
  },
  {
    "path": "react-native-hms-iap/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\ngradle-wrapper.jar\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\npackage-lock.json\n\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\n"
  },
  {
    "path": "react-native-hms-iap/example/App.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  ScrollView,\n  StyleSheet,\n  View,\n  Text\n} from 'react-native';\n\nimport { Colors } from 'react-native/Libraries/NewAppScreen';\nimport ProductTypes from './src/foundation/ProductTypes';\nimport PartialView from './src/ui/PartialView';\nimport HMSIapModule from '@hmscore/react-native-hms-iap';\n\nasync function enableLogger() {\n  try {\n    const response = await HMSIapModule.enableLogger();\n    console.log(\"enabledLogger:: \" + response);\n  } catch (e) {\n    console.log(\"enableLogger fail!\");\n  }\n}\n\nasync function disableLogger() {\n  try {\n    const response = await HMSIapModule.disableLogger();\n    console.log(\"disableLogger:: \" + response);\n  } catch (e) {\n    console.log(\"disableLogger fail!\");\n  }\n}\n\nasync function isSandboxActivated() {\n  try {\n    const res = await HMSIapModule.isSandboxActivated();\n    console.log(JSON.stringify(res) + \"\");\n  } catch (e) {\n    console.log(\"isSandboxActivated fail!\");\n  }\n}\n\nasync function enablePendingPurchase() {\n  try {\n    const res = await HMSIapModule.enablePendingPurchase();\n    console.log(\"enablePendingPurchase\", JSON.stringify(res) + \"\");\n  } catch (e) {\n    console.log(\"enablePendingPurchase fail!\");\n  }\n}\n\nexport default class App extends React.Component {\n\n  constructor() {\n    super();\n    this.state = {\n      isEnvReady: false\n    };\n  }\n\n  async componentDidMount() {\n    this.isEnvReady();\n    isSandboxActivated();\n    enablePendingPurchase();\n  }\n\n  async isEnvReady(arg = false) {\n    try {\n      const res = await HMSIapModule.isEnvironmentReady(arg);\n      console.log(JSON.stringify(res));\n      if (res.returnCode === 0) {\n        this.setState({ isEnvReady: true });\n        console.log(\"isEnvReady:\" + \"Success\");\n      } else {\n        this.setState({ isEnvReady: false });\n        console.log(\"isEnvReady:\" + \"False\");\n      }\n    } catch (e) {\n      console.log(\"isEnvironmentReady fail!\");\n    }\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.header}>\n          <Text style={styles.title}>HMS IAP Plugin</Text>\n        </View>\n        <ScrollView\n          style={styles.scrollView}>\n          {this.state.isEnvReady ?\n            <View style={styles.body}>\n              <PartialView productType={ProductTypes.CONSUMABLE} />\n              <PartialView productType={ProductTypes.NON_CONSUMABLE} />\n              <PartialView productType={ProductTypes.SUBSCRIPTION} />\n              <View style={{ height: 70, width: '100%' }} />\n            </View>\n            :\n            <Text style={[styles.title, { color: \"black\" }]}>IsEnviromentReady: false</Text>\n          }\n        </ScrollView>\n      </>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  scrollView: {\n    backgroundColor: Colors.lighter,\n  },\n  header: {\n    height: 130,\n    width: '100%',\n    backgroundColor: '#222222',\n    flexDirection: 'row',\n    paddingLeft: 50,\n    alignItems: 'center'\n  },\n  title: {\n    fontSize: 20,\n    fontWeight: 'bold',\n    color: 'white',\n  },\n  logo: {\n    height: 125,\n    width: 200\n  },\n  engine: {\n    position: 'absolute',\n    right: 0\n  },\n  body: {\n    backgroundColor: Colors.white,\n  },\n  sectionContainer: {\n    marginTop: 32,\n    paddingHorizontal: 24,\n  },\n  sectionTitle: {\n    fontSize: 24,\n    fontWeight: '600',\n    color: Colors.black,\n  },\n  sectionDescription: {\n    marginTop: 8,\n    fontSize: 18,\n    fontWeight: '400',\n    color: Colors.dark,\n  },\n  highlight: {\n    fontWeight: '700',\n  },\n  footer: {\n    color: Colors.dark,\n    fontSize: 12,\n    fontWeight: '600',\n    padding: 4,\n    paddingRight: 12,\n    textAlign: 'right',\n  },\n});\n\n"
  },
  {
    "path": "react-native-hms-iap/example/README.md",
    "content": "# React-Native HMS In App Purchase Kit React Native Plugin - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the Huawei React-Native IAP Kit Plugin.\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      minSdkVersion 19\n      <!-- Other configurations ... -->\n  }\n  ```  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n\n### Enabling the Huawei In App Purchase Kit Service \n\n**Step 1:** - To use HUAWEI IAP, you need to enable the IAP service first and also set IAP parameters. For details, please refer to [Enabling Services](https://developer.huawei.com/consumer/en/doc/distribution/app/agc-enable_service?ha_source=hms1#h1-1574822945685).\n\n**Step 2:** Go to **Project Setting > General information** page, under the **App information** field, click **agconnect-services.json** to download the configuration file.\n\n**Step 3:** Copy the **agconnect-services.json** file to the **example/android/app/** directory of the project. \n\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei In App Purchase Kit React Native Plugin - Demo uses the Apache 2.0 license.\n"
  },
  {
    "path": "react-native-hms-iap/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *\n *   //  https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        enableHermes: false\n]\n\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. \n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n    // AGCONNECT\n    implementation \"com.huawei.agconnect:agconnect-core:1.4.2.301\"\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n/** Run this once to be able to run the application with BUCK\n * puts all compile dependencies into folder libs for BUCK to use\n */\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)"
  },
  {
    "path": "react-native-hms-iap/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-iap/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" /> \n    </application>\n</manifest>"
  },
  {
    "path": "react-native-hms-iap/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.iap.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n        android:name=\".MainApplication\"\n        android:allowBackup=\"false\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"RNHmsIapDemo\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:theme=\"@style/AppTheme\">\n        <activity\n            android:name=\".MainActivity\"\n            android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n            android:label=\"RNHmsIapDemo\"\n            android:launchMode=\"singleTask\"\n            android:exported=\"true\"\n            android:screenOrientation=\"portrait\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-iap/example/android/app/src/main/java/com/huawei/hms/rn/iap/demo/MainActivity.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    \n    // Returns the name of the main component registered from JavaScript. This is used to schedule rendering of the component.\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsIapDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-iap/example/android/app/src/main/java/com/huawei/hms/rn/iap/demo/MainApplication.java",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\npackage com.huawei.hms.rn.iap.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n\n\n"
  },
  {
    "path": "react-native-hms-iap/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-iap/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath ('com.huawei.agconnect:agcp:1.9.1.300')\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n    }\n}\n\nallprojects {\n    repositories {\n        \n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-iap/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nnetworkTimeout=10000\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-iap/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m"
  },
  {
    "path": "react-native-hms-iap/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-iap/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-iap/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsIapDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");\napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n\n"
  },
  {
    "path": "react-native-hms-iap/example/app.json",
    "content": "{\n  \"name\": \"RNHmsIapDemo\",\n  \"displayName\": \"RNHmsIapDemo\"\n}"
  },
  {
    "path": "react-native-hms-iap/example/babel.config.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-iap/example/index.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-iap/example/metro.config.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-iap/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-iap-demo\",\n  \"version\": \"6.13.0-302\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-iap\": \"6.13.0-302\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-iap/example/src/HmsIapModule.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n/**\n * This exposes the native HMSInAppPurchases module as a JS module.\n */\nimport { NativeModules } from 'react-native';\nmodule.exports = NativeModules.HMSIapModule;\n"
  },
  {
    "path": "react-native-hms-iap/example/src/foundation/ProductTypes.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\n/**\n * ProductTypes ordered listing of all the use cases of HUAWEI IAP.\n * @type {{NON_CONSUMABLE: number, SUBSCRIPTION: number, CONSUMABLE: number}}\n */\nconst ProductTypes = { CONSUMABLE: 1, NON_CONSUMABLE: 2, SUBSCRIPTION: 3 };\nObject.freeze(ProductTypes);\nexport default ProductTypes;\n"
  },
  {
    "path": "react-native-hms-iap/example/src/foundation/PurchaseTypes.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\n/**\n * PurchaseTypes ordered listing of purchased, available and record of products.\n * @type {{AVAILABLE: string, PURCHASED_RECORD: string, PURCHASED: string}}\n */\nconst PurchaseTypes = {\n  PURCHASED: 'Purchased',\n  AVAILABLE: 'Available',\n  PURCHASED_RECORD: 'Purchase Record',\n};\nObject.freeze(PurchaseTypes);\nexport default PurchaseTypes;"
  },
  {
    "path": "react-native-hms-iap/example/src/ui/AvailableProductsListView.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  StyleSheet,\n  Text,\n  TouchableOpacity,\n  View\n} from 'react-native';\nimport HMSIapModule from '@hmscore/react-native-hms-iap';\nimport GLOBALS from '../utils/Globals';\nimport PurchaseTypes from '../foundation/PurchaseTypes';\nimport ProductTypes from '../foundation/ProductTypes';\nimport Utils from '../utils/Utils';\n\nclass AvailableProductsListView extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      productList: []\n    };\n  }\n\n  async componentDidMount() {\n    if (this.state.productList.length === 0) {\n      try {\n        console.log('call getProducts');\n        const response = await this.getProducts(this.props.productType);\n        console.log('AvailableProductList :: ' + JSON.stringify(response));\n        this.createList(response.productInfoList)\n      } catch (error) {\n        console.log('AvailableProductList fail:: ' + JSON.stringify(error));\n        Utils.logError(JSON.stringify(error));\n      }\n    }\n  }\n\n  async getProducts(productType) {\n    switch (productType) {\n      case ProductTypes.CONSUMABLE:\n        return await HMSIapModule.obtainProductInfo(\n          GLOBALS.CONSUMABLE.PRODUCT_INFO_DATA\n        );\n      case ProductTypes.NON_CONSUMABLE:\n        return await HMSIapModule.obtainProductInfo(\n          GLOBALS.NON_CONSUMABLE.PRODUCT_INFO_DATA\n        );\n      case ProductTypes.SUBSCRIPTION:\n        return await HMSIapModule.obtainProductInfo(\n          GLOBALS.SUBSCRIPTION.PRODUCT_INFO_DATA\n        );\n    }\n  }\n\n  async buyProduct(item) {\n    const productType = this.props.productType;\n    let type;\n    switch (productType) {\n      case ProductTypes.CONSUMABLE:\n        type = HMSIapModule.PRICE_TYPE_IN_APP_CONSUMABLE;\n        break;\n      case ProductTypes.NON_CONSUMABLE:\n        type = HMSIapModule.PRICE_TYPE_IN_APP_NONCONSUMABLE;\n        break;\n      case ProductTypes.SUBSCRIPTION:\n        type = HMSIapModule.PRICE_TYPE_IN_APP_SUBSCRIPTION;\n        break;\n      default:\n        Utils.logError('ProductType must be specified. ');\n        return;\n    }\n\n    const reservedInfo = {\n      \"key1\": \"value1\"\n    }\n    const purchaseData = {\n      priceType: type,\n      productId: item.productId,\n      developerPayload: GLOBALS.DEVELOPER.PAYLOAD,\n      reservedInfor: JSON.stringify(reservedInfo),\n    };\n    try {\n      console.log('call createPurchaseIntent');\n      const response = await HMSIapModule.createPurchaseIntent(purchaseData);\n      console.log('createPurchaseIntent :: ' + JSON.stringify(response));\n      this.responseState(response)\n    } catch (error) {\n      console.log('createPurchaseIntent fail');\n      alert(JSON.stringify(error));\n    }\n  }\n\n  createList(products) {\n    if (products != null) {\n      let list = []\n      for (let i = 0; i < products.length; i++) {\n        let index = i;\n        let item = products[index]\n\n        list.push(\n          <TouchableOpacity\n            key={index}\n            activeOpacity={.7}\n            style={styles.btn}\n            onPress={() => this.buyProduct(item)}>\n            <View style={{ flexDirection: 'row', height: '100%' }}>\n              <View style={styles.info}>\n                <Text ellipsizeMode='tail' numberOfLines={1} style={styles.name}>{item.productName}</Text>\n                <Text style={styles.description}>{item.productDesc}</Text>\n                <Text style={styles.price}>{item.price}</Text>\n              </View>\n              <View style={{ flex: 3 }}>\n                <Text style={styles.basket}>BUY</Text>\n              </View>\n            </View>\n          </TouchableOpacity>\n        )\n      }\n      this.setState({ productList: list })\n      this.props.sizeChange(list.length)\n    }\n  }\n\n  responseState(response) {\n    if (response.errMsg === \"success\" || response.errMsg === \"\") {\n      const res = JSON.stringify(response)\n      this.props.onRefresh(res)\n    } else {\n      alert(JSON.stringify(response.errMsg))\n    }\n  }\n\n  render() {\n    const listHeight = this.state.productList.length * 110\n    return (\n      <View>\n        <Text style={styles.title}>{PurchaseTypes.AVAILABLE}</Text>\n        {this.state.productList.length === 0 ?\n          <Text style={styles.desc}>No available product</Text>\n          :\n          <View style={{ height: listHeight }}>\n            {this.state.productList}\n          </View>\n        }\n      </View>\n    );\n  }\n}\n\nexport default AvailableProductsListView;\n\nconst styles = StyleSheet.create({\n  container: {\n    justifyContent: 'center',\n    alignItems: 'center'\n  },\n  title: {\n    fontSize: 17,\n    marginLeft: 2,\n    marginBottom: 4,\n    color: 'red',\n    fontWeight: 'bold',\n  },\n  description: {\n    fontSize: 14,\n    marginVertical: 2,\n    color: 'gray'\n  },\n  price: {\n    fontSize: 13,\n    fontWeight: 'bold',\n    marginVertical: 2,\n    color: 'white'\n  },\n  btn: {\n    backgroundColor: '#222222',\n    borderColor: 'white',\n    borderWidth: 1,\n    paddingLeft: 15,\n    borderRadius: 5,\n    width: 300,\n    height: 100\n  },\n  name: {\n    fontSize: 16,\n    fontWeight: 'bold',\n    color: 'white',\n    marginTop: 15,\n    maxWidth: 175,\n  },\n  desc: {\n    color: '#222222',\n    fontSize: 13,\n    marginLeft: 8,\n  },\n  info: {\n    flex: 7,\n    borderRightWidth: 1,\n    borderRightColor: 'white',\n    height: '100%'\n  },\n  basket: {\n    marginTop: 35,\n    color: '#47d147',\n    alignSelf: 'center'\n  }\n});\n\n\n"
  },
  {
    "path": "react-native-hms-iap/example/src/ui/PartialView.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport GLOBALS from '../utils/Globals';\nimport ProductTypes from '../foundation/ProductTypes';\nimport TitleView from './TitleView';\nimport PurchasedProductListView from './PurchasedProductListView';\nimport AvailableProductsListView from './AvailableProductsListView';\nimport PurchaseRecordListView from './PurchaseRecordListView';\n\nexport default class PartialView extends React.Component {\n  constructor() {\n    super()\n    this.state = {\n      refresh: false,\n      purchasedProducts: 0,\n      availableProducts: 0,\n      purchaseRecordProducts: 0\n    }\n  }\n\n  back() {\n    let currentRefresh = this.state.refresh\n    this.setState({ refresh: !currentRefresh })\n  }\n\n  sizeChange(size, type) {\n    switch (type) {\n      case 0: {\n        this.setState({ purchasedProducts: size })\n        break;\n      }\n      case 1: {\n        this.setState({ availableProducts: size })\n        break;\n      }\n      case 2: {\n        this.setState({ purchaseRecordProducts: size })\n        break;\n      }\n    }\n  }\n\n\n  getTitle(productType) {\n    switch (productType) {\n      case ProductTypes.CONSUMABLE:\n        return (\n          <TitleView\n            title={GLOBALS.CONSUMABLE.TITLE}\n            subTitle={GLOBALS.CONSUMABLE.SUBTITLE}\n          />\n        );\n      case ProductTypes.NON_CONSUMABLE:\n        return (\n          <TitleView\n            title={GLOBALS.NON_CONSUMABLE.TITLE}\n            subTitle={GLOBALS.NON_CONSUMABLE.SUBTITLE}\n          />\n        );\n      case ProductTypes.SUBSCRIPTION:\n        return (\n          <TitleView\n            title={GLOBALS.SUBSCRIPTION.TITLE}\n            subTitle={GLOBALS.SUBSCRIPTION.SUBTITLE}\n          />\n        );\n    }\n  }\n\n  render() {\n    const type = this.props.productType\n    let totalSize = this.state.availableProducts + this.state.purchaseRecordProducts + this.state.purchasedProducts\n    let height = totalSize * 100 + 100\n    return (\n      <View style={styles.sectionContainer}>\n        {this.getTitle(this.props.productType)}\n\n        <View style={{ height: height }} key={this.state.refresh}>\n          <PurchasedProductListView sizeChange={(size) => this.sizeChange(size, 0)} onRefresh={() => this.back()} productType={type} />\n          <AvailableProductsListView sizeChange={(size) => this.sizeChange(size, 1)} onRefresh={() => this.back()} productType={type} />\n          <PurchaseRecordListView sizeChange={(size) => this.sizeChange(size, 2)} productType={type} />\n        </View>\n\n      </View>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  sectionContainer: {\n    marginTop: 32,\n    paddingHorizontal: 24,\n  }\n});\n"
  },
  {
    "path": "react-native-hms-iap/example/src/ui/PurchaseRecordListView.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  StyleSheet,\n  Text,\n  Image,\n  View\n} from 'react-native';\nimport HMSIapModule from '@hmscore/react-native-hms-iap';\nimport GLOBALS from '../utils/Globals';\nimport PurchaseTypes from '../foundation/PurchaseTypes';\nimport ProductTypes from '../foundation/ProductTypes';\nimport Utils from '../utils/Utils';\n\n\nclass PurchaseRecordListView extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      productList: []\n    };\n  }\n\n  async componentDidMount() {\n    try {\n      console.log('call getPurchaseRecord');\n      const response = await this.getPurchaseRecord();\n      console.log('PurchasedRecordListView :: ' + JSON.stringify(response.inAppPurchaseDataList));\n      this.createList(response.inAppPurchaseDataList)\n    } catch (error) {\n      console.log('PurchaseRecordList fail:: ' + JSON.stringify(error));\n      Utils.logError(JSON.stringify(error));\n    }\n  }\n\n  async getPurchaseRecord() {\n    const productType = this.props.productType\n    switch (productType) {\n      case ProductTypes.CONSUMABLE:\n        return await HMSIapModule.obtainOwnedPurchaseRecord(\n          GLOBALS.CONSUMABLE.OWNED_PURCHASES_DATA,\n        );\n      case ProductTypes.NON_CONSUMABLE:\n        return await HMSIapModule.obtainOwnedPurchaseRecord(\n          GLOBALS.NON_CONSUMABLE.OWNED_PURCHASES_DATA,\n        );\n      case ProductTypes.SUBSCRIPTION:\n        return await HMSIapModule.obtainOwnedPurchaseRecord(\n          GLOBALS.SUBSCRIPTION.OWNED_PURCHASES_DATA,\n        );\n    }\n  }\n\n  createList(products) {\n    if (products != null && products.length > 0) {\n      let list = []\n      for (let i = 0; i < products.length; i++) {\n        let index = i;\n        let item = JSON.parse(products[index])\n        list.push(\n          <View\n            key={index}\n            style={styles.btn}>\n            <View style={styles.info}>\n              <Text numberOfLines={1} style={styles.name}>{item.productName}</Text>\n              <View style={styles.priceContainer}>\n                <Text style={styles.currency}>{item.currency}</Text>\n                <Text style={styles.currency}>{item.price}</Text>\n              </View>\n            </View>\n            <Text style={styles.basket}>Purchased</Text>\n\n          </View>\n        )\n      }\n      this.setState({ productList: list })\n      this.props.sizeChange(list.length)\n    }\n  }\n\n\n  render() {\n    const listHeight = this.state.productList.height\n    return (\n      <View>\n        <Text style={styles.title}>{PurchaseTypes.PURCHASED_RECORD}</Text>\n        {this.state.productList.length === 0 ?\n          <Text style={styles.desc}>No purchased record</Text>\n          :\n          <View style={{ height: listHeight }}>\n            {this.state.productList}\n          </View>\n        }\n      </View>\n    );\n  }\n\n}\n\nexport default PurchaseRecordListView;\n\nconst styles = StyleSheet.create({\n  container: {\n    marginVertical: 8,\n    marginHorizontal: 16,\n  },\n  title: {\n    fontSize: 17,\n    marginLeft: 2,\n    marginBottom: 4,\n    color: 'red',\n    fontWeight: 'bold',\n  },\n  priceContainer: {\n    flexDirection: 'row'\n  },\n  price: {\n    fontSize: 14,\n    fontWeight: 'bold',\n    marginVertical: 2,\n    color: 'white'\n  },\n  currency: {\n    fontSize: 14,\n    color: 'white',\n    marginRight: 5\n  },\n  btn: {\n    flexDirection: 'row',\n    backgroundColor: '#222222',\n    width: 300,\n    height: 100,\n    borderColor: 'white',\n    borderWidth: 1,\n    paddingLeft: 15,\n    borderRadius: 5,\n  },\n  name: {\n    fontSize: 16,\n    fontWeight: 'bold',\n    color: 'white',\n    marginTop: 20,\n  },\n  desc: {\n    color: '#222222',\n    fontSize: 15,\n    marginLeft: 8,\n    marginBottom: 10,\n  },\n  info: {\n    flex: 7,\n    height: '100%'\n  },\n  basket: {\n    color: 'red',\n    width: 30,\n    height: 30,\n    alignSelf: 'center',\n    flex: 3\n  },\n  iconTitle: {\n    marginTop: 15,\n    color: 'white',\n    alignSelf: 'center'\n  }\n});\n\n\n"
  },
  {
    "path": "react-native-hms-iap/example/src/ui/PurchasedProductListView.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  StyleSheet,\n  Text,\n  View,\n  Image,\n  TouchableOpacity\n} from 'react-native';\nimport HMSIapModule from '@hmscore/react-native-hms-iap';\nimport GLOBALS from '../utils/Globals';\nimport PurchaseTypes from '../foundation/PurchaseTypes';\nimport ProductTypes from '../foundation/ProductTypes';\nimport Utils from '../utils/Utils';\n\n\nclass PurchasedProductListView extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      productList: [],\n      text: \"\"\n    };\n  }\n\n  async componentDidMount() {\n    try {\n      console.log('call obtainOwnedPurchases');\n      let response = await this.getPurchases();\n      console.log('obtainOwnedPurchases success:: ' + JSON.stringify(response.inAppPurchaseDataList));\n      this.createList(response.inAppPurchaseDataList)\n    } catch (error) {\n      console.log('obtainOwnedPurchases fail');\n      Utils.logError(JSON.stringify(error));\n    }\n  }\n\n  async getPurchases() {\n    const productType = this.props.productType\n    switch (productType) {\n      case ProductTypes.CONSUMABLE:\n        this.setState({ text: \"USE\" })\n        return await HMSIapModule.obtainOwnedPurchases(\n          GLOBALS.CONSUMABLE.OWNED_PURCHASES_DATA,\n        );\n      case ProductTypes.NON_CONSUMABLE:\n        this.setState({ text: \"NON_CONSUMABLE\" })\n        return await HMSIapModule.obtainOwnedPurchases(\n          GLOBALS.NON_CONSUMABLE.OWNED_PURCHASES_DATA,\n        );\n      case ProductTypes.SUBSCRIPTION:\n        this.setState({ text: \"EDIT SUBSCRIPTION\" })\n        return await HMSIapModule.obtainOwnedPurchases(\n          GLOBALS.SUBSCRIPTION.OWNED_PURCHASES_DATA,\n        );\n    }\n  }\n\n  async consumeProduct(item) {\n    const token = item.purchaseToken\n    if (token === null) {\n      Utils.notifyMessage('Purchase token cannot be null.');\n    } else {\n      try {\n        const consumeOwnedPurchaseData = {\n          developerChallenge: GLOBALS.DEVELOPER.CHALLENGE,\n          purchaseToken: token,\n        };\n        console.log('call consumeOwnedPurchase');\n        const response = await HMSIapModule.consumeOwnedPurchase(consumeOwnedPurchaseData);\n        console.log('consumeOwnedPurchase :: ' + JSON.stringify(response));\n        this.responseState(response)\n      } catch (error) {\n        console.log('consumeOwnedPurchase fail');\n        Utils.logError(JSON.stringify(error));\n      }\n    }\n  }\n\n  async startIapActivity(item) {\n    console.log(item)\n    try {\n      const StartIapActivityReq = {\n        type: HMSIapModule.TYPE_SUBSCRIBE_EDIT_ACTIVITY,\n        subscribeProductId: item.productId\n      };\n      console.log('call startIapActivity');\n      const response = await HMSIapModule.startIapActivity(StartIapActivityReq);\n      console.log('startIapActivity :: ' + JSON.stringify(response));\n      this.responseState(response)\n    } catch (error) {\n      console.log('startIapActivity fail');\n      Utils.logError(JSON.stringify(error));\n    }\n  }\n\n  createList(products) {\n    if (products != null) {\n      let list = []\n      for (let i = 0; i < products.length; i++) {\n        let index = i;\n        let item = JSON.parse(products[index])\n        list.push(\n          <View key={index + \"main\"}>\n            <TouchableOpacity\n              key={index + \"button\"}\n              style={styles.btn}\n              onPress={() => {\n                this.props.productType === ProductTypes.CONSUMABLE && this.consumeProduct(item);\n                this.props.productType === ProductTypes.SUBSCRIPTION && this.startIapActivity(item);\n                this.props.productType === ProductTypes.NON_CONSUMABLE && alert(\"Product cannot be consumed\");\n              }}>\n              <View style={{ flexDirection: 'row', height: '100%' }}>\n                <View style={styles.info}>\n                  <Text numberOfLines={1} style={styles.name}>{item.productName}</Text>\n                  <View style={styles.priceContainer}>\n                    <Text style={styles.currency}>{item.currency}</Text>\n                    <Text style={styles.currency}>{item.price}</Text>\n                  </View>\n                </View>\n                <View style={{ flex: 3 }}>\n                  <Text style={styles.iconTitle}>{this.state.text}</Text>\n                </View>\n              </View>\n            </TouchableOpacity>\n\n          </View>\n        )\n      }\n      this.setState({ productList: list })\n      this.props.sizeChange(list.length)\n    }\n  }\n\n  responseState(response) {\n    if (response.errMsg === \"success\") {\n      const res = JSON.stringify(response)\n      this.props.onRefresh(res)\n    }\n    else if (response.errMsg) {\n      alert(response.errMsg)\n    } else {\n      alert(\"Error!\")\n    }\n  }\n\n  render() {\n    let listHeight = this.state.productList.length * 110\n    return (\n      <View>\n        <Text style={styles.title}>{PurchaseTypes.PURCHASED}</Text>\n        {this.state.productList.length === 0 ?\n          <Text style={styles.desc}>No product</Text>\n          :\n          <View style={{ height: listHeight }}>\n            {this.state.productList}\n          </View>\n        }\n      </View>\n    );\n  }\n}\n\nexport default PurchasedProductListView;\n\nconst styles = StyleSheet.create({\n  container: {\n    padding: 20,\n    marginVertical: 8,\n    marginHorizontal: 16,\n  },\n  title: {\n    fontSize: 17,\n    marginLeft: 2,\n    color: 'red',\n    fontWeight: 'bold',\n  },\n  currency: {\n    fontSize: 13,\n    justifyContent: 'center',\n    marginVertical: 2,\n    textAlign: 'center',\n    color: 'white',\n    marginRight: 5\n  },\n  priceContainer: {\n    flexDirection: 'row'\n  },\n  name: {\n    fontSize: 16,\n    fontWeight: 'bold',\n    color: 'white',\n    marginTop: 20,\n    maxWidth: 175\n  },\n  desc: {\n    color: '#222222',\n    fontSize: 13,\n    marginLeft: 8,\n    marginBottom: 10\n  },\n  btn: {\n    backgroundColor: '#222222',\n    width: 300,\n    height: 100,\n    borderColor: 'white',\n    borderWidth: 1,\n    paddingLeft: 15,\n    borderRadius: 5\n  },\n  info: {\n    flex: 7,\n    borderRightWidth: 1,\n    borderRightColor: 'white',\n    height: '100%'\n  },\n  basket: {\n    width: 30,\n    height: 30,\n    marginTop: 10,\n    alignSelf: 'center'\n  },\n  iconTitle: {\n    marginTop: 35,\n    color: '#FBCA00',\n    alignSelf: 'center'\n  }\n});\n"
  },
  {
    "path": "react-native-hms-iap/example/src/ui/TitleView.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\n\nconst TitleView = ({ title, subTitle }) => {\n  return (\n    <View>\n      <Text style={styles.title}>{title}</Text>\n      <Text>{subTitle}</Text>\n      <View style={styles.separator} />\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  title: {\n    textAlign: 'left',\n    fontSize: 30,\n    marginVertical: 8,\n  },\n  subTitle: {\n    textAlign: 'center',\n    fontSize: 15,\n    marginVertical: 8,\n  },\n  separator: {\n    marginVertical: 8,\n    borderBottomColor: '#737373',\n    borderBottomWidth: StyleSheet.hairlineWidth,\n  },\n});\n\nexport default TitleView;\n"
  },
  {
    "path": "react-native-hms-iap/example/src/utils/Globals.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n*/\n\nimport HMSIapModule from '@hmscore/react-native-hms-iap';\n\nexport default {\n  DEVELOPER: {\n    PAYLOAD: 'testPurchase',\n    CHALLENGE: 'developerChallenge',\n  },\n  CONSUMABLE: {\n    TITLE: 'Consumables',\n    SUBTITLE:\n      'Consumables are used once, are depleted, and can be purchased again. For example, extra lives and gems in a game.',\n    PRODUCT_INFO_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_CONSUMABLE,\n      skuIds: [\"YOUR_SKU_ID\"],\n    },\n    OWNED_PURCHASES_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_CONSUMABLE,\n    },\n  },\n  NON_CONSUMABLE: {\n    TITLE: 'Non-consumables',\n    SUBTITLE:\n      'Non-consumables are purchased once and do not expire. For example, extra game levels in a game or permanent membership of an app.',\n    PRODUCT_INFO_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_NONCONSUMABLE,\n      skuIds: [\"YOUR_SKU_ID\"],\n    },\n    OWNED_PURCHASES_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_NONCONSUMABLE,\n    },\n  },\n  SUBSCRIPTION: {\n    TITLE: 'Subscriptions',\n    SUBTITLE:\n      'Users can purchase access to value-added functions or content in a specified period of time. The subscriptions are automatically renewed on a recurring basis until users decide to cancel. For example, non-permanent membership of an app, such as a monthly video membership.',\n    PRODUCT_INFO_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_SUBSCRIPTION,\n      skuIds: [\"YOUR_SKU_ID\"],\n    },\n    OWNED_PURCHASES_DATA: {\n      priceType: HMSIapModule.PRICE_TYPE_IN_APP_SUBSCRIPTION,\n    },\n  },\n  COLORS: {\n    PRIMARY_COLOR: '#ADD8E6',\n    WHITE: '#FFFFFF',\n  },\n};\n"
  },
  {
    "path": "react-native-hms-iap/example/src/utils/Utils.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\nimport { Platform, ToastAndroid } from 'react-native';\n\nexport default class Utils {\n  static notifyMessage(message) {\n    if (Platform.OS === 'android') {\n      ToastAndroid.show(message, ToastAndroid.SHORT);\n    }\n  }\n  static logError(error) {\n    console.error(JSON.stringify(error));\n  }\n}\n"
  },
  {
    "path": "react-native-hms-iap/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-iap\",\n  \"title\": \"React Native Hms IAP\",\n  \"description\": \"React Native Hms IAP Kit\",\n  \"version\": \"6.13.0-302\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-iap\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"hms-iap\",\n    \"huawei-iap\",\n    \"in-app-purchase\",\n    \"react-native-hms-iap\"\n  ],\n  \"files\": [\n    \".docs\",\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\":  \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-iap/src/index.d.ts",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-iap\" {\n\n    /**\n     * Status object that contains the task processing result. status object can be seen only user have already signed-in HUAWEI ID.\n     */\n    interface Status { \n\n         /**\n         * Status code. 0: success, 1: failure, 404: no resource found, 500: internal error\n         */\n        statusCode: string;\n\n         /**\n         * Status description.\n         */\n        statusMessage : string;\n    }\n\n     /**\n     * Information returned when the isSandboxActivated API is successfully called.\n     */\n    interface IsSandboxActivatedResult {\n\n         /**\n         * Result code description.\n         */\n        errMsg : string;\n\n        /**\n         * \tIndicates whether the APK version meets the requirements of the sandbox testing.\n         */\n        isSandboxApk : boolean;\n\n        /**\n         * \tIndicates whether a sandbox testing ID is used.\n         */\n        isSandboxUser : boolean;\n\n        /**\n         * Result code. 0: success\n         */\n        returnCode : number;\n\n        /**\n         * Information about the app version that is last released on HUAWEI AppGallery.\n         */\n        versionFrMarket : string;\n\n        /**\n         * App version information.\n         */\n        versionInApk : string;\n\n        /**\n         * Status object that contains the task processing result.\n         */\n        status : Status;\n    }\n\n    /**\n     * Information returned when the isEnvironmentReady API is successfully called.\n    */\n    interface IsEnvReadyResult { \n\n        /**\n         * Result code. 0: The country or region of the signed-in HUAWEI ID supports HUAWEI IAP.\n         */\n        returnCode : number;\n\n        /**\n         * Status object that contains the task processing result. status object can be seen only user have already signed-in HUAWEI ID.\n         */\n        status : Status;\n\n        /**\n         * \tAccount type. 1: AppTouch user account. Other values: Huawei account\n         */\n        accountFlag : number;\n\n        /**\n         * The carrier ID.\n         */\n        carrierId : string;\n\n        /**\n         * The code of the country or region where the currently signed-in account is located.\n         */\n        country : string;\n    }\n\n    /**\n     * Request information of the obtainProductInfo API.\n     */\n    interface ProductInfoReq{\n\n        /**\n        * \tType of a product to be queried. 0: consumable, 1: non-consumable, 2: auto-renewable subscription\n        */\n        priceType: number;\n\n        /**\n        * ID array of products to be queried. Each product ID must exist and be unique in the current app. The product ID is the same as that you set when configuring product information in AppGallery Connect.\n        */\n        skuIds : string;\n    }\n\n    /**\n     * Request information of the createPurchaseIntent API.\n     */\n    interface PurchaseIntentReq{\n\n        /**\n         * Product type. 0: consumable, 1: non-consumable, 2: auto-renewable subscription\n         */\n        priceType: number;\n\n         /**\n         * \tID of a product to be paid. The product ID is the same as that you set when configuring product information in AppGallery Connect.\n         */\n        productId: string;\n\n         /**\n         * Information stored on the merchant side. If the parameter is set to a value, the value will be returned in the callback result to the app after successful payment.\n         * Note: The value length of this parameter is within (0, 128).\n         */\n        developerPayload: string;\n\n         /**\n         * Obtains extended fields.\n         */\n        reservedInfor: string;\n\n         /**\n         * Signature algorithm, which is optional. If a signature algorithm is passed, IAP will use it to sign consumption result data.\n         * Currently, the value can only be SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS, which indicates the SHA256WithRSA/PSS algorithm.\n         */\n        signatureAlgorithm: string;\n    }\n\n    /**\n     * Request information of the obtainOwnedPurchases or obtainOwnedPurchaseRecord API.\n     */\n    interface OwnedPurchasesReq{\n\n        /**\n         * Type of a product to be queried. 0: consumable, 1: non-consumable, 2: auto-renewable subscription.\n         */\n        priceType: number;\n\n        /**\n         * Data location flag for query in pagination mode.\n         * This parameter is optional for the first query. After the API is called, the returned information contains this parameter.\n         * If query in pagination mode is required for the next API call, this parameter can be set for the second query.\n         */\n        continuationToken: string;\n\n        /**\n         * Signature algorithm, which is optional. If a signature algorithm is passed, IAP will use it to sign consumption result data.\n         * Currently, the value can only be SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS, which indicates the SHA256WithRSA/PSS algorithm.\n         */\n        signatureAlgorithm: string;\n    }\n\n    /**\n     * Request information of the consumeOwnedPurchase API.\n     */\n    interface ConsumeOwnedPurchaseReq{\n\n        /**\n         * Purchase token, which is generated by the Huawei IAP server during payment and returned to the app through InAppPurchaseData.\n         *  The app passes this parameter for the Huawei IAP server to update the order status and then deliver the product.\n         */\n        purchaseToken: string;\n\n        /**\n         * Custom challenge, which uniquely identifies a consumption request.\n         *  After the consumption is successful, the challenge is recorded in the purchase information and returned.\n         */\n        developerChallenge: string;\n\n        /**\n         * Signature algorithm, which is optional. If a signature algorithm is passed, IAP will use it to sign consumption result data.\n         * Currently, the value can only be SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS, which indicates the SHA256WithRSA/PSS algorithm.\n         */\n        signatureAlgorithm: string;\n    }\n\n\n    /**\n     * Information returned when the obtainOwnedPurchases or obtainOwnedPurchaseRecord API is successfully called.\n     */\n    interface OwnedPurchasesResult {\n\n        /**\n         * \tData location flag.\n         * If a user has a large number of products and the response contains continuationToken, the app must initiate another call on the current method and pass continuationToken currently received. \n         * If product query is still incomplete, the app needs to call the API again until no continuationToken is returned, indicating that all products are returned.\n         */\n        continuationToken: string;\n\n        /**\n         * Result code description.\n         */\n        errMsg: string;\n\n        /**\n         * Information about products that have been purchased but not consumed or about all existing subscription relationships of users, which is returned using the obtainOwnedPurchases method.\n         * Historical consumable information or all subscription receipts, which are returned using the obtainOwnedPurchaseRecord method.\n         */\n        inAppPurchaseDataList: InAppPurchaseData[];\n\n        /**\n         * Signature string of each subscription relationship in the InAppPurchaseDataList array.\n         */\n        inAppSignature: string;\n\n        /**\n         * ID list of found products. The value is a string array.\n         */\n        itemList: string;\n\n        /**\n         * Result code.0: The query is successful.\n         */\n        returnCode: number;\n\n        /**\n         * Status object that contains the task processing result.\n         */\n        status: Status;\n\n        /**\n         * Subscription relationship information about a user who has performed subscription switchover. The value is a JSON string array.\n         * For details about the parameters contained in each JSON string, please refer to InAppPurchaseData.\n         */\n        placedInappPurchaseDataList: string;\n\n        /**\n         * Signature string of each subscription relationship in the PlacedInappPurchaseDataList list.\n         */\n        placedInappSignatureList: string;\n\n        /**\n         * \tSignature algorithm.\n         */\n        signatureAlgorithm: string;\n    }\n\n    interface StartIapActivityReq {\n\n        /**\n         * Type of the screen to be redirected to.\n         *   2: subscription management screen\n         *   3: subscription editing screen\n         */\n        type : 2|3;\n\n        /**\n         * ID of a subscription.\n         */\n        subscribeProductId: string;\n    }\n\n    interface ConsumePurchaseData{\n\n        /**\n         * ID of an app that initiates a purchase.\n         */\n        applicationId: number ;\n\n        /**\n         * Indicates whether the subscription is automatically renewed. Currently, the value is always false.\n         */\n        autoRenewing: boolean;\n\n        /**\n         * Confirmation.\n         */\n        confirmed: number;\n\n        /**\n         * \tOrder ID on the Huawei IAP server, which uniquely identifies a transaction and is generated by the Huawei IAP server during payment.\n         */\n        orderId: string;\n\n        /**\n         * Product type.\n         *  0: consumable\n         *  1: non-consumable\n         *  2: renewable subscription\n         *  3: non-renewable subscription\n         */\n        kind: number;\n\n        /**\n         * Software package name of the app that initiates a purchase.\n         */\n        packageName: string;\n\n         /**\n         * Merchant ID, which uniquely identifies a transaction and is generated by the Huawei IAP server during payment.\n         */\n        payOrderId: string;\n\n         /**\n         * Payment method.\n         *   0: HUAWEI Points\n         *   3: credit card\n         *   4: Alipay\n         *   6: carrier billing\n         *   13: PayPal\n         *   16: debit card\n         *   17: WeChat Pay\n         *   19: gift card\n         *   20: balance\n         *   21: HUAWEI Point card\n         *   24: WorldPay\n         *   31: HUAWEI Pay\n         *   32: Ant Credit Pay\n         *   200: M-Pesa\n         */\n        payType: string;\n\n         /**\n         * Product ID.\n         */\n        productId: string;\n\n         /**\n         * Product name.\n         */\n        productName: string;\n\n         /**\n         * Purchase timestamp from 00:00:00 on January 1, 1970 to the purchase time, in millionseconds.\n         */\n        purchaseTime: number;\n\n         /**\n         * Purchase time.\n         */\n        purchaseTimeMillis: number;\n\n         /**\n         * Purchase type.\n         *   0: purchase during sandbox testing\n         *   1: purchase during the promotion period (currently unsupported)\n         *   This parameter is not returned during formal purchase.\n         */\n        purchaseType: number;\n\n         /**\n         * Order status.\n         *   -1: initialized and invisible\n         *   0: purchased\n         *   1: canceled\n         *   2: refunded\n         */\n        purchaseState: number;\n\n         /**\n         * Reserved information on the merchant side, which is passed by the app during payment.\n         */\n        developerPayload: string;\n\n         /**\n         * Purchase token, which uniquely identifies the mapping between a product and a user. \n         * It is generated by the Huawei IAP server when the payment is complete.\n         */\n        purchaseToken: string;\n\n         /**\n         * Challenge defined when the app initiates a consumption request, which uniquely identifies a consumption request.\n         */\n        developerChallenge: string;\n\n         /**\n         * Consumption status.\n         *   0: not consumed\n         *   1: consumed\n         */\n        consumptionState: number;\n\n         /**\n         * Receiving status.\n         *   0: not received\n         *   1: received\n         *   This parameter is valid only for receiving APIs.\n         *   The value is always 0. You can ignore this parameter.\n         */\n        acknowledged: number;\n\n         /**\n         * Currency. The value must be a currency defined in the ISO 4217 standard, for example: USD, CNY, and TRY.\n         */\n        currency: string;\n\n         /**\n         * Value after the actual price of a product is multiplied by 100. The actual price is accurate to two decimal places. For example, if the value of this parameter is 501, the actual product price is 5.01.\n         */\n        price: number;\n\n         /**\n         * Country or region code of a user service area. The value must comply with the ISO 3166 standard, for example: US, CN, and TR.\n         */\n        country: string;\n\n         /**\n         * Response code.\n         *   0: The execution is successful.\n         */\n        responseCode: string;\n\n         /**\n         * Response information.\n         */\n        responseMessage: string;\n    }\n\n    interface ConsumeOwnedPurchaseResult{\n\n        /**\n         * ConsumePurchaseData object that contains consumption result data.\n         */\n        consumePurchaseData: ConsumePurchaseData; \n\n        /**\n         * Signature string generated after consumption data is signed using a private payment key. The signature algorithm is SHA256withRSA.\n         */\n        dataSignature: string;\n\n        /**\n         * Result code description.\n         */\n        errMsg: string;\n\n        /**\n         * \tResult code.\n         */\n        returnCode: number;\n\n        /**\n         * Status object that contains the task processing result.\n         */\n        status: Status;\n\n        /**\n         * Signature algorithm.\n         */\n        signatureAlgorithm: string;\n    }\n\n    interface InAppPurchaseData{\n\n        /**\n         * ID of an app that initiates a purchase.\n         */\n        applicationId:  number;\n\n         /**\n         * \tIndicates whether the subscription is automatically renewed. Currently, the value is always false.\n         */\n        autoRenewing: boolean;\n\n         /**\n         * Order ID on the Huawei IAP server, which uniquely identifies a transaction and is generated by the Huawei IAP server during payment.\n         */\n        orderId: string;\n\n         /**\n         * Software package name of the app that initiates a purchase.\n         */\n        packageName: string;\n\n         /**\n         * Product ID.\n         */\n        productId: string;\n\n         /**\n         * Product name.\n         */\n        productName: string;\n\n         /**\n         * Purchase timestamp, which is the number of milliseconds from 00:00:00 on January 1, 1970 to the purchase time.\n         */\n        purchaseTime: number;\n\n         /**\n         * Order status.\n         *   -1: initialized and invisible\n         *   0: purchased\n         *   1: canceled\n         *   2: refunded\n         */\n        purchaseState: number;\n\n         /**\n         * Reserved information on the merchant side, which is passed by the app during payment.\n         */\n        developerPayload: string;\n\n         /**\n         * Reserved information on the merchant side, which is passed by the app during payment.\n         */\n        purchaseToken: string;\n\n         /**\n         *  Purchase type.\n         *   0: in the sandbox\n         *   1: in the promotion period (currently unsupported). This parameter is not returned during formal purchase.\n         */\n        purchaseType: number;\n\n         /**\n         * Currency. The value must be a currency defined in the ISO 4217 standard. Example: USD, CNY, and TRY\n         */\n        currency: string;\n\n         /**\n         * Value after the actual price of a product is multiplied by 100. The actual price is accurate to two decimal places. \n         * For example, if the value of this parameter is 501, the actual product price is 5.01.\n         */\n        price: number;\n\n         /**\n         * Country or region code of a user service area. The value must comply with the ISO 3166 standard. Example: US, CN, and TR\n         */\n        country: string;\n\n         /**\n         * Order ID generated by the Huawei IAP server during fee deduction on the previous renewal.\n         */\n        lastOrderId: string;\n\n         /**\n         * ID of the subscription group to which a subscription belongs.\n         */\n        productGroup: string;\n\n         /**\n         * First fee deduction timestamp, which is the number of milliseconds since 00:00:00 on January 1, 1970.\n         */\n        oriPurchaseTime: number;\n\n         /**\n         * Subscription ID.\n         */\n        subscriptionId: string;\n\n         /**\n         * Purchase quantity.\n         */\n        quantity: number;\n\n         /**\n         * Days of a paid subscription, excluding the free trial period and promotion period.\n         */\n        daysLasted: number;\n\n         /**\n         * Days of a paid subscription, excluding the free trial period and promotion period.\n         */\n        numOfPeriods: number;\n\n         /**\n         * Number of successful renewal periods with promotion.\n         */\n        numOfDiscounts: number;\n\n         /**\n         * Subscription expiration timestamp. For an automatic renewal receipt where the fee has been deducted successfully, this parameter indicates the renewal date or expiration date.\n         *  If the value is a past time for the latest receipt of a product, the subscription has expired.\n         */\n        expirationDate: number;\n\n         /**\n         * A timestamp when a grace period ends.\n         */\n        graceExpirationTime: number;\n\n         /**\n         * Reason why a subscription expires.\n         *   1: canceled by a user\n         *   2: product being unavailable\n         *   3: abnormal user signing information\n         *   4: billing error\n         *   5: price increase disagreed with by a user\n         *   6: unknown error\n         */\n        expirationIntent: number;\n\n         /**\n         * Indicates whether the system still tries to renew an expired subscription.\n         */\n        retryFlag: number;\n\n         /**\n         * Indicates whether a subscription is in the renewal period with promotion.\n         */\n        introductoryFlag: number;\n\n         /**\n         * Indicates whether a subscription is in the free trial period.\n         */\n        trialFlag: number;\n\n         /**\n         * Subscription cancellation timestamp. \n         * This parameter has a value when a user makes a complaint and cancels a subscription through the customer service, or when a user performs subscription upgrade or cross-grade that immediately takes effect and cancels the previous receipt of the original subscription.\n         */\n        cancelTime: number;\n\n         /**\n         * Reason why a subscription is canceled.\n         *   0: others. For example, a user mistakenly purchases a subscription and has to cancel it.\n         *   1: A user encounters a problem within the app and cancels the subscription.\n         *   2: A user performs subscription upgrade or cross-grade.\n         */\n        cancelReason: number;\n\n         /**\n         * App information, which is reserved.\n         */\n        appInfo: string;\n\n         /**\n         * Indicates whether a user has disabled the subscription notification function.\n         */\n        notifyClosed: number;\n\n         /**\n         * Renewal status.\n         *   1: The subscription renewal is normal.\n         *   0: The user cancels subscription renewal.\n         */\n        renewStatus: number;\n\n         /**\n         * User opinion on the price increase of a product.\n         *   1: The user has agreed to the price increase.\n         *   0: The user does not take any action. After the subscription expires, it becomes invalid.\n         */\n        priceConsentStatus: number;\n\n         /**\n         * Renewal price. It is provided as a reference for users when the getPriceConsentStatus() parameter is returned.\n         */\n        renewPrice: number;\n\n         /**\n         * true: A user has been charged for an in-app product, the in-app product has not expired, and no refund has been made. In this case, you can provide services for the user.\n         * false: The purchase of a product is not finished, the product has expired, or a refund has been made for the product after the subscription is valid.\n         */\n        subIsvalid: boolean;\n\n         /**\n         * Number of days for retaining a subscription relationship after the subscription is canceled.\n         */\n        cancelledSubKeepDays: number;\n\n         /**\n         * Product type.\n         *   0: consumable\n         *   1: non-consumable\n         *   2: renewable subscription\n         *   3: non-renewable subscription\n         */\n        kind: number;\n\n         /**\n         * Challenge defined when the app initiates a consumption request, which uniquely identifies a consumption request.\n         *  This parameter is valid only for one-off products.\n         */\n        developerChallenge: string;\n\n         /**\n         * Consumption status, which is valid only for one-off products.\n         * 0: not consumed\n         * 1: consumed\n         */\n        consumptionState: number;\n\n         /**\n         * Merchant ID, which uniquely identifies a transaction and is generated by the Huawei IAP server during payment.\n         */\n        payOrderId: string;\n\n         /**\n         * Payment method.\n         *       0: HUAWEI Points\n         *       3: credit card\n         *       4: Alipay\n         *       6: carrier billing\n         *       13: PayPal\n         *       16: debit card\n         *       17: WeChat Pay\n         *       19: gift card\n         *       20: balance\n         *       21: HUAWEI Point card\n         *       24: WorldPay\n         *       31: HUAWEI Pay\n         *       32: Ant Credit Pay\n         *       200: M-Pesa\n         */\n        payType: string;\n\n         /**\n         * Indicates whether to postpone the settlement date. The value 1 indicates that the settlement date is postponed.\n         */\n        deferFlag: number;\n\n         /**\n         * Original subscription ID. If the parameter is set to a value, the current subscription is switched from another one. \n         * The value can be associated with the original subscription.\n         */\n        oriSubscriptionId: string;\n\n         /**\n         * Subscription cancellation initiator.\n         *   0: user\n         *   1: developer\n         *   2: Huawei\n         */\n        cancelWay: number;\n\n         /**\n         * Subscription cancellation time in UTC.\n         */\n        cancellationTime: number;\n\n         /**\n         * Time when a subscription is resumed.\n         */\n        resumeTime: number;\n\n         /**\n         * Account type.\n         *   1: AppTouch ID\n         *   Other values: HUAWEI ID\n         */\n        accountFlag: number;\n    }\n\n    interface PurchaseResultInfo{\n\n        /**\n         * Result code.\n         * 0: The payment is successful.\n         * Other values: The payment failed. For details about the result codes, please refer to Troubleshooting and Common Result Codes.\n         */\n        returnCode: number;\n\n        /**\n         * InAppPurchaseData object that contains purchase order details.\n         * For details about the parameters contained in the string, please refer to InAppPurchaseData.\n         */\n        inAppPurchaseData:  InAppPurchaseData;\n\n        /**\n         * Signature string generated after purchase data is signed using a private payment key. The signature algorithm is SHA256withRSA. \n         * After the payment is successful, the app needs to perform signature verification on the string of InAppPurchaseData using the payment public key.\n         */\n        inAppDataSignature:  string;\n\n        /**\n         * Result code description.\n         */\n        errMsg:  string;\n\n        /**\n         * Signature algorithm.\n         */\n        signatureAlgorithm:  string;\n    }\n\n    interface ProductInfo{\n\n        /**\n         * Product ID.\n         */\n        productId : string;\n\n        /**\n         * Product type.\n         *   0: consumable\n         *   1: non-consumable\n         *   2: auto-renewable subscription\n         */\n        priceType: number;\n\n        /**\n         * Displayed price of a product, including the currency symbol and actual price of the product. \n         * The value is in the Currency symbolPrice format, for example, ¥0.15. The price includes the tax.\n         */\n        price: string;\n\n        /**\n         * Product price in micro unit, which equals to the actual product price multiplied by 1,000,000.\n         * For example, if the actual price of a product is US$1.99, the product price in micro unit is 1,990,000 (1.99 x 1,000,000).\n         */\n        microsPrice: number;\n\n        /**\n         * Original price of a product, including the currency symbol and actual price of the product. \n         * The value is in the Currency symbolPrice format, for example, ¥0.15. The price includes the tax.\n         */\n        originalLocalPrice: string;\n\n        /**\n         * Original price of a product in micro unit, which equals to the original product price multiplied by 1,000,000.\n         */\n        originalMicroPrice: number;\n\n        /**\n         * Currency used to pay for a product. The value must comply with the ISO 4217 standard.\n         */\n        currency: string;\n\n        /**\n         * Product name, which is set during product information configuration.\n         */\n        productName: string;\n\n        /**\n         * Description of a product, which is set during product information configuration.\n         */\n        productDesc: string;\n\n        /**\n         * Promotional subscription price in micro unit, which equals to the actual promotional subscription price multiplied by 1,000,000.\n         */\n        subSpecialPriceMicros : number; \n\n        /**\n         * Number of promotion periods of a subscription. \n         */\n        subSpecialPeriodCycles: number;\n\n        /**\n         * Level of a subscription in its subscription group.\n         */\n        subProductLevel: number;\n\n        /**\n         * Product status.\n         * 0: valid.\n         * 1: deleted. Products in this state cannot be renewed or subscribed to.\n         * 6: removed. New subscriptions are not allowed, but users who have subscribed to products can still renew them.\n         */\n        status: number;\n\n        /**\n         * Checks whether a user has enjoyed a promotion in a subscription group.\n         */\n        offerUsedStatus: number;\n\n        /**\n         * Free trial period of a subscription. It is set when you set the promotional price of a subscription in AppGallery Connect.\n         */\n        subFreeTrialPeriod: string;\n\n        /**\n         * ID of the subscription group to which a subscription belongs.\n         */\n        subGroupId: string;\n\n        /**\n         * Description of the subscription group to which a subscription belongs.\n         */\n        subGroupTitle: string;\n\n        /**\n         * Promotion period unit of a subscription, which complies with the ISO 8601 standard.\n         */\n        subSpecialPeriod: string;\n\n        /**\n         * Unit of a subscription period, which complies with the ISO 8601 standard.\n         */\n        subPeriod: string;\n\n        /**\n         * Promotional price of a subscription, including the currency symbol and actual price.\n         */\n        subSpecialPrice: string;\n    }\n\n    interface ProductInfoResult{\n\n        /**\n         * Result code description.\n         */\n        errMsg: string;\n\n        /**\n         * Array of found products.\n         */\n        productInfoList: ProductInfo[];\n\n        /**\n         * Result code.\n         * 0: The query is successful.\n         */\n        returnCode: number;\n\n        /**\n         * Status object that contains the task processing result.\n         */\n        status: Status;\n\n        /**\n         * Obtains extended fields.\n         */\n        ReservedInfor:string;\n    }\n\n    export abstract class HmsIapModuleEnum {\n\n        /**\n         * Success.\n         */\n        static readonly ORDER_STATE_SUCCESS = 0; \n        \n        /**\n         * Common failure result code.\n         */\n        static readonly ORDER_STATE_FAILED = -1;  \n        \n        /**\n         * Default Code.\n         */\n        static readonly ORDER_STATE_DEFAULT_CODE = 1;   \n        \n        /**\n         * The payment is canceled by the user.\n         */\n        static readonly ORDER_STATE_CANCEL = 60000; \n        \n        /**\n         * Parameter error (including no parameter).\n         */\n        static readonly ORDER_STATE_PARAM_ERROR = 60001;   \n        \n        /**\n         * IAP could not be activated.\n         */\n        static readonly ORDER_STATE_IAP_NOT_ACTIVATED = 60002;  \n        \n        /**\n         * Incorrect product information.\n         */\n        static readonly ORDER_STATE_PRODUCT_INVALID = 60003;  \n        \n        /**\n         * Too frequent API calls.\n         */\n        static readonly ORDER_STATE_CALLS_FREQUENT = 60004; \n        \n        /**\n         * Network connection exception.\n         */\n        static readonly ORDER_STATE_NET_ERROR = 60005;    \n        \n        /**\n         * The found product type is inconsistent with that defined in the PMS\n         */\n        static readonly ORDER_STATE_PMS_TYPE_NOT_MATCH = 60006; \n        \n        /**\n         * The app to which the product belongs is not released in a specified location.\n         */\n        static readonly ORDER_STATE_PRODUCT_COUNTRY_NOT_SUPPORTED = 60007; \n        \n        /**\n         * The VR APK is not installed.\n         */\n        static readonly ORDER_VR_UNINSTALL_ERROR = 60020;  \n        \n        /**\n         * The user does not sign in using a HUAWEI ID.\n         */\n        static readonly ORDER_HWID_NOT_LOGIN = 60050;    \n        \n        /**\n         * The user failed to purchase a product because the user already owns the product.\n         */\n        static readonly ORDER_PRODUCT_OWNED = 60051; \n        \n        /**\n         *  The user failed to consume a product because the user does not own the product.\n         */\n        static readonly ORDER_PRODUCT_NOT_OWNED = 60052;  \n        \n        /**\n         * The product has been consumed and cannot be consumed again.\n         */\n        static readonly ORDER_PRODUCT_CONSUMED = 60053;   \n        \n        /**\n         * The country or region of the signed-in HUAWEI ID does not support HUAWEI IAP.\n         */\n        static readonly ORDER_ACCOUNT_AREA_NOT_SUPPORTED = 60054;    \n        \n        /**\n         * The user does not agree to the payment agreement.\n         */\n        static readonly ORDER_NOT_ACCEPT_AGREEMENT = 60055;   \n        \n        /**\n         * The user triggers risk control, and the transaction is rejected.\n         */\n        static readonly ORDER_HIGH_RISK_OPERATIONS = 60056;\n        \n        /**\n         * This result code is returned only when the pending purchase function is used.\n         */\n        static readonly ORDER_STATE_PENDING = 60057;\n\n        /**\n         * Your app is redirected to the subscription management screen of HUAWEI IAP.\n         */\n        static readonly TYPE_SUBSCRIBE_MANAGER_ACTIVITY = 2;\n\n        /**\n         * Your app is redirected to the subscription editing screen of HUAWEI IAP.\n         */\n        static readonly TYPE_SUBSCRIBE_EDIT_ACTIVITY = 3;\n\n\n        /**\n         * SHA256WITHRSAPSS\n         */\n        static readonly SIGNATURE_ALGORITHM_SHA256WITHRSA_PSS = \"SHA256WithRSA/PSS\";\n\n\n        /**\n         * Not present.\n         */\n        static readonly PURCHASE_DATA_NOT_PRESENT = -2147483648;\n\n        /**\n         * Initialized.\n         */\n        static readonly PURCHASE_STATE_INITIALIZED = -2147483648;\n\n        /**\n         * Purchased.\n         */\n        static readonly PURCHASE_STATE_PURCHASED = 0;\n\n        /**\n         * Canceled.\n         */\n        static readonly PURCHASE_STATE_CANCELED = 1;\n\n        /**\n         * Refunded.\n         */\n        static readonly PURCHASE_STATE_REFUNDED = 2;\n\n        /**\n         * Pending.\n         */\n        static readonly PURCHASE_STATE_PENDING = 3;\n\n        /**\n         * Consumable.\n         */\n        static readonly PRICE_TYPE_IN_APP_CONSUMABLE = 0;\n\n        /**\n         * Non-consumable.\n         */\n        static readonly PRICE_TYPE_IN_APP_NONCONSUMABLE = 1;\n\n        /**\n         * Subscription.\n         */\n        static readonly PRICE_TYPE_IN_APP_SUBSCRIPTION = 2;\n      }\n    export default class HMSIapModule extends HmsIapModuleEnum{\n        /**\n         * Enables HMS Plugin Method Analytics.\n         */\n        static enableLogger():Promise <Boolean>;\n\n        /**\n         * Disables HMS Plugin Method Analytics.\n         */\n        static disableLogger():Promise <Boolean>;\n\n        /**\n         * Returns a response which indicates user's account capabilities of sandbox testing.\n         */\n        static isSandboxActivated():Promise <IsSandboxActivatedResult>;\n        \n        /**\n         * Enables pending purchase.\n         */\n        static enablePendingPurchase():Promise <Boolean>;\n        \n        /**\n         * Returns a response which indicates user's environment status.\n         */\n        static isEnvironmentReady(isSupportAppTouch:boolean):Promise <IsEnvReadyResult>;\n        \n        /**\n         * Returns an array of product information.\n         */\n        static obtainProductInfo(productInfoReq: ProductInfoReq):Promise <ProductInfoResult>;\n        \n        /**\n         * Starts an activity to buy the desired product or subscribe a product.\n         */\n        static createPurchaseIntent(purchaseIntentReq:PurchaseIntentReq):Promise <PurchaseResultInfo>;\n        \n        /**\n         * Returns an array of products that purchased by user.\n         */\n        static obtainOwnedPurchases(ownedPurchasesReq:OwnedPurchasesReq):Promise <OwnedPurchasesResult>;\n        \n        /**\n         * Consumes the desired purchased product.\n         */\n        static consumeOwnedPurchase(consumeOwnedPurchaseReq:ConsumeOwnedPurchaseReq):Promise <ConsumeOwnedPurchaseResult>;\n        \n        /**\n         * \tDisplays screens of HUAWEI IAP, including:\n         *       - Subscription editing screen\n         *       - Subscription management screen\n         */\n        static startIapActivity(startIapActivityReq:StartIapActivityReq):Promise <void>;\n        \n        /**\n         * Returns an array of products that purchased and consumed by user.\n         */\n        static obtainOwnedPurchaseRecord(ownedPurchasesReq: OwnedPurchasesReq):Promise <OwnedPurchasesResult>;\n        \n    }\n    \n}"
  },
  {
    "path": "react-native-hms-iap/src/index.js",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\nimport { NativeModules } from 'react-native';\n\nconst { HMSIapModule } = NativeModules;\n\nexport default HMSIapModule;\n"
  },
  {
    "path": "react-native-hms-location/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-location/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Location</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-location\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-location?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-location\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-location?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-location.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nReact Native Location Plugin provides adaptation code for HUAWEI Location Kit to use the React Native platform. With HUAWEI Location Kit, your app can provide flexible location-based services for global users. Currently, it provides three main capabilities: fused location, activity identification, and geofence. You can call one or more of these capabilities as needed.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050142177?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-location\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050041326?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001050041352-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Location Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/locationservice-0000001050043283?ha_source=hms1)\n- [Activity Identification Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/activityidentify-0000001050041340?ha_source=hms1)\n- [Geofence Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/geofence-0000001050043295?ha_source=hms1)\n- [Geocode Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/geocoder-0000001270040169?ha_source=hms1)\n- [Log Recording Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/log-recording-0000001270330917?ha_source=hms1)\n- [Indoor Location Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/indoor-location-0000001270361705?ha_source=hms1)\n- [High-precision Location Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/high-precision-location-0000001270266393?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-location/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n        mavenCentral()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        checkReleaseBuilds false\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    google()\n    mavenCentral()\n    jcenter()\n    \n}\n\ndependencies {\n    implementation 'com.facebook.react:react-native:+'\n    implementation 'com.huawei.hms:location:6.12.0.300'\n    implementation \"androidx.core:core:1.6.0\"\n}\n"
  },
  {
    "path": "react-native-hms-location/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-location/android/gradle.properties",
    "content": "android.useAndroidX=true\norg.gradle.jwargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-location/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-location/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.location\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n    <application>\n        <service\n                android:name=\"com.huawei.location.service.BackGroundService\"\n                android:foregroundServiceType=\"location\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/RNHMSLocationPackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location;\n\nimport com.huawei.hms.rn.location.modules.RNActivityIdentificationModule;\nimport com.huawei.hms.rn.location.modules.RNFusedLocationModule;\nimport com.huawei.hms.rn.location.modules.RNGeocoderModule;\nimport com.huawei.hms.rn.location.modules.RNGeofenceModule;\nimport com.huawei.hms.rn.location.modules.RNLocationKitModule;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class RNHMSLocationPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new RNActivityIdentificationModule(reactContext));\n        modules.add(new RNFusedLocationModule(reactContext));\n        modules.add(new RNGeofenceModule(reactContext));\n        modules.add(new RNLocationKitModule(reactContext));\n        modules.add(new RNGeocoderModule(reactContext));\n\n        return modules;\n    }\n\n    // Deprecated from RN 0.47\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/RNLocationBroadcastReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location;\n\nimport static com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver.isAppOnForeground;\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.GE_OREO;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport com.facebook.react.HeadlessJsTaskService;\n\npublic class RNLocationBroadcastReceiver extends BroadcastReceiver {\n    private static final String TAG = RNLocationBroadcastReceiver.class.getName();\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        Log.d(TAG, \"onReceive\");\n        if (!isAppOnForeground((context))) {\n            intent.setClass(context, RNTaskService.class);\n            if (GE_OREO) {\n                context.startForegroundService(intent);\n            } else {\n                context.startService(intent);\n            }\n            HeadlessJsTaskService.acquireWakeLockNow(context);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/RNTaskService.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location;\n\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.GE_OREO;\n\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\nimport androidx.core.app.NotificationCompat;\n\nimport com.huawei.hms.rn.location.backend.helpers.Constants;\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\nimport com.huawei.hms.rn.location.backend.helpers.Pair;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\n\nimport com.facebook.react.HeadlessJsTaskService;\nimport com.facebook.react.jstasks.HeadlessJsTaskConfig;\n\nimport org.json.JSONObject;\n\npublic class RNTaskService extends HeadlessJsTaskService {\n    private static final String TAG = RNTaskService.class.getName();\n\n    private static final String CHANNEL_ID = \"hms_rn_location\";\n\n    private static final String CHANNEL_NAME = \"location\";\n\n    public Notification getNotification() {\n        SharedPreferences prefs = getApplicationContext().getSharedPreferences(getApplicationContext().getPackageName(),\n            Context.MODE_PRIVATE);\n\n        return new NotificationCompat.Builder(this, CHANNEL_ID).setContentTitle(\n            prefs.getString(Constants.KEY_CONTENT_TITLE, Constants.DEFAULT_CONTENT_TITLE))\n            .setContentText(prefs.getString(Constants.KEY_CONTENT_TEXT, Constants.DEFAULT_CONTENT_TEXT))\n            .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, getMainActivityClass()),\n                PendingIntent.FLAG_CANCEL_CURRENT))\n            .setSmallIcon(getApplicationContext().getResources()\n                .getIdentifier(prefs.getString(Constants.KEY_RESOURCE_NAME, Constants.DEFAULT_RESOURCE_NAME),\n                    prefs.getString(Constants.KEY_DEF_TYPE, Constants.DEFAULT_DEF_TYPE),\n                    getApplicationContext().getPackageName()))\n            .build();\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        if (GE_OREO) {\n            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME,\n                NotificationManager.IMPORTANCE_NONE);\n            getSystemService(NotificationManager.class).createNotificationChannel(channel);\n            startForeground(66666, getNotification());\n        }\n    }\n\n    public Class getMainActivityClass() {\n        Intent launchIntent = getApplicationContext().getPackageManager()\n            .getLaunchIntentForPackage(getApplicationContext().getPackageName());\n        try {\n            String className = launchIntent.getComponent().getClassName();\n            return Class.forName(className);\n        } catch (ClassNotFoundException e) {\n            Log.e(TAG, \"Class not found\", e);\n            return null;\n        }\n    }\n\n    @Nullable\n    protected HeadlessJsTaskConfig getTaskConfig(Intent intent) {\n        Pair<String, JSONObject> intentData = HMSBroadcastReceiver.handleIntent(getApplicationContext(), intent);\n\n        if (intentData != null) {\n            String eventName;\n            if (HMSBroadcastReceiver.getPackageAction(getApplicationContext(), HMSBroadcastReceiver.ACTION_HMS_LOCATION)\n                .equals(intentData.get0())) {\n                eventName = Constants.Event.LOCATION.getVal();\n            } else if (HMSBroadcastReceiver.getPackageAction(getApplicationContext(),\n                HMSBroadcastReceiver.ACTION_HMS_IDENTIFICATION).equals(intentData.get0())) {\n                eventName = Constants.Event.ACTIVITY_IDENTIFICATION.getVal();\n            } else if (HMSBroadcastReceiver.getPackageAction(getApplicationContext(),\n                HMSBroadcastReceiver.ACTION_HMS_CONVERSION).equals(intentData.get0())) {\n                eventName = Constants.Event.ACTIVITY_CONVERSION.getVal();\n            } else if (HMSBroadcastReceiver.getPackageAction(getApplicationContext(),\n                HMSBroadcastReceiver.ACTION_HMS_GEOFENCE).equals(intentData.get0())) {\n                eventName = Constants.Event.GEOFENCE.getVal();\n            } else {\n                return null;\n            }\n            return new HeadlessJsTaskConfig(eventName, ReactUtils.toWM(intentData.get1()), 5000, false);\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/helpers/Constants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.helpers;\n\npublic class Constants {\n    public static final String KEY_CONTENT_TITLE = \"contentTitle\";\n\n    public static final String KEY_CONTENT_TEXT = \"contentText\";\n\n    public static final String KEY_DEF_TYPE = \"defType\";\n\n    public static final String KEY_RESOURCE_NAME = \"resourceName\";\n\n    public static final String DEFAULT_CONTENT_TITLE = \"Location Kit\";\n\n    public static final String DEFAULT_CONTENT_TEXT = \"Service is running...\";\n\n    public static final String DEFAULT_DEF_TYPE = \"mipmap\";\n\n    public static final String DEFAULT_RESOURCE_NAME = \"ic_launcher\";\n\n    public enum Event {\n        LOCATION(\"onLocation\"),\n        ACTIVITY_IDENTIFICATION(\"onActivityIdentification\"),\n        ACTIVITY_CONVERSION(\"onActivityConversion\"),\n        GEOFENCE(\"onGeofence\");\n\n        private String val;\n\n        Event(String val) {\n            this.val = val;\n        }\n\n        public String getVal() {\n            return this.val;\n        }\n\n        @Override\n        public String toString() {\n            return this.val;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/helpers/Exceptions.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.helpers;\n\nimport android.util.Log;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Exceptions {\n    public static final int ERR_GENERIC = 800;\n\n    public static final int ERR_JSON = 801;\n\n    public static final int ERR_NO_PERMISSION = 802;\n\n    public static final int ERR_NO_FUSED_LOCATION_PROVIDER = 803;\n\n    public static final int ERR_EMPTY_CALLBACK = 804;\n\n    public static final int ERR_NO_HW_LOCATION = 805;\n\n    public static final int ERR_NO_EXISTENT_REQUEST_ID = 806;\n\n    public static final int ERR_DUPLICATE_ID = 807;\n\n    public static final int ERR_RESOLUTION_FAILED = 808;\n\n    public static final int ERR_PENDING_RESOLUTION = 809;\n\n    public static final int ERR_NULL_VALUE = 810;\n\n    static final Map<Integer, String> ERROR_MSGS = new HashMap<>();\n\n    static {\n        ERROR_MSGS.put(ERR_NO_PERMISSION, \"App does not have location permission\");\n        ERROR_MSGS.put(ERR_EMPTY_CALLBACK, \"Callback is empty\");\n        ERROR_MSGS.put(ERR_NO_EXISTENT_REQUEST_ID, \"RequestId does not in Geofence list\");\n        ERROR_MSGS.put(ERR_DUPLICATE_ID, \"Callback id already exist\");\n        ERROR_MSGS.put(ERR_NO_HW_LOCATION, \"HWLocation is null\");\n        ERROR_MSGS.put(ERR_RESOLUTION_FAILED, \"Resolution failed.\");\n        ERROR_MSGS.put(ERR_PENDING_RESOLUTION, \"Error occurred, a resolution is available and being applied.\");\n        ERROR_MSGS.put(ERR_NULL_VALUE, \"Result from location kit is null.\");\n        ERROR_MSGS.put(ERR_JSON, \"JSON Error.\");\n    }\n\n    public Exceptions() {\n    }\n\n    public static JSONObject toErrorJSON(int errorCode) {\n        try {\n            return new JSONObject().put(\"errorCode\", errorCode).put(\"errorMessage\", ERROR_MSGS.get(errorCode));\n        } catch (JSONException e) {\n            Log.e(\"toErrorJSON get error: \", e.getMessage());\n        }\n        return new JSONObject();\n    }\n\n    public static JSONObject toErrorJSON(int errorCode, Throwable t) {\n        try {\n            return new JSONObject().put(\"errorCode\", errorCode).put(\"errorMessage\", t.getMessage());\n        } catch (JSONException e) {\n            Log.e(\"toErrorJSON get error: \", e.getMessage());\n        }\n\n        return new JSONObject();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/helpers/HMSBroadcastReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.helpers;\n\nimport android.app.ActivityManager;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.util.Log;\n\nimport com.huawei.hms.location.ActivityConversionResponse;\nimport com.huawei.hms.location.ActivityIdentificationResponse;\nimport com.huawei.hms.location.GeofenceData;\nimport com.huawei.hms.location.LocationResult;\nimport com.huawei.hms.rn.location.backend.helpers.Constants.Event;\nimport com.huawei.hms.rn.location.backend.interfaces.EventSender;\nimport com.huawei.hms.rn.location.backend.utils.ActivityUtils;\nimport com.huawei.hms.rn.location.backend.utils.GeofenceUtils;\nimport com.huawei.hms.rn.location.backend.utils.LocationUtils;\n\nimport org.json.JSONObject;\n\nimport java.util.List;\n\npublic class HMSBroadcastReceiver extends BroadcastReceiver {\n    public static final String TAG = HMSBroadcastReceiver.class.getSimpleName();\n\n    public static final String ACTION_HMS_LOCATION = \"ACTION_HMS_LOCATION\";\n\n    public static final String ACTION_HMS_IDENTIFICATION = \"ACTION_HMS_ACTIVITY_IDENTIFICATION\";\n\n    public static final String ACTION_HMS_CONVERSION = \"ACTION_HMS_ACTIVITY_CONVERSION\";\n\n    public static final String ACTION_HMS_GEOFENCE = \"ACTION_HMS_GEOFENCE\";\n\n    private static HMSBroadcastReceiver instance;\n\n    private EventSender eventSender;\n\n    public static synchronized HMSBroadcastReceiver getInstance() {\n        if (instance == null) {\n            instance = new HMSBroadcastReceiver();\n        }\n        return instance;\n    }\n\n    public static String getPackageAction(Context context, String action) {\n        return context.getPackageName() + \".\" + action;\n    }\n\n    public void setEventSender(EventSender eventSender) {\n        this.eventSender = eventSender;\n    }\n\n    public static Pair<String, JSONObject> handleIntent(Context context, Intent intent) {\n        String action = intent.getAction();\n        if (action != null) {\n            Log.d(TAG, action);\n            if (getPackageAction(context, ACTION_HMS_LOCATION).equals(action) && LocationResult.hasResult(intent)) {\n                return Pair.create(action,\n                    LocationUtils.FROM_LOCATION_RESULT_TO_JSON_OBJECT.map(LocationResult.extractResult(intent)));\n            } else if (getPackageAction(context, ACTION_HMS_IDENTIFICATION).equals(action)\n                && ActivityIdentificationResponse.containDataFromIntent(intent)) {\n                return Pair.create(action, ActivityUtils.FROM_ACTIVITY_IDENTIFICATION_RESPONSE_TO_JSON_OBJECT.map(\n                    ActivityIdentificationResponse.getDataFromIntent(intent)));\n            } else if (getPackageAction(context, ACTION_HMS_CONVERSION).equals(action)\n                && ActivityConversionResponse.containDataFromIntent(intent)) {\n                return Pair.create(action, ActivityUtils.FROM_ACTIVITY_CONVERSION_RESPONSE_TO_JSON_OBJECT.map(\n                    ActivityConversionResponse.getDataFromIntent(intent)));\n            } else if (getPackageAction(context, ACTION_HMS_GEOFENCE).equals(action)) {\n                return Pair.create(action,\n                    GeofenceUtils.FROM_GEOFENCE_DATA_TO_JSON_OBJECT.map(GeofenceData.getDataFromIntent(intent)));\n            } else {\n                Log.d(TAG, \"onReceive unhandled intent, \" + action);\n            }\n        }\n        return null;\n    }\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        Log.d(TAG, \"onReceive start\");\n\n        if (intent == null) {\n            Log.d(TAG, \"onReceive, intent is null\");\n            return;\n        }\n\n        if (eventSender == null) {\n            Log.d(TAG, \"onReceive, eventSender not initalized yet\");\n            return;\n        }\n\n        if (!isAppOnForeground(context)) {\n            Log.d(TAG, \"onReceive, app is not on foreground\");\n            return;\n        }\n\n        Pair<String, JSONObject> intentData = handleIntent(context, intent);\n        if (intentData != null) {\n            String eventName;\n            if (getPackageAction(context, ACTION_HMS_LOCATION).equals(intentData.get0())) {\n                eventName = Event.LOCATION.getVal();\n            } else if (getPackageAction(context, ACTION_HMS_IDENTIFICATION).equals(intentData.get0())) {\n                eventName = Event.ACTIVITY_IDENTIFICATION.getVal();\n            } else if (getPackageAction(context, ACTION_HMS_CONVERSION).equals(intentData.get0())) {\n                eventName = Event.ACTIVITY_CONVERSION.getVal();\n            } else if (getPackageAction(context, ACTION_HMS_GEOFENCE).equals(intentData.get0())) {\n                eventName = Event.GEOFENCE.getVal();\n            } else {\n                return;\n            }\n            eventSender.send(eventName, intentData.get1());\n        }\n        Log.d(TAG, \"onReceive end\");\n    }\n\n    public static boolean isAppOnForeground(Context context) {\n        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();\n        if (appProcesses == null) {\n            return false;\n        }\n        final String packageName = context.getPackageName();\n        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {\n            if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND\n                && appProcess.processName.equals(packageName)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public static IntentFilter getIntentFilter(Context context) {\n        IntentFilter intentFilter = new IntentFilter();\n        intentFilter.addAction(getPackageAction(context, ACTION_HMS_LOCATION));\n        intentFilter.addAction(getPackageAction(context, ACTION_HMS_CONVERSION));\n        intentFilter.addAction(getPackageAction(context, ACTION_HMS_IDENTIFICATION));\n        intentFilter.addAction(getPackageAction(context, ACTION_HMS_GEOFENCE));\n        return intentFilter;\n    }\n\n    public static void init(Context context, final EventSender eventSender) {\n        context.registerReceiver(getInstance(), getIntentFilter(context));\n        getInstance().setEventSender(eventSender);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/helpers/LocationCallbackWithHandler.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.helpers;\n\nimport android.util.Log;\n\nimport com.huawei.hms.location.LocationAvailability;\nimport com.huawei.hms.location.LocationCallback;\nimport com.huawei.hms.location.LocationResult;\nimport com.huawei.hms.rn.location.backend.interfaces.ResultHandler;\n\npublic class LocationCallbackWithHandler extends LocationCallback {\n    private static final String TAG = LocationCallbackWithHandler.class.getSimpleName();\n\n    private ResultHandler mResultHandler;\n\n    public LocationCallbackWithHandler(ResultHandler resultHandler) {\n        mResultHandler = resultHandler;\n    }\n\n    @Override\n    public void onLocationResult(LocationResult locationResult) {\n        Log.i(TAG, \"requestLocationUpdatesWithCallback callback onLocationResult print\");\n        if (locationResult == null) {\n            return;\n        }\n        mResultHandler.handleResult(locationResult);\n    }\n\n    @Override\n    public void onLocationAvailability(LocationAvailability locationAvailability) {\n        Log.i(TAG, \"requestLocationUpdatesWithCallback onLocationAvailability\");\n        if (locationAvailability != null) {\n            boolean flag = locationAvailability.isLocationAvailable();\n            Log.i(TAG, \"onLocationAvailability isLocationAvailable:\" + flag);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/helpers/Pair.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.helpers;\n\npublic class Pair<K, V> {\n    private final K element0;\n\n    private final V element1;\n\n    public static <K, V> Pair<K, V> create(K element0, V element1) {\n        return new Pair<>(element0, element1);\n    }\n\n    public Pair(K element0, V element1) {\n        this.element0 = element0;\n        this.element1 = element1;\n    }\n\n    public K get0() {\n        return element0;\n    }\n\n    public V get1() {\n        return element1;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/EventSender.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport org.json.JSONObject;\n\npublic interface EventSender {\n    /**\n     * Send an event.\n     *\n     * @param eventName String\n     * @param eventValue JSONObject\n     */\n    void send(String eventName, JSONObject eventValue);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/HMSCallback.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\npublic interface HMSCallback {\n    /**\n     * Describes a successful operation.\n     */\n    void success();\n\n    /**\n     * Describes a successful operation.\n     *\n     * @param json JSONObject\n     */\n    void success(JSONObject json);\n\n    /**\n     * Describes a successful operation.\n     *\n     * @param jsonArray JSONArray\n     */\n    void success(JSONArray jsonArray);\n\n    /**\n     * Describes a failed operation.\n     *\n     * @param json JSONObject\n     */\n    void error(JSONObject json);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/HMSProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport android.app.Activity;\nimport android.app.PendingIntent;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.os.Build;\n\nimport androidx.core.content.PermissionChecker;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic abstract class HMSProvider {\n    private ReactApplicationContext ctx;\n\n    private EventSender eventSender;\n\n    private PermissionHandler permissionHandler;\n\n    protected Map<Integer, PendingIntent> requests = new HashMap<>();\n\n    /**\n     * Build and return all the constants.\n     *\n     * @return JSONObject containing all the constants\n     * @throws JSONException if something goes wrong while building up the object\n     */\n    public abstract JSONObject getConstants() throws JSONException;\n\n    public HMSProvider(ReactApplicationContext ctx) {\n        this.ctx = ctx;\n    }\n\n    public ReactApplicationContext getContext() {\n        return this.ctx;\n    }\n\n    public boolean hasPermission(String permission) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            int result = PermissionChecker.checkSelfPermission(ctx, permission);\n            return PackageManager.PERMISSION_GRANTED == result;\n        } else {\n            return true;\n        }\n    }\n\n    public EventSender getEventSender() {\n        return eventSender;\n    }\n\n    public void setEventSender(EventSender eventSender) {\n        this.eventSender = eventSender;\n    }\n\n    public PermissionHandler getPermissionHandler() {\n        return permissionHandler;\n    }\n\n    public void setPermissionHandler(PermissionHandler permissionHandler) {\n        this.permissionHandler = permissionHandler;\n    }\n\n    public PendingIntent buildPendingIntent(int requestCode, String action) {\n        Intent intent = new Intent();\n        intent.setPackage(ctx.getPackageName());\n        intent.setAction(action);\n        PendingIntent pendingIntent;\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n            pendingIntent = PendingIntent.getBroadcast(ctx, requestCode, intent,\n                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);\n        } else {\n            pendingIntent = PendingIntent.getBroadcast(ctx, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);\n        }\n\n        this.requests.put(requestCode, pendingIntent);\n        return pendingIntent;\n    }\n\n    public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\n        return false;\n    }\n\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/JSONMapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport org.json.JSONException;\n\npublic interface JSONMapper<T, R> {\n    /**\n     * A simple transformation operation.\n     *\n     * @param in T\n     * @return R\n     * @throws JSONException\n     */\n    R map(T in) throws JSONException;\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/JSONTriMapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport org.json.JSONException;\n\npublic interface JSONTriMapper<T, U, V, R> {\n    /**\n     * A simple mapping from T, U, V to R that may throw JSONException.\n     *\n     * @param in T\n     * @param in2 U\n     * @param in3 V\n     * @return R\n     * @throws JSONException if needed\n     */\n    R run(T in, U in2, V in3) throws JSONException;\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/Mapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\npublic interface Mapper<T, R> {\n    /**\n     * A simple transformation operation.\n     *\n     * @param in T\n     * @return R\n     */\n    R map(T in);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/PermissionHandler.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\npublic interface PermissionHandler {\n    /**\n     * Request given permissions.\n     *\n     * @param requestNo int\n     * @param permissions permission list\n     */\n    void requestPermissions(int requestNo, String[] permissions);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/ResultHandler.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\nimport com.huawei.hms.location.LocationResult;\n\npublic interface ResultHandler {\n    /**\n     * A function to handle Location update results.\n     *\n     * @param locationResult LocationResult object\n     */\n    void handleResult(LocationResult locationResult);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/interfaces/TriMapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.interfaces;\n\npublic interface TriMapper<T, U, V, R> {\n    /**\n     * A simple mapping from T, U, V to R.\n     *\n     * @param in T\n     * @param in2 U\n     * @param in3 V\n     * @return R\n     */\n    R map(T in, U in2, V in3);\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Location\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"6.12.0.302\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/logger/HMSMethod.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.logger;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSMethod {\n    private String name;\n\n    private boolean periodical = false;\n\n    public HMSMethod(String name) {\n        this.name = name;\n    }\n\n    public HMSMethod(String name, boolean isPeriodical) {\n        this(name);\n        this.periodical = isPeriodical;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void sendLoggerEvent(ReactApplicationContext context) {\n        if (periodical) {\n            HMSLogger.getInstance(context).sendPeriodicEvent(name);\n            return;\n        }\n        HMSLogger.getInstance(context).sendSingleEvent(name);\n    }\n\n    public void sendLoggerEvent(ReactApplicationContext context, String errorCode) {\n        if (periodical) {\n            HMSLogger.getInstance(context).sendPeriodicEvent(name, errorCode);\n            return;\n        }\n        HMSLogger.getInstance(context).sendSingleEvent(name, errorCode);\n    }\n\n    public static void enableLogger(ReactApplicationContext context) {\n        HMSLogger.getInstance(context).enableLogger();\n    }\n\n    public static void disableLogger(ReactApplicationContext context) {\n        HMSLogger.getInstance(context).disableLogger();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/providers/ActivityIdentificationProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.providers;\n\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_NO_EXISTENT_REQUEST_ID;\n\nimport android.app.PendingIntent;\nimport android.util.Log;\n\nimport com.huawei.hms.location.ActivityConversionInfo;\nimport com.huawei.hms.location.ActivityConversionRequest;\nimport com.huawei.hms.location.ActivityIdentification;\nimport com.huawei.hms.location.ActivityIdentificationData;\nimport com.huawei.hms.location.ActivityIdentificationService;\nimport com.huawei.hms.rn.location.backend.helpers.Constants;\nimport com.huawei.hms.rn.location.backend.helpers.Exceptions;\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.logger.HMSLogger;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\nimport com.huawei.hms.rn.location.backend.utils.ActivityUtils;\nimport com.huawei.hms.rn.location.backend.utils.PermissionUtils;\nimport com.huawei.hms.rn.location.backend.utils.PlatformUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\npublic class ActivityIdentificationProvider extends HMSProvider {\n    private static final String TAG = ActivityIdentificationProvider.class.getSimpleName();\n\n    private HMSCallback permissionResultCallback;\n\n    private ActivityIdentificationService activityService;\n\n    public ActivityIdentificationProvider(ReactApplicationContext ctx) {\n        super(ctx);\n        this.activityService = ActivityIdentification.getService(getContext());\n    }\n\n    @Override\n    public JSONObject getConstants() throws JSONException {\n        return new JSONObject().put(\"Activities\", new JSONObject().put(\"VEHICLE\", ActivityIdentificationData.VEHICLE)\n            .put(\"BIKE\", ActivityIdentificationData.BIKE)\n            .put(\"FOOT\", ActivityIdentificationData.FOOT)\n            .put(\"RUNNING\", ActivityIdentificationData.RUNNING)\n            .put(\"STILL\", ActivityIdentificationData.STILL)\n            .put(\"OTHERS\", ActivityIdentificationData.OTHERS)\n            .put(\"WALKING\", ActivityIdentificationData.WALKING))\n            .put(\"ActivityConversions\",\n                new JSONObject().put(\"ENTER_ACTIVITY_CONVERSION\", ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION)\n                    .put(\"EXIT_ACTIVITY_CONVERSION\", ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION))\n            .put(\"Events\", new JSONObject().put(\"ACTIVITY_CONVERSION\", Constants.Event.ACTIVITY_CONVERSION.getVal())\n                .put(\"ACTIVITY_IDENTIFICATION\", Constants.Event.ACTIVITY_IDENTIFICATION.getVal()));\n    }\n\n    // @ExposedMethod\n    public void createActivityConversionUpdates(final int requestCode, JSONArray activityConversionRequestArray,\n        final HMSCallback callback) {\n        Log.i(TAG, \"createActivityConversionUpdates start\");\n        HMSMethod method = new HMSMethod(\"createActivityConversionUpdates\", true);\n\n        ActivityConversionRequest request = ActivityUtils.FROM_JSON_ARRAY_TO_ACTIVITY_CONVERSION_REQUEST.map(\n            activityConversionRequestArray);\n\n        final PendingIntent pendingIntent = buildPendingIntent(requestCode,\n            HMSBroadcastReceiver.getPackageAction(getContext(), HMSBroadcastReceiver.ACTION_HMS_CONVERSION));\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        activityService.createActivityConversionUpdates(request, pendingIntent)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                PlatformUtils.keyValPair(\"requestCode\", requestCode)))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"createActivityConversionUpdates end\");\n    }\n\n    // @ExposedMethod\n    public void createActivityIdentificationUpdates(final int requestCode, double intervalMillis,\n        final HMSCallback callback) {\n        Log.i(TAG, \"createActivityIdentificationUpdates start\");\n        HMSMethod method = new HMSMethod(\"createActivityIdentificationUpdates\", true);\n\n        final PendingIntent pendingIntent = buildPendingIntent(requestCode,\n            HMSBroadcastReceiver.getPackageAction(getContext(), HMSBroadcastReceiver.ACTION_HMS_IDENTIFICATION));\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        activityService.createActivityIdentificationUpdates((long) intervalMillis, pendingIntent)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                PlatformUtils.keyValPair(\"requestCode\", requestCode)))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"createActivityIdentificationUpdates end\");\n    }\n\n    // @ExposedMethod\n    public void deleteActivityConversionUpdates(final int requestCode, final HMSCallback callback) {\n        Log.i(TAG, \"deleteActivityConversionUpdates start\");\n        HMSMethod method = new HMSMethod(\"deleteActivityConversionUpdates\", true);\n\n        if (!requests.containsKey(requestCode)) {\n            callback.error(Exceptions.toErrorJSON(ERR_NO_EXISTENT_REQUEST_ID));\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        activityService.deleteActivityConversionUpdates(requests.get(requestCode))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"deleteActivityConversionUpdates end\");\n    }\n\n    // @ExposedMethod\n    public void deleteActivityIdentificationUpdates(final int requestCode, final HMSCallback callback) {\n        Log.i(TAG, \"deleteActivityIdentificationUpdates start\");\n        HMSMethod method = new HMSMethod(\"deleteActivityIdentificationUpdates\", true);\n\n        if (!requests.containsKey(requestCode)) {\n            callback.error(Exceptions.toErrorJSON(ERR_NO_EXISTENT_REQUEST_ID));\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        activityService.deleteActivityIdentificationUpdates(requests.get(requestCode))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"deleteActivityIdentificationUpdates end\");\n    }\n\n    @Override\n    public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\n        onRequestPermissionResult(requestCode, permissions, grantResults);\n        return false;\n    }\n\n    public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {\n        JSONObject json = PermissionUtils.HANDLE_PERMISSION_REQUEST_RESULT.map(requestCode, permissions, grantResults);\n        if (permissionResultCallback != null) {\n            permissionResultCallback.success(json);\n        } else {\n            Log.w(TAG, \"onRequestPermissionResult() :: null callback\");\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/providers/FusedLocationProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.providers;\n\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_EMPTY_CALLBACK;\n\nimport android.app.Activity;\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.location.Location;\nimport android.os.Build;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.location.FusedLocationProviderClient;\nimport com.huawei.hms.location.LocationCallback;\nimport com.huawei.hms.location.LocationEnhanceService;\nimport com.huawei.hms.location.LocationRequest;\nimport com.huawei.hms.location.LocationResult;\nimport com.huawei.hms.location.LocationServices;\nimport com.huawei.hms.location.LocationSettingsStates;\nimport com.huawei.hms.location.LogConfig;\nimport com.huawei.hms.location.NavigationRequest;\nimport com.huawei.hms.location.SettingsClient;\nimport com.huawei.hms.rn.location.backend.helpers.Constants;\nimport com.huawei.hms.rn.location.backend.helpers.Exceptions;\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\nimport com.huawei.hms.rn.location.backend.helpers.LocationCallbackWithHandler;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.interfaces.ResultHandler;\nimport com.huawei.hms.rn.location.backend.interfaces.TriMapper;\nimport com.huawei.hms.rn.location.backend.logger.HMSLogger;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\nimport com.huawei.hms.rn.location.backend.utils.LocationUtils;\nimport com.huawei.hms.rn.location.backend.utils.PermissionUtils;\nimport com.huawei.hms.rn.location.backend.utils.PlatformUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.File;\n\nimport java.util.HashMap;\n\npublic class FusedLocationProvider extends HMSProvider implements ResultHandler {\n    protected static final String TAG = FusedLocationProvider.class.getSimpleName();\n\n    private HMSCallback permissionResultCallback;\n\n    private FusedLocationProviderClient fusedLocationProviderClient;\n\n    private HashMap<Integer, LocationCallback> locationCallbackMap;\n\n    private SettingsClient settingsClient;\n\n    private LogConfig logConfig;\n\n    private LocationEnhanceService locationEnhanceService;\n\n    protected int mRequestCode = 0;\n\n    private HMSCallback resolutionCallback;\n\n    public FusedLocationProvider(ReactApplicationContext ctx) {\n        super(ctx);\n        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getContext());\n        settingsClient = LocationServices.getSettingsClient(getContext());\n        locationEnhanceService = LocationServices.getLocationEnhanceService(getContext());\n        locationCallbackMap = new HashMap<>();\n    }\n\n    @Override\n    public JSONObject getConstants() throws JSONException {\n        return new JSONObject().put(\"PriorityConstants\",\n            new JSONObject().put(\"PRIORITY_HIGH_ACCURACY\", LocationRequest.PRIORITY_HIGH_ACCURACY)\n                .put(\"PRIORITY_BALANCED_POWER_ACCURACY\", LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)\n                .put(\"PRIORITY_LOW_POWER\", LocationRequest.PRIORITY_LOW_POWER)\n                .put(\"PRIORITY_NO_POWER\", LocationRequest.PRIORITY_NO_POWER)\n                .put(\"PRIORITY_HD_ACCURACY\", LocationRequest.PRIORITY_HD_ACCURACY)\n                .put(\"PRIORITY_INDOOR\", LocationRequest.PRIORITY_INDOOR))\n                .put(\"PRIORITY_HIGH_ACCURACY_AND_INDOOR\", LocationRequest.PRIORITY_HIGH_ACCURACY_AND_INDOOR)\n                .put(\"NavigationRequestConstants\", new JSONObject().put(\"OVERPASS\", NavigationRequest.OVERPASS)\n                .put(\"IS_SUPPORT_EX\", NavigationRequest.IS_SUPPORT_EX))\n                .put(\"Events\", new JSONObject().put(\"LOCATION\", Constants.Event.LOCATION.getVal()));\n    }\n\n    public void enableBackgroundLocation(final int id, final ReadableMap notification, final HMSCallback callback) {\n        Log.i(TAG, \"enableBackgroundLocation begin\");\n\n        Notification.Builder builder;\n        Notification mNotification;\n        String channelName = notification.getString(\"channelName\");\n        int priority = notification.getInt(\"priority\");\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n            NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(\n                Context.NOTIFICATION_SERVICE);\n            String channelId = \"com.huawei.hms.location.rn.LOCATION_NOTIFICATION\";\n            NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, priority);\n            notificationManager.createNotificationChannel(notificationChannel);\n            builder = new Notification.Builder(getContext(), channelId);\n        } else {\n            builder = new Notification.Builder(getContext());\n        }\n\n        LocationUtils.fillNotificationBuilder(getContext(), builder, notification);\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {\n            mNotification = builder.build();\n        } else {\n            mNotification = builder.getNotification();\n        }\n\n        HMSMethod method = new HMSMethod(\"enableBackgroundLocation\");\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.enableBackgroundLocation(id, mNotification)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        method.sendLoggerEvent(getContext());\n\n        Log.i(TAG, \"enableBackgroundLocation end\");\n    }\n\n    public String getStringKey(ReadableMap rm, String key, String fallback) {\n        return (rm != null && rm.hasKey(key) && rm.getType(key) == ReadableType.String) ? rm.getString(key) : fallback;\n    }\n\n    public void disableBackgroundLocation(final HMSCallback callback) {\n        Log.i(TAG, \"disableBackgroundLocation begin\");\n        HMSMethod method = new HMSMethod(\"disableBackgroundLocation\");\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.disableBackgroundLocation()\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        method.sendLoggerEvent(getContext());\n\n        Log.i(TAG, \"disableBackgroundLocation end\");\n    }\n\n    public void setLogConfig(final JSONObject JSONLogConfig, final HMSCallback callback) {\n        Log.i(TAG, \"setLogConfig begin\");\n        HMSMethod method = new HMSMethod(\"setLogConfig\");\n\n        logConfig = LocationUtils.FROM_JSON_OBJECT_TO_LOG_CONFIG.map(JSONLogConfig);\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        settingsClient.setLogConfig(logConfig)\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        if (isLogFilePath(logConfig.getLogPath())) {\n            Log.d(TAG, \"successListener()\");\n            method.sendLoggerEvent(getContext());\n            callback.success();\n        }\n        Log.i(TAG, \"setLogConfig end\");\n    }\n\n    private boolean isLogFilePath(String logPath) {\n        File folder = new File(logPath);\n        return folder.exists();\n    }\n\n    public void getLogConfig(final HMSCallback callback) {\n        Log.i(TAG, \"getLogConfig begin\");\n\n        if (logConfig == null) {\n            try {\n                JSONObject result = new JSONObject().put(\"Error\", \"LogConfig is null.\");\n                callback.error(result);\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException, \" + e.getMessage());\n            }\n            Log.i(TAG, \"getLogConfig end\");\n            return;\n        }\n        callback.success(LocationUtils.FROM_LOG_CONFIG_TO_JSON_OBJECT.map(logConfig));\n\n        Log.i(TAG, \"getLogConfig end\");\n    }\n\n    // @ExposedMethod\n    public void flushLocations(final HMSCallback callback) {\n        Log.i(TAG, \"flushLocations begin\");\n        HMSMethod method = new HMSMethod(\"flushLocations\");\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.flushLocations()\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n    }\n\n    // @ExposedMethod\n    public void checkLocationSettings(final JSONObject locationRequestMap, final HMSCallback callback) {\n        Log.i(TAG, \"checkLocationSettings begin\");\n        HMSMethod method = new HMSMethod(\"checkLocationSettings\");\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        settingsClient.checkLocationSettings(\n            LocationUtils.FROM_JSON_OBJECT_TO_LOCATION_SETTINGS_REQUEST.map(locationRequestMap))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_LOCATION_SETTINGS_STATES_RESPONSE_TO_JSON_OBJECT))\n            .addOnSuccessListener(e -> {\n                resolutionCallback = null;\n                (PlatformUtils.successListener(method, getContext(), callback,\n                    LocationUtils.FROM_LOCATION_SETTINGS_STATES_RESPONSE_TO_JSON_OBJECT)).onSuccess(e);\n            })\n            .addOnFailureListener(e -> {\n                resolutionCallback = callback;\n                (PlatformUtils.failureListener(method, getContext(), callback)).onFailure(e);\n            });\n        Log.i(TAG, \"checkLocationSettings end\");\n    }\n\n    // @ExposedMethod\n    public void getNavigationContextState(int requestType, final HMSCallback callback) {\n        Log.i(TAG, \"getNavigationContextState begin\");\n        HMSMethod method = new HMSMethod(\"getNavigationContextState\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        locationEnhanceService.getNavigationState(new NavigationRequest(requestType))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_NAVIGATION_RESULT_TO_JSON_OBJECT))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"getNavigationContextState end\");\n    }\n\n    // @ExposedMethod\n    public void getLastLocation(final HMSCallback callback) {\n        Log.i(TAG, \"getLastLocation begin\");\n        HMSMethod method = new HMSMethod(\"getLastLocation\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.getLastLocation()\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_LOCATION_TO_JSON_OBJECT))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"getLastLocation end\");\n    }\n\n    // @ExposedMethod\n    public void getLastLocationWithAddress(final JSONObject map, final HMSCallback callback) {\n        Log.i(TAG, \"getLastLocationWithAddress begin\");\n        HMSMethod method = new HMSMethod(\"getLastLocationWithAddress\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.getLastLocationWithAddress(\n            LocationUtils.FROM_JSON_OBJECT_TO_LOCATION_REQUEST.map(map))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_HW_LOCATION_TO_JSON_OBJECT))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"getLastLocationWithAddress end\");\n    }\n\n    // @ExposedMethod\n    public void getLocationAvailability(final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"getLocationAvailability\");\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        Log.i(TAG, \"getLocationAvailability begin\");\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        fusedLocationProviderClient.getLocationAvailability()\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_LOCATION_AVAILABILITY_TO_JSON_OBJECT))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"getLocationAvailability end\");\n    }\n\n    // @ExposedMethod\n    public void setMockLocation(JSONObject map, final HMSCallback callback) {\n        Log.i(TAG, \"setMockLocation begin\");\n        HMSMethod method = new HMSMethod(\"setMockLocation\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        Location location = new Location(\"HMS-MOCK\");\n        location.setLongitude(map.optDouble(\"longitude\"));\n        location.setLatitude(map.optDouble(\"latitude\"));\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.setMockLocation(location)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"setMockLocation end\");\n    }\n\n    // @ExposedMethod\n    public void setMockMode(final boolean shouldMock, final HMSCallback callback) {\n        Log.i(TAG, \"setMockMode -> shouldMock=\" + shouldMock);\n        HMSMethod method = new HMSMethod(\"setMockMode\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        fusedLocationProviderClient.setMockMode(shouldMock)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"setMockMode end\");\n    }\n\n    // @ExposedMethod\n    public void requestLocationUpdates(final int requestCode, final JSONObject json, final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"requestLocationUpdates\", true);\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        final PendingIntent pendingIntent = buildPendingIntent(requestCode,\n            HMSBroadcastReceiver.getPackageAction(getContext(), HMSBroadcastReceiver.ACTION_HMS_LOCATION));\n        final LocationRequest locationRequest = LocationUtils.FROM_JSON_OBJECT_TO_LOCATION_REQUEST.map(json);\n\n        fusedLocationProviderClient.requestLocationUpdates(locationRequest, pendingIntent)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                PlatformUtils.keyValPair(\"requestCode\", requestCode)))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n    }\n\n    // @ExposedMethod\n    public void removeLocationUpdates(final int requestCode, final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"removeLocationUpdates\", true);\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n\n        if (requests.containsKey(requestCode)) {\n            fusedLocationProviderClient.removeLocationUpdates(requests.get(requestCode))\n                .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n                .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        } else {\n            Log.i(TAG, \"removeLocationUpdates using unregistered request id \");\n            callback.error(Exceptions.toErrorJSON(ERR_EMPTY_CALLBACK));\n            method.sendLoggerEvent(getContext(), \"-1\");\n        }\n    }\n\n    // @ExposedMethod\n    public void requestLocationUpdatesWithCallback(final JSONObject json, final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"requestLocationUpdates\", true);\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        requestLocationUpdatesWithCallbackGeneric(method, fusedLocationProviderClient::requestLocationUpdates, json,\n            callback);\n    }\n\n    // @ExposedMethod\n    public void requestLocationUpdatesWithCallbackEx(final JSONObject json, final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"requestLocationUpdatesEx\", true);\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        requestLocationUpdatesWithCallbackGeneric(method, fusedLocationProviderClient::requestLocationUpdatesEx, json,\n            callback);\n    }\n\n    private void requestLocationUpdatesWithCallbackGeneric(HMSMethod method,\n        TriMapper<LocationRequest, LocationCallback, Looper, Task<Void>> requestMethod, final JSONObject json,\n        final HMSCallback callback) {\n        Log.i(TAG, \"requestLocationUpdatesWithCallback start\");\n\n        if (LocationUtils.checkForObstacles(this, fusedLocationProviderClient, callback)) {\n            return;\n        }\n\n        final LocationRequest locationRequest = LocationUtils.FROM_JSON_OBJECT_TO_LOCATION_REQUEST.map(json);\n\n        // Create locationCallback\n        LocationCallback locationCallback = new LocationCallbackWithHandler(this);\n        locationCallbackMap.put(mRequestCode, locationCallback);\n\n        requestMethod.map(locationRequest, locationCallback, Looper.getMainLooper())\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                PlatformUtils.keyValPair(\"requestCode\", mRequestCode++)))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n\n        Log.i(TAG, \"call requestLocationUpdatesWithCallback success.\");\n    }\n\n    // @ExposedMethod\n    public void removeLocationUpdatesWithCallback(final int requestCode, final HMSCallback callback) {\n        HMSMethod method = new HMSMethod(\"removeLocationUpdatesWithCallback\", true);\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n\n        if (locationCallbackMap.get(requestCode) != null) {\n            fusedLocationProviderClient.removeLocationUpdates(locationCallbackMap.get(requestCode))\n                .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n                .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        } else {\n            Log.i(TAG, \"removeLocationUpdatesWithCallback callback is null\");\n            callback.error(Exceptions.toErrorJSON(ERR_EMPTY_CALLBACK));\n            method.sendLoggerEvent(getContext(), \"-1\");\n        }\n    }\n\n    public void handleResult(LocationResult locationResult) {\n        JSONObject params = LocationUtils.FROM_LOCATION_RESULT_TO_JSON_OBJECT.map(locationResult);\n        getEventSender().send(Constants.Event.LOCATION.getVal(), params);\n    }\n\n    public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) {\n        JSONObject json = PermissionUtils.HANDLE_PERMISSION_REQUEST_RESULT.map(requestCode, permissions, grantResults);\n        if (permissionResultCallback != null) {\n            permissionResultCallback.success(json);\n        } else {\n            Log.e(TAG, \"onRequestPermissionResult() :: permissionResultCallback is null\");\n        }\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        if (requestCode == PlatformUtils.RESOLUTION_REQUEST && resolutionCallback != null) {\n            resolutionCallback.success(LocationUtils.FROM_LOCATION_SETTINGS_RESULT_TO_JSON_OBJECT.map(\n                LocationSettingsStates.fromIntent(data)));\n            resolutionCallback = null;\n        }\n    }\n\n    @Override\n    public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {\n        onRequestPermissionResult(requestCode, permissions, grantResults);\n        return false;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/providers/GeocoderProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.providers;\n\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.location.GeocoderService;\nimport com.huawei.hms.location.GetFromLocationNameRequest;\nimport com.huawei.hms.location.GetFromLocationRequest;\nimport com.huawei.hms.location.LocationServices;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.logger.HMSLogger;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\nimport com.huawei.hms.rn.location.backend.utils.GeocoderUtils;\nimport com.huawei.hms.rn.location.backend.utils.LocationUtils;\nimport com.huawei.hms.rn.location.backend.utils.PlatformUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Locale;\n\npublic class GeocoderProvider extends HMSProvider {\n    private final static String TAG = GeocoderProvider.class.getSimpleName();\n\n    private GeocoderService geocoderService;\n\n    public GeocoderProvider(ReactApplicationContext ctx) {\n        super(ctx);\n    }\n\n    @Override\n    public JSONObject getConstants() throws JSONException {\n        return null;\n    }\n\n    public void getFromLocation(final JSONObject getFromLocationRequest, @Nullable JSONObject locale,\n        final HMSCallback callback) {\n        Log.i(TAG, \"getFromLocation start\");\n        HMSMethod method = new HMSMethod(\"getFromLocation\");\n\n        Locale mLocale = GeocoderUtils.FROM_JSON_OBJECT_TO_LOCALE.map(locale);\n\n        geocoderService = LocationServices.getGeocoderService(getContext(), mLocale);\n\n        final GetFromLocationRequest getFromLocationRequestObject\n            = GeocoderUtils.FROM_JSON_OBJECT_TO_GET_FROM_LOCATION_REQUEST.map(getFromLocationRequest);\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        geocoderService.getFromLocation(getFromLocationRequestObject)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_HW_LOCATION_LIST_TO_JSON_ARRAY))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        Log.i(TAG, \"getFromLocation end\");\n    }\n\n    public void getFromLocationName(final JSONObject getFromLocationNameRequest, @Nullable JSONObject locale,\n        final HMSCallback callback) {\n        Log.i(TAG, \"getFromLocationName start\");\n        HMSMethod method = new HMSMethod(\"getFromLocationName\");\n\n        Locale mLocale = GeocoderUtils.FROM_JSON_OBJECT_TO_LOCALE.map(locale);\n\n        geocoderService = LocationServices.getGeocoderService(getContext(), mLocale);\n\n        final GetFromLocationNameRequest getFromLocationNameRequestObject\n            = GeocoderUtils.FROM_JSON_OBJECT_TO_GET_FROM_LOCATION_NAME_REQUEST.map(getFromLocationNameRequest);\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        geocoderService.getFromLocationName(getFromLocationNameRequestObject)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                LocationUtils.FROM_HW_LOCATION_LIST_TO_JSON_ARRAY))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        Log.i(TAG, \"getFromLocationName end\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/providers/GeofenceProvider.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.providers;\n\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_NO_EXISTENT_REQUEST_ID;\n\nimport android.app.PendingIntent;\nimport android.util.Log;\n\nimport com.huawei.hms.location.GeofenceErrorCodes;\nimport com.huawei.hms.location.GeofenceRequest;\nimport com.huawei.hms.location.GeofenceService;\nimport com.huawei.hms.location.LocationServices;\nimport com.huawei.hms.rn.location.backend.helpers.Constants;\nimport com.huawei.hms.rn.location.backend.helpers.Exceptions;\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.logger.HMSLogger;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\nimport com.huawei.hms.rn.location.backend.utils.GeofenceUtils;\nimport com.huawei.hms.rn.location.backend.utils.PlatformUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\npublic class GeofenceProvider extends HMSProvider {\n    private final static String TAG = GeofenceProvider.class.getSimpleName();\n\n    private GeofenceService geofenceService;\n\n    public GeofenceProvider(ReactApplicationContext ctx) {\n        super(ctx);\n        this.geofenceService = LocationServices.getGeofenceService(ctx);\n    }\n\n    public JSONObject getConstants() throws JSONException {\n        return new JSONObject().put(\"GeofenceRequestConstants\",\n            new JSONObject().put(\"ENTER_INIT_CONVERSION\", GeofenceRequest.ENTER_INIT_CONVERSION)\n                .put(\"EXIT_INIT_CONVERSION\", GeofenceRequest.EXIT_INIT_CONVERSION)\n                .put(\"DWELL_INIT_CONVERSION\", GeofenceRequest.DWELL_INIT_CONVERSION)\n                .put(\"COORDINATE_TYPE_WGS_84\", GeofenceRequest.COORDINATE_TYPE_WGS_84)\n                .put(\"COORDINATE_TYPE_GCJ_02\", GeofenceRequest.COORDINATE_TYPE_GCJ_02))\n            .put(\"GeofenceConstants\", new JSONObject().put(\"ENTER_GEOFENCE_CONVERSION\",\n                com.huawei.hms.location.Geofence.ENTER_GEOFENCE_CONVERSION)\n                .put(\"EXIT_GEOFENCE_CONVERSION\", com.huawei.hms.location.Geofence.EXIT_GEOFENCE_CONVERSION)\n                .put(\"DWELL_GEOFENCE_CONVERSION\", com.huawei.hms.location.Geofence.DWELL_GEOFENCE_CONVERSION)\n                .put(\"GEOFENCE_NEVER_EXPIRE\", com.huawei.hms.location.Geofence.GEOFENCE_NEVER_EXPIRE))\n            .put(\"ErrorCodes\", new JSONObject().put(\"GEOFENCE_UNAVAILABLE\", GeofenceErrorCodes.GEOFENCE_UNAVAILABLE)\n                .put(\"GEOFENCE_NUMBER_OVER_LIMIT\", GeofenceErrorCodes.GEOFENCE_NUMBER_OVER_LIMIT)\n                .put(\"GEOFENCE_PENDINGINTENT_OVER_LIMIT\", GeofenceErrorCodes.GEOFENCE_PENDINGINTENT_OVER_LIMIT)\n                .put(\"GEOFENCE_INSUFFICIENT_PERMISSION\", GeofenceErrorCodes.GEOFENCE_INSUFFICIENT_PERMISSION)\n                .put(\"GEOFENCE_REQUEST_TOO_OFTEN\", GeofenceErrorCodes.GEOFENCE_REQUEST_TOO_OFTEN))\n            .put(\"Events\", new JSONObject().put(\"GEOFENCE\", Constants.Event.GEOFENCE.getVal()));\n    }\n\n    // @ExposedMethod\n    public void createGeofenceList(final int requestCode, final JSONArray geofences, final int initConversions,\n        final int coordinateType, final HMSCallback callback) {\n        Log.i(TAG, \"createGeofences start\");\n        HMSMethod method = new HMSMethod(\"createGeofenceList\", true);\n\n        final PendingIntent pendingIntent = buildPendingIntent(requestCode,\n            HMSBroadcastReceiver.getPackageAction(getContext(), HMSBroadcastReceiver.ACTION_HMS_GEOFENCE));\n        GeofenceRequest geofenceRequest = GeofenceUtils.FROM_JSON_ARRAY_TO_GEOFENCE.map(geofences, initConversions,\n            coordinateType);\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        geofenceService.createGeofenceList(geofenceRequest, pendingIntent)\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback,\n                PlatformUtils.keyValPair(\"requestCode\", requestCode)))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        Log.i(TAG, \"createGeofences end\");\n    }\n\n    // @ExposedMethod\n    public void deleteGeofenceList(int requestCode, final HMSCallback callback) {\n        Log.i(TAG, \"deleteGeofenceList start\");\n        HMSMethod method = new HMSMethod(\"deleteGeofenceList\", true);\n\n        if (!requests.containsKey(requestCode)) {\n            callback.error(Exceptions.toErrorJSON(ERR_NO_EXISTENT_REQUEST_ID));\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(method.getName());\n        geofenceService.deleteGeofenceList(requests.get(requestCode))\n            .addOnSuccessListener(PlatformUtils.successListener(method, getContext(), callback))\n            .addOnFailureListener(PlatformUtils.failureListener(method, getContext(), callback));\n        Log.i(TAG, \"deleteGeofenceList end\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/ActivityUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.mapperWrapper;\n\nimport com.huawei.hms.location.ActivityConversionData;\nimport com.huawei.hms.location.ActivityConversionInfo;\nimport com.huawei.hms.location.ActivityConversionRequest;\nimport com.huawei.hms.location.ActivityConversionResponse;\nimport com.huawei.hms.location.ActivityIdentificationData;\nimport com.huawei.hms.location.ActivityIdentificationResponse;\nimport com.huawei.hms.rn.location.backend.interfaces.Mapper;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\npublic class ActivityUtils {\n    public static final Mapper<JSONObject, ActivityConversionInfo> FROM_JSON_OBJECT_TO_ACTIVITY_CONVERSION_INFO\n        = mapperWrapper(\n        (JSONObject jo) -> new ActivityConversionInfo.Builder().setConversionType(jo.getInt(\"conversionType\"))\n            .setActivityType(jo.getInt(\"activityType\"))\n            .build());\n\n    public static final Mapper<ActivityIdentificationData, Object> FROM_ACTIVITY_IDENTIFICATION_DATA_TO_JSON_OBJECT\n        = mapperWrapper((ActivityIdentificationData obj) -> new JSONObject().put(\"possibility\", obj.getPossibility())\n        .put(\"identificationActivity\", obj.getIdentificationActivity()), new JSONObject());\n\n    private static final Mapper<ActivityConversionData, Object> FROM_ACTIVITY_CONVERSION_DATA_TO_JSON_OBJECT\n        = mapperWrapper((ActivityConversionData obj) -> new JSONObject().put(\"activityType\", obj.getActivityType())\n        .put(\"elapsedTimeFromReboot\", obj.getElapsedTimeFromReboot())\n        .put(\"conversionType\", obj.getConversionType()), new JSONObject());\n\n    public static final Mapper<JSONArray, ActivityConversionRequest> FROM_JSON_ARRAY_TO_ACTIVITY_CONVERSION_REQUEST\n        = mapperWrapper((JSONArray ja) -> new ActivityConversionRequest(\n        PlatformUtils.mapJSONArray(ja, ActivityUtils.FROM_JSON_OBJECT_TO_ACTIVITY_CONVERSION_INFO)));\n\n    public static final Mapper<ActivityIdentificationResponse, JSONObject>\n        FROM_ACTIVITY_IDENTIFICATION_RESPONSE_TO_JSON_OBJECT = mapperWrapper(\n        (ActivityIdentificationResponse response) -> new JSONObject().put(\"elapsedTimeFromReboot\",\n            (double) response.getElapsedTimeFromReboot())\n            .put(\"mostActivityIdentification\",\n                FROM_ACTIVITY_IDENTIFICATION_DATA_TO_JSON_OBJECT.map(response.getMostActivityIdentification()))\n            .put(\"activityIdentificationDatas\", PlatformUtils.mapList(response.getActivityIdentificationDatas(),\n                ActivityUtils.FROM_ACTIVITY_IDENTIFICATION_DATA_TO_JSON_OBJECT))\n            .put(\"time\", (double) response.getTime()), new JSONObject());\n\n    public static final Mapper<ActivityConversionResponse, JSONObject> FROM_ACTIVITY_CONVERSION_RESPONSE_TO_JSON_OBJECT\n        = mapperWrapper((ActivityConversionResponse response) -> new JSONObject().put(\"activityConversionDatas\",\n        PlatformUtils.mapList(response.getActivityConversionDatas(),\n            ActivityUtils.FROM_ACTIVITY_CONVERSION_DATA_TO_JSON_OBJECT)), new JSONObject());\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/GeocoderUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.mapperWrapper;\n\nimport com.huawei.hms.location.GetFromLocationNameRequest;\nimport com.huawei.hms.location.GetFromLocationRequest;\nimport com.huawei.hms.rn.location.backend.interfaces.Mapper;\n\nimport org.json.JSONObject;\n\nimport java.util.Locale;\n\npublic class GeocoderUtils {\n\n    public static final Mapper<JSONObject, GetFromLocationRequest> FROM_JSON_OBJECT_TO_GET_FROM_LOCATION_REQUEST\n        = mapperWrapper(\n        (JSONObject jo) -> new GetFromLocationRequest(jo.getDouble(\"latitude\"), jo.getDouble(\"longitude\"),\n            jo.getInt(\"maxResults\")));\n\n    public static final Mapper<JSONObject, GetFromLocationNameRequest>\n        FROM_JSON_OBJECT_TO_GET_FROM_LOCATION_NAME_REQUEST = mapperWrapper((JSONObject jo) -> {\n        GetFromLocationNameRequest request = new GetFromLocationNameRequest(jo.getString(\"locationName\"),\n            jo.optInt(\"maxResults\"));\n        request.setLowerLeftLatitude(jo.optDouble(\"lowerLeftLatitude\", 0.0));\n        request.setLowerLeftLongitude(jo.optDouble(\"lowerLeftLongitude\", 0.0));\n        request.setUpperRightLatitude(jo.optDouble(\"upperRightLatitude\", 0.0));\n        request.setUpperRightLongitude(jo.optDouble(\"upperRightLongitude\", 0.0));\n        return request;\n    });\n\n    public static final Mapper<JSONObject, Locale> FROM_JSON_OBJECT_TO_LOCALE = mapperWrapper(\n        (JSONObject jo) -> new Locale(jo.getString(\"language\"), jo.optString(\"country\", \"\"),\n            jo.optString(\"variant\", \"\")));\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/GeofenceUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.mapperWrapper;\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.triMapperWrapper;\n\nimport com.huawei.hms.location.Geofence;\nimport com.huawei.hms.location.GeofenceData;\nimport com.huawei.hms.location.GeofenceErrorCodes;\nimport com.huawei.hms.location.GeofenceRequest;\nimport com.huawei.hms.rn.location.backend.interfaces.Mapper;\nimport com.huawei.hms.rn.location.backend.interfaces.TriMapper;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\npublic class GeofenceUtils {\n    public static final Mapper<JSONObject, Geofence> FROM_JSON_OBJECT_TO_GEOFENCE = mapperWrapper(\n        (JSONObject jo) -> new Geofence.Builder().setRoundArea(jo.getDouble(\"latitude\"), jo.getDouble(\"longitude\"),\n            (float) jo.getDouble(\"radius\"))\n            .setUniqueId(jo.getString(\"uniqueId\"))\n            .setConversions(jo.getInt(\"conversions\"))\n            .setValidContinueTime((long) jo.optDouble(\"validContinueTime\", -1))\n            .setDwellDelayTime(jo.optInt(\"dwellDelayTime\", -1))\n            .setNotificationInterval(jo.optInt(\"notificationInterval\", 0))\n            .build());\n\n    public static final Mapper<Geofence, Object> FROM_GEOFENCE_TO_JSON_OBJECT = mapperWrapper(\n        (Geofence obj) -> new JSONObject().put(\"uniqueId\", obj.getUniqueId()), new JSONObject());\n\n    public static final TriMapper<JSONArray, Integer, Integer, GeofenceRequest> FROM_JSON_ARRAY_TO_GEOFENCE\n        = triMapperWrapper(\n        (arrayGeofences, initConversions, coordinateType) -> new GeofenceRequest.Builder().createGeofenceList(\n            PlatformUtils.mapJSONArray(arrayGeofences, GeofenceUtils.FROM_JSON_OBJECT_TO_GEOFENCE))\n            .setInitConversions(initConversions)\n            .setCoordinateType(coordinateType)\n            .build());\n\n    public static final Mapper<GeofenceData, JSONObject> FROM_GEOFENCE_DATA_TO_JSON_OBJECT = mapperWrapper(\n        (GeofenceData obj) -> new JSONObject().put(\"convertingGeofenceList\",\n            PlatformUtils.mapList(obj.getConvertingGeofenceList(), GeofenceUtils.FROM_GEOFENCE_TO_JSON_OBJECT))\n            .put(\"conversion\", obj.getConversion())\n            .put(\"convertingLocation\", LocationUtils.FROM_LOCATION_TO_JSON_OBJECT.map(obj.getConvertingLocation()))\n            .put(\"errorCode\", obj.getErrorCode())\n            .put(\"errorMessage\", GeofenceErrorCodes.getErrorMessage(obj.getErrorCode())), new JSONObject());\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/LocationUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.helpers.Constants.DEFAULT_DEF_TYPE;\nimport static com.huawei.hms.rn.location.backend.helpers.Constants.DEFAULT_RESOURCE_NAME;\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_NO_FUSED_LOCATION_PROVIDER;\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_NO_PERMISSION;\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.GE_OREO;\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.mapperWrapper;\n\nimport android.app.Notification;\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.location.Location;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.huawei.hms.location.FusedLocationProviderClient;\nimport com.huawei.hms.location.HWLocation;\nimport com.huawei.hms.location.LocationAvailability;\nimport com.huawei.hms.location.LocationRequest;\nimport com.huawei.hms.location.LocationResult;\nimport com.huawei.hms.location.LocationSettingsRequest;\nimport com.huawei.hms.location.LocationSettingsResponse;\nimport com.huawei.hms.location.LocationSettingsStates;\nimport com.huawei.hms.location.LogConfig;\nimport com.huawei.hms.location.NavigationResult;\nimport com.huawei.hms.rn.location.backend.helpers.Exceptions;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.interfaces.Mapper;\nimport com.huawei.hms.support.api.entity.location.coordinate.LonLat;\n\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport org.json.JSONObject;\n\nimport java.io.IOException;\nimport java.util.List;\nimport java.util.Locale;\n\npublic class LocationUtils {\n    private static final String TAG = LocationUtils.class.getSimpleName();\n\n    public static final Mapper<JSONObject, LocationRequest> FROM_JSON_OBJECT_TO_LOCATION_REQUEST = mapperWrapper(\n        (JSONObject jo) -> LocationRequest.create()\n            .setPriority(jo.optInt(\"priority\", LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY))\n            .setInterval((long) jo.optDouble(\"interval\", 3600000L))\n            .setNumUpdates(jo.optInt(\"numUpdates\", Integer.MAX_VALUE))\n            .setFastestInterval((long) jo.optDouble(\"fastestInterval\", 600000L))\n            .setExpirationDuration((long) jo.optDouble(\"expirationTimeDuration\", Long.MAX_VALUE))\n            .setExpirationTime((long) jo.optDouble(\"expirationTime\", Long.MAX_VALUE))\n            .setSmallestDisplacement((float) jo.optDouble(\"smallestDisplacement\", 0))\n            .setMaxWaitTime((long) jo.optDouble(\"maxWaitTime\", 0L))\n            .setNeedAddress(jo.optBoolean(\"needAddress\", false))\n            .setLanguage(jo.optString(\"language\", \"EN\"))\n            .setCountryCode(jo.optString(\"countryCode\", \"\"))\n            .setCoordinateType(jo.optInt(\"coordinateType\", 0)));\n\n    public static final Mapper<JSONObject, LocationSettingsRequest> FROM_JSON_OBJECT_TO_LOCATION_SETTINGS_REQUEST\n        = mapperWrapper((JSONObject jo) -> new LocationSettingsRequest.Builder().addAllLocationRequests(\n        PlatformUtils.mapJSONArray(jo.getJSONArray(\"locationRequests\"), FROM_JSON_OBJECT_TO_LOCATION_REQUEST))\n        .setAlwaysShow(jo.optBoolean(\"alwaysShow\"))\n        .setNeedBle(jo.optBoolean(\"needBle\"))\n        .build());\n\n    public static final Mapper<LocationResult, JSONObject> FROM_LOCATION_RESULT_TO_JSON_OBJECT = mapperWrapper(\n        (LocationResult obj) -> new JSONObject().put(\"lastHWLocation\",\n            LocationUtils.FROM_HW_LOCATION_TO_JSON_OBJECT.map(obj.getLastHWLocation()))\n            .put(\"lastLocation\", LocationUtils.FROM_LOCATION_TO_JSON_OBJECT.map(obj.getLastLocation()))\n            .put(\"locations\", PlatformUtils.mapList(obj.getLocations(), LocationUtils.FROM_LOCATION_TO_JSON_OBJECT))\n            .put(\"hwLocationList\",\n                PlatformUtils.mapList(obj.getHWLocationList(), LocationUtils.FROM_HW_LOCATION_TO_JSON_OBJECT)),\n        new JSONObject());\n\n    public static final Mapper<Location, Object> FROM_LOCATION_TO_JSON_OBJECT = mapperWrapper(\n        (Location obj) -> new JSONObject().put(\"latitude\", obj.getLatitude())\n            .put(\"longitude\", obj.getLongitude())\n            .put(\"altitude\", obj.getAltitude())\n            .put(\"speed\", obj.getSpeed())\n            .put(\"bearing\", obj.getBearing())\n            .put(\"accuracy\", obj.getAccuracy())\n            .put(\"time\", obj.getTime())\n            .put(\"fromMockProvider\", obj.isFromMockProvider())\n            .put(\"verticalAccuracyMeters\", GE_OREO ? obj.getVerticalAccuracyMeters() : 0.0)\n            .put(\"bearingAccuracyDegrees\", GE_OREO ? obj.getBearingAccuracyDegrees() : 0.0)\n            .put(\"speedAccuracyMetersPerSecond\", GE_OREO ? obj.getSpeedAccuracyMetersPerSecond() : 0.0),\n        new JSONObject());\n\n    public static final Mapper<List<HWLocation>, Object> FROM_HW_LOCATION_LIST_TO_JSON_ARRAY = mapperWrapper(\n        (List<HWLocation> obj) -> PlatformUtils.mapList(obj, LocationUtils.FROM_HW_LOCATION_TO_JSON_OBJECT));\n\n    public static final Mapper<HWLocation, Object> FROM_HW_LOCATION_TO_JSON_OBJECT = mapperWrapper(\n        (HWLocation obj) -> new JSONObject().put(\"latitude\", obj.getLatitude())\n            .put(\"longitude\", obj.getLongitude())\n            .put(\"altitude\", obj.getAltitude())\n            .put(\"speed\", obj.getSpeed())\n            .put(\"bearing\", obj.getBearing())\n            .put(\"accuracy\", obj.getAccuracy())\n            .put(\"provider\", obj.getProvider())\n            .put(\"time\", obj.getTime())\n            .put(\"elapsedRealtimeNanos\", obj.getElapsedRealtimeNanos())\n            .put(\"countryCode\", obj.getCountryCode())\n            .put(\"countryName\", obj.getCountryName())\n            .put(\"state\", obj.getState())\n            .put(\"city\", obj.getCity())\n            .put(\"county\", obj.getCounty())\n            .put(\"street\", obj.getStreet())\n            .put(\"featureName\", obj.getFeatureName())\n            .put(\"postalCode\", obj.getPostalCode())\n            .put(\"phone\", obj.getPhone())\n            .put(\"url\", obj.getUrl())\n            .put(\"extraInfo\", PlatformUtils.fromMapToJSONObject(obj.getExtraInfo()))\n            .put(\"coordinateType\", obj.getCoordinateType())\n            .put(\"verticalAccuracyMeters\", GE_OREO ? obj.getVerticalAccuracyMeters() : 0.0)\n            .put(\"bearingAccuracyDegrees\", GE_OREO ? obj.getBearingAccuracyDegrees() : 0.0)\n            .put(\"speedAccuracyMetersPerSecond\", GE_OREO ? obj.getSpeedAccuracyMetersPerSecond() : 0.0),\n        new JSONObject());\n\n    public static final Mapper<LocationSettingsStates, JSONObject> FROM_LOCATION_SETTINGS_STATES_TO_JSON_OBJECT\n        = mapperWrapper((LocationSettingsStates obj) -> new JSONObject().put(\"isBlePresent\", obj.isBlePresent())\n        .put(\"isBleUsable\", obj.isBleUsable())\n        .put(\"isGpsPresent\", obj.isGpsPresent())\n        .put(\"isGpsUsable\", obj.isGpsUsable())\n        .put(\"isGnssPresent\", obj.isGnssPresent())\n        .put(\"isGnssUsable\", obj.isGnssUsable())\n        .put(\"isLocationPresent\", obj.isLocationPresent())\n        .put(\"isLocationUsable\", obj.isLocationUsable())\n        .put(\"isNetworkLocationPresent\", obj.isNetworkLocationPresent())\n        .put(\"isNetworkLocationUsable\", obj.isNetworkLocationUsable())\n        .put(\"isHMSLocationPresent\", obj.isHMSLocationPresent())\n        .put(\"isHMSLocationUsable\", obj.isHMSLocationUsable()), new JSONObject());\n\n    public static final Mapper<LocationAvailability, Object> FROM_LOCATION_AVAILABILITY_TO_JSON_OBJECT = mapperWrapper(\n        (LocationAvailability obj) -> new JSONObject().put(\"isLocationAvailable\", obj.isLocationAvailable()));\n\n    public static final Mapper<LocationSettingsStates, JSONObject> FROM_LOCATION_SETTINGS_RESULT_TO_JSON_OBJECT\n        = mapperWrapper((LocationSettingsStates obj) -> new JSONObject().put(\"locationSettingsStates\",\n        FROM_LOCATION_SETTINGS_STATES_TO_JSON_OBJECT.map(obj)));\n\n    public static final Mapper<LocationSettingsResponse, Object> FROM_LOCATION_SETTINGS_STATES_RESPONSE_TO_JSON_OBJECT\n        = mapperWrapper((LocationSettingsResponse obj) -> new JSONObject().put(\"locationSettingsStates\",\n        FROM_LOCATION_SETTINGS_STATES_TO_JSON_OBJECT.map(obj.getLocationSettingsStates())));\n\n    public static final Mapper<NavigationResult, Object> FROM_NAVIGATION_RESULT_TO_JSON_OBJECT = mapperWrapper(\n        (NavigationResult obj) -> new JSONObject().put(\"state\", obj.getState())\n            .put(\"possibility\", obj.getPossibility()), new JSONObject());\n\n    public static final Mapper<JSONObject, LogConfig> FROM_JSON_OBJECT_TO_LOG_CONFIG = mapperWrapper(\n        (JSONObject jo) -> new LogConfig(jo.optString(\"logPath\"), jo.optInt(\"fileSize\"), jo.optInt(\"fileNum\"),\n            jo.optInt(\"fileExpiredTime\")));\n\n    public static final Mapper<LogConfig, JSONObject> FROM_LOG_CONFIG_TO_JSON_OBJECT = mapperWrapper(\n        (LogConfig obj) -> new JSONObject().put(\"logPath\", obj.getLogPath())\n            .put(\"fileSize\", obj.getFileSize())\n            .put(\"fileNum\", obj.getFileNum())\n            .put(\"fileExpiredTime\", obj.getFileExpiredTime()));\n\n    public static final Mapper<LonLat, JSONObject> FROM_LON_LAT_TO_JSON = mapperWrapper(\n        (LonLat lonLat) -> new JSONObject()\n            .put(\"latitude\", lonLat.getLatitude())\n            .put(\"longitude\", lonLat.getLongitude()));\n\n    public static void fillNotificationBuilder(Context context, Notification.Builder builder, ReadableMap readableMap) {\n        if (readableMap.hasKey(\"contentTitle\")) {\n            builder = builder.setContentTitle(readableMap.getString(\"contentTitle\"));\n            Log.i(TAG, readableMap.getString(\"contentTitle\"));\n        }\n        if (readableMap.hasKey(\"color\")) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                builder = builder.setColor(readableMap.getInt(\"color\"));\n            }\n        }\n        if (readableMap.hasKey(\"colorized\")) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                builder = builder.setColorized(readableMap.getBoolean(\"colorized\"));\n            }\n        }\n        if (readableMap.hasKey(\"contentInfo\")) {\n            builder = builder.setContentInfo(readableMap.getString(\"contentInfo\"));\n        }\n        if (readableMap.hasKey(\"contentText\")) {\n            builder = builder.setContentText(readableMap.getString(\"contentText\"));\n        }\n        if (readableMap.hasKey(\"smallIcon\")) {\n            int resourceId = context.getResources()\n                .getIdentifier(readableMap.getString(\"smallIcon\"), \"drawable\", context.getPackageName());\n            builder = builder.setSmallIcon(resourceId);\n        } else {\n            builder.setSmallIcon(context.getResources()\n                .getIdentifier(DEFAULT_RESOURCE_NAME, DEFAULT_DEF_TYPE, context.getPackageName()));\n        }\n        if (readableMap.hasKey(\"largeIcon\")) {\n            Bitmap bitmap = null;\n            try {\n                bitmap = BitmapFactory.decodeStream(context.getAssets().open(readableMap.getString(\"largeIcon\")));\n            } catch (IOException | OutOfMemoryError e) {\n                Log.d(TAG, e.getLocalizedMessage());\n            }\n            builder = builder.setLargeIcon(bitmap);\n        }\n        if (readableMap.hasKey(\"sound\")) {\n            String sourceName = readableMap.getString(\"sound\");\n            int resourceId = context.getResources().getIdentifier(sourceName, \"raw\", context.getPackageName());\n            Uri soundUri = Uri.parse(\n                String.format(Locale.ENGLISH, \"android.resource://%s/%s\", context.getPackageName(), resourceId));\n            builder = builder.setSound(soundUri);\n        }\n        if (readableMap.hasKey(\"onGoing\")) {\n            builder = builder.setOngoing(readableMap.getBoolean(\"onGoing\"));\n        }\n        if (readableMap.hasKey(\"subText\")) {\n            builder = builder.setSubText(readableMap.getString(\"subText\"));\n        }\n        if (readableMap.hasKey(\"vibrate\")) {\n            ReadableArray patternRA = readableMap.getArray(\"vibrate\");\n            int length = patternRA.size();\n            long[] pattern = new long[length];\n            for (int i = 0; i < length; i++) {\n                pattern[i] = (long) patternRA.getDouble(i);\n            }\n            builder = builder.setVibrate(pattern);\n        }\n        if (readableMap.hasKey(\"visibility\")) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                builder = builder.setVisibility(readableMap.getInt(\"visibility\"));\n            }\n        }\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            builder.setOngoing(true)\n                .setPriority(readableMap.getInt(\"priority\"))\n                .setCategory(readableMap.getString(\"category\"));\n        }\n    }\n\n    public static boolean checkForObstacles(HMSProvider provider, FusedLocationProviderClient fused,\n        final HMSCallback callback) {\n        if (!PermissionUtils.hasLocationPermission(provider)) {\n            Log.i(TAG, \"checkForObstacles -> no permissions\");\n            if (callback != null) {\n                callback.error(Exceptions.toErrorJSON(ERR_NO_PERMISSION));\n            }\n            return true;\n        }\n\n        if (fused == null) {\n            Log.i(TAG, \"checkForObstacles -> fusedLocationProviderClient is null\");\n            if (callback != null) {\n                callback.error(Exceptions.toErrorJSON(ERR_NO_FUSED_LOCATION_PROVIDER));\n            }\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/PermissionUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.utils.PlatformUtils.triMapperWrapper;\n\nimport android.Manifest;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\nimport com.huawei.hms.rn.location.backend.interfaces.TriMapper;\n\nimport org.json.JSONObject;\n\npublic class PermissionUtils {\n    private static final String TAG = PermissionUtils.class.getSimpleName();\n\n    private static int REQUEST_LOCATION_P = 501;\n\n    private static int REQUEST_LOCATION = 502;\n\n    private static int REQUEST_ACTIVITY_P = 503;\n\n    private static int REQUEST_ACTIVITY = 504;\n\n    public static boolean hasLocationPermission(HMSProvider provider) {\n        boolean fineLoc = provider.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION);\n        boolean coarseLoc = provider.hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION);\n\n        boolean result = fineLoc || coarseLoc;\n\n        if (!result || Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            boolean accessBackgroundLocation = provider.hasPermission(\"android.permission.ACCESS_BACKGROUND_LOCATION\");\n            result = result || accessBackgroundLocation;\n        }\n        return result;\n    }\n\n    public static boolean hasActivityRecognitionPermission(HMSProvider provider) {\n        return (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P && provider.hasPermission(\n            \"com.huawei.hms.permission\" + \".ACTIVITY_RECOGNITION\")) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P\n            && provider.hasPermission(\"android\" + \".permission.ACTIVITY_RECOGNITION\"));\n    }\n\n    public static void requestActivityRecognitionPermission(HMSProvider provider) {\n        Log.d(TAG, \"requestActivityRecognitionPermission start\");\n\n        if (hasActivityRecognitionPermission(provider)) {\n            Log.d(TAG, \"requestActivityRecognitionPermission -> already have the permissions\");\n        }\n\n        Log.d(TAG, \"requestActivityRecognitionPermission -> apply permission\");\n    }\n\n    public static final TriMapper<Integer, String[], int[], JSONObject> HANDLE_PERMISSION_REQUEST_RESULT\n        = triMapperWrapper((requestCode, permissions, grantResults) -> {\n        JSONObject json = new JSONObject();\n        if (requestCode.equals(REQUEST_LOCATION) || requestCode.equals(REQUEST_LOCATION_P)) {\n            json.put(\"granted\", grantResults[0] == 0);\n            json.put(\"fineLocation\", grantResults[0] == 0);\n            json.put(\"coarseLocation\", grantResults[1] == 0);\n\n            if (requestCode.equals(REQUEST_LOCATION)) {\n                json.put(\"backgroundLocation\", grantResults[2] == 0);\n            }\n        } else if (requestCode.equals(REQUEST_ACTIVITY) || requestCode.equals(REQUEST_ACTIVITY_P)) {\n            json.put(\"granted\", grantResults[0] == 0);\n            json.put(\"activityRecognition\", grantResults[0] == 0);\n        }\n\n        return json;\n    }, new JSONObject());\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/backend/utils/PlatformUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.backend.utils;\n\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_GENERIC;\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_NULL_VALUE;\nimport static com.huawei.hms.rn.location.backend.helpers.Exceptions.ERR_RESOLUTION_FAILED;\n\nimport android.content.IntentSender;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.common.ResolvableApiException;\nimport com.huawei.hms.location.LocationSettingsStatusCodes;\nimport com.huawei.hms.rn.location.backend.helpers.Exceptions;\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\nimport com.huawei.hms.rn.location.backend.interfaces.JSONMapper;\nimport com.huawei.hms.rn.location.backend.interfaces.JSONTriMapper;\nimport com.huawei.hms.rn.location.backend.interfaces.Mapper;\nimport com.huawei.hms.rn.location.backend.interfaces.TriMapper;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\npublic class PlatformUtils {\n    private final static String TAG = PlatformUtils.class.getSimpleName();\n\n    public static final boolean GE_OREO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;\n\n    public static final int RESOLUTION_REQUEST = 0;\n\n    public static <T> JSONObject keyValPair(String key, T val) {\n        JSONObject map = new JSONObject();\n        try {\n            map.put(key, val);\n        } catch (JSONException e) {\n            Log.d(TAG, \"JSONException :: \" + e.getMessage());\n        }\n        return map;\n    }\n\n    public static JSONObject fromMapToJSONObject(Map<String, Object> map) {\n        JSONObject writableMap = new JSONObject();\n        if (map == null) {\n            return writableMap;\n        }\n\n        try {\n            for (Map.Entry<String, Object> entry : map.entrySet()) {\n                writableMap.put(entry.getKey(), entry.getValue().toString());\n            }\n        } catch (JSONException e) {\n            Log.d(TAG, \"JSONException :: \" + e.getMessage());\n        }\n        return writableMap;\n    }\n\n    public static <R> List<R> mapJSONArray(JSONArray array, Mapper<JSONObject, R> mapper) {\n        List<R> list = new ArrayList<>();\n        try {\n            for (int i = 0; i < array.length(); i++) {\n                list.add(mapper.map(array.getJSONObject(i)));\n            }\n        } catch (JSONException e) {\n            Log.d(TAG, \"JSONException :: \" + e.getMessage());\n        }\n        return list;\n    }\n\n    public static <T> JSONArray mapList(List<T> list, Mapper<T, Object> mapper) {\n        JSONArray array = new JSONArray();\n        for (T item : list) {\n            array.put(mapper.map(item));\n        }\n        return array;\n    }\n\n    public static <T> OnSuccessListener<T> successListener(HMSMethod method, ReactApplicationContext context,\n        HMSCallback callback) {\n        return value -> {\n            Log.d(TAG, \"successListener()\");\n            method.sendLoggerEvent(context);\n            callback.success();\n        };\n    }\n\n    public static <T> OnSuccessListener<T> successListener(HMSMethod method, ReactApplicationContext context,\n        HMSCallback callback, Mapper<T, Object> mapper) {\n        return value -> {\n            Log.d(TAG, \"successListener()\");\n            if (value == null) {\n                Log.e(TAG, \"Value is null.\");\n                callback.error(Exceptions.toErrorJSON(ERR_NULL_VALUE));\n                method.sendLoggerEvent(context, \"-1\");\n                return;\n            }\n\n            method.sendLoggerEvent(context);\n\n            if (mapper.map(value) instanceof JSONObject) {\n                callback.success((JSONObject) mapper.map(value));\n            } else if (mapper.map(value) instanceof JSONArray) {\n                callback.success((JSONArray) mapper.map(value));\n            }\n        };\n    }\n\n    public static <T> OnSuccessListener<T> successListener(HMSMethod method, ReactApplicationContext context,\n        HMSCallback callback, JSONObject json) {\n        return value -> {\n            Log.d(TAG, \"successListener()\");\n            method.sendLoggerEvent(context);\n            callback.success(json);\n        };\n    }\n\n    public static OnFailureListener failureListener(HMSMethod method, ReactApplicationContext context,\n        HMSCallback callback) {\n        return e -> {\n            Log.d(TAG, \"failureListener() :: \" + e.getMessage());\n\n            JSONObject genericEx = Exceptions.toErrorJSON(ERR_GENERIC, e);\n            if (!(e instanceof ApiException)) {\n                Log.d(TAG, \">> not an api exception\");\n                method.sendLoggerEvent(context, \"-1\");\n                callback.error(genericEx);\n                return;\n            }\n\n            int statusCode = ((ApiException) e).getStatusCode();\n            if (statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED) {\n                if (!(e instanceof ResolvableApiException)) {\n                    Log.d(TAG, \">> not an resolvable api exception\");\n                    method.sendLoggerEvent(context, String.valueOf(statusCode));\n                    callback.error(genericEx);\n                    return;\n                }\n\n                try {\n                    // callback will be used after resolution\n                    ((ResolvableApiException) e).startResolutionForResult(context.getCurrentActivity(),\n                        RESOLUTION_REQUEST);\n                    method.sendLoggerEvent(context, String.valueOf(statusCode));\n                } catch (IntentSender.SendIntentException ex) {\n                    Log.e(TAG, \">> \" + ex.getMessage());\n                    method.sendLoggerEvent(context, String.valueOf(statusCode));\n                    callback.error(Exceptions.toErrorJSON(ERR_RESOLUTION_FAILED));\n                }\n            } else {\n                method.sendLoggerEvent(context, String.valueOf(statusCode));\n                callback.error(genericEx);\n            }\n        };\n    }\n\n    public static <T, R> Mapper<T, R> mapperWrapper(JSONMapper<T, R> jm) {\n        return mapperWrapper(jm, null);\n    }\n\n    public static <T, R> Mapper<T, R> mapperWrapper(JSONMapper<T, R> jm, R def) {\n        return arg -> {\n            if (arg == null) {\n                return null;\n            }\n\n            try {\n                return jm.map(arg);\n            } catch (JSONException | NullPointerException e) {\n                Log.e(TAG, \"wrapper :: JSONException, \" + e.getMessage());\n                return def;\n            }\n        };\n    }\n\n    public static <T, U, V, R> TriMapper<T, U, V, R> triMapperWrapper(JSONTriMapper<T, U, V, R> jtm) {\n        return triMapperWrapper(jtm, null);\n    }\n\n    public static <T, U, V, R> TriMapper<T, U, V, R> triMapperWrapper(JSONTriMapper<T, U, V, R> jtm, R def) {\n        return (arg1, arg2, arg3) -> {\n            if (arg1 == null || arg2 == null || arg3 == null) {\n                return null;\n            }\n\n            try {\n                return jtm.run(arg1, arg2, arg3);\n            } catch (JSONException | NullPointerException e) {\n                Log.e(TAG, \"wrapper :: JSONException, \" + e.getMessage());\n                return def;\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/helpers/RNCallback.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.helpers;\n\nimport com.huawei.hms.rn.location.backend.interfaces.HMSCallback;\n\nimport com.facebook.react.bridge.Promise;\n\nimport org.json.JSONArray;\nimport org.json.JSONObject;\n\npublic class RNCallback implements HMSCallback {\n    private Promise promise;\n\n    public static RNCallback fromPromise(Promise promise) {\n        return new RNCallback(promise);\n    }\n\n    private RNCallback(Promise promise) {\n        this.promise = promise;\n    }\n\n    @Override\n    public void success() {\n        promise.resolve(true);\n    }\n\n    @Override\n    public void success(JSONObject json) {\n        promise.resolve(ReactUtils.toWM(json));\n    }\n\n    @Override\n    public void success(JSONArray jsonArray) {\n        promise.resolve(ReactUtils.toWA(jsonArray));\n    }\n\n    @Override\n    public void error(JSONObject json) {\n        promise.reject(json.toString());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/helpers/ReactUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.helpers;\n\nimport android.util.Log;\n\nimport com.huawei.hms.rn.location.backend.interfaces.HMSProvider;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.Map;\n\npublic class ReactUtils {\n    private static String TAG = ReactUtils.class.getSimpleName();\n\n    public static <T extends HMSProvider> T initializeProvider(T provider, ReactApplicationContext ctx) {\n        provider.setEventSender((eventName, eventValue) -> ReactUtils.sendEvent(ctx, eventName, toWM(eventValue)));\n        return provider;\n    }\n\n    public static Map<String, Object> getConstants(HMSProvider provider) {\n        try {\n            return toMap(provider.getConstants());\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n            return new HashMap<>();\n        }\n    }\n\n    public static WritableMap toWM(JSONObject json) {\n        WritableMap map = Arguments.createMap();\n\n        Iterator<String> iterator = json.keys();\n        while (iterator.hasNext()) {\n            Object value = null;\n            String key = iterator.next();\n\n            try {\n                value = json.get(key);\n            } catch (JSONException ex) {\n                Log.e(TAG, \"JSONEx :: \" + ex.getMessage());\n            }\n\n            if (value instanceof JSONObject) {\n                map.putMap(key, toWM((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, toWA((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                if (value != null) {\n                    map.putString(key, value.toString());\n                }\n            }\n        }\n        return map;\n    }\n\n    public static WritableArray toWA(JSONArray json) {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < json.length(); i++) {\n            Object value = null;\n            try {\n                value = json.get(i);\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n            }\n\n            if (value instanceof JSONObject) {\n                array.pushMap(toWM((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(toWA((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                if (value != null) {\n                    array.pushString(value.toString());\n                }\n            }\n        }\n        return array;\n    }\n\n    public static JSONArray toJA(ReadableArray array) {\n        JSONArray json = new JSONArray();\n        try {\n            for (int i = 0; i < array.size(); i++) {\n                switch (array.getType(i)) {\n                    case Boolean:\n                        json.put(array.getBoolean(i));\n                        break;\n                    case Number:\n                        json.put(array.getDouble(i));\n                        break;\n                    case String:\n                        json.put(array.getString(i));\n                        break;\n                    case Map:\n                        json.put(toJO(array.getMap(i)));\n                        break;\n                    case Array:\n                        json.put(toJA(array.getArray(i)));\n                        break;\n                    default:\n                        break;\n                }\n            }\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n        }\n        return json;\n    }\n\n    public static JSONObject toJO(ReadableMap map) {\n        JSONObject object = new JSONObject();\n\n        ReadableMapKeySetIterator iterator = map.keySetIterator();\n        try {\n            while (iterator.hasNextKey()) {\n                String key = iterator.nextKey();\n                switch (map.getType(key)) {\n                    case Null:\n                        object.put(key, JSONObject.NULL);\n                        break;\n                    case Boolean:\n                        object.put(key, map.getBoolean(key));\n                        break;\n                    case Number:\n                        object.put(key, map.getDouble(key));\n                        break;\n                    case String:\n                        object.put(key, map.getString(key));\n                        break;\n                    case Map:\n                        object.put(key, toJO(map.getMap(key)));\n                        break;\n                    case Array:\n                        object.put(key, toJA(map.getArray(key)));\n                        break;\n                    default:\n                        break;\n                }\n            }\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n        }\n        return object;\n    }\n\n    public static Map<String, Object> toMap(JSONObject json) {\n        Map<String, Object> map = new HashMap<>();\n\n        Iterator<String> iterator = json.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = null;\n            try {\n                value = json.get(key);\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n            }\n\n            if (value instanceof JSONObject) {\n                map.put(key, toMap((JSONObject) value));\n            } else {\n                map.put(key, value);\n            }\n        }\n        return map;\n    }\n\n    public static void sendEvent(ReactContext reactContext, String eventName, ReadableMap params) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/modules/RNActivityIdentificationModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.modules;\n\nimport static com.huawei.hms.rn.location.helpers.RNCallback.fromPromise;\nimport static com.huawei.hms.rn.location.helpers.ReactUtils.toJA;\n\nimport com.huawei.hms.rn.location.backend.providers.ActivityIdentificationProvider;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\nimport java.util.Map;\n\npublic class RNActivityIdentificationModule extends ReactContextBaseJavaModule {\n    private ActivityIdentificationProvider provider;\n\n    public RNActivityIdentificationModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        provider = ReactUtils.initializeProvider(new ActivityIdentificationProvider(reactContext), reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSActivityIdentification\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return ReactUtils.getConstants(provider);\n    }\n\n    @ReactMethod\n    public void createActivityConversionUpdates(final int requestCode,\n        final ReadableArray activityConversionRequestArray, final Promise promise) {\n        provider.createActivityConversionUpdates(requestCode, toJA(activityConversionRequestArray),\n            fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void createActivityIdentificationUpdates(final int requestCode, double intervalMillis,\n        final Promise promise) {\n        provider.createActivityIdentificationUpdates(requestCode, intervalMillis, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void deleteActivityConversionUpdates(final int requestCode, final Promise promise) {\n        provider.deleteActivityConversionUpdates(requestCode, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void deleteActivityIdentificationUpdates(final int requestCode, final Promise promise) {\n        provider.deleteActivityIdentificationUpdates(requestCode, fromPromise(promise));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/modules/RNFusedLocationModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.modules;\n\nimport static com.huawei.hms.rn.location.helpers.RNCallback.fromPromise;\nimport static com.huawei.hms.rn.location.helpers.ReactUtils.toJO;\n\nimport android.app.Activity;\nimport android.content.Intent;\n\nimport com.huawei.hms.rn.location.backend.providers.FusedLocationProvider;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.Map;\n\npublic class RNFusedLocationModule extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private FusedLocationProvider provider;\n\n    public RNFusedLocationModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        reactContext.addActivityEventListener(this);\n        provider = ReactUtils.initializeProvider(new FusedLocationProvider(reactContext), reactContext);\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return ReactUtils.getConstants(provider);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSFusedLocation\";\n    }\n\n    @ReactMethod\n    public void enableBackgroundLocation(final int id, final ReadableMap notification, final Promise promise) {\n        provider.enableBackgroundLocation(id, notification, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void disableBackgroundLocation(final Promise promise) {\n        provider.disableBackgroundLocation(fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void setLogConfig(final ReadableMap LogConfig, final Promise promise) {\n        provider.setLogConfig(toJO(LogConfig), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getLogConfig(final Promise promise) {\n        provider.getLogConfig(fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void flushLocations(final Promise promise) {\n        provider.flushLocations(fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void checkLocationSettings(final ReadableMap locationRequestMap, final Promise promise) {\n        provider.checkLocationSettings(toJO(locationRequestMap), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getNavigationContextState(final int requestType, final Promise promise) {\n        provider.getNavigationContextState(requestType, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getLastLocation(final Promise promise) {\n        provider.getLastLocation(fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getLastLocationWithAddress(final ReadableMap map, final Promise promise) {\n        provider.getLastLocationWithAddress(toJO(map), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getLocationAvailability(final Promise promise) {\n        provider.getLocationAvailability(fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void setMockLocation(ReadableMap map, final Promise promise) {\n        provider.setMockLocation(toJO(map), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void setMockMode(final boolean shouldMock, final Promise promise) {\n        provider.setMockMode(shouldMock, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void requestLocationUpdates(final int requestCode, final ReadableMap readableMap, final Promise promise) {\n        provider.requestLocationUpdates(requestCode, toJO(readableMap), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void removeLocationUpdates(final int requestCode, final Promise promise) {\n        provider.removeLocationUpdates(requestCode, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void requestLocationUpdatesWithCallback(final ReadableMap readableMap, final Promise promise) {\n        provider.requestLocationUpdatesWithCallback(toJO(readableMap), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void requestLocationUpdatesWithCallbackEx(final ReadableMap readableMap, final Promise promise) {\n        provider.requestLocationUpdatesWithCallbackEx(toJO(readableMap), fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void removeLocationUpdatesWithCallback(final int requestCode, final Promise promise) {\n        provider.removeLocationUpdatesWithCallback(requestCode, fromPromise(promise));\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        provider.onActivityResult(activity, requestCode, resultCode, data);\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/modules/RNGeocoderModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.modules;\n\nimport static com.huawei.hms.rn.location.helpers.RNCallback.fromPromise;\nimport static com.huawei.hms.rn.location.helpers.ReactUtils.toJO;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.rn.location.backend.providers.GeocoderProvider;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport org.json.JSONObject;\n\npublic class RNGeocoderModule extends ReactContextBaseJavaModule {\n\n    private GeocoderProvider provider;\n\n    public RNGeocoderModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        provider = ReactUtils.initializeProvider(new GeocoderProvider(reactContext), reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSGeocoder\";\n    }\n\n    @ReactMethod\n    public void getFromLocation(final ReadableMap getFromLocationRequest, @Nullable ReadableMap locale,\n        final Promise promise) {\n        JSONObject mLocale = null;\n        if (locale != null) {\n            mLocale = toJO(locale);\n        }\n        provider.getFromLocation(toJO(getFromLocationRequest), mLocale, fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void getFromLocationName(final ReadableMap getFromLocationNameRequest, @Nullable ReadableMap locale,\n        final Promise promise) {\n        JSONObject mLocale = null;\n        if (locale != null) {\n            mLocale = toJO(locale);\n        }\n        provider.getFromLocationName(toJO(getFromLocationNameRequest), mLocale, fromPromise(promise));\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/modules/RNGeofenceModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.modules;\n\nimport static com.huawei.hms.rn.location.helpers.RNCallback.fromPromise;\n\nimport com.huawei.hms.rn.location.backend.providers.GeofenceProvider;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\nimport java.util.Map;\n\npublic class RNGeofenceModule extends ReactContextBaseJavaModule {\n    private GeofenceProvider provider;\n\n    public RNGeofenceModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        provider = ReactUtils.initializeProvider(new GeofenceProvider(reactContext), reactContext);\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return ReactUtils.getConstants(provider);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSGeofence\";\n    }\n\n    @ReactMethod\n    public void createGeofenceList(final int requestCode, final ReadableArray geofences, final int initConversions,\n        final int coordinateType, final Promise promise) {\n        provider.createGeofenceList(requestCode, ReactUtils.toJA(geofences), initConversions, coordinateType,\n            fromPromise(promise));\n    }\n\n    @ReactMethod\n    public void deleteGeofenceList(final int requestCode, final Promise promise) {\n        provider.deleteGeofenceList(requestCode, fromPromise(promise));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/android/src/main/java/com/huawei/hms/rn/location/modules/RNLocationKitModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.modules;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android.util.Log;\n\nimport com.huawei.hms.location.LocationRequest;\nimport com.huawei.hms.rn.location.backend.helpers.Constants;\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\nimport com.huawei.hms.rn.location.backend.logger.HMSMethod;\nimport com.huawei.hms.rn.location.backend.utils.LocationUtils;\nimport com.huawei.hms.rn.location.helpers.ReactUtils;\nimport com.huawei.hms.support.api.entity.location.coordinate.LonLat;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class RNLocationKitModule extends ReactContextBaseJavaModule {\n    private ReactApplicationContext reactContext;\n    private final static String TAG = RNLocationKitModule.class.getSimpleName();\n\n    public RNLocationKitModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        try {\n            return ReactUtils.toMap(\n                new JSONObject().put(\"COORDINATE_TYPE_WGS84\", LocationRequest.COORDINATE_TYPE_WGS84)\n                    .put(\"COORDINATE_TYPE_GCJ02\", LocationRequest.COORDINATE_TYPE_GCJ02)\n            );\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONEx :: \" + e.getMessage());\n            return new HashMap<>();\n        }\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSLocationKit\";\n    }\n\n    @ReactMethod\n    public void init(final Promise promise) {\n        HMSBroadcastReceiver.init(reactContext,\n            (eventName, params) -> ReactUtils.sendEvent(reactContext, eventName, ReactUtils.toWM(params)));\n        promise.resolve(true);\n    }\n\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSMethod.enableLogger(reactContext);\n        promise.resolve(true);\n    }\n\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSMethod.disableLogger(reactContext);\n        promise.resolve(true);\n    }\n\n    @ReactMethod\n    public void setNotification(final ReadableMap rm, final Promise promise) {\n        SharedPreferences.Editor editor = reactContext.getSharedPreferences(reactContext.getPackageName(),\n            Context.MODE_PRIVATE).edit();\n        editor.putString(Constants.KEY_CONTENT_TITLE,\n            getStringKey(rm, Constants.KEY_CONTENT_TITLE, Constants.DEFAULT_CONTENT_TITLE));\n        editor.putString(Constants.KEY_CONTENT_TEXT,\n            getStringKey(rm, Constants.KEY_CONTENT_TEXT, Constants.DEFAULT_CONTENT_TEXT));\n        editor.putString(Constants.KEY_DEF_TYPE, getStringKey(rm, Constants.KEY_DEF_TYPE, Constants.DEFAULT_DEF_TYPE));\n        editor.putString(Constants.KEY_RESOURCE_NAME,\n            getStringKey(rm, Constants.KEY_RESOURCE_NAME, Constants.DEFAULT_RESOURCE_NAME));\n        editor.apply();\n        promise.resolve(true);\n    }\n\n    @ReactMethod\n    public void convertCoord(double latitude, double longitude, int coordType, final Promise promise) {\n        HMSMethod method = new HMSMethod(\"convertCoord\");\n        Log.i(TAG, \"convertCoord start\");\n\n        LonLat coordinate = com.huawei.hms.location.LocationUtils.convertCoord(latitude, longitude, coordType);\n\n        method.sendLoggerEvent(reactContext);\n        promise.resolve(\n            ReactUtils.toWM(LocationUtils.FROM_LON_LAT_TO_JSON.map(coordinate))\n        );\n\n    }\n\n    public String getStringKey(ReadableMap rm, String key, String fallback) {\n        return (rm != null && rm.hasKey(key) && rm.getType(key) == ReadableType.String) ? rm.getString(key) : fallback;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport { PermissionsAndroid, SafeAreaView, StyleSheet, ScrollView, View, Text, Image, Button, TextInput, Switch, Alert } from \"react-native\";\n\nimport { Colors } from \"react-native/Libraries/NewAppScreen\";\n\nimport HMSLocation from \"@hmscore/react-native-hms-location\";\n\nlet myLatitude = 0;\nlet myLongitude = 0;\n\nconst locationRequest = {\n  priority: HMSLocation.FusedLocation.Native.PriorityConstants.PRIORITY_HIGH_ACCURACY,\n  interval: 10000,\n  numUpdates: 2147483647,\n  fastestInterval: 10000,\n  expirationTime: 3372036854775807.0,\n  smallestDisplacement: 0.0,\n  maxWaitTime: 0,\n  needAddress: false,\n  language: '',\n  countryCode: '',\n  coordinateType: HMSLocation.LocationKit.Native.COORDINATE_TYPE_GCJ02\n};\n\nconst locationSettingsRequest = {\n  locationRequests: [locationRequest],\n  alwaysShow: false,\n  needBle: false,\n};\n\nclass Header extends React.Component {\n  componentDidMount() {\n    HMSLocation.LocationKit.Native.init()\n      .then((_) => console.log(\"Done loading\"))\n      .catch((err) => alert(err.message));\n  }\n  render() {\n    return (\n      <>\n        <View style={styles.header}>\n          <Image style={styles.headerLogo} source={require(\"./assets/images/hms-rn-logo.png\")} />\n          <Text style={styles.headerTitle}>LOCATION KIT</Text>\n        </View>\n      </>\n    );\n  }\n}\n\n/*\n *async requestPermissions() {\n * TODO: \n * Huawei Location needs some permissions to work properly.\n * You are expected to handle these permissions to use Huawei Location Demo.\n * }\n */\n\nclass LocationAvailability extends React.Component {\n  constructor() {\n    super();\n    this.state = { locationAvailable: false };\n  }\n\n  getLocationAvailability = () =>\n    HMSLocation.FusedLocation.Native.getLocationAvailability()\n      .then((res) => this.setState({ locationAvailable: res.isLocationAvailable }))\n      .catch((err) => alert(err.message));\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Location Availability</Text>\n            <Button title=\"Check\" onPress={this.getLocationAvailability} />\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.locationAvailable, null, 2)}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass LocationSettings extends React.Component {\n  constructor() {\n    super();\n    this.state = { locationSettings: {} };\n  }\n\n  checkLocationSettings = () =>\n    HMSLocation.FusedLocation.Native.checkLocationSettings(locationSettingsRequest)\n      .then((res) => this.setState({ locationSettings: res }))\n      .catch((err) => alert(err.message));\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Location Settings</Text>\n            <Button title=\"Check\" onPress={this.checkLocationSettings} />\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}></Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.locationSettings, null, 2)}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass LocationEnhance extends React.Component {\n  constructor() {\n    super();\n    this.state = { navigationState: {} };\n  }\n\n  getNavigationState = () =>\n    HMSLocation.FusedLocation.Native.getNavigationContextState(\n      HMSLocation.FusedLocation.Native.NavigationRequestConstants.IS_SUPPORT_EX\n    )\n      .then((res) => this.setState({ navigationState: res }))\n      .catch((err) => alert(err.message));\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Location Enhance</Text>\n            <Button title=\"Check\" onPress={this.getNavigationState} />\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}></Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.navigationState, null, 2)}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass LastLocation extends React.Component {\n  constructor() {\n    super();\n    this.state = { location: {} };\n  }\n\n  getLocation = () =>\n    HMSLocation.FusedLocation.Native.getLastLocation()\n      .then((pos) => {\n        this.setState({ location: pos });\n        myLatitude = pos.latitude;\n        myLongitude = pos.longitude;\n      })\n      .catch((err) => alert(err.message));\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Last Location</Text>\n            <Button title=\"Get\" onPress={this.getLocation} />\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.location, null, 2)}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass LocationAddress extends React.Component {\n  constructor() {\n    super();\n    this.state = { locationAddress: {} };\n  }\n\n  locationRequest = {\n    priority: HMSLocation.FusedLocation.Native.PriorityConstants.PRIORITY_HIGH_ACCURACY,\n    interval: 10000,\n    numUpdates: 2147483647,\n    fastestInterval: 10000,\n    expirationTime: 3372036854775807.0,\n    smallestDisplacement: 0.0,\n    maxWaitTime: 0,\n    needAddress: true,\n    language: '',\n    countryCode: '',\n    coordinateType: HMSLocation.LocationKit.Native.COORDINATE_TYPE_GCJ02\n  };\n\n  getLocation = () =>\n    HMSLocation.FusedLocation.Native.getLastLocationWithAddress(this.locationRequest)\n      .then((pos) => this.setState({ locationAddress: pos }))\n      .catch((err) => alert(err.message));\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Last Location With Address</Text>\n            <Button title=\"Get\" onPress={this.getLocation} />\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.locationAddress, null, 2)}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\nclass LocationUpdateWithCallback extends React.Component {\n  constructor() {\n    super();\n    this.state = { locationCallbackResult: {}, reqCode: null, autoUpdateEnabled: false };\n  }\n\n  handleLocationUpdate = (locationResult) => { console.log(locationResult); this.setState({ locationCallbackResult: locationResult }); }\n\n  requestLocationCallbackWithListener = () => {\n    HMSLocation.FusedLocation.Native.requestLocationUpdatesWithCallbackEx(locationRequest)\n      .then((res) => this.setState({ reqCode: res.requestCode }))\n      .catch((err) => alert(err.message));\n    HMSLocation.FusedLocation.Events.addFusedLocationEventListener(this.handleLocationUpdate);\n    this.setState({ autoUpdateEnabled: true });\n  };\n\n  removeLocationAndListener = () => {\n    HMSLocation.FusedLocation.Native.removeLocationUpdatesWithCallback(this.state.reqCode)\n      .then((_) => this.setState({ reqCode: null }))\n      .catch((err) => alert(err.message));\n    HMSLocation.FusedLocation.Events.removeFusedLocationEventListener();\n    this.setState({ autoUpdateEnabled: false });\n  };\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Location Update With Callback</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.locationCallbackResult, null, 2)}</Text>\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button\n              title={`${this.state.autoUpdateEnabled ? \"Disable\" : \"Enable\"} auto-update`}\n              onPress={() => {\n                if (this.state.autoUpdateEnabled) {\n                  this.removeLocationAndListener();\n                } else {\n                  this.requestLocationCallbackWithListener();\n                }\n              }}\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\nclass MockLocation extends React.Component {\n  constructor() {\n    super();\n    this.state = { mocked: false, lat: \"41.3\", lon: \"29.1\" };\n  }\n\n  enableMockLocation = () => {\n    HMSLocation.FusedLocation.Native.setMockMode(true)\n      .then((res) => {\n        console.log(\"Mock mode enabled:\", res);\n        this.setState({ mocked: true });\n      })\n      .catch((err) => alert(err.message));\n  };\n\n  disableMockLocation = () => {\n    HMSLocation.FusedLocation.Native.setMockMode(false)\n      .then((res) => {\n        console.log(\"Mock mode disabled:\", res);\n        this.setState({ mocked: false });\n      })\n      .catch((err) => alert(err.message));\n  };\n\n  setMockLocation = () => {\n    HMSLocation.FusedLocation.Native.setMockLocation({\n      latitude: parseFloat(this.state.lat),\n      longitude: parseFloat(this.state.lon),\n    })\n      .then((res) => console.log(\"MOCK SET\", res))\n      .catch((err) => alert(err.message));\n  };\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Mock Location</Text>\n            {this.state.mocked ? (\n              <Button title=\"Disable\" color=\"red\" onPress={this.disableMockLocation} />\n            ) : (\n              <Button title=\"Enable\" onPress={this.enableMockLocation} />\n            )}\n          </View>\n          <View>\n            <Text style={styles.boldText}>Latitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"LAT\"\n              value={this.state.lat}\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ lat: val })}\n            />\n            <Text style={styles.boldText}>Longitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"LON\"\n              value={this.state.lon}\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ lon: val })}\n            />\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button disabled={!this.state.mocked} title=\"Set Mock Location\" onPress={this.setMockLocation} />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\nclass Notification extends React.Component {\n  constructor() {\n    super();\n  }\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Notification</Text>\n            <Button title=\"Set\" onPress={() => {\n              HMSLocation.LocationKit.Native.setNotification({\n                contentTitle: \"Hello\",\n                contentText: \"You received something\",\n                defType: \"mipmap\",\n                resourceName: \"ic_launcher\",\n              })\n                .then((res) => console.log(\"Notification set:\", res))\n                .catch((err) => alert(err.message));\n            }} />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\n\nclass BackgroundLocation extends React.Component {\n  constructor() {\n    super();\n    this.state = { enabled: false, result: null}\n  }\n\n  enableBackgroundLocation = () => {\n    const id = 3\n    const notification = {\n      contentTitle: 'Current Location',\n      category: 'service',\n      priority: 2,\n      channelName: 'MyChannel',\n      contentText: 'Location Notification'\n    }\n    \n    HMSLocation.FusedLocation.Native.enableBackgroundLocation(id, notification)\n      .then((result) => {\n        console.log('Success : ' + JSON.stringify(result, null, 4));\n        this.setState({enabled: true,  result: \"Enable Background Location: \" + result});\n      })\n      .catch((err) => alert(err.message));\n  }\n\n  disableBackgroundLocation = () => {\n    HMSLocation.FusedLocation.Native.disableBackgroundLocation()\n      .then((result) => {\n        console.log('Disabled!')\n        this.setState({enabled: false, result: \"Disable Background Location: \" + result});\n      })\n      .catch((err) => alert(err.message));\n  }\n    \n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Background Location</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}></Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            {this.state.result &&<Text style={styles.monospaced}>{this.state.result}</Text>}\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button title={this.state.enabled ? \"Disable\" : \"Enable\"}\n            onPress={this.state.enabled ? this.disableBackgroundLocation : this.enableBackgroundLocation} />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass SetLogConfig extends React.Component {\n  constructor() {\n    super();\n    this.state = { \n      logPath: \"/storage/emulated/0/Android/data/com.huawei.rnlocationdemo/log\", \n      fileNum: 20, \n      fileSize: 2,\n      fileExpiredTime: 5,\n      result: ''\n    };\n  }\n\n  setLogConfig = () => {\n    const conf = {\n        logPath: this.state.logPath,\n        fileNum: this.state.fileNum,\n        fileSize: this.state.fileSize,\n        fileExpiredTime: this.state.fileExpiredTime\n    }\n    HMSLocation.FusedLocation.Native.setLogConfig(conf)\n      .then(() => {\n        console.log('Set!')\n        this.setState({result: 'Set!'})\n      })\n      .catch((err) => alert(err.message));\n  }\n\n  getLogConfig = () => {\n    \n    HMSLocation.FusedLocation.Native.getLogConfig()\n      .then((res) => {\n        this.setState({result: JSON.stringify(res,null,3)})\n        console.log('Log Config: ' + this.state.result)\n      })\n      .catch((err) => console.log(err.message));\n  }  \n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Log Config</Text>\n            <Button title=\"Set\" onPress={this.setLogConfig} />\n            <Button title=\"Get\" onPress={this.getLogConfig} />\n          </View>\n          <View>\n            <Text style={styles.boldText}>File Path</Text>\n            <TextInput\n              style={styles.input}\n              placeholder={this.state.logPath}\n              value={this.state.logPath}\n              onChangeText={(val) => this.setState({ logPath: val })}\n            />\n            <Text style={styles.boldText}>File Number</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"20\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ fileNum: val })}\n            />\n            <Text style={styles.boldText}>File Size (Megabyte)</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"2\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ fileSize: val })}\n            />\n            <Text style={styles.boldText}>File Expired Time (Day)</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"5\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ fileExpiredTime: val })}\n            />\n            <Text style={styles.monospaced}>{this.state.result}</Text>\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass FromLocation extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      maxResults: 5,\n      latitude: 0,\n      longitude: 0,\n\n      result: ''\n    };\n  }\n\n  getFromLocation = () => {\n    const getFromLocationNameRequest = {\n      latitude: this.state.latitude,\n      longitude: this.state.longitude,\n      maxResults: this.state.maxResults\n    }\n\n    const locale = {\n      country: 'En'\n    }\n\n    HMSLocation.Geocoder.Native.getFromLocation(getFromLocationNameRequest, null)\n      .then((hwLocationList) => {\n        this.setState({result: JSON.stringify(hwLocationList, null, 3)})\n        console.log('Result: ' + this.state.result)\n      })\n      .catch((err) => alert(err.message));\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>From Location</Text>\n          </View>\n          <View>\n            <Text style={styles.boldText}>Latitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ latitude: val })}\n            />\n            <Text style={styles.boldText}>Longitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ longitude: val })}\n            />\n            <Text style={styles.boldText}>Max Results</Text>\n            <TextInput\n              style={styles.input}\n              value={this.state.maxResults.toString()}\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ maxResults: val })}\n            />\n          </View>\n          <View>\n            <Button title=\"Get\" onPress={this.getFromLocation} />\n          </View>\n          <ScrollView nestedScrollEnabled={true} \n          style={[styles.scrollView, {height: 150, \n            display: this.state.result == '' ? 'none' : 'flex'\n          }]}>\n            <Text style={styles.monospaced}>{this.state.result}</Text>\n          </ScrollView>\n        </View>\n      </>\n    );\n  }\n}\n\nclass FromLocationName extends React.Component {\n  constructor() {\n    super();\n    this.state = {\n      locationName: '',\n      maxResults: 5,\n      lowerLeftLatitude: 0,\n      lowerLeftLongitude: 0,\n      upperRightLatitude: 0,\n      upperRightLongitude: 0,\n\n      result: ''\n    };\n  }\n\n  getFromLocationName = () => {\n    const getFromLocationNameRequest = {\n      locationName: this.state.locationName,\n      maxResults: this.state.maxResults,\n      lowerLeftLatitude: this.state.lowerLeftLatitude,\n      lowerLeftLongitude: this.state.lowerLeftLongitude,\n      upperRightLatitude: this.state.upperRightLatitude,\n      upperRightLongitude: this.state.upperRightLongitude,\n    }\n\n    const locale = {\n      language: \"en\"\n    }\n\n    HMSLocation.Geocoder.Native.getFromLocationName(getFromLocationNameRequest, null)\n      .then((hwLocationList) => {\n        this.setState({result: JSON.stringify(hwLocationList, null, 3)})\n        console.log('Result: ' + this.state.result)\n      })\n      .catch((err) => alert(err.message));\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>From Location Name</Text>\n          </View>\n          <View>\n            <Text style={styles.boldText}>Location Name</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"Enter an address name\"\n              value={this.state.locationName}\n              onChangeText={(val) => this.setState({ locationName: val })}\n            />\n            <Text style={styles.boldText}>Max Results</Text>\n            <TextInput\n              style={styles.input}\n              value={this.state.maxResults.toString()}\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ maxResults: val })}\n            />\n            <Text style={styles.boldText}>Lower Left Latitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ lowerLeftLatitude: val })}\n            />\n            <Text style={styles.boldText}>Lower Left Longitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ lowerLeftLongitude: val })}\n            />\n            <Text style={styles.boldText}>Upper Right Latitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ upperRightLatitude: val })}\n            />\n            <Text style={styles.boldText}>Upper Right Longitude</Text>\n            <TextInput\n              style={styles.input}\n              placeholder=\"0\"\n              keyboardType=\"numeric\"\n              onChangeText={(val) => this.setState({ upperRightLongitude: val })}\n            />\n          </View>\n          <View>\n            <Button title=\"Get\" onPress={this.getFromLocationName} />\n          </View>\n          <ScrollView nestedScrollEnabled={true} \n          style={[styles.scrollView, {height: 150, \n            display: this.state.result == '' ? 'none' : 'flex'\n          }]}>\n            <Text style={styles.monospaced}>{this.state.result}</Text>\n          </ScrollView>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Geocoder extends React.Component {\n  constructor() {\n    super();\n    this.state = { \n      isFromLocation: false\n    };\n  }\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Geocoder</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.boldText}>From Location</Text>\n            <Switch\n              thumbColor=\"#2196F3\"\n              trackColor={{ false: \"#b2dfdc\", true: \"#b2dfdc\" }}\n              onValueChange={() => this.setState({isFromLocation: !this.state.isFromLocation})}\n              value={this.state.isFromLocation}\n            />\n            <Text style={styles.boldText}>From Location Name</Text>\n          </View>\n          {\n            this.state.isFromLocation ? <FromLocationName/> : <FromLocation/>\n          }\n        </View>\n      </>\n    );\n  }\n}\n\nclass LocationUpdate extends React.Component {\n  constructor() {\n    super();\n    this.state = { locationResult: {}, reqCode: 1, autoUpdateEnabled: false };\n  }\n\n  handleLocationUpdate = (locationResult) => { console.log(locationResult); this.setState({ locationResult: locationResult }); };\n\n  requestLocationWithListener = () => {\n    HMSLocation.FusedLocation.Native.requestLocationUpdates(this.state.reqCode, locationRequest)\n      .then((res) => console.log(res))\n      .catch((err) => alert(err.message));\n    HMSLocation.FusedLocation.Events.addFusedLocationEventListener(this.handleLocationUpdate);\n    this.setState({ autoUpdateEnabled: true });\n  };\n\n  removeLocationAndListener = () => {\n    HMSLocation.FusedLocation.Native.removeLocationUpdates(this.state.reqCode)\n      .then((res) => console.log(res))\n      .catch((err) => alert(err.message));\n    HMSLocation.FusedLocation.Events.removeFusedLocationEventListener();\n    this.setState({ autoUpdateEnabled: false });\n  };\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Location Update</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}>\n              <Text style={styles.boldText}>Location Request Code</Text>: {`${this.state.reqCode || \"\"}`}\n            </Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.locationResult, null, 2)}</Text>\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button\n              title={this.state.autoUpdateEnabled ? \"Disable auto-update\" : \"Enable auto-update\"}\n              onPress={() => {\n                if (this.state.autoUpdateEnabled) {\n                  this.removeLocationAndListener();\n                } else {\n                  this.requestLocationWithListener();\n                }\n              }}\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass Geofence extends React.Component {\n  constructor() {\n    super();\n    this.state = { geofenceResponse: {}, reqCode: 1, activated: false, subscribed: false };\n  }\n\n  createGeofenceList = (requestCode) => {\n    const conversionType = HMSLocation.Geofence.Native.GeofenceRequestConstants.DWELL_INIT_CONVERSION;\n    const coordinateType = HMSLocation.Geofence.Native.GeofenceRequestConstants.COORDINATE_TYPE_WGS_84;\n    const geofence = {\n      latitude: myLatitude,\n      longitude: myLongitude,\n      radius: 100000.0,\n      uniqueId: \"geofence16\",\n      conversions: HMSLocation.Geofence.Native.GeofenceConstants.DWELL_GEOFENCE_CONVERSION,\n      validContinueTime: 10000.0,\n      dwellDelayTime: 10,\n      notificationInterval: 1,\n    };\n    const geofenceList = [geofence];\n    HMSLocation.Geofence.Native.createGeofenceList(requestCode, geofenceList, conversionType, coordinateType)\n      .then((_) => this.setState({ activated: true }))\n      .catch((err) => alert(err.message));\n  };\n\n  deleteGeofenceList = (requestCode) => {\n    HMSLocation.Geofence.Native.deleteGeofenceList(requestCode)\n      .then((_) => this.setState({ activated: false }))\n      .catch((err) => alert(err.message));\n  };\n\n  handleGeofenceEvent = (geo) => {this.setState({ geofenceResponse: geo })};\n\n  addGeofenceEventListener = () => {\n    HMSLocation.Geofence.Events.addGeofenceEventListener(this.handleGeofenceEvent);\n    this.setState({ subscribed: true });\n  };\n\n  removeGeofenceEventListener = () => {\n    HMSLocation.Geofence.Events.removeGeofenceEventListener();\n    this.setState({ subscribed: false });\n  };\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Geofence</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}>\n              <Text style={styles.boldText}>Geofence Request Code</Text>: {`${this.state.reqCode || \"\"}`}\n            </Text>\n          </View>\n          <Text style={styles.monospaced}>{JSON.stringify(this.state.geofenceResponse, null, 2)}</Text>\n          <View style={styles.centralizeContent}>\n            <Button\n              title={this.state.activated ? \"Remove Geofence\" : \"Create Geofence\"}\n              onPress={() =>\n                this.state.activated\n                  ? this.deleteGeofenceList(this.state.reqCode)\n                  : this.createGeofenceList(this.state.reqCode)\n              }\n            />\n            <Button\n              title={this.state.subscribed ? \"Unsubscribe\" : \"Subscribe\"}\n              onPress={() =>\n                this.state.subscribed ? this.removeGeofenceEventListener() : this.addGeofenceEventListener()\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass ActivityIdentification extends React.Component {\n  constructor() {\n    super();\n    this.state = { reqCode: 1, activated: false, subscribed: false, identificationResponse: {} };\n  }\n\n  // Activity Identification\n  createActivityIdentification = (requestCode) =>\n    HMSLocation.ActivityIdentification.Native.createActivityIdentificationUpdates(requestCode, 20000)\n      .then((_) => this.setState({ activated: true }))\n      .catch((err) => alert(err.message));\n\n  removeActivityIdentification = (requestCode) =>\n    HMSLocation.ActivityIdentification.Native.deleteActivityIdentificationUpdates(requestCode)\n      .then((_) => this.setState({ activated: false }))\n      .catch((err) => alert(err.message));\n\n  handleActivityIdentification = (act) => this.setState({ identificationResponse: act });\n\n  addActivityIdentificationEventListener = () => {\n    HMSLocation.ActivityIdentification.Events.addActivityIdentificationEventListener(this.handleActivityIdentification);\n    this.setState({ subscribed: true });\n  };\n\n  removeActivityIdentificationEventListener = () => {\n    HMSLocation.ActivityIdentification.Events.removeActivityIdentificationEventListener();\n    this.setState({ subscribed: false });\n  };\n\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Activity Identification</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}>\n              <Text style={styles.boldText}>Activity Request Code</Text>: {`${this.state.reqCode || \"\"}`}\n            </Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.identificationResponse, null, 2)}</Text>\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button\n              title={this.state.activated ? \"Remove Identification\" : \"Get Identification\"}\n              onPress={() => {\n                if (this.state.activated) {\n                  this.removeActivityIdentification(this.state.reqCode);\n                } else {\n                  this.createActivityIdentification(this.state.reqCode);\n                }\n              }}\n            />\n            <Button\n              title={this.state.subscribed ? \"Unsubscribe\" : \"Subscribe\"}\n              onPress={() => {\n                if (this.state.subscribed) {\n                  this.removeActivityIdentificationEventListener();\n                } else {\n                  this.addActivityIdentificationEventListener();\n                }\n              }}\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\n\nclass ActivityConversion extends React.Component {\n  constructor() {\n    super();\n    this.state = { reqCode: 2, activated: false, subscribed: false, conversionResponse: {} };\n  }\n\n  // Activity Conversion\n  handleActivityConversion = (conv) => this.setState({ conversionResponse: conv });\n\n  createConversionUpdates = (requestCode) => {\n    HMSLocation.ActivityIdentification.Native.createActivityConversionUpdates(requestCode, [\n      // STILL\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.ENTER_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.STILL,\n      },\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.EXIT_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.STILL,\n      },\n\n      // ON FOOT\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.ENTER_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.FOOT,\n      },\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.EXIT_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.FOOT,\n      },\n\n      // RUNNING\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.ENTER_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.RUNNING,\n      },\n      {\n        conversionType: HMSLocation.ActivityIdentification.Native.ActivityConversions.EXIT_ACTIVITY_CONVERSION,\n        activityType: HMSLocation.ActivityIdentification.Native.Activities.RUNNING,\n      },\n    ])\n      .then((_) => this.setState({ activated: true }))\n      .catch((err) => alert(err.message));\n  };\n\n  deleteConversionUpdates = (requestCode) => {\n    HMSLocation.ActivityIdentification.Native.deleteActivityConversionUpdates(requestCode)\n      .then((_) => this.setState({ activated: false }))\n      .catch((err) => alert(err.message));\n  };\n\n  addActivityConversionEventListener = () => {\n    HMSLocation.ActivityIdentification.Events.addActivityConversionEventListener(this.handleActivityConversion);\n    this.setState({ subscribed: true });\n  };\n\n  removeActivityConversionEventListener = () => {\n    HMSLocation.ActivityIdentification.Events.removeActivityConversionEventListener();\n    this.setState({ subscribed: false });\n  };\n  render() {\n    return (\n      <>\n        <View style={styles.sectionContainer}>\n          {/* Conversion */}\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionTitle}>Conversion Update</Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.sectionDescription}>\n              <Text style={styles.boldText}>Conversion Request Code</Text>: {`${this.state.reqCode || \"\"}`}\n            </Text>\n          </View>\n          <View style={styles.spaceBetweenRow}>\n            <Text style={styles.monospaced}>{JSON.stringify(this.state.conversionResponse, null, 2)}</Text>\n          </View>\n          <View style={styles.centralizeContent}>\n            <Button\n              title={this.state.activated ? \"Remove Update\" : \"Create Update\"}\n              onPress={() =>\n                this.state.activated ? this.deleteConversionUpdates(this.state.reqCode) : this.createConversionUpdates(this.state.reqCode)\n              }\n            />\n            <Button\n              title={this.state.subscribed ? \"Unsubscribe\" : \"Subscribe\"}\n              onPress={() =>\n                this.state.subscribed ? this.removeActivityConversionEventListener() : this.addActivityConversionEventListener()\n              }\n            />\n          </View>\n        </View>\n      </>\n    );\n  }\n}\nconst App = () => {\n\n  \n\n  return (\n    <>\n      <SafeAreaView>\n        <ScrollView contentInsetAdjustmentBehavior=\"automatic\" style={styles.scrollView}>\n          <Header />\n          <View style={styles.body}>\n            <LocationAvailability />\n            <View style={styles.divider} />\n            <LocationSettings />\n            <View style={styles.divider} />\n            <LocationEnhance />\n            <View style={styles.divider} />\n            <LastLocation />\n            <View style={styles.divider} />\n            <LocationAddress />\n            <View style={styles.divider} />\n            <LocationUpdateWithCallback />\n            <View style={styles.divider} />\n            <MockLocation />\n            <View style={styles.divider} />\n            <Notification />\n            <View style={styles.divider} />\n            <BackgroundLocation />\n            <View style={styles.divider} />\n            <SetLogConfig />\n            <View style={styles.divider} />\n            <Geocoder />\n            <View style={styles.divider} />\n            <LocationUpdate />\n            <View style={styles.divider} />\n            <Geofence />\n            <View style={styles.divider} />\n            <ActivityIdentification />\n            <View style={styles.divider} />\n            <ActivityConversion />\n            <View style={styles.divider} />\n          </View>\n        </ScrollView>\n      </SafeAreaView>\n    </>\n  );\n};\n\nconst styles = StyleSheet.create({\n  scrollView: {\n    backgroundColor: Colors.lighter,\n  },\n  engine: {\n    position: \"absolute\",\n    right: 0,\n  },\n  body: {\n    backgroundColor: Colors.white,\n  },\n  sectionContainer: {\n    marginTop: 30,\n    paddingHorizontal: 24,\n  },\n  sectionTitle: {\n    fontSize: 18,\n    fontWeight: \"600\",\n    color: Colors.black,\n  },\n  sectionDescription: {\n    marginTop: 8,\n    fontSize: 15,\n    fontWeight: \"400\",\n    color: Colors.dark,\n  },\n  activityData: {\n    marginTop: 8,\n    marginLeft: 5,\n    fontSize: 16,\n    fontWeight: \"400\",\n    color: Colors.dark,\n  },\n  highlight: {\n    fontWeight: \"700\",\n  },\n  footer: {\n    color: Colors.dark,\n    fontSize: 12,\n    fontWeight: \"600\",\n    padding: 4,\n    paddingRight: 12,\n    textAlign: \"right\",\n  },\n  header: {\n    height: 200,\n    width: \"100%\",\n    alignSelf: 'center',\n    alignItems: 'center',\n    justifyContent: 'space-around',\n    padding: 10\n  },\n  headerTitle: { fontSize: 18, fontWeight: \"bold\", color: \"gray\" },\n  warningText: { fontSize: 18, fontWeight: \"bold\", color: \"red\", margin: 20 },\n  headerLogo: { height: 160, width: 160},\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n  divider: {\n    width: \"90%\",\n    alignSelf: \"center\",\n    height: 1,\n    backgroundColor: \"grey\",\n    marginTop: 20,\n  },\n  boldText: { fontWeight: \"bold\" },\n  centralizeSelf: { alignSelf: \"center\" },\n  centralizeContent: { flexDirection: \"row\", justifyContent: \"space-around\", alignItems: 'center' },\n  monospaced: { fontFamily: \"monospace\" },\n});\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-location/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-location/example/README.md",
    "content": "# React-Native HMS Location - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Location Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Location - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\timplementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n    \n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");  applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-location/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.location.demo\">\n\n  <uses-permission android:name=\"android.permission.INTERNET\" />\n  <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n  <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>\n  <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>\n  <uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\"/>\n  <uses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" />\n  <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n  <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n  <uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\" />\n  <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /> \n  <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n  <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"/>\n  \n  <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHMSLocation Demo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\"\n      android:requestLegacyExternalStorage=\"true\">\n      \n\n    <meta-data     \n      android:name=\"com.huawei.hms.client.channel.androidMarket\"  \n      android:value=\"false\" />\n\n    <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHMSLocation Demo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize\"\n        android:windowSoftInputMode=\"adjustResize\"\n        android:exported=\"true\"\n        >\n      <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n      </intent-filter>\n    </activity>\n\n    <receiver\n        android:name=\"com.huawei.hms.rn.location.RNLocationBroadcastReceiver\"\n        android:exported=\"false\"\n        android:enabled=\"true\">\n      <intent-filter>\n        <action android:name=\"${applicationId}.ACTION_HMS_LOCATION\" />\n        <action android:name=\"${applicationId}.ACTION_HMS_ACTIVITY_IDENTIFICATION\" />\n        <action android:name=\"${applicationId}.ACTION_HMS_ACTIVITY_CONVERSION\" />\n        <action android:name=\"${applicationId}.ACTION_HMS_GEOFENCE\" />\n      </intent-filter>\n    </receiver>\n    <service android:name=\"com.huawei.hms.rn.location.RNTaskService\" android:exported=\"false\"/>\n  </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/src/main/java/com/huawei/hms/rn/location/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.demo;\n\nimport android.os.Bundle;\n\nimport com.huawei.hms.rn.location.backend.helpers.HMSBroadcastReceiver;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    // Returns the name of the main component registered from JavaScript. This is used to schedule\n    // rendering of the component.\n\n    @Override\n    protected String getMainComponentName() {\n        return \"example\";\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n\n    @Override\n    public void onDestroy() {\n        super.onDestroy();\n        unregisterReceiver(HMSBroadcastReceiver.getInstance());\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/src/main/java/com/huawei/hms/rn/location/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.location.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-location/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n        jcenter()\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n  \n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-location/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-location/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\nandroid.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-location/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-location/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-location/example/android/settings.gradle",
    "content": "rootProject.name = 'example'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-location/example/app.json",
    "content": "{\n  \"name\": \"example\",\n  \"displayName\": \"example\"\n}"
  },
  {
    "path": "react-native-hms-location/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-location/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry, ToastAndroid } from 'react-native';\nimport App from './App';\nimport { name as appName } from './app.json';\nimport HMSLocation from '@hmscore/react-native-hms-location';\n\nconst showActivity = (data) => {\n  console.log('Activity Identification Headless Task, data:', data)\n  if (data && data.mostActivityIdentification) {\n    switch (data.mostActivityIdentification.identificationActivity) {\n      case HMSLocation.ActivityIdentification.Native.Activities.STILL:\n        ToastAndroid.show(\n          `You are still with ${data.mostActivityIdentification.possibility} possibility`,\n          ToastAndroid.SHORT\n        );\n        break;\n\n      default:\n        ToastAndroid.show(`You are not still`, ToastAndroid.SHORT);\n        break;\n    }\n  }\n};\nHMSLocation.ActivityIdentification.Events.registerActivityIdentificationHeadlessTask(showActivity);\nHMSLocation.ActivityIdentification.Events.registerActivityConversionHeadlessTask((data) =>\n  console.log('Activity Conversion Headless Task, data:', data)\n);\nHMSLocation.FusedLocation.Events.registerFusedLocationHeadlessTask((data) =>\n  console.log('Fused Location Headless Task, data:', data)\n);\nHMSLocation.Geofence.Events.registerGeofenceHeadlessTask((data) =>\n  console.log('Geofence Headless Task, data:', data)\n);\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-location/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-location/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-location-demo\",\n  \"version\": \"6.12.0-302\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-location\": \"6.12.0-302\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-location/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-location\",\n  \"title\": \"React Native HMS Location Kit\",\n  \"description\": \"React Native HMS Location Kit\",\n  \"version\": \"6.12.0-302\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-location\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-location\",\n    \"hms-location\",\n    \"huawei-location\",\n    \"location-kit\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-location/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-location\" {\n\n    \n    const HMSFusedLocation = {\n        enableBackgroundLocation(id: number, notification: Notification): Promise<boolean>;,\n        disableBackgroundLocation(): Promise<boolean>;,\n        flushLocations(): Promise<boolean>;,\n        checkLocationSettings(request: LocationSettingsRequest): Promise<LocationSettingsStates>;,\n        getLastLocation(): Promise<Location>;,\n        getNavigationContextState(request: NavigationRequestConstants): Promise<NavigationResult>;,\n        getLastLocationWithAddress(request: LocationRequest): Promise<HWLocation>;,\n        getLocationAvailability(): Promise<object>;,\n        setMockLocation(location: LatLng): Promise<boolean>;,\n        setMockMode(shouldMock: boolean): Promise<boolean>;,\n        setLogConfig(logConfig: LogConfig): Promise<boolean>;, \n        getLogConfig(): Promise<LogConfig>;,\n        requestLocationUpdates(requestId: number, request: LocationRequest): Promise<RequestCode>;,\n        removeLocationUpdates(requestId: number): Promise<boolean>;,\n        requestLocationUpdatesWithCallback(request: LocationRequest): Promise<RequestCode>;,\n        requestLocationUpdatesWithCallbackEx(request: LocationRequest): Promise<RequestCode>;,\n        removeLocationUpdatesWithCallback(requestId: number): Promise<boolean>;,\n        NavigationRequestConstants,\n        PriorityConstants\n    }\n\n    const FusedLocation = {\n        Native: HMSFusedLocation,\n        Events: {\n            registerFusedLocationHeadlessTask(callback: (res: LocationResult) => void): void;,\n            addFusedLocationEventListener(callback: (res: LocationResult) => void): void;,\n            removeFusedLocationEventListener(): void;\n        },\n        \n    }\n\n    export interface HWLocation {\n        latitude: number,\n        longitude: number,\n        altitude: number,\n        speed: number,\n        bearing: number,\n        accuracy: number,\n        provider: string,\n        time: number,\n        elapsedRealtimeNanos: number,\n        countryName: string,\n        state: string,\n        city: string,\n        country: string,\n        street: string,\n        featureName: string,\n        postalCode: string,\n        phone: string,\n        url: string,\n        extraInfo: string,\n        verticalAccuracyMeters: number,\n        bearingAccuracyDegrees: number\n    }\n\n    export interface LatLng {\n        longitude: number,\n        latitude: number\n    }\n\n    export interface Location {\n        latitude: number,\n        longitude: number,\n        speed: number,\n        bearing: number,\n        accuracy: number,\n        verticalAccuracyMeters: number,\n        bearingAccuracyDegrees: number,\n        speedAccuracyMetersPerSecond: number,\n        time: number,\n        fromMockProvider: boolean\n    }\n\n    export interface LocationResult {\n        lastLocation: Location,\n        locations: Location[],\n        lastHWLocation: HWLocation,\n        hwLocationList: HWLocation[]\n    }\n\n    export interface LocationRequest {\n        priority: number,\n        interval: number,\n        numUpdates: number,\n        fastestInterval: number,\n        expirationTime: number,\n        expirationTimeDuration: number,\n        smallestDisplacement: number,\n        maxWaitTime: number,\n        needAddress: boolean,\n        language: string,\n        countryCode: string,\n        coordinateType: number\n    }\n\n    export interface LocationSettingsRequest {\n        locationRequests: LocationRequest[],\n        needBle: boolean,\n        alwaysShow: boolean\n    }\n\n    export interface LocationSettingsStates {\n        isBlePresent: boolean,\n        isBleUsable: boolean,\n        isGpsPresent: boolean,\n        isGpsUsable: boolean,\n        isGnssPresent: boolean,\n        isGnssUsable: boolean,\n        isLocationPresent: boolean,\n        isLocationUsable: boolean,\n        isNetworkLocationPresent: boolean,\n        isNetworkLocationUsable: boolean,\n        isHMSLocationPresent: boolean,\n        isHMSLocationUsable: boolean\n    }\n\n    export interface LogConfig {\n        logPath: string,\n        fileSize: number,\n        fileNum: number,\n        fileExpiredTime: number\n    }\n\n    export interface NavigationResult {\n        state: string,\n        possibility: string\n    }\n    \n    export interface Notification {\n        category: string,\n        priority: number,\n        channelName: string,\n        contentTitle:string,\n        contentText: string,\n        defType?: string,\n        resourceName?: string,\n        color?: number,\n        colorized?: boolean,\n        contentInfo?: string,\n        largeIcon?: string,\n        onGoing?: boolean,\n        subText?: string,\n        sound?: string,\n        vibrate?: number[],\n        visibility?: number\n    }\n\n    export interface RequestCode {\n        requestCode: number\n    }\n\n\n    enum NavigationRequestConstants {\n        IS_SUPPORT_EX = 2,\n        OVERPASS = 1\n    }\n\n    enum PriorityConstants {\n        PRIORITY_BALANCED_POWER_ACCURACY = 102,\n        PRIORITY_HIGH_ACCURACY = 100,\n        PRIORITY_LOW_POWER = 104,\n        PRIORITY_NO_POWER = 105,\n        PRIORITY_HD_ACCURACY = 200,\n        PRIORITY_INDOOR = 300,\n        PRIORITY_HIGH_ACCURACY_AND_INDOOR = 400\n    }\n\n    const HMSGeofence = {\n        createGeofenceList(requestId: number, geofences: Geofence[], initConversions: number, coordinateType: number): Promise<RequestCode>;,\n        deleteGeofenceList(requestId: number): Promise<boolean>;,\n        GeofenceConstants,\n        GeofenceRequestConstants,\n        ErrorCodes\n    }\n\n    const Geofence = {\n        Native: HMSGeofence,\n        Events: {\n            registerGeofenceHeadlessTask(callback: (res: GeofenceData) => void): void;,\n            addGeofenceEventListener(callback: (res: GeofenceData) => void): void;,\n            removeGeofenceEventListener(): void;\n        }\n    }\n\n    export interface Geofence {\n        longitude: number,\n        latitude: number,\n        radius: number,\n        uniqueId: string,\n        conversions: number,\n        validContinueTime: number,\n        dwellDelayTime: number,\n        notificationInterval: number\n    }\n\n    export interface GeofenceData {\n        convertingGeofenceList: GeofenceResponse[],\n        conversion: number,\n        convertingLocation: Location,\n        errorCode: number,\n        errorMessage: string\n    }\n\n    export interface GeofenceResponse {\n        uniqueId: string\n    }\n\n    enum GeofenceConstants {\n        ENTER_GEOFENCE_CONVERSION = 1,\n        EXIT_GEOFENCE_CONVERSION = 2,\n        DWELL_GEOFENCE_CONVERSION = 4,\n        GEOFENCE_NEVER_EXPIRE = -1\n    }\n\n    enum GeofenceRequestConstants {\n        ENTER_INIT_CONVERSION = 1,\n        EXIT_INIT_CONVERSION = 2,\n        DWELL_INIT_CONVERSION = 4,\n        COORDINATE_TYPE_WGS_84 = 1,\n        COORDINATE_TYPE_GCJ_02 = 0\n    }\n\n    enum ErrorCodes {\n        GEOFENCE_NUMBER_OVER_LIMIT = 10201,\n        GEOFENCE_PENDINGINTENT_OVER_LIMIT = 10202,\n        GEOFENCE_INSUFFICIENT_PERMISSION = 10204,\n        GEOFENCE_REQUEST_TOO_OFTEN = 10205,\n        GEOFENCE_UNAVAILABLE = 10200\n    }\n\n    const HMSLocationKit = {\n        init(): Promise<boolean>;,\n        enableLogger(): Promise<boolean>;,\n        disableLogger(): Promise<boolean>;,\n        setNotification(notificationSetting: BasicNotification): Promise<boolean>;,\n        convertCoord(latitude: number, longitude: number, coordType: number): Promise<LatLng>;\n    }\n\n    const LocationKit = {\n        Native: HMSLocationKit\n    }\n\n    export interface BasicNotification {\n        contentTitle: string,\n        contentText: string,\n        defType: string,\n        resourceName: string,\n    }\n\n    const HMSActivityIdentification = {\n        createActivityConversionUpdates(requestId: number, request: ActivityConversionRequest[]): Promise<RequestCode>;,\n        deleteActivityConversionUpdates(requestId: number): Promise<boolean>;,\n        createActivityIdentificationUpdates(requestId: number, intervalMillis: number): Promise<RequestCode>;,\n        deleteActivityIdentificationUpdates(requestId: number): Promise<boolean>;,\n        Activities,\n        ActivitiyConversions\n    }\n\n    const ActivityIdentification = {\n        Native: HMSActivityIdentification,\n        Events: {\n            registerActivityIdentificationHeadlessTask(callback: (res: ActivityConversionResponse) => void): void;,\n            addActivityIdentificationEventListener(callback: (res: ActivityIdentificationResponse) => void): void;,\n            removeActivityIdentificationEventListener(): void;,\n            registerActivityConversionHeadlessTask(callback: (res: ActivityConversionResponse) => void): void;,\n            addActivityConversionEventListener(callback: (res: ActivityConversionResponse) => void): void;,\n            removeActivityConversionEventListener(): void;\n        }\n    }\n\n    export interface ActivityConversionRequest {\n        activityType: Activities,\n        conversionType: ActivitiyConversions\n    }\n\n    export interface ActivityIdentificationResponse {\n        elapsedTimeFromReboot: number,\n        mostActivityIdentification: ActivityIdentificationData,\n        activityIdentificationDatas: ActivityIdentificationData[],\n        time: number\n    }\n\n    export interface ActivityPermissionResult {\n        granted: boolean,\n        activityRecognition: boolean\n    }\n\n    export interface ActivityConversionResponse {\n        activityConversionDatas: ActivityConversionData[]\n    }\n\n    export interface ActivityIdentificationData {\n        possibility: number,\n        identificationActivity: Activities\n    }\n\n    export interface ActivityConversionData {\n        activityType: Activities,\n        conversionType: ActivitiyConversions,\n        elapsedTimeFromReboot: number\n    }\n\n    enum Activities {\n        VEHICLE = 100,\n        BIKE = 101,\n        FOOT = 102,\n        RUNNING = 108,\n        STILL = 103,\n        OTHERS = 104,\n        WALKING = 107\n    }\n\n    enum ActivitiyConversions {\n        ENTER_ACTIVITY_CONVERSION = 0,\n        EXIT_ACTIVITY_CONVERSION = 1\n    }\n    \n    const HMSGeocoder = {\n        getFromLocation(getFromLocationRequest: GetFromLocationRequest, locale: Locale): Promise<HWLocation[]>;,\n        getFromLocationName(getFromLocationNameRequest: GetFromLocationNameRequest, locale: Locale): Promise<HWLocation[]>;,\n    }\n\n    const Geocoder = {\n        Native: HMSGeocoder\n    }\n\n    export interface GetFromLocationNameRequest {\n        locationName: string,\n        maxResults: number,\n        lowerLeftLatitude?: number,\n        lowerLeftLongitude?: number,\n        upperRightLatitude?: number,\n        upperRightLongitude?: number\n    }\n    \n    export interface GetFromLocationRequest {\n        latitude: number,\n        longitude: number,\n        maxResults: number\n    }\n\n    export interface Locale {\n        language: string,\n        country?: string,\n        variant?: string\n    }\n\n\n    export default {\n        FusedLocation,\n        Geofence,\n        LocationKit,\n        ActivityIdentification,\n        Geocoder\n    }\n\n}"
  },
  {
    "path": "react-native-hms-location/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport HMSLocationKit from './modules/LocationKit';\n\nimport HMSActivityIdentification, {\n    registerActivityIdentificationHeadlessTask,\n    addActivityIdentificationEventListener,\n    removeActivityIdentificationEventListener,\n    registerActivityConversionHeadlessTask,\n    addActivityConversionEventListener,\n    removeActivityConversionEventListener\n} from './modules/ActivityIdentification';\n\nimport HMSFusedLocation, {\n    registerFusedLocationHeadlessTask,\n    addFusedLocationEventListener,\n    removeFusedLocationEventListener,\n} from './modules/FusedLocation';\n\nimport HMSGeofence, {\n    registerGeofenceHeadlessTask,\n    addGeofenceEventListener,\n    removeGeofenceEventListener\n} from './modules/Geofence';\n\nimport HMSGeocoder from './modules/Geocoder';\n\nconst LocationKit = {\n    Native: HMSLocationKit\n};\n\nconst Geofence = {\n    Native: HMSGeofence,\n    Events: {\n        registerGeofenceHeadlessTask,\n        addGeofenceEventListener,\n        removeGeofenceEventListener\n    }\n};\n\nconst FusedLocation = {\n    Native: HMSFusedLocation,\n    Events: {\n        registerFusedLocationHeadlessTask,\n        addFusedLocationEventListener,\n        removeFusedLocationEventListener,\n    },\n};\n\nconst ActivityIdentification = {\n    Native: HMSActivityIdentification,\n    Events: {\n        registerActivityIdentificationHeadlessTask,\n        addActivityIdentificationEventListener,\n        removeActivityIdentificationEventListener,\n        registerActivityConversionHeadlessTask,\n        addActivityConversionEventListener,\n        removeActivityConversionEventListener\n    }\n};\n\nconst Geocoder = {\n    Native: HMSGeocoder\n};\n\nexport default {\n    LocationKit,\n    Geofence,\n    FusedLocation,\n    ActivityIdentification,\n    Geocoder\n};\n"
  },
  {
    "path": "react-native-hms-location/src/modules/ActivityIdentification.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules, DeviceEventEmitter, AppRegistry, NativeEventEmitter } from 'react-native';\n\nconst { HMSActivityIdentification } = NativeModules;\n\nconst HMSActivityIdentificationEmitter = new NativeEventEmitter();\n\nexport const registerActivityIdentificationHeadlessTask = (callback) =>\n  AppRegistry.registerHeadlessTask(HMSActivityIdentification.Events.ACTIVITY_IDENTIFICATION, () => async (taskData) =>\n    callback(taskData)\n  );\n\nexport const addActivityIdentificationEventListener = (callback) =>\n  HMSActivityIdentificationEmitter.addListener(HMSActivityIdentification.Events.ACTIVITY_IDENTIFICATION, callback);\n\nexport const removeActivityIdentificationEventListener = async () =>\n  HMSActivityIdentificationEmitter.removeAllListeners(HMSActivityIdentification.Events.ACTIVITY_IDENTIFICATION);\n\nexport const registerActivityConversionHeadlessTask = (callback) => {\n  AppRegistry.registerHeadlessTask(HMSActivityIdentification.Events.ACTIVITY_CONVERSION, () => async (taskData) =>\n    callback(taskData)\n  );\n};\n\nexport const addActivityConversionEventListener = (callback) =>\n  HMSActivityIdentificationEmitter.addListener(HMSActivityIdentification.Events.ACTIVITY_CONVERSION, callback);\n\nexport const removeActivityConversionEventListener = async () =>\n  HMSActivityIdentificationEmitter.removeAllListeners(HMSActivityIdentification.Events.ACTIVITY_CONVERSION);\n\nexport default HMSActivityIdentification;\n"
  },
  {
    "path": "react-native-hms-location/src/modules/FusedLocation.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules, DeviceEventEmitter, AppRegistry, NativeEventEmitter } from 'react-native';\n\nconst { HMSFusedLocation } = NativeModules;\n\nconst HMSFusedLocationEmmitter = new NativeEventEmitter();\n\nexport const registerFusedLocationHeadlessTask = (callback) =>\n  AppRegistry.registerHeadlessTask(HMSFusedLocation.Events.LOCATION, () => async (taskData) => callback(taskData));\n\nexport const addFusedLocationEventListener = (callback) =>\n  HMSFusedLocationEmmitter.addListener(HMSFusedLocation.Events.LOCATION, callback);\n\nexport const removeFusedLocationEventListener = async () =>\n  HMSFusedLocationEmmitter.removeAllListeners(HMSFusedLocation.Events.LOCATION);\n\nexport default HMSFusedLocation;\n"
  },
  {
    "path": "react-native-hms-location/src/modules/Geocoder.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules, DeviceEventEmitter, AppRegistry } from 'react-native';\n\nconst { HMSGeocoder } = NativeModules;\n\nexport default HMSGeocoder;\n"
  },
  {
    "path": "react-native-hms-location/src/modules/Geofence.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules, DeviceEventEmitter, AppRegistry ,  NativeEventEmitter} from 'react-native';\nconst { HMSGeofence } = NativeModules;\n\nconst HMSGeofenceEmitter = new NativeEventEmitter();\n\nexport const registerGeofenceHeadlessTask = (callback) =>\n  AppRegistry.registerHeadlessTask(HMSGeofence.Events.GEOFENCE, () => async (taskData) => callback(taskData));\n\nexport const addGeofenceEventListener = (callback) =>\n  HMSGeofenceEmitter.addListener(HMSGeofence.Events.GEOFENCE, callback);\n\nexport const removeGeofenceEventListener = () =>\n  HMSGeofenceEmitter.removeAllListeners(HMSGeofence.Events.GEOFENCE);\n\nexport default HMSGeofence;\n"
  },
  {
    "path": "react-native-hms-location/src/modules/LocationKit.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nconst { HMSLocationKit } = NativeModules;\n\nexport default HMSLocationKit;\n"
  },
  {
    "path": "react-native-hms-map/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-map/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Map</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-map\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-map?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-map\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-map?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-map.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nMap Kit is an SDK for map development. It covers map data of more than 200 countries and regions, and supports over one hundred of languages. With this SDK, you can easily integrate map-based functions into your apps.\n\nThis module enables communication between Huawei Map SDK and React Native platform. It exposes all functionality provided by Huawei Map SDK.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050143001?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-map\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050032222?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001062710399?ha_source=hms1)\n\n## Additional Topics\n- [Interacting with a Map](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/interactmap-0000001050032236?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-map/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenCentral()\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    //noinspection GradleDynamicVersion\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:maps:6.11.2.301' // Add your sdk\n}\n"
  },
  {
    "path": "react-native-hms-map/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-map/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m"
  },
  {
    "path": "react-native-hms-map/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=$(save \"$@\")\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\n# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong\nif [ \"$(uname)\" = \"Darwin\" ] && [ \"$HOME\" = \"$PWD\" ]; then\n  cd \"$(dirname \"$0\")\"\nfi\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-map/android/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.map\">\n    <uses-permission android:name=\"android.permission.INTERNET\"/> \n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSCircleView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.Circle;\nimport com.huawei.hms.maps.model.CircleOptions;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.PatternItem;\nimport com.huawei.hms.maps.model.animation.Animation;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\n\npublic class HMSCircleView extends MapLayerView {\n    private static final String TAG = HMSCircleView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSCircleView.class.getSimpleName();\n    public CircleOptions mCircleOptions = new CircleOptions();\n    public Circle mCircle;\n    public Animation mAnimation = null;\n    HMSLogger logger;\n\n\n    public HMSCircleView(Context context) {\n        super(context);\n        logger = HMSLogger.getInstance(context);\n    }\n\n    public static class Manager extends MapLayerViewManager<HMSCircleView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSCircleView\";\n        }\n\n\n        @NonNull\n        @Override\n        public HMSCircleView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSCircle\");\n            HMSCircleView view = new HMSCircleView(context);\n            logger.sendSingleEvent(\"HMSCircle\");\n            return view;\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n\n            ANIMATION_START(\"onAnimationStart\"),\n            ANIMATION_END(\"onAnimationEnd\");\n\n            private final String circleEventName;\n\n            Event(String circleEventName) {\n                this.circleEventName = circleEventName;\n            }\n\n            public String getName() {\n                return circleEventName;\n            }\n        }\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Event.values());\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            START_ANIMATION(\"startAnimation\"),\n            SET_ANIMATION(\"setAnimation\"),\n            CLEAN_ANIMATION(\"cleanAnimation\");\n\n            private final String circleCommandName;\n\n            Command(String circleCommandName) {\n                this.circleCommandName = circleCommandName;\n            }\n\n            public String getName() {\n                return circleCommandName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSCircleView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Command.values().length) {\n                switch (Command.values()[commandId]) {\n                    case START_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSCircle.startAnimation\");\n                        root.startAnimation();\n                        logger.sendSingleEvent(\"HMSCircle.startAnimation\");\n                        break;\n                    case SET_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSCircle.setAnimation\");\n                        root.setAnimation(args);\n                        logger.sendSingleEvent(\"HMSCircle.setAnimation\");\n                        break;\n                    case CLEAN_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSCircle.cleanAnimation\");\n                        root.cleanAnimation();\n                        logger.sendSingleEvent(\"HMSCircle.cleanAnimation\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n        @ReactProp(name = \"center\")\n        public void setCenter(HMSCircleView view, ReadableMap center) {\n            view.setCenter(center);\n        }\n\n        @ReactProp(name = \"clickable\")\n        public void setClickable(HMSCircleView view, boolean clickable) {\n            view.setClickable(clickable);\n        }\n\n        @ReactProp(name = \"fillColor\", defaultInt = Color.BLACK)\n        public void setFillColor(HMSCircleView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setFillColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setFillColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"radius\", defaultDouble = 0)\n        public void setRadius(HMSCircleView view, double radius) {\n            view.setRadius(radius);\n        }\n\n        @ReactProp(name = \"strokeColor\")\n        public void setStrokeColor(HMSCircleView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setStrokeColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setStrokeColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"strokeWidth\", defaultFloat = 1f)\n        public void setStrokeWidth(HMSCircleView view, float strokeWidth) {\n            view.setStrokeWidth(strokeWidth);\n        }\n\n        @ReactProp(name = \"strokePattern\")\n        public void setStrokePattern(HMSCircleView view, ReadableArray strokePattern) {\n            view.setStrokePattern(strokePattern);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSCircleView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"zIndex\", defaultFloat = 1.0f)\n        public void setZIndex(HMSCircleView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n    }\n\n    private void setAnimation(ReadableArray args) {\n        if (args == null) {\n            return;\n        }\n        ReadableMap animationMap = args.getMap(0);\n        ReadableMap defaultsMap = args.getMap(1);\n        if (animationMap == null) {\n            return;\n        }\n\n        ReadableMapKeySetIterator it = animationMap.keySetIterator();\n        if  (it.hasNextKey()) {\n            String key = it.nextKey();\n            if (key.equals(\"translate\")) {\n                Animation animation = ReactUtils.getAnimationFromCommandArgs(animationMap.getMap(key), defaultsMap, key);\n                if (animation != null) {\n                    animation.setAnimationListener(new Animation.AnimationListener() {\n                        @Override\n                        public void onAnimationStart() {\n                            WritableMap event = ReactUtils.getWritableMapFromAnimation(animation);\n                            event.putString(\"type\", key);\n                            logger.sendSingleEvent(\"HMSCircle.onAnimationStart\");\n                            sendEvent(Manager.Event.ANIMATION_START, event);\n                        }\n\n                        @Override\n                        public void onAnimationEnd() {\n                            WritableMap event = ReactUtils.getWritableMapFromAnimation(animation);\n                            event.putString(\"type\", key);\n                            logger.sendSingleEvent(\"HMSCircle.onAnimationEnd\");\n                            sendEvent(Manager.Event.ANIMATION_END, event);\n                        }\n                    });\n                    mAnimation = animation;\n                }\n            } else  {\n                Log.w(TAG, \"Only translate animation is supported\");\n            }\n        }\n\n        if (mCircle != null && mAnimation != null) {\n            mCircle.setAnimation(mAnimation);\n        }\n    }\n\n    private void startAnimation() {\n        mCircle.startAnimation();\n    }\n\n    private void cleanAnimation() {\n        mAnimation = null;\n        mCircle.clearAnimation();\n    }\n\n    private void setCenter(ReadableMap center) {\n        LatLng latLng = ReactUtils.getLatLngFromReadableMap(center);\n        if (latLng == null) {\n            return;\n        }\n        mCircleOptions.center(latLng);\n        if (mCircle != null) {\n            mCircle.setCenter(latLng);\n        }\n    }\n\n    @Override\n    public void setClickable(boolean clickable) {\n        mCircleOptions.clickable(clickable);\n        if (mCircle != null) {\n            mCircle.setClickable(clickable);\n        }\n    }\n\n    private void setFillColor(int fillColor) {\n        mCircleOptions.fillColor(fillColor);\n        if (mCircle != null) {\n            mCircle.setFillColor(fillColor);\n        }\n    }\n\n    private void setRadius(double radius) {\n        mCircleOptions.radius(radius);\n        if (mCircle != null) {\n            mCircle.setRadius(radius);\n        }\n    }\n\n    private void setStrokeColor(int strokeColor) {\n        mCircleOptions.strokeColor(strokeColor);\n        if (mCircle != null) {\n            mCircle.setStrokeColor(strokeColor);\n        }\n    }\n\n    private void setStrokePattern(ReadableArray strokePatternReadableArray) {\n        List<PatternItem> strokePattern = ReactUtils.getPatternItemListFromReadableArray(strokePatternReadableArray);\n        mCircleOptions.strokePattern(strokePattern);\n        if (mCircle != null) {\n            mCircle.setStrokePattern(strokePattern);\n        }\n    }\n\n    private void setStrokeWidth(float strokeWidth) {\n        mCircleOptions.strokeWidth(strokeWidth);\n        if (mCircle != null) {\n            mCircle.setStrokeWidth(strokeWidth);\n        }\n    }\n\n    private void setVisible(boolean visible) {\n        mCircleOptions.visible(visible);\n        if (mCircle != null) {\n            mCircle.setVisible(visible);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mCircleOptions.zIndex(zIndex);\n        if (mCircle != null) {\n            mCircle.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public Circle addTo(HuaweiMap huaweiMap) {\n        mCircle = huaweiMap.addCircle(mCircleOptions);\n        return mCircle;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if(mCircle == null) {\n            return;\n        }\n        mCircle.remove();\n        mCircle = null;\n        mCircleOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mCircle == null){\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromCircle(mCircle);\n        } catch (NullPointerException e){\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mCircleOptions == null){\n            return null;\n        }\n        return ReactUtils.getWritableMapFromCircleOptions(mCircleOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSGroundOverlayView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.GroundOverlay;\nimport com.huawei.hms.maps.model.GroundOverlayOptions;\nimport com.huawei.hms.maps.model.LatLngBounds;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\nimport com.huawei.hms.rn.map.utils.UriIconController;\nimport com.huawei.hms.rn.map.utils.UriIconView;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\n\npublic class HMSGroundOverlayView extends MapLayerView implements UriIconView {\n    private static final String TAG = HMSGroundOverlayView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSGroundOverlayView.class.getSimpleName();\n    private GroundOverlayOptions mGroundOverlayOptions = new GroundOverlayOptions();\n    private GroundOverlay mGroundOverlay;\n    private boolean mOptionPositionSet = false;\n    private final UriIconController uriIconController;\n\n    public HMSGroundOverlayView(Context context) {\n        super(context);\n        uriIconController = new UriIconController(context, this);\n    }\n\n    @Override\n    public void setUriIcon(BitmapDescriptor bitmapDescriptor, ReadableMap options) {\n        mGroundOverlayOptions.image(bitmapDescriptor);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setImage(bitmapDescriptor);\n        }\n    }\n\n    public static class Manager extends MapLayerViewManager<HMSGroundOverlayView> {\n        private final HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSGroundOverlayView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSGroundOverlayView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSGroundOverlay\");\n            HMSGroundOverlayView view = new HMSGroundOverlayView(context);\n            logger.sendSingleEvent(\"HMSGroundOverlay\");\n            return view;\n        }\n\n        @ReactProp(name = \"anchor\")\n        public void setAnchor(HMSGroundOverlayView view, ReadableArray anchor) {\n            view.setAnchor(anchor);\n        }\n\n        @ReactProp(name = \"bearing\")\n        public void setBearing(HMSGroundOverlayView view, float bearing) {\n            view.setBearing(bearing);\n        }\n\n        @ReactProp(name = \"clickable\", defaultBoolean = true)\n        public void setClickable(HMSGroundOverlayView view, boolean clickable) {\n            view.setClickable(clickable);\n        }\n\n        @ReactProp(name = \"image\")\n        public void setImage(HMSGroundOverlayView view, ReadableMap image) {\n            view.setImage(image);\n        }\n\n        @ReactProp(name = \"coordinate\")\n        public void setPosition(HMSGroundOverlayView view, Dynamic position) {\n            view.setPosition(position);\n        }\n\n        @ReactProp(name = \"transparency\")\n        public void setTransparency(HMSGroundOverlayView view, float transparency) {\n            view.setTransparency(transparency);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSGroundOverlayView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"zIndex\", defaultFloat = 1.0f)\n        public void setZIndex(HMSGroundOverlayView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n    }\n\n    public void setAnchor(ReadableArray anchor) {\n        if (ReactUtils.hasValidElement(anchor, 0, ReadableType.Number)\n                && ReactUtils.hasValidElement(anchor, 1, ReadableType.Number)) {\n            float u = (float) anchor.getDouble(0);\n            float v = (float) anchor.getDouble(1);\n            mGroundOverlayOptions.anchor(u, v);\n        }\n    }\n\n    public void setBearing(float bearing) {\n        mGroundOverlayOptions.bearing(bearing);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setBearing(bearing);\n        }\n    }\n\n    @Override\n    public void setClickable(boolean clickable) {\n        mGroundOverlayOptions.clickable(clickable);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setClickable(clickable);\n        }\n    }\n\n    private void setImage(ReadableMap image) {\n        BitmapDescriptor bitmapDescriptor = ReactUtils.getBitmapDescriptorFromReadableMap(image);\n        setUriIcon(bitmapDescriptor, null);\n        if(image.hasKey(\"uri\")){\n            uriIconController.setUriIcon(image);\n        }\n    }\n\n    private void setPosition(Dynamic position) {\n        if (position.getType() == ReadableType.Map) {\n            ReadableMap positionMap = position.asMap();\n            LatLng latLng = ReactUtils.getLatLngFromReadableMap(positionMap);\n            if (latLng == null) {\n                return;\n            }\n            if (ReactUtils.hasValidKey(positionMap, \"width\", ReadableType.Number)\n                    && ReactUtils.hasValidKey(positionMap, \"height\", ReadableType.Number)) {\n                float width = (float) positionMap.getDouble(\"width\");\n                float height = (float) positionMap.getDouble(\"height\");\n                if (!mOptionPositionSet) {\n                    mOptionPositionSet = true;\n                    mGroundOverlayOptions.position(latLng, width, height);\n                } else {\n                    if (mGroundOverlay != null) {\n                        mGroundOverlay.setDimensions(width, height);\n                    }\n                }\n            }\n            if (mGroundOverlay != null) {\n                mGroundOverlay.setPosition(latLng);\n            }\n        } else if (position.getType() == ReadableType.Array) {\n            ReadableArray positionArray = position.asArray();\n            LatLngBounds latLngBounds = ReactUtils.getLatLngBoundsFromReadableArray(positionArray);\n            mGroundOverlayOptions.positionFromBounds(latLngBounds);\n            if (mGroundOverlay != null) {\n                mGroundOverlay.setPositionFromBounds(latLngBounds);\n            }\n        }\n    }\n\n    private void setTransparency(float transparency) {\n        mGroundOverlayOptions.transparency(transparency);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setTransparency(transparency);\n        }\n    }\n\n    private void setVisible(boolean visible) {\n        mGroundOverlayOptions.visible(visible);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setVisible(visible);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mGroundOverlayOptions.zIndex(zIndex);\n        if (mGroundOverlay != null) {\n            mGroundOverlay.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public GroundOverlay addTo(HuaweiMap huaweiMap) {\n        mGroundOverlay = huaweiMap.addGroundOverlay(mGroundOverlayOptions);\n        return mGroundOverlay;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if(mGroundOverlay == null) {\n            return;\n        }\n        mGroundOverlay.remove();\n        mGroundOverlay = null;\n        mGroundOverlayOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mGroundOverlay == null){\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromGroundOverlay(mGroundOverlay);\n        } catch (NullPointerException e){\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mGroundOverlayOptions == null){\n            return null;\n        }\n        return ReactUtils.getWritableMapFromGroundOverlayOptions(mGroundOverlayOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSHeatMapView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.HeatMap;\nimport com.huawei.hms.maps.model.HeatMapOptions;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\n\nimport java.security.SecureRandom;\n\npublic class HMSHeatMapView extends HMSMapView.MapLayerView {\n    private static final SecureRandom RANDOM = new SecureRandom();\n\n    private HeatMapOptions mHeatMapOptions = new HeatMapOptions();\n\n    private HeatMap mHeatMap;\n\n    HMSLogger logger;\n\n    public HMSHeatMapView(Context context) {\n        super(context);\n        logger = HMSLogger.getInstance(context);\n    }\n\n    public static class Manager extends HMSMapView.MapLayerViewManager<HMSHeatMapView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSHeatMapView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSHeatMapView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSHeatMap\");\n            HMSHeatMapView view = new HMSHeatMapView(context);\n            logger.sendSingleEvent(\"HMSHeatMap\");\n            return view;\n        }\n\n        @ReactProp(name = \"dataSet\")\n        public void setDataSet(HMSHeatMapView view, String dataSet) {\n            view.setDataSet(dataSet);\n        }\n\n        @ReactProp(name = \"intensity\")\n        public void setIntensity(HMSHeatMapView view, Dynamic intensity) {\n            if (intensity.getType() == ReadableType.Number) {\n                view.setIntensity(intensity.asDouble());\n            } else if (intensity.getType() == ReadableType.Map) {\n                view.setIntensity(intensity.asMap());\n            }\n        }\n\n        @ReactProp(name = \"opacity\")\n        public void setOpacity(HMSHeatMapView view, Dynamic opacity) {\n            if (opacity.getType() == ReadableType.Number) {\n                view.setOpacity(opacity.asDouble());\n            } else if (opacity.getType() == ReadableType.Map) {\n                view.setOpacity(opacity.asMap());\n            }\n        }\n\n        @ReactProp(name = \"radius\")\n        public void setRadius(HMSHeatMapView view, Dynamic radius) {\n            if (radius.getType() == ReadableType.Number) {\n                view.setRadius(radius.asDouble());\n            } else if (radius.getType() == ReadableType.Map) {\n                view.setRadius(radius.asMap());\n            }\n        }\n\n        @ReactProp(name = \"radiusUnit\")\n        public void setRadiusUnit(HMSHeatMapView view, String radiusUnit) {\n            view.setRadiusUnit(radiusUnit);\n        }\n\n        @ReactProp(name = \"isVisible\")\n        public void setVisible(HMSHeatMapView view, boolean isVisible) {\n            view.setVisible(isVisible);\n        }\n\n        @ReactProp(name = \"resourceId\")\n        public void setResourceId(HMSHeatMapView view, int resourceId) {\n            view.setResourceId(resourceId);\n        }\n\n        @ReactProp(name = \"color\")\n        public void setColor(HMSHeatMapView view, ReadableMap colorMap) {\n            view.setColor(colorMap);\n        }\n    }\n\n    private void setDataSet(String dataSet) {\n        mHeatMapOptions.dataSet(dataSet);\n    }\n\n    private void setColor(ReadableMap colorMap) {\n        mHeatMapOptions.color(ReactUtils.toFloatIntegerMap(colorMap));\n        if (mHeatMap != null) {\n            mHeatMap.setColor(ReactUtils.toFloatIntegerMap(colorMap));\n        }\n    }\n\n    private void setIntensity(double intensity) {\n        mHeatMapOptions.intensity((float) intensity);\n        if (mHeatMap != null) {\n            mHeatMap.setIntensity((float) intensity);\n        }\n    }\n\n    private void setIntensity(ReadableMap intensityMap) {\n        mHeatMapOptions.intensity(ReactUtils.toFloatMap(intensityMap));\n        if (mHeatMap != null) {\n            mHeatMap.setIntensity(ReactUtils.toFloatMap(intensityMap));\n        }\n    }\n\n    private void setOpacity(double opacity) {\n        mHeatMapOptions.opacity((float) opacity);\n        if (mHeatMap != null) {\n            mHeatMap.setOpacity((float) opacity);\n        }\n    }\n\n    private void setOpacity(ReadableMap opacityMap) {\n        mHeatMapOptions.opacity(ReactUtils.toFloatMap(opacityMap));\n        if (mHeatMap != null) {\n            mHeatMap.setOpacity(ReactUtils.toFloatMap(opacityMap));\n        }\n    }\n\n    private void setRadius(double radius) {\n        mHeatMapOptions.radius((float) radius);\n        if (mHeatMap != null) {\n            mHeatMap.setRadius((float) radius);\n        }\n    }\n\n    private void setRadius(ReadableMap radiusMap) {\n        mHeatMapOptions.radius(ReactUtils.toFloatMap(radiusMap));\n        if (mHeatMap != null) {\n            mHeatMap.setRadius(ReactUtils.toFloatMap(radiusMap));\n        }\n    }\n\n    private void setRadiusUnit(String radiusUnit) {\n        mHeatMapOptions.radiusUnit(ReactUtils.getRadiusUnitFromString(radiusUnit));\n        if (mHeatMap != null) {\n            mHeatMap.setRadiusUnit(ReactUtils.getRadiusUnitFromString(radiusUnit));\n        }\n    }\n\n    private void setVisible(boolean isVisible) {\n        mHeatMapOptions.visible(isVisible);\n        if (mHeatMap != null) {\n            mHeatMap.setVisible(isVisible);\n        }\n    }\n\n    private void setResourceId(int resourceId) {\n        mHeatMapOptions.setResourceId(resourceId);\n    }\n\n    public static String generateID() {\n        return String.valueOf(RANDOM.nextInt());\n    }\n\n    @Override\n    public HeatMap addTo(HuaweiMap huaweiMap) {\n        logger.startMethodExecutionTimer(\"addTo\");\n        mHeatMap = huaweiMap.addHeatMap(generateID(), mHeatMapOptions);\n        logger.sendSingleEvent(\"addTo\");\n        return mHeatMap;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if (mHeatMap == null) {\n            return;\n        }\n        logger.startMethodExecutionTimer(\"removeFrom\");\n        mHeatMap.remove();\n        logger.sendSingleEvent(\"removeFrom\");\n        mHeatMap = null;\n        mHeatMapOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mHeatMap == null) {\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromHeatMap(mHeatMap);\n        } catch (NullPointerException e) {\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mHeatMapOptions == null) {\n            return null;\n        }\n        return ReactUtils.getWritableMapFromHeatMapOptions(mHeatMapOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSInfoWindowView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.uimanager.LayoutShadowNode;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.UIViewOperationQueue;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HMSInfoWindowView extends LinearLayout {\n    private static final String TAG = HMSInfoWindowView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSInfoWindowView.class.getSimpleName();\n    public int width;\n    public int height;\n\n    public HMSInfoWindowView(Context context) {\n        super(context);\n    }\n\n    @Override\n    public void addView(View child) {\n        super.addView(child);\n    }\n\n    public static class Manager extends ViewGroupManager<HMSInfoWindowView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSInfoWindowView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSInfoWindowView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSInfoWindow\");\n            HMSInfoWindowView view = new HMSInfoWindowView(context);\n            logger.sendSingleEvent(\"HMSInfoWindow\");\n            return view;\n        }\n\n        @Override\n        public LayoutShadowNode createShadowNodeInstance() {\n            return new SizeLayoutShadowNode();\n        }\n\n        @Override\n        public void updateExtraData(HMSInfoWindowView root, Object extraData) {\n            Map<String, Integer> sizeData = (Map<String, Integer>) extraData;\n            root.width = sizeData.get(\"width\");\n            root.height = sizeData.get(\"height\");\n        }\n    }\n\n    public static class SizeLayoutShadowNode extends LayoutShadowNode {\n        @Override\n        public void onCollectExtraUpdates(UIViewOperationQueue uiViewOperationQueue) {\n            super.onCollectExtraUpdates(uiViewOperationQueue);\n            Map<String, Integer> sizeData = new HashMap<>();\n            sizeData.put(\"width\", (int)getLayoutWidth());\n            sizeData.put(\"height\", (int)getLayoutHeight());\n            uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), sizeData);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSMapPackage.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\npublic class HMSMapPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSMapView.Module(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new HMSMapView.Manager(reactContext),\n                new HMSCircleView.Manager(reactContext),\n                new HMSMarkerView.Manager(reactContext),\n                new HMSInfoWindowView.Manager(reactContext),\n                new HMSPolygonView.Manager(reactContext),\n                new HMSPolylineView.Manager(reactContext),\n                new HMSGroundOverlayView.Manager(reactContext),\n                new HMSTileOverlayView.Manager(reactContext),\n                new HMSHeatMapView.Manager(reactContext));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSMapView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport androidx.core.app.ActivityCompat;\n\nimport android.Manifest;\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.graphics.Bitmap;\nimport android.graphics.Point;\nimport android.location.Location;\nimport android.location.LocationManager;\nimport android.util.Base64;\nimport android.util.Log;\nimport android.view.View;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.LifecycleEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.UIManagerModule;\nimport com.facebook.react.uimanager.ViewGroupManager;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.facebook.react.uimanager.events.RCTEventEmitter;\nimport com.facebook.react.views.view.ReactViewGroup;\nimport com.huawei.hms.maps.CameraUpdate;\nimport com.huawei.hms.maps.CameraUpdateFactory;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.HuaweiMapOptions;\nimport com.huawei.hms.maps.MapView;\nimport com.huawei.hms.maps.MapsInitializer;\nimport com.huawei.hms.maps.OnMapReadyCallback;\nimport com.huawei.hms.maps.UiSettings;\nimport com.huawei.hms.maps.common.util.DistanceCalculator;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.CameraPosition;\nimport com.huawei.hms.maps.model.Circle;\nimport com.huawei.hms.maps.model.GroundOverlay;\nimport com.huawei.hms.maps.model.HeatMap;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.LatLngBounds;\nimport com.huawei.hms.maps.model.MapStyleOptions;\nimport com.huawei.hms.maps.model.Marker;\nimport com.huawei.hms.maps.model.MyLocationStyle;\nimport com.huawei.hms.maps.model.PointOfInterest;\nimport com.huawei.hms.maps.model.Polygon;\nimport com.huawei.hms.maps.model.Polyline;\nimport com.huawei.hms.maps.model.TileOverlay;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\nimport com.huawei.hms.rn.map.utils.UriIconController;\nimport com.huawei.hms.rn.map.utils.UriIconView;\n\nimport java.io.ByteArrayOutputStream;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSMapView extends MapView implements UriIconView, OnMapReadyCallback, LifecycleEventListener,\n        HuaweiMap.CancelableCallback, HuaweiMap.OnMapLoadedCallback, HuaweiMap.SnapshotReadyCallback,\n        HuaweiMap.InfoWindowAdapter, HuaweiMap.OnCameraIdleListener,\n        HuaweiMap.OnCameraMoveCanceledListener, HuaweiMap.OnCameraMoveListener, HuaweiMap.OnCameraMoveStartedListener,\n        HuaweiMap.OnCircleClickListener, HuaweiMap.OnGroundOverlayClickListener,\n        HuaweiMap.OnInfoWindowClickListener, HuaweiMap.OnInfoWindowCloseListener,\n        HuaweiMap.OnInfoWindowLongClickListener,\n        HuaweiMap.OnMapClickListener, HuaweiMap.OnMapLongClickListener,\n        HuaweiMap.OnMarkerClickListener, HuaweiMap.OnMarkerDragListener,\n        HuaweiMap.OnMyLocationButtonClickListener, HuaweiMap.OnMyLocationClickListener,\n        HuaweiMap.OnPoiClickListener, HuaweiMap.OnPolygonClickListener, HuaweiMap.OnPolylineClickListener {\n    private static final String TAG = HMSMapView.class.getSimpleName();\n    private final Runnable measureAndLayout = () -> {\n        measure(\n                MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),\n                MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));\n        layout(getLeft(), getTop(), getRight(), getBottom());\n    };\n    private ReactContext mReactContext;\n    private LocationManager mLocationManager;\n    private HuaweiMap mHuaweiMap;\n    private UiSettings mUiSettings;\n    private boolean mUseAnimation = false;\n    private int mAnimationDuration = 250;\n    private boolean mMyLocationEnabled = false;\n    private boolean mMyLocationButtonEnabled = true;\n    private boolean mCompassEnabled = true;\n    private boolean mZoomControlsEnabled = true;\n    private Map<Circle, HMSCircleView> circleMap = new HashMap<>();\n    private Map<Marker, HMSMarkerView> markerMap = new HashMap<>();\n    private Map<Polygon, HMSPolygonView> polygonMap = new HashMap<>();\n    private Map<Polyline, HMSPolylineView> polylineMap = new HashMap<>();\n    private Map<GroundOverlay, HMSGroundOverlayView> groundOverlayMap = new HashMap<>();\n    private Map<TileOverlay, HMSTileOverlayView> tileOverlayMap = new HashMap<>();\n    private Map<HeatMap, HMSHeatMapView> heatMapMap = new HashMap<>();\n    private List<MapLayerView> allMapLayerViews = new ArrayList<>();\n\n    private CameraPosition initialCameraPosition;\n    private int initialMapType;\n    private boolean initialBuildingsEnabled;\n    private String initialDescription;\n    private String initialMapStyle;\n    private boolean initialMyLocationEnabled;\n    private int[] initialMapPadding;\n    private boolean initialMarkerClustering;\n    private boolean initialMyLocationButtonEnabled;\n    private boolean initialCompassEnabled;\n    private boolean initialZoomControlsEnabled;\n    private boolean initialDarkMode;\n    private Point centerCoordinates = new Point();\n    private UriIconController uriIconController;\n    private String styleId;\n    private String previewId;\n\n    private MyLocationStyle initialMyLocationStyle = null;\n\n    private final HMSLogger logger;\n\n    public HMSMapView(final Context context, HuaweiMapOptions huaweiMapOptions) {\n        super(context, huaweiMapOptions);\n        logger = HMSLogger.getInstance(context);\n        uriIconController = new UriIconController(context, this);\n        if (context instanceof ReactContext) {\n            mReactContext = (ReactContext) context;\n        }\n        Object systemService = context.getSystemService(Context.LOCATION_SERVICE);\n        if (systemService instanceof LocationManager) {\n            mLocationManager = (LocationManager) systemService;\n        }\n\n        this.onCreate(null);\n        this.getMapAsync(this);\n    }\n\n    @Override\n    public void requestLayout() {\n        super.requestLayout();\n        post(measureAndLayout);\n    }\n\n    @Override\n    public void onMapReady(HuaweiMap huaweiMap) {\n        mHuaweiMap = huaweiMap;\n        mUiSettings = mHuaweiMap.getUiSettings();\n        mHuaweiMap.setInfoWindowAdapter(this);\n        mHuaweiMap.setOnCameraIdleListener(this);\n        mHuaweiMap.setOnCameraMoveCanceledListener(this);\n        mHuaweiMap.setOnCameraMoveListener(this);\n        mHuaweiMap.setOnCameraMoveStartedListener(this);\n        mHuaweiMap.setOnCircleClickListener(this);\n        mHuaweiMap.setOnGroundOverlayClickListener(this);\n        mHuaweiMap.setOnInfoWindowClickListener(this);\n        mHuaweiMap.setOnInfoWindowCloseListener(this);\n        mHuaweiMap.setOnInfoWindowLongClickListener(this);\n        mHuaweiMap.setOnMapClickListener(this);\n        mHuaweiMap.setOnMapLoadedCallback(this);\n        mHuaweiMap.setOnMapLongClickListener(this);\n        mHuaweiMap.setOnMarkerClickListener(this);\n        mHuaweiMap.setOnMarkerDragListener(this);\n        mHuaweiMap.setOnMyLocationButtonClickListener(this);\n        mHuaweiMap.setOnMyLocationClickListener(this);\n        mHuaweiMap.setOnPoiClickListener(this);\n        mHuaweiMap.setOnPolygonClickListener(this);\n        mHuaweiMap.setOnPolylineClickListener(this);\n        mReactContext.addLifecycleEventListener(this);\n\n        initializeMap();\n        logger.sendSingleEvent(\"HMSMap.onMapReady\");\n        sendEvent(Manager.Event.MAP_READY, null);\n    }\n\n    private void initializeMap() {\n        setCamera(initialCameraPosition);\n        setMapType(initialMapType);\n        setBuildingsEnabled(initialBuildingsEnabled);\n        setDescription(initialDescription);\n        setMapStyle(initialMapStyle);\n        setMyLocationEnabled(initialMyLocationEnabled);\n        setMyLocationButtonEnabled(initialMyLocationButtonEnabled);\n        setMarkerClustering(initialMarkerClustering);\n        setCompassEnabled(initialCompassEnabled);\n        setZoomControlsEnabled(initialZoomControlsEnabled);\n        setStyleId(styleId);\n        setPreviewId(previewId);\n        setDarkMode(initialDarkMode);\n        setMyLocationStyle(initialMyLocationStyle);\n        if (initialMapPadding != null) {\n            mHuaweiMap.setPadding(initialMapPadding[0], initialMapPadding[1], initialMapPadding[2], initialMapPadding[3]);\n        }\n    }\n\n    @Override\n    public void onHostResume() {\n        setMyLocationEnabled(hasLocationPermission() && mMyLocationEnabled);\n    }\n\n    @Override\n    public void onHostPause() {\n        setMyLocationEnabled(false);\n    }\n\n    @Override\n    public void onHostDestroy() {\n        mReactContext.removeLifecycleEventListener(this);\n    }\n\n    @Override\n    public void onFinish() {\n        logger.sendSingleEvent(\"HMSMap.onFinish\");\n        sendEvent(Manager.Event.CAMERA_UPDATE_FINISHED, null);\n    }\n\n    @Override\n    public void onCancel() {\n        logger.sendSingleEvent(\"HMSMap.onCancel\");\n        sendEvent(Manager.Event.CAMERA_UPDATE_CANCELED, null);\n    }\n\n    @Override\n    public View getInfoContents(Marker marker) {\n        return null;\n    }\n\n    @Override\n    public View getInfoWindow(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            return markerView.getWrappedInfoWindowView();\n        }\n        return null;\n    }\n\n    @Override\n    public void onCameraIdle() {\n        logger.sendSingleEvent(\"HMSMap.onCameraIdle\");\n        sendEvent(Manager.Event.CAMERA_IDLE,\n                ReactUtils.getWritableMapFromCameraPosition(mHuaweiMap.getCameraPosition()));\n    }\n\n    @Override\n    public void onCameraMoveCanceled() {\n        logger.sendSingleEvent(\"HMSMap.onCameraMoveCanceled\");\n        sendEvent(Manager.Event.CAMERA_MOVE_CANCELED, null);\n    }\n\n    @Override\n    public void onCameraMove() {\n        logger.sendSingleEvent(\"HMSMap.onCameraMove\");\n        sendEvent(Manager.Event.CAMERA_MOVE,\n                ReactUtils.getWritableMapFromCameraPosition(mHuaweiMap.getCameraPosition()));\n    }\n\n    @Override\n    public void onCameraMoveStarted(int i) {\n        WritableMap wm = new WritableNativeMap();\n        wm.putInt(\"reason\", i);\n        logger.sendSingleEvent(\"HMSMap.onCameraMoveStarted\");\n        sendEvent(Manager.Event.CAMERA_MOVE_STARTED, wm);\n    }\n\n    @Override\n    public void onCircleClick(Circle circle) {\n        HMSCircleView circleView = circleMap.get(circle);\n        if (circleView != null) {\n            logger.sendSingleEvent(\"HMSMap.onCircleClick\");\n            circleView.sendEvent(MapLayerViewManager.Event.CLICK, null);\n        }\n    }\n\n    @Override\n    public void onGroundOverlayClick(GroundOverlay groundOverlay) {\n        HMSGroundOverlayView groundOverlayView = groundOverlayMap.get(groundOverlay);\n        if (groundOverlayView != null) {\n            logger.sendSingleEvent(\"HMSMap.onGroundOverlayClick\");\n            groundOverlayView.sendEvent(MapLayerViewManager.Event.CLICK, null);\n        }\n    }\n\n    @Override\n    public void onInfoWindowClick(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onInfoWindowClick\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.INFO_WINDOW_CLICK, null);\n        }\n    }\n\n    @Override\n    public void onInfoWindowClose(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onInfoWindowClose\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.INFO_WINDOW_CLOSE, null);\n        }\n    }\n\n    @Override\n    public void onInfoWindowLongClick(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onInfoWindowLongClick\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.INFO_WINDOW_LONG_CLICK, null);\n        }\n    }\n\n    @Override\n    public void onMapClick(LatLng latLng) {\n        WritableMap wm = ReactUtils.getWritableMapFromProjectionOnLatLng(mHuaweiMap.getProjection(), latLng);\n        logger.sendSingleEvent(\"HMSMap.onMapClick\");\n        sendEvent(Manager.Event.MAP_CLICK, wm);\n    }\n\n    @Override\n    public void onMapLoaded() {\n        logger.sendSingleEvent(\"HMSMap.onMapLoaded\");\n        sendEvent(Manager.Event.MAP_LOADED, null);\n    }\n\n    @Override\n    public void onMapLongClick(LatLng latLng) {\n        WritableMap wm = ReactUtils.getWritableMapFromProjectionOnLatLng(mHuaweiMap.getProjection(), latLng);\n        logger.sendSingleEvent(\"HMSMap.onMapLongClick\");\n        sendEvent(Manager.Event.MAP_LONG_CLICK, wm);\n    }\n\n    @Override\n    public boolean onMarkerClick(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onMarkerClick\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.CLICK, null);\n\n            if (!markerView.defaultActionOnClick) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    @Override\n    public void onMarkerDragStart(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onMarkerDragStart\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.DRAG_START, ReactUtils.getWritableMapFromLatLng(marker.getPosition()));\n        }\n    }\n\n    @Override\n    public void onMarkerDrag(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onMarkerDrag\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.DRAG, ReactUtils.getWritableMapFromLatLng(marker.getPosition()));\n        }\n    }\n\n    @Override\n    public void onMarkerDragEnd(Marker marker) {\n        HMSMarkerView markerView = markerMap.get(marker);\n        if (markerView != null) {\n            logger.sendSingleEvent(\"HMSMap.onMarkerDragEnd\");\n            markerView.sendEvent(HMSMarkerView.Manager.Event.DRAG_END, ReactUtils.getWritableMapFromLatLng(marker.getPosition()));\n        }\n    }\n\n    @Override\n    public boolean onMyLocationButtonClick() {\n        logger.sendSingleEvent(\"HMSMap.onMyLocationButtonClick\");\n        sendEvent(Manager.Event.MY_LOCATION_BUTTON_CLICK, null);\n        return false;\n    }\n\n    @Override\n    public void onMyLocationClick(Location location) {\n        logger.sendSingleEvent(\"HMSMap.onMyLocationClick\");\n        sendEvent(Manager.Event.MY_LOCATION_CLICK, null);\n    }\n\n    @Override\n    public void onPoiClick(PointOfInterest pointOfInterest) {\n        WritableMap wm = ReactUtils.getWritableMapPointOfInterest(pointOfInterest);\n        logger.sendSingleEvent(\"HMSMap.onPoiClick\");\n        sendEvent(Manager.Event.POI_CLICK, wm);\n    }\n\n    @Override\n    public void onPolygonClick(Polygon polygon) {\n        HMSPolygonView polygonView = polygonMap.get(polygon);\n        if (polygonView != null) {\n            logger.sendSingleEvent(\"HMSMap.onPolygonClick\");\n            polygonView.sendEvent(MapLayerViewManager.Event.CLICK, null);\n        }\n    }\n\n    @Override\n    public void onPolylineClick(Polyline polyline) {\n        HMSPolylineView polylineView = polylineMap.get(polyline);\n        if (polylineView != null) {\n            logger.sendSingleEvent(\"HMSMap.onPolylineClick\");\n            polylineView.sendEvent(MapLayerViewManager.Event.CLICK, null);\n        }\n    }\n\n    @Override\n    public void onSnapshotReady(Bitmap bitmap) {\n        ByteArrayOutputStream stream = new ByteArrayOutputStream();\n        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);\n        String bitmapString = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);\n        WritableMap wm = new WritableNativeMap();\n        wm.putString(\"bitmap\", bitmapString);\n        logger.sendSingleEvent(\"HMSMap.takeSnapshot\");\n        sendEvent(Manager.Event.SNAPSHOT_READY, wm);\n    }\n\n    public boolean hasLocationPermission() {\n        int fineLoc = ActivityCompat.checkSelfPermission(mReactContext, Manifest.permission.ACCESS_FINE_LOCATION);\n        int coarseLoc = ActivityCompat.checkSelfPermission(mReactContext, Manifest.permission.ACCESS_COARSE_LOCATION);\n\n        return fineLoc == PackageManager.PERMISSION_GRANTED || coarseLoc == PackageManager.PERMISSION_GRANTED;\n    }\n\n    private void clear() {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.clear();\n        }\n    }\n\n    private void takeSnapshot() {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.snapshot(this);\n        }\n    }\n\n    private void resetZoomPreference() {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.resetMinMaxZoomPreference();\n        }\n    }\n\n    private void stopAnimation() {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.stopAnimation();\n        }\n    }\n\n    private void setCameraPosition(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Map)) {\n            CameraPosition cameraPosition = ReactUtils.getCameraPositionFromReadableMap(args.getMap(0));\n            applyCameraUpdate(CameraUpdateFactory.newCameraPosition(cameraPosition));\n        }\n    }\n\n    private void setCoordinates(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Map)) {\n            LatLng latLng = ReactUtils.getLatLngFromReadableMap(args.getMap(0));\n            if (ReactUtils.hasValidElement(args, 1, ReadableType.Number)) {\n                float zoom = (float) args.getDouble(1);\n                applyCameraUpdate(CameraUpdateFactory.newLatLngZoom(latLng, zoom));\n            } else {\n                applyCameraUpdate(CameraUpdateFactory.newLatLng(latLng));\n            }\n        }\n    }\n\n    private void setBounds(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Array)\n                && ReactUtils.hasValidElement(args, 1, ReadableType.Number)) {\n            LatLngBounds latLngBounds = ReactUtils.getLatLngBoundsFromReadableArray(args.getArray(0));\n            int padding = args.getInt(1);\n            if (ReactUtils.hasValidElement(args, 2, ReadableType.Number)\n                    && ReactUtils.hasValidElement(args, 3, ReadableType.Number)) {\n                int width = args.getInt(2);\n                int height = args.getInt(3);\n                applyCameraUpdate(CameraUpdateFactory.newLatLngBounds(latLngBounds, width, height, padding));\n            } else {\n                applyCameraUpdate(CameraUpdateFactory.newLatLngBounds(latLngBounds, padding));\n            }\n        }\n    }\n\n    private void scrollBy(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Number)\n                && ReactUtils.hasValidElement(args, 0, ReadableType.Number)) {\n            float xPixel = (float) args.getDouble(0);\n            float yPixel = (float) args.getDouble(1);\n            applyCameraUpdate(CameraUpdateFactory.scrollBy(xPixel, yPixel));\n        }\n    }\n\n    private void zoomBy(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Number)) {\n            float amount = (float) args.getDouble(0);\n            if (ReactUtils.hasValidElement(args, 1, ReadableType.Map)) {\n                ReadableMap focus = args.getMap(1);\n                applyCameraUpdate(CameraUpdateFactory.zoomBy(amount, ReactUtils.getPointFromReadableMap(focus)));\n            } else {\n                applyCameraUpdate(CameraUpdateFactory.zoomBy(amount));\n            }\n        }\n    }\n\n    private void zoomTo(ReadableArray args) {\n        if (ReactUtils.hasValidElement(args, 0, ReadableType.Number)) {\n            float zoom = (float) args.getDouble(0);\n            applyCameraUpdate(CameraUpdateFactory.zoomTo(zoom));\n        }\n    }\n\n    private void zoomIn() {\n        applyCameraUpdate(CameraUpdateFactory.zoomIn());\n    }\n\n    private void zoomOut() {\n        applyCameraUpdate(CameraUpdateFactory.zoomOut());\n    }\n\n    private void sendEvent(Manager.Event event, @Nullable WritableMap wm) {\n        Log.i(TAG, \"Sending event: \" + event.getName());\n        mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n    }\n\n    public void addMapLayer(View child, int index) {\n        if (child instanceof MapLayerView) {\n            allMapLayerViews.add(index, (MapLayerView) child);\n            if (child instanceof HMSCircleView) {\n                HMSCircleView circleView = (HMSCircleView) child;\n                Circle circle = circleView.addTo(mHuaweiMap);\n                circleMap.put(circle, circleView);\n            }\n            if (child instanceof HMSMarkerView) {\n                HMSMarkerView markerView = (HMSMarkerView) child;\n                Marker marker = markerView.addTo(mHuaweiMap);\n                markerMap.put(marker, markerView);\n            }\n            if (child instanceof HMSPolygonView) {\n                HMSPolygonView polygonView = (HMSPolygonView) child;\n                Polygon polygon = polygonView.addTo(mHuaweiMap);\n                polygonMap.put(polygon, polygonView);\n            }\n            if (child instanceof HMSPolylineView) {\n                HMSPolylineView polylineView = (HMSPolylineView) child;\n                Polyline polyline = polylineView.addTo(mHuaweiMap);\n                polylineMap.put(polyline, polylineView);\n            }\n            if (child instanceof HMSGroundOverlayView) {\n                HMSGroundOverlayView groundOverlayView = (HMSGroundOverlayView) child;\n                GroundOverlay groundOverlay = groundOverlayView.addTo(mHuaweiMap);\n                groundOverlayMap.put(groundOverlay, groundOverlayView);\n            }\n            if (child instanceof HMSTileOverlayView) {\n                HMSTileOverlayView tileOverlayView = (HMSTileOverlayView) child;\n                TileOverlay tileOverlay = tileOverlayView.addTo(mHuaweiMap);\n                tileOverlayMap.put(tileOverlay, tileOverlayView);\n            }\n            if (child instanceof HMSHeatMapView) {\n                HMSHeatMapView hmsHeatMapView = (HMSHeatMapView) child;\n                HeatMap heatMap = hmsHeatMapView.addTo(mHuaweiMap);\n                heatMapMap.put(heatMap, hmsHeatMapView);\n            }\n        }\n    }\n\n    public void removeMapLayer(int index) {\n        MapLayerView view = allMapLayerViews.remove(index);\n        view.removeFrom(mHuaweiMap);\n    }\n\n    public int getMapLayerSize() {\n        return allMapLayerViews.size();\n    }\n\n    public View getMapLayer(int index) {\n        return allMapLayerViews.get(index);\n    }\n\n    private void setBuildingsEnabled(boolean buildingsEnabled) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setBuildingsEnabled(buildingsEnabled);\n        } else {\n            initialBuildingsEnabled = buildingsEnabled;\n        }\n    }\n\n    private void setDescription(String description) {\n        if (mHuaweiMap != null && description != null) {\n            mHuaweiMap.setContentDescription(description);\n        } else {\n            initialDescription = description;\n        }\n    }\n\n    private void setMapStyle(String mapStyle) {\n        if (mHuaweiMap != null && mapStyle != null) {\n            mHuaweiMap.setMapStyle(new MapStyleOptions(mapStyle));\n            setCompassEnabled(mCompassEnabled);\n            setMyLocationButtonEnabled(mMyLocationButtonEnabled);\n            setZoomControlsEnabled(mZoomControlsEnabled);\n        } else {\n            initialMapStyle = mapStyle;\n        }\n    }\n\n    private void setStyleId(String styleId) {\n        if (mHuaweiMap != null && styleId != null) {\n            mHuaweiMap.setStyleId(styleId);\n        }\n    }\n\n    private void setPreviewId(String previewId) {\n        if (mHuaweiMap != null && previewId != null) {\n            mHuaweiMap.previewId(previewId);\n        }\n    }\n\n    private void setMyLocationEnabled(boolean myLocationEnabled) {\n        if (mHuaweiMap != null\n                && mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)\n                && mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {\n            try {\n                mHuaweiMap.setMyLocationEnabled(hasLocationPermission() && myLocationEnabled);\n                setMyLocationButtonEnabled(mMyLocationButtonEnabled);\n            } catch (Exception exception) {\n                Log.w(TAG, exception.getLocalizedMessage());\n            }\n        } else {\n            initialMyLocationEnabled = myLocationEnabled;\n        }\n    }\n\n    private void setMapPadding(ReadableMap mapPadding) {\n        if (mapPadding != null) {\n            int left = 0;\n            int top = 0;\n            int right = 0;\n            int bottom = 0;\n            if (ReactUtils.hasValidKey(mapPadding, \"left\", ReadableType.Number)) {\n                left = mapPadding.getInt(\"left\");\n            }\n            if (ReactUtils.hasValidKey(mapPadding, \"top\", ReadableType.Number)) {\n                top = mapPadding.getInt(\"top\");\n            }\n            if (ReactUtils.hasValidKey(mapPadding, \"right\", ReadableType.Number)) {\n                right = mapPadding.getInt(\"right\");\n            }\n            if (ReactUtils.hasValidKey(mapPadding, \"bottom\", ReadableType.Number)) {\n                bottom = mapPadding.getInt(\"bottom\");\n            }\n            if (mHuaweiMap != null) {\n                mHuaweiMap.setPadding(left, top, right, bottom);\n            } else {\n                initialMapPadding = new int[]{left, top, right, bottom};\n            }\n\n        }\n    }\n\n    private void setMarkerClustering(boolean markerClustering) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setMarkersClustering(markerClustering);\n        } else {\n            initialMarkerClustering = markerClustering;\n        }\n    }\n\n    private void setMyLocationButtonEnabled(boolean myLocationButtonEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setMyLocationButtonEnabled(myLocationButtonEnabled);\n        } else {\n            initialMyLocationButtonEnabled = myLocationButtonEnabled;\n        }\n    }\n\n    private void setScrollGesturesEnabledDuringRotateOrZoom(boolean scrollGesturesEnabledDuringRotateOrZoom) {\n        if (mUiSettings != null) {\n            mUiSettings.setScrollGesturesEnabledDuringRotateOrZoom(scrollGesturesEnabledDuringRotateOrZoom);\n        }\n    }\n\n    private void setCamera(CameraPosition cameraPosition) {\n        if (mHuaweiMap != null && cameraPosition != null) {\n            mHuaweiMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));\n        } else {\n            initialCameraPosition = cameraPosition;\n        }\n    }\n    private void setMyLocationStyle(MyLocationStyle myLocationStyle) {\n        if (mHuaweiMap != null && myLocationStyle != null) {\n            mHuaweiMap.setMyLocationStyle(myLocationStyle);\n        } else {\n            initialMyLocationStyle = myLocationStyle;\n        }\n    }\n\n    private void setCompassEnabled(boolean compassEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setCompassEnabled(compassEnabled);\n        } else {\n            initialCompassEnabled = compassEnabled;\n        }\n    }\n\n    private void setLatLngBoundsForCameraTarget(ReadableArray latLngBoundsForCameraTarget) {\n        if (mHuaweiMap != null && latLngBoundsForCameraTarget != null) {\n            mHuaweiMap.setLatLngBoundsForCameraTarget(\n                    ReactUtils.getLatLngBoundsFromReadableArray(latLngBoundsForCameraTarget));\n        }\n    }\n\n    private void setMapType(int mapType) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setMapType(mapType);\n        } else {\n            initialMapType = mapType;\n        }\n    }\n\n    private void setMaxZoomPreference(int maxZoomPreference) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setMaxZoomPreference(maxZoomPreference);\n        }\n    }\n\n    private void setMinZoomPreference(int minZoomPreference) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setMinZoomPreference(minZoomPreference);\n        }\n    }\n\n    private void setRotateGesturesEnabled(boolean rotateGesturesEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setRotateGesturesEnabled(rotateGesturesEnabled);\n        }\n    }\n\n    private void setScrollGesturesEnabled(boolean scrollGesturesEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setScrollGesturesEnabled(scrollGesturesEnabled);\n        }\n    }\n\n    private void setTiltGesturesEnabled(boolean tiltGesturesEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setTiltGesturesEnabled(tiltGesturesEnabled);\n        }\n    }\n\n    private void setZoomControlsEnabled(boolean zoomControlsEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setZoomControlsEnabled(zoomControlsEnabled);\n        } else {\n            initialZoomControlsEnabled = zoomControlsEnabled;\n        }\n    }\n\n    private void setZoomGesturesEnabled(boolean zoomGesturesEnabled) {\n        if (mUiSettings != null) {\n            mUiSettings.setZoomGesturesEnabled(zoomGesturesEnabled);\n        }\n    }\n\n    private void applyCameraUpdate(CameraUpdate cameraUpdate) {\n        if (mHuaweiMap != null && cameraUpdate != null) {\n            if (mUseAnimation) {\n                mHuaweiMap.animateCamera(cameraUpdate, mAnimationDuration, this);\n            } else {\n                mHuaweiMap.moveCamera(cameraUpdate);\n            }\n        }\n    }\n\n    private void setUseAnimation(boolean useAnimation) {\n        mUseAnimation = useAnimation;\n    }\n\n    private void setAnimationDuration(int animationDuration) {\n        mAnimationDuration = animationDuration;\n    }\n\n    private void setPointToCenter(ReadableMap setPointToCenter) {\n        centerCoordinates = ReactUtils.getPointFromReadableMap(setPointToCenter);\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setPointToCenter(centerCoordinates.x, centerCoordinates.y);\n        }\n    }\n\n    private void setGestureScaleByMapCenter(boolean gestureScaleByMapCenter) {\n        if (mUiSettings != null) {\n            mUiSettings.setGestureScaleByMapCenter(gestureScaleByMapCenter);\n            mHuaweiMap.setPointToCenter(centerCoordinates.x, centerCoordinates.y);\n        }\n    }\n\n    private void setTrafficEnabled(boolean trafficEnabled) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setTrafficEnabled(trafficEnabled);\n        }\n    }\n\n    private void setMarkerClusterColor(int color) {\n        if (mUiSettings != null) {\n            mUiSettings.setMarkerClusterColor(color);\n        }\n    }\n\n    private void setMarkerClusterTextColor(int color) {\n        if (mUiSettings != null) {\n            mUiSettings.setMarkerClusterTextColor(color);\n        }\n    }\n\n    private void setMarkerClusterIcon(ReadableMap icon) {\n        if (icon.hasKey(\"uri\")) {\n            uriIconController.setUriIcon(icon);\n            return;\n        }\n        if (mUiSettings != null) {\n            BitmapDescriptor bitmapDescriptor = ReactUtils.getBitmapDescriptorFromReadableMap(icon);\n            setUriIcon(bitmapDescriptor, null);\n        }\n    }\n\n    private void setLogoPosition(int gravity) {\n        if (mUiSettings != null) {\n            mUiSettings.setLogoPosition(gravity);\n        }\n    }\n\n    private void setLogoPadding(ReadableMap logoPadding) {\n        int start = 0;\n        int top = 0;\n        int end = 0;\n        int bottom = 0;\n        if (ReactUtils.hasValidKey(logoPadding, \"paddingStart\", ReadableType.Number)) {\n            start = logoPadding.getInt(\"paddingStart\");\n        }\n        if (ReactUtils.hasValidKey(logoPadding, \"paddingTop\", ReadableType.Number)) {\n            top = logoPadding.getInt(\"paddingTop\");\n        }\n        if (ReactUtils.hasValidKey(logoPadding, \"paddingEnd\", ReadableType.Number)) {\n            end = logoPadding.getInt(\"paddingEnd\");\n        }\n        if (ReactUtils.hasValidKey(logoPadding, \"paddingBottom\", ReadableType.Number)) {\n            bottom = logoPadding.getInt(\"paddingBottom\");\n        }\n        if (mUiSettings != null) {\n            mUiSettings.setLogoPadding(start, top, end, bottom);\n        }\n    }\n\n    private void setDarkMode(boolean darkMode) {\n        if (mHuaweiMap != null) {\n            mHuaweiMap.setDark(darkMode);\n        } else {\n            initialDarkMode = darkMode;\n        }\n    }\n\n    @Override\n    public void setUriIcon(BitmapDescriptor bitmapDescriptor, ReadableMap options) {\n        mUiSettings.setMarkerClusterIcon(bitmapDescriptor);\n    }\n\n    public interface MapLayer {\n        /**\n         * Adds a layer on the map\n         *\n         * @param huaweiMap Huawei map which the layer will be created on\n         * @return Layer created on map\n         */\n        Object addTo(HuaweiMap huaweiMap);\n\n        /**\n         * Removes a layer on the map\n         *\n         * @param huaweiMap Huawei map which the layer will be removed from\n         */\n        void removeFrom(HuaweiMap huaweiMap);\n\n        /**\n         * Gets layer information\n         *\n         * @return WritableMap layer information\n         */\n        WritableMap getInfo();\n\n        /**\n         * Gets layer options information\n         *\n         * @return WritableMap layer options information\n         */\n        WritableMap getOptionsInfo();\n    }\n\n    public static abstract class MapLayerView extends ReactViewGroup implements MapLayer {\n        private ReactContext mReactContext;\n\n        public MapLayerView(Context context) {\n            super(context);\n            mReactContext = (ReactContext) context;\n        }\n\n        public void sendEvent(ReactUtils.NamedEvent event, @Nullable WritableMap wm) {\n            Log.i(TAG, \"Sending event: \" + event.getName());\n            mReactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), event.getName(), wm);\n        }\n    }\n\n    public static abstract class MapLayerViewManager<T extends MapLayerView> extends ViewGroupManager<T> {\n        public enum Event implements ReactUtils.NamedEvent {\n            CLICK(\"onClick\");\n\n            private String name;\n\n            Event(String name) {\n                this.name = name;\n            }\n\n            public String getName() {\n                return name;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Event.values());\n        }\n    }\n\n    public static class Manager extends ViewGroupManager<HMSMapView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSMapView\";\n        }\n\n        @NonNull\n        @Override\n        protected HMSMapView createViewInstance(@NonNull ThemedReactContext reactContext) {\n            logger.startMethodExecutionTimer(\"HMSMap\");\n\n            HuaweiMapOptions huaweiMapOptions = new HuaweiMapOptions();\n\n            huaweiMapOptions.liteMode(Module.liteMod);\n\n            huaweiMapOptions.dark(true);\n\n            HMSMapView view = new HMSMapView(reactContext, huaweiMapOptions);\n\n            logger.sendSingleEvent(\"HMSMap\");\n            return view;\n        }\n\n        @Override\n        public void addView(HMSMapView parent, View child, int index) {\n            parent.addMapLayer(child, index);\n        }\n\n        @Override\n        public void removeViewAt(HMSMapView parent, int index) {\n            parent.removeMapLayer(index);\n        }\n\n        @Override\n        public int getChildCount(HMSMapView view) {\n            return view.getMapLayerSize();\n        }\n\n        @Override\n        public View getChildAt(HMSMapView view, int index) {\n            return view.getMapLayer(index);\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            MAP_READY(\"onMapReady\"),\n            CAMERA_UPDATE_FINISHED(\"onCameraUpdateFinished\"),\n            CAMERA_UPDATE_CANCELED(\"onCameraUpdateCanceled\"),\n            CAMERA_IDLE(\"onCameraIdle\"),\n            CAMERA_MOVE_CANCELED(\"onCameraMoveCanceled\"),\n            CAMERA_MOVE(\"onCameraMove\"),\n            CAMERA_MOVE_STARTED(\"onCameraMoveStarted\"),\n            MAP_CLICK(\"onMapClick\"),\n            MAP_LOADED(\"onMapLoaded\"),\n            MAP_LONG_CLICK(\"onMapLongClick\"),\n            MY_LOCATION_BUTTON_CLICK(\"onMyLocationButtonClick\"),\n            MY_LOCATION_CLICK(\"onMyLocationClick\"),\n            POI_CLICK(\"onPoiClick\"),\n            SNAPSHOT_READY(\"onSnapshotReady\");\n\n            private String mapEventName;\n\n            Event(String mapEventName) {\n                this.mapEventName = mapEventName;\n            }\n\n            public String getName() {\n                return mapEventName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Event.values());\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            CLEAR(\"clear\"),\n            TAKE_SNAPSHOT(\"takeSnapshot\"),\n            RESET_ZOOM_PREFERENCE(\"resetMinMaxZoomPreference\"),\n            STOP_ANIMATION(\"stopAnimation\"),\n            SET_CAMERA_POSITION(\"setCameraPosition\"),\n            SET_COORDINATES(\"setCoordinates\"),\n            SET_BOUNDS(\"setBounds\"),\n            SCROLL_BY(\"scrollBy\"),\n            ZOOM_BY(\"zoomBy\"),\n            ZOOM_IN(\"zoomIn\"),\n            ZOOM_OUT(\"zoomOut\"),\n            ZOOM_TO(\"zoomTo\");\n\n            private String mapCommandName;\n\n            Command(String mapCommandName) {\n                this.mapCommandName = mapCommandName;\n            }\n\n            public String getName() {\n                return mapCommandName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSMapView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Command.values().length) {\n                switch (Command.values()[commandId]) {\n                    case CLEAR:\n                        logger.startMethodExecutionTimer(\"HMSMap.clear\");\n                        root.clear();\n                        logger.sendSingleEvent(\"HMSMap.clear\");\n                        break;\n                    case TAKE_SNAPSHOT:\n                        logger.startMethodExecutionTimer(\"HMSMap.takeSnapshot\");\n                        root.takeSnapshot();\n                        break;\n                    case RESET_ZOOM_PREFERENCE:\n                        logger.startMethodExecutionTimer(\"HMSMap.resetMinMaxZoomPreference\");\n                        root.resetZoomPreference();\n                        logger.sendSingleEvent(\"HMSMap.resetMinMaxZoomPreference\");\n                        break;\n                    case STOP_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSMap.stopAnimation\");\n                        root.stopAnimation();\n                        logger.sendSingleEvent(\"HMSMap.stopAnimation\");\n                        break;\n                    case SET_CAMERA_POSITION:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.setCameraPosition\");\n                        root.setCameraPosition(args);\n                        logger.sendSingleEvent(\"HMSMap.setCameraPosition\");\n                        break;\n                    case SET_COORDINATES:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.setCoordinates\");\n                        root.setCoordinates(args);\n                        logger.sendSingleEvent(\"HMSMap.setCoordinates\");\n                        break;\n                    case SET_BOUNDS:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.setBounds\");\n                        root.setBounds(args);\n                        logger.sendSingleEvent(\"HMSMap.setBounds\");\n                        break;\n                    case SCROLL_BY:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.scrollBy\");\n                        root.scrollBy(args);\n                        logger.sendSingleEvent(\"HMSMap.scrollBy\");\n                        break;\n                    case ZOOM_BY:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.zoomBy\");\n                        root.zoomBy(args);\n                        logger.sendSingleEvent(\"HMSMap.zoomBy\");\n                        break;\n                    case ZOOM_TO:\n                        assert args != null;\n                        logger.startMethodExecutionTimer(\"HMSMap.zoomTo\");\n                        root.zoomTo(args);\n                        logger.sendSingleEvent(\"HMSMap.zoomTo\");\n                        break;\n                    case ZOOM_IN:\n                        logger.startMethodExecutionTimer(\"HMSMap.zoomIn\");\n                        root.zoomIn();\n                        logger.sendSingleEvent(\"HMSMap.zoomIn\");\n                        break;\n                    case ZOOM_OUT:\n                        logger.startMethodExecutionTimer(\"HMSMap.zoomOut\");\n                        root.zoomOut();\n                        logger.sendSingleEvent(\"HMSMap.zoomOut\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"logoPosition\")\n        public void setLogoPosition(HMSMapView view, int logoPosition) {\n            logger.startMethodExecutionTimer(\"HMSMap.logoPosition\");\n            view.setLogoPosition(logoPosition);\n            logger.sendSingleEvent(\"HMSMap.logoPosition\");\n        }\n\n        @ReactProp(name = \"logoPadding\")\n        public void setLogoPadding(HMSMapView view, ReadableMap mapPadding) {\n            logger.startMethodExecutionTimer(\"HMSMap.logoPadding\");\n            view.setLogoPadding(mapPadding);\n            logger.sendSingleEvent(\"HMSMap.logoPadding\");\n        }\n\n        @ReactProp(name = \"markerClusterColor\")\n        public void setMarkerClusterColor(HMSMapView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setMarkerClusterColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setMarkerClusterColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"markerClusterTextColor\")\n        public void setMarkerClusterTextColor(HMSMapView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setMarkerClusterTextColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setMarkerClusterTextColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"markerClusterIcon\")\n        public void setMarkerClusterIcon(HMSMapView view, ReadableMap icon) {\n            view.setMarkerClusterIcon(icon);\n        }\n\n\n        @ReactProp(name = \"pointToCenter\")\n        public void setPointToCenter(HMSMapView view, ReadableMap pointToCenter) {\n            logger.startMethodExecutionTimer(\"HMSMap.pointToCenter\");\n            view.setPointToCenter(pointToCenter);\n            logger.sendSingleEvent(\"HMSMap.pointToCenter\");\n        }\n\n        @ReactProp(name = \"gestureScaleByMapCenter\")\n        public void setGestureScaleByMapCenter(HMSMapView view, boolean gestureScaleByMapCenter) {\n            logger.startMethodExecutionTimer(\"HMSMap.gestureScaleByMapCenter\");\n            view.setGestureScaleByMapCenter(gestureScaleByMapCenter);\n            logger.sendSingleEvent(\"HMSMap.gestureScaleByMapCenter\");\n        }\n\n        @ReactProp(name = \"trafficEnabled\")\n        public void setTrafficEnabled(HMSMapView view, boolean trafficEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.trafficEnabled\");\n            view.setTrafficEnabled(trafficEnabled);\n            logger.sendSingleEvent(\"HMSMap.trafficEnabled\");\n        }\n\n        @ReactProp(name = \"useAnimation\")\n        public void setUseAnimation(HMSMapView view, boolean useAnimation) {\n            logger.startMethodExecutionTimer(\"HMSMap.useAnimation\");\n            view.setUseAnimation(useAnimation);\n            logger.sendSingleEvent(\"HMSMap.useAnimation\");\n        }\n\n        @ReactProp(name = \"animationDuration\")\n        public void setAnimationDuration(HMSMapView view, int animationDuration) {\n            logger.startMethodExecutionTimer(\"HMSMap.animationDuration\");\n            view.setAnimationDuration(animationDuration);\n            logger.sendSingleEvent(\"HMSMap.animationDuration\");\n        }\n\n        @ReactProp(name = \"camera\")\n        public void setCamera(HMSMapView view, ReadableMap camera) {\n            logger.startMethodExecutionTimer(\"HMSMap.camera\");\n            if (camera != null) {\n                CameraPosition cameraPosition = ReactUtils.getCameraPositionFromReadableMap(camera);\n                view.setCamera(cameraPosition);\n            }\n            logger.sendSingleEvent(\"HMSMap.camera\");\n        }\n\n        @ReactProp(name = \"myLocationStyle\")\n        public void setMyLocationStyle(HMSMapView view, ReadableMap myLocationStyleMap) {\n            logger.startMethodExecutionTimer(\"HMSMap.MyLocationStyle\");\n            if (myLocationStyleMap != null) {\n                MyLocationStyle myLocationStyle = ReactUtils.getMyLocationStyleFromReadableMap(myLocationStyleMap);\n                view.setMyLocationStyle(myLocationStyle);\n            } else {\n                view.setMyLocationStyle(null);\n            }\n            logger.sendSingleEvent(\"HMSMap.MyLocationStyle\");\n        }\n\n        @ReactProp(name = \"compassEnabled\")\n        public void setCompassEnabled(HMSMapView view, boolean compassEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.compassEnabled\");\n            view.mCompassEnabled = compassEnabled;\n            view.setCompassEnabled(compassEnabled);\n            logger.sendSingleEvent(\"HMSMap.compassEnabled\");\n        }\n\n        @ReactProp(name = \"latLngBoundsForCameraTarget\")\n        public void setLatLngBoundsForCameraTarget(HMSMapView view, ReadableArray latLngBoundsForCameraTarget) {\n            logger.startMethodExecutionTimer(\"HMSMap.latLngBoundsForCameraTarget\");\n            view.setLatLngBoundsForCameraTarget(latLngBoundsForCameraTarget);\n            logger.sendSingleEvent(\"HMSMap.latLngBoundsForCameraTarget\");\n        }\n\n        @ReactProp(name = \"mapType\")\n        public void setMapType(HMSMapView view, int mapType) {\n            logger.startMethodExecutionTimer(\"HMSMap.mapType\");\n            view.setMapType(mapType);\n            logger.sendSingleEvent(\"HMSMap.mapType\");\n        }\n\n        @ReactProp(name = \"maxZoomPreference\")\n        public void setMaxZoomPreference(HMSMapView view, int maxZoomPreference) {\n            logger.startMethodExecutionTimer(\"HMSMap.maxZoomPreference\");\n            view.setMaxZoomPreference(maxZoomPreference);\n            logger.sendSingleEvent(\"HMSMap.maxZoomPreference\");\n        }\n\n        @ReactProp(name = \"minZoomPreference\")\n        public void setMinZoomPreference(HMSMapView view, int minZoomPreference) {\n            logger.startMethodExecutionTimer(\"HMSMap.minZoomPreference\");\n            view.setMinZoomPreference(minZoomPreference);\n            logger.sendSingleEvent(\"HMSMap.minZoomPreference\");\n        }\n\n        @ReactProp(name = \"rotateGesturesEnabled\")\n        public void setRotateGesturesEnabled(HMSMapView view, boolean rotateGesturesEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.rotateGesturesEnabled\");\n            view.setRotateGesturesEnabled(rotateGesturesEnabled);\n            logger.sendSingleEvent(\"HMSMap.rotateGesturesEnabled\");\n        }\n\n        @ReactProp(name = \"scrollGesturesEnabled\")\n        public void setScrollGesturesEnabled(HMSMapView view, boolean scrollGesturesEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.scrollGesturesEnabled\");\n            view.setScrollGesturesEnabled(scrollGesturesEnabled);\n            logger.sendSingleEvent(\"HMSMap.scrollGesturesEnabled\");\n        }\n\n        @ReactProp(name = \"tiltGesturesEnabled\")\n        public void setTiltGesturesEnabled(HMSMapView view, boolean tiltGesturesEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.tiltGesturesEnabled\");\n            view.setTiltGesturesEnabled(tiltGesturesEnabled);\n            logger.sendSingleEvent(\"HMSMap.tiltGesturesEnabled\");\n        }\n\n        @ReactProp(name = \"zoomControlsEnabled\")\n        public void setZoomControlsEnabled(HMSMapView view, boolean zoomControlsEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.zoomControlsEnabled\");\n            view.mZoomControlsEnabled = zoomControlsEnabled;\n            view.setZoomControlsEnabled(zoomControlsEnabled);\n            logger.sendSingleEvent(\"HMSMap.zoomControlsEnabled\");\n        }\n\n        @ReactProp(name = \"zoomGesturesEnabled\")\n        public void setZoomGesturesEnabled(HMSMapView view, boolean zoomGesturesEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.zoomGesturesEnabled\");\n            view.setZoomGesturesEnabled(zoomGesturesEnabled);\n            logger.sendSingleEvent(\"HMSMap.zoomGesturesEnabled\");\n        }\n\n        @ReactProp(name = \"buildingsEnabled\")\n        public void setBuildingsEnabled(HMSMapView view, boolean buildingsEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.buildingsEnabled\");\n            view.setBuildingsEnabled(buildingsEnabled);\n            logger.sendSingleEvent(\"HMSMap.buildingsEnabled\");\n        }\n\n        @ReactProp(name = \"description\")\n        public void setDescription(HMSMapView view, String description) {\n            logger.startMethodExecutionTimer(\"HMSMap.description\");\n            view.setDescription(description);\n            logger.sendSingleEvent(\"HMSMap.description\");\n        }\n\n        @ReactProp(name = \"mapStyle\")\n        public void setMapStyle(HMSMapView view, String mapStyle) {\n            logger.startMethodExecutionTimer(\"HMSMap.mapStyle\");\n            view.setMapStyle(mapStyle);\n            logger.sendSingleEvent(\"HMSMap.mapStyle\");\n        }\n\n        @ReactProp(name = \"styleId\")\n        public void setStyleId(HMSMapView view, String styleId) {\n            logger.startMethodExecutionTimer(\"HMSMap.setStyleId\");\n            view.setStyleId(styleId);\n            logger.sendSingleEvent(\"HMSMap.setStyleId\");\n        }\n\n        @ReactProp(name = \"previewId\")\n        public void setPreviewId(HMSMapView view, String previewId) {\n            logger.startMethodExecutionTimer(\"HMSMap.setPreviewId\");\n            view.setPreviewId(previewId);\n            logger.sendSingleEvent(\"HMSMap.setPreviewId\");\n        }\n\n        @ReactProp(name = \"myLocationEnabled\")\n        public void setMyLocationEnabled(HMSMapView view, boolean myLocationEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.myLocationEnabled\");\n            view.mMyLocationEnabled = myLocationEnabled;\n            view.setMyLocationEnabled(myLocationEnabled);\n            logger.sendSingleEvent(\"HMSMap.myLocationEnabled\");\n        }\n\n        @ReactProp(name = \"mapPadding\")\n        public void setMapPadding(HMSMapView view, ReadableMap mapPadding) {\n            logger.startMethodExecutionTimer(\"HMSMap.mapPadding\");\n            view.setMapPadding(mapPadding);\n            logger.sendSingleEvent(\"HMSMap.mapPadding\");\n        }\n\n        @ReactProp(name = \"markerClustering\")\n        public void setMarkerClustering(HMSMapView view, boolean markerClustering) {\n            logger.startMethodExecutionTimer(\"HMSMap.markerClustering\");\n            view.setMarkerClustering(markerClustering);\n            logger.sendSingleEvent(\"HMSMap.markerClustering\");\n        }\n\n        @ReactProp(name = \"myLocationButtonEnabled\")\n        public void setMyLocationButtonEnabled(HMSMapView view, boolean myLocationButtonEnabled) {\n            logger.startMethodExecutionTimer(\"HMSMap.myLocationButtonEnabled\");\n            view.mMyLocationButtonEnabled = myLocationButtonEnabled;\n            view.setMyLocationButtonEnabled(myLocationButtonEnabled);\n            logger.sendSingleEvent(\"HMSMap.myLocationButtonEnabled\");\n        }\n\n        @ReactProp(name = \"scrollGesturesEnabledDuringRotateOrZoom\")\n        public void setScrollGesturesEnabledDuringRotateOrZoom(\n                HMSMapView view, boolean scrollGesturesEnabledDuringRotateOrZoom) {\n            logger.startMethodExecutionTimer(\"HMSMap.scrollGesturesEnabledDuringRotateOrZoom\");\n            view.setScrollGesturesEnabledDuringRotateOrZoom(scrollGesturesEnabledDuringRotateOrZoom);\n            logger.sendSingleEvent(\"HMSMap.scrollGesturesEnabledDuringRotateOrZoom\");\n        }\n\n        @ReactProp(name = \"darkMode\")\n        public void setDarkMode(HMSMapView view, boolean darkMode) {\n            logger.startMethodExecutionTimer(\"HMSMap.darkMode\");\n            view.setDarkMode(darkMode);\n            logger.sendSingleEvent(\"HMSMap.darkMode\");\n        }\n    }\n\n    public static class Module extends ReactContextBaseJavaModule {\n        private HMSLogger logger;\n        private Context context;\n\n        protected static volatile boolean liteMod = false;\n\n        Module(@NonNull ReactApplicationContext reactContext) {\n            super(reactContext);\n            logger = HMSLogger.getInstance(reactContext);\n            context = reactContext;\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSMapViewModule\";\n        }\n\n        @ReactMethod\n        public void initializer(final String apiKey, final String routePolicy, final Promise promise) {\n            if (routePolicy != null && !routePolicy.isEmpty()) {\n                MapsInitializer.initialize(context, routePolicy);\n            } else {\n                MapsInitializer.initialize(context);\n            }\n            MapsInitializer.setApiKey(apiKey);\n            promise.resolve(null);\n        }\n\n        @ReactMethod\n        public void getHuaweiMapInfo(final int viewId, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getHuaweiMapInfo\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof HMSMapView) {\n                    HMSMapView myView = (HMSMapView) view;\n\n                    if (myView.mHuaweiMap != null) {\n                        promise.resolve(ReactUtils.getWritableMapFromHuaweiMap(myView.mHuaweiMap));\n                    } else {\n                        promise.reject(\"map_not_ready\", \"Huawei map is not ready\");\n                    }\n                } else {\n                    Log.e(TAG, \"Expected view to be instance of HMSMapView, but found: \" + view);\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            Log.i(TAG, \"getHuaweiMapInfo() executed\");\n            logger.sendSingleEvent(\"HMSMapModule.getHuaweiMapInfo\");\n        }\n        @ReactMethod\n        public void getScalePerPixel(final int viewId, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getScalePerPixel\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof HMSMapView) {\n                    HMSMapView myView = (HMSMapView) view;\n\n                    if (myView.mHuaweiMap != null) {\n                        promise.resolve(myView.mHuaweiMap.getScalePerPixel());\n                    } else {\n                        promise.reject(\"map_not_ready\", \"Huawei map is not ready\");\n                    }\n                } else {\n                    Log.e(TAG, \"Expected view to be instance of HMSMapView, but found: \" + view);\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            Log.i(TAG, \"getScalePerPixel() executed\");\n            logger.sendSingleEvent(\"HMSMapModule.getScalePerPixel\");\n        }\n        @ReactMethod\n        public void getPointFromCoordinate(final int viewId, final ReadableMap coordinate, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getPointFromCoordinate\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof HMSMapView) {\n                    HMSMapView myView = (HMSMapView) view;\n                    if (myView.mHuaweiMap != null) {\n                        promise.resolve(ReactUtils.getWritableMapFromPoint(\n                                myView.mHuaweiMap.getProjection()\n                                        .toScreenLocation(ReactUtils.getLatLngFromReadableMap(coordinate))));\n                    } else {\n                        promise.reject(\"map_not_ready\", \"Huawei map is not ready\");\n                    }\n                } else {\n                    Log.e(TAG, \"Expected view to be instance of HMSMapView, but found: \" + view);\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            Log.i(TAG, \"getPointFromCoordinate() executed\");\n            logger.sendSingleEvent(\"HMSMapModule.getPointFromCoordinate\");\n\n        }\n\n        @ReactMethod\n        public void getCoordinateFromPoint(final int viewId, final ReadableMap point, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getCoordinateFromPoint\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof HMSMapView) {\n                    HMSMapView myView = (HMSMapView) view;\n                    if (myView.mHuaweiMap != null) {\n                        promise.resolve(ReactUtils.getWritableMapFromLatLng(\n                                myView.mHuaweiMap.getProjection()\n                                        .fromScreenLocation(ReactUtils.getPointFromReadableMap(point))));\n                    } else {\n                        promise.reject(\"map_not_ready\", \"Huawei map is not ready\");\n                    }\n                } else {\n                    Log.e(TAG, \"Expected view to be instance of HMSMapView, but found: \" + view);\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            Log.i(TAG, \"getCoordinateFromPoint() executed\");\n            logger.sendSingleEvent(\"HMSMapModule.getCoordinateFromPoint\");\n        }\n\n        @ReactMethod\n        public void getDistance(final ReadableMap from, final ReadableMap to, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getDistance\");\n            LatLng fromLatLng = ReactUtils.getLatLngFromReadableMap(from);\n            LatLng toLatLng = ReactUtils.getLatLngFromReadableMap(to);\n            if (fromLatLng != null && toLatLng != null) {\n                promise.resolve(DistanceCalculator.computeDistanceBetween(fromLatLng, toLatLng));\n            } else {\n                promise.reject(\"invalid_inputs\", \"Invalid coordinates\");\n            }\n            logger.sendSingleEvent(\"HMSMapModule.getDistance\");\n        }\n\n        @ReactMethod\n        public void getLayerInfo(final int viewId, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getLayerInfo\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof MapLayerView) {\n                    MapLayerView myView = (MapLayerView) view;\n                    WritableMap wm = myView.getInfo();\n                    if (wm != null) {\n                        promise.resolve(wm);\n                    } else {\n                        promise.reject(\"view_is_null\", \"Received null instead of a view\");\n                    }\n                } else {\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            logger.sendSingleEvent(\"HMSMapModule.getLayerInfo\");\n        }\n\n        @ReactMethod\n        public void getLayerOptionsInfo(final int viewId, final Promise promise) {\n            logger.startMethodExecutionTimer(\"HMSMapModule.getLayerOptionsInfo\");\n            UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);\n            uiManager.addUIBlock(nativeViewHierarchyManager -> {\n                View view = nativeViewHierarchyManager.resolveView(viewId);\n                if (view instanceof MapLayerView) {\n                    MapLayerView myView = (MapLayerView) view;\n                    WritableMap wm = myView.getOptionsInfo();\n                    if (wm != null) {\n                        promise.resolve(wm);\n                    } else {\n                        promise.reject(\"view_is_null\", \"Received null instead of a view\");\n                    }\n                } else {\n                    promise.reject(\"wrong_view_type\", \"Unexpected view type\");\n                }\n            });\n            logger.sendSingleEvent(\"HMSMapModule.getLayerOptionsInfo\");\n        }\n\n        @ReactMethod\n        public void enableLogger(final Promise promise) {\n            logger.enableLogger();\n            promise.resolve(null);\n        }\n\n        @ReactMethod\n        public void disableLogger(final Promise promise) {\n            logger.disableLogger();\n            promise.resolve(null);\n        }\n\n        @ReactMethod\n        public static synchronized void setLiteMod(boolean liteMod,final Promise promise) {\n            Module.liteMod = liteMod;\n            promise.resolve(liteMod);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSMarkerView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.view.View;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.LayoutShadowNode;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.Marker;\nimport com.huawei.hms.maps.model.MarkerOptions;\nimport com.huawei.hms.maps.model.animation.Animation;\nimport com.huawei.hms.maps.model.animation.AnimationSet;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\nimport com.huawei.hms.rn.map.utils.UriIconController;\nimport com.huawei.hms.rn.map.utils.UriIconView;\n\nimport java.util.Map;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\nimport static com.huawei.hms.rn.map.HMSInfoWindowView.SizeLayoutShadowNode;\n\npublic class HMSMarkerView extends MapLayerView implements UriIconView {\n    private static final String TAG = HMSMarkerView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSMarkerView.class.getSimpleName();\n    private MarkerOptions mMarkerOptions = new MarkerOptions();\n    private Marker mMarker;\n    private HMSInfoWindowView mInfoWindowView;\n    private LinearLayout almostWrappedInfoWindowView;\n    private LinearLayout wrappedInfoWindowView;\n    private AnimationSet animationSet;\n    public boolean defaultActionOnClick = true;\n    private final UriIconController uriIconController;\n\n    HMSLogger logger;\n\n    public HMSMarkerView(Context context) {\n        super(context);\n        logger = HMSLogger.getInstance(context);\n        uriIconController = new UriIconController(context, this);\n    }\n\n    public static class Manager extends MapLayerViewManager<HMSMarkerView> {\n        private final HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSMarkerView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSMarkerView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSMarker\");\n            HMSMarkerView view = new HMSMarkerView(context);\n            logger.sendSingleEvent(\"HMSMarker\");\n            return view;\n        }\n\n        @Override\n        public void addView(HMSMarkerView parent, View child, int index) {\n            if (child instanceof HMSInfoWindowView) {\n                parent.setInfoWindowView((HMSInfoWindowView) child);\n            }\n        }\n\n        public enum Event implements ReactUtils.NamedEvent {\n            CLICK(\"onClick\"),\n            DRAG_START(\"onDragStart\"),\n            DRAG(\"onDrag\"),\n            DRAG_END(\"onDragEnd\"),\n            INFO_WINDOW_CLICK(\"onInfoWindowClick\"),\n            INFO_WINDOW_CLOSE(\"onInfoWindowClose\"),\n            INFO_WINDOW_LONG_CLICK(\"onInfoWindowLongClick\"),\n            ANIMATION_START(\"onAnimationStart\"),\n            ANIMATION_END(\"onAnimationEnd\");\n\n            private final String markerEventName;\n\n            Event(String markerEventName) {\n                this.markerEventName = markerEventName;\n            }\n\n            public String getName() {\n                return markerEventName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return ReactUtils.getExportedCustomDirectEventTypeConstantsFromEvents(Event.values());\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            SHOW_INFO_WINDOW(\"showInfoWindow\"),\n            HIDE_INFO_WINDOW(\"hideInfoWindow\"),\n            START_ANIMATION(\"startAnimation\"),\n            SET_ANIMATION(\"setAnimation\"),\n            CLEAN_ANIMATION(\"cleanAnimation\");\n\n            private final String markerCommandName;\n\n            Command(String markerCommandName) {\n                this.markerCommandName = markerCommandName;\n            }\n\n            public String getName() {\n                return markerCommandName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Command.values());\n        }\n\n        @Override\n        public void receiveCommand(\n                @NonNull HMSMarkerView root, int commandId, @androidx.annotation.Nullable ReadableArray args) {\n            if (commandId < Command.values().length) {\n                switch (Command.values()[commandId]) {\n                    case SHOW_INFO_WINDOW:\n                        logger.startMethodExecutionTimer(\"HMSMarker.showInfoWindow\");\n                        root.showInfoWindow();\n                        logger.sendSingleEvent(\"HMSMarker.showInfoWindow\");\n                        break;\n                    case HIDE_INFO_WINDOW:\n                        logger.startMethodExecutionTimer(\"HMSMarker.hideInfoWindow\");\n                        root.hideInfoWindow();\n                        logger.sendSingleEvent(\"HMSMarker.hideInfoWindow\");\n                        break;\n                    case START_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSMarker.startAnimation\");\n                        root.startAnimation();\n                        logger.sendSingleEvent(\"HMSMarker.startAnimation\");\n                        break;\n                    case SET_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSMarker.setAnimation\");\n                        root.setAnimation(args);\n                        logger.sendSingleEvent(\"HMSMarker.setAnimation\");\n                        break;\n                    case CLEAN_ANIMATION:\n                        logger.startMethodExecutionTimer(\"HMSMarker.cleanAnimation\");\n                        root.cleanAnimation();\n                        logger.sendSingleEvent(\"HMSMarker.cleanAnimation\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"defaultActionOnClick\", defaultBoolean = true)\n        public void setDefaultActionOnClick(HMSMarkerView view, boolean isDefault) {\n            view.setDefaultActionOnClick(isDefault);\n        }\n\n        @ReactProp(name = \"alpha\", defaultFloat = 1.0f)\n        public void setAlpha(HMSMarkerView view, float alpha) {\n            view.setAlpha(alpha);\n        }\n\n        @ReactProp(name = \"markerAnchor\")\n        public void setMarkerAnchor(HMSMarkerView view, ReadableArray markerAnchor) {\n            view.setMarkerAnchor(markerAnchor);\n        }\n\n        @ReactProp(name = \"draggable\")\n        public void setDraggable(HMSMarkerView view, boolean draggable) {\n            view.setDraggable(draggable);\n        }\n\n        @ReactProp(name = \"flat\")\n        public void setFlat(HMSMarkerView view, boolean flat) {\n            view.setFlat(flat);\n        }\n\n        @ReactProp(name = \"icon\")\n        public void setIcon(HMSMarkerView view, ReadableMap icon) {\n            view.setIcon(icon);\n        }\n\n        @ReactProp(name = \"infoWindowAnchor\")\n        public void setInfoWindowAnchor(HMSMarkerView view, ReadableArray infoWindowAnchor) {\n            view.setInfoWindowAnchor(infoWindowAnchor);\n        }\n\n        @ReactProp(name = \"coordinate\")\n        public void setPosition(HMSMarkerView view, ReadableMap position) {\n            view.setPosition(position);\n        }\n\n        @ReactProp(name = \"rotation\")\n        public void setMarkerRotation(HMSMarkerView view, float rotation) {\n            view.setMarkerRotation(rotation);\n        }\n\n        @ReactProp(name = \"snippet\")\n        public void setSnippet(HMSMarkerView view, String snippet) {\n            view.setSnippet(snippet);\n        }\n\n        @ReactProp(name = \"title\")\n        public void setTitle(HMSMarkerView view, String title) {\n            view.setTitle(title);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSMarkerView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"clusterable\")\n        public void setClusterable(HMSMarkerView view, boolean clusterable) {\n            view.setClusterable(clusterable);\n        }\n\n        @ReactProp(name = \"clickable\")\n        public void setClickable(HMSMarkerView view, boolean clickable) {\n            view.setClickable(clickable);\n        }\n        @ReactProp(name = \"zIndex\")\n        public void setZIndex(HMSMarkerView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n\n        @Override\n        public LayoutShadowNode createShadowNodeInstance() {\n            return new SizeLayoutShadowNode();\n        }\n\n        @Override\n        public void updateExtraData(HMSMarkerView view, Object extraData) {\n            HMSInfoWindowView infoWindow = view.getInfoWindowView();\n            if (infoWindow != null) {\n                view.wrapInfoWindowView();\n            }\n        }\n    }\n\n    private void setAnimation(ReadableArray args) {\n        if (args == null) {\n            return;\n        }\n        animationSet = new AnimationSet(false);\n        ReadableMap animationMap = args.getMap(0);\n        ReadableMap defaultsMap = args.getMap(1);\n        if (animationMap == null) {\n            return;\n        }\n\n        ReadableMapKeySetIterator it = animationMap.keySetIterator();\n        while (it.hasNextKey()) {\n            String key = it.nextKey();\n            Animation animation = ReactUtils.getAnimationFromCommandArgs(animationMap.getMap(key), defaultsMap, key);\n            if (animation != null) {\n                animation.setAnimationListener(new Animation.AnimationListener() {\n                    @Override\n                    public void onAnimationStart() {\n                        WritableMap event = ReactUtils.getWritableMapFromAnimation(animation);\n                        event.putString(\"type\", key);\n                        logger.sendSingleEvent(\"HMSMarker.onAnimationStart\");\n                        sendEvent(Manager.Event.ANIMATION_START, event);\n                    }\n\n                    @Override\n                    public void onAnimationEnd() {\n                        WritableMap event = ReactUtils.getWritableMapFromAnimation(animation);\n                        event.putString(\"type\", key);\n                        logger.sendSingleEvent(\"HMSMarker.onAnimationEnd\");\n                        sendEvent(Manager.Event.ANIMATION_END, event);\n                    }\n                });\n                animationSet.addAnimation(animation);\n            }\n        }\n\n\n        if (mMarker != null) {\n            mMarker.setAnimation(animationSet);\n        }\n\n    }\n\n    private void startAnimation() {\n        mMarker.startAnimation();\n    }\n\n    private void cleanAnimation() {\n        animationSet.cleanAnimation();\n        mMarker.setAnimation(animationSet);\n    }\n\n    public HMSInfoWindowView getInfoWindowView() {\n        return mInfoWindowView;\n    }\n\n    public void setInfoWindowView(HMSInfoWindowView infoWindowView) {\n        mInfoWindowView = infoWindowView;\n    }\n\n    public void wrapInfoWindowView() {\n        HMSInfoWindowView infoWindowView = getInfoWindowView();\n        if (infoWindowView != null) {\n            if (wrappedInfoWindowView != null) {\n                wrappedInfoWindowView.removeAllViews();\n                almostWrappedInfoWindowView.removeAllViews();\n            } else {\n                wrappedInfoWindowView = new LinearLayout(infoWindowView.getContext());\n                almostWrappedInfoWindowView = new LinearLayout(infoWindowView.getContext());\n                wrappedInfoWindowView.setOrientation(LinearLayout.VERTICAL);\n                wrappedInfoWindowView.setLayoutParams(new LinearLayout.LayoutParams(\n                        infoWindowView.width,\n                        infoWindowView.height,\n                        0f\n                ));\n\n                almostWrappedInfoWindowView.setOrientation(LinearLayout.HORIZONTAL);\n                almostWrappedInfoWindowView.setLayoutParams(new LinearLayout.LayoutParams(\n                        infoWindowView.width,\n                        infoWindowView.height,\n                        0f\n                ));\n            }\n\n            wrappedInfoWindowView.addView(almostWrappedInfoWindowView);\n            almostWrappedInfoWindowView.addView(infoWindowView);\n        }\n    }\n\n    public LinearLayout getWrappedInfoWindowView() {\n        return wrappedInfoWindowView;\n    }\n\n    private void showInfoWindow() {\n        if (mMarker != null) {\n            mMarker.showInfoWindow();\n        }\n    }\n\n    private void hideInfoWindow() {\n        if (mMarker != null) {\n            mMarker.hideInfoWindow();\n        }\n    }\n\n    @Override\n    public void setAlpha(float alpha) {\n        mMarkerOptions.alpha(alpha);\n        if (mMarker != null) {\n            mMarker.setAlpha(alpha);\n        }\n    }\n\n    private void setMarkerAnchor(ReadableArray markerAnchor) {\n        if (ReactUtils.hasValidElement(markerAnchor, 0, ReadableType.Number)\n                && ReactUtils.hasValidElement(markerAnchor, 1, ReadableType.Number)) {\n            float u = (float) markerAnchor.getDouble(0);\n            float v = (float) markerAnchor.getDouble(1);\n            mMarkerOptions.anchorMarker(u, v);\n            if (mMarker != null) {\n                mMarker.setMarkerAnchor(u, v);\n            }\n        }\n    }\n\n    private void setDraggable(boolean draggable) {\n        mMarkerOptions.draggable(draggable);\n        if (mMarker != null) {\n            mMarker.setDraggable(draggable);\n        }\n    }\n\n    private void setFlat(boolean flat) {\n        mMarkerOptions.flat(flat);\n        if (mMarker != null) {\n            mMarker.setFlat(flat);\n        }\n    }\n\n    @Override\n    public void setClickable(boolean clickable) {\n        mMarkerOptions.clickable(clickable);\n        if (mMarker != null) {\n            mMarker.setClickable(clickable);\n        }\n    }\n    private void setIcon(ReadableMap icon) {\n        if(icon.hasKey(\"uri\")){\n            uriIconController.setUriIcon(icon);\n            return;\n        }\n        BitmapDescriptor bitmapDescriptor = ReactUtils.getBitmapDescriptorFromReadableMap(icon);\n        setUriIcon(bitmapDescriptor, null);\n    }\n\n    private void setInfoWindowAnchor(ReadableArray infoWindowAnchor) {\n        if (ReactUtils.hasValidElement(infoWindowAnchor, 0, ReadableType.Number)\n                && ReactUtils.hasValidElement(infoWindowAnchor, 1, ReadableType.Number)) {\n            float u = (float) infoWindowAnchor.getDouble(0);\n            float v = (float) infoWindowAnchor.getDouble(1);\n            mMarkerOptions.infoWindowAnchor(u, v);\n            if (mMarker != null) {\n                mMarker.setInfoWindowAnchor(u, v);\n            }\n        }\n    }\n\n    private void setPosition(ReadableMap position) {\n        LatLng mPosition = ReactUtils.getLatLngFromReadableMap(position);\n        if (mPosition == null) {\n            return;\n        }\n        mMarkerOptions.position(mPosition);\n        if (mMarker != null) {\n            mMarker.setPosition(mPosition);\n        }\n    }\n\n    public void setMarkerRotation(float rotation) {\n        mMarkerOptions.rotation(rotation);\n        if (mMarker != null) {\n            mMarker.setRotation(rotation);\n        }\n    }\n\n    private void setSnippet(String snippet) {\n        mMarkerOptions.snippet(snippet);\n        if (mMarker != null) {\n            mMarker.setSnippet(snippet);\n        }\n    }\n\n    private void setTitle(String title) {\n        mMarkerOptions.title(title);\n        if (mMarker != null) {\n            mMarker.setTitle(title);\n        }\n    }\n\n    private void setVisible(boolean visible) {\n        mMarkerOptions.visible(visible);\n        if (mMarker != null) {\n            mMarker.setVisible(visible);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mMarkerOptions.zIndex(zIndex);\n        if (mMarker != null) {\n            mMarker.setZIndex(zIndex);\n        }\n    }\n\n    private void setClusterable(boolean clusterable) {\n        mMarkerOptions.clusterable(clusterable);\n    }\n\n    private void setDefaultActionOnClick(boolean isDefault) {\n        defaultActionOnClick = isDefault;\n    }\n\n    @Override\n    public void setUriIcon(BitmapDescriptor bitmapDescriptor, ReadableMap options){\n        mMarkerOptions.icon(bitmapDescriptor);\n        if (mMarker != null) {\n            mMarker.setIcon(bitmapDescriptor);\n        }\n    }\n\n    @Override\n    public Marker addTo(HuaweiMap huaweiMap) {\n        mMarker = huaweiMap.addMarker(mMarkerOptions);\n        return mMarker;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if (mMarker == null) {\n            return;\n        }\n        try {\n            mMarker.getPosition();\n            mMarker.remove();\n        } catch (NullPointerException e) {\n            mMarker = null;\n            mMarkerOptions = null;\n        }\n\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mMarker == null) {\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromMarker(mMarker);\n        } catch (NullPointerException e) {\n            return (WritableMap) null;\n        }\n\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mMarkerOptions == null) {\n            return null;\n        }\n        return ReactUtils.getWritableMapFromMarkerOptions(mMarkerOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSPolygonView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.graphics.Color;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.Polygon;\nimport com.huawei.hms.maps.model.PolygonOptions;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.PatternItem;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\n\nimport java.util.List;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\n\npublic class HMSPolygonView extends MapLayerView {\n    private static final String TAG = HMSPolygonView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSPolygonView.class.getSimpleName();\n    public PolygonOptions mPolygonOptions = new PolygonOptions();\n    public Polygon mPolygon;\n\n    public HMSPolygonView(Context context) {\n        super(context);\n    }\n\n    public static class Manager extends MapLayerViewManager<HMSPolygonView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSPolygonView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSPolygonView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSPolygon\");\n            HMSPolygonView view = new HMSPolygonView(context);\n            logger.sendSingleEvent(\"HMSPolygon\");\n            return view;\n        }\n\n        @ReactProp(name = \"clickable\")\n        public void setClickable(HMSPolygonView view, boolean clickable) {\n            view.setClickable(clickable);\n        }\n\n        @ReactProp(name = \"fillColor\")\n        public void setFillColor(HMSPolygonView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setFillColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setFillColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"geodesic\")\n        public void setGeodesic(HMSPolygonView view, boolean geodesic) {\n            view.setGeodesic(geodesic);\n        }\n\n        @ReactProp(name = \"holes\")\n        public void setHoles(HMSPolygonView view, ReadableArray holes) {\n            view.setHoles(holes);\n        }\n\n        @ReactProp(name = \"points\")\n        public void setPoints(HMSPolygonView view, ReadableArray points) {\n            view.setPoints(points);\n        }\n\n        @ReactProp(name = \"strokeColor\", defaultInt = Color.BLACK)\n        public void setStrokeColor(HMSPolygonView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setStrokeColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setStrokeColor(color.asInt());\n            }\n        }\n\n        @ReactProp(name = \"strokeJointType\")\n        public void setStrokeJointType(HMSPolygonView view, int strokeJointType) {\n            view.setStrokeJointType(strokeJointType);\n        }\n\n        @ReactProp(name = \"strokeWidth\", defaultFloat = 10.0f)\n        public void setStrokeWidth(HMSPolygonView view, float strokeWidth) {\n            view.setStrokeWidth(strokeWidth);\n        }\n\n        @ReactProp(name = \"strokePattern\")\n        public void setStrokePattern(HMSPolygonView view, ReadableArray strokePattern) {\n            view.setStrokePattern(strokePattern);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSPolygonView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"zIndex\")\n        public void setZIndex(HMSPolygonView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public void setClickable(boolean clickable) {\n        mPolygonOptions.clickable(clickable);\n        if (mPolygon != null) {\n            mPolygon.setClickable(clickable);\n        }\n    }\n\n    private void setFillColor(int fillColor) {\n        mPolygonOptions.fillColor(fillColor);\n        if (mPolygon != null) {\n            mPolygon.setFillColor(fillColor);\n        }\n    }\n\n    private void setGeodesic(boolean geodesic) {\n        mPolygonOptions.geodesic(geodesic);\n        if (mPolygon != null) {\n            mPolygon.setGeodesic(geodesic);\n        }\n    }\n\n    private void setPoints(ReadableArray pointsReadableArray) {\n        List<LatLng> points = ReactUtils.getLatLngListFromReadableArray(pointsReadableArray);\n        for (LatLng latLng : points) {\n            mPolygonOptions.add(latLng);\n        }\n        if (mPolygon != null) {\n            mPolygon.setPoints(points);\n        }\n    }\n\n    private void setHoles(ReadableArray holesReadableArray) {\n        List<List<LatLng>> holes = ReactUtils.getListOfLatLngListFromReadableArray(holesReadableArray);\n        for (List<LatLng> latLngList : holes) {\n            mPolygonOptions.addHole(latLngList);\n        }\n        if (mPolygon != null) {\n            mPolygon.setHoles(holes);\n        }\n    }\n\n    private void setStrokeColor(int strokeColor) {\n        mPolygonOptions.strokeColor(strokeColor);\n        if (mPolygon != null) {\n            mPolygon.setStrokeColor(strokeColor);\n        }\n    }\n\n    private void setStrokeJointType(int strokeJointType) {\n        mPolygonOptions.strokeJointType(strokeJointType);\n        if (mPolygon != null) {\n            mPolygon.setStrokeJointType(strokeJointType);\n        }\n    }\n\n    private void setStrokePattern(ReadableArray strokePatternReadableArray) {\n        List<PatternItem> strokePattern = ReactUtils.getPatternItemListFromReadableArray(strokePatternReadableArray);\n        mPolygonOptions.strokePattern(strokePattern);\n        if (mPolygon != null) {\n            mPolygon.setStrokePattern(strokePattern);\n        }\n    }\n\n    private void setStrokeWidth(float strokeWidth) {\n        mPolygonOptions.strokeWidth(strokeWidth);\n        if (mPolygon != null) {\n            mPolygon.setStrokeWidth(strokeWidth);\n        }\n    }\n\n    private void setVisible(boolean visible) {\n        mPolygonOptions.visible(visible);\n        if (mPolygon != null) {\n            mPolygon.setVisible(visible);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mPolygonOptions.zIndex(zIndex);\n        if (mPolygon != null) {\n            mPolygon.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public Polygon addTo(HuaweiMap huaweiMap) {\n        mPolygon = huaweiMap.addPolygon(mPolygonOptions);\n        return mPolygon;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if(mPolygon == null) {\n            return;\n        }\n        mPolygon.remove();\n        mPolygon = null;\n        mPolygonOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mPolygon == null){\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromPolygon(mPolygon);\n        } catch (NullPointerException e){\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mPolygonOptions == null){\n            return null;\n        }\n        return ReactUtils.getWritableMapFromPolygonOptions(mPolygonOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSPolylineView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.graphics.Color;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.Cap;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.PatternItem;\nimport com.huawei.hms.maps.model.Polyline;\nimport com.huawei.hms.maps.model.PolylineOptions;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\nimport com.huawei.hms.rn.map.utils.UriIconController;\nimport com.huawei.hms.rn.map.utils.UriIconView;\n\nimport java.util.List;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\n\npublic class HMSPolylineView extends MapLayerView implements UriIconView {\n    private static final String TAG = HMSPolylineView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSPolylineView.class.getSimpleName();\n    public PolylineOptions mPolylineOptions = new PolylineOptions();\n    public Polyline mPolyline;\n    private final UriIconController startCapUriIconController;\n    private final UriIconController endCapUriIconController;\n\n    public HMSPolylineView(Context context) {\n        super(context);\n        startCapUriIconController = new UriIconController(context, this);\n        endCapUriIconController = new UriIconController(context, this);\n    }\n\n\n    public static class Manager extends MapLayerViewManager<HMSPolylineView> {\n        private final HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSPolylineView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSPolylineView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSPolyline\");\n            HMSPolylineView view = new HMSPolylineView(context);\n            logger.sendSingleEvent(\"HMSPolyline\");\n            return view;\n        }\n\n        @ReactProp(name = \"clickable\")\n        public void setClickable(HMSPolylineView view, boolean clickable) {\n            view.setClickable(clickable);\n        }\n\n        @ReactProp(name = \"color\", defaultInt = Color.BLACK)\n        public void setColor(HMSPolylineView view, Dynamic color) {\n            if (color.getType() == ReadableType.Array) {\n                view.setColor(ReactUtils.getColorFromRgbaArray(color.asArray()));\n            } else if (color.getType() == ReadableType.Number) {\n                view.setColor(color.asInt());\n            }\n\n        }\n\n        @ReactProp(name = \"endCap\")\n        public void setEndCap(HMSPolylineView view, ReadableMap endCap) {\n            view.setEndCap(endCap);\n        }\n\n        @ReactProp(name = \"geodesic\")\n        public void setGeodesic(HMSPolylineView view, boolean geodesic) {\n            view.setGeodesic(geodesic);\n        }\n\n        @ReactProp(name = \"jointType\")\n        public void setJointType(HMSPolylineView view, int jointType) {\n            view.setJointType(jointType);\n        }\n\n        @ReactProp(name = \"pattern\")\n        public void setPattern(HMSPolylineView view, ReadableArray pattern) {\n            view.setPattern(pattern);\n        }\n\n        @ReactProp(name = \"points\")\n        public void setPoints(HMSPolylineView view, ReadableArray points) {\n            view.setPoints(points);\n        }\n\n        @ReactProp(name = \"startCap\")\n        public void setStartCap(HMSPolylineView view, ReadableMap startCap) {\n            view.setStartCap(startCap);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSPolylineView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"width\", defaultFloat = 10f)\n        public void setWidth(HMSPolylineView view, float width) {\n            view.setWidth(width);\n        }\n\n        @ReactProp(name = \"zIndex\")\n        public void setZIndex(HMSPolylineView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n\n        @ReactProp(name = \"gradient\")\n        public void setGradient(HMSPolylineView view, Boolean gradient) {\n            view.setGradient(gradient);\n        }\n\n        @ReactProp(name = \"ColorValues\")\n        public void setColorValues(HMSPolylineView view, ReadableArray colorValues) {\n            view.setColorValues(colorValues);\n        }\n    }\n\n    private void setColorValues(ReadableArray colorValuesArray) {\n        List<Integer> colorValues = ReactUtils.getColorValuesListFromReadableArray(colorValuesArray);\n        mPolylineOptions.colorValues(colorValues);\n        if (mPolyline != null) {\n            mPolyline.setColorValues(colorValues);\n        }\n    }\n\n    private void setGradient(Boolean gradient) {\n        mPolylineOptions.gradient(gradient);\n        if (mPolyline != null) {\n            mPolyline.setGradient(gradient);\n        }\n    }\n\n    @Override\n    public void setClickable(boolean clickable) {\n        mPolylineOptions.clickable(clickable);\n        if (mPolyline != null) {\n            mPolyline.setClickable(clickable);\n        }\n    }\n\n    private void setColor(int color) {\n        mPolylineOptions.color(color);\n        if (mPolyline != null) {\n            mPolyline.setColor(color);\n        }\n    }\n\n    @Override\n    synchronized public void setUriIcon(BitmapDescriptor bitmapDescriptor, ReadableMap options) {\n        boolean isStartCap = options.getBoolean(\"isStartCap\");\n        Float refWidth = options.hasKey(\"refWidth\") ? (float) options.getDouble(\"refWidth\") : null;\n        Cap customCap = ReactUtils.getCustomCapFromBitmapDescriptor(bitmapDescriptor, refWidth);\n\n        if (isStartCap) {\n            mPolylineOptions.startCap(customCap);\n            if (mPolyline != null) {\n                mPolyline.setStartCap(customCap);\n            }\n        } else {\n            mPolylineOptions.endCap(customCap);\n            if (mPolyline != null) {\n                mPolyline.setEndCap(customCap);\n            }\n        }\n    }\n\n    private void setStartCap(ReadableMap startCapReadableMap) {\n        Cap startCap = ReactUtils.getCapFromReadableMap(startCapReadableMap);\n        mPolylineOptions.startCap(startCap);\n        if (mPolyline != null) {\n            mPolyline.setStartCap(startCap);\n        }\n        if (ReactUtils.hasValidKey(startCapReadableMap, \"uri\", ReadableType.String)) {\n            WritableMap options = new WritableNativeMap();\n            options.putBoolean(\"isStartCap\", true);\n            if(startCapReadableMap.hasKey(\"refWidth\")){\n                options.putDouble(\"refWidth\", startCapReadableMap.getDouble(\"refWidth\"));\n            }\n            startCapUriIconController.setUriIconWithOptions(startCapReadableMap, options);\n        }\n    }\n\n    private void setEndCap(ReadableMap endCapReadableMap) {\n        Cap endCap = ReactUtils.getCapFromReadableMap(endCapReadableMap);\n        mPolylineOptions.endCap(endCap);\n        if (mPolyline != null) {\n            mPolyline.setEndCap(endCap);\n        }\n\n        if (ReactUtils.hasValidKey(endCapReadableMap, \"uri\", ReadableType.String)) {\n            WritableMap options = new WritableNativeMap();\n            options.putBoolean(\"isStartCap\", false);\n            if(endCapReadableMap.hasKey(\"refWidth\")){\n                options.putDouble(\"refWidth\", endCapReadableMap.getDouble(\"refWidth\"));\n            }\n            endCapUriIconController.setUriIconWithOptions(endCapReadableMap, options);\n        }\n    }\n\n    private void setGeodesic(boolean geodesic) {\n        mPolylineOptions.geodesic(geodesic);\n        if (mPolyline != null) {\n            mPolyline.setGeodesic(geodesic);\n        }\n    }\n\n    private void setJointType(int jointType) {\n        mPolylineOptions.jointType(jointType);\n        if (mPolyline != null) {\n            mPolyline.setJointType(jointType);\n        }\n    }\n\n    private void setPattern(ReadableArray patternReadableArray) {\n        List<PatternItem> pattern = ReactUtils.getPatternItemListFromReadableArray(patternReadableArray);\n        mPolylineOptions.pattern(pattern);\n        if (mPolyline != null) {\n            mPolyline.setPattern(pattern);\n        }\n    }\n\n    private void setPoints(ReadableArray pointsReadableArray) {\n        List<LatLng> points = ReactUtils.getLatLngListFromReadableArray(pointsReadableArray);\n        for (LatLng latLng : points) {\n            mPolylineOptions.add(latLng);\n        }\n        if (mPolyline != null) {\n            mPolyline.setPoints(points);\n        }\n    }\n\n\n    private void setVisible(boolean visible) {\n        mPolylineOptions.visible(visible);\n        if (mPolyline != null) {\n            mPolyline.setVisible(visible);\n        }\n    }\n\n    private void setWidth(float width) {\n        mPolylineOptions.width(width);\n        if (mPolyline != null) {\n            mPolyline.setWidth(width);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mPolylineOptions.zIndex(zIndex);\n        if (mPolyline != null) {\n            mPolyline.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public Polyline addTo(HuaweiMap huaweiMap) {\n        mPolyline = huaweiMap.addPolyline(mPolylineOptions);\n        return mPolyline;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if (mPolyline == null) {\n            return;\n        }\n        mPolyline.remove();\n        mPolyline = null;\n        mPolylineOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mPolyline == null) {\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromPolyline(mPolyline);\n        } catch (NullPointerException e) {\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mPolylineOptions == null) {\n            return null;\n        }\n        return ReactUtils.getWritableMapFromPolylineOptions(mPolylineOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/HMSTileOverlayView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map;\n\nimport android.content.Context;\nimport android.util.ArrayMap;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Dynamic;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.uimanager.ThemedReactContext;\nimport com.facebook.react.uimanager.annotations.ReactProp;\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.model.TileOverlay;\nimport com.huawei.hms.maps.model.TileOverlayOptions;\nimport com.huawei.hms.maps.model.TileProvider;\nimport com.huawei.hms.rn.map.logger.HMSLogger;\nimport com.huawei.hms.rn.map.utils.ReactUtils;\n\nimport java.util.Map;\n\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerView;\nimport static com.huawei.hms.rn.map.HMSMapView.MapLayerViewManager;\n\npublic class HMSTileOverlayView extends MapLayerView {\n    private static final String TAG = HMSTileOverlayView.class.getSimpleName();\n    private static final String REACT_CLASS = HMSTileOverlayView.class.getSimpleName();\n    private TileOverlayOptions mTileOverlayOptions = new TileOverlayOptions();\n    private TileOverlay mTileOverlay;\n\n    public HMSTileOverlayView(Context context) {\n        super(context);\n    }\n\n    public static class Manager extends MapLayerViewManager<HMSTileOverlayView> {\n        private HMSLogger logger;\n\n        public Manager(Context context) {\n            super();\n            logger = HMSLogger.getInstance(context);\n        }\n\n        @NonNull\n        @Override\n        public String getName() {\n            return \"HMSTileOverlayView\";\n        }\n\n        @NonNull\n        @Override\n        public HMSTileOverlayView createViewInstance(@NonNull ThemedReactContext context) {\n            logger.startMethodExecutionTimer(\"HMSTileOverlay\");\n            HMSTileOverlayView view = new HMSTileOverlayView(context);\n            logger.sendSingleEvent(\"HMSTileOverlay\");\n            return view;\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Object> getExportedCustomDirectEventTypeConstants() {\n            return new ArrayMap<>();\n        }\n\n        public enum Command implements ReactUtils.NamedCommand {\n            CLEAR_TILE_CACHE(\"clearTileCache\");\n\n            private String tileOverlayCommandName;\n\n            Command(String tileOverlayCommandName) {\n                this.tileOverlayCommandName = tileOverlayCommandName;\n            }\n\n            public String getName() {\n                return tileOverlayCommandName;\n            }\n        }\n\n        @Nullable\n        @Override\n        public Map<String, Integer> getCommandsMap() {\n            return ReactUtils.getCommandsMap(Command.values());\n        }\n\n        @Override\n        public void receiveCommand(@NonNull HMSTileOverlayView root, int commandId, @Nullable ReadableArray args) {\n            if (commandId < Command.values().length) {\n                switch (Command.values()[commandId]) {\n                    case CLEAR_TILE_CACHE:\n                        logger.startMethodExecutionTimer(\"HMSTileOverlay.clearTileCache\");\n                        root.clearTileCache();\n                        logger.sendSingleEvent(\"HMSTileOverlay.clearTileCache\");\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        @ReactProp(name = \"fadeIn\")\n        public void setFadeIn(HMSTileOverlayView view, boolean fadeIn) {\n            view.setFadeIn(fadeIn);\n        }\n\n        @ReactProp(name = \"tileProvider\")\n        public void setTileOverlay(HMSTileOverlayView view, Dynamic tileProvider) {\n            if (tileProvider.getType() == ReadableType.Map) {\n                view.setTileProvider(tileProvider.asMap());\n            } else if (tileProvider.getType() == ReadableType.Array) {\n                view.setTileProvider(tileProvider.asArray());\n            }\n        }\n\n        @ReactProp(name = \"transparency\")\n        public void setTransparency(HMSTileOverlayView view, float transparency) {\n            view.setTransparency(transparency);\n        }\n\n        @ReactProp(name = \"visible\", defaultBoolean = true)\n        public void setVisible(HMSTileOverlayView view, boolean visible) {\n            view.setVisible(visible);\n        }\n\n        @ReactProp(name = \"zIndex\", defaultFloat = 1.0f)\n        public void setZIndex(HMSTileOverlayView view, float zIndex) {\n            view.setZIndex(zIndex);\n        }\n    }\n\n    private void clearTileCache() {\n        if (mTileOverlay != null) {\n            mTileOverlay.clearTileCache();\n        }\n    }\n\n    private void setFadeIn(boolean fadeIn) {\n        mTileOverlayOptions.fadeIn(fadeIn);\n        if (mTileOverlay != null) {\n            mTileOverlay.setFadeIn(fadeIn);\n        }\n    }\n\n    private void setTileProvider(ReadableMap tileProviderReadableMap) {\n        TileProvider tileProvider = ReactUtils.getTileProviderFromReadableMap(tileProviderReadableMap);\n        mTileOverlayOptions.tileProvider(tileProvider);\n    }\n\n    private void setTileProvider(ReadableArray tileProviderReadableArray) {\n        TileProvider tileProvider = ReactUtils.getTileProviderFromReadableArray(tileProviderReadableArray,\n                getContext());\n        mTileOverlayOptions.tileProvider(tileProvider);\n    }\n\n    private void setTransparency(float transparency) {\n        mTileOverlayOptions.transparency(transparency);\n        if (mTileOverlay != null) {\n            mTileOverlay.setTransparency(transparency);\n        }\n    }\n\n    private void setVisible(boolean visible) {\n        mTileOverlayOptions.visible(visible);\n        if (mTileOverlay != null) {\n            mTileOverlay.setVisible(visible);\n        }\n    }\n\n    private void setZIndex(float zIndex) {\n        mTileOverlayOptions.zIndex(zIndex);\n        if (mTileOverlay != null) {\n            mTileOverlay.setZIndex(zIndex);\n        }\n    }\n\n    @Override\n    public TileOverlay addTo(HuaweiMap huaweiMap) {\n        mTileOverlay = huaweiMap.addTileOverlay(mTileOverlayOptions);\n        return mTileOverlay;\n    }\n\n    @Override\n    public void removeFrom(HuaweiMap huaweiMap) {\n        if (mTileOverlay == null) {\n            return;\n        }\n        mTileOverlay.remove();\n        mTileOverlay = null;\n        mTileOverlayOptions = null;\n    }\n\n    @Override\n    public WritableMap getInfo() {\n        if (mTileOverlay == null) {\n            return null;\n        }\n        try {\n            return ReactUtils.getWritableMapFromTileOverlay(mTileOverlay);\n        } catch (NullPointerException e) {\n            return (WritableMap) null;\n        }\n    }\n\n    @Override\n    public WritableMap getOptionsInfo() {\n        if (mTileOverlayOptions == null) {\n            return null;\n        }\n        return ReactUtils.getWritableMapFromTileOverlayOptions(mTileOverlayOptions);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/logger/HMSLogger.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Map\"; \n    private static final String PLATFORM = \"ReactNative\"; \n    private static final String VERSION = \"6.11.2.304\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode, final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/utils/ReactUtils.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Color;\nimport android.graphics.Point;\nimport android.util.ArrayMap;\nimport android.util.Log;\nimport android.view.animation.AccelerateDecelerateInterpolator;\nimport android.view.animation.AccelerateInterpolator;\nimport android.view.animation.AnticipateInterpolator;\nimport android.view.animation.BounceInterpolator;\nimport android.view.animation.DecelerateInterpolator;\nimport android.view.animation.Interpolator;\nimport android.view.animation.LinearInterpolator;\nimport android.view.animation.OvershootInterpolator;\n\nimport androidx.interpolator.view.animation.FastOutLinearInInterpolator;\nimport androidx.interpolator.view.animation.FastOutSlowInInterpolator;\nimport androidx.interpolator.view.animation.LinearOutSlowInInterpolator;\n\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.common.MapBuilder;\n\nimport com.huawei.hms.maps.HuaweiMap;\nimport com.huawei.hms.maps.Projection;\nimport com.huawei.hms.maps.UiSettings;\nimport com.huawei.hms.maps.common.util.CoordinateConverter;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.BitmapDescriptorFactory;\nimport com.huawei.hms.maps.model.ButtCap;\nimport com.huawei.hms.maps.model.CameraPosition;\nimport com.huawei.hms.maps.model.Cap;\nimport com.huawei.hms.maps.model.Circle;\nimport com.huawei.hms.maps.model.CircleOptions;\nimport com.huawei.hms.maps.model.CustomCap;\nimport com.huawei.hms.maps.model.Dash;\nimport com.huawei.hms.maps.model.Dot;\nimport com.huawei.hms.maps.model.Gap;\nimport com.huawei.hms.maps.model.GroundOverlay;\nimport com.huawei.hms.maps.model.GroundOverlayOptions;\nimport com.huawei.hms.maps.model.HeatMap;\nimport com.huawei.hms.maps.model.HeatMapOptions;\nimport com.huawei.hms.maps.model.LatLng;\nimport com.huawei.hms.maps.model.LatLngBounds;\nimport com.huawei.hms.maps.model.Marker;\nimport com.huawei.hms.maps.model.MarkerOptions;\nimport com.huawei.hms.maps.model.MyLocationStyle;\nimport com.huawei.hms.maps.model.PatternItem;\nimport com.huawei.hms.maps.model.PointOfInterest;\nimport com.huawei.hms.maps.model.Polygon;\nimport com.huawei.hms.maps.model.PolygonOptions;\nimport com.huawei.hms.maps.model.Polyline;\nimport com.huawei.hms.maps.model.PolylineOptions;\nimport com.huawei.hms.maps.model.RoundCap;\nimport com.huawei.hms.maps.model.SquareCap;\nimport com.huawei.hms.maps.model.Tile;\nimport com.huawei.hms.maps.model.TileOverlay;\nimport com.huawei.hms.maps.model.TileOverlayOptions;\nimport com.huawei.hms.maps.model.TileProvider;\nimport com.huawei.hms.maps.model.UrlTileProvider;\nimport com.huawei.hms.maps.model.VisibleRegion;\nimport com.huawei.hms.maps.model.animation.AlphaAnimation;\nimport com.huawei.hms.maps.model.animation.Animation;\nimport com.huawei.hms.maps.model.animation.RotateAnimation;\nimport com.huawei.hms.maps.model.animation.ScaleAnimation;\nimport com.huawei.hms.maps.model.animation.TranslateAnimation;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.net.MalformedURLException;\nimport java.net.URL;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\n\npublic class ReactUtils {\n    private static final String TAG = ReactUtils.class.getSimpleName();\n\n    public interface NamedEvent {\n        /**\n         * Gets name of the event\n         *\n         * @return String of name of the event\n         */\n        String getName();\n    }\n\n    public interface NamedCommand {\n        /**\n         * Gets name of the command\n         *\n         * @return String of name of the command\n         */\n        String getName();\n    }\n\n    public interface Mapper<T, R> {\n        /**\n         * Used to map classes\n         *\n         * @param in mapped from\n         * @return mapped to\n         */\n        R map(T in);\n    }\n\n    public static <R> List<R> mapReadableArray(ReadableArray array, Mapper<ReadableMap, R> mapper) {\n        List<R> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(mapper.map(array.getMap(i)));\n            }\n        }\n        return list;\n    }\n\n    public static <R> List<R> mapDoubleReadableArray(ReadableArray array, Mapper<ReadableArray, R> mapper) {\n        List<R> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(mapper.map(array.getArray(i)));\n            }\n        }\n        return list;\n    }\n\n    public static <T> WritableArray mapList(List<T> list, Mapper<T, WritableMap> mapper) {\n        WritableArray array = new WritableNativeArray();\n        if (list != null) {\n            for (T item : list) {\n                array.pushMap(mapper.map(item));\n            }\n        }\n        return array;\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static boolean hasValidElement(ReadableArray ra, int index, ReadableType type) {\n        return !ra.isNull(index) && ra.getType(index) == type;\n    }\n\n    public static LatLng getLatLngFromReadableMap(ReadableMap rm) {\n        if (rm != null && hasValidKey(rm, \"latitude\", ReadableType.Number) && hasValidKey(rm, \"longitude\",\n            ReadableType.Number)) {\n            if (hasValidKey(rm, \"isGCJ02\", ReadableType.Boolean) && rm.getBoolean(\"isGCJ02\")) {\n                return new CoordinateConverter().convert(\n                    new LatLng(rm.getDouble(\"latitude\"), rm.getDouble(\"longitude\")));\n            }\n            return new LatLng(rm.getDouble(\"latitude\"), rm.getDouble(\"longitude\"));\n        }\n        return null;\n    }\n\n    public static WritableMap getWritableMapFromLatLng(LatLng obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putDouble(\"latitude\", obj.latitude);\n        wm.putDouble(\"longitude\", obj.longitude);\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromUiSettings(UiSettings obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putBoolean(\"isCompassEnabled\", obj.isCompassEnabled());\n        wm.putBoolean(\"isMyLocationButtonEnabled\", obj.isMyLocationButtonEnabled());\n        wm.putBoolean(\"isRotateGesturesEnabled\", obj.isRotateGesturesEnabled());\n        wm.putBoolean(\"isScrollGesturesEnabled\", obj.isScrollGesturesEnabled());\n        wm.putBoolean(\"isScrollGesturesEnabledDuringRotateOrZoom\", obj.isScrollGesturesEnabledDuringRotateOrZoom());\n        wm.putBoolean(\"isTiltGesturesEnabled\", obj.isTiltGesturesEnabled());\n        wm.putBoolean(\"isZoomControlsEnabled\", obj.isZoomControlsEnabled());\n        wm.putBoolean(\"isZoomGesturesEnabled\", obj.isZoomGesturesEnabled());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromHuaweiMap(HuaweiMap obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"cameraPosition\", getWritableMapFromCameraPosition(obj.getCameraPosition()));\n        wm.putInt(\"mapType\", obj.getMapType());\n        wm.putDouble(\"maxZoomLevel\", obj.getMaxZoomLevel());\n        wm.putDouble(\"minZoomLevel\", obj.getMinZoomLevel());\n        wm.putMap(\"visibleRegion\", getWritableMapFromVisibleRegion(obj.getProjection().getVisibleRegion()));\n        wm.putMap(\"uiSettings\", getWritableMapFromUiSettings(obj.getUiSettings()));\n        wm.putBoolean(\"isBuildingsEnabled\", obj.isBuildingsEnabled());\n        wm.putBoolean(\"isMyLocationEnabled\", obj.isMyLocationEnabled());\n        wm.putBoolean(\"isDark\", obj.isDark());\n        return wm;\n    }\n\n    public static CameraPosition getCameraPositionFromReadableMap(ReadableMap rm) {\n        CameraPosition.Builder cameraPositionBuilder = new CameraPosition.Builder();\n        if (rm != null && hasValidKey(rm, \"target\", ReadableType.Map)) {\n            cameraPositionBuilder.target(getLatLngFromReadableMap(rm.getMap(\"target\")));\n            if (hasValidKey(rm, \"zoom\", ReadableType.Number)) {\n                cameraPositionBuilder.zoom((float) rm.getDouble(\"zoom\"));\n            }\n            if (hasValidKey(rm, \"bearing\", ReadableType.Number)) {\n                cameraPositionBuilder.bearing((float) rm.getDouble(\"bearing\"));\n            }\n            if (hasValidKey(rm, \"tilt\", ReadableType.Number)) {\n                cameraPositionBuilder.tilt((float) rm.getDouble(\"tilt\"));\n            }\n        }\n        return cameraPositionBuilder.build();\n    }\n\n    public static MyLocationStyle getMyLocationStyleFromReadableMap(ReadableMap rm) {\n        MyLocationStyle myLocationStyle = new MyLocationStyle();\n        if (rm != null) {\n            if (hasValidKey(rm, \"anchor\", ReadableType.Array)) {\n                ReadableArray anchor = rm.getArray(\"anchor\");\n                if ( ReactUtils.hasValidElement(anchor, 0, ReadableType.Number) && ReactUtils.hasValidElement(anchor, 1, ReadableType.Number)){\n                    myLocationStyle.anchor((float) anchor.getDouble(0),(float) anchor.getDouble(1));\n                }\n            }\n            if (hasValidKey(rm, \"icon\", ReadableType.Map)) {\n                myLocationStyle.myLocationIcon(ReactUtils.getBitmapDescriptorFromReadableMap(rm.getMap(\"icon\")));\n            }\n            if (hasValidKey(rm, \"fillcolor\", ReadableType.Number)) {\n                myLocationStyle.radiusFillColor((rm.getInt(\"fillcolor\")));\n            }\n        }\n        return myLocationStyle;\n    }\n\n    public static WritableMap getWritableMapFromCameraPosition(CameraPosition obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"target\", getWritableMapFromLatLng(obj.target));\n        wm.putDouble(\"zoom\", obj.zoom);\n        wm.putDouble(\"tilt\", obj.tilt);\n        wm.putDouble(\"bearing\", obj.bearing);\n        return wm;\n    }\n\n    public static int getColorFromRgbaArray(ReadableArray array) {\n        return Color.argb(array.getInt(0), array.getInt(1), array.getInt(2), array.getInt(3));\n    }\n\n    public static Map<Float, Float> toFloatMap(ReadableMap readableMap) {\n        Map<Float, Float> map = new HashMap<>();\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n\n            map.put(Float.parseFloat(key), ((Double) readableMap.getDouble(key)).floatValue());\n        }\n        return map;\n    }\n\n    public static Map<Float, Integer> toFloatIntegerMap(ReadableMap readableMap) {\n        Map<Float, Integer> map = new HashMap<>();\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n\n            map.put(Float.parseFloat(key), getColorFromRgbaArray(readableMap.getArray(key)));\n        }\n        return map;\n    }\n\n    public static LatLngBounds getLatLngBoundsFromReadableArray(ReadableArray rm) {\n        LatLngBounds.Builder latLngBoundsBuilder = new LatLngBounds.Builder();\n        if (rm != null) {\n            List<LatLng> listLatLng = getLatLngListFromReadableArray(rm);\n            for (LatLng latLng : listLatLng) {\n                latLngBoundsBuilder.include(latLng);\n            }\n        }\n        return latLngBoundsBuilder.build();\n    }\n\n    public static WritableMap getWritableMapFromLatLngBounds(LatLngBounds obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"northeast\", getWritableMapFromLatLng(obj.northeast));\n        wm.putMap(\"southwest\", getWritableMapFromLatLng(obj.southwest));\n        wm.putMap(\"center\", getWritableMapFromLatLng(obj.getCenter()));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCircle(Circle obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"center\", getWritableMapFromLatLng(obj.getCenter()));\n        wm.putInt(\"fillColor\", obj.getFillColor());\n        wm.putString(\"id\", obj.getId());\n        wm.putDouble(\"radius\", obj.getRadius());\n        wm.putInt(\"strokeColor\", obj.getStrokeColor());\n        wm.putArray(\"strokePattern\", mapList(obj.getStrokePattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"strokeWidth\", obj.getStrokeWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromCircleOptions(CircleOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"center\", getWritableMapFromLatLng(obj.getCenter()));\n        wm.putInt(\"fillColor\", obj.getFillColor());\n        wm.putDouble(\"radius\", obj.getRadius());\n        wm.putInt(\"strokeColor\", obj.getStrokeColor());\n        wm.putArray(\"strokePattern\", mapList(obj.getStrokePattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"strokeWidth\", obj.getStrokeWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromGroundOverlay(GroundOverlay obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putDouble(\"bearing\", obj.getBearing());\n        wm.putMap(\"bounds\", getWritableMapFromLatLngBounds(obj.getBounds()));\n        wm.putDouble(\"height\", obj.getHeight());\n        wm.putString(\"id\", obj.getId());\n        wm.putMap(\"position\", getWritableMapFromLatLng(obj.getPosition()));\n        wm.putDouble(\"transparency\", obj.getTransparency());\n        wm.putDouble(\"width\", obj.getWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromGroundOverlayOptions(GroundOverlayOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putDouble(\"anchorU\", obj.getAnchorU());\n        wm.putDouble(\"anchorV\", obj.getAnchorV());\n        wm.putDouble(\"bearing\", obj.getBearing());\n        wm.putMap(\"bounds\", getWritableMapFromLatLngBounds(obj.getBounds()));\n        wm.putDouble(\"height\", obj.getHeight());\n        wm.putMap(\"location\", getWritableMapFromLatLng(obj.getLocation()));\n        wm.putDouble(\"transparency\", obj.getTransparency());\n        wm.putDouble(\"width\", obj.getWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromMarker(Marker obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putDouble(\"alpha\", obj.getAlpha());\n        wm.putString(\"id\", obj.getId());\n        wm.putMap(\"position\", getWritableMapFromLatLng(obj.getPosition()));\n        wm.putDouble(\"rotation\", obj.getRotation());\n        wm.putString(\"snippet\", obj.getSnippet());\n        wm.putString(\"title\", obj.getTitle());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClusterable\", obj.isClusterable());\n        wm.putBoolean(\"isDraggable\", obj.isDraggable());\n        wm.putBoolean(\"isFlat\", obj.isFlat());\n        wm.putBoolean(\"isInfoWindowShown\", obj.isInfoWindowShown());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromMarkerOptions(MarkerOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putDouble(\"alpha\", obj.getAlpha());\n        wm.putDouble(\"markerAnchorU\", obj.getMarkerAnchorU());\n        wm.putDouble(\"markerAnchorV\", obj.getMarkerAnchorV());\n        wm.putDouble(\"infoWindowAnchorU\", obj.getInfoWindowAnchorU());\n        wm.putDouble(\"infoWindowAnchorV\", obj.getInfoWindowAnchorV());\n        wm.putMap(\"position\", getWritableMapFromLatLng(obj.getPosition()));\n        wm.putDouble(\"rotation\", obj.getRotation());\n        wm.putString(\"snippet\", obj.getSnippet());\n        wm.putString(\"title\", obj.getTitle());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClusterable\", obj.ismClusterable());\n        wm.putBoolean(\"isDraggable\", obj.isDraggable());\n        wm.putBoolean(\"isFlat\", obj.isFlat());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromPolygon(Polygon obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n\n        wm.putArray(\"points\", getWritableArrayFromLatLngList(obj.getPoints()));\n        wm.putArray(\"holes\", getWritableArrayFromListOfLatLngList(obj.getHoles()));\n        wm.putInt(\"fillColor\", obj.getFillColor());\n        wm.putString(\"id\", obj.getId());\n        wm.putInt(\"strokeColor\", obj.getStrokeColor());\n        wm.putArray(\"strokePattern\", mapList(obj.getStrokePattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"strokeWidth\", obj.getStrokeWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putInt(\"strokeJointType\", obj.getStrokeJointType());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        wm.putBoolean(\"isGeodesic\", obj.isGeodesic());\n        return wm;\n    }\n\n    private static WritableArray getWritableArrayFromListOfLatLngList(List<List<LatLng>> holes) {\n        WritableArray holesArray = new WritableNativeArray();\n        if (holes == null) {\n            return holesArray;\n        }\n        for (List<LatLng> hole : holes) {\n            holesArray.pushArray(getWritableArrayFromLatLngList(hole));\n        }\n\n        return holesArray;\n    }\n\n    private static WritableArray getWritableArrayFromLatLngList(List<LatLng> points) {\n        WritableArray pointsArray = new WritableNativeArray();\n        if (points == null) {\n            return pointsArray;\n        }\n\n        for (LatLng latLng : points) {\n            WritableMap wm = getWritableMapFromLatLng(latLng);\n            pointsArray.pushMap(wm);\n        }\n\n        return pointsArray;\n    }\n\n    public static WritableMap getWritableMapFromPolygonOptions(PolygonOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putArray(\"points\", getWritableArrayFromLatLngList(obj.getPoints()));\n        wm.putArray(\"holes\", getWritableArrayFromListOfLatLngList(obj.getHoles()));\n        wm.putInt(\"fillColor\", obj.getFillColor());\n        wm.putInt(\"strokeColor\", obj.getStrokeColor());\n        wm.putArray(\"strokePattern\", mapList(obj.getStrokePattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"strokeWidth\", obj.getStrokeWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        wm.putBoolean(\"isGeodesic\", obj.isGeodesic());\n        wm.putInt(\"strokeJointType\", obj.getStrokeJointType());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromPolyline(Polyline obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putArray(\"points\", getWritableArrayFromLatLngList(obj.getPoints()));\n        wm.putInt(\"color\", obj.getColor());\n        wm.putString(\"id\", obj.getId());\n        wm.putArray(\"pattern\", mapList(obj.getPattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"width\", obj.getWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        wm.putBoolean(\"isGeodesic\", obj.isGeodesic());\n        wm.putInt(\"jointType\", obj.getJointType());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromPolylineOptions(PolylineOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putArray(\"points\", getWritableArrayFromLatLngList(obj.getPoints()));\n        wm.putInt(\"color\", obj.getColor());\n        wm.putArray(\"pattern\", mapList(obj.getPattern(), ReactUtils::getWritableMapPatternItem));\n        wm.putDouble(\"width\", obj.getWidth());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isClickable\", obj.isClickable());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        wm.putBoolean(\"isGeodesic\", obj.isGeodesic());\n        wm.putInt(\"jointType\", obj.getJointType());\n\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromTileOverlay(TileOverlay obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putBoolean(\"fadeIn\", obj.getFadeIn());\n        wm.putDouble(\"transparency\", obj.getTransparency());\n        wm.putString(\"id\", obj.getId());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromTileOverlayOptions(TileOverlayOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putBoolean(\"fadeIn\", obj.getFadeIn());\n        wm.putDouble(\"transparency\", obj.getTransparency());\n        wm.putDouble(\"zIndex\", obj.getZIndex());\n        wm.putBoolean(\"isVisible\", obj.isVisible());\n        return wm;\n    }\n\n    public static HeatMapOptions.RadiusUnit getRadiusUnitFromString(String radiusUnit) {\n        if (\"METER\".equals(radiusUnit)) {\n            return HeatMapOptions.RadiusUnit.METER;\n        }\n        return HeatMapOptions.RadiusUnit.PIXEL;\n    }\n\n    public static WritableMap getWritableMapFromHeatMap(HeatMap obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putString(\"ID\", obj.getId());\n        wm.putString(\"radiusUnit\", obj.getRadiusUnit().toString());\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromHeatMapOptions(HeatMapOptions obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"color\", toWritableMap(obj.getColor()));\n        wm.putMap(\"intensity\", toWritableMap(obj.getIntensity()));\n        wm.putMap(\"opacity\", toWritableMap(obj.getOpacity()));\n        wm.putMap(\"radius\", toWritableMap(obj.getRadius()));\n        wm.putString(\"radiusUnit\", obj.getRadiusUnit().toString());\n        wm.putString(\"dataset\", obj.getHeatMapData());\n        wm.putInt(\"resourceID\", obj.getResourceId());\n        wm.putBoolean(\"isVisible\", obj.getVisible());\n        return wm;\n    }\n\n    public static WritableMap toWritableMap(Map<Float, ?> map) {\n        WritableMap writableMap = new WritableNativeMap();\n        Iterator iterator = map.entrySet().iterator();\n\n        while (iterator.hasNext()) {\n            Map.Entry pair = (Map.Entry) iterator.next();\n            Object value = pair.getValue();\n\n            if (value instanceof Float) {\n                writableMap.putDouble((pair.getKey().toString()), (Float) value);\n            } else if (value instanceof Integer) {\n                writableMap.putInt((pair.getKey().toString()), (Integer) value);\n            }\n            iterator.remove();\n        }\n\n        return writableMap;\n    }\n\n    public static WritableMap getWritableMapFromPoint(Point obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putInt(\"x\", obj.x);\n        wm.putInt(\"y\", obj.y);\n        return wm;\n    }\n\n    public static Point getPointFromReadableMap(ReadableMap rm) {\n        if (rm != null && hasValidKey(rm, \"x\", ReadableType.Number) && hasValidKey(rm, \"y\", ReadableType.Number)) {\n            return new Point(rm.getInt(\"x\"), rm.getInt(\"y\"));\n        }\n        return null;\n    }\n\n    public static WritableMap getWritableMapPointOfInterest(PointOfInterest obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"latLng\", getWritableMapFromLatLng(obj.latLng));\n        wm.putString(\"name\", obj.name);\n        wm.putString(\"placeId\", obj.placeId);\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromProjectionOnLatLng(Projection objProjection, LatLng objLatLng) {\n        WritableMap wm = new WritableNativeMap();\n        if (objProjection == null || objLatLng == null) {\n            return wm;\n        }\n        wm.putMap(\"point\", getWritableMapFromPoint(objProjection.toScreenLocation(objLatLng)));\n        wm.putMap(\"coordinate\", getWritableMapFromLatLng(objLatLng));\n        wm.putMap(\"visibleRegion\", getWritableMapFromVisibleRegion(objProjection.getVisibleRegion()));\n        return wm;\n    }\n\n    public static WritableMap getWritableMapFromVisibleRegion(VisibleRegion obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putMap(\"farLeft\", getWritableMapFromLatLng(obj.farLeft));\n        wm.putMap(\"farRight\", getWritableMapFromLatLng(obj.farRight));\n        wm.putMap(\"nearLeft\", getWritableMapFromLatLng(obj.nearLeft));\n        wm.putMap(\"nearRight\", getWritableMapFromLatLng(obj.nearRight));\n        wm.putMap(\"latLngBounds\", getWritableMapFromLatLngBounds(obj.latLngBounds));\n        return wm;\n    }\n\n    public static List<LatLng> getLatLngListFromReadableArray(ReadableArray ra) {\n        return mapReadableArray(ra, ReactUtils::getLatLngFromReadableMap);\n    }\n\n    public static List<List<LatLng>> getListOfLatLngListFromReadableArray(ReadableArray ra) {\n        return mapDoubleReadableArray(ra, ReactUtils::getLatLngListFromReadableArray);\n    }\n\n    public static BitmapDescriptor getBitmapDescriptorFromReadableMap(ReadableMap rm) {\n        if (rm != null) {\n            if (hasValidKey(rm, \"hue\", ReadableType.Number)) {\n                return BitmapDescriptorFactory.defaultMarker((float) rm.getDouble(\"hue\"));\n            } else if (hasValidKey(rm, \"asset\", ReadableType.String)) {\n                return BitmapDescriptorFactory.fromAsset(rm.getString(\"asset\"));\n            } else if (hasValidKey(rm, \"file\", ReadableType.String)) {\n                return BitmapDescriptorFactory.fromFile(rm.getString(\"file\"));\n            } else if (hasValidKey(rm, \"path\", ReadableType.String)) {\n                return BitmapDescriptorFactory.fromPath(rm.getString(\"path\"));\n            }\n        }\n        return BitmapDescriptorFactory.defaultMarker();\n    }\n\n    public static WritableMap getWritableMapPatternItem(PatternItem obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putInt(\"type\", obj.type);\n        wm.putDouble(\"length\", obj.length);\n        return wm;\n    }\n\n    public static PatternItem getPatternItemFromReadableMap(ReadableMap rm) {\n        PatternItem defaultPatternItem = new Dot();\n        if (rm == null) {\n            return defaultPatternItem;\n        }\n        int type = -1;\n        float length = 0f;\n        if (hasValidKey(rm, \"type\", ReadableType.Number)) {\n            type = rm.getInt(\"type\");\n            if (hasValidKey(rm, \"length\", ReadableType.Number)) {\n                length = (float) rm.getDouble(\"length\");\n            }\n        }\n        switch (type) {\n            case PatternItem.TYPE_DASH:\n                return new Dash(length);\n            case PatternItem.TYPE_DOT:\n                return new Dot();\n            case PatternItem.TYPE_GAP:\n                return new Gap(length);\n            default:\n                return defaultPatternItem;\n        }\n    }\n\n    public static Cap getCapFromReadableMap(ReadableMap rm) {\n        Cap defaultCap = new ButtCap();\n        if (rm == null) {\n            return defaultCap;\n        }\n        int type = -1;\n        if (hasValidKey(rm, \"type\", ReadableType.Number)) {\n            type = rm.getInt(\"type\");\n        }\n        switch (type) {\n            case Cap.TYPE_BUTT_CAP:\n                return new ButtCap();\n            case Cap.TYPE_SQUARE_CAP:\n                return new SquareCap();\n            case Cap.TYPE_ROUND_CAP:\n                return new RoundCap();\n            case Cap.TYPE_CUSTOM_CAP:\n                BitmapDescriptor bitmapDescriptor = getBitmapDescriptorFromReadableMap(rm);\n                return getCustomCapFromBitmapDescriptor(bitmapDescriptor,\n                    rm.hasKey(\"refWidth\") ? (float) rm.getDouble(\"refWidth\") : null);\n            default:\n                return defaultCap;\n        }\n    }\n\n    public static CustomCap getCustomCapFromBitmapDescriptor(BitmapDescriptor bitmapDescriptor, Float refWidth) {\n        if (refWidth != null) {\n            return new CustomCap(bitmapDescriptor, refWidth);\n        }\n        return new CustomCap(bitmapDescriptor);\n    }\n\n    public static List<PatternItem> getPatternItemListFromReadableArray(ReadableArray ra) {\n        return mapReadableArray(ra, ReactUtils::getPatternItemFromReadableMap);\n    }\n\n    public static List<Integer> getColorValuesListFromReadableArray(ReadableArray array) {\n        List<Integer> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(array.getInt(i));\n            }\n        }\n        return list;\n    }\n    public static TileProvider getTileProviderFromReadableMap(ReadableMap rm) {\n        final int defaultWidth = 256;\n        final int defaultHeight = 256;\n        if (rm != null) {\n            if (hasValidKey(rm, \"url\", ReadableType.String)) {\n                int width = defaultWidth;\n                int height = defaultHeight;\n                String urlBeforeFormat = rm.getString(\"url\");\n                if (hasValidKey(rm, \"width\", ReadableType.Number)) {\n                    width = rm.getInt(\"width\");\n                }\n                if (hasValidKey(rm, \"height\", ReadableType.Number)) {\n                    height = rm.getInt(\"height\");\n                }\n                if (urlBeforeFormat != null) {\n                    boolean isZoomSet = hasValidKey(rm, \"zoom\", ReadableType.Array) && (rm.getArray(\"zoom\").size() > 0);\n                    ArrayList<Object> zoomList = isZoomSet ? rm.getArray(\"zoom\").toArrayList() : new ArrayList<>();\n                    return new UrlTileProvider(width, height) {\n                        @Override\n                        public URL getTileUrl(int x, int y, int zoom) {\n                            if (isZoomSet && !zoomList.contains((double) zoom)) {\n                                return null;\n                            }\n                            try {\n                                return new URL(urlBeforeFormat.replace(\"{x}\", String.valueOf(x))\n                                    .replace(\"{y}\", String.valueOf(y))\n                                    .replace(\"{z}\", String.valueOf(zoom)));\n                            } catch (MalformedURLException e) {\n                                Log.w(TAG, e.getMessage());\n                                return null;\n                            }\n                        }\n                    };\n                }\n            }\n        }\n        return null;\n    }\n\n    public static TileProvider getTileProviderFromReadableArray(ReadableArray ra, Context context) {\n        final int defaultWidth = 256;\n        final int defaultHeight = 256;\n        HashMap<List<Integer>, List<Object>> map = new HashMap<>();\n        for (int i = 0; i < ra.size(); i++) {\n            ReadableMap rm = ra.getMap(i);\n            List<Integer> set = Arrays.asList(rm.getInt(\"x\"), rm.getInt(\"y\"), rm.getInt(\"zoom\"));\n            map.put(set, Arrays.asList(rm.getString(\"asset\"),\n                hasValidKey(rm, \"width\", ReadableType.Number) ? rm.getInt(\"width\") : defaultWidth,\n                hasValidKey(rm, \"height\", ReadableType.Number) ? rm.getInt(\"height\") : defaultHeight));\n        }\n        return (x, y, zoom) -> {\n            List<Integer> list = Arrays.asList(x, y, zoom);\n            if (map.containsKey(list)) {\n                String path = (String) map.get(list).get(0);\n                int width = (int) map.get(list).get(1);\n                int height = (int) map.get(list).get(2);\n                try {\n                    Bitmap bitmap = BitmapFactory.decodeStream(context.getAssets().open(path));\n                    ByteArrayOutputStream stream = new ByteArrayOutputStream();\n                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);\n                    return new Tile(width, height, stream.toByteArray());\n                } catch (final OutOfMemoryError | IOException e) {\n                    Log.d(TAG, e.getLocalizedMessage());\n                }\n            }\n            return new Tile(defaultWidth, defaultHeight, null);\n        };\n    }\n\n    public static Map<String, Object> getExportedCustomDirectEventTypeConstantsFromEvents(NamedEvent[] eventList) {\n        Map<String, Object> obj = new ArrayMap<>();\n        for (NamedEvent event : eventList) {\n            obj.put(event.getName(), MapBuilder.of(\"registrationName\", event.getName()));\n        }\n        return obj;\n    }\n\n    public static Map<String, Integer> getCommandsMap(NamedCommand[] commandList) {\n        Map<String, Integer> obj = new ArrayMap<>();\n        for (int i = 0; i < commandList.length; i++) {\n            obj.put(commandList[i].getName(), i);\n        }\n        return obj;\n    }\n\n    public static NamedCommand getCommand(String commandId, NamedCommand[] commands) {\n        for (NamedCommand command : commands) {\n            if (command.getName().equals(commandId)) {\n                return command;\n            }\n        }\n        return null;\n    }\n\n    public static Animation getAnimationFromCommandArgs(ReadableMap map, ReadableMap defaults, String key) {\n        Animation animation;\n        switch (key) {\n            case \"alpha\": // ALPHA\n                float fromAlpha = (float) map.getDouble(\"fromAlpha\");\n                float toAlpha = (float) map.getDouble(\"toAlpha\");\n                animation = new AlphaAnimation(fromAlpha, toAlpha);\n                break;\n            case \"rotate\": // ROTATE\n                float fromDegree = (float) map.getDouble(\"fromDegree\");\n                float toDegree = (float) map.getDouble(\"toDegree\");\n                animation = new RotateAnimation(fromDegree, toDegree);\n                break;\n            case \"scale\": // SCALE\n                float fromX = (float) map.getDouble(\"fromX\");\n                float fromY = (float) map.getDouble(\"fromY\");\n                float toX = (float) map.getDouble(\"toX\");\n                float toY = (float) map.getDouble(\"toY\");\n                animation = new ScaleAnimation(fromX, toX, fromY, toY);\n                break;\n            case \"translate\": // TRANSLATE\n                LatLng target = new LatLng(map.getDouble(\"latitude\"), map.getDouble(\"longitude\"));\n                animation = new TranslateAnimation(target);\n                break;\n            default:\n                animation = null;\n                break;\n        }\n        if (animation != null && map != null) {\n            if (map.hasKey(\"duration\")) {\n                animation.setDuration(map.getInt(\"duration\"));\n            } else if (defaults != null && defaults.hasKey(\"duration\")) {\n                animation.setDuration(defaults.getInt(\"duration\"));\n            }\n\n            if (map.hasKey(\"fillMode\")) {\n                animation.setFillMode(map.getInt(\"fillMode\"));\n            } else if (defaults != null && defaults.hasKey(\"fillMode\")) {\n                animation.setFillMode(defaults.getInt(\"fillMode\"));\n            }\n\n            if (map.hasKey(\"repeatCount\")) {\n                animation.setRepeatCount(map.getInt(\"repeatCount\"));\n            } else if (defaults != null && defaults.hasKey(\"repeatCount\")) {\n                animation.setRepeatCount(defaults.getInt(\"repeatCount\"));\n            }\n\n            if (map.hasKey(\"repeatMode\")) {\n                animation.setRepeatMode(map.getInt(\"repeatMode\"));\n            } else if (defaults != null && defaults.hasKey(\"repeatMode\")) {\n                animation.setRepeatMode(defaults.getInt(\"repeatMode\"));\n            }\n\n            if (map.hasKey(\"interpolator\")) {\n                animation.setInterpolator(getInterpolatorFromInt(map.getInt(\"interpolator\")));\n            } else if (defaults != null && defaults.hasKey(\"interpolator\")) {\n                animation.setInterpolator(getInterpolatorFromInt(defaults.getInt(\"interpolator\")));\n            }\n        }\n        return animation;\n\n    }\n\n    private static Interpolator getInterpolatorFromInt(int interpolator) {\n        switch (interpolator) {\n            case 1:\n                return new AccelerateInterpolator();\n            case 2:\n                return new AnticipateInterpolator();\n            case 3:\n                return new BounceInterpolator();\n            case 4:\n                return new DecelerateInterpolator();\n            case 5:\n                return new OvershootInterpolator();\n            case 6:\n                return new AccelerateDecelerateInterpolator();\n            case 7:\n                return new FastOutLinearInInterpolator();\n            case 8:\n                return new FastOutSlowInInterpolator();\n            case 9:\n                return new LinearOutSlowInInterpolator();\n            case 0:\n            default:\n                return new LinearInterpolator();\n        }\n    }\n\n    public static WritableMap getWritableMapFromAnimation(Animation animation) {\n        WritableMap map = new WritableNativeMap();\n        map.putInt(\"duration\", (int) animation.getDuration());\n        map.putInt(\"fillMode\", animation.getFillMode());\n        map.putInt(\"repeatCount\", animation.getRepeatCount());\n        map.putInt(\"repeatMode\", animation.getRepeatMode());\n        int interpolator;\n        if (animation.getInterpolator() instanceof LinearInterpolator) {\n            interpolator = 0;\n        } else if (animation.getInterpolator() instanceof AccelerateInterpolator) {\n            interpolator = 1;\n        } else if (animation.getInterpolator() instanceof AnticipateInterpolator) {\n            interpolator = 2;\n        } else if (animation.getInterpolator() instanceof BounceInterpolator) {\n            interpolator = 3;\n        } else if (animation.getInterpolator() instanceof DecelerateInterpolator) {\n            interpolator = 4;\n        } else if (animation.getInterpolator() instanceof OvershootInterpolator) {\n            interpolator = 5;\n        } else if (animation.getInterpolator() instanceof AccelerateDecelerateInterpolator) {\n            interpolator = 6;\n        } else {\n            interpolator = 0;\n        }\n\n        map.putInt(\"interpolator\", interpolator);\n\n        if (animation instanceof AlphaAnimation) {\n            map.putDouble(\"fromAlpha\", ((AlphaAnimation) animation).getFromAlpha());\n            map.putDouble(\"toAlpha\", ((AlphaAnimation) animation).getToAlpha());\n        } else if (animation instanceof RotateAnimation) {\n            map.putDouble(\"fromDegree\", ((RotateAnimation) animation).getFromDegree());\n            map.putDouble(\"toDegree\", ((RotateAnimation) animation).getToDegree());\n        } else if (animation instanceof ScaleAnimation) {\n            map.putDouble(\"fromX\", ((ScaleAnimation) animation).getFromX());\n            map.putDouble(\"fromY\", ((ScaleAnimation) animation).getFromY());\n            map.putDouble(\"toX\", ((ScaleAnimation) animation).getToX());\n            map.putDouble(\"toY\", ((ScaleAnimation) animation).getToY());\n        } else if (animation instanceof TranslateAnimation) {\n            map.putMap(\"target\", getWritableMapFromLatLng(((TranslateAnimation) animation).getTarget()));\n        }\n\n        return map;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/utils/UriIconController.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.drawable.Animatable;\nimport android.net.Uri;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.common.references.CloseableReference;\nimport com.facebook.datasource.DataSource;\nimport com.facebook.drawee.backends.pipeline.Fresco;\nimport com.facebook.drawee.controller.BaseControllerListener;\nimport com.facebook.drawee.controller.ControllerListener;\nimport com.facebook.drawee.drawable.ScalingUtils;\nimport com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;\nimport com.facebook.drawee.interfaces.DraweeController;\nimport com.facebook.drawee.view.DraweeHolder;\nimport com.facebook.imagepipeline.core.ImagePipeline;\nimport com.facebook.imagepipeline.image.CloseableImage;\nimport com.facebook.imagepipeline.image.CloseableStaticBitmap;\nimport com.facebook.imagepipeline.image.ImageInfo;\nimport com.facebook.imagepipeline.request.ImageRequest;\nimport com.facebook.imagepipeline.request.ImageRequestBuilder;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\nimport com.huawei.hms.maps.model.BitmapDescriptorFactory;\n\nimport static com.huawei.hms.rn.map.utils.ReactUtils.hasValidKey;\n\npublic class UriIconController {\n    private final Context context;\n    BitmapDescriptor bitmapDescriptor;\n    private int iconWidth;\n    private int iconHeight;\n    private final UriIconView component;\n    private ReadableMap options;\n\n    private final DraweeHolder<?> draweeHolder;\n    private DataSource<CloseableReference<CloseableImage>> dataSource;\n    private final ControllerListener<ImageInfo> mControllerListener =\n            new BaseControllerListener<ImageInfo>() {\n                @Override\n                public void onFinalImageSet(\n                        String id,\n                        @Nullable final ImageInfo imageInfo,\n                        @Nullable Animatable animatable) {\n                    CloseableReference<CloseableImage> imageReference = null;\n                    try {\n                        imageReference = dataSource.getResult();\n                        if (imageReference != null) {\n                            CloseableImage image = imageReference.get();\n                            if (image instanceof CloseableStaticBitmap) {\n                                CloseableStaticBitmap closeableStaticBitmap = (CloseableStaticBitmap) image;\n                                Bitmap bitmap = closeableStaticBitmap.getUnderlyingBitmap();\n                                if (bitmap != null) {\n                                    bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);\n                                    if (iconWidth != 0 && iconHeight != 0) {\n                                        bitmap = Bitmap.createScaledBitmap(bitmap, iconWidth, iconHeight, false);\n                                    }\n                                    bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap);\n                                    setIcon();\n                                }\n                            }\n                        }\n                    } finally {\n                        dataSource.close();\n                        if (imageReference != null) {\n                            CloseableReference.closeSafely(imageReference);\n                        }\n                    }\n\n                }\n            };\n\n    public UriIconController(Context context, UriIconView component) {\n        this.context = context;\n        this.component = component;\n        draweeHolder = DraweeHolder.create(new GenericDraweeHierarchyBuilder(context.getResources())\n                .setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)\n                .setFadeDuration(0)\n                .build(), context);\n        draweeHolder.onAttach();\n    }\n\n    public void setUriIcon(ReadableMap rm) {\n        if (rm != null && hasValidKey(rm, \"uri\", ReadableType.String)) {\n            String uri = rm.getString(\"uri\");\n            int height = 0;\n            int width = 0;\n            if (rm.hasKey(\"height\") && rm.hasKey(\"width\")) {\n                height = rm.getInt(\"height\");\n                width = rm.getInt(\"width\");\n            }\n            setUriIconHelper(uri, width, height);\n        }\n    }\n\n    public void setUriIconWithOptions(ReadableMap rm, ReadableMap options) {\n        this.options = options;\n        setUriIcon(rm);\n    }\n\n\n    private void setUriIconHelper(String uri, int width, int height) {\n        this.iconHeight = height;\n        this.iconWidth = width;\n\n        if (uri == null) {\n            return;\n        }\n\n        if (checkUriIsValid(uri)) {\n            ImageRequest req = ImageRequestBuilder\n                    .newBuilderWithSource(Uri.parse(uri))\n                    .build();\n\n            ImagePipeline imagePipeline = Fresco.getImagePipeline();\n            dataSource = imagePipeline.fetchDecodedImage(req, context);\n            DraweeController controller = Fresco.newDraweeControllerBuilder()\n                    .setImageRequest(req)\n                    .setControllerListener(mControllerListener)\n                    .setOldController(draweeHolder.getController())\n                    .build();\n            draweeHolder.setController(controller);\n        } else {\n            int drawableId = getDrawableResourceByName(uri);\n            Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId);\n            if (iconWidth != 0 && iconHeight != 0) {\n                bitmap = Bitmap.createScaledBitmap(bitmap, iconWidth, iconHeight, false);\n            }\n            bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap);\n            setIcon();\n        }\n    }\n\n    private boolean checkUriIsValid(String uri) {\n        String[] validUriTypes = new String[]{\"http://\", \"https://\", \"file://\", \"asset://\", \"data:\"};\n        for (String type : validUriTypes) {\n            if (uri.startsWith(type)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    private int getDrawableResourceByName(String name) {\n        return context.getResources().getIdentifier(\n                name,\n                \"drawable\",\n                context.getPackageName());\n    }\n\n    private void setIcon() {\n        component.setUriIcon(bitmapDescriptor, options);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/android/src/main/java/com/huawei/hms/rn/map/utils/UriIconView.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.map.utils;\n\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hms.maps.model.BitmapDescriptor;\n\npublic interface UriIconView {\n    /**\n     * This methods sets the icon or image according to parameter and the parent class.\n     * @param bitmapDescriptor bitmap that will be set\n     * @param options Additional options to customize icon\n     */\n    void setUriIcon(BitmapDescriptor bitmapDescriptor, ReadableMap options);\n}\n"
  },
  {
    "path": "react-native-hms-map/example/App.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport {\n  SafeAreaView,\n  StyleSheet,\n  ScrollView,\n  Text,\n  View,\n  TouchableHighlight,\n} from \"react-native\";\nimport HMSMap from \"@hmscore/react-native-hms-map\";\n\nimport BasicMap from \"./screens/BasicMap\";\nimport CameraControl from \"./screens/CameraControl\";\nimport Gestures from \"./screens/Gestures\";\nimport Location from \"./screens/Location\";\nimport MapLayers from \"./screens/MapLayers\";\nimport MapStyle from \"./screens/MapStyle\";\nimport Markers from \"./screens/Markers\";\nimport AdvancedMap from \"./screens/AdvancedMap\";\nimport HeatMap from \"./screens/HeatMap\";\nimport { styles } from \"./styles/styles\";\n\nconst buttons = [\n  {\n    title: \"Basic Map\",\n    component: BasicMap,\n    description: \"The most basic map component to show.\",\n  },\n  {\n    title: \"Camera Controls\",\n    component: CameraControl,\n    description:\n      \"Manipulate the camera via move, zoom, tilt, bearing. Animate the camera and stop the animation.\",\n  },\n  {\n    title: \"Gestures and UI\",\n    component: Gestures,\n    description:\n      \"Control zoom, rotate, scroll, tilt gestures and show/hide zoom/compass.\",\n  },\n  {\n    title: \"Location\",\n    component: Location,\n    description: \"Show your location on the map and show/hide location button.\",\n  },\n  {\n    title: \"Markers\",\n    component: Markers,\n    description:\n      \"Show markers with default, colored and customized options. Show/hide default and customized info windows, animate markers, apply clustering. Add markers via long click and remove them via long click on ino window.\",\n  },\n  {\n    title: \"Map Layers\",\n    component: MapLayers,\n    description:\n      \"Show basic and customized circles, polylines, polygons and ground overlays.\",\n  },\n  {\n    title: \"Map Styles\",\n    component: MapStyle,\n    description:\n      \"Show different ways how to style a map via mapType, mapStyle and tile overlay\",\n  },\n  {\n    title: \"Advanced Map\",\n    component: AdvancedMap,\n    description: \"More advanced settings\",\n  },\n  {\n    title: \"Heat Map\",\n    component: HeatMap,\n    description: \"Shows Heat Map\",\n  },\n];\n\nexport default class App extends React.Component {\n  state = {\n    currentScreen: buttons[0],\n  };\n\n  componentDidMount() {\n    HMSMap.module.initializer(\"<YOUR_API_KEY>\", \"CN\");\n  }\n\n  renderButtons() {\n    return buttons.map((b) => (\n      <View\n        key={b.title}\n        style={[\n          styles.p4,\n          styles.m2,\n          this.state.currentScreen == b ? customStyle.buttonBorder : null,\n        ]}\n      >\n        <TouchableHighlight\n          onPress={() => {\n            this.setState({ currentScreen: b });\n          }}\n        >\n          <Text>{b.title}</Text>\n        </TouchableHighlight>\n      </View>\n    ));\n  }\n\n  renderScreen() {\n    const Map = this.state.currentScreen.component;\n    return <Map />;\n  }\n\n  render() {\n    return (\n      <SafeAreaView>\n        <View>\n          <ScrollView horizontal style={[styles.p4]}>\n            {this.renderButtons()}\n          </ScrollView>\n        </View>\n\n        <View style={customStyle.lineStyle} />\n        {this.renderScreen()}\n      </SafeAreaView>\n    );\n  }\n}\n\nconst customStyle = StyleSheet.create({\n  lineStyle: {\n    marginTop: 8,\n    borderBottomColor: \"gray\",\n    borderBottomWidth: 1,\n  },\n  buttonBorder: {\n    borderColor: \"black\",\n    borderWidth: 1,\n    borderRadius: 5,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-map/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-map/example/README.md",
    "content": "# React-Native HMS Map - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Map Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Map - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.rnhmsmapdemo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.rnhmsmapdemo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        debug {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.debug\n        }\n        release {\n            signingConfig signingConfigs.debug\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-map/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:ignore=\"GoogleAppIndexingWarning\"\n        tools:targetApi=\"28\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.rnhmsmapdemo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHmsMapDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:usesCleartextTraffic=\"true\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHmsMapDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\"\n        android:exported=\"true\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/src/main/java/com/huawei/rnhmsmapdemo/MainActivity.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.rnhmsmapdemo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsMapDemo\";\n    }\n}"
  },
  {
    "path": "react-native-hms-map/example/android/app/src/main/java/com/huawei/rnhmsmapdemo/MainApplication.java",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.rnhmsmapdemo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    // Packages that cannot be autolinked yet can be added manually here, for example:\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this,false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-map/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        mavenCentral()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        google()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Jul 17 10:22:50 TRT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-map/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\norg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-map/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-map/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-map/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsMapDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-map/example/app.json",
    "content": "{\n  \"name\": \"RNHmsMapDemo\",\n  \"displayName\": \"RNHmsMapDemo\"\n}"
  },
  {
    "path": "react-native-hms-map/example/babel.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-map/example/earthquakes_with_usa.json",
    "content": "{\"type\":\"FeatureCollection\",\"metadata\":{\"generated\":1467160157000,\"url\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson\",\"title\":\"USGS All Earthquakes, Past Day\",\"status\":200,\"api\":\"1.5.2\",\"count\":213},\"features\":[{\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"107km SSE of King Salmon, Alaska\",\"time\":1467158542000,\"updated\":1467159719339,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731988\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731988.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":74,\"net\":\"ak\",\"code\":\"13731988\",\"ids\":\",ak13731988,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.41,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 107km SSE of King Salmon, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-156.1488,57.7582,114]},\"id\":\"ak13731988\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.91,\"place\":\"2km E of The Geysers, California\",\"time\":1467157555160,\"updated\":1467158882533,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656456\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656456.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":13,\"net\":\"nc\",\"code\":\"72656456\",\"ids\":\",nc72656456,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":8,\"dmin\":0.008934,\"rms\":0.01,\"gap\":125,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 2km E of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7258301,38.7791672,1.71]},\"id\":\"nc72656456\"},\n    {\n      \"type\": \"Feature\",\n      \"properties\": {\n        \"stroke\": \"#f53b3b\",\n        \"stroke-width\": 2,\n        \"stroke-opacity\": 1,\n        \"fill\": \"#555555\",\n        \"fill-opacity\": 0.5\n      },\n      \"geometry\": {\n        \"type\": \"MultiPolygon\",\n        \"coordinates\": [\n          [\n            [\n              [\n                -124.45312499999999,\n                48.22467264956519\n              ],\n              [\n                -123.57421875,\n                39.436192999314095\n              ],\n              [\n                -120.32226562500001,\n                34.45221847282654\n              ],\n              [\n                -116.89453125,\n                32.54681317351514\n              ],\n              [\n                -114.873046875,\n                32.69486597787505\n              ],\n              [\n                -110.56640625,\n                31.27855085894653\n              ],\n              [\n                -108.720703125,\n                31.50362930577303\n              ],\n              [\n                -106.5234375,\n                31.653381399664\n              ],\n              [\n                -104.853515625,\n                30.221101852485987\n              ],\n              [\n                -103.095703125,\n                29.152161283318915\n              ],\n              [\n                -102.65625,\n                29.6880527498568\n              ],\n              [\n                -101.689453125,\n                29.76437737516313\n              ],\n              [\n                -97.294921875,\n                25.799891182088334\n              ],\n              [\n                -96.94335937499999,\n                28.304380682962783\n              ],\n              [\n                -93.779296875,\n                29.458731185355344\n              ],\n              [\n                -89.736328125,\n                29.305561325527698\n              ],\n              [\n                -88.76953125,\n                30.372875188118016\n              ],\n              [\n                -83.84765625,\n                29.916852233070173\n              ],\n              [\n                -81.298828125,\n                25.3241665257384\n              ],\n              [\n                -80.068359375,\n                26.43122806450644\n              ],\n              [\n                -82.001953125,\n                30.977609093348686\n              ],\n              [\n                -75.498046875,\n                35.817813158696616\n              ],\n              [\n                -73.564453125,\n                40.84706035607122\n              ],\n              [\n                -66.97265625,\n                44.5278427984555\n              ],\n              [\n                -68.5546875,\n                47.21956811231547\n              ],\n              [\n                -79.189453125,\n                43.13306116240612\n              ],\n              [\n                -83.3203125,\n                41.83682786072714\n              ],\n              [\n                -82.353515625,\n                44.902577996288876\n              ],\n              [\n                -88.24218749999999,\n                47.81315451752768\n              ],\n              [\n                -95.09765625,\n                48.922499263758255\n              ],\n              [\n                -124.45312499999999,\n                48.22467264956519\n              ]\n            ]\n          ],\n          [\n            [\n              [\n                -141.064453125,\n                69.62651016802958\n              ],\n              [\n                -152.9296875,\n                70.64176873584621\n              ],\n              [\n                -157.32421875,\n                70.90226826757711\n              ],\n              [\n                -166.376953125,\n                68.43151284537514\n              ],\n              [\n                -160.6640625,\n                66.30220547599842\n              ],\n              [\n                -164.53125,\n                66.40795547978848\n              ],\n              [\n                -168.22265625,\n                65.62202261510642\n              ],\n              [\n                -165.322265625,\n                64.35893097894458\n              ],\n              [\n                -161.19140625,\n                64.66151739623564\n              ],\n              [\n                -161.19140625,\n                63.35212928507874\n              ],\n              [\n                -164.53125,\n                63.11463763252091\n              ],\n              [\n                -166.11328125,\n                61.60639637138628\n              ],\n              [\n                -164.53125,\n                60.71619779357714\n              ],\n              [\n                -167.080078125,\n                60.108670463036\n              ],\n              [\n                -162.24609375,\n                59.7563950493563\n              ],\n              [\n                -161.806640625,\n                58.63121664342478\n              ],\n              [\n                -158.115234375,\n                58.6769376725869\n              ],\n              [\n                -168.3984375,\n                52.908902047770255\n              ],\n              [\n                -157.1484375,\n                56.992882804633986\n              ],\n              [\n                -153.80859375,\n                56.70450561416937\n              ],\n              [\n                -151.962890625,\n                57.938183012205315\n              ],\n              [\n                -148.7109375,\n                60.19615576604439\n              ],\n              [\n                -145.810546875,\n                60.326947742998414\n              ],\n              [\n                -140.9765625,\n                60.1524422143808\n              ],\n              [\n                -141.064453125,\n                69.62651016802958\n              ]\n            ]\n          ],\n          [\n            [\n              [\n                -160.20263671875,\n                21.80030805097259\n              ],\n              [\n                -159.63134765625,\n                22.248428704383624\n              ],\n              [\n                -159.30175781249997,\n                22.14670778001263\n              ],\n              [\n                -156.005859375,\n                20.715015145512087\n              ],\n              [\n                -154.75341796875,\n                19.518375478601566\n              ],\n              [\n                -155.76416015625,\n                18.93746442964186\n              ],\n              [\n                -156.02783203124997,\n                19.766703551716976\n              ],\n              [\n                -155.76416015625,\n                20.076570104545173\n              ],\n              [\n                -156.4892578125,\n                20.591652120829167\n              ],\n              [\n                -156.99462890624997,\n                20.756113874762082\n              ],\n              [\n                -158.115234375,\n                21.37124437061831\n              ],\n              [\n                -159.45556640625,\n                21.820707853875017\n              ],\n              [\n                -160.20263671875,\n                21.80030805097259\n              ]\n            ]\n          ]\n        ]\n      },\n      \"properties\": {\n        \"title\": \"MultiPolygon United States of America\"\n      }\n    }, {\"type\":\"Feature\",\"properties\":{\"mag\":1.12,\"place\":\"10km ESE of Ocotillo Wells, CA\",\"time\":1467156880790,\"updated\":1467157099359,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615864\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615864.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":19,\"net\":\"ci\",\"code\":\"37615864\",\"ids\":\",ci37615864,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.1789,\"rms\":0.24,\"gap\":66,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 10km ESE of Ocotillo Wells, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.0356667,33.1076667,4.21]},\"id\":\"ci37615864\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.2,\"place\":\"116km SE of McGrath, Alaska\",\"time\":1467156236000,\"updated\":1467156952699,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731982\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731982.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":22,\"net\":\"ak\",\"code\":\"13731982\",\"ids\":\",ak13731982,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.62,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 116km SE of McGrath, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-154.2443,62.1162,6.3]},\"id\":\"ak13731982\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.41,\"place\":\"4km NNW of Boron, CA\",\"time\":1467156146830,\"updated\":1467156382771,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615856\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615856.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":31,\"net\":\"ci\",\"code\":\"37615856\",\"ids\":\",ci37615856,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.1021,\"rms\":0.25,\"gap\":59,\"magType\":\"ml\",\"type\":\"quarry blast\",\"title\":\"M 1.4 Quarry Blast - 4km NNW of Boron, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.6703333,35.0345,0.28]},\"id\":\"ci37615856\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.57,\"place\":\"4km ESE of Kelso, Washington\",\"time\":1467155666610,\"updated\":1467158147670,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175086\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175086.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":38,\"net\":\"uw\",\"code\":\"61175086\",\"ids\":\",uw61175086,\",\"sources\":\",uw,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":11,\"dmin\":0.07701,\"rms\":0.1,\"gap\":126,\"magType\":\"ml\",\"type\":\"explosion\",\"title\":\"M 1.6 Explosion - 4km ESE of Kelso, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8505,46.1281667,-0.47]},\"id\":\"uw61175086\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.9,\"place\":\"57km WNW of Ovalle, Chile\",\"time\":1467155249230,\"updated\":1467156473969,\"tz\":-240,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067rb\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067rb.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":369,\"net\":\"us\",\"code\":\"200067rb\",\"ids\":\",us200067rb,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":0.326,\"rms\":0.94,\"gap\":84,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.9 - 57km WNW of Ovalle, Chile\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-71.7324,-30.3572,29.21]},\"id\":\"us200067rb\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.1,\"place\":\"23km NNE of Badger, Alaska\",\"time\":1467155215000,\"updated\":1467156259719,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731974\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731974.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":19,\"net\":\"ak\",\"code\":\"13731974\",\"ids\":\",ak13731974,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.65,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 23km NNE of Badger, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.331,64.9921,0]},\"id\":\"ak13731974\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.16,\"place\":\"15km WNW of Anza, CA\",\"time\":1467155203340,\"updated\":1467155417585,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615824\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615824.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":0,\"net\":\"ci\",\"code\":\"37615824\",\"ids\":\",ci37615824,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":6,\"dmin\":0.08319,\"rms\":0.21,\"gap\":171,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.2 - 15km WNW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8283333,33.5993333,0.13]},\"id\":\"ci37615824\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.4,\"place\":\"21km S of Sary-Tash, Kyrgyzstan\",\"time\":1467154673810,\"updated\":1467155718708,\"tz\":360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067r6\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067r6.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":298,\"net\":\"us\",\"code\":\"200067r6\",\"ids\":\",us200067r6,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.109,\"rms\":1.41,\"gap\":156,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.4 - 21km S of Sary-Tash, Kyrgyzstan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[73.2365,39.5372,10]},\"id\":\"us200067r6\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.6,\"place\":\"18km ESE of Anza, CA\",\"time\":1467154491180,\"updated\":1467154707800,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615808\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615808.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":6,\"net\":\"ci\",\"code\":\"37615808\",\"ids\":\",ci37615808,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":24,\"dmin\":0.05002,\"rms\":0.19,\"gap\":61,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 18km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4885,33.5221667,14.47]},\"id\":\"ci37615808\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":5.8,\"place\":\"76km WNW of Port-Olry, Vanuatu\",\"time\":1467154007020,\"updated\":1467156784588,\"tz\":660,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067r2\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067r2.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":6.47,\"alert\":\"green\",\"status\":\"reviewed\",\"tsunami\":0,\"sig\":518,\"net\":\"us\",\"code\":\"200067r2\",\"ids\":\",us200067r2,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":6.099,\"rms\":1.09,\"gap\":24,\"magType\":\"mww\",\"type\":\"earthquake\",\"title\":\"M 5.8 - 76km WNW of Port-Olry, Vanuatu\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[166.4374,-14.6922,10]},\"id\":\"us200067r2\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.67,\"place\":\"23km ESE of Anza, CA\",\"time\":1467153643560,\"updated\":1467153857669,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615792\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615792.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":7,\"net\":\"ci\",\"code\":\"37615792\",\"ids\":\",ci37615792,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.06812,\"rms\":0.16,\"gap\":111,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 23km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4565,33.4601667,10.75]},\"id\":\"ci37615792\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.1,\"place\":\"16km ESE of Enumclaw, Washington\",\"time\":1467151367890,\"updated\":1467153148120,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175066\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175066.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"uw\",\"code\":\"61175066\",\"ids\":\",uw61175066,\",\"sources\":\",uw,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":6,\"dmin\":0.03369,\"rms\":0.09,\"gap\":163,\"magType\":\"ml\",\"type\":\"explosion\",\"title\":\"M 1.1 Explosion - 16km ESE of Enumclaw, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.7858333,47.17,-1.23]},\"id\":\"uw61175066\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.93,\"place\":\"5km NW of Mira Loma, CA\",\"time\":1467151070310,\"updated\":1467151293776,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615768\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615768.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":13,\"net\":\"ci\",\"code\":\"37615768\",\"ids\":\",ci37615768,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":22,\"dmin\":0.02,\"rms\":0.19,\"gap\":61,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 5km NW of Mira Loma, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.5511667,34.0226667,6.05]},\"id\":\"ci37615768\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"4km E of Edmond, Oklahoma\",\"time\":1467150541100,\"updated\":1467153799404,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067pe\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067pe.geojson\",\"felt\":3,\"cdi\":4.1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":76,\"net\":\"us\",\"code\":\"200067pe\",\"ids\":\",us200067pe,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,general-link,geoserve,impact-text,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":0.065,\"rms\":0.3,\"gap\":43,\"magType\":\"mb_lg\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 4km E of Edmond, Oklahoma\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-97.4258,35.6471,2.48]},\"id\":\"us200067pe\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":5.4,\"place\":\"27km SSE of Sary-Tash, Kyrgyzstan\",\"time\":1467149885850,\"updated\":1467150954802,\"tz\":360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067p3\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067p3.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":449,\"net\":\"us\",\"code\":\"200067p3\",\"ids\":\",us200067p3,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":2.349,\"rms\":1.34,\"gap\":41,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 5.4 - 27km SSE of Sary-Tash, Kyrgyzstan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[73.3282,39.4845,17.18]},\"id\":\"us200067p3\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.88,\"place\":\"5km SE of Banning, CA\",\"time\":1467149144450,\"updated\":1467149798150,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615728\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615728.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":54,\"net\":\"ci\",\"code\":\"37615728\",\"ids\":\",ci37615728,\",\"sources\":\",ci,\",\"types\":\",focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":69,\"dmin\":0.06685,\"rms\":0.23,\"gap\":22,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.9 - 5km SE of Banning, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.844,33.8881667,13.67]},\"id\":\"ci37615728\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.4,\"place\":\"137km WSW of Gustavus, Alaska\",\"time\":1467149123000,\"updated\":1467150853652,\"tz\":-540,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731723\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731723.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":89,\"net\":\"ak\",\"code\":\"13731723\",\"ids\":\",ak13731723,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.88,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.4 - 137km WSW of Gustavus, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-137.8818,57.9261,2.5]},\"id\":\"ak13731723\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.03,\"place\":\"9km WNW of Cobb, California\",\"time\":1467148704390,\"updated\":1467150305453,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656396\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656396.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":16,\"net\":\"nc\",\"code\":\"72656396\",\"ids\":\",nc72656396,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":7,\"dmin\":0.003904,\"rms\":0.01,\"gap\":212,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 9km WNW of Cobb, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8304977,38.8388329,1.62]},\"id\":\"nc72656396\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.2,\"place\":\"35km SSW of Caliente, Nevada\",\"time\":1467148679803,\"updated\":1467151659312,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549774\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549774.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":22,\"net\":\"nn\",\"code\":\"00549774\",\"ids\":\",nn00549774,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.331,\"rms\":0.1372,\"gap\":164.85,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 35km SSW of Caliente, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-114.6508,37.3155,7]},\"id\":\"nn00549774\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.89,\"place\":\"8km ESE of Valle Vista, CA\",\"time\":1467147870660,\"updated\":1467148091883,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615712\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615712.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":12,\"net\":\"ci\",\"code\":\"37615712\",\"ids\":\",ci37615712,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":28,\"dmin\":0.08552,\"rms\":0.19,\"gap\":97,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 8km ESE of Valle Vista, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8166667,33.7148333,15.52]},\"id\":\"ci37615712\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.61,\"place\":\"7km NW of Corona, CA\",\"time\":1467146855250,\"updated\":1467147081502,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615688\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615688.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":40,\"net\":\"ci\",\"code\":\"37615688\",\"ids\":\",ci37615688,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":9,\"dmin\":0.1536,\"rms\":0.32,\"gap\":90,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 7km NW of Corona, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.6286667,33.9043333,10.04]},\"id\":\"ci37615688\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.1,\"place\":\"30km N of Amboy, Washington\",\"time\":1467146067230,\"updated\":1467152565791,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175051\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175051.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"uw\",\"code\":\"61175051\",\"ids\":\",uw61175051,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":6,\"dmin\":0.02217,\"rms\":0.04,\"gap\":259,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.1 - 30km N of Amboy, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.3703333,46.1783333,18.88]},\"id\":\"uw61175051\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.95,\"place\":\"25km E of Honaunau-Napoopoo, Hawaii\",\"time\":1467145650310,\"updated\":1467153739510,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314786\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314786.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":58,\"net\":\"hv\",\"code\":\"61314786\",\"ids\":\",hv61314786,\",\"sources\":\",hv,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":15,\"dmin\":0.01637,\"rms\":0.07,\"gap\":111,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.0 - 25km E of Honaunau-Napoopoo, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.6265,19.4191667,3.762]},\"id\":\"hv61314786\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.34,\"place\":\"12km ESE of Anza, CA\",\"time\":1467144445440,\"updated\":1467146137166,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615640\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615640.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":2,\"net\":\"ci\",\"code\":\"37615640\",\"ids\":\",ci37615640,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":18,\"dmin\":0.04193,\"rms\":0.15,\"gap\":83,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.3 - 12km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.5511667,33.519,11.02]},\"id\":\"ci37615640\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.46,\"place\":\"25km E of Honaunau-Napoopoo, Hawaii\",\"time\":1467144053730,\"updated\":1467154213660,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314761\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314761.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":33,\"net\":\"hv\",\"code\":\"61314761\",\"ids\":\",hv61314761,\",\"sources\":\",hv,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.01302,\"rms\":0.06,\"gap\":144,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 25km E of Honaunau-Napoopoo, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.6278333,19.4158333,3.832]},\"id\":\"hv61314761\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.9,\"place\":\"10km SSE of Langston, Oklahoma\",\"time\":1467143876680,\"updated\":1467151143991,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067mz\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067mz.geojson\",\"felt\":8,\"cdi\":4.6,\"mmi\":3.54,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":238,\"net\":\"us\",\"code\":\"200067mz\",\"ids\":\",us200067mz,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":0.193,\"rms\":0.19,\"gap\":38,\"magType\":\"mb_lg\",\"type\":\"earthquake\",\"title\":\"M 3.9 - 10km SSE of Langston, Oklahoma\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-97.2269,35.8518,5.18]},\"id\":\"us200067mz\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.34,\"place\":\"7km NNE of Coalinga, California\",\"time\":1467143873720,\"updated\":1467151922528,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656371\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656371.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":28,\"net\":\"nc\",\"code\":\"72656371\",\"ids\":\",nc72656371,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":23,\"dmin\":0.05397,\"rms\":0.05,\"gap\":171,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.3 - 7km NNE of Coalinga, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-120.3148333,36.2001667,10.11]},\"id\":\"nc72656371\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2,\"place\":\"63km ESE of Adak, Alaska\",\"time\":1467143399000,\"updated\":1467146968985,\"tz\":-540,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731714\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731714.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":62,\"net\":\"ak\",\"code\":\"13731714\",\"ids\":\",ak13731714,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.52,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.0 - 63km ESE of Adak, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-175.8052,51.6593,71.3]},\"id\":\"ak13731714\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.02,\"place\":\"3km S of Pahala, Hawaii\",\"time\":1467143111250,\"updated\":1467143318820,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314741\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314741.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":63,\"net\":\"hv\",\"code\":\"61314741\",\"ids\":\",hv61314741,\",\"sources\":\",hv,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":33,\"dmin\":0.02272,\"rms\":0.15,\"gap\":219,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 2.0 - 3km S of Pahala, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.4791718,19.1714993,34.19]},\"id\":\"hv61314741\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.3,\"place\":\"5km SE of Port Ludlow, Washington\",\"time\":1467142857300,\"updated\":1467151897630,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175036\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175036.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":26,\"net\":\"uw\",\"code\":\"61175036\",\"ids\":\",uw61175036,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.1298,\"rms\":0.29,\"gap\":236,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.3 - 5km SE of Port Ludlow, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.6395,47.8813333,11.36]},\"id\":\"uw61175036\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.9,\"place\":\"46km SSW of Cantwell, Alaska\",\"time\":1467142204000,\"updated\":1467145782621,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731707\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731707.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":12,\"net\":\"ak\",\"code\":\"13731707\",\"ids\":\",ak13731707,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.88,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 46km SSW of Cantwell, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-149.3848,63.028,137.2]},\"id\":\"ak13731707\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.8,\"place\":\"31km NW of Fairview, Oklahoma\",\"time\":1467141985830,\"updated\":1467142962367,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067mh\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067mh.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":121,\"net\":\"us\",\"code\":\"200067mh\",\"ids\":\",us200067mh,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":0.013,\"rms\":0.22,\"gap\":83,\"magType\":\"mb_lg\",\"type\":\"earthquake\",\"title\":\"M 2.8 - 31km NW of Fairview, Oklahoma\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-98.7361,36.4657,5.05]},\"id\":\"us200067mh\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.45,\"place\":\"6km NW of Anza, CA\",\"time\":1467141981890,\"updated\":1467143888574,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615552\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615552.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":3,\"net\":\"ci\",\"code\":\"37615552\",\"ids\":\",ci37615552,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":23,\"dmin\":0.02139,\"rms\":0.1,\"gap\":64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 6km NW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7226667,33.583,12.93]},\"id\":\"ci37615552\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.74,\"place\":\"12km SE of Mammoth Lakes, California\",\"time\":1467141650870,\"updated\":1467145625093,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656366\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656366.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"nc\",\"code\":\"72656366\",\"ids\":\",nc72656366,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":17,\"dmin\":0.03601,\"rms\":0.04,\"gap\":156,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 12km SE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8666667,37.5698333,4.51]},\"id\":\"nc72656366\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.84,\"place\":\"4km NW of Nuevo, CA\",\"time\":1467141626580,\"updated\":1467143660151,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615544\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615544.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":11,\"net\":\"ci\",\"code\":\"37615544\",\"ids\":\",ci37615544,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":38,\"dmin\":0.04079,\"rms\":0.21,\"gap\":51,\"magType\":\"ml\",\"type\":\"quarry blast\",\"title\":\"M 0.8 Quarry Blast - 4km NW of Nuevo, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.174,33.8301667,-0.49]},\"id\":\"ci37615544\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.46,\"place\":\"6km ESE of Arlington Heights, Washington\",\"time\":1467141585130,\"updated\":1467150843020,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175016\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175016.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":33,\"net\":\"uw\",\"code\":\"61175016\",\"ids\":\",uw61175016,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":15,\"dmin\":0.2681,\"rms\":0.14,\"gap\":116,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 6km ESE of Arlington Heights, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.9826667,48.1718333,64.43]},\"id\":\"uw61175016\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.87,\"place\":\"10km NE of Borrego Springs, CA\",\"time\":1467141454800,\"updated\":1467143128339,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615528\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615528.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"ci\",\"code\":\"37615528\",\"ids\":\",ci37615528,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":37,\"dmin\":0.04614,\"rms\":0.2,\"gap\":85,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 10km NE of Borrego Springs, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.3121667,33.33,9.15]},\"id\":\"ci37615528\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.75,\"place\":\"16km S of Highland, Washington\",\"time\":1467141416000,\"updated\":1467150422100,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61175011\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61175011.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":47,\"net\":\"uw\",\"code\":\"61175011\",\"ids\":\",uw61175011,\",\"sources\":\",uw,\",\"types\":\",general-link,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":16,\"dmin\":0.1088,\"rms\":0.14,\"gap\":162,\"magType\":\"ml\",\"type\":\"explosion\",\"title\":\"M 1.8 Explosion - 16km S of Highland, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.086,45.9813333,-0.26]},\"id\":\"uw61175011\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"69km ESE of Lakeview, Oregon\",\"time\":1467141215514,\"updated\":1467150145676,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549763\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549763.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":15,\"net\":\"nn\",\"code\":\"00549763\",\"ids\":\",nn00549763,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.157,\"rms\":0.2468,\"gap\":223.79,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 69km ESE of Lakeview, Oregon\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6288,41.8573,7.1]},\"id\":\"nn00549763\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.17,\"place\":\"2km NNW of Orinda, California\",\"time\":1467140447150,\"updated\":1467153962648,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656346\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656346.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":21,\"net\":\"nc\",\"code\":\"72656346\",\"ids\":\",nc72656346,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":25,\"dmin\":0.02988,\"rms\":0.06,\"gap\":94,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 2km NNW of Orinda, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.192,37.9008333,3.96]},\"id\":\"nc72656346\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.6,\"place\":\"10km NNE of Portola, California\",\"time\":1467140324173,\"updated\":1467149580878,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549733\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549733.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"nn\",\"code\":\"00549733\",\"ids\":\",nn00549733,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":10,\"dmin\":0.07,\"rms\":0.0883,\"gap\":98.57,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 10km NNE of Portola, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-120.437,39.9031,10.8]},\"id\":\"nn00549733\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.7,\"place\":\"26km SE of Manley Hot Springs, Alaska\",\"time\":1467139539000,\"updated\":1467141906548,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731704\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731704.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":8,\"net\":\"ak\",\"code\":\"13731704\",\"ids\":\",ak13731704,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.33,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 26km SE of Manley Hot Springs, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.2817,64.8114,16.6]},\"id\":\"ak13731704\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.2,\"place\":\"21km NE of Fairview, Utah\",\"time\":1467139085250,\"updated\":1467151313670,\"tz\":-360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uu60154412\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uu60154412.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":22,\"net\":\"uu\",\"code\":\"60154412\",\"ids\":\",uu60154412,\",\"sources\":\",uu,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":13,\"dmin\":0.1059,\"rms\":0.22,\"gap\":173,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 21km NE of Fairview, Utah\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-111.2443333,39.7415,1.12]},\"id\":\"uu60154412\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.9,\"place\":\"67km WNW of Valdez, Alaska\",\"time\":1467138702000,\"updated\":1467141905933,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731699\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731699.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":56,\"net\":\"ak\",\"code\":\"13731699\",\"ids\":\",ak13731699,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.86,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.9 - 67km WNW of Valdez, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.508,61.3707,9.1]},\"id\":\"ak13731699\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.77,\"place\":\"26km E of Honaunau-Napoopoo, Hawaii\",\"time\":1467138526330,\"updated\":1467158173890,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314681\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314681.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":9,\"net\":\"hv\",\"code\":\"61314681\",\"ids\":\",hv61314681,\",\"sources\":\",hv,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":7,\"dmin\":0.03263,\"rms\":0.13,\"gap\":106,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 26km E of Honaunau-Napoopoo, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.6091667,19.4305,1.872]},\"id\":\"hv61314681\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.3,\"place\":\"57km NE of Kodiak, Alaska\",\"time\":1467138139000,\"updated\":1467141908258,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731697\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731697.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":81,\"net\":\"ak\",\"code\":\"13731697\",\"ids\":\",ak13731697,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.29,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.3 - 57km NE of Kodiak, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-151.6172,58.0922,24.4]},\"id\":\"ak13731697\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.54,\"place\":\"14km WNW of Anza, CA\",\"time\":1467137745870,\"updated\":1467140454638,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615472\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615472.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615472\",\"ids\":\",ci37615472,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":28,\"dmin\":0.0391,\"rms\":0.11,\"gap\":62,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 14km WNW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8138333,33.603,8.49]},\"id\":\"ci37615472\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.12,\"place\":\"4km WNW of Grand Terrace, CA\",\"time\":1467137686500,\"updated\":1467140073289,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615464\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615464.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"ci\",\"code\":\"37615464\",\"ids\":\",ci37615464,\",\"sources\":\",ci,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":49,\"dmin\":0.04989,\"rms\":0.24,\"gap\":43,\"magType\":\"ml\",\"type\":\"quarry blast\",\"title\":\"M 1.1 Quarry Blast - 4km WNW of Grand Terrace, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.3526667,34.0526667,-0.41]},\"id\":\"ci37615464\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"12km E of Willow, Alaska\",\"time\":1467137139000,\"updated\":1467146970824,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731694\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731694.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":15,\"net\":\"ak\",\"code\":\"13731694\",\"ids\":\",ak13731694,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.26,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 12km E of Willow, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-149.7991,61.7422,46.6]},\"id\":\"ak13731694\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.73,\"place\":\"2km SE of The Geysers, California\",\"time\":1467136790360,\"updated\":1467145084068,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656331\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656331.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":46,\"net\":\"nc\",\"code\":\"72656331\",\"ids\":\",nc72656331,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":20,\"dmin\":0.008927,\"rms\":0.05,\"gap\":122,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 2km SE of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7360001,38.758667,1.6]},\"id\":\"nc72656331\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.2,\"place\":\"40km WSW of Talkeetna, Alaska\",\"time\":1467136717000,\"updated\":1467141994925,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13731684\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13731684.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":158,\"net\":\"ak\",\"code\":\"13731684\",\"ids\":\",ak13731684,\",\"sources\":\",ak,\",\"types\":\",dyfi,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.61,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 3.2 - 40km WSW of Talkeetna, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.7988,62.164,62.7]},\"id\":\"ak13731684\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.74,\"place\":\"6km NW of The Geysers, California\",\"time\":1467135434190,\"updated\":1467142622938,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656326\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656326.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":47,\"net\":\"nc\",\"code\":\"72656326\",\"ids\":\",nc72656326,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":34,\"dmin\":0.005858,\"rms\":0.02,\"gap\":58,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 6km NW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8046646,38.8193321,2.3]},\"id\":\"nc72656326\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.8,\"place\":\"135km ENE of Chichi-shima, Japan\",\"time\":1467135140880,\"updated\":1467137663040,\"tz\":600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067l8\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067l8.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":354,\"net\":\"us\",\"code\":\"200067l8\",\"ids\":\",us200067l8,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.24,\"rms\":1.08,\"gap\":194,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.8 - 135km ENE of Chichi-shima, Japan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[143.4837,27.549,10]},\"id\":\"us200067l8\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.6,\"place\":\"38km WSW of Greenfield, California\",\"time\":1467134547000,\"updated\":1467156662784,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656321\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656321.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":39,\"net\":\"nc\",\"code\":\"72656321\",\"ids\":\",nc72656321,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":19,\"dmin\":0.0284,\"rms\":0.05,\"gap\":158,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 38km WSW of Greenfield, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.6193333,36.1605,11.25]},\"id\":\"nc72656321\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.66,\"place\":\"5km NNE of Fontana, CA\",\"time\":1467134303970,\"updated\":1467139528831,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615376\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615376.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":7,\"net\":\"ci\",\"code\":\"37615376\",\"ids\":\",ci37615376,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":27,\"dmin\":0.04337,\"rms\":0.15,\"gap\":69,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 5km NNE of Fontana, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.4411667,34.143,6.82]},\"id\":\"ci37615376\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.48,\"place\":\"8km SW of Idyllwild, CA\",\"time\":1467133732590,\"updated\":1467139178731,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615368\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615368.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615368\",\"ids\":\",ci37615368,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":25,\"dmin\":0.05802,\"rms\":0.13,\"gap\":100,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 8km SW of Idyllwild, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.778,33.688,17.2]},\"id\":\"ci37615368\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.1,\"place\":\"91km N of Redoubt Volcano, Alaska\",\"time\":1467133553000,\"updated\":1467146969686,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730887\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730887.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"ak\",\"code\":\"13730887\",\"ids\":\",ak13730887,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.46,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 91km N of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.4736,61.2948,1.2]},\"id\":\"ak13730887\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.5,\"place\":\"117km NNE of Manley Hot Springs, Alaska\",\"time\":1467133215000,\"updated\":1467135370042,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730884\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730884.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":35,\"net\":\"ak\",\"code\":\"13730884\",\"ids\":\",ak13730884,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.68,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 117km NNE of Manley Hot Springs, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-149.2895,65.8978,0]},\"id\":\"ak13730884\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.95,\"place\":\"2km NNW of The Geysers, California\",\"time\":1467132936470,\"updated\":1467139321782,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656316\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656316.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":14,\"net\":\"nc\",\"code\":\"72656316\",\"ids\":\",nc72656316,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":11,\"dmin\":0.01568,\"rms\":0.01,\"gap\":124,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 2km NNW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7689972,38.800499,3.81]},\"id\":\"nc72656316\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.79,\"place\":\"6km WNW of The Geysers, California\",\"time\":1467132734820,\"updated\":1467134283537,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656311\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656311.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":10,\"net\":\"nc\",\"code\":\"72656311\",\"ids\":\",nc72656311,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":10,\"dmin\":0.0218,\"rms\":0.02,\"gap\":201,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 6km WNW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8271637,38.802166,3.87]},\"id\":\"nc72656311\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.3,\"place\":\"10km NW of Hollister, California\",\"time\":1467130796140,\"updated\":1467152642589,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656306\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656306.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":26,\"net\":\"nc\",\"code\":\"72656306\",\"ids\":\",nc72656306,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":22,\"dmin\":0.08131,\"rms\":0.13,\"gap\":99,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.3 - 10km NW of Hollister, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.4778333,36.9276667,2.55]},\"id\":\"nc72656306\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0,\"place\":\"22km ESE of Hawthorne, Nevada\",\"time\":1467130176808,\"updated\":1467139860879,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549729\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549729.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549729\",\"ids\":\",nn00549729,\",\"sources\":\",nn,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.056,\"rms\":0.1041,\"gap\":144.17,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.0 - 22km ESE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.3758,38.4826,2.6]},\"id\":\"nn00549729\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.54,\"place\":\"20km ESE of Anza, CA\",\"time\":1467130061190,\"updated\":1467130444617,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615328\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615328.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615328\",\"ids\":\",ci37615328,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":18,\"dmin\":0.05181,\"rms\":0.13,\"gap\":81,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 20km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4743333,33.4911667,13.3]},\"id\":\"ci37615328\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.1,\"place\":\"21km E of Hawthorne, Nevada\",\"time\":1467129937747,\"updated\":1467139099083,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549726\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549726.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549726\",\"ids\":\",nn00549726,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.064,\"rms\":0.081,\"gap\":144.55,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.1 - 21km E of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.3842,38.4878,4.5]},\"id\":\"nn00549726\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.6,\"place\":\"106km NW of Fort McPherson, Canada\",\"time\":1467129874000,\"updated\":1467145861834,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730085\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730085.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":199,\"net\":\"ak\",\"code\":\"13730085\",\"ids\":\",ak13730085,\",\"sources\":\",ak,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.5,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 3.6 - 106km NW of Fort McPherson, Canada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-136.5264,68.1634,25.9]},\"id\":\"ak13730085\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.79,\"place\":\"17km ESE of Anza, CA\",\"time\":1467129563160,\"updated\":1467130485200,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615320\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615320.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":10,\"net\":\"ci\",\"code\":\"37615320\",\"ids\":\",ci37615320,\",\"sources\":\",ci,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":25,\"dmin\":0.05977,\"rms\":0.17,\"gap\":71,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 17km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.505,33.5016667,12.62]},\"id\":\"ci37615320\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.4,\"place\":\"4km W of Tursunzoda, Tajikistan\",\"time\":1467129336160,\"updated\":1467135234951,\"tz\":300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067ke\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067ke.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":298,\"net\":\"us\",\"code\":\"200067ke\",\"ids\":\",us200067ke,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":0.776,\"rms\":0.7,\"gap\":91,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.4 - 4km W of Tursunzoda, Tajikistan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[68.1848,38.5131,21.92]},\"id\":\"us200067ke\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.7,\"place\":\"84km W of Cantwell, Alaska\",\"time\":1467129177000,\"updated\":1467132376651,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730082\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730082.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":44,\"net\":\"ak\",\"code\":\"13730082\",\"ids\":\",ak13730082,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.45,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 84km W of Cantwell, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.6166,63.2513,132.1]},\"id\":\"ak13730082\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.81,\"place\":\"14km S of Volcano, Hawaii\",\"time\":1467128623490,\"updated\":1467138460620,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314516\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314516.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":50,\"net\":\"hv\",\"code\":\"61314516\",\"ids\":\",hv61314516,\",\"sources\":\",hv,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":50,\"dmin\":0.01755,\"rms\":0.09,\"gap\":109,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.8 - 14km S of Volcano, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.2166667,19.2971667,33.881]},\"id\":\"hv61314516\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.24,\"place\":\"9km NNE of Gonzales, California\",\"time\":1467128570060,\"updated\":1467158404550,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656301\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656301.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":24,\"net\":\"nc\",\"code\":\"72656301\",\"ids\":\",nc72656301,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.0168,\"rms\":0.07,\"gap\":51,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 9km NNE of Gonzales, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.416,36.5848333,1.57]},\"id\":\"nc72656301\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.2,\"place\":\"24km ESE of Hawthorne, Nevada\",\"time\":1467128450902,\"updated\":1467138718668,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549724\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549724.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549724\",\"ids\":\",nn00549724,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.02,\"rms\":0.0783,\"gap\":127.77,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.2 - 24km ESE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.3607,38.4428,9.3]},\"id\":\"nn00549724\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.2,\"place\":\"35km NW of Manley Hot Springs, Alaska\",\"time\":1467128261000,\"updated\":1467132377847,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730081\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730081.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":1,\"net\":\"ak\",\"code\":\"13730081\",\"ids\":\",ak13730081,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.28,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.2 - 35km NW of Manley Hot Springs, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-151.1135,65.2516,0]},\"id\":\"ak13730081\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.65,\"place\":\"14km WNW of Anza, CA\",\"time\":1467128139530,\"updated\":1467130449462,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615288\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615288.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"ci\",\"code\":\"37615288\",\"ids\":\",ci37615288,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":24,\"dmin\":0.04031,\"rms\":0.08,\"gap\":51,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 14km WNW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.815,33.6003333,8.02]},\"id\":\"ci37615288\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"81km ENE of Cape Yakataga, Alaska\",\"time\":1467128033000,\"updated\":1467132377285,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730079\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730079.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":15,\"net\":\"ak\",\"code\":\"13730079\",\"ids\":\",ak13730079,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":1.23,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 81km ENE of Cape Yakataga, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-140.9947,60.2347,30.9]},\"id\":\"ak13730079\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.2,\"place\":\"24km ESE of Cohoe, Alaska\",\"time\":1467127314000,\"updated\":1467132468939,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730060\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730060.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":158,\"net\":\"ak\",\"code\":\"13730060\",\"ids\":\",ak13730060,\",\"sources\":\",ak,\",\"types\":\",dyfi,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.56,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 3.2 - 24km ESE of Cohoe, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.9208,60.2527,70.3]},\"id\":\"ak13730060\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.9,\"place\":\"24km SW of Y, Alaska\",\"time\":1467127002000,\"updated\":1467132378630,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730056\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730056.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":56,\"net\":\"ak\",\"code\":\"13730056\",\"ids\":\",ak13730056,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.79,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.9 - 24km SW of Y, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.1674,61.9962,5.8]},\"id\":\"ak13730056\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"63km SW of Anchor Point, Alaska\",\"time\":1467125945000,\"updated\":1467129072243,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13730048\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13730048.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":74,\"net\":\"ak\",\"code\":\"13730048\",\"ids\":\",ak13730048,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.43,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 63km SW of Anchor Point, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.6304,59.3819,73.8]},\"id\":\"ak13730048\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4,\"place\":\"89km W of San Antonio de los Cobres, Argentina\",\"time\":1467125378280,\"updated\":1467130904956,\"tz\":-180,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067j2\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067j2.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":246,\"net\":\"us\",\"code\":\"200067j2\",\"ids\":\",us200067j2,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.568,\"rms\":1.34,\"gap\":36,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.0 - 89km W of San Antonio de los Cobres, Argentina\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-67.2028,-24.2452,184.15]},\"id\":\"us200067j2\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.04,\"place\":\"36km N of Packwood, Washington\",\"time\":1467124311920,\"updated\":1467137270630,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174921\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174921.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"uw\",\"code\":\"61174921\",\"ids\":\",uw61174921,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.01003,\"rms\":0.13,\"gap\":176,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.0 - 36km N of Packwood, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.6588333,46.9358333,9.38]},\"id\":\"uw61174921\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.5,\"place\":\"19km ESE of Anza, CA\",\"time\":1467124308950,\"updated\":1467130391497,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615240\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615240.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615240\",\"ids\":\",ci37615240,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":26,\"dmin\":0.06133,\"rms\":0.13,\"gap\":97,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 19km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4873333,33.49,13.87]},\"id\":\"ci37615240\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.03,\"place\":\"36km SE of Buckley, Washington\",\"time\":1467123718660,\"updated\":1467137108240,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174916\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174916.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"uw\",\"code\":\"61174916\",\"ids\":\",uw61174916,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.0121,\"rms\":0.09,\"gap\":218,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.0 - 36km SE of Buckley, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.6596667,46.9506667,8.14]},\"id\":\"uw61174916\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.07,\"place\":\"3km NNE of East Quincy, California\",\"time\":1467123095870,\"updated\":1467153963647,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc71103349\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc71103349.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":66,\"net\":\"nc\",\"code\":\"71103349\",\"ids\":\",nc71103349,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":19,\"dmin\":0.08149,\"rms\":0.07,\"gap\":74,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 2.1 - 3km NNE of East Quincy, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-120.88,39.9626667,4.83]},\"id\":\"nc71103349\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":null,\"place\":\"3km NNE of East Quincy, California\",\"time\":1467123095020,\"updated\":1467150924306,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656276\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656276.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nc\",\"code\":\"72656276\",\"ids\":\",nn00549689,nc72656276,\",\"sources\":\",nn,nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":9,\"dmin\":0.08206,\"rms\":0.05,\"gap\":76,\"magType\":null,\"type\":\"earthquake\",\"title\":\"M ? - 3km NNE of East Quincy, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-120.8755,39.9623333,3.62]},\"id\":\"nc72656276\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":5.1,\"place\":\"179km NNW of Dobo, Indonesia\",\"time\":1467122151130,\"updated\":1467126524871,\"tz\":540,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067hm\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067hm.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":1,\"sig\":400,\"net\":\"us\",\"code\":\"200067hm\",\"ids\":\",us200067hm,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.985,\"rms\":0.82,\"gap\":45,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 5.1 - 179km NNW of Dobo, Indonesia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[133.767,-4.2101,10]},\"id\":\"us200067hm\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.49,\"place\":\"3km WNW of Lake Henshaw, CA\",\"time\":1467121671230,\"updated\":1467129514038,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615224\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615224.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615224\",\"ids\":\",ci37615224,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":22,\"dmin\":0.03384,\"rms\":0.13,\"gap\":97,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 3km WNW of Lake Henshaw, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7951667,33.2506667,9.16]},\"id\":\"ci37615224\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.6,\"place\":\"9km NE of Aguanga, CA\",\"time\":1467121626580,\"updated\":1467128577322,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615216\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615216.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"ci\",\"code\":\"37615216\",\"ids\":\",ci37615216,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":28,\"dmin\":0.08106,\"rms\":0.11,\"gap\":39,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 9km NE of Aguanga, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7903333,33.4973333,4.96]},\"id\":\"ci37615216\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.5,\"place\":\"18km NNE of Isabela, Puerto Rico\",\"time\":1467120591200,\"updated\":1467139160040,\"tz\":-240,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/pr16180004\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr16180004.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"REVIEWED\",\"tsunami\":0,\"sig\":96,\"net\":\"pr\",\"code\":\"16180004\",\"ids\":\",pr16180004,us200067kn,\",\"sources\":\",pr,us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":6,\"dmin\":0.33417329,\"rms\":0.18,\"gap\":273.6,\"magType\":\"Md\",\"type\":\"earthquake\",\"title\":\"M 2.5 - 18km NNE of Isabela, Puerto Rico\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-66.9281,18.6399,15]},\"id\":\"pr16180004\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.7,\"place\":\"64km N of Port-Olry, Vanuatu\",\"time\":1467120584130,\"updated\":1467124132684,\"tz\":660,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067hj\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067hj.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":340,\"net\":\"us\",\"code\":\"200067hj\",\"ids\":\",us200067hj,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":6.275,\"rms\":0.7,\"gap\":144,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.7 - 64km N of Port-Olry, Vanuatu\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[166.94,-14.4734,38.82]},\"id\":\"us200067hj\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.6,\"place\":\"94km N of Redoubt Volcano, Alaska\",\"time\":1467119565000,\"updated\":1467122238492,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13729248\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13729248.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":39,\"net\":\"ak\",\"code\":\"13729248\",\"ids\":\",ak13729248,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.71,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 94km N of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.4934,61.3249,1.3]},\"id\":\"ak13729248\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.61,\"place\":\"19km ESE of Anza, CA\",\"time\":1467119301250,\"updated\":1467120643567,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615192\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615192.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"ci\",\"code\":\"37615192\",\"ids\":\",ci37615192,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":25,\"dmin\":0.05804,\"rms\":0.14,\"gap\":79,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 19km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.483,33.4905,13.86]},\"id\":\"ci37615192\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.29,\"place\":\"3km E of Ridgely, Tennessee\",\"time\":1467119284150,\"updated\":1467124534173,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nm60123007\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nm60123007.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":81,\"net\":\"nm\",\"code\":\"60123007\",\"ids\":\",nm60123007,\",\"sources\":\",nm,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":22,\"dmin\":0.03134,\"rms\":0.07,\"gap\":47,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 2.3 - 3km E of Ridgely, Tennessee\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-89.4483333,36.2685,6.85]},\"id\":\"nm60123007\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.6,\"place\":\"62km NE of Sutton-Alpine, Alaska\",\"time\":1467119086000,\"updated\":1467122239731,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13729242\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13729242.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":39,\"net\":\"ak\",\"code\":\"13729242\",\"ids\":\",ak13729242,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.82,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 62km NE of Sutton-Alpine, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.9358,62.1575,24.4]},\"id\":\"ak13729242\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.02,\"place\":\"5km SE of The Geysers, California\",\"time\":1467118375020,\"updated\":1467159986151,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656266\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656266.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":16,\"net\":\"nc\",\"code\":\"72656266\",\"ids\":\",nc72656266,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":31,\"dmin\":0.005825,\"rms\":0.08,\"gap\":114,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 5km SE of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7185,38.7428333,0.35]},\"id\":\"nc72656266\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.47,\"place\":\"14km WNW of Anza, CA\",\"time\":1467118098250,\"updated\":1467120645449,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615176\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615176.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":3,\"net\":\"ci\",\"code\":\"37615176\",\"ids\":\",ci37615176,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":22,\"dmin\":0.03885,\"rms\":0.16,\"gap\":62,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 14km WNW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8148333,33.6025,8.32]},\"id\":\"ci37615176\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.81,\"place\":\"9km WNW of The Geysers, California\",\"time\":1467118064640,\"updated\":1467121382937,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656261\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656261.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":10,\"net\":\"nc\",\"code\":\"72656261\",\"ids\":\",nc72656261,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":8,\"dmin\":0.005944,\"rms\":0.03,\"gap\":90,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 9km WNW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8503342,38.824501,1.67]},\"id\":\"nc72656261\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.7,\"place\":\"49km ENE of Mammoth Lakes, California\",\"time\":1467118003084,\"updated\":1467139840265,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549727\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549727.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"nn\",\"code\":\"00549727\",\"ids\":\",nn00549727,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.183,\"rms\":0.129,\"gap\":140.61,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 49km ENE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.5056,37.8897,11.1]},\"id\":\"nn00549727\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.8,\"place\":\"32km SSW of Manley Hot Springs, Alaska\",\"time\":1467117816000,\"updated\":1467122239084,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13729237\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13729237.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":10,\"net\":\"ak\",\"code\":\"13729237\",\"ids\":\",ak13729237,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.17,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 32km SSW of Manley Hot Springs, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.8794,64.7323,17.9]},\"id\":\"ak13729237\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.9,\"place\":\"27km SSE of Sary-Tash, Kyrgyzstan\",\"time\":1467117796090,\"updated\":1467120533040,\"tz\":360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067hf\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067hf.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":369,\"net\":\"us\",\"code\":\"200067hf\",\"ids\":\",us200067hf,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,moment-tensor,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.213,\"rms\":1.31,\"gap\":71,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.9 - 27km SSE of Sary-Tash, Kyrgyzstan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[73.3726,39.4984,10]},\"id\":\"us200067hf\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.1,\"place\":\"50km WNW of Beatty, Nevada\",\"time\":1467116882360,\"updated\":1467138909795,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549722\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549722.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549722\",\"ids\":\",nn00549722,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.233,\"rms\":0.1191,\"gap\":311.36,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.1 - 50km WNW of Beatty, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.2417,37.1431,10.4]},\"id\":\"nn00549722\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.3,\"place\":\"10km NE of Johnson Lane, Nevada\",\"time\":1467116420326,\"updated\":1467137977681,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549720\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549720.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549720\",\"ids\":\",nn00549720,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":6,\"dmin\":0.053,\"rms\":0.0911,\"gap\":115.57,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.3 - 10km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6505,39.124,9.9]},\"id\":\"nn00549720\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.5,\"place\":\"20km NW of Hawthorne, Nevada\",\"time\":1467115649389,\"updated\":1467137786155,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549718\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549718.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"nn\",\"code\":\"00549718\",\"ids\":\",nn00549718,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.202,\"rms\":0.0804,\"gap\":158.79,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 20km NW of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.7757,38.6654,14.6]},\"id\":\"nn00549718\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.87,\"place\":\"6km ESE of Talmage, California\",\"time\":1467115017470,\"updated\":1467133623493,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656251\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656251.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656251\",\"ids\":\",nc72656251,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":4,\"dmin\":0.09375,\"rms\":0.25,\"gap\":199,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 6km ESE of Talmage, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-123.0966667,39.1126667,3.5]},\"id\":\"nc72656251\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.85,\"place\":\"19km NNE of Upper Lake, California\",\"time\":1467114905060,\"updated\":1467155284704,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656241\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656241.geojson\",\"felt\":1,\"cdi\":2,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":125,\"net\":\"nc\",\"code\":\"72656241\",\"ids\":\",nc72656241,\",\"sources\":\",nc,\",\"types\":\",cap,dyfi,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":60,\"dmin\":0.1472,\"rms\":0.13,\"gap\":31,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 2.9 - 19km NNE of Upper Lake, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7928333,39.3195,9.4]},\"id\":\"nc72656241\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.1,\"place\":\"15km SE of North Nenana, Alaska\",\"time\":1467114175000,\"updated\":1467118758263,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13728450\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13728450.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":19,\"net\":\"ak\",\"code\":\"13728450\",\"ids\":\",ak13728450,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.63,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 15km SE of North Nenana, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-148.8797,64.4816,20]},\"id\":\"ak13728450\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.9,\"place\":\"129km SSW of `Ohonua, Tonga\",\"time\":1467112732760,\"updated\":1467117010171,\"tz\":-720,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067gv\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067gv.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":369,\"net\":\"us\",\"code\":\"200067gv\",\"ids\":\",us200067gv,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":6.143,\"rms\":0.66,\"gap\":84,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.9 - 129km SSW of `Ohonua, Tonga\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-175.4626,-22.396,10]},\"id\":\"us200067gv\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0,\"place\":\"22km ESE of Hawthorne, Nevada\",\"time\":1467112683525,\"updated\":1467129180838,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549684\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549684.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549684\",\"ids\":\",nn00549684,\",\"sources\":\",nn,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.04,\"rms\":0.0186,\"gap\":124.51,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.0 - 22km ESE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.387,38.4428,6.9]},\"id\":\"nn00549684\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.5,\"place\":\"69km WSW of Big Lake, Alaska\",\"time\":1467112647000,\"updated\":1467115780062,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13728441\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13728441.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":96,\"net\":\"ak\",\"code\":\"13728441\",\"ids\":\",ak13728441,\",\"sources\":\",ak,\",\"types\":\",dyfi,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.53,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.5 - 69km WSW of Big Lake, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-151.2308,61.376,55.7]},\"id\":\"ak13728441\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.97,\"place\":\"24km N of Yucca Valley, CA\",\"time\":1467112243750,\"updated\":1467128243634,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615120\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615120.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":14,\"net\":\"ci\",\"code\":\"37615120\",\"ids\":\",ci37615120,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":40,\"dmin\":0.07497,\"rms\":0.2,\"gap\":64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 24km N of Yucca Valley, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4645,34.3235,7.93]},\"id\":\"ci37615120\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.64,\"place\":\"15km S of Morton, Washington\",\"time\":1467111571240,\"updated\":1467134024163,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174871\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174871.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"uw\",\"code\":\"61174871\",\"ids\":\",uw61174871,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":10,\"dmin\":0.09308,\"rms\":0.09,\"gap\":232,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 15km S of Morton, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.3151667,46.4195,16.8]},\"id\":\"uw61174871\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.11,\"place\":\"1km W of Loma Linda, CA\",\"time\":1467111179370,\"updated\":1467120691260,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615112\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615112.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"ci\",\"code\":\"37615112\",\"ids\":\",ci37615112,\",\"sources\":\",ci,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":46,\"dmin\":0.09815,\"rms\":0.23,\"gap\":38,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 1km W of Loma Linda, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.276,34.0466667,16.04]},\"id\":\"ci37615112\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.8,\"place\":\"76km N of Tanana, Alaska\",\"time\":1467111053000,\"updated\":1467115696824,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13727656\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13727656.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":50,\"net\":\"ak\",\"code\":\"13727656\",\"ids\":\",ak13727656,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":1.03,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.8 - 76km N of Tanana, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-151.7679,65.8455,5.2]},\"id\":\"ak13727656\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.31,\"place\":\"14km WNW of Anza, CA\",\"time\":1467110876090,\"updated\":1467120660755,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615104\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615104.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"ci\",\"code\":\"37615104\",\"ids\":\",ci37615104,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":19,\"dmin\":0.03851,\"rms\":0.08,\"gap\":82,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.3 - 14km WNW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.815,33.6028333,8.13]},\"id\":\"ci37615104\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.99,\"place\":\"15km N of Warner Springs, CA\",\"time\":1467110490420,\"updated\":1467127835407,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615096\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615096.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":15,\"net\":\"ci\",\"code\":\"37615096\",\"ids\":\",ci37615096,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":56,\"dmin\":0.07704,\"rms\":0.14,\"gap\":58,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 15km N of Warner Springs, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.6285,33.4206667,7.03]},\"id\":\"ci37615096\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.8,\"place\":\"33km SW of Manley Hot Springs, Alaska\",\"time\":1467110428000,\"updated\":1467115696234,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13727655\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13727655.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":10,\"net\":\"ak\",\"code\":\"13727655\",\"ids\":\",ak13727655,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,\",\"nst\":null,\"dmin\":null,\"rms\":0.7,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 33km SW of Manley Hot Springs, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-151.1167,64.7834,16.4]},\"id\":\"ak13727655\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.47,\"place\":\"2km NE of Colton, CA\",\"time\":1467110307300,\"updated\":1467127366736,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615088\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615088.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":3,\"net\":\"ci\",\"code\":\"37615088\",\"ids\":\",ci37615088,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":43,\"dmin\":0.1082,\"rms\":0.18,\"gap\":102,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 2km NE of Colton, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.3025,34.0833333,14.11]},\"id\":\"ci37615088\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.3,\"place\":\"72km WSW of Sand Point, Alaska\",\"time\":1467109729000,\"updated\":1467145850140,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13727654\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13727654.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":81,\"net\":\"ak\",\"code\":\"13727654\",\"ids\":\",ak13727654,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.39,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.3 - 72km WSW of Sand Point, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-161.4604,54.9808,64.3]},\"id\":\"ak13727654\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.2,\"place\":\"12km ENE of Talkeetna, Alaska\",\"time\":1467109018000,\"updated\":1467112420737,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13727653\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13727653.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":22,\"net\":\"ak\",\"code\":\"13727653\",\"ids\":\",ak13727653,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.75,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 12km ENE of Talkeetna, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-149.8783,62.3453,0]},\"id\":\"ak13727653\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.23,\"place\":\"6km S of Idyllwild, CA\",\"time\":1467108463490,\"updated\":1467126264080,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615080\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615080.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"ci\",\"code\":\"37615080\",\"ids\":\",ci37615080,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":22,\"dmin\":0.02427,\"rms\":0.11,\"gap\":101,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.2 - 6km S of Idyllwild, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7093333,33.6871667,16.34]},\"id\":\"ci37615080\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.29,\"place\":\"6km S of Idyllwild, CA\",\"time\":1467108450220,\"updated\":1467126657184,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37142284\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37142284.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"ci\",\"code\":\"37142284\",\"ids\":\",ci37142284,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.02627,\"rms\":0.11,\"gap\":94,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.3 - 6km S of Idyllwild, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7138333,33.6848333,16.03]},\"id\":\"ci37142284\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.83,\"place\":\"6km W of Cobb, California\",\"time\":1467107733000,\"updated\":1467113943567,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656221\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656221.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":11,\"net\":\"nc\",\"code\":\"72656221\",\"ids\":\",nc72656221,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":12,\"dmin\":0.00978,\"rms\":0.03,\"gap\":69,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 6km W of Cobb, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8003311,38.8325005,2.15]},\"id\":\"nc72656221\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.81,\"place\":\"8km NNE of East Foothills, California\",\"time\":1467107208260,\"updated\":1467160086609,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656216\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656216.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":50,\"net\":\"nc\",\"code\":\"72656216\",\"ids\":\",nc72656216,\",\"sources\":\",nc,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,tectonic-summary,\",\"nst\":50,\"dmin\":0.01094,\"rms\":0.04,\"gap\":60,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.8 - 8km NNE of East Foothills, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-121.7873333,37.4538333,5.7]},\"id\":\"nc72656216\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"92km N of Redoubt Volcano, Alaska\",\"time\":1467107040000,\"updated\":1467112419793,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726865\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726865.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":74,\"net\":\"ak\",\"code\":\"13726865\",\"ids\":\",ak13726865,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.52,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 92km N of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.4975,61.3023,0]},\"id\":\"ak13726865\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.6,\"place\":\"9km NE of Johnson Lane, Nevada\",\"time\":1467106577501,\"updated\":1467133620339,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549681\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549681.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"nn\",\"code\":\"00549681\",\"ids\":\",nn00549681,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":15,\"dmin\":0.054,\"rms\":0.0865,\"gap\":122.15,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 9km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6558,39.1199,10.9]},\"id\":\"nn00549681\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.1,\"place\":\"9km NE of Johnson Lane, Nevada\",\"time\":1467106538511,\"updated\":1467128973398,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549680\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549680.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"nn\",\"code\":\"00549680\",\"ids\":\",nn00549680,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":21,\"dmin\":0.055,\"rms\":0.1051,\"gap\":126.13,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 9km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6603,39.1178,11]},\"id\":\"nn00549680\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":5.3,\"place\":\"93km SSE of Esso, Russia\",\"time\":1467106351150,\"updated\":1467107623949,\"tz\":720,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067gb\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067gb.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":432,\"net\":\"us\",\"code\":\"200067gb\",\"ids\":\",us200067gb,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":2.346,\"rms\":0.82,\"gap\":93,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 5.3 - 93km SSE of Esso, Russia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[159.4575,55.2101,10]},\"id\":\"us200067gb\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.53,\"place\":\"7km SE of Big Bear Lake, CA\",\"time\":1467106303350,\"updated\":1467120756810,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615064\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615064.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":36,\"net\":\"ci\",\"code\":\"37615064\",\"ids\":\",ci37615064,\",\"sources\":\",ci,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":55,\"dmin\":0.08145,\"rms\":0.16,\"gap\":64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 7km SE of Big Bear Lake, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8675,34.1936667,1.97]},\"id\":\"ci37615064\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.62,\"place\":\"51km W of West Yellowstone, Montana\",\"time\":1467106261050,\"updated\":1467133749070,\"tz\":-360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/mb80158499\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/mb80158499.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"mb\",\"code\":\"80158499\",\"ids\":\",mb80158499,\",\"sources\":\",mb,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":11,\"dmin\":0.061,\"rms\":0.05,\"gap\":122,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 51km W of West Yellowstone, Montana\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-111.751,44.7325,12.92]},\"id\":\"mb80158499\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.4,\"place\":\"36km ENE of Hawthorne, Nevada\",\"time\":1467106157998,\"updated\":1467128389511,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549679\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549679.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":2,\"net\":\"nn\",\"code\":\"00549679\",\"ids\":\",nn00549679,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":7,\"dmin\":0.171,\"rms\":0.0662,\"gap\":105.38,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.4 - 36km ENE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.2123,38.598,7.6]},\"id\":\"nn00549679\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"55km N of Sutton-Alpine, Alaska\",\"time\":1467106099000,\"updated\":1467109110352,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726851\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726851.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":15,\"net\":\"ak\",\"code\":\"13726851\",\"ids\":\",ak13726851,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.01,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 55km N of Sutton-Alpine, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-148.7966,62.29,32.7]},\"id\":\"ak13726851\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.3,\"place\":\"9km NNE of Johnson Lane, Nevada\",\"time\":1467105903304,\"updated\":1467139096307,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549712\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549712.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549712\",\"ids\":\",nn00549712,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.056,\"rms\":0.1057,\"gap\":124.83,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.3 - 9km NNE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6609,39.1193,10.7]},\"id\":\"nn00549712\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.71,\"place\":\"6km SW of Volcano, Hawaii\",\"time\":1467105457080,\"updated\":1467139281390,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314236\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314236.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":45,\"net\":\"hv\",\"code\":\"61314236\",\"ids\":\",hv61314236,\",\"sources\":\",hv,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":29,\"dmin\":0.002796,\"rms\":0.05,\"gap\":45,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 6km SW of Volcano, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.2795,19.3846667,2.362]},\"id\":\"hv61314236\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.9,\"place\":\"2km SE of The Geysers, California\",\"time\":1467105154510,\"updated\":1467110823405,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656206\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656206.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656206\",\"ids\":\",nc72656206,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":10,\"dmin\":0.01006,\"rms\":0.02,\"gap\":117,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 2km SE of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.739502,38.762001,1.33]},\"id\":\"nc72656206\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"10km NW of Gerlach-Empire, Nevada\",\"time\":1467104844407,\"updated\":1467136261720,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549708\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549708.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":15,\"net\":\"nn\",\"code\":\"00549708\",\"ids\":\",nn00549708,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.058,\"rms\":0.1175,\"gap\":175.66,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 10km NW of Gerlach-Empire, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.4683,40.6494,6.1]},\"id\":\"nn00549708\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.5,\"place\":\"26km SSE of Sary-Tash, Kyrgyzstan\",\"time\":1467104842160,\"updated\":1467118285352,\"tz\":360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067fx\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067fx.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":312,\"net\":\"us\",\"code\":\"200067fx\",\"ids\":\",us200067fx,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.223,\"rms\":1.26,\"gap\":89,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.5 - 26km SSE of Sary-Tash, Kyrgyzstan\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[73.3855,39.5121,34.79]},\"id\":\"us200067fx\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.7,\"place\":\"1km ESE of Ceiba, Puerto Rico\",\"time\":1467104818700,\"updated\":1467116091617,\"tz\":-240,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/pr16180003\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr16180003.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"REVIEWED\",\"tsunami\":0,\"sig\":112,\"net\":\"pr\",\"code\":\"16180003\",\"ids\":\",pr16180003,\",\"sources\":\",pr,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":4,\"dmin\":0.40603851,\"rms\":0.28,\"gap\":194.4,\"magType\":\"Md\",\"type\":\"earthquake\",\"title\":\"M 2.7 - 1km ESE of Ceiba, Puerto Rico\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-66.3377,18.443,109]},\"id\":\"pr16180003\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.6,\"place\":\"19km W of Isangel, Vanuatu\",\"time\":1467104740690,\"updated\":1467108361672,\"tz\":660,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067fz\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067fz.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":326,\"net\":\"us\",\"code\":\"200067fz\",\"ids\":\",us200067fz,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":2.101,\"rms\":0.77,\"gap\":82,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.6 - 19km W of Isangel, Vanuatu\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[169.0781,-19.5723,117.95]},\"id\":\"us200067fz\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.4,\"place\":\"56km ESE of Lovelock, Nevada\",\"time\":1467104610220,\"updated\":1467128198012,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549677\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549677.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":30,\"net\":\"nn\",\"code\":\"00549677\",\"ids\":\",nn00549677,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.677,\"rms\":0.0853,\"gap\":136.72,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.4 - 56km ESE of Lovelock, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.8659,39.9671,2.1]},\"id\":\"nn00549677\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2,\"place\":\"24km E of Fritz Creek, Alaska\",\"time\":1467104582000,\"updated\":1467109113847,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726848\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726848.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":62,\"net\":\"ak\",\"code\":\"13726848\",\"ids\":\",ak13726848,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.55,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.0 - 24km E of Fritz Creek, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.8627,59.7547,61.1]},\"id\":\"ak13726848\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2,\"place\":\"91km N of Redoubt Volcano, Alaska\",\"time\":1467104465000,\"updated\":1467109111936,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726846\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726846.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":62,\"net\":\"ak\",\"code\":\"13726846\",\"ids\":\",ak13726846,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.64,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.0 - 91km N of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.4973,61.2982,0.1]},\"id\":\"ak13726846\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.5,\"place\":\"24km NNW of Dixon Lane-Meadow Creek, California\",\"time\":1467104447002,\"updated\":1467126900144,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549690\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549690.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"nn\",\"code\":\"00549690\",\"ids\":\",nn00549690,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.11,\"rms\":0.2061,\"gap\":125.43,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 24km NNW of Dixon Lane-Meadow Creek, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.4822,37.6,12.5]},\"id\":\"nn00549690\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.14,\"place\":\"38km SSE of Morton, Washington\",\"time\":1467104059210,\"updated\":1467133697150,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174836\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174836.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"uw\",\"code\":\"61174836\",\"ids\":\",uw61174836,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":10,\"dmin\":0.07665,\"rms\":0.15,\"gap\":217,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.1 - 38km SSE of Morton, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.0663333,46.2461667,10.54]},\"id\":\"uw61174836\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.92,\"place\":\"21km SSE of Mammoth Lakes, California\",\"time\":1467103555900,\"updated\":1467131703411,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656196\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656196.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":13,\"net\":\"nc\",\"code\":\"72656196\",\"ids\":\",nc72656196,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":27,\"dmin\":0.09949,\"rms\":0.03,\"gap\":116,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 21km SSE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8465,37.4816667,6.48]},\"id\":\"nc72656196\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.08,\"place\":\"9km NNW of Advance, Missouri\",\"time\":1467103110290,\"updated\":1467118262692,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nm60122982\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nm60122982.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":67,\"net\":\"nm\",\"code\":\"60122982\",\"ids\":\",nm60122982,\",\"sources\":\",nm,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":27,\"dmin\":0.2698,\"rms\":0.23,\"gap\":184,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 2.1 - 9km NNW of Advance, Missouri\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-89.9606667,37.177,3.45]},\"id\":\"nm60122982\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.88,\"place\":\"9km N of Cabazon, CA\",\"time\":1467102978010,\"updated\":1467120693511,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615040\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615040.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"ci\",\"code\":\"37615040\",\"ids\":\",ci37615040,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":30,\"dmin\":0.04774,\"rms\":0.18,\"gap\":82,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 9km N of Cabazon, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7741667,33.9963333,18.22]},\"id\":\"ci37615040\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.3,\"place\":\"10km NE of Aguanga, CA\",\"time\":1467102932280,\"updated\":1467120698574,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615032\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615032.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"ci\",\"code\":\"37615032\",\"ids\":\",ci37615032,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":18,\"dmin\":0.07757,\"rms\":0.16,\"gap\":46,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.3 - 10km NE of Aguanga, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7881667,33.5003333,6.42]},\"id\":\"ci37615032\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"54km SSW of Redoubt Volcano, Alaska\",\"time\":1467102877000,\"updated\":1467105852675,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726841\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726841.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":74,\"net\":\"ak\",\"code\":\"13726841\",\"ids\":\",ak13726841,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.7,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 54km SSW of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-153.0602,60.0254,110.3]},\"id\":\"ak13726841\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.87,\"place\":\"21km SSE of Mammoth Lakes, California\",\"time\":1467102856590,\"updated\":1467132243431,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656191\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656191.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656191\",\"ids\":\",nc72656191,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":19,\"dmin\":0.1,\"rms\":0.03,\"gap\":116,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 21km SSE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8471667,37.4813333,6.08]},\"id\":\"nc72656191\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.7,\"place\":\"54km NNE of Fort Irwin, California\",\"time\":1467102292571,\"updated\":1467136456742,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549709\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549709.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"nn\",\"code\":\"00549709\",\"ids\":\",nn00549709,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":4,\"dmin\":0.389,\"rms\":0.1619,\"gap\":294.35,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 54km NNE of Fort Irwin, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4858,35.7306,0]},\"id\":\"nn00549709\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.6,\"place\":\"13km ENE of Talkeetna, Alaska\",\"time\":1467102292000,\"updated\":1467105850361,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726837\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726837.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":39,\"net\":\"ak\",\"code\":\"13726837\",\"ids\":\",ak13726837,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.62,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 13km ENE of Talkeetna, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-149.8788,62.3719,10.8]},\"id\":\"ak13726837\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.1,\"place\":\"35km SSE of Redoubt Volcano, Alaska\",\"time\":1467102114000,\"updated\":1467105855125,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726830\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726830.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":68,\"net\":\"ak\",\"code\":\"13726830\",\"ids\":\",ak13726830,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.5,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.1 - 35km SSE of Redoubt Volcano, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-152.5483,60.1834,99.9]},\"id\":\"ak13726830\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.5,\"place\":\"73km ESE of Whittier, Alaska\",\"time\":1467102112000,\"updated\":1467105857296,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726832\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726832.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":35,\"net\":\"ak\",\"code\":\"13726832\",\"ids\":\",ak13726832,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.5,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 73km ESE of Whittier, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.4131,60.5567,20]},\"id\":\"ak13726832\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0,\"place\":\"20km SSE of Mammoth Lakes, California\",\"time\":1467102020684,\"updated\":1467136078615,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549707\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549707.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549707\",\"ids\":\",nn00549707,\",\"sources\":\",nn,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.105,\"rms\":0.1602,\"gap\":219.84,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.0 - 20km SSE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8554,37.4863,4]},\"id\":\"nn00549707\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.2,\"place\":\"33km ESE of Hawthorne, Nevada\",\"time\":1467101981176,\"updated\":1467135876216,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549705\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549705.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549705\",\"ids\":\",nn00549705,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.034,\"rms\":0.0696,\"gap\":169.09,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.2 - 33km ESE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.2847,38.3828,8.5]},\"id\":\"nn00549705\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"6km SW of Volcano, Hawaii\",\"time\":1467101939940,\"updated\":1467141225980,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314206\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314206.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":74,\"net\":\"hv\",\"code\":\"61314206\",\"ids\":\",hv61314206,\",\"sources\":\",hv,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":35,\"dmin\":0.00379,\"rms\":0.08,\"gap\":45,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 6km SW of Volcano, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.2798333,19.3831667,2.492]},\"id\":\"hv61314206\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.09,\"place\":\"8km WNW of The Geysers, California\",\"time\":1467101342950,\"updated\":1467106204170,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656186\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656186.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":18,\"net\":\"nc\",\"code\":\"72656186\",\"ids\":\",nc72656186,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":14,\"dmin\":0.006701,\"rms\":0.04,\"gap\":83,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 8km WNW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8428345,38.8203316,1.81]},\"id\":\"nc72656186\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.5,\"place\":\"12km S of Sparks, Nevada\",\"time\":1467100407940,\"updated\":1467126519385,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549673\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549673.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":35,\"net\":\"nn\",\"code\":\"00549673\",\"ids\":\",nn00549673,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":30,\"dmin\":0.037,\"rms\":0.1623,\"gap\":51.47,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 12km S of Sparks, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.7385,39.4203,10.1]},\"id\":\"nn00549673\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.58,\"place\":\"23km SW of Coalinga, California\",\"time\":1467099927370,\"updated\":1467154983691,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656176\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656176.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":38,\"net\":\"nc\",\"code\":\"72656176\",\"ids\":\",nc72656176,\",\"sources\":\",nc,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,tectonic-summary,\",\"nst\":57,\"dmin\":0.03754,\"rms\":0.05,\"gap\":78,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.6 - 23km SW of Coalinga, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-120.5811667,36.0196667,3.78]},\"id\":\"nc72656176\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.52,\"place\":\"37km WNW of West Yellowstone, Montana\",\"time\":1467099788370,\"updated\":1467133406840,\"tz\":-360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/mb80158474\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/mb80158474.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":36,\"net\":\"mb\",\"code\":\"80158474\",\"ids\":\",mb80158474,\",\"sources\":\",mb,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":29,\"dmin\":0.087,\"rms\":0.18,\"gap\":40,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 37km WNW of West Yellowstone, Montana\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-111.5431667,44.7981667,13.39]},\"id\":\"mb80158474\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.54,\"place\":\"22km SSW of La Quinta, CA\",\"time\":1467099132770,\"updated\":1467120712432,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615024\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615024.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615024\",\"ids\":\",ci37615024,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":15,\"dmin\":0.04436,\"rms\":0.2,\"gap\":124,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 22km SSW of La Quinta, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4096667,33.481,10]},\"id\":\"ci37615024\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.5,\"place\":\"9km NE of Johnson Lane, Nevada\",\"time\":1467098841538,\"updated\":1467137973476,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549719\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549719.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"nn\",\"code\":\"00549719\",\"ids\":\",nn00549719,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.056,\"rms\":0.151,\"gap\":126.23,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 9km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6613,39.118,9.7]},\"id\":\"nn00549719\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.71,\"place\":\"10km E of Mammoth Lakes, California\",\"time\":1467098799770,\"updated\":1467136202644,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656171\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656171.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"nc\",\"code\":\"72656171\",\"ids\":\",nc72656171,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":11,\"dmin\":0.02594,\"rms\":0.02,\"gap\":93,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 10km E of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8538333,37.6596667,2.09]},\"id\":\"nc72656171\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.24,\"place\":\"26km E of Honaunau-Napoopoo, Hawaii\",\"time\":1467098610910,\"updated\":1467142048490,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314186\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314186.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":24,\"net\":\"hv\",\"code\":\"61314186\",\"ids\":\",hv61314186,\",\"sources\":\",hv,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":13,\"dmin\":0.0237,\"rms\":0.14,\"gap\":96,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 26km E of Honaunau-Napoopoo, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.6123333,19.4216667,2.572]},\"id\":\"hv61314186\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.87,\"place\":\"10km E of Mammoth Lakes, California\",\"time\":1467098318970,\"updated\":1467131529403,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656166\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656166.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656166\",\"ids\":\",nc72656166,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":19,\"dmin\":0.02312,\"rms\":0.06,\"gap\":88,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 10km E of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8533333,37.6565,2.87]},\"id\":\"nc72656166\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.2,\"place\":\"24km ESE of Hawthorne, Nevada\",\"time\":1467097891630,\"updated\":1467137038125,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549715\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549715.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549715\",\"ids\":\",nn00549715,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.027,\"rms\":0.0615,\"gap\":128.26,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.2 - 24km ESE of Hawthorne, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.3677,38.4465,7.4]},\"id\":\"nn00549715\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.1,\"place\":\"56km NW of Aguadilla, Puerto Rico\",\"time\":1467097764200,\"updated\":1467101393477,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/pr16180001\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr16180001.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"REVIEWED\",\"tsunami\":0,\"sig\":148,\"net\":\"pr\",\"code\":\"16180001\",\"ids\":\",pr16180001,\",\"sources\":\",pr,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":16,\"dmin\":0.36381769,\"rms\":0.49,\"gap\":298.8,\"magType\":\"Md\",\"type\":\"earthquake\",\"title\":\"M 3.1 - 56km NW of Aguadilla, Puerto Rico\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-67.577,18.7392,11]},\"id\":\"pr16180001\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.4,\"place\":\"17km NW of Beatty, Nevada\",\"time\":1467097755375,\"updated\":1467137032234,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549713\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549713.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":2,\"net\":\"nn\",\"code\":\"00549713\",\"ids\":\",nn00549713,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":5,\"dmin\":0.088,\"rms\":0.1274,\"gap\":150.28,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.4 - 17km NW of Beatty, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.926,36.9988,5.2]},\"id\":\"nn00549713\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.8,\"place\":\"17km SE of Gardnerville Ranchos, Nevada\",\"time\":1467097071189,\"updated\":1467136647865,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549710\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549710.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":10,\"net\":\"nn\",\"code\":\"00549710\",\"ids\":\",nn00549710,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":7,\"dmin\":0.31,\"rms\":0.1366,\"gap\":196.75,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 17km SE of Gardnerville Ranchos, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.5992,38.7793,13.9]},\"id\":\"nn00549710\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.8,\"place\":\"18km SE of Gardnerville Ranchos, Nevada\",\"time\":1467097054586,\"updated\":1467136255567,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549706\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549706.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":10,\"net\":\"nn\",\"code\":\"00549706\",\"ids\":\",nn00549706,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.324,\"rms\":0.1004,\"gap\":188.93,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.8 - 18km SE of Gardnerville Ranchos, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6024,38.7657,13.7]},\"id\":\"nn00549706\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.5,\"place\":\"13km NW of Virginia City, Nevada\",\"time\":1467096890959,\"updated\":1467135319151,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549700\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549700.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"nn\",\"code\":\"00549700\",\"ids\":\",nn00549700,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.003,\"rms\":0.1841,\"gap\":93.7,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 13km NW of Virginia City, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.7656,39.3874,5.3]},\"id\":\"nn00549700\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.23,\"place\":\"10km E of Mammoth Lakes, California\",\"time\":1467096538270,\"updated\":1467130807374,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656161\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656161.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nc\",\"code\":\"72656161\",\"ids\":\",nc72656161,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":7,\"dmin\":0.03203,\"rms\":0.03,\"gap\":100,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.2 - 10km E of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8515,37.6598333,1.59]},\"id\":\"nc72656161\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.54,\"place\":\"6km N of Banning, CA\",\"time\":1467096354880,\"updated\":1467125915967,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615016\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615016.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37615016\",\"ids\":\",ci37615016,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":35,\"dmin\":0.08073,\"rms\":0.14,\"gap\":53,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 6km N of Banning, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8798333,33.9808333,9.63]},\"id\":\"ci37615016\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.3,\"place\":\"17km SE of Gardnerville Ranchos, Nevada\",\"time\":1467096199376,\"updated\":1467125369605,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549669\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549669.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":26,\"net\":\"nn\",\"code\":\"00549669\",\"ids\":\",nn00549669,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":15,\"dmin\":0.314,\"rms\":0.08,\"gap\":76.91,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.3 - 17km SE of Gardnerville Ranchos, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.5975,38.7752,12.6]},\"id\":\"nn00549669\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.37,\"place\":\"4km SE of The Geysers, California\",\"time\":1467095871930,\"updated\":1467153302616,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656156\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656156.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":29,\"net\":\"nc\",\"code\":\"72656156\",\"ids\":\",nc72656156,\",\"sources\":\",nc,\",\"types\":\",focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":35,\"dmin\":0.01064,\"rms\":0.11,\"gap\":47,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 1.4 - 4km SE of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7211667,38.7513333,-0.73]},\"id\":\"nc72656156\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1,\"place\":\"81km E of Cantwell, Alaska\",\"time\":1467095805000,\"updated\":1467099320841,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726829\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726829.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":15,\"net\":\"ak\",\"code\":\"13726829\",\"ids\":\",ak13726829,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.24,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 81km E of Cantwell, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.32,63.4077,7.2]},\"id\":\"ak13726829\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.5,\"place\":\"17km SW of Willow, Alaska\",\"time\":1467095202000,\"updated\":1467099319729,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726826\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726826.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":35,\"net\":\"ak\",\"code\":\"13726826\",\"ids\":\",ak13726826,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.52,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.5 - 17km SW of Willow, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-150.2367,61.6204,41.3]},\"id\":\"ak13726826\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.91,\"place\":\"6km SW of Volcano, Hawaii\",\"time\":1467094743840,\"updated\":1467142903800,\"tz\":-600,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/hv61314166\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/hv61314166.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":56,\"net\":\"hv\",\"code\":\"61314166\",\"ids\":\",hv61314166,\",\"sources\":\",hv,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":27,\"dmin\":0.003934,\"rms\":0.08,\"gap\":45,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.9 - 6km SW of Volcano, Hawaii\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-155.2808333,19.3826667,2.382]},\"id\":\"hv61314166\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.9,\"place\":\"2km E of The Geysers, California\",\"time\":1467094519410,\"updated\":1467159542565,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656151\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656151.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656151\",\"ids\":\",nc72656151,\",\"sources\":\",nc,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":32,\"dmin\":0.005948,\"rms\":0.07,\"gap\":59,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 2km E of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.724,38.776,1.81]},\"id\":\"nc72656151\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.2,\"place\":\"9km NE of Johnson Lane, Nevada\",\"time\":1467093963762,\"updated\":1467134375085,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549698\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549698.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nn\",\"code\":\"00549698\",\"ids\":\",nn00549698,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":6,\"dmin\":0.049,\"rms\":0.0817,\"gap\":123.78,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.2 - 9km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6517,39.1166,10.7]},\"id\":\"nn00549698\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.69,\"place\":\"21km ESE of Anza, CA\",\"time\":1467093758230,\"updated\":1467120763540,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37615008\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37615008.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":7,\"net\":\"ci\",\"code\":\"37615008\",\"ids\":\",ci37615008,\",\"sources\":\",ci,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":29,\"dmin\":0.0693,\"rms\":0.2,\"gap\":106,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 21km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.47,33.4646667,12.43]},\"id\":\"ci37615008\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":-0.1,\"place\":\"9km NE of Johnson Lane, Nevada\",\"time\":1467093631722,\"updated\":1467134184323,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549697\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549697.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"nn\",\"code\":\"00549697\",\"ids\":\",nn00549697,\",\"sources\":\",nn,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":6,\"dmin\":0.05,\"rms\":0.0937,\"gap\":125.04,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M -0.1 - 9km NE of Johnson Lane, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-119.6537,39.1163,10.3]},\"id\":\"nn00549697\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.3,\"place\":\"23km NNE of Mendoza, Argentina\",\"time\":1467093413150,\"updated\":1467148668826,\"tz\":-180,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067f0\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067f0.geojson\",\"felt\":2,\"cdi\":2,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":285,\"net\":\"us\",\"code\":\"200067f0\",\"ids\":\",us200067f0,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,impact-text,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.136,\"rms\":0.72,\"gap\":54,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.3 - 23km NNE of Mendoza, Argentina\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-68.7759,-32.6827,55.09]},\"id\":\"us200067f0\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.2,\"place\":\"96km NNW of Road Town, British Virgin Islands\",\"time\":1467092680600,\"updated\":1467102790415,\"tz\":-240,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/pr16180002\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr16180002.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"REVIEWED\",\"tsunami\":0,\"sig\":74,\"net\":\"pr\",\"code\":\"16180002\",\"ids\":\",pr16180002,\",\"sources\":\",pr,\",\"types\":\",cap,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":3,\"dmin\":0.90280686,\"rms\":0.28,\"gap\":302.4,\"magType\":\"Md\",\"type\":\"earthquake\",\"title\":\"M 2.2 - 96km NNW of Road Town, British Virgin Islands\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-64.9605,19.222,24]},\"id\":\"pr16180002\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.91,\"place\":\"21km SSE of Mammoth Lakes, California\",\"time\":1467092263330,\"updated\":1467129365311,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656146\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656146.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":13,\"net\":\"nc\",\"code\":\"72656146\",\"ids\":\",nc72656146,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":23,\"dmin\":0.1007,\"rms\":0.06,\"gap\":116,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 21km SSE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8481667,37.4833333,5.61]},\"id\":\"nc72656146\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.7,\"place\":\"70km E of Cantwell, Alaska\",\"time\":1467091767000,\"updated\":1467096467166,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726822\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726822.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":44,\"net\":\"ak\",\"code\":\"13726822\",\"ids\":\",ak13726822,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.6,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 70km E of Cantwell, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.5428,63.4338,2.9]},\"id\":\"ak13726822\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.14,\"place\":\"31km WNW of West Yellowstone, Montana\",\"time\":1467088724050,\"updated\":1467132616290,\"tz\":-360,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/mb80158464\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/mb80158464.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":0,\"net\":\"mb\",\"code\":\"80158464\",\"ids\":\",mb80158464,\",\"sources\":\",mb,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":7,\"dmin\":0.055,\"rms\":0.18,\"gap\":140,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.1 - 31km WNW of West Yellowstone, Montana\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-111.4695,44.783,7.85]},\"id\":\"mb80158464\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.9,\"place\":\"62km S of Unalaska, Alaska\",\"time\":1467087893000,\"updated\":1467145849625,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13726820\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13726820.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":56,\"net\":\"ak\",\"code\":\"13726820\",\"ids\":\",ak13726820,\",\"sources\":\",ak,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.36,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.9 - 62km S of Unalaska, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-166.5071,53.309,25.5]},\"id\":\"ak13726820\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.48,\"place\":\"18km ESE of Anza, CA\",\"time\":1467086138290,\"updated\":1467125236021,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614856\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614856.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37614856\",\"ids\":\",ci37614856,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":29,\"dmin\":0.07776,\"rms\":0.18,\"gap\":94,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 18km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.5023333,33.4791667,12.97]},\"id\":\"ci37614856\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.87,\"place\":\"5km W of Cobb, California\",\"time\":1467085880380,\"updated\":1467086823306,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656141\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656141.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":12,\"net\":\"nc\",\"code\":\"72656141\",\"ids\":\",nc72656141,\",\"sources\":\",nc,\",\"types\":\",general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":7,\"dmin\":0.005383,\"rms\":0.03,\"gap\":88,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 5km W of Cobb, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.7843323,38.8178329,1.73]},\"id\":\"nc72656141\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.56,\"place\":\"3km NW of Belfair, Washington\",\"time\":1467085792590,\"updated\":1467133293270,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174661\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174661.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":5,\"net\":\"uw\",\"code\":\"61174661\",\"ids\":\",uw61174661,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":4,\"dmin\":0.09005,\"rms\":0.03,\"gap\":291,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 3km NW of Belfair, Washington\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8605,47.4725,22.05]},\"id\":\"uw61174661\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":5.2,\"place\":\"36km SW of Kaliandak, Indonesia\",\"time\":1467084770060,\"updated\":1467085798374,\"tz\":420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067ej\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067ej.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":1,\"sig\":416,\"net\":\"us\",\"code\":\"200067ej\",\"ids\":\",us200067ej,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":2.836,\"rms\":1.17,\"gap\":68,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 5.2 - 36km SW of Kaliandak, Indonesia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[105.3268,-5.9412,46.74]},\"id\":\"us200067ej\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.5,\"place\":\"15km N of Aratoca, Colombia\",\"time\":1467084550110,\"updated\":1467085727896,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067eh\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067eh.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":312,\"net\":\"us\",\"code\":\"200067eh\",\"ids\":\",us200067eh,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.934,\"rms\":0.97,\"gap\":30,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.5 - 15km N of Aratoca, Colombia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-73.0234,6.8332,147.2]},\"id\":\"us200067eh\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":3.6,\"place\":\"11km S of Alva, Oklahoma\",\"time\":1467084309330,\"updated\":1467133935040,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067ec\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067ec.geojson\",\"felt\":1,\"cdi\":2,\"mmi\":3.44,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":200,\"net\":\"us\",\"code\":\"200067ec\",\"ids\":\",us200067ec,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,general-link,geoserve,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,\",\"nst\":null,\"dmin\":0.038,\"rms\":0.68,\"gap\":20,\"magType\":\"mb_lg\",\"type\":\"earthquake\",\"title\":\"M 3.6 - 11km S of Alva, Oklahoma\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-98.6631,36.6992,5]},\"id\":\"us200067ec\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.73,\"place\":\"21km SSE of Mammoth Lakes, California\",\"time\":1467084263250,\"updated\":1467132124433,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656131\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656131.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"nc\",\"code\":\"72656131\",\"ids\":\",nc72656131,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":18,\"dmin\":0.1012,\"rms\":0.04,\"gap\":151,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 21km SSE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.8486667,37.4813333,5.96]},\"id\":\"nc72656131\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.57,\"place\":\"11km SW of Anza, CA\",\"time\":1467083956550,\"updated\":1467120738715,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614840\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614840.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":5,\"net\":\"ci\",\"code\":\"37614840\",\"ids\":\",ci37614840,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.07466,\"rms\":0.2,\"gap\":54,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 11km SW of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7628333,33.4936667,7.8]},\"id\":\"ci37614840\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":4.9,\"place\":\"74km NE of Petropavlovsk-Kamchatskiy, Russia\",\"time\":1467083836530,\"updated\":1467084965899,\"tz\":720,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067ea\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067ea.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":369,\"net\":\"us\",\"code\":\"200067ea\",\"ids\":\",us200067ea,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":1.13,\"rms\":0.78,\"gap\":103,\"magType\":\"mb\",\"type\":\"earthquake\",\"title\":\"M 4.9 - 74km NE of Petropavlovsk-Kamchatskiy, Russia\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[159.4608,53.5089,89.57]},\"id\":\"us200067ea\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.11,\"place\":\"9km NNW of Borrego Springs, CA\",\"time\":1467083170100,\"updated\":1467120769750,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614832\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614832.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":19,\"net\":\"ci\",\"code\":\"37614832\",\"ids\":\",ci37614832,\",\"sources\":\",ci,\",\"types\":\",cap,focal-mechanism,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":40,\"dmin\":0.068,\"rms\":0.2,\"gap\":70,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.1 - 9km NNW of Borrego Springs, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.3951667,33.3338333,2.88]},\"id\":\"ci37614832\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.1,\"place\":\"55km N of Warm Springs, Nevada\",\"time\":1467082972457,\"updated\":1467124789125,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549653\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549653.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":68,\"net\":\"nn\",\"code\":\"00549653\",\"ids\":\",nn00549653,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":9,\"dmin\":0.581,\"rms\":0.1899,\"gap\":137.19,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 2.1 - 55km N of Warm Springs, Nevada\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.463,38.6814,0]},\"id\":\"nn00549653\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.26,\"place\":\"3km WSW of Brawley, CA\",\"time\":1467082768260,\"updated\":1467124888000,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614824\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614824.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":24,\"net\":\"ci\",\"code\":\"37614824\",\"ids\":\",ci37614824,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":21,\"dmin\":0.06569,\"rms\":0.23,\"gap\":71,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.3 - 3km WSW of Brawley, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-115.5616667,32.9673333,8.47]},\"id\":\"ci37614824\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.04,\"place\":\"8km S of Ramona, CA\",\"time\":1467082576790,\"updated\":1467120753985,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614816\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614816.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":17,\"net\":\"ci\",\"code\":\"37614816\",\"ids\":\",ci37614816,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":17,\"dmin\":0.06376,\"rms\":0.21,\"gap\":54,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.0 - 8km S of Ramona, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.8756667,32.9676667,11.87]},\"id\":\"ci37614816\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":2.8,\"place\":\"16km ENE of Mooreland, Oklahoma\",\"time\":1467082211990,\"updated\":1467082872259,\"tz\":-300,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/us200067dy\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us200067dy.geojson\",\"felt\":0,\"cdi\":1,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":121,\"net\":\"us\",\"code\":\"200067dy\",\"ids\":\",us200067dy,\",\"sources\":\",us,\",\"types\":\",cap,dyfi,general-link,geoserve,nearby-cities,origin,phase-data,tectonic-summary,\",\"nst\":null,\"dmin\":0.157,\"rms\":0.46,\"gap\":48,\"magType\":\"mb_lg\",\"type\":\"earthquake\",\"title\":\"M 2.8 - 16km ENE of Mooreland, Oklahoma\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-99.0436,36.5056,5.47]},\"id\":\"us200067dy\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.7,\"place\":\"1km N of Cabazon, CA\",\"time\":1467081189310,\"updated\":1467124540008,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614800\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614800.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"ci\",\"code\":\"37614800\",\"ids\":\",ci37614800,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,tectonic-summary,\",\"nst\":33,\"dmin\":0.09082,\"rms\":0.14,\"gap\":82,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 1km N of Cabazon, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7883333,33.9243333,16.83]},\"id\":\"ci37614800\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.69,\"place\":\"2km SW of Mira Loma, CA\",\"time\":1467080838260,\"updated\":1467124056329,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614792\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614792.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":7,\"net\":\"ci\",\"code\":\"37614792\",\"ids\":\",ci37614792,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":17,\"dmin\":0.03418,\"rms\":0.08,\"gap\":64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 2km SW of Mira Loma, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.5345,33.9788333,2.96]},\"id\":\"ci37614792\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.7,\"place\":\"9km NNE of Coso Junction, CA\",\"time\":1467080282230,\"updated\":1467135310514,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614784\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614784.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":8,\"net\":\"ci\",\"code\":\"37614784\",\"ids\":\",ci37614784,nn00549699,\",\"sources\":\",ci,nn,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":17,\"dmin\":0.1043,\"rms\":0.2,\"gap\":92,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.7 - 9km NNE of Coso Junction, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-117.8966667,36.1121667,2.3]},\"id\":\"ci37614784\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.8,\"place\":\"44km NNW of Valdez, Alaska\",\"time\":1467079367000,\"updated\":1467083930242,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13724484\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13724484.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":50,\"net\":\"ak\",\"code\":\"13724484\",\"ids\":\",ak13724484,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.73,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.8 - 44km NNW of Valdez, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-146.6441,61.5052,29.6]},\"id\":\"ak13724484\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.38,\"place\":\"20km ESE of Anza, CA\",\"time\":1467078079810,\"updated\":1467123769361,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614776\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614776.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":2,\"net\":\"ci\",\"code\":\"37614776\",\"ids\":\",ci37614776,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":14,\"dmin\":0.0684,\"rms\":0.11,\"gap\":124,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.4 - 20km ESE of Anza, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.4803333,33.4723333,10.65]},\"id\":\"ci37614776\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.18,\"place\":\"2km SSE of Gold Beach, Oregon\",\"time\":1467077959850,\"updated\":1467131737360,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/uw61174611\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/uw61174611.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":21,\"net\":\"uw\",\"code\":\"61174611\",\"ids\":\",uw61174611,\",\"sources\":\",uw,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":8,\"dmin\":0.05181,\"rms\":0.21,\"gap\":215,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.2 - 2km SSE of Gold Beach, Oregon\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-124.412,42.3901667,15.27]},\"id\":\"uw61174611\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.51,\"place\":\"6km SSW of Idyllwild, CA\",\"time\":1467077410790,\"updated\":1467120768145,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ci37614768\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37614768.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":4,\"net\":\"ci\",\"code\":\"37614768\",\"ids\":\",ci37614768,\",\"sources\":\",ci,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":18,\"dmin\":0.03175,\"rms\":0.09,\"gap\":64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.5 - 6km SSW of Idyllwild, CA\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-116.7343333,33.6841667,15.82]},\"id\":\"ci37614768\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.9,\"place\":\"65km NNE of Dixon Lane-Meadow Creek, California\",\"time\":1467076195652,\"updated\":1467133411444,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nn00549695\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00549695.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":12,\"net\":\"nn\",\"code\":\"00549695\",\"ids\":\",nn00549695,\",\"sources\":\",nn,\",\"types\":\",cap,general-link,general-link,geoserve,nearby-cities,origin,phase-data,\",\"nst\":10,\"dmin\":0.316,\"rms\":0.0699,\"gap\":148.64,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 0.9 - 65km NNE of Dixon Lane-Meadow Creek, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.166,37.9462,11.1]},\"id\":\"nn00549695\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":1.7,\"place\":\"63km ENE of Whittier, Alaska\",\"time\":1467074879000,\"updated\":1467078356412,\"tz\":-480,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/ak13724471\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak13724471.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"automatic\",\"tsunami\":0,\"sig\":44,\"net\":\"ak\",\"code\":\"13724471\",\"ids\":\",ak13724471,\",\"sources\":\",ak,\",\"types\":\",general-link,geoserve,nearby-cities,origin,tectonic-summary,\",\"nst\":null,\"dmin\":null,\"rms\":0.85,\"gap\":null,\"magType\":\"ml\",\"type\":\"earthquake\",\"title\":\"M 1.7 - 63km ENE of Whittier, Alaska\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-147.5623,60.9287,22.1]},\"id\":\"ak13724471\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.28,\"place\":\"5km NW of The Geysers, California\",\"time\":1467074794490,\"updated\":1467157504627,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656121\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656121.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":1,\"net\":\"nc\",\"code\":\"72656121\",\"ids\":\",nc72656121,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":34,\"dmin\":0.01159,\"rms\":0.06,\"gap\":88,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.3 - 5km NW of The Geysers, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.8095,38.8113333,3.92]},\"id\":\"nc72656121\"},\n    {\"type\":\"Feature\",\"properties\":{\"mag\":0.61,\"place\":\"10km SE of Mammoth Lakes, California\",\"time\":1467074486140,\"updated\":1467077463801,\"tz\":-420,\"url\":\"http://earthquake.usgs.gov/earthquakes/eventpage/nc72656116\",\"detail\":\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc72656116.geojson\",\"felt\":null,\"cdi\":null,\"mmi\":null,\"alert\":null,\"status\":\"reviewed\",\"tsunami\":0,\"sig\":6,\"net\":\"nc\",\"code\":\"72656116\",\"ids\":\",nc72656116,\",\"sources\":\",nc,\",\"types\":\",cap,general-link,geoserve,nearby-cities,origin,phase-data,scitech-link,\",\"nst\":10,\"dmin\":0.0353,\"rms\":0.02,\"gap\":191,\"magType\":\"md\",\"type\":\"earthquake\",\"title\":\"M 0.6 - 10km SE of Mammoth Lakes, California\"},\"geometry\":{\"type\":\"Point\",\"coordinates\":[-118.88,37.5863333,2.95]},\"id\":\"nc72656116\"}],\"bbox\":[-175.8052,-32.6827,-1.23,169.0781,68.1634,184.15]}\n  "
  },
  {
    "path": "react-native-hms-map/example/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppRegistry } from \"react-native\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-map/example/mapStyle.json",
    "content": "[\n  {\n    \"mapFeature\": \"all\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#25292B\"\n    }\n  },\n  {\n    \"mapFeature\": \"all\",\n    \"options\": \"labels.text.stroke\",\n    \"paint\": {\n      \"color\": \"#25292B\"\n    }\n  },\n  {\n    \"mapFeature\": \"all\",\n    \"options\": \"labels.icon\",\n    \"paint\": {\n      \"icon-type\": \"night\"\n    }\n  },\n  {\n    \"mapFeature\": \"administrative\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#7C7770\"\n    }\n  },\n  {\n    \"mapFeature\": \"administrative.country\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#9D9D9D\"\n    }\n  },\n  {\n    \"mapFeature\": \"administrative.country\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#F9EBDA\"\n    }\n  },\n  {\n    \"mapFeature\": \"administrative.province\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#7D7D7D\"\n    }\n  },\n  {\n    \"mapFeature\": \"administrative.capital\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#F9EBDA\"\n    }\n  },\n  {\n    \"mapFeature\": \"landcover.parkland\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#283631\"\n    }\n  },\n  {\n    \"mapFeature\": \"landcover.hospital\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#382B2B\"\n    }\n  },\n  {\n    \"mapFeature\": \"landcover\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#7C7770\"\n    }\n  },\n  {\n    \"mapFeature\": \"landcover.parkland\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#8BAA7F\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.shopping\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#907935\"\n    }\n  },\n  {\n    \"mapFeature\": \"landcover.human-made.building\",\n    \"visibility\": false,\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#000000\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.tourism\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#9E7E56\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.beauty\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#A37C90\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.leisure\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#986D8D\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.eating&drinking\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#AB7346\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.lodging\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#8667A2\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.health-care\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#B6777C\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.public-service\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#737C8F\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.business\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#6B729D\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.automotive\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#6B729D\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.sports.outdoor\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#649464\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.sports.other\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#478D90\"\n    }\n  },\n  {\n    \"mapFeature\": \"poi.natural\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#649464\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.highway\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#E3CAA2\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.national\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#C6B293\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.province\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#A7ADB0\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.city-arterial\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#808689\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.minor-road\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#808689\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.sidewalk\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#808689\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.highway.country\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#927C5B\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.highway.city\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#8A7A60\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.national\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#5D5240\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.province\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#3B4042\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.city-arterial\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#343A3D\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.minor-road\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#343A3D\"\n    }\n  },\n  {\n    \"mapFeature\": \"road.sidewalk\",\n    \"options\": \"geometry.fill\",\n    \"paint\": {\n      \"color\": \"#343A3D\"\n    }\n  },\n  {\n    \"mapFeature\": \"transit\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#6286AD\"\n    }\n  },\n  {\n    \"mapFeature\": \"transit.railway\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#5B2E57\"\n    }\n  },\n  {\n    \"mapFeature\": \"transit.ferry-line\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#364D67\"\n    }\n  },\n  {\n    \"mapFeature\": \"transit.airport\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#2C3235\"\n    }\n  },\n  {\n    \"mapFeature\": \"water\",\n    \"options\": \"geometry\",\n    \"paint\": {\n      \"color\": \"#243850\"\n    }\n  },\n  {\n    \"mapFeature\": \"water\",\n    \"options\": \"labels.text.fill\",\n    \"paint\": {\n      \"color\": \"#4C6481\"\n    }\n  }\n]"
  },
  {
    "path": "react-native-hms-map/example/metro.config.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n\n"
  },
  {
    "path": "react-native-hms-map/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-map-demo\",\n  \"version\": \"6.11.2-304\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\",\n    \"devt\": \"react-devtools\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-map\": \"6.11.2-304\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  },\n  \"files\": [\n    \"android\",\n    \"app.json\",\n    \"App.js\",\n    \"index.js\",\n    \"LICENSE\",\n    \"mapStyle.json\",\n    \"metro.config.js\",\n    \"package.json\",\n    \"README.md\"\n  ]\n}"
  },
  {
    "path": "react-native-hms-map/example/screens/AdvancedMap.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport {\n  SafeAreaView,\n  View,\n  Text,\n  Image,\n  TouchableHighlight,\n  Button,\n  ScrollView,\n  ToastAndroid,\n} from \"react-native\";\n\nimport HMSMap, {\n  HMSMarker,\n  HMSCircle,\n  HMSPolygon,\n  HMSPolyline,\n  HMSGroundOverlay,\n  PatternItemTypes,\n  JointTypes,\n  CapTypes,\n} from \"@hmscore/react-native-hms-map\";\n\nimport { styles } from \"../styles/styles\";\n\nconst base64String = \"data:image/png;base64,\";\nlet mapView;\nlet markerView;\nconst logMessage = (message) => {\n  console.log(message);\n  ToastAndroid.show(JSON.stringify(message), ToastAndroid.LONG);\n};\nconst takeSnapshot = () => mapView.takeSnapshot();\n\nconst getHuaweiMapInfo = () =>\nmapView &&\n  mapView\n    .getHuaweiMapInfo()\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n\nconst clearMap = () => mapView && mapView.clear();\n\nconst getLayerOptionsInfo = () =>\n  mapView &&\n  markerView &&\n  mapView\n    .getLayerOptionsInfo(markerView)\n    .then((a) => logMessage(a))\n    .catch((e) => logMessage(a));\n\nconst getLayerInfo = () =>\n  mapView &&\n  markerView &&\n  mapView\n    .getLayerInfo(markerView)\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n\nconst getCoordinateFromPoint = () =>\n  mapView &&\n  mapView\n    .getCoordinateFromPoint({ x: 100, y: 100 })\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n\nconst getPointFromCoordinate = () =>\n  mapView &&\n  mapView\n    .getPointFromCoordinate({ latitude: 0, longitude: 0 })\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n\nconst getScalePerPixel = () =>\nmapView &&\n  mapView\n    .getScalePerPixel()\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n\nconst calculateDistance = () => {\n  HMSMap.module\n    .getDistance(\n      { latitude: 41, longitude: 29 },\n      { latitude: 41, longitude: 28 }\n    )\n    .then((a) => logMessage(a))\n    .catch((a) => logMessage(a));\n};\n\nconst enableLogger = () =>\n  HMSMap.module.enableLogger().then(() => logMessage(\"Logger enabled\"));\n\nconst disableLogger = () =>\n  HMSMap.module.disableLogger().then(() => logMessage(\"Logger disabled\"));\n\nconst getDefaultState = () => ({\n  zoom: 3,\n  lat: 0.0,\n  lng: 0.0,\n  bearing: 0.0,\n  tilt: 0.0,\n  compassEnabled: true,\n  mapType: 1, // Just use normal(1) and empty(0) m,\n  minZoomPreference: 3,\n  maxZoomPreference: 20,\n  rotateGesturesEnabled: true,\n  scrollGesturesEnabled: true,\n  tiltGesturesEnabled: true,\n  zoomControlsEnabled: true,\n  zoomGesturesEnabled: true,\n  myLocationEnabled: false,\n  myLocationButtonEnabled: false,\n  markerClustering: false,\n  scrollGesturesEnabledDuringRotateOrZoom: true,\n  stylingMap: false,\n  useAnimation: true,\n  markerCol: 2,\n  markerRow: 5,\n  showTileOvelay: false,\n  pixel: 100,\n  showSnapshot: false,\n  snapshotString: base64String,\n  isDefaultAction: true,\n});\nconst CircleComplex = () => (\n  <HMSCircle\n    center={{ latitude: 10, longitude: 0 }}\n    radius={900000}\n    clickable={true}\n    strokeColor={-256} // yellow(0xFFFFFF00)\n    fillColor={538066306} // transparent blue(0x20123D82)\n    strokeWidth={8}\n    visible={true}\n    zIndex={2}\n    onClick={(e) => logMessage(\"Circle onClick\")}\n  />\n);\n\nconst PolygonComplex = () => (\n  <HMSPolygon\n    points={[\n      { latitude: 10.5, longitude: 18.5 },\n      { latitude: 0.5, longitude: 18.5 },\n      { latitude: 0.5, longitude: 9.5 },\n      { latitude: 10.5, longitude: 9.5 },\n    ]}\n    holes={[\n      [\n        { latitude: 5.5, longitude: 13.5 },\n        { latitude: 3.5, longitude: 13.5 },\n        { latitude: 3.5, longitude: 15.5 },\n      ],\n      [\n        { latitude: 6.5, longitude: 18.0 },\n        { latitude: 8.5, longitude: 18.0 },\n        { latitude: 8.5, longitude: 16.5 },\n      ],\n    ]}\n    clickable={true}\n    geodesic={true}\n    fillColor={538066306} // transparent blue(0x20123D82)\n    strokeColor={-256} // yellow(0xFFFFFF00)\n    strokeJointType={JointTypes.BEVEL}\n    strokePattern={[\n      { type: PatternItemTypes.DASH, length: 20 },\n      { type: PatternItemTypes.DOT },\n      { type: PatternItemTypes.GAP, length: 20 },\n    ]}\n    zIndex={2}\n    onClick={(e) => logMessage(\"Polygon onClick\")}\n  />\n);\nconst PolylineComplex = () => (\n  <HMSPolyline\n    points={[\n      { latitude: -10, longitude: -10 },\n      { latitude: -15, longitude: -10 },\n      { latitude: -10, longitude: -15 },\n    ]}\n    clickable={true}\n    geodesic={true}\n    color={538066306} // transparent blue(0x20123D82)\n    visible={true}\n    width={22.0}\n    zIndex={2}\n    onClick={(e) => logMessage(\"Polyline onClick\")}\n  />\n);\n\nconst GroundOverlaySimple = () => (\n  <HMSGroundOverlay\n    image={{\n      // hue: 30.0,\n      asset: \"ic_launcher.png\", // under assets folder\n      // path on the device\n      // path:\n      //   \"/data/data/com.huawei.rnhmsmapdemo/files/map-style/img/native_dianhua_dire_arrow.png\",\n      // file: 'filename',\n    }}\n    coordinate={[\n      { latitude: -10, longitude: 10 },\n      { latitude: -10, longitude: 20 },\n      { latitude: -25, longitude: 10 },\n    ]}\n  />\n);\nconst MarkerComplex = (props) => (\n  <HMSMarker\n    coordinate={{ latitude: -10, longitude: 0 }}\n    draggable={true}\n    flat={true}\n    icon={{\n      asset: \"ic_launcher.png\", // under assets folder\n    }}\n    alpha={0.8}\n    title=\"Complex Marker\"\n    defaultActionOnClick={props.isDefaultAction}\n    markerAnchor={[0.5, 0.5]}\n    infoWindowAnchor={[0.5, 0.5]}\n    rotation={30.0}\n    visible={true}\n    zIndex={0}\n    clusterable={false}\n    onClick={(e) => logMessage(\"Marker onClick\")}\n    onDragStart={(e) => logMessage(\"Marker onDragStart\")}\n    onDrag={(e) => console.log(\"Marker onDrag\")}\n    onDragEnd={(e) => logMessage(\"Marker onDragEnd\")}\n    onInfoWindowClick={(e) => logMessage(\"Marker onInfoWindowClick\")}\n    onInfoWindowClose={(e) => logMessage(\"Marker onInfoWindowClose\")}\n    onInfoWindowLongClick={(e) => logMessage(\"Marker onInfoWindowLongClick\")}\n    ref={(e) => {\n      markerView = e;\n    }}\n  />\n);\n\nexport default class AdvancedMap extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Advanced Map\",\n      },\n    },\n  };\n\n  constructor() {\n    super();\n    this.state = getDefaultState();\n  }\n\n  render() {\n    return (\n      <SafeAreaView>\n        <View contentInsetAdjustmentBehavior=\"automatic\">\n          <HMSMap\n            style={styles.mapView}\n            darkMode={true}\n            camera={{\n              target: { latitude: 0, longitude: 0 },\n              zoom: 3,\n              bearing: 50,\n              tilt: 80,\n            }}\n            latLngBoundsForCameraTarget={[\n              { latitude: -20, longitude: -20 },\n              { latitude: 20, longitude: 20 },\n            ]}\n            useAnimation={this.state.useAnimation}\n            animationDuration={2000}\n            compassEnabled={this.state.compassEnabled}\n            mapType={this.state.mapType}\n            minZoomPreference={this.state.minZoomPreference}\n            maxZoomPreference={this.state.maxZoomPreference}\n            rotateGesturesEnabled={this.state.rotateGesturesEnabled}\n            scrollGesturesEnabled={this.state.scrollGesturesEnabled}\n            tiltGesturesEnabled={this.state.tiltGesturesEnabled}\n            zOrderOnTop={false}\n            zoomControlsEnabled={this.state.zoomControlsEnabled}\n            zoomGesturesEnabled={this.state.zoomGesturesEnabled}\n            buildingsEnabled={true}\n            description=\"Huawei Map\"\n            myLocationEnabled={this.state.myLocationEnabled}\n            mapPadding={{ right: 100, left: 10, top: 10, bottom: 10 }}\n            markerClustering={this.state.markerClustering}\n            myLocationButtonEnabled={this.state.myLocationButtonEnabled}\n            scrollGesturesEnabledDuringRotateOrZoom={\n              this.state.scrollGesturesEnabledDuringRotateOrZoom\n            }\n            onCameraUpdateFinished={(e) =>\n              console.log(\"HMSMap onCameraUpdateFinished\")\n            }\n            onCameraUpdateCanceled={(e) =>\n              console.log(\"HMSMap onCameraUpdateCanceled\")\n            }\n            onCameraIdle={(e) => {\n              console.log(\"HMSMap onCameraIdle, result\", e.nativeEvent);\n              const cameraPosition = e.nativeEvent;\n              this.setState({\n                zoom: parseFloat(cameraPosition.zoom.toFixed(2)),\n              });\n              this.setState({\n                lat: parseFloat(cameraPosition.target.latitude.toFixed(5)),\n              });\n              this.setState({\n                lng: parseFloat(cameraPosition.target.longitude.toFixed(5)),\n              });\n              this.setState({\n                bearing: parseFloat(cameraPosition.bearing.toFixed(2)),\n              });\n              this.setState({\n                tilt: parseFloat(cameraPosition.tilt.toFixed(2)),\n              });\n            }}\n            onMapReady={() => console.log(\"HMSMap onMapReady\")}\n            onCameraMoveCanceled={() =>\n              console.log(\"HMSMap onCameraMoveCanceled\")\n            }\n            onCameraMove={(e) =>\n              console.log(\"HMSMap onCameraMove result\", e.nativeEvent)\n            }\n            onCameraMoveStarted={(e) =>\n              console.log(\"HMSMap onCameraMoveStarted, result\", e.nativeEvent)\n            }\n            onMapClick={(e) =>\n              console.log(\"HMSMap onMapClick, result\", e.nativeEvent)\n            }\n            onMapLoaded={() => console.log(\"HMSMap onMapLoaded\")}\n            onMapLongClick={(e) =>\n              console.log(\"HMSMap onMapLongClick, result\", e.nativeEvent)\n            }\n            onMyLocationButtonClick={() =>\n              console.log(\"HMSMap onMyLocationButtonClick\")\n            }\n            onMyLocationClick={() => console.log(\"HMSMap onMyLocationClick\")}\n            onPoiClick={(e) =>\n              console.log(\"HMSMap onPoiClick, result\", e.nativeEvent)\n            }\n            onSnapshotReady={(e) => {\n              console.log(\"HMSMap onSnapshotReady\");\n              this.setState({ showSnapshot: true });\n              this.setState({\n                snapshotString: base64String + e.nativeEvent.bitmap,\n              });\n            }}\n            ref={(e) => {\n              mapView = e;\n            }}\n          >\n            <MarkerComplex isDefaultAction={this.state.isDefaultAction} />\n            <CircleComplex />\n            <PolygonComplex />\n            <PolylineComplex />\n            <GroundOverlaySimple />\n          </HMSMap>\n          <SafeAreaView style={styles.height400}>\n            <ScrollView>\n              <View>\n                <View style={[styles.p4]}>\n                  <Text>Get info about components</Text>\n                </View>\n\n                <View\n                  style={[\n                    styles.flexRow,\n                    { justifyContent: \"space-around\", padding: 4 },\n                  ]}\n                >\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button title=\"Map\" onPress={getHuaweiMapInfo} />\n                  </View>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button\n                      title=\"Layer\"\n                      color=\"green\"\n                      onPress={getLayerInfo}\n                    />\n                  </View>\n                  <View style={[styles.flex2, styles.m1]}>\n                    <Button\n                      title=\"Layer Options\"\n                      onPress={getLayerOptionsInfo}\n                    />\n                  </View>\n                </View>\n                <View style={[styles.flexRow, styles.p4]}>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button\n                      color=\"purple\"\n                      title=\"Get Coord. from Point\"\n                      onPress={getCoordinateFromPoint}\n                    />\n                  </View>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button\n                      color=\"green\"\n                      title=\"Get Point From Coord.\"\n                      onPress={getPointFromCoordinate}\n                    />\n                  </View>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button\n                      color=\"red\"\n                      title=\"Get Scale Per Pixel\"\n                      onPress={getScalePerPixel}\n                    />\n                  </View>\n                </View>\n                <View style={[styles.flexRow, styles.p4]}>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button\n                      title=\"Calculate distance\"\n                      onPress={calculateDistance}\n                    />\n                  </View>\n                  <View style={[styles.flex1, styles.m1]}>\n                    <Button title=\"Clear Map\" color=\"red\" onPress={clearMap} />\n                  </View>\n                </View>\n              </View>\n              <View style={[styles.flexRow, styles.p4]}>\n                <View style={[styles.flex1, styles.m1]}>\n                  <Button\n                    color=\"green\"\n                    title=\"Enable Logger\"\n                    onPress={enableLogger}\n                  />\n                </View>\n                <View style={[styles.flex1, styles.m1]}>\n                  <Button\n                    color=\"orange\"\n                    title=\"Disable Logger\"\n                    onPress={disableLogger}\n                  />\n                </View>\n              </View>\n              <View style={[styles.flex1, styles.m1]}>\n                <Button title=\"Take snapshot\" onPress={takeSnapshot} />\n              </View>\n\n              {this.state.showSnapshot && (\n                <TouchableHighlight\n                  onPress={() => this.setState({ showSnapshot: false })}\n                >\n                  <Image\n                    style={styles.mapView}\n                    source={{ uri: this.state.snapshotString }}\n                  />\n                </TouchableHighlight>\n              )}\n            </ScrollView>\n          </SafeAreaView>\n        </View>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/BasicMap.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, { MapTypes, Gravity } from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport { SafeAreaView } from \"react-native\";\n\nimport { styles } from \"../styles/styles\";\nexport default class BasicMap extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Basic Map\",\n      },\n    },\n  };\n\n  render() {\n    return (\n      <SafeAreaView>\n        <HMSMap\n          style={styles.fullHeight}\n          mapType={MapTypes.NORMAL}\n          liteMode={false}\n          darkMode={false}\n          camera={{\n            target: {\n              latitude: 41.02155220194891,\n              longitude: 29.0037998967586,\n            },\n            zoom: 12,\n          }}\n          logoPosition={Gravity.TOP | Gravity.START}\n          logoPadding={{\n            paddingStart: 0,\n            paddingTop: 0,\n            paddingBottom: 0,\n            paddingEnd: 0,\n          }}\n        />\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/CameraControl.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, { MapTypes } from \"@hmscore/react-native-hms-map\";\nimport React, { useState } from \"react\";\nimport {\n  Button,\n  SafeAreaView,\n  ScrollView,\n  Switch,\n  Text,\n  TextInput,\n  View,\n} from \"react-native\";\nimport { styles } from \"../styles/styles\";\n\nlet mapView;\n\nexport default class CameraControl extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Location\",\n      },\n    },\n  };\n\n  state = {\n    pixel: 100,\n    useAnimation: false,\n    minZoom: 1,\n    maxZoom: 15,\n    zoom: 12,\n    customCamera: {},\n  };\n\n  CameraButtons = () => (\n    <View style={[styles.flexCol, styles.width125]}>\n      <Text style={[styles.m4, styles.textBold]}>Camera Position</Text>\n      <View style={styles.flexRow}>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() =>\n              mapView.scrollBy(-this.state.pixel, this.state.pixel)\n            }\n            title={\"⬉\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() => mapView.scrollBy(0, this.state.pixel)}\n            title={\"⬆\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() => mapView.scrollBy(this.state.pixel, this.state.pixel)}\n            title={\"⬈\"}\n          />\n        </View>\n      </View>\n      <View style={styles.flexRow}>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() => mapView.scrollBy(-this.state.pixel, 0)}\n            title={\"⬅\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <TextInput\n            underlineColorAndroid=\"gray\"\n            keyboardType=\"number-pad\"\n            value={\"\" + this.state.pixel}\n            onChangeText={(x) => this.setState({ pixel: parseInt(x, 10) })}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() => mapView.scrollBy(this.state.pixel, 0)}\n            title={\"➝\"}\n          />\n        </View>\n      </View>\n      <View style={styles.flexRow}>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() =>\n              mapView.scrollBy(-this.state.pixel, -this.state.pixel)\n            }\n            title={\"⬋\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() => mapView.scrollBy(0, -this.state.pixel)}\n            title={\"⬇\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1, styles.p4]}>\n          <Button\n            onPress={() =>\n              mapView.scrollBy(this.state.pixel, -this.state.pixel)\n            }\n            title={\"⬊\"}\n          />\n        </View>\n      </View>\n    </View>\n  );\n\n  ZoomControls = () => (\n    <View style={[styles.flexCol, styles.width125]}>\n      <Text style={[styles.m4, styles.textBold]}>Zoom Change</Text>\n      <View style={[styles.flexRow, { marginTop: 2 }]}>\n        <Text title=\"Min\" style={styles.width40}>\n          Min\n        </Text>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"red\"\n            onPress={() =>\n              this.state.minZoom > 0 &&\n              this.setState({ minZoom: this.state.minZoom - 1 })\n            }\n            title={\"-\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Text>{\"\" + this.state.minZoom}</Text>\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"green\"\n            onPress={() =>\n              this.state.minZoom < this.state.zoom &&\n              this.setState({ minZoom: this.state.minZoom + 1 })\n            }\n            title={\"+\"}\n          />\n        </View>\n      </View>\n      <View style={[styles.flexRow, { marginTop: 2 }]}>\n        <Text title=\"Zoom\" style={styles.width40}>\n          Zoom\n        </Text>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"red\"\n            onPress={() => {\n              if (this.state.zoom > this.state.minZoom) {\n                this.setState({ zoom: this.state.zoom - 1 });\n                mapView.zoomOut();\n              }\n            }}\n            title={\"-\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Text>{\"\" + this.state.zoom}</Text>\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"green\"\n            onPress={() => {\n              if (this.state.zoom < this.state.maxZoom) {\n                this.setState({ zoom: this.state.zoom + 1 });\n                mapView.zoomIn();\n              }\n            }}\n            title={\"+\"}\n          />\n        </View>\n      </View>\n      <View style={[styles.flexRow, { marginTop: 2 }]}>\n        <Text title=\"Min\" style={styles.width40}>\n          Max\n        </Text>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"red\"\n            onPress={() =>\n              this.state.maxZoom > this.state.zoom &&\n              this.setState({ maxZoom: this.state.maxZoom - 1 })\n            }\n            title={\"-\"}\n          />\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Text>{\"\" + this.state.maxZoom}</Text>\n        </View>\n        <View style={[styles.flexRow, styles.flex1]}>\n          <Button\n            color=\"green\"\n            onPress={() =>\n              this.state.maxZoom < 20 &&\n              this.setState({ maxZoom: this.state.maxZoom + 1 })\n            }\n            title={\"+\"}\n          />\n        </View>\n      </View>\n    </View>\n  );\n\n  UseAnimationView = () => (\n    <View style={[styles.flexRow, { alignItems: \"center\" }]}>\n      <Switch\n        value={this.state.useAnimation}\n        onValueChange={() => {\n          this.setState({ useAnimation: !this.state.useAnimation });\n        }}\n      />\n      <Text>Use Animation</Text>\n    </View>\n  );\n\n  TextFieldView = () => (\n    <View style={styles.flexCol}>\n      <View style={[styles.flexRow, { justifyContent: \"space-between\" }]}>\n        <TextInput\n          style={styles.textInput}\n          onChangeText={(text) =>\n            this.setState({\n              customCamera: {\n                ...this.state.customCamera,\n                target: {\n                  ...this.state.customCamera.target,\n                  latitude: parseFloat(text),\n                },\n              },\n            })\n          }\n          placeholder=\"Lat\"\n          keyboardType=\"number-pad\"\n        />\n        <TextInput\n          style={styles.textInput}\n          onChangeText={(text) =>\n            this.setState({\n              customCamera: {\n                ...this.state.customCamera,\n                target: {\n                  ...this.state.customCamera.target,\n                  longitude: parseFloat(text),\n                },\n              },\n            })\n          }\n          placeholder=\"Long\"\n          keyboardType=\"number-pad\"\n        />\n        <TextInput\n          style={styles.textInput}\n          onChangeText={(text) =>\n            this.setState({\n              customCamera: {\n                ...this.state.customCamera,\n                zoom: parseInt(text, 10),\n              },\n            })\n          }\n          placeholder=\"Zoom\"\n          keyboardType=\"number-pad\"\n        />\n        <TextInput\n          style={styles.textInput}\n          onChangeText={(text) =>\n            this.setState({\n              customCamera: {\n                ...this.state.customCamera,\n                bearing: parseInt(text, 10),\n              },\n            })\n          }\n          placeholder=\"Bearing\"\n          keyboardType=\"number-pad\"\n        />\n        <TextInput\n          style={styles.textInput}\n          onChangeText={(text) =>\n            this.setState({\n              customCamera: {\n                ...this.state.customCamera,\n                tilt: parseInt(text, 10),\n              },\n            })\n          }\n          placeholder=\"Tilt\"\n          keyboardType=\"number-pad\"\n        />\n      </View>\n      <Button\n        onPress={() => {\n          mapView && mapView.setCameraPosition(this.state.customCamera);\n        }}\n        title=\"Go\"\n        color=\"#841584\"\n      />\n    </View>\n  );\n\n  render() {\n    return (\n      <SafeAreaView>\n        <ScrollView style={[styles.flexCol]}>\n          <HMSMap\n            ref={(ref) => {\n              mapView = ref;\n            }}\n            style={styles.height250}\n            animationDuration={2000}\n            mapType={MapTypes.NORMAL}\n            useAnimation={this.state.useAnimation}\n            minZoomPreference={this.state.minZoom}\n            maxZoomPreference={this.state.maxZoom}\n            camera={{\n              target: {\n                latitude: 41.02155220194891,\n                longitude: 29.0037998967586,\n              },\n              zoom: 12,\n            }}\n          />\n\n          <View style={[styles.flexCol, styles.p4]}>\n            {this.UseAnimationView()}\n          </View>\n          <View style={[styles.flexRow, styles.p4]}>\n            {this.CameraButtons()}\n            {this.ZoomControls()}\n          </View>\n          <View style={styles.p4}>\n            <Text style={styles.textBold}>Move Camera</Text>\n            {this.TextFieldView()}\n          </View>\n          <View style={[styles.flexRow, styles.p4]}>\n            <View style={[styles.flex1, styles.m2]}>\n              <Button\n                onPress={() => {\n                  /*\n                   * These functions can be used for camera update\n                   *  mapView.zoomIn();\n                   *  mapView.zoomOut();\n                   *  mapView.zoomTo(10.5);\n                   *  mapView.zoomBy(-1.5);\n                   *  mapView.zoomBy(2, {x: 0, y: 0});\n                   *  mapView.scrollBy(100, 100);\n                   *  mapView.setBounds([{latitude: 41.5, longitude: 28.5},{latitude: 40.5, longitude: 29.5}],1);\n                   *  mapView.setCameraPosition({target: {latitude: 41, longitude: 29}, zoom:13, tilt:40});\n                   */\n                  mapView.setCoordinates({ latitude: 0, longitude: 0 }, 3);\n                }}\n                title=\"Go to (0,0)\"\n                color=\"blue\"\n              />\n            </View>\n            <View style={[styles.flex1, styles.m2]}>\n              <Button\n                onPress={() => {\n                  mapView.stopAnimation();\n                }}\n                title=\"Stop Animation\"\n                color=\"red\"\n              />\n            </View>\n          </View>\n        </ScrollView>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/Gestures.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, { MapTypes } from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport { SafeAreaView, ScrollView, Switch, Text, View } from \"react-native\";\nimport { styles } from \"../styles/styles\";\n\nexport default class Gestures extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Gestures\",\n      },\n    },\n  };\n\n  state = {\n    zoomGesture: true,\n    zoomButtons: true,\n    compass: true,\n    scroll: true,\n    tilt: true,\n    rotate: true,\n    scrollGesturesEnabledDuringRotateOrZoom: true,\n    pointToCenter: { x: 200, y: 200 },\n    scaleByMapCenter: false,\n  };\n\n  leftColumn = [\n    {\n      title: \"Zoom Buttons\",\n      value: \"zoomButtons\",\n    },\n    {\n      title: \"Zoom Gesture\",\n      value: \"zoomGesture\",\n    },\n    {\n      title: \"Scroll Gesture\",\n      value: \"scroll\",\n    },\n    {\n      title: \"Scale By Map Center\",\n      value: \"scaleByMapCenter\",\n    },\n  ];\n\n  rightColumn = [\n    {\n      title: \"Compass\",\n      value: \"compass\",\n    },\n    {\n      title: \"Rotate Gesture\",\n      value: \"rotate\",\n    },\n    {\n      title: \"Tilt Gesture\",\n      value: \"tilt\",\n    },\n    {\n      title: \"Scroll Enabled During Zoom&Rotate\",\n      value: \"scrollGesturesEnabledDuringRotateOrZoom\",\n    },\n  ];\n\n  renderColumn(column) {\n    return column.map((c) => (\n      <View\n        key={c.title}\n        style={[styles.flexRow, { alignItems: \"center\", padding: 4 }]}\n      >\n        <Switch\n          value={this.state[c.value]}\n          onValueChange={() => {\n            this.setState({ [c.value]: !this.state[c.value] });\n          }}\n        />\n        <View style={styles.width100}>\n          <Text>{c.title}</Text>\n        </View>\n      </View>\n    ));\n  }\n\n  render() {\n    return (\n      <SafeAreaView>\n        <ScrollView>\n          <HMSMap\n            onMapLongClick={(e) => {\n              console.log(e.nativeEvent);\n            }}\n            zoomControlsEnabled={this.state.zoomButtons}\n            compassEnabled={this.state.compass}\n            zoomGesturesEnabled={this.state.zoomGesture}\n            scrollGesturesEnabled={this.state.scroll}\n            rotateGesturesEnabled={this.state.rotate}\n            tiltGesturesEnabled={this.state.tilt}\n            scrollGesturesEnabledDuringRotateOrZoom={\n              this.state.scrollGesturesEnabledDuringRotateOrZoom\n            }\n            gestureScaleByMapCenter={this.state.scaleByMapCenter}\n            pointToCenter={this.state.pointToCenter}\n            style={styles.height300}\n            mapType={MapTypes.NORMAL}\n            camera={{\n              target: {\n                latitude: 41.02155220194891,\n                longitude: 29.0037998967586,\n              },\n              zoom: 12,\n              bearing: 10,\n            }}\n          />\n          <View style={[styles.flexRow, styles.p4]}>\n            <View style={styles.flexCol}>\n              {this.renderColumn(this.leftColumn)}\n            </View>\n            <View style={styles.flexCol}>\n              {this.renderColumn(this.rightColumn)}\n            </View>\n          </View>\n        </ScrollView>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/HeatMap.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, { MapTypes, RadiusUnit, HMSHeatMap } from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport { SafeAreaView } from \"react-native\";\nimport { styles } from \"../styles/styles\";\n\nimport earthquakes_with_usa from '../earthquakes_with_usa.json';\n\nexport default class HeatMap extends React.Component {\n    static options = {\n        topBar: {\n            title: {\n                text: \"HeatMap\",\n            },\n        },\n    };\n\n    render() {\n        return (\n            <SafeAreaView>\n                <HMSMap\n                    camera={{\n                        target: {\n                            latitude: 37.770443,\n                            longitude: -121.331571,\n                        },\n                        zoom: 6,\n                    }}\n                    style={styles.fullHeight}\n                    mapType={MapTypes.NORMAL}\n                >\n                    <HMSHeatMap\n                        dataSet={\n                            JSON.stringify(earthquakes_with_usa)\n                        }\n                        opacity={{\n                            9: 0,\n                            13: 0\n                        }}\n                        color={{\n                            0.0: [0, 33, 102, 172],\n                            0.2: [255, 103, 169, 207],\n                            0.4: [255, 209, 229, 240],\n                            0.5: [255, 253, 219, 199],\n                            0.8: [255, 239, 138, 98],\n                            1.0: [255, 178, 24, 43]\n                        }}\n                        radius={10}\n                        isVisible={true}\n                        radiusUnit={RadiusUnit.PIXEL}\n                    />\n                </HMSMap>\n            </SafeAreaView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/Location.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, { MapTypes } from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport {\n  PermissionsAndroid,\n  SafeAreaView,\n  Switch,\n  Text,\n  View,\n  Image,\n} from \"react-native\";\nimport { styles } from \"../styles/styles\";\n\nexport default class Location extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Location\",\n      },\n    },\n  };\n\n  state = {\n    myLocationEnabled: false,\n    myLocationButtonEnabled: false,\n    myLocationStyleEnabled:false,\n    myLocationStyle: null\n  };\n\n  render() {\n    return (\n      <SafeAreaView>\n        <HMSMap\n          zoomControlsEnabled\n          compassEnabled\n          myLocationEnabled={this.state.myLocationEnabled}\n          myLocationButtonEnabled={this.state.myLocationButtonEnabled}\n          onMyLocationButtonClick={() =>\n            console.log(\"HMSMap onMyLocationButtonClick\")\n          }\n          onMyLocationClick={() => console.log(\"HMSMap onMyLocationClick\")}\n          style={styles.height300}\n          mapType={MapTypes.NORMAL}\n          camera={{\n            target: {\n              latitude: 41.02155220194891,\n              longitude: 29.0037998967586,\n            },\n            zoom: 2,\n          }}\n          myLocationStyle={this.state.myLocationStyle}\n        />\n        <View style={[styles.flexRow, { padding: 4 }]}>\n          <View\n            style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n          >\n            <Switch\n              onValueChange={() => {\n                if (this.state.myLocationEnabled) {\n                  this.setState({ myLocationEnabled: false });\n                  this.setState({ myLocationButtonEnabled: false });\n                  this.setState({ myLocationStyleEnabled: false });\n                } else {\n                  PermissionsAndroid.check(\n                    PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION\n                  ).then((res) => {\n                    res\n                      ? this.setState({ myLocationEnabled: true })\n                      : PermissionsAndroid.request(\n                        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION\n                      ).then(\n                        (granted) =>\n                          PermissionsAndroid.RESULTS.GRANTED === granted &&\n                          this.setState({ myLocationEnabled: true })\n                      );\n                  });\n                }\n              }}\n              value={this.state.myLocationEnabled}\n            />\n            <Text title=\"My Location\">Location</Text>\n          </View>\n          <View\n            style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n          >\n          <Switch\n              onValueChange={() =>\n                this.setState((state) => ({\n                  myLocationButtonEnabled: !state.myLocationButtonEnabled,\n                }))\n              }\n              value={this.state.myLocationButtonEnabled}\n            />\n            <Text title=\"My Location Button\">Location Button</Text>\n          </View>\n        </View>\n        <View style={[styles.flexRow, { padding: 4 }]}>\n        <View\n            style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n          >\n          <Switch\n              onValueChange={() => {\n                console.log(\" onValueChange myLocationStyleEnabled is \"+ this.state.myLocationStyleEnabled);\n                if (this.state.myLocationStyleEnabled) {\n                  this.setState({ \n                    myLocationStyle: null\n                });\n                } else {\n                  this.setState({ \n                    myLocationStyle: {\n                    anchor: [0.1, 0.1],\n                    icon:{\n                      asset: \"plane.png\",\n                      width: 30,\n                      height: 30,\n                    },\n                  } \n                });\n                }\n                this.setState((state) => ({\n                  myLocationStyleEnabled: !state.myLocationStyleEnabled,\n                }))\n                console.log(\" onValueChange myLocationStyle is \"+ this.state.myLocationStyle);\n              }}\n              \n              value={this.state.myLocationStyleEnabled}\n            />\n            <Text title=\"Style My Location Button\"> Style Location Button</Text>\n          </View>\n        </View>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/MapLayers.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, {\n  MapTypes,\n  HMSCircle,\n  HMSPolygon,\n  HMSPolyline,\n  HMSGroundOverlay,\n  PatternItemTypes,\n  JointTypes,\n  CapTypes,  \n  FillMode,\n  RepeatMode,\n  Interpolator,\n} from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport { Image, SafeAreaView } from \"react-native\";\nimport { styles } from \"../styles/styles\";\nlet circleRef;\nconst exampleAnimation = {\n  translate: {\n    latitude: 40.97511809993672,\n    longitude: 29.066076168319412,\n    duration: 10000,\n    interpolator: Interpolator.ACCELERATE_DECELERATE,\n  },\n};\n\nconst defaultOptions = {\n  duration: 5000,\n  fillMode: FillMode.FORWARDS,\n  repeatCount: 0,\n  repeatMode: RepeatMode.REVERSE,\n  interpolator: Interpolator.LINEAR,\n};\n\nexport default class MapLayers extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Map Layers\",\n      },\n    },\n  };\n\n  render() {\n    return (\n      <SafeAreaView>\n        <HMSMap\n          camera={{\n            target: {\n              latitude: 41.02155220194891,\n              longitude: 29.0037998967586,\n            },\n            zoom: 8,\n          }}\n          style={styles.fullHeight}\n          mapType={MapTypes.NORMAL}\n        >\n          <HMSCircle\n            center={{\n              latitude: 40.44762707013626,\n              longitude: 29.521178547464814,\n            }}\n            radius={20000}\n          />\n          <HMSCircle\n            ref={(e) => {\n              circleRef = e;\n            }}\n            center={{\n              latitude: 40.200098529472164,\n              longitude: 29.051574903330724,\n            }}\n            radius={20000}\n            clickable={true}\n            fillColor={538066306} // transparent blue(0x20123D82)\n            strokeWidth={10}\n            strokeColor={-256} // yellow(0xFFFFFF00)\n            strokePattern={[\n              { type: PatternItemTypes.DASH, length: 20 },\n              { type: PatternItemTypes.DOT },\n              { type: PatternItemTypes.GAP, length: 20 },\n            ]}\n            visible={true}\n            zIndex={2}\n            onClick={(e) => {\n              circleRef.setAnimation(exampleAnimation, defaultOptions);\n              circleRef.startAnimation();\n            }}\n            \n            onAnimationStart={(e) =>\n              console.log(`Animation ${e.nativeEvent.type} Started`)\n            }\n            onAnimationEnd={(e) =>\n              console.log(\n                `Animation ${e.nativeEvent.type} Ended in ${e.nativeEvent.duration} ms`\n              )\n            }\n          />\n          <HMSPolygon\n            points={[\n              { latitude: 40.88081833259618, longitude: 28.511668913805224 },\n              { latitude: 40.56100089185301, longitude: 28.529800093962084 },\n              { latitude: 40.482097086813454, longitude: 29.19903056928332 },\n            ]}\n          />\n          <HMSPolygon\n            points={[\n              { latitude: 41.33004402346952, longitude: 28.700774668034082 },\n              { latitude: 41.169912047344546, longitude: 29.571561348562035 },\n              { latitude: 40.875001445894, longitude: 29.26068331264643 },\n              { latitude: 41.01477214098381, longitude: 28.558158204360694 },\n            ]}\n            holes={[\n              [\n                { latitude: 41.21526341029057, longitude: 28.58659971544569 },\n                { latitude: 41.19356639661979, longitude: 28.828612292975148 },\n                { latitude: 41.12483856408342, longitude: 28.738931829023343 },\n              ],\n              [\n                { latitude: 41.10222454052367, longitude: 29.135029255619823 },\n                { latitude: 41.025468754193646, longitude: 29.179012497818803 },\n                { latitude: 40.99655710812257, longitude: 29.144235633489714 },\n                { latitude: 41.030558427678145, longitude: 29.07145278656271 },\n              ],\n            ]}\n            clickable={true}\n            geodesic={true}\n            fillColor={[60, 0, 0, 255]} // transparent blue(0x20123D82)\n            strokeColor={[255, 255, 0, 255]} // yellow(0xFFFFFF00)\n            strokeJointType={JointTypes.BEVEL}\n            strokePattern={[\n              { type: PatternItemTypes.DASH, length: 20 },\n              { type: PatternItemTypes.DOT },\n              { type: PatternItemTypes.GAP, length: 20 },\n            ]}\n            zIndex={2}\n            onClick={(e) => console.log(\"Polygon onClick\")}\n          />\n          <HMSPolyline\n            points={[\n              { latitude: 40.827129114265524, longitude: 29.373611701881106 },\n              { latitude: 40.790073321984195, longitude: 29.512501011809462 },\n              { latitude: 40.69835270230068, longitude: 29.49504690851675 },\n            ]}\n          />\n          <HMSPolyline\n            points={[\n              { latitude: 40.915138580349236, longitude: 29.01346841103354 },\n              { latitude: 40.85695204475017, longitude: 29.128712763739536 },\n              { latitude: 40.75361525383429, longitude: 29.128183927718386 },\n              { latitude: 40.65765558913118, longitude: 29.28286041547111 },\n            ]}\n            gradient={true}\n            ColorValues={[-655362,-1671168,-16711936]}\n            clickable={true}\n            geodesic={true}\n            color={538066306} // transparent blue(0x20123D82)\n            jointType={JointTypes.BEVEL}\n            pattern={[{ type: PatternItemTypes.DASH, length: 20 }]}\n            startCap={{\n              type: CapTypes.ROUND,\n            }}\n            endCap={{\n              type: CapTypes.CUSTOM,\n              refWidth: 2000,\n              asset: \"plane.png\", // under assets folder\n            }}\n            visible={true}\n            width={15.0}\n            zIndex={2}\n            onClick={(e) => console.log(\"Polyline onClick\")}\n          />\n          <HMSGroundOverlay\n            image={{\n              asset: \"ic_launcher.png\", // under assets folder\n              uri: Image.resolveAssetSource(\n                require(\"../assets/galata-tower.png\")\n              ).uri,\n            }}\n            coordinate={[\n              { latitude: 41.10969168434648, longitude: 28.21047623250003 },\n              { latitude: 41.092865202093456, longitude: 28.294297083978915 },\n              { latitude: 41.04744527333003, longitude: 28.235456717798996 },\n            ]}\n          />\n          <HMSGroundOverlay\n            image={{\n              asset: \"plane.png\", // under assets folder\n            }}\n            coordinate={{\n              latitude: 40.795036723040276,\n              longitude: 28.9733225727439,\n              height: 20000,\n              width: 20000,\n            }}\n            anchor={[0.5, 0.5]}\n            bearing={220}\n            clickable={true}\n            transparency={0.5}\n            visible={true}\n            zIndex={3}\n            onClick={(e) =>\n              console.log(\"GroundOverlay onClick e:\", e.nativeEvent)\n            }\n          />\n        </HMSMap>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/MapStyle.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, {\n  MapTypes,\n  HMSTileOverlay,\n} from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport {\n  Button,\n  SafeAreaView,\n  ScrollView,\n  Switch,\n  Text,\n  View,\n} from \"react-native\";\n\nimport mapStyleJson from \"../mapStyle.json\";\nimport { styles } from \"../styles/styles\";\n\nlet tileOverlay;\n\nexport default class MapStyle extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Map Style\",\n      },\n    },\n  };\n\n  state = {\n    mapType: true,\n    customMapStyle: false,\n    showTileOverlay: false,\n    showCustomTiles: false,\n    trafficEnabled: false,\n    buildingsEnabled: false,\n  };\n\n  render() {\n    const CustomTileOverlay = (\n      <HMSTileOverlay\n        ref={(e) => {\n          tileOverlay = e;\n        }}\n        tileProvider={{\n          url: \"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\",\n        }}\n        visible={this.state.showTileOverlay}\n        fadeIn={false}\n        zIndex={10}\n        transparency={0.2}\n      />\n    );\n\n    const CustomTiles = (\n      <HMSTileOverlay\n        tileProvider={[\n          {\n            x: 3,\n            y: 4,\n            zoom: 3,\n            asset: \"ic_launcher.png\",\n          },\n          {\n            x: 4,\n            y: 3,\n            zoom: 3,\n            asset: \"ic_launcher.png\",\n          },\n          {\n            x: 4,\n            y: 4,\n            zoom: 3,\n            asset: \"ic_launcher.png\",\n          },\n        ]}\n        visible={this.state.showCustomTiles}\n        fadeIn={false}\n        zIndex={10}\n        transparency={0.2}\n      />\n    );\n\n    return (\n      <SafeAreaView>\n        <ScrollView>\n          <HMSMap\n            style={{ height: 450 }}\n            trafficEnabled={this.state.trafficEnabled}\n            buildingsEnabled={this.state.buildingsEnabled}\n            mapType={!this.state.mapType ? MapTypes.NONE : MapTypes.NORMAL}\n            mapStyle={\n              this.state.customMapStyle ? JSON.stringify(mapStyleJson) : \"\"\n            }\n            camera={\n              !this.state.showCustomTiles\n                ? {\n                  target: {\n                    latitude: 41.02155220194891,\n                    longitude: 29.0037998967586,\n                  },\n                  zoom: 12,\n                }\n                : {\n                  target: {\n                    latitude: 0,\n                    longitude: 0,\n                  },\n                  zoom: 3,\n                }\n            }\n          >\n            {CustomTileOverlay}\n            {CustomTiles}\n          </HMSMap>\n          <View style={[styles.flexRow, styles.p4]}>\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    mapType: !state.mapType,\n                  }))\n                }\n                value={this.state.mapType}\n              />\n              <Text>Map Type</Text>\n            </View>\n\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    customMapStyle: !state.customMapStyle,\n                  }))\n                }\n                value={this.state.customMapStyle}\n              />\n              <Text>Custom Map Style</Text>\n            </View>\n          </View>\n          <View style={[styles.flexRow, styles.p4]}>\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    showTileOverlay: !state.showTileOverlay,\n                  }))\n                }\n                value={this.state.showTileOverlay}\n              />\n              <Text>Tile Overlay</Text>\n            </View>\n\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    showCustomTiles: !state.showCustomTiles,\n                  }))\n                }\n                value={this.state.showCustomTiles}\n              />\n              <Text>Custom Tiles</Text>\n            </View>\n          </View>\n          <View style={[styles.flexRow, styles.p4]}>\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    trafficEnabled: !state.trafficEnabled,\n                  }))\n                }\n                value={this.state.trafficEnabled}\n              />\n              <Text>Traffic Enabled</Text>\n            </View>\n            <View\n              style={[styles.flexRow, styles.flex1, { alignItems: \"center\" }]}\n            >\n              <Switch\n                onValueChange={() =>\n                  this.setState((state) => ({\n                    buildingsEnabled: !state.buildingsEnabled,\n                  }))\n                }\n                value={this.state.buildingsEnabled}\n              />\n              <Text>Buildings Enabled</Text>\n            </View>\n          </View>\n          <View style={[styles.p4]}>\n            <Button\n              onPress={() => {\n                tileOverlay && tileOverlay.clearTileCache();\n              }}\n              title=\"Clear Tile Cache\"\n              color=\"red\"\n            />\n          </View>\n        </ScrollView>\n      </SafeAreaView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-map/example/screens/Markers.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap, {\n  HMSInfoWindow,\n  HMSMarker,\n  Hue,\n  MapTypes,\n  FillMode,\n  RepeatMode,\n  Interpolator,\n} from \"@hmscore/react-native-hms-map\";\nimport React from \"react\";\nimport {\n  Button,\n  SafeAreaView,\n  ScrollView,\n  Text,\n  TextInput,\n  View,\n  Switch,\n  Image,\n  ToastAndroid,\n  StyleSheet,\n} from \"react-native\";\nimport { styles } from \"../styles/styles\";\n\nlet planeRef;\nlet count = 0;\nconst exampleAnimation = {\n  rotate: {\n    fromDegree: 0,\n    toDegree: 150,\n    duration: 3000,\n  },\n  translate: {\n    latitude: 40.97511809993672,\n    longitude: 29.066076168319412,\n    duration: 10000,\n    interpolator: Interpolator.ACCELERATE_DECELERATE,\n  },\n  scale: {\n    fromX: 0.5,\n    fromY: 0.5,\n    toX: 1.5,\n    toY: 1.5,\n    repeatCount: 1,\n  },\n  alpha: {\n    fromAlpha: 0.6,\n    toAlpha: 1,\n    repeatCount: 2,\n  },\n};\n\nconst defaultOptions = {\n  duration: 5000,\n  fillMode: FillMode.FORWARDS,\n  repeatCount: 0,\n  repeatMode: RepeatMode.REVERSE,\n  interpolator: Interpolator.LINEAR,\n};\n\nexport default class Markers extends React.Component {\n  static options = {\n    topBar: {\n      title: {\n        text: \"Markers\",\n      },\n    },\n  };\n\n  state = {\n    defaultActionOnClick: true,\n    rotation: 0,\n    markerClustering: true,\n    params: {},\n    fillMode: FillMode.FORWARDS,\n    repeatMode: RepeatMode.RESTART,\n    interpolator: 0,\n    duration: 2000,\n    repeatCount: 0,\n    animation: {},\n    additionalMarkers: [],\n  };\n\n  renderAdditionalMarkers() {\n    return this.state.additionalMarkers.map((m) => (\n      <HMSMarker\n        key={m.id}\n        coordinate={m.coordinate}\n        title={\"Marker-\" + m.id}\n        clusterable\n        snippet={`Lat:${m.coordinate.latitude.toFixed(\n          4\n        )}, Long:${m.coordinate.longitude.toFixed(4)}`}\n        icon={{ hue: (m.id * 30) % 360 }}\n        onInfoWindowLongClick={() => {\n          this.setState((state) => ({\n            additionalMarkers: state.additionalMarkers.filter(\n              (value) => value.id != m.id\n            ),\n          }));\n        }}\n      />\n    ));\n  }\n\n  CustomInfoWindow = () => (\n    <HMSInfoWindow>\n      <View style={customStyles.transparent}>\n        <View style={customStyles.container}>\n          <Text style={[customStyles.infoText, customStyles.font13]}>\n            Galata Tower\n          </Text>\n          <Text style={[customStyles.infoText, customStyles.font11]}>\n            Custom info window\n          </Text>\n        </View>\n        <View style={customStyles.infoWindow} />\n      </View>\n    </HMSInfoWindow>\n  );\n\n  TextFieldView = () => {\n    const { params } = this.state;\n\n    return (\n      <View style={styles.flexCol}>\n        <View>\n          <Text style={customStyles.font11}>\n            Param1: fromDegree/fromAlpha/fromX/latitude\n          </Text>\n          <Text style={customStyles.font11}>\n            Param2: toDegree/toAlpha/toX/longitude\n          </Text>\n          <Text style={customStyles.font11}>Param3: fromY</Text>\n          <Text style={customStyles.font11}>Param4: toY</Text>\n        </View>\n        <View style={[styles.flexRow, { justifyContent: \"space-between\" }]}>\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ params: { ...params, param1: parseFloat(text) } })\n            }\n            placeholder=\"Param1\"\n            keyboardType=\"number-pad\"\n          />\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ params: { ...params, param2: parseFloat(text) } })\n            }\n            placeholder=\"Param2\"\n            keyboardType=\"number-pad\"\n          />\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ params: { ...params, param3: parseFloat(text) } })\n            }\n            placeholder=\"Param3\"\n            keyboardType=\"number-pad\"\n          />\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ params: { ...params, param4: parseFloat(text) } })\n            }\n            placeholder=\"Param4\"\n            keyboardType=\"number-pad\"\n          />\n        </View>\n        <View style={[styles.flexRow]}>\n          <View style={[styles.flexRow, { alignItems: \"center\", padding: 4 }]}>\n            <Switch\n              value={this.state.fillMode == FillMode.FORWARDS ? false : true}\n              onValueChange={() => {\n                this.setState((state) => ({\n                  fillMode:\n                    state.fillMode == FillMode.FORWARDS\n                      ? FillMode.BACKWARDS\n                      : FillMode.FORWARDS,\n                }));\n              }}\n            />\n            <View style={styles.width100}>\n              <Text>\n                {this.state.fillMode == FillMode.FORWARDS\n                  ? \"FORWARDS\"\n                  : \"BACKWARDS\"}\n              </Text>\n            </View>\n          </View>\n          <View style={[styles.flexRow, { alignItems: \"center\", padding: 4 }]}>\n            <Switch\n              value={this.state.repeatMode == RepeatMode.RESTART ? false : true}\n              onValueChange={() => {\n                this.setState((state) => ({\n                  repeatMode:\n                    state.repeatMode == RepeatMode.RESTART\n                      ? RepeatMode.REVERSE\n                      : RepeatMode.RESTART,\n                }));\n              }}\n            />\n            <View style={styles.width100}>\n              <Text>\n                {this.state.repeatMode == RepeatMode.RESTART\n                  ? \"RESTART\"\n                  : \"REVERSE\"}\n              </Text>\n            </View>\n          </View>\n        </View>\n        <View style={[styles.flexRow]}>\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ duration: parseInt(text, 10) })\n            }\n            placeholder=\"Duration\"\n            keyboardType=\"number-pad\"\n          />\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ repeatCount: parseInt(text, 10) })\n            }\n            placeholder=\"Repeat Count\"\n            keyboardType=\"number-pad\"\n          />\n          <TextInput\n            style={styles.textInput}\n            onChangeText={(text) =>\n              this.setState({ interpolator: parseInt(text, 10) })\n            }\n            placeholder=\"Interpolator 0-9\"\n            keyboardType=\"number-pad\"\n          />\n        </View>\n        <View style={[styles.flexRow]}>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                this.setState((state) => ({\n                  animation: {\n                    ...state.animation,\n                    rotate: {\n                      fromDegree: state.params.param1,\n                      toDegree: state.params.param2,\n                      duration: state.duration,\n                      repeatMode: state.repeatMode,\n                      fillMode: state.fillMode,\n                      repeatCount: state.repeatCount,\n                      interpolator: state.interpolator,\n                    },\n                  },\n                }));\n                ToastAndroid.show(`rotation set`, ToastAndroid.SHORT);\n              }}\n              title=\"Set Rotate\"\n            />\n          </View>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                this.setState((state) => ({\n                  animation: {\n                    ...state.animation,\n                    alpha: {\n                      fromAlpha: state.params.param1,\n                      toAlpha: state.params.param2,\n                      duration: state.duration,\n                      repeatMode: state.repeatMode,\n                      fillMode: state.fillMode,\n                      repeatCount: state.repeatCount,\n                      interpolator: state.interpolator,\n                    },\n                  },\n                }));\n                ToastAndroid.show(`alpha set`, ToastAndroid.SHORT);\n              }}\n              title=\"Set Alpha\"\n            />\n          </View>\n        </View>\n        <View style={[styles.flexRow]}>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                this.setState((state) => ({\n                  animation: {\n                    ...state.animation,\n                    scale: {\n                      fromX: state.params.param1,\n                      toX: state.params.param2,\n                      fromY: state.params.param3,\n                      toY: state.params.param4,\n                      duration: state.duration,\n                      repeatMode: state.repeatMode,\n                      fillMode: state.fillMode,\n                      repeatCount: state.repeatCount,\n                      interpolator: state.interpolator,\n                    },\n                  },\n                }));\n                ToastAndroid.show(`scale set`, ToastAndroid.SHORT);\n              }}\n              title=\"Set Scale\"\n            />\n          </View>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                this.setState((state) => ({\n                  animation: {\n                    ...state.animation,\n                    translate: {\n                      latitude: state.params.param1,\n                      longitude: state.params.param2,\n                      duration: state.duration,\n                      repeatMode: state.repeatMode,\n                      fillMode: state.fillMode,\n                      repeatCount: state.repeatCount,\n                      interpolator: state.interpolator,\n                    },\n                  },\n                }));\n                ToastAndroid.show(`translate set`, ToastAndroid.SHORT);\n              }}\n              title=\"Set Translate\"\n            />\n          </View>\n        </View>\n        <View style={[styles.flexRow]}>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                planeRef.setAnimation(this.state.animation);\n                planeRef.startAnimation();\n              }}\n              title=\"Animate\"\n              color=\"#841584\"\n            />\n          </View>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                this.setState({ animation: {} });\n              }}\n              title=\"Clear\"\n              color=\"red\"\n            />\n          </View>\n          <View style={[styles.flex1, styles.m2]}>\n            <Button\n              onPress={() => {\n                planeRef.setAnimation(exampleAnimation, defaultOptions);\n                planeRef.startAnimation();\n              }}\n              title=\"FLY PLANE\"\n              color=\"orange\"\n            />\n          </View>\n        </View>\n      </View>\n    );\n  };\n\n  render() {\n    return (\n      <SafeAreaView>\n        <HMSMap\n          onMapLongClick={(e) => {\n            console.log(\"HMSMap onMapLongClick, result\", e.nativeEvent);\n            const coordinate = e.nativeEvent.coordinate;\n            this.setState((state) => ({\n              additionalMarkers: [\n                ...state.additionalMarkers,\n                {\n                  coordinate: coordinate,\n                  id: count++,\n                },\n              ],\n            }));\n          }}\n          zoomControlsEnabled\n          markerClustering={this.state.markerClustering}\n          compassEnabled\n          markerClusterColor={[255, 230, 130, 0]}\n          markerClusterTextColor={[200, 0, 0, 0]}\n          markerClusterIcon={{\n            asset: \"ic_launcher.png\",\n          }}\n          style={styles.height200}\n          mapType={MapTypes.NORMAL}\n          camera={{\n            target: {\n              latitude: 41.02155220194891,\n              longitude: 29.0037998967586,\n            },\n            zoom: 12,\n          }}\n        >\n          <HMSMarker\n            title=\"Maiden's Tower\"\n            snippet=\"This is a default marker\"\n            rotation={this.state.rotation}\n            draggable\n            onClick={() => {\n              this.setState((state) => ({\n                rotation: (state.rotation + 30) % 360,\n              }));\n            }}\n            defaultActionOnClick={this.state.defaultActionOnClick}\n            coordinate={{\n              latitude: 41.02155220194891,\n              longitude: 29.0037998967586,\n            }}\n          />\n          <HMSMarker\n            icon={{ hue: Hue.ORANGE }}\n            title=\"Ayasofia\"\n            snippet=\"This is a colored default marker\"\n            clusterable\n            coordinate={{\n              latitude: 41.008699470240245,\n              longitude: 28.98015976031702,\n            }}\n          />\n          <HMSMarker\n            icon={{ hue: Hue.MAGENTA }}\n            title=\"Sultan Ahmet\"\n            snippet=\"This is a colored default marker\"\n            clusterable\n            coordinate={{\n              latitude: 41.00542331543524,\n              longitude: 28.97691153026857,\n            }}\n          />\n          <HMSMarker\n            icon={{ hue: Hue.AZURE }}\n            title=\"Topkapı Museum\"\n            snippet=\"This is a colored default marker\"\n            clusterable\n            coordinate={{\n              latitude: 41.01223774385668,\n              longitude: 28.983498212850378,\n            }}\n          />\n          <HMSMarker\n            icon={{ hue: Hue.ROSE }}\n            title=\"Column of Constantine\"\n            snippet=\"This is a colored default marker\"\n            clusterable\n            coordinate={{\n              latitude: 41.0087711,\n              longitude: 28.97133142052397,\n            }}\n          />\n          <HMSMarker\n            icon={{ hue: Hue.CYAN }}\n            title=\"Gülhane Parkı\"\n            snippet=\"This is a colored default marker\"\n            clusterable\n            coordinate={{\n              latitude: 41.01358808151719,\n              longitude: 28.98213804657346,\n            }}\n          />\n          <HMSMarker\n            icon={{\n              uri: Image.resolveAssetSource(\n                require(\"../assets/galata-tower.png\")\n              ).uri,\n              width: 140,\n              height: 150,\n            }}\n            clickable={true}\n            coordinate={{\n              latitude: 41.02564844393837,\n              longitude: 28.974169719709817,\n            }}\n          >\n            {this.CustomInfoWindow()}\n          </HMSMarker>\n          <HMSMarker\n            title=\"Validebağ Korusu\"\n            snippet=\"This is custom icon from url.\"\n            icon={{\n              uri:\n                \"https://www-file.huawei.com/-/media/corp/home/image/logo_400x200.png\",\n              width: 200,\n              height: 100,\n            }}\n            coordinate={{\n              latitude: 41.01432234547145,\n              longitude: 29.046580953343877,\n            }}\n          />\n          <HMSMarker\n            ref={(e) => {\n              planeRef = e;\n            }}\n            onAnimationStart={(e) =>\n              console.log(`Animation ${e.nativeEvent.type} Started`)\n            }\n            onAnimationEnd={(e) =>\n              console.log(\n                `Animation ${e.nativeEvent.type} Ended in ${e.nativeEvent.duration} ms`\n              )\n            }\n            icon={{\n              asset: \"plane.png\",\n            }}\n            coordinate={{\n              latitude: 41.02664844393837,\n              longitude: 28.984169719709817,\n            }}\n          />\n          {this.renderAdditionalMarkers()}\n        </HMSMap>\n        <ScrollView style={styles.height450}>\n          <View style={[styles.flexRow]}>\n            <View\n              style={[styles.flexRow, { alignItems: \"center\", padding: 4 }]}\n            >\n              <Switch\n                value={this.state.defaultActionOnClick}\n                onValueChange={() => {\n                  this.setState((state) => ({\n                    defaultActionOnClick: !state.defaultActionOnClick,\n                  }));\n                }}\n              />\n              <View style={styles.width100}>\n                <Text>Default Action on Click</Text>\n              </View>\n            </View>\n            <View\n              style={[styles.flexRow, { alignItems: \"center\", padding: 4 }]}\n            >\n              <Switch\n                value={this.state.markerClustering}\n                onValueChange={() => {\n                  this.setState((state) => ({\n                    markerClustering: !state.markerClustering,\n                  }));\n                }}\n              />\n              <View style={styles.width100}>\n                <Text>Marker Clustering</Text>\n              </View>\n            </View>\n          </View>\n          <View style={styles.p4}>\n            <Text>Animate Plane</Text>\n            {this.TextFieldView()}\n          </View>\n        </ScrollView>\n      </SafeAreaView>\n    );\n  }\n}\n\nconst customStyles = StyleSheet.create({\n  viewHeight: { height: 400 },\n  flexMargin: { flex: 1, margin: 1 },\n  container: {\n    backgroundColor: \"rgb(49,49,49)\",\n    borderRadius: 6,\n    paddingHorizontal: 14,\n    paddingVertical: 6,\n  },\n  font11: { fontSize: 11 },\n  font13: { fontSize: 13 },\n  transparent: { backgroundColor: \"transparent\" },\n  infoText: { color: \"#fff\", fontFamily: \"Muli\", fontSize: 12 },\n  infoWindow: {\n    width: 0,\n    height: 0,\n    backgroundColor: \"transparent\",\n    borderStyle: \"solid\",\n    borderLeftWidth: 8,\n    borderRightWidth: 8,\n    borderBottomWidth: 16,\n    borderLeftColor: \"transparent\",\n    borderRightColor: \"transparent\",\n    borderBottomColor: \"rgb(49,49,49)\",\n    alignSelf: \"center\",\n    transform: [{ rotate: \"180deg\" }],\n  },\n});\n"
  },
  {
    "path": "react-native-hms-map/example/styles/styles.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n  flexRow: { flexDirection: \"row\" },\n  flexCol: { flexDirection: \"column\" },\n  flex1: { flex: 1 },\n  flex2: { flex: 2 },\n  width30: { width: 30 },\n  width40: { width: 40 },\n  width50: { width: 50 },\n  width100: { width: 100 },\n  width125: { width: 125 },\n  height200: { height: 200 },\n  height250: { height: 250 },\n  height300: { height: 300 },\n  height400: { height: 400 },\n  height450: { height: 450 },\n  fullHeight: { height: \"100%\" },\n  mapView: { height: 300, backgroundColor: \"red\" },\n  snapView: { height: 200, backgroundColor: \"yellow\" },\n  infoWindow: { backgroundColor: \"white\", alignSelf: \"baseline\" },\n  container: { flexDirection: \"column\", alignSelf: \"flex-start\" },\n  textInput: {\n    flex: 1,\n    borderColor: \"gray\",\n    borderWidth: 1,\n    margin: 4,\n  },\n  textBold: { fontWeight: \"bold\" },\n  p4: { padding: 4 },\n  p8: { padding: 8 },\n  p16: { padding: 16 },\n  m1: { margin: 1 },\n  m2: { margin: 2 },\n  m4: { margin: 4 },\n  m8: { margin: 8 },\n  m16: { margin: 16 },\n});\n"
  },
  {
    "path": "react-native-hms-map/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-map\",\n  \"title\": \"React Native Hms Map\",\n  \"description\": \"React Native HMS Map Kit\",\n  \"version\": \"6.11.2-304\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-map\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-map\",\n    \"huawei-map\",\n    \"hms-map\",\n    \"map\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"prop-types\": \"^15.7.2\",\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-map/src/CircleView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { exact, oneOf, number, arrayOf, bool, func, oneOfType } from \"prop-types\";\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager\n} from \"react-native\";\nimport { PatternItemTypes } from \"./constants\";\n\nclass HMSCircleView extends Component {\n  constructor() {\n    super();\n  }\n  startAnimation = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.circleView),\n      UIManager.getViewManagerConfig(\"HMSCircleView\").Commands.startAnimation,\n      null,\n    );\n  };\n\n  setAnimation = (animation, defaultParams) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.circleView),\n      UIManager.getViewManagerConfig(\"HMSCircleView\").Commands.setAnimation,\n      [animation, defaultParams],\n    );\n  };\n\n  cleanAnimation = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.circleView),\n      UIManager.getViewManagerConfig(\"HMSCircleView\").Commands.cleanAnimation,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <RNHMSCircleView {...this.props} ref={(el) => (this.circleView = el)} />\n    );\n  }\n}\n\nHMSCircleView.propTypes = {\n  center: exact({\n    latitude: number.isRequired,\n    longitude: number.isRequired,\n  }).isRequired,\n  radius: number.isRequired,\n  clickable: bool,\n  fillColor: oneOfType([number, arrayOf(number)]),\n  strokeColor: oneOfType([number, arrayOf(number)]),\n  strokeWidth: number,\n  strokePattern: arrayOf(\n    exact({\n      type: oneOf(Object.values(PatternItemTypes)).isRequired,\n      length: number,\n    }),\n  ),\n  visible: bool,\n  zIndex: number,\n  onClick: func,\n  onAnimationStart: func,\n  onAnimationEnd: func,\n};\n\nconst RNHMSCircleView = requireNativeComponent(\n  \"HMSCircleView\",\n  HMSCircleView,\n);\n\nexport default HMSCircleView;\n"
  },
  {
    "path": "react-native-hms-map/src/GroundOverlayView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  string,\n  exact,\n  number,\n  oneOfType,\n  bool,\n  func,\n  array,\n  arrayOf,\n} from \"prop-types\";\nimport React, { Component } from \"react\";\nimport { requireNativeComponent } from \"react-native\";\n\nclass HMSGroundOverlayView extends Component {\n  constructor() {\n    super();\n  }\n\n  render() {\n    return (\n      <RNHMSGroundOverlayView\n        {...this.props}\n        ref={(el) => (this.groundOverlayView = el)}\n      />\n    );\n  }\n}\n\nHMSGroundOverlayView.propTypes = {\n  image: exact({\n    uri: string,\n    hue: number,\n    asset: string,\n    file: string,\n    path: string,\n  }).isRequired,\n  coordinate: oneOfType([\n    exact({\n      latitude: number.isRequired,\n      longitude: number.isRequired,\n      height: number.isRequired,\n      width: number.isRequired,\n    }),\n    arrayOf(\n      exact({\n        latitude: number.isRequired,\n        longitude: number.isRequired,\n      }),\n    ),\n  ]).isRequired,\n  anchor: array,\n  bearing: number,\n  clickable: bool,\n  transparency: number,\n  visible: bool,\n  zIndex: number,\n  onClick: func,\n};\n\nconst RNHMSGroundOverlayView = requireNativeComponent(\n  \"HMSGroundOverlayView\",\n  HMSGroundOverlayView,\n);\n\nexport default HMSGroundOverlayView;\n"
  },
  {
    "path": "react-native-hms-map/src/HeatMapView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport { requireNativeComponent } from \"react-native\";\n\nclass HMSHeatMapView extends Component {\n    constructor() {\n        super();\n    }\n\n    render() {\n        return (\n            <RNHMSHeatMapView\n                {...this.props}\n                ref={(el) => (this.heatmapview = el)}\n            />\n        );\n    }\n}\n\nconst RNHMSHeatMapView = requireNativeComponent(\n    \"HMSHeatMapView\",\n    HMSHeatMapView,\n);\n\nexport default HMSHeatMapView;"
  },
  {
    "path": "react-native-hms-map/src/InfoWindowView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from \"react\";\nimport { requireNativeComponent } from \"react-native\";\n\nclass HMSInfoWindowView extends Component {\n  constructor() {\n    super();\n  }\n\n  render() {\n    return (\n      <RNHMSInfoWindowView\n        {...this.props}\n        ref={(el) => (this.infoWindowView = el)}\n        style={{\n          ...this.props.style,\n          alignSelf: \"baseline\",\n        }} />\n    );\n  }\n}\n\nHMSInfoWindowView.defaultProps = {};\n\nconst RNHMSInfoWindowView = requireNativeComponent(\n  \"HMSInfoWindowView\",\n  HMSInfoWindowView,\n);\n\nexport default HMSInfoWindowView;\n"
  },
  {
    "path": "react-native-hms-map/src/MapView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { func } from \"prop-types\";\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager,\n  NativeModules,\n} from \"react-native\";\n\nconst { HMSMapViewModule } = NativeModules;\n\nclass HMSMapView extends Component {\n  constructor(props) {\n    super();\n    this.state = {\n      isMapReady: false,\n    };\n\n    if (props.liteMode)\n      HMSMapViewModule.setLiteMod(props.liteMode);\n    else\n      HMSMapViewModule.setLiteMod(false);\n  }\n\n  getHuaweiMapInfo = () => {\n    return HMSMapViewModule.getHuaweiMapInfo(findNodeHandle(this.mapView));\n  };\n\n  getScalePerPixel = () => {\n    return HMSMapViewModule.getScalePerPixel(findNodeHandle(this.mapView));\n  };\n\n  getLayerInfo = (layer) => {\n    return HMSMapViewModule.getLayerInfo(findNodeHandle(layer));\n  };\n\n  getLayerOptionsInfo = (layer) => {\n    return HMSMapViewModule.getLayerOptionsInfo(findNodeHandle(layer));\n  };\n\n  getPointFromCoordinate = (coordinate) => {\n    return HMSMapViewModule.getPointFromCoordinate(\n      findNodeHandle(this.mapView),\n      coordinate,\n    );\n  };\n\n  getCoordinateFromPoint = (point) => {\n    return HMSMapViewModule.getCoordinateFromPoint(\n      findNodeHandle(this.mapView),\n      point,\n    );\n  };\n\n  getDistance = (from, to) => {\n    return HMSMapViewModule.getDistance(from, to);\n  };\n\n  enableLogger = () => {\n    HMSMapViewModule.enableLogger();\n  };\n\n  disableLogger = () => {\n    HMSMapViewModule.disableLogger();\n  };\n\n  clear = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.clear,\n      null,\n    );\n  };\n\n  takeSnapshot = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.takeSnapshot,\n      null,\n    );\n  };\n\n  resetMinMaxZoomPreference = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands\n        .resetMinMaxZoomPreference,\n      null,\n    );\n  };\n\n  stopAnimation = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.stopAnimation,\n      null,\n    );\n  };\n\n  setCameraPosition = (cameraPosition) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.setCameraPosition,\n      [cameraPosition],\n    );\n  };\n\n  setCoordinates = (latLng, zoom) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.setCoordinates,\n      [latLng, zoom],\n    );\n  };\n\n  setBounds = (latLngBounds, padding, width, height) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.setBounds,\n      [latLngBounds, padding, width, height],\n    );\n  };\n\n  scrollBy = (x, y) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.scrollBy,\n      [x, y],\n    );\n  };\n\n  zoomBy = (amount, focus) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.zoomBy,\n      [amount, focus],\n    );\n  };\n\n  zoomTo = (zoom) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.zoomTo,\n      [zoom],\n    );\n  };\n\n  zoomIn = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.zoomIn,\n      null,\n    );\n  };\n\n  zoomOut = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.mapView),\n      UIManager.getViewManagerConfig(\"HMSMapView\").Commands.zoomOut,\n      null,\n    );\n  };\n\n  render() {\n    return this.state.isMapReady ? (\n      <RNHMSMapView {...this.props} ref={(el) => (this.mapView = el)} />\n    ) : (\n      <RNHMSMapView\n        style={this.props.style}\n        onMapReady={(e) => {\n          if (typeof this.props.onMapReady === \"function\") {\n            this.props.onMapReady(e);\n          }\n          this.setState({ isMapReady: true });\n        }}\n        ref={(el) => (this.mapView = el)}\n      />\n    );\n  }\n}\nHMSMapView.defaultProps = {\n  style: { height: \"100%\" },\n};\n\nHMSMapView.propTypes = {\n  onMapReady: func,\n  onCameraUpdateFinished: func,\n  onCameraUpdateCanceled: func,\n  onCameraIdle: func,\n  onCameraMoveCanceled: func,\n  onCameraMove: func,\n  onCameraMoveStarted: func,\n  onMapClick: func,\n  onMapLoaded: func,\n  onMapLongClick: func,\n  onMyLocationButtonClick: func,\n  onMyLocationClick: func,\n  onPoiClick: func,\n  onSnapshotReady: func,\n};\n\nconst RNHMSMapView = requireNativeComponent(\"HMSMapView\", HMSMapView);\n\nHMSMapView.module = HMSMapViewModule;\n\nexport default HMSMapView;\n"
  },
  {
    "path": "react-native-hms-map/src/MarkerView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { string, exact, number, array, bool, func } from \"prop-types\";\nimport React, { Component } from \"react\";\nimport {\n  findNodeHandle,\n  requireNativeComponent,\n  UIManager\n} from \"react-native\";\n\nclass HMSMarkerView extends Component {\n  constructor() {\n    super();\n  }\n\n  showInfoWindow = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.markerView),\n      UIManager.getViewManagerConfig(\"HMSMarkerView\").Commands.showInfoWindow,\n      null,\n    );\n  };\n\n  hideInfoWindow = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.markerView),\n      UIManager.getViewManagerConfig(\"HMSMarkerView\").Commands.hideInfoWindow,\n      null,\n    );\n  };\n\n  startAnimation = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.markerView),\n      UIManager.getViewManagerConfig(\"HMSMarkerView\").Commands.startAnimation,\n      null,\n    );\n  };\n\n  setAnimation = (animation, defaultParams) => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.markerView),\n      UIManager.getViewManagerConfig(\"HMSMarkerView\").Commands.setAnimation,\n      [animation, defaultParams],\n    );\n  };\n\n  cleanAnimation = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.markerView),\n      UIManager.getViewManagerConfig(\"HMSMarkerView\").Commands.cleanAnimation,\n      null,\n    );\n  };\n\n  render() {\n    return (\n      <RNHMSMarkerView {...this.props} ref={(el) => (this.markerView = el)} />\n    );\n  }\n}\n\nHMSMarkerView.propTypes = {\n  coordinate: exact({\n    latitude: number.isRequired,\n    longitude: number.isRequired,\n  }).isRequired,\n  draggable: bool,\n  icon: exact({\n    hue: number,\n    asset: string,\n    file: string,\n    path: string,\n    uri: string,\n    width: number,\n    height: number,\n  }),\n  alpha: number,\n  flat: bool,\n  markerAnchor: array,\n  infoWindowAnchor: array,\n  rotation: number,\n  title: string,\n  snippet: string,\n  visible: bool,\n  zIndex: number,\n  clusterable: bool,\n  defaultActionOnClick: bool,\n  onClick: func,\n  clickable:bool,\n  onDragStart: func,\n  onDrag: func,\n  onDragEnd: func,\n  onInfoWindowClick: func,\n  onInfoWindowClose: func,\n  onInfoWindowLongClick: func,\n  onAnimationStart: func,\n  onAnimationEnd: func,\n};\n\nconst RNHMSMarkerView = requireNativeComponent(\n  \"HMSMarkerView\",\n  HMSMarkerView,\n);\n\nexport default HMSMarkerView;\n"
  },
  {
    "path": "react-native-hms-map/src/PolygonView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { exact, oneOf, number, arrayOf, bool, func, oneOfType } from \"prop-types\";\nimport React, { Component } from \"react\";\nimport { requireNativeComponent } from \"react-native\";\nimport { PatternItemTypes } from \"./constants\";\n\nclass HMSPolygonView extends Component {\n  constructor() {\n    super();\n  }\n\n  render() {\n    return (\n      <RNHMSPolygonView {...this.props} ref={(el) => (this.polygonView = el)} />\n    );\n  }\n}\n\nHMSPolygonView.propTypes = {\n  points: arrayOf(\n    exact({\n      latitude: number.isRequired,\n      longitude: number.isRequired,\n    }),\n  ),\n  holes: arrayOf(\n    arrayOf(\n      exact({\n        latitude: number.isRequired,\n        longitude: number.isRequired,\n      }),\n    ),\n  ),\n  clickable: bool,\n  fillColor: oneOfType([number, arrayOf(number)]),\n  geodesic: bool,\n  strokeColor: oneOfType([number, arrayOf(number)]),\n  strokeJointType: number,\n  strokeWidth: number,\n  strokePattern: arrayOf(\n    exact({\n      type: oneOf(Object.values(PatternItemTypes)).isRequired,\n      length: number,\n    }).isRequired,\n  ),\n  visible: bool,\n  zIndex: number,\n  onClick: func,\n};\n\nconst RNHMSPolygonView = requireNativeComponent(\n  \"HMSPolygonView\",\n  HMSPolygonView,\n);\n\nexport default HMSPolygonView;\n"
  },
  {
    "path": "react-native-hms-map/src/PolylineView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { string, exact, oneOf, number, arrayOf, bool, func, oneOfType } from \"prop-types\";\nimport React, { Component } from \"react\";\nimport { requireNativeComponent } from \"react-native\";\nimport { PatternItemTypes, CapTypes, JointTypes } from \"./constants\";\n\nclass HMSPolylineView extends Component {\n  constructor() {\n    super();\n  }\n\n  render() {\n    return (\n      <RNHMSPolylineView\n        {...this.props}\n        ref={(el) => (this.polylineView = el)}\n      />\n    );\n  }\n}\n\nHMSPolylineView.propTypes = {\n  points: arrayOf(\n    exact({\n      latitude: number.isRequired,\n      longitude: number.isRequired,\n    }),\n  ),\n  ColorValues: arrayOf(number),\n  gradient:bool,\n  clickable: bool,\n  geodesic: bool,\n  color: oneOfType([number, arrayOf(number)]),\n  jointType: oneOf(Object.values(JointTypes)),\n  pattern: arrayOf(\n    exact({\n      type: oneOf(Object.values(PatternItemTypes)).isRequired,\n      length: number,\n    }),\n  ),\n  startCap: exact({\n    type: oneOf(Object.values(CapTypes)).isRequired,\n    uri: string,\n    hue: number,\n    asset: string,\n    file: string,\n    path: string,\n    refWidth: number,\n  }),\n  endCap: exact({\n    type: oneOf(Object.values(CapTypes)).isRequired,\n    uri: string,\n    hue: number,\n    asset: string,\n    file: string,\n    path: string,\n    refWidth: number,\n  }),\n  visible: bool,\n  width: number,\n  zIndex: number,\n  onClick: func,\n};\n\nconst RNHMSPolylineView = requireNativeComponent(\n  \"HMSPolylineView\",\n  HMSPolylineView,\n);\n\nexport default HMSPolylineView;\n"
  },
  {
    "path": "react-native-hms-map/src/TileOverlayView.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { number, bool, exact, string, oneOfType, arrayOf } from 'prop-types';\nimport React, { Component } from 'react';\nimport { findNodeHandle, requireNativeComponent, UIManager } from 'react-native';\n\nclass HMSTileOverlayView extends Component {\n  constructor() {\n    super();\n  }\n\n  clearTileCache = () => {\n    UIManager.dispatchViewManagerCommand(\n      findNodeHandle(this.tileOverlayView),\n      UIManager.getViewManagerConfig('HMSTileOverlayView').Commands.clearTileCache,\n      null\n    );\n  };\n\n  render() {\n    return <RNHMSTileOverlayView {...this.props} ref={(el) => (this.tileOverlayView = el)} />;\n  }\n}\n\nHMSTileOverlayView.propTypes = {\n  tileProvider: oneOfType([\n    exact({\n      url: string.isRequired,\n      zoom: arrayOf(number),\n      width: number,\n      height: number,\n    }),\n    arrayOf(\n      exact({\n        asset: string.isRequired,\n        x: number.isRequired,\n        y: number.isRequired,\n        zoom: number.isRequired,\n        width: number,\n        height: number,\n      })\n    ),\n  ]).isRequired,\n  fadeIn: bool,\n  transparency: number,\n  visible: bool,\n  zIndex: number,\n};\n\nconst RNHMSTileOverlayView = requireNativeComponent('HMSTileOverlayView', HMSTileOverlayView);\n\nexport default HMSTileOverlayView;\n"
  },
  {
    "path": "react-native-hms-map/src/constants.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const PatternItemTypes = {\n  DASH: 0,\n  DOT: 1,\n  GAP: 2,\n};\n\nexport const CapTypes = {\n  BUTT: 0,\n  SQUARE: 1,\n  ROUND: 2,\n  CUSTOM: 3,\n};\n\nexport const JointTypes = {\n  DEFAULT: 0,\n  BEVEL: 1,\n  ROUND: 2,\n};\n\nexport const MapTypes = {\n  NONE: 0,\n  NORMAL: 1,\n  SATELLITE: 2,\n  TERRAIN: 3,\n  HYBRID: 4,\n};\n\nexport const Reason = {\n  GESTURE: 1,\n  API_ANIMATION: 2,\n  DEVELOPER_ANIMATION: 3,\n};\n\nexport const FillMode = { FORWARDS: 0, BACKWARDS: 1 };\n\nexport const RepeatMode = { RESTART: 1, REVERSE: 2 };\n\nexport const Interpolator = {\n  LINEAR: 0,\n  ACCELERATE: 1,\n  ANTICIPATE: 2,\n  BOUNCE: 3,\n  DECELERATE: 4,\n  OVERSHOOT: 5,\n  ACCELERATE_DECELERATE: 6,\n  FAST_OUT_LINEAR_IN: 7,\n  FAST_OUT_SLOW_IN: 8,\n  LINEAR_OUT_SLOW_IN: 9,\n};\n\nexport const Hue = {\n  RED: 0,\n  ORANGE: 30,\n  YELLOW: 60,\n  GREEN: 120,\n  CYAN: 180,\n  AZURE: 210,\n  BLUE: 240,\n  VIOLET: 270,\n  MAGENTA: 300,\n  ROSE: 330,\n};\n\nexport const Gravity = {\n  TOP: 48,\n  BOTTOM: 80,\n  START: 8388611,\n  END: 8388613\n};\n\nexport const RadiusUnit = {\n  PIXEL: \"PIXEL\",\n  METER: \"METER\"\n};\n"
  },
  {
    "path": "react-native-hms-map/src/index.d.ts",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-map\" {\n  import * as React from \"react\";\n  import { NativeSyntheticEvent, ViewProps } from \"react-native\";\n\n  export enum PatternItemTypes {\n\n    /**\n     * Dash used in the stroke pattern for a polyline or the outline of a polygon or circle.\n     */\n    DASH = 0,\n\n    /**\n     * Dot used in the stroke pattern for a polyline or the outline of a polygon or circle.\n     */\n    DOT = 1,\n\n    /**\n     * Gap used in the stroke pattern for a polyline or the outline of a polygon or circle.\n     */\n    GAP = 2\n  }\n   type PatternItemEnum = `${Extract<PatternItemTypes, number>}` extends `${infer N extends number}` ? N : never;\n  export enum CapTypes {\n\n    /**\n     * Defines a cap that is squared off exactly at the start or end vertex of a polyline.\n     */\n    BUTT = 0,\n\n    /**\n     * Sets the start or end vertex of a polyline to the square type.\n     */\n    SQUARE = 1,\n\n    /**\n     * Represents a semicircle with a radius equal to a half of the stroke width. The semicircle will be centered at the start or end vertex of a polyline.\n     */\n    ROUND = 2,\n\n    /**\n     * Customizes the cap style for a polyline by using custom bitmap image and width.\n     */\n    CUSTOM = 3\n  }\n  \n  /**\n   * Joint types for a polyline or the outline of a polygon.\n   */\n  export enum JointTypes {\n\n    /**\n     * Default type.\n     */\n    DEFAULT = 0,\n\n    /**\n     * Flat bevel.\n     */\n    BEVEL = 1,\n\n    /**\n     * Round.\n     */\n    ROUND = 2\n  }\n  \n  /**\n   * Type of the map.\n   */\n  export enum MapTypes {\n\n    /**\n     * Empty grid map.\n     */\n    NONE = 0,\n\n    /**\n     * Basic map.\n     */\n    NORMAL = 1,\n\n    /**\n     * Terrain map.\n     */\n    TERRAIN = 3\n  }\n  \n  export enum Reason {\n\n    /**\n     * Animation started in response to user gestures on a map.\n     */\n    GESTURE = 1,\n\n    /**\n     * Non-gesture animation started in response to a user operation.\n     */\n    API_ANIMATION = 2,\n\n    /**\n     * Animation that you started.\n     */\n    DEVELOPER_ANIMATION = 3\n  }\n\n  export enum RadiusUnit {\n\n    /**\n     * Unit: pixel.\n     */\n    PIXEL = \"PIXEL\",\n\n    /**\n     * Unit: meter.\n     */\n    METER = \"METER\"\n  }\n  \n  export enum FillMode {\n    \n    /**\n     * The last frame is displayed after the animation ends.\n     */\n    FORWARDS = 0,\n\n    /**\n     * The first frame is displayed after the animation ends.\n     */\n    BACKWARDS = 1 \n  }\n\n  type FillModeEnum = `${Extract<FillMode, number>}` extends `${infer N extends number}` ? N : never;\n  \n  export enum RepeatMode { \n\n    /**\n     * The animation is replayed from the start after it ends.\n     */\n    RESTART = 1,\n\n    /**\n     * The animation is replayed from the end in reverse order after it ends.\n     */\n    REVERSE = 2\n  }\n\n  type RepeatModeEnum = `${Extract<RepeatMode, number>}` extends `${infer N extends number}` ? N : never;\n  \n  export enum Interpolator {\n    LINEAR = 0,\n    ACCELERATE = 1,\n    ANTICIPATE = 2,\n    BOUNCE = 3,\n    DECELERATE = 4,\n    OVERSHOOT = 5,\n    ACCELERATE_DECELERATE = 6,\n    FAST_OUT_LINEAR_IN = 7,\n    FAST_OUT_SLOW_IN = 8,\n    LINEAR_OUT_SLOW_IN = 9,\n  }\n\n  type InterpolatorEnum = `${Extract<Interpolator, number>}` extends `${infer N extends number}` ? N : never;\n  \n  export enum Hue {\n    RED = 0,\n    ORANGE = 30,\n    YELLOW = 60,\n    GREEN = 120,\n    CYAN = 180,\n    AZURE = 210,\n    BLUE = 240,\n    VIOLET = 270,\n    MAGENTA = 300,\n    ROSE = 330\n  }\n\n  type HueEnum = `${Extract<Hue, number>}` extends `${infer N extends number}` ? N : never;\n  \n  export enum Gravity {\n    TOP = 48,\n    BOTTOM = 80,\n    START = 8388611,\n    END = 8388613\n  }\n\n  /**\n   *  Sets the padding between the map camera region edges and the logo.\n   */\n  export interface LogoPadding {\n    /**\n     *  Distance between the logo and the left edge of the map, in pixels. The RTL mode is supported. The value must be greater than or equal to 0.\n     */\n    paddingStart?: number;\n\n    /**\n     *  Distance between the logo and the top edge of the map, in pixels. The RTL mode is supported. The value must be greater than or equal to 0.\n     */\n    paddingTop?: number;\n\n    /**\n     *  Distance between the logo and the right edge of the map, in pixels. The RTL mode is supported. The value must be greater than or equal to 0.\n     */\n    paddingEnd?: number;\n\n    /**\n     *  Distance between the logo and the bottom edge of the map, in pixels. The RTL mode is supported. The value must be greater than or equal to 0.\n     */\n    paddingBottom?: number;\n  }\n\n  /**\n   *  Defines the longitude and latitude, in degrees.\n   */\n  export interface LatLng {\n    /**\n     *  Latitude. The value ranges from –90 to 90.\n     */\n    latitude: number;\n\n    /**\n     *  Longitude. The value ranges from –180 to 180 (excluded).\n     */\n    longitude: number;\n  }\n\n  /**\n   *  A rectangular area using a pair of longitude and latitude.\n   */\n  export interface LatLngBounds {\n    /**\n     *  Northeast corner of the bound.\n     */\n    northeast: LatLng;\n\n    /**\n     *  Southwest corner of the bound.\n     */\n    southwest: LatLng;\n  }\n\n  /**\n   *  Contains information of UI and gesture controls of the map.\n   */\n  export interface UiSettings {\n    /**\n     *  Whether the compass is enabled for the map.\n     */\n    isCompassEnabled: boolean;\n\n    /**\n     *  Whether the my-location icon is enabled for the map.\n     */\n    isMyLocationButtonEnabled: boolean;\n\n    /**\n     *  Whether rotate gestures are enabled for the map.\n     */\n    isRotateGesturesEnabled: boolean;\n\n    /**\n     *  Whether scroll gestures are enabled for the map.\n     */\n    isScrollGesturesEnabled: boolean;\n\n    /**\n     *  Whether scroll gestures are enabled during rotation or zooming.\n     */\n    isScrollGesturesEnabledDuringRotateOrZoom: boolean;\n\n    /**\n     *  Whether tilt gestures are enabled for the map.\n     */\n    isTiltGesturesEnabled: boolean;\n\n    /**\n     *  Whether zoom controls are enabled.\n     */\n    isZoomControlsEnabled: boolean;\n\n    /**\n     *  Whether zoom gestures are enabled for the map.\n     */\n    isZoomGesturesEnabled: boolean;\n  }\n\n  /**\n   *  Contains all camera position parameters.\n   */\n  export interface CameraPosition {\n    /**\n     *  Longitude and latitude of the location that the camera is pointing at.\n     */\n    target: LatLng;\n\n    /**\n     *  Zoom level near the center of the screen.\n     */\n    zoom?: number;\n\n    /**\n     *  Angle of the camera from the nadir (directly facing the Earth's surface).\n     */\n    tilt?: number;\n\n    /**\n     *  Direction that the camera is pointing in.\n     */\n    bearing?: number;\n  }\n\n  /**\n   *  It contains four points that define a tetragon visible in the\n   *  camera of a map. The tetragon may be a trapezoid instead of\n   *  rectangle because the camera may tilt. If the camera is\n   *  directly over the center of the visible region, the shape is\n   *  rectangular. If the camera tilts, the shape will be a trapezoid\n   *  whose smallest side is closest to the point of view.\n   */\n  export interface VisibleRegion {\n    /**\n     *  Far left corner of the camera..\n     */\n    farLeft: LatLng;\n\n    /**\n     *  Far right corner of the camera.\n     */\n    farRight: LatLng;\n\n    /**\n     *  Near left corner of the camera.\n     */\n    nearLeft: LatLng;\n\n    /**\n     *  Near right corner of the camera.\n     */\n    nearRight: LatLng;\n\n    /**\n     *  Smallest bounding box that includes the visible region.\n     */\n    latLngBounds: LatLngBounds;\n  }\n\n  /**\n   *  Contains map information.\n   */\n  export interface HuaweiMap {\n    /**\n     *  The current position of the camera.\n     */\n    cameraPosition: CameraPosition;\n\n    /**\n     *  The current map type.\n     */\n    mapType: number;\n\n    /**\n     *  The maximum zoom level at the current camera position.\n     */\n    maxZoomLevel: number;\n\n    /**\n     *  The minimum zoom level at the current camera position.\n     */\n    minZoomLevel: number;\n\n    /**\n     *  The current visible region on the map.\n     */\n    visibleRegion: VisibleRegion;\n\n    /**\n     *  The current UI settings.\n     */\n    uiSettings: UiSettings;\n\n    /**\n     *  Whether the 3D building layer is enabled for a map.\n     */\n    isBuildingsEnabled: boolean;\n\n    /**\n     *  Whether my location layer is enabled for a map.\n     */\n    isMyLocationEnabled: boolean;\n\n    /**\n     *  Checks whether the dark mode is enabled.\n     */\n    isDark: boolean;\n  }\n\n  /**\n   *  Coordinates of a location on the screen, in pixels.\n   */\n  export interface Point {\n    x: number;\n    y: number;\n  }\n\n  /**\n   *  Contains attributes about the POI.\n   */\n  export interface PointOfInterest {\n    /**\n     *  Position of the POI.\n     */\n    latLng: LatLng;\n\n    /**\n     *  Name of the POI.\n     */\n    name: string;\n\n    /**\n     *  Place id of the POI.\n     */\n    placeId: string;\n  }\n\n  /**\n   *  Contains information of clicked(or long-clicked) place on the map.\n   */\n  export interface ProjectionOnLatLng {\n    /**\n     *  Point of the place.\n     */\n    point: Point;\n\n    /**\n     *  Coordinate of the place.\n     */\n    coordinate: LatLng;\n\n    /**\n     *  The current visible region on the map.\n     */\n    visibleRegion: VisibleRegion;\n  }\n\n  /**\n   *  Creates the definition of a bitmap image.\n   */\n  export interface BitmapDescriptor {\n    /**\n     *  Creates object for default marker icons in\n     *  different colors using different hue values.\n     *  Possible values are 0, 30, 60, 120, 180, 210, 240, 270, 300, 330\n     */\n    hue?: HueEnum | number;\n\n    /**\n     *  Creates object using an image resource in the assets directory.\n     */\n    asset?: string;\n\n    /**\n     *  Creates object using  the name of an image file\n     *  in the internal storage.\n     */\n    file?: string;\n\n    /**\n     *  Creates object using the absolute path to an image resource.\n     */\n    path?: string;\n\n    /**\n    *  Creates object using the uri of the image resource.\n    */\n    uri?: string;\n\n    /**\n    *  Width of the image for images that we get from uri.\n    */\n    width?: number;\n\n    /**\n    *  Height of the image for images that we get from uri.\n    */\n    height?: number;\n  }\n\n  /**\n   *  Creates the definition of a MyLocationStyle object.\n   */\n  export interface MyLocationStyle {\n    /**\n     *  Sets the anchor of the my-location icon.\n     *  The first number is anchorU Offset of the anchor on the horizontal axis.\n     *  The second number is anchorV Offset of the anchor on the vertical axis.\n     *  The coordinates [0, 0], [1, 0], [0, 1], and [1, 1] respectively\n     *  indicate the top-left, top-right, bottom-left, and bottom-right\n     *  corners of the icon image.\n     */\n    anchor?: [number, number];\n\n    /**\n     *  Creates object using an image resource in the assets directory.\n     */\n    icon?: BitmapDescriptor;\n\n    /**\n     *  Sets the fill color of the my-location icon\n     */\n    fillcolor?: number;\n  }\n\n  /**\n   *  Type of the cap that is applied at the start or end vertex of a polyline.\n   *  BUTT = 0;\n   *  SQUARE = 1;\n   *  ROUND = 2;\n   *  CUSTOM = 3;\n   */\n  export type CapType = 0 | 1 | 2 | 3;\n\n  /**\n   *  Defines a cap that is applied at the start or end vertex of a polyline.\n   */\n  export interface Cap extends BitmapDescriptor {\n    /**\n     *  Type of the cap.\n     */\n    type: CapType;\n\n    /**\n     *  Reference stroke width, in pixels when using `CUSTOM` type cap.\n     */\n    refWidth?: number;\n  }\n\n  export interface TileProvider {\n    /**\n     *  URL String for tiles. Ex: \"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n     */\n    url: string;\n\n    /**\n     *  List of zoom levels enabled for tile provider.\n     */\n    zoom?: number[];\n\n    /**\n     *  Width of a tile, in pixels.\n     */\n    width?: number;\n\n    /**\n     *  Height of a tile, in pixels.\n     */\n    height?: number;\n  }\n\n  export interface CustomTile {\n    /**\n     *  Name of the file under assets folder\n     */\n    asset: string;\n\n    /**\n     *  Horizontal tile index.\n     */\n    x: number;\n\n    /**\n     *  Vertical tile index.\n     */\n    y: number;\n\n    /**\n     *  Zoom level.\n     */\n    zoom: number;\n\n    /**\n     *  Width of a tile, in pixels.\n     */\n    width?: number;\n\n    /**\n     *  Height of a tile, in pixels.\n     */\n    height?: number;\n  }\n\n  /**\n   * Marker animation that rotates the marker\n   */\n  export interface Rotate {\n    fromDegree: number;\n    toDegree: number;\n    duration?: number;\n    fillMode?: FillModeEnum;\n    repeatCount?: number;\n    repeatMode?: RepeatModeEnum;\n    interpolator?: InterpolatorEnum;\n  }\n\n  /**\n   * Marker animation that changes the opacity of marker\n   */\n  export interface Alpha {\n    fromAlpha: number;\n    toAlpha: number;\n    duration?: number;\n    fillMode?: FillModeEnum;\n    repeatCount?: number;\n    repeatMode?: RepeatModeEnum;\n    interpolator?: InterpolatorEnum;\n  }\n\n  /**\n   * Marker animation that scales the marker vertically and horizontally\n   */\n  export interface Scale {\n    fromX: number;\n    toX: number;\n    fromY: number;\n    toY: number;\n    duration?: number;\n    fillMode?: FillModeEnum;\n    repeatCount?: number;\n    repeatMode?: RepeatModeEnum;\n    interpolator?: InterpolatorEnum;\n  }\n\n  /**\n   * Marker animation that moves the marker to the target coordinate\n   */\n  export interface Translate {\n    latitude: number;\n    longitude: number;\n    duration?: number;\n    fillMode?: FillModeEnum;\n    repeatCount?: number;\n    repeatMode?: RepeatModeEnum;\n    interpolator?: InterpolatorEnum;\n  }\n\n  /**\n   * Default options for common fields in all animation types. \n   */\n  export interface DefaultAnimationOptions {\n    duration?: number;\n    fillMode?: FillModeEnum;\n    repeatCount?: number;\n    repeatMode?: RepeatModeEnum;\n    interpolator?: InterpolatorEnum;\n  }\n\n  /**\n   * Animation object to specify what type of animations will be applied to the marker.\n   */\n  export interface MarkerAnimation {\n    rotate?: Rotate;\n    alpha?: Alpha;\n    scale?: Scale;\n    translate?: Translate;\n  }\n\n  /**\n   * Animation object to specify the animation to be applied to the Circle.\n   */\n  export interface CircleAnimation {\n    translate?: Translate;\n  }\n\n  /**\n   *  Events triggered by the map.\n   */\n  export interface MapEvent<T = {}> extends NativeSyntheticEvent<T> { }\n /**\n   *  Stroke pattern of a polyline or the outline of a polygon or circle.\n   */\n  export interface PatternItem {\n    /**\n     *  Type of the pattern.\n     */\n    type: PatternItemEnum;\n\n    /**\n     *  Length, in pixels. It is not needed for DOT pattern item type.\n     */\n    length?: number;\n  }\n  /**\n   *  Props for <HMSCircle> component.\n   */\n  export interface HMSCircleProps {\n    /**\n     *  Center of the circle.\n     */\n    center: LatLng;\n\n    /**\n     *  Radius of the circle.\n     */\n    radius: number;\n\n    /**\n     *  Whether the circle is tappable.\n     */\n    clickable?: boolean;\n\n    /**\n     *  The fill color of the circle, in ARGB format.\n     */\n    fillColor?: number | number[];\n\n    /**\n     *  The stroke color of the circle's outline.\n     */\n    strokeColor?: number | number[];\n\n    /**\n     *  The stroke width of the circle's outline.\n     */\n    strokeWidth?: number;\n\n    /**\n     *  Stroke pattern of the circle's outline.\n     */\n    strokePattern?: PatternItem[];\n\n    /**\n     *  Whether the circle is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of the circle. The z-index indicates the overlapping order\n     *  of the circle. A circle with a larger z-index overlaps that with\n     *  a smaller z-index. Circles with the same z-index overlap each other\n     *  in a random order. By default, the z-index is 0.\n     */\n    zIndex?: number;\n\n    /**\n     *  Event listener for clicks on the cricle.\n     */\n    onClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called animation starts.\n     */\n    onAnimationStart?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called animation ends.\n     */\n    onAnimationEnd?: (event: MapEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows a circle object on the map.\n   */\n  export class HMSCircle extends React.Component<HMSCircleProps, any> { \n\n    /**\n     *  Starts circle animation.\n     */\n    startAnimation(): void;\n\n    /**\n     *  Cleans the animation which is previously set\n     */\n    cleanAnimation(): void;\n\n    /**\n     * Sets the circle animation\n     */\n    setAnimation(circleAnimation: CircleAnimation, defaultAnimationOptions: DefaultAnimationOptions): void;\n  }\n\n  /**\n   *  The joint type for a polyline or the outline of a polygon.\n   *  DEFAULT = 0;\n   *  BEVEL = 1;\n   *  ROUND = 2;\n   */\n  export type JointType = 0 | 1 | 2;\n\n  /**\n   *  Props for <HMSPolygon> component.\n   */\n  export interface HMSPolygonProps {\n    /**\n     *  Vertex coordinates of the polygon.\n     */\n    points: LatLng[];\n\n    /**\n     *  Holes in the polygon.\n     */\n    holes?: LatLng[][];\n\n    /**\n     *  Whether the polygon is tappable.\n     */\n    clickable?: boolean;\n\n    /**\n     *  The fill color of the polygon, in ARGB format.\n     */\n    fillColor?: number | number[];\n\n    /**\n     *  Whether each segment of the polygon is drawn as a geodesic.\n     */\n    geodesic?: boolean;\n\n    /**\n     *  The stroke color of the polygon's outline.\n     */\n    strokeColor?: number | number[];\n\n    /**\n     *  The joint type of the polygon.\n     */\n    strokeJointType?: JointType;\n\n    /**\n     *  The stroke width of the polygon's outline, in pixels.\n     */\n    strokeWidth?: number;\n\n    /**\n     *  The stroke pattern of the polygon's outline. By default,\n     *  the stroke pattern is solid, represented by null.\n     */\n    strokePattern?: PatternItem[];\n\n    /**\n     *  Whether the polygon is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of the polygon. The z-index indicates the overlapping order\n     *  of the polygon. A polygon with a larger z-index overlaps that with\n     *  a smaller z-index. Polygons with the same z-index overlap each other in\n     *  a random order.\n     */\n    zIndex?: number;\n\n    /**\n     *  Event listener for clicks on the polygon.\n     */\n    onClick?: (event: MapEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows a polygon object on the map.\n   *  A polygon can be convex or concave. It can span\n   *  the 180 meridian and have holes that are not filled in.\n   */\n  export class HMSPolygon extends React.Component<HMSPolygonProps, any> { }\n\n  /**\n   *  Props for <HMSPolyline> component.\n   */\n  export interface HMSPolylineProps {\n    /**\n     *  Vertex set of the polyline.\n     */\n    points: LatLng[];\n\n    /**\n     *  Whether the polyline is tappable.\n     */\n    clickable?: boolean;\n\n    /**\n     *  The stroke color of a polyline in ARGB format.\n     */\n    color?: number | number[];\n\n    /**\n     *  Whether each segment of the polyline is drawn as a geodesic.\n     */\n    geodesic?: boolean;\n\n    /**\n     *  The joint type of all vertices of the polyline,\n     *  except the start and end vertices.\n     */\n    jointType?: JointType;\n\n    /**\n     *  The stroke pattern of the polyline.\n     */\n    pattern?: PatternItem[];\n\n    /**\n     *  The start vertex of the polyline.\n     */\n    startCap?: Cap;\n\n    /**\n     *  The end vertex of the polyline.\n     */\n    endCap?: Cap;\n\n    /**\n     *  The stroke width of the polyline.\n     */\n    width?: number;\n\n    /**\n     *  Whether the polyline is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of a polyline. The z-index indicates the overlapping order\n     *  of a polyline. A polyline with a larger z-index overlaps that with\n     *  a smaller z-index. Polylines with the same z-index overlap each other\n     *  in any order.\n     */\n    zIndex?: number;\n\n    /**\n     * Indicates whether a polyline is gradient.\n     * true: yes\n     * false (default): no\n     */\n    gradient?: boolean\n\n    /**\n     *  Colors of different segments of a polyline, in ARGB format.\n     */\n    ColorValues?:number[]\n\n    /**\n     *  Event listener for clicks on the polyline.\n     */\n    onClick?: (event: MapEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows a polyline object, which is a list of\n   *  vertices where line segments are drawn between consecutive\n   *  vertices, on the map.\n   */\n  export class HMSPolyline extends React.Component<HMSPolylineProps, any> { }\n\n  /**\n   *  Props for <HMSMarker> component.\n   */\n  export interface HMSMarkerProps extends ViewProps {\n    /**\n     *  The position of a marker.\n     */\n    coordinate: LatLng;\n\n    /**\n     *  Whether the marker can be dragged.\n     */\n    draggable?: boolean;\n\n    /**\n     *  The icon of the marker.\n     */\n    icon?: BitmapDescriptor;\n\n    /**\n     *  The transparency of the marker.\n     */\n    alpha?: number;\n\n    /**\n     *  Whether the marker is flatly attached to the map.\n     */\n    flat?: boolean;\n\n    /**\n     *  The anchor point of the marker. The anchor point is used to anchor\n     *  a marker image to the map.\n     *  The coordinates [0, 0], [1, 0], [0, 1], and [1, 1] respectively\n     *  indicate the top-left, top-right, bottom-left, and bottom-right\n     *  corners of the marker image.\n     */\n    markerAnchor?: [number, number];\n\n    /**\n     *  The anchor point of the marker's information window. The anchor point\n     *  is used to anchor a marker image to the map.\n     *  The coordinates [0, 0], [1, 0], [0, 1], and [1, 1] respectively\n     *  indicate the top-left, top-right, bottom-left, and bottom-right\n     *  corners of the marker image.\n     */\n    infoWindowAnchor?: [number, number];\n\n    /**\n     *  The rotation angle of the marker.\n     */\n    rotation?: number;\n\n    /**\n     *  The title of the marker.\n     */\n    title?: string;\n\n    /**\n     *  The text of the marker.\n     */\n    snippet?: string;\n\n    /**\n     *  Whether the marker is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of the marker. The z-index indicates the overlapping order\n     *  of a marker. A marker with a larger z-index overlaps that with\n     *  a smaller z-index. Markers with the same z-index overlap each other\n     *  in a random order.\n     */\n    zIndex?: number;\n\n    /**\n     *  Whether the marker can be clustered.\n     */\n    clusterable?: boolean;\n\n    /**\n     *  Whether the marker is clickable.\n     */\n    clickable?: boolean;\n\n    /**\n    *  Whether the animation does the default action on marker click.\n    */\n    defaultActionOnClick?: boolean;\n\n    /**\n     *  Listener for the event called when the marker is clicked.\n     */\n    onClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when the marker starts being dragged.\n     */\n    onDragStart?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when the marker is being dragged.\n     */\n    onDrag?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when the marker dragging is complete.\n     */\n    onDragEnd?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Event listener for clicks on the information window.\n     */\n    onInfoWindowClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called when information window is closed.\n     */\n    onInfoWindowClose?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Event listener for long clicks on the information window.\n     */\n    onInfoWindowLongClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called animation starts.\n     */\n    onAnimationStart?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event called animation starts.\n     */\n    onAnimationEnd?: (event: MapEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows a marker object, an icon placed at\n   *  a specified position, on the map.\n   */\n  export class HMSMarker extends React.Component<HMSMarkerProps, any> {\n    /**\n     *  Shows infromation window.\n     */\n    showInfoWindow(): void;\n\n    /**\n     *  Hides infromation window.\n     */\n    hideInfoWindow(): void;\n\n    /**\n     *  Starts marker animation.\n     */\n    startAnimation(): void;\n\n    /**\n     *  Cleans the animation which is previously set\n     */\n    cleanAnimation(): void;\n\n    /**\n     * Sets the marker animation\n     */\n    setAnimation(markerAnimation: MarkerAnimation, defaultAnimationOptions: DefaultAnimationOptions): void;\n\n  }\n\n  /**\n   *  React component that shows information window on a marker\n   */\n  export class HMSInfoWindow extends React.Component<ViewProps, any> { }\n\n  export interface LatLngWithSize extends LatLng {\n    /**\n     *  Height of a ground overlay, in meters\n     */\n    height: number;\n\n    /**\n     *  Width of a ground overlay, in meters\n     */\n    width: number;\n  }\n\n  /**\n   *  Props for <HMSGroundOverlay> component.\n   */\n  export interface HMSGroundOverlayProps {\n    /**\n     *  The image for the ground overlay.\n     */\n    image: BitmapDescriptor;\n\n    /**\n     *  The position of the ground overlay.\n     */\n    coordinate: LatLngWithSize | LatLng[];\n\n    /**\n     *  The alignment (that is, anchor point) of a ground overlay.\n     *  The coordinates [0, 0], [1, 0], [0, 1], and [1, 1] respectively\n     *  indicate the top-left, top-right, bottom-left, and bottom-right\n     *  corners of the ground overlay. If no anchor point is set, the center\n     *  point (0.5, 0.5) of the ground overlay will be used by default.\n     */\n    anchor?: [number, number];\n\n    /**\n     *  The bearing of the ground overlay, in degrees clockwise from north.\n     *  The value ranges from 0 to 360 (excluded).\n     */\n    bearing?: number;\n\n    /**\n     *  Whether the ground overlay is tappable.\n     */\n    clickable?: boolean;\n\n    /**\n     *  The transparency of the ground overlay.The value ranges from 0 to 1.\n     *  The value 0 indicates opaque and the value 1 indicates transparent.\n     */\n    transparency?: number;\n\n    /**\n     *  Whether the ground overlay is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of the ground overlay. The z-index indicates\n     *  the overlapping order of a ground overlay. A ground overlay with\n     *  a larger z-index overlaps that with a smaller z-index. Ground overlays\n     *  with the same z-index overlap each other in a random order.\n     *  By default, the z-index is 0.\n     */\n    zIndex?: number;\n\n    /**\n     *  Listener for the event called when the ground overlay is clicked.\n     */\n    onClick?: (event: MapEvent<{}>) => void;\n  }\n\n  /**\n   *  React component that shows a ground overlay object, an image\n   *  that is fixed to the map.\n   */\n  export class HMSGroundOverlay extends React.Component<HMSGroundOverlayProps, any> { }\n\n  /**\n   *  Props for <HMSTileOverlay> component.\n   */\n  export interface HMSTileOverlayProps {\n    /**\n     *  The provider of the tile overlay.\n     */\n    tileProvider: TileProvider | CustomTile[];\n\n    /**\n     *  Whether the tile overlay fades in.\n     */\n    fadeIn?: boolean;\n\n    /**\n     *  The transparency of the tile overlay.\n     */\n    transparency?: number;\n\n    /**\n     *  Whether the tile overlay is visible.\n     */\n    visible?: boolean;\n\n    /**\n     *  The z-index of the tile overlay. The z-index indicates the overlapping\n     *  order of a tile overlay. A tile overlay with a larger z-index overlaps\n     *  that with a smaller z-index. Tile overlays with the same z-index\n     *  overlap each other in any order.\n     */\n    zIndex?: number;\n  }\n\n  /**\n   *  React component that shows a tile overlay object,\n   *  which is a set of images to be displayed on a map.\n   */\n  export class HMSTileOverlay extends React.Component<HMSTileOverlayProps, any> {\n    /**\n     *  Clears the cache of the tile overlay.\n     */\n    clearTileCache(): void;\n  }\n\n  /**\n   *  Props for <HMSHeatMap> component.\n   */\n  export interface HMSHeatMapProps extends ViewProps {\n    /**\n     *  GeoJSON-format dataset.\n     */\n    dataSet: string;\n\n    /**\n     *  Heatmap color.\n     */\n    color?: object;\n\n    /**\n     *  Visibility of a heatmap.\n     */\n    isVisible?: boolean;\n\n    /**\n     *  Radius unit of a heatmap.\n     */\n    radiusUnit?: `${RadiusUnit}`;\n\n    /**\n     *  Heatmap radius for all zoom levels.\n     */\n    radius?: number | object;\n\n    /**\n     *  Heatmap intensity for all zoom levels.\n     */\n    intensity?: number | object;\n\n    /**\n     *  Heatmap transparency for all zoom levels.\n     */\n    opacity?: number | object;\n  }\n\n  /**\n   *  \n   */\n  export class HMSHeatMap extends React.Component<HMSHeatMapProps, any> { }\n\n  /**\n   *  Padding on a map.\n   */\n  export interface MapPadding {\n    /**\n     *  Distance from the visible region to the right edge\n     *  of the map, in pixels.\n     */\n    right?: number;\n\n    /**\n     *  Distance from the visible region to the left edge\n     *  of the map, in pixels.\n     */\n    left?: number;\n\n    /**\n     *  Distance from the visible region to the top edge\n     *  of the map, in pixels.\n     */\n    top?: number;\n\n    /**\n     *  Distance from the visible region to the bottom edge\n     *  of the map, in pixels.\n     */\n    bottom?: number;\n  }\n\n  /**\n   *  Contains bitmap string of the snapshot image.\n   */\n  export interface SnapshotImage {\n    /**\n     *  Bitmap string of the snapshot image.\n     */\n    bitmap: string;\n  }\n\n  /**\n   *  The type of the map.\n   *  NONE = 0; Empty grid map.\n   *  NORMAL = 1; Basic map.\n   *  TERRAIN = 3; Terrain map.\n   */\n  export type MapType = 0 | 1 | 3;\n\n  /**\n   *  Props for <MapView> component.\n   */\n  /**\n   *  The options for routePolicy are\n   *  CHINA  = \"CN\"\n   *  GERMANY = \"DE\"\n   *  SINGAPORE = \"SG\"\n   *  RUSSIA = \"RU\"\n   */\n  export type RoutePolicyType = \"CN\" | \"DE\" | \"SG\" | \"RU\";\n  export interface HMSMapProps extends ViewProps {\n\n    /**\n     * Sets whether to enable the dark mode. After the dark mode is enabled, popups displayed after the map logo is tapped, indoor map controls, and privacy agreement popups will be displayed in dark mode.\n     */\n    darkMode?: boolean;\n\n    /**\n     *  Type of the map.\n     */\n    mapType?: MapType;\n\n    /**\n     *  Starting position of the camera on the map.\n     */\n    camera?: CameraPosition;\n\n    /**\n     *  Bounds to constraint the camera target so that the camera target does\n     *  not move outside the bounds when a user scrolls the map.\n     */\n    latLngBoundsForCameraTarget?: LatLng[];\n\n    /**\n     *  Whether to use animation on camera update.\n     */\n    useAnimation?: boolean;\n\n    /**\n     *  Duration of the animation in ms.  By default, the camera animation\n     *  takes 250 milliseconds\n     */\n    animationDuration?: number;\n\n    /**\n     *  Whether to enable the compass for the map.\n     */\n    compassEnabled?: boolean;\n\n    /**\n     *  The preferred minimum zoom level of the camera. The value must be\n     *  greater than or equal to the minimum zoom level (0) supported by\n     *  the HUAWEI Map SDK. If the preferred minimum zoom level is higher\n     *  than the current maximum zoom level, the SDK uses the preferred\n     *  minimum zoom level as both the minimum and maximum zoom levels.\n     *  Assume that the current minimum and maximum zoom levels are\n     *  4 and 10, respectively. If you set the preferred minimum zoom level\n     *  to 15, the SDK uses the value 15 as both the minimum and maximum zoom\n     *  levels. That is, the zoom level of the camera is fixed at 15.\n     */\n    minZoomPreference?: number;\n\n    /**\n     *  The preferred maximum zoom level of the camera. If the preferred\n     *  maximum zoom level is lower than the current minimum zoom level,\n     *  the SDK uses the preferred maximum zoom level as both the minimum\n     *  and maximum zoom levels. Assume that the current minimum and maximum\n     *  zoom levels are 6 and 15, respectively. If you set the preferred\n     *  maximum zoom level to 4, the SDK uses the value 4 as both the minimum\n     *  and maximum zoom levels. That is, the zoom level of the camera is\n     *  fixed at 4.\n     */\n    maxZoomPreference?: number;\n\n    /**\n     *  Whether rotate gestures are enabled for the map.\n     */\n    rotateGesturesEnabled?: boolean;\n\n    /**\n     *  Whether scroll gestures are enabled for the map.\n     */\n    scrollGesturesEnabled?: boolean;\n\n    /**\n     *  Whether tilt gestures are enabled for the map.\n     */\n    tiltGesturesEnabled?: boolean;\n\n    /**\n     *  Whether to enable the zoom function for the camera.\n     */\n    zoomControlsEnabled?: boolean;\n\n    /**\n     *  Whether zoom gestures are enabled for the map.\n     */\n    zoomGesturesEnabled?: boolean;\n\n    /**\n     *  Whether the 3D building layer is enabled for the map.\n     */\n    buildingsEnabled?: boolean;\n\n    /**\n     * Indicates whether to enable the traffic status layer. \n     * The options are true (yes) and false (no).\n     * The default value is false.\n     */\n    trafficEnabled?: boolean;\n\n    /**\n     *  the content description to the map. If the auxiliary mode is enabled,\n     *  voice description about the map will be provided.\n     */\n    description?: string;\n\n    /**\n     *  JSON string for styling the map.\n     */\n    mapStyle?: string;\n\n    /**\n     *  Whether my location layer is enabled for the map.\n     */\n    myLocationEnabled?: boolean;\n\n    /**\n     *  The padding on the map. You can use this props to define the visible\n     *  region on a map so that a signal can be sent to the map indicating that\n     *  some portions around the map edges may be obscured. For example, icons\n     *  such as the zoom controls and compass will be moved to adapt to\n     *  the visible region, and the camera will move in relative to\n     *  the center of the visible region.\n     */\n    mapPadding?: MapPadding;\n\n    /**\n     *  Position of the Petal Maps logo. The RTL mode is supported.\n     */\n    logoPosition?: number;\n\n    /**\n     *  Position of the Petal Maps logo. The RTL mode is supported.\n     */\n    logoPadding?: LogoPadding;\n\n    /**\n     *  ID of a custom style.\n     */\n    styleId?: string;\n\n    /**\n     * Preview ID of a custom style.\n     */\n    previewId?: string;\n\n    /**\n     *  Whether the markers can be clustered.\n     */\n    markerClustering?: boolean;\n\n    /**\n     * Sets the color of the default cluster marker. \n     * The color value is in ARGB format.\n     */\n    markerClusterColor?: number | number[];\n\n    /**\n     * Sets the text color of the custom cluster marker.\n     * The color value is in ARGB format.\n     */\n    markerClusterTextColor?: number | number[];\n\n    /**\n     * Sets the icon of the custom cluster marker. \n     * If the bitmapDescriptor parameter is empty for the setMarkerClusterIcon method,\n     * the color, image, and text color of the cluster marker set using setMarkerClusterColor, \n     * setMarkerClusterIcon, and setMarkerClusterTextColor will be cleared. \n     * In this case, the default cluster marker style will be used.\n     */\n    markerClusterIcon?: BitmapDescriptor;\n\n    /**\n     *  Whether to enable the my location icon for a map.\n     */\n    myLocationButtonEnabled?: boolean;\n\n    /**\n     *  Whether to enable scroll gestures during rotation or zooming.\n     */\n    scrollGesturesEnabledDuringRotateOrZoom?: boolean;\n\n    /**\n     * Sets a fixed screen center for zooming.\n     * The passed screen center is valid only when true is passed to setGestureScaleByMapCenter prop.\n     * To cancel the function of setting a fixed screen center,\n     * you only need to pass false to setGestureScaleByMapCenter prop without calling setPointToCenter.\n     */\n    pointToCenter?: Point;\n\n    /**\n     * Specifies whether a fixed screen center can be set for zooming.\n     * If the function is enabled, the map will be zoomed based on the passed fixed screen center. \n     */\n    gestureScaleByMapCenter?: boolean;\n\n    /**\n     * Set the my-location icon style.\n     */\n    myLocationStyle?: MyLocationStyle;\n\n    /**\n     *  Listener for the event called when the HuaweiMap object is ready\n     */\n    onMapReady?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event when a camera update task is complete\n     */\n    onCameraUpdateFinished?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event when a camera update task is canceled.\n     */\n    onCameraUpdateCanceled?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event when the camera movement ends.\n     */\n    onCameraIdle?: (event: MapEvent<CameraPosition>) => void;\n\n    /**\n     *  Listener for the event when the camera movement cancelled.\n     */\n    onCameraMoveCanceled?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Listener for the event when the camera moves\n     */\n    onCameraMove?: (event: MapEvent<{ CameraPosition }>) => void;\n\n    /**\n     *  Listener for the event when the camera movement started.\n     */\n    onCameraMoveStarted?: (event: MapEvent<{ reason: number }>) => void;\n\n    /**\n     *  Event listener for clicks on the map.\n     */\n    onMapClick?: (event: MapEvent<ProjectionOnLatLng>) => void;\n\n    /**\n     *  Listener for the event called when the map loading is completed\n     */\n    onMapLoaded?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Event listener for long clicks on the map.\n     */\n    onMapLongClick?: (event: MapEvent<ProjectionOnLatLng>) => void;\n\n    /**\n     *  Listener for the event called when my location button is clicked\n     */\n    onMyLocationButtonClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Event listener for clicks on the location icon.\n     */\n    onMyLocationClick?: (event: MapEvent<{}>) => void;\n\n    /**\n     *  Event listener for clicks on POIs\n     */\n    onPoiClick?: (event: MapEvent<PointOfInterest>) => void;\n\n    /**\n     *  Listener for the event called when a snapshot is taken on the map.\n     *  To take a snapshot use `takeSnapshot()` function.\n     */\n    onSnapshotReady?: (event: MapEvent<SnapshotImage>) => void;\n  }\n\n  type HMSMapMethods = {\n\n    /**\n     *  Initializes the Map SDK. You can set the data routing location. The options for routePolicy are CN (China), DE (Germany), SG (Singapore), and RU (Russia).\n     *  Sets the access token of the Map SDK.\n     */\n    initializer(apiKey: String, routePolicy: RoutePolicyType): Promise<void>;\n\n    /**\n     *  Obtains all attributes of the Huawei map object\n     */\n    getHuaweiMapInfo(): Promise<HuaweiMap>;\n\n    /**\n     *  Obtains a location on the screen corresponding to a longitude\n     *  and latitude. The location on the screen is specified in\n     *  screen pixels (instead of display pixels) relative to the top left\n     *  corner of the map (instead of the top left corner of the screen).\n     */\n    getPointFromCoordinate(coordinate: LatLng): Promise<Point>;\n\n    /**\n     *  Obtains the longitude and latitude of a location on the screen.\n     *  The location on the screen is specified in\n     *  screen pixels (instead of display pixels) relative to the top left\n     *  corner of the map (instead of the top left corner of the screen).\n     */\n    getCoordinateFromPoint(point: Point): Promise<LatLng>;\n\n    /**\n     *  Calculates the distance between two coordinate points.\n     */\n    getDistance(from: LatLng, to: LatLng): Promise<number>;\n\n    /**\n     *  Obtains the length of one pixel point on the map at the current zoom level.\n     */\n    getScalePerPixel(): Promise<number>;\n    \n    /**\n     *  Removes all circles, markers, polylines, and ground overlays\n     *  from the map.\n     */\n    clear(): void;\n\n    /**\n     *  Takes a snapshot of a map. If an interactive map is difficult or\n     *  impossible to use, you can use snapshots in your app. For example,\n     *  you can use this function to generate images and use them to display\n     *  a thumbnail of the map in your app, or display a snapshot in\n     *  the notification center.\n     */\n    takeSnapshot(): void;\n\n    /**\n     *  Deletes all maximum and minimum zoom levels set previously.\n     */\n    resetMinMaxZoomPreference(): void;\n\n    /**\n     *  Stops the current animation process of the camera.\n     *  When this method is called, the camera stops moving\n     *  immediately and remains in that position.\n     */\n    stopAnimation(): void;\n\n    /**\n     *  Updates the camera position\n     */\n    setCameraPosition(cameraPosition: CameraPosition): void;\n\n    /**\n     *  Sets the longitude and latitude of the center as well as the zoom level\n     *  of a map's view.\n     */\n    setCoordinates(\n      /**\n       *  Longitude and latitude of the center of a map's view.\n       */\n      latLng: LatLng,\n\n      /**\n       *  Desired zoom level of the camera.\n       */\n      zoom?: number,\n    ): void;\n\n    /**\n     *  Centers a region on the screen by setting the width and height of\n     *  the region, longitude and latitude bounds, and the padding between\n     *  the region edges and the longitude/latitude bounding box edges.\n     */\n    setBounds(\n      /**\n       *  Longitude and latitude bounds to be displayed.\n       */\n      latLngBounds: LatLng[],\n\n      /**\n       *  Space between the region edges and bounding box edges, in pixels.\n       */\n      padding: number,\n\n      /**\n       *  Bounding box height, in pixels.\n       */\n      width?: number,\n\n      /**\n       *  Desired zoom level of the camera.\n       */\n      height?: number,\n    ): void;\n\n    /**\n     *  Moves the center of a map's view by pixel on the screen.\n     */\n    scrollBy(\n      /**\n       *  Number of pixels to scroll horizontally.\n       */\n      x: number,\n\n      /**\n       *  Number of pixels to scroll vertically.\n       */\n      y: number,\n    ): void;\n\n    /**\n     *  Changes the zoom level of the camera by a specified incremental value\n     *  and sets a specified point as the focus. The distance to the earth\n     *  surface is shortened if amount has a positive value and prolonged\n     *  if amount has a negative value. In the method, focus is the center\n     *  point for zooming in or out.\n     */\n    zoomBy(\n      /**\n       *  Incremental value to change the zoom level.\n       */\n      amount: number,\n\n      /**\n       *  Coordinates of a point to be set as the focus.\n       */\n      focus?: Point,\n    ): void;\n\n    /**\n     *  Sets the zoom level of the camera to a specified value.\n     */\n    zoomTo(\n      /**\n       *  Desired zoom level.\n       */\n      zoom: number,\n    ): void;\n\n    /**\n     *  Increases the zoom level of the camera by 1.\n     */\n    zoomIn(): void;\n\n    /**\n     *  Decreases the zoom level of the camera by 1.\n     */\n    zoomOut(): void;\n\n    /**\n     * Enables HMSLogger\n     */\n    enableLogger(): Promise<null>;\n\n    /**\n     * Disables HMSLogger\n     */\n    disableLogger(): Promise<null>;\n\n    /**\n     * Gets the layer info about map layer objects\n     * @param ref Reference object \n     */\n    getLayerInfo(ref: object): Promise<object>;\n\n    /**\n     * Gets the layer options info about map layer objects\n     * @param ref Reference object \n     */\n    getLayerOptionsInfo(ref: object): Promise<object>;\n  }\n\n  /**\n   *  React component that shows a map.\n   */\n  export default class HMSMap extends React.Component<React.PropsWithChildren<HMSMapProps>> {\n    static module: HMSMapMethods;\n  }\n}"
  },
  {
    "path": "react-native-hms-map/src/index.js",
    "content": "/*\n * Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      https://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport HMSMap from \"./MapView\";\nimport HMSCircle from \"./CircleView\";\nimport HMSMarker from \"./MarkerView\";\nimport HMSPolygon from \"./PolygonView\";\nimport HMSPolyline from \"./PolylineView\";\nimport HMSGroundOverlay from \"./GroundOverlayView\";\nimport HMSTileOverlay from \"./TileOverlayView\";\nimport HMSHeatMap from \"./HeatMapView\";\nimport HMSInfoWindow from \"./InfoWindowView\";\nimport {\n  PatternItemTypes,\n  CapTypes,\n  JointTypes,\n  MapTypes,\n  FillMode,\n  RepeatMode,\n  Interpolator,\n  Hue,\n  Gravity,\n  RadiusUnit\n} from \"./constants\";\n\nexport {\n  HMSCircle,\n  HMSMarker,\n  HMSPolygon,\n  HMSPolyline,\n  HMSGroundOverlay,\n  HMSTileOverlay,\n  HMSHeatMap,\n  HMSInfoWindow,\n  RepeatMode,\n  CapTypes,\n  Gravity,\n  JointTypes,\n  MapTypes,\n  RadiusUnit,\n  FillMode,\n  Interpolator,\n  Hue,\n  PatternItemTypes\n};\n\nexport default HMSMap;\n"
  },
  {
    "path": "react-native-hms-ml/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-ml/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS ML</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ml\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-ml?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-ml\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-ml?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-ml.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThe React Native ML Plugin allows your apps to easily leverage Huawei's long-term proven expertise in machine learning to support diverse artificial intelligence (AI) applications throughout a wide range of industries. Thanks to Huawei's technology accumulation, ML Plugin provides diversified leading machine learning capabilities that are easy to use, helping you develop various AI apps.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050726178?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-ml\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001051088416-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Supported Location](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/supported-location-0000001075977968-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native Plugin is licenced under [Apache 2.0 licence](LICENCE)"
  },
  {
    "path": "react-native-hms-ml/THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt",
    "content": "Please note we provide an open source software notice for the third party open source software \nalong with this software and/or this software component contributed by Huawei (in the following \njust “this SOFTWARE”). The open source software licenses are granted by the respective right \nholders.\n\nWarranty Disclaimer\nTHE OPEN SOURCE SOFTWARE IN THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT \nIT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED \nWARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE \nAPPLICABLE LICENSES FOR MORE DETAILS.\n\nCopyright Notice and License Texts \n\n\n\nSoftware:  react-native-image-picker  2.3.1\n----------------------------------------------------------------------\n\nCopyright notice: \n\nCopyright (c) 2015-present, Facebook, Inc.\n\nLicense: MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this\nsoftware and associated documentation files (the \"Software\"), to deal in the Software\nwithout restriction, including without limitation the rights to use, copy, modify,\nmerge, publish, distribute, sublicense, and/or sell copies of the Software,\nand to permit persons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies\nor substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\nFOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \nDEALINGS IN THE SOFTWARE.\n\n\n\nSoftware:  react-native-document-picker  4.1.0\n----------------------------------------------------------------------\n\nCopyright notice: \n\nCopyright (c) 2016 Elyx0\n\nLicense: The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "react-native-hms-ml/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.6.0.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.3\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    google()\n    jcenter()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation \"com.facebook.react:react-native:+\"\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr:3.5.0.304'\n    // Import the Latin-based language model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.5.0.304'\n    // Import the Japanese and Korean model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:3.5.0.304'\n    // Import the Chinese and English model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:3.5.0.304'\n\n    // Import the document model package.\n    implementation 'com.huawei.hms:ml-computer-vision-cloud:3.5.0.301'\n\n    // Import the bank card recognition plug-in package.\n    implementation 'com.huawei.hms:ml-computer-card-bcr:3.5.0.300'\n    // Import the general card recognition plug-in package.\n    implementation 'com.huawei.hms:ml-computer-card-gcr-plugin:3.5.0.301'\n    // Import the vietnam id card recognition plug-in package.\n    implementation 'com.huawei.hms:ml-computer-card-icr-vn:3.5.0.300'\n    // Import the id card recognition plug-in package.\n    implementation 'com.huawei.hms:ml-computer-card-icr-cn:3.5.0.300'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-formrecognition:3.5.0.302'\n    // Import the form recognition model package.\n    implementation 'com.huawei.hms:ml-computer-vision-formrecognition-model:3.5.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-translate:3.5.0.302'\n    // Import the translation algorithm package.\n    implementation 'com.huawei.hms:ml-computer-translate-model:3.5.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-language-detection:3.5.0.302'\n    // Import the language detection algorithm package.\n    implementation 'com.huawei.hms:ml-computer-language-detection-model:3.5.0.302'\n\n    // Import the ASR plug-in.\n    implementation 'com.huawei.hms:ml-computer-voice-asr-plugin:3.1.0.300'\n    // Import the ASR SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-asr:3.5.0.301'\n\n    // Import the TTS SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-tts:3.5.0.304'\n    // Import an algorithm package\n    implementation 'com.huawei.hms:ml-computer-voice-tts-model-bee:3.5.0.304'\n    // Import the eagle voice package.\n    implementation 'com.huawei.hms:ml-computer-voice-tts-model-eagle:3.5.0.304'\n\n    // Import the audio file transcription SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-aft:3.5.0.300'\n\n    // Import the real-time transcription SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-realtimetranscription:3.5.0.303'\n\n    // Import the sound detection package.\n    implementation 'com.huawei.hms:ml-speech-semantics-sounddect-sdk:3.5.0.302'\n    // Import the sound detection model.\n    implementation 'com.huawei.hms:ml-speech-semantics-sounddect-model:3.5.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-classification:3.5.0.302'\n    // Import the image classification model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-classification-model:3.5.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-object:3.5.0.307'\n    // Import the object detection and tracking model package.\n    implementation 'com.huawei.hms:ml-computer-vision-object-detection-model:3.5.0.307'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-segmentation:3.5.0.303'\n    // Import the multiclass segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-multiclass-model:3.5.0.303'\n    // Import the human body segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:3.5.0.303'\n    // Import the human hair segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-hair-model:3.5.0.303'\n\n    // Import the product visual search plug-in SDK.\n    implementation 'com.huawei.hms:ml-product-visual-search-plugin:3.5.0.304'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-imagesuperresolution:3.5.0.301'\n    // Import the image super-resolution model package.\n    implementation 'com.huawei.hms:ml-computer-vision-imagesuperresolution-model:3.5.0.301'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-documentskew:3.5.0.301'\n    // Import the document detection/correction model package.\n    implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:3.5.0.301'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution:3.5.0.300'\n    // Import the text image super-resolution model package.\n    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution-model:3.5.0.300'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-scenedetection:3.5.0.300'\n    // Import the scene detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-scenedetection-model:3.5.0.300'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-face:3.5.0.302'\n    // Import the contour and key point detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:3.5.0.302'\n    // Import the facial expression detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:3.5.0.302'\n    // Import the facial feature detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:3.5.0.302'\n    // Import the 3D face detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-3d-model:3.5.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton:3.5.0.300'\n    // Import the skeleton detection model package for normal postures.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton-model:3.5.0.300'\n    // Import the skeleton detection model package for yoga postures.\n    implementation 'com.huawei.hms:ml-computer-vision-yoga-model:3.5.0.300'\n\n    // Import the combined liveness detection package.\n    implementation 'com.huawei.hms:ml-computer-vision-livenessdetection:3.5.0.300'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint:3.5.0.301'\n    // Import the hand keypoint detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint-model:3.5.0.301'\n    // Import the hand gesture recognition model package.\n    implementation 'com.huawei.hms:ml-computer-vision-gesture-model:3.5.0.301'\n\n    //Import the Text Embedding\n    implementation 'com.huawei.hms:ml-nlp-textembedding:3.5.0.300'\n\n    // Import the custom model\n    implementation 'com.huawei.hms:ml-computer-model-executor:3.5.0.301'\n    implementation 'mindspore:mindspore-lite:5.0.4.300'\n\n    //faceVerification\n    implementation 'com.huawei.hms:ml-computer-vision-faceverify:3.5.0.300'\n    implementation 'com.huawei.hms:ml-computer-vision-faceverify-model:3.5.0.300'\n}"
  },
  {
    "path": "react-native-hms-ml/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ml/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true"
  },
  {
    "path": "react-native-hms-ml/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ml/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.ml\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n</manifest>"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/HMSBase.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.rn.ml.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    public HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * To obtain context\n     * @return app context\n     */\n    public ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     * @param methodName Name of the method\n     */\n    protected void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        if (e instanceof MLException) {\n            MLException e1 = (MLException) e;\n            promise.resolve(UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()));\n        } else {\n            promise.resolve(UNKNOWN.getStatusAndMessage(null, e.getMessage()));\n        }\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, HMSResults e, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(e.getStatusAndMessage());\n    }\n\n    /**\n     * Handles success\n     *\n     * @param methodName method name\n     * @param writableMap result\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, WritableMap writableMap, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/HMSML.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.ml.commonservices.HMSApplication;\nimport com.huawei.hms.rn.ml.commonservices.HMSComposite;\nimport com.huawei.hms.rn.ml.commonservices.HMSLensEngine;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSFaceRecognition;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSFaceVerification;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSGestureDetection;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSHandKeypointDetection;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSLivenessDetection;\nimport com.huawei.hms.rn.ml.facebodyrelatedservices.HMSSkeletonDetection;\nimport com.huawei.hms.rn.ml.helpers.views.HMSSurfaceView;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSDocumentSkewCorrection;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSFrame;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSImageClassification;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSImageSegmentation;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSImageSuperResolution;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSLandmarkRecognition;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSObjectRecognition;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSProductVisionSearch;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSSceneDetection;\nimport com.huawei.hms.rn.ml.imagerelatedservices.HMSTextImageSuperResolution;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSAft;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSAsr;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSLanguageDetection;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSSoundDetect;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSSpeechRtt;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSTextToSpeech;\nimport com.huawei.hms.rn.ml.languagevoicerelatedservices.HMSTranslate;\nimport com.huawei.hms.rn.ml.modelrelatedservices.HMSCustomModel;\nimport com.huawei.hms.rn.ml.modelrelatedservices.HMSModelDownload;\nimport com.huawei.hms.rn.ml.nlprelatedservices.HMSTextEmbedding;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSBankCardRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSDocumentRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSFormRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSGeneralCardRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSIDCardRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSTextRecognition;\nimport com.huawei.hms.rn.ml.textrelatedservices.HMSVietnamCardRecognition;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSML implements ReactPackage {\n\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSApplication(reactContext));\n        modules.add(new HMSFrame(reactContext));\n        modules.add(new HMSTextRecognition(reactContext));\n        modules.add(new HMSDocumentRecognition(reactContext));\n        modules.add(new HMSBankCardRecognition(reactContext));\n        modules.add(new HMSGeneralCardRecognition(reactContext));\n        modules.add(new HMSIDCardRecognition(reactContext));\n        modules.add(new HMSVietnamCardRecognition(reactContext));\n        modules.add(new HMSFormRecognition(reactContext));\n        modules.add(new HMSTranslate(reactContext));\n        modules.add(new HMSLanguageDetection(reactContext));\n        modules.add(new HMSAsr(reactContext));\n        modules.add(new HMSAft(reactContext));\n        modules.add(new HMSSpeechRtt(reactContext));\n        modules.add(new HMSSoundDetect(reactContext));\n        modules.add(new HMSImageClassification(reactContext));\n        modules.add(new HMSObjectRecognition(reactContext));\n        modules.add(new HMSLandmarkRecognition(reactContext));\n        modules.add(new HMSImageSegmentation(reactContext));\n        modules.add(new HMSImageSuperResolution(reactContext));\n        modules.add(new HMSProductVisionSearch(reactContext));\n        modules.add(new HMSDocumentSkewCorrection(reactContext));\n        modules.add(new HMSTextImageSuperResolution(reactContext));\n        modules.add(new HMSSceneDetection(reactContext));\n        modules.add(new HMSFaceRecognition(reactContext));\n        modules.add(new HMSFaceVerification(reactContext));\n        modules.add(new HMSModelDownload(reactContext));\n        modules.add(new HMSTextToSpeech(reactContext));\n        modules.add(new HMSTextEmbedding(reactContext));\n        modules.add(new HMSCustomModel(reactContext));\n        modules.add(new HMSSkeletonDetection(reactContext));\n        modules.add(new HMSLivenessDetection(reactContext));\n        modules.add(new HMSHandKeypointDetection(reactContext));\n        modules.add(new HMSGestureDetection(reactContext));\n        modules.add(new HMSLensEngine(reactContext));\n        modules.add(new HMSComposite(reactContext));\n\n        return modules;\n    }\n\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.singletonList(new HMSSurfaceView());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/commonservices/HMSApplication.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.commonservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ERROR_CODES;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.common.MLApplication;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class HMSApplication extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSApplication(ReactApplicationContext reactContext) {\n        super(reactContext, HMSApplication.class.getSimpleName(), ERROR_CODES);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param apiKey api key\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param accessToken access token\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAccessToken(String accessToken, final Promise promise) {\n        startMethodExecTimer(\"setAccessToken\");\n\n        if (TextUtils.isEmpty(accessToken)) {\n            handleResult(\"setAccessToken\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setAccessToken(accessToken);\n        handleResult(\"setAccessToken\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns api key that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        handleResult(\"getApiKey\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getApiKey()), promise);\n    }\n\n    /**\n     * Enables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n        handleResult(\"enableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        handleResult(\"disableLogger\", SUCCESS, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/commonservices/HMSComposite.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.commonservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.mlsdk.common.MLCompositeAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport java.util.List;\n\npublic class HMSComposite extends HMSBase {\n    private MLCompositeAnalyzer compositeAnalyzer;\n\n    /**\n     * Initializes module.\n     *\n     * @param mContext context\n     */\n    public HMSComposite(ReactApplicationContext mContext) {\n        super(mContext, HMSComposite.class.getSimpleName(), null);\n    }\n\n    /**\n     * Creates composite analyzer.\n     *\n     * @param configuration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createCompositeAnalyzer(ReadableMap configuration, final Promise promise) {\n        startMethodExecTimer(\"createCompositeAnalyzer\");\n        compositeAnalyzer = HMSObjectCreator.getInstance().createCompositeAnalyzer(configuration);\n        handleResult(\"createCompositeAnalyzer\", SUCCESS, promise);\n    }\n\n    /**\n     * Checks whether an analyzer is available, that is, whether all required resources are loaded.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isAvailable(final Promise promise) {\n        startMethodExecTimer(\"isAvailable\");\n\n        if (compositeAnalyzer == null) {\n            handleResult(\"isAvailable\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        handleResult(\"createCompositeAnalyzer\",\n            HMSResultCreator.getInstance().getBooleanResult(compositeAnalyzer.isAvailable()), promise);\n    }\n\n    /**\n     * Releases resources occupied by a composite analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (compositeAnalyzer == null) {\n            handleResult(\"destroy\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        compositeAnalyzer.destroy();\n        compositeAnalyzer = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Uses a composite analyzer to detect information in an image and returns the detection result list.\n     *\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        try {\n            MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n            if (frame == null) {\n                handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n                return;\n            }\n\n            if (compositeAnalyzer == null) {\n                handleResult(\"destroy\", ANALYZER_NOT_AVAILABLE, promise);\n                return;\n            }\n\n            SparseArray<Object> resultAnalyze = compositeAnalyzer.analyseFrame(frame);\n            List<Object> resultList = HMSUtils.getInstance().convertSparseArrayToList(resultAnalyze);\n            WritableMap result = HMSResultCreator.getInstance().getCompositeResult(resultList.get(0));\n\n            handleResult(\"analyzeFrame\", result, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzeFrame\", e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/commonservices/HMSLensEngine.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.commonservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_ENGINE_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_ON_CLICK_SHUTTER;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_ON_PHOTO_TAKEN;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSLensEngine extends HMSBase implements LensEngine.ShutterListener, LensEngine.PhotographListener {\n    private LensEngine lensEngine;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     */\n    public HMSLensEngine(ReactApplicationContext mContext) {\n        super(mContext, HMSLensEngine.class.getSimpleName(), LENS_ENGINE_CONSTANTS);\n    }\n\n    /**\n     * Creates lens engine with an analyzer\n     *\n     * @param analyzerTag analyzer tag\n     * @param analyzerConfig analyzer configuration\n     * @param lensConfig lens engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createLensEngine(int analyzerTag, ReadableMap analyzerConfig, ReadableMap lensConfig,\n        final Promise promise) {\n        startMethodExecTimer(\"createLensEngine\");\n        MLAnalyzer analyzer = HMSObjectCreator.getInstance()\n            .createLensEngineAnalyzer(analyzerTag, analyzerConfig, getContext());\n\n        if (analyzer == null) {\n            handleResult(\"close\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        lensEngine = HMSObjectCreator.getInstance().createLensEngine(getContext(), analyzer, lensConfig);\n        handleResult(\"createLensEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Closes the camera and stops sending frames to the frame analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n\n        if (lensEngine == null) {\n            handleResult(\"close\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Adjusts the focal length of the camera based on the scaling coefficient (digital zoom).\n     *\n     * @param scale zoom scale\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void doZoom(double scale, final Promise promise) {\n        startMethodExecTimer(\"doZoom\");\n\n        if (lensEngine == null) {\n            handleResult(\"doZoom\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.doZoom((float) scale);\n        handleResult(\"doZoom\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the size of the preview image of a camera.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getDisplayDimension(final Promise promise) {\n        startMethodExecTimer(\"getDisplayDimension\");\n\n        if (lensEngine == null) {\n            handleResult(\"getDisplayDimension\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getDisplayDimension\",\n            HMSResultCreator.getInstance().displayDimensionResult(lensEngine.getDisplayDimension()), promise);\n    }\n\n    /**\n     * Obtains the selected camera type.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLensType(final Promise promise) {\n        startMethodExecTimer(\"getLensType\");\n\n        if (lensEngine == null) {\n            handleResult(\"getLensType\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLensType\", HMSResultCreator.getInstance().integerResult(lensEngine.getLensType()), promise);\n    }\n\n    /**\n     * Monitors photographing.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void photograph(final Promise promise) {\n        startMethodExecTimer(\"photograph\");\n\n        if (lensEngine == null) {\n            handleResult(\"photograph\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.photograph(this, this);\n        handleResult(\"photograph\", SUCCESS, promise);\n    }\n\n    /**\n     * Releases resources occupied by LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void release(final Promise promise) {\n        startMethodExecTimer(\"release\");\n\n        if (lensEngine == null) {\n            handleResult(\"release\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.release();\n        lensEngine = null;\n        handleResult(\"release\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void run(final Promise promise) {\n        startMethodExecTimer(\"run\");\n\n        if (lensEngine == null) {\n            handleResult(\"run\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run();\n            handleResult(\"run\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"run\", e, promise);\n        }\n    }\n\n    /**\n     * Starts the LensEngine and uses SurfaceView as the frame preview panel.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void runWithView(final Promise promise) {\n        startMethodExecTimer(\"runWithView\");\n\n        if (lensEngine == null) {\n            handleResult(\"runWithView\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().getSurfaceViewHolder() == null) {\n            handleResult(\"runWithView\", LENS_HOLDER_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run(HMSUtils.getInstance().getSurfaceViewHolder());\n            handleResult(\"runWithView\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"runWithView\", e, promise);\n        }\n    }\n\n    /**\n     * Photograph take event\n     *\n     * @param bytes Picture as bytes\n     */\n    @Override\n    public void takenPhotograph(byte[] bytes) {\n        Bitmap photo = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), photo)\n            .addOnSuccessListener(s -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(e -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                FAILURE.getStatusAndMessage(null, e.getMessage())));\n    }\n\n    /**\n     * Shutter click event\n     */\n    @Override\n    public void clickShutter() {\n        sendEvent(LENS_ON_CLICK_SHUTTER, \"clickShutter\", null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSFaceRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSFaceRecognition extends HMSBase {\n\n    /**\n     * Initialize module\n     *\n     * @param context app context\n     */\n    public HMSFaceRecognition(ReactApplicationContext context) {\n        super(context, HMSFaceRecognition.class.getSimpleName(), FACE_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Detects faces in a supplied image in asynchronous mode.\n     *\n     * @param is3D makes 3D face analyze if true\n     * @param isStop releases the analyzer resources\n     * @param frameConfiguration frame obtaining configuration\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean is3D, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap faceAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (is3D) {\n            ML3DFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create3DFaceAnalyzer(faceAnalyzerConfiguration);\n            faceAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(ml3DFaces -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().get3DFaceResult(ml3DFaces), promise);\n            }).addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            });\n        } else {\n            MLFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create2DFaceAnalyzer(faceAnalyzerConfiguration);\n            faceAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlFaces -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getFaceResult(mlFaces), promise);\n            }).addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            });\n        }\n    }\n\n    /**\n     * Detects faces in a supplied image in synchronous mode.\n     *\n     * @param is3D makes 3D face analyze if true\n     * @param isStop releases the analyzer resources\n     * @param frameConfiguration frame obtaining configuration\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean is3D, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap faceAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame2D\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (is3D) {\n            ML3DFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create3DFaceAnalyzer(faceAnalyzerConfiguration);\n            WritableMap wm = HMSResultCreator.getInstance()\n                .get3DFaceResult(HMSUtils.getInstance().convertSparseArrayToList(faceAnalyzer.analyseFrame(frame)));\n\n            if (isStop) {\n                stopAnalyzer(faceAnalyzer);\n            }\n\n            handleResult(\"analyzeFrame\", wm, promise);\n        } else {\n            MLFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create2DFaceAnalyzer(faceAnalyzerConfiguration);\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getFaceResult(HMSUtils.getInstance().convertSparseArrayToList(faceAnalyzer.analyseFrame(frame)));\n\n            if (isStop) {\n                stopAnalyzer(faceAnalyzer);\n            }\n\n            handleResult(\"analyzeFrame\", wm, promise);\n        }\n    }\n\n    /**\n     * Stops face analyzer\n     *\n     * @param faceAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLFaceAnalyzer faceAnalyzer) {\n        try {\n            faceAnalyzer.stop();\n            Log.i(getName(), \"MLFaceAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLFaceAnalyzer stop : \" + e.getMessage());\n        }\n    }\n\n    /**\n     * Stops 3D face analyzer\n     *\n     * @param faceAnalyzer analyzer\n     */\n    private void stopAnalyzer(ML3DFaceAnalyzer faceAnalyzer) {\n        try {\n            faceAnalyzer.stop();\n            Log.i(getName(), \"ML3DFaceAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"ML3DFaceAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSFaceVerification.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_VERIFICATION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Rect;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceTemplateResult;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzer;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerFactory;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationResult;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport java.util.List;\n\npublic class HMSFaceVerification extends HMSBase {\n\n    private static final String TAG = HMSFaceVerification.class.getSimpleName();\n\n    private MLFaceVerificationAnalyzer analyzer;\n    private MLFaceVerificationAnalyzerSetting setting;\n    /**\n     * Initialize module\n     *\n     * @param context app context\n     */\n    public HMSFaceVerification(ReactApplicationContext context) {\n        super(context, HMSFaceVerification.class.getSimpleName(), FACE_VERIFICATION_CONSTANTS);\n        initAnalyzer();\n    }\n\n    private void initAnalyzer() {\n        setting = new MLFaceVerificationAnalyzerSetting.Factory().setMaxFaceDetected(3).create();\n        analyzer = MLFaceVerificationAnalyzerFactory.getInstance().getFaceVerificationAnalyzer(setting);\n    }\n\n    @ReactMethod\n    public void setMaxFaceDetected(int maxFaceDetected, Promise promise) {\n        startMethodExecTimer(\"setMaxFaceDetected\");\n        if (maxFaceDetected < 1) {\n            maxFaceDetected = 1;\n        } else if (maxFaceDetected > 3) {\n            maxFaceDetected = 3;\n        }\n\n        setting = new MLFaceVerificationAnalyzerSetting.Factory().setMaxFaceDetected(maxFaceDetected).create();\n        analyzer = MLFaceVerificationAnalyzerFactory.getInstance().getFaceVerificationAnalyzer(setting);\n        handleResult(\"setMaxFaceDetected\", SUCCESS, promise);\n    }\n\n    @ReactMethod\n    public void getMaxFaceDetected(Promise promise) {\n        startMethodExecTimer(\"setMaxFaceDetected\");\n        int maxFaceCount = setting.getMaxFaceDetcted();\n        WritableMap res = Arguments.createMap();\n        res.putInt(\"maxFaceCount\", maxFaceCount);\n        handleResult(\"setMaxFaceDetected\", res, promise);\n    }\n\n    @ReactMethod\n    public void loadTemplatePic(ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"loadTemplatePic\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"loadTemplatePic\", FRAME_NULL, promise);\n            return;\n        }\n\n        long startTime = System.currentTimeMillis();\n        List<MLFaceTemplateResult> results = analyzer.setTemplateFace(frame);\n        long endTime = System.currentTimeMillis();\n        int cost = (int)(endTime - startTime);\n        WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationTemplateResult(results, cost);\n\n        handleResult(\"loadTemplatePic\", wm, promise);\n    }\n\n    @ReactMethod\n    public void compare(boolean isStop, ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"compare\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"compare\", FRAME_NULL, promise);\n            return;\n        }\n\n        final long startTime = System.currentTimeMillis();\n        SparseArray<MLFaceVerificationResult> list = analyzer.analyseFrame(frame);\n        long endTime = System.currentTimeMillis();\n        int cost = (int)(endTime - startTime);\n        WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationCompareResults(list, cost);\n\n        if (isStop) {\n            analyzer.stop();\n        }\n\n        handleResult(\"compare\", wm, promise);\n    }\n\n    @ReactMethod\n    public void asyncCompare(boolean isStop, ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"asyncCompare\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncCompare\", FRAME_NULL, promise);\n            return;\n        }\n\n        final long startTime = System.currentTimeMillis();\n        Task<List<MLFaceVerificationResult>> task = analyzer.asyncAnalyseFrame(frame);\n        task.addOnSuccessListener(mlCompareList -> {\n            long endTime = System.currentTimeMillis();\n            int cost = (int)(endTime - startTime);\n            WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationCompareResults(mlCompareList, cost);\n            if (isStop) {\n                analyzer.stop();\n            }\n\n            handleResult(\"asyncCompare\", wm, promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                analyzer.stop();\n            }\n            handleResult(\"asyncCompare\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSGestureDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GESTURE_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSGestureDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSGestureDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSGestureDetection.class.getSimpleName(), GESTURE_CONSTANTS);\n    }\n\n    /**\n     * Detects gesture in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLGestureAnalyzer gestureAnalyzer = HMSObjectCreator.getInstance().createGestureAnalyzer();\n        WritableMap wm = HMSResultCreator.getInstance().getGestureResults(gestureAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            gestureAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n\n    }\n\n    /**\n     * Detects gesture in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLGestureAnalyzer gestureAnalyzer = HMSObjectCreator.getInstance().createGestureAnalyzer();\n        gestureAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(gesture -> {\n            if (isStop) {\n                gestureAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getGestureResults(gesture), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                gestureAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSHandKeypointDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.HANDKEYPOINT_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSHandKeypointDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSHandKeypointDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSHandKeypointDetection.class.getSimpleName(), HANDKEYPOINT_CONSTANTS);\n    }\n\n    /**\n     * Detects hand key points in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Analyzer configuration to create analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLHandKeypointAnalyzer handKeypointAnalyzer = HMSObjectCreator.getInstance()\n            .createHandKeyPointAnalyzer(analyzerSetting);\n        WritableMap wm = HMSResultCreator.getInstance()\n            .getHandKeyPointResults(handKeypointAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            handKeypointAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n    }\n\n    /**\n     * Detects hand key points in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Analyzer configuration to create analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLHandKeypointAnalyzer handKeyPointAnalyzer = HMSObjectCreator.getInstance()\n            .createHandKeyPointAnalyzer(analyzerSetting);\n        handKeyPointAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(keypoints -> {\n            if (isStop) {\n                handKeyPointAnalyzer.stop();\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getHandKeyPointResults(keypoints),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handKeyPointAnalyzer.stop();\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSLivenessDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LIVENESS_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\n\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCapture;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSLivenessDetection extends HMSBase implements MLLivenessCapture.Callback {\n    private Promise livenessDetectionPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSLivenessDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSLivenessDetection.class.getSimpleName(), LIVENESS_CONSTANTS);\n    }\n\n    /**\n     * Enables liveness detection.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startDetect(final Promise promise) {\n        startMethodExecTimer(\"startDetect\");\n        Activity mActivity = getCurrentActivity();\n\n        if (mActivity == null) {\n            handleResult(\"startDetect\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLLivenessCapture.getInstance().startDetect(mActivity, this);\n        livenessDetectionPromise = promise;\n    }\n\n    /**\n     * Sets the liveness detection capture config\n     *\n     * @param config configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setConfig(ReadableMap config, final Promise promise) {\n        startMethodExecTimer(\"startDetect\");\n        MLLivenessCapture.getInstance().setConfig(HMSObjectCreator.getInstance().createLivenessCaptureConfig(config));\n        handleResult(\"setConfig\", SUCCESS, promise);\n    }\n\n    /**\n     * onSuccess callback\n     * @param result The result that will be resolve\n     */\n    @Override\n    public void onSuccess(MLLivenessCaptureResult result) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap rm = Arguments.createMap();\n        rm.putDouble(\"pitch\", result.getPitch());\n        rm.putDouble(\"roll\", result.getRoll());\n        rm.putDouble(\"score\", result.getScore());\n        rm.putDouble(\"yaw\", result.getYaw());\n        rm.putBoolean(\"isLive\", result.isLive());\n        wm.putMap(\"result\", rm);\n        handleResult(\"MLLivenessCapture.Callback\", wm, livenessDetectionPromise);\n        livenessDetectionPromise = null;\n    }\n\n    /**\n     * onFailure callback\n     * @param errorCode Error code\n     */\n    @Override\n    public void onFailure(int errorCode) {\n        handleResult(\"MLLivenessCapture.Callback\", FAILURE.getStatusAndMessage(errorCode, null),\n            livenessDetectionPromise);\n        livenessDetectionPromise = null;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/facebodyrelatedservices/HMSSkeletonDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SKELETON_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSSkeletonDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSkeletonDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSkeletonDetection.class.getSimpleName(), SKELETON_CONSTANTS);\n    }\n\n    /**\n     * Detects skeleton points in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzeType analyze type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, int analyzeType, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        WritableMap wm = HMSResultCreator.getInstance().getSkeletonSyncResults(skeletonAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            stopAnalyzer(skeletonAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n    }\n\n    /**\n     * Detects skeleton points in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzeType analyze type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, int analyzeType, ReadableMap frameConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        skeletonAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlSkeletons -> {\n            if (isStop) {\n                stopAnalyzer(skeletonAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getSkeletonAsyncResults(mlSkeletons),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(skeletonAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Calculates the similarity between two sets of skeleton data.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param analyzeType analyze type\n     * @param dataSet1 first data set\n     * @param dataSet2 second data set\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void calculateSimilarity(boolean isStop, int analyzeType, ReadableArray dataSet1, ReadableArray dataSet2,\n        final Promise promise) {\n        startMethodExecTimer(\"calculateSimilarity\");\n\n        if (dataSet1.size() == 0 || dataSet2.size() == 0) {\n            handleResult(\"calculateSimilarity\", DATA_SET_NOT_VALID, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        float similarity = skeletonAnalyzer.caluteSimilarity(HMSUtils.getInstance().convertRaToSkeletonList(dataSet1),\n            HMSUtils.getInstance().convertRaToSkeletonList(dataSet2));\n\n        if (isStop) {\n            stopAnalyzer(skeletonAnalyzer);\n        }\n\n        handleResult(\"calculateSimilarity\", HMSResultCreator.getInstance().floatResult(similarity), promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param skeletonAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLSkeletonAnalyzer skeletonAnalyzer) {\n        try {\n            skeletonAnalyzer.stop();\n            Log.i(getName(), \"MLSkeletonAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLSkeletonAnalyzer stop :\" + e.getMessage());\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/adapters/HMSBottomSheetAdapter.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.adapters;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.BaseAdapter;\nimport android.widget.TextView;\n\nimport com.huawei.hms.rn.ml.R;\nimport com.huawei.hms.rn.ml.helpers.models.HMSProductModel;\n\nimport com.facebook.drawee.view.SimpleDraweeView;\n\nimport java.util.List;\n\npublic class HMSBottomSheetAdapter extends BaseAdapter {\n    private List<HMSProductModel> products;\n\n    private Context appContext;\n\n    public HMSBottomSheetAdapter(Context context, List<HMSProductModel> mlProducts) {\n        appContext = context;\n        products = mlProducts;\n    }\n\n    @Override\n    public int getCount() {\n        return products == null ? 0 : products.size();\n    }\n\n    @Override\n    public Object getItem(int i) {\n        return products.get(i);\n    }\n\n    @Override\n    public long getItemId(int i) {\n        return i;\n    }\n\n    @Override\n    public View getView(int i, View view, ViewGroup viewGroup) {\n        if (view == null) {\n            view = View.inflate(appContext, R.layout.hms_product_item, null);\n        }\n        SimpleDraweeView draweeView = view.findViewById(R.id.hms_product_item_image_view);\n        TextView textView = view.findViewById(R.id.hms_product_item_text_view);\n        draweeView.setImageURI(Uri.parse(products.get(i).getImgUrl()));\n        textView.setText(products.get(i).getName());\n        return view;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/constants/HMSConstants.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.constants;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.graphics.Color;\nimport android.hardware.Camera;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureConfig;\nimport com.huawei.hms.mlsdk.aft.MLAftConstants;\nimport com.huawei.hms.mlsdk.aft.MLAftErrors;\nimport com.huawei.hms.mlsdk.asr.MLAsrConstants;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.document.MLDocument;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.MLFaceKeyPoint;\nimport com.huawei.hms.mlsdk.face.MLFaceShape;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoint;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationClassification;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationScene;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationSetting;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzerSetting;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureError;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadStrategy;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzerSetting;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzerSetting;\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting;\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetectConstants;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.text.MLLocalTextSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingException;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingSetting;\nimport com.huawei.hms.mlsdk.tts.MLTtsAudioFragment;\nimport com.huawei.hms.mlsdk.tts.MLTtsConstants;\nimport com.huawei.hms.mlsdk.tts.MLTtsEngine;\nimport com.huawei.hms.mlsdk.tts.MLTtsError;\nimport com.huawei.hms.mlsdk.tts.MLTtsWarn;\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSConstants {\n    // Translate\n    public static final String TRANSLATE_DOWNLOAD_ON_PROCESS = \"translateDownloadProcess\";\n\n    // Tts\n    public static final String TTS_ON_AUDIO_AVAILABLE = \"ttsOnAudioAvailable\";\n\n    public static final String TTS_ON_EVENT = \"ttsOnEvent\";\n\n    public static final String TTS_ON_RANGE_START = \"ttsOnRangeStart\";\n\n    public static final String TTS_ON_WARN = \"ttsOnWarn\";\n\n    public static final String TTS_ON_ERROR = \"ttsOnError\";\n\n    // Aft\n    public static final String AFT_ON_INIT_COMPLETE = \"aftOnInitComplete\";\n\n    public static final String AFT_ON_UPLOAD_PROGRESS = \"aftOnUploadProgress\";\n\n    public static final String AFT_ON_EVENT = \"aftOnEvent\";\n\n    public static final String AFT_ON_RESULT = \"aftOnResult\";\n\n    public static final String AFT_ON_ERROR = \"aftOnError\";\n\n    // Speech rtt\n    public static final String SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnRecognizingResults\";\n\n    public static final String SPEECH_RTT_ON_ERROR = \"speechRttOnError\";\n\n    public static final String SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\";\n\n    public static final String SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\";\n\n    public static final String SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\";\n\n    public static final String SPEECH_RTT_ON_STATE = \"speechRttOnState\";\n\n    // Sound detect\n    public static final String SOUND_DETECT_ON_FAILURE = \"soundDetectOnFailure\";\n\n    public static final String SOUND_DETECT_ON_SUCCESS = \"soundDetectOnSuccess\";\n\n    // Asr\n    public static final String ASR_ON_STATE = \"asrOnState\";\n\n    public static final String ASR_ON_VOICE_DATA_RECEIVED = \"asrOnVoiceDataReceived\";\n\n    public static final String ASR_ON_STARTING_SPEECH = \"asrOnStartingOfSpeech\";\n\n    public static final String ASR_ON_START_LISTENING = \"asrOnStartListening\";\n\n    public static final String ASR_ON_ERROR = \"asrOnError\";\n\n    public static final String ASR_ON_RECOGNIZING_RESULTS = \"asrOnRecognizingResults\";\n\n    public static final String ASR_ON_RESULTS = \"asrOnResults\";\n\n    // Model download\n    public static final String DOWNLOAD_ON_PROCESS = \"modelDownloadOnProcess\";\n\n    public static final int MODEL_TTS_TAG = 1;\n\n    public static final int MODEL_TRANSLATE_TAG = 2;\n\n    public static final int MODEL_CUSTOM_TAG = 3;\n\n    // Bcr\n    public static final String BCR_IMAGE_SAVE = \"bcrSuccessImage\";\n\n    // Gcr\n    public static final String GCR_IMAGE_SAVE = \"gcrOnResult\";\n\n    // Id card\n    public static final String IDCARD_IMAGE_SAVE = \"idCardOnResult\";\n\n    // VN Id card\n    public static final String ICRVN_IMAGE_SAVE = \"vnCardOnResult\";\n\n    // product vision plugin\n    public static final String PRODUCT_ON_RESULT = \"productOnResult\";\n\n    // lens engine\n    public static final String LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\";\n\n    public static final String LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\";\n\n    public static final String LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\";\n\n    public static final String LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\";\n\n    public static final String LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\";\n\n    // text transactor\n    public static final String TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\";\n\n    public static final String TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\";\n\n    // 2d face transactor\n    public static final String FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\";\n\n    public static final String FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\";\n\n    // 3d face transactor\n    public static final String FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\";\n\n    public static final String FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\";\n\n    // skeleton transactor\n    public static final String SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\";\n\n    public static final String SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\";\n\n    // scene transactor\n    public static final String SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\";\n\n    public static final String SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\";\n\n    // classification transactor\n    public static final String CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\";\n\n    public static final String CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\";\n\n    // object transactor\n    public static final String OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\";\n\n    public static final String OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\";\n\n    // hand keypoint transactor\n    public static final String HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\";\n\n    public static final String HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\";\n\n    // gesture transactor\n    public static final String GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\";\n\n    public static final String GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\";\n\n    // on-device languages\n    private static final Map<String, Object> BASE_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"LATIN\", \"rm\");\n            put(\"ENGLISH\", \"en\");\n            put(\"CHINESE\", \"zh\");\n            put(\"JAPANESE\", \"ja\");\n            put(\"KOREAN\", \"ko\");\n            put(\"RUSSIAN\", \"ru\");\n            put(\"GERMAN\", \"de\");\n            put(\"FRENCH\", \"fr\");\n            put(\"ITALIAN\", \"it\");\n            put(\"PORTUGUESE\", \"pt\");\n            put(\"SPANISH\", \"es\");\n        }\n    };\n\n    // on-cloud languages\n    private static final Map<String, Object> EXTRA_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"POLISH\", \"pl\");\n            put(\"NORWEGIAN\", \"no\");\n            put(\"SWEDISH\", \"sv\");\n            put(\"DANISH\", \"da\");\n            put(\"TURKISH\", \"tr\");\n            put(\"FINNISH\", \"fi\");\n            put(\"THAI\", \"th\");\n            put(\"ARABIC\", \"ar\");\n            put(\"HINDI\", \"hi\");\n        }\n    };\n\n    // border types\n    private static final Map<String, Object> BORDER_TYPE = new HashMap<String, Object>() {\n        {\n            put(\"ARC\", MLRemoteTextSetting.ARC);\n            put(\"NGON\", MLRemoteTextSetting.NGON);\n        }\n    };\n\n    // device orientation constants\n    private static final Map<String, Object> ORIENTATION_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"ORIENTATION_AUTO\", 0);\n            put(\"ORIENTATION_LANDSCAPE\", 1);\n            put(\"ORIENTATION_PORTRAIT\", 2);\n        }\n    };\n\n    // color codes of Android Color class\n    private static final Map<String, Object> COLOR_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"BLACK\", Color.BLACK);\n            put(\"BLUE\", Color.BLUE);\n            put(\"CYAN\", Color.CYAN);\n            put(\"DKGRAY\", Color.DKGRAY);\n            put(\"GRAY\", Color.GRAY);\n            put(\"GREEN\", Color.GREEN);\n            put(\"LTGRAY\", Color.LTGRAY);\n            put(\"MAGENTA\", Color.MAGENTA);\n            put(\"RED\", Color.RED);\n            put(\"TRANSPARENT\", Color.TRANSPARENT);\n            put(\"WHITE\", Color.WHITE);\n            put(\"YELLOW\", Color.YELLOW);\n        }\n    };\n\n    // error codes exposed by HMSApplication\n    public static final Map<String, Object> ERROR_CODES = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"UNKNOWN\", MLException.UNKNOWN);\n            put(\"SUCCESS\", MLException.SUCCESS);\n            put(\"DISCARDED\", MLException.DISCARDED);\n            put(\"INNER\", MLException.INNER);\n            put(\"INACTIVE\", MLException.INACTIVE);\n            put(\"NOT_SUPPORTED\", MLException.NOT_SUPPORTED);\n            put(\"ILLEGAL_PARAMETER\", MLException.ILLEGAL_PARAMETER);\n            put(\"OVERDUE\", MLException.OVERDUE);\n            put(\"NO_FOUND\", MLException.NO_FOUND);\n            put(\"DUPLICATE_FOUND\", MLException.DUPLICATE_FOUND);\n            put(\"NO_PERMISSION\", MLException.NO_PERMISSION);\n            put(\"INSUFFICIENT_RESOURCE\", MLException.INSUFFICIENT_RESOURCE);\n            put(\"ANALYSIS_FAILURE\", MLException.ANALYSIS_FAILURE);\n            put(\"INTERRUPTED\", MLException.INTERRUPTED);\n            put(\"EXCEED_RANGE\", MLException.EXCEED_RANGE);\n            put(\"DATA_MISSING\", MLException.DATA_MISSING);\n            put(\"AUTHENTICATION_REQUIRED\", MLException.AUTHENTICATION_REQUIRED);\n            put(\"TFLITE_NOT_COMPATIBLE\", MLException.TFLITE_NOT_COMPATIBLE);\n            put(\"INSUFFICIENT_SPACE\", MLException.INSUFFICIENT_SPACE);\n            put(\"HASH_MISS\", MLException.HASH_MISS);\n            put(\"TOKEN_INVALID\", MLException.TOKEN_INVALID);\n            put(\"FRAME_NULL\", FRAME_NULL.getErrCode());\n            put(\"ANALYZER_NOT_AVAILABLE\", ANALYZER_NOT_AVAILABLE.getErrCode());\n            put(\"CURRENT_ACTIVITY_NULL\", CURRENT_ACTIVITY_NULL.getErrCode());\n            put(\"CANCEL\", CANCEL.getErrCode());\n            put(\"FAILURE\", FAILURE.getErrCode());\n            put(\"DENY\", DENY.getErrCode());\n            put(\"STRING_PARAM_NULL\", STRING_PARAM_NULL.getErrCode());\n            put(\"REMOTE_MODEL_NULL\", REMOTE_MODEL_NULL.getErrCode());\n            put(\"ASR_RECOGNIZER_NULL\", ASR_RECOGNIZER_NULL.getErrCode());\n            put(\"TTS_ENGINE_NULL\", TTS_ENGINE_NULL.getErrCode());\n            put(\"SOUND_DECT_NULL\", SOUND_DECT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_SETTING_NULL\", CUSTOM_MODEL_SETTING_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_INPUT_NULL\", CUSTOM_MODEL_INPUT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_EXECUTOR_SETTING_NULL\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL.getErrCode());\n            put(\"DATA_SET_NOT_VALID\", DATA_SET_NOT_VALID.getErrCode());\n            put(\"LENS_ENGINE_NULL\", LENS_ENGINE_NULL.getErrCode());\n            put(\"LENS_HOLDER_NULL\", LENS_HOLDER_NULL.getErrCode());\n        }\n    });\n\n    // translate language constants HMSTranslate\n    public static final Map<String, Object> TRANSLATE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TRANSLATE_DOWNLOAD_ON_PROCESS\", TRANSLATE_DOWNLOAD_ON_PROCESS);\n            putAll(BASE_LANGUAGES);\n            putAll(EXTRA_LANGUAGES);\n            put(\"TAMIL\", \"ta\");\n            put(\"HUNGARIAN\", \"hu\");\n            put(\"DUTCH\", \"nl\");\n            put(\"PERSIAN\", \"fa\");\n            put(\"SLOVAK\", \"sk\");\n            put(\"ESTONIAN\", \"et\");\n            put(\"LATVIAN\", \"lv\");\n            put(\"KHMER\", \"km\");\n            put(\"INDONESIAN\", \"id\");\n            put(\"SERBIAN\", \"sr\");\n            put(\"GUJARATI\", \"gu\");\n            put(\"AFRIKAANS\", \"af\");\n            put(\"MALAY\", \"ms\");\n            put(\"GREEK\", \"el\");\n            put(\"IRISH\", \"is\");\n            put(\"BURMESE\", \"my\");\n            put(\"MARATHI\", \"mr\");\n            put(\"CZECH\", \"cs\");\n            put(\"VIETNAMESE\", \"vi\");\n            put(\"TAGALOG\", \"tl\");\n            put(\"HEBREW\", \"he\");\n            put(\"ROMANIAN\", \"ro\");\n            put(\"BULGARIAN\", \"bg\");\n            put(\"CROATIAN\", \"hr\");\n            put(\"PUNJABI\", \"pa\");\n            put(\"TELUGU\", \"te\");\n            put(\"TRADITIONAL_CHINESE\", \"zh-hk\");\n        }\n    });\n\n    // frame constants HMSFrame\n    public static final Map<String, Object> FRAME_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"SCREEN_FIRST_QUADRANT\", MLFrame.SCREEN_FIRST_QUADRANT);\n            put(\"SCREEN_SECOND_QUADRANT\", MLFrame.SCREEN_SECOND_QUADRANT);\n            put(\"SCREEN_THIRD_QUADRANT\", MLFrame.SCREEN_THIRD_QUADRANT);\n            put(\"SCREEN_FOURTH_QUADRANT\", MLFrame.SCREEN_FOURTH_QUADRANT);\n            put(\"IMAGE_FORMAT_NV21\", MLFrame.Property.IMAGE_FORMAT_NV21);\n            put(\"IMAGE_FORMAT_YV12\", MLFrame.Property.IMAGE_FORMAT_YV12);\n        }\n    });\n\n    // text analyzer setting constants HMSTextRecognition\n    public static final Map<String, Object> TEXT_SETTING_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(BASE_LANGUAGES);\n            putAll(EXTRA_LANGUAGES);\n            putAll(BORDER_TYPE);\n            put(\"OCR_DETECT_MODE\", MLLocalTextSetting.OCR_DETECT_MODE);\n            put(\"OCR_TRACKING_MODE\", MLLocalTextSetting.OCR_TRACKING_MODE);\n            put(\"OCR_COMPACT_SCENE\", MLRemoteTextSetting.OCR_COMPACT_SCENE);\n            put(\"OCR_LOOSE_SCENE\", MLRemoteTextSetting.OCR_LOOSE_SCENE);\n        }\n    });\n\n    // document analyzer constants HMSDocumentRecognition\n    public static final Map<String, Object> DOCUMENT_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                putAll(BASE_LANGUAGES);\n                putAll(EXTRA_LANGUAGES);\n                putAll(BORDER_TYPE);\n                put(\"OTHER\", MLDocument.Interval.OTHER);\n                put(\"NEW_LINE_CHARACTER\", MLDocument.Interval.NEW_LINE_CHARACTER);\n                put(\"SPACE\", MLDocument.Interval.SPACE);\n            }\n        });\n\n    // bank card recognition constants HMSBankCardRecognition\n    public static final Map<String, Object> BCR_PLUGIN_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(ORIENTATION_CONSTANTS);\n            put(\"ERROR_CODE_INIT_CAMERA_FAILED\", MLBcrCaptureConfig.ERROR_CODE_INIT_CAMERA_FAILED);\n            put(\"RESULT_ALL\", MLBcrCaptureConfig.RESULT_ALL);\n            put(\"RESULT_NUM_ONLY\", MLBcrCaptureConfig.RESULT_NUM_ONLY);\n            put(\"RESULT_SIMPLE\", MLBcrCaptureConfig.RESULT_SIMPLE);\n            put(\"STRICT_MODE\", MLBcrCaptureConfig.STRICT_MODE);\n            put(\"SIMPLE_MODE\", MLBcrCaptureConfig.SIMPLE_MODE);\n            put(\"BCR_IMAGE_SAVE\", BCR_IMAGE_SAVE);\n        }\n    });\n\n    // general card recognition constants HMSGeneralCardRecognition\n    public static final Map<String, Object> GCR_PLUGIN_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(ORIENTATION_CONSTANTS);\n            putAll(COLOR_CONSTANTS);\n            put(\"GCR_IMAGE_SAVE\", GCR_IMAGE_SAVE);\n        }\n    });\n\n    // vn card recognition constants HMSVietnamCardRecognition\n    public static final Map<String, Object> ICRVN_PLUGIN_CONSTANTS = ImmutableMap.copyOf(\n            new HashMap<String, Object>() {\n                {\n                    put(\"ICRVN_IMAGE_SAVE\", ICRVN_IMAGE_SAVE);\n                }\n            });\n\n    // id card recognition constants HMSIDCardRecognition\n    public static final Map<String, Object> IDCARD_PLUGIN_CONSTANTS = ImmutableMap.copyOf(\n            new HashMap<String, Object>() {\n                {\n                    put(\"IDCARD_IMAGE_SAVE\", IDCARD_IMAGE_SAVE);\n                }\n            });\n\n    // language detection constants HMSLanguageDetection\n    public static final Map<String, Object> LANGUAGE_DETECTION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n                put(\"PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n                put(\"UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n            }\n        });\n\n    // asr constants HMSAsr\n    public static final Map<String, Object> ASR_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ERR_NO_NETWORK\", MLAsrConstants.ERR_NO_NETWORK);\n            put(\"ERR_NO_UNDERSTAND\", MLAsrConstants.ERR_NO_UNDERSTAND);\n            put(\"ERR_SERVICE_UNAVAILABLE\", MLAsrConstants.ERR_SERVICE_UNAVAILABLE);\n            put(\"ERR_INVALIDATE_TOKEN\", MLAsrConstants.ERR_INVALIDATE_TOKEN);\n            put(\"FEATURE_ALL_IN_ONE\", MLAsrConstants.FEATURE_ALLINONE);\n            put(\"FEATURE_WORD_FLUX\", MLAsrConstants.FEATURE_WORDFLUX);\n            put(\"LAN_EN_US\", MLAsrConstants.LAN_EN_US);\n            put(\"LAN_FR_FR\", MLAsrConstants.LAN_FR_FR);\n            put(\"LAN_ZH_CN\", MLAsrConstants.LAN_ZH_CN);\n            put(\"LAN_ES_ES\", MLAsrConstants.LAN_ES_ES);\n            put(\"LAN_DE_DE\", MLAsrConstants.LAN_DE_DE);\n            put(\"LAN_RU_RU\", MLAsrConstants.LAN_RU_RU);\n            put(\"LAN_IT_IT\", MLAsrConstants.LAN_IT_IT);\n            put(\"LAN_AR\", MLAsrConstants.LAN_AR);\n            put(\"LAN_RU_RU\", MLAsrConstants.LAN_RU_RU);\n            put(\"LAN_TH_TH\", MLAsrConstants.LAN_TH_TH);\n            put(\"LAN_MS_MY\", MLAsrConstants.LAN_MS_MY);\n            put(\"LAN_FIL_PH\", MLAsrConstants.LAN_FIL_PH);\n            put(\"STATE_WAITING\", MLAsrConstants.STATE_WAITING);\n            put(\"STATE_NO_UNDERSTAND\", MLAsrConstants.STATE_NO_UNDERSTAND);\n            put(\"STATE_NO_SOUND_TIMES_EXCEED\", MLAsrConstants.STATE_NO_SOUND_TIMES_EXCEED);\n            put(\"STATE_NO_SOUND\", MLAsrConstants.STATE_NO_SOUND);\n            put(\"STATE_NO_NETWORK\", MLAsrConstants.STATE_NO_NETWORK);\n            put(\"STATE_LISTENING\", MLAsrConstants.STATE_LISTENING);\n            put(\"ASR_ON_ERROR\", ASR_ON_ERROR);\n            put(\"ASR_ON_RECOGNIZING_RESULTS\", ASR_ON_RECOGNIZING_RESULTS);\n            put(\"ASR_ON_RESULTS\", ASR_ON_RESULTS);\n            put(\"ASR_ON_START_LISTENING\", ASR_ON_START_LISTENING);\n            put(\"ASR_ON_STARTING_SPEECH\", ASR_ON_STARTING_SPEECH);\n            put(\"ASR_ON_STATE\", ASR_ON_STATE);\n            put(\"ASR_ON_VOICE_DATA_RECEIVED\", ASR_ON_VOICE_DATA_RECEIVED);\n        }\n    });\n\n    // tts constants HMSTextToSpeech\n    public static final Map<String, Object> TTS_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TTS_OFFLINE_MODE\", MLTtsConstants.TTS_OFFLINE_MODE);\n            put(\"TTS_ONLINE_MODE\", MLTtsConstants.TTS_ONLINE_MODE);\n            put(\"EXTERNAL_PLAYBACK\", MLTtsEngine.EXTERNAL_PLAYBACK);\n            put(\"OPEN_STREAM\", MLTtsEngine.OPEN_STREAM);\n            put(\"QUEUE_APPEND\", MLTtsEngine.QUEUE_APPEND);\n            put(\"QUEUE_FLUSH\", MLTtsEngine.QUEUE_FLUSH);\n            put(\"ERR_AUDIO_PLAYER_FAILED\", MLTtsError.ERR_AUDIO_PLAYER_FAILED);\n            put(\"ERR_AUTHORIZE_FAILED\", MLTtsError.ERR_AUTHORIZE_FAILED);\n            put(\"ERR_ILLEGAL_PARAMETER\", MLTtsError.ERR_ILLEGAL_PARAMETER);\n            put(\"ERR_INSUFFICIENT_BALANCE\", MLTtsError.ERR_INSUFFICIENT_BALANCE);\n            put(\"ERR_INTERNAL\", MLTtsError.ERR_INTERNAL);\n            put(\"ERR_NET_CONNECT_FAILED\", MLTtsError.ERR_NET_CONNECT_FAILED);\n            put(\"ERR_SPEECH_SYNTHESIS_FAILED\", MLTtsError.ERR_SPEECH_SYNTHESIS_FAILED);\n            put(\"ERR_UNKNOWN\", MLTtsError.ERR_UNKNOWN);\n            put(\"WARN_INSUFFICIENT_BANDWIDTH\", MLTtsWarn.WARN_INSUFFICIENT_BANDWIDTH);\n            put(\"EVENT_PLAY_PAUSE\", MLTtsConstants.EVENT_PLAY_PAUSE);\n            put(\"EVENT_PLAY_RESUME\", MLTtsConstants.EVENT_PLAY_RESUME);\n            put(\"EVENT_PLAY_START\", MLTtsConstants.EVENT_PLAY_START);\n            put(\"EVENT_PLAY_STOP\", MLTtsConstants.EVENT_PLAY_STOP);\n            put(\"EVENT_PLAY_STOP_INTERRUPTED\", MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED);\n            put(\"EVENT_SYNTHESIS_START\", MLTtsConstants.EVENT_SYNTHESIS_START);\n            put(\"EVENT_SYNTHESIS_COMPLETE\", MLTtsConstants.EVENT_SYNTHESIS_COMPLETE);\n            put(\"EVENT_SYNTHESIS_END\", MLTtsConstants.EVENT_SYNTHESIS_END);\n            put(\"EVENT_SYNTHESIS_INTERRUPTED\", MLTtsConstants.EVENT_SYNTHESIS_INTERRUPTED);\n            put(\"TTS_EN_US\", MLTtsConstants.TTS_EN_US);\n            put(\"TTS_LAN_DE_DE\", MLTtsConstants.TTS_LAN_DE_DE);\n            put(\"TTS_LAN_ES_ES\", MLTtsConstants.TTS_LAN_ES_ES);\n            put(\"TTS_LAN_FR_FR\", MLTtsConstants.TTS_LAN_FR_FR);\n            put(\"TTS_LAN_IT_IT\", MLTtsConstants.TTS_LAN_IT_IT);\n            put(\"TTS_LAN_TH_TH\", MLTtsConstants.TTS_LAN_TH_TH);\n            put(\"TTS_LAN_MS_MS\", MLTtsConstants.TTS_LAN_MS_MS);\n            put(\"TTS_LAN_RU_RU\", MLTtsConstants.TTS_LAN_RU_RU);\n            put(\"TTS_LAN_PL_PL\", MLTtsConstants.TTS_LAN_PL_PL);\n            put(\"TTS_LAN_AR_AR\", MLTtsConstants.TTS_LAN_AR_AR);\n            put(\"TTS_LAN_TR_TR\", MLTtsConstants.TTS_LAN_TR_TR);\n            put(\"TTS_SPEAKER_FEMALE_EN\", MLTtsConstants.TTS_SPEAKER_FEMALE_EN);\n            put(\"TTS_SPEAKER_FEMALE_ZH\", MLTtsConstants.TTS_SPEAKER_FEMALE_ZH);\n            put(\"TTS_SPEAKER_FEMALE_ZH_2\", MLTtsConstants.TTS_SPEAKER_FEMALE_ZH_2);\n            put(\"TTS_SPEAKER_MALE_EN\", MLTtsConstants.TTS_SPEAKER_MALE_EN);\n            put(\"TTS_SPEAKER_MALE_EN_2\", MLTtsConstants.TTS_SPEAKER_MALE_EN_2);\n            put(\"TTS_SPEAKER_MALE_ZH\", MLTtsConstants.TTS_SPEAKER_MALE_ZH);\n            put(\"TTS_SPEAKER_MALE_ZH_2\", MLTtsConstants.TTS_SPEAKER_MALE_ZH_2);\n            put(\"TTS_ZH_HANS\", MLTtsConstants.TTS_ZH_HANS);\n            put(\"TTS_SPEAKER_FEMALE_DE\", MLTtsConstants.TTS_SPEAKER_FEMALE_DE);\n            put(\"TTS_SPEAKER_FEMALE_ES\", MLTtsConstants.TTS_SPEAKER_FEMALE_ES);\n            put(\"TTS_SPEAKER_FEMALE_FR\", MLTtsConstants.TTS_SPEAKER_FEMALE_FR);\n            put(\"TTS_SPEAKER_FEMALE_IT\", MLTtsConstants.TTS_SPEAKER_FEMALE_IT);\n            put(\"TTS_SPEAKER_FEMALE_TH\", MLTtsConstants.TTS_SPEAKER_FEMALE_TH);\n            put(\"TTS_SPEAKER_FEMALE_MS\", MLTtsConstants.TTS_SPEAKER_FEMALE_MS);\n            put(\"TTS_SPEAKER_FEMALE_RU\", MLTtsConstants.TTS_SPEAKER_FEMALE_RU);\n            put(\"TTS_SPEAKER_FEMALE_PL\", MLTtsConstants.TTS_SPEAKER_FEMALE_PL);\n            put(\"TTS_SPEAKER_FEMALE_AR\", MLTtsConstants.TTS_SPEAKER_FEMALE_AR);\n            put(\"TTS_SPEAKER_FEMALE_TR\", MLTtsConstants.TTS_SPEAKER_FEMALE_TR);\n            put(\"TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE);\n            put(\"LANGUAGE_AVAILABLE\", MLTtsConstants.LANGUAGE_AVAILABLE);\n            put(\"LANGUAGE_NOT_SUPPORT\", MLTtsConstants.LANGUAGE_NOT_SUPPORT);\n            put(\"LANGUAGE_UPDATING\", MLTtsConstants.LANGUAGE_UPDATING);\n            put(\"CHANNEL_OUT_MONO\", MLTtsAudioFragment.CHANNEL_OUT_MONO);\n            put(\"FORMAT_PCM_8BIT\", MLTtsAudioFragment.FORMAT_PCM_8BIT);\n            put(\"FORMAT_PCM_16BIT\", MLTtsAudioFragment.FORMAT_PCM_16BIT);\n            put(\"SAMPLE_RATE_16K\", MLTtsAudioFragment.SAMPLE_RATE_16K);\n            put(\"TTS_ON_AUDIO_AVAILABLE\", TTS_ON_AUDIO_AVAILABLE);\n            put(\"TTS_ON_EVENT\", TTS_ON_EVENT);\n            put(\"TTS_ON_RANGE_START\", TTS_ON_RANGE_START);\n            put(\"TTS_ON_WARN\", TTS_ON_WARN);\n            put(\"TTS_ON_ERROR\", TTS_ON_ERROR);\n        }\n    });\n\n    // aft constants HMSAft\n    public static final Map<String, Object> AFT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"LANGUAGE_ZH\", MLAftConstants.LANGUAGE_ZH);\n            put(\"LANGUAGE_EN_US\", MLAftConstants.LANGUAGE_EN_US);\n            put(\"ERR_UNKNOWN\", MLAftErrors.ERR_UNKNOWN);\n            put(\"ERR_TASK_NOT_EXISTED\", MLAftErrors.ERR_TASK_NOT_EXISTED);\n            put(\"ERR_TASK_ALREADY_INPROGRESS\", MLAftErrors.ERR_TASK_ALREADY_INPROGRESS);\n            put(\"ERR_RESULT_WHEN_UPLOADING\", MLAftErrors.ERR_RESULT_WHEN_UPLOADING);\n            put(\"ERR_NO_ENOUGH_STORAGE\", MLAftErrors.ERR_NO_ENOUGH_STORAGE);\n            put(\"ERR_NETCONNECT_FAILED\", MLAftErrors.ERR_NETCONNECT_FAILED);\n            put(\"ERR_LANGUAGE_CODE_NOTSUPPORTED\", MLAftErrors.ERR_LANGUAGE_CODE_NOTSUPPORTED);\n            put(\"ERR_INTERNAL\", MLAftErrors.ERR_INTERNAL);\n            put(\"ERR_ILLEGAL_PARAMETER\", MLAftErrors.ERR_ILLEGAL_PARAMETER);\n            put(\"ERR_FILE_NOT_FOUND\", MLAftErrors.ERR_FILE_NOT_FOUND);\n            put(\"ERR_ENGINE_BUSY\", MLAftErrors.ERR_ENGINE_BUSY);\n            put(\"ERR_SERVICE_CREDIT\", MLAftErrors.ERR_SERVICE_CREDIT);\n            put(\"ERR_SERVICE_UNSUBSCRIBED\", MLAftErrors.ERR_SERVICE_UNSUBSCRIBED);\n            put(\"ERR_SERVICE_FREE_USED_UP\", MLAftErrors.ERR_SERVICE_FREE_USED_UP);\n            put(\"ERR_AUTHORIZE_FAILED\", MLAftErrors.ERR_AUTHORIZE_FAILED);\n            put(\"ERR_AUDIO_UPLOAD_FAILED\", MLAftErrors.ERR_AUDIO_UPLOAD_FAILED);\n            put(\"ERR_AUDIO_TRANSCRIPT_FAILED\", MLAftErrors.ERR_AUDIO_TRANSCRIPT_FAILED);\n            put(\"ERR_AUDIO_LENGTH_OVERFLOW\", MLAftErrors.ERR_AUDIO_LENGTH_OVERFLOW);\n            put(\"ERR_AUDIO_FILE_NOTSUPPORTED\", MLAftErrors.ERR_AUDIO_FILE_NOTSUPPORTED);\n            put(\"ERR_AUDIO_FILE_SIZE_OVERFLOW\", MLAftErrors.ERR_AUDIO_FILE_SIZE_OVERFLOW);\n            put(\"ERR_AUDIO_INIT_FAILED\", MLAftErrors.ERR_AUDIO_INIT_FAILED);\n            put(\"AFT_ON_ERROR\", AFT_ON_ERROR);\n            put(\"AFT_ON_EVENT\", AFT_ON_EVENT);\n            put(\"AFT_ON_INIT_COMPLETE\", AFT_ON_INIT_COMPLETE);\n            put(\"AFT_ON_UPLOAD_PROGRESS\", AFT_ON_UPLOAD_PROGRESS);\n            put(\"AFT_ON_RESULT\", AFT_ON_RESULT);\n        }\n    });\n\n    // speech rtt constants HMSSpeechRtt\n    public static final Map<String, Object> SPEECH_RTT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ERR_INVALID_TOKEN\", MLSpeechRealTimeTranscriptionConstants.ERR_INVALIDE_TOKEN);\n            put(\"ERR_NO_NETWORK\", MLSpeechRealTimeTranscriptionConstants.ERR_NO_NETWORK);\n            put(\"ERR_SERVICE_CREDIT\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_CREDIT);\n            put(\"ERR_SERVICE_UNAVAILABLE\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_UNAVAILABLE);\n            put(\"ERR_SERVICE_UNSUBSCRIBED\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_UNSUBSCRIBED);\n            put(\"ERR_SERVICE_FREE_USED_UP\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_FREE_USED_UP);\n            put(\"LAN_EN_US\", MLSpeechRealTimeTranscriptionConstants.LAN_EN_US);\n            put(\"LAN_FR_FR\", MLSpeechRealTimeTranscriptionConstants.LAN_FR_FR);\n            put(\"LAN_ZH_CN\", MLSpeechRealTimeTranscriptionConstants.LAN_ZH_CN);\n            put(\"LAN_ES_ES\", MLSpeechRealTimeTranscriptionConstants.LAN_ES_ES);\n            put(\"LAN_EN_IN\", MLSpeechRealTimeTranscriptionConstants.LAN_EN_IN);\n            put(\"LAN_DE_DE\", MLSpeechRealTimeTranscriptionConstants.LAN_DE_DE);\n            put(\"STATE_LISTENING\", MLSpeechRealTimeTranscriptionConstants.STATE_LISTENING);\n            put(\"STATE_NO_NETWORK\", MLSpeechRealTimeTranscriptionConstants.STATE_NO_NETWORK);\n            put(\"STATE_NO_UNDERSTAND\", MLSpeechRealTimeTranscriptionConstants.STATE_NO_UNDERSTAND);\n            put(\"STATE_SERVICE_RECONNECTED\", MLSpeechRealTimeTranscriptionConstants.STATE_SERVICE_RECONNECTED);\n            put(\"STATE_SERVICE_RECONNECTING\", MLSpeechRealTimeTranscriptionConstants.STATE_SERVICE_RECONNECTING);\n            put(\"SPEECH_RTT_ON_RECOGNIZING_RESULTS\", SPEECH_RTT_ON_RECOGNIZING_RESULTS);\n            put(\"SPEECH_RTT_ON_ERROR\", SPEECH_RTT_ON_ERROR);\n            put(\"SPEECH_RTT_ON_LISTENING\", SPEECH_RTT_ON_LISTENING);\n            put(\"SPEECH_RTT_ON_STARTING_OF_SPEECH\", SPEECH_RTT_ON_STARTING_OF_SPEECH);\n            put(\"SPEECH_RTT_ON_VOICE_DATA_RECEIVED\", SPEECH_RTT_ON_VOICE_DATA_RECEIVED);\n            put(\"SPEECH_RTT_ON_STATE\", SPEECH_RTT_ON_STATE);\n            put(\"SCENES_SHOPPING\", MLSpeechRealTimeTranscriptionConstants.SCENES_SHOPPING);\n        }\n    });\n\n    // sound detect constants HMSSoundDetect\n    public static final Map<String, Object> SOUND_DETECT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"SOUND_DETECT_ERROR_AUDIO\", MLSoundDetectConstants.SOUND_DETECT_ERROR_AUDIO);\n            put(\"SOUND_DETECT_ERROR_FATAL_ERROR\", MLSoundDetectConstants.SOUND_DETECT_ERROR_FATAL_ERROR);\n            put(\"SOUND_DETECT_ERROR_NO_MEM\", MLSoundDetectConstants.SOUND_DETECT_ERROR_NO_MEM);\n            put(\"SOUND_DETECT_ERROR_INTERNAL\", MLSoundDetectConstants.SOUND_DETECT_ERROR_INTERNAL);\n            put(\"SOUND_EVENT_TYPE_ALARM\", MLSoundDetectConstants.SOUND_EVENT_TYPE_ALARM);\n            put(\"SOUND_EVENT_TYPE_BABY_CRY\", MLSoundDetectConstants.SOUND_EVENT_TYPE_BABY_CRY);\n            put(\"SOUND_EVENT_TYPE_BARK\", MLSoundDetectConstants.SOUND_EVENT_TYPE_BARK);\n            put(\"SOUND_EVENT_TYPE_CAR_ALARM\", MLSoundDetectConstants.SOUND_EVENT_TYPE_CAR_ALARM);\n            put(\"SOUND_EVENT_TYPE_DOOR_BELL\", MLSoundDetectConstants.SOUND_EVENT_TYPE_DOOR_BELL);\n            put(\"SOUND_EVENT_TYPE_KNOCK\", MLSoundDetectConstants.SOUND_EVENT_TYPE_KNOCK);\n            put(\"SOUND_EVENT_TYPE_LAUGHTER\", MLSoundDetectConstants.SOUND_EVENT_TYPE_LAUGHTER);\n            put(\"SOUND_EVENT_TYPE_MEOW\", MLSoundDetectConstants.SOUND_EVENT_TYPE_MEOW);\n            put(\"SOUND_EVENT_TYPE_SCREAMING\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SCREAMING);\n            put(\"SOUND_EVENT_TYPE_SNEEZE\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SNEEZE);\n            put(\"SOUND_EVENT_TYPE_SNORING\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SNORING);\n            put(\"SOUND_EVENT_TYPE_STEAM_WHISTLE\", MLSoundDetectConstants.SOUND_EVENT_TYPE_STEAM_WHISTLE);\n            put(\"SOUND_EVENT_TYPE_WATER\", MLSoundDetectConstants.SOUND_EVENT_TYPE_WATER);\n            put(\"SOUND_DETECT_ON_FAILURE\", SOUND_DETECT_ON_FAILURE);\n            put(\"SOUND_DETECT_ON_SUCCESS\", SOUND_DETECT_ON_SUCCESS);\n        }\n    });\n\n    // object recognition constants HMSObjectRecognition\n    public static final Map<String, Object> OBJECT_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"TYPE_PICTURE\", MLObjectAnalyzerSetting.TYPE_PICTURE);\n                put(\"TYPE_VIDEO\", MLObjectAnalyzerSetting.TYPE_VIDEO);\n                put(\"TYPE_OTHER\", MLObject.TYPE_OTHER);\n                put(\"TYPE_FACE\", MLObject.TYPE_FACE);\n                put(\"TYPE_FOOD\", MLObject.TYPE_FOOD);\n                put(\"TYPE_FURNITURE\", MLObject.TYPE_FURNITURE);\n                put(\"TYPE_GOODS\", MLObject.TYPE_GOODS);\n                put(\"TYPE_PLACE\", MLObject.TYPE_PLACE);\n                put(\"TYPE_PLANT\", MLObject.TYPE_PLANT);\n            }\n        });\n\n    // landmark recognition constants HMSLandmarkRecognition\n    public static final Map<String, Object> LANDMARK_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"NEWEST_PATTERN\", MLRemoteLandmarkAnalyzerSetting.NEWEST_PATTERN);\n                put(\"STEADY_PATTERN\", MLRemoteLandmarkAnalyzerSetting.STEADY_PATTERN);\n            }\n        });\n\n    // image segmentation constants HMSImageSegmentation\n    public static final Map<String, Object> IMSEG_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_BACKGROUND\", MLImageSegmentationClassification.TYPE_BACKGOURND);\n            put(\"TYPE_HUMAN\", MLImageSegmentationClassification.TYPE_HUMAN);\n            put(\"TYPE_SKY\", MLImageSegmentationClassification.TYPE_SKY);\n            put(\"TYPE_GRASS\", MLImageSegmentationClassification.TYPE_GRASS);\n            put(\"TYPE_FOOD\", MLImageSegmentationClassification.TYPE_FOOD);\n            put(\"TYPE_CAT\", MLImageSegmentationClassification.TYPE_CAT);\n            put(\"TYPE_BUILD\", MLImageSegmentationClassification.TYPE_BUILD);\n            put(\"TYPE_FLOWER\", MLImageSegmentationClassification.TYPE_FLOWER);\n            put(\"TYPE_WATER\", MLImageSegmentationClassification.TYPE_WATER);\n            put(\"TYPE_SAND\", MLImageSegmentationClassification.TYPE_SAND);\n            put(\"TYPE_MOUNTAIN\", MLImageSegmentationClassification.TYPE_MOUNTAIN);\n            put(\"ALL\", MLImageSegmentationScene.ALL);\n            put(\"FOREGROUND_ONLY\", MLImageSegmentationScene.FOREGROUND_ONLY);\n            put(\"GRAYSCALE_ONLY\", MLImageSegmentationScene.GRAYSCALE_ONLY);\n            put(\"MASK_ONLY\", MLImageSegmentationScene.MASK_ONLY);\n            put(\"BODY_SEG\", MLImageSegmentationSetting.BODY_SEG);\n            put(\"IMAGE_SEG\", MLImageSegmentationSetting.IMAGE_SEG);\n            put(\"HAIR_SEG\", MLImageSegmentationSetting.HAIR_SEG);\n        }\n    });\n\n    // product visual search constants HMSProductVisionSearch\n    public static final Map<String, Object> PRODUCT_VISION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"REGION_DR_CHINA\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_CHINA);\n                put(\"REGION_DR_SIANGAPORE\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_SINGAPORE);\n                put(\"REGION_DR_GERMAN\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_GERMAN);\n                put(\"REGION_DR_RUSSIA\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_RUSSIA);\n                put(\"PRODUCT_ON_RESULT\", PRODUCT_ON_RESULT);\n            }\n        });\n\n    // image super resolution constants HMSImageSuperResolution\n    public static final Map<String, Object> IMAGE_RESOLUTION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"ISR_SCALE_1X\", MLImageSuperResolutionAnalyzerSetting.ISR_SCALE_1X);\n                put(\"ISR_SCALE_3X\", MLImageSuperResolutionAnalyzerSetting.ISR_SCALE_3X);\n            }\n        });\n\n    // document skew correction constants HMSDocumentSkewCorrection\n    public static final Map<String, Object> DSC_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"CORRECTION_FAILED\", MLDocumentSkewCorrectionConstant.CORRECTION_FAILED);\n            put(\"DETECT_FAILED\", MLDocumentSkewCorrectionConstant.DETECT_FAILED);\n            put(\"IMAGE_DATA_ERROR\", MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR);\n            put(\"SUCCESS\", MLDocumentSkewCorrectionConstant.SUCCESS);\n        }\n    });\n\n    // face recognition constants HMSFaceRecognition\n    public static final Map<String, Object> FACE_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"MODE_TRACING_FAST\", MLFaceAnalyzerSetting.MODE_TRACING_FAST);\n                put(\"MODE_TRACING_ROBUST\", MLFaceAnalyzerSetting.MODE_TRACING_ROBUST);\n                put(\"TYPE_FEATURES\", MLFaceAnalyzerSetting.TYPE_FEATURES);\n                put(\"TYPE_FEATURE_AGE\", MLFaceAnalyzerSetting.TYPE_FEATURE_AGE);\n                put(\"TYPE_FEATURE_BEARD\", MLFaceAnalyzerSetting.TYPE_FEATURE_BEARD);\n                put(\"TYPE_FEATURE_EMOTION\", MLFaceAnalyzerSetting.TYPE_FEATURE_EMOTION);\n                put(\"TYPE_FEATURE_EYEGLASS\", MLFaceAnalyzerSetting.TYPE_FEATURE_EYEGLASS);\n                put(\"TYPE_FEATURE_GENDAR\", MLFaceAnalyzerSetting.TYPE_FEATURE_GENDAR);\n                put(\"TYPE_FEATURE_HAT\", MLFaceAnalyzerSetting.TYPE_FEATURE_HAT);\n                put(\"TYPE_FEATURE_OPEN_CLOSE_EYE\", MLFaceAnalyzerSetting.TYPE_FEATURE_OPENCLOSEEYE);\n                put(\"TYPE_KEYPOINTS\", MLFaceAnalyzerSetting.TYPE_KEYPOINTS);\n                put(\"TYPE_PRECISION\", MLFaceAnalyzerSetting.TYPE_PRECISION);\n                put(\"TYPE_SHAPES\", MLFaceAnalyzerSetting.TYPE_SHAPES);\n                put(\"TYPE_SPEED\", MLFaceAnalyzerSetting.TYPE_SPEED);\n                put(\"TYPE_UNSUPPORT_FEATURES\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_FEATURES);\n                put(\"TYPE_UNSUPPORT_KEYPOINTS\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS);\n                put(\"TYPE_UNSUPPORT_SHAPES\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_SHAPES);\n                put(\"TYPE_BOTTOM_OF_MOUTH\", MLFaceKeyPoint.TYPE_BOTTOM_OF_MOUTH);\n                put(\"TYPE_LEFT_CHEEK\", MLFaceKeyPoint.TYPE_LEFT_CHEEK);\n                put(\"TYPE_LEFT_EAR\", MLFaceKeyPoint.TYPE_LEFT_EAR);\n                put(\"TYPE_LEFT_EYE\", MLFaceKeyPoint.TYPE_LEFT_EYE);\n                put(\"TYPE_LEFT_SIDE_OF_MOUTH\", MLFaceKeyPoint.TYPE_LEFT_SIDE_OF_MOUTH);\n                put(\"TYPE_RIGHT_CHEEK\", MLFaceKeyPoint.TYPE_RIGHT_CHEEK);\n                put(\"TYPE_RIGHT_EAR\", MLFaceKeyPoint.TYPE_RIGHT_EAR);\n                put(\"TYPE_RIGHT_EYE\", MLFaceKeyPoint.TYPE_RIGHT_EYE);\n                put(\"TYPE_RIGHT_SIDE_OF_MOUTH\", MLFaceKeyPoint.TYPE_RIGHT_SIDE_OF_MOUTH);\n                put(\"TYPE_TIP_OF_LEFT_EAR\", MLFaceKeyPoint.TYPE_TIP_OF_LEFT_EAR);\n                put(\"TYPE_TIP_OF_NOSE\", MLFaceKeyPoint.TYPE_TIP_OF_NOSE);\n                put(\"TYPE_TIP_OF_RIGHT_EAR\", MLFaceKeyPoint.TYPE_TIP_OF_RIGHT_EAR);\n                put(\"TYPE_ALL\", MLFaceShape.TYPE_ALL);\n                put(\"TYPE_BOTTOM_OF_LEFT_EYEBROW\", MLFaceShape.TYPE_BOTTOM_OF_LEFT_EYEBROW);\n                put(\"TYPE_BOTTOM_OF_LOWER_LIP\", MLFaceShape.TYPE_BOTTOM_OF_LOWER_LIP);\n                put(\"TYPE_BOTTOM_OF_NOSE\", MLFaceShape.TYPE_BOTTOM_OF_NOSE);\n                put(\"TYPE_BOTTOM_OF_RIGHT_EYEBROW\", MLFaceShape.TYPE_BOTTOM_OF_RIGHT_EYEBROW);\n                put(\"TYPE_BOTTOM_OF_UPPER_LIP\", MLFaceShape.TYPE_BOTTOM_OF_UPPER_LIP);\n                put(\"TYPE_BRIDGE_OF_NOSE\", MLFaceShape.TYPE_BRIDGE_OF_NOSE);\n                put(\"TYPE_FACE\", MLFaceShape.TYPE_FACE);\n                put(\"TYPE_LEFT_EYE_SHAPE\", MLFaceShape.TYPE_LEFT_EYE);\n                put(\"TYPE_RIGHT_EYE_SHAPE\", MLFaceShape.TYPE_RIGHT_EYE);\n                put(\"TYPE_TOP_OF_LEFT_EYEBROW\", MLFaceShape.TYPE_TOP_OF_LEFT_EYEBROW);\n                put(\"TYPE_TOP_OF_LOWER_LIP\", MLFaceShape.TYPE_TOP_OF_LOWER_LIP);\n                put(\"TYPE_TOP_OF_RIGHT_EYEBROW\", MLFaceShape.TYPE_TOP_OF_RIGHT_EYEBROW);\n                put(\"TYPE_TOP_OF_UPPER_LIP\", MLFaceShape.TYPE_TOP_OF_UPPER_LIP);\n            }\n        });\n\n    // skeleton recognition constants HMSSkeleton\n    public static final Map<String, Object> SKELETON_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_HEAD_TOP\", MLJoint.TYPE_HEAD_TOP);\n            put(\"TYPE_LEFT_ANKLE\", MLJoint.TYPE_LEFT_ANKLE);\n            put(\"TYPE_LEFT_ELBOW\", MLJoint.TYPE_LEFT_ELBOW);\n            put(\"TYPE_LEFT_HIP\", MLJoint.TYPE_LEFT_HIP);\n            put(\"TYPE_LEFT_KNEE\", MLJoint.TYPE_LEFT_KNEE);\n            put(\"TYPE_LEFT_SHOULDER\", MLJoint.TYPE_LEFT_SHOULDER);\n            put(\"TYPE_LEFT_WRIST\", MLJoint.TYPE_LEFT_WRIST);\n            put(\"TYPE_NECK\", MLJoint.TYPE_NECK);\n            put(\"TYPE_RIGHT_ANKLE\", MLJoint.TYPE_RIGHT_ANKLE);\n            put(\"TYPE_RIGHT_ELBOW\", MLJoint.TYPE_RIGHT_ELBOW);\n            put(\"TYPE_RIGHT_HIP\", MLJoint.TYPE_RIGHT_HIP);\n            put(\"TYPE_RIGHT_KNEE\", MLJoint.TYPE_RIGHT_KNEE);\n            put(\"TYPE_RIGHT_SHOULDER\", MLJoint.TYPE_RIGHT_SHOULDER);\n            put(\"TYPE_RIGHT_WRIST\", MLJoint.TYPE_RIGHT_WRIST);\n            put(\"TYPE_NORMAL\", MLSkeletonAnalyzerSetting.TYPE_NORMAL);\n            put(\"TYPE_YOGA\", MLSkeletonAnalyzerSetting.TYPE_YOGA);\n        }\n    });\n\n    // liveness constants HMSLiveness\n    public static final Map<String, Object> LIVENESS_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"CAMERA_NO_PERMISSION\", MLLivenessCaptureError.CAMERA_NO_PERMISSION);\n            put(\"CAMERA_START_FAILED\", MLLivenessCaptureError.CAMERA_START_FAILED);\n            put(\"USER_CANCEL\", MLLivenessCaptureError.USER_CANCEL);\n            put(\"DETECT_FACE_TIME_OUT\", MLLivenessCaptureError.DETECT_FACE_TIME_OUT);\n            put(\"DETECT_MASK\", MLLivenessCaptureConfig.DETECT_MASK);\n        }\n    });\n\n    // hand keypoint constants HMSHandKeypoint\n    public static final Map<String, Object> HANDKEYPOINT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_FOREFINGER_FIRST\", MLHandKeypoint.TYPE_FOREFINGER_FIRST);\n            put(\"TYPE_FOREFINGER_FOURTH\", MLHandKeypoint.TYPE_FOREFINGER_FOURTH);\n            put(\"TYPE_FOREFINGER_SECOND\", MLHandKeypoint.TYPE_FOREFINGER_SECOND);\n            put(\"TYPE_FOREFINGER_THIRD\", MLHandKeypoint.TYPE_FOREFINGER_THIRD);\n            put(\"TYPE_LITTLE_FINGER_FIRST\", MLHandKeypoint.TYPE_LITTLE_FINGER_FIRST);\n            put(\"TYPE_LITTLE_FINGER_FOURTH\", MLHandKeypoint.TYPE_LITTLE_FINGER_FOURTH);\n            put(\"TYPE_LITTLE_FINGER_SECOND\", MLHandKeypoint.TYPE_LITTLE_FINGER_SECOND);\n            put(\"TYPE_LITTLE_FINGER_THIRD\", MLHandKeypoint.TYPE_LITTLE_FINGER_THIRD);\n            put(\"TYPE_MIDDLE_FINGER_FIRST\", MLHandKeypoint.TYPE_MIDDLE_FINGER_FIRST);\n            put(\"TYPE_MIDDLE_FINGER_FOURTH\", MLHandKeypoint.TYPE_MIDDLE_FINGER_FOURTH);\n            put(\"TYPE_MIDDLE_FINGER_SECOND\", MLHandKeypoint.TYPE_MIDDLE_FINGER_SECOND);\n            put(\"TYPE_MIDDLE_FINGER_THIRD\", MLHandKeypoint.TYPE_MIDDLE_FINGER_THIRD);\n            put(\"TYPE_RING_FINGER_FIRST\", MLHandKeypoint.TYPE_RING_FINGER_FIRST);\n            put(\"TYPE_RING_FINGER_FOURTH\", MLHandKeypoint.TYPE_RING_FINGER_FOURTH);\n            put(\"TYPE_RING_FINGER_SECOND\", MLHandKeypoint.TYPE_RING_FINGER_SECOND);\n            put(\"TYPE_RING_FINGER_THIRD\", MLHandKeypoint.TYPE_RING_FINGER_THIRD);\n            put(\"TYPE_THUMB_FIRST\", MLHandKeypoint.TYPE_THUMB_FIRST);\n            put(\"TYPE_THUMB_FOURTH\", MLHandKeypoint.TYPE_THUMB_FOURTH);\n            put(\"TYPE_THUMB_SECOND\", MLHandKeypoint.TYPE_THUMB_SECOND);\n            put(\"TYPE_THUMB_THIRD\", MLHandKeypoint.TYPE_THUMB_THIRD);\n            put(\"TYPE_WRIST\", MLHandKeypoint.TYPE_WRIST);\n            put(\"TYPE_ALL\", MLHandKeypointAnalyzerSetting.TYPE_ALL);\n            put(\"TYPE_KEYPOINT_ONLY\", MLHandKeypointAnalyzerSetting.TYPE_KEYPOINT_ONLY);\n            put(\"TYPE_RECT_ONLY\", MLHandKeypointAnalyzerSetting.TYPE_RECT_ONLY);\n            put(\"MAX_HANDS_NUM\", MLHandKeypointAnalyzerSetting.MAX_HANDS_NUM);\n\n        }\n    });\n\n    // gesture constants HMSGesture\n    public static final Map<String, Object> GESTURE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ONE\", MLGesture.ONE);\n            put(\"SECOND\", MLGesture.SECOND);\n            put(\"THREE\", MLGesture.THREE);\n            put(\"FOUR\", MLGesture.FOUR);\n            put(\"FIVE\", MLGesture.FIVE);\n            put(\"SIX\", MLGesture.SIX);\n            put(\"SEVEN\", MLGesture.SEVEN);\n            put(\"EIGHT\", MLGesture.EIGHT);\n            put(\"NINE\", MLGesture.NINE);\n            put(\"DISS\", MLGesture.DISS);\n            put(\"FIST\", MLGesture.FIST);\n            put(\"GOOD\", MLGesture.GOOD);\n            put(\"HEART\", MLGesture.HEART);\n            put(\"OK\", MLGesture.OK);\n            put(\"UNKNOWN\", MLGesture.UNKNOWN);\n            put(\"BOW\", MLGesture.BOW);\n            put(\"DOUBLE_UP\", MLGesture.DOUBLE_UP);\n            put(\"FUCK\", MLGesture.FUCK);\n            put(\"HEART_A\", MLGesture.HEART_A);\n            put(\"HEART_B\", MLGesture.HEART_B);\n            put(\"HEART_C\", MLGesture.HEART_C);\n            put(\"PRAY\", MLGesture.PRAY);\n            put(\"ROCK\", MLGesture.ROCK);\n            put(\"THANK\", MLGesture.THANK);\n            put(\"UP\", MLGesture.UP);\n        }\n    });\n\n    // text embedding constants HMSTextEmbedding\n    public static final Map<String, Object> TEXT_EMBED_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"LANGUAGE_EN\", MLTextEmbeddingSetting.LANGUAGE_EN);\n            put(\"LANGUAGE_ZH\", MLTextEmbeddingSetting.LANGUAGE_ZH);\n            put(\"INNER\", MLTextEmbeddingException.ERR_INNER);\n            put(\"ERR_AUTH_FAILED\", MLTextEmbeddingException.ERR_AUTH_FAILED);\n            put(\"ERR_PARAM_ILLEGAL\", MLTextEmbeddingException.ERR_PARAM_ILLEGAL);\n            put(\"ERR_ANALYZE_FAILED\", MLTextEmbeddingException.ERR_ANALYZE_FAILED);\n            put(\"ERR_AUTH_TOKEN_INVALID\", MLTextEmbeddingException.ERR_AUTH_TOKEN_INVALIDE);\n            put(\"ERR_NET_UNAVAILABLE\", MLTextEmbeddingException.ERR_NET_UNAVAILABLE);\n            put(\"ERR_SERVICE_IS_UNAVAILABLE\", MLTextEmbeddingException.ERR_SERVICE_IS_UNAVAILABLE);\n        }\n    });\n\n    // model download constants\n    public static final Map<String, Object> MODEL_DOWNLOAD_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"REGION_DR_AFILA\", MLModelDownloadStrategy.REGION_DR_AFILA);\n                put(\"REGION_DR_CHINA\", MLModelDownloadStrategy.REGION_DR_CHINA);\n                put(\"REGION_DR_EUROPE\", MLModelDownloadStrategy.REGION_DR_EUROPE);\n                put(\"REGION_DR_RUSSIA\", MLModelDownloadStrategy.REGION_DR_RUSSIA);\n                put(\"DOWNLOAD_ON_PROCESS\", DOWNLOAD_ON_PROCESS);\n                put(\"MODEL_TTS_TAG\", MODEL_TTS_TAG);\n                put(\"MODEL_TRANSLATE_TAG\", MODEL_TRANSLATE_TAG);\n                put(\"MODEL_CUSTOM_TAG\", MODEL_CUSTOM_TAG);\n            }\n        });\n\n    // lens engine constants\n    public static final Map<String, Object> LENS_ENGINE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"FLASH_MODE_OFF\", Camera.Parameters.FLASH_MODE_OFF);\n            put(\"FLASH_MODE_ON\", Camera.Parameters.FLASH_MODE_ON);\n            put(\"FLASH_MODE_AUTO\", Camera.Parameters.FLASH_MODE_AUTO);\n            put(\"FOCUS_MODE_CONTINUOUS_PICTURE\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);\n            put(\"FOCUS_MODE_CONTINUOUS_VIDEO\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);\n            put(\"BACK_LENS\", LensEngine.BACK_LENS);\n            put(\"FRONT_LENS\", LensEngine.FRONT_LENS);\n            put(\"LENS_ON_PHOTO_TAKEN\", LENS_ON_PHOTO_TAKEN);\n            put(\"LENS_ON_CLICK_SHUTTER\", LENS_ON_CLICK_SHUTTER);\n            put(\"LENS_SURFACE_ON_CREATED\", LENS_SURFACE_ON_CREATED);\n            put(\"LENS_SURFACE_ON_CHANGED\", LENS_SURFACE_ON_CHANGED);\n            put(\"LENS_SURFACE_ON_DESTROY\", LENS_SURFACE_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_DESTROY\", TEXT_TRANSACTOR_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_RESULT\", TEXT_TRANSACTOR_ON_RESULT);\n            put(\"FACE_2D_TRANSACTOR_ON_DESTROY\", FACE_2D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_2D_TRANSACTOR_ON_RESULT\", FACE_2D_TRANSACTOR_ON_RESULT);\n            put(\"FACE_3D_TRANSACTOR_ON_DESTROY\", FACE_3D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_3D_TRANSACTOR_ON_RESULT\", FACE_3D_TRANSACTOR_ON_RESULT);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_DESTROY\", CLASSIFICATION_TRANSACTOR_ON_DESTROY);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_RESULT\", CLASSIFICATION_TRANSACTOR_ON_RESULT);\n            put(\"OBJECT_TRANSACTOR_ON_DESTROY\", OBJECT_TRANSACTOR_ON_DESTROY);\n            put(\"OBJECT_TRANSACTOR_ON_RESULT\", OBJECT_TRANSACTOR_ON_RESULT);\n            put(\"SCENE_TRANSACTOR_ON_DESTROY\", SCENE_TRANSACTOR_ON_DESTROY);\n            put(\"SCENE_TRANSACTOR_ON_RESULT\", SCENE_TRANSACTOR_ON_RESULT);\n            put(\"SKELETON_TRANSACTOR_ON_DESTROY\", SKELETON_TRANSACTOR_ON_DESTROY);\n            put(\"SKELETON_TRANSACTOR_ON_RESULT\", SKELETON_TRANSACTOR_ON_RESULT);\n            put(\"HAND_TRANSACTOR_ON_DESTROY\", HAND_TRANSACTOR_ON_DESTROY);\n            put(\"HAND_TRANSACTOR_ON_RESULT\", HAND_TRANSACTOR_ON_RESULT);\n            put(\"GESTURE_TRANSACTOR_ON_DESTROY\", GESTURE_TRANSACTOR_ON_DESTROY);\n            put(\"GESTURE_TRANSACTOR_ON_RESULT\", GESTURE_TRANSACTOR_ON_RESULT);\n            put(\"LENS_TEXT_ANALYZER\", 0);\n            put(\"LENS_FACE_2D_ANALYZER\", 1);\n            put(\"LENS_FACE_3D_ANALYZER\", 2);\n            put(\"LENS_SKELETON_ANALYZER\", 3);\n            put(\"LENS_CLASSIFICATION_ANALYZER\", 4);\n            put(\"LENS_OBJECT_ANALYZER\", 5);\n            put(\"LENS_SCENE_ANALYZER\", 6);\n            put(\"LENS_HAND_ANALYZER\", 7);\n            put(\"LENS_GESTURE_ANALYZER\", 8);\n        }\n    });\n\n    public static final Map<String, Object> FACE_VERIFICATION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() { });\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/constants/HMSResults.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.constants;\n\nimport com.huawei.hms.mlsdk.common.MLException;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic enum HMSResults {\n    UNKNOWN(MLException.UNKNOWN, \"\"),\n    SUCCESS(MLException.SUCCESS, \"Success\"),\n    FRAME_NULL(20, \"No frame object created with given parameters\"),\n    ANALYZER_NOT_AVAILABLE(21, \"Analyzer is not available\"),\n    CURRENT_ACTIVITY_NULL(22, \"Current activity is null\"),\n    CANCEL(23, \"Recognition cancelled by user\"),\n    FAILURE(24, \"Recognition failed\"),\n    DENY(25, \"Camera does not support BCR\"),\n    STRING_PARAM_NULL(26, \"Given string parameter is null or empty\"),\n    REMOTE_MODEL_NULL(27, \"No remote model object created with given parameters\"),\n    ASR_RECOGNIZER_NULL(28, \"Asr recognizer is null or not created\"),\n    TTS_ENGINE_NULL(30, \"Tts engine is not created\"),\n    SOUND_DECT_NULL(31, \"Sound detector is not initialized\"),\n    CUSTOM_MODEL_SETTING_NULL(32, \"Input output setting is not initialized with given parameters\"),\n    CUSTOM_MODEL_INPUT_NULL(33, \"Model inputs is not initialized with given parameters\"),\n    CUSTOM_MODEL_EXECUTOR_SETTING_NULL(34, \"Model executor setting is not initialized with given parameters\"),\n    DATA_SET_NOT_VALID(35, \"Data set is not valid.\"),\n    LENS_ENGINE_NULL(36, \"LensEngine is not created\"),\n    LENS_HOLDER_NULL(37, \"LensEngine holder is null\");\n\n    private int errCode;\n\n    private String message;\n\n    HMSResults(int errCode, String message) {\n        this.errCode = errCode;\n        this.message = message;\n    }\n\n    public int getErrCode() {\n        return errCode;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    /**\n     * Combines status and message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.errCode);\n        wm.putString(\"message\", this.message);\n        return wm;\n    }\n\n    /**\n     * Combines status and message with optional parameters\n     *\n     * @param errorCode Error code\n     * @param errorMessage Error message\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer errorCode, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", errorCode == null ? this.errCode : errorCode);\n        wm.putString(\"message\", errorMessage == null ? this.message : errorMessage);\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/creators/HMSObjectCreator.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.creators;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Color;\nimport android.graphics.Rect;\nimport android.hardware.Camera;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCapture;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCapture;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureUIConfig;\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCaptureConfig;\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCaptureFactory;\nimport com.huawei.hms.mlsdk.MLAnalyzerFactory;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftSetting;\nimport com.huawei.hms.mlsdk.card.MLCardAnalyzerFactory;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzerSetting;\nimport com.huawei.hms.mlsdk.classification.MLImageClassificationAnalyzer;\nimport com.huawei.hms.mlsdk.classification.MLLocalClassificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.classification.MLRemoteClassificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLCompositeAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.custom.MLCustomLocalModel;\nimport com.huawei.hms.mlsdk.custom.MLCustomRemoteModel;\nimport com.huawei.hms.mlsdk.custom.MLModelDataType;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutorSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputOutputSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputs;\nimport com.huawei.hms.mlsdk.document.MLDocumentAnalyzer;\nimport com.huawei.hms.mlsdk.document.MLDocumentSetting;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzer;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerFactory;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzer;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzer;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzerFactory;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzerSetting;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzer;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerFactory;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzer;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationAnalyzer;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationScene;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationSetting;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzer;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzerSetting;\nimport com.huawei.hms.mlsdk.langdetect.MLLangDetectorFactory;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetectorSetting;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetectorSetting;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadStrategy;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzer;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzerSetting;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzer;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzerSetting;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzer;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerFactory;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConfig;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.text.MLLocalTextSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\nimport com.huawei.hms.mlsdk.text.MLTextAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzerFactory;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingSetting;\nimport com.huawei.hms.mlsdk.translate.MLTranslatorFactory;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslateSetting;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslateSetting;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslatorModel;\nimport com.huawei.hms.mlsdk.tts.MLTtsConfig;\nimport com.huawei.hms.mlsdk.tts.MLTtsConstants;\nimport com.huawei.hms.mlsdk.tts.MLTtsLocalModel;\nimport com.huawei.hms.rn.ml.helpers.fragments.HMSProductFragment;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMS2DFaceAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMS3DFaceAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSClassificationAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSGestureTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSHandKeypointTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSObjectAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSSceneDetectionAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSSkeletonAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.transactors.HMSTextAnalyzerTransactor;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic final class HMSObjectCreator {\n    private static final String TAG = HMSObjectCreator.class.getSimpleName();\n\n    private static volatile HMSObjectCreator instance;\n\n    public static HMSObjectCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSObjectCreator.class) {\n                if (instance == null) {\n                    instance = new HMSObjectCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Creates MLRemoteAftSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteAftSetting object\n     */\n    public MLRemoteAftSetting createRemoteAftSetting(ReadableMap readableMap) {\n        MLRemoteAftSetting.Factory setting = new MLRemoteAftSetting.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteAftSetting object is created using default options.\");\n            return setting.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageCode\", ReadableType.String)) {\n            setting.setLanguageCode(readableMap.getString(\"languageCode\"));\n            Log.i(TAG, \"MLRemoteAftSetting languageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enablePunctuation\", ReadableType.Boolean)) {\n            setting.enablePunctuation(readableMap.getBoolean(\"enablePunctuation\"));\n            Log.i(TAG, \"MLRemoteAftSetting enablePunctuation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableWordTimeOffset\", ReadableType.Boolean)) {\n            setting.enableWordTimeOffset(readableMap.getBoolean(\"enableWordTimeOffset\"));\n            Log.i(TAG, \"MLRemoteAftSetting enableWordTimeOffset option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableSentenceTimeOffset\", ReadableType.Boolean)) {\n            setting.enableSentenceTimeOffset(readableMap.getBoolean(\"enableSentenceTimeOffset\"));\n            Log.i(TAG, \"MLRemoteAftSetting enableSentenceTimeOffset option set.\");\n        }\n        return setting.create();\n    }\n\n    /**\n     * Creates remote language detector\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetector object\n     */\n    public MLRemoteLangDetector createRemoteLanguageDetector(double trustedThreshold) {\n        return MLLangDetectorFactory.getInstance()\n            .getRemoteLangDetector(createRemoteLanguageDetectorSetting(trustedThreshold));\n    }\n\n    /**\n     * Creates local language detector\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetector object\n     */\n    public MLLocalLangDetector createLocalLanguageDetector(double trustedThreshold) {\n        return MLLangDetectorFactory.getInstance()\n            .getLocalLangDetector(createLocalLanguageDetectorSetting(trustedThreshold));\n    }\n\n    /**\n     * Creates MLRemoteLangDetectorSetting object\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetectorSetting object\n     */\n    private MLRemoteLangDetectorSetting createRemoteLanguageDetectorSetting(double trustedThreshold) {\n        return new MLRemoteLangDetectorSetting.Factory().setTrustedThreshold((float) trustedThreshold).create();\n    }\n\n    /**\n     * Creates MLLocalLangDetectorSetting object\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLLocalLangDetectorSetting object\n     */\n    private MLLocalLangDetectorSetting createLocalLanguageDetectorSetting(double trustedThreshold) {\n        return new MLLocalLangDetectorSetting.Factory().setTrustedThreshold((float) trustedThreshold).create();\n    }\n\n    /**\n     * Creates MLSpeechRealTimeTranscriptionConfig object\n     *\n     * @param readableMap configuration\n     * @return MLSpeechRealTimeTranscriptionConfig object\n     */\n    public MLSpeechRealTimeTranscriptionConfig createSpeechRealtimeTranscriptionConfig(ReadableMap readableMap) {\n        String language = MLSpeechRealTimeTranscriptionConstants.LAN_EN_US;\n        boolean enablePunctuation = true;\n        boolean enableWordTimeOffset = false;\n        boolean enableSentenceTimeOffset = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig object is created using default options.\");\n            return new MLSpeechRealTimeTranscriptionConfig.Factory().setLanguage(language)\n                .enableWordTimeOffset(false)\n                .enableSentenceTimeOffset(false)\n                .enablePunctuation(true)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig language option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enablePunctuation\", ReadableType.Boolean)) {\n            enablePunctuation = readableMap.getBoolean(\"enablePunctuation\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enablePunctuation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableSentenceTimeOffset\", ReadableType.Boolean)) {\n            enableSentenceTimeOffset = readableMap.getBoolean(\"enableSentenceTimeOffset\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enableSentenceTimeOffset option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableWordTimeOffset\", ReadableType.Boolean)) {\n            enableWordTimeOffset = readableMap.getBoolean(\"enableWordTimeOffset\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enableWordTimeOffset option set.\");\n        }\n\n        return new MLSpeechRealTimeTranscriptionConfig.Factory().setLanguage(language)\n            .enableWordTimeOffset(enableWordTimeOffset)\n            .enableSentenceTimeOffset(enableSentenceTimeOffset)\n            .enablePunctuation(enablePunctuation)\n            .create();\n    }\n\n    /**\n     * Creates MLTtsConfig object\n     *\n     * @param readableMap configuration\n     * @return MLTtsConfig object\n     */\n    public MLTtsConfig createTtsConfiguration(ReadableMap readableMap) {\n        double speed = 1.0F;\n        double volume = 1.0F;\n        String language = MLTtsConstants.TTS_EN_US;\n        String person = MLTtsConstants.TTS_SPEAKER_FEMALE_EN;\n        String synthesizeMode = MLTtsConstants.TTS_OFFLINE_MODE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLTtsConfig object is created using default options.\");\n            return new MLTtsConfig().setVolume((float) volume)\n                .setSpeed((float) speed)\n                .setLanguage(language)\n                .setPerson(person);\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"volume\", ReadableType.Number)) {\n            volume = readableMap.getDouble(\"volume\");\n            Log.i(TAG, \"MLTtsConfig volume option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"speed\", ReadableType.Number)) {\n            speed = readableMap.getDouble(\"speed\");\n            Log.i(TAG, \"MLTtsConfig speed option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"MLTtsConfig language option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"person\", ReadableType.String)) {\n            person = readableMap.getString(\"person\");\n            Log.i(TAG, \"MLTtsConfig person option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"synthesizeMode\", ReadableType.String)) {\n            synthesizeMode = readableMap.getString(\"synthesizeMode\");\n            Log.i(TAG, \"MLTtsConfig synthesizeMode option set.\");\n        }\n\n        return new MLTtsConfig().setVolume((float) volume)\n            .setSpeed((float) speed)\n            .setLanguage(language)\n            .setPerson(person)\n            .setSynthesizeMode(synthesizeMode);\n    }\n\n    /**\n     * Creates remote translator\n     *\n     * @param translatorSetting setting\n     * @return MLRemoteTranslator object\n     */\n    public MLRemoteTranslator createRemoteTranslator(ReadableMap translatorSetting) {\n        return MLTranslatorFactory.getInstance().getRemoteTranslator(createRemoteTranslateSetting(translatorSetting));\n    }\n\n    /**\n     * Creates local translator\n     *\n     * @param translatorSetting setting\n     * @return MLRemoteTranslator object\n     */\n    public MLLocalTranslator createLocalTranslator(ReadableMap translatorSetting) {\n        return MLTranslatorFactory.getInstance().getLocalTranslator(createLocalTranslateSetting(translatorSetting));\n    }\n\n    /**\n     * Creates MLModelDownloadStrategy object\n     *\n     * @param readableMap configuration\n     * @return MLModelDownloadStrategy object\n     */\n    public MLModelDownloadStrategy createModelDownloadStrategy(ReadableMap readableMap) {\n        MLModelDownloadStrategy.Factory creator = new MLModelDownloadStrategy.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelDownloadStrategy object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needWifi\")) {\n            creator.needWifi();\n            Log.i(TAG, \"MLModelDownloadStrategy needWifi option set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needCharging\")) {\n            creator.needCharging();\n            Log.i(TAG, \"MLModelDownloadStrategy needCharging option set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needDeviceIdle\")) {\n            creator.needDeviceIdle();\n            Log.i(TAG, \"MLModelDownloadStrategy needDeviceIdle option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLModelDownloadStrategy region option set\");\n        }\n        return creator.create();\n    }\n\n    /**\n     * Creates MLTextEmbeddingSetting object\n     *\n     * @param language language code default \"zh\"\n     * @return MLTextEmbeddingSetting object\n     */\n    private MLTextEmbeddingSetting createTextEmbeddingSetting(String language) {\n        return new MLTextEmbeddingSetting.Factory().setLanguage(language).create();\n    }\n\n    /**\n     * Creates Text Embedding Analyzer\n     *\n     * @param language language code default \"zh\"\n     * @return MLTextEmbeddingAnalyzer\n     */\n    public MLTextEmbeddingAnalyzer createTextEmbeddingAnalyzer(String language) {\n        return MLTextEmbeddingAnalyzerFactory.getInstance()\n            .getMLTextEmbeddingAnalyzer(createTextEmbeddingSetting(language));\n    }\n\n    /**\n     * Creates model input output settings\n     *\n     * @param readableMap model configuration\n     * @return MLModelInputOutputSettings\n     */\n    public MLModelInputOutputSettings createCustomModelInputOutputSetting(ReadableMap readableMap) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelInputOutputSettings object is null.\");\n            return null;\n        }\n\n        int width = 224;\n        int height = 224;\n        int outputSize = 1001;\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"inputFormat\", ReadableType.Map)) {\n            ReadableMap inputFormatMap = readableMap.getMap(\"inputFormat\");\n            if (HMSUtils.getInstance().hasValidKey(inputFormatMap, \"width\", ReadableType.Number)) {\n                width = inputFormatMap.getInt(\"width\");\n                Log.i(TAG, \"MLModelInputOutputSettings inputFormat width option set.\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(inputFormatMap, \"height\", ReadableType.Number)) {\n                height = inputFormatMap.getInt(\"height\");\n                Log.i(TAG, \"MLModelInputOutputSettings inputFormat height option set.\");\n            }\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"outputFormat\", ReadableType.Map)) {\n            ReadableMap outputFormatMap = readableMap.getMap(\"outputFormat\");\n            if (HMSUtils.getInstance().hasValidKey(outputFormatMap, \"outputSize\", ReadableType.Number)) {\n                outputSize = outputFormatMap.getInt(\"outputSize\");\n                Log.i(TAG, \"MLModelInputOutputSettings outputFormat dimensions option set.\");\n            }\n        }\n\n        try {\n            Log.i(TAG, \"MLModelInputOutputSettings object created.\");\n            return new MLModelInputOutputSettings.Factory().setInputFormat(1, MLModelDataType.FLOAT32,\n                new int[] {1, 3, height, width})\n                .setOutputFormat(1, MLModelDataType.FLOAT32, new int[] {1, outputSize})\n                .create();\n        } catch (MLException e) {\n            Log.i(TAG, \"MLModelInputOutputSettings is not created :\" + e.getMessage());\n            return null;\n        }\n    }\n\n    /**\n     * Creates local model\n     *\n     * @param localModelConfiguration model configuration\n     * @return MLCustomLocalModel\n     */\n    private MLCustomLocalModel createCustomLocalModel(ReadableMap localModelConfiguration) {\n        String assetPath = \"\";\n        String localFullPath = \"\";\n        String modelName = \"\";\n\n        if (localModelConfiguration == null) {\n            Log.i(TAG, \"MLCustomLocalModel configuration is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"assetPath\", ReadableType.String)) {\n            assetPath = localModelConfiguration.getString(\"assetPath\");\n            Log.i(TAG, \"MLCustomLocalModel assetPath set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"localFullPath\", ReadableType.String)) {\n            localFullPath = localModelConfiguration.getString(\"localFullPath\");\n            Log.i(TAG, \"MLCustomLocalModel localFullPath set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"modelName\", ReadableType.String)) {\n            modelName = localModelConfiguration.getString(\"modelName\");\n            Log.i(TAG, \"MLCustomLocalModel modelName set\");\n        }\n\n        if (TextUtils.isEmpty(modelName)) {\n            Log.i(TAG, \"MLCustomLocalModel modelName null or empty\");\n            return null;\n        }\n\n        if (!TextUtils.isEmpty(assetPath)) {\n            return new MLCustomLocalModel.Factory(modelName).setAssetPathFile(assetPath).create();\n        } else if (!TextUtils.isEmpty(localFullPath)) {\n            return new MLCustomLocalModel.Factory(modelName).setLocalFullPathFile(localFullPath).create();\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Creates remote model\n     *\n     * @param modelName model name\n     * @return MLCustomRemoteModel\n     */\n    private MLCustomRemoteModel createCustomRemoteModel(String modelName) {\n        if (TextUtils.isEmpty(modelName)) {\n            Log.i(TAG, \"MLCustomRemoteModel modelName is null or empty\");\n            return null;\n        }\n        Log.i(TAG, \"MLCustomRemoteModel object is created.\");\n        return new MLCustomRemoteModel.Factory(modelName).create();\n    }\n\n    /**\n     * Creates model executor settings\n     *\n     * @param isRemote Determines whether the process is in the cloud\n     * @param modelSetting Model setting\n     * @return MLModelExecutorSettings\n     */\n    public MLModelExecutorSettings createCustomModelExecutorSettings(boolean isRemote, ReadableMap modelSetting) {\n        if (modelSetting == null) {\n            Log.i(TAG, \"MLModelExecutorSettings object is not created setting null.\");\n            return null;\n        }\n        if (isRemote) {\n            Log.i(TAG, \"MLModelExecutorSettings object is created - remote.\");\n            return new MLModelExecutorSettings.Factory(\n                createCustomRemoteModel(modelSetting.getString(\"modelName\"))).create();\n        }\n        Log.i(TAG, \"MLModelExecutorSettings object is created - local.\");\n        return new MLModelExecutorSettings.Factory(createCustomLocalModel(modelSetting)).create();\n    }\n\n    /**\n     * Create MLModelInputs object\n     *\n     * @param readableMap model objects container\n     * @param context context object\n     * @return MLModelInputs\n     */\n    public MLModelInputs createCustomModelInputs(ReadableMap readableMap, ReactApplicationContext context) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelInputs object array is empty.\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"uri\", ReadableType.String)) {\n            try {\n                int height = 224;\n                int width = 224;\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                    Uri.parse(readableMap.getString(\"uri\")));\n                if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n                    height = readableMap.getInt(\"height\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n                    width = readableMap.getInt(\"width\");\n                }\n                bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);\n                final float[][][][] input = new float[1][height][width][3];\n                for (int i = 0; i < width; i++) {\n                    for (int j = 0; j < height; j++) {\n                        int pixel = bitmap.getPixel(i, j);\n                        input[0][j][i][0] = (Color.red(pixel) - 128.0f) / 128.0f;\n                        input[0][j][i][1] = (Color.green(pixel) - 128.0f) / 128.0f;\n                        input[0][j][i][2] = (Color.blue(pixel) - 128.0f) / 128.0f;\n                    }\n                }\n                return new MLModelInputs.Factory().add(input).create();\n            } catch (IOException | MLException e) {\n                Log.i(TAG, \"MLModelInputs : \" + e.getMessage());\n                return null;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Creates Remote Model from given configuration\n     *\n     * @param modelConfiguration model configuration\n     * @return MLRemoteModel\n     */\n    public MLRemoteModel createRemoteModel(ReadableMap modelConfiguration) {\n        if (modelConfiguration == null) {\n            Log.i(TAG, \"Given model configuration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"translate\", ReadableType.Map)) {\n            ReadableMap translate = modelConfiguration.getMap(\"translate\");\n            if (HMSUtils.getInstance().hasValidKey(translate, \"languageCode\", ReadableType.String)) {\n                Log.i(TAG, \"translate language code is set and object created\");\n                return new MLLocalTranslatorModel.Factory(translate.getString(\"languageCode\")).create();\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"tts\", ReadableType.Map)) {\n            ReadableMap tts = modelConfiguration.getMap(\"tts\");\n            if (HMSUtils.getInstance().hasValidKey(tts, \"speakerName\", ReadableType.String)) {\n                Log.i(TAG, \"tts speaker name is set and object created\");\n                return new MLTtsLocalModel.Factory(tts.getString(\"speakerName\")).create();\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"customRemoteModel\", ReadableType.Map)) {\n            ReadableMap customRemoteModel = modelConfiguration.getMap(\"customRemoteModel\");\n            if (HMSUtils.getInstance().hasValidKey(customRemoteModel, \"modelName\", ReadableType.String)) {\n                Log.i(TAG, \"customRemoteModel model name is set and object created\");\n                return createCustomRemoteModel(customRemoteModel.getString(\"modelName\"));\n            }\n        }\n        Log.i(TAG, \"No matching option with given configuration\");\n        return null;\n    }\n\n    /**\n     * Creates MLLocalTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLLocalTextSetting object\n     */\n    private MLLocalTextSetting createLocalTextSetting(ReadableMap readableMap) {\n        if (readableMap == null) {\n            Log.i(TAG, \"LocalTextSetting object is created using default options.\");\n            return new MLLocalTextSetting.Factory().create();\n        }\n\n        Log.i(TAG, \"LocalTextSetting object is created.\");\n        return new MLLocalTextSetting.Factory().setLanguage(setLanguage(readableMap))\n            .setOCRMode(setOCRMode(readableMap))\n            .create();\n    }\n\n    /**\n     * Creates MLRemoteTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLRemoteTextSetting object\n     */\n    private MLRemoteTextSetting createRemoteTextSetting(ReadableMap readableMap) {\n        int textDensityScene = MLRemoteTextSetting.OCR_LOOSE_SCENE;\n        String borderType = MLRemoteTextSetting.NGON;\n        List<String> languageList = new ArrayList<>();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"RemoteTextSetting object is created using default options.\");\n            return new MLRemoteTextSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"borderType\", ReadableType.String)) {\n            borderType = readableMap.getString(\"borderType\");\n            Log.i(TAG, \"RemoteTextSetting borderType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"textDensityScene\", ReadableType.Number)) {\n            textDensityScene = readableMap.getInt(\"textDensityScene\");\n            Log.i(TAG, \"RemoteTextSetting textDensityScene option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageList\", ReadableType.Array)) {\n            languageList = HMSUtils.getInstance().readableArrayIntoStringList(readableMap.getArray(\"languageList\"));\n            Log.i(TAG, \"RemoteTextSetting languageList option set.\");\n        }\n\n        return new MLRemoteTextSetting.Factory().setTextDensityScene(textDensityScene)\n            .setBorderType(borderType)\n            .setLanguageList(languageList)\n            .create();\n    }\n\n    /**\n     * Creates MLTextAnalyzer using creator\n     *\n     * @param readableMap configuration keys and values\n     * @param context ReactApplicationContext\n     * @return MLTextAnalyzer object\n     */\n    public MLTextAnalyzer createTextAnalyzer(ReadableMap readableMap, ReactApplicationContext context) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLTextAnalyzer object is created using default options.\");\n            return new MLTextAnalyzer.Factory(context).create();\n        }\n\n        Log.i(TAG, \"MLTextAnalyzer object is created.\");\n        return new MLTextAnalyzer.Factory(context).setLanguage(setLanguage(readableMap))\n            .setLocalOCRMode(setOCRMode(readableMap))\n            .create();\n    }\n\n    /**\n     * Creates MLTextAnalyzer using factory\n     *\n     * @param readableMap configuration keys and values\n     * @param isRemote remote or local text analyzer\n     * @return MLTextAnalyzer object\n     */\n    public MLTextAnalyzer createTextAnalyzer(ReadableMap readableMap, boolean isRemote) {\n        if (isRemote) {\n            Log.i(TAG, \"MLRemoteTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(createRemoteTextSetting(readableMap));\n        } else {\n            Log.i(TAG, \"MLLocalTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(createLocalTextSetting(readableMap));\n        }\n    }\n\n    /**\n     * Creates document analyzer\n     *\n     * @param readableMap document analyzer setting\n     * @return MLDocumentAnalyzer\n     */\n    public MLDocumentAnalyzer createDocumentAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance().getRemoteDocumentAnalyzer(createDocumentSetting(readableMap));\n    }\n\n    /**\n     * Creates MLDocumentSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLDocumentSetting object\n     */\n    private MLDocumentSetting createDocumentSetting(ReadableMap readableMap) {\n        String borderType = MLRemoteTextSetting.NGON;\n        List<String> languageList = new ArrayList<>();\n        boolean isFingerPrintEnabled = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLDocumentSetting object is created using default options.\");\n            return new MLDocumentSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"borderType\", ReadableType.String)) {\n            borderType = readableMap.getString(\"borderType\");\n            Log.i(TAG, \"MLDocumentSetting borderType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageList\", ReadableType.Array)) {\n            languageList = HMSUtils.getInstance().readableArrayIntoStringList(readableMap.getArray(\"languageList\"));\n            Log.i(TAG, \"MLDocumentSetting languageList option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isFingerPrintEnabled\", ReadableType.Boolean)) {\n            isFingerPrintEnabled = readableMap.getBoolean(\"isFingerPrintEnabled\");\n            Log.i(TAG, \"MLDocumentSetting isFingerPrintEnabled option set.\");\n        }\n\n        if (!isFingerPrintEnabled) {\n            return new MLDocumentSetting.Factory().setBorderType(borderType).setLanguageList(languageList).create();\n        }\n\n        return new MLDocumentSetting.Factory().setBorderType(borderType)\n            .setLanguageList(languageList)\n            .enableFingerprintVerification()\n            .create();\n    }\n\n    /**\n     * Creates MLBcrCapture object\n     *\n     * @param readableMap configuration\n     * @return MLBcrCapture object\n     */\n    public MLBcrCapture createBcrCapture(ReadableMap readableMap) {\n        return MLBcrCaptureFactory.getInstance().getBcrCapture(createBcrCaptureConfig(readableMap));\n    }\n\n    /**\n     * creates MLBcrCaptureConfig object\n     *\n     * @param readableMap configuration\n     * @return MLBcrCaptureConfig object\n     */\n    private MLBcrCaptureConfig createBcrCaptureConfig(ReadableMap readableMap) {\n        int orientation = MLBcrCaptureConfig.ORIENTATION_AUTO;\n        int resultType = MLBcrCaptureConfig.RESULT_SIMPLE;\n        int recMode = MLBcrCaptureConfig.STRICT_MODE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLBcrCaptureConfig object is created using default options.\");\n            return new MLBcrCaptureConfig.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"orientation\", ReadableType.Number)) {\n            orientation = readableMap.getInt(\"orientation\");\n            Log.i(TAG, \"MLBcrCaptureConfig orientation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"resultType\", ReadableType.Number)) {\n            resultType = readableMap.getInt(\"resultType\");\n            Log.i(TAG, \"MLBcrCaptureConfig resultType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"recMode\", ReadableType.Number)) {\n            recMode = readableMap.getInt(\"recMode\");\n            Log.i(TAG, \"MLBcrCaptureConfig recMode option set.\");\n        }\n\n        return new MLBcrCaptureConfig.Factory().setOrientation(orientation)\n            .setRecMode(recMode)\n            .setResultType(resultType)\n            .create();\n    }\n\n    /**\n     * Creates MLGcrCapture object\n     *\n     * @param language language\n     * @param uiConfiguration ui config\n     * @return MLGcrCapture object\n     */\n    public MLGcrCapture createGcrCapture(String language, ReadableMap uiConfiguration) {\n        return MLGcrCaptureFactory.getInstance()\n            .getGcrCapture(createGcrCaptureConfig(language), createGcrCaptureUiConfig(uiConfiguration));\n    }\n\n    /**\n     * creates MLGcrCaptureConfig object\n     *\n     * @param language language configuration\n     * @return MLGcrCaptureConfig object\n     */\n    private MLGcrCaptureConfig createGcrCaptureConfig(String language) {\n        if (TextUtils.isEmpty(language)) {\n            Log.i(TAG, \"MLGcrCaptureConfig object is created using default options.\");\n            return new MLGcrCaptureConfig.Factory().create();\n        }\n\n        return new MLGcrCaptureConfig.Factory().setLanguage(language).create();\n    }\n\n    /**\n     * creates MLGcrCaptureUIConfig object\n     *\n     * @param readableMap configuration\n     * @return MLGcrCaptureUIConfig object\n     */\n    private MLGcrCaptureUIConfig createGcrCaptureUiConfig(ReadableMap readableMap) {\n        int orientation = MLGcrCaptureUIConfig.ORIENTATION_AUTO;\n        int tipTextColor = Color.GREEN;\n        int scanBoxCornerColor = Color.RED;\n        String tipText = \"Recognizing, align edges\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLGcrCaptureUIConfig object is created using default options.\");\n            return new MLGcrCaptureUIConfig.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"orientation\", ReadableType.Number)) {\n            orientation = readableMap.getInt(\"orientation\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig orientation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tipTextColor\", ReadableType.Number)) {\n            tipTextColor = readableMap.getInt(\"tipTextColor\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig tipTextColor option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"scanBoxCornerColor\", ReadableType.Number)) {\n            scanBoxCornerColor = readableMap.getInt(\"scanBoxCornerColor\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig scanBoxCornerColor option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tipText\", ReadableType.String)) {\n            tipText = readableMap.getString(\"tipText\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig tipText option set.\");\n        }\n\n        return new MLGcrCaptureUIConfig.Factory().setOrientation(orientation)\n            .setScanBoxCornerColor(scanBoxCornerColor)\n            .setTipText(tipText)\n            .setTipTextColor(tipTextColor)\n            .create();\n    }\n\n    /**\n     * creates MLFormRecognitionAnalyzer object\n     *\n     * @return MLFormRecognitionAnalyzer object\n     */\n    public MLFormRecognitionAnalyzer createFormRecognizerAnalyzer() {\n        return MLFormRecognitionAnalyzerFactory.getInstance()\n            .getFormRecognitionAnalyzer(createFormRecognitionAnalyzerSetting());\n    }\n\n    /**\n     * Creates MLFormRecognitionAnalyzerSetting object\n     *\n     * @return MLFormRecognitionAnalyzerSetting object\n     */\n    private MLFormRecognitionAnalyzerSetting createFormRecognitionAnalyzerSetting() {\n        return new MLFormRecognitionAnalyzerSetting.Factory().create();\n    }\n\n    /**\n     * Creates MLRemoteClassificationAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteClassificationAnalyzerSetting object\n     */\n    private MLRemoteClassificationAnalyzerSetting createRemoteClassificationAnalyzerSetting(ReadableMap readableMap) {\n        int largestNumOfReturns = 10;\n        double minAcceptablePossibility = 0.5F;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting object is being created...\");\n            return new MLRemoteClassificationAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxNumberOfReturns\", ReadableType.Number)) {\n            largestNumOfReturns = readableMap.getInt(\"maxNumberOfReturns\");\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting maxNumberOfReturns option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minAcceptablePossibility\", ReadableType.Number)) {\n            minAcceptablePossibility = readableMap.getDouble(\"minAcceptablePossibility\");\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting minAcceptablePossibility option set.\");\n        }\n\n        return new MLRemoteClassificationAnalyzerSetting.Factory().setLargestNumOfReturns(largestNumOfReturns)\n            .setMinAcceptablePossibility((float) minAcceptablePossibility)\n            .create();\n    }\n\n    /**\n     * Creates and returns classification analyzer\n     *\n     * @param isRemote on-cloud or on-device\n     * @param analyzerSetting setting to create analyzer\n     * @return MLImageClassificationAnalyzer object\n     */\n    public MLImageClassificationAnalyzer createClassificationAnalyzer(boolean isRemote, ReadableMap analyzerSetting) {\n        if (isRemote) {\n            return MLAnalyzerFactory.getInstance()\n                .getRemoteImageClassificationAnalyzer(createRemoteClassificationAnalyzerSetting(analyzerSetting));\n        } else {\n            return MLAnalyzerFactory.getInstance()\n                .getLocalImageClassificationAnalyzer(createLocalClassificationAnalyzerSetting(analyzerSetting));\n        }\n    }\n\n    /**\n     * Creates MLLocalClassificationAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLLocalClassificationAnalyzerSetting object\n     */\n    private MLLocalClassificationAnalyzerSetting createLocalClassificationAnalyzerSetting(ReadableMap readableMap) {\n        double minAcceptablePossibility = 0.5F;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLLocalClassificationAnalyzerSetting object is being created...\");\n            return new MLLocalClassificationAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minAcceptablePossibility\", ReadableType.Number)) {\n            minAcceptablePossibility = readableMap.getDouble(\"minAcceptablePossibility\");\n            Log.i(TAG, \"MLLocalClassificationAnalyzerSetting minAcceptablePossibility option set.\");\n        }\n        return new MLLocalClassificationAnalyzerSetting.Factory().setMinAcceptablePossibility(\n            (float) minAcceptablePossibility).create();\n    }\n\n    /**\n     * Creates MLObjectAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLObjectAnalyzerSetting object\n     */\n    private MLObjectAnalyzerSetting createObjectAnalyzerSetting(ReadableMap readableMap) {\n        MLObjectAnalyzerSetting.Factory objectAnalyzer = new MLObjectAnalyzerSetting.Factory();\n        int analyzerType = MLObjectAnalyzerSetting.TYPE_PICTURE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLObjectAnalyzerSetting object is created using default options.\");\n            return objectAnalyzer.create();\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"allowClassification\")) {\n            objectAnalyzer.allowClassification();\n            Log.i(TAG, \"MLObjectAnalyzerSetting allowClassification option set.\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"allowMultiResults\")) {\n            objectAnalyzer.allowMultiResults();\n            Log.i(TAG, \"MLObjectAnalyzerSetting allowMultiResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"analyzerType\", ReadableType.Number)) {\n            analyzerType = readableMap.getInt(\"analyzerType\");\n            Log.i(TAG, \"MLObjectAnalyzerSetting analyzerType option set.\");\n        }\n        return objectAnalyzer.setAnalyzerType(analyzerType).create();\n    }\n\n    /**\n     * Creates and returns object analyzer\n     *\n     * @param objectAnalyzerSetting setting to create analyzer\n     * @return MLObjectAnalyzer object\n     */\n    public MLObjectAnalyzer createObjectAnalyzer(ReadableMap objectAnalyzerSetting) {\n        return MLAnalyzerFactory.getInstance()\n            .getLocalObjectAnalyzer(createObjectAnalyzerSetting(objectAnalyzerSetting));\n    }\n\n    /**\n     * Creates and returns landmark analyzer\n     *\n     * @param readableMap landmark analyzer setting\n     * @return MLRemoteLandmarkAnalyzer object\n     */\n    public MLRemoteLandmarkAnalyzer createLandmarkAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance().getRemoteLandmarkAnalyzer(createLandMarkAnalyzerSetting(readableMap));\n    }\n\n    /**\n     * Creates MLRemoteLandmarkAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteLandmarkAnalyzerSetting object\n     */\n    private MLRemoteLandmarkAnalyzerSetting createLandMarkAnalyzerSetting(ReadableMap readableMap) {\n        int largestNumOfReturns = 10;\n        int patternType = MLRemoteLandmarkAnalyzerSetting.STEADY_PATTERN;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting object is created using default options.\");\n            return MLRemoteLandmarkAnalyzerSetting.DEFAULT_SETTINGS;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"largestNumOfReturns\", ReadableType.Number)) {\n            largestNumOfReturns = readableMap.getInt(\"largestNumOfReturns\");\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting largestNumOfReturns option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"patternType\", ReadableType.Number)) {\n            patternType = readableMap.getInt(\"patternType\");\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting patternType option set.\");\n        }\n\n        return new MLRemoteLandmarkAnalyzerSetting.Factory().setLargestNumOfReturns(largestNumOfReturns)\n            .setPatternType(patternType)\n            .create();\n    }\n\n    /**\n     * Creates and returns MLImageSegmentationAnalyzer object\n     *\n     * @param analyzerConfiguration analyzer configuration\n     * @return MLImageSegmentationAnalyzer object\n     */\n    public MLImageSegmentationAnalyzer createImageSegmentationAnalyzer(ReadableMap analyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance()\n            .getImageSegmentationAnalyzer(createImageSegmentationSetting(analyzerConfiguration));\n    }\n\n    /**\n     * Creates and returns MLRemoteProductVisionSearchAnalyzer object\n     *\n     * @param readableMap analyzer configuration\n     * @return MLRemoteProductVisionSearchAnalyzer object\n     */\n    public MLRemoteProductVisionSearchAnalyzer createProductVisionSearchAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance()\n            .getRemoteProductVisionSearchAnalyzer(createSearchAnalyzerSetting(readableMap));\n    }\n\n    /**\n     * Creates MLRemoteProductVisionSearchAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteProductVisionSearchAnalyzerSetting object\n     */\n    private MLRemoteProductVisionSearchAnalyzerSetting createSearchAnalyzerSetting(ReadableMap readableMap) {\n        MLRemoteProductVisionSearchAnalyzerSetting.Factory creator\n            = new MLRemoteProductVisionSearchAnalyzerSetting.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxResults\", ReadableType.Number)) {\n            creator.setLargestNumOfReturns(readableMap.getInt(\"maxResults\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting maxResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"productSetId\", ReadableType.String)) {\n            creator.setProductSetId(readableMap.getString(\"productSetId\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting productSetId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting region option set.\");\n        }\n        return creator.create();\n    }\n\n    /**\n     * Creates MLProductVisionSearchCaptureConfig object\n     *\n     * @param readableMap configuration\n     * @param context context object\n     * @return MLProductVisionSearchCaptureConfig object\n     */\n    private MLProductVisionSearchCaptureConfig createProductSearchPluginConfig(ReadableMap readableMap,\n        ReactApplicationContext context) {\n        MLProductVisionSearchCaptureConfig.Factory creator = new MLProductVisionSearchCaptureConfig.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxResults\", ReadableType.Number)) {\n            creator.setLargestNumOfReturns(readableMap.getInt(\"maxResults\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig maxResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"productSetId\", ReadableType.String)) {\n            creator.setProductSetId(readableMap.getString(\"productSetId\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig productSetId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig region option set.\");\n        }\n\n        return creator.setProductFragment(new HMSProductFragment(context)).create();\n    }\n\n    /**\n     * Creates product vision plugin capture\n     *\n     * @param readableMap configuration\n     * @param context context object\n     * @return MLProductVisionSearchCapture\n     */\n    public MLProductVisionSearchCapture createProductVisionSearchCapture(ReadableMap readableMap,\n        ReactApplicationContext context) {\n        return MLProductVisionSearchCaptureFactory.getInstance()\n            .create(createProductSearchPluginConfig(readableMap, context));\n    }\n\n    /**\n     * Creates MLImageSuperResolutionAnalyzerSetting object\n     *\n     * @param scale scale value\n     * @return MLImageSuperResolutionAnalyzerSetting object\n     */\n    private MLImageSuperResolutionAnalyzerSetting createImageSuperResolutionSetting(double scale) {\n        return new MLImageSuperResolutionAnalyzerSetting.Factory().setScale((float) scale).create();\n    }\n\n    /**\n     * Creates MLImageSuperResolutionAnalyzer object\n     *\n     * @param scale scale value\n     * @return MLImageSuperResolutionAnalyzer object\n     */\n    public MLImageSuperResolutionAnalyzer createImageSuperResolutionAnalyzer(double scale) {\n        return MLImageSuperResolutionAnalyzerFactory.getInstance()\n            .getImageSuperResolutionAnalyzer(createImageSuperResolutionSetting(scale));\n    }\n\n    /**\n     * Creates MLDocumentSkewCorrectionAnalyzer object\n     *\n     * @return MLDocumentSkewCorrectionAnalyzer\n     */\n    public MLDocumentSkewCorrectionAnalyzer createDocumentSkewCorrectionAnalyzer() {\n        return MLDocumentSkewCorrectionAnalyzerFactory.getInstance()\n            .getDocumentSkewCorrectionAnalyzer(createDscAnalyzerSetting());\n    }\n\n    /**\n     * Create MLSceneDetectionAnalyzer\n     *\n     * @param confidence confidence setting\n     * @return MLSceneDetectionAnalyzer object\n     */\n    public MLSceneDetectionAnalyzer getSceneDetectionAnalyzer(double confidence) {\n        return MLSceneDetectionAnalyzerFactory.getInstance()\n            .getSceneDetectionAnalyzer(createScdAnalyzerSetting(confidence));\n    }\n\n    /**\n     * Creates MLSceneDetectionAnalyzerSetting object\n     *\n     * @param confidence confidence value\n     * @return MLSceneDetectionAnalyzerSetting object\n     */\n    private MLSceneDetectionAnalyzerSetting createScdAnalyzerSetting(double confidence) {\n        return new MLSceneDetectionAnalyzerSetting.Factory().setConfidence((float) confidence).create();\n    }\n\n    /**\n     * Creates MLFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return MLFaceAnalyzer  object\n     */\n    public MLFaceAnalyzer create2DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance().getFaceAnalyzer(createFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return ML3DFaceAnalyzer object\n     */\n    public ML3DFaceAnalyzer create3DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance()\n            .get3DFaceAnalyzer(create3DFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzerSetting\n     *\n     * @param readableMap configuration\n     * @return ML3DFaceAnalyzerSetting object\n     */\n    private ML3DFaceAnalyzerSetting create3DFaceAnalyzerSetting(ReadableMap readableMap) {\n        int performanceType = ML3DFaceAnalyzerSetting.TYPE_SPEED;\n        boolean isTracingAllowed = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting object is created using default options.\");\n            return new ML3DFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n\n        return new ML3DFaceAnalyzerSetting.Factory().setPerformanceType(performanceType)\n            .setTracingAllowed(isTracingAllowed)\n            .create();\n    }\n\n    /**\n     * Creates MLFaceAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLFaceAnalyzerSetting object\n     */\n    private MLFaceAnalyzerSetting createFaceAnalyzerSetting(ReadableMap readableMap) {\n        int featureType = MLFaceAnalyzerSetting.TYPE_FEATURES;\n        int setShapeType = MLFaceAnalyzerSetting.TYPE_SHAPES;\n        int keyPointType = MLFaceAnalyzerSetting.TYPE_KEYPOINTS;\n        int performanceType = MLFaceAnalyzerSetting.TYPE_SPEED;\n        int tracingMode = MLFaceAnalyzerSetting.MODE_TRACING_ROBUST;\n        double minFaceProportion = 0.1F;\n        boolean isPoseDisabled = false;\n        boolean isTracingAllowed = false;\n        boolean isMaxSizeFaceOnly = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFaceAnalyzerSetting object is created using default options.\");\n            return new MLFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"featureType\", ReadableType.Number)) {\n            featureType = readableMap.getInt(\"featureType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting featureType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"keyPointType\", ReadableType.Number)) {\n            keyPointType = readableMap.getInt(\"keyPointType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting keyPointType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"shapeType\", ReadableType.Number)) {\n            setShapeType = readableMap.getInt(\"shapeType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting shapeType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tracingMode\", ReadableType.Number)) {\n            tracingMode = readableMap.getInt(\"tracingMode\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting tracingMode option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minFaceProportion\", ReadableType.Number)) {\n            minFaceProportion = readableMap.getDouble(\"minFaceProportion\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting minFaceProportion option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isMaxSizeFaceOnly\", ReadableType.Boolean)) {\n            isMaxSizeFaceOnly = readableMap.getBoolean(\"isMaxSizeFaceOnly\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isMaxSizeFaceOnly option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isPoseDisabled\", ReadableType.Boolean)) {\n            isPoseDisabled = readableMap.getBoolean(\"isPoseDisabled\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isPoseDisabled option set\");\n        }\n\n        return new MLFaceAnalyzerSetting.Factory().setFeatureType(featureType)\n            .setKeyPointType(keyPointType)\n            .setMaxSizeFaceOnly(isMaxSizeFaceOnly)\n            .setMinFaceProportion((float) minFaceProportion)\n            .setPerformanceType(performanceType)\n            .setPoseDisabled(isPoseDisabled)\n            .setShapeType(setShapeType)\n            .setTracingAllowed(isTracingAllowed, tracingMode)\n            .create();\n    }\n\n    /**\n     * Creates and returns MLSkeletonAnalyzer object\n     *\n     * @param analyzeType analyze type\n     * @return MLSkeletonAnalyzer object\n     */\n    public MLSkeletonAnalyzer createSkeletonAnalyzer(int analyzeType) {\n        return MLSkeletonAnalyzerFactory.getInstance().getSkeletonAnalyzer(createSkeletonAnalyzerSetting(analyzeType));\n    }\n\n    /**\n     * Creates MLSkeletonAnalyzerSetting object\n     *\n     * @param analyzerType analyze type\n     * @return MLSkeletonAnalyzerSetting object\n     */\n    private MLSkeletonAnalyzerSetting createSkeletonAnalyzerSetting(int analyzerType) {\n        return new MLSkeletonAnalyzerSetting.Factory().setAnalyzerType(analyzerType).create();\n    }\n\n    /**\n     * Creates MLLivenessCaptureConfig object\n     *\n     * @param options options\n     * @return MLLivenessCaptureConfig object\n     */\n    public MLLivenessCaptureConfig createLivenessCaptureConfig(ReadableMap options) {\n        MLLivenessCaptureConfig.Builder builder = new MLLivenessCaptureConfig.Builder();\n\n        if (options == null) {\n            Log.i(TAG, \"MLLivenessCaptureConfig options is null\");\n            return builder.build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(options, \"option\", ReadableType.Number)) {\n            builder.setOptions(options.getInt(\"option\"));\n        }\n\n        return builder.build();\n    }\n\n    /**\n     * Create MLHandKeypointAnalyzer\n     *\n     * @param analyzerSetting configuration\n     * @return MLHandKeypointAnalyzer\n     */\n    public MLHandKeypointAnalyzer createHandKeyPointAnalyzer(ReadableMap analyzerSetting) {\n        return MLHandKeypointAnalyzerFactory.getInstance()\n            .getHandKeypointAnalyzer(createHandKeyPointAnalyzerSetting(analyzerSetting));\n    }\n\n    /**\n     * Create MLGestureAnalyzer\n     *\n     * @return MLGestureAnalyzer\n     */\n    public MLGestureAnalyzer createGestureAnalyzer() {\n        MLGestureAnalyzerSetting analyzerSetting = new MLGestureAnalyzerSetting.Factory().create();\n        return MLGestureAnalyzerFactory.getInstance().getGestureAnalyzer(analyzerSetting);\n    }\n\n    /**\n     * Create MLIcrAnalyzer\n     *\n     * @param countryCode Country code \n     * @param isFront Side of card \n     * @return MLIcrAnalyzer\n     */\n    public MLIcrAnalyzer createICRAnalyzer(String countryCode, boolean isFront) {\n        MLIcrAnalyzerSetting setting = new MLIcrAnalyzerSetting.Factory()\n                .setSideType(isFront ? MLIcrAnalyzerSetting.FRONT : MLIcrAnalyzerSetting.BACK)\n                .setCountryCode(countryCode)\n                .create();\n        return MLCardAnalyzerFactory.getInstance().getIcrAnalyzer(setting);\n    }\n\n    /**\n     * Creates MLHandKeypointAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLHandKeypointAnalyzerSetting object\n     */\n    private MLHandKeypointAnalyzerSetting createHandKeyPointAnalyzerSetting(ReadableMap readableMap) {\n        int maxHandResults = 10;\n        int sceneType = MLHandKeypointAnalyzerSetting.TYPE_ALL;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting object is created using default options.\");\n            return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n                .setSceneType(sceneType)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sceneType\", ReadableType.Number)) {\n            sceneType = readableMap.getInt(\"sceneType\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting sceneType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxHandResults\", ReadableType.Number)) {\n            maxHandResults = readableMap.getInt(\"maxHandResults\") <= 0 ? 10 : readableMap.getInt(\"maxHandResults\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting maxHandResults option set.\");\n        }\n\n        return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n            .setSceneType(sceneType)\n            .create();\n    }\n\n    /**\n     * Creates MLFrame object to use analyze\n     *\n     * @param frameConfiguration keys and values to create MLFrame from existing methods\n     * @param context ReactApplicationContext\n     * @return MLFrame object or null\n     */\n    public MLFrame createFrame(ReadableMap frameConfiguration, ReactApplicationContext context) {\n        if (frameConfiguration == null) {\n            Log.i(TAG, \"MLFrame frameConfiguration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(frameConfiguration.getString(\"bitmap\"), Base64.DEFAULT);\n            return MLFrame.fromBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bytes\", ReadableType.Map)) {\n            ReadableMap bytes = frameConfiguration.getMap(\"bytes\");\n            if (HMSUtils.getInstance().hasValidKey(bytes, \"frameProperty\", ReadableType.Map) && HMSUtils.getInstance()\n                .hasValidKey(bytes, \"values\", ReadableType.Array)) {\n                MLFrame.Property property = createFrameProperty(bytes.getMap(\"frameProperty\"));\n                ReadableArray values = bytes.getArray(\"values\");\n                return MLFrame.fromByteArray(HMSUtils.getInstance().convertRaToByteArray(values), property);\n            } else {\n                Log.i(TAG, \"MLFrame bytes object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"byteBuffer\", ReadableType.Map)) {\n            ReadableMap byteBuffer = frameConfiguration.getMap(\"byteBuffer\");\n            if (HMSUtils.getInstance().hasValidKey(byteBuffer, \"buffer\", ReadableType.String) && HMSUtils.getInstance()\n                .hasValidKey(byteBuffer, \"frameProperty\", ReadableType.Map)) {\n                MLFrame.Property frameProperty = createFrameProperty(byteBuffer.getMap(\"frameProperty\"));\n                String buffer = byteBuffer.getString(\"buffer\");\n                return MLFrame.fromByteBuffer(\n                    HMSUtils.getInstance().convertByteArrToByteBuffer(Base64.decode(buffer, Base64.DEFAULT)),\n                    frameProperty);\n            } else {\n                Log.i(TAG, \"MLFrame byteBuffer object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"filePath\", ReadableType.String)) {\n            try {\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                    Uri.parse(frameConfiguration.getString(\"filePath\")));\n                return new MLFrame.Creator().setBitmap(bitmap).create();\n            } catch (Exception e) {\n                Log.i(TAG, \"MLFrame exception happened fromFilePath \" + e.getMessage());\n                return null;\n            }\n\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"creator\", ReadableType.Map)) {\n            ReadableMap creator = frameConfiguration.getMap(\"creator\");\n            return createFrameUsingCreator(creator);\n        } else {\n            Log.i(TAG, \"MLFrame frameConfiguration does not contain keys for creating a frame\");\n            return null;\n        }\n    }\n\n    /**\n     * Creates MLFrame.Property object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property object\n     */\n    private MLFrame.Property createFrameProperty(ReadableMap readableMap) {\n        MLFrame.Property.Creator creator = new MLFrame.Property.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame.Property object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n            creator.setWidth(readableMap.getInt(\"width\"));\n            Log.i(TAG, \"MLFrame.Property width option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n            creator.setHeight(readableMap.getInt(\"height\"));\n            Log.i(TAG, \"MLFrame.Property height option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame.Property quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"formatType\", ReadableType.Number)) {\n            creator.setFormatType(readableMap.getInt(\"formatType\"));\n            Log.i(TAG, \"MLFrame.Property formatType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame.Property itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.Number)) {\n            creator.setTimestamp(readableMap.getInt(\"timeStamp\"));\n            Log.i(TAG, \"MLFrame.Property timeStamp option set.\");\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates MLFrame.Property.Ext object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property.Ext object\n     */\n    private MLFrame.Property.Ext createFramePropertyExt(ReadableMap readableMap) {\n        int lensId = 0;\n        int maxZoom = 0;\n        int zoom = 0;\n        int bottom = 0;\n        int left = 0;\n        int right = 0;\n        int top = 0;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrameProperty.Ext object is created using default options.\");\n            return new MLFrame.Property.Ext.Creator().build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"lensId\", ReadableType.Number)) {\n            lensId = readableMap.getInt(\"lensId\");\n            Log.i(TAG, \"MLFrameProperty.Ext lensId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxZoom\", ReadableType.Number)) {\n            maxZoom = readableMap.getInt(\"maxZoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext maxZoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"zoom\", ReadableType.Number)) {\n            zoom = readableMap.getInt(\"zoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext zoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"bottom\", ReadableType.Number)) {\n            bottom = readableMap.getInt(\"bottom\");\n            Log.i(TAG, \"MLFrameProperty.Ext bottom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"left\", ReadableType.Number)) {\n            left = readableMap.getInt(\"left\");\n            Log.i(TAG, \"MLFrameProperty.Ext left option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"right\", ReadableType.Number)) {\n            right = readableMap.getInt(\"right\");\n            Log.i(TAG, \"MLFrameProperty.Ext right option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"top\", ReadableType.Number)) {\n            top = readableMap.getInt(\"top\");\n            Log.i(TAG, \"MLFrameProperty.Ext top option set.\");\n        }\n        return new MLFrame.Property.Ext.Creator().setLensId(lensId)\n            .setMaxZoom(maxZoom)\n            .setRect(new Rect(left, top, right, bottom))\n            .setZoom(zoom)\n            .build();\n    }\n\n    /**\n     * Creates MLFrame using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame object\n     */\n    private MLFrame createFrameUsingCreator(ReadableMap readableMap) {\n        MLFrame.Creator creator = new MLFrame.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame given ReadableMap object is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"base64Bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(readableMap.getString(\"base64Bitmap\"), Base64.DEFAULT);\n            creator.setBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n            Log.i(TAG, \"MLFrame base64Bitmap option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.String)) {\n            creator.setTimestamp(Long.parseLong(readableMap.getString(\"timeStamp\")));\n            Log.i(TAG, \"MLFrame timeStamp option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"framePropertyExt\", ReadableType.Map)) {\n            creator.setFramePropertyExt(createFramePropertyExt(readableMap.getMap(\"framePropertyExt\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"writeByteBufferData\", ReadableType.Map)) {\n            ReadableMap writeByteBufferData = readableMap.getMap(\"writeByteBufferData\");\n            if (HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"data\", ReadableType.String)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"height\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"width\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"formatType\", ReadableType.Number)) {\n\n                ByteBuffer bufferData = HMSUtils.getInstance()\n                    .convertByteArrToByteBuffer(Base64.decode(writeByteBufferData.getString(\"data\"), Base64.DEFAULT));\n                int height = writeByteBufferData.getInt(\"height\");\n                int width = writeByteBufferData.getInt(\"width\");\n                int formatType = writeByteBufferData.getInt(\"formatType\");\n                creator.writeByteBufferData(bufferData, width, height, formatType);\n                Log.i(TAG, \"MLFrame writeByteBufferData option set.\");\n            } else {\n                Log.i(TAG, \"MLFrame writeByteBufferData option keys are not valid.\");\n            }\n\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Helper method that sets language\n     *\n     * @param readableMap configuration\n     * @return language\n     */\n    private String setLanguage(ReadableMap readableMap) {\n        String language = \"rm\";\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"Language option set.\");\n        }\n\n        return language;\n    }\n\n    /**\n     * Helper method that sets OCRMode\n     *\n     * @param readableMap configuration\n     * @return OCRMode\n     */\n    private int setOCRMode(ReadableMap readableMap) {\n        int ocrDetectMode = MLLocalTextSetting.OCR_DETECT_MODE;\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"OCRMode\", ReadableType.Number)) {\n            ocrDetectMode = readableMap.getInt(\"OCRMode\");\n            Log.i(TAG, \"OCRMode option set.\");\n        }\n\n        return ocrDetectMode;\n    }\n\n    /**\n     * Creates MLLocalTranslateSetting object\n     *\n     * @param readableMap configuration\n     * @return MLLocalTranslateSetting object\n     */\n    private MLLocalTranslateSetting createLocalTranslateSetting(ReadableMap readableMap) {\n        String sourceLanguageCode = \"en\";\n        String targetLanguageCode = \"zh\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLLocalTranslateSetting object is created using default options.\");\n            return new MLLocalTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                .setTargetLangCode(targetLanguageCode)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sourceLanguageCode\", ReadableType.String)) {\n            sourceLanguageCode = readableMap.getString(\"sourceLanguageCode\");\n            Log.i(TAG, \"MLLocalTranslateSetting sourceLanguageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"targetLanguageCode\", ReadableType.String)) {\n            targetLanguageCode = readableMap.getString(\"targetLanguageCode\");\n            Log.i(TAG, \"MLLocalTranslateSetting targetLanguageCode option set.\");\n        }\n\n        return new MLLocalTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n            .setTargetLangCode(targetLanguageCode)\n            .create();\n    }\n\n    /**\n     * Creates MLRemoteTranslateSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteTranslateSetting object\n     */\n    private MLRemoteTranslateSetting createRemoteTranslateSetting(ReadableMap readableMap) {\n        String sourceLanguageCode = \"en\";\n        String targetLanguageCode = \"zh\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteTranslateSetting object is created using default options.\");\n            return new MLRemoteTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                .setTargetLangCode(targetLanguageCode)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sourceLanguageCode\", ReadableType.String)) {\n            sourceLanguageCode = readableMap.getString(\"sourceLanguageCode\");\n            Log.i(TAG, \"MLRemoteTranslateSetting sourceLanguageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"targetLanguageCode\", ReadableType.String)) {\n            targetLanguageCode = readableMap.getString(\"targetLanguageCode\");\n            Log.i(TAG, \"MLRemoteTranslateSetting targetLanguageCode option set.\");\n        }\n\n        return new MLRemoteTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n            .setTargetLangCode(targetLanguageCode)\n            .create();\n    }\n\n    /**\n     * Creates MLImageSegmentationSetting object\n     *\n     * @param readableMap configuration\n     * @return MLImageSegmentationSetting object\n     */\n    private MLImageSegmentationSetting createImageSegmentationSetting(ReadableMap readableMap) {\n        int analyzerType = MLImageSegmentationSetting.BODY_SEG;\n        int scene = MLImageSegmentationScene.ALL;\n        boolean exact = true;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLImageSegmentationSetting object is being created...\");\n            return new MLImageSegmentationSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"analyzerType\", ReadableType.Number)) {\n            analyzerType = readableMap.getInt(\"analyzerType\");\n            Log.i(TAG, \"MLImageSegmentationSetting analyzerType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"scene\", ReadableType.Number)) {\n            scene = readableMap.getInt(\"scene\");\n            Log.i(TAG, \"MLImageSegmentationSetting scene option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"exact\", ReadableType.Boolean)) {\n            exact = readableMap.getBoolean(\"exact\");\n            Log.i(TAG, \"MLImageSegmentationSetting exact option set.\");\n        }\n\n        return new MLImageSegmentationSetting.Factory().setScene(scene)\n            .setAnalyzerType(analyzerType)\n            .setExact(exact)\n            .create();\n    }\n\n    /**\n     * Creates MLDocumentSkewCorrectionAnalyzerSetting object\n     *\n     * @return MLDocumentSkewCorrectionAnalyzerSetting object\n     */\n    private MLDocumentSkewCorrectionAnalyzerSetting createDscAnalyzerSetting() {\n        return new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();\n    }\n\n    /**\n     * Creates MLCompositeAnalyzer\n     *\n     * @param readableMap analyzer configurations\n     * @return MLCompositeAnalyzer\n     */\n    public MLCompositeAnalyzer createCompositeAnalyzer(ReadableMap readableMap) {\n        MLCompositeAnalyzer.Creator creator = new MLCompositeAnalyzer.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLCompositeAnalyzer object created with local text analyzer.\");\n            return creator.add(createTextAnalyzer(null, false)).create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"face\", ReadableType.Map)) {\n            ReadableMap face = readableMap.getMap(\"face\");\n            if (HMSUtils.getInstance().boolKeyCheck(face, \"isFace2D\")) {\n                Log.i(TAG, \"MLCompositeAnalyzer added face2D analyzer\");\n                creator.add(create2DFaceAnalyzer(face));\n            } else {\n                Log.i(TAG, \"MLCompositeAnalyzer added face3D analyzer\");\n                creator.add(create2DFaceAnalyzer(face));\n            }\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"hand\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added hand analyzer\");\n            creator.add(createHandKeyPointAnalyzer(readableMap.getMap(\"hand\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"skeleton\", ReadableType.Number)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added skeleton analyzer\");\n            creator.add(createSkeletonAnalyzer(readableMap.getInt(\"skeleton\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"text\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added text analyzer\");\n            creator.add(createTextAnalyzer(readableMap.getMap(\"text\"),\n                HMSUtils.getInstance().boolKeyCheck(readableMap.getMap(\"text\"), \"isRemote\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"object\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added object analyzer\");\n            creator.add(createObjectAnalyzer(readableMap.getMap(\"object\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"classification\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added classification analyzer\");\n            creator.add(createClassificationAnalyzer(\n                HMSUtils.getInstance().boolKeyCheck(readableMap.getMap(\"classification\"), \"isRemote\"),\n                readableMap.getMap(\"classification\")));\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates LensEngine\n     *\n     * @param context context object\n     * @param analyzer analyzer\n     * @param configuration configurations for LensEngine\n     * @return LensEngine object\n     */\n    public LensEngine createLensEngine(ReactApplicationContext context, MLAnalyzer analyzer,\n        ReadableMap configuration) {\n        int width = 1440;\n        int height = 1080;\n        float fps = 30.0f;\n        boolean automaticFocus = false;\n        String flashMode = Camera.Parameters.FLASH_MODE_OFF;\n        String focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO;\n        int lensType = LensEngine.BACK_LENS;\n\n        if (configuration == null) {\n            Log.i(TAG, \"LensEngine created with default options\");\n            return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n                .setFocusMode(focusMode)\n                .setFlashMode(flashMode)\n                .enableAutomaticFocus(false)\n                .applyFps(fps)\n                .applyDisplayDimension(width, height)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"width\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine width set\");\n            width = configuration.getInt(\"width\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"height\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine height set\");\n            height = configuration.getInt(\"height\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"lensType\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine lensType set\");\n            lensType = configuration.getInt(\"lensType\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"fps\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine fps set\");\n            fps = (float) configuration.getDouble(\"fps\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"automaticFocus\", ReadableType.Boolean)) {\n            Log.i(TAG, \"LensEngine automaticFocus set\");\n            automaticFocus = configuration.getBoolean(\"automaticFocus\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"flashMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine flashMode set\");\n            flashMode = configuration.getString(\"flashMode\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"focusMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine focusMode set\");\n            focusMode = configuration.getString(\"focusMode\");\n        }\n\n        return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n            .setFocusMode(focusMode)\n            .setFlashMode(flashMode)\n            .enableAutomaticFocus(automaticFocus)\n            .applyFps(fps)\n            .applyDisplayDimension(width, height)\n            .create();\n    }\n\n    /**\n     * Creates analyzer for lens engine\n     *\n     * @param analyzer analyzer tag number\n     * @param analyzerConfig analyzer configuration for related tag\n     * @param context app context\n     * @return MLAnalyzer\n     */\n    public MLAnalyzer createLensEngineAnalyzer(int analyzer, ReadableMap analyzerConfig,\n        ReactApplicationContext context) {\n        switch (analyzer) {\n            case 0:\n                MLTextAnalyzer localTextAnalyzer = createTextAnalyzer(analyzerConfig, context);\n                localTextAnalyzer.setTransactor(new HMSTextAnalyzerTransactor(context));\n                return localTextAnalyzer;\n            case 1:\n                MLFaceAnalyzer faceAnalyzer2d = create2DFaceAnalyzer(analyzerConfig);\n                faceAnalyzer2d.setTransactor(new HMS2DFaceAnalyzerTransactor(context));\n                return faceAnalyzer2d;\n            case 2:\n                ML3DFaceAnalyzer faceAnalyzer3d = create3DFaceAnalyzer(analyzerConfig);\n                faceAnalyzer3d.setTransactor(new HMS3DFaceAnalyzerTransactor(context));\n                return faceAnalyzer3d;\n            case 3:\n                int analyzeType = HMSUtils.getInstance().hasValidKey(analyzerConfig, \"analyzeType\", ReadableType.Number)\n                    ? analyzerConfig.getInt(\"analyzeType\")\n                    : MLSkeletonAnalyzerSetting.TYPE_NORMAL;\n                MLSkeletonAnalyzer skeletonAnalyzer = createSkeletonAnalyzer(analyzeType);\n                skeletonAnalyzer.setTransactor(new HMSSkeletonAnalyzerTransactor(context));\n                return skeletonAnalyzer;\n            case 4:\n                MLImageClassificationAnalyzer classificationAnalyzer = createClassificationAnalyzer(false,\n                    analyzerConfig);\n                classificationAnalyzer.setTransactor(new HMSClassificationAnalyzerTransactor(context));\n                return classificationAnalyzer;\n            case 5:\n                MLObjectAnalyzer objectAnalyzer = createObjectAnalyzer(analyzerConfig);\n                objectAnalyzer.setTransactor(new HMSObjectAnalyzerTransactor(context));\n                return objectAnalyzer;\n            case 6:\n                double confidence = HMSUtils.getInstance()\n                    .hasValidKey(analyzerConfig, \"confidence\", ReadableType.Number) ? analyzerConfig.getInt(\n                    \"confidence\") : 0.0;\n                MLSceneDetectionAnalyzer sceneDetectionAnalyzer = MLSceneDetectionAnalyzerFactory.getInstance()\n                    .getSceneDetectionAnalyzer(createScdAnalyzerSetting(confidence));\n                sceneDetectionAnalyzer.setTransactor(new HMSSceneDetectionAnalyzerTransactor(context));\n                return sceneDetectionAnalyzer;\n            case 7:\n                MLHandKeypointAnalyzer handKeypointAnalyzer = createHandKeyPointAnalyzer(analyzerConfig);\n                handKeypointAnalyzer.setTransactor(new HMSHandKeypointTransactor(context));\n                return handKeypointAnalyzer;\n            case 8:\n                MLGestureAnalyzer gestureAnalyzer = createGestureAnalyzer();\n                gestureAnalyzer.setTransactor(new HMSGestureTransactor(context));\n                return gestureAnalyzer;\n            default:\n                return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/creators/HMSResultCreator.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.creators;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.graphics.Point;\nimport android.graphics.PointF;\nimport android.graphics.Rect;\nimport android.text.TextUtils;\nimport android.util.SparseArray;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.huawei.hms.common.size.Size;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftResult;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.common.MLCoordinate;\nimport com.huawei.hms.mlsdk.common.MLPosition;\nimport com.huawei.hms.mlsdk.custom.MLModelOutputs;\nimport com.huawei.hms.mlsdk.document.MLDocument;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;\nimport com.huawei.hms.mlsdk.face.MLFace;\nimport com.huawei.hms.mlsdk.face.MLFaceEmotion;\nimport com.huawei.hms.mlsdk.face.MLFaceFeature;\nimport com.huawei.hms.mlsdk.face.MLFaceKeyPoint;\nimport com.huawei.hms.mlsdk.face.MLFaceShape;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFace;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceTemplateResult;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationResult;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoint;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoints;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionResult;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentation;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmark;\nimport com.huawei.hms.mlsdk.langdetect.MLDetectedLang;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLProductVisionSearch;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProduct;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProductImage;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetection;\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionResult;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.mlsdk.text.TextLanguage;\nimport com.huawei.hms.mlsdk.textembedding.MLVocabularyVersion;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolution;\nimport com.huawei.hms.mlsdk.tts.MLTtsSpeaker;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.google.gson.JsonObject;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.File;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\npublic class HMSResultCreator {\n    private static volatile HMSResultCreator instance;\n\n    private static Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().create();\n\n    public static HMSResultCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSResultCreator.class) {\n                if (instance == null) {\n                    instance = new HMSResultCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts aft results to WritableArray\n     *\n     * @param results aft results\n     * @return WritableArray\n     */\n    public WritableArray getAftResult(List<MLRemoteAftResult.Segment> results) {\n        WritableArray array = Arguments.createArray();\n        for (MLRemoteAftResult.Segment segment : results) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putInt(\"startTime\", segment.getStartTime());\n            writableMap.putInt(\"endTime\", segment.getEndTime());\n            writableMap.putString(\"text\", segment.getText());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Convert detected language list to WritableMap\n     *\n     * @param languageList detected language list\n     * @return WritableMap\n     */\n    public WritableMap getLangDetectionResult(List<MLDetectedLang> languageList) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLDetectedLang lang : languageList) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"languageCode\", lang.getLangCode());\n            writableMap.putDouble(\"probability\", lang.getProbability());\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts speech rtt result to WritableMap\n     *\n     * @param rttResults result list\n     * @return WritableMap\n     */\n    public WritableMap getRttResult(List<MLSpeechRealTimeTranscriptionResult> rttResults) {\n        WritableMap wm = Arguments.createMap();\n        WritableArray array = Arguments.createArray();\n        for (MLSpeechRealTimeTranscriptionResult result : rttResults) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"startTime\", result.startTime);\n            writableMap.putString(\"endTime\", result.endTime);\n            writableMap.putString(\"text\", result.text);\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts speaker list to WritableMap\n     *\n     * @param speakers speaker list\n     * @return WritableMap\n     */\n    public WritableMap getSpeakers(List<MLTtsSpeaker> speakers) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLTtsSpeaker speaker : speakers) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"language\", speaker.getLanguage());\n            writableMap.putString(\"name\", speaker.getName());\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * returns vector methods result\n     *\n     * @param floats method result\n     * @return WritableMap\n     */\n    public WritableMap getTextEmbedVectorResult(Float[] floats) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertFloatArrToWa(floats));\n        return wm;\n    }\n\n    /**\n     * returns analyseSimilarWords method result\n     *\n     * @param strings method result\n     * @return WritableMap\n     */\n    public WritableMap analyseSimilarWordsResult(List<String> strings) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(strings));\n        return wm;\n    }\n\n    /**\n     * returns vocabularyVersion method result\n     *\n     * @param mlVocabularyVersion method result\n     * @return WritableMap\n     */\n    public WritableMap vocabularyVersionResult(MLVocabularyVersion mlVocabularyVersion) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap temp = Arguments.createMap();\n        temp.putString(\"dictionaryDimension\", mlVocabularyVersion.getDictionaryDimension());\n        temp.putString(\"dictionarySize\", mlVocabularyVersion.getDictionarySize());\n        temp.putString(\"versionNo\", mlVocabularyVersion.getVersionNo());\n        wm.putMap(\"result\", temp);\n        return wm;\n    }\n\n    /**\n     * returns WordVectorBatch method result\n     *\n     * @param batch method result\n     * @return WritableMap\n     */\n    public WritableMap vectorBatchResult(Map<String, Float[]> batch) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap temp = Arguments.createMap();\n        for (Map.Entry<String, Float[]> entry : batch.entrySet()) {\n            temp.putArray(entry.getKey(), HMSUtils.getInstance().convertFloatArrToWa(entry.getValue()));\n        }\n        wm.putMap(\"result\", temp);\n        return wm;\n    }\n\n    /**\n     * returns CustomModel exec method result\n     *\n     * @param mlModelOutputs method result\n     * @return WritableMap\n     */\n    public WritableMap customModelResult(MLModelOutputs mlModelOutputs) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convert2DFloatArrToWa(mlModelOutputs.getOutput(0)));\n        return wm;\n    }\n\n    /**\n     * Returns getModels method result\n     *\n     * @param models remote models\n     * @return WritableMap\n     */\n    public WritableMap getModels(Set<MLRemoteModel> models) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLRemoteModel s : models) {\n            wa.pushString(s.getModelName());\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Recent model file method result\n     *\n     * @param file file object\n     * @return WritableMap\n     */\n    public WritableMap getFilePathResult(File file) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", file.getPath());\n        return wm;\n    }\n\n    /**\n     * Converts sdk text recognition result to WritableMap\n     *\n     * @param textRecognitionResult result to be converted\n     * @return WritableMap\n     */\n    public WritableMap getTextRecognitionResult(MLText textRecognitionResult) {\n        WritableMap result = SUCCESS.getStatusAndMessage();\n        result.putString(\"completeResult\", textRecognitionResult.getStringValue());\n        result.putArray(\"blocks\", getTextBlocks(textRecognitionResult.getBlocks()));\n        return result;\n    }\n\n    /**\n     * Converts sdk text recognition result to WritableMap\n     *\n     * @param blocks result to be converted\n     * @return WritableMap\n     */\n    public WritableMap getTextRecognitionResult(SparseArray<MLText.Block> blocks) {\n        WritableMap result = SUCCESS.getStatusAndMessage();\n        result.putArray(\"blocks\", getTextBlocks(blocks));\n        return result;\n    }\n\n    /**\n     * Converts block array to WritableArray\n     *\n     * @param blocks blocks to be converted\n     * @return WritableArray\n     */\n    private WritableArray getTextBlocks(SparseArray<MLText.Block> blocks) {\n        return getTextBlocks(HMSUtils.getInstance().convertSparseArrayToList(blocks));\n    }\n\n    /**\n     * Converts text block list to WritableArray\n     *\n     * @param mlTextBlockList block list\n     * @return WritableArray\n     */\n    private WritableArray getTextBlocks(List<MLText.Block> mlTextBlockList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.Block block : mlTextBlockList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", block.getStringValue());\n            wm.putDouble(\"possibility\", block.getPossibility() == null ? 0.0 : block.getPossibility());\n            wm.putMap(\"border\", getBorders(block.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(block.getVertexes())));\n            wm.putArray(\"lines\", getLines(block.getContents()));\n            wm.putArray(\"languageList\", getLanguageList(block.getLanguageList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts text line list into WritableArray\n     *\n     * @param mlTextTextLineList textlines\n     * @return WritableArray\n     */\n    private WritableArray getLines(List<MLText.TextLine> mlTextTextLineList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.TextLine line : mlTextTextLineList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", line.getStringValue());\n            wm.putMap(\"border\", getBorders(line.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(line.getVertexes())));\n            wm.putArray(\"words\", getWords(line.getContents()));\n            wm.putDouble(\"rotatingDegree\", line.getRotatingDegree());\n            wm.putBoolean(\"isVertical\", line.isVertical());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts word list into WritableArray\n     *\n     * @param mlWordList word list\n     * @return WritableArray\n     */\n    private WritableArray getWords(List<MLText.Word> mlWordList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.Word word : mlWordList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", word.getStringValue());\n            wm.putMap(\"border\", getBorders(word.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(word.getVertexes())));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document result to WritableMap\n     *\n     * @param mlDocument document result\n     * @return WritableMap\n     */\n    public WritableMap getDocumentRecognitionResult(MLDocument mlDocument) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"completeResult\", mlDocument.getStringValue());\n        wm.putArray(\"blocks\", getDocumentBlocks(mlDocument.getBlocks()));\n        return wm;\n    }\n\n    /**\n     * Converts document blocks to WritableArray\n     *\n     * @param mlDocumentBlockList block list\n     * @return WritableArray\n     */\n    private WritableArray getDocumentBlocks(List<MLDocument.Block> mlDocumentBlockList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Block block : mlDocumentBlockList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", block.getStringValue());\n            wm.putArray(\"sections\", getSections(block.getSections()));\n            wm.putMap(\"border\", getBorders(block.getBorder()));\n            wm.putMap(\"interval\", getInterval(block.getInterval()));\n            wm.putArray(\"languageList\", getLanguageList(block.getLanguageList()));\n            wm.putDouble(\"possibility\", block.getPossibility() == null ? 0.0 : block.getPossibility());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document sections to WritableArray\n     *\n     * @param mlDocumentSectionList section list\n     * @return WritableArray\n     */\n    private WritableArray getSections(List<MLDocument.Section> mlDocumentSectionList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Section value : mlDocumentSectionList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", value.getStringValue());\n            wm.putMap(\"border\", getBorders(value.getBorder()));\n            wm.putArray(\"lineList\", getLineList(value.getLineList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document interval to WritableMap\n     *\n     * @param mlDocumentInterval interval result\n     * @return WritableMap\n     */\n    private WritableMap getInterval(MLDocument.Interval mlDocumentInterval) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"intervalType\", mlDocumentInterval.getIntervalType());\n        wm.putBoolean(\"isTextFollowed\", mlDocumentInterval.isTextFollowed());\n        return wm;\n    }\n\n    /**\n     * Converts document line list to WritableArray\n     *\n     * @param list line result list\n     * @return WritableArray\n     */\n    private WritableArray getLineList(List<MLDocument.Line> list) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Line line : list) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", line.getStringValue());\n            wm.putMap(\"border\", getBorders(line.getBorder()));\n            wm.putArray(\"points\", getPoints(line.getPoints()));\n            wm.putArray(\"wordList\", getDocumentWords(line.getWordList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document word list to WritableArray\n     *\n     * @param mlDocumentWordList word result list\n     * @return WritableArray\n     */\n    private WritableArray getDocumentWords(List<MLDocument.Word> mlDocumentWordList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Word word : mlDocumentWordList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", word.getStringValue());\n            wm.putMap(\"border\", getBorders(word.getBorder()));\n            wm.putArray(\"characterList\", getCharacterList(word.getCharacterList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document character list to WritableArray\n     *\n     * @param mlDocumentCharList character result list\n     * @return WritableArray\n     */\n    private WritableArray getCharacterList(List<MLDocument.Character> mlDocumentCharList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Character character : mlDocumentCharList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", character.getStringValue());\n            wm.putMap(\"border\", getBorders(character.getBorder()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts point list to WritableArray\n     *\n     * @param pointList list to be converted\n     * @return WritableArray\n     */\n    private WritableArray getPoints(List<Point> pointList) {\n        WritableArray writableArray = Arguments.createArray();\n        for (Point point : pointList) {\n            writableArray.pushMap(getPoint(point));\n        }\n        return writableArray;\n    }\n\n    /**\n     * Converts point to WritableMap\n     *\n     * @param point x and y values container\n     * @return WritableMap\n     */\n    private WritableMap getPoint(Point point) {\n        WritableMap map = Arguments.createMap();\n        map.putInt(\"y\", point.y);\n        map.putInt(\"x\", point.x);\n        return map;\n    }\n\n    /**\n     * Converts Rect to WritableMap\n     *\n     * @param border rect object\n     * @return WritableMap\n     */\n    private WritableMap getBorders(Rect border) {\n        WritableMap writableMap = Arguments.createMap();\n        writableMap.putInt(\"left\", border.left);\n        writableMap.putInt(\"right\", border.right);\n        writableMap.putInt(\"top\", border.top);\n        writableMap.putInt(\"down\", border.bottom);\n        return writableMap;\n    }\n\n    /**\n     * Converts text language list to WritableArray\n     *\n     * @param textLanguageList text language list\n     * @return WritableArray\n     */\n    private WritableArray getLanguageList(List<TextLanguage> textLanguageList) {\n        WritableArray writableArray = Arguments.createArray();\n        for (TextLanguage lang : textLanguageList) {\n            writableArray.pushString(lang.getLanguage());\n        }\n        return writableArray;\n    }\n\n    /**\n     * Converts recognition successs to WritableMap\n     *\n     * @param mlBcrCaptureResult bcr result\n     * @return WritableMap\n     */\n    public WritableMap getBankCardRecognitionSuccessResults(MLBcrCaptureResult mlBcrCaptureResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"errorCode\", mlBcrCaptureResult.getErrorCode());\n        wm.putString(\"expire\", mlBcrCaptureResult.getExpire());\n        wm.putString(\"issuer\", mlBcrCaptureResult.getIssuer());\n        wm.putString(\"number\", mlBcrCaptureResult.getNumber());\n        wm.putString(\"organization\", mlBcrCaptureResult.getOrganization());\n        wm.putString(\"type\", mlBcrCaptureResult.getType());\n        return wm;\n    }\n\n    /**\n     * Converts recognition result to WritableMap\n     *\n     * @param mlGcrCaptureResult recognition result\n     * @return WritableMap\n     */\n    public WritableMap getGeneralCardRecognitionSuccessResult(MLGcrCaptureResult mlGcrCaptureResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"stringValue\", mlGcrCaptureResult.text.getStringValue());\n        wm.putArray(\"textBlocks\", getTextBlocks(mlGcrCaptureResult.text.getBlocks()));\n        return wm;\n    }\n\n    /**\n     * Converts JsonObject to WritableMap\n     *\n     * @param jsonObject json result\n     * @return WritableMap\n     * @throws JSONException inner methods throws\n     */\n    public WritableMap getFormRecognitionResult(JsonObject jsonObject) throws JSONException {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", HMSUtils.getInstance().convertJsonToWritableMap(new JSONObject(jsonObject.toString())));\n        return wm;\n    }\n\n    /**\n     * Converts sparse array of JsonObject to WritableMap\n     *\n     * @param sparseArray contains JsonObjects\n     * @return WritableMap\n     * @throws JSONException convert method throws it\n     */\n    public WritableMap getSyncFormRecognitionResult(SparseArray<JsonObject> sparseArray) throws JSONException {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n\n        for (int i = 0; i < sparseArray.size(); i++) {\n            wa.pushMap(HMSUtils.getInstance().convertJsonToWritableMap(new JSONObject(sparseArray.get(i).toString())));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts result to WritableMap\n     *\n     * @param result classification result list\n     * @return WritableMap\n     */\n    public WritableMap getImageClassificationResult(List<MLImageClassification> result) {\n        WritableMap classificationResult = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLImageClassification classification : result) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"classificationIdentity\", classification.getClassificationIdentity());\n            wm.putString(\"name\", classification.getName());\n            wm.putDouble(\"possibility\", classification.getPossibility());\n            wa.pushMap(wm);\n        }\n        classificationResult.putArray(\"result\", wa);\n        return classificationResult;\n    }\n\n    /**\n     * Converts result to WritableMap\n     *\n     * @param result sparse array result of classification\n     * @return WritableMap\n     */\n    public WritableMap getImageClassificationResult(SparseArray<MLImageClassification> result) {\n        return getImageClassificationResult(HMSUtils.getInstance().convertSparseArrayToList(result));\n    }\n\n    /**\n     * Convert object recognition list result to WritableMap\n     *\n     * @param list object recognition list\n     * @return WritableMap\n     */\n    public WritableMap getObjectResult(List<MLObject> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLObject object : list) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putInt(\"tracingIdentity\",\n                object.getTracingIdentity() == null ? 0 : object.getTracingIdentity());\n            writableMap.putInt(\"typeIdentity\", object.getTypeIdentity());\n            writableMap.putDouble(\"typePossibility\",\n                object.getTypePossibility() == null ? 0.0 : object.getTypePossibility());\n            writableMap.putMap(\"border\", getBorders(object.getBorder()));\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Convert object recognition array result to WritableMap\n     *\n     * @param result sparse array result\n     * @return WritableMap\n     */\n    public WritableMap getObjectResult(SparseArray<MLObject> result) {\n        return getObjectResult(HMSUtils.getInstance().convertSparseArrayToList(result));\n    }\n\n    /**\n     * Converts coordinates to WritableArray\n     *\n     * @param coordinates list of coordinates\n     * @return WritableArray\n     */\n    private WritableArray getCoordinates(List<MLCoordinate> coordinates) {\n        WritableArray wa = Arguments.createArray();\n        for (MLCoordinate coordinate : coordinates) {\n            WritableMap wm = Arguments.createMap();\n            wm.putDouble(\"latitude\", coordinate.getLat());\n            wm.putDouble(\"longitude\", coordinate.getLng());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Convert landmark recognition results to WritableArray\n     *\n     * @param landmarkResults landmark recognition results\n     * @return WritableMap\n     */\n    public WritableMap getLandmarkDetectionResults(List<MLRemoteLandmark> landmarkResults) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLRemoteLandmark landMark : landmarkResults) {\n            WritableMap temp = Arguments.createMap();\n            temp.putString(\"landMark\", landMark.getLandmark());\n            temp.putDouble(\"possibility\", landMark.getPossibility());\n            temp.putArray(\"coordinates\", getCoordinates(landMark.getPositionInfos()));\n            temp.putMap(\"border\", getBorders(landMark.getBorder()));\n            wa.pushMap(temp);\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation image segmentation results\n     * @param context app contextl\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public WritableMap getImageSegmentationResult(ReactApplicationContext context,\n        SparseArray<MLImageSegmentation> imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < imageSegmentation.size(); i++) {\n            wa.pushMap(getImageSegmentationResult(context, imageSegmentation.get(i), isBodySeg));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation image segmentation results\n     * @param context app context\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public WritableMap getImageSegmentationAsyncResult(ReactApplicationContext context,\n        MLImageSegmentation imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getImageSegmentationResult(context, imageSegmentation, isBodySeg));\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation result of segmentation\n     * @param context app context\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    private WritableMap getImageSegmentationResult(ReactApplicationContext context,\n        MLImageSegmentation imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = Arguments.createMap();\n\n        Bitmap grayScale = null;\n        if (!isBodySeg) {\n            grayScale = createFromMask(imageSegmentation);\n        } else {\n            wm.putString(\"foreground\",\n                HMSUtils.getInstance().saveImageAndGetUri(context, imageSegmentation.getForeground()));\n            grayScale = imageSegmentation.getGrayscale();\n        }\n        wm.putString(\"grayscale\", HMSUtils.getInstance().saveImageAndGetUri(context, grayScale));\n        wm.putArray(\"masks\", masksToWA(imageSegmentation.getMasks()));\n\n        return wm;\n    }\n\n    private Bitmap createFromMask(MLImageSegmentation imageSegmentation) {\n        byte[] masks = imageSegmentation.getMasks();\n        int[] results = new int[masks.length];\n        for (int i = 0; i < masks.length; i++) {\n            if (masks[i] == 1) {\n                results[i] = Color.WHITE;\n            } else if (masks[i] == 2) {\n                results[i] = Color.BLUE;\n            } else if (masks[i] == 3) {\n                results[i] = Color.DKGRAY;\n            } else if (masks[i] == 4) {\n                results[i] = Color.YELLOW;\n            } else if (masks[i] == 5) {\n                results[i] = Color.LTGRAY;\n            } else if (masks[i] == 6) {\n                results[i] = Color.CYAN;\n            } else if (masks[i] == 7) {\n                results[i] = Color.RED;\n            } else if (masks[i] == 8) {\n                results[i] = Color.GRAY;\n            } else if (masks[i] == 9) {\n                results[i] = Color.MAGENTA;\n            } else if (masks[i] == 10) {\n                results[i] = Color.GREEN;\n            } else {\n                results[i] = Color.BLACK;\n            }\n        }\n\n        return Bitmap.createBitmap(results, 0, imageSegmentation.getOriginal().getWidth(),\n            imageSegmentation.getOriginal().getWidth(), imageSegmentation.getOriginal().getHeight(),\n            Bitmap.Config.ARGB_8888);\n    }\n\n    private WritableArray masksToWA(byte[] masks) {\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < masks.length; i++) {\n            wa.pushInt(masks[i]);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts product vision search result to WritableMap\n     *\n     * @param resultList product vision search result list\n     * @return WritableMap\n     */\n    public WritableMap getProductVisionSearchResult(List<MLProductVisionSearch> resultList) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLProductVisionSearch result : resultList) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"type\", result.getType());\n            writableMap.putArray(\"products\", productListArray(result.getProductList()));\n            writableMap.putMap(\"border\", getBorders(result.getBorder()));\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts product list to WritableArray\n     *\n     * @param products product list\n     * @return WritableArray\n     */\n    private WritableArray productListArray(List<MLVisionSearchProduct> products) {\n        WritableArray array = Arguments.createArray();\n        for (MLVisionSearchProduct result : products) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"productId\", result.getProductId());\n            writableMap.putString(\"productUrl\", result.getProductUrl());\n            writableMap.putString(\"customContent\", result.getCustomContent());\n            writableMap.putArray(\"images\", productImages(result.getImageList()));\n            writableMap.putDouble(\"possibility\", result.getPossibility());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Converts product iamges to WritableArray\n     *\n     * @param images product images\n     * @return WritableArray\n     */\n    private WritableArray productImages(List<MLVisionSearchProductImage> images) {\n        WritableArray array = Arguments.createArray();\n        for (MLVisionSearchProductImage image : images) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"imageId\", image.getImageId());\n            writableMap.putString(\"productId\", image.getProductId());\n            writableMap.putDouble(\"possibility\", image.getPossibility());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Converts image super resolution results to WritableArray\n     *\n     * @param context Context object\n     * @param results image super resolution results\n     * @return WritableArray\n     */\n    public WritableMap getMLImageSuperResolutionResults(ReactApplicationContext context,\n        SparseArray<MLImageSuperResolutionResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushString(HMSUtils.getInstance().saveImageAndGetUri(context, results.get(i).getBitmap()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection results to WritableMap\n     *\n     * @param results document skew detect results\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewDetectResults(SparseArray<MLDocumentSkewDetectResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushMap(getDocumentSkewDetectResult(results.get(i)));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection result to WritableMap\n     *\n     * @param result document skew detect result\n     * @return WritableMap\n     */\n    private WritableMap getDocumentSkewDetectResult(MLDocumentSkewDetectResult result) {\n        WritableMap wm = Arguments.createMap();\n        wm.putMap(\"leftBottomPosition\",\n            result.getLeftBottomPosition() == null ? Arguments.createMap() : getPoint(result.getLeftBottomPosition()));\n        wm.putMap(\"leftTopPosition\",\n            result.getLeftTopPosition() == null ? Arguments.createMap() : getPoint(result.getLeftTopPosition()));\n        wm.putMap(\"rightBottomPosition\", result.getRightBottomPosition() == null\n            ? Arguments.createMap()\n            : getPoint(result.getRightBottomPosition()));\n        wm.putMap(\"rightTopPosition\",\n            result.getRightTopPosition() == null ? Arguments.createMap() : getPoint(result.getRightTopPosition()));\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection result to WritableMap\n     *\n     * @param result document skew detect result\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewDetectAsyncResult(MLDocumentSkewDetectResult result) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getDocumentSkewDetectResult(result));\n        return wm;\n    }\n\n    /**\n     * Converts document skew correction results to WritableMap\n     *\n     * @param context Context object\n     * @param results Document skew correction results\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewCorrectionResult(ReactApplicationContext context,\n        SparseArray<MLDocumentSkewCorrectionResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushString(HMSUtils.getInstance().saveImageAndGetUri(context, results.get(i).getCorrected()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts text image super resolution result list WritableMap\n     *\n     * @param context app context\n     * @param textImageSuperResolution text image super resolution result list\n     * @return WritableMap\n     */\n    public WritableMap getTextImageSuperResolutionResult(ReactApplicationContext context,\n        SparseArray<MLTextImageSuperResolution> textImageSuperResolution) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < textImageSuperResolution.size(); i++) {\n            wa.pushString(\n                HMSUtils.getInstance().saveImageAndGetUri(context, textImageSuperResolution.get(i).getBitmap()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts sparse array Scene detection result to WritableMap\n     *\n     * @param sceneDetection scene detection result array\n     * @return WritableMap\n     */\n    public WritableMap getSceneDetectionResultSync(SparseArray<MLSceneDetection> sceneDetection) {\n        return getSceneDetectionResultAsync(HMSUtils.getInstance().convertSparseArrayToList(sceneDetection));\n    }\n\n    /**\n     * Converts sparse array Scene detection result to WritableArray\n     *\n     * @param sceneDetection scene detection result array\n     * @return WritableArray\n     */\n    public WritableMap getSceneDetectionResultAsync(List<MLSceneDetection> sceneDetection) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSceneDetectionResult(sceneDetection));\n        return wm;\n    }\n\n    /**\n     * Converts Scene detection result list to WritableArray\n     *\n     * @param results scene detection result list\n     * @return WritableArray\n     */\n    private WritableArray getSceneDetectionResult(List<MLSceneDetection> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLSceneDetection result : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"result\", result.getResult());\n            wm.putDouble(\"confidence\", result.getConfidence());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Face recognition result creator\n     *\n     * @param faces results\n     * @return WritableMap\n     */\n    public WritableMap getFaceResult(List<MLFace> faces) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getFaceAnalyzerResult(faces));\n        return wm;\n    }\n\n    /**\n     * Converts face analyze results to WritableArray\n     *\n     * @param faces analyze results\n     * @return WritableArray\n     */\n    private WritableArray getFaceAnalyzerResult(List<MLFace> faces) {\n        WritableArray array = Arguments.createArray();\n        for (MLFace face : faces) {\n            WritableMap map = Arguments.createMap();\n            map.putArray(\"allPoints\", getAllPoints(face.getAllPoints()));\n            map.putMap(\"border\", getBorders(face.getBorder()));\n            map.putMap(\"coordinatePoints\", getCoordinatePoints(face.getCoordinatePoint()));\n            map.putMap(\"emotions\", getEmotions(face.getEmotions()));\n            map.putArray(\"faceKeyPointList\", getFaceKeyPointList(face.getFaceKeyPoints()));\n            map.putArray(\"faceShapeList\", getShapeList(face.getFaceShapeList()));\n            map.putMap(\"features\", getFeatures(face.getFeatures()));\n            map.putDouble(\"height\", face.getHeight());\n            map.putDouble(\"width\", face.getWidth());\n            map.putDouble(\"rotationAngleX\", face.getRotationAngleX());\n            map.putDouble(\"rotationAngleY\", face.getRotationAngleY());\n            map.putDouble(\"rotationAngleZ\", face.getRotationAngleZ());\n            map.putInt(\"tracingIdentity\", face.getTracingIdentity());\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Converts face features to WritableMap\n     *\n     * @param feature face features\n     * @return WritableMap\n     */\n    private WritableMap getFeatures(MLFaceFeature feature) {\n        WritableMap map = Arguments.createMap();\n        map.putInt(\"age\", feature.getAge());\n        map.putDouble(\"hatProbability\", feature.getHatProbability());\n        map.putDouble(\"leftEyeOpenProbability\", feature.getLeftEyeOpenProbability());\n        map.putDouble(\"rightEyeOpenProbability\", feature.getRightEyeOpenProbability());\n        map.putDouble(\"moustacheProbability\", feature.getMoustacheProbability());\n        map.putDouble(\"sexProbability\", feature.getSexProbability());\n        map.putDouble(\"sunGlassProbability\", feature.getSunGlassProbability());\n        return map;\n    }\n\n    /**\n     * Converts face positions to WritableArray\n     *\n     * @param positions positions\n     * @return WritableArray\n     */\n    private WritableArray getAllPoints(List<MLPosition> positions) {\n        WritableArray array = Arguments.createArray();\n        for (MLPosition position : positions) {\n            array.pushMap(getPosition(position));\n        }\n        return array;\n    }\n\n    /**\n     * Converts face coordinate points to WritableMap\n     *\n     * @param pointF coordinate point\n     * @return WritableMap\n     */\n    private WritableMap getCoordinatePoints(PointF pointF) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"length\", pointF.length());\n        map.putDouble(\"x\", pointF.x);\n        map.putDouble(\"y\", pointF.y);\n        return map;\n    }\n\n    /**\n     * Converts face emotions to WritableMap\n     *\n     * @param emotion emotions\n     * @return WritableMap\n     */\n    private WritableMap getEmotions(MLFaceEmotion emotion) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"angryProbability\", emotion.getAngryProbability());\n        map.putDouble(\"disgustProbability\", emotion.getDisgustProbability());\n        map.putDouble(\"fearProbability\", emotion.getFearProbability());\n        map.putDouble(\"neutralProbability\", emotion.getNeutralProbability());\n        map.putDouble(\"sadProbability\", emotion.getSadProbability());\n        map.putDouble(\"smilingProbability\", emotion.getSmilingProbability());\n        map.putDouble(\"surpriseProbability\", emotion.getSurpriseProbability());\n        return map;\n    }\n\n    /**\n     * Converts face shapes to WritableArray\n     *\n     * @param shapes shape list\n     * @return WritableArray\n     */\n    private WritableArray getShapeList(List<MLFaceShape> shapes) {\n        WritableArray array = Arguments.createArray();\n        for (MLFaceShape shape : shapes) {\n            WritableMap map = Arguments.createMap();\n            map.putInt(\"faceShapeType\", shape.getFaceShapeType());\n            map.putArray(\"points\", getAllPoints(shape.getPoints()));\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Convert face key points to WritableArray\n     *\n     * @param points key points\n     * @return WritableArray\n     */\n    private WritableArray getFaceKeyPointList(List<MLFaceKeyPoint> points) {\n        WritableArray array = Arguments.createArray();\n        for (MLFaceKeyPoint point : points) {\n            WritableMap map = Arguments.createMap();\n            map.putMap(\"points\", getPosition(point.getPoint()));\n            map.putInt(\"type\", point.getType());\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Converts positions to WritableMap\n     *\n     * @param position positions\n     * @return WritableMap\n     */\n    private WritableMap getPosition(MLPosition position) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"Y\", position.getY() == null ? 0.0 : position.getY());\n        map.putDouble(\"Z\", position.getZ() == null ? 0.0 : position.getZ());\n        map.putDouble(\"X\", position.getX() == null ? 0.0 : position.getX());\n        return map;\n    }\n\n    /**\n     * 3D face recognition results\n     *\n     * @param faces results from analyzer\n     * @return WritableMap\n     */\n    public WritableMap get3DFaceResult(List<ML3DFace> faces) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", get3DFaceResults(faces));\n        return wm;\n    }\n\n    /**\n     * 3D face recognition result creator\n     *\n     * @param faces result from analyzer\n     * @return WritableArray\n     */\n    private WritableArray get3DFaceResults(List<ML3DFace> faces) {\n        WritableArray wa = Arguments.createArray();\n        for (ML3DFace face : faces) {\n            WritableMap wm = Arguments.createMap();\n            wm.putArray(\"allPoints\", getAllPoints(face.get3DAllVertexs()));\n            wm.putDouble(\"faceEulerY\", face.get3DFaceEulerY());\n            wm.putDouble(\"faceEulerX\", face.get3DFaceEulerX());\n            wm.putDouble(\"faceEulerZ\", face.get3DFaceEulerZ());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts skeleton results to WritableMap\n     *\n     * @param results skeleton recognition results\n     * @return WritableMap\n     */\n    public WritableMap getSkeletonSyncResults(SparseArray<MLSkeleton> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSkeletonResults(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts skeleton results to WritableMap\n     *\n     * @param results skeleton recognition results\n     * @return WritableMap\n     */\n    public WritableMap getSkeletonAsyncResults(List<MLSkeleton> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSkeletonResults(results));\n        return wm;\n    }\n\n    /**\n     * Converts skeleton results to WritableArray\n     *\n     * @param results skeleton recognition results\n     * @return WritableArray\n     */\n    private WritableArray getSkeletonResults(List<MLSkeleton> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLSkeleton skeleton : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putArray(\"joints\", getJoints(skeleton.getJoints()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts joints to WritableArray\n     *\n     * @param results joints\n     * @return WritableArray\n     */\n    private WritableArray getJoints(List<MLJoint> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLJoint joint : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putInt(\"type\", joint.getType());\n            wm.putDouble(\"pointX\", joint.getPointX());\n            wm.putDouble(\"pointY\", joint.getPointY());\n            wm.putDouble(\"score\", joint.getScore());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts hand key point results to WritableMap\n     *\n     * @param results hand key point results\n     * @return WritableMap\n     */\n    public WritableMap getHandKeyPointResults(SparseArray<MLHandKeypoints> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getHandKeyPoints(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts hand key point results to WritableMap\n     *\n     * @param results hand key point results\n     * @return WritableMap\n     */\n    public WritableMap getHandKeyPointResults(List<MLHandKeypoints> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getHandKeyPoints(results));\n        return wm;\n    }\n\n    /**\n     * Converts gesture results to WritableMap\n     *\n     * @param results gesture results\n     * @return WritableMap\n     */\n    public WritableMap getGestureResults(SparseArray<MLGesture> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getGesture(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts gesture results to WritableMap\n     *\n     * @param results gesture results\n     * @return WritableMap\n     */\n    public WritableMap getGestureResults(List<MLGesture> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getGesture(results));\n        return wm;\n    }\n\n    /**\n     * Get Gesture\n     *\n     * @param gestures Gesture result\n     * @return WritableArray\n     */\n    private WritableArray getGesture(List<MLGesture> gestures) {\n        WritableArray wa = Arguments.createArray();\n        for (MLGesture gesture : gestures) {\n            WritableMap temp = Arguments.createMap();\n            temp.putInt(\"category\", gesture.getCategory());\n            temp.putDouble(\"score\", gesture.getScore());\n            temp.putMap(\"border\", getBorders(gesture.getRect()));\n            wa.pushMap(temp);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationCompareResults(SparseArray<MLFaceVerificationResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationCompare(HMSUtils.getInstance().convertSparseArrayToList(results), cost));\n        return wm;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationCompareResults(List<MLFaceVerificationResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationCompare(results, cost));\n        return wm;\n    }\n\n    /**\n     * Get Face Verification\n     *\n     * @param results Face verification result\n     * @param cost Face verification cost\n     * @return WritableMap\n     */\n    private WritableMap getFaceVerificationCompare(List<MLFaceVerificationResult> results, int cost) {\n        WritableMap res = Arguments.createMap();\n        WritableArray arry = Arguments.createArray();\n\n        res.putInt(\"cost\", cost);\n        res.putBoolean(\"success\", true);\n        for (MLFaceVerificationResult template : results) {\n            WritableMap item = Arguments.createMap();\n\n            Rect location = template.getFaceInfo().getFaceRect();\n            int id = template.getTemplateId();\n            float similarity = template.getSimilarity();\n            item.putString(\"face\", location.toString());\n            item.putInt(\"id\", id);\n            item.putDouble(\"similarity\", similarity);\n\n            arry.pushMap(item);\n        }\n\n        res.putArray(\"faces\", arry);\n        return res;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationTemplateResult(List<MLFaceTemplateResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationTemplate(results, cost));\n        return wm;\n    }\n\n    private WritableMap getFaceVerificationTemplate(List<MLFaceTemplateResult> results, int cost) {\n        WritableMap res = Arguments.createMap();\n        WritableArray wa = Arguments.createArray();\n        res.putInt(\"cost\", cost);\n        if (results.isEmpty()) {\n            res.putBoolean(\"success\", false);\n        } else {\n            res.putBoolean(\"success\", true);\n        }\n        for (MLFaceTemplateResult result : results) {\n            WritableMap temp = Arguments.createMap();\n            int id = result.getTemplateId();\n            Rect location = result.getFaceInfo().getFaceRect();\n            temp.putString(\"face\", location.toString());\n            temp.putInt(\"id\", id);\n            wa.pushMap(temp);\n        }\n        res.putArray(\"faces\", wa);\n        return res;\n    }\n\n    /**\n     * Converts vietnam card result to WritableMap\n     *\n     * @param idCardResult vietnam card result\n     * @return WritableMap\n     */\n    public WritableMap getVNFormatIdCardResult(MLVnIcrCaptureResult idCardResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n\n        res.putString(\"name\", idCardResult.getName());\n        res.putString(\"sex\", idCardResult.getSex());\n        res.putString(\"birthday\", idCardResult.getBirthday());\n        res.putString(\"idNum\", idCardResult.getIdNum());\n\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    public <T> Map<String, Object> toMap(T obj) {\n        return gson.fromJson(gson.toJson(obj), Map.class);\n    }\n\n    public WritableMap getCompositeResult(Object obj) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        Map<String, Object> res = toMap(obj);\n        Arguments.makeNativeMap(res);\n        wm.putMap(\"result\", Arguments.makeNativeMap(res));\n        return wm;\n    }\n\n    /**\n     * Converts id card result to WritableMap\n     *\n     * @param idCardResult id card result\n     * @param isFront is front side id card\n     * @return WritableMap\n     */\n    public WritableMap getFormatIdCardResult(MLCnIcrCaptureResult idCardResult, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        if (isFront) {\n            res.putString(\"name\", idCardResult.name);\n            res.putString(\"sex\", idCardResult.sex);\n            res.putString(\"idNum\", idCardResult.idNum);\n            res.putString(\"birtday\", idCardResult.birthday);\n            res.putString(\"nation\", idCardResult.nation);\n            res.putString(\"address\", idCardResult.address);\n        } else {\n            res.putString(\"validDate\", idCardResult.validDate);\n            res.putString(\"authority\", idCardResult.authority);\n        }\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    public WritableMap getICRResult(MLIdCard idCardResult, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        if (isFront) {\n            res.putString(\"name\", idCardResult.name);\n            res.putString(\"sex\", idCardResult.sex);\n            res.putString(\"idNum\", idCardResult.idNum);\n            res.putString(\"birtday\", idCardResult.birthday);\n            res.putString(\"nation\", idCardResult.nation);\n            res.putString(\"address\", idCardResult.address);\n        } else {\n            res.putString(\"validDate\", idCardResult.validDate);\n            res.putString(\"authority\", idCardResult.authority);\n        }\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    /**\n     * converts image result to WritableMap\n     *\n     * @param string result\n     * @param isFront is front side id card\n     * @return WritableMap\n     */\n    public WritableMap getIDCardImage(String string, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        res.putString(\"image\", TextUtils.isEmpty(string) ? \"\" : string);\n        res.putBoolean(\"isFront\", isFront);\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    /**\n     * Converts list of MLHandKeypoints to WritableArray\n     *\n     * @param keypoints result of analyzer\n     * @return WritableArray\n     */\n    private WritableArray getHandKeyPoints(List<MLHandKeypoints> keypoints) {\n        WritableArray wa = Arguments.createArray();\n        for (MLHandKeypoints keyPoints : keypoints) {\n            WritableMap temp = Arguments.createMap();\n            temp.putArray(\"handKeyPoints\", getHandKeyPoint(keyPoints.getHandKeypoints()));\n            temp.putDouble(\"score\", keyPoints.getScore());\n            temp.putMap(\"border\", getBorders(keyPoints.getRect()));\n            wa.pushMap(temp);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts hand key points to WritableArray\n     *\n     * @param keyPoints hand key points\n     * @return WritableArray\n     */\n    private WritableArray getHandKeyPoint(List<MLHandKeypoint> keyPoints) {\n        WritableArray wa = Arguments.createArray();\n        for (MLHandKeypoint keyPoint : keyPoints) {\n            WritableMap wm = Arguments.createMap();\n            wm.putInt(\"type\", keyPoint.getType());\n            wm.putDouble(\"pointX\", keyPoint.getPointX());\n            wm.putDouble(\"pointY\", keyPoint.getPointY());\n            wm.putDouble(\"score\", keyPoint.getScore());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param integer method result\n     * @return WritableMap\n     */\n    public WritableMap integerResult(int integer) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"result\", integer);\n        return wm;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param set method result\n     * @return WritableMap\n     */\n    public WritableMap stringSetResult(Set<String> set) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        if (set != null) {\n            for (String element : set) {\n                wa.pushString(element);\n            }\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param string result\n     * @return WritableMap\n     */\n    public WritableMap getStringResult(String string) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(string) ? \"\" : string);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param is result\n     * @return WritableMap\n     */\n    public WritableMap getBooleanResult(boolean is) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putBoolean(\"result\", is);\n        return wm;\n    }\n\n    /**\n     * converts float result to WritableMap\n     *\n     * @param aFloat method result\n     * @return WritableMap\n     */\n    public WritableMap floatResult(Float aFloat) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putDouble(\"result\", aFloat);\n        return wm;\n    }\n\n    /**\n     * Converts string list to result\n     *\n     * @param list data list\n     * @return WritableMap\n     */\n    public WritableMap stringListResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(list));\n        return wm;\n    }\n\n    /**\n     * Converts display dimension to result\n     *\n     * @param displayDimension preview size\n     * @return WritableMap\n     */\n    public WritableMap displayDimensionResult(Size displayDimension) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"width\", displayDimension.getWidth());\n        wm.putInt(\"height\", displayDimension.getHeight());\n        return wm;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/fragments/HMSProductFragment.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.fragments;\n\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLProductVisionSearch;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProduct;\nimport com.huawei.hms.rn.ml.R;\nimport com.huawei.hms.rn.ml.helpers.adapters.HMSBottomSheetAdapter;\nimport com.huawei.hms.rn.ml.helpers.constants.HMSConstants;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.models.HMSProductModel;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSLogger;\nimport com.huawei.hms.rn.ml.helpers.views.HMSBottomSheetGridView;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class HMSProductFragment extends MLProductVisionSearchCapture.AbstractProductFragment<HMSProductModel> {\n    private static final String TAG = HMSProductFragment.class.getSimpleName();\n\n    private List<HMSProductModel> productList = new ArrayList<>();\n\n    private View productView;\n\n    private HMSBottomSheetGridView gridView;\n\n    private HMSBottomSheetAdapter bottomSheetAdapter;\n\n    private ReactApplicationContext reactApplicationContext;\n\n    public HMSProductFragment(ReactApplicationContext context) {\n        reactApplicationContext = context;\n    }\n\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n\n    @Nullable\n    @Override\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,\n        @Nullable Bundle savedInstanceState) {\n        productView = inflater.inflate(R.layout.hms_product_fragment, container, false);\n        gridView = productView.findViewById(R.id.hms_bottom_sheet_grid_view);\n        gridView.setNumColumns(2);\n        bottomSheetAdapter = new HMSBottomSheetAdapter(getContext(), productList);\n        gridView.setAdapter(bottomSheetAdapter);\n        return productView;\n    }\n\n    @Override\n    public List<HMSProductModel> getProductList(List<MLProductVisionSearch> list) {\n        return obtainProducts(list);\n    }\n\n    @Override\n    public void onResult(List<HMSProductModel> list) {\n        if (null == list || list.isEmpty()) {\n            Log.i(TAG, \"onResult list is empty\");\n            return;\n        }\n        Log.i(TAG, list.toString());\n        productList.clear();\n        productList.addAll(list);\n        bottomSheetAdapter.notifyDataSetChanged();\n    }\n\n    @Override\n    public boolean onError(Exception e) {\n        return false;\n    }\n\n    private List<HMSProductModel> obtainProducts(List<MLProductVisionSearch> list) {\n        List<HMSProductModel> productBeans = new ArrayList<>();\n        for (MLProductVisionSearch mlProductVisionSearch : list) {\n            for (MLVisionSearchProduct product : mlProductVisionSearch.getProductList()) {\n                HMSProductModel productBean = new HMSProductModel();\n                productBean.setImgUrl(product.getImageList().get(0).getImageId());\n                productBean.setName(product.getProductId());\n                productBeans.add(productBean);\n            }\n        }\n        sendEvent(HMSResultCreator.getInstance().getProductVisionSearchResult(list));\n        return productBeans;\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param params WritableMap object that contains related keys and values\n     */\n    private void sendEvent(WritableMap params) {\n        HMSLogger.getInstance(reactApplicationContext).sendSingleEvent(\"onResult\");\n        reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n            .emit(HMSConstants.PRODUCT_ON_RESULT, params);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/models/HMSProductModel.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.models;\n\npublic class HMSProductModel {\n    private String name;\n\n    private String imgUrl;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getImgUrl() {\n        return imgUrl;\n    }\n\n    public void setImgUrl(String imgUrl) {\n        this.imgUrl = imgUrl;\n    }\n\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMS2DFaceAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_2D_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_2D_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.face.MLFace;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMS2DFaceAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLFace> {\n\n    public HMS2DFaceAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(FACE_2D_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLFace> result) {\n        sendEvent(FACE_2D_TRANSACTOR_ON_RESULT, \"transactResult\", HMSResultCreator.getInstance()\n            .getFaceResult(HMSUtils.getInstance().convertSparseArrayToList(result.getAnalyseList())));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMS3DFaceAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_3D_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FACE_3D_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFace;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMS3DFaceAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<ML3DFace> {\n\n    public HMS3DFaceAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(FACE_3D_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<ML3DFace> result) {\n        sendEvent(FACE_3D_TRANSACTOR_ON_RESULT, \"transactResult\", HMSResultCreator.getInstance()\n            .get3DFaceResult(HMSUtils.getInstance().convertSparseArrayToList(result.getAnalyseList())));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSBaseTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport com.huawei.hms.rn.ml.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\npublic class HMSBaseTransactor {\n    private ReactApplicationContext applicationContext;\n\n    private HMSLogger logger;\n\n    HMSBaseTransactor(ReactApplicationContext context) {\n        applicationContext = context;\n        logger = HMSLogger.getInstance(applicationContext);\n    }\n\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSClassificationAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.CLASSIFICATION_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.CLASSIFICATION_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSClassificationAnalyzerTransactor extends HMSBaseTransactor\n    implements MLAnalyzer.MLTransactor<MLImageClassification> {\n\n    public HMSClassificationAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(CLASSIFICATION_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLImageClassification> result) {\n        sendEvent(CLASSIFICATION_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getImageClassificationResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSGestureTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GESTURE_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GESTURE_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSGestureTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLGesture> {\n\n    public HMSGestureTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(GESTURE_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLGesture> result) {\n        sendEvent(GESTURE_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getGestureResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSHandKeypointTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.HAND_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.HAND_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoints;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSHandKeypointTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLHandKeypoints> {\n\n    public HMSHandKeypointTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(HAND_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLHandKeypoints> result) {\n        sendEvent(HAND_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getHandKeyPointResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSObjectAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.OBJECT_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.OBJECT_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSObjectAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLObject> {\n\n    public HMSObjectAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(OBJECT_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLObject> result) {\n        sendEvent(OBJECT_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getObjectResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSSceneDetectionAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SCENE_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SCENE_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetection;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSSceneDetectionAnalyzerTransactor extends HMSBaseTransactor\n    implements MLAnalyzer.MLTransactor<MLSceneDetection> {\n\n    public HMSSceneDetectionAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(SCENE_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLSceneDetection> result) {\n        sendEvent(SCENE_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getSceneDetectionResultSync(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSSkeletonAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SKELETON_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SKELETON_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSSkeletonAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLSkeleton> {\n\n    public HMSSkeletonAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(SKELETON_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLSkeleton> result) {\n        sendEvent(SKELETON_TRANSACTOR_ON_RESULT, \"transactOnResult\",\n            HMSResultCreator.getInstance().getSkeletonSyncResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/transactors/HMSTextAnalyzerTransactor.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.transactors;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TEXT_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TEXT_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSTextAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLText.Block> {\n\n    public HMSTextAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(TEXT_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLText.Block> result) {\n        sendEvent(TEXT_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getTextRecognitionResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/utils/HMSBackgroundTasks.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.utils;\n\nimport android.graphics.Bitmap;\nimport android.util.SparseArray;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hmf.tasks.Tasks;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionResult;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentation;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolution;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\n\npublic final class HMSBackgroundTasks {\n    private static volatile HMSBackgroundTasks instance;\n\n    public static HMSBackgroundTasks getInstance() {\n        if (instance == null) {\n            synchronized (HMSBackgroundTasks.class) {\n                if (instance == null) {\n                    instance = new HMSBackgroundTasks();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Handles single image saving task\n     *\n     * @param context app context\n     * @param image image to be saved\n     * @return WritableMap\n     */\n    public Task<String> saveImageAndGetUri(ReactApplicationContext context, Bitmap image) {\n        return Tasks.callInBackground(() -> HMSUtils.getInstance().saveImageAndGetUri(context, image));\n    }\n\n    /**\n     * Handles saving segmentation images task\n     *\n     * @param context app context\n     * @param segmentation segmentation result\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSegmentationImages(ReactApplicationContext context,\n        MLImageSegmentation segmentation, boolean isBodySeg) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getImageSegmentationAsyncResult(context, segmentation, isBodySeg));\n    }\n\n    /**\n     * Handles saving segmentation images task\n     *\n     * @param context app context\n     * @param segmentation segmentation result\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSegmentationImages(ReactApplicationContext context,\n        SparseArray<MLImageSegmentation> segmentation, boolean isBodySeg) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getImageSegmentationResult(context, segmentation, isBodySeg));\n    }\n\n    /**\n     * Handles saving super resolution images task\n     *\n     * @param context app context\n     * @param result analyze method  result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSuperResolutionImages(ReactApplicationContext context,\n        SparseArray<MLImageSuperResolutionResult> result) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getMLImageSuperResolutionResults(context, result));\n    }\n\n    /**\n     * Handles saving document skew correction images task\n     *\n     * @param context app context\n     * @param results correction result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveDscImages(ReactApplicationContext context,\n        SparseArray<MLDocumentSkewCorrectionResult> results) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getDocumentSkewCorrectionResult(context, results));\n    }\n\n    /**\n     * Handles saving text image super resolution images task\n     *\n     * @param context app context\n     * @param results super resolution result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveTextImageSuperResolutionImages(ReactApplicationContext context,\n        SparseArray<MLTextImageSuperResolution> results) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getTextImageSuperResolutionResult(context, results));\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/utils/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"ML\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.5.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/utils/HMSUtils.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Point;\nimport android.provider.MediaStore;\nimport android.util.SparseArray;\nimport android.view.SurfaceHolder;\n\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayOutputStream;\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\npublic final class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    private SurfaceHolder surfaceViewHolder;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            synchronized (HMSUtils.class) {\n                if (instance == null) {\n                    instance = new HMSUtils();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts JSONObject to WritableMap\n     *\n     * @param jsonObject JSONObject\n     * @return WritableMap\n     * @throws JSONException jsonObject.get throws it\n     */\n    public WritableMap convertJsonToWritableMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = Arguments.createMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts JSONArray to WritableArray\n     *\n     * @param jsonArray JSONArray\n     * @return WritableArray\n     * @throws JSONException jsonObject.get throws it\n     */\n    private WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n\n        return array;\n    }\n\n    /**\n     * Converts ReadableArray to Point list\n     *\n     * @param ra readable array\n     * @return point list\n     */\n    public List<Point> convertRaToPointList(ReadableArray ra) {\n        List<Point> pointList = new ArrayList<>();\n        for (int i = 0; i < ra.size(); i++) {\n            pointList.add(new Point(ra.getMap(i).getInt(\"x\"), ra.getMap(i).getInt(\"y\")));\n        }\n        return pointList;\n    }\n\n    /**\n     * Converts readable array to skeleton list\n     *\n     * @param ra readable array\n     * @return skeleton list\n     */\n    public List<MLSkeleton> convertRaToSkeletonList(ReadableArray ra) {\n        List<MLSkeleton> skeletonList = new ArrayList<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.Map) {\n                skeletonList.add(convertRaToSkeleton(ra.getMap(i)));\n            }\n        }\n        return skeletonList;\n    }\n\n    /**\n     * Converts readable map to MLSkeleton\n     *\n     * @param rm readable map\n     * @return MLSkeleton\n     */\n    private MLSkeleton convertRaToSkeleton(ReadableMap rm) {\n        List<MLJoint> mlJoints = new ArrayList<>();\n        if (hasValidKey(rm, \"joints\", ReadableType.Array)) {\n            ReadableArray jointsArray = rm.getArray(\"joints\");\n            for (int i = 0; i < jointsArray.size(); i++) {\n                if (jointsArray.getType(i) == ReadableType.Map) {\n                    ReadableMap map = jointsArray.getMap(i);\n                    float pointX = HMSUtils.getInstance().hasValidKey(map, \"pointX\", ReadableType.Number)\n                        ? (float) map.getDouble(\"pointX\")\n                        : 0;\n                    float pointY = HMSUtils.getInstance().hasValidKey(map, \"pointY\", ReadableType.Number)\n                        ? (float) map.getDouble(\"pointY\")\n                        : 0;\n                    int type = HMSUtils.getInstance().hasValidKey(map, \"type\", ReadableType.Number)\n                        ? map.getInt(\"type\")\n                        : -1;\n                    float score = HMSUtils.getInstance().hasValidKey(map, \"score\", ReadableType.Number)\n                        ? (float) map.getDouble(\"score\")\n                        : 0;\n                    mlJoints.add(new MLJoint(pointX, pointY, type, score));\n                }\n            }\n        }\n        return new MLSkeleton(mlJoints);\n    }\n\n    /**\n     * Converts ReadableArray to String List\n     *\n     * @param readableArray array\n     * @return List\n     */\n    public List<String> readableArrayIntoStringList(ReadableArray readableArray) {\n        if (readableArray.size() == 0) {\n            return Collections.emptyList();\n        }\n        List<String> arrList = new ArrayList<>();\n        for (int i = 0; i < readableArray.size(); i++) {\n            arrList.add(readableArray.getString(i));\n        }\n        return arrList;\n    }\n\n    /**\n     * Converts string list to WritableArray\n     *\n     * @param list list of strings\n     * @return WritableArray\n     */\n    public WritableArray convertStringListIntoWa(List<String> list) {\n        WritableArray writableArray = Arguments.createArray();\n        for (String value : list) {\n            writableArray.pushString(value);\n        }\n        return writableArray;\n    }\n\n    /**\n     * Checks if ReadableMap has valid key\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @param type key's type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Checks boolean key is valid or not and if valid then returns its value\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @return true or false\n     */\n    public boolean boolKeyCheck(ReadableMap readableMap, String key) {\n        if (!hasValidKey(readableMap, key, ReadableType.Boolean)) {\n            return false;\n        }\n        return readableMap.getBoolean(key);\n    }\n\n    /**\n     * Converts byte array to WritableArray\n     *\n     * @param ba byte array\n     * @return WritableArray\n     */\n    public WritableArray convertByteArrToWa(byte[] ba) {\n        WritableArray wa = Arguments.createArray();\n        for (byte b : ba) {\n            wa.pushInt(b);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts ReadableArray to byte array\n     *\n     * @param ra ReadableArray\n     * @return byte array\n     */\n    public byte[] convertRaToByteArray(ReadableArray ra) {\n        byte[] bytes = new byte[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            bytes[i] = (byte) ra.getInt(i);\n        }\n        return bytes;\n    }\n\n    /**\n     * Converts byte array to byte buffer\n     *\n     * @param arr byte array\n     * @return byte buffer\n     */\n    public ByteBuffer convertByteArrToByteBuffer(byte[] arr) {\n        return ByteBuffer.wrap(arr);\n    }\n\n    /**\n     * Converts sparse array to list\n     *\n     * @param result sparse array of any type\n     * @param <T> generic parameter\n     * @return List\n     */\n    public <T> List<T> convertSparseArrayToList(SparseArray<T> result) {\n        List<T> converted = new ArrayList<>();\n        for (int i = 0; i < result.size(); i++) {\n            converted.add(result.get(result.keyAt(i)));\n        }\n        return converted;\n    }\n\n    /**\n     * Converts ReadableArray to String Set\n     *\n     * @param ra ReadableArray\n     * @return String Set\n     */\n    public Set<String> convertRaToStringSet(ReadableArray ra) {\n        Set<String> word = new HashSet<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.String) {\n                word.add(ra.getString(i));\n            }\n        }\n        return word;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convert2DFloatArrToWa(Float[][] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr[0]) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convertFloatArrToWa(Float[] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Save image to gallery\n     *\n     * @param inContext app context\n     * @param inImage bitmap image\n     * @return image uri\n     */\n    public String saveImageAndGetUri(Context inContext, Bitmap inImage) {\n        ByteArrayOutputStream bytes = new ByteArrayOutputStream();\n        inImage.compress(Bitmap.CompressFormat.JPEG, 90, bytes);\n        return MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, null, null);\n    }\n\n    /**\n     * Sets the holder for lensEngine\n     *\n     * @param surfaceViewHolder holder\n     */\n    public void setSurfaceViewHolder(SurfaceHolder surfaceViewHolder) {\n        this.surfaceViewHolder = surfaceViewHolder;\n    }\n\n    /**\n     * Returns the holder for lensEngine\n     *\n     * @return holder\n     */\n    public SurfaceHolder getSurfaceViewHolder() {\n        return surfaceViewHolder;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/views/HMSBottomSheetGridView.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.MotionEvent;\nimport android.widget.AbsListView;\nimport android.widget.GridView;\n\npublic class HMSBottomSheetGridView extends GridView {\n\n    public HMSBottomSheetGridView(Context context) {\n        super(context);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public boolean onInterceptHoverEvent(MotionEvent event) {\n        return true;\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    @Override\n    public boolean onTouchEvent(MotionEvent ev) {\n        if (canScrollVertically(this)) {\n            getParent().requestDisallowInterceptTouchEvent(true);\n        }\n        return super.onTouchEvent(ev);\n    }\n\n    private boolean canScrollVertically(AbsListView view) {\n        boolean canScroll = false;\n        if (view != null && view.getChildCount() > 0) {\n            boolean isOnTop = view.getFirstVisiblePosition() != 0 || view.getChildAt(0).getTop() != 0;\n\n            if (isOnTop) {\n                canScroll = true;\n            }\n        }\n        return canScroll;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/views/HMSCustomSurfaceView.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.views;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_SURFACE_ON_CHANGED;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_SURFACE_ON_CREATED;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LENS_SURFACE_ON_DESTROY;\n\nimport android.content.Context;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\n\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSCustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback {\n    private ThemedReactContext applicationContext;\n\n    public HMSCustomSurfaceView(Context context) {\n        super(context);\n        applicationContext = (ThemedReactContext) context;\n        HMSUtils.getInstance().setSurfaceViewHolder(getHolder());\n        getHolder().addCallback(this);\n    }\n\n    @Override\n    public void surfaceCreated(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_CREATED, null);\n    }\n\n    @Override\n    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"format\", i);\n        wm.putInt(\"width\", i1);\n        wm.putInt(\"height\", i2);\n        sendEvent(LENS_SURFACE_ON_CHANGED, wm);\n    }\n\n    @Override\n    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_DESTROY, null);\n    }\n\n    private void sendEvent(String eventName, WritableMap params) {\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/helpers/views/HMSSurfaceView.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.helpers.views;\n\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSSurfaceView extends SimpleViewManager<HMSCustomSurfaceView> {\n\n    @Override\n    public String getName() {\n        return HMSSurfaceView.class.getSimpleName();\n    }\n\n    @Override\n    protected HMSCustomSurfaceView createViewInstance(ThemedReactContext reactContext) {\n        return new HMSCustomSurfaceView(reactContext);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSDocumentSkewCorrection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.DSC_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionCoordinateInput;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSDocumentSkewCorrection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSDocumentSkewCorrection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSDocumentSkewCorrection.class.getSimpleName(), DSC_CONSTANTS);\n    }\n\n    /**\n     * Synchronous calling entry for text box tilt detection\n     *\n     * @param isStop releases analyzer resources\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        SparseArray<MLDocumentSkewDetectResult> result = dscAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopAnalyzer(dscAnalyzer);\n        }\n\n        if (result != null && result.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n            handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getDocumentSkewDetectResults(result), promise);\n        } else {\n            handleResult(\"analyzeFrame\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Asynchronous calling entry for text box tilt detection.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncDocumentSkewDetect(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncDocumentSkewDetect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncDocumentSkewDetect\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        dscAnalyzer.asyncDocumentSkewDetect(frame).addOnSuccessListener(result -> {\n            if (isStop) {\n                stopAnalyzer(dscAnalyzer);\n            }\n\n            if (result.getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    HMSResultCreator.getInstance().getDocumentSkewDetectAsyncResult(result), promise);\n            } else if (result.getResultCode() == MLDocumentSkewCorrectionConstant.DETECT_FAILED) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.DETECT_FAILED, \"Detection Failure\"),\n                    promise);\n            } else if (result.getResultCode() == MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR, \"Image Data Error\"),\n                    promise);\n            } else {\n                handleResult(\"asyncDocumentSkewDetect\", FAILURE, promise);\n            }\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(dscAnalyzer);\n            }\n            handleResult(\"asyncDocumentSkewDetect\", e, promise);\n        });\n    }\n\n    /**\n     * Asynchronous calling entry for text box tilt correction.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame configuration\n     * @param points points to be corrected\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncDocumentSkewCorrect(boolean isStop, ReadableMap frameConfiguration, ReadableArray points,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncDocumentSkewCorrect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncDocumentSkewCorrect\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (points.size() == 0) {\n            handleResult(\"asyncDocumentSkewCorrect\", FAILURE.getStatusAndMessage(null, \"Points array size is 0\"),\n                promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        dscAnalyzer.asyncDocumentSkewCorrect(frame,\n            new MLDocumentSkewCorrectionCoordinateInput(HMSUtils.getInstance().convertRaToPointList(points)))\n            .addOnSuccessListener(mlDocumentSkewCorrectionResult -> {\n                if (isStop) {\n                    stopAnalyzer(dscAnalyzer);\n                }\n\n                if (mlDocumentSkewCorrectionResult.getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n                    HMSBackgroundTasks.getInstance()\n                        .saveImageAndGetUri(getContext(), mlDocumentSkewCorrectionResult.getCorrected())\n                        .addOnSuccessListener(string -> handleResult(\"asyncDocumentSkewCorrect\",\n                            HMSResultCreator.getInstance().getStringResult(string), promise))\n                        .addOnFailureListener(e -> handleResult(\"asyncDocumentSkewCorrect\", e, promise));\n                } else if (mlDocumentSkewCorrectionResult.getResultCode()\n                    == MLDocumentSkewCorrectionConstant.CORRECTION_FAILED) {\n                    handleResult(\"asyncDocumentSkewCorrect\",\n                        FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.CORRECTION_FAILED,\n                            \"Detection Failure\"), promise);\n                } else if (mlDocumentSkewCorrectionResult.getResultCode()\n                    == MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR) {\n                    handleResult(\"asyncDocumentSkewCorrect\",\n                        FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR,\n                            \"Image Data Error\"), promise);\n                } else {\n                    handleResult(\"asyncDocumentSkewCorrect\", FAILURE, promise);\n                }\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(dscAnalyzer);\n                }\n                handleResult(\"asyncDocumentSkewCorrect\", e, promise);\n            });\n    }\n\n    /**\n     * Synchronous calling entry for text box tilt correction.\n     *\n     * @param isStop releases analyzer resources\n     * @param frameConfiguration frame configuration\n     * @param points points to be corrected\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncDocumentSkewCorrect(boolean isStop, ReadableMap frameConfiguration, ReadableArray points,\n        final Promise promise) {\n        startMethodExecTimer(\"syncDocumentSkewCorrect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"syncDocumentSkewCorrect\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (points.size() == 0) {\n            handleResult(\"syncDocumentSkewCorrect\", FAILURE.getStatusAndMessage(null, \"Points array size is 0\"),\n                promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        SparseArray<MLDocumentSkewCorrectionResult> result = dscAnalyzer.syncDocumentSkewCorrect(frame,\n            new MLDocumentSkewCorrectionCoordinateInput(HMSUtils.getInstance().convertRaToPointList(points)));\n\n        if (isStop) {\n            stopAnalyzer(dscAnalyzer);\n        }\n\n        if (result != null && result.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n            HMSBackgroundTasks.getInstance()\n                .saveDscImages(getContext(), result)\n                .addOnSuccessListener(writableMap -> handleResult(\"syncDocumentSkewCorrect\", writableMap, promise))\n                .addOnFailureListener(e -> handleResult(\"syncDocumentSkewCorrect\", e, promise));\n        } else {\n            handleResult(\"syncDocumentSkewCorrect\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param dscAnalyzer document skew correction\n     */\n    private void stopAnalyzer(MLDocumentSkewCorrectionAnalyzer dscAnalyzer) {\n        try {\n            dscAnalyzer.stop();\n            Log.i(getName(), \"MLDocumentSkewCorrectionAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLDocumentSkewCorrectionAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSFrame.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.FRAME_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSFrame extends HMSBase {\n\n    /**\n     * Sets module name and frame constants\n     *\n     * @param reactContext context\n     */\n    public HMSFrame(ReactApplicationContext reactContext) {\n        super(reactContext, HMSFrame.class.getSimpleName(), FRAME_CONSTANTS);\n    }\n\n    /**\n     * Obtains bitmap data of the preview image.\n     *\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getPreviewBitmap(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"getPreviewBitmap\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"getPreviewBitmap\", FRAME_NULL, promise);\n            return;\n        }\n\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), frame.getPreviewBitmap())\n            .addOnSuccessListener(\n                string -> handleResult(\"getPreviewBitmap\", HMSResultCreator.getInstance().getStringResult(string),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"getPreviewBitmap\", e, promise));\n    }\n\n    /**\n     * Obtains bitmap data of a converted image.\n     *\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void readBitmap(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"readBitmap\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"readBitmap\", FRAME_NULL, promise);\n            return;\n        }\n\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), frame.readBitmap())\n            .addOnSuccessListener(\n                s -> handleResult(\"readBitmap\", HMSResultCreator.getInstance().getStringResult(s), promise))\n            .addOnFailureListener(e -> handleResult(\"readBitmap\", e, promise));\n    }\n\n    /**\n     * Rotates the bitmap of a preview image based on the screen orientation.\n     *\n     * @param quadrant screen quadrant\n     * @param fileUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void rotate(int quadrant, String fileUri, final Promise promise) {\n        startMethodExecTimer(\"rotate\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(fileUri));\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), MLFrame.rotate(bitmap, quadrant))\n                .addOnSuccessListener(\n                    s -> handleResult(\"rotate\", HMSResultCreator.getInstance().getStringResult(s), promise))\n                .addOnFailureListener(e -> handleResult(\"rotate\", e, promise));\n        } catch (IOException e) {\n            handleResult(\"rotate\", e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSImageClassification.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.classification.MLImageClassificationAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSImageClassification extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSImageClassification(ReactApplicationContext context) {\n        super(context, HMSImageClassification.class.getSimpleName(), null);\n    }\n\n    /**\n     * Classifies images by synchronous processing.\n     *\n     * @param isRemote if true classifies on-cloud otherwise on-device\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerSetting, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageClassificationAnalyzer classificationAnalyzer = HMSObjectCreator.getInstance()\n            .createClassificationAnalyzer(isRemote, analyzerSetting);\n        SparseArray<MLImageClassification> results = classificationAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopSilent(classificationAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getImageClassificationResult(results), promise);\n    }\n\n    /**\n     * Classifies images by asynchronous processing.\n     *\n     * @param isRemote if true classifies on-cloud otherwise on-device\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerSetting, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageClassificationAnalyzer classificationAnalyzer = HMSObjectCreator.getInstance()\n            .createClassificationAnalyzer(isRemote, analyzerSetting);\n        classificationAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlImageClassifications -> {\n            if (isStop) {\n                stopSilent(classificationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getImageClassificationResult(mlImageClassifications), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(classificationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param classificationAnalyzer analyzer\n     */\n    private void stopSilent(MLImageClassificationAnalyzer classificationAnalyzer) {\n        try {\n            classificationAnalyzer.stop();\n            Log.i(getName(), \"MLImageClassificationAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLImageClassificationAnalyzer stop\" + e.getMessage());\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSImageSegmentation.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.IMSEG_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.IOException;\n\npublic class HMSImageSegmentation extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSImageSegmentation(ReactApplicationContext context) {\n        super(context, HMSImageSegmentation.class.getSimpleName(), IMSEG_CONSTANTS);\n    }\n\n    /**\n     * Implements image segmentation in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        boolean isBodySeg = true;\n        if (analyzerConfiguration != null && HMSUtils.getInstance()\n            .hasValidKey(analyzerConfiguration, \"analyzerType\", ReadableType.Number)) {\n            int analyzerType = analyzerConfiguration.getInt(\"analyzerType\");\n            isBodySeg = analyzerType == (int) (IMSEG_CONSTANTS.get(\"BODY_SEG\"));\n        }\n        boolean finalIsBodySeg = isBodySeg;\n\n        MLImageSegmentationAnalyzer imageSegmentationAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSegmentationAnalyzer(analyzerConfiguration);\n        HMSBackgroundTasks.getInstance()\n            .saveImageSegmentationImages(getContext(), imageSegmentationAnalyzer.analyseFrame(frame), finalIsBodySeg)\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    stopSilent(imageSegmentationAnalyzer);\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    stopSilent(imageSegmentationAnalyzer);\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Implements image segmentation in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        boolean isBodySeg = true;\n        if (analyzerConfiguration != null && HMSUtils.getInstance()\n            .hasValidKey(analyzerConfiguration, \"analyzerType\", ReadableType.Number)) {\n            int analyzerType = analyzerConfiguration.getInt(\"analyzerType\");\n            isBodySeg = analyzerType == (int) (IMSEG_CONSTANTS.get(\"BODY_SEG\"));\n        }\n        boolean finalIsBodySeg = isBodySeg;\n\n        MLImageSegmentationAnalyzer imageSegmentationAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSegmentationAnalyzer(analyzerConfiguration);\n        imageSegmentationAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(imageSegmentation -> {\n            HMSBackgroundTasks.getInstance()\n                .saveImageSegmentationImages(getContext(), imageSegmentation, finalIsBodySeg)\n                .addOnSuccessListener(writableMap -> {\n                    if (isStop) {\n                        stopSilent(imageSegmentationAnalyzer);\n                    }\n                    handleResult(\"asyncAnalyzeFrame\", writableMap, promise);\n                })\n                .addOnFailureListener(e -> {\n                    if (isStop) {\n                        stopSilent(imageSegmentationAnalyzer);\n                    }\n                    handleResult(\"asyncAnalyzeFrame\", e, promise);\n                });\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(imageSegmentationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param imageSegmentationAnalyzer analyzer\n     */\n    private void stopSilent(MLImageSegmentationAnalyzer imageSegmentationAnalyzer) {\n        try {\n            imageSegmentationAnalyzer.stop();\n            Log.i(getName(), \"MLImageSegmentationAnalyzer stop : OK\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLImageSegmentationAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSImageSuperResolution.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.IMAGE_RESOLUTION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSImageSuperResolution extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSImageSuperResolution(ReactApplicationContext reactContext) {\n        super(reactContext, HMSImageSuperResolution.class.getSimpleName(), IMAGE_RESOLUTION_CONSTANTS);\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the synchronous method.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame obtaining configuration\n     * @param scale scale config\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, float scale, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSuperResolutionAnalyzer(scale);\n        HMSBackgroundTasks.getInstance()\n            .saveImageSuperResolutionImages(getContext(), imageSuperResolutionAnalyzer.analyseFrame(frame))\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the asynchronous method.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame obtaining configuration\n     * @param scale scale config\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, float scale, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSuperResolutionAnalyzer(scale);\n        imageSuperResolutionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlImageSuperResolutionResult -> {\n            if (isStop) {\n                imageSuperResolutionAnalyzer.stop();\n            }\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), mlImageSuperResolutionResult.getBitmap())\n                .addOnSuccessListener(\n                    string -> handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getStringResult(string),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"asyncAnalyzeFrame\", e, promise));\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                imageSuperResolutionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSLandmarkRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LANDMARK_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSLandmarkRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSLandmarkRecognition(ReactApplicationContext context) {\n        super(context, HMSLandmarkRecognition.class.getSimpleName(), LANDMARK_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Recognizes landmarks in images by asynchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param landmarkAnalyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap landmarkAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyseFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLRemoteLandmarkAnalyzer remoteLandmarkAnalyzer = HMSObjectCreator.getInstance()\n            .createLandmarkAnalyzer(landmarkAnalyzerConfiguration);\n        remoteLandmarkAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlRemoteLandmarks -> {\n            if (isStop) {\n                stopAnalyzer(remoteLandmarkAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getLandmarkDetectionResults(mlRemoteLandmarks), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(remoteLandmarkAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param landmarkAnalyzer analyzer\n     */\n    private void stopAnalyzer(@Nonnull MLRemoteLandmarkAnalyzer landmarkAnalyzer) {\n        try {\n            landmarkAnalyzer.stop();\n            Log.i(getName(), \"MLRemoteLandmarkAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLRemoteLandmarkAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSObjectRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.OBJECT_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSObjectRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSObjectRecognition(ReactApplicationContext context) {\n        super(context, HMSObjectRecognition.class.getSimpleName(), OBJECT_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Recognizes objects in images by asynchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param objectAnalyzerSettingConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap objectAnalyzerSettingConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLObjectAnalyzer objectAnalyzer = HMSObjectCreator.getInstance()\n            .createObjectAnalyzer(objectAnalyzerSettingConfiguration);\n        objectAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(list -> {\n            if (isStop) {\n                stopAnalyzer(objectAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getObjectResult(list), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(objectAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Recognizes objects in images by synchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param objectAnalyzerSettingConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap objectAnalyzerSettingConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLObjectAnalyzer objectAnalyzer = HMSObjectCreator.getInstance()\n            .createObjectAnalyzer(objectAnalyzerSettingConfiguration);\n        WritableMap objectResult = HMSResultCreator.getInstance().getObjectResult(objectAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            stopAnalyzer(objectAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", objectResult, promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param objectAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLObjectAnalyzer objectAnalyzer) {\n        try {\n            objectAnalyzer.stop();\n            Log.i(getName(), \"MLObjectAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLObjectAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSProductVisionSearch.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.PRODUCT_VISION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\n\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.drawee.backends.pipeline.Fresco;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSProductVisionSearch extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSProductVisionSearch(ReactApplicationContext context) {\n        super(context, HMSProductVisionSearch.class.getSimpleName(), PRODUCT_VISION_CONSTANTS);\n        Fresco.initialize(context);\n    }\n\n    /**\n     * Asynchronous product search\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLRemoteProductVisionSearchAnalyzer remoteProductVisionSearchAnalyzer = HMSObjectCreator.getInstance()\n            .createProductVisionSearchAnalyzer(analyzerSetting);\n        remoteProductVisionSearchAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlProductVisionSearches -> {\n            if (isStop) {\n                remoteProductVisionSearchAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getProductVisionSearchResult(mlProductVisionSearches), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                remoteProductVisionSearchAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Start product vision search plugin\n     *\n     * @param pluginConfiguration plugin configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startProductVisionSearchCapturePlugin(ReadableMap pluginConfiguration, final Promise promise) {\n        startMethodExecTimer(\"startProductVisionSearchCapturePlugin\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"startProductVisionSearchCapturePlugin\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLProductVisionSearchCapture capture = HMSObjectCreator.getInstance()\n            .createProductVisionSearchCapture(pluginConfiguration, getContext());\n        capture.startCapture(currentActivity);\n        handleResult(\"startProductVisionSearchCapturePlugin\", SUCCESS, promise);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSSceneDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSSceneDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSceneDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSceneDetection.class.getSimpleName(), null);\n    }\n\n    /**\n     * Detects scene information in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param confidence confidence value\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, double confidence, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSceneDetectionAnalyzer sceneDetectionAnalyzer = HMSObjectCreator.getInstance()\n            .getSceneDetectionAnalyzer(confidence);\n        WritableMap result = HMSResultCreator.getInstance()\n            .getSceneDetectionResultSync(sceneDetectionAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            sceneDetectionAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", result, promise);\n    }\n\n    /**\n     * Detects scene information in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param confidence confidence value\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, double confidence, ReadableMap frameConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSceneDetectionAnalyzer sceneDetectionAnalyzer = HMSObjectCreator.getInstance()\n            .getSceneDetectionAnalyzer(confidence);\n        sceneDetectionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlSceneDetections -> {\n            if (isStop) {\n                sceneDetectionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getSceneDetectionResultAsync(mlSceneDetections), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                sceneDetectionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/imagerelatedservices/HMSTextImageSuperResolution.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.imagerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolutionAnalyzer;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolutionAnalyzerFactory;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSTextImageSuperResolution extends HMSBase {\n\n    /**\n     * Initializes modules\n     *\n     * @param reactContext app context\n     */\n    public HMSTextImageSuperResolution(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextImageSuperResolution.class.getSimpleName(), null);\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the synchronous method.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer\n            = MLTextImageSuperResolutionAnalyzerFactory.getInstance().getTextImageSuperResolutionAnalyzer();\n        HMSBackgroundTasks.getInstance()\n            .saveTextImageSuperResolutionImages(getContext(), imageSuperResolutionAnalyzer.analyseFrame(frame))\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the asynchronous method.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextImageSuperResolutionAnalyzer textImageSuperResolutionAnalyzer\n            = MLTextImageSuperResolutionAnalyzerFactory.getInstance().getTextImageSuperResolutionAnalyzer();\n        textImageSuperResolutionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(textImageSuperResolution -> {\n            if (isStop) {\n                textImageSuperResolutionAnalyzer.stop();\n            }\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), textImageSuperResolution.getBitmap())\n                .addOnSuccessListener(\n                    string -> handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getStringResult(string),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"asyncAnalyzeFrame\", e, promise));\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                textImageSuperResolutionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSAft.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_ON_ERROR;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_ON_EVENT;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_ON_INIT_COMPLETE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_ON_RESULT;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.AFT_ON_UPLOAD_PROGRESS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.net.Uri;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftEngine;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftListener;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSAft extends HMSBase implements MLRemoteAftListener, MLRemoteAftEngine.LanguageCallback {\n    private Promise languageListPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSAft(ReactApplicationContext reactContext) {\n        super(reactContext, HMSAft.class.getSimpleName(), AFT_CONSTANTS);\n    }\n\n    /**\n     * Initializes the audio transcription engine on the cloud and loads engine resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void init(final Promise promise) {\n        startMethodExecTimer(\"init\");\n        MLRemoteAftEngine.getInstance().init(getContext());\n        handleResult(\"init\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables the audio transcription engine to release engine resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n        MLRemoteAftEngine.getInstance().close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Destroys a long audio transcription task on the cloud.\n     * If the task is destroyed after the audio file is successfully uploaded,\n     * the transcription has started and charging cannot be canceled.\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroyTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"destroyTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"destroyTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().destroyTask(taskId);\n        handleResult(\"destroyTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the long aft languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLongAftLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLongAftLanguages\");\n\n        MLRemoteAftEngine.getInstance().getLongAftLanguages(this);\n        languageListPromise = promise;\n\n    }\n\n    /**\n     * Obtains the short aft languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getShortAftLanguages(final Promise promise) {\n        startMethodExecTimer(\"getShortAftLanguages\");\n\n        MLRemoteAftEngine.getInstance().getShortAftLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Obtains the long audio transcription result from the cloud.\n     * Resolve : Result Object\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLongAftResult(String taskId, final Promise promise) {\n        startMethodExecTimer(\"getLongAftResult\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"getLongAftResult\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().getLongAftResult(taskId);\n        handleResult(\"getLongAftResult\", SUCCESS, promise);\n    }\n\n    /**\n     * Pause the task for given taskId\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void pauseTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"pauseTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"pauseTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().pauseTask(taskId);\n        handleResult(\"pauseTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Resumes long audio transcription task on the cloud.\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"startTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"startTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().startTask(taskId);\n        handleResult(\"startTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts the task for given taskId\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAftListener(final Promise promise) {\n        startMethodExecTimer(\"setAftListener\");\n        MLRemoteAftEngine.getInstance().setAftListener(this);\n        handleResult(\"setAftListener\", SUCCESS, promise);\n    }\n\n    /**\n     * Converts a short audio file on the cloud.\n     *\n     * @param uri file uri\n     * @param remoteAftSetting aft setting for recognition\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void shortRecognize(String uri, ReadableMap remoteAftSetting, final Promise promise) {\n        startMethodExecTimer(\"shortRecognize\");\n\n        if (TextUtils.isEmpty(uri)) {\n            handleResult(\"shortRecognize\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        String result = MLRemoteAftEngine.getInstance()\n            .shortRecognize(Uri.parse(uri), HMSObjectCreator.getInstance().createRemoteAftSetting(remoteAftSetting));\n\n        handleResult(\"shortRecognize\", HMSResultCreator.getInstance().getStringResult(result), promise);\n    }\n\n    /**\n     * Converts a long audio file on the cloud.\n     *\n     * @param uri file uri\n     * @param remoteAftSetting aft setting for recognition\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void longRecognize(String uri, ReadableMap remoteAftSetting, final Promise promise) {\n        startMethodExecTimer(\"longRecognize\");\n\n        if (TextUtils.isEmpty(uri)) {\n            handleResult(\"longRecognize\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        String result = MLRemoteAftEngine.getInstance()\n            .longRecognize(Uri.parse(uri), HMSObjectCreator.getInstance().createRemoteAftSetting(remoteAftSetting));\n\n        handleResult(\"longRecognize\", HMSResultCreator.getInstance().getStringResult(result), promise);\n    }\n\n    @Override\n    public void onInitComplete(String taskId, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        sendEvent(AFT_ON_INIT_COMPLETE, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onUploadProgress(String taskId, double progress, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putDouble(\"progress\", progress);\n        sendEvent(AFT_ON_UPLOAD_PROGRESS, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onEvent(String taskId, int eventId, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"eventId\", eventId);\n        sendEvent(AFT_ON_EVENT, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onResult(String taskId, MLRemoteAftResult mlRemoteAftResult, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putBoolean(\"isComplete\", mlRemoteAftResult.isComplete());\n        if (mlRemoteAftResult.isComplete()) {\n            wm.putString(\"taskId\", taskId);\n            wm.putString(\"text\", mlRemoteAftResult.getText());\n            wm.putArray(\"words\", mlRemoteAftResult.getWords() == null\n                ? Arguments.createArray()\n                : HMSResultCreator.getInstance().getAftResult(mlRemoteAftResult.getWords()));\n            wm.putArray(\"sentences\", mlRemoteAftResult.getSentences() == null\n                ? Arguments.createArray()\n                : HMSResultCreator.getInstance().getAftResult(mlRemoteAftResult.getSentences()));\n        }\n        sendEvent(AFT_ON_RESULT, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onError(String taskId, int error, String message) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"error\", error);\n        wm.putString(\"message\", message);\n        sendEvent(AFT_ON_ERROR, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLAftEngine.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    @Override\n    public void onError(int error, String errorMsg) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", errorMsg);\n        sendEvent(AFT_ON_ERROR, \"MLAftListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSAsr.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_ERROR;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_RECOGNIZING_RESULTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_RESULTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_STARTING_SPEECH;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_START_LISTENING;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_STATE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ASR_ON_VOICE_DATA_RECEIVED;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlplugin.asr.MLAsrCaptureActivity;\nimport com.huawei.hms.mlplugin.asr.MLAsrCaptureConstants;\nimport com.huawei.hms.mlsdk.asr.MLAsrConstants;\nimport com.huawei.hms.mlsdk.asr.MLAsrListener;\nimport com.huawei.hms.mlsdk.asr.MLAsrRecognizer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.BaseActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSAsr extends HMSBase implements MLAsrListener, MLAsrRecognizer.LanguageCallback {\n    private Promise asrPluginPromise;\n\n    private MLAsrRecognizer asrRecognizer;\n\n    private Promise languageListPromise;\n\n    private static final int ASR_PLUGIN_REQUEST = 300;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSAsr(ReactApplicationContext reactContext) {\n        super(reactContext, HMSAsr.class.getSimpleName(), ASR_CONSTANTS);\n        getContext().addActivityEventListener(mActivityEventListener);\n    }\n\n    /**\n     * Destroy and release Asr Recognizer\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"destroy\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        asrRecognizer.destroy();\n        asrRecognizer = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains supported languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"getLanguages\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        asrRecognizer.getLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Creates Asr Recognizer\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createAsrRecognizer(final Promise promise) {\n        startMethodExecTimer(\"createAsrRecognizer\");\n        asrRecognizer = MLAsrRecognizer.createAsrRecognizer(getContext());\n        asrRecognizer.setAsrListener(this);\n        handleResult(\"createAsrRecognizer\", SUCCESS, promise);\n    }\n\n    /**\n     * Start Recognizer\n     *\n     * @param language language code\n     * @param feature feature type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizing(String language, int feature, final Promise promise) {\n        startMethodExecTimer(\"startRecognizing\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"startRecognizing\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"startRecognizing\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Intent asrIntent = new Intent(MLAsrConstants.ACTION_HMS_ASR_SPEECH).putExtra(MLAsrConstants.LANGUAGE, language)\n            .putExtra(MLAsrConstants.FEATURE, feature);\n        asrRecognizer.startRecognizing(asrIntent);\n        handleResult(\"startRecognizing\", SUCCESS, promise);\n    }\n\n    /**\n     * Start Asr Recognizer plugin\n     *\n     * @param language language code\n     * @param feature feature type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizingPlugin(String language, int feature, final Promise promise) {\n        startMethodExecTimer(\"startRecognizingPlugin\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"startRecognizingPlugin\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (currentActivity == null) {\n            handleResult(\"startRecognizingPlugin\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        asrPluginPromise = promise;\n\n        final Intent asrIntent = new Intent(currentActivity, MLAsrCaptureActivity.class).putExtra(\n            MLAsrConstants.LANGUAGE, language).putExtra(MLAsrConstants.FEATURE, feature);\n        currentActivity.startActivityForResult(asrIntent, ASR_PLUGIN_REQUEST);\n    }\n\n    /**\n     * Activity result listener for plugin\n     */\n    private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {\n        @Override\n        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n            if (requestCode == ASR_PLUGIN_REQUEST) {\n                if (asrPluginPromise != null) {\n                    Bundle result = intent.getExtras();\n                    switch (resultCode) {\n                        case MLAsrCaptureConstants.ASR_SUCCESS:\n                            WritableMap success = SUCCESS.getStatusAndMessage();\n                            String asrResult = \"\";\n                            if (result != null) {\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_RESULT)) {\n                                    asrResult = result.getString(MLAsrCaptureConstants.ASR_RESULT);\n                                }\n                            }\n                            success.putString(\"result\", asrResult);\n                            asrPluginPromise.resolve(success);\n                            break;\n                        case MLAsrCaptureConstants.ASR_FAILURE:\n                            WritableMap fail = FAILURE.getStatusAndMessage();\n                            if (result != null) {\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_ERROR_CODE)) {\n                                    int errorCode = result.getInt(MLAsrCaptureConstants.ASR_ERROR_CODE);\n                                    fail.putInt(\"errorCode\", errorCode);\n                                }\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_ERROR_MESSAGE)) {\n                                    String errorMsg = result.getString(MLAsrCaptureConstants.ASR_ERROR_MESSAGE);\n                                    fail.putString(\"errorMessage\", errorMsg);\n                                }\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE)) {\n                                    int subErrorCode = result.getInt(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE);\n                                    fail.putInt(\"subErrorCode\", subErrorCode);\n                                }\n                            }\n                            asrPluginPromise.resolve(fail);\n                            break;\n                        default:\n                            asrPluginPromise.resolve(FAILURE.getStatusAndMessage());\n                            break;\n                    }\n                    asrPluginPromise = null;\n                }\n            }\n        }\n    };\n\n    @Override\n    public void onResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"result\", bundle.getString(MLAsrRecognizer.RESULTS_RECOGNIZED));\n        sendEvent(ASR_ON_RESULTS, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onRecognizingResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"result\", bundle.getString(MLAsrRecognizer.RESULTS_RECOGNIZING));\n        sendEvent(ASR_ON_RECOGNIZING_RESULTS, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLAsrRecognizer.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    @Override\n    public void onError(int error, String errorMsg) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", errorMsg);\n        sendEvent(ASR_ON_ERROR, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onStartListening() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Listening started\");\n        sendEvent(ASR_ON_START_LISTENING, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onStartingOfSpeech() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Speech started\");\n        sendEvent(ASR_ON_STARTING_SPEECH, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onVoiceDataReceived(byte[] bytes, float v, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putArray(\"data\", HMSUtils.getInstance().convertByteArrToWa(bytes));\n        wm.putDouble(\"energy\", v);\n        sendEvent(ASR_ON_VOICE_DATA_RECEIVED, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onState(int state, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"state\", state);\n        sendEvent(ASR_ON_STATE, \"MLAsrListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSLanguageDetection.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.LANGUAGE_DETECTION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\n\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.langdetect.MLDetectedLang;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetector;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSLanguageDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSLanguageDetection(ReactApplicationContext context) {\n        super(context, HMSLanguageDetection.class.getSimpleName(), LANGUAGE_DETECTION_CONSTANTS);\n    }\n\n    /**\n     * Returns multi-language detection results based on the supplied text\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop calls stop if true\n     * @param trustedThreshold trust threshold\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void probabilityDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"probabilityDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"probabilityDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createRemoteLanguageDetector(trustedThreshold);\n            handleProbabilityTask(isStop, langDetector, langDetector.probabilityDetect(sourceText), promise);\n        } else {\n            MLLocalLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createLocalLanguageDetector(trustedThreshold);\n            handleProbabilityTask(isStop, langDetector, langDetector.probabilityDetect(sourceText), promise);\n        }\n    }\n\n    /**\n     * Returns the language detection result with the highest confidence based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void firstBestDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"firstBestDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"firstBestDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createRemoteLanguageDetector(trustedThreshold);\n            handleFirstBestTask(isStop, langDetector, langDetector.firstBestDetect(sourceText), promise);\n\n        } else {\n            MLLocalLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createLocalLanguageDetector(trustedThreshold);\n            handleFirstBestTask(isStop, langDetector, langDetector.firstBestDetect(sourceText), promise);\n        }\n    }\n\n    /**\n     * Synchronously returns multi-language detection results based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncProbabilityDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"syncProbabilityDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"syncProbabilityDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteLanguageDetector(trustedThreshold)\n            : HMSObjectCreator.getInstance().createLocalLanguageDetector(trustedThreshold);\n        try {\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getLangDetectionResult(\n                    detector instanceof MLRemoteLangDetector ? ((MLRemoteLangDetector) detector).syncProbabilityDetect(\n                        sourceText) : ((MLLocalLangDetector) detector).syncProbabilityDetect(sourceText));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncProbabilityDetect\", wm, promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncProbabilityDetect\", e, promise);\n        }\n\n    }\n\n    /**\n     * Synchronously returns the language detection result with the highest confidence based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncFirstBestDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"syncFirstBestDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"syncFirstBestDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteLanguageDetector(trustedThreshold)\n            : HMSObjectCreator.getInstance().createLocalLanguageDetector(trustedThreshold);\n\n        try {\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getStringResult(\n                    detector instanceof MLRemoteLangDetector ? ((MLRemoteLangDetector) detector).syncFirstBestDetect(\n                        sourceText) : ((MLLocalLangDetector) detector).syncFirstBestDetect(sourceText));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncFirstBestDetect\", wm, promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncFirstBestDetect\", e, promise);\n        }\n    }\n\n    private void handleProbabilityTask(boolean isStop, Object detector, Task<List<MLDetectedLang>> task,\n        Promise promise) {\n        task.addOnSuccessListener(detectedLanguages -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"probabilityDetect\", HMSResultCreator.getInstance().getLangDetectionResult(detectedLanguages),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"probabilityDetect\", e, promise);\n        });\n    }\n\n    private void handleFirstBestTask(boolean isStop, Object detector, Task<String> task, Promise promise) {\n        task.addOnSuccessListener(s -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"firstBestDetect\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"firstBestDetect\", e, promise);\n        });\n    }\n\n    private void handleStop(Object detector) {\n        if (detector instanceof MLRemoteLangDetector) {\n            ((MLRemoteLangDetector) detector).stop();\n            Log.i(getName(), \"MLRemoteLangDetector stop\");\n        } else {\n            ((MLLocalLangDetector) detector).stop();\n            Log.i(getName(), \"MLLocalLangDetector stop\");\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSSoundDetect.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SOUND_DETECT_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SOUND_DETECT_ON_FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SOUND_DETECT_ON_SUCCESS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.os.Bundle;\n\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetectListener;\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetector;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSSoundDetect extends HMSBase implements MLSoundDetectListener {\n    private MLSoundDetector soundDetector;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSoundDetect(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSoundDetect.class.getSimpleName(), SOUND_DETECT_CONSTANTS);\n        soundDetector = null;\n    }\n\n    /**\n     * Creates sound detector\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createSoundDetector(final Promise promise) {\n        startMethodExecTimer(\"createSoundDetector\");\n        soundDetector = MLSoundDetector.createSoundDetector();\n        handleResult(\"createSoundDetector\", SUCCESS, promise);\n    }\n\n    /**\n     * Destroys sound detector and releases resources\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (soundDetector == null) {\n            handleResult(\"destroy\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.destroy();\n        soundDetector = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops sound detector\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void stop(final Promise promise) {\n        startMethodExecTimer(\"stop\");\n\n        if (soundDetector == null) {\n            handleResult(\"stop\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.stop();\n        handleResult(\"stop\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts sound detector and returns if it started\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void start(final Promise promise) {\n        startMethodExecTimer(\"start\");\n\n        if (soundDetector == null) {\n            handleResult(\"start\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        boolean isStarted = soundDetector.start(getContext());\n        handleResult(\"start\", HMSResultCreator.getInstance().getBooleanResult(isStarted), promise);\n    }\n\n    /**\n     * Sets listener to obtain results\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setSoundDetectorListener(final Promise promise) {\n        startMethodExecTimer(\"setSoundDetectorListener\");\n\n        if (soundDetector == null) {\n            handleResult(\"setSoundDetectorListener\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.setSoundDetectListener(this);\n        handleResult(\"setSoundDetectorListener\", SUCCESS, promise);\n    }\n\n    /**\n     * onSoundSuccessResult callback\n     * @param result Result that will be resolve\n     */\n    @Override\n    public void onSoundSuccessResult(Bundle result) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"soundType\", result.getInt(MLSoundDetector.RESULTS_RECOGNIZED, -1));\n        sendEvent(SOUND_DETECT_ON_SUCCESS, \"MLSoundDectListener\", wm);\n    }\n\n    /**\n     * onSoundFailResult callback\n     * @param errorCode Error code\n     */\n    @Override\n    public void onSoundFailResult(int errorCode) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"errorCode\", errorCode);\n        sendEvent(SOUND_DETECT_ON_FAILURE, \"MLSoundDectListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSSpeechRtt.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_ERROR;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_LISTENING;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_RECOGNIZING_RESULTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_STARTING_OF_SPEECH;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_STATE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.SPEECH_RTT_ON_VOICE_DATA_RECEIVED;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscription;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionListener;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class HMSSpeechRtt extends HMSBase\n    implements MLSpeechRealTimeTranscriptionListener, MLSpeechRealTimeTranscription.LanguageCallback {\n    private Promise languageListPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSpeechRtt(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSpeechRtt.class.getSimpleName(), SPEECH_RTT_CONSTANTS);\n    }\n\n    /**\n     * Starts recognition.\n     *\n     * @param realTimeTranscriptionConfiguration recognition configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizing(ReadableMap realTimeTranscriptionConfiguration, final Promise promise) {\n        startMethodExecTimer(\"startRecognizing\");\n        MLSpeechRealTimeTranscription.getInstance()\n            .startRecognizing(HMSObjectCreator.getInstance()\n                .createSpeechRealtimeTranscriptionConfig(realTimeTranscriptionConfiguration));\n        handleResult(\"startRecognizing\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains languages supported for real-time audio transcription\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n        MLSpeechRealTimeTranscription.getInstance().getLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Sets listener to obtain the results\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setRealTimeTranscriptionListener(final Promise promise) {\n        startMethodExecTimer(\"setRealtimeTranscriptionListener\");\n        MLSpeechRealTimeTranscription.getInstance().setRealTimeTranscriptionListener(this);\n        handleResult(\"setRealtimeTranscriptionListener\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops recognition and releases resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n        MLSpeechRealTimeTranscription.getInstance().destroy();\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * onRecognizingResults callback\n     *\n     * @param bundle Bundle\n     */\n    @Override\n    public void onRecognizingResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        if (bundle != null) {\n            wm.putString(\"text\", bundle.getString(MLSpeechRealTimeTranscriptionConstants.RESULTS_RECOGNIZING, \"\"));\n            ArrayList<MLSpeechRealTimeTranscriptionResult> sentenceOffset = bundle.getParcelableArrayList(\n                MLSpeechRealTimeTranscriptionConstants.RESULTS_SENTENCE_OFFSET);\n            wm.putMap(\"sentenceOffset\", sentenceOffset == null\n                ? Arguments.createMap()\n                : HMSResultCreator.getInstance().getRttResult(sentenceOffset));\n            ArrayList<MLSpeechRealTimeTranscriptionResult> wordOffset = bundle.getParcelableArrayList(\n                MLSpeechRealTimeTranscriptionConstants.RESULTS_WORD_OFFSET);\n            wm.putMap(\"wordOffset\",\n                wordOffset == null ? Arguments.createMap() : HMSResultCreator.getInstance().getRttResult(wordOffset));\n            wm.putBoolean(\"isComplete\",\n                bundle.getBoolean(MLSpeechRealTimeTranscriptionConstants.RESULTS_PARTIALFINAL, false));\n        }\n        sendEvent(SPEECH_RTT_ON_RECOGNIZING_RESULTS, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLSpeechRealTimeTranscription.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    /**\n     * onError callback\n     *\n     * @param error Error\n     * @param errorMessage The error message\n     */\n    @Override\n    public void onError(int error, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", TextUtils.isEmpty(errorMessage) ? \"\" : errorMessage);\n        sendEvent(SPEECH_RTT_ON_ERROR, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onStartListening callback\n     */\n    @Override\n    public void onStartListening() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Listening start\");\n        sendEvent(SPEECH_RTT_ON_LISTENING, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onStartingOfSpeech callback\n     */\n    @Override\n    public void onStartingOfSpeech() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Speech start\");\n        sendEvent(SPEECH_RTT_ON_STARTING_OF_SPEECH, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onVoiceDataReceived callback\n     *\n     * @param data Data in bytes.\n     * @param energy Data energy\n     * @param bundle Bundle\n     */\n    @Override\n    public void onVoiceDataReceived(byte[] data, float energy, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putArray(\"data\", HMSUtils.getInstance().convertByteArrToWa(data));\n        wm.putDouble(\"energy\", energy);\n        wm.putString(\"encoding\", bundle.getString(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_ENCODING, \"\"));\n        wm.putInt(\"sampleRate\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_SAMPLE_RATE, 0));\n        wm.putInt(\"channelCount\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_CHANNEL_COUNT, 0));\n        wm.putInt(\"bitWidth\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_BIT_WIDTH, 0));\n        sendEvent(SPEECH_RTT_ON_VOICE_DATA_RECEIVED, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onState callback\n     *\n     * @param state State\n     * @param bundle Bundle\n     */\n    @Override\n    public void onState(int state, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"state\", state);\n        sendEvent(SPEECH_RTT_ON_STATE, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSTextToSpeech.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_ON_AUDIO_AVAILABLE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_ON_ERROR;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_ON_EVENT;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_ON_RANGE_START;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TTS_ON_WARN;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.util.Pair;\n\nimport com.huawei.hms.mlsdk.tts.MLTtsAudioFragment;\nimport com.huawei.hms.mlsdk.tts.MLTtsCallback;\nimport com.huawei.hms.mlsdk.tts.MLTtsConfig;\nimport com.huawei.hms.mlsdk.tts.MLTtsEngine;\nimport com.huawei.hms.mlsdk.tts.MLTtsError;\nimport com.huawei.hms.mlsdk.tts.MLTtsWarn;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSTextToSpeech extends HMSBase implements MLTtsCallback {\n    private MLTtsConfig ttsConfig;\n\n    private MLTtsEngine ttsEngine;\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSTextToSpeech(ReactApplicationContext context) {\n        super(context, HMSTextToSpeech.class.getSimpleName(), TTS_CONSTANTS);\n    }\n\n    /**\n     * Creates tts engine\n     *\n     * @param ttsConfiguration tts engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createEngine(ReadableMap ttsConfiguration, final Promise promise) {\n        startMethodExecTimer(\"createEngine\");\n        ttsConfig = HMSObjectCreator.getInstance().createTtsConfiguration(ttsConfiguration);\n        ttsEngine = new MLTtsEngine(ttsConfig);\n        ttsEngine.setTtsCallback(this);\n        handleResult(\"createEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Runs engine to speak\n     *\n     * @param text text to be vocalize\n     * @param mode engine mode\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void speak(String text, int mode, final Promise promise) {\n        startMethodExecTimer(\"speak\");\n\n        if (TextUtils.isEmpty(text) || text.length() > 500) {\n            handleResult(\"speak\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"speak\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        String id = ttsEngine.speak(text, mode);\n        handleResult(\"speak\", HMSResultCreator.getInstance().getStringResult(id), promise);\n    }\n\n    /**\n     * Resumes engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void resume(final Promise promise) {\n        startMethodExecTimer(\"resume\");\n\n        if (ttsEngine == null) {\n            handleResult(\"resume\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.resume();\n        handleResult(\"resume\", SUCCESS, promise);\n    }\n\n    /**\n     * Set engine's volume\n     *\n     * @param volume the volume of the built-in player, in dBs. The value is in the range of [0, 100]\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setPlayerVolume(int volume, final Promise promise) {\n        startMethodExecTimer(\"setPlayerVolume\");\n\n        if (ttsEngine == null) {\n            handleResult(\"setPlayerVolume\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.setPlayerVolume(volume);\n        handleResult(\"setPlayerVolume\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void stop(final Promise promise) {\n        startMethodExecTimer(\"stop\");\n\n        if (ttsEngine == null) {\n            handleResult(\"stop\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.stop();\n        handleResult(\"stop\", SUCCESS, promise);\n    }\n\n    /**\n     * Pause engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void pause(final Promise promise) {\n        startMethodExecTimer(\"pause\");\n\n        if (ttsEngine == null) {\n            handleResult(\"pause\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.pause();\n        handleResult(\"pause\", SUCCESS, promise);\n    }\n\n    /**\n     * Shutdown engine and release engine and config resources\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void shutdown(final Promise promise) {\n        startMethodExecTimer(\"shutdown\");\n\n        if (ttsEngine == null) {\n            handleResult(\"shutdown\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.shutdown();\n        ttsEngine = null;\n        ttsConfig = null;\n        handleResult(\"shutdown\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains supported languages.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n\n        if (ttsEngine == null) {\n            handleResult(\"getLanguages\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLanguages\", HMSResultCreator.getInstance().stringListResult(ttsEngine.getLanguages()),\n            promise);\n    }\n\n    /**\n     * Obtain the speaker of a specified language.\n     *\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getSpeaker(String language, final Promise promise) {\n        startMethodExecTimer(\"getSpeaker\");\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"getSpeaker\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"getSpeaker\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getSpeaker\", HMSResultCreator.getInstance().getStringResult(language), promise);\n    }\n\n    /**\n     * Obtain the all speakers\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getSpeakers(final Promise promise) {\n        startMethodExecTimer(\"getSpeakers\");\n\n        if (ttsEngine == null) {\n            handleResult(\"getSpeakers\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getSpeaker\", HMSResultCreator.getInstance().getSpeakers(ttsEngine.getSpeakers()), promise);\n    }\n\n    /**\n     * Obtains if given language available\n     *\n     * @param language Language\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isLanguageAvailable(String language, final Promise promise) {\n        startMethodExecTimer(\"isLanguageAvailable\");\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"isLanguageAvailable\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"isLanguageAvailable\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"isLanguageAvailable\",\n            HMSResultCreator.getInstance().integerResult(ttsEngine.isLanguageAvailable(language)), promise);\n    }\n\n    /**\n     * Updates configuration created before. If no configuration created before, creates a new one\n     *\n     * @param ttsConfiguration Configration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void updateConfig(ReadableMap ttsConfiguration, final Promise promise) {\n        startMethodExecTimer(\"updateConfig\");\n\n        if (ttsEngine == null) {\n            handleResult(\"updateConfig\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsConfig = HMSObjectCreator.getInstance().createTtsConfiguration(ttsConfiguration);\n        ttsEngine.updateConfig(ttsConfig);\n        ttsEngine.setTtsCallback(this);\n        handleResult(\"updateConfig\", SUCCESS, promise);\n    }\n\n    /**\n     * onError Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsError Error\n     */\n    @Override\n    public void onError(String taskId, MLTtsError mlTtsError) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putString(\"errorMessage\", mlTtsError.getErrorMsg());\n        wm.putInt(\"errorId\", mlTtsError.getErrorId());\n        sendEvent(TTS_ON_ERROR, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onWarn Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsWarn Warn\n     */\n    @Override\n    public void onWarn(String taskId, MLTtsWarn mlTtsWarn) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putString(\"warningMessage\", mlTtsWarn.getWarnMsg());\n        wm.putInt(\"warningId\", mlTtsWarn.getWarnId());\n        sendEvent(TTS_ON_WARN, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onRangeStart Callback\n     *\n     * @param taskId The id of the task\n     * @param start Start range\n     * @param end End range\n     */\n    @Override\n    public void onRangeStart(String taskId, int start, int end) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"start\", start);\n        wm.putInt(\"end\", end);\n        sendEvent(TTS_ON_RANGE_START, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onAudioAvailable Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsAudioFragment Audio fragment\n     * @param offset Offset value\n     * @param range Range\n     * @param bundle Bundle\n     */\n    @Override\n    public void onAudioAvailable(String taskId, MLTtsAudioFragment mlTtsAudioFragment, int offset,\n        Pair<Integer, Integer> range, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putArray(\"audioData\", HMSUtils.getInstance().convertByteArrToWa(mlTtsAudioFragment.getAudioData()));\n        wm.putInt(\"channelInfo\", mlTtsAudioFragment.getChannelInfo());\n        wm.putInt(\"sampleRateInHz\", mlTtsAudioFragment.getSampleRateInHz());\n        wm.putInt(\"audioFormat\", mlTtsAudioFragment.getAudioFormat());\n        wm.putInt(\"offset\", offset);\n        wm.putInt(\"first\", range.first);\n        wm.putInt(\"second\", range.second);\n        sendEvent(TTS_ON_AUDIO_AVAILABLE, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onEvent Callback\n     * @param taskId The id of the task\n     * @param eventId The id of the event\n     * @param bundle Bundle\n     */\n    @Override\n    public void onEvent(String taskId, int eventId, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"eventId\", eventId);\n        sendEvent(TTS_ON_EVENT, \"MLTtsCallback\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/languagevoicerelatedservices/HMSTranslate.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TRANSLATE_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TRANSLATE_DOWNLOAD_ON_PROCESS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadListener;\nimport com.huawei.hms.mlsdk.translate.MLTranslateLanguage;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslator;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSTranslate extends HMSBase implements MLModelDownloadListener {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTranslate(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTranslate.class.getSimpleName(), TRANSLATE_CONSTANTS);\n    }\n\n    /**\n     * Asynchronously translates text with analyzer created with given configuration\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param isStop stops translator and releases resources\n     * @param text text to be translated\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncTranslate(boolean isRemote, boolean isStop, String text, ReadableMap translatorSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncTranslate\");\n\n        if (TextUtils.isEmpty(text)) {\n            handleResult(\"asyncTranslate\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteTranslator remoteTranslator = HMSObjectCreator.getInstance()\n                .createRemoteTranslator(translatorSetting);\n            handleAsyncTranslate(isStop, remoteTranslator, remoteTranslator.asyncTranslate(text), promise);\n        } else {\n            MLLocalTranslator localTranslator = HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n            handleAsyncTranslate(isStop, localTranslator, localTranslator.asyncTranslate(text), promise);\n        }\n    }\n\n    /**\n     * Downloads the model for local translation\n     *\n     * @param strategyConfiguration defines model download strategy\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void preparedModel(ReadableMap strategyConfiguration, ReadableMap translatorSetting, final Promise promise) {\n        startMethodExecTimer(\"preparedModel\");\n\n        MLLocalTranslator localTranslator = HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n\n        localTranslator.preparedModel(HMSObjectCreator.getInstance().createModelDownloadStrategy(strategyConfiguration),\n            this)\n            .addOnSuccessListener(aVoid -> handleResult(\"preparedModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"preparedModel\", e, promise));\n    }\n\n    /**\n     * Synchronously translates text with analyzer created with given configuration\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param isStop stops translator and releases resources\n     * @param text text to be translated\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncTranslate(boolean isRemote, boolean isStop, String text, ReadableMap translatorSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"syncTranslate\");\n\n        if (TextUtils.isEmpty(text)) {\n            handleResult(\"syncTranslate\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteTranslator(translatorSetting)\n            : HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n\n        try {\n            String s = (detector instanceof MLRemoteTranslator\n                ? ((MLRemoteTranslator) detector).syncTranslate(text)\n                : ((MLLocalTranslator) detector).syncTranslate(text));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncTranslate\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncTranslate\", e, promise);\n        }\n    }\n\n    /**\n     * Asynchronously obtains languages\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getAllLanguages(boolean isRemote, final Promise promise) {\n        startMethodExecTimer(\"getAllLanguages\");\n\n        if (isRemote) {\n            MLTranslateLanguage.getCloudAllLanguages()\n                .addOnSuccessListener(\n                    strings -> handleResult(\"getAllLanguages\", HMSResultCreator.getInstance().stringSetResult(strings),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getAllLanguages\", e, promise));\n        } else {\n            MLTranslateLanguage.getLocalAllLanguages()\n                .addOnSuccessListener(\n                    strings -> handleResult(\"getAllLanguages\", HMSResultCreator.getInstance().stringSetResult(strings),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getAllLanguages\", e, promise));\n        }\n    }\n\n    /**\n     * Synchronously obtains languages\n     *\n     * @param isRemote if true returns on-cloud languages otherwise on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncGetAllLanguages(boolean isRemote, final Promise promise) {\n        startMethodExecTimer(\"syncGetAllLanguages\");\n\n        if (isRemote) {\n            try {\n                handleResult(\"syncGetAllLanguages\",\n                    HMSResultCreator.getInstance().stringSetResult(MLTranslateLanguage.syncGetCloudAllLanguages()),\n                    promise);\n            } catch (MLException e) {\n                handleResult(\"syncGetAllLanguages\", e, promise);\n            }\n        } else {\n            handleResult(\"syncGetAllLanguages\",\n                HMSResultCreator.getInstance().stringSetResult(MLTranslateLanguage.syncGetLocalAllLanguages()),\n                promise);\n        }\n    }\n\n    /**\n     * onProcess callback for model download\n     * @param alreadyDownLength Already downloaded part\n     * @param totalLength Total length to be downloaded\n     */\n    @Override\n    public void onProcess(long alreadyDownLength, long totalLength) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"alreadyDownloadLength\", Long.toString(alreadyDownLength));\n        wm.putString(\"totalLength\", Long.toString(totalLength));\n        sendEvent(TRANSLATE_DOWNLOAD_ON_PROCESS, \"onProcess\", wm);\n    }\n\n    /**\n     * Releases resources of remote translator\n     *\n     * @param translator translator object\n     */\n    private void handleStop(Object translator) {\n        if (translator instanceof MLRemoteTranslator) {\n            MLRemoteTranslator remoteTranslator = (MLRemoteTranslator) translator;\n            remoteTranslator.stop();\n            Log.i(getName(), \"MLRemoteTranslator stop\");\n        } else {\n            MLLocalTranslator localTranslator = (MLLocalTranslator) translator;\n            localTranslator.stop();\n            Log.i(getName(), \"MLLocalTranslator stop\");\n        }\n    }\n\n    private void handleAsyncTranslate(boolean isStop, Object detector, Task<String> task, Promise promise) {\n        task.addOnSuccessListener(s -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"asyncTranslate\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"asyncTranslate\", e, promise);\n        });\n    }\n\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/modelrelatedservices/HMSCustomModel.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.modelrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutor;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutorSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputOutputSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputs;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSCustomModel extends HMSBase {\n\n    /**\n     * Initializes Module\n     *\n     * @param reactContext app context\n     */\n    public HMSCustomModel(ReactApplicationContext reactContext) {\n        super(reactContext, HMSCustomModel.class.getSimpleName(), null);\n    }\n\n    /**\n     * Performs inference using input and output configurations and content\n     *\n     * @param modelInputOutputSettings input output setting\n     * @param modelInputConfiguration Source data to be inferred.\n     * @param isRemote remote or local model\n     * @param modelConfig model information container\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void exec(boolean isRemote, ReadableMap modelInputOutputSettings, ReadableMap modelInputConfiguration,\n        ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"exec\");\n\n        MLModelInputOutputSettings settings = HMSObjectCreator.getInstance()\n            .createCustomModelInputOutputSetting(modelInputOutputSettings);\n        MLModelInputs modelInputs = HMSObjectCreator.getInstance()\n            .createCustomModelInputs(modelInputConfiguration, getContext());\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (settings == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_SETTING_NULL, promise);\n            return;\n        }\n        if (modelInputs == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_INPUT_NULL, promise);\n            return;\n        }\n        if (modelExecutorSetting == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting)\n                .exec(modelInputs, settings)\n                .addOnSuccessListener(mlModelOutputs -> handleResult(\"exec\",\n                    HMSResultCreator.getInstance().customModelResult(mlModelOutputs), promise))\n                .addOnFailureListener(e -> handleResult(\"exec\", e, promise));\n        } catch (MLException e) {\n            handleResult(\"exec\", e, promise);\n        }\n    }\n\n    /**\n     * Stops an inference task to release resources.\n     *\n     * @param isRemote remote or local model\n     * @param modelConfig model configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(boolean isRemote, ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"close\");\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (modelExecutorSetting == null) {\n            handleResult(\"close\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting).close();\n            handleResult(\"close\", SUCCESS, promise);\n        } catch (MLException | IOException e) {\n            handleResult(\"close\", e, promise);\n        }\n    }\n\n    /**\n     * Obtains the channel index based on the output channel name.\n     *\n     * @param isRemote local or remote model\n     * @param channelName channel name\n     * @param modelConfig model configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getOutputIndex(boolean isRemote, String channelName, ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"getOutputIndex\");\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (modelExecutorSetting == null) {\n            handleResult(\"getOutputIndex\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting)\n                .getOutputIndex(channelName)\n                .addOnSuccessListener(\n                    integer -> handleResult(\"getOutputIndex\", HMSResultCreator.getInstance().integerResult(integer),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getOutputIndex\", e, promise));\n        } catch (MLException e) {\n            handleResult(\"getOutputIndex\", e, promise);\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/modelrelatedservices/HMSModelDownload.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.modelrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.DOWNLOAD_ON_PROCESS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.MODEL_CUSTOM_TAG;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.MODEL_DOWNLOAD_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.MODEL_TRANSLATE_TAG;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.MODEL_TTS_TAG;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.SUCCESS;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.custom.MLCustomRemoteModel;\nimport com.huawei.hms.mlsdk.model.download.MLLocalModelManager;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadListener;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslatorModel;\nimport com.huawei.hms.mlsdk.tts.MLTtsLocalModel;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.Set;\n\npublic class HMSModelDownload extends HMSBase implements MLModelDownloadListener {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSModelDownload(ReactApplicationContext reactContext) {\n        super(reactContext, HMSModelDownload.class.getSimpleName(), MODEL_DOWNLOAD_CONSTANTS);\n    }\n\n    /**\n     * Downloads a specified model from the cloud based on a specified download condition.\n     * If the download condition is not met, a failure message will be returned.\n     * If the model does not exist locally or a new version is available on the cloud, the model will be downloaded.\n     * Otherwise, the call of this method will stop immediately and onSuccess will be called.\n     *\n     * @param modelConfig specifies model\n     * @param strategyConfig includes download strategy\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void downloadModel(ReadableMap modelConfig, ReadableMap strategyConfig, final Promise promise) {\n        startMethodExecTimer(\"downloadModel\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"downloadModel\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .downloadModel(remoteModel, HMSObjectCreator.getInstance().createModelDownloadStrategy(strategyConfig),\n                this)\n            .addOnSuccessListener(aVoid -> handleResult(\"downloadModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"downloadModel\", e, promise));\n    }\n\n    /**\n     * Deletes a specified model from the device.\n     * If the model has not been downloaded or is being downloaded, a failure message will be returned.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void deleteModel(ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"deleteModel\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"deleteModel\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .deleteModel(remoteModel)\n            .addOnSuccessListener(aVoid -> handleResult(\"deleteModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"deleteModel\", e, promise));\n    }\n\n    /**\n     * Checks whether a specified model has been downloaded to the device.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isModelExist(ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"isModelExists\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"isModelExists\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .isModelExist(remoteModel)\n            .addOnSuccessListener(\n                aBoolean -> handleResult(\"isModelExists\", HMSResultCreator.getInstance().getBooleanResult(aBoolean),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"isModelExists\", e, promise));\n    }\n\n    /**\n     * Queries the model set that has been downloaded to a local path.\n     *\n     * @param modelTag Tag of the model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getModels(int modelTag, final Promise promise) {\n        startMethodExecTimer(\"getModels\");\n\n        switch (modelTag) {\n            case MODEL_TTS_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLTtsLocalModel.class), promise);\n                return;\n            case MODEL_TRANSLATE_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLLocalTranslatorModel.class), promise);\n                return;\n            case MODEL_CUSTOM_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLCustomRemoteModel.class), promise);\n                return;\n            default:\n                handleResult(\"getModels\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Queries the storage path of a specified model on the device.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getRecentModelFile(final ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"getRecentModelFile\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"getRecentModelFile\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .getRecentModelFile(remoteModel)\n            .addOnSuccessListener(\n                file -> handleResult(\"getRecentModelFile\", HMSResultCreator.getInstance().getFilePathResult(file),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"getRecentModelFile\", e, promise));\n    }\n\n    @Override\n    public void onProcess(long alreadyDownLength, long totalLength) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"alreadyDownloadLength\", Long.toString(alreadyDownLength));\n        wm.putString(\"totalLength\", Long.toString(totalLength));\n        sendEvent(DOWNLOAD_ON_PROCESS, \"onProcess\", wm);\n    }\n\n    private <T extends MLRemoteModel> void handleGetModels(Task<Set<T>> task, Promise promise) {\n        task.addOnSuccessListener(\n            models -> handleResult(\"getModels\", HMSResultCreator.getInstance().getModels((Set<MLRemoteModel>) models),\n                promise)).addOnFailureListener(e -> handleResult(\"getModels\", e, promise));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/nlprelatedservices/HMSTextEmbedding.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.nlprelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TEXT_EMBED_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingException;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\npublic class HMSTextEmbedding extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTextEmbedding(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextEmbedding.class.getSimpleName(), TEXT_EMBED_CONSTANTS);\n    }\n\n    /**\n     * Queries the sentence vector asynchronously.\n     *\n     * @param sentence sentence to be embedded\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSentenceVector(String sentence, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeSentenceVector\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSentenceVector(sentence)\n            .addOnSuccessListener(floats -> handleResult(\"analyzeSentenceVector\",\n                HMSResultCreator.getInstance().getTextEmbedVectorResult(floats), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSentenceVector\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries the similarity between two sentences. The similarity range is [–1,1].\n     *\n     * @param sentenceFirst first sentence\n     * @param sentenceSecond second sentence\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSentencesSimilarity(String sentenceFirst, String sentenceSecond, String language,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeSentencesSimilarity\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSentencesSimilarity(sentenceFirst, sentenceSecond)\n            .addOnSuccessListener(\n                aFloat -> handleResult(\"analyzeSentencesSimilarity\", HMSResultCreator.getInstance().floatResult(aFloat),\n                    promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSentencesSimilarity\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries a specified number of similar words.\n     *\n     * @param word a word\n     * @param similarNum Number of similar words. The value range is [1,30].\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSimilarWords(String word, int similarNum, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeSimilarWords\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSimilarWords(word, similarNum)\n            .addOnSuccessListener(list -> handleResult(\"analyzeSimilarWords\",\n                HMSResultCreator.getInstance().analyseSimilarWordsResult(list), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSimilarWords\", e, promise));\n    }\n\n    /**\n     * Queries the word vector asynchronously.\n     *\n     * @param word a word\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordVector(String word, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordVector\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordVector(word)\n            .addOnSuccessListener(floats -> handleResult(\"analyzeWordVector\",\n                HMSResultCreator.getInstance().getTextEmbedVectorResult(floats), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordVector\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries the similarity between two words. The similarity range is [–1,1].\n     *\n     * @param wordFirst first word\n     * @param wordSecond second word\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordsSimilarity(String wordFirst, String wordSecond, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordsSimilarity\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordsSimilarity(wordFirst, wordSecond)\n            .addOnSuccessListener(\n                aFloat -> handleResult(\"analyzeWordsSimilarity\", HMSResultCreator.getInstance().floatResult(aFloat),\n                    promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordsSimilarity\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries dictionary version information.\n     *\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getVocabularyVersion(String language, final Promise promise) {\n        startMethodExecTimer(\"getVocabularyVersion\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.getVocabularyVersion()\n            .addOnSuccessListener(mlVocabularyVersion -> handleResult(\"getVocabularyVersion\",\n                HMSResultCreator.getInstance().vocabularyVersionResult(mlVocabularyVersion), promise))\n            .addOnFailureListener(e -> handleException(\"getVocabularyVersion\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries word vectors in batches. (The number of words ranges from 1 to 500.)\n     *\n     * @param words list of words\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordVectorBatch(ReadableArray words, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordVectorBatch\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordVectorBatch(HMSUtils.getInstance().convertRaToStringSet(words))\n            .addOnSuccessListener(stringMap -> handleResult(\"analyzeWordVectorBatch\",\n                HMSResultCreator.getInstance().vectorBatchResult(stringMap), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordVectorBatch\", e, promise));\n    }\n\n    /**\n     * Handles on failure exception and resolves promise\n     *\n     * @param methodName method name\n     * @param e exception object\n     * @param promise A Promise that resolves a result object\n     */\n    private void handleException(String methodName, Exception e, Promise promise) {\n        if (e instanceof MLTextEmbeddingException) {\n            MLTextEmbeddingException e1 = (MLTextEmbeddingException) e;\n            handleResult(methodName, UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()), promise);\n        } else {\n            handleResult(methodName, e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSBankCardRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.BCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.BCR_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCapture;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSBankCardRecognition extends HMSBase implements MLBcrCapture.Callback {\n    private Promise captureResultPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSBankCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSBankCardRecognition.class.getSimpleName(), BCR_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Start an activity to capture bank card according to given configurations and sets callback\n     *\n     * @param bcrCaptureConfiguration capture configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureFrame(ReadableMap bcrCaptureConfiguration, final Promise promise) {\n        startMethodExecTimer(\"captureFrame\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"captureFrame\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLBcrCapture bcrCapture = HMSObjectCreator.getInstance().createBcrCapture(bcrCaptureConfiguration);\n        captureResultPromise = promise;\n        bcrCapture.captureFrame(currentActivity, this);\n    }\n\n    @Override\n    public void onSuccess(MLBcrCaptureResult mlBcrCaptureResult) {\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), mlBcrCaptureResult.getNumberBitmap())\n            .addOnSuccessListener(\n                s -> sendEvent(BCR_IMAGE_SAVE, \"onSuccess\", HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(\n                e -> sendEvent(BCR_IMAGE_SAVE, \"onSuccess\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n\n        handleResult(\"MLBcrCapture.Callback\",\n            HMSResultCreator.getInstance().getBankCardRecognitionSuccessResults(mlBcrCaptureResult),\n            captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onCanceled() {\n        handleResult(\"MLBcrCapture.Callback\", CANCEL, captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onFailure(int i, Bitmap bitmap) {\n        handleResult(\"MLBcrCapture.Callback\", FAILURE.getStatusAndMessage(i, null), captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onDenied() {\n        handleResult(\"MLBcrCapture.Callback\", DENY, captureResultPromise);\n        captureResultPromise = null;\n    }\n\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSDocumentRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.DOCUMENT_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.document.MLDocumentAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSDocumentRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSDocumentRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSDocumentRecognition.class.getSimpleName(), DOCUMENT_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Detects document information in an input image.\n     *\n     * @param isStop if true releases resources for analyzer. Recommended to use this in latest frame for better performance.\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param documentConfiguration Analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap documentConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            promise.resolve(FRAME_NULL.getStatusAndMessage());\n            return;\n        }\n\n        MLDocumentAnalyzer documentAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentAnalyzer(documentConfiguration);\n        documentAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlDocument -> {\n            if (isStop) {\n                stopSilent(documentAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getDocumentRecognitionResult(mlDocument),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(documentAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param documentAnalyzer analyzer\n     */\n    private void stopSilent(MLDocumentAnalyzer documentAnalyzer) {\n        try {\n            documentAnalyzer.stop();\n            Log.i(getName(), \"MLDocumentAnalyzer stopped\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLDocumentAnalyzer not stopped because :\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSFormRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzer;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionConstant;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.google.gson.JsonObject;\n\nimport org.json.JSONException;\n\nimport java.io.IOException;\n\npublic class HMSFormRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSFormRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSFormRecognition.class.getSimpleName(), null);\n    }\n\n    /**\n     * Asynchronous calling entry of form recognition.\n     *\n     * @param isStop if true stops analyzer and releases resources silently. Using in the last frame recognition recommended\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLFormRecognitionAnalyzer formRecognitionAnalyzer = HMSObjectCreator.getInstance()\n            .createFormRecognizerAnalyzer();\n        formRecognitionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(jsonObject -> {\n            if (isStop) {\n                stopAnalyzer(formRecognitionAnalyzer);\n            }\n\n            try {\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getFormRecognitionResult(jsonObject),\n                    promise);\n            } catch (JSONException e) {\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            }\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(formRecognitionAnalyzer);\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Synchronous calling entry of form recognition.\n     *\n     * @param isStop if true stops analyzer and releases resources silently. Using in the last frame recognition recommended\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLFormRecognitionAnalyzer formRecognitionAnalyzer = HMSObjectCreator.getInstance()\n            .createFormRecognizerAnalyzer();\n        SparseArray<JsonObject> recognizeResult = formRecognitionAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopAnalyzer(formRecognitionAnalyzer);\n        }\n\n        if (recognizeResult != null\n            && recognizeResult.get(0).get(\"retCode\").getAsInt() == MLFormRecognitionConstant.SUCCESS) {\n            try {\n                handleResult(\"analyzeFrame\",\n                    HMSResultCreator.getInstance().getSyncFormRecognitionResult(recognizeResult), promise);\n            } catch (JSONException e) {\n                handleResult(\"analyzeFrame\", e, promise);\n            }\n        } else {\n            handleResult(\"analyzeFrame\", FAILURE, promise);\n        }\n    }\n\n    private void stopAnalyzer(MLFormRecognitionAnalyzer formRecognitionAnalyzer) {\n        try {\n            formRecognitionAnalyzer.stop();\n            Log.i(getName(), \"MLFormRecognitionAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLFormRecognitionAnalyzer stop :\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSGeneralCardRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GCR_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\n\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCapture;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureResult;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSGeneralCardRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSGeneralCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSGeneralCardRecognition.class.getSimpleName(), GCR_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Enables the plug-in for recognizing general cards in camera streams.\n     *\n     * @param language language code\n     * @param uiConfiguration ui configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void capturePreview(String language, ReadableMap uiConfiguration, final Promise promise) {\n        startMethodExecTimer(\"capturePreview\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"capturePreview\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, uiConfiguration);\n        gcrManager.capturePreview(currentActivity, null, callbackResult(promise));\n    }\n\n    /**\n     * Enables the plug-in for taking a photo of a general card and recognizing the general card on the photo.\n     *\n     * @param language language code\n     * @param uiConfiguration ui configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void capturePhoto(String language, ReadableMap uiConfiguration, final Promise promise) {\n        startMethodExecTimer(\"capturePhoto\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"capturePhoto\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, uiConfiguration);\n        gcrManager.capturePhoto(currentActivity, null, callbackResult(promise));\n    }\n\n    /**\n     * Enables the plug-in for recognizing static images of general cards.\n     *\n     * @param language language code\n     * @param imageUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureImage(String language, String imageUri, final Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, null);\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            gcrManager.captureImage(bitmap, null, callbackResult(promise));\n        } catch (IOException e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @return MLGcrCapture.Callback\n     */\n    private MLGcrCapture.Callback callbackResult(Promise promise) {\n        return new MLGcrCapture.Callback() {\n            @Override\n            public int onResult(MLGcrCaptureResult mlGcrCaptureResult, Object o) {\n                if (mlGcrCaptureResult == null) {\n                    return MLGcrCaptureResult.CAPTURE_CONTINUE;\n                }\n\n                HMSBackgroundTasks.getInstance()\n                    .saveImageAndGetUri(getContext(), mlGcrCaptureResult.cardBitmap)\n                    .addOnSuccessListener(\n                        s -> sendEvent(GCR_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getStringResult(s)))\n                    .addOnFailureListener(\n                        e -> sendEvent(GCR_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n\n                handleResult(\"MLGcrCapture.Callback\",\n                    HMSResultCreator.getInstance().getGeneralCardRecognitionSuccessResult(mlGcrCaptureResult), promise);\n                return MLGcrCaptureResult.CAPTURE_STOP;\n            }\n\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLGcrCapture.Callback\", CANCEL, promise);\n            }\n\n            @Override\n            public void onFailure(int i, Bitmap bitmap) {\n                handleResult(\"MLGcrCapture.Callback\", FAILURE.getStatusAndMessage(i, null), promise);\n            }\n\n            @Override\n            public void onDenied() {\n                handleResult(\"MLGcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSIDCardRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.GCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.IDCARD_IMAGE_SAVE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.IDCARD_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCapture;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport java.io.IOException;\n\npublic class HMSIDCardRecognition extends HMSBase {\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSIDCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSIDCardRecognition.class.getSimpleName(), IDCARD_PLUGIN_CONSTANTS);\n    }\n\n    @ReactMethod\n    public void captureCamera(boolean save, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"captureCamera\");\n        try {\n            Activity currentActivity = getCurrentActivity();\n\n            MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()\n                    .setFront(isFront)\n                    .create();\n            MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.capture(callbackResult(save, isFront, promise), currentActivity);\n        } catch (Exception e) {\n            handleResult(\"captureCamera\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void captureImage(String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n\n            MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()\n                    .setFront(isFront)\n                    .create();\n            MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.captureImage(bitmap, callbackResult(false, isFront, promise));\n        } catch (Exception e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void asyncAnalyzerImageOnDevice(boolean isStop, String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"CN\", isFront);\n            Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);\n\n            task.addOnSuccessListener(mlIdCard -> {\n                // Recognition success.\n                WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException e) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", wm, promise);\n            }).addOnFailureListener(e -> {\n                // Recognition failure.\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n            });\n        } catch (Exception e) {\n            handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void analyzerImageOnDevice(boolean isStop, String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"analyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"CN\", isFront);\n            SparseArray<MLIdCard> array = analyzer.analyseFrame(frame);\n            int key = array.keyAt(0);\n            MLIdCard mlIdCard = array.get(key);\n            WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n            if (isStop) {\n                try {\n                    analyzer.stop();\n                } catch (IOException ex) {\n                    handleResult(\"analyzerImageOnDevice\", ex, promise);\n                }\n            }\n            handleResult(\"analyzerImageOnDevice\", wm, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @param isFront Is front side id card\n     * @param save save to device\n     * @return MLCnIcrCapture.Callback\n     */\n    private MLCnIcrCapture.CallBack callbackResult(boolean save, boolean isFront, Promise promise) {\n        return new MLCnIcrCapture.CallBack() {\n            // Identify successful processing.\n            @Override\n            public void onSuccess(MLCnIcrCaptureResult idCardResult) {\n                Log.i(\"SUCCESS\", \"IdCallBack onRecSuccess\");\n                if (idCardResult == null) {\n                    Log.i(\"ERR\", \"IdCallBack onRecSuccess idCardResult is null\");\n                    return;\n                }\n\n                if (save) {\n                    HMSBackgroundTasks.getInstance()\n                            .saveImageAndGetUri(getContext(), idCardResult.cardBitmap)\n                            .addOnSuccessListener(\n                                    s -> sendEvent(IDCARD_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getIDCardImage(s, isFront)))\n                            .addOnFailureListener(\n                                    e -> sendEvent(IDCARD_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n                }\n\n                WritableMap cardResultFront = HMSResultCreator.getInstance().getFormatIdCardResult(idCardResult, isFront);\n                handleResult(\"MLCnIcrCapture.Callback\", cardResultFront, promise);\n            }\n\n            // User cancellation processing.\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLCnIcrCapture.Callback\", CANCEL, promise);\n            }\n\n            // Identify failure processing.\n            @Override\n            public void onFailure(int retCode, Bitmap bitmap) {\n                handleResult(\"MLCnIcrCapture.Callback\", FAILURE.getStatusAndMessage(retCode, null), promise);\n            }\n\n            // Camera unavailable processing, the reason that the camera is unavailable is generally that the user has not been granted camera permissions.\n            @Override\n            public void onDenied() {\n                handleResult(\"MLCnIcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSTextRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.TEXT_SETTING_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.mlsdk.text.MLTextAnalyzer;\nimport com.huawei.hms.rn.ml.HMSBase;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSTextRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTextRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextRecognition.class.getSimpleName(), TEXT_SETTING_CONSTANTS);\n    }\n\n    /**\n     * Runs analyze operation asynchronously\n     *\n     * @param isRemote for analyzer setting on-cloud or on-device\n     * @param isStop resources for analyzer. Recommended to use this in latest frame\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param analyzerConfiguration Analyzer configuration for on-cloud or on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextAnalyzer textAnalyzer = HMSObjectCreator.getInstance()\n            .createTextAnalyzer(analyzerConfiguration, isRemote);\n        textAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlText -> {\n            if (isStop) {\n                stopSilent(textAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getTextRecognitionResult(mlText), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(textAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Runs analyze operation synchronously\n     *\n     * @param isStop if true releases resources for analyzer. Recommended to use this in latest frame for better performance\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param analyzerConfiguration Analyzer configuration to create on-device analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextAnalyzer textAnalyzer = HMSObjectCreator.getInstance()\n            .createTextAnalyzer(analyzerConfiguration, getContext());\n\n        if (!textAnalyzer.isAvailable()) {\n            handleResult(\"analyzeFrame\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        SparseArray<MLText.Block> result = textAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopSilent(textAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getTextRecognitionResult(result), promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param textAnalyzer analyzer\n     */\n    private void stopSilent(@Nonnull MLTextAnalyzer textAnalyzer) {\n        try {\n            textAnalyzer.stop();\n            Log.i(getName(), \"MLTextAnalyzer stop : OK\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLTextAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-ml/android/src/main/java/com/huawei/hms/rn/ml/textrelatedservices/HMSVietnamCardRecognition.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.textrelatedservices;\n\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ICRVN_IMAGE_SAVE;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSConstants.ICRVN_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.ml.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCapture;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.card.MLCardAnalyzerFactory;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzerSetting;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.ml.HMSBase;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.ml.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.ml.helpers.utils.HMSBackgroundTasks;\n\nimport java.io.IOException;\n\npublic class HMSVietnamCardRecognition extends HMSBase {\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSVietnamCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSVietnamCardRecognition.class.getSimpleName(), ICRVN_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Enables the plug-in for recognizing static images of vietnam id card.\n     *\n     * @param imageUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureImage(String imageUri, Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n\n            MLVnIcrCaptureConfig config = new MLVnIcrCaptureConfig.Factory().create();\n            MLVnIcrCapture icrCapture = MLVnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.captureImage(bitmap, callbackResult(false, promise));\n        } catch (Exception e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void asyncAnalyzerImageOnDevice(boolean isStop, String imageUri, Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"VN\", true);\n            Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);\n            task.addOnSuccessListener(mlIdCard -> {\n                // Recognition success.\n                WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", wm, promise);\n            }).addOnFailureListener(e -> {\n                // Recognition failure.\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n            });\n        } catch (Exception e) {\n            handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void analyzerImageOnDevice(boolean isStop, String imageUri, Promise promise) {\n        startMethodExecTimer(\"analyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"VN\", true);\n\n            SparseArray<MLIdCard> array = analyzer.analyseFrame(frame);\n            int key = array.keyAt(0);\n            MLIdCard mlIdCard = array.get(key);\n            WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n            handleResult(\"analyzerImageOnDevice\", wm, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    /**\n     * Enables the plugin to recognize the Vietnamese ID card with the camera.\n     *\n     * @param save Save capture\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureCamera(boolean save, Promise promise) {\n        startMethodExecTimer(\"captureCamera\");\n        Activity currentActivity = getCurrentActivity();\n\n        try {\n            MLVnIcrCaptureConfig config = new MLVnIcrCaptureConfig.Factory().create();\n            MLVnIcrCapture icrCapture = MLVnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.capture(callbackResult(save, promise), currentActivity);\n        } catch (Exception e) {\n            handleResult(\"captureCamera\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @param save Save capture\n     * @return MLVnIcrCapture.CallBack\n     */\n    private MLVnIcrCapture.CallBack callbackResult(boolean save, Promise promise) {\n        return new MLVnIcrCapture.CallBack() {\n            // Identify successful processing.\n            @Override\n            public void onSuccess(MLVnIcrCaptureResult idCardResult) {\n                Log.i(\"SUCCESS\", \"IdCallBack onRecSuccess\");\n                if (idCardResult == null) {\n                    Log.i(\"ERR\", \"IdCallBack onRecSuccess idCardResult is null\");\n                    return;\n                }\n\n                if (save) {\n                    HMSBackgroundTasks.getInstance()\n                            .saveImageAndGetUri(getContext(), idCardResult.getCardBitmap())\n                            .addOnSuccessListener(\n                                    s -> sendEvent(ICRVN_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getStringResult(s)))\n                            .addOnFailureListener(\n                                    e -> sendEvent(ICRVN_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n                }\n\n                WritableMap cardResultFront = HMSResultCreator.getInstance().getVNFormatIdCardResult(idCardResult);\n                handleResult(\"MLVnIcrCapture.Callback\", cardResultFront, promise);\n            }\n\n            // User cancellation processing.\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLVnIcrCapture.Callback\", CANCEL, promise);\n            }\n\n            // Identify failure processing.\n            @Override\n            public void onFailure(int retCode, Bitmap bitmap) {\n                handleResult(\"MLVnIcrCapture.Callback\", FAILURE.getStatusAndMessage(retCode, null), promise);\n            }\n\n            // Camera unavailable processing, the reason that the camera is unavailable is generally that the user has not been granted camera permissions.\n            @Override\n            public void onDenied() {\n                handleResult(\"MLVnIcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/android/src/main/res/layout/hms_product_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.huawei.hms.rn.ml.helpers.views.HMSBottomSheetGridView\n            android:id=\"@+id/hms_bottom_sheet_grid_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:columnCount=\"2\" />\n\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-ml/android/src/main/res/layout/hms_product_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:fresco=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.facebook.drawee.view.SimpleDraweeView\n            android:id=\"@+id/hms_product_item_image_view\"\n            android:layout_width=\"120dp\"\n            android:layout_height=\"120dp\"\n            android:layout_gravity=\"center\"\n            fresco:failureImage=\"@android:drawable/ic_menu_gallery\"\n            fresco:placeholderImage=\"@android:drawable/ic_menu_gallery\" />\n\n    <TextView\n            android:id=\"@+id/hms_product_item_text_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:gravity=\"center\"\n            android:textColor=\"@android:color/black\"\n            android:textSize=\"16sp\" />\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-ml/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\npackage-lock.json"
  },
  {
    "path": "react-native-hms-ml/example/App.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image } from 'react-native';\nimport { styles } from './src/Styles';\nimport StartPage from './src/StartPage';\nimport Translation from './src/HmsLanguageVoiceRelatedServices/Translation';\nimport LanguageDetection from './src/HmsLanguageVoiceRelatedServices/LanguageDetection';\nimport TextToSpeech from './src/HmsLanguageVoiceRelatedServices/TextToSpeech';\nimport RealTimeTranscription from './src/HmsLanguageVoiceRelatedServices/RealTimeTranscription';\nimport AudioFileTranscription from './src/HmsLanguageVoiceRelatedServices/AudioFileTranscription';\nimport SoundDetection from './src/HmsLanguageVoiceRelatedServices/SoundDetection';\nimport AutomaticSpeechRecognition from './src/HmsLanguageVoiceRelatedServices/AutomaticSpeechRecognition';\nimport TextEmbedding from './src/HmsNaturalLanguageProcessingServices/TextEmbedding';\nimport CustomModel from './src/HmsOtherServices/CustomModel';\nimport ModelDownload from './src/HmsOtherServices/ModelDownload';\nimport TextRecognition from './src/HmsTextRelatedServices/TextRecognition';\nimport DocumentRecognition from './src/HmsTextRelatedServices/DocumentRecognition';\nimport BankCardRecognition from './src/HmsTextRelatedServices/BankCardRecognition';\nimport GeneralCardRecognition from './src/HmsTextRelatedServices/GeneralCardRecognition';\nimport IDCardRecognition from './src/HmsTextRelatedServices/IDCardRecognition';\nimport VietnamIDCardRecognition from './src/HmsTextRelatedServices/VietnamIDCardRecognition';\nimport FormRecognition from './src/HmsTextRelatedServices/FormRecognition';\nimport ImageClassification from './src/HmsImageRelatedServices/ImageClassification';\nimport ObjectDetection from './src/HmsImageRelatedServices/ObjectDetection';\nimport LandmarkRecognition from './src/HmsImageRelatedServices/LandmarkRecognition';\nimport ImageSegmentation from './src/HmsImageRelatedServices/ImageSegmentation';\nimport ProductVisualSearch from './src/HmsImageRelatedServices/ProductVisualSearch';\nimport ImageSuperResolution from './src/HmsImageRelatedServices/ImageSuperResolution';\nimport DocumentSkewCorrection from './src/HmsImageRelatedServices/DocumentSkewCorrection';\nimport TextImageSuperResolution from './src/HmsImageRelatedServices/TextImageSuperResolution';\nimport SceneDetection from './src/HmsImageRelatedServices/SceneDetection';\nimport Frame from './src/HmsImageRelatedServices/Frame';\nimport FaceRecognition from './src/HmsFaceBodyRelatedServices/FaceRecognition';\nimport FaceVerification from './src/HmsFaceBodyRelatedServices/FaceVerification';\nimport SkeletonDetection from './src/HmsFaceBodyRelatedServices/SkeletonDetection';\nimport LivenessDetection from './src/HmsFaceBodyRelatedServices/LivenessDetection';\nimport HandKeypointDetection from './src/HmsFaceBodyRelatedServices/HandDetection';\nimport TextRecognitionLive from './src/HmsTextRelatedServices/TextRecognitionLive';\nimport ClassificationLive from './src/HmsImageRelatedServices/ImageClassificationLive';\nimport ObjectDetectionLive from './src/HmsImageRelatedServices/ObjectDetectionLive';\nimport SceneDetectionLive from './src/HmsImageRelatedServices/SceneDetectionLive';\nimport FaceRecognitionLive from './src/HmsFaceBodyRelatedServices/FaceRecognitionLive';\nimport SkeletonDetectionLive from './src/HmsFaceBodyRelatedServices/SkeletonDetectionLive';\nimport HandDetectionLive from './src/HmsFaceBodyRelatedServices/HandDetectionLive';\nimport GestureDetectionLive from './src/HmsFaceBodyRelatedServices/GestureDetectionLive';\nimport GestureDetection from './src/HmsFaceBodyRelatedServices/GestureDetection';\nimport CompositeAnalyzer from './src/HmsOtherServices/HMSCompositeAnalyzer';\n\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'Hms React Native ML Kit Demo',\n    },\n    path: 'start',\n  },\n  Translation: {\n    screen: Translation,\n    navigationOptions: {\n      headerTitle: 'Translate Service',\n    },\n    path: 'start/translation',\n  },\n  LanguageDetection: {\n    screen: LanguageDetection,\n    navigationOptions: {\n      headerTitle: 'Language Detection',\n    },\n    path: 'start/languagedetection',\n  },\n  TextToSpeech: {\n    screen: TextToSpeech,\n    navigationOptions: {\n      headerTitle: 'Text to Speech',\n    },\n    path: 'start/tts',\n  },\n  AudioFileTranscription: {\n    screen: AudioFileTranscription,\n    navigationOptions: {\n      headerTitle: 'Audio File Transcription',\n    },\n    path: 'start/aft',\n  },\n  RealTimeTranscription: {\n    screen: RealTimeTranscription,\n    navigationOptions: {\n      headerTitle: 'Speech Real Time Transcription',\n    },\n    path: 'start/srtt',\n  },\n  SoundDetection: {\n    screen: SoundDetection,\n    navigationOptions: {\n      headerTitle: 'Sound Detection',\n    },\n    path: 'start/sounddect',\n  },\n  AutomaticSpeechRecognition: {\n    screen: AutomaticSpeechRecognition,\n    navigationOptions: {\n      headerTitle: 'Automatic Speech Recognition',\n    },\n    path: 'start/asr',\n  },\n  TextEmbedding: {\n    screen: TextEmbedding,\n    navigationOptions: {\n      headerTitle: 'Text Embedding',\n    },\n    path: 'start/textembedding',\n  },\n  CustomModel: {\n    screen: CustomModel,\n    navigationOptions: {\n      headerTitle: 'Custom Model',\n    },\n    path: 'start/custommodel',\n  },\n  ModelDownload: {\n    screen: ModelDownload,\n    navigationOptions: {\n      headerTitle: 'Model Download',\n    },\n    path: 'start/modeldownload',\n  },\n  TextRecognition: {\n    screen: TextRecognition,\n    navigationOptions: {\n      headerTitle: 'Text Recognition',\n    },\n    path: 'start/textrecognition',\n  },\n  DocumentRecognition: {\n    screen: DocumentRecognition,\n    navigationOptions: {\n      headerTitle: 'Document Recognition',\n    },\n    path: 'start/documentrecognition',\n  },\n  BankCardRecognition: {\n    screen: BankCardRecognition,\n    navigationOptions: {\n      headerTitle: 'Bank Card Recognition',\n    },\n    path: 'start/bankcardrecognition',\n  },\n  GeneralCardRecognition: {\n    screen: GeneralCardRecognition,\n    navigationOptions: {\n      headerTitle: 'General Card Recognition',\n    },\n    path: 'start/generalcardrecognition',\n  },\n  IDCardRecognition: {\n    screen: IDCardRecognition,\n    navigationOptions: {\n      headerTitle: 'ID Card Recognition',\n    },\n    path: 'start/idcardrecognition',\n  },\n  VietnamIDCardRecognition: {\n    screen: VietnamIDCardRecognition,\n    navigationOptions: {\n      headerTitle: 'Vietnam ID Card Recognition',\n    },\n    path: 'start/vietnamidcardrecognition',\n  },\n  FormRecognition: {\n    screen: FormRecognition,\n    navigationOptions: {\n      headerTitle: 'Form Recognition',\n    },\n    path: 'start/formrecognition',\n  },\n  ImageClassification: {\n    screen: ImageClassification,\n    navigationOptions: {\n      headerTitle: 'Image Classification',\n    },\n    path: 'start/classification',\n  },\n  ObjectDetection: {\n    screen: ObjectDetection,\n    navigationOptions: {\n      headerTitle: 'Object Detection',\n    },\n    path: 'start/objectdetection',\n  },\n  LandmarkRecognition: {\n    screen: LandmarkRecognition,\n    navigationOptions: {\n      headerTitle: 'Landmark Recognition',\n    },\n    path: 'start/landmarkrecognition',\n  },\n  ImageSegmentation: {\n    screen: ImageSegmentation,\n    navigationOptions: {\n      headerTitle: 'Image Segmentation',\n    },\n    path: 'start/imseg',\n  },\n  ProductVisualSearch: {\n    screen: ProductVisualSearch,\n    navigationOptions: {\n      headerTitle: 'Product Vision Search',\n    },\n    path: 'start/productvision',\n  },\n  ImageSuperResolution: {\n    screen: ImageSuperResolution,\n    navigationOptions: {\n      headerTitle: 'Image Super Resolution',\n    },\n    path: 'start/imagesuperresolution',\n  },\n  DocumentSkewCorrection: {\n    screen: DocumentSkewCorrection,\n    navigationOptions: {\n      headerTitle: 'Document Skew Correction',\n    },\n    path: 'start/documentskewcorrection',\n  },\n  TextImageSuperResolution: {\n    screen: TextImageSuperResolution,\n    navigationOptions: {\n      headerTitle: 'Text Image Super Resolution',\n    },\n    path: 'start/textimagesuperresolution',\n  },\n  SceneDetection: {\n    screen: SceneDetection,\n    navigationOptions: {\n      headerTitle: 'Scene Detection',\n    },\n    path: 'start/scenedetection',\n  },\n  Frame: {\n    screen: Frame,\n    navigationOptions: {\n      headerTitle: 'Frame',\n    },\n    path: 'start/frame',\n  },\n  FaceRecognition: {\n    screen: FaceRecognition,\n    navigationOptions: {\n      headerTitle: 'Face Recognition',\n    },\n    path: 'start/facerecognition',\n  },\n  FaceVerification: {\n    screen: FaceVerification,\n    navigationOptions: {\n      headerTitle: 'Face Verification',\n    },\n    path: 'start/faceverification',\n  },\n  SkeletonDetection: {\n    screen: SkeletonDetection,\n    navigationOptions: {\n      headerTitle: 'Skeleton Detection',\n    },\n    path: 'start/skeletondetection',\n  },\n  LivenessDetection: {\n    screen: LivenessDetection,\n    navigationOptions: {\n      headerTitle: 'Liveness Detection',\n    },\n    path: 'start/livenessdetection',\n  },\n  HandKeypointDetection: {\n    screen: HandKeypointDetection,\n    navigationOptions: {\n      headerTitle: 'Hand Keypoint Detection',\n    },\n    path: 'start/handkeypointdetection',\n  },\n  TextRecognitionLive: {\n    screen: TextRecognitionLive,\n    navigationOptions: {\n      headerTitle: 'Text Recognition Live',\n    },\n    path: 'start/textrecognitionlive',\n  },\n  ClassificationLive: {\n    screen: ClassificationLive,\n    navigationOptions: {\n      headerTitle: 'Image Classification Live',\n    },\n    path: 'start/classificationlive',\n  },\n  ObjectDetectionLive: {\n    screen: ObjectDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Object Detection Live',\n    },\n    path: 'start/objectdetectionlive',\n  },\n  SceneDetectionLive: {\n    screen: SceneDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Scene Detection Live',\n    },\n    path: 'start/scenedetectionlive',\n  },\n  FaceRecognitionLive: {\n    screen: FaceRecognitionLive,\n    navigationOptions: {\n      headerTitle: 'Face Recognition Live',\n    },\n    path: 'start/facerecognitionlive',\n  },\n  SkeletonDetectionLive: {\n    screen: SkeletonDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Skeleton Detection Live',\n    },\n    path: 'start/skeletondetectionlive',\n  },\n  HandDetectionLive: {\n    screen: HandDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Hand Detection Live',\n    },\n    path: 'start/handkeypointdetectionlive',\n  },\n  GestureDetectionLive: {\n    screen: GestureDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Gesture Detection Live',\n    },\n    path: 'start/gesturedetectionlive',\n  },\n  GestureDetection: {\n    screen: GestureDetection,\n    navigationOptions: {\n      headerTitle: 'Gesture Detection',\n    },\n    path: 'start/gesturedetection',\n  },\n  CompositeAnalyzer: {\n    screen: CompositeAnalyzer,\n    navigationOptions: {\n      headerTitle: 'Composite Analyzer',\n    },\n    path: 'start/compositeanalyzer',\n  },\n};\n\nexport default class App extends Component {\n  state = {\n    pageItem: {\n      screen: StartPage,\n      navigationOptions: {\n        headerTitle: 'Hms React Native ML Kit Demo',\n      },\n      path: 'start',\n    },\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/README.md",
    "content": "# React-Native HMS ML - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native ML Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm install\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS ML - Demo is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile: \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    implementation \"com.facebook.react:react-native:+\"\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n\n    implementation 'com.android.support:multidex:1.0.3'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-ml/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.ml.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n\n    <application\n            android:name=\"com.huawei.hms.rn.ml.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/logo\"\n            android:label=\"RN ML Demo\"\n            android:roundIcon=\"@mipmap/logo\"\n            android:theme=\"@style/AppTheme\"\n            android:largeHeap=\"true\"\n            android:requestLegacyExternalStorage=\"true\">\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.ml.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RN ML Demo\"\n                android:launchMode=\"singleTask\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/src/main/java/com/huawei/hms/rn/ml/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.ml.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/src/main/java/com/huawei/hms/rn/ml/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.ml.demo;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-ml/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        minSdkVersion = 19\n        compileSdkVersion = 29\n        targetSdkVersion = 29\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.6.0.300'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-ml/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.33.1\n"
  },
  {
    "path": "react-native-hms-ml/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-ml/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-ml/example/android/settings.gradle",
    "content": "rootProject.name = 'com.huawei.hms.rn.ml.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\n"
  },
  {
    "path": "react-native-hms-ml/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.ml.demo\",\n  \"displayName\": \"HMS RN ML DEMO\"\n}"
  },
  {
    "path": "react-native-hms-ml/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-ml/example/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-ml/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-ml/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ml-demo\",\n  \"description\": \"React Native HMS ML Kit Demo\",\n  \"version\": \"3.5.0-301\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"@hmscore/react-native-hms-ml\": \"3.5.0-301\",\n    \"react-native-document-picker\": \"4.1.0\",\n    \"react-native-image-picker\": \"2.3.1\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/runtime\": \"^7.6.2\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/FaceRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid,\n  Image,\n  TextInput\n} from 'react-native';\nimport { HMSFaceRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class FaceRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      emotions: '',\n      isAnalyzeEnabled: false\n    };\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({ emotions: '', isAnalyzeEnabled: true }, () => {\n      isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n    });\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getFaceAnalyzerSetting = () => {\n    return {\n      featureType: HMSFaceRecognition.TYPE_FEATURES,\n      shapeType: HMSFaceRecognition.TYPE_SHAPES,\n      keyPointType: HMSFaceRecognition.TYPE_KEYPOINTS,\n      performanceType: HMSFaceRecognition.TYPE_SPEED,\n      tracingMode: HMSFaceRecognition.MODE_TRACING_ROBUST,\n      minFaceProportion: 0.5,\n      isPoseDisabled: false,\n      isTracingAllowed: false,\n      isMaxSizeFaceOnly: false\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSFaceRecognition.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSFaceRecognition.analyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (result.result.length > 0) {\n        this.state.isEnabled ? this.setState({ emotions: \"X :\" + result.result[0].faceEulerX.toString() + \" Y :\" + result.result[0].faceEulerY.toString() + \" Z :\" + result.result[0].faceEulerZ.toString() }) : this.setState({ emotions: JSON.stringify(result.result[0].emotions) });\n        ToastAndroid.showWithGravity(\"Recognition Completed. See console logs for details.\", ToastAndroid.LONG, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(\"No Face Found\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {(this.state.isEnabled ? '3D' : '2D') + \" RECOGNITION \"}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isAnalyzeEnabled}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.emotions}\n          placeholder=\"Recognition Result for One Face\"\n          multiline={true}\n          scrollEnabled={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\"\n            disabled={this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\"\n            disabled={this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/FaceRecognitionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSFaceRecognition } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class FaceRecognitionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        1,\n        {\n          featureType: HMSFaceRecognition.TYPE_FEATURES,\n          shapeType: HMSFaceRecognition.TYPE_SHAPES,\n          keyPointType: HMSFaceRecognition.TYPE_KEYPOINTS,\n          performanceType: HMSFaceRecognition.TYPE_SPEED,\n          tracingMode: HMSFaceRecognition.MODE_TRACING_ROBUST,\n          minFaceProportion: 0.3,\n          isPoseDisabled: false,\n          isTracingAllowed: false,\n          isMaxSizeFaceOnly: false\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.FACE_2D_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" face results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.FACE_2D_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.FACE_2D_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.FACE_2D_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/FaceVerification.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput\n} from 'react-native';\nimport { HMSFaceVerification, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class FaceVerification extends React.Component {\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      imageUriSecond: '',\n      btnEnableSecond: false,\n      btnCompareEnable: false,\n      log: [],\n      imageLayout: null,\n      imageRectangle: [],\n      imageTwoResult: null,\n      imageLayoutTwo: null,\n      imageRectangleTwo: [],\n    };\n\n    HMSFaceVerification.setMaxFaceDetected(3)\n      .then(() => {\n        HMSFaceVerification.getMaxFaceDetected().then((res) => console.log(res))\n      });\n  }\n\n  getFrameConfiguration = (uri) => {\n    return { filePath: uri };\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  start = async (isAsync) => {\n    let res = null;\n    if (isAsync) {\n      res = await HMSFaceVerification\n        .asyncCompare(false, this.getFrameConfiguration(this.state.imageUriSecond))\n        .catch(e => e);\n    } else {\n      res = await HMSFaceVerification\n        .compare(false, this.getFrameConfiguration(this.state.imageUriSecond))\n        .catch(e => e);\n    }\n    res = this.parseResult(res);\n    if (res.success && res.faces?.length > 0) {\n      this.calculate(\n        res.faces,\n        this.state.imageTwoResult.width,\n        this.state.imageTwoResult.height,\n        this.state.imageLayoutTwo,\n        (obj) => this.setState({ imageRectangleTwo: obj })\n      )\n    } else {\n      this.setState({imageRectangleTwo: []})\n    }\n    this.pushLog(`result ${JSON.stringify(res)}`);\n  }\n\n  pushLog = (str) => {\n    this.state.log = [`${new Date().toISOString()} -> ${str}`].concat(this.state.log)\n    this.setState({})\n  }\n\n  calculate = (faces, fullWidth, fullHeight, layout, setState) => {\n    let array = [];\n    faces.forEach(element => {\n      let arry = element.face.substring(5, element.face.length - 1).split('-');\n      let [beginPositionX, beginPositionY] = arry[0].split(',');\n      let [endPositionX, endPositionY] = arry[1].split(',');\n\n      let imageWidth = (fullWidth / fullHeight) * layout.height;\n      let increaseX = (layout.width - imageWidth) / 2;\n\n      let y = (imageWidth * beginPositionY / fullWidth) + layout.y;\n      let x = (layout.height * beginPositionX / fullHeight) + increaseX;\n      let height = layout.height * (endPositionY - beginPositionY) / fullHeight;\n      let width = imageWidth * (endPositionX - beginPositionX) / fullWidth;\n\n      array.push({ x, y, height, width })\n    });\n\n    setState(array);\n  }\n\n  selectImage = () => {\n    showImagePickerCustom()\n      .then(async (result) => {\n\n        if (!result) return;\n        this.state.imageRectangle = [];\n        this.setState({ imageUri: result.uri, imageRectangle: [] }, async () => {\n          setTimeout(async () => {\n            let res = await HMSFaceVerification\n              .loadTemplatePic(this.getFrameConfiguration(result.uri))\n              .catch(e => e);\n            res = await this.parseResult(res);\n            console.log(\"res\", res)\n            if (res.success && res.faces) {\n              this.state.btnEnableSecond = true;\n              this.calculate(\n                res.faces,\n                result.width,\n                result.height,\n                this.state.imageLayout,\n                (obj) => this.setState({ imageRectangle: obj })\n              )\n            }\n            else {\n              this.state.btnEnableSecond = false;\n              this.state.btnCompareEnable = false;\n            }\n            this.pushLog(`image ${JSON.stringify(res)}`);\n          }, 500);\n        })\n      })\n  }\n\n  selectImageTwo = () => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        this.state.imageTwoResult = result;\n        this.setState({ imageUriSecond: result?.uri, btnCompareEnable: true, imageRectangleTwo: [] })\n      })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={this.selectImage}\n            style={[styles.startButton, styles.enable]}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImage}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={{ uri: this.state.imageUri }}\n                onLayout={(e) => {\n                  this.state.imageLayout = e.nativeEvent.layout\n                }}\n              />\n              {this.state.imageRectangle.length > 0 && this.state.imageRectangle.map((item, index) => (\n                <View\n                  key={index}\n                  style={{\n                    borderWidth: 1,\n                    borderColor: 'red',\n                    height: item?.height,\n                    width: item?.width,\n                    position: 'absolute',\n                    top: item?.y,\n                    left: item?.x,\n                  }}\n                />\n              ))}\n            </TouchableOpacity>\n          }\n        </View>\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={this.selectImageTwo}\n            style={[styles.startButton, this.state.btnEnableSecond && styles.enable]}\n            disabled={!this.state.btnEnableSecond}\n          >\n            <Text style={styles.startButtonLabel}>Select Image Two</Text>\n          </TouchableOpacity>\n          {this.state.imageUriSecond !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImageTwo}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={{ uri: this.state.imageUriSecond }}\n                onLayout={(e) => {\n                  this.state.imageLayoutTwo = e.nativeEvent.layout\n                }}\n              />\n              {this.state.imageRectangleTwo.length > 0 && this.state.imageRectangleTwo.map((item, index) => (\n                <View\n                  key={index}\n                  style={{\n                    borderWidth: 1,\n                    borderColor: 'red',\n                    height: item?.height,\n                    width: item?.width,\n                    position: 'absolute',\n                    top: item?.y,\n                    left: item?.x,\n                  }}\n                />\n              ))}\n            </TouchableOpacity>\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, this.state.btnCompareEnable && styles.enable]}\n            underlayColor=\"#fff\"\n            disabled={!this.state.btnCompareEnable}\n            onPress={() => this.start(false)}\n          >\n            <Text style={styles.startButtonLabel}> COMPARE </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, this.state.btnCompareEnable && styles.enable]}\n            underlayColor=\"#fff\"\n            disabled={!this.state.btnCompareEnable}\n            onPress={() => this.start(true)}\n          >\n            <Text style={styles.startButtonLabel}> ASYNC COMPARE </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.log}>\n          {this.state.log.map((item, index) => (\n            <Text key={index}>{item}</Text>\n          ))}\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/GestureDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSApplication, HMSGestureDetection } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class GestureDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSGestureDetection.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSGestureDetection.analyzeFrame(true, this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(result.result.length + \" gesture detected. Please see the debug logs for details.\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/GestureDetectionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSGestureDetection } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class GestureDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        8, {}\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.GESTURE_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" gesture results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.GESTURE_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.GESTURE_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.GESTURE_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/HandDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSApplication, HMSHandKeypointDetection } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class HandKeypointDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getFaceAnalyzerSetting = () => {\n    return {\n      sceneType: HMSHandKeypointDetection.TYPE_KEYPOINT_ONLY,\n      maxHandResults: HMSHandKeypointDetection.MAX_HANDS_NUM\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSHandKeypointDetection.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSHandKeypointDetection.analyzeFrame(true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(result.result.length + \" keypoints array detected. Please see the debug logs for details.\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/HandDetectionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSHandKeypointDetection } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class HandDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        7,\n        {\n          sceneType: HMSHandKeypointDetection.TYPE_KEYPOINT_ONLY,\n          maxHandResults: HMSHandKeypointDetection.MAX_HANDS_NUM\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.HAND_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" hand results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.HAND_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.HAND_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.HAND_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/LivenessDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  ToastAndroid\n} from 'react-native';\nimport { HMSLivenessDetection, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class LivenessDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      pitch: 0.0,\n      roll: 0.0,\n      score: 0.0,\n      yaw: 0.0,\n      isLive: 0.0\n    };\n  }\n\n  async setConfig() {\n    try {\n      var result = await HMSLivenessDetection.setConfig(\n        {\n          option: HMSLivenessDetection.DETECT_MASK\n        }\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Detect Mask Config is Set\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startDetect() {\n    try {\n      var result = await HMSLivenessDetection.startDetect();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          pitch: result.result.pitch,\n          roll: result.result.roll,\n          score: result.result.score,\n          yaw: result.result.yaw,\n          isLive: result.result.isLive,\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Detection Results</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={\"Pitch :\" + this.state.pitch.toString()}\n          placeholder=\"Pitch\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Yaw :\" + this.state.yaw.toString()}\n          placeholder=\"Yaw\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Score :\" + this.state.score.toString()}\n          placeholder=\"Score\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Islive :\" + this.state.isLive.toString()}\n          placeholder=\"IsLive\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startDetect.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Start Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.setConfig.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Set Detect Mask Config </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/SkeletonDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSSkeletonDetection, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class SkeletonDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      asyncResult: [],\n      syncResult: []\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      this.setState({ asyncResult: [] });\n      var result = await HMSSkeletonDetection.asyncAnalyzeFrame(true, HMSSkeletonDetection.TYPE_NORMAL, this.getFrameConfiguration());\n      this.parseResult(result, true);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      this.setState({ syncResult: [] });\n      var result = await HMSSkeletonDetection.analyzeFrame(true, HMSSkeletonDetection.TYPE_NORMAL, this.getFrameConfiguration());\n      this.parseResult(result, false);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async calculateSimilarity() {\n    try {\n      var result = await HMSSkeletonDetection.calculateSimilarity(true, HMSSkeletonDetection.TYPE_NORMAL, this.state.asyncResult, this.state.syncResult);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Similarity :\" + result.result, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result, isAsync) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (isAsync) {\n        this.setState({ asyncResult: result.result });\n        ToastAndroid.showWithGravity(this.state.asyncResult.length + \" skeleton detected\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        this.setState({ syncResult: result.result });\n        ToastAndroid.showWithGravity(this.state.syncResult.length + \" skeleton detected\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.calculateSimilarity()}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SIMILARITY ASYNC AND SYNC RESULTS </Text>\n          </TouchableOpacity>\n        </View>\n\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsFaceBodyRelatedServices/SkeletonDetectionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSSkeletonDetection } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class SkeletonDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        3,\n        {\n          analyzeType: HMSSkeletonDetection.TYPE_NORMAL\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SKELETON_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" skeleton results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SKELETON_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SKELETON_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SKELETON_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/DocumentSkewCorrection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSDocumentSkewCorrection } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class DocumentSkewCorrection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      points: [],\n      corrected: '',\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncDocumentSkewDetect() {\n    try {\n      var result = await HMSDocumentSkewCorrection.asyncDocumentSkewDetect(true, this.getFrameConfiguration());\n      console.log(result);\n      if (result.status == HMSDocumentSkewCorrection.SUCCESS) {\n        this.state.points.push({ x: result.result.leftTopPosition.x, y: result.result.leftTopPosition.y });\n        this.state.points.push({ x: result.result.rightTopPosition.x, y: result.result.rightTopPosition.y });\n        this.state.points.push({ x: result.result.rightBottomPosition.x, y: result.result.rightBottomPosition.y });\n        this.state.points.push({ x: result.result.leftBottomPosition.x, y: result.result.leftBottomPosition.y });\n        this.setState({ points: this.state.points });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncDocumentSkewCorrect() {\n    try {\n      var result = await HMSDocumentSkewCorrection.asyncDocumentSkewCorrect(true, this.getFrameConfiguration(), this.state.points);\n      console.log(result);\n      if (result.status == HMSDocumentSkewCorrection.SUCCESS) {\n        const source = { uri: result.result };\n        this.setState({ corrected: source });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      points: []\n    });\n    this.asyncDocumentSkewDetect()\n      .then(() => this.asyncDocumentSkewCorrect())\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Corrected Document Result</Text>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity>\n            {this.state.corrected !== '' && <Image style={styles.imageSelectView} source={this.state.corrected} />}\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze()}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}>ASYNC START</Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/Frame.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { HMSFrame, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class Frame extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      imageResult: '',\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async getPreviewBitmap() {\n    try {\n      var result = await HMSFrame.getPreviewBitmap(this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async readBitmap() {\n    try {\n      var result = await HMSFrame.readBitmap(this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async rotate() {\n    try {\n      var result = await HMSFrame.rotate(HMSFrame.SCREEN_THIRD_QUADRANT, this.state.imageUri);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({ imageResult: result.result });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Result Image</Text>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={null}\n            disabled={this.state.isAnalyzeEnabled}>\n          </TouchableOpacity>\n          {this.state.imageResult !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageResult }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getPreviewBitmap.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Preview Bitmap </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.readBitmap.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Read Bitmap </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.rotate.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Rotate </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ImageClassification.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Switch,\n  Image\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageClassification } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageClassification extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      classificationIdentity: [],\n      name: [],\n      possibility: [],\n      hashCode: [],\n    };\n  }\n\n  getImageClassificationSetting = () => {\n    if (this.state.isEnabled) {\n      return { maxNumberOfReturns: 5, minAcceptablePossibility: 0.8 };\n    }\n    else {\n      return { minAcceptablePossibility: 0.8 };\n    }\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageClassification.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getImageClassificationSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSImageClassification.analyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getImageClassificationSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    result.result.forEach(element => {\n      this.state.classificationIdentity.push(element.classificationIdentity);\n      this.state.name.push(element.name);\n      this.state.possibility.push(element.possibility);\n    });\n    this.setState({ classificationIdentity: this.state.classificationIdentity, name: this.state.name, possibility: this.state.possibility, hashCode: this.state.hashCode });\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      possibility: [],\n      hashCode: [],\n      name: [],\n      classificationIdentity: [],\n      result: 'Recognizing...',\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"RECOGNITION METHOD : \" + (this.state.isEnabled ? 'REMOTE' : 'LOCAL')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.classificationIdentity.toString()}\n          placeholder=\"classification identity\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibility.toString()}\n          placeholder=\"possibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.name.toString()}\n          placeholder=\"name\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> START ASYNC </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> START SYNC </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ImageClassificationLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class ClassificationLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        4,\n        { minAcceptablePossibility: 0.8 }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" classification results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ImageSegmentation.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  Switch\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageSegmentation, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageSegmentation extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      foreground: '',\n      grayscale: '',\n      isBodySeg: true,\n    };\n  }\n\n  getImSegSetting = () => {\n    return { analyzerType: this.state.isBodySeg ? HMSImageSegmentation.BODY_SEG : HMSImageSegmentation.HAIR_SEG,\n       scene: HMSImageSegmentation.ALL, exact: true };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSImageSegmentation.analyzeFrame(true, this.getFrameConfiguration(), this.getImSegSetting());\n      this.parseResult(result, false);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageSegmentation.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getImSegSetting());\n      this.parseResult(result, true);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result, isAsync) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (isAsync) {\n        const first = { uri: result.result.foreground };\n        const second = { uri: result.result.grayscale };\n        this.setState({ foreground: first, grayscale: second });\n      }\n      else {\n        const first = { uri: result.result[0].foreground };\n        const second = { uri: result.result[0].grayscale };\n        this.setState({ foreground: first, grayscale: second });\n      }\n      if(!this.state.isBodySeg) {\n        this.setState({ foreground: ''});\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      foreground: '',\n      grayscale: '',\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <View style={styles.spaceBetweenRow}>\n          <Text style={styles.boldText}>Hair Segmentation</Text>\n          <Switch\n            thumbColor=\"#2196F3\"\n            trackColor={{ false: \"#b2dfdc\", true: \"#b2dfdc\" }}\n            onValueChange={() => this.setState({isBodySeg: !this.state.isBodySeg})}\n            value={this.state.isBodySeg}\n          />\n          <Text style={styles.boldText}>Body Segmentation</Text>\n          </View>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Results</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.foreground !== '' && this.state.foreground.uri !== undefined &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.foreground}\n            />\n          }\n        </View>\n\n        <View style={styles.containerCenter}>\n          {this.state.grayscale !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.grayscale}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ImageSuperResolution.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageSuperResolution, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageSuperResolution extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageSuperResolution.asyncAnalyzeFrame(true, this.getFrameConfiguration(), HMSImageSuperResolution.ISR_SCALE_3X);\n      if (result.status == HMSApplication.SUCCESS) {\n        const source = { uri: result.result };\n        this.setState({ result: source });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      console.log(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Super Resolution 3X Result</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.result !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.result}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.asyncAnalyzeFrame.bind(this)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/LandmarkRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSLandmarkRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class LandmarkRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      landmark: [],\n      coordinates: [],\n      possibility: []\n    };\n  }\n\n  getLandmarkAnalyzerSetting = () => {\n    return { largestNumOfReturns: 10, patternType: HMSLandmarkRecognition.STEADY_PATTERN };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSLandmarkRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getLandmarkAnalyzerSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        result.result.forEach(element => {\n          this.state.landmark.push(element.landMark);\n          this.state.possibility.push(element.possibility);\n          long = [];\n          lat = [];\n          element.coordinates.forEach(ll => {\n            long.push(ll.longitude);\n            lat.push(ll.latitude);\n          })\n          this.state.coordinates.push(lat, long);\n        });\n        this.setState({\n          landMark: this.state.landmark,\n          possibility: this.state.possibility,\n          coordinates: this.state.coordinates,\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      landmark: [],\n      possibility: [],\n      coordinates: [],\n    })\n    this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.landmark.toString()}\n          placeholder=\"landmarks\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.coordinates.toString()}\n          placeholder=\"coordinates\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibility.toString()}\n          placeholder=\"possibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageUri == '' ? true : false} >\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ObjectDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSObjectRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ObjectRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      tracingIdentity: [],\n      typeIdentity: [],\n      typePossibility: [],\n    };\n  }\n\n  getObjectAnalyzerSetting = () => {\n    return { analyzerType: HMSObjectRecognition.TYPE_PICTURE, allowClassification: true, allowMultiResults: true };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSObjectRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getObjectAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSObjectRecognition.analyzeFrame(true, this.getFrameConfiguration(), this.getObjectAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.tracingIdentity.push(element.tracingIdentity);\n        this.state.typeIdentity.push(element.typeIdentity);\n        this.state.typePossibility.push(element.typePossibility);\n      });\n      this.setState({\n        tracingIdentity: this.state.tracingIdentity,\n        typeIdentity: this.state.typeIdentity,\n        typePossibility: this.state.typePossibility,\n      });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      this.setState({\n        tracingIdentity: [],\n        typeIdentity: [],\n        typePossibility: [],\n      });\n    }\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      tracingIdentity: [],\n      typeIdentity: [],\n      typePossibility: [],\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={{ alignSelf: 'center', alignContent: 'center' }}>\n          <Text >{HMSObjectRecognition.TYPE_OTHER} - TYPE_OTHER</Text>\n          <Text >{HMSObjectRecognition.TYPE_FACE} - TYPE_FACE</Text>\n          <Text >{HMSObjectRecognition.TYPE_FOOD} - TYPE_FOOD</Text>\n          <Text >{HMSObjectRecognition.TYPE_FURNITURE} - TYPE_FURNITURE</Text>\n          <Text >{HMSObjectRecognition.TYPE_GOODS} - TYPE_GOODS</Text>\n          <Text >{HMSObjectRecognition.TYPE_PLACE} - TYPE_PLACE</Text>\n          <Text >{HMSObjectRecognition.TYPE_PLANT} - TYPE_PLANT</Text>\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.tracingIdentity.toString()}\n          placeholder=\"tracingIdentity\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.typeIdentity.toString()}\n          placeholder=\"typeIdentity\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.typePossibility.toString()}\n          placeholder=\"typePossibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ObjectDetectionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSObjectRecognition } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class ObjectDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        5,\n        { analyzerType: HMSObjectRecognition.TYPE_VIDEO, allowClassification: true, allowMultiResults: true }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.OBJECT_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" object results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.OBJECT_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.OBJECT_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.OBJECT_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/ProductVisualSearch.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSProductVisionSearch, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ProductVisualSearch extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSProductVisionSearch);\n\n    this.eventEmitter.addListener(HMSProductVisionSearch.PRODUCT_ON_RESULT, (event) => {\n      this.parseResult(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSProductVisionSearch.PRODUCT_ON_RESULT);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      type: [],\n      productIds: [],\n      productUrls: [],\n      customContents: [],\n      imageUrls: [],\n      possibilities: [],\n      productSetId: 'mall',\n      region: HMSProductVisionSearch.REGION_DR_CHINA\n    };\n  }\n\n  getProductVisualSearchSetting = () => {\n    return { maxResults: 10, productSetId: this.state.productSetId, region: this.state.region };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.type.push(element.type);\n        if (element.products.length > 0) {\n          element.products.forEach(product => {\n            this.state.productIds.push(product.productId);\n            this.state.productUrls.push(product.productUrl);\n            this.state.customContents.push(product.customContent);\n            this.state.possibilities.push(product.possibility);\n            this.state.imageUrls.push(product.images.length > 0 ? product.images[0].imageUrl : '');\n          })\n        }\n      });\n      this.setState({\n        type: this.state.type,\n        productIds: this.state.productIds,\n        productUrls: this.state.productUrls,\n        customContents: this.state.customContents,\n        imageUrls: this.state.imageUrls,\n        possibilities: this.state.possibilities,\n      });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  async startProductVisionSearchCapturePlugin() {\n    try {\n      var result = HMSProductVisionSearch.startProductVisionSearchCapturePlugin(this.getProductVisualSearchSetting());\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Plugin started\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      ToastAndroid.showWithGravity(\"Recognition Started. Please wait for result\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      var result = await HMSProductVisionSearch.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getProductVisualSearchSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze = (isPlugin) => {\n    this.setState({\n      type: [],\n      productIds: [],\n      productUrls: [],\n      customContents: [],\n      imageUrls: [],\n      possibilities: [],\n    })\n    isPlugin ? this.startProductVisionSearchCapturePlugin() : this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Set Required Information</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.region.toString()}\n          placeholder=\"Region : 1002, 1003, 1004, 1005\"\n          onChangeText={text => this.setState({ region: text })}\n          multiline={false}\n          editable={true}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productSetId}\n          placeholder=\"ProductSet Id\"\n          onChangeText={text => this.setState({ productSetId: text })}\n          multiline={false}\n          editable={true}\n        />\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.type.toString()}\n          placeholder=\"type\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productIds.toString()}\n          placeholder=\"productIds\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productUrls.toString()}\n          placeholder=\"productUrls\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.customContents.toString()}\n          placeholder=\"customContents\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.imageUrls.toString()}\n          placeholder=\"imageUrls\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibilities.toString()}\n          placeholder=\"possibilities\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Async Analyze </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}>\n            <Text style={styles.startButtonLabel}> Start Plugin </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/SceneDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n    Text,\n    View,\n    ScrollView,\n    TextInput,\n    TouchableOpacity,\n    Image,\n    ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSSceneDetection, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class SceneDetection extends React.Component {\n\n    componentDidMount() { }\n\n    componentWillUnmount() { }\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            imageUri: '',\n            results: [],\n            confindence: [],\n        };\n    }\n\n    getFrameConfiguration = () => {\n        return { filePath: this.state.imageUri };\n    }\n\n    async asyncAnalyzeFrame() {\n        try {\n            var result = await HMSSceneDetection.asyncAnalyzeFrame(true, 0.5, this.getFrameConfiguration());\n            console.log(result);\n            if (result.status == HMSApplication.SUCCESS) {\n                if (result.result.length == 0) {\n                    this.setState({ results: [\"No Results\"], confindence: [\"No Confidence Values\"] });\n                }\n                else {\n                    result.result.forEach(element => {\n                        this.state.results.push(element.result);\n                        this.state.confindence.push(element.confidence);\n                    });\n                    this.setState({ results: this.state.results, confindence: this.state.confindence });\n                }\n            }\n            else {\n                ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n            }\n        } catch (e) {\n            console.log(e);\n        }\n    }\n\n    startAnalyze() {\n        this.setState({\n            results: [],\n            confindence: [],\n        });\n        this.asyncAnalyzeFrame();\n    }\n\n    render() {\n        return (\n            <ScrollView style={styles.bg}>\n\n                <View style={styles.containerCenter}>\n                    <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n                        style={styles.startButton}>\n                        <Text style={styles.startButtonLabel}>Select Image</Text>\n                    </TouchableOpacity>\n                    {this.state.imageUri !== '' &&\n                        <Image\n                            style={styles.imageSelectView}\n                            source={{ uri: this.state.imageUri }}\n                        />\n                    }\n                </View>\n\n                <Text style={styles.h1}>Results / Confidence</Text>\n\n                <TextInput\n                    style={styles.customInput}\n                    value={this.state.results.toString()}\n                    placeholder=\"Results\"\n                    multiline={false}\n                    editable={false}\n                />\n                <TextInput\n                    style={styles.customInput}\n                    value={this.state.confindence.toString()}\n                    placeholder=\"Confidence\"\n                    multiline={false}\n                    editable={false}\n                />\n\n                <View style={styles.basicButton}>\n                    <TouchableOpacity\n                        style={styles.startButton}\n                        onPress={this.startAnalyze.bind(this)}\n                        disabled={this.state.imageUri == '' ? true : false}\n                    >\n                        <Text style={styles.startButtonLabel}> Start Analyze </Text>\n                    </TouchableOpacity>\n                </View>\n            </ScrollView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/SceneDetectionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class SceneDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        6,\n        { confidence: 0.5 }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SCENE_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" scene results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SCENE_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SCENE_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SCENE_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsImageRelatedServices/TextImageSuperResolution.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSTextImageSuperResolution, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class TextImageSuperResolution extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      corrected: '',\n      superWidth: 0,\n      superHeight: 0,\n      updateWidth: 200,\n      updateHeight: 200,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSTextImageSuperResolution.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        Image.getSize(result.result, (width, height) => { this.setState({ superWidth: width, superHeight: height }) });\n        this.setState({ corrected: result.result, updateWidth: 300, updateHeight: 300 });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      corrected: '',\n      superWidth: 0,\n      superHeight: 0,\n      updateWidth: 200,\n      updateHeight: 200,\n    });\n    this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Corrected Document Result</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.corrected !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.corrected }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Super Resoluted Image Width X Height</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.superWidth.toString() + \"X\" + this.state.superHeight.toString()}\n          placeholder=\"Super Resolution Image : Width X Height\"\n          multiline={false}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageBase64display == '' ? true : false}\n          >\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/AudioFileTranscription.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { HMSAft, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport DocumentPicker from 'react-native-document-picker';\n\nexport default class AudioFileTranscription extends React.Component {\n\n  componentDidMount() {\n    this.init()\n      .then(() => this.setAftListener());\n\n    this.eventEmitter = new NativeEventEmitter(HMSAft);\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_EVENT, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_RESULT, (event) => {\n      console.log(event);\n      if (event.isComplete == true) {\n        this.setState({ result: event.text });\n      }\n      else {\n        this.setState({ result: \"Transcription not completed\" });\n      }\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_INIT_COMPLETE, (event) => {\n      console.log(event);\n      this.setState({ taskId: event.taskId });\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_UPLOAD_PROGRESS, (event) => {\n      console.log(event);\n      this.setState({ progress: event.progress });\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_ERROR, (event) => {\n      console.log(event);\n      this.setState({ result: event.error.toString() + \" \" + event.message });\n    });\n\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_EVENT);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_INIT_COMPLETE);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_UPLOAD_PROGRESS);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_ERROR);\n    this.close();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      audioUri: '',\n      audioType: '',\n      audioName: '',\n      audioSize: 0,\n      result: '',\n      taskId: '',\n      progress: 0,\n      isLongRecognize: false,\n    };\n  }\n\n  getAftConfig = () => {\n    return {\n      languageCode: HMSAft.LANGUAGE_EN_US,\n      enablePunctuation: true,\n      enableWordTimeOffset: false,\n      enableSentenceTimeOffset: false\n    }\n  }\n\n  async pickAudioFile() {\n    try {\n      const res = await DocumentPicker.pick({\n        type: [DocumentPicker.types.audio],\n      });\n      console.log(res);\n      this.setState({ audioUri: res.uri, audioType: res.type, audioName: res.name, audioSize: res.size, isLongRecognize: res.size > 4000000 ? true : false });\n    } catch (err) {\n      if (DocumentPicker.isCancel(err)) {\n        console.log(err);\n      }\n    }\n  }\n\n  async init() {\n    try {\n      var result = await HMSAft.init();\n      this.methodResult(result, \"Engine Init\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async close() {\n    try {\n      var result = await HMSAft.close();\n      this.methodResult(result, \"Engine Closed\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroyTask() {\n    try {\n      var result = await HMSAft.destroyTask(this.state.taskId);\n      this.methodResult(result, \"Destroy Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLongAftResult() {\n    try {\n      var result = await HMSAft.getLongAftResult(this.state.taskId);\n      this.methodResult(result, \"Get Long Aft Result\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async pauseTask() {\n    try {\n      var result = await HMSAft.pauseTask(this.state.taskId);\n      this.methodResult(result, \"Pause Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startTask() {\n    try {\n      var result = await HMSAft.startTask(this.state.taskId);\n      this.methodResult(result, \"Start Long Recognition Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getShortAftLanguages() {\n    try {\n      var result = await HMSAft.getShortAftLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLongAftLanguages() {\n    try {\n      var result = await HMSAft.getLongAftLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setAftListener() {\n    try {\n      var result = await HMSAft.setAftListener();\n      this.methodResult(result, \"Aft listener set\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async shortRecognize() {\n    try {\n      var result = await HMSAft.shortRecognize(this.state.audioUri, this.getAftConfig());\n      this.methodResult(result, \"Short Recognize Started :\" + result.result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async longRecognize() {\n    try {\n      var result = await HMSAft.longRecognize(this.state.audioUri, this.getAftConfig());\n      this.methodResult(result, \"Long Recognize Started :\" + result.result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  methodResult = (result, mes) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(mes, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n    }, () => {\n      this.state.isLongRecognize ? this.longRecognize() : this.shortRecognize();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View>\n          <View style={styles.containerCenter}>\n            <TouchableOpacity onPress={this.pickAudioFile.bind(this)}\n              style={styles.startButton}>\n              <Text style={styles.startButtonLabel}>Select WAV/M4A/AMR/MP3</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <View>\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioName}\n            placeholder=\"Audio Name\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioType}\n            placeholder=\"Audio Type\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioUri}\n            placeholder=\"Audio Uri\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={\"Upload Progress :\" + this.state.progress.toString()}\n          placeholder=\"Upload Progress\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.audioUri == '' ? true : false}\n          >\n            <Text style={styles.startButtonLabel}> Start AFT </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getShortAftLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Short AFT Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLongAftLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Long AFT Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.isLongRecognize ?\n          <View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.getLongAftResult.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}> Get Long Aft Result </Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.startTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Start Task</Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.pauseTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Pause Task</Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.destroyTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Destroy Task</Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View>\n          </View>\n        }\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/AutomaticSpeechRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  NativeEventEmitter,\n  TextInput,\n  ToastAndroid,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSAsr, HMSApplication } from '@hmscore/react-native-hms-ml';\n\nexport default class AutomaticSpeechRecognition extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      isAsrSet: false,\n      listening: false,\n    };\n  }\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSAsr);\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_RESULTS, (event) => {\n      this.setState({ result: event.result, listening: false });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_RECOGNIZING_RESULTS, (event) => {\n      this.setState({ result: event.result });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_ERROR, (event) => {\n      this.setState({ result: event.errorMessage });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_START_LISTENING, (event) => {\n      this.setState({ result: event.info, listening: true });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_STARTING_SPEECH, (event) => {\n      this.setState({ result: event.info });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_VOICE_DATA_RECEIVED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_STATE, (event) => {\n      console.log(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_STATE);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_VOICE_DATA_RECEIVED);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_STARTING_SPEECH);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_START_LISTENING);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_RECOGNIZING_RESULTS);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_RESULTS);\n\n    if (this.state.isAsrSet) {\n      this.destroy();\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSAsr.getLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async createAsrRecognizer() {\n    try {\n      var result = await HMSAsr.createAsrRecognizer();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSAsr.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizing() {\n    try {\n      var result = await HMSAsr.startRecognizing(HMSAsr.LAN_EN_US, HMSAsr.FEATURE_WORD_FLUX);\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizingPlugin() {\n    try {\n      var result = await HMSAsr.startRecognizingPlugin(HMSAsr.LAN_EN_US, HMSAsr.FEATURE_WORD_FLUX);\n      console.log(result);\n      this.setState({ result: result.result })\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAsr = () => {\n    this.setState({\n      isAsrSet: true,\n    }, () => {\n      this.createAsrRecognizer()\n        .then(() => this.startRecognizing());\n    });\n  }\n\n  stopAsr = () => {\n    this.destroy()\n      .then(() => this.setState({ isAsrSet: false, listening: false }));\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Normal and UI Speech Recognition</Text>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAsr.bind(this)}\n            disabled={this.state.listening ? true : false}>\n            <Text style={styles.startButtonLabel}> Start </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.stopAsr.bind(this)}\n            disabled={this.state.listening ? false : true}>\n            <Text style={styles.startButtonLabel}> Stop </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startRecognizingPlugin.bind(this)}\n            disabled={this.state.listening ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Speech Pickup UI </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/LanguageDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport {\n  HMSLanguageDetection,\n  HMSApplication\n} from '@hmscore/react-native-hms-ml';\n\nexport default class LanguageDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      languageCode: [],\n      probability: [],\n      firstBest: '',\n      text: '',\n      isEnabled: false,\n    };\n  }\n\n  async probabilityDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.probabilityDetect(this.state.isEnabled, true, HMSLanguageDetection.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.probabilityDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.probabilityDetectError(e);\n    }\n  }\n\n  async firstBestDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.firstBestDetect(this.state.isEnabled, true, HMSLanguageDetection.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.firstBestDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.firstBestDetectError(e);\n    }\n  }\n\n  async syncFirstBestDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.syncFirstBestDetect(this.state.isEnabled, true, HMSLanguageDetection.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.firstBestDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.firstBestDetectError(e);\n    }\n  }\n\n  async syncProbabilityDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.syncProbabilityDetect(this.state.isEnabled, true, HMSLanguageDetection.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.probabilityDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.probabilityDetectError(e);\n    }\n  }\n\n  probabilityDetectResult = (result) => {\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.languageCode.push(element['languageCode']);\n        this.state.probability.push(element['probability']);\n      });\n      this.setState({\n        languageCode: this.state.languageCode,\n        probability: this.state.probability,\n      });\n    }\n    else {\n      this.setState({\n        languageCode: [result.message],\n        probability: [result.message],\n      });\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  probabilityDetectError = (e) => {\n    this.setState({\n      languageCode: [],\n      probability: [],\n    });\n    ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n  }\n\n  firstBestDetectResult = (result) => {\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({\n        firstBest: result.result,\n      });\n    }\n    else {\n      this.setState({\n        firstBest: '',\n      });\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  firstBestDetectError = (e) => {\n    this.setState({\n      firstBest: '',\n    });\n    ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n  }\n\n  startProbabilityDetect = (isSync) => {\n    this.setState({\n      languageCode: [],\n      probability: [],\n    });\n    isSync ? this.syncProbabilityDetect(this.state.text) : this.probabilityDetect(this.state.text);\n  }\n\n  startFirstBestDetect = (isSync) => {\n    this.setState({\n      firstBest: ''\n    });\n    isSync ? this.syncFirstBestDetect(this.state.text) : this.firstBestDetect(this.state.text);\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"Detection Method : \" + (this.state.isEnabled ? 'Remote' : 'Local')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n            />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customInput}\n          placeholder=\"Write Something and Detect Language\"\n          onChangeText={text => this.setState({ text: text })}\n          multiline={true}\n        />\n\n        <Text style={styles.h1}>Probability Detect Results</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={`${this.state.languageCode}`}\n          placeholder=\"Language Code\"\n          multiline={true}\n          editable={true}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={`${this.state.probability}`}\n          placeholder=\"Probability\"\n          multiline={true}\n          editable={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startProbabilityDetect(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Probability Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startProbabilityDetect(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Sync Probability Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <Text style={styles.h1}>First Best Detect Result</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.firstBest}\n          placeholder=\"Result\"\n          multiline={true}\n          editable={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startFirstBestDetect(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> First Best Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startFirstBestDetect(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Sync First Best Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/RealTimeTranscription.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { HMSSpeechRtt, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class RealTimeTranscription extends React.Component {\n\n  componentDidMount() {\n    this.setRealTimeTranscriptionListener();\n\n    this.eventEmitter = new NativeEventEmitter(HMSSpeechRtt);\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_RECOGNIZING_RESULTS, (event) => {\n      console.log(event);\n      this.setState({ result: event.text });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_ERROR, (event) => {\n      console.log(event);\n      this.setState({ result: event.error.toString() + \" / \" + event.errorMessage });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_LISTENING, (event) => {\n      console.log(event);\n      this.setState({ result: event.info });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_STARTING_OF_SPEECH, (event) => {\n      console.log(event);\n      this.setState({ result: event.info });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_VOICE_DATA_RECEIVED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_STATE, (event) => {\n      console.log(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_RECOGNIZING_RESULTS);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_LISTENING);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_STARTING_OF_SPEECH);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_VOICE_DATA_RECEIVED);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_STATE);\n\n    if (this.state.recognitionStart) {\n      this.destroy();\n    }\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      recognitionStart: false,\n    };\n  }\n\n  getSpeechRttConfig = () => {\n    return {\n      language: HMSSpeechRtt.LAN_EN_US,\n      enablePunctuation: true,\n      enableSentenceTimeOffset: true,\n      enableWordTimeOffset: true\n    };\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSSpeechRtt.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizing() {\n    try {\n      var result = await HMSSpeechRtt.startRecognizing(this.getSpeechRttConfig());\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSSpeechRtt.getLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setRealTimeTranscriptionListener() {\n    try {\n      var result = await HMSSpeechRtt.setRealTimeTranscriptionListener();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Real Time Speech Transcription</Text>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startRecognizing().then(() => this.setState({ recognitionStart: true }))}\n          >\n            <Text style={styles.startButtonLabel}> Start Speech Rtt </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.destroy().then(() => this.setState({ recognitionStart: false }))}\n          >\n            <Text style={styles.startButtonLabel}> Stop Speech Rtt </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/SoundDetection.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSSoundDetect, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class SoundDetection extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSSoundDetect);\n\n    this.eventEmitter.addListener(HMSSoundDetect.SOUND_DETECT_ON_SUCCESS, (event) => {\n      console.log(event);\n      switch (event.soundType) {\n        case HMSSoundDetect.SOUND_EVENT_TYPE_ALARM:\n          this.setState({ result: \"Your Sound Type : ALARM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_BABY_CRY:\n          this.setState({ result: \"Your Sound Type : BABY CRY\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_BARK:\n          this.setState({ result: \"Your Sound Type : BARK\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_CAR_ALARM:\n          this.setState({ result: \"Your Sound Type : CAR ALARM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_DOOR_BELL:\n          this.setState({ result: \"Your Sound Type : DOOR BELL\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_KNOCK:\n          this.setState({ result: \"Your Sound Type : KNOCK\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_LAUGHTER:\n          this.setState({ result: \"Your Sound Type : LAUGHTER\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_MEOW:\n          this.setState({ result: \"Your Sound Type : MEOW\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SCREAMING:\n          this.setState({ result: \"Your Sound Type : SCREAM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SNEEZE:\n          this.setState({ result: \"Your Sound Type : SNEEZE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SNORING:\n          this.setState({ result: \"Your Sound Type : SNORE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_STEAM_WHISTLE:\n          this.setState({ result: \"Your Sound Type : WHISTLE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_WATER:\n          this.setState({ result: \"Your Sound Type : WATER\" });\n          break;\n        default:\n          break;\n      }\n    });\n\n    this.eventEmitter.addListener(HMSSoundDetect.SOUND_DETECT_ON_FAILURE, (event) => {\n      console.log(event);\n      this.setState({ result: \"Error Code : \" + event.errorCode.toString() });\n    });\n\n    this.createSoundDetector()\n      .then(() => this.setSoundDetectorListener());\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSSoundDetect.SOUND_DETECT_ON_SUCCESS);\n    this.eventEmitter.removeAllListeners(HMSSoundDetect.SOUND_DETECT_ON_FAILURE);\n\n    if (this.state.isDetectorSet) {\n      this.destroy();\n    }\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      isDetectorSet: false,\n      isStarted: false,\n    };\n  }\n\n  async createSoundDetector() {\n    try {\n      var result = await HMSSoundDetect.createSoundDetector();\n      console.log(result);\n      this.setState({ isDetectorSet: true });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setSoundDetectorListener() {\n    try {\n      var result = await HMSSoundDetect.setSoundDetectorListener();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSSoundDetect.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async stop() {\n    try {\n      var result = await HMSSoundDetect.stop();\n      console.log(result);\n      this.setState({ result: \"Detection Stopped\" });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async start() {\n    try {\n      var result = await HMSSoundDetect.start();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        if (result.result == false) {\n          this.recreate();\n        }\n        else {\n          this.setState({ result: \"Detection Started\", isStarted: true });\n        }\n      }\n      else {\n        this.recreate();\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  recreate = () => {\n    this.destroy()\n      .then(() => this.createSoundDetector())\n      .then(() => this.setSoundDetectorListener())\n      .then(() => this.setState({ result: \"Press Start Again\", isStarted: false }));\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Start Detection then Try to Generate a Sound Type Given Below</Text>\n\n        <View style={{ alignSelf: 'center', alignContent: 'center' }}>\n          <Text >ALARM</Text>\n          <Text >BABY CRY</Text>\n          <Text >BARK</Text>\n          <Text >CAR ALARM</Text>\n          <Text >DOOR BELL</Text>\n          <Text >KNOCK</Text>\n          <Text >LAUGHTER</Text>\n          <Text >MEOW</Text>\n          <Text >SCREAM</Text>\n          <Text >SNEEZE</Text>\n          <Text >SNORE</Text>\n          <Text >WHISTLE</Text>\n          <Text >WATER</Text>\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Sound Detect Result\"\n          multiline={false}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.start.bind(this)}\n            disabled={this.state.isStarted}>\n            <Text style={styles.startButtonLabel}> Start Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.stop.bind(this)}\n            disabled={this.state.isDetectorSet ? false : true}>\n            <Text style={styles.startButtonLabel}> Stop Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.destroy()\n              .then(() => this.createSoundDetector()\n                .then(() => this.setSoundDetectorListener()\n                  .then(() => this.setState({ isDetectorSet: true, isStarted: false, result: 'Sound Detector Destroyed' }))))}\n            disabled={this.state.isDetectorSet ? false : true}>\n            <Text style={styles.startButtonLabel}> Destroy Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/TextToSpeech.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  NativeEventEmitter,\n  ToastAndroid,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSTextToSpeech, HMSApplication } from '@hmscore/react-native-hms-ml';\n\nexport default class TextToSpeech extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      text: '',\n      value: '',\n      volume: 50,\n    };\n  }\n\n  hungryWolfStory = 'Once, a wolf was very hungry. It looked for food here and there. But it could not get any. At last it found a loaf of bread and piece of meat in the hole of a tree. \\\n  The hungry wolf squeezed into the hole. It ate all the food. It was a woodcutter lunch. He was on his way back to the tree to have lunch. But he saw there was no food in the hole, instead, a wolf.';\n\n  tonqueTwister = 'Peter Piper picked a peck of pickled peppers \\\n  A peck of pickled peppers Peter Piper picked\\\n  If Peter Piper picked a peck of pickled peppers\\\n  Where’s the peck of pickled peppers Peter Piper picked?';\n\n  componentDidMount() {\n\n    this.createEngine();\n\n    this.eventEmitter = new NativeEventEmitter(HMSTextToSpeech);\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_ERROR, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_WARN, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_RANGE_START, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_AUDIO_AVAILABLE, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_EVENT, (event) => {\n      console.log(event);\n    });\n\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_WARN);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_RANGE_START);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_AUDIO_AVAILABLE);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_EVENT);\n    this.shutdown();\n  }\n\n  async shutdown() {\n    try {\n      var result = await HMSTextToSpeech.shutdown();\n      this.resultMessage(result, \"Engine Resources Clear\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async createEngine() {\n    try {\n      var result = await HMSTextToSpeech.createEngine({\n        \"volume\": 1.0,\n        \"speed\": 1.0,\n        \"language\": HMSTextToSpeech.TTS_EN_US,\n        \"person\": HMSTextToSpeech.TTS_SPEAKER_FEMALE_EN,\n        \"synthesizeMode\": HMSTextToSpeech.TTS_ONLINE_MODE\n      });\n      this.resultMessage(result, \"Create Engine\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async updateConfiguration() {\n    try {\n      var result = await HMSTextToSpeech.updateConfig({\n        \"volume\": 1.0,\n        \"speed\": 1.0,\n        \"language\": HMSTextToSpeech.TTS_EN_US,\n        \"person\": HMSTextToSpeech.TTS_SPEAKER_MALE_EN,\n        \"synthesizeMode\": HMSTextToSpeech.TTS_ONLINE_MODE\n      });\n      this.resultMessage(result, \"Update Config\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async speak(word) {\n    try {\n      var result = await HMSTextToSpeech.speak(word, HMSTextToSpeech.QUEUE_FLUSH);\n      this.resultMessage(result, \"Speak\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async resume() {\n    try {\n      var result = await HMSTextToSpeech.resume();\n      this.resultMessage(result, \"Resume\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async volumeUp() {\n    try {\n      this.setState((prevState) => {\n        return {volume: prevState.volume + 10}\n      }, () => {\n        console.log(this.state.volume);\n        \n      })\n      \n      var result = await HMSTextToSpeech.setPlayerVolume(this.state.volume)\n      this.resultMessage(result, \"volumeUp\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n  \n  async volumeDown() {\n    try {\n      this.setState((prevState) => {\n        return {volume: prevState.volume - 10}\n      }, () => {console.log(this.state.volume)})\n\n      var result = await HMSTextToSpeech.setPlayerVolume(this.state.volume)\n      this.resultMessage(result, \"volumeDown\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async pause() {\n    try {\n      var result = await HMSTextToSpeech.pause();\n      this.resultMessage(result, \"Pause\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSTextToSpeech.getLanguages();\n      this.resultMessage(result, \"Languages\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getSpeaker() {\n    try {\n      var result = await HMSTextToSpeech.getSpeaker(HMSTextToSpeech.TTS_EN_US);\n      this.resultMessage(result, \"Speaker English\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async isLanguageAvailable() {\n    try {\n      var result = await HMSTextToSpeech.isLanguageAvailable(HMSTextToSpeech.TTS_EN_US);\n      this.resultMessage(result, \"English isAvailable ?\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getSpeakers() {\n    try {\n      var result = await HMSTextToSpeech.getSpeakers();\n      this.resultMessage(result, \"Speaker List\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async stop() {\n    try {\n      var result = await HMSTextToSpeech.stop();\n      this.resultMessage(result, \"Stop\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  resultMessage = (result, mes) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(mes, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={{ width: '95%', alignSelf: 'center', alignContent: 'center' }}>\n\n          <Text style={styles.h1}>Click and Listen Text</Text>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Hello World\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Hello World</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"How are you\")}\n              underlayColor=\"#fff\">\n\n              <Text style={styles.buttonText}>How are you ?</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Welcome to Text to Speech Application\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Welcome to Text to Speech Application</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Tap to me ! Lets talk !\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Tap to me ! Lets talk !</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"How can I get to Taksim ?\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>How can I get to Taksim ?</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"I will be there in 2 hours\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>I will be there in 2 hours</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(this.hungryWolfStory)}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Listen Hungry Wolf Story </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(this.tonqueTwister)}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Listen Tonque Twister</Text>\n            </TouchableOpacity>\n          </View>\n\n          <Text style={styles.h1}>Speech Commands</Text>\n\n          <View style={{ marginTop: 10 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.pause()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Pause Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.stop()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Stop Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.resume()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Resume Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.volumeUp()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Volume Up </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.volumeDown()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Volume Down </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.updateConfiguration()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Switch To Male Sound </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsLanguageVoiceRelatedServices/Translation.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\n\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  ScrollView,\n  Switch,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport {\n  HMSTranslate,\n  HMSModelDownload,\n  HMSApplication\n} from '@hmscore/react-native-hms-ml';\n\nexport default class Translate extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      text: '',\n      result: '',\n      isEnabled: false,\n      showPreparedModel: false,\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSTranslate);\n\n    this.eventEmitter.addListener(HMSTranslate.TRANSLATE_DOWNLOAD_ON_PROCESS, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(event.alreadyDownloadLength + \"/\" + event.totalLength + \"is downloaded\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSTranslate.TRANSLATE_DOWNLOAD_ON_PROCESS);\n  }\n\n  getTranslateSetting = () => {\n    return { sourceLanguageCode: HMSTranslate.ENGLISH, targetLanguageCode: HMSTranslate.CHINESE }\n  }\n\n  getStrategyConfiguration = () => {\n    return { needWifi: true, needCharging: false, needDeviceIdle: false, region: HMSModelDownload.AFILA }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  async preparedModel() {\n    try {\n      var result = await HMSTranslate.preparedModel(this.getStrategyConfiguration(), this.getTranslateSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: \"Model download Success. Now you can use local analyze\" });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async asyncTranslate(sentence) {\n    try {\n      if (sentence !== \"\") {\n        var result = await HMSTranslate.asyncTranslate(this.state.isEnabled, true, sentence, this.getTranslateSetting());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          this.setState({ result: result.result });\n        }\n        else {\n          this.setState({ result: result.message });\n          if (result.status == HMSApplication.NO_FOUND) {\n            this.setState({ showPreparedModel: true });\n            ToastAndroid.showWithGravity(\"Download Using Prepared Button Below\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n          }\n        }\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async syncTranslate(sentence) {\n    try {\n      if (sentence !== \"\") {\n        var result = await HMSTranslate.syncTranslate(this.state.isEnabled, true, sentence, this.getTranslateSetting());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          this.setState({ result: result.result });\n        }\n        else {\n          this.setState({ result: result.message });\n        }\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async getAllLanguages() {\n    try {\n      var result = await HMSTranslate.getAllLanguages(this.state.isEnabled);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.result.toString() });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async syncGetAllLanguages() {\n    try {\n      var result = await HMSTranslate.syncGetAllLanguages(this.state.isEnabled);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.result.toString() });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"TRANSLATE METHOD : \" + (this.state.isEnabled ? 'REMOTE' : 'LOCAL')}\n            </Text>\n          </View>\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }} />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customEditBox2}\n          placeholder=\"ENGLISH INPUT\"\n          onChangeText={text => this.setState({ text: text })}\n          multiline={true}\n          editable={true} />\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"CHINESE RESULT\"\n          multiline={true}\n          editable={true} />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.asyncTranslate(this.state.text.trim())}>\n            <Text style={styles.startButtonLabel}> ASYNC Translation </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.syncTranslate(this.state.text.trim())}>\n            <Text style={styles.startButtonLabel}> SYNC Translation </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getAllLanguages()}>\n            <Text style={styles.startButtonLabel}> ASYNC Language List </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.syncGetAllLanguages()}>\n            <Text style={styles.startButtonLabel}> SYNC Language List </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.showPreparedModel ?\n          <View style={styles.basicButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={() => this.preparedModel()}>\n              <Text style={styles.startButtonLabel}> Prepared Model Download </Text>\n            </TouchableOpacity>\n          </View>\n          :\n          <View></View>\n        }\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsNaturalLanguageProcessingServices/TextEmbedding.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSApplication, HMSTextEmbedding } from '@hmscore/react-native-hms-ml';\n\nconst initialState = {\n  isSentencevector: false,\n  isSentenceSimilarity: false,\n  isAnalyzeSimilarWords: false,\n  isAnalyzeWordVector: false,\n  isAnalyzeWordSimilarity: false,\n  isAnalyzeWordVectorBatch: false,\n  isGetVocabularyVersion: false,\n  sentence: '',\n  sentenceSecond: '',\n  word: '',\n  wordSecond: '',\n  result: '',\n};\n\nexport default class TextEmbedding extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = initialState;\n  }\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  reset = () => {\n    this.setState(initialState);\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({\n        result: result.result.toString()\n      });\n    }\n    else {\n      this.setState({ result: result.message });\n    }\n  }\n\n  async analyzeSentenceVector() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSentenceVector(this.state.sentence, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeSentencesSimilarity() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSentencesSimilarity(this.state.sentence, this.state.sentenceSecond, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeSimilarWords() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSimilarWords(this.state.word, 10, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordVector() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordVector(this.state.word, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordsSimilarity() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordsSimilarity(this.state.word, this.state.wordSecond, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordVectorBatch() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordVectorBatch(['hello', 'huawei', 'phone'], HMSTextEmbedding.LANGUAGE_EN);\n      console.log(result);\n      this.setState({\n        result: \"See Console log for result\"\n      });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getVocabularyVersion() {\n    try {\n      var result = await HMSTextEmbedding.getVocabularyVersion(HMSTextEmbedding.LANGUAGE_EN);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: \"Dimension :\" + result.result.dictionaryDimension + \"\\n\" +\n            \"Size :\" + result.result.dictionarySize + \" \\n\" +\n            \"Version No :\" + result.result.versionNo\n        });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Choose Method</Text>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isSentencevector: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Sentence Vector </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isSentenceSimilarity: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Sentences Similarity </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeSimilarWords: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Similar Words </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordVector: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Word Vector </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordSimilarity: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Words Similarity </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordVectorBatch: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Word Vector Batch </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isGetVocabularyVersion: true }) }}>\n            <Text style={styles.startButtonLabel}> Get Vocabulary Version </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.isSentencevector ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentence: text })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSentenceVector()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isSentenceSimilarity ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentence: text.trim() })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentenceSecond: text.trim() })}\n              placeholder=\"Second Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSentencesSimilarity()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeSimilarWords ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Your Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSimilarWords()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordVector ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordVector()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordSimilarity ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Your Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ wordSecond: text.trim() })}\n              placeholder=\"Your Second Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordsSimilarity()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordVectorBatch ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              placeholder=\"['hello','huawei','phone']\"\n              multiline={false}\n              editable={false}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordVectorBatch()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isGetVocabularyVersion ?\n          <View>\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.getVocabularyVersion()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n      </ScrollView >\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsOtherServices/CustomModel.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\n\nexport default class CustomModel extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Prerequisites</Text>\n        <Text style={styles.h1}>1- Prepare your local or remote(downloaded using HMSModelDownload) model.</Text>\n        <Text style={styles.h1}>2- Configure method settings</Text>\n        <Text style={styles.h1}>3- Call exec method to perform inference using input and output configurations and content</Text>\n        <Text style={styles.h1}>4- Call close method to stop an inference task to release resources</Text>\n        <Text style={styles.h1}>5- Call getOutputIndex to obtain the channel index based on the output channel name</Text>\n        <Text style={styles.h1}>Note That : For details and model preparation please explore Huawei Developer Website </Text>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsOtherServices/HMSCompositeAnalyzer.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n    Text,\n    View,\n    ScrollView,\n    TouchableOpacity,\n    Switch,\n    ToastAndroid,\n    Image,\n    TextInput\n} from 'react-native';\nimport { HMSFaceRecognition, HMSComposite, HMSHandKeypointDetection, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePicker } from './Helper';\nimport { styles } from '../Styles';\n\nexport default class HMSCompositeAnalyzer extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            imageUri: \"\"\n        }\n    }\n\n    componentDidMount() {\n        this.initialize();\n    }\n\n    componentWillUnmount() {\n        this.destroy()\n    }\n\n    destroy = async () => {\n        let res = await HMSComposite.destroy();\n        console.log(res);\n    }\n\n    initialize = async () => {\n        let res = await HMSComposite.createCompositeAnalyzer(this.getFaceAnalyzerSetting());\n        console.log(res);\n    }\n\n    getFrameConfiguration = (txt) => {\n        return { filePath: txt };\n    }\n\n    parseResult = (result, alertShow) => {\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n            if (alertShow) {\n                alert(JSON.stringify(result.result));\n            } else {\n                ToastAndroid.showWithGravity(JSON.stringify(result.result), ToastAndroid.SHORT, ToastAndroid.CENTER);\n            }\n        }\n        else {\n            ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n    }\n\n    getFaceAnalyzerSetting = () => {\n        return {\n            face: {\n                featureType: HMSFaceRecognition.TYPE_FEATURES,\n                shapeType: HMSFaceRecognition.TYPE_SHAPES,\n                keyPointType: HMSFaceRecognition.TYPE_KEYPOINTS,\n                performanceType: HMSFaceRecognition.TYPE_SPEED,\n                tracingMode: HMSFaceRecognition.MODE_TRACING_ROBUST,\n                minFaceProportion: 0.5,\n                isPoseDisabled: false,\n                isTracingAllowed: false,\n                isMaxSizeFaceOnly: false,\n            },\n        };\n    }\n\n    getHandAnalyzerSetting = () => {\n        return {\n            hand: {\n                sceneType: HMSHandKeypointDetection.TYPE_KEYPOINT_ONLY,\n                maxHandResults: HMSHandKeypointDetection.MAX_HANDS_NUM\n            },\n        };\n    }\n\n    render() {\n        return (\n            <ScrollView style={styles.bg}>\n\n                <View style={styles.containerCenter}>\n                    <TouchableOpacity\n                        onPress={async () => {\n                            let res = await HMSComposite.isAvailable();\n                            this.parseResult(res);\n                        }}\n                        style={[styles.startButton, styles.enable]}>\n                        <Text style={styles.startButtonLabel}>Is Available ?</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        onPress={() => {\n                            showImagePicker().then(async (result) => {\n                                this.setState({ imageUri: result })\n                                let res = await HMSComposite.analyzeFrame(this.getFrameConfiguration(result));\n                                this.parseResult(res, true);\n                            })\n                        }}\n                        style={[styles.startButton, styles.enable]}>\n                        <Text style={styles.startButtonLabel}>Select Image</Text>\n                    </TouchableOpacity>\n                    {this.state.imageUri !== '' &&\n                        <Image\n                            style={styles.imageSelectView}\n                            source={{ uri: this.state.imageUri }}\n                        />\n                    }\n                </View>\n\n            </ScrollView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsOtherServices/Helper.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { HMSLensEngine, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { ToastAndroid } from 'react-native';\nimport ImagePicker from 'react-native-image-picker';\n\nconst options = {\n  title: 'Choose Method',\n  storageOptions: {\n    skipBackup: true,\n    path: 'images',\n  },\n};\n\nexport async function createLensEngine(analyzer, analyzerConfig) {\n  try {\n    var result = await HMSLensEngine.createLensEngine(\n      analyzer,\n      analyzerConfig,\n      {\n        width: 480,\n        height: 540,\n        lensType: HMSLensEngine.BACK_LENS,\n        automaticFocus: true,\n        fps: 20.0,\n        flashMode: HMSLensEngine.FLASH_MODE_OFF,\n        focusMode: HMSLensEngine.FOCUS_MODE_CONTINUOUS_VIDEO\n      }\n    )\n    this.renderResult(result, \"Lens engine creation successfull\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function runWithView() {\n  try {\n    var result = await HMSLensEngine.runWithView();\n    this.renderResult(result, \"Lens engine running\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function close() {\n  try {\n    var result = await HMSLensEngine.close();\n    this.renderResult(result, \"Lens engine closed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function doZoom(scale) {\n  try {\n    var result = await HMSLensEngine.doZoom(scale);\n    this.renderResult(result, \"Lens engine zoomed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function photograph() {\n  try {\n    var result = await HMSLensEngine.photograph();\n    this.renderResult(result, \"Lens engine photo\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function release() {\n  try {\n    var result = await HMSLensEngine.release();\n    this.renderResult(result, \"Lens engine released\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function setApiKey() {\n  try {\n    var result = await HMSApplication.setApiKey(\"<your_api_key>\");\n    this.renderResult(result, \"Api key set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setAccessToken() {\n  try {\n    var result = await HMSApplication.setAccessToken(\"<your_access_token>\");\n    this.renderResult(result, \"Access Token set\");\n  } catch (e) {\n    console.log(e);\n  }\n} \n\nexport function showImagePicker() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.showImagePicker(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve(response.uri);\n        }\n      });\n    }\n  );\n  return result;\n}\n\nexport function showImagePickerCustom() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.showImagePicker(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve({uri: response.uri, width: response.width, height: response.height});\n        }\n      });\n    }\n  );\n  return result;\n}\n\nrenderResult = (result, message) => {\n  console.log(result);\n  if (result.status == HMSApplication.SUCCESS) {\n    ToastAndroid.showWithGravity(message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n  else {\n    ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsOtherServices/ModelDownload.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSModelDownload, HMSTextToSpeech, HMSTranslate, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class ModelDownload extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSModelDownload);\n\n    this.eventEmitter.addListener(HMSModelDownload.DOWNLOAD_ON_PROCESS, (event) => {\n      console.log(event);\n      this.setState({ downloadStatus: event.alreadyDownloadLength + '/' + event.totalLength });\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSModelDownload.DOWNLOAD_ON_PROCESS);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isEnabled: false,\n      isOperationStart: false,\n      downloadStatus: '',\n      isExistState: false,\n    };\n  }\n\n  getStrategyConfiguration = () => {\n    return { needWifi: true, needCharging: false, needDeviceIdle: false, region: HMSModelDownload.AFILA }\n  }\n\n  async download() {\n    try {\n      if (this.state.isExistState == false) {\n        var result = await HMSModelDownload.downloadModel(this.getModelInformation(), this.getStrategyConfiguration());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          ToastAndroid.showWithGravity(\"Download Completed\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n      } else {\n        ToastAndroid.showWithGravity(\"Model exist in this device\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      this.setState({ isOperationStart: false, isExistState: false });\n    } catch (e) {\n      console.log(e);\n      this.setState({ isOperationStart: false, isExistState: false });\n    }\n  }\n\n  async delete() {\n    try {\n      if (this.state.isExistState == true) {\n        var result = await HMSModelDownload.deleteModel(this.getModelInformation());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          ToastAndroid.showWithGravity(\"Model deleted\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n      }\n      else {\n        ToastAndroid.showWithGravity(\"Model does not exist in this device\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      this.setState({ isOperationStart: false, isExistState: false });\n    } catch (e) {\n      console.log(e);\n      this.setState({ isOperationStart: false, isExistState: false });\n    }\n  }\n\n  async isModelExist() {\n    try {\n      var result = await HMSModelDownload.isModelExist(this.getModelInformation());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ isExistState: result.result });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        this.setState({ isExistState: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ isExistState: false });\n    }\n  }\n\n  async getRecentModelFile() {\n    try {\n      var result = await HMSModelDownload.getRecentModelFile(this.getModelInformation());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ downloadStatus: result.result });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getModels(tag) {\n    try {\n      var result = await HMSModelDownload.getModels(tag);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ downloadStatus: result.result.toString() });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  getModelInformation = () => {\n    if (this.state.isEnabled) {\n      return { tts: { speakerName: HMSTextToSpeech.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE } };\n    } else {\n      return { translate: { languageCode: HMSTranslate.CHINESE } };\n    }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n      isOperationStart: false,\n    })\n  }\n\n  startDownload = () => {\n    this.setState({\n      isOperationStart: true\n    }, () => {\n      this.isModelExist()\n        .then(() => this.download());\n    });\n\n  }\n\n  startDelete = () => {\n    this.setState({\n      isOperationStart: true\n    }, () => {\n      this.isModelExist()\n        .then(() => this.delete());\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Select Your Model and Use Methods Below</Text>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"Model Name : \" + (this.state.isEnabled ? 'Text To Speech' : 'Translate')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isOperationStart}\n            />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.downloadStatus}\n          placeholder=\"Download Status\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startDownload()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> DOWNLOAD </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startDelete()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> DELETE</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getModels(HMSModelDownload.MODEL_TTS_TAG)}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET TTS MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getModels(HMSModelDownload.MODEL_TRANSLATE_TAG)}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET TRANSLATE MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getRecentModelFile()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET RECENT MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/BankCardRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSBankCardRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\nexport default class BankCardRecognition extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSBankCardRecognition);\n\n    this.eventEmitter.addListener(HMSBankCardRecognition.BCR_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ numberBitmap: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSBankCardRecognition.BCR_IMAGE_SAVE);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      numberBitmap: '',\n      expire: '',\n      issuer: '',\n      number: '',\n      organization: '',\n      type: ''\n    };\n  }\n\n  getBcrSetting = () => {\n    return {\n      orientation: HMSBankCardRecognition.ORIENTATION_PORTRAIT,\n      resultType: HMSBankCardRecognition.RESULT_ALL,\n      recMode: HMSBankCardRecognition.SIMPLE_MODE\n    };\n  }\n\n  async captureFrame() {\n    try {\n      var result = await HMSBankCardRecognition.captureFrame(this.getBcrSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        if (result.errorCode == HMSBankCardRecognition.ERROR_CODE_INIT_CAMERA_FAILED) {\n          ToastAndroid.showWithGravity('Error Code : ' + result.errorCode.toString() + '\\n Error Message : Camera failed', ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          this.setState({\n            expire: result.expire,\n            issuer: result.issuer,\n            number: result.number,\n            organization: result.organization,\n            type: result.type\n          });\n        }\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startBankCardRecognition = () => {\n    this.setState({\n      expire: 'Recognizing ... ',\n      issuer: 'Recognizing ... ',\n      number: 'Recognizing ... ',\n      organization: 'Recognizing ... ',\n      type: 'Recognizing ... '\n    }, () => {\n      this.captureFrame();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Recognition Results</Text>\n        <View style={styles.containerCenter}>\n          {this.state.numberBitmap !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.numberBitmap}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.expire}\n          placeholder=\"Expire\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.issuer}\n          placeholder=\"Issuer\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.number}\n          placeholder=\"Number\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.organization}\n          placeholder=\"Organization\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.type}\n          placeholder=\"Type\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startBankCardRecognition.bind(this)}>\n            <Text style={styles.startButtonLabel}> Start BCR </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/DocumentRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport { Text, View, ScrollView, TextInput, TouchableOpacity, Image } from 'react-native';\nimport { HMSDocumentRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class DocumentRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getDocumentConfiguration = () => {\n    return {\n      borderType: HMSDocumentRecognition.NGON,\n      isFingerPrintEnabled: false,\n      languageList: [HMSDocumentRecognition.ENGLISH, HMSDocumentRecognition.CHINESE]\n    }\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      isAnalyzeEnabled: true,\n    }, () => {\n      this.asyncAnalyzeFrame();\n    });\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSDocumentRecognition.asyncAnalyzeFrame(\n        true,\n        this.getFrameConfiguration(),\n        this.getDocumentConfiguration()\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  async createDocumentAnalyzer() {\n    try {\n      var result = await HMSDocumentRecognition.createDocumentAnalyzer(\n        true,\n        this.getFrameConfiguration(),\n        this.getDocumentConfiguration()\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Start Recognition </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/FormRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image\n} from 'react-native';\nimport { HMSFormRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class FormRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n      isAnalyzeEnabled: false\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSFormRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      this.handleResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSFormRecognition.analyzeFrame(true, this.getFrameConfiguration());\n      this.handleResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze = (isAsync) => {\n    this.setState({\n      result: 'Recognizing ... ',\n      isAnalyzeEnabled: true,\n    }, () => {\n      isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n    });\n  }\n\n  handleResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({ result: \"Success. Please See Debug Log for detailed table content result.\" });\n    }\n    else {\n      this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message });\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true} />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' || this.state.isAnalyzeEnabled ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC Recognition</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' || this.state.isAnalyzeEnabled ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC Recognition </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/GeneralCardRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSGeneralCardRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class GeneralCardRecognition extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSGeneralCardRecognition);\n\n    this.eventEmitter.addListener(HMSGeneralCardRecognition.GCR_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ resultImage: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSGeneralCardRecognition.GCR_IMAGE_SAVE);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      resultImage: '',\n      result: '',\n      isImage: false\n    };\n  }\n\n  parseGcrResult = (result) => {\n    console.log(result);\n    switch (result.status) {\n      case HMSApplication.SUCCESS:\n        this.setState({ result: result.stringValue });\n        break;\n      default:\n        this.setState({ result: result.message, imageUri: '' });\n        break;\n    }\n  }\n\n  getGcrCaptureUiConfig = () => {\n    return {\n      tipTextColor: HMSGeneralCardRecognition.GREEN,\n      scanBoxCornerColor: HMSGeneralCardRecognition.CYAN,\n      tipText: 'Align Edges...',\n      orientation: HMSGeneralCardRecognition.LANDSCAPE\n    }\n  }\n\n  async capturePreview() {\n    try {\n      var result = await HMSGeneralCardRecognition.capturePreview(\"en\", this.getGcrCaptureUiConfig());\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async capturePhoto() {\n    try {\n      var result = await HMSGeneralCardRecognition.capturePhoto(\"en\", this.getGcrCaptureUiConfig());\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async captureImage() {\n    try {\n      var result = await HMSGeneralCardRecognition.captureImage(\"en\", this.state.imageUri);\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  showImageRecognition = () => {\n    this.setState({ isImage: !this.state.isImage, result: '', imageUri: '', resultImage: '' });\n  }\n\n  startPreviewAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      imageUri: '',\n      resultImage: ''\n    }, () => {\n      this.capturePreview();\n    });\n  }\n\n  startPhotoAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      imageUri: '',\n      resultImage: ''\n    }, () => {\n      this.capturePhoto();\n    });\n  }\n\n  startImageAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      resultImage: ''\n    }, () => {\n      this.captureImage();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Choose Your Recognition Method</Text>\n\n        <View style={{ borderBottomWidth: 1, borderBottomColor: '#D3D3D3', alignSelf: 'center', width: '95%' }}>\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={this.state.isImage ? styles.startButtonclicked : styles.startButton}\n              onPress={() => { this.setState({ isImage: !this.state.isImage }) }}>\n              <Text style={styles.startButtonLabel}> Image </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={this.startPhotoAnalyze.bind(this)}\n              disabled={this.state.isImage ? true : false}>\n              <Text style={styles.startButtonLabel}> Capture Photo </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={this.startPreviewAnalyze.bind(this)}\n              disabled={this.state.isImage ? true : false}>\n              <Text style={styles.startButtonLabel}>Capture Preview </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        {this.state.isImage ?\n          <View>\n            <View style={styles.containerCenter}>\n              <TouchableOpacity onPress={() => showImagePicker().then((uri) => this.setState({ imageUri: uri }))}\n                style={styles.startButton}>\n                <Text style={styles.startButtonLabel}>Select Image</Text>\n              </TouchableOpacity>\n              {this.state.imageUri !== '' &&\n                <Image\n                  style={styles.imageSelectView}\n                  source={{ uri: this.state.imageUri }}\n                />\n              }\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.startImageAnalyze.bind(this)}\n                disabled={this.state.imageUri == '' ? true : false}>\n                <Text style={styles.startButtonLabel}> Start Analyze From Image </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View>\n          </View>\n        }\n\n        {this.state.result != '' ?\n          <View>\n            <View>\n              <Text style={styles.h1}>Live Recognition Results</Text>\n              <View style={styles.containerCenter}>\n                {this.state.resultImage !== '' &&\n                  <Image\n                    style={styles.imageSelectView}\n                    source={this.state.resultImage}\n                  />\n                }\n              </View>\n            </View>\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Recognition Result\"\n              multiline={true}\n              scrollEnabled={true}\n              editable={this.state.result == '' ? false : true} />\n          </View>\n          :\n          <View>\n          </View>}\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/IDCardRecognition.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSIDCardRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class IDCardRecognition extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      data: {\n        IDNum: \"\",\n        Name: \"\",\n        Sex: \"\",\n        ValidDate: \"\",\n        Address: \"\",\n        Nation: \"\",\n        Birtday: \"\",\n        Authority: \"\"\n      },\n      imageUriFront: \"\",\n      imageUriBack: \"\",\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSIDCardRecognition);\n\n    this.eventEmitter.addListener(HMSIDCardRecognition.IDCARD_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result.image }\n        if (event.result.isFront) {\n          this.setState({ imageUriFront: image });\n        } else {\n          this.setState({ imageUriBack: image });\n        }\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSIDCardRecognition.IDCARD_IMAGE_SAVE);\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  save = (obj) => {\n    this.state.data.IDNum = obj?.idNum || this.state.data.IDNum;\n    this.state.data.Name = obj?.name || this.state.data.Name;\n    this.state.data.Sex = obj?.sex || this.state.data.Sex;\n    this.state.data.ValidDate = obj?.validDate || this.state.data.ValidDate;\n    this.state.data.Address = obj?.address || this.state.data.Address;\n    this.state.data.Nation = obj?.nation || this.state.data.Nation;\n    if (obj?.birtday?.length == 8) {\n      obj.birtday = obj.birtday.substr(0, 4) + \"/\" + obj.birtday.substr(4, 2) + \"/\" + obj.birtday.substr(6, 2);\n    }\n    this.state.data.Birtday = obj?.birtday || this.state.data.Birtday; \n    this.state.data.Authority = obj?.authority || this.state.data.Authority; \n\n    this.setState({});\n  }\n\n  startImageAnalyzer = async (isFront, onDevice, async) => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        let imgUpdate = {};\n        if (isFront) {\n          imgUpdate = { imageUriFront: { uri: result.uri }};\n        } else {\n          imgUpdate = { imageUriBack: { uri: result.uri }};\n        }\n        this.setState(imgUpdate, async () => { \n          let res = null;\n          if (!onDevice) {\n            res = await HMSIDCardRecognition.captureImage(result.uri, isFront)\n              .catch(e => e);\n          } else {\n            if (async) {\n              res = await HMSIDCardRecognition.asyncAnalyzerImageOnDevice(true, result.uri, isFront)\n                .catch(e => e);\n            } else {\n              res = await HMSIDCardRecognition.analyzerImageOnDevice(true, result.uri, isFront)\n                .catch(e => e);\n            }\n          }\n\n          console.log(res);\n          res = this.parseResult(res);\n          if (res)\n            this.save(res)\n        })\n      })\n  }\n\n  startCameraAnalyzer = async (isFront) => {\n    let res = await HMSIDCardRecognition.captureCamera(true, isFront)\n      .catch(e => e);\n    console.log(res);\n    res = this.parseResult(res);\n    if (res)\n      this.save(res)\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(true, true, false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          <Text style={{ fontWeight: 'bold' }}>Front Side</Text>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer(true)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n        {this.state.imageUriFront != \"\" &&\n          <Image\n            style={{ height: 200 }}\n            source={this.state.imageUriFront}\n            resizeMode=\"contain\"\n          />\n        }\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          <Text style={{ fontWeight: 'bold' }}>Back Side</Text>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer(false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n        {this.state.imageUriBack != \"\" &&\n          <Image\n            style={{ height: 200, width: '100%' }}\n            source={this.state.imageUriBack}\n            resizeMode=\"contain\"\n          />\n        }\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.setState({data: {}, imageUriFront: \"\", imageUriBack: \"\"})}\n          >\n            <Text style={styles.startButtonLabel}> CLEAR </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.log}>\n          {this.getText(\"IDNum\")}\n          {this.getText(\"Name\")}\n          {this.getText(\"Sex\")}\n          {this.getText(\"Address\")}\n          {this.getText(\"Nation\")}\n          {this.getText(\"Birtday\")}\n          {this.getText(\"Authority\")}\n          {this.getText(\"ValidDate\")}\n        </View>\n      </ScrollView>\n    );\n  }\n\n  getText = (field) => {\n    if (!this.state.data[field]) return null;\n    return (\n      <View style={{ flexDirection: 'row' }}>\n        <Text>{field} : </Text>\n        <Text>{this.state.data[field]}</Text>\n      </View>\n    )\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/TextRecognition.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport { Text, View, ScrollView, TextInput, TouchableOpacity, Switch, Image } from 'react-native';\nimport { HMSTextRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class TextRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      result: '',\n      resultSync: [],\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSTextRecognition.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getTextSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  getTextSetting = () => {\n    var textRecognitionSetting;\n    if (this.state.isEnabled) {\n      textRecognitionSetting = {\n        textDensityScene: HMSTextRecognition.OCR_LOOSE_SCENE,\n        borderType: HMSTextRecognition.NGON,\n        languageList: [\"en\"]\n      }\n    }\n    else {\n      textRecognitionSetting = {\n        language: \"en\",\n        OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n      }\n    }\n    return textRecognitionSetting;\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getAnalyzerConfiguration = () => {\n    return {\n      language: \"en\",\n      OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n    };\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ...',\n      resultSync: [],\n      isAnalyzeEnabled: true,\n    }, () => {\n      this.asyncAnalyzeFrame();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"RECOGNITION ASYNC: \" + (this.state.isEnabled ? 'ON-CLOUD' : 'ON-DEVICE')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isAnalyzeEnabled}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={(this.state.result == 'Recognizing ...' || this.state.result == '') ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze()}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> START ASYNC </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/TextRecognitionLive.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSTextRecognition, HMSLensEngine } from '@hmscore/react-native-hms-ml';\nimport { styles } from '../Styles';\n\n\nexport default class TextRecognitionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(0, {\n        language: \"en\",\n        OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n      });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.TEXT_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.blocks.length + \" text blocks detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.TEXT_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n      console.log(\"HERE\");\n    });\n\n    Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.TEXT_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.TEXT_TRANSACTOR_ON_DESTROY);\n    Dimensions.removeEventListener('change');\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/HmsTextRelatedServices/VietnamIDCardRecognition.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSVietnamCardRecognition, HMSApplication } from '@hmscore/react-native-hms-ml';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class VietnamIDCardRecognition extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      log: [],\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSVietnamCardRecognition);\n\n    this.eventEmitter.addListener(HMSVietnamCardRecognition.ICRVN_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ imageUri: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSVietnamCardRecognition.ICRVN_IMAGE_SAVE);\n  }\n\n  startImageAnalyzer = (onDevice, async) => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        this.setState({ imageUri: { uri: result.uri }}, async () => { \n          let res = null;\n          if (!onDevice) {\n            res = await HMSVietnamCardRecognition.captureImage(result.uri)\n              .catch(e => e);\n          } else {\n            if (async) {\n              res = await HMSVietnamCardRecognition.asyncAnalyzerImageOnDevice(true, result.uri)\n                .catch(e => e);\n            } else {\n              res = await HMSVietnamCardRecognition.analyzerImageOnDevice(true, result.uri)\n                .catch(e => e);\n            }\n          }\n          console.log(res);\n          res = this.parseResult(res);\n          if (res)\n            this.pushLog(res)\n        })\n      })\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  pushLog = (str) => {\n    if (typeof (str) == 'object')\n      str = JSON.stringify(str)\n    this.state.log = [`${new Date().toISOString()} ->\\n ${str}`].concat(this.state.log)\n    this.setState({})\n  }\n\n  startCameraAnalyzer = async () => {\n    this.setState({ imageUri: \"\" })\n    let res = await HMSVietnamCardRecognition.captureCamera(true)\n      .catch(e => e);\n    console.log(res);\n    res = this.parseResult(res);\n    if (res)\n      this.pushLog(res)\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(false, true)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          \n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer()}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n          {this.state.imageUri !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImage}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={this.state.imageUri}\n              />\n            </TouchableOpacity>\n          }\n\n        <View style={styles.log}>\n          {this.state.log.map((item, index) => (\n            <Text key={index}>{item}</Text>\n          ))}\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-ml/example/src/StartPage.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from 'react';\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  PermissionsAndroid,\n  BackHandler,\n  Alert\n} from 'react-native';\nimport { styles } from './Styles';\nimport { setApiKey, setAccessToken } from './HmsOtherServices/Helper';\n\nexport default class App extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions()\n      .then(() => setApiKey());\n      \n  }\n\n  async requestPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple(\n        [\n          PermissionsAndroid.PERMISSIONS.CAMERA,\n          PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n        ]\n      );\n      if (\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED\n      ) {\n        this.alertPermission();\n      }\n    }\n    catch (err) {\n      console.log(err);\n    }\n  }\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\", onPress: () => BackHandler.exitApp()\n        }\n      ],\n      { cancelable: false }\n    );\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Text Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextRecognitionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Text Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('DocumentRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Document Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GeneralCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Gen. Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('BankCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Bank Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FormRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Form Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('VietnamIDCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Vietnam ID Card</Text>\n            </TouchableOpacity>\n          </View>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('IDCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>ID Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text style={styles.h1}>Language / Voice Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('Translation')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Translate Service</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LanguageDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Language Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextToSpeech')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text To Speech</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('AutomaticSpeechRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Speech Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('AudioFileTranscription')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Audio File Transcript</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('RealTimeTranscription')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Real Time Transcript</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SoundDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Sound Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <Text style={styles.h1}>Image Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageClassification')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Image{'\\n'}Classify</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ClassificationLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Image{'\\n'}Classify</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LandmarkRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Landmark Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ObjectDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Object Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ObjectDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Object Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ProductVisualSearch')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Product Search</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageSegmentation')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Image Segment.</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('Frame')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Frame Methods</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageSuperResolution')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Super Resolution</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('DocumentSkewCorrection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Doc. Skew Correction</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextImageSuperResolution')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Super Resolution</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SceneDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Scene Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SceneDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Scene Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <Text style={styles.h1}>Face / Body Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Face Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceRecognitionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Face Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LivenessDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Liveness Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('HandKeypointDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Hand Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('HandDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Hand Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GestureDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Gesture Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GestureDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Gesture Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SkeletonDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Skeleton Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SkeletonDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Skeleton Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceVerification')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Face Verification</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text></Text>\n\n        <Text style={styles.h1}>Natural Language Processing Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextEmbedding')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Embedding</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <Text style={styles.h1}>Model</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('CustomModel')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Custom Model</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ModelDownload')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Model Download</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <Text style={styles.h1}>Common Services</Text>\n\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('CompositeAnalyzer')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Composite Analyzer</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text></Text>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-ml/example/src/Styles.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet, Dimensions } from 'react-native';\n\nconst win = Dimensions.get('window');\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#EEF2F3' },\n\n  imageSelectView: {\n    width: 200,\n    height: 200,\n  },\n\n  superres: {\n    flex: 1,\n    alignSelf: 'stretch',\n    width: win.width,\n    height: win.height,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 15,\n    borderBottomWidth: 1,\n    padding: 20,\n    borderBottomColor: '#D3D3D3',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  boldText: { fontWeight: \"bold\" },\n\n  normalView: {\n    backgroundColor: '#EEF2F3',\n    flex: 1,\n    flexDirection: 'column',\n  },\n\n  baseItemContainer: {\n    marginTop: 10,\n    alignItems: 'center',\n    width: '95%',\n    alignSelf: 'center',\n    height: '33%'\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    alignSelf: 'center',\n    width: '95%',\n    borderBottomColor: '#D3D3D3',\n    borderBottomWidth: 1,\n    marginTop: 10,\n  },\n  itemOfView: {\n    width: '70%',\n    alignSelf: 'center'\n  },\n\n  itemOfView3: {\n    width: '30%',\n    alignSelf: 'flex-end'\n  },\n\n  dividedDropdown: {\n    borderWidth: 2,\n    borderColor: 'gray',\n    height: 40,\n    marginTop: 5\n  },\n\n  longDropdown: {\n    backgroundColor: '#fafafa',\n    width: '95%',\n    alignSelf: 'center',\n    borderWidth: 2,\n    borderColor: 'gray',\n    marginTop: 5\n  },\n\n\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n  },\n\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n\n  containerCenter: {\n    marginTop: 20,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  img: {\n    width: 100,\n    height: 100,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  containerFlexCenter: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: \"center\",\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  button: {\n    width: '32%',\n    height: 80,\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  menuButton: {\n    width: '100%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: '#fff',\n    flexDirection: 'column',\n  },\n  image: {\n    justifyContent: 'flex-start',\n    width: 400,\n    height: 80,\n  },\n  right: {\n    justifyContent: 'flex-end',\n  },\n\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customInput2: {\n    height: 75,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox: {\n    height: 250,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox2: {\n    height: 230,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    marginBottom: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\",\n    borderColor: '#D3D3D3',\n    borderWidth: 1,\n    textAlign: 'center'\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  startButton: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n  startButtonclicked: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: 'green',\n  },\n  startButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n\n  borderedText: {\n    paddingHorizontal: 20,\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'grey',\n    color: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#fee',\n  },\n\n  speakButton: {\n    color: '#000',\n    width: 200,\n    textAlignVertical: \"center\", textAlign: \"center\",\n    paddingLeft: 10,\n    paddingRight: 10,\n    borderColor: 'blue'\n  },\n\n  log: {\n    width: '95%',\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  faceVerificationImage: {\n    width: \"100%\",\n    height: 200\n  },\n\n  enable: {\n    backgroundColor: 'green'\n  },\n\n  cardRecogOptions: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    marginVertical: 10\n  }\n});\n"
  },
  {
    "path": "react-native-hms-ml/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-ml\",\n  \"title\": \"React Native HMS ML\",\n  \"description\": \"React Native HMS ML Kit\",\n  \"version\": \"3.5.0-301\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-ml\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ml\",\n    \"hms-ml\",\n    \"huawei-ml\",\n    \"ml-kit\",\n    \"machine-learning\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENCE\",\n    \"THIRD PARTY OPEN SOURCE SOFTWARE NOTICE.txt\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-ml/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-ml\" {\n\n    export const HMSApplication = {\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        setApiKey(apiKey: string): Promise<Object>;,\n        getApiKey(): Promise<Object>;,\n        setAccessToken(token: string): Promise<Object>;\n    }\n\n    export declare enum HMSApplication {\n        UNKNOWN = -1,\n        SUCCESS = 0,\n        DISCARDED = 1,\n        INNER = 2,\n        INACTIVE = 3,\n        NOT_SUPPORTED = 4,\n        ILLEGAL_PARAMETER = 5,\n        OVERDUE = 6,\n        NO_FOUND = 7,\n        DUPLICATE_FOUND = 8,\n        NO_PERMISSION = 9,\n        INSUFFICIENT_RESOURCE = 10,\n        ANALYSIS_FAILURE = 11,\n        INTERRUPTED = 12,\n        EXCEED_RANGE = 13,\n        DATA_MISSING = 14,\n        AUTHENTICATION_REQUIRED = 15,\n        TFLITE_NOT_COMPATIBLE = 16,\n        INSUFFICIENT_SPACE = 17,\n        HASH_MISS = 18,\n        TOKEN_INVALID = 19,\n        FRAME_NULL = 20,\n        ANALYZER_NOT_AVAILABLE = 21,\n        CURRENT_ACTIVITY_NULL = 22,\n        CANCEL = 23,\n        FAILURE = 24,\n        DENY = 25,\n        STRING_PARAM_NULL = 26,\n        REMOTE_MODEL_NULL = 27,\n        ASR_RECOGNIZER_NULL = 28,\n        TTS_ENGINE_NULL = 30,\n        SOUND_DECT_NULL = 31,\n        CUSTOM_MODEL_SETTING_NULL = 32,\n        CUSTOM_MODEL_INPUT_NULL = 33,\n        CUSTOM_MODEL_EXECUTOR_SETTING_NULL = 34,\n        DATA_SET_NOT_VALID = 35,\n        LENS_ENGINE_NULL = 36,\n        LENS_HOLDER_NULL = 37\n    }\n\n    export const HMSFrame = {\n        getPreviewBitmap(frameConfiguration: Frame): Promise<Object>;,\n        readBitmap(frameConfiguration: Frame): Promise<Object>;,\n        rotate(quadrant: HMSFrame, fileUri: string): Promise<Object>;\n    }\n\n    export declare enum HMSFrame {\n        SCREEN_FIRST_QUADRANT = 0,\n        SCREEN_SECOND_QUADRANT = 1,\n        SCREEN_THIRD_QUADRANT = 2,\n        SCREEN_FOURTH_QUADRANT = 3,\n        IMAGE_FORMAT_NV21 = 17,\n        IMAGE_FORMAT_YV12 = 842094169\n    }\n\n    interface Frame {\n        bitmap: string,\n        bytes: Bytes,\n        byteBuffer: ByteBuffer,\n        filePath: string,\n        creator: Creator\n    }\n\n    interface Bytes {\n        frameProperty: FrameProperty,\n        values: number[],\n    }\n\n    interface ByteBuffer {\n        frameProperty: FrameProperty,\n        buffer: string,\n    }\n\n    interface Creator {\n        base64Bitmap: string,\n        itemIdentity: number,\n        quadrant: HMSFrame,\n        timeStamp: number,\n        framePropertyExt: FramePropertyExt,\n        writeByteBufferData: ByteBufferData\n    }\n\n    interface FrameProperty {\n        width: number,\n        height: number,\n        quadrant: HMSFrame,\n        formatType: HMSFrame,\n        itemIdentity: number,\n        timeStamp: number,\n    }\n\n    interface FramePropertyExt {\n        lensId: number,\n        maxZoom: number,\n        zoom: number,\n        bottom: number,\n        left: number,\n        right: number,\n        top: number,\n    }\n\n    interface ByteBufferData {\n        width: number,\n        height: number,\n        data: string,\n        formatType: HMSFrame,\n    }\n\n    export const HMSTextRecognition = {\n        asyncAnalyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: OnCloudAnalyzerConfiguration | OnDeviceAnalyzerConfiguration): Promise<Object>;,\n        analyzeFrame(isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: OnDeviceAnalyzerConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSTextRecognition {\n        OCR_DETECT_MODE = 1,\n        OCR_TRACKING_MODE = 2,\n        OCR_LOOSE_SCENE = 1,\n        OCR_COMPACT_SCENE = 2,\n        ARC = \"ARC\",\n        NGON = \"NGON\",\n        LATIN = \"rm\",\n        ENGLISH = \"en\",\n        CHINESE = \"zh\",\n        JAPANESE = \"ja\",\n        KOREAN = \"ko\",\n        RUSSIAN = \"ru\",\n        GERMAN = \"de\",\n        FRENCH = \"fr\",\n        ITALIAN = \"it\",\n        PORTUGUESE = \"pt\",\n        SPANISH = \"es\",\n        POLISH = \"pl\",\n        NORWEGIAN = \"no\",\n        SWEDISH = \"sv\",\n        DANISH = \"da\",\n        TURKISH = \"tr\",\n        FINNISH = \"fi\",\n        THAI = \"th\",\n        ARABIC = \"ar\",\n        HINDI = \"hi\"\n    }\n\n    interface OnCloudAnalyzerConfiguration {\n        borderType: HMSTextRecognition,\n        textDentisyScene: HMSTextRecognition,\n        languageList: HMSTextRecognition[]\n    }\n\n    interface OnDeviceAnalyzerConfiguration {\n        language: HMSTextRecognition,\n        OCRMode: HMSTextRecognition\n    }\n\n    export const HMSDocumentRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: DocumentConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSDocumentRecognition {\n        OCR_DETECT_MODE = 1,\n        OCR_TRACKING_MODE = 2,\n        OCR_LOOSE_SCENE = 1,\n        OCR_COMPACT_SCENE = 2,\n        ARC = \"ARC\",\n        NGON = \"NGON\",\n        LATIN = \"rm\",\n        ENGLISH = \"en\",\n        CHINESE = \"zh\",\n        JAPANESE = \"ja\",\n        KOREAN = \"ko\",\n        RUSSIAN = \"ru\",\n        GERMAN = \"de\",\n        FRENCH = \"fr\",\n        ITALIAN = \"it\",\n        PORTUGUESE = \"pt\",\n        SPANISH = \"es\",\n        POLISH = \"pl\",\n        NORWEGIAN = \"no\",\n        SWEDISH = \"sv\",\n        DANISH = \"da\",\n        TURKISH = \"tr\",\n        FINNISH = \"fi\",\n        THAI = \"th\",\n        ARABIC = \"ar\",\n        HINDI = \"hi\",\n        OTHER = 5,\n        NEW_LINE_CHARACTER = 8,\n        SPACE = 6\n    }\n\n    interface DocumentConfiguration {\n        isFingerPrintEnabled: boolean,\n        borderType: HMSDocumentRecognition,\n        languageList: HMSDocumentRecognition[]\n    }\n\n    export const HMSBankCardRecognition = {\n        captureFrame(bcrCaptureConfiguration: BcrCaptureConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSBankCardRecognition {\n        ORIENTATION_AUTO = 0,\n        ORIENTATION_LANDSCAPE = 1,\n        ORIENTATION_PORTRAIT = 2,\n        ERROR_CODE_INIT_CAMERA_FAILED = 10101,\n        RESULT_ALL = 2,\n        RESULT_NUM_ONLY = 0,\n        RESULT_SIMPLE = 1,\n        STRICT_MODE = 1,\n        SIMPLE_MODE = 0,\n        BCR_IMAGE_SAVE = \"bcrSuccessImage\"\n    }\n\n    interface BcrCaptureConfiguration {\n        orientation: HMSBankCardRecognition,\n        resultType: HMSBankCardRecognition,\n        recMode: HMSBankCardRecognition\n    }\n\n    export const HMSGeneralCardRecognition = {\n        capturePreview(language: string, uiConfig: UiConfig): Promise<Object>;,\n        capturePhoto(language: string, uiConfig: UiConfig): Promise<Object>;,\n        captureImage(language: string, imageUri: string): Promise<Object>;\n    }\n\n    export declare enum HMSGeneralCardRecognition {\n        ORIENTATION_AUTO = 0,\n        ORIENTATION_LANDSCAPE = 1,\n        ORIENTATION_PORTRAIT = 2,\n        BLACK = -16777216,\n        BLUE = -16776961,\n        CYAN = -16711681,\n        DKGRAY = -12303292,\n        GRAY = -7829368,\n        GREEN = -16711936,\n        LTGRAY = -3355444,\n        MAGENTA = -65281,\n        RED = -65536,\n        TRANSPARENT = 0,\n        WHITE = -1,\n        YELLOW = -256,\n        GCR_IMAGE_SAVE = \"gcrOnResult\"\n    }\n\n    interface UiConfig {\n        orientation: HMSGeneralCardRecognition,\n        tipTextColor: HMSGeneralCardRecognition,\n        scanBoxCornerColor: HMSGeneralCardRecognition,\n        tipText: string\n    }\n\n    export const HMSFormRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;,\n        analyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;\n    }\n\n    export const HMSAft = {\n        init(): Promise<Object>;,\n        close(): Promise<Object>;,\n        destroyTask(taskId: string): Promise<Object>;,\n        getLongAftResult(taskId: string): Promise<Object>;,\n        pauseTask(taskId: string): Promise<Object>;,\n        startTask(taskId: string): Promise<Object>;,\n        setAftListener(): Promise<Object>;,\n        shortRecognize(uri: string, remoteAftSetting: RemoteAftSetting): Promise<Object>;,\n        longRecognize(uri: string, remoteAftSetting: RemoteAftSetting): Promise<Object>;,\n        getLongAftLanguages(): Promise<Object>;,\n        getShortAftLanguages(): Promise<Object>;\n    }\n\n    export declare enum HMSAft {\n        LANGUAGE_ZH = \"zh\",\n        LANGUAGE_EN_US = \"en-US\",\n        ERR_UNKNOWN = 11199,\n        ERR_TASK_NOT_EXISTED = 11110,\n        ERR_TASK_ALREADY_INPROGRESS = 11114,\n        ERR_RESULT_WHEN_UPLOADING = 11109,\n        ERR_NO_ENOUGH_STORAGE = 11115,\n        ERR_NETCONNECT_FAILED = 11108,\n        ERR_LANGUAGE_CODE_NOTSUPPORTED = 11102,\n        ERR_INTERNAL = 11198,\n        ERR_ILLEGAL_PARAMETER = 11106,\n        ERR_FILE_NOT_FOUND = 11105,\n        ERR_ENGINE_BUSY = 11107,\n        ERR_SERVICE_CREDIT = 11122,\n        AFT_ON_EVENTERR_AUTHORIZE_FAILED = 11119,\n        ERR_AUDIO_UPLOAD_FAILED = 11113,\n        ERR_AUDIO_TRANSCRIPT_FAILED = 11111,\n        ERR_AUDIO_LENGTH_OVERFLOW = 11104,\n        ERR_AUDIO_FILE_NOTSUPPORTED = 11101,\n        ERR_AUDIO_FILE_SIZE_OVERFLOW = 11103,\n        ERR_AUDIO_INIT_FAILED = 11112,\n        AFT_ON_ERROR = \"aftOnError\",\n        AFT_ON_EVENT = \"aftOnEvent\",\n        AFT_ON_INIT_COMPLETE = \"aftOnInitComplete\",\n        AFT_ON_UPLOAD_PROGRESS = \"aftOnUploadProgress\",\n        AFT_ON_RESULT =\t\"aftOnResult\"\n    }\n\n    interface RemoteAftSetting {\n        languageCode: string,\n        enablePunctuation: boolean,\n        enableWordTimeOffset: boolean,\n        enableSentenceTimeOffset: boolean\n    }\n\n    export const HMSAsr = {\n        destroy(): Promise<Object>;,\n        createAsrRecognizer(): Promise<Object>;,\n        startRecognizing(language: HMSAsr, feature: HMSAsr): Promise<Object>;,\n        startRecognizingPlugin(language: HMSAsr, feature: HMSAsr): Promise<Object>;,\n        getLanguages(): Promise<Object>;\n    }\n\n    export declare enum HMSAsr {\n        LAN_ZH = \"zh\",\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-R\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        LAN_RU_RU = \"ru-RU\",\n        LAN_IT_IT = \"it-IT\",\n        LAN_AR = \"ar\",\n        LAN_TH_TH = \"th-TH\",\n        LAN_FIL_PH = \"fil-PH\",\n        LAN_MS_MY = \"ms-MY\",\n        STATE_LISTENING = 1,\n        STATE_NO_SOUND = 2,\n        STATE_NO_SOUND_TIMES_EXCEED = 3,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_WAITING = 9,\n        ASR_ON_ERROR = \"asrOnError\",\n        ASR_ON_RECOGNIZING_RESULTS = \"asrOnRecognizingResults\",\n        ASR_ON_RESULTS = \"asrOnResults\",\n        ASR_ON_START_LISTENING = \"asrOnStartListening\",\n        ASR_ON_STARTING_SPEECH = \"asrOnStartingOfSpeech\",\n        ASR_ON_STATE = \"asrOnState\",\n        ASR_ON_VOICE_DATA_RECEIVED = \"asrOnVoiceDataReceived\",\n        ERR_NO_NETWORK = 11202,\n        ERR_SERVICE_UNAVAILABLE = 11203,\n        ERR_NO_UNDERSTAND = 11204,\n        ERR_INVALIDATE_TOKEN = 11219,\n        FEATURE_ALL_IN_ONE = 12,\n        FEATURE_WORD_FLUX = 11\n    }\n\n    export const HMSTranslate = {\n        asyncTranslate(isRemote: boolean, isStop: boolean, text: string, translatorSetting: TranslatorSetting): Promise<Object>;,\n        preparedModel(strategyConfiguration: StrategyConfiguration, translatorSetting: TranslatorSetting): Promise<Object>;,\n        syncTranslate(isRemote: boolean, isStop: boolean, text: string, translatorSetting: TranslatorSetting): Promise<Object>;,\n        syncGetAllLanguages(isRemote: boolean): Promise<Object>;,\n        getAllLanguages(isRemote: boolean): Promise<Object>;\n    }\n\n    export declare enum HMSTranslate {\n        TRANSLATE_DOWNLOAD_ON_PROCESS = \"translateDownloadProcess\",\n        AFRIKAANS = \"af\",\n        ARABIC = \"ar\",\n        BULGARIAN = \"bg\",\n        BURMESE = \"my\",\n        CROATIAN = \"hr\",\n        CZECH = \"cs\",\n        CHINESE = \"zh\",\n        TRADITIONAL_CHINESE = \"zh-hk\",\n        DANISH = \"da\",\n        DUTCH = \"nl\",\n        ESTONIAN = \"et\",\n        ENGLISH = \"en\",\n        FINNISH = \"fi\",\n        FRENCH = \"fr\",\n        GERMAN = \"de\",\n        GUJARATI = \"gu\",\n        GREEK = \"el\",\n        HUNGARIAN = \"hu\",\n        HINDI = \"hi\",\n        HEBREW = \"he\",\n        IRISH = \"is\",\n        ITALIAN = \"it\",\n        INDONESIAN = \"id\",\n        KHMER = \"km\",\n        KOREAN = \"ko\",\n        JAPANESE = \"ja\",\n        LATIN = \"rm\",\n        LATVIAN = \"lv\",\n        MALAY = \"ms\",\n        MARATHI = \"mr\",\n        NORWEGIAN = \"no\",\n        PUNJABI = \"pa\",\n        POLISH = \"pl\",\n        PORTUGUESE = \"pt\",\n        PERSIAN = \"fa\",\n        RUSSIAN = \"ru\",\n        ROMANIAN = \"ro\",\n        SERBIAN = \"sr\",\n        SPANISH = \"es\",\n        SLOVAK = \"sk\",\n        SWEDISH = \"sv\",\n        TAMIL = \"ta\",\n        TURKISH = \"tr\",\n        THAI = \"th\",\n        TAGALOG = \"tl\",\n        TELUGU = \"te\",\n        VIETNAMESE = \"vi\"\n    }\n\n    interface TranslatorSetting {\n        sourceLanguageCode: HMSTranslate,\n        targetLanguageCode: HMSTranslate\n    }\n\n    interface StrategyConfiguration {\n        needWifi: boolean,\n        needCharging: boolean,\n        deviceIdle: boolean,\n        region: HMSModelDownload\n    }\n\n    export const HMSLanguageDetection = {\n        probabilityDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        firstBestDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        syncProbabilityDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        syncFirstBestDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;\n    }\n\n    export declare enum HMSLanguageDetection {\n        FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD = 0.5,\n        PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD = 0.01,\n        UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD = \"unknown\"\n    }\n\n    export const HMSSpeechRtt = {\n        startRecognizing(rttConfiguration: RttConfiguration): Promise<Object>;,\n        setRealTimeTranscriptionListener(): Promise<Object>;,\n        destroy(): Promise<Object>;\n    }\n\n    export declare enum HMSSpeechRtt {\n        ERR_NO_NETWORK = 13202,\n        ERR_SERVICE_UNAVAILABLE = 13203,\n        ERR_INVALIDE_TOKEN = 13219,\n        ERR_SERVICE_CREDIT = 13222,\n        ERR_SERVICE_UNSUBSCRIBED = 13223,\n        ERR_SERVICE_FREE_USED_UP = 13224,\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-FR\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        STATE_LISTENING = 1,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_SERVICE_RECONNECTING = 42,\n        STATE_SERVICE_RECONNECTED = 43,\n        SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnError\",\n        SPEECH_RTT_ON_ERROR = \"speechRttOnError\",\n        SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\",\n        SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\",\n        SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\",\n        SPEECH_RTT_ON_STATE = \"speechRttOnState\",\n        SCENES_SHOPPING = \"shopping\"\n    }\n\n    interface RttConfiguration {\n        language: HMSSpeechRtt,\n        enablePunctuation: boolean,\n        enableSentenceTimeOffset: boolean,\n        enableWordTimeOffset: boolean,\n    }\n\n    export const HMSGestureDetection = {\n        analyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;,\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;\n    }\n\n    export declare enum HMSGestureDetection {\n        ONE = 0,\n        SECOND = 1,\n        THREE = 2,\n        FOUR = 3,\n        FIVE = 4,\n        SIX = 5,\n        SEVEN = 6,\n        EIGHT = 7,\n        NINE = 8,\n        DISS = 9,\n        FIST = 10,\n        GOOD = 11,\n        HEART = 12,\n        OK = 13,\n        UNKNOWN = 14,\n        BOW = 15,\n        DOUBLE_UP = 16,\n        FUCK = 17,\n        HEART_A = 18,\n        HEART_B = 19,\n        HEART_C = 20,\n        PRAY = 21,\n        ROCK = 22,\n        THANK = 23,\n        UP = 24\n    }\n\n    export const HMSFaceVerification = {\n        setMaxFaceDetected(maxFaceDetected: 1|2|3): Promise<object>;,\n\n        getMaxFaceDetected(): Promise<MaxFaceCount>;,\n    \n        loadTemplatePic(frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        compare(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncCompare(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n\n    interface MaxFaceCount {\n        maxFaceCount: number\n    }\n    \n    interface FrameConfiguration {\n        filePath: string;\n    }\n    \n    export const HMSIDCardRecognition = {\n        captureImage(imageUri: string, isFront: boolean): Promise<object>;,\n    \n        captureCamera(save: boolean, isFront: boolean): Promise<object>;,\n\n        analyzerImageOnDevice(isStop: boolean, imageUri: string, isFront: boolean): Promise<object>;,\n\n        asyncAnalyzerImageOnDevice(isStop: boolean, imageUri: string, isFront: boolean): Promise<object>;,\n    };\n\n    export declare enum HMSIDCardRecognition {\n        IDCARD_IMAGE_SAVE = \"idCardOnResult\",\n    }\n\n    export const HMSVietnamCardRecognition = {\n        captureImage(imageUri: string): Promise<object>;,\n    \n        captureCamera(save: boolean): Promise<object>;,\n\n        analyzerImageOnDevice(isStop: boolean, imageUri: string): Promise<object>;,\n\n        asyncAnalyzerImageOnDevice(isStop: boolean, imageUri: string): Promise<object>;,\n    };\n\n    export declare enum HMSVietnamCardRecognition {\n        ICRVN_IMAGE_SAVE = \"vnCardOnResult\",\n    }\n    \n    export const HMSSceneDetection = {\n        analyzeFrame(isStop: boolean, confidence: number, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, confidence: number, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export const HMSTextImageSuperResolution = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export const HMSDocumentSkewCorrection = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncDocumentSkewDetect(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n      \n        asyncDocumentSkewCorrect(isStop: boolean, frameConfiguration: FrameConfiguration, points: Point[]): Promise<object>;,\n    \n        syncDocumentSkewCorrect(isStop: boolean, frameConfiguration: FrameConfiguration, points: Point[]): Promise<object>;,\n    };\n    \n    interface Point {\n        x: number;\n        y: number;\n    }\n    \n    export const HMSLandmarkRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, landmarkAnalyzerConfiguration: LandmarkAnalyzerConfiguration): Promise<object>;,\n    };\n    \n    interface LandmarkAnalyzerConfiguration {\n        largestNumOfReturns: number;\n        patternType: HMSLandmarkRecognition;\n    }\n\n    export declare enum HMSLandmarkRecognition {\n        STEADY_PATTERN = 1,\n        NEWEST_PATTERN = 2\n    }\n    \n    export const HMSObjectRecognition = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, objectAnalyzerSettingConfiguration: ObjectAnalyzerSettingConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, objectAnalyzerSettingConfiguration: ObjectAnalyzerSettingConfiguration): Promise<object>;,\n    };\n  \n    export declare enum HMSObjectRecognition {\n        TYPE_PICTURE = 0,\n        TYPE_VIDEO = 1,\n        TYPE_OTHER = 0,\n        TYPE_GOODS = 1,\n        TYPE_FOOD = 2,\n        TYPE_FURNITURE = 3,\n        TYPE_PLANT = 4,\n        TYPE_PLACE = 5,\n        TYPE_FACE = 6\n    }\n\n    interface ObjectAnalyzerSettingConfiguration {\n        analyzerType: HMSObjectRecognition;\n        allowMultiResults: boolean;\n        allowClassification: boolean;\n    }\n    \n    export const HMSImageSegmentation = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerConfiguration: ImageSegmentationAnalyzerConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerConfiguration: ImageSegmentationAnalyzerConfiguration): Promise<object>;,\n    };\n    \n    export declare enum HMSImageSegmentation {\n        TYPE_BACKGOURND = 0,\n        TYPE_HUMAN = 1,\n        TYPE_SKY = 2,\n        TYPE_GRASS = 3,\n        TYPE_FOOD = 4,\n        TYPE_CAT = 5,\n        TYPE_BUILD = 6,\n        TYPE_FLOWER = 7,\n        TYPE_WATER = 8,\n        TYPE_SAND = 9,\n        TYPE_MOUNTAIN = 10,\n        ALL = 0,\n        MASK_ONLY = 1,\n        FOREGROUND_ONLY = 2,\n        GRAYSCALE_ONLY = 3,\n        BODY_SEG = 0,\n        IMAGE_SEG = 1,\n        HAIR_SEG = 2\n    }\n\n    interface ImageSegmentationAnalyzerConfiguration {\n        analyzerType: HMSImageSegmentation;\n        scene: HMSImageSegmentation;\n        exact: boolean;\n    }\n    \n    export const HMSImageClassification = {\n        analyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ImageClassAnalyzerSettingsOnCloud|ImageClassAnalyzerSettingsOnDevice): Promise<object>;,\n    \n        asyncAnalyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ImageClassAnalyzerSettingsOnCloud|ImageClassAnalyzerSettingsOnDevice): Promise<object>;,\n    };\n    \n    interface ImageClassAnalyzerSettingsOnCloud {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n    }\n    \n    interface ImageClassAnalyzerSettingsOnDevice {\n        minAcceptablePossibility: number;\n    }\n    \n    export const HMSImageSuperResolution = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, scale: HMSImageSuperResolution): Promise<object>;,\n    \n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, scale: HMSImageSuperResolution): Promise<object>;,\n    };\n\n    export declare enum HMSImageSuperResolution {\n        ISR_SCALE_1X = 1.0,\n        ISR_SCALE_3X = 3.0\n    }\n    \n    export const HMSProductVisionSearch = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ProductVisionSearchAnalyzerSettings): Promise<object>;,\n    \n        startProductVisionSearchCapturePlugin(pluginConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export declare enum HMSProductVisionSearch {\n        REGION_DR_CHINA = 1002,\n        REGION_DR_SINGAPORE = 1007,\n        REGION_DR_GERMAN = 1006,\n        REGION_DR_RUSSIA = 1005,\n        PRODUCT_ON_RESULT = \"productOnResult\"\n    }\n\n    interface ProductVisionSearchAnalyzerSettings {\n        maxResults: number;\n        productSetId: string;\n        region: HMSProductVisionSearch;\n    }\n    \n    export const HMSLensEngine = {\n        createLensEngine(analyzerTag: number, analyzerConfig: TextAnalyzerConfiguration | FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D | SkeletonAnalyzerConfiguration | ClassificationAnalyzerConfigurationRemote | ClassificationAnalyzerConfigurationLocal | ObjectAnalyzerSettingConfiguration | SceneAnalyzerConfiguration | HandKeyPointAnalyzerConfiguration, lensConfig: LensConfiguration): Promise<object>;,\n    \n        close(): Promise<object>;,\n    \n        doZoom(scale: number): Promise<object>;,\n    \n        getDisplayDimension(): Promise<object>;,\n    \n        getLensType(): Promise<object>;,\n    \n        photograph(): Promise<object>;,\n    \n        release(): Promise<object>;,\n    \n        run(): Promise<object>;,\n    \n        runWithView(): Promise<object>;,\n    };\n\n    export declare enum HMSLensEngine {\n        FLASH_MODE_OFF = \"off\",\n        FLASH_MODE_ON = \"on\",\n        FLASH_MODE_AUTO = \"auto\",\n        FOCUS_MODE_CONTINUOUS_PICTURE = \"continuous-picture\",\n        FOCUS_MODE_CONTINUOUS_VIDEO = \"continuous-video\",\n        BACK_LENS = 0,\n        FRONT_LENS = 1,\n        LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\",\n        LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\",\n        LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\",\n        LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\",\n        LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\",\n        TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\",\n        TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\",\n        FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\",\n        FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\",\n        FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\",\n        FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\",\n        CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\",\n        CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\",\n        OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\",\n        OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\",\n        SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\",\n        SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\",\n        SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\",\n        SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\",\n        HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\",\n        HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\",\n        GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\",\n        GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\",\n        LENS_TEXT_ANALYZER = 0,\n        LENS_FACE_2D_ANALYZER = 1,\n        LENS_FACE_3D_ANALYZER = 2,\n        LENS_SKELETON_ANALYZER = 3,\n        LENS_CLASSIFICATION_ANALYZER = 4,\n        LENS_OBJECT_ANALYZER = 5,\n        LENS_SCENE_ANALYZER = 6,\n        LENS_HAND_ANALYZER = 7,\n        LENS_GESTURE_ANALYZER = 8\n    }\n    \n    interface TextAnalyzerConfiguration {\n        language: string;\n        OCRMode: HMSTextRecognition;\n    }\n    \n    interface FaceAnalyzerConfiguration2D {\n        featureType: HMSFaceRecognition;\n        shapeType: HMSFaceRecognition;\n        keyPointType: HMSFaceRecognition;\n        performanceType: HMSFaceRecognition;\n        tracingMode: HMSFaceRecognition;\n        minFaceProportion: number;\n        isPoseDisabled: boolean;\n        isTracingAllowed: boolean;\n        isMaxSizeFaceOnly: boolean;\n    }\n    \n    interface FaceAnalyzerConfiguration3D {\n        performanceType: HMSFaceRecognition;\n        isTracingAllowed: boolean;\n    }\n    \n    interface SkeletonAnalyzerConfiguration {\n        analyzeType: HMSSkeletonDetection;\n    }\n    \n    interface ClassificationAnalyzerConfigurationRemote {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n    }\n    \n    interface ClassificationAnalyzerConfigurationLocal {\n        minAcceptablePossibility: number;\n    }\n    \n    interface SceneAnalyzerConfiguration {\n        confidence: number;\n    }\n    \n    interface HandKeyPointAnalyzerConfiguration {\n        sceneType: HMSHandKeypointDetection;\n        maxHandResults: HMSHandKeypointDetection;\n    }\n    \n    interface LensConfiguration {\n        width: number;\n        height: number;\n        lensType: number;\n        fps: number;\n        automaticFocus: boolean;\n        flashMode: string;\n        focusMode: string;\n    } \n    \n    export const HMSSkeletonDetection = {\n        analyzeFrame(isStop: boolean, analyzeType: HMSSkeletonDetection, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, analyzeType: HMSSkeletonDetection, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        calculateSimilarity(isStop: boolean, analyzeType: HMSSkeletonDetection, dataSet1: SkeletonDataSet[], dataSet2: SkeletonDataSet[]): Promise<object>;,\n    };\n    \n    export declare enum HMSSkeletonDetection {\n        TYPE_RIGHT_SHOULDER = 101,\n        TYPE_RIGHT_ELBOW = 102,\n        TYPE_RIGHT_WRIST = 103,\n        TYPE_LEFT_SHOULDER = 104,\n        TYPE_LEFT_ELBOW = 105,\n        TYPE_LEFT_WRIST = 106,\n        TYPE_RIGHT_HIP = 107,\n        TYPE_RIGHT_KNEE = 108,\n        TYPE_RIGHT_ANKLE = 109,\n        TYPE_LEFT_HIP = 110,\n        TYPE_LEFT_KNEE = 111,\n        TYPE_LEFT_ANKLE = 112,\n        TYPE_HEAD_TOP = 113,\n        TYPE_NECK = 114,\n        TYPE_NORMAL = 0,\n        TYPE_YOGA = 1,\n    }\n\n    interface SkeletonDataSet {\n        joints: Joints[]\n    }\n    \n    interface Joints {\n        type: number;\n        pointX: number;\n        pointY: number;\n        score: number;\n    }\n    \n    export const HMSLivenessDetection = {\n        startDetect(): Promise<object>;,\n    \n        setConfig(config: CaptureConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSLivenessDetection {\n        CAMERA_NO_PERMISSION = 11401,\n        CAMERA_START_FAILED = 11402,\n        USER_CANCEL = 11403,\n        DETECT_FACE_TIME_OUT = 11404,\n        DETECT_MASK = 1\n    }\n    \n    interface CaptureConfiguration {\n        option: number;\n    }\n    \n    export const HMSHandKeypointDetection = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: HandKeyPointAnalyzerConfiguration): Promise<object>;,\n    \n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: HandKeyPointAnalyzerConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSHandKeypointDetection {\n        TYPE_WRIST = 0,\n        TYPE_THUMB_FIRST = 1,\n        TYPE_THUMB_SECOND = 2,\n        TYPE_THUMB_THIRD = 3,\n        TYPE_THUMB_FOURTH = 4,\n        TYPE_FOREFINGER_FIRST = 5,\n        TYPE_FOREFINGER_SECOND = 6,\n        TYPE_FOREFINGER_THIRD = 7,\n        TYPE_FOREFINGER_FOURTH = 8,\n        TYPE_MIDDLE_FINGER_FIRST = 9,\n        TYPE_MIDDLE_FINGER_SECOND = 10,\n        TYPE_MIDDLE_FINGER_THIRD = 11,\n        TYPE_MIDDLE_FINGER_FOURTH = 12,\n        TYPE_RING_FINGER_FIRST = 13,\n        TYPE_RING_FINGER_SECOND = 14,\n        TYPE_RING_FINGER_THIRD = 15,\n        TYPE_RING_FINGER_FOURTH = 16,\n        TYPE_LITTLE_FINGER_FIRST = 17,\n        TYPE_LITTLE_FINGER_SECOND = 18,\n        TYPE_LITTLE_FINGER_THIRD = 19,\n        TYPE_LITTLE_FINGER_FOURTH = 20,\n        TYPE_ALL = 0,\n        TYPE_KEYPOINT_ONLY = 1,\n        TYPE_RECT_ONLY = 2,\n        MAX_HANDS_NUM = 10\n    }\n    \n    export const HMSFaceRecognition = {\n        asyncAnalyzeFrame(is3D: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, faceAnalyzerConfiguration: FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D): Promise<object>;,\n    \n        analyzeFrame(is3D: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, faceAnalyzerConfiguration: FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D): Promise<object>;,\n    };\n    \n    export declare enum HMSFaceRecognition {\n        MODE_TRACING_FAST = 1,\n        MODE_TRACING_ROBUST = 2,\n        TYPE_FEATURES = 1,\n        TYPE_FEATURE_AGE = 256,\n        TYPE_FEATURE_BEARD = 32,\n        TYPE_FEATURE_EMOTION = 4,\n        TYPE_FEATURE_EYEGLASS = 8,\n        TYPE_FEATURE_GENDAR = 128,\n        TYPE_FEATURE_HAT = 16,\n        TYPE_FEATURE_OPENCLOSEEYE = 64,\n        TYPE_KEYPOINTS = 1,\n        TYPE_PRECISION = 1,\n        TYPE_SHAPES = 2,\n        TYPE_SPEED = 2,\n        TYPE_UNSUPPORT_FEATURES = 2,\n        TYPE_UNSUPPORT_KEYPOINTS = 0,\n        TYPE_UNSUPPORT_SHAPES = 3,\n        TYPE_BOTTOM_OF_MOUTH = 1,\n        TYPE_LEFT_CHEEK = 2,\n        TYPE_LEFT_EAR = 3,\n        TYPE_LEFT_EYE = 5,\n        TYPE_LEFT_SIDE_OF_MOUTH = 6,\n        TYPE_RIGHT_CHEEK = 8,\n        TYPE_RIGHT_EAR = 9,\n        TYPE_RIGHT_EYE = 11,\n        TYPE_RIGHT_SIDE_OF_MOUTH = 12,\n        TYPE_TIP_OF_LEFT_EAR = 4,\n        TYPE_TIP_OF_NOSE = 7,\n        TYPE_TIP_OF_RIGHT_EAR = 10,\n        TYPE_ALL = 0,\n        TYPE_BOTTOM_OF_LEFT_EYEBROW = 4,\n        TYPE_BOTTOM_OF_LOWER_LIP = 8,\n        TYPE_BOTTOM_OF_NOSE = 12,\n        TYPE_BOTTOM_OF_RIGHT_EYEBROW = 5,\n        TYPE_BOTTOM_OF_UPPER_LIP = 10,\n        TYPE_BRIDGE_OF_NOSE = 13,\n        TYPE_FACE = 1,\n        TYPE_LEFT_EYE = 2,\n        TYPE_RIGHT_EYE = 3,\n        TYPE_TOP_OF_LEFT_EYEBROW = 6,\n        TYPE_TOP_OF_LOWER_LIP = 9,\n        TYPE_TOP_OF_RIGHT_EYEBROW = 7,\n        TYPE_TOP_OF_UPPER_LIP = 11\n    }\n    \n    export const HMSTextEmbedding = {\n        asyncAnalyzeFrame(sentence: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeSentencesSimilarity(sentenceFirst: string, sentenceSecond: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeSimilarWords(word: string, similarNum: number, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordVector(word: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordsSimilarity(wordFirst: string, wordSecond: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        getVocabularyVersion(language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordVectorBatch(words: String[], language: HMSTextEmbedding): Promise<object>;,\n    };\n\n    export declare enum HMSTextEmbedding {\n        LANGUAGE_ZH = \"zh\",\n        LANGUAGE_EN = \"en\",\n        ERR_SERVICE_IS_UNAVAILABLE = 12199,\n        ERR_NET_UNAVAILABLE = 12198,\n        ERR_INNER = 12101,\n        ERR_AUTH_FAILED = 12102,\n        ERR_PARAM_ILLEGAL = 12103,\n        ERR_ANALYZE_FAILED = 12104,\n        ERR_AUTH_TOKEN_INVALIDE = 12105\n    }\n    \n    export const HMSCustomModel = {\n        exec(isRemote: boolean, modelInputOutputSettings: ModelInputOutputSettings, modelInputConfiguration: ModelInputConfiguration, modelConfig: CustomModelConfiguration): Promise<object>;,\n    \n        close(isRemote: boolean, modelConfig: CustomModelConfiguration): Promise<object>;,\n    \n        getOutputIndex(isRemote: boolean, channelName: string, modelConfig: CustomModelConfiguration): Promise<object>;,\n    };\n    \n    interface ModelInputOutputSettings {\n        inputFormat: InputFormat;\n        outputFormat: OutputFormat;\n    }\n    \n    interface InputFormat {\n        width: number;\n        height: number;\n    }\n    \n    interface OutputFormat {\n        outputSize: number;\n    }\n    \n    interface ModelInputConfiguration {\n        uri: string;\n        height: number;\n        width: number;\n    }\n    \n    interface CustomModelConfiguration {\n        modelName: string;\n        assetPath: string;\n        localFullPath: string;\n    }\n    \n    export const HMSModelDownload = {\n        downloadModel(modelConfig: DownloadModelConfiguration, strategyConfig: StrategyConfiguration): Promise<object>;,\n    \n        deleteModel(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    \n        isModelExist(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    \n        getModels(modelTag: number): Promise<object>;,\n    \n        getRecentModelFile(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSModelDownload {\n        REGION_DR_CHINA = 1002,\n        REGION_DR_RUSSIA = 1005,\n        REGION_DR_GERMAN = 1006,\n        REGION_DR_SINGAPORE = 1007,\n        DOWNLOAD_ON_PROCESS = \"modelDownloadOnProcess\",\n        MODEL_TTS_TAG = 1,\n        MODEL_TRANSLATE_TAG = 2,\n        MODEL_CUSTOM_TAG = 3\n    }\n    \n    interface DownloadModelConfiguration {\n        translate: TranslateModelConfiguration;\n        tts: TtsModelConfiguration;\n        customRemoteModel: string;\n    }\n    \n    interface TranslateModelConfiguration {\n        languageCode: HMSTextToSpeech;\n    }\n    \n    interface TtsModelConfiguration {\n        speakerName: HMSTextToSpeech;\n    }\n    \n    export const HMSTextToSpeech = {\n        createEngine(ttsConfiguration: TtsConfiguration): Promise<object>;,\n    \n        speak(text: string, mode: HMSTextToSpeech): Promise<object>;,\n        \n        resume(): Promise<object>;,\n        \n        setPlayerVolume(volume: number): Promise<object>;,\n    \n        stop(): Promise<object>;,\n    \n        pause(): Promise<object>;,\n    \n        shutdown(): Promise<object>;,\n    \n        getLanguages(): Promise<object>;,\n    \n        getSpeaker(language: HMSTextToSpeech): Promise<object>;,\n    \n        getSpeakers(): Promise<object>;,\n    \n        isLanguageAvailable(language: HMSTextToSpeech): Promise<object>;,\n    \n        updateConfig(ttsConfiguration: TtsConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSTextToSpeech {\n        TTS_SPEAKER_FEMALE_ZH = \"Female-zh\",\n        TTS_SPEAKER_FEMALE_EN = \"Female-en\",\n        TTS_SPEAKER_MALE_ZH = \"Male-zh\",\n        TTS_SPEAKER_MALE_EN = \"Male-en\",\n        TTS_SPEAKER_FEMALE_ZH_1 = \"zh-Hans-st-1\",\n        TTS_SPEAKER_MALE_ZH_1 = \"zh-Hans-st-2\",\n        TTS_SPEAKER_FEMALE_ZH_2 = \"zh-Hans-st-3\",\n        TTS_SPEAKER_MALE_ZH_2 = \"zh-Hans-st-4\",\n        TTS_SPEAKER_FEMALE_EN_1 = \"en-US-st-1\",\n        TTS_SPEAKER_MALE_EN_1 = \"en-US-st-2\",\n        TTS_SPEAKER_FEMALE_EN_2 = \"en-US-st-3\",\n        TTS_SPEAKER_MALE_EN_2 = \"en-US-st-4\",\n        TTS_SPEAKER_FEMALE_ZH_HQ = \"zh-Hans-hq-1\",\n        TTS_SPEAKER_FEMALE_EN_HQ = \"en-US-hq-1\",\n        TTS_SPEAKER_MALE_ZH_HQ = \"zh-Hans-hq-2\",\n        TTS_SPEAKER_MALE_EN_HQ = \"en-US-hq-2\",\n        TTS_SPEAKER_FEMALE_FR = \"fr-FR-st-1\",\n        TTS_SPEAKER_FEMALE_ES = \"es-ES-st-1\",\n        TTS_SPEAKER_FEMALE_DE = \"de-DE-st-1\",\n        TTS_SPEAKER_FEMALE_IT = \"it-IT-st-1\",\n        TTS_SPEAKER_FEMALE_AR = \"ar-AR-st-1\",\n        TTS_SPEAKER_FEMALE_RU = \"ru-RU-st-1\",\n        TTS_SPEAKER_FEMALE_TH = \"th-TH-st-1\",\n        TTS_SPEAKER_FEMALE_PL = \"pl-PL-st-1\",\n        TTS_SPEAKER_FEMALE_MS = \"ms-MS-st-1\",\n        TTS_SPEAKER_FEMALE_TR = \"tr-TR-st-1\",\n        TTS_ZH_HANS = \"zh-Hans\",\n        TTS_EN_US = \"en-US\",\n        TTS_LAN_FR_FR = \"fr-FR\",\n        TTS_LAN_ES_ES = \"es-ES\",\n        TTS_LAN_DE_DE = \"de-DE\",\n        TTS_LAN_IT_IT = \"it-IT\",\n        TTS_LAN_AR_AR = \"ar-AR\",\n        TTS_LAN_RU_RU = \"ru-RU\",\n        TTS_LAN_TH_TH = \"th-TH\",\n        TTS_LAN_PL_PL = \"pl-PL\",\n        TTS_LAN_MS_MS = \"ms-MS\",\n        TTS_LAN_TR_TR = \"tr-TR\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_BOLT = \"zh-Hans-st-bolt-1\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_BOLT = \"zh-Hans-st-bolt-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BOLT = \"en-US-st-bolt-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_MALE_BOLT = \"en-US-st-bolt-2\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE = \"zh-Hans-st-eagle-,\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE = \"zh-Hans-st-eagle-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE = \"en-US-st-eagle-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE = \"en-US-st-eagle-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE = \"en-US-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE = \"fr-FR-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE = \"es-ES-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE = \"de-DE-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE = \"it-IT-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_FLY = \"en-US-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_FLY = \"fr-FR-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_FLY = \"es-ES-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_FLY = \"de-DE-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_FLY = \"it-IT-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_AR_AR_FEMALE_FLY = \"ar-AR-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_RU_RU_FEMALE_FLY = \"ru-RU-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_TH_TH_FEMALE_FLY = \"th-TH-st-fly-1\",\n        EVENT_PLAY_START = 1,\n        EVENT_PLAY_RESUME = 2,\n        EVENT_PLAY_PAUSE = 3,\n        EVENT_PLAY_STOP = 4,\n        EVENT_SYNTHESIS_START = 5,\n        EVENT_SYNTHESIS_END = 6,\n        EVENT_SYNTHESIS_COMPLETE = 7,\n        EVENT_PLAY_STOP_INTERRUPTED = \"interrupted\",\n        EVENT_SYNTHESIS_INTERRUPTED = \"interrupted\",\n        LANGUAGE_AVAILABLE = 0,\n        LANGUAGE_NOT_SUPPORT = 1,\n        LANGUAGE_UPDATING = 2,\n        TTS_ONLINE_MODE = \"online\",\n        TTS_OFFLINE_MODE = \"offline\",\n        QUEUE_APPEND = 0,\n        QUEUE_FLUSH = 1,\n        EXTERNAL_PLAYBACK = 2,\n        OPEN_STREAM = 4,\n        ERR_ILLEGAL_PARAMETER = 11301,\n        ERR_NET_CONNECT_FAILED = 11302,\n        ERR_INSUFFICIENT_BALANCE = 11303,\n        ERR_SPEECH_SYNTHESIS_FAILED = 11304,\n        ERR_AUDIO_PLAYER_FAILED = 11305,\n        ERR_AUTHORIZE_FAILED = 11306,\n        ERR_AUTHORIZE_TOKEN_INVALIDE = 11307,\n        ERR_INTERNAL = 11398,\n        ERR_UNKNOWN = 11399,\n        WARN_INSUFFICIENT_BANDWIDTH = 113001,\n        FORMAT_PCM_8BIT = 1,\n        FORMAT_PCM_16BIT = 2,\n        SAMPLE_RATE_16K = 16000,\n        CHANNEL_OUT_MONO = 4,\n        TTS_ON_AUDIO_AVAILABLE = \"ttsOnAudioAvailable\",\n        TTS_ON_EVENT = \"ttsOnEvent\",\n        TTS_ON_RANGE_START = \"ttsOnRangeStart\",\n        TTS_ON_WARN = \"ttsOnWarn\",\n        TTS_ON_ERROR = \"ttsOnError\"\n    }\n    \n    interface TtsConfiguration {\n        volume: number;\n        speed: number;\n        language: HMSTextToSpeech;\n        person: HMSTextToSpeech;\n        synthesizeMode: HMSTextToSpeech;\n    }\n    \n    export const HMSSoundDetect = {\n        createSoundDetector(): Promise<object>;,\n    \n        destroy(): Promise<object>;,\n    \n        stop(): Promise<object>;,\n    \n        start(): Promise<object>;,\n    \n        setSoundDetectorListener(): Promise<object>;,\n    };\n\n    export declare enum HMSSoundDetect {\n        SOUND_DETECT_ERROR_NO_MEM = 12201,\n        SOUND_DETECT_ERROR_FATAL_ERROR = 12202,\n        SOUND_DETECT_ERROR_AUDIO = 12203,\n        SOUND_DETECT_ERROR_INTERNAL = 12298,\n        SOUND_EVENT_TYPE_LAUGHTER = 0,\n        SOUND_EVENT_TYPE_BABY_CRY = 1,\n        SOUND_EVENT_TYPE_SNORING = 2,\n        SOUND_EVENT_TYPE_SNEEZE = 3,\n        SOUND_EVENT_TYPE_SCREAMING = 4,\n        SOUND_EVENT_TYPE_MEOW = 5,\n        SOUND_EVENT_TYPE_BARK = 6,\n        SOUND_EVENT_TYPE_WATER = 7,\n        SOUND_EVENT_TYPE_CAR_ALARM = 8,\n        SOUND_EVENT_TYPE_DOOR_BELL = 9,\n        SOUND_EVENT_TYPE_KNOCK = 10,\n        SOUND_EVENT_TYPE_ALARM = 11,\n        SOUND_EVENT_TYPE_STEAM_WHISTLE = 12,\n        SOUND_DETECT_ON_FAILURE = \"soundDetectOnFailure\",\n        SOUND_DETECT_ON_SUCCESS = \"soundDetectOnSuccess\"\n    }\n\n    export declare enum MLSpeechRealTimeTranscriptionConstants {\n        ERR_NO_NETWORK = 13202,\n        ERR_SERVICE_UNAVAILABLE = 13203,\n        ERR_INVALIDE_TOKEN = 13219,\n        ERR_SERVICE_CREDIT = 13222,\n        ERR_SERVICE_UNSUBSCRIBED = 13223,\n        ERR_SERVICE_FREE_USED_UP = 13224,\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-FR\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        STATE_LISTENING = 1,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_SERVICE_RECONNECTING = 42,\n        STATE_SERVICE_RECONNECTED = 43,\n        SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnError\",\n        SPEECH_RTT_ON_ERROR = \"speechRttOnError\",\n        SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\",\n        SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\",\n        SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\",\n        SPEECH_RTT_ON_STATE = \"speechRttOnState\",\n        SCENES_SHOPPING = \"shopping\"\n    }\n\n    export const HMSComposite = {\n        createCompositeAnalyzer(configuration: TextAnalyzerConfiguration | CompositeFaceAnalyzerFaceAnalyzerConfiguration2D | CompositeFaceAnalyzerConfiguration3D | SkeletonAnalyzerConfiguration | CompositeClassificationAnalyzerConfigurationRemote | CompositeClassificationAnalyzerConfigurationLocal | ObjectAnalyzerSettingConfiguration |  HandKeyPointAnalyzerConfiguration): Promise<object>;,\n    \n        isAvailable(): Promise<object>;,\n    \n        destroy(): Promise<object>;,\n    \n        analyzeFrame(frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n\n    interface CompositeFaceAnalyzerFaceAnalyzerConfiguration2D {\n        featureType: HMSFaceRecognition;\n        shapeType: HMSFaceRecognition;\n        keyPointType: HMSFaceRecognition;\n        performanceType: HMSFaceRecognition;\n        tracingMode: HMSFaceRecognition;\n        minFaceProportion: number;\n        isPoseDisabled: boolean;\n        isTracingAllowed: boolean;\n        isFace2D: true;\n    }\n\n    interface CompositeFaceAnalyzerConfiguration3D {\n        performanceType: HMSFaceRecognition;\n        isTracingAllowed: boolean;\n        isFace2D: false;\n    }\n\n    interface CompositeClassificationAnalyzerConfigurationRemote {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n        isRemote: true;\n    }\n\n    interface CompositeClassificationAnalyzerConfigurationLocal {\n        minAcceptablePossibility: number;\n        isRemote: false;\n    }\n}"
  },
  {
    "path": "react-native-hms-ml/src/index.js",
    "content": "/*\n    Copyright 2020-2022. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nimport React, { Component } from 'react';\nimport { requireNativeComponent, View } from 'react-native';\n\nconst HMSSurfaceView = requireNativeComponent('HMSSurfaceView');\n\nexport const {\n  HMSFrame,\n  HMSTextRecognition,\n  HMSDocumentRecognition,\n  HMSBankCardRecognition,\n  HMSGeneralCardRecognition,\n  HMSIDCardRecognition,\n  HMSVietnamCardRecognition,\n  HMSFormRecognition,\n  HMSTranslate,\n  HMSLanguageDetection,\n  HMSAsr,\n  HMSAft,\n  HMSSpeechRtt,\n  HMSSoundDetect,\n  HMSImageClassification,\n  HMSObjectRecognition,\n  HMSLandmarkRecognition,\n  HMSImageSegmentation,\n  HMSImageSuperResolution,\n  HMSProductVisionSearch,\n  HMSDocumentSkewCorrection,\n  HMSTextImageSuperResolution,\n  HMSSceneDetection,\n  HMSFaceRecognition,\n  HMSFaceVerification,\n  HMSModelDownload,\n  HMSTextToSpeech,\n  HMSApplication,\n  HMSTextEmbedding,\n  HMSCustomModel,\n  HMSSkeletonDetection,\n  HMSLivenessDetection,\n  HMSLensEngine,\n  HMSHandKeypointDetection,\n  HMSGestureDetection,\n  HMSComposite\n} = NativeModules;\n\nexport default class SurfaceView extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return <HMSSurfaceView {...this.props} />;\n  }\n}\n\nSurfaceView.propTypes = {\n  ...View.propTypes\n}"
  },
  {
    "path": "react-native-hms-mlbody/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mlbody/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: react-native-image-picker &nbsp;7.0.3</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">The MIT License (MIT)</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy<br />\nof this software and associated documentation files (the &quot;Software&quot;), to deal<br />\nin the Software without restriction, including without limitation the rights<br />\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\ncopies of the Software, and to permit persons to whom the Software is<br />\nfurnished to do so, subject to the following conditions:</p>\n\n<p>The above copyright notice and this permission notice shall be included in all<br />\ncopies or substantial portions of the Software.</p>\n\n<p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\nSOFTWARE.</p>\n\n<h1 style=\"text-align:start\">&nbsp;</h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;<strong><span style=\"font-size:16pt\">Written Offer&nbsp;</span></strong><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:</span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"color:blue\"><u><span style=\"font-family:Arial,sans-serif\"><a href=\"mailto:foss@huawei.com\" style=\"color:blue; text-decoration:underline\">foss@huawei.com</a></span></u></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">This offer is valid to anyone in receipt of this information.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-mlbody/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS ML Body</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mlbody\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-mlbody?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mlbody\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-mlbody?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-mlbody.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThe React Native ML Body Plugin allows your apps to easily leverage Huawei's long-term proven expertise in machine learning to support diverse artificial intelligence (AI) applications throughout a wide range of industries. Thanks to Huawei's technology accumulation, ML Body Plugin provides diversified leading machine learning capabilities that are easy to use, helping you develop various AI apps.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050726178?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-mlbody\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/introduction-0000001665009017-V1)\n\n### Additional Topics\n\n- [Supported Location](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/supported-location-0000001075977968-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native ML Body Plugin is licenced under [Apache 2.0 licence](LICENSE)"
  },
  {
    "path": "react-native-hms-mlbody/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.9.1.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 31\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 31\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenCentral()\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation \"com.facebook.react:react-native:+\"\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-face:3.11.0.301'\n    // Import the contour and key point detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-shape-point-model:3.7.0.301'\n    // Import the facial expression detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-emotion-model:3.7.0.301'\n    // Import the facial feature detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-feature-model:3.7.0.301'\n    // Import the 3D face detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-face-3d-model:3.7.0.301'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton:3.11.0.301'\n    // Import the skeleton detection model package for normal postures.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton-model:3.11.0.301'\n    // Import the skeleton detection model package for yoga postures.\n    implementation 'com.huawei.hms:ml-computer-vision-yoga-model:3.11.0.301'\n\n    // Import the combined liveness detection package.\n    implementation 'com.huawei.hms:ml-computer-vision-livenessdetection:3.11.0.301'\n\n    // Import the interactive biometric verification package.\n    implementation 'com.huawei.hms:ml-computer-vision-interactive-livenessdetection:3.12.0.300'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint:3.11.0.301'\n    // Import the hand keypoint detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint-model:3.7.0.301'\n    // Import the hand gesture recognition model package.\n    implementation 'com.huawei.hms:ml-computer-vision-gesture-model:3.7.0.301'\n\n    //faceVerification\n    implementation 'com.huawei.hms:ml-computer-vision-faceverify:3.11.0.302'\n    implementation 'com.huawei.hms:ml-computer-vision-faceverify-model:3.11.0.302'\n}"
  },
  {
    "path": "react-native-hms-mlbody/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mlbody/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx2048m"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.mlbody\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"29\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n</manifest>"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/HMSBase.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.rn.mlbody.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    public HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * To obtain context\n     *\n     * @return app context\n     */\n    public ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     *\n     * @param methodName Name of the method\n     */\n    protected void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        if (e instanceof MLException) {\n            MLException e1 = (MLException) e;\n            promise.resolve(UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()));\n        } else {\n            promise.resolve(UNKNOWN.getStatusAndMessage(null, e.getMessage()));\n        }\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, HMSResults e, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(e.getStatusAndMessage());\n    }\n\n    /**\n     * Handles success\n     *\n     * @param methodName method name\n     * @param writableMap result\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, WritableMap writableMap, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/HMSMLBody.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.mlbody.commonservices.HMSApplication;\nimport com.huawei.hms.rn.mlbody.commonservices.HMSLensEngine;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSFaceRecognition;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSFaceVerification;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSGestureDetection;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSHandKeypointDetection;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSInteractiveLivenessCustomDetectionHandler;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSInteractiveLivenessDetection;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSLivenessDetection;\nimport com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSSkeletonDetection;\nimport com.huawei.hms.rn.mlbody.helpers.views.HMSSurfaceView;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSMLBody implements ReactPackage {\n\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSApplication(reactContext));\n        modules.add(new HMSFaceRecognition(reactContext));\n        modules.add(new HMSFaceVerification(reactContext));\n        modules.add(new HMSSkeletonDetection(reactContext));\n        modules.add(new HMSLivenessDetection(reactContext));\n        modules.add(new HMSHandKeypointDetection(reactContext));\n        modules.add(new HMSGestureDetection(reactContext));\n        modules.add(new HMSLensEngine(reactContext));\n        modules.add(new HMSInteractiveLivenessDetection(reactContext));\n        modules.add(new HMSInteractiveLivenessCustomDetectionHandler(reactContext));\n        return modules;\n    }\n\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.singletonList(new HMSSurfaceView());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/commonservices/HMSApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.commonservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.ERROR_CODES;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.UNKNOWN;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.common.MLApplication;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class HMSApplication extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSApplication(ReactApplicationContext reactContext) {\n        super(reactContext, HMSApplication.class.getSimpleName(), ERROR_CODES);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param apiKey api key\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param accessToken access token\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAccessToken(String accessToken, final Promise promise) {\n        startMethodExecTimer(\"setAccessToken\");\n\n        if (TextUtils.isEmpty(accessToken)) {\n            handleResult(\"setAccessToken\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setAccessToken(accessToken);\n        handleResult(\"setAccessToken\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns api key that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        handleResult(\"getApiKey\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getApiKey()), promise);\n    }\n\n    /**\n     * Enables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n        handleResult(\"enableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        handleResult(\"disableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns Country Code that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getCountryCode(final Promise promise) {\n        startMethodExecTimer(\"getCountryCode\");\n        handleResult(\"getCountryCode\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getCountryCode()), promise);\n    }\n\n    /**\n     * Sets the userRegion dynamically\n     *\n     * @param userRegion\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setUserRegion(int userRegion, final Promise promise) {\n        startMethodExecTimer(\"setUserRegion\");\n\n        if ( userRegion != MLApplication.REGION_DR_CHINA &&\n            userRegion != MLApplication.REGION_DR_GERMAN &&\n            userRegion != MLApplication.REGION_DR_RUSSIA &&\n            userRegion != MLApplication.REGION_DR_SINGAPORE ) {\n            handleResult(\"setUserRegion\", UNKNOWN, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setUserRegion(userRegion);\n        handleResult(\"setUserRegion\", SUCCESS, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/commonservices/HMSLensEngine.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.commonservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_ENGINE_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_ON_CLICK_SHUTTER;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_ON_PHOTO_TAKEN;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSLensEngine extends HMSBase implements LensEngine.ShutterListener, LensEngine.PhotographListener {\n    private LensEngine lensEngine;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     */\n    public HMSLensEngine(ReactApplicationContext mContext) {\n        super(mContext, HMSLensEngine.class.getSimpleName(), LENS_ENGINE_CONSTANTS);\n    }\n\n    /**\n     * Creates lens engine with an analyzer\n     *\n     * @param analyzerTag analyzer tag\n     * @param analyzerConfig analyzer configuration\n     * @param lensConfig lens engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createLensEngine(int analyzerTag, ReadableMap analyzerConfig, ReadableMap lensConfig,\n        final Promise promise) {\n        startMethodExecTimer(\"createLensEngine\");\n        MLAnalyzer analyzer = HMSObjectCreator.getInstance()\n            .createLensEngineAnalyzer(analyzerTag, analyzerConfig, getContext());\n\n        if (analyzer == null) {\n            handleResult(\"close\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        lensEngine = HMSObjectCreator.getInstance().createLensEngine(getContext(), analyzer, lensConfig);\n        handleResult(\"createLensEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Closes the camera and stops sending frames to the frame analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n\n        if (lensEngine == null) {\n            handleResult(\"close\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Adjusts the focal length of the camera based on the scaling coefficient (digital zoom).\n     *\n     * @param scale zoom scale\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void doZoom(double scale, final Promise promise) {\n        startMethodExecTimer(\"doZoom\");\n\n        if (lensEngine == null) {\n            handleResult(\"doZoom\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.doZoom((float) scale);\n        handleResult(\"doZoom\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the size of the preview image of a camera.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getDisplayDimension(final Promise promise) {\n        startMethodExecTimer(\"getDisplayDimension\");\n\n        if (lensEngine == null) {\n            handleResult(\"getDisplayDimension\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getDisplayDimension\",\n            HMSResultCreator.getInstance().displayDimensionResult(lensEngine.getDisplayDimension()), promise);\n    }\n\n    /**\n     * Obtains the selected camera type.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLensType(final Promise promise) {\n        startMethodExecTimer(\"getLensType\");\n\n        if (lensEngine == null) {\n            handleResult(\"getLensType\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLensType\", HMSResultCreator.getInstance().integerResult(lensEngine.getLensType()), promise);\n    }\n\n    /**\n     * Monitors photographing.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void photograph(final Promise promise) {\n        startMethodExecTimer(\"photograph\");\n\n        if (lensEngine == null) {\n            handleResult(\"photograph\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.photograph(this, this);\n        handleResult(\"photograph\", SUCCESS, promise);\n    }\n\n    /**\n     * Releases resources occupied by LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void release(final Promise promise) {\n        startMethodExecTimer(\"release\");\n\n        if (lensEngine == null) {\n            handleResult(\"release\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.release();\n        lensEngine = null;\n        handleResult(\"release\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void run(final Promise promise) {\n        startMethodExecTimer(\"run\");\n\n        if (lensEngine == null) {\n            handleResult(\"run\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run();\n            handleResult(\"run\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"run\", e, promise);\n        }\n    }\n\n    /**\n     * Starts the LensEngine and uses SurfaceView as the frame preview panel.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void runWithView(final Promise promise) {\n        startMethodExecTimer(\"runWithView\");\n\n        if (lensEngine == null) {\n            handleResult(\"runWithView\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().getSurfaceViewHolder() == null) {\n            handleResult(\"runWithView\", LENS_HOLDER_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run(HMSUtils.getInstance().getSurfaceViewHolder());\n            handleResult(\"runWithView\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"runWithView\", e, promise);\n        }\n    }\n\n    /**\n     * Photograph take event\n     *\n     * @param bytes Picture as bytes\n     */\n    @Override\n    public void takenPhotograph(byte[] bytes) {\n        Bitmap photo = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), photo)\n            .addOnSuccessListener(s -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(e -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                FAILURE.getStatusAndMessage(null, e.getMessage())));\n    }\n\n    /**\n     * Shutter click event\n     */\n    @Override\n    public void clickShutter() {\n        sendEvent(LENS_ON_CLICK_SHUTTER, \"clickShutter\", null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSFaceRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzer;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSFaceRecognition extends HMSBase {\n\n    /**\n     * Initialize module\n     *\n     * @param context app context\n     */\n    public HMSFaceRecognition(ReactApplicationContext context) {\n        super(context, HMSFaceRecognition.class.getSimpleName(), FACE_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Detects faces in a supplied image in asynchronous mode.\n     *\n     * @param is3D makes 3D face analyze if true\n     * @param isStop releases the analyzer resources\n     * @param frameConfiguration frame obtaining configuration\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean is3D, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap faceAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (is3D) {\n            ML3DFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create3DFaceAnalyzer(faceAnalyzerConfiguration);\n            faceAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(ml3DFaces -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().get3DFaceResult(ml3DFaces), promise);\n            }).addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            });\n        } else {\n            MLFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create2DFaceAnalyzer(faceAnalyzerConfiguration);\n            faceAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlFaces -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getFaceResult(mlFaces), promise);\n            }).addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(faceAnalyzer);\n                }\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            });\n        }\n    }\n\n    /**\n     * Detects faces in a supplied image in synchronous mode.\n     *\n     * @param is3D makes 3D face analyze if true\n     * @param isStop releases the analyzer resources\n     * @param frameConfiguration frame obtaining configuration\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean is3D, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap faceAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame2D\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (is3D) {\n            ML3DFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create3DFaceAnalyzer(faceAnalyzerConfiguration);\n            WritableMap wm = HMSResultCreator.getInstance()\n                .get3DFaceResult(HMSUtils.getInstance().convertSparseArrayToList(faceAnalyzer.analyseFrame(frame)));\n\n            if (isStop) {\n                stopAnalyzer(faceAnalyzer);\n            }\n\n            handleResult(\"analyzeFrame\", wm, promise);\n        } else {\n            MLFaceAnalyzer faceAnalyzer = HMSObjectCreator.getInstance()\n                .create2DFaceAnalyzer(faceAnalyzerConfiguration);\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getFaceResult(HMSUtils.getInstance().convertSparseArrayToList(faceAnalyzer.analyseFrame(frame)));\n\n            if (isStop) {\n                stopAnalyzer(faceAnalyzer);\n            }\n\n            handleResult(\"analyzeFrame\", wm, promise);\n        }\n    }\n\n    /**\n     * Stops face analyzer\n     *\n     * @param faceAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLFaceAnalyzer faceAnalyzer) {\n        try {\n            faceAnalyzer.stop();\n            Log.i(getName(), \"MLFaceAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLFaceAnalyzer stop : \" + e.getMessage());\n        }\n    }\n\n    /**\n     * Stops 3D face analyzer\n     *\n     * @param faceAnalyzer analyzer\n     */\n    private void stopAnalyzer(ML3DFaceAnalyzer faceAnalyzer) {\n        try {\n            faceAnalyzer.stop();\n            Log.i(getName(), \"ML3DFaceAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"ML3DFaceAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSFaceVerification.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_VERIFICATION_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.util.SparseArray;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceTemplateResult;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzer;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerFactory;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationResult;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSFaceVerification extends HMSBase {\n\n    private static final String TAG = HMSFaceVerification.class.getSimpleName();\n\n    private MLFaceVerificationAnalyzer analyzer;\n\n    private MLFaceVerificationAnalyzerSetting setting;\n\n    /**\n     * Initialize module\n     *\n     * @param context app context\n     */\n    public HMSFaceVerification(ReactApplicationContext context) {\n        super(context, HMSFaceVerification.class.getSimpleName(), FACE_VERIFICATION_CONSTANTS);\n        initAnalyzer();\n    }\n\n    private void initAnalyzer() {\n        setting = new MLFaceVerificationAnalyzerSetting.Factory().setMaxFaceDetected(3).create();\n        analyzer = MLFaceVerificationAnalyzerFactory.getInstance().getFaceVerificationAnalyzer(setting);\n    }\n\n    @ReactMethod\n    public void setMaxFaceDetected(int maxFaceDetected, Promise promise) {\n        startMethodExecTimer(\"setMaxFaceDetected\");\n        if (maxFaceDetected < 1) {\n            maxFaceDetected = 1;\n        } else if (maxFaceDetected > 3) {\n            maxFaceDetected = 3;\n        }\n\n        setting = new MLFaceVerificationAnalyzerSetting.Factory().setMaxFaceDetected(maxFaceDetected).create();\n        analyzer = MLFaceVerificationAnalyzerFactory.getInstance().getFaceVerificationAnalyzer(setting);\n        handleResult(\"setMaxFaceDetected\", SUCCESS, promise);\n    }\n\n    @ReactMethod\n    public void getMaxFaceDetected(Promise promise) {\n        startMethodExecTimer(\"setMaxFaceDetected\");\n        int maxFaceCount = setting.getMaxFaceDetcted();\n        WritableMap res = Arguments.createMap();\n        res.putInt(\"maxFaceCount\", maxFaceCount);\n        handleResult(\"setMaxFaceDetected\", res, promise);\n    }\n\n    @ReactMethod\n    public void loadTemplatePic(ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"loadTemplatePic\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"loadTemplatePic\", FRAME_NULL, promise);\n            return;\n        }\n\n        long startTime = System.currentTimeMillis();\n        List<MLFaceTemplateResult> results = analyzer.setTemplateFace(frame);\n        long endTime = System.currentTimeMillis();\n        int cost = (int) (endTime - startTime);\n        WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationTemplateResult(results, cost);\n\n        handleResult(\"loadTemplatePic\", wm, promise);\n    }\n\n    @ReactMethod\n    public void compare(boolean isStop, ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"compare\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"compare\", FRAME_NULL, promise);\n            return;\n        }\n\n        final long startTime = System.currentTimeMillis();\n        SparseArray<MLFaceVerificationResult> list = analyzer.analyseFrame(frame);\n        long endTime = System.currentTimeMillis();\n        int cost = (int) (endTime - startTime);\n        WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationCompareResults(list, cost);\n\n        if (isStop) {\n            analyzer.stop();\n        }\n\n        handleResult(\"compare\", wm, promise);\n    }\n\n    @ReactMethod\n    public void asyncCompare(boolean isStop, ReadableMap frameConfiguration, Promise promise) {\n        startMethodExecTimer(\"asyncCompare\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncCompare\", FRAME_NULL, promise);\n            return;\n        }\n\n        final long startTime = System.currentTimeMillis();\n        Task<List<MLFaceVerificationResult>> task = analyzer.asyncAnalyseFrame(frame);\n        task.addOnSuccessListener(mlCompareList -> {\n            long endTime = System.currentTimeMillis();\n            int cost = (int) (endTime - startTime);\n            WritableMap wm = HMSResultCreator.getInstance().getFaceVerificationCompareResults(mlCompareList, cost);\n            if (isStop) {\n                analyzer.stop();\n            }\n\n            handleResult(\"asyncCompare\", wm, promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                analyzer.stop();\n            }\n            handleResult(\"asyncCompare\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSGestureDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.GESTURE_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzer;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSGestureDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSGestureDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSGestureDetection.class.getSimpleName(), GESTURE_CONSTANTS);\n    }\n\n    /**\n     * Detects gesture in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLGestureAnalyzer gestureAnalyzer = HMSObjectCreator.getInstance().createGestureAnalyzer();\n        WritableMap wm = HMSResultCreator.getInstance().getGestureResults(gestureAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            gestureAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n\n    }\n\n    /**\n     * Detects gesture in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLGestureAnalyzer gestureAnalyzer = HMSObjectCreator.getInstance().createGestureAnalyzer();\n        gestureAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(gesture -> {\n            if (isStop) {\n                gestureAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getGestureResults(gesture), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                gestureAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSHandKeypointDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.HANDKEYPOINT_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzer;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSHandKeypointDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSHandKeypointDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSHandKeypointDetection.class.getSimpleName(), HANDKEYPOINT_CONSTANTS);\n    }\n\n    /**\n     * Detects hand key points in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Analyzer configuration to create analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLHandKeypointAnalyzer handKeypointAnalyzer = HMSObjectCreator.getInstance()\n            .createHandKeyPointAnalyzer(analyzerSetting);\n        WritableMap wm = HMSResultCreator.getInstance()\n            .getHandKeyPointResults(handKeypointAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            handKeypointAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n    }\n\n    /**\n     * Detects hand key points in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Analyzer configuration to create analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLHandKeypointAnalyzer handKeyPointAnalyzer = HMSObjectCreator.getInstance()\n            .createHandKeyPointAnalyzer(analyzerSetting);\n        handKeyPointAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(keypoints -> {\n            if (isStop) {\n                handKeyPointAnalyzer.stop();\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getHandKeyPointResults(keypoints),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handKeyPointAnalyzer.stop();\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSInteractiveCustomLivenessDetectionActivity.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.Rect;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.util.TypedValue;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\nimport android.widget.RelativeLayout;\nimport android.widget.TextView;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureError;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureResult;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessDetectView;\nimport com.huawei.hms.mlsdk.interactiveliveness.OnMLInteractiveLivenessDetectCallback;\nimport com.huawei.hms.mlsdk.interactiveliveness.action.InteractiveLivenessStateCode;\nimport com.huawei.hms.mlsdk.interactiveliveness.action.MLInteractiveLivenessConfig;\nimport com.huawei.hms.rn.mlbody.R;\n\nimport com.facebook.react.ReactActivity;\n\nimport java.util.HashMap;\n\npublic class HMSInteractiveCustomLivenessDetectionActivity extends ReactActivity {\n    public static final int DETECT_FACE_TIME_OUT = 11404;\n\n    private static final String TAG = HMSInteractiveCustomLivenessDetectionActivity.class.getSimpleName();\n\n    String failResult = \"\";\n\n    boolean autoSizeText = false;\n\n    int minTextSize = 3;\n\n    int maxTextSize = 24;\n\n    int textMargin = 900;\n\n    int granularity = 0;\n\n    String header = \"\";\n\n    private MLInteractiveLivenessDetectView mlInteractiveLivenessDetectView;\n\n    private FrameLayout mPreviewContainer;\n\n    private RelativeLayout mTextContainer;\n\n    private Intent intent;\n\n    private Context mContext;\n\n    private boolean defaultConfig = false;\n\n    private Bundle bundle;\n\n    private ImageView imgBack;\n\n    private MLInteractiveLivenessConfig interactiveLivenessConfig;\n\n    private float textSize;\n\n    private TextView statusCode;\n    private TextView imgbackHeader;\n    private TextView tips;\n\n    private HashMap<Integer, String> actionMap = new HashMap<>();\n\n    private HashMap<Integer, String> statusCodeList = new HashMap<>();\n\n    @RequiresApi(api = Build.VERSION_CODES.O)\n    @SuppressLint( {\"WrongViewCast\", \"UseCompatLoadingForDrawables\"})\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n\n        super.onCreate(savedInstanceState);\n        mContext = this.getApplicationContext();\n        intent = getIntent();\n        statusCodeList = (HashMap<Integer, String>) getIntent().getSerializableExtra(\"statusCodeMessageMap\");\n\n        try {\n            bundle = intent.getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n\n        autoSizeText = bundle.getBoolean(\"autoSizeText\");\n        minTextSize = bundle.getInt(\"minTextSize\");\n        maxTextSize = bundle.getInt(\"maxTextSize\");\n        textMargin = bundle.getInt(\"textMargin\");\n        textSize = bundle.getFloat(\"textSize\");\n        granularity = bundle.getInt(\"granularity\");\n        header = bundle.getString(\"header\");\n\n        setLayout();\n\n        ImageView scanBg = new ImageView(this);\n        ViewGroup.LayoutParams layoutParams = new FrameLayout.LayoutParams(\n            bundle.getInt(\"cameraRight\") - bundle.getInt(\"cameraLeft\"),\n            bundle.getInt(\"cameraBottom\") - bundle.getInt(\"cameraTop\"));\n        scanBg.setLayoutParams(layoutParams);\n        scanBg.setY(bundle.getInt(\"faceTop\") - 25);\n        scanBg.setX(bundle.getInt(\"faceLeft\"));\n        scanBg.setImageDrawable(getDrawable(R.drawable.liveness_detection_frame));\n\n        imgBack.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                finish();\n            }\n        });\n\n        imgbackHeader.setText(header);\n\n        mTextContainer.setY(textMargin);\n\n        if (bundle.getBoolean(\"showStatusCodes\")) {\n            statusCode.setVisibility(View.VISIBLE);\n        } else {\n            statusCode.setVisibility(View.GONE);\n        }\n        tips.setTextColor(bundle.getInt(\"textColor\"));\n        statusCode.setTextColor(bundle.getInt(\"textColor\"));\n\n        applyStyleAutoSize(statusCode);\n        applyStyleAutoSize(tips);\n\n\n        actionMap = (HashMap<Integer, String>) getIntent().getSerializableExtra(\"actionArray\");\n        int[] actionArray = new int[actionMap.size()];\n\n        if (actionArray != null && actionArray.length != 0) {\n\n            int index = 0;\n            for (Integer key : actionMap.keySet()) {\n                actionArray[index++] = key;\n            }\n\n            interactiveLivenessConfig = new MLInteractiveLivenessConfig.Builder().setActionArray(actionArray,\n                bundle.getInt(\"num\"), bundle.getBoolean(\"isRandom\")).build();\n        } else {\n            defaultConfig = true;\n            interactiveLivenessConfig = new MLInteractiveLivenessConfig.Builder().build();\n        }\n\n        mlInteractiveLivenessDetectView = new MLInteractiveLivenessDetectView.Builder().setContext(this)\n            // Set the position of the camera video stream. (The coordinates of the upper left vertex and lower right vertex are determined based on the preview view.)\n            .setFrameRect(\n                new Rect(bundle.getInt(\"cameraLeft\"), bundle.getInt(\"cameraTop\"), bundle.getInt(\"cameraRight\"),\n                    bundle.getInt(\"cameraBottom\")))\n            // Set the configurations for interactive biometric verification.\n            .setActionConfig(interactiveLivenessConfig)\n            // Set the position of the face frame relative to the camera preview view. The coordinates of the upper left vertex and lower right vertex are determined based on a 640 x 480 px image. You are advised to ensure the face frame dimensions comply with the ratio of a real face. The face frame is used to check whether a face is too close to or far from the camera, and whether a face deviates from the camera view.\n            .setFaceRect(new Rect(bundle.getInt(\"faceLeft\"), bundle.getInt(\"faceTop\"), bundle.getInt(\"faceRight\"),\n                bundle.getInt(\"faceBottom\")))\n            // Set the verification timeout interval. The recommended value is about 10,000 ms.\n            .setDetectionTimeOut(bundle.getInt(\"detectionTimeOut\"))\n            .setDetectCallback(new OnMLInteractiveLivenessDetectCallback() {\n                @SuppressLint(\"SetTextI18n\")\n                @Override\n                public void onCompleted(MLInteractiveLivenessCaptureResult result) {\n                    if (bundle.getBoolean(\"showStatusCodes\")) {\n                        statusCode.setText(statusCodeList.get(result.getStateCode()));\n                    }\n                    switch (result.getStateCode()) {\n                        // Processing logic when the verification is passed.\n                        case InteractiveLivenessStateCode.ALL_ACTION_CORRECT:\n                            tips.setText(\"success\");\n                            setResult(RESULT_OK);\n                            HMSInteractiveLivenessCustomDetectionHandler.setDetectResult(result);\n                            setResult(Activity.RESULT_OK);\n                            finish();\n                            break;\n                        // Processing logic during verification.\n                        case InteractiveLivenessStateCode.IN_PROGRESS:\n\n                            switch (result.getActionType()) {\n                                case MLInteractiveLivenessConfig.SHAKE_DOWN_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Nod your head.\");\n                                    } else {\n                                        tips.setText(actionMap.get(1));\n                                    }\n                                    break;\n                                case MLInteractiveLivenessConfig.OPEN_MOUTH_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Open your mouth. \");\n                                    } else {\n                                        tips.setText(actionMap.get(2));\n                                    }\n                                    break;\n                                case MLInteractiveLivenessConfig.EYE_CLOSE_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Blink. \");\n                                    } else {\n                                        tips.setText(actionMap.get(3));\n                                    }\n                                    break;\n                                case MLInteractiveLivenessConfig.SHAKE_LEFT_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Turn your head to the left. \");\n                                    } else {\n                                        tips.setText(actionMap.get(4));\n                                    }\n                                    break;\n                                case MLInteractiveLivenessConfig.SHAKE_RIGHT_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Turn your head to the right. \");\n                                    } else {\n                                        tips.setText(actionMap.get(5));\n                                    }\n                                    break;\n                                case MLInteractiveLivenessConfig.GAZED_ACTION:\n                                    if (defaultConfig) {\n                                        tips.setText(\"Stare at the screen. \");\n                                    } else {\n                                        tips.setText(actionMap.get(6));\n                                    }\n                                    break;\n                                default:\n                                    break;\n                            }\n                            break;\n                        case InteractiveLivenessStateCode.RESULT_TIME_OUT:\n                            setResult(DETECT_FACE_TIME_OUT);\n                            finish();\n                            break;\n                        default:\n                            break;\n                    }\n                }\n\n                @Override\n                public void onError(int errorCode) {\n                    switch (errorCode) {\n                        case MLInteractiveLivenessCaptureError.CAMERA_NO_PERMISSION:\n                            failResult = \"The camera permission is not obtained.\";\n                            break;\n                        case MLInteractiveLivenessCaptureError.CAMERA_START_FAILED:\n                            failResult = \"The camera fails to be started.\";\n                            break;\n                        case MLInteractiveLivenessCaptureError.DETECT_FACE_TIME_OUT:\n                            failResult = \"The face detection module times out.\";\n                            break;\n                        case MLInteractiveLivenessCaptureError.USER_DEFINED_ACTIONS_INVALID:\n                            failResult = \"The user-defined action is invalid.\";\n                            break;\n                        case MLInteractiveLivenessCaptureError.USER_CANCEL:\n                            failResult = \"The operation is canceled by the user.\";\n                            break;\n                        case -1:\n                            failResult = \"Initialization failed.\";\n                            break;\n                        default:\n                            break;\n                    }\n                    setResult(Activity.RESULT_CANCELED);\n                    finish();\n                }\n            })\n            .build();\n        mPreviewContainer.addView(mlInteractiveLivenessDetectView, 0);\n        mPreviewContainer.addView(scanBg, 1);\n\n        mlInteractiveLivenessDetectView.onCreate(savedInstanceState);\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.O)\n    void applyStyleAutoSize(TextView textView) {\n\n        if (autoSizeText) {\n\n            textView.setAutoSizeTextTypeUniformWithConfiguration(minTextSize, maxTextSize, granularity,\n                TypedValue.COMPLEX_UNIT_DIP);\n        } else {\n\n            textView.setTextSize(textSize);\n        }\n\n    }\n    void setLayout(){\n\n        setContentView(R.layout.activity_liveness_custom_detection);\n        mPreviewContainer = findViewById(R.id.surface_layout);\n        imgBack = findViewById(R.id.img_back);\n        imgbackHeader = findViewById(R.id.img_back_title);\n        statusCode = findViewById(R.id.status_code);\n        mTextContainer = findViewById(R.id.bg);\n        tips = findViewById(R.id.tips);\n\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        mlInteractiveLivenessDetectView.onDestroy();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        mlInteractiveLivenessDetectView.onPause();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        mlInteractiveLivenessDetectView.onResume();\n        if (mlInteractiveLivenessDetectView != null) {\n            Log.i(TAG, \"GetWidth:\" + mlInteractiveLivenessDetectView.getHeight() + \"GetHeight:\"\n                + mlInteractiveLivenessDetectView.getWidth());\n        }\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        mlInteractiveLivenessDetectView.onStart();\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        mlInteractiveLivenessDetectView.onStop();\n    }\n}"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSInteractiveLivenessCustomDetectionHandler.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.INTERACTIVE_LIVENESS_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureResult;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HMSInteractiveLivenessCustomDetectionHandler extends HMSBase implements ActivityEventListener {\n    public static final int DETECT_FACE_TIME_OUT = 11404;\n\n    private static final int REQUEST_CODE_DETECT_CUSTOMIZED = 14;\n\n    private static MLInteractiveLivenessCaptureResult detectResult;\n\n    private static final String TAG = HMSInteractiveLivenessCustomDetectionHandler.class.getSimpleName();\n\n    private ReactContext mReactContext;\n\n    private Promise mPromise;\n\n    private HashMap<Integer, String> actionMap = new HashMap<>();\n\n    private HashMap<Integer, String> statusCodeMessageMap = new HashMap<>();\n\n    public HMSInteractiveLivenessCustomDetectionHandler(@NonNull ReactApplicationContext reactContext) {\n\n        super(reactContext, HMSInteractiveLivenessCustomDetectionHandler.class.getSimpleName(),\n            INTERACTIVE_LIVENESS_CONSTANTS);\n        this.mReactContext = reactContext;\n        mReactContext.addActivityEventListener(this);\n    }\n\n    public static void setDetectResult(MLInteractiveLivenessCaptureResult result) {\n        detectResult = result;\n    }\n\n    @ReactMethod\n    public void startCustomizedView(ReadableMap config, final Promise promise) {\n        mPromise = promise;\n        int detectionTimeOut = 10000;\n        int textMargin = 0;\n        int cameraLeft = 0;\n        int cameraRight = 1080;\n        int cameraTop = 0;\n        int cameraBottom = 1440;\n        int faceLeft = 84;\n        int faceRight = 396;\n        int faceTop = 122;\n        int faceBottom = 518;\n        int textColor = -16777216;\n        float textSize = 20.0F;\n        boolean autoSizeText = false;\n        int minTextSize = 15;\n        int maxTextSize = 30;\n        int granularity = 2;\n        int num = 0;\n        String header = \"\";\n        boolean isRandom = false;\n        boolean showStatusCodes = true;\n\n        initStatusCodeList(statusCodeMessageMap);\n\n        if (HMSUtils.getInstance().hasValidKey(config, \"showStatusCodes\", ReadableType.Boolean)) {\n            showStatusCodes = config.getBoolean(\"showStatusCodes\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(config, \"statusCodeMessage\", ReadableType.Map)) {\n            ReadableMap statusCodeMessage = config.getMap(\"statusCodeMessage\");\n            statusCodeMessageMap.clear();\n            int[] statusCodeArray = {\n                1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1014, 1018, 1019, 1020, 1021, 2000, 2002, 2003,\n                2004, 2007, 5020\n            };\n            for (int i = 0; i < statusCodeArray.length; i++) {\n                String keys = String.valueOf(statusCodeArray[i]);\n                if (HMSUtils.getInstance().hasValidKey(statusCodeMessage, keys, ReadableType.String)) {\n                    statusCodeMessageMap.put(statusCodeArray[i], statusCodeMessage.getString(keys));\n                }\n            }\n        }\n        if (HMSUtils.getInstance().hasValidKey(config, \"detectionTimeOut\", ReadableType.Number)) {\n            detectionTimeOut = config.getInt(\"detectionTimeOut\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(config, \"textMargin\", ReadableType.Number)) {\n            textMargin = config.getInt(\"textMargin\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(config, \"header\", ReadableType.String)) {\n            header = config.getString(\"header\");\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(config, \"action\", ReadableType.Map)) {\n            ReadableMap action = config.getMap(\"action\");\n\n            if (HMSUtils.getInstance().hasValidKey(action, \"actionArray\", ReadableType.Map)) {\n                ReadableMap actionArray = action.getMap(\"actionArray\");\n\n                for (int i = 1; i <= 6; i++) {\n                    String key = String.valueOf(i);\n                    if (HMSUtils.getInstance().hasValidKey(actionArray, key, ReadableType.String)) {\n                        actionMap.put(i, actionArray.getString(key));\n                    }\n                }\n            }\n            if (HMSUtils.getInstance().hasValidKey(action, \"num\", ReadableType.Number)) {\n                num = action.getInt(\"num\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(action, \"isRandom\", ReadableType.Boolean)) {\n                isRandom = action.getBoolean(\"isRandom\");\n            }\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(config, \"cameraFrame\", ReadableType.Map)) {\n            ReadableMap cameraFrame = config.getMap(\"cameraFrame\");\n\n            if (HMSUtils.getInstance().hasValidKey(cameraFrame, \"left\", ReadableType.Number)) {\n                cameraLeft = cameraFrame.getInt(\"left\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(cameraFrame, \"right\", ReadableType.Number)) {\n                cameraRight = cameraFrame.getInt(\"right\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(cameraFrame, \"top\", ReadableType.Number)) {\n                cameraTop = cameraFrame.getInt(\"top\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(cameraFrame, \"bottom\", ReadableType.Number)) {\n                cameraBottom = cameraFrame.getInt(\"bottom\");\n            }\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(config, \"faceFrame\", ReadableType.Map)) {\n            ReadableMap faceFrame = config.getMap(\"faceFrame\");\n\n            if (HMSUtils.getInstance().hasValidKey(faceFrame, \"left\", ReadableType.Number)) {\n                faceLeft = faceFrame.getInt(\"left\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(faceFrame, \"right\", ReadableType.Number)) {\n                faceRight = faceFrame.getInt(\"right\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(faceFrame, \"top\", ReadableType.Number)) {\n                faceTop = faceFrame.getInt(\"top\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(faceFrame, \"bottom\", ReadableType.Number)) {\n                faceBottom = faceFrame.getInt(\"bottom\");\n            }\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(config, \"textOptions\", ReadableType.Map)) {\n            ReadableMap textOptions = config.getMap(\"textOptions\");\n\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"textColor\", ReadableType.Number)) {\n                textColor = textOptions.getInt(\"textColor\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"textSize\", ReadableType.Number)) {\n                textSize = (float) textOptions.getDouble(\"textSize\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"autoSizeText\", ReadableType.Boolean)) {\n                autoSizeText = textOptions.getBoolean(\"autoSizeText\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"minTextSize\", ReadableType.Number)) {\n                minTextSize = textOptions.getInt(\"minTextSize\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"maxTextSize\", ReadableType.Number)) {\n                maxTextSize = textOptions.getInt(\"maxTextSize\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(textOptions, \"granularity\", ReadableType.Number)) {\n                granularity = textOptions.getInt(\"granularity\");\n            }\n        }\n\n        for (Map.Entry<Integer, String> entry : actionMap.entrySet()) {\n            actionMap.put(entry.getKey(), entry.getValue());\n        }\n        for (Map.Entry<Integer, String> entry : statusCodeMessageMap.entrySet()) {\n            statusCodeMessageMap.put(entry.getKey(), entry.getValue());\n        }\n\n        Intent intent = new Intent(mReactContext, HMSInteractiveCustomLivenessDetectionActivity.class);\n\n        if (faceBottom > cameraBottom) {\n            faceBottom = cameraBottom;\n        }\n\n        if (faceRight > cameraRight) {\n            faceRight = cameraRight;\n        }\n\n        if (faceTop < cameraTop) {\n            faceTop = cameraTop;\n        }\n        if (faceLeft < cameraLeft) {\n            faceLeft = cameraLeft;\n        }\n\n        intent.putExtra(\"detectionTimeOut\", detectionTimeOut);\n        intent.putExtra(\"textMargin\", textMargin);\n        intent.putExtra(\"cameraLeft\", cameraLeft);\n        intent.putExtra(\"cameraRight\", cameraRight);\n        intent.putExtra(\"cameraTop\", cameraTop);\n        intent.putExtra(\"cameraBottom\", cameraBottom);\n        intent.putExtra(\"faceLeft\", faceLeft);\n        intent.putExtra(\"faceRight\", faceRight);\n        intent.putExtra(\"faceTop\", faceTop);\n        intent.putExtra(\"faceBottom\", faceBottom);\n        intent.putExtra(\"textColor\", textColor);\n        intent.putExtra(\"textSize\", textSize);\n        intent.putExtra(\"autoSizeText\", autoSizeText);\n        intent.putExtra(\"minTextSize\", minTextSize);\n        intent.putExtra(\"maxTextSize\", maxTextSize);\n        intent.putExtra(\"granularity\", granularity);\n        intent.putExtra(\"num\", num);\n        intent.putExtra(\"isRandom\", isRandom);\n        intent.putExtra(\"header\", header);\n        intent.putExtra(\"showStatusCodes\", showStatusCodes);\n        intent.putExtra(\"actionArray\", actionMap);\n        intent.putExtra(\"statusCodeMessageMap\", statusCodeMessageMap);\n\n        mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_DETECT_CUSTOMIZED);\n    }\n\n    void initStatusCodeList(HashMap<Integer, String> statusCodeList) {\n        statusCodeList.put(1001, \"The face orientation is inconsistent with that of the phone.\");\n        statusCodeList.put(1002, \"No face is detected.\");\n        statusCodeList.put(1003, \"Multiple faces are detected.\");\n        statusCodeList.put(1004, \"The face deviates from the center of the face frame.\");\n        statusCodeList.put(1005, \"The face is too large.\");\n        statusCodeList.put(1006, \"The face is too small.\");\n        statusCodeList.put(1007, \"The face is blocked by the sunglasses.\");\n        statusCodeList.put(1008, \"The face is blocked by the mask.\");\n        statusCodeList.put(1009, \"The detected action is not the required one.\");\n        statusCodeList.put(1014, \"The continuity detection fails.\");\n        statusCodeList.put(1018, \"The light is dark.\");\n        statusCodeList.put(1019, \"The image is blurry.\");\n        statusCodeList.put(1020, \"The face is backlit.\");\n        statusCodeList.put(1021, \"The light is bright.\");\n        statusCodeList.put(2000, \"In progress\");\n        statusCodeList.put(2002, \"The face does not belong to a real person. \");\n        statusCodeList.put(2003, \"Verification is performed, and the detected action is correct.\");\n        statusCodeList.put(2004, \"Verification succeeded.\");\n        statusCodeList.put(2007, \"The position of the face frame is not set before the algorithm is called.\");\n        statusCodeList.put(5020, \"The previous detection ended when it was not complete.\");\n\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n        WritableMap wmap = SUCCESS.getStatusAndMessage();\n        WritableMap rmap = Arguments.createMap();\n        if (requestCode == REQUEST_CODE_DETECT_CUSTOMIZED) {\n            if (resultCode == Activity.RESULT_OK && detectResult != null) {\n                rmap.putInt(\"status\", detectResult.getStateCode());\n                rmap.putInt(\"action\", detectResult.getActionType());\n                rmap.putString(\"bitMap\", HMSObjectCreator.bitmapToBase64(detectResult.getBitmap()));\n                wmap.putMap(\"result\", rmap);\n                handleResult(\"MLInteractiveCustomLivenessCapture.Callback\", wmap, mPromise);\n                mPromise = null;\n            } else if (resultCode == Activity.RESULT_CANCELED && detectResult != null) {\n                handleResult(\"MLInteractiveCustomLivenessCapture.Callback\",\n                    FAILURE.getStatusAndMessage(resultCode, null), mPromise);\n                rmap.putInt(\"status\", resultCode);\n                wmap.putMap(\"result\", rmap);\n                mPromise = null;\n            } else if (resultCode == DETECT_FACE_TIME_OUT) {\n                handleResult(\"MLInteractiveCustomLivenessCapture.Callback\",\n                    FAILURE.getStatusAndMessage(resultCode, \"The face detection module times out.\"), mPromise);\n                rmap.putInt(\"status\", resultCode);\n                wmap.putMap(\"result\", rmap);\n                mPromise = null;\n            }\n        }\n        Log.i(TAG, \"onActivityResult requestCode \" + requestCode + \", resultCode \" + resultCode);\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n}\n\n\n\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSInteractiveLivenessDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.INTERACTIVE_LIVENESS_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCapture;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureResult;\nimport com.huawei.hms.mlsdk.interactiveliveness.action.InteractiveLivenessStateCode;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSInteractiveLivenessDetection extends HMSBase implements MLInteractiveLivenessCapture.Callback {\n    private static final String TAG = HMSInteractiveLivenessDetection.class.getSimpleName();\n\n    private Promise interactiveLivenessDetectionPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSInteractiveLivenessDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSInteractiveLivenessDetection.class.getSimpleName(), INTERACTIVE_LIVENESS_CONSTANTS);\n    }\n\n    /**\n     * Enables interactiveLiveness detection.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n\n    @ReactMethod\n    public void startDetect(ReadableMap config, final Promise promise) {\n\n        startMethodExecTimer(\"startDetect\");\n        Activity mActivity = getCurrentActivity();\n        if (mActivity == null) {\n            handleResult(\"startDetect\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n        MLInteractiveLivenessCapture capture = MLInteractiveLivenessCapture.getInstance();\n        capture.setConfig(HMSObjectCreator.getInstance().createInteractiveLivenessCaptureConfig(config));\n        capture.startDetect(mActivity, this);\n        interactiveLivenessDetectionPromise = promise;\n    }\n\n    /**\n     * onSuccess callback\n     *\n     * @param result The result that will be resolve\n     */\n\n    @Override\n    public void onSuccess(MLInteractiveLivenessCaptureResult result) {\n\n        switch (result.getStateCode()) {\n            case InteractiveLivenessStateCode.ALL_ACTION_CORRECT:\n                WritableMap wm = SUCCESS.getStatusAndMessage();\n                WritableMap rm = Arguments.createMap();\n                rm.putInt(\"status\", result.getStateCode());\n                rm.putInt(\"action\", result.getActionType());\n                rm.putString(\"bitMap\", HMSObjectCreator.bitmapToBase64(result.getBitmap()));\n                wm.putMap(\"result\", rm);\n                handleResult(\"MLInteractiveLivenessCapture.Callback\", wm, interactiveLivenessDetectionPromise);\n                interactiveLivenessDetectionPromise = null;\n                break;\n            case InteractiveLivenessStateCode.IN_PROGRESS:\n\n                Log.i(TAG, \"In Progress\");\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n     * onFailure callback\n     *\n     * @param errorCode Error code\n     */\n\n    @Override\n    public void onFailure(int errorCode) {\n        if (interactiveLivenessDetectionPromise != null) {\n            handleResult(\"MLInteractiveLivenessCapture.Callback\", FAILURE.getStatusAndMessage(errorCode, null),\n                interactiveLivenessDetectionPromise);\n            interactiveLivenessDetectionPromise = null;\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSLivenessDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LIVENESS_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\n\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCapture;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureResult;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSLivenessDetection extends HMSBase implements MLLivenessCapture.Callback {\n    private Promise livenessDetectionPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSLivenessDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSLivenessDetection.class.getSimpleName(), LIVENESS_CONSTANTS);\n    }\n\n    /**\n     * Enables liveness detection.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startDetect(final Promise promise) {\n        startMethodExecTimer(\"startDetect\");\n        Activity mActivity = getCurrentActivity();\n\n        if (mActivity == null) {\n            handleResult(\"startDetect\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLLivenessCapture.getInstance().startDetect(mActivity, this);\n        livenessDetectionPromise = promise;\n    }\n\n    /**\n     * Sets the liveness detection capture config\n     *\n     * @param config configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setConfig(ReadableMap config, final Promise promise) {\n        startMethodExecTimer(\"startDetect\");\n        MLLivenessCapture.getInstance().setConfig(HMSObjectCreator.getInstance().createLivenessCaptureConfig(config));\n        handleResult(\"setConfig\", SUCCESS, promise);\n    }\n\n    /**\n     * onSuccess callback\n     *\n     * @param result The result that will be resolve\n     */\n    @Override\n    public void onSuccess(MLLivenessCaptureResult result) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap rm = Arguments.createMap();\n        rm.putDouble(\"pitch\", result.getPitch());\n        rm.putDouble(\"roll\", result.getRoll());\n        rm.putDouble(\"score\", result.getScore());\n        rm.putDouble(\"yaw\", result.getYaw());\n        rm.putBoolean(\"isLive\", result.isLive());\n        wm.putMap(\"result\", rm);\n        handleResult(\"MLLivenessCapture.Callback\", wm, livenessDetectionPromise);\n        livenessDetectionPromise = null;\n    }\n\n    /**\n     * onFailure callback\n     *\n     * @param errorCode Error code\n     */\n    @Override\n    public void onFailure(int errorCode) {\n        handleResult(\"MLLivenessCapture.Callback\", FAILURE.getStatusAndMessage(errorCode, null),\n            livenessDetectionPromise);\n        livenessDetectionPromise = null;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/facebodyrelatedservices/HMSSkeletonDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.facebodyrelatedservices;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.SKELETON_CONSTANTS;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer;\nimport com.huawei.hms.rn.mlbody.HMSBase;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSSkeletonDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSkeletonDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSkeletonDetection.class.getSimpleName(), SKELETON_CONSTANTS);\n    }\n\n    /**\n     * Detects skeleton points in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzeType analyze type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, int analyzeType, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        WritableMap wm = HMSResultCreator.getInstance().getSkeletonSyncResults(skeletonAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            stopAnalyzer(skeletonAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", wm, promise);\n    }\n\n    /**\n     * Detects skeleton points in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzeType analyze type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, int analyzeType, ReadableMap frameConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        skeletonAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlSkeletons -> {\n            if (isStop) {\n                stopAnalyzer(skeletonAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getSkeletonAsyncResults(mlSkeletons),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(skeletonAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Calculates the similarity between two sets of skeleton data.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param analyzeType analyze type\n     * @param dataSet1 first data set\n     * @param dataSet2 second data set\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void calculateSimilarity(boolean isStop, int analyzeType, ReadableArray dataSet1, ReadableArray dataSet2,\n        final Promise promise) {\n        startMethodExecTimer(\"calculateSimilarity\");\n\n        if (dataSet1.size() == 0 || dataSet2.size() == 0) {\n            handleResult(\"calculateSimilarity\", DATA_SET_NOT_VALID, promise);\n            return;\n        }\n\n        MLSkeletonAnalyzer skeletonAnalyzer = HMSObjectCreator.getInstance().createSkeletonAnalyzer(analyzeType);\n        float similarity = skeletonAnalyzer.caluteSimilarity(HMSUtils.getInstance().convertRaToSkeletonList(dataSet1),\n            HMSUtils.getInstance().convertRaToSkeletonList(dataSet2));\n\n        if (isStop) {\n            stopAnalyzer(skeletonAnalyzer);\n        }\n\n        handleResult(\"calculateSimilarity\", HMSResultCreator.getInstance().floatResult(similarity), promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param skeletonAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLSkeletonAnalyzer skeletonAnalyzer) {\n        try {\n            skeletonAnalyzer.stop();\n            Log.i(getName(), \"MLSkeletonAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLSkeletonAnalyzer stop :\" + e.getMessage());\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/constants/HMSConstants.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.constants;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.graphics.Color;\nimport android.hardware.Camera;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.MLFaceKeyPoint;\nimport com.huawei.hms.mlsdk.face.MLFaceShape;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoint;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerSetting;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureError;\nimport com.huawei.hms.mlsdk.interactiveliveness.action.MLInteractiveLivenessConfig;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureError;\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSConstants {\n\n    // lens engine\n    public static final String LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\";\n\n    public static final String LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\";\n\n    public static final String LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\";\n\n    public static final String LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\";\n\n    public static final String LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\";\n\n    // text transactor\n    public static final String TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\";\n\n    public static final String TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\";\n\n    // 2d face transactor\n    public static final String FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\";\n\n    public static final String FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\";\n\n    // 3d face transactor\n    public static final String FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\";\n\n    public static final String FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\";\n\n    // skeleton transactor\n    public static final String SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\";\n\n    public static final String SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\";\n\n    // scene transactor\n    public static final String SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\";\n\n    public static final String SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\";\n\n    // classification transactor\n    public static final String CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\";\n\n    public static final String CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\";\n\n    // object transactor\n    public static final String OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\";\n\n    public static final String OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\";\n\n    // hand keypoint transactor\n    public static final String HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\";\n\n    public static final String HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\";\n\n    // gesture transactor\n    public static final String GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\";\n\n    public static final String GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\";\n\n    // error codes exposed by HMSApplication\n    public static final Map<String, Object> ERROR_CODES = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"UNKNOWN\", MLException.UNKNOWN);\n            put(\"SUCCESS\", MLException.SUCCESS);\n            put(\"DISCARDED\", MLException.DISCARDED);\n            put(\"INNER\", MLException.INNER);\n            put(\"INACTIVE\", MLException.INACTIVE);\n            put(\"NOT_SUPPORTED\", MLException.NOT_SUPPORTED);\n            put(\"ILLEGAL_PARAMETER\", MLException.ILLEGAL_PARAMETER);\n            put(\"OVERDUE\", MLException.OVERDUE);\n            put(\"NO_FOUND\", MLException.NO_FOUND);\n            put(\"DUPLICATE_FOUND\", MLException.DUPLICATE_FOUND);\n            put(\"NO_PERMISSION\", MLException.NO_PERMISSION);\n            put(\"INSUFFICIENT_RESOURCE\", MLException.INSUFFICIENT_RESOURCE);\n            put(\"ANALYSIS_FAILURE\", MLException.ANALYSIS_FAILURE);\n            put(\"INTERRUPTED\", MLException.INTERRUPTED);\n            put(\"EXCEED_RANGE\", MLException.EXCEED_RANGE);\n            put(\"DATA_MISSING\", MLException.DATA_MISSING);\n            put(\"AUTHENTICATION_REQUIRED\", MLException.AUTHENTICATION_REQUIRED);\n            put(\"TFLITE_NOT_COMPATIBLE\", MLException.TFLITE_NOT_COMPATIBLE);\n            put(\"INSUFFICIENT_SPACE\", MLException.INSUFFICIENT_SPACE);\n            put(\"HASH_MISS\", MLException.HASH_MISS);\n            put(\"TOKEN_INVALID\", MLException.TOKEN_INVALID);\n            put(\"FRAME_NULL\", FRAME_NULL.getErrCode());\n            put(\"ANALYZER_NOT_AVAILABLE\", ANALYZER_NOT_AVAILABLE.getErrCode());\n            put(\"CURRENT_ACTIVITY_NULL\", CURRENT_ACTIVITY_NULL.getErrCode());\n            put(\"CANCEL\", CANCEL.getErrCode());\n            put(\"FAILURE\", FAILURE.getErrCode());\n            put(\"DENY\", DENY.getErrCode());\n            put(\"STRING_PARAM_NULL\", STRING_PARAM_NULL.getErrCode());\n            put(\"REMOTE_MODEL_NULL\", REMOTE_MODEL_NULL.getErrCode());\n            put(\"ASR_RECOGNIZER_NULL\", ASR_RECOGNIZER_NULL.getErrCode());\n            put(\"TTS_ENGINE_NULL\", TTS_ENGINE_NULL.getErrCode());\n            put(\"SOUND_DECT_NULL\", SOUND_DECT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_SETTING_NULL\", CUSTOM_MODEL_SETTING_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_INPUT_NULL\", CUSTOM_MODEL_INPUT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_EXECUTOR_SETTING_NULL\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL.getErrCode());\n            put(\"DATA_SET_NOT_VALID\", DATA_SET_NOT_VALID.getErrCode());\n            put(\"LENS_ENGINE_NULL\", LENS_ENGINE_NULL.getErrCode());\n            put(\"LENS_HOLDER_NULL\", LENS_HOLDER_NULL.getErrCode());\n        }\n    });\n\n    // face recognition constants HMSFaceRecognition\n    public static final Map<String, Object> FACE_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"MODE_TRACING_FAST\", MLFaceAnalyzerSetting.MODE_TRACING_FAST);\n                put(\"MODE_TRACING_ROBUST\", MLFaceAnalyzerSetting.MODE_TRACING_ROBUST);\n                put(\"TYPE_FEATURES\", MLFaceAnalyzerSetting.TYPE_FEATURES);\n                put(\"TYPE_FEATURE_AGE\", MLFaceAnalyzerSetting.TYPE_FEATURE_AGE);\n                put(\"TYPE_FEATURE_BEARD\", MLFaceAnalyzerSetting.TYPE_FEATURE_BEARD);\n                put(\"TYPE_FEATURE_EMOTION\", MLFaceAnalyzerSetting.TYPE_FEATURE_EMOTION);\n                put(\"TYPE_FEATURE_EYEGLASS\", MLFaceAnalyzerSetting.TYPE_FEATURE_EYEGLASS);\n                put(\"TYPE_FEATURE_GENDAR\", MLFaceAnalyzerSetting.TYPE_FEATURE_GENDAR);\n                put(\"TYPE_FEATURE_HAT\", MLFaceAnalyzerSetting.TYPE_FEATURE_HAT);\n                put(\"TYPE_FEATURE_OPEN_CLOSE_EYE\", MLFaceAnalyzerSetting.TYPE_FEATURE_OPENCLOSEEYE);\n                put(\"TYPE_KEYPOINTS\", MLFaceAnalyzerSetting.TYPE_KEYPOINTS);\n                put(\"TYPE_PRECISION\", MLFaceAnalyzerSetting.TYPE_PRECISION);\n                put(\"TYPE_SHAPES\", MLFaceAnalyzerSetting.TYPE_SHAPES);\n                put(\"TYPE_SPEED\", MLFaceAnalyzerSetting.TYPE_SPEED);\n                put(\"TYPE_UNSUPPORT_FEATURES\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_FEATURES);\n                put(\"TYPE_UNSUPPORT_KEYPOINTS\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS);\n                put(\"TYPE_UNSUPPORT_SHAPES\", MLFaceAnalyzerSetting.TYPE_UNSUPPORT_SHAPES);\n                put(\"TYPE_BOTTOM_OF_MOUTH\", MLFaceKeyPoint.TYPE_BOTTOM_OF_MOUTH);\n                put(\"TYPE_LEFT_CHEEK\", MLFaceKeyPoint.TYPE_LEFT_CHEEK);\n                put(\"TYPE_LEFT_EAR\", MLFaceKeyPoint.TYPE_LEFT_EAR);\n                put(\"TYPE_LEFT_EYE\", MLFaceKeyPoint.TYPE_LEFT_EYE);\n                put(\"TYPE_LEFT_SIDE_OF_MOUTH\", MLFaceKeyPoint.TYPE_LEFT_SIDE_OF_MOUTH);\n                put(\"TYPE_RIGHT_CHEEK\", MLFaceKeyPoint.TYPE_RIGHT_CHEEK);\n                put(\"TYPE_RIGHT_EAR\", MLFaceKeyPoint.TYPE_RIGHT_EAR);\n                put(\"TYPE_RIGHT_EYE\", MLFaceKeyPoint.TYPE_RIGHT_EYE);\n                put(\"TYPE_RIGHT_SIDE_OF_MOUTH\", MLFaceKeyPoint.TYPE_RIGHT_SIDE_OF_MOUTH);\n                put(\"TYPE_TIP_OF_LEFT_EAR\", MLFaceKeyPoint.TYPE_TIP_OF_LEFT_EAR);\n                put(\"TYPE_TIP_OF_NOSE\", MLFaceKeyPoint.TYPE_TIP_OF_NOSE);\n                put(\"TYPE_TIP_OF_RIGHT_EAR\", MLFaceKeyPoint.TYPE_TIP_OF_RIGHT_EAR);\n                put(\"TYPE_ALL\", MLFaceShape.TYPE_ALL);\n                put(\"TYPE_BOTTOM_OF_LEFT_EYEBROW\", MLFaceShape.TYPE_BOTTOM_OF_LEFT_EYEBROW);\n                put(\"TYPE_BOTTOM_OF_LOWER_LIP\", MLFaceShape.TYPE_BOTTOM_OF_LOWER_LIP);\n                put(\"TYPE_BOTTOM_OF_NOSE\", MLFaceShape.TYPE_BOTTOM_OF_NOSE);\n                put(\"TYPE_BOTTOM_OF_RIGHT_EYEBROW\", MLFaceShape.TYPE_BOTTOM_OF_RIGHT_EYEBROW);\n                put(\"TYPE_BOTTOM_OF_UPPER_LIP\", MLFaceShape.TYPE_BOTTOM_OF_UPPER_LIP);\n                put(\"TYPE_BRIDGE_OF_NOSE\", MLFaceShape.TYPE_BRIDGE_OF_NOSE);\n                put(\"TYPE_FACE\", MLFaceShape.TYPE_FACE);\n                put(\"TYPE_LEFT_EYE_SHAPE\", MLFaceShape.TYPE_LEFT_EYE);\n                put(\"TYPE_RIGHT_EYE_SHAPE\", MLFaceShape.TYPE_RIGHT_EYE);\n                put(\"TYPE_TOP_OF_LEFT_EYEBROW\", MLFaceShape.TYPE_TOP_OF_LEFT_EYEBROW);\n                put(\"TYPE_TOP_OF_LOWER_LIP\", MLFaceShape.TYPE_TOP_OF_LOWER_LIP);\n                put(\"TYPE_TOP_OF_RIGHT_EYEBROW\", MLFaceShape.TYPE_TOP_OF_RIGHT_EYEBROW);\n                put(\"TYPE_TOP_OF_UPPER_LIP\", MLFaceShape.TYPE_TOP_OF_UPPER_LIP);\n            }\n        });\n\n    // skeleton recognition constants HMSSkeleton\n    public static final Map<String, Object> SKELETON_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_HEAD_TOP\", MLJoint.TYPE_HEAD_TOP);\n            put(\"TYPE_LEFT_ANKLE\", MLJoint.TYPE_LEFT_ANKLE);\n            put(\"TYPE_LEFT_ELBOW\", MLJoint.TYPE_LEFT_ELBOW);\n            put(\"TYPE_LEFT_HIP\", MLJoint.TYPE_LEFT_HIP);\n            put(\"TYPE_LEFT_KNEE\", MLJoint.TYPE_LEFT_KNEE);\n            put(\"TYPE_LEFT_SHOULDER\", MLJoint.TYPE_LEFT_SHOULDER);\n            put(\"TYPE_LEFT_WRIST\", MLJoint.TYPE_LEFT_WRIST);\n            put(\"TYPE_NECK\", MLJoint.TYPE_NECK);\n            put(\"TYPE_RIGHT_ANKLE\", MLJoint.TYPE_RIGHT_ANKLE);\n            put(\"TYPE_RIGHT_ELBOW\", MLJoint.TYPE_RIGHT_ELBOW);\n            put(\"TYPE_RIGHT_HIP\", MLJoint.TYPE_RIGHT_HIP);\n            put(\"TYPE_RIGHT_KNEE\", MLJoint.TYPE_RIGHT_KNEE);\n            put(\"TYPE_RIGHT_SHOULDER\", MLJoint.TYPE_RIGHT_SHOULDER);\n            put(\"TYPE_RIGHT_WRIST\", MLJoint.TYPE_RIGHT_WRIST);\n            put(\"TYPE_NORMAL\", MLSkeletonAnalyzerSetting.TYPE_NORMAL);\n            put(\"TYPE_YOGA\", MLSkeletonAnalyzerSetting.TYPE_YOGA);\n        }\n    });\n\n    // liveness constants HMSLiveness\n    public static final Map<String, Object> LIVENESS_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"CAMERA_NO_PERMISSION\", MLLivenessCaptureError.CAMERA_NO_PERMISSION);\n            put(\"CAMERA_START_FAILED\", MLLivenessCaptureError.CAMERA_START_FAILED);\n            put(\"USER_CANCEL\", MLLivenessCaptureError.USER_CANCEL);\n            put(\"DETECT_FACE_TIME_OUT\", MLLivenessCaptureError.DETECT_FACE_TIME_OUT);\n            put(\"DETECT_MASK\", MLLivenessCaptureConfig.DETECT_MASK);\n\n        }\n    });\n\n    // liveness constants HMSLiveness\n    public static final Map<String, Object> INTERACTIVE_LIVENESS_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"DETECT_SUNGLASS\", MLInteractiveLivenessCaptureConfig.DETECT_SUNGLASS);\n                put(\"DETECT_MASK\", MLInteractiveLivenessCaptureConfig.DETECT_MASK);\n                put(\"CAMERA_NO_PERMISSION\", MLInteractiveLivenessCaptureError.CAMERA_NO_PERMISSION);\n                put(\"CAMERA_START_FAILED\", MLInteractiveLivenessCaptureError.CAMERA_START_FAILED);\n                put(\"DETECT_FACE_TIME_OUT\", MLInteractiveLivenessCaptureError.DETECT_FACE_TIME_OUT);\n                put(\"USER_CANCEL\", MLInteractiveLivenessCaptureError.USER_CANCEL);\n                put(\"USER_ DEFINED_ACTIONS_INVALID\", MLInteractiveLivenessCaptureError.USER_DEFINED_ACTIONS_INVALID);\n                put(\"SHAKE_DOWN_ACTION\", MLInteractiveLivenessConfig.SHAKE_DOWN_ACTION);\n                put(\"OPEN_MOUTH_ACTION\", MLInteractiveLivenessConfig.OPEN_MOUTH_ACTION);\n                put(\"EYE_CLOSE_ACTION\", MLInteractiveLivenessConfig.EYE_CLOSE_ACTION);\n                put(\"SHAKE_LEFT_ACTION\", MLInteractiveLivenessConfig.SHAKE_LEFT_ACTION);\n                put(\"SHAKE_RIGHT_ACTION\", MLInteractiveLivenessConfig.SHAKE_RIGHT_ACTION);\n                put(\"GAZED_ACTION\", MLInteractiveLivenessConfig.GAZED_ACTION);\n            }\n        });\n\n    // hand keypoint constants HMSHandKeypoint\n    public static final Map<String, Object> HANDKEYPOINT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_FOREFINGER_FIRST\", MLHandKeypoint.TYPE_FOREFINGER_FIRST);\n            put(\"TYPE_FOREFINGER_FOURTH\", MLHandKeypoint.TYPE_FOREFINGER_FOURTH);\n            put(\"TYPE_FOREFINGER_SECOND\", MLHandKeypoint.TYPE_FOREFINGER_SECOND);\n            put(\"TYPE_FOREFINGER_THIRD\", MLHandKeypoint.TYPE_FOREFINGER_THIRD);\n            put(\"TYPE_LITTLE_FINGER_FIRST\", MLHandKeypoint.TYPE_LITTLE_FINGER_FIRST);\n            put(\"TYPE_LITTLE_FINGER_FOURTH\", MLHandKeypoint.TYPE_LITTLE_FINGER_FOURTH);\n            put(\"TYPE_LITTLE_FINGER_SECOND\", MLHandKeypoint.TYPE_LITTLE_FINGER_SECOND);\n            put(\"TYPE_LITTLE_FINGER_THIRD\", MLHandKeypoint.TYPE_LITTLE_FINGER_THIRD);\n            put(\"TYPE_MIDDLE_FINGER_FIRST\", MLHandKeypoint.TYPE_MIDDLE_FINGER_FIRST);\n            put(\"TYPE_MIDDLE_FINGER_FOURTH\", MLHandKeypoint.TYPE_MIDDLE_FINGER_FOURTH);\n            put(\"TYPE_MIDDLE_FINGER_SECOND\", MLHandKeypoint.TYPE_MIDDLE_FINGER_SECOND);\n            put(\"TYPE_MIDDLE_FINGER_THIRD\", MLHandKeypoint.TYPE_MIDDLE_FINGER_THIRD);\n            put(\"TYPE_RING_FINGER_FIRST\", MLHandKeypoint.TYPE_RING_FINGER_FIRST);\n            put(\"TYPE_RING_FINGER_FOURTH\", MLHandKeypoint.TYPE_RING_FINGER_FOURTH);\n            put(\"TYPE_RING_FINGER_SECOND\", MLHandKeypoint.TYPE_RING_FINGER_SECOND);\n            put(\"TYPE_RING_FINGER_THIRD\", MLHandKeypoint.TYPE_RING_FINGER_THIRD);\n            put(\"TYPE_THUMB_FIRST\", MLHandKeypoint.TYPE_THUMB_FIRST);\n            put(\"TYPE_THUMB_FOURTH\", MLHandKeypoint.TYPE_THUMB_FOURTH);\n            put(\"TYPE_THUMB_SECOND\", MLHandKeypoint.TYPE_THUMB_SECOND);\n            put(\"TYPE_THUMB_THIRD\", MLHandKeypoint.TYPE_THUMB_THIRD);\n            put(\"TYPE_WRIST\", MLHandKeypoint.TYPE_WRIST);\n            put(\"TYPE_ALL\", MLHandKeypointAnalyzerSetting.TYPE_ALL);\n            put(\"TYPE_KEYPOINT_ONLY\", MLHandKeypointAnalyzerSetting.TYPE_KEYPOINT_ONLY);\n            put(\"TYPE_RECT_ONLY\", MLHandKeypointAnalyzerSetting.TYPE_RECT_ONLY);\n            put(\"MAX_HANDS_NUM\", MLHandKeypointAnalyzerSetting.MAX_HANDS_NUM);\n\n        }\n    });\n\n    // gesture constants HMSGesture\n    public static final Map<String, Object> GESTURE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ONE\", MLGesture.ONE);\n            put(\"SECOND\", MLGesture.SECOND);\n            put(\"THREE\", MLGesture.THREE);\n            put(\"FOUR\", MLGesture.FOUR);\n            put(\"FIVE\", MLGesture.FIVE);\n            put(\"SIX\", MLGesture.SIX);\n            put(\"SEVEN\", MLGesture.SEVEN);\n            put(\"EIGHT\", MLGesture.EIGHT);\n            put(\"NINE\", MLGesture.NINE);\n            put(\"DISS\", MLGesture.DISS);\n            put(\"FIST\", MLGesture.FIST);\n            put(\"GOOD\", MLGesture.GOOD);\n            put(\"HEART\", MLGesture.HEART);\n            put(\"OK\", MLGesture.OK);\n            put(\"UNKNOWN\", MLGesture.UNKNOWN);\n            put(\"BOW\", MLGesture.BOW);\n            put(\"DOUBLE_UP\", MLGesture.DOUBLE_UP);\n            put(\"FUCK\", MLGesture.FUCK);\n            put(\"HEART_A\", MLGesture.HEART_A);\n            put(\"HEART_B\", MLGesture.HEART_B);\n            put(\"HEART_C\", MLGesture.HEART_C);\n            put(\"PRAY\", MLGesture.PRAY);\n            put(\"ROCK\", MLGesture.ROCK);\n            put(\"THANK\", MLGesture.THANK);\n            put(\"UP\", MLGesture.UP);\n        }\n    });\n\n    // lens engine constants\n    public static final Map<String, Object> LENS_ENGINE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"FLASH_MODE_OFF\", Camera.Parameters.FLASH_MODE_OFF);\n            put(\"FLASH_MODE_ON\", Camera.Parameters.FLASH_MODE_ON);\n            put(\"FLASH_MODE_AUTO\", Camera.Parameters.FLASH_MODE_AUTO);\n            put(\"FOCUS_MODE_CONTINUOUS_PICTURE\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);\n            put(\"FOCUS_MODE_CONTINUOUS_VIDEO\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);\n            put(\"BACK_LENS\", LensEngine.BACK_LENS);\n            put(\"FRONT_LENS\", LensEngine.FRONT_LENS);\n            put(\"LENS_ON_PHOTO_TAKEN\", LENS_ON_PHOTO_TAKEN);\n            put(\"LENS_ON_CLICK_SHUTTER\", LENS_ON_CLICK_SHUTTER);\n            put(\"LENS_SURFACE_ON_CREATED\", LENS_SURFACE_ON_CREATED);\n            put(\"LENS_SURFACE_ON_CHANGED\", LENS_SURFACE_ON_CHANGED);\n            put(\"LENS_SURFACE_ON_DESTROY\", LENS_SURFACE_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_DESTROY\", TEXT_TRANSACTOR_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_RESULT\", TEXT_TRANSACTOR_ON_RESULT);\n            put(\"FACE_2D_TRANSACTOR_ON_DESTROY\", FACE_2D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_2D_TRANSACTOR_ON_RESULT\", FACE_2D_TRANSACTOR_ON_RESULT);\n            put(\"FACE_3D_TRANSACTOR_ON_DESTROY\", FACE_3D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_3D_TRANSACTOR_ON_RESULT\", FACE_3D_TRANSACTOR_ON_RESULT);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_DESTROY\", CLASSIFICATION_TRANSACTOR_ON_DESTROY);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_RESULT\", CLASSIFICATION_TRANSACTOR_ON_RESULT);\n            put(\"OBJECT_TRANSACTOR_ON_DESTROY\", OBJECT_TRANSACTOR_ON_DESTROY);\n            put(\"OBJECT_TRANSACTOR_ON_RESULT\", OBJECT_TRANSACTOR_ON_RESULT);\n            put(\"SCENE_TRANSACTOR_ON_DESTROY\", SCENE_TRANSACTOR_ON_DESTROY);\n            put(\"SCENE_TRANSACTOR_ON_RESULT\", SCENE_TRANSACTOR_ON_RESULT);\n            put(\"SKELETON_TRANSACTOR_ON_DESTROY\", SKELETON_TRANSACTOR_ON_DESTROY);\n            put(\"SKELETON_TRANSACTOR_ON_RESULT\", SKELETON_TRANSACTOR_ON_RESULT);\n            put(\"HAND_TRANSACTOR_ON_DESTROY\", HAND_TRANSACTOR_ON_DESTROY);\n            put(\"HAND_TRANSACTOR_ON_RESULT\", HAND_TRANSACTOR_ON_RESULT);\n            put(\"GESTURE_TRANSACTOR_ON_DESTROY\", GESTURE_TRANSACTOR_ON_DESTROY);\n            put(\"GESTURE_TRANSACTOR_ON_RESULT\", GESTURE_TRANSACTOR_ON_RESULT);\n            put(\"LENS_TEXT_ANALYZER\", 0);\n            put(\"LENS_FACE_2D_ANALYZER\", 1);\n            put(\"LENS_FACE_3D_ANALYZER\", 2);\n            put(\"LENS_SKELETON_ANALYZER\", 3);\n            put(\"LENS_CLASSIFICATION_ANALYZER\", 4);\n            put(\"LENS_OBJECT_ANALYZER\", 5);\n            put(\"LENS_SCENE_ANALYZER\", 6);\n            put(\"LENS_HAND_ANALYZER\", 7);\n            put(\"LENS_GESTURE_ANALYZER\", 8);\n        }\n    });\n\n    public static final Map<String, Object> FACE_VERIFICATION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() { });\n\n    // on-device languages\n    private static final Map<String, Object> BASE_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"LATIN\", \"rm\");\n            put(\"ENGLISH\", \"en\");\n            put(\"CHINESE\", \"zh\");\n            put(\"JAPANESE\", \"ja\");\n            put(\"KOREAN\", \"ko\");\n            put(\"RUSSIAN\", \"ru\");\n            put(\"GERMAN\", \"de\");\n            put(\"FRENCH\", \"fr\");\n            put(\"ITALIAN\", \"it\");\n            put(\"PORTUGUESE\", \"pt\");\n            put(\"SPANISH\", \"es\");\n        }\n    };\n\n    // on-cloud languages\n    private static final Map<String, Object> EXTRA_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"POLISH\", \"pl\");\n            put(\"NORWEGIAN\", \"no\");\n            put(\"SWEDISH\", \"sv\");\n            put(\"DANISH\", \"da\");\n            put(\"TURKISH\", \"tr\");\n            put(\"FINNISH\", \"fi\");\n            put(\"THAI\", \"th\");\n            put(\"ARABIC\", \"ar\");\n            put(\"HINDI\", \"hi\");\n        }\n    };\n\n    // border types\n    private static final Map<String, Object> BORDER_TYPE = new HashMap<String, Object>() {\n        {\n            put(\"ARC\", MLRemoteTextSetting.ARC);\n            put(\"NGON\", MLRemoteTextSetting.NGON);\n        }\n    };\n\n    // device orientation constants\n    private static final Map<String, Object> ORIENTATION_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"ORIENTATION_AUTO\", 0);\n            put(\"ORIENTATION_LANDSCAPE\", 1);\n            put(\"ORIENTATION_PORTRAIT\", 2);\n        }\n    };\n\n    // color codes of Android Color class\n    private static final Map<String, Object> COLOR_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"BLACK\", Color.BLACK);\n            put(\"BLUE\", Color.BLUE);\n            put(\"CYAN\", Color.CYAN);\n            put(\"DKGRAY\", Color.DKGRAY);\n            put(\"GRAY\", Color.GRAY);\n            put(\"GREEN\", Color.GREEN);\n            put(\"LTGRAY\", Color.LTGRAY);\n            put(\"MAGENTA\", Color.MAGENTA);\n            put(\"RED\", Color.RED);\n            put(\"TRANSPARENT\", Color.TRANSPARENT);\n            put(\"WHITE\", Color.WHITE);\n            put(\"YELLOW\", Color.YELLOW);\n        }\n    };\n}"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/constants/HMSResults.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.constants;\n\nimport com.huawei.hms.mlsdk.common.MLException;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic enum HMSResults {\n    UNKNOWN(MLException.UNKNOWN, \"\"),\n    SUCCESS(MLException.SUCCESS, \"Success\"),\n    FRAME_NULL(20, \"No frame object created with given parameters\"),\n    ANALYZER_NOT_AVAILABLE(21, \"Analyzer is not available\"),\n    CURRENT_ACTIVITY_NULL(22, \"Current activity is null\"),\n    CANCEL(23, \"Recognition cancelled by user\"),\n    FAILURE(24, \"Recognition failed\"),\n    DENY(25, \"Camera does not support BCR\"),\n    STRING_PARAM_NULL(26, \"Given string parameter is null or empty\"),\n    REMOTE_MODEL_NULL(27, \"No remote model object created with given parameters\"),\n    ASR_RECOGNIZER_NULL(28, \"Asr recognizer is null or not created\"),\n    TTS_ENGINE_NULL(30, \"Tts engine is not created\"),\n    SOUND_DECT_NULL(31, \"Sound detector is not initialized\"),\n    CUSTOM_MODEL_SETTING_NULL(32, \"Input output setting is not initialized with given parameters\"),\n    CUSTOM_MODEL_INPUT_NULL(33, \"Model inputs is not initialized with given parameters\"),\n    CUSTOM_MODEL_EXECUTOR_SETTING_NULL(34, \"Model executor setting is not initialized with given parameters\"),\n    DATA_SET_NOT_VALID(35, \"Data set is not valid.\"),\n    LENS_ENGINE_NULL(36, \"LensEngine is not created\"),\n    LENS_HOLDER_NULL(37, \"LensEngine holder is null\");\n\n    private int errCode;\n\n    private String message;\n\n    HMSResults(int errCode, String message) {\n        this.errCode = errCode;\n        this.message = message;\n    }\n\n    public int getErrCode() {\n        return errCode;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    /**\n     * Combines status and message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.errCode);\n        wm.putString(\"message\", this.message);\n        return wm;\n    }\n\n    /**\n     * Combines status and message with optional parameters\n     *\n     * @param errorCode Error code\n     * @param errorMessage Error message\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer errorCode, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", errorCode == null ? this.errCode : errorCode);\n        wm.putString(\"message\", errorMessage == null ? this.message : errorMessage);\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/creators/HMSObjectCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.creators;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Rect;\nimport android.hardware.Camera;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.MLAnalyzerFactory;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzer;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzerFactory;\nimport com.huawei.hms.mlsdk.gesture.MLGestureAnalyzerSetting;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzer;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerFactory;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerSetting;\nimport com.huawei.hms.mlsdk.interactiveliveness.MLInteractiveLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.interactiveliveness.action.MLInteractiveLivenessConfig;\nimport com.huawei.hms.mlsdk.livenessdetection.MLLivenessCaptureConfig;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerFactory;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting;\nimport com.huawei.hms.rn.mlbody.helpers.transactors.HMS2DFaceAnalyzerTransactor;\nimport com.huawei.hms.rn.mlbody.helpers.transactors.HMS3DFaceAnalyzerTransactor;\nimport com.huawei.hms.rn.mlbody.helpers.transactors.HMSGestureTransactor;\nimport com.huawei.hms.rn.mlbody.helpers.transactors.HMSHandKeypointTransactor;\nimport com.huawei.hms.rn.mlbody.helpers.transactors.HMSSkeletonAnalyzerTransactor;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.ByteArrayOutputStream;\nimport java.nio.ByteBuffer;\n\npublic final class HMSObjectCreator {\n    private static final String TAG = HMSObjectCreator.class.getSimpleName();\n\n    private static volatile HMSObjectCreator instance;\n\n    public static HMSObjectCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSObjectCreator.class) {\n                if (instance == null) {\n                    instance = new HMSObjectCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    public static String bitmapToBase64(final Bitmap bitmap) {\n        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();\n        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);\n        byte[] byteArray = byteArrayOutputStream.toByteArray();\n        return Base64.encodeToString(byteArray, Base64.DEFAULT);\n    }\n\n    /**\n     * Creates MLFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return MLFaceAnalyzer  object\n     */\n    public MLFaceAnalyzer create2DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance().getFaceAnalyzer(createFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return ML3DFaceAnalyzer object\n     */\n    public ML3DFaceAnalyzer create3DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance()\n            .get3DFaceAnalyzer(create3DFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzerSetting\n     *\n     * @param readableMap configuration\n     * @return ML3DFaceAnalyzerSetting object\n     */\n    private ML3DFaceAnalyzerSetting create3DFaceAnalyzerSetting(ReadableMap readableMap) {\n        int performanceType = ML3DFaceAnalyzerSetting.TYPE_SPEED;\n        boolean isTracingAllowed = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting object is created using default options.\");\n            return new ML3DFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n\n        return new ML3DFaceAnalyzerSetting.Factory().setPerformanceType(performanceType)\n            .setTracingAllowed(isTracingAllowed)\n            .create();\n    }\n\n    /**\n     * Creates MLFaceAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLFaceAnalyzerSetting object\n     */\n    private MLFaceAnalyzerSetting createFaceAnalyzerSetting(ReadableMap readableMap) {\n        int featureType = MLFaceAnalyzerSetting.TYPE_FEATURES;\n        int setShapeType = MLFaceAnalyzerSetting.TYPE_SHAPES;\n        int keyPointType = MLFaceAnalyzerSetting.TYPE_KEYPOINTS;\n        int performanceType = MLFaceAnalyzerSetting.TYPE_SPEED;\n        int tracingMode = MLFaceAnalyzerSetting.MODE_TRACING_ROBUST;\n        double minFaceProportion = 0.1d;\n        boolean isPoseDisabled = false;\n        boolean isTracingAllowed = false;\n        boolean isMaxSizeFaceOnly = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFaceAnalyzerSetting object is created using default options.\");\n            return new MLFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"featureType\", ReadableType.Number)) {\n            featureType = readableMap.getInt(\"featureType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting featureType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"keyPointType\", ReadableType.Number)) {\n            keyPointType = readableMap.getInt(\"keyPointType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting keyPointType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"shapeType\", ReadableType.Number)) {\n            setShapeType = readableMap.getInt(\"shapeType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting shapeType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tracingMode\", ReadableType.Number)) {\n            tracingMode = readableMap.getInt(\"tracingMode\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting tracingMode option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minFaceProportion\", ReadableType.Number)) {\n            minFaceProportion = readableMap.getDouble(\"minFaceProportion\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting minFaceProportion option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isMaxSizeFaceOnly\", ReadableType.Boolean)) {\n            isMaxSizeFaceOnly = readableMap.getBoolean(\"isMaxSizeFaceOnly\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isMaxSizeFaceOnly option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isPoseDisabled\", ReadableType.Boolean)) {\n            isPoseDisabled = readableMap.getBoolean(\"isPoseDisabled\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isPoseDisabled option set\");\n        }\n\n        return new MLFaceAnalyzerSetting.Factory().setFeatureType(featureType)\n            .setKeyPointType(keyPointType)\n            .setMaxSizeFaceOnly(isMaxSizeFaceOnly)\n            .setMinFaceProportion((float) minFaceProportion)\n            .setPerformanceType(performanceType)\n            .setPoseDisabled(isPoseDisabled)\n            .setShapeType(setShapeType)\n            .setTracingAllowed(isTracingAllowed, tracingMode)\n            .create();\n    }\n\n    /**\n     * Creates and returns MLSkeletonAnalyzer object\n     *\n     * @param analyzeType analyze type\n     * @return MLSkeletonAnalyzer object\n     */\n    public MLSkeletonAnalyzer createSkeletonAnalyzer(int analyzeType) {\n        return MLSkeletonAnalyzerFactory.getInstance().getSkeletonAnalyzer(createSkeletonAnalyzerSetting(analyzeType));\n    }\n\n    /**\n     * Creates MLSkeletonAnalyzerSetting object\n     *\n     * @param analyzerType analyze type\n     * @return MLSkeletonAnalyzerSetting object\n     */\n    private MLSkeletonAnalyzerSetting createSkeletonAnalyzerSetting(int analyzerType) {\n        return new MLSkeletonAnalyzerSetting.Factory().setAnalyzerType(analyzerType).create();\n    }\n\n    /**\n     * Creates MLLivenessCaptureConfig object\n     *\n     * @param options options\n     * @return MLLivenessCaptureConfig object\n     */\n    public MLLivenessCaptureConfig createLivenessCaptureConfig(ReadableMap options) {\n        MLLivenessCaptureConfig.Builder builder = new MLLivenessCaptureConfig.Builder();\n\n        if (options == null) {\n            Log.i(TAG, \"MLLivenessCaptureConfig options is null\");\n            return builder.build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(options, \"option\", ReadableType.Number)) {\n            builder.setOptions(options.getInt(\"option\"));\n        }\n\n        return builder.build();\n    }\n\n    /**\n     * Creates MLInteractiveLivenessCaptureConfig object\n     *\n     * @param options options\n     * @return MLInteractiveLivenessCaptureConfig object\n     */\n\n    public MLInteractiveLivenessCaptureConfig createInteractiveLivenessCaptureConfig(ReadableMap options) {\n\n        ReadableArray actionArray = null;\n        boolean isRandomable = true;\n        int[] intArray = new int[6];\n        int num = 0;\n        MLInteractiveLivenessCaptureConfig.Builder builder = new MLInteractiveLivenessCaptureConfig.Builder();\n        MLInteractiveLivenessConfig.Builder interactiveLivenessConfig = new MLInteractiveLivenessConfig.Builder();\n\n        if (options == null) {\n            Log.i(TAG, \"MLInteractiveLivenessCaptureConfig options is null\");\n            return builder.build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(options, \"option\", ReadableType.Number)) {\n\n            builder.setOptions(options.getInt(\"option\"));\n        }\n        if (HMSUtils.getInstance().hasValidKey(options, \"config\", ReadableType.Map)) {\n            ReadableMap config = options.getMap(\"config\");\n\n            if (HMSUtils.getInstance().hasValidKey(config, \"actionArray\", ReadableType.Array)) {\n\n                actionArray = config.getArray(\"actionArray\");\n                intArray = new int[actionArray.size()];\n                for (int i = 0; i < actionArray.size(); i++) {\n                    intArray[i] = actionArray.getInt(i);\n                }\n            }\n            if (HMSUtils.getInstance().hasValidKey(config, \"num\", ReadableType.Number)) {\n\n                num = config.getInt(\"num\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(config, \"isRandomable\", ReadableType.Boolean)) {\n\n                isRandomable = config.getBoolean(\"isRandomable\");\n            }\n\n            interactiveLivenessConfig.setActionArray(intArray, num, isRandomable);\n            builder.setActionConfig(interactiveLivenessConfig.build());\n\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(options, \"detectionTimeOut\", ReadableType.Number)) {\n\n            builder.setDetectionTimeOut((long) options.getDouble(\"detectionTimeOut\"));\n        }\n        return builder.build();\n    }\n\n    /**\n     * Create MLHandKeypointAnalyzer\n     *\n     * @param analyzerSetting configuration\n     * @return MLHandKeypointAnalyzer\n     */\n    public MLHandKeypointAnalyzer createHandKeyPointAnalyzer(ReadableMap analyzerSetting) {\n        return MLHandKeypointAnalyzerFactory.getInstance()\n            .getHandKeypointAnalyzer(createHandKeyPointAnalyzerSetting(analyzerSetting));\n    }\n\n    /**\n     * Create MLGestureAnalyzer\n     *\n     * @return MLGestureAnalyzer\n     */\n    public MLGestureAnalyzer createGestureAnalyzer() {\n        MLGestureAnalyzerSetting analyzerSetting = new MLGestureAnalyzerSetting.Factory().create();\n        return MLGestureAnalyzerFactory.getInstance().getGestureAnalyzer(analyzerSetting);\n    }\n\n    /**\n     * Creates MLHandKeypointAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLHandKeypointAnalyzerSetting object\n     */\n    private MLHandKeypointAnalyzerSetting createHandKeyPointAnalyzerSetting(ReadableMap readableMap) {\n        int maxHandResults = 10;\n        int sceneType = MLHandKeypointAnalyzerSetting.TYPE_ALL;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting object is created using default options.\");\n            return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n                .setSceneType(sceneType)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sceneType\", ReadableType.Number)) {\n            sceneType = readableMap.getInt(\"sceneType\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting sceneType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxHandResults\", ReadableType.Number)) {\n            maxHandResults = readableMap.getInt(\"maxHandResults\") <= 0 ? 10 : readableMap.getInt(\"maxHandResults\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting maxHandResults option set.\");\n        }\n\n        return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n            .setSceneType(sceneType)\n            .create();\n    }\n\n    /**\n     * Creates MLFrame object to use analyze\n     *\n     * @param frameConfiguration keys and values to create MLFrame from existing methods\n     * @param context ReactApplicationContext\n     * @return MLFrame object or null\n     */\n    public MLFrame createFrame(ReadableMap frameConfiguration, ReactApplicationContext context) {\n        if (frameConfiguration == null) {\n            Log.i(TAG, \"MLFrame frameConfiguration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(frameConfiguration.getString(\"bitmap\"), Base64.DEFAULT);\n            return MLFrame.fromBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bytes\", ReadableType.Map)) {\n            ReadableMap bytes = frameConfiguration.getMap(\"bytes\");\n            if (HMSUtils.getInstance().hasValidKey(bytes, \"frameProperty\", ReadableType.Map) && HMSUtils.getInstance()\n                .hasValidKey(bytes, \"values\", ReadableType.Array)) {\n                MLFrame.Property property = createFrameProperty(bytes.getMap(\"frameProperty\"));\n                ReadableArray values = bytes.getArray(\"values\");\n                return MLFrame.fromByteArray(HMSUtils.getInstance().convertRaToByteArray(values), property);\n            } else {\n                Log.i(TAG, \"MLFrame bytes object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"byteBuffer\", ReadableType.Map)) {\n            ReadableMap byteBuffer = frameConfiguration.getMap(\"byteBuffer\");\n            if (HMSUtils.getInstance().hasValidKey(byteBuffer, \"buffer\", ReadableType.String) && HMSUtils.getInstance()\n                .hasValidKey(byteBuffer, \"frameProperty\", ReadableType.Map)) {\n                MLFrame.Property frameProperty = createFrameProperty(byteBuffer.getMap(\"frameProperty\"));\n                String buffer = byteBuffer.getString(\"buffer\");\n                return MLFrame.fromByteBuffer(\n                    HMSUtils.getInstance().convertByteArrToByteBuffer(Base64.decode(buffer, Base64.DEFAULT)),\n                    frameProperty);\n            } else {\n                Log.i(TAG, \"MLFrame byteBuffer object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"filePath\", ReadableType.String)) {\n            try {\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                    Uri.parse(frameConfiguration.getString(\"filePath\")));\n                return new MLFrame.Creator().setBitmap(bitmap).create();\n            } catch (Exception e) {\n                Log.i(TAG, \"MLFrame exception happened fromFilePath \" + e.getMessage());\n                return null;\n            }\n\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"creator\", ReadableType.Map)) {\n            ReadableMap creator = frameConfiguration.getMap(\"creator\");\n            return createFrameUsingCreator(creator);\n        } else {\n            Log.i(TAG, \"MLFrame frameConfiguration does not contain keys for creating a frame\");\n            return null;\n        }\n    }\n\n    /**\n     * Creates MLFrame.Property object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property object\n     */\n    private MLFrame.Property createFrameProperty(ReadableMap readableMap) {\n        MLFrame.Property.Creator creator = new MLFrame.Property.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame.Property object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n            creator.setWidth(readableMap.getInt(\"width\"));\n            Log.i(TAG, \"MLFrame.Property width option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n            creator.setHeight(readableMap.getInt(\"height\"));\n            Log.i(TAG, \"MLFrame.Property height option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame.Property quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"formatType\", ReadableType.Number)) {\n            creator.setFormatType(readableMap.getInt(\"formatType\"));\n            Log.i(TAG, \"MLFrame.Property formatType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame.Property itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.Number)) {\n            creator.setTimestamp(readableMap.getInt(\"timeStamp\"));\n            Log.i(TAG, \"MLFrame.Property timeStamp option set.\");\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates MLFrame.Property.Ext object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property.Ext object\n     */\n    private MLFrame.Property.Ext createFramePropertyExt(ReadableMap readableMap) {\n        int lensId = 0;\n        int maxZoom = 0;\n        int zoom = 0;\n        int bottom = 0;\n        int left = 0;\n        int right = 0;\n        int top = 0;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrameProperty.Ext object is created using default options.\");\n            return new MLFrame.Property.Ext.Creator().build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"lensId\", ReadableType.Number)) {\n            lensId = readableMap.getInt(\"lensId\");\n            Log.i(TAG, \"MLFrameProperty.Ext lensId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxZoom\", ReadableType.Number)) {\n            maxZoom = readableMap.getInt(\"maxZoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext maxZoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"zoom\", ReadableType.Number)) {\n            zoom = readableMap.getInt(\"zoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext zoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"bottom\", ReadableType.Number)) {\n            bottom = readableMap.getInt(\"bottom\");\n            Log.i(TAG, \"MLFrameProperty.Ext bottom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"left\", ReadableType.Number)) {\n            left = readableMap.getInt(\"left\");\n            Log.i(TAG, \"MLFrameProperty.Ext left option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"right\", ReadableType.Number)) {\n            right = readableMap.getInt(\"right\");\n            Log.i(TAG, \"MLFrameProperty.Ext right option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"top\", ReadableType.Number)) {\n            top = readableMap.getInt(\"top\");\n            Log.i(TAG, \"MLFrameProperty.Ext top option set.\");\n        }\n        return new MLFrame.Property.Ext.Creator().setLensId(lensId)\n            .setMaxZoom(maxZoom)\n            .setRect(new Rect(left, top, right, bottom))\n            .setZoom(zoom)\n            .build();\n    }\n\n    /**\n     * Creates MLFrame using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame object\n     */\n    private MLFrame createFrameUsingCreator(ReadableMap readableMap) {\n        MLFrame.Creator creator = new MLFrame.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame given ReadableMap object is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"base64Bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(readableMap.getString(\"base64Bitmap\"), Base64.DEFAULT);\n            creator.setBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n            Log.i(TAG, \"MLFrame base64Bitmap option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.String)) {\n            creator.setTimestamp(Long.parseLong(readableMap.getString(\"timeStamp\")));\n            Log.i(TAG, \"MLFrame timeStamp option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"framePropertyExt\", ReadableType.Map)) {\n            creator.setFramePropertyExt(createFramePropertyExt(readableMap.getMap(\"framePropertyExt\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"writeByteBufferData\", ReadableType.Map)) {\n            ReadableMap writeByteBufferData = readableMap.getMap(\"writeByteBufferData\");\n            if (HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"data\", ReadableType.String)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"height\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"width\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"formatType\", ReadableType.Number)) {\n\n                ByteBuffer bufferData = HMSUtils.getInstance()\n                    .convertByteArrToByteBuffer(Base64.decode(writeByteBufferData.getString(\"data\"), Base64.DEFAULT));\n                int height = writeByteBufferData.getInt(\"height\");\n                int width = writeByteBufferData.getInt(\"width\");\n                int formatType = writeByteBufferData.getInt(\"formatType\");\n                creator.writeByteBufferData(bufferData, width, height, formatType);\n                Log.i(TAG, \"MLFrame writeByteBufferData option set.\");\n            } else {\n                Log.i(TAG, \"MLFrame writeByteBufferData option keys are not valid.\");\n            }\n\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates LensEngine\n     *\n     * @param context context object\n     * @param analyzer analyzer\n     * @param configuration configurations for LensEngine\n     * @return LensEngine object\n     */\n    public LensEngine createLensEngine(ReactApplicationContext context, MLAnalyzer analyzer,\n        ReadableMap configuration) {\n        int width = 1440;\n        int height = 1080;\n        float fps = 30.0f;\n        boolean automaticFocus = false;\n        String flashMode = Camera.Parameters.FLASH_MODE_OFF;\n        String focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO;\n        int lensType = LensEngine.BACK_LENS;\n\n        if (configuration == null) {\n            Log.i(TAG, \"LensEngine created with default options\");\n            return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n                .setFocusMode(focusMode)\n                .setFlashMode(flashMode)\n                .enableAutomaticFocus(false)\n                .applyFps(fps)\n                .applyDisplayDimension(width, height)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"width\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine width set\");\n            width = configuration.getInt(\"width\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"height\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine height set\");\n            height = configuration.getInt(\"height\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"lensType\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine lensType set\");\n            lensType = configuration.getInt(\"lensType\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"fps\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine fps set\");\n            fps = (float) configuration.getDouble(\"fps\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"automaticFocus\", ReadableType.Boolean)) {\n            Log.i(TAG, \"LensEngine automaticFocus set\");\n            automaticFocus = configuration.getBoolean(\"automaticFocus\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"flashMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine flashMode set\");\n            flashMode = configuration.getString(\"flashMode\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"focusMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine focusMode set\");\n            focusMode = configuration.getString(\"focusMode\");\n        }\n\n        return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n            .setFocusMode(focusMode)\n            .setFlashMode(flashMode)\n            .enableAutomaticFocus(automaticFocus)\n            .applyFps(fps)\n            .applyDisplayDimension(width, height)\n            .create();\n    }\n\n    /**\n     * Creates analyzer for lens engine\n     *\n     * @param analyzer analyzer tag number\n     * @param analyzerConfig analyzer configuration for related tag\n     * @param context app context\n     * @return MLAnalyzer\n     */\n    public MLAnalyzer createLensEngineAnalyzer(int analyzer, ReadableMap analyzerConfig,\n        ReactApplicationContext context) {\n        switch (analyzer) {\n            case 1:\n                MLFaceAnalyzer faceAnalyzer2d = create2DFaceAnalyzer(analyzerConfig);\n                faceAnalyzer2d.setTransactor(new HMS2DFaceAnalyzerTransactor(context));\n                return faceAnalyzer2d;\n            case 2:\n                ML3DFaceAnalyzer faceAnalyzer3d = create3DFaceAnalyzer(analyzerConfig);\n                faceAnalyzer3d.setTransactor(new HMS3DFaceAnalyzerTransactor(context));\n                return faceAnalyzer3d;\n            case 3:\n                int analyzeType = HMSUtils.getInstance().hasValidKey(analyzerConfig, \"analyzeType\", ReadableType.Number)\n                    ? analyzerConfig.getInt(\"analyzeType\")\n                    : MLSkeletonAnalyzerSetting.TYPE_NORMAL;\n                MLSkeletonAnalyzer skeletonAnalyzer = createSkeletonAnalyzer(analyzeType);\n                skeletonAnalyzer.setTransactor(new HMSSkeletonAnalyzerTransactor(context));\n                return skeletonAnalyzer;\n            case 7:\n                MLHandKeypointAnalyzer handKeypointAnalyzer = createHandKeyPointAnalyzer(analyzerConfig);\n                handKeypointAnalyzer.setTransactor(new HMSHandKeypointTransactor(context));\n                return handKeypointAnalyzer;\n            case 8:\n                MLGestureAnalyzer gestureAnalyzer = createGestureAnalyzer();\n                gestureAnalyzer.setTransactor(new HMSGestureTransactor(context));\n                return gestureAnalyzer;\n            default:\n                return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/creators/HMSResultCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.creators;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.PointF;\nimport android.graphics.Rect;\nimport android.text.TextUtils;\nimport android.util.SparseArray;\nimport com.huawei.hms.common.size.Size;\nimport com.huawei.hms.mlsdk.common.MLPosition;\nimport com.huawei.hms.mlsdk.face.MLFace;\nimport com.huawei.hms.mlsdk.face.MLFaceEmotion;\nimport com.huawei.hms.mlsdk.face.MLFaceFeature;\nimport com.huawei.hms.mlsdk.face.MLFaceKeyPoint;\nimport com.huawei.hms.mlsdk.face.MLFaceShape;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFace;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceTemplateResult;\nimport com.huawei.hms.mlsdk.faceverify.MLFaceVerificationResult;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoint;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoints;\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSResultCreator {\n    private static volatile HMSResultCreator instance;\n\n    public static HMSResultCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSResultCreator.class) {\n                if (instance == null) {\n                    instance = new HMSResultCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts Rect to WritableMap\n     *\n     * @param border rect object\n     * @return WritableMap\n     */\n    private WritableMap getBorders(Rect border) {\n        WritableMap writableMap = Arguments.createMap();\n        writableMap.putInt(\"left\", border.left);\n        writableMap.putInt(\"right\", border.right);\n        writableMap.putInt(\"top\", border.top);\n        writableMap.putInt(\"down\", border.bottom);\n        return writableMap;\n    }\n\n    /**\n     * Face recognition result creator\n     *\n     * @param faces results\n     * @return WritableMap\n     */\n    public WritableMap getFaceResult(List<MLFace> faces) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getFaceAnalyzerResult(faces));\n        return wm;\n    }\n\n    /**\n     * Converts face analyze results to WritableArray\n     *\n     * @param faces analyze results\n     * @return WritableArray\n     */\n    private WritableArray getFaceAnalyzerResult(List<MLFace> faces) {\n        WritableArray array = Arguments.createArray();\n        for (MLFace face : faces) {\n            WritableMap map = Arguments.createMap();\n            map.putArray(\"allPoints\", getAllPoints(face.getAllPoints()));\n            map.putMap(\"border\", getBorders(face.getBorder()));\n            map.putMap(\"coordinatePoints\", getCoordinatePoints(face.getCoordinatePoint()));\n            map.putMap(\"emotions\", getEmotions(face.getEmotions()));\n            map.putArray(\"faceKeyPointList\", getFaceKeyPointList(face.getFaceKeyPoints()));\n            map.putArray(\"faceShapeList\", getShapeList(face.getFaceShapeList()));\n            map.putMap(\"features\", getFeatures(face.getFeatures()));\n            map.putDouble(\"height\", face.getHeight());\n            map.putDouble(\"width\", face.getWidth());\n            map.putDouble(\"rotationAngleX\", face.getRotationAngleX());\n            map.putDouble(\"rotationAngleY\", face.getRotationAngleY());\n            map.putDouble(\"rotationAngleZ\", face.getRotationAngleZ());\n            map.putInt(\"tracingIdentity\", face.getTracingIdentity());\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Converts face features to WritableMap\n     *\n     * @param feature face features\n     * @return WritableMap\n     */\n    private WritableMap getFeatures(MLFaceFeature feature) {\n        WritableMap map = Arguments.createMap();\n        map.putInt(\"age\", feature.getAge());\n        map.putDouble(\"hatProbability\", feature.getHatProbability());\n        map.putDouble(\"leftEyeOpenProbability\", feature.getLeftEyeOpenProbability());\n        map.putDouble(\"rightEyeOpenProbability\", feature.getRightEyeOpenProbability());\n        map.putDouble(\"moustacheProbability\", feature.getMoustacheProbability());\n        map.putDouble(\"sexProbability\", feature.getSexProbability());\n        map.putDouble(\"sunGlassProbability\", feature.getSunGlassProbability());\n        return map;\n    }\n\n    /**\n     * Converts face positions to WritableArray\n     *\n     * @param positions positions\n     * @return WritableArray\n     */\n    private WritableArray getAllPoints(List<MLPosition> positions) {\n        WritableArray array = Arguments.createArray();\n        for (MLPosition position : positions) {\n            array.pushMap(getPosition(position));\n        }\n        return array;\n    }\n\n    /**\n     * Converts face coordinate points to WritableMap\n     *\n     * @param pointF coordinate point\n     * @return WritableMap\n     */\n    private WritableMap getCoordinatePoints(PointF pointF) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"length\", pointF.length());\n        map.putDouble(\"x\", pointF.x);\n        map.putDouble(\"y\", pointF.y);\n        return map;\n    }\n\n    /**\n     * Converts face emotions to WritableMap\n     *\n     * @param emotion emotions\n     * @return WritableMap\n     */\n    private WritableMap getEmotions(MLFaceEmotion emotion) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"angryProbability\", emotion.getAngryProbability());\n        map.putDouble(\"disgustProbability\", emotion.getDisgustProbability());\n        map.putDouble(\"fearProbability\", emotion.getFearProbability());\n        map.putDouble(\"neutralProbability\", emotion.getNeutralProbability());\n        map.putDouble(\"sadProbability\", emotion.getSadProbability());\n        map.putDouble(\"smilingProbability\", emotion.getSmilingProbability());\n        map.putDouble(\"surpriseProbability\", emotion.getSurpriseProbability());\n        return map;\n    }\n\n    /**\n     * Converts face shapes to WritableArray\n     *\n     * @param shapes shape list\n     * @return WritableArray\n     */\n    private WritableArray getShapeList(List<MLFaceShape> shapes) {\n        WritableArray array = Arguments.createArray();\n        for (MLFaceShape shape : shapes) {\n            WritableMap map = Arguments.createMap();\n            map.putInt(\"faceShapeType\", shape.getFaceShapeType());\n            map.putArray(\"points\", getAllPoints(shape.getPoints()));\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Convert face key points to WritableArray\n     *\n     * @param points key points\n     * @return WritableArray\n     */\n    private WritableArray getFaceKeyPointList(List<MLFaceKeyPoint> points) {\n        WritableArray array = Arguments.createArray();\n        for (MLFaceKeyPoint point : points) {\n            WritableMap map = Arguments.createMap();\n            map.putMap(\"points\", getPosition(point.getPoint()));\n            map.putInt(\"type\", point.getType());\n            array.pushMap(map);\n        }\n        return array;\n    }\n\n    /**\n     * Converts positions to WritableMap\n     *\n     * @param position positions\n     * @return WritableMap\n     */\n    private WritableMap getPosition(MLPosition position) {\n        WritableMap map = Arguments.createMap();\n        map.putDouble(\"Y\", position.getY() == null ? 0.0 : position.getY());\n        map.putDouble(\"Z\", position.getZ() == null ? 0.0 : position.getZ());\n        map.putDouble(\"X\", position.getX() == null ? 0.0 : position.getX());\n        return map;\n    }\n\n    /**\n     * 3D face recognition results\n     *\n     * @param faces results from analyzer\n     * @return WritableMap\n     */\n    public WritableMap get3DFaceResult(List<ML3DFace> faces) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", get3DFaceResults(faces));\n        return wm;\n    }\n\n    /**\n     * 3D face recognition result creator\n     *\n     * @param faces result from analyzer\n     * @return WritableArray\n     */\n    private WritableArray get3DFaceResults(List<ML3DFace> faces) {\n        WritableArray wa = Arguments.createArray();\n        for (ML3DFace face : faces) {\n            WritableMap wm = Arguments.createMap();\n            wm.putArray(\"allPoints\", getAllPoints(face.get3DAllVertexs()));\n            wm.putDouble(\"faceEulerY\", face.get3DFaceEulerY());\n            wm.putDouble(\"faceEulerX\", face.get3DFaceEulerX());\n            wm.putDouble(\"faceEulerZ\", face.get3DFaceEulerZ());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts skeleton results to WritableMap\n     *\n     * @param results skeleton recognition results\n     * @return WritableMap\n     */\n    public WritableMap getSkeletonSyncResults(SparseArray<MLSkeleton> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSkeletonResults(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts skeleton results to WritableMap\n     *\n     * @param results skeleton recognition results\n     * @return WritableMap\n     */\n    public WritableMap getSkeletonAsyncResults(List<MLSkeleton> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSkeletonResults(results));\n        return wm;\n    }\n\n    /**\n     * Converts skeleton results to WritableArray\n     *\n     * @param results skeleton recognition results\n     * @return WritableArray\n     */\n    private WritableArray getSkeletonResults(List<MLSkeleton> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLSkeleton skeleton : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putArray(\"joints\", getJoints(skeleton.getJoints()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts joints to WritableArray\n     *\n     * @param results joints\n     * @return WritableArray\n     */\n    private WritableArray getJoints(List<MLJoint> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLJoint joint : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putInt(\"type\", joint.getType());\n            wm.putDouble(\"pointX\", joint.getPointX());\n            wm.putDouble(\"pointY\", joint.getPointY());\n            wm.putDouble(\"score\", joint.getScore());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts hand key point results to WritableMap\n     *\n     * @param results hand key point results\n     * @return WritableMap\n     */\n    public WritableMap getHandKeyPointResults(SparseArray<MLHandKeypoints> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getHandKeyPoints(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts hand key point results to WritableMap\n     *\n     * @param results hand key point results\n     * @return WritableMap\n     */\n    public WritableMap getHandKeyPointResults(List<MLHandKeypoints> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getHandKeyPoints(results));\n        return wm;\n    }\n\n    /**\n     * Converts gesture results to WritableMap\n     *\n     * @param results gesture results\n     * @return WritableMap\n     */\n    public WritableMap getGestureResults(SparseArray<MLGesture> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getGesture(HMSUtils.getInstance().convertSparseArrayToList(results)));\n        return wm;\n    }\n\n    /**\n     * Converts gesture results to WritableMap\n     *\n     * @param results gesture results\n     * @return WritableMap\n     */\n    public WritableMap getGestureResults(List<MLGesture> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getGesture(results));\n        return wm;\n    }\n\n    /**\n     * Get Gesture\n     *\n     * @param gestures Gesture result\n     * @return WritableArray\n     */\n    private WritableArray getGesture(List<MLGesture> gestures) {\n        WritableArray wa = Arguments.createArray();\n        for (MLGesture gesture : gestures) {\n            WritableMap temp = Arguments.createMap();\n            temp.putInt(\"category\", gesture.getCategory());\n            temp.putDouble(\"score\", gesture.getScore());\n            temp.putMap(\"border\", getBorders(gesture.getRect()));\n            wa.pushMap(temp);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationCompareResults(SparseArray<MLFaceVerificationResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationCompare(HMSUtils.getInstance().convertSparseArrayToList(results), cost));\n        return wm;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationCompareResults(List<MLFaceVerificationResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationCompare(results, cost));\n        return wm;\n    }\n\n    /**\n     * Get Face Verification\n     *\n     * @param results Face verification result\n     * @param cost Face verification cost\n     * @return WritableMap\n     */\n    private WritableMap getFaceVerificationCompare(List<MLFaceVerificationResult> results, int cost) {\n        WritableMap res = Arguments.createMap();\n        WritableArray arry = Arguments.createArray();\n\n        res.putInt(\"cost\", cost);\n        res.putBoolean(\"success\", true);\n        for (MLFaceVerificationResult template : results) {\n            WritableMap item = Arguments.createMap();\n\n            Rect location = template.getFaceInfo().getFaceRect();\n            int id = template.getTemplateId();\n            float similarity = template.getSimilarity();\n            item.putString(\"face\", location.toString());\n            item.putInt(\"id\", id);\n            item.putDouble(\"similarity\", similarity);\n\n            arry.pushMap(item);\n        }\n\n        res.putArray(\"faces\", arry);\n        return res;\n    }\n\n    /**\n     * Converts face verification results to WritableMap\n     *\n     * @param results face verification results\n     * @param cost face verification cost\n     * @return WritableMap\n     */\n    public WritableMap getFaceVerificationTemplateResult(List<MLFaceTemplateResult> results, int cost) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getFaceVerificationTemplate(results, cost));\n        return wm;\n    }\n\n    private WritableMap getFaceVerificationTemplate(List<MLFaceTemplateResult> results, int cost) {\n        WritableMap res = Arguments.createMap();\n        WritableArray wa = Arguments.createArray();\n        res.putInt(\"cost\", cost);\n        if (results.isEmpty()) {\n            res.putBoolean(\"success\", false);\n        } else {\n            res.putBoolean(\"success\", true);\n        }\n        for (MLFaceTemplateResult result : results) {\n            WritableMap temp = Arguments.createMap();\n            int id = result.getTemplateId();\n            Rect location = result.getFaceInfo().getFaceRect();\n            temp.putString(\"face\", location.toString());\n            temp.putInt(\"id\", id);\n            wa.pushMap(temp);\n        }\n        res.putArray(\"faces\", wa);\n        return res;\n    }\n\n    /**\n     * Converts list of MLHandKeypoints to WritableArray\n     *\n     * @param keypoints result of analyzer\n     * @return WritableArray\n     */\n    private WritableArray getHandKeyPoints(List<MLHandKeypoints> keypoints) {\n        WritableArray wa = Arguments.createArray();\n        for (MLHandKeypoints keyPoints : keypoints) {\n            WritableMap temp = Arguments.createMap();\n            temp.putArray(\"handKeyPoints\", getHandKeyPoint(keyPoints.getHandKeypoints()));\n            temp.putDouble(\"score\", keyPoints.getScore());\n            temp.putMap(\"border\", getBorders(keyPoints.getRect()));\n            wa.pushMap(temp);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts hand key points to WritableArray\n     *\n     * @param keyPoints hand key points\n     * @return WritableArray\n     */\n    private WritableArray getHandKeyPoint(List<MLHandKeypoint> keyPoints) {\n        WritableArray wa = Arguments.createArray();\n        for (MLHandKeypoint keyPoint : keyPoints) {\n            WritableMap wm = Arguments.createMap();\n            wm.putInt(\"type\", keyPoint.getType());\n            wm.putDouble(\"pointX\", keyPoint.getPointX());\n            wm.putDouble(\"pointY\", keyPoint.getPointY());\n            wm.putDouble(\"score\", keyPoint.getScore());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param integer method result\n     * @return WritableMap\n     */\n    public WritableMap integerResult(int integer) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"result\", integer);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param string result\n     * @return WritableMap\n     */\n    public WritableMap getStringResult(String string) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(string) ? \"\" : string);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param is result\n     * @return WritableMap\n     */\n    public WritableMap getBooleanResult(boolean is) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putBoolean(\"result\", is);\n        return wm;\n    }\n\n    /**\n     * converts float result to WritableMap\n     *\n     * @param aFloat method result\n     * @return WritableMap\n     */\n    public WritableMap floatResult(Float aFloat) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putDouble(\"result\", aFloat);\n        return wm;\n    }\n\n    /**\n     * Converts string list to result\n     *\n     * @param list data list\n     * @return WritableMap\n     */\n    public WritableMap stringListResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(list));\n        return wm;\n    }\n\n    /**\n     * Converts display dimension to result\n     *\n     * @param displayDimension preview size\n     * @return WritableMap\n     */\n    public WritableMap displayDimensionResult(Size displayDimension) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"width\", displayDimension.getWidth());\n        wm.putInt(\"height\", displayDimension.getHeight());\n        return wm;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMS2DFaceAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_2D_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_2D_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.face.MLFace;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMS2DFaceAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLFace> {\n\n    public HMS2DFaceAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(FACE_2D_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLFace> result) {\n        sendEvent(FACE_2D_TRANSACTOR_ON_RESULT, \"transactResult\", HMSResultCreator.getInstance()\n            .getFaceResult(HMSUtils.getInstance().convertSparseArrayToList(result.getAnalyseList())));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMS3DFaceAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_3D_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.FACE_3D_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFace;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMS3DFaceAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<ML3DFace> {\n\n    public HMS3DFaceAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(FACE_3D_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<ML3DFace> result) {\n        sendEvent(FACE_3D_TRANSACTOR_ON_RESULT, \"transactResult\", HMSResultCreator.getInstance()\n            .get3DFaceResult(HMSUtils.getInstance().convertSparseArrayToList(result.getAnalyseList())));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMSBaseTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\npublic class HMSBaseTransactor {\n    private ReactApplicationContext applicationContext;\n\n    private HMSLogger logger;\n\n    HMSBaseTransactor(ReactApplicationContext context) {\n        applicationContext = context;\n        logger = HMSLogger.getInstance(applicationContext);\n    }\n\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMSGestureTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.GESTURE_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.GESTURE_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.gesture.MLGesture;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSGestureTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLGesture> {\n\n    public HMSGestureTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(GESTURE_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLGesture> result) {\n        sendEvent(GESTURE_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getGestureResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMSHandKeypointTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.HAND_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.HAND_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypoints;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSHandKeypointTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLHandKeypoints> {\n\n    public HMSHandKeypointTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(HAND_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLHandKeypoints> result) {\n        sendEvent(HAND_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getHandKeyPointResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/transactors/HMSSkeletonAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.SKELETON_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.SKELETON_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\nimport com.huawei.hms.rn.mlbody.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSSkeletonAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLSkeleton> {\n\n    public HMSSkeletonAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(SKELETON_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLSkeleton> result) {\n        sendEvent(SKELETON_TRANSACTOR_ON_RESULT, \"transactOnResult\",\n            HMSResultCreator.getInstance().getSkeletonSyncResults(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/utils/HMSBackgroundTasks.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.utils;\n\nimport android.graphics.Bitmap;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hmf.tasks.Tasks;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic final class HMSBackgroundTasks {\n    private static volatile HMSBackgroundTasks instance;\n\n    public static HMSBackgroundTasks getInstance() {\n        if (instance == null) {\n            synchronized (HMSBackgroundTasks.class) {\n                if (instance == null) {\n                    instance = new HMSBackgroundTasks();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Handles single image saving task\n     *\n     * @param context app context\n     * @param image image to be saved\n     * @return WritableMap\n     */\n    public Task<String> saveImageAndGetUri(ReactApplicationContext context, Bitmap image) {\n        return Tasks.callInBackground(() -> HMSUtils.getInstance().saveImageAndGetUri(context, image));\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/utils/HMSLogger.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"MLBody\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.12.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/utils/HMSUtils.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.provider.MediaStore;\nimport android.util.SparseArray;\nimport android.view.SurfaceHolder;\n\nimport com.huawei.hms.mlsdk.skeleton.MLJoint;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeleton;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayOutputStream;\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\npublic final class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    private SurfaceHolder surfaceViewHolder;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            synchronized (HMSUtils.class) {\n                if (instance == null) {\n                    instance = new HMSUtils();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts JSONObject to WritableMap\n     *\n     * @param jsonObject JSONObject\n     * @return WritableMap\n     * @throws JSONException jsonObject.get throws it\n     */\n    public WritableMap convertJsonToWritableMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = Arguments.createMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts JSONArray to WritableArray\n     *\n     * @param jsonArray JSONArray\n     * @return WritableArray\n     * @throws JSONException jsonObject.get throws it\n     */\n    private WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n\n        return array;\n    }\n\n    /**\n     * Converts readable array to skeleton list\n     *\n     * @param ra readable array\n     * @return skeleton list\n     */\n    public List<MLSkeleton> convertRaToSkeletonList(ReadableArray ra) {\n        List<MLSkeleton> skeletonList = new ArrayList<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.Map) {\n                skeletonList.add(convertRaToSkeleton(ra.getMap(i)));\n            }\n        }\n        return skeletonList;\n    }\n\n    /**\n     * Converts readable map to MLSkeleton\n     *\n     * @param rm readable map\n     * @return MLSkeleton\n     */\n    private MLSkeleton convertRaToSkeleton(ReadableMap rm) {\n        List<MLJoint> mlJoints = new ArrayList<>();\n        if (hasValidKey(rm, \"joints\", ReadableType.Array)) {\n            ReadableArray jointsArray = rm.getArray(\"joints\");\n            for (int i = 0; i < jointsArray.size(); i++) {\n                if (jointsArray.getType(i) == ReadableType.Map) {\n                    ReadableMap map = jointsArray.getMap(i);\n                    float pointX = HMSUtils.getInstance().hasValidKey(map, \"pointX\", ReadableType.Number)\n                        ? (float) map.getDouble(\"pointX\")\n                        : 0;\n                    float pointY = HMSUtils.getInstance().hasValidKey(map, \"pointY\", ReadableType.Number)\n                        ? (float) map.getDouble(\"pointY\")\n                        : 0;\n                    int type = HMSUtils.getInstance().hasValidKey(map, \"type\", ReadableType.Number)\n                        ? map.getInt(\"type\")\n                        : -1;\n                    float score = HMSUtils.getInstance().hasValidKey(map, \"score\", ReadableType.Number)\n                        ? (float) map.getDouble(\"score\")\n                        : 0;\n                    mlJoints.add(new MLJoint(pointX, pointY, type, score));\n                }\n            }\n        }\n        return new MLSkeleton(mlJoints);\n    }\n\n    /**\n     * Converts string list to WritableArray\n     *\n     * @param list list of strings\n     * @return WritableArray\n     */\n    public WritableArray convertStringListIntoWa(List<String> list) {\n        WritableArray writableArray = Arguments.createArray();\n        for (String value : list) {\n            writableArray.pushString(value);\n        }\n        return writableArray;\n    }\n\n    /**\n     * Checks if ReadableMap has valid key\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @param type key's type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Checks boolean key is valid or not and if valid then returns its value\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @return true or false\n     */\n    public boolean boolKeyCheck(ReadableMap readableMap, String key) {\n        if (!hasValidKey(readableMap, key, ReadableType.Boolean)) {\n            return false;\n        }\n        return readableMap.getBoolean(key);\n    }\n\n    /**\n     * Converts byte array to WritableArray\n     *\n     * @param ba byte array\n     * @return WritableArray\n     */\n    public WritableArray convertByteArrToWa(byte[] ba) {\n        WritableArray wa = Arguments.createArray();\n        for (byte b : ba) {\n            wa.pushInt(b);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts ReadableArray to byte array\n     *\n     * @param ra ReadableArray\n     * @return byte array\n     */\n    public byte[] convertRaToByteArray(ReadableArray ra) {\n        byte[] bytes = new byte[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            bytes[i] = (byte) ra.getInt(i);\n        }\n        return bytes;\n    }\n\n    /**\n     * Converts byte array to byte buffer\n     *\n     * @param arr byte array\n     * @return byte buffer\n     */\n    public ByteBuffer convertByteArrToByteBuffer(byte[] arr) {\n        return ByteBuffer.wrap(arr);\n    }\n\n    /**\n     * Converts sparse array to list\n     *\n     * @param result sparse array of any type\n     * @param <T> generic parameter\n     * @return List\n     */\n    public <T> List<T> convertSparseArrayToList(SparseArray<T> result) {\n        List<T> converted = new ArrayList<>();\n        for (int i = 0; i < result.size(); i++) {\n            converted.add(result.get(result.keyAt(i)));\n        }\n        return converted;\n    }\n\n    /**\n     * Converts ReadableArray to String Set\n     *\n     * @param ra ReadableArray\n     * @return String Set\n     */\n    public Set<String> convertRaToStringSet(ReadableArray ra) {\n        Set<String> word = new HashSet<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.String) {\n                word.add(ra.getString(i));\n            }\n        }\n        return word;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convert2DFloatArrToWa(Float[][] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr[0]) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convertFloatArrToWa(Float[] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Save image to gallery\n     *\n     * @param inContext app context\n     * @param inImage bitmap image\n     * @return image uri\n     */\n    public String saveImageAndGetUri(Context inContext, Bitmap inImage) {\n        ByteArrayOutputStream bytes = new ByteArrayOutputStream();\n        inImage.compress(Bitmap.CompressFormat.JPEG, 90, bytes);\n        return MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, null, null);\n    }\n\n    /**\n     * Returns the holder for lensEngine\n     *\n     * @return holder\n     */\n    public SurfaceHolder getSurfaceViewHolder() {\n        return surfaceViewHolder;\n    }\n\n    /**\n     * Sets the holder for lensEngine\n     *\n     * @param surfaceViewHolder holder\n     */\n    public void setSurfaceViewHolder(SurfaceHolder surfaceViewHolder) {\n        this.surfaceViewHolder = surfaceViewHolder;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/views/HMSCustomSurfaceView.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.views;\n\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_SURFACE_ON_CHANGED;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_SURFACE_ON_CREATED;\nimport static com.huawei.hms.rn.mlbody.helpers.constants.HMSConstants.LENS_SURFACE_ON_DESTROY;\n\nimport android.content.Context;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\n\nimport com.huawei.hms.rn.mlbody.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSCustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback {\n    private ThemedReactContext applicationContext;\n\n    public HMSCustomSurfaceView(Context context) {\n        super(context);\n        applicationContext = (ThemedReactContext) context;\n        HMSUtils.getInstance().setSurfaceViewHolder(getHolder());\n        getHolder().addCallback(this);\n    }\n\n    @Override\n    public void surfaceCreated(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_CREATED, null);\n    }\n\n    @Override\n    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"format\", i);\n        wm.putInt(\"width\", i1);\n        wm.putInt(\"height\", i2);\n        sendEvent(LENS_SURFACE_ON_CHANGED, wm);\n    }\n\n    @Override\n    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_DESTROY, null);\n    }\n\n    private void sendEvent(String eventName, WritableMap params) {\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/java/com/huawei/hms/rn/mlbody/helpers/views/HMSSurfaceView.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.helpers.views;\n\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSSurfaceView extends SimpleViewManager<HMSCustomSurfaceView> {\n\n    @Override\n    public String getName() {\n        return HMSSurfaceView.class.getSimpleName();\n    }\n\n    @Override\n    protected HMSCustomSurfaceView createViewInstance(ThemedReactContext reactContext) {\n        return new HMSCustomSurfaceView(reactContext);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/res/layout/activity_liveness_custom_detection.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RelativeLayout\n        xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:orientation=\"vertical\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n    <FrameLayout\n            android:id=\"@+id/surface_layout\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\">\n\n    </FrameLayout>\n\n    <RelativeLayout\n            android:id=\"@+id/tool_bar\"\n            android:layout_alignParentTop=\"true\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"56dp\"\n            android:background=\"#FFFFFF\">\n\n        <ImageView\n                android:id=\"@+id/img_back\"\n                android:layout_width=\"24dp\"\n                android:layout_height=\"24dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_centerVertical=\"true\"\n                android:layout_marginStart=\"16dp\"\n                android:scaleType=\"fitXY\"\n                android:src=\"@drawable/ic_back\" />\n\n        <TextView\n                android:id=\"@+id/img_back_title\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_centerVertical=\"true\"\n                android:layout_marginStart=\"16dp\"\n                android:layout_marginEnd=\"24dp\"\n                android:layout_toEndOf=\"@+id/img_back\"\n                android:fontFamily=\"HWtext-65ST\"\n                android:gravity=\"center_vertical\"\n                android:text=\"@string/custom_ui\"\n                android:textColor=\"#000000\"\n                android:textSize=\"20dp\" />\n\n    </RelativeLayout>\n\n    <RelativeLayout\n            android:id=\"@+id/bg\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/tool_bar\">\n        <TextView\n                android:id=\"@+id/tips\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"15dp\"\n                android:layout_marginBottom=\"16dp\"\n                android:fontFamily=\"HWtext-55ST\"\n                android:gravity=\"center\"\n                android:text=\"@string/custom_tips\"\n                android:textColor=\"#000000\"\n                android:textSize=\"16dp\" />\n        <TextView\n                android:id=\"@+id/status_code\"\n                android:layout_below=\"@id/tips\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginBottom=\"16dp\"\n                android:fontFamily=\"HWtext-55ST\"\n                android:gravity=\"center\"\n                android:text=\"@string/status_code\"\n                android:textColor=\"#000000\"\n                android:textSize=\"16dp\" />\n    </RelativeLayout>\n\n</RelativeLayout>\n\n\n"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/res/layout/hms_product_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.huawei.hms.rn.mlbody.helpers.views.HMSBottomSheetGridView\n            android:id=\"@+id/hms_bottom_sheet_grid_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:columnCount=\"2\" />\n\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/res/layout/hms_product_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:fresco=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.facebook.drawee.view.SimpleDraweeView\n            android:id=\"@+id/hms_product_item_image_view\"\n            android:layout_width=\"120dp\"\n            android:layout_height=\"120dp\"\n            android:layout_gravity=\"center\"\n            fresco:failureImage=\"@android:drawable/ic_menu_gallery\"\n            fresco:placeholderImage=\"@android:drawable/ic_menu_gallery\" />\n\n    <TextView\n            android:id=\"@+id/hms_product_item_text_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:gravity=\"center\"\n            android:textColor=\"@android:color/black\"\n            android:textSize=\"16sp\" />\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mlbody/android/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">mlbodykit_example</string>\n    <string name=\"toast\">Grant the permission to experience the function.</string>\n    <string name=\"Information_permission\">Obtaining related permissions: Camera permissions failed. Some functions cannot be used properly. You need to manually grant permissions on the settings page. </string>\n    <string name=\"go_authorization\">Go Authorization</string>\n    <string name=\"title_activity_liveness_detection\">LivenessDetectionActivity</string>\n    <string name=\"sound_dect_start\">Voice Recognition start</string>\n    <string name=\"sound_dect_stop\">Voice Recognition stop</string>\n    <string name=\"sound_dect_error\">Voice Recognition error:</string>\n    <string name=\"destroied\">SpeeechRecognizer has been destroyed</string>\n    <string name=\"you_may_speak\">You may speak now</string>\n    <string name=\"online_synthesis\">Online Mode</string>\n    <string name=\"ondevice_synthesis\">On-device Mode</string>\n    <string name=\"permission_warn\">Obtaining related permissions: Write permissions failed. Some functions cannot be used properly. You need to manually grant permissions on the settings page. </string>\n    <string name=\"please_select_picture\">Please select a picture to process~</string>\n    <string name=\"text_service\">Text-related Services</string>\n    <string name=\"video_service\">Language/Voice-related Services</string>\n    <string name=\"image_service\">Image-related Services</string>\n    <string name=\"body_service\">Face/Body-related Services</string>\n    <string name=\"languagea_service\">Natural Language Processing</string>\n    <string name=\"custom\">Custom Model</string>\n    <string name=\"live_face\">Live Face</string>\n    <string name=\"image_face\">Image Face</string>\n    <string name=\"live_3dface\">Live 3D Face</string>\n    <string name=\"image_3dface\">Image 3D Face</string>\n    <string name=\"live_skeleton\">Live Skeleton</string>\n    <string name=\"image_skeleton\">Image Skeleton</string>\n    <string name=\"live_hand\">Live Handkeypoint</string>\n    <string name=\"image_hand\">Image Handkeypoint</string>\n    <string name=\"liveness\">Liveness Dect</string>\n    <string name=\"interactive_liveness\">Interactive Liveness Dect</string>\n    <string name=\"start_detection\">Start the Detection</string>\n    <string name=\"gesture_still\">Gesture Still</string>\n    <string name=\"gesture_live\">Gesture Live</string>\n    <string name=\"face_verification\">Face Verification</string>\n    <string name=\"text_embedding\">TextEmbedding</string>\n    <string name=\"text\">Text</string>\n    <string name=\"document\">Document</string>\n    <string name=\"icr\">ID Card</string>\n    <string name=\"icr_tips\">Only front recognition is supported for photographing detection.</string>\n    <string name=\"gcr\">General Card</string>\n    <string name=\"bcr\">Bank Card</string>\n    <string name=\"form\">Form Recoginition</string>\n    <string name=\"translate\">Translate</string>\n    <string name=\"aft\">AFT</string>\n    <string name=\"tts\">TTS</string>\n    <string name=\"asr\">ASR</string>\n    <string name=\"speechRtt\">RealTimeTranscription</string>\n    <string name=\"sound_dect_title\">sound Dect</string>\n    <string name=\"live_imgseg\">Live Imgseg</string>\n    <string name=\"image_imgseg\">Image Imgseg</string>\n    <string name=\"live_scene\">Live Scene Dect</string>\n    <string name=\"image_scene\">Image Scene Dect</string>\n    <string name=\"product_search\">Product Search</string>\n    <string name=\"object\">Object</string>\n    <string name=\"landmark\">Landmark</string>\n    <string name=\"classification\">Classification</string>\n    <string name=\"image_super\">Image Super</string>\n    <string name=\"text_super\">Text Image Super</string>\n    <string name=\"dect_skew\">Document Skew Correction</string>\n    <string name=\"image_hair\">Hair Segmentation</string>\n    <string name=\"teble_error\">Failed to check the table. Change the table image.</string>\n    <string name=\"icr_vn\">ICR VN</string>\n    <string name=\"custom_ui\">Face Detection</string>\n    <string name=\"custom_tips\">Put your face in the frame.</string>\n    <string name=\"status_code\">In Progress</string>\n    <string name=\"numberOne\">Number One</string>\n    <string name=\"numberTwo\">Number Two</string>\n    <string name=\"numberThree\">Number Three</string>\n    <string name=\"numberFour\">Number Four</string>\n    <string name=\"numberFive\">Number Five</string>\n    <string name=\"numberSex\">Number Sex</string>\n    <string name=\"numberSeven\">Number Seven</string>\n    <string name=\"numberEight\">Number Eight</string>\n    <string name=\"numberNine\">Number Nine</string>\n    <string name=\"negativeComment\">Negative Comment</string>\n    <string name=\"MakeAFist\">Make A Fist</string>\n    <string name=\"dianzan\">likes</string>\n    <string name=\"danshoubixin\">hand herat</string>\n    <string name=\"queren\">confirm</string>\n    <string name=\"qitashoushi\">Other gestures</string>\n    <string name=\"notBroadcast\">\"No broadcast \"</string>\n    <string name=\"english\">english</string>\n    <string name=\"chinese\">chinese</string>\n    <string name=\"englishMaleVoice\">\"English Male\"</string>\n    <string name=\"englishFemaleVoice\">\"English Female\"</string>\n    <string name=\"asrTextAndTranslation\">\"Speech Text And Translated Text\"</string>\n    <string name=\"contentShow\">Display Content</string>\n    <string name=\"voicePlay\">Voice broadcast</string>\n    <string name=\"recognitionHint\" translatable=\"true\">The identification will be displayed here...</string>\n    <string name=\"asrText\">\"Speech Text\"</string>\n    <string name=\"permissionStr\">Go to your phone to enable storage and recording permissions.</string>\n    <string name=\"finishRecognitionBtn\" translatable=\"true\">End recognition</string>\n    <string name=\"startRecognitionBtn\" translatable=\"true\">Start recognition</string>\n    <string name=\"chineseMaleVoice\">\"Chinese Male\"</string>\n    <string name=\"chineseFemaleVoice\">\"Chinese Female\"</string>\n    <string name=\"si\">Simultaneous Interpretation</string>\n    <string name=\"text_ner\">TextNER</string>\n    <string name=\"ner_text_hint\">Beijing Tiananmen Square</string>\n    <string name=\"ner_v\">Extraction</string>\n</resources>\n"
  },
  {
    "path": "react-native-hms-mlbody/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\npackage-lock.json"
  },
  {
    "path": "react-native-hms-mlbody/example/App.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image } from 'react-native';\nimport { styles } from './src/Styles';\nimport StartPage from './src/StartPage';\nimport FaceRecognition from './src/HmsFaceBodyRelatedServices/FaceRecognition';\nimport FaceVerification from './src/HmsFaceBodyRelatedServices/FaceVerification';\nimport SkeletonDetection from './src/HmsFaceBodyRelatedServices/SkeletonDetection';\nimport LivenessDetection from './src/HmsFaceBodyRelatedServices/LivenessDetection';\nimport InteractiveLivenessDetection from './src/HmsFaceBodyRelatedServices/InteractiveLivenessDetection';\nimport HandKeypointDetection from './src/HmsFaceBodyRelatedServices/HandDetection';\nimport FaceRecognitionLive from './src/HmsFaceBodyRelatedServices/FaceRecognitionLive';\nimport SkeletonDetectionLive from './src/HmsFaceBodyRelatedServices/SkeletonDetectionLive';\nimport HandDetectionLive from './src/HmsFaceBodyRelatedServices/HandDetectionLive';\nimport GestureDetectionLive from './src/HmsFaceBodyRelatedServices/GestureDetectionLive';\nimport GestureDetection from './src/HmsFaceBodyRelatedServices/GestureDetection';\n\n\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'Hms React Native ML Body Kit Demo',\n    },\n    path: 'start',\n  },\n  FaceRecognition: {\n    screen: FaceRecognition,\n    navigationOptions: {\n      headerTitle: 'Face Recognition',\n    },\n    path: 'start/facerecognition',\n  },\n  FaceVerification: {\n    screen: FaceVerification,\n    navigationOptions: {\n      headerTitle: 'Face Verification',\n    },\n    path: 'start/faceverification',\n  },\n  SkeletonDetection: {\n    screen: SkeletonDetection,\n    navigationOptions: {\n      headerTitle: 'Skeleton Detection',\n    },\n    path: 'start/skeletondetection',\n  },\n  LivenessDetection: {\n    screen: LivenessDetection,\n    navigationOptions: {\n      headerTitle: 'Liveness Detection',\n    },\n    path: 'start/livenessdetection',\n  },\n  InteractiveLivenessDetection: {\n    screen: InteractiveLivenessDetection,\n    navigationOptions: {\n      headerTitle: 'Interactive Liveness Detection',\n    },\n    path: 'start/interactivelivenessdetection',\n  },\n  HandKeypointDetection: {\n    screen: HandKeypointDetection,\n    navigationOptions: {\n      headerTitle: 'Hand Keypoint Detection',\n    },\n    path: 'start/handkeypointdetection',\n  },\n  FaceRecognitionLive: {\n    screen: FaceRecognitionLive,\n    navigationOptions: {\n      headerTitle: 'Face Recognition Live',\n    },\n    path: 'start/facerecognitionlive',\n  },\n  SkeletonDetectionLive: {\n    screen: SkeletonDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Skeleton Detection Live',\n    },\n    path: 'start/skeletondetectionlive',\n  },\n  HandDetectionLive: {\n    screen: HandDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Hand Detection Live',\n    },\n    path: 'start/handkeypointdetectionlive',\n  },\n  GestureDetectionLive: {\n    screen: GestureDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Gesture Detection Live',\n    },\n    path: 'start/gesturedetectionlive',\n  },\n  GestureDetection: {\n    screen: GestureDetection,\n    navigationOptions: {\n      headerTitle: 'Gesture Detection',\n    },\n    path: 'start/gesturedetection',\n  },\n};\n\nexport default class App extends Component {\n  state = {\n    pageItem: {\n      screen: StartPage,\n      navigationOptions: {\n        headerTitle: 'Hms React Native ML Body Demo',\n      },\n      path: 'start',\n    },\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/README.md",
    "content": "# React-Native HMS ML Body - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native ML Body** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm install\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS ML Body - Demo is licensed under [Apache 2.0 license](../LICENSE)\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile: \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    implementation \"com.facebook.react:react-native:+\"\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.300'\n\n    implementation 'com.android.support:multidex:1.0.3'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.mlbody.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n\n\n    <application\n            android:name=\"com.huawei.hms.rn.mlbody.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/logo\"\n            android:label=\"RN ML Body Demo\"\n            android:roundIcon=\"@mipmap/logo\"\n            android:theme=\"@style/AppTheme\"\n            android:largeHeap=\"true\"\n            android:requestLegacyExternalStorage=\"true\">\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.mlbody.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RN ML Body Demo\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.huawei.hms.rn.mlbody.facebodyrelatedservices.HMSInteractiveCustomLivenessDetectionActivity\" />\n        \n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/src/main/java/com/huawei/hms/rn/mlbody/demo/MainActivity.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.mlbody.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/src/main/java/com/huawei/hms/rn/mlbody/demo/MainApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlbody.demo;\n\nimport android.app.Application;\n\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.300'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        mavenCentral()\n        google()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Aug 02 14:07:06 TRT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx4096m\n"
  },
  {
    "path": "react-native-hms-mlbody/example/android/settings.gradle",
    "content": "rootProject.name = 'com.huawei.hms.rn.mlbody.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-mlbody/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.mlbody.demo\",\n  \"displayName\": \"HMS RN ML BODY DEMO\"\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/babel.config.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-mlbody/example/index.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-mlbody/example/metro.config.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-mlbody/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mlbody-demo\",\n  \"description\": \"React Native HMS ML Body Demo\",\n  \"version\": \"3.12.0-301\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-mlbody\": \"3.12.0.301\",\n    \"react-native-image-picker\": \"7.0.3\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/runtime\": \"^7.6.2\",\n    \"@babel/traverse\": \"7.22.8\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/FaceRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid,\n  Image,\n  TextInput\n} from 'react-native';\nimport { HMSFaceRecognition, HMSApplication } from '@hmscore/react-native-hms-mlbody';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class FaceRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      emotions: '',\n      isAnalyzeEnabled: false\n    };\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({ emotions: '', isAnalyzeEnabled: true }, () => {\n      isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n    });\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getFaceAnalyzerSetting = () => {\n    return {\n      featureType: HMSFaceRecognition.TYPE_FEATURES,\n      shapeType: HMSFaceRecognition.TYPE_SHAPES,\n      keyPointType: HMSFaceRecognition.TYPE_KEYPOINTS,\n      performanceType: HMSFaceRecognition.TYPE_SPEED,\n      tracingMode: HMSFaceRecognition.MODE_TRACING_ROBUST,\n      minFaceProportion: 0.5,\n      isPoseDisabled: false,\n      isTracingAllowed: false,\n      isMaxSizeFaceOnly: false\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSFaceRecognition.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSFaceRecognition.analyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (result.result.length > 0) {\n        this.state.isEnabled ? this.setState({ emotions: \"X :\" + result.result[0].faceEulerX.toString() + \" Y :\" + result.result[0].faceEulerY.toString() + \" Z :\" + result.result[0].faceEulerZ.toString() }) : this.setState({ emotions: JSON.stringify(result.result[0].emotions) });\n        ToastAndroid.showWithGravity(\"Recognition Completed. See console logs for details.\", ToastAndroid.LONG, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(\"No Face Found\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {(this.state.isEnabled ? '3D' : '2D') + \" RECOGNITION \"}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isAnalyzeEnabled}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.emotions}\n          placeholder=\"Recognition Result for One Face\"\n          multiline={true}\n          scrollEnabled={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\"\n            disabled={this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\"\n            disabled={this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/FaceRecognitionLive.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSFaceRecognition } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\n\nexport default class FaceRecognitionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        1,\n        {\n          featureType: HMSFaceRecognition.TYPE_FEATURES,\n          shapeType: HMSFaceRecognition.TYPE_SHAPES,\n          keyPointType: HMSFaceRecognition.TYPE_KEYPOINTS,\n          performanceType: HMSFaceRecognition.TYPE_SPEED,\n          tracingMode: HMSFaceRecognition.MODE_TRACING_ROBUST,\n          minFaceProportion: 0.3,\n          isPoseDisabled: false,\n          isTracingAllowed: false,\n          isMaxSizeFaceOnly: false\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.FACE_2D_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" face results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.FACE_2D_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription=Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n     }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.FACE_2D_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.FACE_2D_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/FaceVerification.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput\n} from 'react-native';\nimport { HMSFaceVerification, HMSApplication } from '@hmscore/react-native-hms-mlbody';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class FaceVerification extends React.Component {\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      imageUriSecond: '',\n      btnEnableSecond: false,\n      btnCompareEnable: false,\n      log: [],\n      imageLayout: null,\n      imageRectangle: [],\n      imageTwoResult: null,\n      imageLayoutTwo: null,\n      imageRectangleTwo: [],\n    };\n\n    HMSFaceVerification.setMaxFaceDetected(3)\n      .then(() => {\n        HMSFaceVerification.getMaxFaceDetected().then((res) => console.log(res))\n      });\n  }\n\n  getFrameConfiguration = (uri) => {\n    return { filePath: uri };\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  start = async (isAsync) => {\n    let res = null;\n    if (isAsync) {\n      res = await HMSFaceVerification\n        .asyncCompare(false, this.getFrameConfiguration(this.state.imageUriSecond))\n        .catch(e => e);\n    } else {\n      res = await HMSFaceVerification\n        .compare(false, this.getFrameConfiguration(this.state.imageUriSecond))\n        .catch(e => e);\n    }\n    res = this.parseResult(res);\n    if (res.success && res.faces?.length > 0) {\n      this.calculate(\n        res.faces,\n        this.state.imageTwoResult.width,\n        this.state.imageTwoResult.height,\n        this.state.imageLayoutTwo,\n        (obj) => this.setState({ imageRectangleTwo: obj })\n      )\n    } else {\n      this.setState({imageRectangleTwo: []})\n    }\n    this.pushLog(`result ${JSON.stringify(res)}`);\n  }\n\n  pushLog = (str) => {\n    this.state.log = [`${new Date().toISOString()} -> ${str}`].concat(this.state.log)\n    this.setState({})\n  }\n\n  calculate = (faces, fullWidth, fullHeight, layout, setState) => {\n    let array = [];\n    faces.forEach(element => {\n      let arry = element.face.substring(5, element.face.length - 1).split('-');\n      let [beginPositionX, beginPositionY] = arry[0].split(',');\n      let [endPositionX, endPositionY] = arry[1].split(',');\n\n      let imageWidth = (fullWidth / fullHeight) * layout.height;\n      let increaseX = (layout.width - imageWidth) / 2;\n\n      let y = (imageWidth * beginPositionY / fullWidth) + layout.y;\n      let x = (layout.height * beginPositionX / fullHeight) + increaseX;\n      let height = layout.height * (endPositionY - beginPositionY) / fullHeight;\n      let width = imageWidth * (endPositionX - beginPositionX) / fullWidth;\n\n      array.push({ x, y, height, width })\n    });\n\n    setState(array);\n  }\n\n  selectImage = () => {\n    showImagePickerCustom()\n      .then(async (result) => {\n\n        if (!result) return;\n        this.state.imageRectangle = [];\n        this.setState({ imageUri: result.uri, imageRectangle: [] }, async () => {\n          setTimeout(async () => {\n            let res = await HMSFaceVerification\n              .loadTemplatePic(this.getFrameConfiguration(result.uri))\n              .catch(e => e);\n            res = await this.parseResult(res);\n            console.log(\"res\", res)\n            if (res.success && res.faces) {\n              this.state.btnEnableSecond = true;\n              this.calculate(\n                res.faces,\n                result.width,\n                result.height,\n                this.state.imageLayout,\n                (obj) => this.setState({ imageRectangle: obj })\n              )\n            }\n            else {\n              this.state.btnEnableSecond = false;\n              this.state.btnCompareEnable = false;\n            }\n            this.pushLog(`image ${JSON.stringify(res)}`);\n          }, 500);\n        })\n      })\n  }\n\n  selectImageTwo = () => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        this.state.imageTwoResult = result;\n        this.setState({ imageUriSecond: result?.uri, btnCompareEnable: true, imageRectangleTwo: [] })\n      })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={this.selectImage}\n            style={[styles.startButton, styles.enable]}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImage}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={{ uri: this.state.imageUri }}\n                onLayout={(e) => {\n                  this.state.imageLayout = e.nativeEvent.layout\n                }}\n              />\n              {this.state.imageRectangle.length > 0 && this.state.imageRectangle.map((item, index) => (\n                <View\n                  key={index}\n                  style={{\n                    borderWidth: 1,\n                    borderColor: 'red',\n                    height: item?.height,\n                    width: item?.width,\n                    position: 'absolute',\n                    top: item?.y,\n                    left: item?.x,\n                  }}\n                />\n              ))}\n            </TouchableOpacity>\n          }\n        </View>\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={this.selectImageTwo}\n            style={[styles.startButton, this.state.btnEnableSecond && styles.enable]}\n            disabled={!this.state.btnEnableSecond}\n          >\n            <Text style={styles.startButtonLabel}>Select Image Two</Text>\n          </TouchableOpacity>\n          {this.state.imageUriSecond !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImageTwo}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={{ uri: this.state.imageUriSecond }}\n                onLayout={(e) => {\n                  this.state.imageLayoutTwo = e.nativeEvent.layout\n                }}\n              />\n              {this.state.imageRectangleTwo.length > 0 && this.state.imageRectangleTwo.map((item, index) => (\n                <View\n                  key={index}\n                  style={{\n                    borderWidth: 1,\n                    borderColor: 'red',\n                    height: item?.height,\n                    width: item?.width,\n                    position: 'absolute',\n                    top: item?.y,\n                    left: item?.x,\n                  }}\n                />\n              ))}\n            </TouchableOpacity>\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, this.state.btnCompareEnable && styles.enable]}\n            underlayColor=\"#fff\"\n            disabled={!this.state.btnCompareEnable}\n            onPress={() => this.start(false)}\n          >\n            <Text style={styles.startButtonLabel}> COMPARE </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, this.state.btnCompareEnable && styles.enable]}\n            underlayColor=\"#fff\"\n            disabled={!this.state.btnCompareEnable}\n            onPress={() => this.start(true)}\n          >\n            <Text style={styles.startButtonLabel}> ASYNC COMPARE </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.log}>\n          {this.state.log.map((item, index) => (\n            <Text key={index}>{item}</Text>\n          ))}\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/GestureDetection.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSApplication, HMSGestureDetection } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class GestureDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSGestureDetection.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSGestureDetection.analyzeFrame(true, this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(result.result.length + \" gesture detected. Please see the debug logs for details.\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/GestureDetectionLive.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSGestureDetection } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\n\nexport default class GestureDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        8, {}\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.GESTURE_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" gesture results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.GESTURE_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription=Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.GESTURE_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.GESTURE_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/HandDetection.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSApplication, HMSHandKeypointDetection } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class HandKeypointDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getFaceAnalyzerSetting = () => {\n    return {\n      sceneType: HMSHandKeypointDetection.TYPE_KEYPOINT_ONLY,\n      maxHandResults: HMSHandKeypointDetection.MAX_HANDS_NUM\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSHandKeypointDetection.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSHandKeypointDetection.analyzeFrame(true, this.getFrameConfiguration(), this.getFaceAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(result.result.length + \" keypoints array detected. Please see the debug logs for details.\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/HandDetectionLive.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSHandKeypointDetection } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\n\nexport default class HandDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        7,\n        {\n          sceneType: HMSHandKeypointDetection.TYPE_KEYPOINT_ONLY,\n          maxHandResults: HMSHandKeypointDetection.MAX_HANDS_NUM\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.HAND_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" hand results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.HAND_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription=Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.HAND_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.HAND_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/InteractiveLivenessDetection.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  Dimensions,\n  PixelRatio,\n  TouchableOpacity,\n  ToastAndroid\n} from 'react-native';\nimport { HMSInteractiveLivenessDetection, HMSApplication,HMSInteractiveLivenessCustomDetectionHandler} from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\nexport default class InteractiveLivenessDetection extends React.Component {\n\n  componentDidMount() { \n  }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n  \n    \n    this.state = {\n      status: 0.0,\n      action: 0.0,\n    };\n  } \n  \n  async startCustomizedView() {\n\n    const { width, height } = Dimensions.get('window');\n    windowWidth= PixelRatio.getPixelSizeForLayoutSize(width);\n    windowHeight=PixelRatio.getPixelSizeForLayoutSize(height);\n    \n    const actionObject = {};\n    const actionMap= new Map();\n    const statusCodeMessageObject = {};\n    const statusCodeMessageMap= new Map();\n  \n    actionMap.set(1, \"Nod your head.\");\n    actionMap.set(2, \"Open your mouth. \");\n    actionMap.set(3, \"Blink. \");\n    actionMap.set(4, \"Turn your head to the left. \");\n    actionMap.set(5, \"Turn your head to the right. \");\n    actionMap.set(6, \"Stare at the screen. \");\n\n    statusCodeMessageMap.set(1001, \"The face orientation is inconsistent with that of the phone.\");\n    statusCodeMessageMap.set(1002, \"No face is detected.\");\n    statusCodeMessageMap.set(1003, \"Multiple faces are detected.\");\n    statusCodeMessageMap.set(1004, \"The face deviates from the center of the face frame.\");\n    statusCodeMessageMap.set(1005, \"The face is too large.\");\n    statusCodeMessageMap.set(1006, \"The face is too small.\");\n    statusCodeMessageMap.set(1007, \"The face is blocked by the sunglasses.\");\n    statusCodeMessageMap.set(1008, \"The face is blocked by the mask.\");\n    statusCodeMessageMap.set(1009, \"The detected action is not the required one.\");\n    statusCodeMessageMap.set(1014, \"The continuity detection fails.\");\n    statusCodeMessageMap.set(1018, \"The light is dark.\");\n    statusCodeMessageMap.set(1019, \"The image is blurry.\");\n    statusCodeMessageMap.set(1020, \"The face is backlit.\");\n    statusCodeMessageMap.set(1021, \"The light is bright.\");\n    statusCodeMessageMap.set(2000, \"In progress\");\n    statusCodeMessageMap.set(2002, \"The face does not belong to a real person. \");\n    statusCodeMessageMap.set(2003, \"Verification is performed, and the detected action is correct.\");\n    statusCodeMessageMap.set(2004,\"Verification succeeded.\");\n    statusCodeMessageMap.set(2007,\"The position of the face frame is not set before the algorithm is called.\");\n    statusCodeMessageMap.set(5020,\"The previous detection ended when it was not complete.\");\n    \n    for (const [key, value] of actionMap) {\n      actionObject[key] = value;\n    }\n    for (const [keys, values] of statusCodeMessageMap) {\n      statusCodeMessageObject[keys] = values;\n    }\n\n      try {\n        var result = await HMSInteractiveLivenessCustomDetectionHandler.startCustomizedView(\n         option = {\n            action:{\n              actionArray:actionObject,\n              num:1,\n              isRandom:true\n            },    \n            detectionTimeOut:10000,\n            cameraFrame:{ \n              left:0,\n              top:0,\n              right:1040,\n              bottom:1440,      \n            },\n            faceFrame:{\n              left:14,\n              top:122,\n              right:396,\n              bottom:518             \n            },\n            statusCodeMessage:statusCodeMessageObject,\n            showStatusCodes:true,\n            header:\"Face Detection\",\n            textMargin:windowHeight*0.7,\n            textOptions:{\n              textColor:-16776961,\n              textSize:16,\n              autoSizeText:false,\n              maxTextSize:30,\n              minTextSize:15,\n              granularity:2,\n            }\n          }\n        );\n        console.log(result)\n      if (result.status == HMSApplication.SUCCESS) {  \n        this.setState({\n          status: result.result.status,\n          action:result.result.action    \n        });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startDetect() {\n    try {\n      var result = await HMSInteractiveLivenessDetection.startDetect(\n        {\n          option:HMSInteractiveLivenessDetection.DETECT_MASK,\n          detectionTimeOut:10000,\n          config:{\n            actionArray:[HMSInteractiveLivenessDetection.SHAKE_DOWN_ACTION,HMSInteractiveLivenessDetection.EYE_CLOSE_ACTION,HMSInteractiveLivenessDetection.SHAKE_LEFT_ACTION],\n            num:2,\n            isRandomable:true\n          }\n        }\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          status: result.result.status,\n          action:result.result.action    \n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Interactive Detection Results</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={\"Status :\" + this.state.status.toString()}\n          placeholder=\"Status\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Action :\" + this.state.action.toString()}\n          placeholder=\"Action\"\n          multiline={true}\n          editable={false}\n        />\n        \n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startDetect.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Start Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n         <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startCustomizedView.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Set Detect Mask Config </Text>\n          </TouchableOpacity>\n        </View> \n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/LivenessDetection.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  ToastAndroid\n} from 'react-native';\nimport { HMSLivenessDetection, HMSApplication } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\nexport default class LivenessDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      pitch: 0.0,\n      roll: 0.0,\n      score: 0.0,\n      yaw: 0.0,\n      isLive: 0.0\n    };\n  }\n\n  async setConfig() {\n    try {\n      var result = await HMSLivenessDetection.setConfig(\n        {\n          option: HMSLivenessDetection.DETECT_MASK\n        }\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Detect Mask Config is Set\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startDetect() {\n    try {\n      var result = await HMSLivenessDetection.startDetect();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          pitch: result.result.pitch,\n          roll: result.result.roll,\n          score: result.result.score,\n          yaw: result.result.yaw,\n          isLive: result.result.isLive,\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Detection Results</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={\"Pitch :\" + this.state.pitch.toString()}\n          placeholder=\"Pitch\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Yaw :\" + this.state.yaw.toString()}\n          placeholder=\"Yaw\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Score :\" + this.state.score.toString()}\n          placeholder=\"Score\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={\"Islive :\" + this.state.isLive.toString()}\n          placeholder=\"IsLive\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startDetect.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Start Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.setConfig.bind(this)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Set Detect Mask Config </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/SkeletonDetection.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n  Image\n} from 'react-native';\nimport { HMSSkeletonDetection, HMSApplication } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class SkeletonDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      asyncResult: [],\n      syncResult: []\n    };\n  }\n\n  startAnalyze(isAsync) {\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      this.setState({ asyncResult: [] });\n      var result = await HMSSkeletonDetection.asyncAnalyzeFrame(true, HMSSkeletonDetection.TYPE_NORMAL, this.getFrameConfiguration());\n      this.parseResult(result, true);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      this.setState({ syncResult: [] });\n      var result = await HMSSkeletonDetection.analyzeFrame(true, HMSSkeletonDetection.TYPE_NORMAL, this.getFrameConfiguration());\n      this.parseResult(result, false);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async calculateSimilarity() {\n    try {\n      var result = await HMSSkeletonDetection.calculateSimilarity(true, HMSSkeletonDetection.TYPE_NORMAL, this.state.asyncResult, this.state.syncResult);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Similarity :\" + result.result, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result, isAsync) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (isAsync) {\n        this.setState({ asyncResult: result.result });\n        ToastAndroid.showWithGravity(this.state.asyncResult.length + \" skeleton detected\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        this.setState({ syncResult: result.result });\n        ToastAndroid.showWithGravity(this.state.syncResult.length + \" skeleton detected\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.calculateSimilarity()}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> SIMILARITY ASYNC AND SYNC RESULTS </Text>\n          </TouchableOpacity>\n        </View>\n\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsFaceBodyRelatedServices/SkeletonDetectionLive.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSSkeletonDetection } from '@hmscore/react-native-hms-mlbody';\nimport { styles } from '../Styles';\n\n\nexport default class SkeletonDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        3,\n        {\n          analyzeType: HMSSkeletonDetection.TYPE_NORMAL\n        }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SKELETON_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" skeleton results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SKELETON_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription=Dimensions.addEventListener('change', () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SKELETON_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SKELETON_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlbody/example/src/HmsOtherServices/Helper.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HMSLensEngine, HMSApplication } from '@hmscore/react-native-hms-mlbody';\nimport { ToastAndroid } from 'react-native';\nimport * as ImagePicker from \"react-native-image-picker\"\n\nconst options = {\n  title: 'Choose Method',\n  storageOptions: {\n    skipBackup: true,\n    path: 'images',\n  },\n};\n\nexport async function createLensEngine(analyzer, analyzerConfig) {\n  try {\n    var result = await HMSLensEngine.createLensEngine(\n      analyzer,\n      analyzerConfig,\n      {\n        width: 480,\n        height: 540,\n        lensType: HMSLensEngine.BACK_LENS,\n        automaticFocus: true,\n        fps: 20.0,\n        flashMode: HMSLensEngine.FLASH_MODE_OFF,\n        focusMode: HMSLensEngine.FOCUS_MODE_CONTINUOUS_VIDEO\n      }\n    )\n    this.renderResult(result, \"Lens engine creation successful\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function runWithView() {\n  try {\n    var result = await HMSLensEngine.runWithView();\n    this.renderResult(result, \"Lens engine running\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function close() {\n  try {\n    var result = await HMSLensEngine.close();\n    this.renderResult(result, \"Lens engine closed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function doZoom(scale) {\n  try {\n    var result = await HMSLensEngine.doZoom(scale);\n    this.renderResult(result, \"Lens engine zoomed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function photograph() {\n  try {\n    var result = await HMSLensEngine.photograph();\n    this.renderResult(result, \"Lens engine photo\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function release() {\n  try {\n    var result = await HMSLensEngine.release();\n    this.renderResult(result, \"Lens engine released\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function setApiKey() {\n  try {\n    var result = await HMSApplication.setApiKey(\"<YOUR_API_KEY>\");\n    this.renderResult(result, \"Api key set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setAccessToken() {\n  try {\n    var result = await HMSApplication.setAccessToken(\"<your_access_token>\");\n    this.renderResult(result, \"Access Token set\");\n  } catch (e) {\n    console.log(e);\n  }\n} \n\nexport function showImagePicker() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.launchImageLibrary(options, (response) => {\n        console.log(response)\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n      resolve(response.assets[0].uri);\n        }\n      });\n    }\n  );\n  return result;\n}\n\nexport function showImagePickerCustom() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.launchImageLibrary(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve({uri: response.assets[0].uri, width: response.assets[0].width, height: response.assets[0].height});\n        }\n      });\n    }\n  );\n  return result;\n}\n\nrenderResult = (result, message) => {\n  console.log(result);\n  if (result.status == HMSApplication.SUCCESS) {\n    ToastAndroid.showWithGravity(message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n  else {\n    ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/StartPage.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  PermissionsAndroid,\n  BackHandler,\n  Alert\n} from 'react-native';\nimport { styles } from './Styles';\nimport { setApiKey, setAccessToken } from './HmsOtherServices/Helper';\n\nexport default class App extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions()\n      .then(() => setApiKey());\n      \n  }\n\n  async requestPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple(\n        [\n          PermissionsAndroid.PERMISSIONS.CAMERA,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_AUDIO,\n          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n        ]\n      );\n      if (\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN \n      ) {\n        this.alertPermission();\n      }\n    }\n    catch (err) {\n      console.log(err);\n    }\n  }\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\", onPress: () => BackHandler.exitApp()\n        }\n      ],\n      { cancelable: false }\n    );\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Face / Body Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Face Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceRecognitionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Face Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LivenessDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Liveness Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('HandKeypointDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Hand Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('HandDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Hand Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GestureDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Gesture Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GestureDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Gesture Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SkeletonDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Skeleton Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SkeletonDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Skeleton Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FaceVerification')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Face Verification</Text>\n            </TouchableOpacity>\n          </View>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('InteractiveLivenessDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Interactive Liveness Detection</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text></Text>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlbody/example/src/Styles.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { StyleSheet, Dimensions } from 'react-native';\n\nconst win = Dimensions.get('window');\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#EEF2F3' },\n\n  imageSelectView: {\n    width: 200,\n    height: 200,\n  },\n\n  superres: {\n    flex: 1,\n    alignSelf: 'stretch',\n    width: win.width,\n    height: win.height,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 15,\n    borderBottomWidth: 1,\n    padding: 20,\n    borderBottomColor: '#D3D3D3',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  boldText: { fontWeight: \"bold\" },\n\n  normalView: {\n    backgroundColor: '#EEF2F3',\n    flex: 1,\n    flexDirection: 'column',\n  },\n\n  baseItemContainer: {\n    marginTop: 10,\n    alignItems: 'center',\n    width: '95%',\n    alignSelf: 'center',\n    height: '33%'\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    alignSelf: 'center',\n    width: '95%',\n    borderBottomColor: '#D3D3D3',\n    borderBottomWidth: 1,\n    marginTop: 10,\n  },\n  itemOfView: {\n    width: '70%',\n    alignSelf: 'center'\n  },\n\n  itemOfView3: {\n    width: '30%',\n    alignSelf: 'flex-end'\n  },\n\n  dividedDropdown: {\n    borderWidth: 2,\n    borderColor: 'gray',\n    height: 40,\n    marginTop: 5\n  },\n\n  longDropdown: {\n    backgroundColor: '#fafafa',\n    width: '95%',\n    alignSelf: 'center',\n    borderWidth: 2,\n    borderColor: 'gray',\n    marginTop: 5\n  },\n\n\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n  },\n\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n\n  containerCenter: {\n    marginTop: 20,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  img: {\n    width: 100,\n    height: 100,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  containerFlexCenter: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: \"center\",\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  button: {\n    width: '32%',\n    height: 80,\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  menuButton: {\n    width: '100%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: '#fff',\n    flexDirection: 'column',\n  },\n  image: {\n    justifyContent: 'flex-start',\n    width: 400,\n    height: 80,\n  },\n  right: {\n    justifyContent: 'flex-end',\n  },\n\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customInput2: {\n    height: 75,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox: {\n    height: 250,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox2: {\n    height: 230,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    marginBottom: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\",\n    borderColor: '#D3D3D3',\n    borderWidth: 1,\n    textAlign: 'center'\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  startButton: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n  startButtonclicked: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: 'green',\n  },\n  startButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n\n  borderedText: {\n    paddingHorizontal: 20,\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'grey',\n    color: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#fee',\n  },\n\n  speakButton: {\n    color: '#000',\n    width: 200,\n    textAlignVertical: \"center\", textAlign: \"center\",\n    paddingLeft: 10,\n    paddingRight: 10,\n    borderColor: 'blue'\n  },\n\n  log: {\n    width: '95%',\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  faceVerificationImage: {\n    width: \"100%\",\n    height: 200\n  },\n\n  enable: {\n    backgroundColor: 'green'\n  },\n\n  cardRecogOptions: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    marginVertical: 10\n  }\n});\n"
  },
  {
    "path": "react-native-hms-mlbody/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mlbody\",\n  \"title\": \"React Native HMS ML Body\",\n  \"description\": \"React Native HMS ML Body Kit\",\n  \"version\": \"3.12.0-301\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-mlbody\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ml\",\n    \"react-native-mlbody\",\n    \"hms-ml\",\n    \"huawei-ml\",\n    \"ml-kit\",\n    \"machine-learning\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-mlbody/src/index.d.ts",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-mlbody\" {\n\n    export const HMSApplication = {\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        setApiKey(apiKey: string): Promise<Object>;,\n        getApiKey(): Promise<Object>;,\n        setAccessToken(token: string): Promise<Object>;,\n        getCountryCode(): Promise<Object>;,\n        setUserRegion(userRegion: int): Promise<Object>;\n    }\n\n    export declare enum HMSApplication {\n        UNKNOWN = -1,\n        SUCCESS = 0,\n        DISCARDED = 1,\n        INNER = 2,\n        INACTIVE = 3,\n        NOT_SUPPORTED = 4,\n        ILLEGAL_PARAMETER = 5,\n        OVERDUE = 6,\n        NO_FOUND = 7,\n        DUPLICATE_FOUND = 8,\n        NO_PERMISSION = 9,\n        INSUFFICIENT_RESOURCE = 10,\n        ANALYSIS_FAILURE = 11,\n        INTERRUPTED = 12,\n        EXCEED_RANGE = 13,\n        DATA_MISSING = 14,\n        AUTHENTICATION_REQUIRED = 15,\n        TFLITE_NOT_COMPATIBLE = 16,\n        INSUFFICIENT_SPACE = 17,\n        HASH_MISS = 18,\n        TOKEN_INVALID = 19,\n        FRAME_NULL = 20,\n        ANALYZER_NOT_AVAILABLE = 21,\n        CURRENT_ACTIVITY_NULL = 22,\n        CANCEL = 23,\n        FAILURE = 24,\n        DENY = 25,\n        STRING_PARAM_NULL = 26,\n        REMOTE_MODEL_NULL = 27,\n        ASR_RECOGNIZER_NULL = 28,\n        TTS_ENGINE_NULL = 30,\n        SOUND_DECT_NULL = 31,\n        CUSTOM_MODEL_SETTING_NULL = 32,\n        CUSTOM_MODEL_INPUT_NULL = 33,\n        CUSTOM_MODEL_EXECUTOR_SETTING_NULL = 34,\n        DATA_SET_NOT_VALID = 35,\n        LENS_ENGINE_NULL = 36,\n        LENS_HOLDER_NULL = 37\n    }\n\n    export const HMSFaceVerification = {\n        setMaxFaceDetected(maxFaceDetected: 1|2|3): Promise<object>;,\n\n        getMaxFaceDetected(): Promise<MaxFaceCount>;,\n    \n        loadTemplatePic(frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        compare(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncCompare(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n\n    interface MaxFaceCount {\n        maxFaceCount: number\n    }\n    \n    interface FrameConfiguration {\n        filePath: string;\n    }\n    \n    export const HMSLensEngine = {\n        createLensEngine(analyzerTag: number, analyzerConfig: TextAnalyzerConfiguration | FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D | SkeletonAnalyzerConfiguration | ClassificationAnalyzerConfigurationRemote | ClassificationAnalyzerConfigurationLocal | ObjectAnalyzerSettingConfiguration | SceneAnalyzerConfiguration | HandKeyPointAnalyzerConfiguration, lensConfig: LensConfiguration): Promise<object>;,\n    \n        close(): Promise<object>;,\n    \n        doZoom(scale: number): Promise<object>;,\n    \n        getDisplayDimension(): Promise<object>;,\n    \n        getLensType(): Promise<object>;,\n    \n        photograph(): Promise<object>;,\n    \n        release(): Promise<object>;,\n    \n        run(): Promise<object>;,\n    \n        runWithView(): Promise<object>;,\n    };\n\n    export declare enum HMSLensEngine {\n        FLASH_MODE_OFF = \"off\",\n        FLASH_MODE_ON = \"on\",\n        FLASH_MODE_AUTO = \"auto\",\n        FOCUS_MODE_CONTINUOUS_PICTURE = \"continuous-picture\",\n        FOCUS_MODE_CONTINUOUS_VIDEO = \"continuous-video\",\n        BACK_LENS = 0,\n        FRONT_LENS = 1,\n        LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\",\n        LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\",\n        LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\",\n        LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\",\n        LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\",\n        TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\",\n        TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\",\n        FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\",\n        FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\",\n        FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\",\n        FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\",\n        CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\",\n        CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\",\n        OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\",\n        OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\",\n        SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\",\n        SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\",\n        SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\",\n        SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\",\n        HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\",\n        HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\",\n        GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\",\n        GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\",\n        LENS_TEXT_ANALYZER = 0,\n        LENS_FACE_2D_ANALYZER = 1,\n        LENS_FACE_3D_ANALYZER = 2,\n        LENS_SKELETON_ANALYZER = 3,\n        LENS_CLASSIFICATION_ANALYZER = 4,\n        LENS_OBJECT_ANALYZER = 5,\n        LENS_SCENE_ANALYZER = 6,\n        LENS_HAND_ANALYZER = 7,\n        LENS_GESTURE_ANALYZER = 8\n    }\n    \n    interface TextAnalyzerConfiguration {\n        language: string;\n        OCRMode: HMSTextRecognition;\n    }\n    \n    interface FaceAnalyzerConfiguration2D {\n        featureType: HMSFaceRecognition;\n        shapeType: HMSFaceRecognition;\n        keyPointType: HMSFaceRecognition;\n        performanceType: HMSFaceRecognition;\n        tracingMode: HMSFaceRecognition;\n        minFaceProportion: number;\n        isPoseDisabled: boolean;\n        isTracingAllowed: boolean;\n        isMaxSizeFaceOnly: boolean;\n    }\n    \n    interface FaceAnalyzerConfiguration3D {\n        performanceType: HMSFaceRecognition;\n        isTracingAllowed: boolean;\n    }\n    \n    interface SkeletonAnalyzerConfiguration {\n        analyzeType: HMSSkeletonDetection;\n    }\n    \n    interface ClassificationAnalyzerConfigurationRemote {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n    }\n    \n    interface ClassificationAnalyzerConfigurationLocal {\n        minAcceptablePossibility: number;\n    }\n    \n    interface SceneAnalyzerConfiguration {\n        confidence: number;\n    }\n    \n    interface HandKeyPointAnalyzerConfiguration {\n        sceneType: HMSHandKeypointDetection;\n        maxHandResults: HMSHandKeypointDetection;\n    }\n    \n    interface LensConfiguration {\n        width: number;\n        height: number;\n        lensType: number;\n        fps: number;\n        automaticFocus: boolean;\n        flashMode: string;\n        focusMode: string;\n    } \n    \n    export const HMSSkeletonDetection = {\n        analyzeFrame(isStop: boolean, analyzeType: HMSSkeletonDetection, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, analyzeType: HMSSkeletonDetection, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        calculateSimilarity(isStop: boolean, analyzeType: HMSSkeletonDetection, dataSet1: SkeletonDataSet[], dataSet2: SkeletonDataSet[]): Promise<object>;,\n    };\n    \n    export declare enum HMSSkeletonDetection {\n        TYPE_RIGHT_SHOULDER = 101,\n        TYPE_RIGHT_ELBOW = 102,\n        TYPE_RIGHT_WRIST = 103,\n        TYPE_LEFT_SHOULDER = 104,\n        TYPE_LEFT_ELBOW = 105,\n        TYPE_LEFT_WRIST = 106,\n        TYPE_RIGHT_HIP = 107,\n        TYPE_RIGHT_KNEE = 108,\n        TYPE_RIGHT_ANKLE = 109,\n        TYPE_LEFT_HIP = 110,\n        TYPE_LEFT_KNEE = 111,\n        TYPE_LEFT_ANKLE = 112,\n        TYPE_HEAD_TOP = 113,\n        TYPE_NECK = 114,\n        TYPE_NORMAL = 0,\n        TYPE_YOGA = 1,\n    }\n\n    interface SkeletonDataSet {\n        joints: Joints[]\n    }\n    \n    interface Joints {\n        type: number;\n        pointX: number;\n        pointY: number;\n        score: number;\n    }\n    \n    export const HMSLivenessDetection = {\n        startDetect(): Promise<object>;,\n    \n        setConfig(config: CaptureConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSLivenessDetection {\n        CAMERA_NO_PERMISSION = 11401,\n        CAMERA_START_FAILED = 11402,\n        USER_CANCEL = 11403,\n        DETECT_FACE_TIME_OUT = 11404,\n        DETECT_MASK = 1\n    }\n    export const HMSInteractiveLivenessDetection = {\n        startDetect(option:InteractiveLivenessDetectionReq): Promise<object>;,\n    };\n\n    export const HMSInteractiveLivenessCustomDetectionHandler = {\n        startCustomizedView(option:CustomInteractiveLivenessDetectionReq): Promise<object>;,\n    };\n\n\n    export declare enum HMSInteractiveLivenessDetection {\n        CAMERA_NO_PERMISSION = 11401,\n        CAMERA_START_FAILED = 11402,\n        USER_CANCEL = 11403,\n        DETECT_FACE_TIME_OUT = 11404,\n        USER_DEFINED_ACTIONS_INVALID=11405,\n        SHAKE_DOWN_ACTION = 1,\n        OPEN_MOUTH_ACTION = 2,\n        EYE_CLOSE_ACTION = 3,\n        SHAKE_LEFT_ACTION = 4,\n        SHAKE_RIGHT_ACTION = 5,\n        GAZED_ACTION = 6\n    }\n    export interface InteractiveLivenessDetectionReq {\n        option:number,\n        detectionTimeOut:number,\n        config:Action\n    }\n\n    export interface CustomInteractiveLivenessDetectionReq {\n        action:CustomizedAction,\n        detectionTimeOut:number,\n        cameraFrame:Rect,\n        faceFrame:Rect,\n        showStatusCodes:boolean,\n        statusCodeMessage:Map<number,string>,\n        textMargin:number,\n        textOptions:TextOptions,\n        header:string\n    }\n    export interface Action {\n        actionArray:number[],\n        num:number,\n        isRandom:boolean\n    }\n    export interface CustomizedAction {\n        actionArray:Map<number,string>;\n        num:number,\n        isRandom:boolean\n    }\n    export interface Rect {\n        left:number,\n        top:number,\n        right:number,\n        bottom:number   \n    }\n    export interface TextOptions {\n        textColor:number,\n        textSize:number,\n        autoSizeText:number,\n        minTextSize:number,\n        granularity:number,\n    }\n    interface CaptureConfiguration {\n        option: number;\n    }\n    \n    export const HMSHandKeypointDetection = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: HandKeyPointAnalyzerConfiguration): Promise<object>;,\n    \n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: HandKeyPointAnalyzerConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSHandKeypointDetection {\n        TYPE_WRIST = 0,\n        TYPE_THUMB_FIRST = 1,\n        TYPE_THUMB_SECOND = 2,\n        TYPE_THUMB_THIRD = 3,\n        TYPE_THUMB_FOURTH = 4,\n        TYPE_FOREFINGER_FIRST = 5,\n        TYPE_FOREFINGER_SECOND = 6,\n        TYPE_FOREFINGER_THIRD = 7,\n        TYPE_FOREFINGER_FOURTH = 8,\n        TYPE_MIDDLE_FINGER_FIRST = 9,\n        TYPE_MIDDLE_FINGER_SECOND = 10,\n        TYPE_MIDDLE_FINGER_THIRD = 11,\n        TYPE_MIDDLE_FINGER_FOURTH = 12,\n        TYPE_RING_FINGER_FIRST = 13,\n        TYPE_RING_FINGER_SECOND = 14,\n        TYPE_RING_FINGER_THIRD = 15,\n        TYPE_RING_FINGER_FOURTH = 16,\n        TYPE_LITTLE_FINGER_FIRST = 17,\n        TYPE_LITTLE_FINGER_SECOND = 18,\n        TYPE_LITTLE_FINGER_THIRD = 19,\n        TYPE_LITTLE_FINGER_FOURTH = 20,\n        TYPE_ALL = 0,\n        TYPE_KEYPOINT_ONLY = 1,\n        TYPE_RECT_ONLY = 2,\n        MAX_HANDS_NUM = 10\n    }\n    \n    export const HMSFaceRecognition = {\n        asyncAnalyzeFrame(is3D: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, faceAnalyzerConfiguration: FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D): Promise<object>;,\n    \n        analyzeFrame(is3D: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, faceAnalyzerConfiguration: FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D): Promise<object>;,\n    };\n    \n    export declare enum HMSFaceRecognition {\n        MODE_TRACING_FAST = 1,\n        MODE_TRACING_ROBUST = 2,\n        TYPE_FEATURES = 1,\n        TYPE_FEATURE_AGE = 256,\n        TYPE_FEATURE_BEARD = 32,\n        TYPE_FEATURE_EMOTION = 4,\n        TYPE_FEATURE_EYEGLASS = 8,\n        TYPE_FEATURE_GENDAR = 128,\n        TYPE_FEATURE_HAT = 16,\n        TYPE_FEATURE_OPENCLOSEEYE = 64,\n        TYPE_KEYPOINTS = 1,\n        TYPE_PRECISION = 1,\n        TYPE_SHAPES = 2,\n        TYPE_SPEED = 2,\n        TYPE_UNSUPPORT_FEATURES = 2,\n        TYPE_UNSUPPORT_KEYPOINTS = 0,\n        TYPE_UNSUPPORT_SHAPES = 3,\n        TYPE_BOTTOM_OF_MOUTH = 1,\n        TYPE_LEFT_CHEEK = 2,\n        TYPE_LEFT_EAR = 3,\n        TYPE_LEFT_EYE = 5,\n        TYPE_LEFT_SIDE_OF_MOUTH = 6,\n        TYPE_RIGHT_CHEEK = 8,\n        TYPE_RIGHT_EAR = 9,\n        TYPE_RIGHT_EYE = 11,\n        TYPE_RIGHT_SIDE_OF_MOUTH = 12,\n        TYPE_TIP_OF_LEFT_EAR = 4,\n        TYPE_TIP_OF_NOSE = 7,\n        TYPE_TIP_OF_RIGHT_EAR = 10,\n        TYPE_ALL = 0,\n        TYPE_BOTTOM_OF_LEFT_EYEBROW = 4,\n        TYPE_BOTTOM_OF_LOWER_LIP = 8,\n        TYPE_BOTTOM_OF_NOSE = 12,\n        TYPE_BOTTOM_OF_RIGHT_EYEBROW = 5,\n        TYPE_BOTTOM_OF_UPPER_LIP = 10,\n        TYPE_BRIDGE_OF_NOSE = 13,\n        TYPE_FACE = 1,\n        TYPE_LEFT_EYE = 2,\n        TYPE_RIGHT_EYE = 3,\n        TYPE_TOP_OF_LEFT_EYEBROW = 6,\n        TYPE_TOP_OF_LOWER_LIP = 9,\n        TYPE_TOP_OF_RIGHT_EYEBROW = 7,\n        TYPE_TOP_OF_UPPER_LIP = 11\n    }\n}"
  },
  {
    "path": "react-native-hms-mlbody/src/index.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from 'react-native';\nimport React, { Component } from 'react';\nimport { requireNativeComponent, View } from 'react-native';\n\nconst HMSSurfaceView = requireNativeComponent('HMSSurfaceView');\n\nexport const {\n  HMSFaceRecognition,\n  HMSFaceVerification,\n  HMSApplication,\n  HMSSkeletonDetection,\n  HMSLivenessDetection,\n  HMSInteractiveLivenessDetection,\n  HMSInteractiveLivenessCustomDetectionHandler,\n  HMSLensEngine,\n  HMSHandKeypointDetection,\n  HMSGestureDetection,\n} = NativeModules;\n\nexport default class SurfaceView extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return <HMSSurfaceView {...this.props} />;\n  }\n}\n\nSurfaceView.propTypes = {\n  ...View.propTypes\n}"
  },
  {
    "path": "react-native-hms-mlimage/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mlimage/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: react-native-image-picker &nbsp;5.6.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">The MIT License (MIT)</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy<br />\nof this software and associated documentation files (the &quot;Software&quot;), to deal<br />\nin the Software without restriction, including without limitation the rights<br />\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\ncopies of the Software, and to permit persons to whom the Software is<br />\nfurnished to do so, subject to the following conditions:</p>\n\n<p>The above copyright notice and this permission notice shall be included in all<br />\ncopies or substantial portions of the Software.</p>\n\n<p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\nSOFTWARE.</p>\n\n<h1 style=\"text-align:start\">&nbsp;</h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;<strong><span style=\"font-size:16pt\">Written Offer&nbsp;</span></strong><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:</span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"color:blue\"><u><span style=\"font-family:Arial,sans-serif\"><a href=\"mailto:foss@huawei.com\" style=\"color:blue; text-decoration:underline\">foss@huawei.com</a></span></u></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">This offer is valid to anyone in receipt of this information.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-mlimage/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS ML Image</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mlimage\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-mlimage?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mlimage\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-mlimage?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-mlimage.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThe React Native ML Image Plugin allows your apps to easily leverage Huawei's long-term proven expertise in machine learning to support diverse artificial intelligence (AI) applications throughout a wide range of industries. Thanks to Huawei's technology accumulation, ML Plugin provides diversified leading machine learning capabilities that are easy to use, helping you develop various AI apps.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050726178?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-mlimage\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001051088416-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Supported Location](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/supported-location-0000001075977968-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 licence](LICENSE)"
  },
  {
    "path": "react-native-hms-mlimage/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.6.0.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 31\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 31\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenCentral()\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation \"com.facebook.react:react-native:+\"\n\n    // Import the base image classification base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-classification:3.7.0.301'\n    // Import the image classification model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-classification-model:3.7.0.301'\n\n    // Import the object detection and tracking base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-object:3.11.0.301'\n    // Import the object detection and tracking model package.\n    implementation 'com.huawei.hms:ml-computer-vision-object-detection-model:3.7.0.301'\n\n    // Import the landmark recognition SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-cloud:3.11.0.301'\n\n    // Import the image segmentation base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-segmentation:3.7.0.302'\n    // Import the multiclass segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-multiclass-model:3.7.0.302'\n    // Import the human body segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:3.7.0.302'\n    // Import the hair segmentation model package.\n    implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-hair-model:3.7.0.302'\n\n    // Import the product visual search plug-in SDK.\n    implementation 'com.huawei.hms:ml-product-visual-search-plugin:3.11.0.301'\n\n    // Import the image super-resolution base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-imagesuperresolution:3.11.0.301'\n    // Import the image super-resolution model package.\n    implementation 'com.huawei.hms:ml-computer-vision-imagesuperresolution-model:3.11.0.301'\n\n    // Import the document detection/correction base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-documentskew:3.11.0.301'\n    // Import the document detection/correction model package.\n    implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:3.7.0.301'\n\n    // Import the text image super-resolution base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution:3.11.0.303'\n    // Import the text image super-resolution model package.\n    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution-model:3.11.0.303'\n\n    // Import the scene detection base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-scenedetection:3.11.0.302'\n    // Import the scene detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-scenedetection-model:3.11.0.302'\n\n    // Import the skeleton detection base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton:3.11.0.301'\n    // Import the skeleton detection model package for normal postures.\n    implementation 'com.huawei.hms:ml-computer-vision-skeleton-model:3.11.0.301'\n\n    // Import the hand keypoint detection base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint:3.11.0.301'\n    // Import the hand keypoint detection model package.\n    implementation 'com.huawei.hms:ml-computer-vision-handkeypoint-model:3.7.0.301'\n}"
  },
  {
    "path": "react-native-hms-mlimage/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists"
  },
  {
    "path": "react-native-hms-mlimage/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx2048m"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.mlimage\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n                     android:maxSdkVersion=\"29\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n     <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n</manifest>"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/HMSBase.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.rn.mlimage.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    public HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * To obtain context\n     * @return app context\n     */\n    public ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     * @param methodName Name of the method\n     */\n    protected void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        if (e instanceof MLException) {\n            MLException e1 = (MLException) e;\n            promise.resolve(UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()));\n        } else {\n            promise.resolve(UNKNOWN.getStatusAndMessage(null, e.getMessage()));\n        }\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, HMSResults e, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(e.getStatusAndMessage());\n    }\n\n    /**\n     * Handles success\n     *\n     * @param methodName method name\n     * @param writableMap result\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, WritableMap writableMap, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/HMSMLImage.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.mlimage.commonservices.HMSApplication;\nimport com.huawei.hms.rn.mlimage.commonservices.HMSComposite;\nimport com.huawei.hms.rn.mlimage.commonservices.HMSLensEngine;\nimport com.huawei.hms.rn.mlimage.helpers.views.HMSSurfaceView;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSDocumentSkewCorrection;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSFrame;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSImageClassification;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSImageSegmentation;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSImageSuperResolution;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSLandmarkRecognition;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSObjectRecognition;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSProductVisionSearch;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSSceneDetection;\nimport com.huawei.hms.rn.mlimage.imagerelatedservices.HMSTextImageSuperResolution;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSMLImage implements ReactPackage {\n\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSApplication(reactContext));\n        modules.add(new HMSFrame(reactContext));\n        modules.add(new HMSImageClassification(reactContext));\n        modules.add(new HMSObjectRecognition(reactContext));\n        modules.add(new HMSLandmarkRecognition(reactContext));\n        modules.add(new HMSImageSegmentation(reactContext));\n        modules.add(new HMSImageSuperResolution(reactContext));\n        modules.add(new HMSProductVisionSearch(reactContext));\n        modules.add(new HMSDocumentSkewCorrection(reactContext));\n        modules.add(new HMSTextImageSuperResolution(reactContext));\n        modules.add(new HMSSceneDetection(reactContext));\n        modules.add(new HMSLensEngine(reactContext));\n        modules.add(new HMSComposite(reactContext));\n\n        return modules;\n    }\n\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.singletonList(new HMSSurfaceView());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/commonservices/HMSApplication.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.commonservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.ERROR_CODES;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.UNKNOWN;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.common.MLApplication;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class HMSApplication extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSApplication(ReactApplicationContext reactContext) {\n        super(reactContext, HMSApplication.class.getSimpleName(), ERROR_CODES);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param apiKey api key\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param accessToken access token\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAccessToken(String accessToken, final Promise promise) {\n        startMethodExecTimer(\"setAccessToken\");\n\n        if (TextUtils.isEmpty(accessToken)) {\n            handleResult(\"setAccessToken\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setAccessToken(accessToken);\n        handleResult(\"setAccessToken\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns api key that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        handleResult(\"getApiKey\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getApiKey()), promise);\n    }\n\n    /**\n     * Enables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n        handleResult(\"enableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        handleResult(\"disableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns Country Code that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getCountryCode(final Promise promise) {\n        startMethodExecTimer(\"getCountryCode\");\n        handleResult(\"getCountryCode\",\n                HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getCountryCode()), promise);\n    }\n\n    /**\n     * Sets the userRegion dynamically\n     *\n     * @param userRegion\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setUserRegion(int userRegion, final Promise promise) {\n        startMethodExecTimer(\"setUserRegion\");\n\n        if ( userRegion != MLApplication.REGION_DR_CHINA &&\n                userRegion != MLApplication.REGION_DR_GERMAN &&\n                userRegion != MLApplication.REGION_DR_RUSSIA &&\n                userRegion != MLApplication.REGION_DR_SINGAPORE ) {\n            handleResult(\"setUserRegion\", UNKNOWN, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setUserRegion(userRegion);\n        handleResult(\"setUserRegion\", SUCCESS, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/commonservices/HMSComposite.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.commonservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.mlsdk.common.MLCompositeAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport java.util.List;\n\npublic class HMSComposite extends HMSBase {\n    private MLCompositeAnalyzer compositeAnalyzer;\n\n    /**\n     * Initializes module.\n     *\n     * @param mContext context\n     */\n    public HMSComposite(ReactApplicationContext mContext) {\n        super(mContext, HMSComposite.class.getSimpleName(), null);\n    }\n\n    /**\n     * Creates composite analyzer.\n     *\n     * @param configuration analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createCompositeAnalyzer(ReadableMap configuration, final Promise promise) {\n        startMethodExecTimer(\"createCompositeAnalyzer\");\n        compositeAnalyzer = HMSObjectCreator.getInstance().createCompositeAnalyzer(configuration);\n        handleResult(\"createCompositeAnalyzer\", SUCCESS, promise);\n    }\n\n    /**\n     * Checks whether an analyzer is available, that is, whether all required resources are loaded.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isAvailable(final Promise promise) {\n        startMethodExecTimer(\"isAvailable\");\n\n        if (compositeAnalyzer == null) {\n            handleResult(\"isAvailable\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        handleResult(\"createCompositeAnalyzer\",\n            HMSResultCreator.getInstance().getBooleanResult(compositeAnalyzer.isAvailable()), promise);\n    }\n\n    /**\n     * Releases resources occupied by a composite analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (compositeAnalyzer == null) {\n            handleResult(\"destroy\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        compositeAnalyzer.destroy();\n        compositeAnalyzer = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Uses a composite analyzer to detect information in an image and returns the detection result list.\n     *\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        try {\n            MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n            if (frame == null) {\n                handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n                return;\n            }\n\n            if (compositeAnalyzer == null) {\n                handleResult(\"destroy\", ANALYZER_NOT_AVAILABLE, promise);\n                return;\n            }\n\n            SparseArray<Object> resultAnalyze = compositeAnalyzer.analyseFrame(frame);\n            List<Object> resultList = HMSUtils.getInstance().convertSparseArrayToList(resultAnalyze);\n            WritableMap result = HMSResultCreator.getInstance().getCompositeResult(resultList.get(0));\n\n            handleResult(\"analyzeFrame\", result, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzeFrame\", e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/commonservices/HMSLensEngine.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.commonservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_ENGINE_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_ON_CLICK_SHUTTER;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_ON_PHOTO_TAKEN;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSLensEngine extends HMSBase implements LensEngine.ShutterListener, LensEngine.PhotographListener {\n    private LensEngine lensEngine;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     */\n    public HMSLensEngine(ReactApplicationContext mContext) {\n        super(mContext, HMSLensEngine.class.getSimpleName(), LENS_ENGINE_CONSTANTS);\n    }\n\n    /**\n     * Creates lens engine with an analyzer\n     *\n     * @param analyzerTag analyzer tag\n     * @param analyzerConfig analyzer configuration\n     * @param lensConfig lens engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createLensEngine(int analyzerTag, ReadableMap analyzerConfig, ReadableMap lensConfig,\n        final Promise promise) {\n        startMethodExecTimer(\"createLensEngine\");\n        MLAnalyzer analyzer = HMSObjectCreator.getInstance()\n            .createLensEngineAnalyzer(analyzerTag, analyzerConfig, getContext());\n\n        if (analyzer == null) {\n            handleResult(\"close\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        lensEngine = HMSObjectCreator.getInstance().createLensEngine(getContext(), analyzer, lensConfig);\n        handleResult(\"createLensEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Closes the camera and stops sending frames to the frame analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n\n        if (lensEngine == null) {\n            handleResult(\"close\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Adjusts the focal length of the camera based on the scaling coefficient (digital zoom).\n     *\n     * @param scale zoom scale\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void doZoom(double scale, final Promise promise) {\n        startMethodExecTimer(\"doZoom\");\n\n        if (lensEngine == null) {\n            handleResult(\"doZoom\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.doZoom((float) scale);\n        handleResult(\"doZoom\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the size of the preview image of a camera.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getDisplayDimension(final Promise promise) {\n        startMethodExecTimer(\"getDisplayDimension\");\n\n        if (lensEngine == null) {\n            handleResult(\"getDisplayDimension\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getDisplayDimension\",\n            HMSResultCreator.getInstance().displayDimensionResult(lensEngine.getDisplayDimension()), promise);\n    }\n\n    /**\n     * Obtains the selected camera type.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLensType(final Promise promise) {\n        startMethodExecTimer(\"getLensType\");\n\n        if (lensEngine == null) {\n            handleResult(\"getLensType\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLensType\", HMSResultCreator.getInstance().integerResult(lensEngine.getLensType()), promise);\n    }\n\n    /**\n     * Monitors photographing.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void photograph(final Promise promise) {\n        startMethodExecTimer(\"photograph\");\n\n        if (lensEngine == null) {\n            handleResult(\"photograph\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.photograph(this, this);\n        handleResult(\"photograph\", SUCCESS, promise);\n    }\n\n    /**\n     * Releases resources occupied by LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void release(final Promise promise) {\n        startMethodExecTimer(\"release\");\n\n        if (lensEngine == null) {\n            handleResult(\"release\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.release();\n        lensEngine = null;\n        handleResult(\"release\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void run(final Promise promise) {\n        startMethodExecTimer(\"run\");\n\n        if (lensEngine == null) {\n            handleResult(\"run\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run();\n            handleResult(\"run\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"run\", e, promise);\n        }\n    }\n\n    /**\n     * Starts the LensEngine and uses SurfaceView as the frame preview panel.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void runWithView(final Promise promise) {\n        startMethodExecTimer(\"runWithView\");\n\n        if (lensEngine == null) {\n            handleResult(\"runWithView\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().getSurfaceViewHolder() == null) {\n            handleResult(\"runWithView\", LENS_HOLDER_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run(HMSUtils.getInstance().getSurfaceViewHolder());\n            handleResult(\"runWithView\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"runWithView\", e, promise);\n        }\n    }\n\n    /**\n     * Photograph take event\n     *\n     * @param bytes Picture as bytes\n     */\n    @Override\n    public void takenPhotograph(byte[] bytes) {\n        Bitmap photo = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), photo)\n            .addOnSuccessListener(s -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(e -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                FAILURE.getStatusAndMessage(null, e.getMessage())));\n    }\n\n    /**\n     * Shutter click event\n     */\n    @Override\n    public void clickShutter() {\n        sendEvent(LENS_ON_CLICK_SHUTTER, \"clickShutter\", null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/adapters/HMSBottomSheetAdapter.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.adapters;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.BaseAdapter;\nimport android.widget.TextView;\n\nimport com.huawei.hms.rn.mlimage.R;\nimport com.huawei.hms.rn.mlimage.helpers.models.HMSProductModel;\n\nimport com.facebook.drawee.view.SimpleDraweeView;\n\nimport java.util.List;\n\npublic class HMSBottomSheetAdapter extends BaseAdapter {\n    private List<HMSProductModel> products;\n\n    private Context appContext;\n\n    public HMSBottomSheetAdapter(Context context, List<HMSProductModel> mlProducts) {\n        appContext = context;\n        products = mlProducts;\n    }\n\n    @Override\n    public int getCount() {\n        return products == null ? 0 : products.size();\n    }\n\n    @Override\n    public Object getItem(int i) {\n        return products.get(i);\n    }\n\n    @Override\n    public long getItemId(int i) {\n        return i;\n    }\n\n    @Override\n    public View getView(int i, View view, ViewGroup viewGroup) {\n        if (view == null) {\n            view = View.inflate(appContext, R.layout.hms_product_item, null);\n        }\n        SimpleDraweeView draweeView = view.findViewById(R.id.hms_product_item_image_view);\n        TextView textView = view.findViewById(R.id.hms_product_item_text_view);\n        draweeView.setImageURI(Uri.parse(products.get(i).getImgUrl()));\n        textView.setText(products.get(i).getName());\n        return view;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/constants/HMSConstants.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.constants;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.hardware.Camera;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationClassification;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationScene;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationSetting;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzerSetting;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzerSetting;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzerSetting;\n\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSConstants {\n\n    // product vision plugin\n    public static final String PRODUCT_ON_RESULT = \"productOnResult\";\n\n    // lens engine\n    public static final String LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\";\n\n    public static final String LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\";\n\n    public static final String LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\";\n\n    public static final String LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\";\n\n    public static final String LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\";\n\n    // text transactor\n    public static final String TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\";\n\n    public static final String TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\";\n\n    // 2d face transactor\n    public static final String FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\";\n\n    public static final String FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\";\n\n    // 3d face transactor\n    public static final String FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\";\n\n    public static final String FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\";\n\n    // skeleton transactor\n    public static final String SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\";\n\n    public static final String SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\";\n\n    // scene transactor\n    public static final String SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\";\n\n    public static final String SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\";\n\n    // classification transactor\n    public static final String CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\";\n\n    public static final String CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\";\n\n    // object transactor\n    public static final String OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\";\n\n    public static final String OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\";\n\n    // hand keypoint transactor\n    public static final String HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\";\n\n    public static final String HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\";\n\n    // gesture transactor\n    public static final String GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\";\n\n    public static final String GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\";\n\n    // error codes exposed by HMSApplication\n    public static final Map<String, Object> ERROR_CODES = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"UNKNOWN\", MLException.UNKNOWN);\n            put(\"SUCCESS\", MLException.SUCCESS);\n            put(\"DISCARDED\", MLException.DISCARDED);\n            put(\"INNER\", MLException.INNER);\n            put(\"INACTIVE\", MLException.INACTIVE);\n            put(\"NOT_SUPPORTED\", MLException.NOT_SUPPORTED);\n            put(\"ILLEGAL_PARAMETER\", MLException.ILLEGAL_PARAMETER);\n            put(\"OVERDUE\", MLException.OVERDUE);\n            put(\"NO_FOUND\", MLException.NO_FOUND);\n            put(\"DUPLICATE_FOUND\", MLException.DUPLICATE_FOUND);\n            put(\"NO_PERMISSION\", MLException.NO_PERMISSION);\n            put(\"INSUFFICIENT_RESOURCE\", MLException.INSUFFICIENT_RESOURCE);\n            put(\"ANALYSIS_FAILURE\", MLException.ANALYSIS_FAILURE);\n            put(\"INTERRUPTED\", MLException.INTERRUPTED);\n            put(\"EXCEED_RANGE\", MLException.EXCEED_RANGE);\n            put(\"DATA_MISSING\", MLException.DATA_MISSING);\n            put(\"AUTHENTICATION_REQUIRED\", MLException.AUTHENTICATION_REQUIRED);\n            put(\"TFLITE_NOT_COMPATIBLE\", MLException.TFLITE_NOT_COMPATIBLE);\n            put(\"INSUFFICIENT_SPACE\", MLException.INSUFFICIENT_SPACE);\n            put(\"HASH_MISS\", MLException.HASH_MISS);\n            put(\"TOKEN_INVALID\", MLException.TOKEN_INVALID);\n            put(\"FRAME_NULL\", FRAME_NULL.getErrCode());\n            put(\"ANALYZER_NOT_AVAILABLE\", ANALYZER_NOT_AVAILABLE.getErrCode());\n            put(\"CURRENT_ACTIVITY_NULL\", CURRENT_ACTIVITY_NULL.getErrCode());\n            put(\"CANCEL\", CANCEL.getErrCode());\n            put(\"FAILURE\", FAILURE.getErrCode());\n            put(\"DENY\", DENY.getErrCode());\n            put(\"STRING_PARAM_NULL\", STRING_PARAM_NULL.getErrCode());\n            put(\"REMOTE_MODEL_NULL\", REMOTE_MODEL_NULL.getErrCode());\n            put(\"ASR_RECOGNIZER_NULL\", ASR_RECOGNIZER_NULL.getErrCode());\n            put(\"TTS_ENGINE_NULL\", TTS_ENGINE_NULL.getErrCode());\n            put(\"SOUND_DECT_NULL\", SOUND_DECT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_SETTING_NULL\", CUSTOM_MODEL_SETTING_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_INPUT_NULL\", CUSTOM_MODEL_INPUT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_EXECUTOR_SETTING_NULL\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL.getErrCode());\n            put(\"DATA_SET_NOT_VALID\", DATA_SET_NOT_VALID.getErrCode());\n            put(\"LENS_ENGINE_NULL\", LENS_ENGINE_NULL.getErrCode());\n            put(\"LENS_HOLDER_NULL\", LENS_HOLDER_NULL.getErrCode());\n        }\n    });\n\n    // frame constants HMSFrame\n    public static final Map<String, Object> FRAME_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"SCREEN_FIRST_QUADRANT\", MLFrame.SCREEN_FIRST_QUADRANT);\n            put(\"SCREEN_SECOND_QUADRANT\", MLFrame.SCREEN_SECOND_QUADRANT);\n            put(\"SCREEN_THIRD_QUADRANT\", MLFrame.SCREEN_THIRD_QUADRANT);\n            put(\"SCREEN_FOURTH_QUADRANT\", MLFrame.SCREEN_FOURTH_QUADRANT);\n            put(\"IMAGE_FORMAT_NV21\", MLFrame.Property.IMAGE_FORMAT_NV21);\n            put(\"IMAGE_FORMAT_YV12\", MLFrame.Property.IMAGE_FORMAT_YV12);\n        }\n    });\n\n    // object recognition constants HMSObjectRecognition\n    public static final Map<String, Object> OBJECT_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"TYPE_PICTURE\", MLObjectAnalyzerSetting.TYPE_PICTURE);\n                put(\"TYPE_VIDEO\", MLObjectAnalyzerSetting.TYPE_VIDEO);\n                put(\"TYPE_OTHER\", MLObject.TYPE_OTHER);\n                put(\"TYPE_FACE\", MLObject.TYPE_FACE);\n                put(\"TYPE_FOOD\", MLObject.TYPE_FOOD);\n                put(\"TYPE_FURNITURE\", MLObject.TYPE_FURNITURE);\n                put(\"TYPE_GOODS\", MLObject.TYPE_GOODS);\n                put(\"TYPE_PLACE\", MLObject.TYPE_PLACE);\n                put(\"TYPE_PLANT\", MLObject.TYPE_PLANT);\n            }\n        });\n\n    // landmark recognition constants HMSLandmarkRecognition\n    public static final Map<String, Object> LANDMARK_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"NEWEST_PATTERN\", MLRemoteLandmarkAnalyzerSetting.NEWEST_PATTERN);\n                put(\"STEADY_PATTERN\", MLRemoteLandmarkAnalyzerSetting.STEADY_PATTERN);\n            }\n        });\n\n    // image segmentation constants HMSImageSegmentation\n    public static final Map<String, Object> IMSEG_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TYPE_BACKGROUND\", MLImageSegmentationClassification.TYPE_BACKGOURND);\n            put(\"TYPE_HUMAN\", MLImageSegmentationClassification.TYPE_HUMAN);\n            put(\"TYPE_SKY\", MLImageSegmentationClassification.TYPE_SKY);\n            put(\"TYPE_GRASS\", MLImageSegmentationClassification.TYPE_GRASS);\n            put(\"TYPE_FOOD\", MLImageSegmentationClassification.TYPE_FOOD);\n            put(\"TYPE_CAT\", MLImageSegmentationClassification.TYPE_CAT);\n            put(\"TYPE_BUILD\", MLImageSegmentationClassification.TYPE_BUILD);\n            put(\"TYPE_FLOWER\", MLImageSegmentationClassification.TYPE_FLOWER);\n            put(\"TYPE_WATER\", MLImageSegmentationClassification.TYPE_WATER);\n            put(\"TYPE_SAND\", MLImageSegmentationClassification.TYPE_SAND);\n            put(\"TYPE_MOUNTAIN\", MLImageSegmentationClassification.TYPE_MOUNTAIN);\n            put(\"ALL\", MLImageSegmentationScene.ALL);\n            put(\"FOREGROUND_ONLY\", MLImageSegmentationScene.FOREGROUND_ONLY);\n            put(\"GRAYSCALE_ONLY\", MLImageSegmentationScene.GRAYSCALE_ONLY);\n            put(\"MASK_ONLY\", MLImageSegmentationScene.MASK_ONLY);\n            put(\"BODY_SEG\", MLImageSegmentationSetting.BODY_SEG);\n            put(\"IMAGE_SEG\", MLImageSegmentationSetting.IMAGE_SEG);\n            put(\"HAIR_SEG\", MLImageSegmentationSetting.HAIR_SEG);\n        }\n    });\n\n    // product visual search constants HMSProductVisionSearch\n    public static final Map<String, Object> PRODUCT_VISION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"REGION_DR_CHINA\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_CHINA);\n                put(\"REGION_DR_SIANGAPORE\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_SINGAPORE);\n                put(\"REGION_DR_GERMAN\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_GERMAN);\n                put(\"REGION_DR_RUSSIA\", MLRemoteProductVisionSearchAnalyzerSetting.REGION_DR_RUSSIA);\n                put(\"PRODUCT_ON_RESULT\", PRODUCT_ON_RESULT);\n            }\n        });\n\n    // image super resolution constants HMSImageSuperResolution\n    public static final Map<String, Object> IMAGE_RESOLUTION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"ISR_SCALE_1X\", MLImageSuperResolutionAnalyzerSetting.ISR_SCALE_1X);\n                put(\"ISR_SCALE_3X\", MLImageSuperResolutionAnalyzerSetting.ISR_SCALE_3X);\n            }\n        });\n\n    // document skew correction constants HMSDocumentSkewCorrection\n    public static final Map<String, Object> DSC_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"CORRECTION_FAILED\", MLDocumentSkewCorrectionConstant.CORRECTION_FAILED);\n            put(\"DETECT_FAILED\", MLDocumentSkewCorrectionConstant.DETECT_FAILED);\n            put(\"IMAGE_DATA_ERROR\", MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR);\n            put(\"SUCCESS\", MLDocumentSkewCorrectionConstant.SUCCESS);\n        }\n    });\n\n    // lens engine constants\n    public static final Map<String, Object> LENS_ENGINE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"FLASH_MODE_OFF\", Camera.Parameters.FLASH_MODE_OFF);\n            put(\"FLASH_MODE_ON\", Camera.Parameters.FLASH_MODE_ON);\n            put(\"FLASH_MODE_AUTO\", Camera.Parameters.FLASH_MODE_AUTO);\n            put(\"FOCUS_MODE_CONTINUOUS_PICTURE\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);\n            put(\"FOCUS_MODE_CONTINUOUS_VIDEO\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);\n            put(\"BACK_LENS\", LensEngine.BACK_LENS);\n            put(\"FRONT_LENS\", LensEngine.FRONT_LENS);\n            put(\"LENS_ON_PHOTO_TAKEN\", LENS_ON_PHOTO_TAKEN);\n            put(\"LENS_ON_CLICK_SHUTTER\", LENS_ON_CLICK_SHUTTER);\n            put(\"LENS_SURFACE_ON_CREATED\", LENS_SURFACE_ON_CREATED);\n            put(\"LENS_SURFACE_ON_CHANGED\", LENS_SURFACE_ON_CHANGED);\n            put(\"LENS_SURFACE_ON_DESTROY\", LENS_SURFACE_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_DESTROY\", TEXT_TRANSACTOR_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_RESULT\", TEXT_TRANSACTOR_ON_RESULT);\n            put(\"FACE_2D_TRANSACTOR_ON_DESTROY\", FACE_2D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_2D_TRANSACTOR_ON_RESULT\", FACE_2D_TRANSACTOR_ON_RESULT);\n            put(\"FACE_3D_TRANSACTOR_ON_DESTROY\", FACE_3D_TRANSACTOR_ON_DESTROY);\n            put(\"FACE_3D_TRANSACTOR_ON_RESULT\", FACE_3D_TRANSACTOR_ON_RESULT);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_DESTROY\", CLASSIFICATION_TRANSACTOR_ON_DESTROY);\n            put(\"CLASSIFICATION_TRANSACTOR_ON_RESULT\", CLASSIFICATION_TRANSACTOR_ON_RESULT);\n            put(\"OBJECT_TRANSACTOR_ON_DESTROY\", OBJECT_TRANSACTOR_ON_DESTROY);\n            put(\"OBJECT_TRANSACTOR_ON_RESULT\", OBJECT_TRANSACTOR_ON_RESULT);\n            put(\"SCENE_TRANSACTOR_ON_DESTROY\", SCENE_TRANSACTOR_ON_DESTROY);\n            put(\"SCENE_TRANSACTOR_ON_RESULT\", SCENE_TRANSACTOR_ON_RESULT);\n            put(\"SKELETON_TRANSACTOR_ON_DESTROY\", SKELETON_TRANSACTOR_ON_DESTROY);\n            put(\"SKELETON_TRANSACTOR_ON_RESULT\", SKELETON_TRANSACTOR_ON_RESULT);\n            put(\"HAND_TRANSACTOR_ON_DESTROY\", HAND_TRANSACTOR_ON_DESTROY);\n            put(\"HAND_TRANSACTOR_ON_RESULT\", HAND_TRANSACTOR_ON_RESULT);\n            put(\"GESTURE_TRANSACTOR_ON_DESTROY\", GESTURE_TRANSACTOR_ON_DESTROY);\n            put(\"GESTURE_TRANSACTOR_ON_RESULT\", GESTURE_TRANSACTOR_ON_RESULT);\n            put(\"LENS_TEXT_ANALYZER\", 0);\n            put(\"LENS_FACE_2D_ANALYZER\", 1);\n            put(\"LENS_FACE_3D_ANALYZER\", 2);\n            put(\"LENS_SKELETON_ANALYZER\", 3);\n            put(\"LENS_CLASSIFICATION_ANALYZER\", 4);\n            put(\"LENS_OBJECT_ANALYZER\", 5);\n            put(\"LENS_SCENE_ANALYZER\", 6);\n            put(\"LENS_HAND_ANALYZER\", 7);\n            put(\"LENS_GESTURE_ANALYZER\", 8);\n        }\n    });\n}"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/constants/HMSResults.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.constants;\n\nimport com.huawei.hms.mlsdk.common.MLException;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic enum HMSResults {\n    UNKNOWN(MLException.UNKNOWN, \"\"),\n    SUCCESS(MLException.SUCCESS, \"Success\"),\n    FRAME_NULL(20, \"No frame object created with given parameters\"),\n    ANALYZER_NOT_AVAILABLE(21, \"Analyzer is not available\"),\n    CURRENT_ACTIVITY_NULL(22, \"Current activity is null\"),\n    CANCEL(23, \"Recognition cancelled by user\"),\n    FAILURE(24, \"Recognition failed\"),\n    DENY(25, \"Camera does not support BCR\"),\n    STRING_PARAM_NULL(26, \"Given string parameter is null or empty\"),\n    REMOTE_MODEL_NULL(27, \"No remote model object created with given parameters\"),\n    ASR_RECOGNIZER_NULL(28, \"Asr recognizer is null or not created\"),\n    TTS_ENGINE_NULL(30, \"Tts engine is not created\"),\n    SOUND_DECT_NULL(31, \"Sound detector is not initialized\"),\n    CUSTOM_MODEL_SETTING_NULL(32, \"Input output setting is not initialized with given parameters\"),\n    CUSTOM_MODEL_INPUT_NULL(33, \"Model inputs is not initialized with given parameters\"),\n    CUSTOM_MODEL_EXECUTOR_SETTING_NULL(34, \"Model executor setting is not initialized with given parameters\"),\n    DATA_SET_NOT_VALID(35, \"Data set is not valid.\"),\n    LENS_ENGINE_NULL(36, \"LensEngine is not created\"),\n    LENS_HOLDER_NULL(37, \"LensEngine holder is null\");\n\n    private int errCode;\n\n    private String message;\n\n    HMSResults(int errCode, String message) {\n        this.errCode = errCode;\n        this.message = message;\n    }\n\n    public int getErrCode() {\n        return errCode;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    /**\n     * Combines status and message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.errCode);\n        wm.putString(\"message\", this.message);\n        return wm;\n    }\n\n    /**\n     * Combines status and message with optional parameters\n     *\n     * @param errorCode Error code\n     * @param errorMessage Error message\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer errorCode, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", errorCode == null ? this.errCode : errorCode);\n        wm.putString(\"message\", errorMessage == null ? this.message : errorMessage);\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/creators/HMSObjectCreator.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.creators;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Rect;\nimport android.hardware.Camera;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCaptureConfig;\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCaptureFactory;\nimport com.huawei.hms.mlsdk.MLAnalyzerFactory;\nimport com.huawei.hms.mlsdk.classification.MLImageClassificationAnalyzer;\nimport com.huawei.hms.mlsdk.classification.MLLocalClassificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.classification.MLRemoteClassificationAnalyzerSetting;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLCompositeAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.MLFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzer;\nimport com.huawei.hms.mlsdk.face.face3d.ML3DFaceAnalyzerSetting;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzer;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerFactory;\nimport com.huawei.hms.mlsdk.handkeypoint.MLHandKeypointAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzer;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationAnalyzer;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationScene;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationSetting;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzer;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzerSetting;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzer;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzerSetting;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzer;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzerSetting;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzer;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzer;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerFactory;\nimport com.huawei.hms.mlsdk.skeleton.MLSkeletonAnalyzerSetting;\nimport com.huawei.hms.mlsdk.text.MLLocalTextSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\nimport com.huawei.hms.mlsdk.text.MLTextAnalyzer;\nimport com.huawei.hms.rn.mlimage.helpers.fragments.HMSProductFragment;\nimport com.huawei.hms.rn.mlimage.helpers.transactors.HMSClassificationAnalyzerTransactor;\nimport com.huawei.hms.rn.mlimage.helpers.transactors.HMSObjectAnalyzerTransactor;\nimport com.huawei.hms.rn.mlimage.helpers.transactors.HMSSceneDetectionAnalyzerTransactor;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic final class HMSObjectCreator {\n    private static final String TAG = HMSObjectCreator.class.getSimpleName();\n\n    private static volatile HMSObjectCreator instance;\n\n    public static HMSObjectCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSObjectCreator.class) {\n                if (instance == null) {\n                    instance = new HMSObjectCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Creates MLRemoteTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLRemoteTextSetting object\n     */\n    private MLRemoteTextSetting createRemoteTextSetting(ReadableMap readableMap) {\n        int textDensityScene = MLRemoteTextSetting.OCR_LOOSE_SCENE;\n        String borderType = MLRemoteTextSetting.NGON;\n        List<String> languageList = new ArrayList<>();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"RemoteTextSetting object is created using default options.\");\n            return new MLRemoteTextSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"borderType\", ReadableType.String)) {\n            borderType = readableMap.getString(\"borderType\");\n            Log.i(TAG, \"RemoteTextSetting borderType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"textDensityScene\", ReadableType.Number)) {\n            textDensityScene = readableMap.getInt(\"textDensityScene\");\n            Log.i(TAG, \"RemoteTextSetting textDensityScene option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageList\", ReadableType.Array)) {\n            languageList = HMSUtils.getInstance().readableArrayIntoStringList(readableMap.getArray(\"languageList\"));\n            Log.i(TAG, \"RemoteTextSetting languageList option set.\");\n        }\n\n        return new MLRemoteTextSetting.Factory().setTextDensityScene(textDensityScene)\n                .setBorderType(borderType)\n                .setLanguageList(languageList)\n                .create();\n    }\n\n    /**\n     * Helper method that sets language\n     *\n     * @param readableMap configuration\n     * @return language\n     */\n    private String setLanguage(ReadableMap readableMap) {\n        String language = \"rm\";\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"Language option set.\");\n        }\n\n        return language;\n    }\n\n    /**\n     * Helper method that sets OCRMode\n     *\n     * @param readableMap configuration\n     * @return OCRMode\n     */\n    private int setOCRMode(ReadableMap readableMap) {\n        int ocrDetectMode = MLLocalTextSetting.OCR_DETECT_MODE;\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"OCRMode\", ReadableType.Number)) {\n            ocrDetectMode = readableMap.getInt(\"OCRMode\");\n            Log.i(TAG, \"OCRMode option set.\");\n        }\n\n        return ocrDetectMode;\n    }\n\n    /**\n     * Creates MLTextAnalyzer using factory\n     *\n     * @param readableMap configuration keys and values\n     * @param isRemote remote or local text analyzer\n     * @return MLTextAnalyzer object\n     */\n    public MLTextAnalyzer createTextAnalyzer(ReadableMap readableMap, boolean isRemote) {\n        if (isRemote) {\n            Log.i(TAG, \"MLRemoteTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(createRemoteTextSetting(readableMap));\n        } else {\n            Log.i(TAG, \"MLLocalTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(createLocalTextSetting(readableMap));\n        }\n    }\n\n    /**\n     * Creates MLLocalTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLLocalTextSetting object\n     */\n    private MLLocalTextSetting createLocalTextSetting(ReadableMap readableMap) {\n        if (readableMap == null) {\n            Log.i(TAG, \"LocalTextSetting object is created using default options.\");\n            return new MLLocalTextSetting.Factory().create();\n        }\n\n        Log.i(TAG, \"LocalTextSetting object is created.\");\n        return new MLLocalTextSetting.Factory().setLanguage(setLanguage(readableMap))\n                .setOCRMode(setOCRMode(readableMap))\n                .create();\n    }\n\n    /**\n     * Creates MLRemoteClassificationAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteClassificationAnalyzerSetting object\n     */\n    private MLRemoteClassificationAnalyzerSetting createRemoteClassificationAnalyzerSetting(ReadableMap readableMap) {\n        int largestNumOfReturns = 10;\n        double minAcceptablePossibility = 0.5d;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting object is being created...\");\n            return new MLRemoteClassificationAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxNumberOfReturns\", ReadableType.Number)) {\n            largestNumOfReturns = readableMap.getInt(\"maxNumberOfReturns\");\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting maxNumberOfReturns option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minAcceptablePossibility\", ReadableType.Number)) {\n            minAcceptablePossibility = readableMap.getDouble(\"minAcceptablePossibility\");\n            Log.i(TAG, \"MLRemoteClassificationAnalyzerSetting minAcceptablePossibility option set.\");\n        }\n\n        return new MLRemoteClassificationAnalyzerSetting.Factory().setLargestNumOfReturns(largestNumOfReturns)\n                .setMinAcceptablePossibility((float) minAcceptablePossibility)\n                .create();\n    }\n\n    /**\n     * Creates and returns classification analyzer\n     *\n     * @param isRemote on-cloud or on-device\n     * @param analyzerSetting setting to create analyzer\n     * @return MLImageClassificationAnalyzer object\n     */\n    public MLImageClassificationAnalyzer createClassificationAnalyzer(boolean isRemote, ReadableMap analyzerSetting) {\n        if (isRemote) {\n            return MLAnalyzerFactory.getInstance()\n                    .getRemoteImageClassificationAnalyzer(createRemoteClassificationAnalyzerSetting(analyzerSetting));\n        } else {\n            return MLAnalyzerFactory.getInstance()\n                    .getLocalImageClassificationAnalyzer(createLocalClassificationAnalyzerSetting(analyzerSetting));\n        }\n    }\n\n    /**\n     * Creates MLLocalClassificationAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLLocalClassificationAnalyzerSetting object\n     */\n    private MLLocalClassificationAnalyzerSetting createLocalClassificationAnalyzerSetting(ReadableMap readableMap) {\n        double minAcceptablePossibility = 0.5d;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLLocalClassificationAnalyzerSetting object is being created...\");\n            return new MLLocalClassificationAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minAcceptablePossibility\", ReadableType.Number)) {\n            minAcceptablePossibility = readableMap.getDouble(\"minAcceptablePossibility\");\n            Log.i(TAG, \"MLLocalClassificationAnalyzerSetting minAcceptablePossibility option set.\");\n        }\n        return new MLLocalClassificationAnalyzerSetting.Factory().setMinAcceptablePossibility(\n                (float) minAcceptablePossibility).create();\n    }\n\n    /**\n     * Creates MLObjectAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLObjectAnalyzerSetting object\n     */\n    private MLObjectAnalyzerSetting createObjectAnalyzerSetting(ReadableMap readableMap) {\n        MLObjectAnalyzerSetting.Factory objectAnalyzer = new MLObjectAnalyzerSetting.Factory();\n        int analyzerType = MLObjectAnalyzerSetting.TYPE_PICTURE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLObjectAnalyzerSetting object is created using default options.\");\n            return objectAnalyzer.create();\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"allowClassification\")) {\n            objectAnalyzer.allowClassification();\n            Log.i(TAG, \"MLObjectAnalyzerSetting allowClassification option set.\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"allowMultiResults\")) {\n            objectAnalyzer.allowMultiResults();\n            Log.i(TAG, \"MLObjectAnalyzerSetting allowMultiResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"analyzerType\", ReadableType.Number)) {\n            analyzerType = readableMap.getInt(\"analyzerType\");\n            Log.i(TAG, \"MLObjectAnalyzerSetting analyzerType option set.\");\n        }\n        return objectAnalyzer.setAnalyzerType(analyzerType).create();\n    }\n\n    /**\n     * Creates and returns object analyzer\n     *\n     * @param objectAnalyzerSetting setting to create analyzer\n     * @return MLObjectAnalyzer object\n     */\n    public MLObjectAnalyzer createObjectAnalyzer(ReadableMap objectAnalyzerSetting) {\n        return MLAnalyzerFactory.getInstance()\n                .getLocalObjectAnalyzer(createObjectAnalyzerSetting(objectAnalyzerSetting));\n    }\n\n    /**\n     * Creates and returns landmark analyzer\n     *\n     * @param readableMap landmark analyzer setting\n     * @return MLRemoteLandmarkAnalyzer object\n     */\n    public MLRemoteLandmarkAnalyzer createLandmarkAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance().getRemoteLandmarkAnalyzer(createLandMarkAnalyzerSetting(readableMap));\n    }\n\n    /**\n     * Creates MLRemoteLandmarkAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteLandmarkAnalyzerSetting object\n     */\n    private MLRemoteLandmarkAnalyzerSetting createLandMarkAnalyzerSetting(ReadableMap readableMap) {\n        int largestNumOfReturns = 10;\n        int patternType = MLRemoteLandmarkAnalyzerSetting.STEADY_PATTERN;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting object is created using default options.\");\n            return MLRemoteLandmarkAnalyzerSetting.DEFAULT_SETTINGS;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"largestNumOfReturns\", ReadableType.Number)) {\n            largestNumOfReturns = readableMap.getInt(\"largestNumOfReturns\");\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting largestNumOfReturns option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"patternType\", ReadableType.Number)) {\n            patternType = readableMap.getInt(\"patternType\");\n            Log.i(TAG, \"MLRemoteLandmarkAnalyzerSetting patternType option set.\");\n        }\n\n        return new MLRemoteLandmarkAnalyzerSetting.Factory().setLargestNumOfReturns(largestNumOfReturns)\n                .setPatternType(patternType)\n                .create();\n    }\n\n    /**\n     * Creates and returns MLImageSegmentationAnalyzer object\n     *\n     * @param analyzerConfiguration analyzer configuration\n     * @return MLImageSegmentationAnalyzer object\n     */\n    public MLImageSegmentationAnalyzer createImageSegmentationAnalyzer(ReadableMap analyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance()\n                .getImageSegmentationAnalyzer(createImageSegmentationSetting(analyzerConfiguration));\n    }\n\n    /**\n     * Creates and returns MLRemoteProductVisionSearchAnalyzer object\n     *\n     * @param readableMap analyzer configuration\n     * @return MLRemoteProductVisionSearchAnalyzer object\n     */\n    public MLRemoteProductVisionSearchAnalyzer createProductVisionSearchAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance()\n                .getRemoteProductVisionSearchAnalyzer(createSearchAnalyzerSetting(readableMap));\n    }\n\n    /**\n     * Creates MLRemoteProductVisionSearchAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteProductVisionSearchAnalyzerSetting object\n     */\n    private MLRemoteProductVisionSearchAnalyzerSetting createSearchAnalyzerSetting(ReadableMap readableMap) {\n        MLRemoteProductVisionSearchAnalyzerSetting.Factory creator\n                = new MLRemoteProductVisionSearchAnalyzerSetting.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxResults\", ReadableType.Number)) {\n            creator.setLargestNumOfReturns(readableMap.getInt(\"maxResults\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting maxResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"productSetId\", ReadableType.String)) {\n            creator.setProductSetId(readableMap.getString(\"productSetId\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting productSetId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLRemoteProductVisionSearchAnalyzerSetting region option set.\");\n        }\n        return creator.create();\n    }\n\n    /**\n     * Creates MLProductVisionSearchCaptureConfig object\n     *\n     * @param readableMap configuration\n     * @param context context object\n     * @return MLProductVisionSearchCaptureConfig object\n     */\n    private MLProductVisionSearchCaptureConfig createProductSearchPluginConfig(ReadableMap readableMap,\n                                                                               ReactApplicationContext context) {\n        MLProductVisionSearchCaptureConfig.Factory creator = new MLProductVisionSearchCaptureConfig.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxResults\", ReadableType.Number)) {\n            creator.setLargestNumOfReturns(readableMap.getInt(\"maxResults\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig maxResults option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"productSetId\", ReadableType.String)) {\n            creator.setProductSetId(readableMap.getString(\"productSetId\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig productSetId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLProductVisionSearchCaptureConfig region option set.\");\n        }\n\n        return creator.setProductFragment(new HMSProductFragment(context)).create();\n    }\n\n    /**\n     * Creates product vision plugin capture\n     *\n     * @param readableMap configuration\n     * @param context context object\n     * @return MLProductVisionSearchCapture\n     */\n    public MLProductVisionSearchCapture createProductVisionSearchCapture(ReadableMap readableMap,\n                                                                         ReactApplicationContext context) {\n        return MLProductVisionSearchCaptureFactory.getInstance()\n                .create(createProductSearchPluginConfig(readableMap, context));\n    }\n\n    /**\n     * Creates MLImageSuperResolutionAnalyzerSetting object\n     *\n     * @param scale scale value\n     * @return MLImageSuperResolutionAnalyzerSetting object\n     */\n    private MLImageSuperResolutionAnalyzerSetting createImageSuperResolutionSetting(double scale) {\n        return new MLImageSuperResolutionAnalyzerSetting.Factory().setScale((float) scale).create();\n    }\n\n    /**\n     * Creates MLImageSuperResolutionAnalyzer object\n     *\n     * @param scale scale value\n     * @return MLImageSuperResolutionAnalyzer object\n     */\n    public MLImageSuperResolutionAnalyzer createImageSuperResolutionAnalyzer(double scale) {\n        return MLImageSuperResolutionAnalyzerFactory.getInstance()\n                .getImageSuperResolutionAnalyzer(createImageSuperResolutionSetting(scale));\n    }\n\n    /**\n     * Creates MLDocumentSkewCorrectionAnalyzer object\n     *\n     * @return MLDocumentSkewCorrectionAnalyzer\n     */\n    public MLDocumentSkewCorrectionAnalyzer createDocumentSkewCorrectionAnalyzer() {\n        return MLDocumentSkewCorrectionAnalyzerFactory.getInstance()\n                .getDocumentSkewCorrectionAnalyzer(createDscAnalyzerSetting());\n    }\n\n    /**\n     * Create MLSceneDetectionAnalyzer\n     *\n     * @param confidence confidence setting\n     * @return MLSceneDetectionAnalyzer object\n     */\n    public MLSceneDetectionAnalyzer getSceneDetectionAnalyzer(double confidence) {\n        return MLSceneDetectionAnalyzerFactory.getInstance()\n                .getSceneDetectionAnalyzer(createScdAnalyzerSetting(confidence));\n    }\n\n    /**\n     * Creates MLSceneDetectionAnalyzerSetting object\n     *\n     * @param confidence confidence value\n     * @return MLSceneDetectionAnalyzerSetting object\n     */\n    private MLSceneDetectionAnalyzerSetting createScdAnalyzerSetting(double confidence) {\n        return new MLSceneDetectionAnalyzerSetting.Factory().setConfidence((float) confidence).create();\n    }\n\n    /**\n     * Creates MLFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return MLFaceAnalyzer  object\n     */\n    public MLFaceAnalyzer create2DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance().getFaceAnalyzer(createFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzer\n     *\n     * @param faceAnalyzerConfiguration analyzer configuration\n     * @return ML3DFaceAnalyzer object\n     */\n    public ML3DFaceAnalyzer create3DFaceAnalyzer(ReadableMap faceAnalyzerConfiguration) {\n        return MLAnalyzerFactory.getInstance()\n                .get3DFaceAnalyzer(create3DFaceAnalyzerSetting(faceAnalyzerConfiguration));\n    }\n\n    /**\n     * Creates ML3DFaceAnalyzerSetting\n     *\n     * @param readableMap configuration\n     * @return ML3DFaceAnalyzerSetting object\n     */\n    private ML3DFaceAnalyzerSetting create3DFaceAnalyzerSetting(ReadableMap readableMap) {\n        int performanceType = ML3DFaceAnalyzerSetting.TYPE_SPEED;\n        boolean isTracingAllowed = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting object is created using default options.\");\n            return new ML3DFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"ML3DFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n\n        return new ML3DFaceAnalyzerSetting.Factory().setPerformanceType(performanceType)\n                .setTracingAllowed(isTracingAllowed)\n                .create();\n    }\n\n    /**\n     * Creates MLFaceAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLFaceAnalyzerSetting object\n     */\n    private MLFaceAnalyzerSetting createFaceAnalyzerSetting(ReadableMap readableMap) {\n        int featureType = MLFaceAnalyzerSetting.TYPE_FEATURES;\n        int setShapeType = MLFaceAnalyzerSetting.TYPE_SHAPES;\n        int keyPointType = MLFaceAnalyzerSetting.TYPE_KEYPOINTS;\n        int performanceType = MLFaceAnalyzerSetting.TYPE_SPEED;\n        int tracingMode = MLFaceAnalyzerSetting.MODE_TRACING_ROBUST;\n        double minFaceProportion = 0.1d;\n        boolean isPoseDisabled = false;\n        boolean isTracingAllowed = false;\n        boolean isMaxSizeFaceOnly = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFaceAnalyzerSetting object is created using default options.\");\n            return new MLFaceAnalyzerSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"featureType\", ReadableType.Number)) {\n            featureType = readableMap.getInt(\"featureType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting featureType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"keyPointType\", ReadableType.Number)) {\n            keyPointType = readableMap.getInt(\"keyPointType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting keyPointType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"shapeType\", ReadableType.Number)) {\n            setShapeType = readableMap.getInt(\"shapeType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting shapeType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"performanceType\", ReadableType.Number)) {\n            performanceType = readableMap.getInt(\"performanceType\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting performanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tracingMode\", ReadableType.Number)) {\n            tracingMode = readableMap.getInt(\"tracingMode\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting tracingMode option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"minFaceProportion\", ReadableType.Number)) {\n            minFaceProportion = readableMap.getDouble(\"minFaceProportion\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting minFaceProportion option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isMaxSizeFaceOnly\", ReadableType.Boolean)) {\n            isMaxSizeFaceOnly = readableMap.getBoolean(\"isMaxSizeFaceOnly\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isMaxSizeFaceOnly option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isTracingAllowed\", ReadableType.Boolean)) {\n            isTracingAllowed = readableMap.getBoolean(\"isTracingAllowed\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isTracingAllowed option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isPoseDisabled\", ReadableType.Boolean)) {\n            isPoseDisabled = readableMap.getBoolean(\"isPoseDisabled\");\n            Log.i(TAG, \"MLFaceAnalyzerSetting isPoseDisabled option set\");\n        }\n\n        return new MLFaceAnalyzerSetting.Factory().setFeatureType(featureType)\n                .setKeyPointType(keyPointType)\n                .setMaxSizeFaceOnly(isMaxSizeFaceOnly)\n                .setMinFaceProportion((float) minFaceProportion)\n                .setPerformanceType(performanceType)\n                .setPoseDisabled(isPoseDisabled)\n                .setShapeType(setShapeType)\n                .setTracingAllowed(isTracingAllowed, tracingMode)\n                .create();\n    }\n\n    /**\n     * Creates and returns MLSkeletonAnalyzer object\n     *\n     * @param analyzeType analyze type\n     * @return MLSkeletonAnalyzer object\n     */\n    public MLSkeletonAnalyzer createSkeletonAnalyzer(int analyzeType) {\n        return MLSkeletonAnalyzerFactory.getInstance().getSkeletonAnalyzer(createSkeletonAnalyzerSetting(analyzeType));\n    }\n\n    /**\n     * Creates MLSkeletonAnalyzerSetting object\n     *\n     * @param analyzerType analyze type\n     * @return MLSkeletonAnalyzerSetting object\n     */\n    private MLSkeletonAnalyzerSetting createSkeletonAnalyzerSetting(int analyzerType) {\n        return new MLSkeletonAnalyzerSetting.Factory().setAnalyzerType(analyzerType).create();\n    }\n\n    /**\n     * Create MLHandKeypointAnalyzer\n     *\n     * @param analyzerSetting configuration\n     * @return MLHandKeypointAnalyzer\n     */\n    public MLHandKeypointAnalyzer createHandKeyPointAnalyzer(ReadableMap analyzerSetting) {\n        return MLHandKeypointAnalyzerFactory.getInstance()\n                .getHandKeypointAnalyzer(createHandKeyPointAnalyzerSetting(analyzerSetting));\n    }\n\n    /**\n     * Creates MLHandKeypointAnalyzerSetting object\n     *\n     * @param readableMap configuration\n     * @return MLHandKeypointAnalyzerSetting object\n     */\n    private MLHandKeypointAnalyzerSetting createHandKeyPointAnalyzerSetting(ReadableMap readableMap) {\n        int maxHandResults = 10;\n        int sceneType = MLHandKeypointAnalyzerSetting.TYPE_ALL;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting object is created using default options.\");\n            return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n                    .setSceneType(sceneType)\n                    .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sceneType\", ReadableType.Number)) {\n            sceneType = readableMap.getInt(\"sceneType\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting sceneType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxHandResults\", ReadableType.Number)) {\n            maxHandResults = readableMap.getInt(\"maxHandResults\") <= 0 ? 10 : readableMap.getInt(\"maxHandResults\");\n            Log.i(TAG, \"MLHandKeyPointAnalyzerSetting maxHandResults option set.\");\n        }\n\n        return new MLHandKeypointAnalyzerSetting.Factory().setMaxHandResults(maxHandResults)\n                .setSceneType(sceneType)\n                .create();\n    }\n\n    /**\n     * Creates MLFrame object to use analyze\n     *\n     * @param frameConfiguration keys and values to create MLFrame from existing methods\n     * @param context ReactApplicationContext\n     * @return MLFrame object or null\n     */\n    public MLFrame createFrame(ReadableMap frameConfiguration, ReactApplicationContext context) {\n        if (frameConfiguration == null) {\n            Log.i(TAG, \"MLFrame frameConfiguration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(frameConfiguration.getString(\"bitmap\"), Base64.DEFAULT);\n            return MLFrame.fromBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bytes\", ReadableType.Map)) {\n            ReadableMap bytes = frameConfiguration.getMap(\"bytes\");\n            if (HMSUtils.getInstance().hasValidKey(bytes, \"frameProperty\", ReadableType.Map) && HMSUtils.getInstance()\n                    .hasValidKey(bytes, \"values\", ReadableType.Array)) {\n                MLFrame.Property property = createFrameProperty(bytes.getMap(\"frameProperty\"));\n                ReadableArray values = bytes.getArray(\"values\");\n                return MLFrame.fromByteArray(HMSUtils.getInstance().convertRaToByteArray(values), property);\n            } else {\n                Log.i(TAG, \"MLFrame bytes object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"byteBuffer\", ReadableType.Map)) {\n            ReadableMap byteBuffer = frameConfiguration.getMap(\"byteBuffer\");\n            if (HMSUtils.getInstance().hasValidKey(byteBuffer, \"buffer\", ReadableType.String) && HMSUtils.getInstance()\n                    .hasValidKey(byteBuffer, \"frameProperty\", ReadableType.Map)) {\n                MLFrame.Property frameProperty = createFrameProperty(byteBuffer.getMap(\"frameProperty\"));\n                String buffer = byteBuffer.getString(\"buffer\");\n                return MLFrame.fromByteBuffer(\n                        HMSUtils.getInstance().convertByteArrToByteBuffer(Base64.decode(buffer, Base64.DEFAULT)),\n                        frameProperty);\n            } else {\n                Log.i(TAG, \"MLFrame byteBuffer object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"filePath\", ReadableType.String)) {\n            try {\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                        Uri.parse(frameConfiguration.getString(\"filePath\")));\n                return new MLFrame.Creator().setBitmap(bitmap).create();\n            } catch (Exception e) {\n                Log.i(TAG, \"MLFrame exception happened fromFilePath \" + e.getMessage());\n                return null;\n            }\n\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"creator\", ReadableType.Map)) {\n            ReadableMap creator = frameConfiguration.getMap(\"creator\");\n            return createFrameUsingCreator(creator);\n        } else {\n            Log.i(TAG, \"MLFrame frameConfiguration does not contain keys for creating a frame\");\n            return null;\n        }\n    }\n\n    /**\n     * Creates MLFrame.Property object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property object\n     */\n    private MLFrame.Property createFrameProperty(ReadableMap readableMap) {\n        MLFrame.Property.Creator creator = new MLFrame.Property.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame.Property object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n            creator.setWidth(readableMap.getInt(\"width\"));\n            Log.i(TAG, \"MLFrame.Property width option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n            creator.setHeight(readableMap.getInt(\"height\"));\n            Log.i(TAG, \"MLFrame.Property height option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame.Property quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"formatType\", ReadableType.Number)) {\n            creator.setFormatType(readableMap.getInt(\"formatType\"));\n            Log.i(TAG, \"MLFrame.Property formatType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame.Property itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.Number)) {\n            creator.setTimestamp(readableMap.getInt(\"timeStamp\"));\n            Log.i(TAG, \"MLFrame.Property timeStamp option set.\");\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates MLFrame.Property.Ext object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property.Ext object\n     */\n    private MLFrame.Property.Ext createFramePropertyExt(ReadableMap readableMap) {\n        int lensId = 0;\n        int maxZoom = 0;\n        int zoom = 0;\n        int bottom = 0;\n        int left = 0;\n        int right = 0;\n        int top = 0;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrameProperty.Ext object is created using default options.\");\n            return new MLFrame.Property.Ext.Creator().build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"lensId\", ReadableType.Number)) {\n            lensId = readableMap.getInt(\"lensId\");\n            Log.i(TAG, \"MLFrameProperty.Ext lensId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxZoom\", ReadableType.Number)) {\n            maxZoom = readableMap.getInt(\"maxZoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext maxZoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"zoom\", ReadableType.Number)) {\n            zoom = readableMap.getInt(\"zoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext zoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"bottom\", ReadableType.Number)) {\n            bottom = readableMap.getInt(\"bottom\");\n            Log.i(TAG, \"MLFrameProperty.Ext bottom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"left\", ReadableType.Number)) {\n            left = readableMap.getInt(\"left\");\n            Log.i(TAG, \"MLFrameProperty.Ext left option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"right\", ReadableType.Number)) {\n            right = readableMap.getInt(\"right\");\n            Log.i(TAG, \"MLFrameProperty.Ext right option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"top\", ReadableType.Number)) {\n            top = readableMap.getInt(\"top\");\n            Log.i(TAG, \"MLFrameProperty.Ext top option set.\");\n        }\n        return new MLFrame.Property.Ext.Creator().setLensId(lensId)\n                .setMaxZoom(maxZoom)\n                .setRect(new Rect(left, top, right, bottom))\n                .setZoom(zoom)\n                .build();\n    }\n\n    /**\n     * Creates MLFrame using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame object\n     */\n    private MLFrame createFrameUsingCreator(ReadableMap readableMap) {\n        MLFrame.Creator creator = new MLFrame.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame given ReadableMap object is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"base64Bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(readableMap.getString(\"base64Bitmap\"), Base64.DEFAULT);\n            creator.setBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n            Log.i(TAG, \"MLFrame base64Bitmap option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.String)) {\n            creator.setTimestamp(Long.parseLong(readableMap.getString(\"timeStamp\")));\n            Log.i(TAG, \"MLFrame timeStamp option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"framePropertyExt\", ReadableType.Map)) {\n            creator.setFramePropertyExt(createFramePropertyExt(readableMap.getMap(\"framePropertyExt\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"writeByteBufferData\", ReadableType.Map)) {\n            ReadableMap writeByteBufferData = readableMap.getMap(\"writeByteBufferData\");\n            if (HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"data\", ReadableType.String)\n                    && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"height\", ReadableType.Number)\n                    && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"width\", ReadableType.Number)\n                    && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"formatType\", ReadableType.Number)) {\n\n                ByteBuffer bufferData = HMSUtils.getInstance()\n                        .convertByteArrToByteBuffer(Base64.decode(writeByteBufferData.getString(\"data\"), Base64.DEFAULT));\n                int height = writeByteBufferData.getInt(\"height\");\n                int width = writeByteBufferData.getInt(\"width\");\n                int formatType = writeByteBufferData.getInt(\"formatType\");\n                creator.writeByteBufferData(bufferData, width, height, formatType);\n                Log.i(TAG, \"MLFrame writeByteBufferData option set.\");\n            } else {\n                Log.i(TAG, \"MLFrame writeByteBufferData option keys are not valid.\");\n            }\n\n        }\n\n        return creator.create();\n    }\n\n\n    /**\n     * Creates MLImageSegmentationSetting object\n     *\n     * @param readableMap configuration\n     * @return MLImageSegmentationSetting object\n     */\n    private MLImageSegmentationSetting createImageSegmentationSetting(ReadableMap readableMap) {\n        int analyzerType = MLImageSegmentationSetting.BODY_SEG;\n        int scene = MLImageSegmentationScene.ALL;\n        boolean exact = true;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLImageSegmentationSetting object is being created...\");\n            return new MLImageSegmentationSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"analyzerType\", ReadableType.Number)) {\n            analyzerType = readableMap.getInt(\"analyzerType\");\n            Log.i(TAG, \"MLImageSegmentationSetting analyzerType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"scene\", ReadableType.Number)) {\n            scene = readableMap.getInt(\"scene\");\n            Log.i(TAG, \"MLImageSegmentationSetting scene option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"exact\", ReadableType.Boolean)) {\n            exact = readableMap.getBoolean(\"exact\");\n            Log.i(TAG, \"MLImageSegmentationSetting exact option set.\");\n        }\n\n        return new MLImageSegmentationSetting.Factory().setScene(scene)\n                .setAnalyzerType(analyzerType)\n                .setExact(exact)\n                .create();\n    }\n\n    /**\n     * Creates MLDocumentSkewCorrectionAnalyzerSetting object\n     *\n     * @return MLDocumentSkewCorrectionAnalyzerSetting object\n     */\n    private MLDocumentSkewCorrectionAnalyzerSetting createDscAnalyzerSetting() {\n        return new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();\n    }\n\n    /**\n     * Creates MLCompositeAnalyzer\n     *\n     * @param readableMap analyzer configurations\n     * @return MLCompositeAnalyzer\n     */\n    public MLCompositeAnalyzer createCompositeAnalyzer(ReadableMap readableMap) {\n        MLCompositeAnalyzer.Creator creator = new MLCompositeAnalyzer.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLCompositeAnalyzer object created with local text analyzer.\");\n            return creator.add(createTextAnalyzer(null, false)).create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"face\", ReadableType.Map)) {\n            ReadableMap face = readableMap.getMap(\"face\");\n            if (HMSUtils.getInstance().boolKeyCheck(face, \"isFace2D\")) {\n                Log.i(TAG, \"MLCompositeAnalyzer added face2D analyzer\");\n                creator.add(create2DFaceAnalyzer(face));\n            } else {\n                Log.i(TAG, \"MLCompositeAnalyzer added face3D analyzer\");\n                creator.add(create3DFaceAnalyzer(face));\n            }\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"hand\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added hand analyzer\");\n            creator.add(createHandKeyPointAnalyzer(readableMap.getMap(\"hand\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"skeleton\", ReadableType.Number)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added skeleton analyzer\");\n            creator.add(createSkeletonAnalyzer(readableMap.getInt(\"skeleton\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"text\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added text analyzer\");\n            creator.add(createTextAnalyzer(readableMap.getMap(\"text\"),\n                    HMSUtils.getInstance().boolKeyCheck(readableMap.getMap(\"text\"), \"isRemote\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"object\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added object analyzer\");\n            creator.add(createObjectAnalyzer(readableMap.getMap(\"object\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"classification\", ReadableType.Map)) {\n            Log.i(TAG, \"MLCompositeAnalyzer added classification analyzer\");\n            creator.add(createClassificationAnalyzer(\n                    HMSUtils.getInstance().boolKeyCheck(readableMap.getMap(\"classification\"), \"isRemote\"),\n                    readableMap.getMap(\"classification\")));\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates LensEngine\n     *\n     * @param context context object\n     * @param analyzer analyzer\n     * @param configuration configurations for LensEngine\n     * @return LensEngine object\n     */\n    public LensEngine createLensEngine(ReactApplicationContext context, MLAnalyzer analyzer,\n                                       ReadableMap configuration) {\n        int width = 1440;\n        int height = 1080;\n        float fps = 30.0f;\n        boolean automaticFocus = false;\n        String flashMode = Camera.Parameters.FLASH_MODE_OFF;\n        String focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO;\n        int lensType = LensEngine.BACK_LENS;\n\n        if (configuration == null) {\n            Log.i(TAG, \"LensEngine created with default options\");\n            return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n                    .setFocusMode(focusMode)\n                    .setFlashMode(flashMode)\n                    .enableAutomaticFocus(false)\n                    .applyFps(fps)\n                    .applyDisplayDimension(width, height)\n                    .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"width\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine width set\");\n            width = configuration.getInt(\"width\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"height\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine height set\");\n            height = configuration.getInt(\"height\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"lensType\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine lensType set\");\n            lensType = configuration.getInt(\"lensType\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"fps\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine fps set\");\n            fps = (float) configuration.getDouble(\"fps\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"automaticFocus\", ReadableType.Boolean)) {\n            Log.i(TAG, \"LensEngine automaticFocus set\");\n            automaticFocus = configuration.getBoolean(\"automaticFocus\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"flashMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine flashMode set\");\n            flashMode = configuration.getString(\"flashMode\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"focusMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine focusMode set\");\n            focusMode = configuration.getString(\"focusMode\");\n        }\n\n        return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n                .setFocusMode(focusMode)\n                .setFlashMode(flashMode)\n                .enableAutomaticFocus(automaticFocus)\n                .applyFps(fps)\n                .applyDisplayDimension(width, height)\n                .create();\n    }\n\n    /**\n     * Creates analyzer for lens engine\n     *\n     * @param analyzer analyzer tag number\n     * @param analyzerConfig analyzer configuration for related tag\n     * @param context app context\n     * @return MLAnalyzer\n     */\n    public MLAnalyzer createLensEngineAnalyzer(int analyzer, ReadableMap analyzerConfig,\n                                               ReactApplicationContext context) {\n        switch (analyzer) {\n            case 4:\n                MLImageClassificationAnalyzer classificationAnalyzer = createClassificationAnalyzer(false,\n                        analyzerConfig);\n                classificationAnalyzer.setTransactor(new HMSClassificationAnalyzerTransactor(context));\n                return classificationAnalyzer;\n            case 5:\n                MLObjectAnalyzer objectAnalyzer = createObjectAnalyzer(analyzerConfig);\n                objectAnalyzer.setTransactor(new HMSObjectAnalyzerTransactor(context));\n                return objectAnalyzer;\n            case 6:\n                double confidence = HMSUtils.getInstance()\n                        .hasValidKey(analyzerConfig, \"confidence\", ReadableType.Number) ? analyzerConfig.getInt(\n                        \"confidence\") : 0.0;\n                MLSceneDetectionAnalyzer sceneDetectionAnalyzer = MLSceneDetectionAnalyzerFactory.getInstance()\n                        .getSceneDetectionAnalyzer(createScdAnalyzerSetting(confidence));\n                sceneDetectionAnalyzer.setTransactor(new HMSSceneDetectionAnalyzerTransactor(context));\n                return sceneDetectionAnalyzer;\n            default:\n                return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/creators/HMSResultCreator.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.creators;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.graphics.Point;\nimport android.graphics.Rect;\nimport android.text.TextUtils;\nimport android.util.SparseArray;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.huawei.hms.common.size.Size;\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.common.MLCoordinate;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionResult;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentation;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmark;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLProductVisionSearch;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProduct;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProductImage;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetection;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolution;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\npublic class HMSResultCreator {\n    private static volatile HMSResultCreator instance;\n\n    private static Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().create();\n\n    public static HMSResultCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSResultCreator.class) {\n                if (instance == null) {\n                    instance = new HMSResultCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts point to WritableMap\n     *\n     * @param point x and y values container\n     * @return WritableMap\n     */\n    private WritableMap getPoint(Point point) {\n        WritableMap map = Arguments.createMap();\n        map.putInt(\"y\", point.y);\n        map.putInt(\"x\", point.x);\n        return map;\n    }\n\n    /**\n     * Converts Rect to WritableMap\n     *\n     * @param border rect object\n     * @return WritableMap\n     */\n    private WritableMap getBorders(Rect border) {\n        WritableMap writableMap = Arguments.createMap();\n        writableMap.putInt(\"left\", border.left);\n        writableMap.putInt(\"right\", border.right);\n        writableMap.putInt(\"top\", border.top);\n        writableMap.putInt(\"down\", border.bottom);\n        return writableMap;\n    }\n\n    /**\n     * Converts result to WritableMap\n     *\n     * @param result classification result list\n     * @return WritableMap\n     */\n    public WritableMap getImageClassificationResult(List<MLImageClassification> result) {\n        WritableMap classificationResult = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLImageClassification classification : result) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"classificationIdentity\", classification.getClassificationIdentity());\n            wm.putString(\"name\", classification.getName());\n            wm.putDouble(\"possibility\", classification.getPossibility());\n            wa.pushMap(wm);\n        }\n        classificationResult.putArray(\"result\", wa);\n        return classificationResult;\n    }\n\n    /**\n     * Converts result to WritableMap\n     *\n     * @param result sparse array result of classification\n     * @return WritableMap\n     */\n    public WritableMap getImageClassificationResult(SparseArray<MLImageClassification> result) {\n        return getImageClassificationResult(HMSUtils.getInstance().convertSparseArrayToList(result));\n    }\n\n    /**\n     * Convert object recognition list result to WritableMap\n     *\n     * @param list object recognition list\n     * @return WritableMap\n     */\n    public WritableMap getObjectResult(List<MLObject> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLObject object : list) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putInt(\"tracingIdentity\",\n                object.getTracingIdentity() == null ? 0 : object.getTracingIdentity());\n            writableMap.putInt(\"typeIdentity\", object.getTypeIdentity());\n            writableMap.putDouble(\"typePossibility\",\n                object.getTypePossibility() == null ? 0.0 : object.getTypePossibility());\n            writableMap.putMap(\"border\", getBorders(object.getBorder()));\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Convert object recognition array result to WritableMap\n     *\n     * @param result sparse array result\n     * @return WritableMap\n     */\n    public WritableMap getObjectResult(SparseArray<MLObject> result) {\n        return getObjectResult(HMSUtils.getInstance().convertSparseArrayToList(result));\n    }\n\n    /**\n     * Converts coordinates to WritableArray\n     *\n     * @param coordinates list of coordinates\n     * @return WritableArray\n     */\n    private WritableArray getCoordinates(List<MLCoordinate> coordinates) {\n        WritableArray wa = Arguments.createArray();\n        for (MLCoordinate coordinate : coordinates) {\n            WritableMap wm = Arguments.createMap();\n            wm.putDouble(\"latitude\", coordinate.getLat());\n            wm.putDouble(\"longitude\", coordinate.getLng());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Convert landmark recognition results to WritableArray\n     *\n     * @param landmarkResults landmark recognition results\n     * @return WritableMap\n     */\n    public WritableMap getLandmarkDetectionResults(List<MLRemoteLandmark> landmarkResults) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLRemoteLandmark landMark : landmarkResults) {\n            WritableMap temp = Arguments.createMap();\n            temp.putString(\"landMark\", landMark.getLandmark());\n            temp.putDouble(\"possibility\", landMark.getPossibility());\n            temp.putArray(\"coordinates\", getCoordinates(landMark.getPositionInfos()));\n            temp.putMap(\"border\", getBorders(landMark.getBorder()));\n            wa.pushMap(temp);\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation image segmentation results\n     * @param context app contextl\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public WritableMap getImageSegmentationResult(ReactApplicationContext context,\n        SparseArray<MLImageSegmentation> imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < imageSegmentation.size(); i++) {\n            wa.pushMap(getImageSegmentationResult(context, imageSegmentation.get(i), isBodySeg));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation image segmentation results\n     * @param context app context\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public WritableMap getImageSegmentationAsyncResult(ReactApplicationContext context,\n        MLImageSegmentation imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getImageSegmentationResult(context, imageSegmentation, isBodySeg));\n        return wm;\n    }\n\n    /**\n     * Converts image segmentation result list to WritableMap\n     *\n     * @param imageSegmentation result of segmentation\n     * @param context app context\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    private WritableMap getImageSegmentationResult(ReactApplicationContext context,\n        MLImageSegmentation imageSegmentation, boolean isBodySeg) {\n        WritableMap wm = Arguments.createMap();\n\n        Bitmap grayScale = null;\n        if (!isBodySeg) {\n            grayScale = createFromMask(imageSegmentation);\n        } else {\n            wm.putString(\"foreground\",\n                HMSUtils.getInstance().saveImageAndGetUri(context, imageSegmentation.getForeground()));\n            grayScale = imageSegmentation.getGrayscale();\n        }\n        wm.putString(\"grayscale\", HMSUtils.getInstance().saveImageAndGetUri(context, grayScale));\n        wm.putArray(\"masks\", masksToWA(imageSegmentation.getMasks()));\n\n        return wm;\n    }\n\n    private Bitmap createFromMask(MLImageSegmentation imageSegmentation) {\n        byte[] masks = imageSegmentation.getMasks();\n        int[] results = new int[masks.length];\n        for (int i = 0; i < masks.length; i++) {\n            if (masks[i] == 1) {\n                results[i] = Color.WHITE;\n            } else if (masks[i] == 2) {\n                results[i] = Color.BLUE;\n            } else if (masks[i] == 3) {\n                results[i] = Color.DKGRAY;\n            } else if (masks[i] == 4) {\n                results[i] = Color.YELLOW;\n            } else if (masks[i] == 5) {\n                results[i] = Color.LTGRAY;\n            } else if (masks[i] == 6) {\n                results[i] = Color.CYAN;\n            } else if (masks[i] == 7) {\n                results[i] = Color.RED;\n            } else if (masks[i] == 8) {\n                results[i] = Color.GRAY;\n            } else if (masks[i] == 9) {\n                results[i] = Color.MAGENTA;\n            } else if (masks[i] == 10) {\n                results[i] = Color.GREEN;\n            } else {\n                results[i] = Color.BLACK;\n            }\n        }\n\n        return Bitmap.createBitmap(results, 0, imageSegmentation.getOriginal().getWidth(),\n            imageSegmentation.getOriginal().getWidth(), imageSegmentation.getOriginal().getHeight(),\n            Bitmap.Config.ARGB_8888);\n    }\n\n    private WritableArray masksToWA(byte[] masks) {\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < masks.length; i++) {\n            wa.pushInt(masks[i]);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts product vision search result to WritableMap\n     *\n     * @param resultList product vision search result list\n     * @return WritableMap\n     */\n    public WritableMap getProductVisionSearchResult(List<MLProductVisionSearch> resultList) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLProductVisionSearch result : resultList) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"type\", result.getType());\n            writableMap.putArray(\"products\", productListArray(result.getProductList()));\n            writableMap.putMap(\"border\", getBorders(result.getBorder()));\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts product list to WritableArray\n     *\n     * @param products product list\n     * @return WritableArray\n     */\n    private WritableArray productListArray(List<MLVisionSearchProduct> products) {\n        WritableArray array = Arguments.createArray();\n        for (MLVisionSearchProduct result : products) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"productId\", result.getProductId());\n            writableMap.putString(\"productUrl\", result.getProductUrl());\n            writableMap.putString(\"customContent\", result.getCustomContent());\n            writableMap.putArray(\"images\", productImages(result.getImageList()));\n            writableMap.putDouble(\"possibility\", result.getPossibility());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Converts product iamges to WritableArray\n     *\n     * @param images product images\n     * @return WritableArray\n     */\n    private WritableArray productImages(List<MLVisionSearchProductImage> images) {\n        WritableArray array = Arguments.createArray();\n        for (MLVisionSearchProductImage image : images) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"imageId\", image.getImageId());\n            writableMap.putString(\"productId\", image.getProductId());\n            writableMap.putDouble(\"possibility\", image.getPossibility());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Converts image super resolution results to WritableArray\n     *\n     * @param context Context object\n     * @param results image super resolution results\n     * @return WritableArray\n     */\n    public WritableMap getMLImageSuperResolutionResults(ReactApplicationContext context,\n        SparseArray<MLImageSuperResolutionResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushString(HMSUtils.getInstance().saveImageAndGetUri(context, results.get(i).getBitmap()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection results to WritableMap\n     *\n     * @param results document skew detect results\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewDetectResults(SparseArray<MLDocumentSkewDetectResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushMap(getDocumentSkewDetectResult(results.get(i)));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection result to WritableMap\n     *\n     * @param result document skew detect result\n     * @return WritableMap\n     */\n    private WritableMap getDocumentSkewDetectResult(MLDocumentSkewDetectResult result) {\n        WritableMap wm = Arguments.createMap();\n        wm.putMap(\"leftBottomPosition\",\n            result.getLeftBottomPosition() == null ? Arguments.createMap() : getPoint(result.getLeftBottomPosition()));\n        wm.putMap(\"leftTopPosition\",\n            result.getLeftTopPosition() == null ? Arguments.createMap() : getPoint(result.getLeftTopPosition()));\n        wm.putMap(\"rightBottomPosition\", result.getRightBottomPosition() == null\n            ? Arguments.createMap()\n            : getPoint(result.getRightBottomPosition()));\n        wm.putMap(\"rightTopPosition\",\n            result.getRightTopPosition() == null ? Arguments.createMap() : getPoint(result.getRightTopPosition()));\n        return wm;\n    }\n\n    /**\n     * Converts document skew detection result to WritableMap\n     *\n     * @param result document skew detect result\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewDetectAsyncResult(MLDocumentSkewDetectResult result) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", getDocumentSkewDetectResult(result));\n        return wm;\n    }\n\n    /**\n     * Converts document skew correction results to WritableMap\n     *\n     * @param context Context object\n     * @param results Document skew correction results\n     * @return WritableMap\n     */\n    public WritableMap getDocumentSkewCorrectionResult(ReactApplicationContext context,\n        SparseArray<MLDocumentSkewCorrectionResult> results) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < results.size(); i++) {\n            wa.pushString(HMSUtils.getInstance().saveImageAndGetUri(context, results.get(i).getCorrected()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts text image super resolution result list WritableMap\n     *\n     * @param context app context\n     * @param textImageSuperResolution text image super resolution result list\n     * @return WritableMap\n     */\n    public WritableMap getTextImageSuperResolutionResult(ReactApplicationContext context,\n        SparseArray<MLTextImageSuperResolution> textImageSuperResolution) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (int i = 0; i < textImageSuperResolution.size(); i++) {\n            wa.pushString(\n                HMSUtils.getInstance().saveImageAndGetUri(context, textImageSuperResolution.get(i).getBitmap()));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts sparse array Scene detection result to WritableMap\n     *\n     * @param sceneDetection scene detection result array\n     * @return WritableMap\n     */\n    public WritableMap getSceneDetectionResultSync(SparseArray<MLSceneDetection> sceneDetection) {\n        return getSceneDetectionResultAsync(HMSUtils.getInstance().convertSparseArrayToList(sceneDetection));\n    }\n\n    /**\n     * Converts sparse array Scene detection result to WritableArray\n     *\n     * @param sceneDetection scene detection result array\n     * @return WritableArray\n     */\n    public WritableMap getSceneDetectionResultAsync(List<MLSceneDetection> sceneDetection) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", getSceneDetectionResult(sceneDetection));\n        return wm;\n    }\n\n    /**\n     * Converts Scene detection result list to WritableArray\n     *\n     * @param results scene detection result list\n     * @return WritableArray\n     */\n    private WritableArray getSceneDetectionResult(List<MLSceneDetection> results) {\n        WritableArray wa = Arguments.createArray();\n        for (MLSceneDetection result : results) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"result\", result.getResult());\n            wm.putDouble(\"confidence\", result.getConfidence());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    public <T> Map<String, Object> toMap(T obj) {\n        return gson.fromJson(gson.toJson(obj), Map.class);\n    }\n\n    public WritableMap getCompositeResult(Object obj) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        Map<String, Object> res = toMap(obj);\n        Arguments.makeNativeMap(res);\n        wm.putMap(\"result\", Arguments.makeNativeMap(res));\n        return wm;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param integer method result\n     * @return WritableMap\n     */\n    public WritableMap integerResult(int integer) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"result\", integer);\n        return wm;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param set method result\n     * @return WritableMap\n     */\n    public WritableMap stringSetResult(Set<String> set) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        if (set != null) {\n            for (String element : set) {\n                wa.pushString(element);\n            }\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param string result\n     * @return WritableMap\n     */\n    public WritableMap getStringResult(String string) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(string) ? \"\" : string);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param is result\n     * @return WritableMap\n     */\n    public WritableMap getBooleanResult(boolean is) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putBoolean(\"result\", is);\n        return wm;\n    }\n\n    /**\n     * converts float result to WritableMap\n     *\n     * @param aFloat method result\n     * @return WritableMap\n     */\n    public WritableMap floatResult(Float aFloat) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putDouble(\"result\", aFloat);\n        return wm;\n    }\n\n    /**\n     * Converts string list to result\n     *\n     * @param list data list\n     * @return WritableMap\n     */\n    public WritableMap stringListResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(list));\n        return wm;\n    }\n\n    /**\n     * Converts display dimension to result\n     *\n     * @param displayDimension preview size\n     * @return WritableMap\n     */\n    public WritableMap displayDimensionResult(Size displayDimension) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"width\", displayDimension.getWidth());\n        wm.putInt(\"height\", displayDimension.getHeight());\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/fragments/HMSProductFragment.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.fragments;\n\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLProductVisionSearch;\nimport com.huawei.hms.mlsdk.productvisionsearch.MLVisionSearchProduct;\nimport com.huawei.hms.rn.mlimage.R;\nimport com.huawei.hms.rn.mlimage.helpers.adapters.HMSBottomSheetAdapter;\nimport com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.models.HMSProductModel;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSLogger;\nimport com.huawei.hms.rn.mlimage.helpers.views.HMSBottomSheetGridView;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class HMSProductFragment extends MLProductVisionSearchCapture.AbstractProductFragment<HMSProductModel> {\n    private static final String TAG = HMSProductFragment.class.getSimpleName();\n\n    private List<HMSProductModel> productList = new ArrayList<>();\n\n    private View productView;\n\n    private HMSBottomSheetGridView gridView;\n\n    private HMSBottomSheetAdapter bottomSheetAdapter;\n\n    private ReactApplicationContext reactApplicationContext;\n\n    public HMSProductFragment(ReactApplicationContext context) {\n        reactApplicationContext = context;\n    }\n\n    @Override\n    public void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n\n    @Nullable\n    @Override\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,\n        @Nullable Bundle savedInstanceState) {\n        productView = inflater.inflate(R.layout.hms_product_fragment, container, false);\n        gridView = productView.findViewById(R.id.hms_bottom_sheet_grid_view);\n        gridView.setNumColumns(2);\n        bottomSheetAdapter = new HMSBottomSheetAdapter(getContext(), productList);\n        gridView.setAdapter(bottomSheetAdapter);\n        return productView;\n    }\n\n    @Override\n    public List<HMSProductModel> getProductList(List<MLProductVisionSearch> list) {\n        return obtainProducts(list);\n    }\n\n    @Override\n    public void onResult(List<HMSProductModel> list) {\n        if (null == list || list.isEmpty()) {\n            Log.i(TAG, \"onResult list is empty\");\n            return;\n        }\n        Log.i(TAG, list.toString());\n        productList.clear();\n        productList.addAll(list);\n        bottomSheetAdapter.notifyDataSetChanged();\n    }\n\n    @Override\n    public boolean onError(Exception e) {\n        return false;\n    }\n\n    private List<HMSProductModel> obtainProducts(List<MLProductVisionSearch> list) {\n        List<HMSProductModel> productBeans = new ArrayList<>();\n        for (MLProductVisionSearch mlProductVisionSearch : list) {\n            for (MLVisionSearchProduct product : mlProductVisionSearch.getProductList()) {\n                HMSProductModel productBean = new HMSProductModel();\n                productBean.setImgUrl(product.getImageList().get(0).getImageId());\n                productBean.setName(product.getProductId());\n                productBeans.add(productBean);\n            }\n        }\n        sendEvent(HMSResultCreator.getInstance().getProductVisionSearchResult(list));\n        return productBeans;\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param params WritableMap object that contains related keys and values\n     */\n    private void sendEvent(WritableMap params) {\n        HMSLogger.getInstance(reactApplicationContext).sendSingleEvent(\"onResult\");\n        reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n            .emit(HMSConstants.PRODUCT_ON_RESULT, params);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/models/HMSProductModel.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.models;\n\npublic class HMSProductModel {\n    private String name;\n\n    private String imgUrl;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getImgUrl() {\n        return imgUrl;\n    }\n\n    public void setImgUrl(String imgUrl) {\n        this.imgUrl = imgUrl;\n    }\n\n}"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/transactors/HMSBaseTransactor.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.transactors;\n\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\npublic class HMSBaseTransactor {\n    private ReactApplicationContext applicationContext;\n\n    private HMSLogger logger;\n\n    HMSBaseTransactor(ReactApplicationContext context) {\n        applicationContext = context;\n        logger = HMSLogger.getInstance(applicationContext);\n    }\n\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/transactors/HMSClassificationAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.CLASSIFICATION_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.CLASSIFICATION_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSClassificationAnalyzerTransactor extends HMSBaseTransactor\n    implements MLAnalyzer.MLTransactor<MLImageClassification> {\n\n    public HMSClassificationAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(CLASSIFICATION_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLImageClassification> result) {\n        sendEvent(CLASSIFICATION_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getImageClassificationResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/transactors/HMSObjectAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.OBJECT_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.OBJECT_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.objects.MLObject;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSObjectAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLObject> {\n\n    public HMSObjectAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(OBJECT_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLObject> result) {\n        sendEvent(OBJECT_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getObjectResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/transactors/HMSSceneDetectionAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.transactors;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.SCENE_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.SCENE_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetection;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSSceneDetectionAnalyzerTransactor extends HMSBaseTransactor\n    implements MLAnalyzer.MLTransactor<MLSceneDetection> {\n\n    public HMSSceneDetectionAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(SCENE_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLSceneDetection> result) {\n        sendEvent(SCENE_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getSceneDetectionResultSync(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/utils/HMSBackgroundTasks.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.utils;\n\nimport android.graphics.Bitmap;\nimport android.util.SparseArray;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hmf.tasks.Tasks;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionResult;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentation;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolution;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\n\npublic final class HMSBackgroundTasks {\n    private static volatile HMSBackgroundTasks instance;\n\n    public static HMSBackgroundTasks getInstance() {\n        if (instance == null) {\n            synchronized (HMSBackgroundTasks.class) {\n                if (instance == null) {\n                    instance = new HMSBackgroundTasks();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Handles single image saving task\n     *\n     * @param context app context\n     * @param image image to be saved\n     * @return WritableMap\n     */\n    public Task<String> saveImageAndGetUri(ReactApplicationContext context, Bitmap image) {\n        return Tasks.callInBackground(() -> HMSUtils.getInstance().saveImageAndGetUri(context, image));\n    }\n\n    /**\n     * Handles saving segmentation images task\n     *\n     * @param context app context\n     * @param segmentation segmentation result\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSegmentationImages(ReactApplicationContext context,\n        MLImageSegmentation segmentation, boolean isBodySeg) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getImageSegmentationAsyncResult(context, segmentation, isBodySeg));\n    }\n\n    /**\n     * Handles saving segmentation images task\n     *\n     * @param context app context\n     * @param segmentation segmentation result\n     * @param isBodySeg analyzer type\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSegmentationImages(ReactApplicationContext context,\n        SparseArray<MLImageSegmentation> segmentation, boolean isBodySeg) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getImageSegmentationResult(context, segmentation, isBodySeg));\n    }\n\n    /**\n     * Handles saving super resolution images task\n     *\n     * @param context app context\n     * @param result analyze method  result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveImageSuperResolutionImages(ReactApplicationContext context,\n        SparseArray<MLImageSuperResolutionResult> result) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getMLImageSuperResolutionResults(context, result));\n    }\n\n    /**\n     * Handles saving document skew correction images task\n     *\n     * @param context app context\n     * @param results correction result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveDscImages(ReactApplicationContext context,\n        SparseArray<MLDocumentSkewCorrectionResult> results) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getDocumentSkewCorrectionResult(context, results));\n    }\n\n    /**\n     * Handles saving text image super resolution images task\n     *\n     * @param context app context\n     * @param results super resolution result\n     * @return WritableMap\n     */\n    public Task<WritableMap> saveTextImageSuperResolutionImages(ReactApplicationContext context,\n        SparseArray<MLTextImageSuperResolution> results) {\n        return Tasks.callInBackground(\n            () -> HMSResultCreator.getInstance().getTextImageSuperResolutionResult(context, results));\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/utils/HMSLogger.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"MLImage\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.11.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/utils/HMSUtils.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Point;\nimport android.provider.MediaStore;\nimport android.util.SparseArray;\nimport android.view.SurfaceHolder;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayOutputStream;\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\npublic final class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    private SurfaceHolder surfaceViewHolder;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            synchronized (HMSUtils.class) {\n                if (instance == null) {\n                    instance = new HMSUtils();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts JSONObject to WritableMap\n     *\n     * @param jsonObject JSONObject\n     * @return WritableMap\n     * @throws JSONException jsonObject.get throws it\n     */\n    public WritableMap convertJsonToWritableMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = Arguments.createMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts JSONArray to WritableArray\n     *\n     * @param jsonArray JSONArray\n     * @return WritableArray\n     * @throws JSONException jsonObject.get throws it\n     */\n    private WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n\n        return array;\n    }\n\n    /**\n     * Converts ReadableArray to Point list\n     *\n     * @param ra readable array\n     * @return point list\n     */\n    public List<Point> convertRaToPointList(ReadableArray ra) {\n        List<Point> pointList = new ArrayList<>();\n        for (int i = 0; i < ra.size(); i++) {\n            pointList.add(new Point(ra.getMap(i).getInt(\"x\"), ra.getMap(i).getInt(\"y\")));\n        }\n        return pointList;\n    }\n\n    /**\n     * Converts ReadableArray to String List\n     *\n     * @param readableArray array\n     * @return List\n     */\n    public List<String> readableArrayIntoStringList(ReadableArray readableArray) {\n        if (readableArray.size() == 0) {\n            return Collections.emptyList();\n        }\n        List<String> arrList = new ArrayList<>();\n        for (int i = 0; i < readableArray.size(); i++) {\n            arrList.add(readableArray.getString(i));\n        }\n        return arrList;\n    }\n\n    /**\n     * Converts string list to WritableArray\n     *\n     * @param list list of strings\n     * @return WritableArray\n     */\n    public WritableArray convertStringListIntoWa(List<String> list) {\n        WritableArray writableArray = Arguments.createArray();\n        for (String value : list) {\n            writableArray.pushString(value);\n        }\n        return writableArray;\n    }\n\n    /**\n     * Checks if ReadableMap has valid key\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @param type key's type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Checks boolean key is valid or not and if valid then returns its value\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @return true or false\n     */\n    public boolean boolKeyCheck(ReadableMap readableMap, String key) {\n        if (!hasValidKey(readableMap, key, ReadableType.Boolean)) {\n            return false;\n        }\n        return readableMap.getBoolean(key);\n    }\n\n    /**\n     * Converts byte array to WritableArray\n     *\n     * @param ba byte array\n     * @return WritableArray\n     */\n    public WritableArray convertByteArrToWa(byte[] ba) {\n        WritableArray wa = Arguments.createArray();\n        for (byte b : ba) {\n            wa.pushInt(b);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts ReadableArray to byte array\n     *\n     * @param ra ReadableArray\n     * @return byte array\n     */\n    public byte[] convertRaToByteArray(ReadableArray ra) {\n        byte[] bytes = new byte[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            bytes[i] = (byte) ra.getInt(i);\n        }\n        return bytes;\n    }\n\n    /**\n     * Converts byte array to byte buffer\n     *\n     * @param arr byte array\n     * @return byte buffer\n     */\n    public ByteBuffer convertByteArrToByteBuffer(byte[] arr) {\n        return ByteBuffer.wrap(arr);\n    }\n\n    /**\n     * Converts sparse array to list\n     *\n     * @param result sparse array of any type\n     * @param <T> generic parameter\n     * @return List\n     */\n    public <T> List<T> convertSparseArrayToList(SparseArray<T> result) {\n        List<T> converted = new ArrayList<>();\n        for (int i = 0; i < result.size(); i++) {\n            converted.add(result.get(result.keyAt(i)));\n        }\n        return converted;\n    }\n\n    /**\n     * Converts ReadableArray to String Set\n     *\n     * @param ra ReadableArray\n     * @return String Set\n     */\n    public Set<String> convertRaToStringSet(ReadableArray ra) {\n        Set<String> word = new HashSet<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.String) {\n                word.add(ra.getString(i));\n            }\n        }\n        return word;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convert2DFloatArrToWa(Float[][] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr[0]) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convertFloatArrToWa(Float[] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Save image to gallery\n     *\n     * @param inContext app context\n     * @param inImage bitmap image\n     * @return image uri\n     */\n    public String saveImageAndGetUri(Context inContext, Bitmap inImage) {\n        ByteArrayOutputStream bytes = new ByteArrayOutputStream();\n        inImage.compress(Bitmap.CompressFormat.JPEG, 90, bytes);\n        return MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, null, null);\n    }\n\n    /**\n     * Sets the holder for lensEngine\n     *\n     * @param surfaceViewHolder holder\n     */\n    public void setSurfaceViewHolder(SurfaceHolder surfaceViewHolder) {\n        this.surfaceViewHolder = surfaceViewHolder;\n    }\n\n    /**\n     * Returns the holder for lensEngine\n     *\n     * @return holder\n     */\n    public SurfaceHolder getSurfaceViewHolder() {\n        return surfaceViewHolder;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/views/HMSBottomSheetGridView.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.MotionEvent;\nimport android.widget.AbsListView;\nimport android.widget.GridView;\n\npublic class HMSBottomSheetGridView extends GridView {\n\n    public HMSBottomSheetGridView(Context context) {\n        super(context);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public boolean onInterceptHoverEvent(MotionEvent event) {\n        return true;\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    @Override\n    public boolean onTouchEvent(MotionEvent ev) {\n        if (canScrollVertically(this)) {\n            getParent().requestDisallowInterceptTouchEvent(true);\n        }\n        return super.onTouchEvent(ev);\n    }\n\n    private boolean canScrollVertically(AbsListView view) {\n        boolean canScroll = false;\n        if (view != null && view.getChildCount() > 0) {\n            boolean isOnTop = view.getFirstVisiblePosition() != 0 || view.getChildAt(0).getTop() != 0;\n\n            if (isOnTop) {\n                canScroll = true;\n            }\n        }\n        return canScroll;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/views/HMSCustomSurfaceView.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.views;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_SURFACE_ON_CHANGED;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_SURFACE_ON_CREATED;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LENS_SURFACE_ON_DESTROY;\n\nimport android.content.Context;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\n\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSCustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback {\n    private ThemedReactContext applicationContext;\n\n    public HMSCustomSurfaceView(Context context) {\n        super(context);\n        applicationContext = (ThemedReactContext) context;\n        HMSUtils.getInstance().setSurfaceViewHolder(getHolder());\n        getHolder().addCallback(this);\n    }\n\n    @Override\n    public void surfaceCreated(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_CREATED, null);\n    }\n\n    @Override\n    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"format\", i);\n        wm.putInt(\"width\", i1);\n        wm.putInt(\"height\", i2);\n        sendEvent(LENS_SURFACE_ON_CHANGED, wm);\n    }\n\n    @Override\n    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_DESTROY, null);\n    }\n\n    private void sendEvent(String eventName, WritableMap params) {\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/helpers/views/HMSSurfaceView.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.helpers.views;\n\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSSurfaceView extends SimpleViewManager<HMSCustomSurfaceView> {\n\n    @Override\n    public String getName() {\n        return HMSSurfaceView.class.getSimpleName();\n    }\n\n    @Override\n    protected HMSCustomSurfaceView createViewInstance(ThemedReactContext reactContext) {\n        return new HMSCustomSurfaceView(reactContext);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSDocumentSkewCorrection.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.DSC_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionAnalyzer;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionConstant;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionCoordinateInput;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewCorrectionResult;\nimport com.huawei.hms.mlsdk.dsc.MLDocumentSkewDetectResult;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSDocumentSkewCorrection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSDocumentSkewCorrection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSDocumentSkewCorrection.class.getSimpleName(), DSC_CONSTANTS);\n    }\n\n    /**\n     * Synchronous calling entry for text box tilt detection\n     *\n     * @param isStop releases analyzer resources\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        SparseArray<MLDocumentSkewDetectResult> result = dscAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopAnalyzer(dscAnalyzer);\n        }\n\n        if (result != null && result.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n            handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getDocumentSkewDetectResults(result), promise);\n        } else {\n            handleResult(\"analyzeFrame\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Asynchronous calling entry for text box tilt detection.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncDocumentSkewDetect(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncDocumentSkewDetect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncDocumentSkewDetect\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        dscAnalyzer.asyncDocumentSkewDetect(frame).addOnSuccessListener(result -> {\n            if (isStop) {\n                stopAnalyzer(dscAnalyzer);\n            }\n\n            if (result.getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    HMSResultCreator.getInstance().getDocumentSkewDetectAsyncResult(result), promise);\n            } else if (result.getResultCode() == MLDocumentSkewCorrectionConstant.DETECT_FAILED) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.DETECT_FAILED, \"Detection Failure\"),\n                    promise);\n            } else if (result.getResultCode() == MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR) {\n                handleResult(\"asyncDocumentSkewDetect\",\n                    FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR, \"Image Data Error\"),\n                    promise);\n            } else {\n                handleResult(\"asyncDocumentSkewDetect\", FAILURE, promise);\n            }\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(dscAnalyzer);\n            }\n            handleResult(\"asyncDocumentSkewDetect\", e, promise);\n        });\n    }\n\n    /**\n     * Asynchronous calling entry for text box tilt correction.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame configuration\n     * @param points points to be corrected\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncDocumentSkewCorrect(boolean isStop, ReadableMap frameConfiguration, ReadableArray points,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncDocumentSkewCorrect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncDocumentSkewCorrect\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (points.size() == 0) {\n            handleResult(\"asyncDocumentSkewCorrect\", FAILURE.getStatusAndMessage(null, \"Points array size is 0\"),\n                promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        dscAnalyzer.asyncDocumentSkewCorrect(frame,\n            new MLDocumentSkewCorrectionCoordinateInput(HMSUtils.getInstance().convertRaToPointList(points)))\n            .addOnSuccessListener(mlDocumentSkewCorrectionResult -> {\n                if (isStop) {\n                    stopAnalyzer(dscAnalyzer);\n                }\n\n                if (mlDocumentSkewCorrectionResult.getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n                    HMSBackgroundTasks.getInstance()\n                        .saveImageAndGetUri(getContext(), mlDocumentSkewCorrectionResult.getCorrected())\n                        .addOnSuccessListener(string -> handleResult(\"asyncDocumentSkewCorrect\",\n                            HMSResultCreator.getInstance().getStringResult(string), promise))\n                        .addOnFailureListener(e -> handleResult(\"asyncDocumentSkewCorrect\", e, promise));\n                } else if (mlDocumentSkewCorrectionResult.getResultCode()\n                    == MLDocumentSkewCorrectionConstant.CORRECTION_FAILED) {\n                    handleResult(\"asyncDocumentSkewCorrect\",\n                        FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.CORRECTION_FAILED,\n                            \"Detection Failure\"), promise);\n                } else if (mlDocumentSkewCorrectionResult.getResultCode()\n                    == MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR) {\n                    handleResult(\"asyncDocumentSkewCorrect\",\n                        FAILURE.getStatusAndMessage(MLDocumentSkewCorrectionConstant.IMAGE_DATA_ERROR,\n                            \"Image Data Error\"), promise);\n                } else {\n                    handleResult(\"asyncDocumentSkewCorrect\", FAILURE, promise);\n                }\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    stopAnalyzer(dscAnalyzer);\n                }\n                handleResult(\"asyncDocumentSkewCorrect\", e, promise);\n            });\n    }\n\n    /**\n     * Synchronous calling entry for text box tilt correction.\n     *\n     * @param isStop releases analyzer resources\n     * @param frameConfiguration frame configuration\n     * @param points points to be corrected\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncDocumentSkewCorrect(boolean isStop, ReadableMap frameConfiguration, ReadableArray points,\n        final Promise promise) {\n        startMethodExecTimer(\"syncDocumentSkewCorrect\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"syncDocumentSkewCorrect\", FRAME_NULL, promise);\n            return;\n        }\n\n        if (points.size() == 0) {\n            handleResult(\"syncDocumentSkewCorrect\", FAILURE.getStatusAndMessage(null, \"Points array size is 0\"),\n                promise);\n            return;\n        }\n\n        MLDocumentSkewCorrectionAnalyzer dscAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentSkewCorrectionAnalyzer();\n        SparseArray<MLDocumentSkewCorrectionResult> result = dscAnalyzer.syncDocumentSkewCorrect(frame,\n            new MLDocumentSkewCorrectionCoordinateInput(HMSUtils.getInstance().convertRaToPointList(points)));\n\n        if (isStop) {\n            stopAnalyzer(dscAnalyzer);\n        }\n\n        if (result != null && result.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {\n            HMSBackgroundTasks.getInstance()\n                .saveDscImages(getContext(), result)\n                .addOnSuccessListener(writableMap -> handleResult(\"syncDocumentSkewCorrect\", writableMap, promise))\n                .addOnFailureListener(e -> handleResult(\"syncDocumentSkewCorrect\", e, promise));\n        } else {\n            handleResult(\"syncDocumentSkewCorrect\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param dscAnalyzer document skew correction\n     */\n    private void stopAnalyzer(MLDocumentSkewCorrectionAnalyzer dscAnalyzer) {\n        try {\n            dscAnalyzer.stop();\n            Log.i(getName(), \"MLDocumentSkewCorrectionAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLDocumentSkewCorrectionAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSFrame.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.FRAME_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSFrame extends HMSBase {\n\n    /**\n     * Sets module name and frame constants\n     *\n     * @param reactContext context\n     */\n    public HMSFrame(ReactApplicationContext reactContext) {\n        super(reactContext, HMSFrame.class.getSimpleName(), FRAME_CONSTANTS);\n    }\n\n    /**\n     * Obtains bitmap data of the preview image.\n     *\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getPreviewBitmap(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"getPreviewBitmap\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"getPreviewBitmap\", FRAME_NULL, promise);\n            return;\n        }\n\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), frame.getPreviewBitmap())\n            .addOnSuccessListener(\n                string -> handleResult(\"getPreviewBitmap\", HMSResultCreator.getInstance().getStringResult(string),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"getPreviewBitmap\", e, promise));\n    }\n\n    /**\n     * Obtains bitmap data of a converted image.\n     *\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void readBitmap(ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"readBitmap\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"readBitmap\", FRAME_NULL, promise);\n            return;\n        }\n\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), frame.readBitmap())\n            .addOnSuccessListener(\n                s -> handleResult(\"readBitmap\", HMSResultCreator.getInstance().getStringResult(s), promise))\n            .addOnFailureListener(e -> handleResult(\"readBitmap\", e, promise));\n    }\n\n    /**\n     * Rotates the bitmap of a preview image based on the screen orientation.\n     *\n     * @param quadrant screen quadrant\n     * @param fileUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void rotate(int quadrant, String fileUri, final Promise promise) {\n        startMethodExecTimer(\"rotate\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(fileUri));\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), MLFrame.rotate(bitmap, quadrant))\n                .addOnSuccessListener(\n                    s -> handleResult(\"rotate\", HMSResultCreator.getInstance().getStringResult(s), promise))\n                .addOnFailureListener(e -> handleResult(\"rotate\", e, promise));\n        } catch (IOException e) {\n            handleResult(\"rotate\", e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSImageClassification.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.classification.MLImageClassification;\nimport com.huawei.hms.mlsdk.classification.MLImageClassificationAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSImageClassification extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSImageClassification(ReactApplicationContext context) {\n        super(context, HMSImageClassification.class.getSimpleName(), null);\n    }\n\n    /**\n     * Classifies images by synchronous processing.\n     *\n     * @param isRemote if true classifies on-cloud otherwise on-device\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerSetting, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageClassificationAnalyzer classificationAnalyzer = HMSObjectCreator.getInstance()\n            .createClassificationAnalyzer(isRemote, analyzerSetting);\n        SparseArray<MLImageClassification> results = classificationAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopSilent(classificationAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getImageClassificationResult(results), promise);\n    }\n\n    /**\n     * Classifies images by asynchronous processing.\n     *\n     * @param isRemote if true classifies on-cloud otherwise on-device\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerSetting, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageClassificationAnalyzer classificationAnalyzer = HMSObjectCreator.getInstance()\n            .createClassificationAnalyzer(isRemote, analyzerSetting);\n        classificationAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlImageClassifications -> {\n            if (isStop) {\n                stopSilent(classificationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getImageClassificationResult(mlImageClassifications), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(classificationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param classificationAnalyzer analyzer\n     */\n    private void stopSilent(MLImageClassificationAnalyzer classificationAnalyzer) {\n        try {\n            classificationAnalyzer.stop();\n            Log.i(getName(), \"MLImageClassificationAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLImageClassificationAnalyzer stop\" + e.getMessage());\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSImageSegmentation.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.IMSEG_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.imgseg.MLImageSegmentationAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.IOException;\n\npublic class HMSImageSegmentation extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSImageSegmentation(ReactApplicationContext context) {\n        super(context, HMSImageSegmentation.class.getSimpleName(), IMSEG_CONSTANTS);\n    }\n\n    /**\n     * Implements image segmentation in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        boolean isBodySeg = true;\n        if (analyzerConfiguration != null && HMSUtils.getInstance()\n            .hasValidKey(analyzerConfiguration, \"analyzerType\", ReadableType.Number)) {\n            int analyzerType = analyzerConfiguration.getInt(\"analyzerType\");\n            isBodySeg = analyzerType == (int) (IMSEG_CONSTANTS.get(\"BODY_SEG\"));\n        }\n        boolean finalIsBodySeg = isBodySeg;\n\n        MLImageSegmentationAnalyzer imageSegmentationAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSegmentationAnalyzer(analyzerConfiguration);\n        HMSBackgroundTasks.getInstance()\n            .saveImageSegmentationImages(getContext(), imageSegmentationAnalyzer.analyseFrame(frame), finalIsBodySeg)\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    stopSilent(imageSegmentationAnalyzer);\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    stopSilent(imageSegmentationAnalyzer);\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Implements image segmentation in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        boolean isBodySeg = true;\n        if (analyzerConfiguration != null && HMSUtils.getInstance()\n            .hasValidKey(analyzerConfiguration, \"analyzerType\", ReadableType.Number)) {\n            int analyzerType = analyzerConfiguration.getInt(\"analyzerType\");\n            isBodySeg = analyzerType == (int) (IMSEG_CONSTANTS.get(\"BODY_SEG\"));\n        }\n        boolean finalIsBodySeg = isBodySeg;\n\n        MLImageSegmentationAnalyzer imageSegmentationAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSegmentationAnalyzer(analyzerConfiguration);\n        imageSegmentationAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(imageSegmentation -> {\n            HMSBackgroundTasks.getInstance()\n                .saveImageSegmentationImages(getContext(), imageSegmentation, finalIsBodySeg)\n                .addOnSuccessListener(writableMap -> {\n                    if (isStop) {\n                        stopSilent(imageSegmentationAnalyzer);\n                    }\n                    handleResult(\"asyncAnalyzeFrame\", writableMap, promise);\n                })\n                .addOnFailureListener(e -> {\n                    if (isStop) {\n                        stopSilent(imageSegmentationAnalyzer);\n                    }\n                    handleResult(\"asyncAnalyzeFrame\", e, promise);\n                });\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(imageSegmentationAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param imageSegmentationAnalyzer analyzer\n     */\n    private void stopSilent(MLImageSegmentationAnalyzer imageSegmentationAnalyzer) {\n        try {\n            imageSegmentationAnalyzer.stop();\n            Log.i(getName(), \"MLImageSegmentationAnalyzer stop : OK\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLImageSegmentationAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSImageSuperResolution.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.IMAGE_RESOLUTION_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.imagesuperresolution.MLImageSuperResolutionAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSImageSuperResolution extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSImageSuperResolution(ReactApplicationContext reactContext) {\n        super(reactContext, HMSImageSuperResolution.class.getSimpleName(), IMAGE_RESOLUTION_CONSTANTS);\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the synchronous method.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame obtaining configuration\n     * @param scale scale config\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, float scale, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSuperResolutionAnalyzer(scale);\n        HMSBackgroundTasks.getInstance()\n            .saveImageSuperResolutionImages(getContext(), imageSuperResolutionAnalyzer.analyseFrame(frame))\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the asynchronous method.\n     *\n     * @param isStop releases resources of analyzer\n     * @param frameConfiguration frame obtaining configuration\n     * @param scale scale config\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, float scale, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer = HMSObjectCreator.getInstance()\n            .createImageSuperResolutionAnalyzer(scale);\n        imageSuperResolutionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlImageSuperResolutionResult -> {\n            if (isStop) {\n                imageSuperResolutionAnalyzer.stop();\n            }\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), mlImageSuperResolutionResult.getBitmap())\n                .addOnSuccessListener(\n                    string -> handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getStringResult(string),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"asyncAnalyzeFrame\", e, promise));\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                imageSuperResolutionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSLandmarkRecognition.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.LANDMARK_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.landmark.MLRemoteLandmarkAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSLandmarkRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSLandmarkRecognition(ReactApplicationContext context) {\n        super(context, HMSLandmarkRecognition.class.getSimpleName(), LANDMARK_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Recognizes landmarks in images by asynchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param landmarkAnalyzerConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap landmarkAnalyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyseFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLRemoteLandmarkAnalyzer remoteLandmarkAnalyzer = HMSObjectCreator.getInstance()\n            .createLandmarkAnalyzer(landmarkAnalyzerConfiguration);\n        remoteLandmarkAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlRemoteLandmarks -> {\n            if (isStop) {\n                stopAnalyzer(remoteLandmarkAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getLandmarkDetectionResults(mlRemoteLandmarks), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(remoteLandmarkAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param landmarkAnalyzer analyzer\n     */\n    private void stopAnalyzer(@Nonnull MLRemoteLandmarkAnalyzer landmarkAnalyzer) {\n        try {\n            landmarkAnalyzer.stop();\n            Log.i(getName(), \"MLRemoteLandmarkAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLRemoteLandmarkAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSObjectRecognition.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.OBJECT_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.objects.MLObjectAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.io.IOException;\n\npublic class HMSObjectRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSObjectRecognition(ReactApplicationContext context) {\n        super(context, HMSObjectRecognition.class.getSimpleName(), OBJECT_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Recognizes objects in images by asynchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param objectAnalyzerSettingConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap objectAnalyzerSettingConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLObjectAnalyzer objectAnalyzer = HMSObjectCreator.getInstance()\n            .createObjectAnalyzer(objectAnalyzerSettingConfiguration);\n        objectAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(list -> {\n            if (isStop) {\n                stopAnalyzer(objectAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getObjectResult(list), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(objectAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Recognizes objects in images by synchronous processing.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param objectAnalyzerSettingConfiguration Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap objectAnalyzerSettingConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLObjectAnalyzer objectAnalyzer = HMSObjectCreator.getInstance()\n            .createObjectAnalyzer(objectAnalyzerSettingConfiguration);\n        WritableMap objectResult = HMSResultCreator.getInstance().getObjectResult(objectAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            stopAnalyzer(objectAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", objectResult, promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param objectAnalyzer analyzer\n     */\n    private void stopAnalyzer(MLObjectAnalyzer objectAnalyzer) {\n        try {\n            objectAnalyzer.stop();\n            Log.i(getName(), \"MLObjectAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLObjectAnalyzer stop:\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSProductVisionSearch.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSConstants.PRODUCT_VISION_CONSTANTS;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\n\nimport com.huawei.hms.mlplugin.productvisionsearch.MLProductVisionSearchCapture;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.productvisionsearch.cloud.MLRemoteProductVisionSearchAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.drawee.backends.pipeline.Fresco;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSProductVisionSearch extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSProductVisionSearch(ReactApplicationContext context) {\n        super(context, HMSProductVisionSearch.class.getSimpleName(), PRODUCT_VISION_CONSTANTS);\n        Fresco.initialize(context);\n    }\n\n    /**\n     * Asynchronous product search\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration Frame configuration to obtain frame\n     * @param analyzerSetting Setting for creating analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLRemoteProductVisionSearchAnalyzer remoteProductVisionSearchAnalyzer = HMSObjectCreator.getInstance()\n            .createProductVisionSearchAnalyzer(analyzerSetting);\n        remoteProductVisionSearchAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlProductVisionSearches -> {\n            if (isStop) {\n                remoteProductVisionSearchAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getProductVisionSearchResult(mlProductVisionSearches), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                remoteProductVisionSearchAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Start product vision search plugin\n     *\n     * @param pluginConfiguration plugin configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startProductVisionSearchCapturePlugin(ReadableMap pluginConfiguration, final Promise promise) {\n        startMethodExecTimer(\"startProductVisionSearchCapturePlugin\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"startProductVisionSearchCapturePlugin\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLProductVisionSearchCapture capture = HMSObjectCreator.getInstance()\n            .createProductVisionSearchCapture(pluginConfiguration, getContext());\n        capture.startCapture(currentActivity);\n        handleResult(\"startProductVisionSearchCapturePlugin\", SUCCESS, promise);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSSceneDetection.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.scd.MLSceneDetectionAnalyzer;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSSceneDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSceneDetection(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSceneDetection.class.getSimpleName(), null);\n    }\n\n    /**\n     * Detects scene information in an input image in synchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param confidence confidence value\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, double confidence, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSceneDetectionAnalyzer sceneDetectionAnalyzer = HMSObjectCreator.getInstance()\n            .getSceneDetectionAnalyzer(confidence);\n        WritableMap result = HMSResultCreator.getInstance()\n            .getSceneDetectionResultSync(sceneDetectionAnalyzer.analyseFrame(frame));\n\n        if (isStop) {\n            sceneDetectionAnalyzer.stop();\n        }\n\n        handleResult(\"analyzeFrame\", result, promise);\n    }\n\n    /**\n     * Detects scene information in an input image in asynchronous mode.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param confidence confidence value\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, double confidence, ReadableMap frameConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLSceneDetectionAnalyzer sceneDetectionAnalyzer = HMSObjectCreator.getInstance()\n            .getSceneDetectionAnalyzer(confidence);\n        sceneDetectionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlSceneDetections -> {\n            if (isStop) {\n                sceneDetectionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\",\n                HMSResultCreator.getInstance().getSceneDetectionResultAsync(mlSceneDetections), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                sceneDetectionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/java/com/huawei/hms/rn/mlimage/imagerelatedservices/HMSTextImageSuperResolution.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mlimage.imagerelatedservices;\n\nimport static com.huawei.hms.rn.mlimage.helpers.constants.HMSResults.FRAME_NULL;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolutionAnalyzer;\nimport com.huawei.hms.mlsdk.textimagesuperresolution.MLTextImageSuperResolutionAnalyzerFactory;\nimport com.huawei.hms.rn.mlimage.HMSBase;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mlimage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mlimage.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSTextImageSuperResolution extends HMSBase {\n\n    /**\n     * Initializes modules\n     *\n     * @param reactContext app context\n     */\n    public HMSTextImageSuperResolution(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextImageSuperResolution.class.getSimpleName(), null);\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the synchronous method.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextImageSuperResolutionAnalyzer imageSuperResolutionAnalyzer\n            = MLTextImageSuperResolutionAnalyzerFactory.getInstance().getTextImageSuperResolutionAnalyzer();\n        HMSBackgroundTasks.getInstance()\n            .saveTextImageSuperResolutionImages(getContext(), imageSuperResolutionAnalyzer.analyseFrame(frame))\n            .addOnSuccessListener(writableMap -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", writableMap, promise);\n            })\n            .addOnFailureListener(e -> {\n                if (isStop) {\n                    imageSuperResolutionAnalyzer.stop();\n                }\n                handleResult(\"analyzeFrame\", e, promise);\n            });\n    }\n\n    /**\n     * Performs super-resolution processing on the source image using the asynchronous method.\n     *\n     * @param isStop Releases resources for analyzer. Recommended to use on latest frame\n     * @param frameConfiguration configuration to obtain frame\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextImageSuperResolutionAnalyzer textImageSuperResolutionAnalyzer\n            = MLTextImageSuperResolutionAnalyzerFactory.getInstance().getTextImageSuperResolutionAnalyzer();\n        textImageSuperResolutionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(textImageSuperResolution -> {\n            if (isStop) {\n                textImageSuperResolutionAnalyzer.stop();\n            }\n            HMSBackgroundTasks.getInstance()\n                .saveImageAndGetUri(getContext(), textImageSuperResolution.getBitmap())\n                .addOnSuccessListener(\n                    string -> handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getStringResult(string),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"asyncAnalyzeFrame\", e, promise));\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                textImageSuperResolutionAnalyzer.stop();\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/res/layout/hms_product_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.huawei.hms.rn.mlimage.helpers.views.HMSBottomSheetGridView\n            android:id=\"@+id/hms_bottom_sheet_grid_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:columnCount=\"2\" />\n\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mlimage/android/src/main/res/layout/hms_product_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:fresco=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.facebook.drawee.view.SimpleDraweeView\n            android:id=\"@+id/hms_product_item_image_view\"\n            android:layout_width=\"120dp\"\n            android:layout_height=\"120dp\"\n            android:layout_gravity=\"center\"\n            fresco:failureImage=\"@android:drawable/ic_menu_gallery\"\n            fresco:placeholderImage=\"@android:drawable/ic_menu_gallery\" />\n\n    <TextView\n            android:id=\"@+id/hms_product_item_text_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:gravity=\"center\"\n            android:textColor=\"@android:color/black\"\n            android:textSize=\"16sp\" />\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mlimage/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\npackage-lock.json"
  },
  {
    "path": "react-native-hms-mlimage/example/App.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image, LogBox} from 'react-native';\nimport { styles } from './src/Styles';\nimport StartPage from './src/StartPage';\nimport ImageClassification from './src/HmsImageRelatedServices/ImageClassification';\nimport ObjectDetection from './src/HmsImageRelatedServices/ObjectDetection';\nimport LandmarkRecognition from './src/HmsImageRelatedServices/LandmarkRecognition';\nimport ImageSegmentation from './src/HmsImageRelatedServices/ImageSegmentation';\nimport ProductVisualSearch from './src/HmsImageRelatedServices/ProductVisualSearch';\nimport ImageSuperResolution from './src/HmsImageRelatedServices/ImageSuperResolution';\nimport DocumentSkewCorrection from './src/HmsImageRelatedServices/DocumentSkewCorrection';\nimport TextImageSuperResolution from './src/HmsImageRelatedServices/TextImageSuperResolution';\nimport SceneDetection from './src/HmsImageRelatedServices/SceneDetection';\nimport Frame from './src/HmsImageRelatedServices/Frame';\nimport ClassificationLive from './src/HmsImageRelatedServices/ImageClassificationLive';\nimport ObjectDetectionLive from './src/HmsImageRelatedServices/ObjectDetectionLive';\nimport SceneDetectionLive from './src/HmsImageRelatedServices/SceneDetectionLive';\nimport CompositeAnalyzer from './src/HmsOtherServices/HMSCompositeAnalyzer';\n\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'Hms React Native ML Image Kit Demo',\n    },\n    path: 'start',\n  },\n  ImageClassification: {\n    screen: ImageClassification,\n    navigationOptions: {\n      headerTitle: 'Image Classification',\n    },\n    path: 'start/classification',\n  },\n  ObjectDetection: {\n    screen: ObjectDetection,\n    navigationOptions: {\n      headerTitle: 'Object Detection',\n    },\n    path: 'start/objectdetection',\n  },\n  LandmarkRecognition: {\n    screen: LandmarkRecognition,\n    navigationOptions: {\n      headerTitle: 'Landmark Recognition',\n    },\n    path: 'start/landmarkrecognition',\n  },\n  ImageSegmentation: {\n    screen: ImageSegmentation,\n    navigationOptions: {\n      headerTitle: 'Image Segmentation',\n    },\n    path: 'start/imseg',\n  },\n  ProductVisualSearch: {\n    screen: ProductVisualSearch,\n    navigationOptions: {\n      headerTitle: 'Product Vision Search',\n    },\n    path: 'start/productvision',\n  },\n  ImageSuperResolution: {\n    screen: ImageSuperResolution,\n    navigationOptions: {\n      headerTitle: 'Image Super Resolution',\n    },\n    path: 'start/imagesuperresolution',\n  },\n  DocumentSkewCorrection: {\n    screen: DocumentSkewCorrection,\n    navigationOptions: {\n      headerTitle: 'Document Skew Correction',\n    },\n    path: 'start/documentskewcorrection',\n  },\n  TextImageSuperResolution: {\n    screen: TextImageSuperResolution,\n    navigationOptions: {\n      headerTitle: 'Text Image Super Resolution',\n    },\n    path: 'start/textimagesuperresolution',\n  },\n  SceneDetection: {\n    screen: SceneDetection,\n    navigationOptions: {\n      headerTitle: 'Scene Detection',\n    },\n    path: 'start/scenedetection',\n  },\n  Frame: {\n    screen: Frame,\n    navigationOptions: {\n      headerTitle: 'Frame',\n    },\n    path: 'start/frame',\n  },\n  ClassificationLive: {\n    screen: ClassificationLive,\n    navigationOptions: {\n      headerTitle: 'Image Classification Live',\n    },\n    path: 'start/classificationlive',\n  },\n  ObjectDetectionLive: {\n    screen: ObjectDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Object Detection Live',\n    },\n    path: 'start/objectdetectionlive',\n  },\n  SceneDetectionLive: {\n    screen: SceneDetectionLive,\n    navigationOptions: {\n      headerTitle: 'Scene Detection Live',\n    },\n    path: 'start/scenedetectionlive',\n  },\n  CompositeAnalyzer: {\n    screen: CompositeAnalyzer,\n    navigationOptions: {\n      headerTitle: 'Composite Analyzer',\n    },\n    path: 'start/compositeanalyzer',\n  },\n};\n\nLogBox.ignoreLogs([\"EventEmitter\"]);\n\nexport default class App extends Component {\n  state = {\n    pageItem: {\n      screen: StartPage,\n      navigationOptions: {\n        headerTitle: 'Hms React Native ML Image Kit Demo',\n      },\n      path: 'start',\n    },\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mlimage/example/README.md",
    "content": "# React-Native HMS ML Image - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native ML Image Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm install\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS ML Image - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile: \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    implementation \"com.facebook.react:react-native:+\"\n\timplementation project(\":react-native-hms-mlimage\")\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n\n    implementation 'com.android.support:multidex:1.0.3'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.ml.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n                     android:maxSdkVersion=\"29\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n\n\n    <application\n            android:name=\"com.huawei.hms.rn.ml.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/logo\"\n            android:label=\"RN ML Demo\"\n            android:roundIcon=\"@mipmap/logo\"\n            android:theme=\"@style/AppTheme\"\n            android:largeHeap=\"true\"\n            android:requestLegacyExternalStorage=\"true\">\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.ml.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RN ML Demo\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/src/main/java/com/huawei/hms/rn/ml/demo/MainActivity.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ml.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.mlimage.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/src/main/java/com/huawei/hms/rn/ml/demo/MainApplication.java",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.ml.demo;\n\nimport android.app.Application;\n\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n    }\n    repositories {\n        mavenCentral()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        classpath 'com.huawei.agconnect:agcp:1.6.0.300'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        google()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Aug 02 14:07:06 TRT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx2048m\n"
  },
  {
    "path": "react-native-hms-mlimage/example/android/settings.gradle",
    "content": "rootProject.name = 'com.huawei.hms.rn.ml.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/react-native-gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-mlimage/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.mlimage.demo\",\n  \"displayName\": \"HMS RN ML IMAGE DEMO\"\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/babel.config.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-mlimage/example/index.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-mlimage/example/metro.config.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-mlimage/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mlimage-demo\",\n  \"description\": \"React Native HMS ML Image Kit Demo\",\n  \"version\": \"3.11.0-300\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"@hmscore/react-native-hms-mlimage\": \"3.11.0-300\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.71.7\",\n    \"react-native-image-picker\": \"5.6.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/runtime\": \"^7.6.2\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/DocumentSkewCorrection.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSDocumentSkewCorrection } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class DocumentSkewCorrection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      points: [],\n      corrected: '',\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncDocumentSkewDetect() {\n    try {\n      var result = await HMSDocumentSkewCorrection.asyncDocumentSkewDetect(true, this.getFrameConfiguration());\n      console.log(result);\n      if (result.status == HMSDocumentSkewCorrection.SUCCESS) {\n        this.state.points.push({ x: result.result.leftTopPosition.x, y: result.result.leftTopPosition.y });\n        this.state.points.push({ x: result.result.rightTopPosition.x, y: result.result.rightTopPosition.y });\n        this.state.points.push({ x: result.result.rightBottomPosition.x, y: result.result.rightBottomPosition.y });\n        this.state.points.push({ x: result.result.leftBottomPosition.x, y: result.result.leftBottomPosition.y });\n        this.setState({ points: this.state.points });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncDocumentSkewCorrect() {\n    try {\n      var result = await HMSDocumentSkewCorrection.asyncDocumentSkewCorrect(true, this.getFrameConfiguration(), this.state.points);\n      console.log(result);\n      if (result.status == HMSDocumentSkewCorrection.SUCCESS) {\n        const source = { uri: result.result };\n        this.setState({ corrected: source });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      points: []\n    });\n    this.asyncDocumentSkewDetect()\n      .then(() => this.asyncDocumentSkewCorrect())\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Corrected Document Result</Text>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity>\n            {this.state.corrected !== '' && <Image style={styles.imageSelectView} source={this.state.corrected} />}\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze()}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}>ASYNC START</Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/Frame.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { HMSFrame, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class Frame extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      imageResult: '',\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async getPreviewBitmap() {\n    try {\n      var result = await HMSFrame.getPreviewBitmap(this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async readBitmap() {\n    try {\n      var result = await HMSFrame.readBitmap(this.getFrameConfiguration());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async rotate() {\n    try {\n      var result = await HMSFrame.rotate(HMSFrame.SCREEN_THIRD_QUADRANT, this.state.imageUri);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({ imageResult: result.result });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Result Image</Text>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={null}\n            disabled={this.state.isAnalyzeEnabled}>\n          </TouchableOpacity>\n          {this.state.imageResult !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageResult }}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getPreviewBitmap.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Preview Bitmap </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.readBitmap.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Read Bitmap </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.rotate.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Rotate </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ImageClassification.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Switch,\n  Image\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageClassification } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageClassification extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      classificationIdentity: [],\n      name: [],\n      possibility: [],\n      hashCode: [],\n    };\n  }\n\n  getImageClassificationSetting = () => {\n    if (this.state.isEnabled) {\n      return { maxNumberOfReturns: 5, minAcceptablePossibility: 0.8 };\n    }\n    else {\n      return { minAcceptablePossibility: 0.8 };\n    }\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageClassification.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getImageClassificationSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSImageClassification.analyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getImageClassificationSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    result.result.forEach(element => {\n      this.state.classificationIdentity.push(element.classificationIdentity);\n      this.state.name.push(element.name);\n      this.state.possibility.push(element.possibility);\n    });\n    this.setState({ classificationIdentity: this.state.classificationIdentity, name: this.state.name, possibility: this.state.possibility, hashCode: this.state.hashCode });\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      possibility: [],\n      hashCode: [],\n      name: [],\n      classificationIdentity: [],\n      result: 'Recognizing...',\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"RECOGNITION METHOD : \" + (this.state.isEnabled ? 'REMOTE' : 'LOCAL')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.classificationIdentity.toString()}\n          placeholder=\"classification identity\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibility.toString()}\n          placeholder=\"possibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.name.toString()}\n          placeholder=\"name\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> START ASYNC </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> START SYNC </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ImageClassificationLive.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine } from '@hmscore/react-native-hms-mlimage';\nimport { styles } from '../Styles';\n\n\nexport default class ClassificationLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        4,\n        { minAcceptablePossibility: 0.8 }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" classification results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription = Dimensions.addEventListener('change',  () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.CLASSIFICATION_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ImageSegmentation.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  Switch\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageSegmentation, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageSegmentation extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      foreground: '',\n      grayscale: '',\n      isBodySeg: true,\n    };\n  }\n\n  getImSegSetting = () => {\n    return { analyzerType: this.state.isBodySeg ? HMSImageSegmentation.BODY_SEG : HMSImageSegmentation.HAIR_SEG,\n       scene: HMSImageSegmentation.ALL, exact: true };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSImageSegmentation.analyzeFrame(true, this.getFrameConfiguration(), this.getImSegSetting());\n      this.parseResult(result, false);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageSegmentation.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getImSegSetting());\n      this.parseResult(result, true);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result, isAsync) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      if (isAsync) {\n        const first = { uri: result.result.foreground };\n        const second = { uri: result.result.grayscale };\n        this.setState({ foreground: first, grayscale: second });\n      }\n      else {\n        const first = { uri: result.result[0].foreground };\n        const second = { uri: result.result[0].grayscale };\n        this.setState({ foreground: first, grayscale: second });\n      }\n      if(!this.state.isBodySeg) {\n        this.setState({ foreground: ''});\n      }\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      foreground: '',\n      grayscale: '',\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <View style={styles.spaceBetweenRow}>\n          <Text style={styles.boldText}>Hair Segmentation</Text>\n          <Switch\n            thumbColor=\"#2196F3\"\n            trackColor={{ false: \"#b2dfdc\", true: \"#b2dfdc\" }}\n            onValueChange={() => this.setState({isBodySeg: !this.state.isBodySeg})}\n            value={this.state.isBodySeg}\n          />\n          <Text style={styles.boldText}>Body Segmentation</Text>\n          </View>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Results</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.foreground !== '' && this.state.foreground.uri !== undefined &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.foreground}\n            />\n          }\n        </View>\n\n        <View style={styles.containerCenter}>\n          {this.state.grayscale !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.grayscale}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ImageSuperResolution.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSImageSuperResolution, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ImageSuperResolution extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSImageSuperResolution.asyncAnalyzeFrame(true, this.getFrameConfiguration(), HMSImageSuperResolution.ISR_SCALE_3X);\n      if (result.status == HMSApplication.SUCCESS) {\n        const source = { uri: result.result };\n        this.setState({ result: source });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      console.log(result);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Super Resolution 3X Result</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.result !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.result}\n            />\n          }\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.asyncAnalyzeFrame.bind(this)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/LandmarkRecognition.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSLandmarkRecognition, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class LandmarkRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      landmark: [],\n      coordinates: [],\n      possibility: []\n    };\n  }\n\n  getLandmarkAnalyzerSetting = () => {\n    return { largestNumOfReturns: 10, patternType: HMSLandmarkRecognition.STEADY_PATTERN };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSLandmarkRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getLandmarkAnalyzerSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        result.result.forEach(element => {\n          this.state.landmark.push(element.landMark);\n          this.state.possibility.push(element.possibility);\n          long = [];\n          lat = [];\n          element.coordinates.forEach(ll => {\n            long.push(ll.longitude);\n            lat.push(ll.latitude);\n          })\n          this.state.coordinates.push(lat, long);\n        });\n        this.setState({\n          landMark: this.state.landmark,\n          possibility: this.state.possibility,\n          coordinates: this.state.coordinates,\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      landmark: [],\n      possibility: [],\n      coordinates: [],\n    })\n    this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.landmark.toString()}\n          placeholder=\"landmarks\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.coordinates.toString()}\n          placeholder=\"coordinates\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibility.toString()}\n          placeholder=\"possibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageUri == '' ? true : false} >\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ObjectDetection.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSObjectRecognition, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ObjectRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      tracingIdentity: [],\n      typeIdentity: [],\n      typePossibility: [],\n    };\n  }\n\n  getObjectAnalyzerSetting = () => {\n    return { analyzerType: HMSObjectRecognition.TYPE_PICTURE, allowClassification: true, allowMultiResults: true };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSObjectRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getObjectAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSObjectRecognition.analyzeFrame(true, this.getFrameConfiguration(), this.getObjectAnalyzerSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.tracingIdentity.push(element.tracingIdentity);\n        this.state.typeIdentity.push(element.typeIdentity);\n        this.state.typePossibility.push(element.typePossibility);\n      });\n      this.setState({\n        tracingIdentity: this.state.tracingIdentity,\n        typeIdentity: this.state.typeIdentity,\n        typePossibility: this.state.typePossibility,\n      });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      this.setState({\n        tracingIdentity: [],\n        typeIdentity: [],\n        typePossibility: [],\n      });\n    }\n  }\n\n  startAnalyze(isAsync) {\n    this.setState({\n      tracingIdentity: [],\n      typeIdentity: [],\n      typePossibility: [],\n    })\n    isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <View style={{ alignSelf: 'center', alignContent: 'center' }}>\n          <Text >{HMSObjectRecognition.TYPE_OTHER} - TYPE_OTHER</Text>\n          <Text >{HMSObjectRecognition.TYPE_FACE} - TYPE_FACE</Text>\n          <Text >{HMSObjectRecognition.TYPE_FOOD} - TYPE_FOOD</Text>\n          <Text >{HMSObjectRecognition.TYPE_FURNITURE} - TYPE_FURNITURE</Text>\n          <Text >{HMSObjectRecognition.TYPE_GOODS} - TYPE_GOODS</Text>\n          <Text >{HMSObjectRecognition.TYPE_PLACE} - TYPE_PLACE</Text>\n          <Text >{HMSObjectRecognition.TYPE_PLANT} - TYPE_PLANT</Text>\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.tracingIdentity.toString()}\n          placeholder=\"tracingIdentity\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.typeIdentity.toString()}\n          placeholder=\"typeIdentity\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.typePossibility.toString()}\n          placeholder=\"typePossibility\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC START </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC START </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ObjectDetectionLive.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine, HMSObjectRecognition } from '@hmscore/react-native-hms-mlimage';\nimport { styles } from '../Styles';\n\n\nexport default class ObjectDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        5,\n        { analyzerType: HMSObjectRecognition.TYPE_VIDEO, allowClassification: true, allowMultiResults: true }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.OBJECT_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" object results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.OBJECT_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription = Dimensions.addEventListener('change',  () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.OBJECT_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.OBJECT_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/ProductVisualSearch.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSProductVisionSearch, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class ProductVisualSearch extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSProductVisionSearch);\n\n    this.eventEmitter.addListener(HMSProductVisionSearch.PRODUCT_ON_RESULT, (event) => {\n      this.parseResult(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSProductVisionSearch.PRODUCT_ON_RESULT);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      type: [],\n      productIds: [],\n      productUrls: [],\n      customContents: [],\n      imageUrls: [],\n      possibilities: [],\n      productSetId: 'mall',\n      region: HMSProductVisionSearch.REGION_DR_CHINA\n    };\n  }\n\n  getProductVisualSearchSetting = () => {\n    return { maxResults: 10, productSetId: this.state.productSetId, region: this.state.region };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.type.push(element.type);\n        if (element.products.length > 0) {\n          element.products.forEach(product => {\n            this.state.productIds.push(product.productId);\n            this.state.productUrls.push(product.productUrl);\n            this.state.customContents.push(product.customContent);\n            this.state.possibilities.push(product.possibility);\n            this.state.imageUrls.push(product.images.length > 0 ? product.images[0].imageUrl : '');\n          })\n        }\n      });\n      this.setState({\n        type: this.state.type,\n        productIds: this.state.productIds,\n        productUrls: this.state.productUrls,\n        customContents: this.state.customContents,\n        imageUrls: this.state.imageUrls,\n        possibilities: this.state.possibilities,\n      });\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  async startProductVisionSearchCapturePlugin() {\n    try {\n      var result = HMSProductVisionSearch.startProductVisionSearchCapturePlugin(this.getProductVisualSearchSetting());\n      if (result.status == HMSApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\"Plugin started\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      ToastAndroid.showWithGravity(\"Recognition Started. Please wait for result\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      var result = await HMSProductVisionSearch.asyncAnalyzeFrame(true, this.getFrameConfiguration(), this.getProductVisualSearchSetting());\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze = (isPlugin) => {\n    this.setState({\n      type: [],\n      productIds: [],\n      productUrls: [],\n      customContents: [],\n      imageUrls: [],\n      possibilities: [],\n    })\n    isPlugin ? this.startProductVisionSearchCapturePlugin() : this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Set Required Information</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.region.toString()}\n          placeholder=\"Region : 1002, 1003, 1004, 1005\"\n          onChangeText={text => this.setState({ region: text })}\n          multiline={false}\n          editable={true}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productSetId}\n          placeholder=\"ProductSet Id\"\n          onChangeText={text => this.setState({ productSetId: text })}\n          multiline={false}\n          editable={true}\n        />\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.type.toString()}\n          placeholder=\"type\"\n          multiline={true}\n          editable={false}\n        />\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productIds.toString()}\n          placeholder=\"productIds\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.productUrls.toString()}\n          placeholder=\"productUrls\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.customContents.toString()}\n          placeholder=\"customContents\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.imageUrls.toString()}\n          placeholder=\"imageUrls\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.possibilities.toString()}\n          placeholder=\"possibilities\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Async Analyze </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}>\n            <Text style={styles.startButtonLabel}> Start Plugin </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/SceneDetection.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n    Text,\n    View,\n    ScrollView,\n    TextInput,\n    TouchableOpacity,\n    Image,\n    ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSSceneDetection, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class SceneDetection extends React.Component {\n\n    componentDidMount() { }\n\n    componentWillUnmount() { }\n\n    constructor(props) {\n        super(props);\n        this.state = {\n            imageUri: '',\n            results: [],\n            confindence: [],\n        };\n    }\n\n    getFrameConfiguration = () => {\n        return { filePath: this.state.imageUri };\n    }\n\n    async asyncAnalyzeFrame() {\n        try {\n            var result = await HMSSceneDetection.asyncAnalyzeFrame(true, 0.5, this.getFrameConfiguration());\n            console.log(result);\n            if (result.status == HMSApplication.SUCCESS) {\n                if (result.result.length == 0) {\n                    this.setState({ results: [\"No Results\"], confindence: [\"No Confidence Values\"] });\n                }\n                else {\n                    result.result.forEach(element => {\n                        this.state.results.push(element.result);\n                        this.state.confindence.push(element.confidence);\n                    });\n                    this.setState({ results: this.state.results, confindence: this.state.confindence });\n                }\n            }\n            else {\n                ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n            }\n        } catch (e) {\n            console.log(e);\n        }\n    }\n\n    startAnalyze() {\n        this.setState({\n            results: [],\n            confindence: [],\n        });\n        this.asyncAnalyzeFrame();\n    }\n\n    render() {\n        return (\n            <ScrollView style={styles.bg}>\n\n                <View style={styles.containerCenter}>\n                    <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n                        style={styles.startButton}>\n                        <Text style={styles.startButtonLabel}>Select Image</Text>\n                    </TouchableOpacity>\n                    {this.state.imageUri !== '' &&\n                        <Image\n                            style={styles.imageSelectView}\n                            source={{ uri: this.state.imageUri }}\n                        />\n                    }\n                </View>\n\n                <Text style={styles.h1}>Results / Confidence</Text>\n\n                <TextInput\n                    style={styles.customInput}\n                    value={this.state.results.toString()}\n                    placeholder=\"Results\"\n                    multiline={false}\n                    editable={false}\n                />\n                <TextInput\n                    style={styles.customInput}\n                    value={this.state.confindence.toString()}\n                    placeholder=\"Confidence\"\n                    multiline={false}\n                    editable={false}\n                />\n\n                <View style={styles.basicButton}>\n                    <TouchableOpacity\n                        style={styles.startButton}\n                        onPress={this.startAnalyze.bind(this)}\n                        disabled={this.state.imageUri == '' ? true : false}\n                    >\n                        <Text style={styles.startButtonLabel}> Start Analyze </Text>\n                    </TouchableOpacity>\n                </View>\n            </ScrollView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/SceneDetectionLive.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSLensEngine } from '@hmscore/react-native-hms-mlimage';\nimport { styles } from '../Styles';\n\nexport default class SceneDetectionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(\n        6,\n        { confidence: 0.5 }\n      );\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SCENE_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.result.length + \" scene results detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.SCENE_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n    });\n\n    this.dimensionsSubscription = Dimensions.addEventListener('change',  () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SCENE_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.SCENE_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsImageRelatedServices/TextImageSuperResolution.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSTextImageSuperResolution, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class TextImageSuperResolution extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      corrected: '',\n      superWidth: 0,\n      superHeight: 0,\n      updateWidth: 200,\n      updateHeight: 200,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSTextImageSuperResolution.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        Image.getSize(result.result, (width, height) => { this.setState({ superWidth: width, superHeight: height }) });\n        this.setState({ corrected: result.result, updateWidth: 300, updateHeight: 300 });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze() {\n    this.setState({\n      corrected: '',\n      superWidth: 0,\n      superHeight: 0,\n      updateWidth: 200,\n      updateHeight: 200,\n    });\n    this.asyncAnalyzeFrame();\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Corrected Document Result</Text>\n\n        <View style={styles.containerCenter}>\n          {this.state.corrected !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.corrected }}\n            />\n          }\n        </View>\n\n        <Text style={styles.h1}>Super Resoluted Image Width X Height</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.superWidth.toString() + \"X\" + this.state.superHeight.toString()}\n          placeholder=\"Super Resolution Image : Width X Height\"\n          multiline={false}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageBase64display == '' ? true : false}\n          >\n            <Text style={styles.startButtonLabel}> Start Analyze </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsOtherServices/HMSCompositeAnalyzer.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n    Text,\n    View,\n    ScrollView,\n    TouchableOpacity,\n    ToastAndroid,\n    Image,\n} from 'react-native';\nimport { CompositeFaceAnalyzerConstants, HMSComposite, CompositeHandKeyPointAnalyzerConstants, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { showImagePicker } from './Helper';\nimport { styles } from '../Styles';\n\nexport default class HMSCompositeAnalyzer extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            imageUri: \"\"\n        }\n    }\n\n    componentDidMount() {\n        this.initialize();\n    }\n\n    componentWillUnmount() {\n        this.destroy()\n    }\n\n    destroy = async () => {\n        let res = await HMSComposite.destroy();\n        console.log(res);\n    }\n\n    initialize = async () => {\n        let res = await HMSComposite.createCompositeAnalyzer(this.getFaceAnalyzerSetting());\n        console.log(res);\n    }\n\n    getFrameConfiguration = (txt) => {\n        return { filePath: txt };\n    }\n\n    parseResult = (result, alertShow) => {\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n            if (alertShow) {\n                alert(JSON.stringify(result.result));\n            } else {\n                ToastAndroid.showWithGravity(JSON.stringify(result.result), ToastAndroid.SHORT, ToastAndroid.CENTER);\n            }\n        }\n        else {\n            ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n    }\n\n    getFaceAnalyzerSetting = () => {\n        return {\n            face: {\n                featureType: CompositeFaceAnalyzerConstants.TYPE_FEATURES,\n                shapeType: CompositeFaceAnalyzerConstants.TYPE_SHAPES,\n                keyPointType: CompositeFaceAnalyzerConstants.TYPE_KEYPOINTS,\n                performanceType: CompositeFaceAnalyzerConstants.TYPE_SPEED,\n                tracingMode: CompositeFaceAnalyzerConstants.MODE_TRACING_ROBUST,\n                minFaceProportion: 0.5,\n                isPoseDisabled: false,\n                isTracingAllowed: false,\n                isMaxSizeFaceOnly: false,\n            },\n        };\n    }\n\n    getCompositeClassificationAnalyzerConfigurationRemoteSetting = () => {\n        return {\n            classification: { maxNumberOfReturns: 5, minAcceptablePossibility: 0.8, isRemote: true },\n\n        };\n    }\n\n\n    getHandAnalyzerSetting = () => {\n        return {\n            hand: {\n                sceneType: CompositeHandKeyPointAnalyzerConstants.TYPE_KEYPOINT_ONLY,\n                maxHandResults: CompositeHandKeyPointAnalyzerConstants.MAX_HANDS_NUM\n            },\n        };\n    }\n\n    render() {\n        return (\n            <ScrollView style={styles.bg}>\n\n                <View style={styles.containerCenter}>\n                    <TouchableOpacity\n                        onPress={async () => {\n                            let res = await HMSComposite.isAvailable();\n                            this.parseResult(res);\n                        }}\n                        style={[styles.startButton, styles.enable]}>\n                        <Text style={styles.startButtonLabel}>Is Available ?</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        onPress={() => {\n                            showImagePicker().then(async (result) => {\n                                this.setState({ imageUri: result })\n                                let res = await HMSComposite.analyzeFrame(this.getFrameConfiguration(result));\n                                this.parseResult(res, true);\n                            })\n                        }}\n                        style={[styles.startButton, styles.enable]}>\n                        <Text style={styles.startButtonLabel}>Select Image</Text>\n                    </TouchableOpacity>\n                    {this.state.imageUri !== '' &&\n                        <Image\n                            style={styles.imageSelectView}\n                            source={{ uri: this.state.imageUri }}\n                        />\n                    }\n                </View>\n\n            </ScrollView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/HmsOtherServices/Helper.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HMSLensEngine, HMSApplication } from '@hmscore/react-native-hms-mlimage';\nimport { ToastAndroid } from 'react-native';\nimport * as ImagePicker from \"react-native-image-picker\"\n\nconst options = {\n  title: 'Choose Method',\n  storageOptions: {\n    skipBackup: true,\n    path: 'images',\n  },\n};\n\nexport async function createLensEngine(analyzer, analyzerConfig) {\n  try {\n    var result = await HMSLensEngine.createLensEngine(\n      analyzer,\n      analyzerConfig,\n      {\n        width: 480,\n        height: 540,\n        lensType: HMSLensEngine.BACK_LENS,\n        automaticFocus: true,\n        fps: 20.0,\n        flashMode: HMSLensEngine.FLASH_MODE_OFF,\n        focusMode: HMSLensEngine.FOCUS_MODE_CONTINUOUS_VIDEO\n      }\n    )\n    this.renderResult(result, \"Lens engine creation successfull\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function runWithView() {\n  try {\n    var result = await HMSLensEngine.runWithView();\n    this.renderResult(result, \"Lens engine running\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function close() {\n  try {\n    var result = await HMSLensEngine.close();\n    this.renderResult(result, \"Lens engine closed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function doZoom(scale) {\n  try {\n    var result = await HMSLensEngine.doZoom(scale);\n    this.renderResult(result, \"Lens engine zoomed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function photograph() {\n  try {\n    var result = await HMSLensEngine.photograph();\n    this.renderResult(result, \"Lens engine photo\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function release() {\n  try {\n    var result = await HMSLensEngine.release();\n    this.renderResult(result, \"Lens engine released\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function setApiKey() {\n  try {\n    var result = await HMSApplication.setApiKey(\"YOUR-APIKEY\");\n    this.renderResult(result, \"Api key set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setAccessToken() {\n  try {\n    var result = await HMSApplication.setAccessToken(\"<your_access_token>\");\n    this.renderResult(result, \"Access Token set\");\n  } catch (e) {\n    console.log(e);\n  }\n} \n\nexport function showImagePicker() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.launchImageLibrary(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve(response.assets[0].uri);\n        }\n      });\n    }\n  );\n  return result;\n}\n\nexport function showImagePickerCustom() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.showImagePicker(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve({uri: response.assets[0].uri, width: response.width, height: response.height});\n        }\n      });\n    }\n  );\n  return result;\n}\n\nrenderResult = (result, message) => {\n  console.log(result);\n  if (result.status == HMSApplication.SUCCESS) {\n    ToastAndroid.showWithGravity(message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n  else {\n    ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/StartPage.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  PermissionsAndroid,\n  BackHandler,\n  Alert,\n  Platform\n} from 'react-native';\nimport { styles } from './Styles';\nimport { setApiKey, setAccessToken } from './HmsOtherServices/Helper';\n\nexport default class App extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions()\n      .then(() => setApiKey());\n      \n  }\n\n  async requestPermissions() {\n    try {\n      if (Platform.Version >= 30) {\n        // For Android 30 (Android 13) and above, use the new permission model\n        const userResponse = await PermissionsAndroid.requestMultiple(\n          [\n            PermissionsAndroid.PERMISSIONS.CAMERA,\n            PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES,\n            PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO,\n            PermissionsAndroid.PERMISSIONS.READ_MEDIA_AUDIO,\n            PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n          ]\n        );\n        if ( userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_MEDIA_IMAGES\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_MEDIA_IMAGES\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_MEDIA_VIDEO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_MEDIA_VIDEO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_MEDIA_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_MEDIA_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN\n        ) {\n          this.alertPermission();\n        }\n      } else {\n        // For Android versions below 30, use the old permission model\n        const userResponse = await PermissionsAndroid.requestMultiple(\n          [\n          PermissionsAndroid.PERMISSIONS.CAMERA,\n          PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n          ]\n        );\n        if (\n          userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n          userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n          userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.DENIED ||\n          userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n          userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED ||\n          userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n          userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n          userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED\n        ) {\n          this.alertPermission();\n        }\n      }\n    } catch (error) {\n      console.warn('Error requesting permission:', error);\n    }\n  };\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\", onPress: () => BackHandler.exitApp()\n        }\n      ],\n      { cancelable: false }\n    );\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n\n        <Text style={styles.h1}>Image Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageClassification')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Image{'\\n'}Classify</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ClassificationLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Image{'\\n'}Classify</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LandmarkRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Landmark Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ObjectDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Object Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ObjectDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Object Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ProductVisualSearch')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Product Search</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageSegmentation')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Image Segment.</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('Frame')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Frame Methods</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ImageSuperResolution')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Super Resolution</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('DocumentSkewCorrection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Doc. Skew Correction</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextImageSuperResolution')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Super Resolution</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SceneDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Scene Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SceneDetectionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Scene Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <Text style={styles.h1}>Common Services</Text>\n\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('CompositeAnalyzer')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Composite Analyzer</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text></Text>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mlimage/example/src/Styles.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { StyleSheet, Dimensions } from 'react-native';\n\nconst win = Dimensions.get('window');\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#EEF2F3' },\n\n  imageSelectView: {\n    width: 200,\n    height: 200,\n  },\n\n  superres: {\n    flex: 1,\n    alignSelf: 'stretch',\n    width: win.width,\n    height: win.height,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 15,\n    borderBottomWidth: 1,\n    padding: 20,\n    borderBottomColor: '#D3D3D3',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  boldText: { fontWeight: \"bold\" },\n\n  normalView: {\n    backgroundColor: '#EEF2F3',\n    flex: 1,\n    flexDirection: 'column',\n  },\n\n  baseItemContainer: {\n    marginTop: 10,\n    alignItems: 'center',\n    width: '95%',\n    alignSelf: 'center',\n    height: '33%'\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    alignSelf: 'center',\n    width: '95%',\n    borderBottomColor: '#D3D3D3',\n    borderBottomWidth: 1,\n    marginTop: 10,\n  },\n  itemOfView: {\n    width: '70%',\n    alignSelf: 'center'\n  },\n\n  itemOfView3: {\n    width: '30%',\n    alignSelf: 'flex-end'\n  },\n\n  dividedDropdown: {\n    borderWidth: 2,\n    borderColor: 'gray',\n    height: 40,\n    marginTop: 5\n  },\n\n  longDropdown: {\n    backgroundColor: '#fafafa',\n    width: '95%',\n    alignSelf: 'center',\n    borderWidth: 2,\n    borderColor: 'gray',\n    marginTop: 5\n  },\n\n\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n  },\n\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n\n  containerCenter: {\n    marginTop: 20,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  img: {\n    width: 100,\n    height: 100,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  containerFlexCenter: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: \"center\",\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  button: {\n    width: '32%',\n    height: 80,\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  menuButton: {\n    width: '100%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: '#fff',\n    flexDirection: 'column',\n  },\n  image: {\n    justifyContent: 'flex-start',\n    width: 400,\n    height: 80,\n  },\n  right: {\n    justifyContent: 'flex-end',\n  },\n\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customInput2: {\n    height: 75,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox: {\n    height: 250,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox2: {\n    height: 230,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    marginBottom: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\",\n    borderColor: '#D3D3D3',\n    borderWidth: 1,\n    textAlign: 'center'\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  startButton: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n  startButtonclicked: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: 'green',\n  },\n  startButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n\n  borderedText: {\n    paddingHorizontal: 20,\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'grey',\n    color: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#fee',\n  },\n\n  speakButton: {\n    color: '#000',\n    width: 200,\n    textAlignVertical: \"center\", textAlign: \"center\",\n    paddingLeft: 10,\n    paddingRight: 10,\n    borderColor: 'blue'\n  },\n\n  log: {\n    width: '95%',\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  faceVerificationImage: {\n    width: \"100%\",\n    height: 200\n  },\n\n  enable: {\n    backgroundColor: 'green'\n  },\n\n  cardRecogOptions: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    marginVertical: 10\n  }\n});\n"
  },
  {
    "path": "react-native-hms-mlimage/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mlimage\",\n  \"title\": \"React Native HMS ML Image\",\n  \"description\": \"React Native HMS ML Image Kit\",\n  \"version\": \"3.11.0-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-mlimage\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ml\",\n    \"react-native-mlimage\",\n    \"hms-ml\",\n    \"huawei-ml\",\n    \"ml-kit\",\n    \"machine-learning\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-mlimage/src/constants.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const CompositeFaceAnalyzerConstants = {\n  MODE_TRACING_FAST : 1,\n  MODE_TRACING_ROBUST : 2,\n  TYPE_FEATURES : 1,\n  TYPE_FEATURE_AGE : 256,\n  TYPE_FEATURE_BEARD : 32,\n  TYPE_FEATURE_EMOTION : 4,\n  TYPE_FEATURE_EYEGLASS : 8,\n  TYPE_FEATURE_GENDAR : 128,\n  TYPE_FEATURE_HAT : 16,\n  TYPE_FEATURE_OPENCLOSEEYE : 64,\n  TYPE_KEYPOINTS : 1,\n  TYPE_PRECISION : 1,\n  TYPE_SHAPES : 2,\n  TYPE_SPEED : 2,\n  TYPE_UNSUPPORT_FEATURES : 2,\n  TYPE_UNSUPPORT_KEYPOINTS : 0,\n  TYPE_UNSUPPORT_SHAPES : 3,\n  TYPE_BOTTOM_OF_MOUTH : 1,\n  TYPE_LEFT_CHEEK : 2,\n  TYPE_LEFT_EAR : 3,\n  TYPE_LEFT_EYE : 5,\n  TYPE_LEFT_SIDE_OF_MOUTH : 6,\n  TYPE_RIGHT_CHEEK : 8,\n  TYPE_RIGHT_EAR : 9,\n  TYPE_RIGHT_EYE : 11,\n  TYPE_RIGHT_SIDE_OF_MOUTH : 12,\n  TYPE_TIP_OF_LEFT_EAR : 4,\n  TYPE_TIP_OF_NOSE : 7,\n  TYPE_TIP_OF_RIGHT_EAR : 10,\n  TYPE_ALL : 0,\n  TYPE_BOTTOM_OF_LEFT_EYEBROW : 4,\n  TYPE_BOTTOM_OF_LOWER_LIP : 8,\n  TYPE_BOTTOM_OF_NOSE : 12,\n  TYPE_BOTTOM_OF_RIGHT_EYEBROW : 5,\n  TYPE_BOTTOM_OF_UPPER_LIP : 10,\n  TYPE_BRIDGE_OF_NOSE : 13,\n  TYPE_FACE : 1,\n  TYPE_LEFT_EYE : 2,\n  TYPE_RIGHT_EYE : 3,\n  TYPE_TOP_OF_LEFT_EYEBROW : 6,\n  TYPE_TOP_OF_LOWER_LIP : 9,\n  TYPE_TOP_OF_RIGHT_EYEBROW : 7,\n  TYPE_TOP_OF_UPPER_LIP : 11\n}\n\nexport const CompositeTextAnalyzeConstants = {\n  OCR_DETECT_MODE : 1,\n  OCR_TRACKING_MODE : 2,\n  OCR_LOOSE_SCENE : 1,\n  OCR_COMPACT_SCENE : 2,\n  ARC : \"ARC\",\n  NGON : \"NGON\",\n  LATIN : \"rm\",\n  ENGLISH : \"en\",\n  CHINESE : \"zh\",\n  JAPANESE : \"ja\",\n  KOREAN : \"ko\",\n  RUSSIAN : \"ru\",\n  GERMAN : \"de\",\n  FRENCH : \"fr\",\n  ITALIAN : \"it\",\n  PORTUGUESE : \"pt\",\n  SPANISH : \"es\",\n  POLISH : \"pl\",\n  NORWEGIAN : \"no\",\n  SWEDISH : \"sv\",\n  DANISH : \"da\",\n  TURKISH : \"tr\",\n  FINNISH : \"fi\",\n  THAI : \"th\",\n  ARABIC : \"ar\",\n  HINDI : \"hi\"\n}\n\nexport const CompositeSkeletonAnalyzerConstants = {\n  TYPE_RIGHT_SHOULDER : 101,\n  TYPE_RIGHT_ELBOW : 102,\n  TYPE_RIGHT_WRIST : 103,\n  TYPE_LEFT_SHOULDER : 104,\n  TYPE_LEFT_ELBOW : 105,\n  TYPE_LEFT_WRIST : 106,\n  TYPE_RIGHT_HIP : 107,\n  TYPE_RIGHT_KNEE : 108,\n  TYPE_RIGHT_ANKLE : 109,\n  TYPE_LEFT_HIP : 110,\n  TYPE_LEFT_KNEE : 111,\n  TYPE_LEFT_ANKLE : 112,\n  TYPE_HEAD_TOP : 113,\n  TYPE_NECK : 114,\n  TYPE_NORMAL : 0,\n  TYPE_YOGA : 1,\n}\n\nexport const  CompositeHandKeyPointAnalyzerConstants ={\n  TYPE_WRIST : 0,\n  TYPE_THUMB_FIRST : 1,\n  TYPE_THUMB_SECOND : 2,\n  TYPE_THUMB_THIRD : 3,\n  TYPE_THUMB_FOURTH : 4,\n  TYPE_FOREFINGER_FIRST : 5,\n  TYPE_FOREFINGER_SECOND : 6,\n  TYPE_FOREFINGER_THIRD : 7,\n  TYPE_FOREFINGER_FOURTH : 8,\n  TYPE_MIDDLE_FINGER_FIRST : 9,\n  TYPE_MIDDLE_FINGER_SECOND : 10,\n  TYPE_MIDDLE_FINGER_THIRD : 11,\n  TYPE_MIDDLE_FINGER_FOURTH : 12,\n  TYPE_RING_FINGER_FIRST : 13,\n  TYPE_RING_FINGER_SECOND : 14,\n  TYPE_RING_FINGER_THIRD : 15,\n  TYPE_RING_FINGER_FOURTH : 16,\n  TYPE_LITTLE_FINGER_FIRST : 17,\n  TYPE_LITTLE_FINGER_SECOND : 18,\n  TYPE_LITTLE_FINGER_THIRD : 19,\n  TYPE_LITTLE_FINGER_FOURTH : 20,\n  TYPE_ALL : 0,\n  TYPE_KEYPOINT_ONLY : 1,\n  TYPE_RECT_ONLY : 2,\n  MAX_HANDS_NUM : 10\n}\n\nexport const CompositeObjectAnalyzerConstants = {\n  TYPE_PICTURE : 0,\n  TYPE_VIDEO : 1,\n  TYPE_OTHER : 0,\n  TYPE_GOODS : 1,\n  TYPE_FOOD : 2,\n  TYPE_FURNITURE : 3,\n  TYPE_PLANT : 4,\n  TYPE_PLACE : 5,\n  TYPE_FACE : 6\n}"
  },
  {
    "path": "react-native-hms-mlimage/src/index.d.ts",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-mlimage\" {\n\n    export const HMSApplication = {\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        setApiKey(apiKey: string): Promise<Object>;,\n        getApiKey(): Promise<Object>;,\n        setAccessToken(token: string): Promise<Object>;,\n        getCountryCode(): Promise<Object>;,\n        setUserRegion(userRegion: int): Promise<Object>;\n    }\n\n    export declare enum HMSApplication {\n        UNKNOWN = -1,\n        SUCCESS = 0,\n        DISCARDED = 1,\n        INNER = 2,\n        INACTIVE = 3,\n        NOT_SUPPORTED = 4,\n        ILLEGAL_PARAMETER = 5,\n        OVERDUE = 6,\n        NO_FOUND = 7,\n        DUPLICATE_FOUND = 8,\n        NO_PERMISSION = 9,\n        INSUFFICIENT_RESOURCE = 10,\n        ANALYSIS_FAILURE = 11,\n        INTERRUPTED = 12,\n        EXCEED_RANGE = 13,\n        DATA_MISSING = 14,\n        AUTHENTICATION_REQUIRED = 15,\n        TFLITE_NOT_COMPATIBLE = 16,\n        INSUFFICIENT_SPACE = 17,\n        HASH_MISS = 18,\n        TOKEN_INVALID = 19,\n        FRAME_NULL = 20,\n        ANALYZER_NOT_AVAILABLE = 21,\n        CURRENT_ACTIVITY_NULL = 22,\n        CANCEL = 23,\n        FAILURE = 24,\n        DENY = 25,\n        STRING_PARAM_NULL = 26,\n        REMOTE_MODEL_NULL = 27,\n        ASR_RECOGNIZER_NULL = 28,\n        TTS_ENGINE_NULL = 30,\n        SOUND_DECT_NULL = 31,\n        CUSTOM_MODEL_SETTING_NULL = 32,\n        CUSTOM_MODEL_INPUT_NULL = 33,\n        CUSTOM_MODEL_EXECUTOR_SETTING_NULL = 34,\n        DATA_SET_NOT_VALID = 35,\n        LENS_ENGINE_NULL = 36,\n        LENS_HOLDER_NULL = 37\n    }\n\n    export const HMSFrame = {\n        getPreviewBitmap(frameConfiguration: Frame): Promise<Object>;,\n        readBitmap(frameConfiguration: Frame): Promise<Object>;,\n        rotate(quadrant: HMSFrame, fileUri: string): Promise<Object>;\n    }\n\n    export declare enum HMSFrame {\n        SCREEN_FIRST_QUADRANT = 0,\n        SCREEN_SECOND_QUADRANT = 1,\n        SCREEN_THIRD_QUADRANT = 2,\n        SCREEN_FOURTH_QUADRANT = 3,\n        IMAGE_FORMAT_NV21 = 17,\n        IMAGE_FORMAT_YV12 = 842094169\n    }\n\n    interface Frame {\n        bitmap: string,\n        bytes: Bytes,\n        byteBuffer: ByteBuffer,\n        filePath: string,\n        creator: Creator\n    }\n\n    interface Bytes {\n        frameProperty: FrameProperty,\n        values: number[],\n    }\n\n    interface ByteBuffer {\n        frameProperty: FrameProperty,\n        buffer: string,\n    }\n\n    interface Creator {\n        base64Bitmap: string,\n        itemIdentity: number,\n        quadrant: HMSFrame,\n        timeStamp: number,\n        framePropertyExt: FramePropertyExt,\n        writeByteBufferData: ByteBufferData\n    }\n\n    interface FrameProperty {\n        width: number,\n        height: number,\n        quadrant: HMSFrame,\n        formatType: HMSFrame,\n        itemIdentity: number,\n        timeStamp: number,\n    }\n\n    interface FramePropertyExt {\n        lensId: number,\n        maxZoom: number,\n        zoom: number,\n        bottom: number,\n        left: number,\n        right: number,\n        top: number,\n    }\n\n    interface ByteBufferData {\n        width: number,\n        height: number,\n        data: string,\n        formatType: HMSFrame,\n    }\n    \n    export const HMSSceneDetection = {\n        analyzeFrame(isStop: boolean, confidence: number, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, confidence: number, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export const HMSTextImageSuperResolution = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export const HMSDocumentSkewCorrection = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n    \n        asyncDocumentSkewDetect(isStop: boolean, frameConfiguration: FrameConfiguration): Promise<object>;,\n      \n        asyncDocumentSkewCorrect(isStop: boolean, frameConfiguration: FrameConfiguration, points: Point[]): Promise<object>;,\n    \n        syncDocumentSkewCorrect(isStop: boolean, frameConfiguration: FrameConfiguration, points: Point[]): Promise<object>;,\n    };\n    \n    interface Point {\n        x: number;\n        y: number;\n    }\n    \n    export const HMSLandmarkRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, landmarkAnalyzerConfiguration: LandmarkAnalyzerConfiguration): Promise<object>;,\n    };\n    \n    interface LandmarkAnalyzerConfiguration {\n        largestNumOfReturns: number;\n        patternType: HMSLandmarkRecognition;\n    }\n\n    export declare enum HMSLandmarkRecognition {\n        STEADY_PATTERN = 1,\n        NEWEST_PATTERN = 2\n    }\n    \n    export const HMSObjectRecognition = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, objectAnalyzerSettingConfiguration: ObjectAnalyzerSettingConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, objectAnalyzerSettingConfiguration: ObjectAnalyzerSettingConfiguration): Promise<object>;,\n    };\n  \n    export declare enum HMSObjectRecognition {\n        TYPE_PICTURE = 0,\n        TYPE_VIDEO = 1,\n        TYPE_OTHER = 0,\n        TYPE_GOODS = 1,\n        TYPE_FOOD = 2,\n        TYPE_FURNITURE = 3,\n        TYPE_PLANT = 4,\n        TYPE_PLACE = 5,\n        TYPE_FACE = 6\n    }\n\n    interface ObjectAnalyzerSettingConfiguration {\n        analyzerType: HMSObjectRecognition;\n        allowMultiResults: boolean;\n        allowClassification: boolean;\n    }\n    \n    export const HMSImageSegmentation = {\n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerConfiguration: ImageSegmentationAnalyzerConfiguration): Promise<object>;,\n    \n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerConfiguration: ImageSegmentationAnalyzerConfiguration): Promise<object>;,\n    };\n    \n    export declare enum HMSImageSegmentation {\n        TYPE_BACKGOURND = 0,\n        TYPE_HUMAN = 1,\n        TYPE_SKY = 2,\n        TYPE_GRASS = 3,\n        TYPE_FOOD = 4,\n        TYPE_CAT = 5,\n        TYPE_BUILD = 6,\n        TYPE_FLOWER = 7,\n        TYPE_WATER = 8,\n        TYPE_SAND = 9,\n        TYPE_MOUNTAIN = 10,\n        ALL = 0,\n        MASK_ONLY = 1,\n        FOREGROUND_ONLY = 2,\n        GRAYSCALE_ONLY = 3,\n        BODY_SEG = 0,\n        IMAGE_SEG = 1,\n        HAIR_SEG = 2\n    }\n\n    interface ImageSegmentationAnalyzerConfiguration {\n        analyzerType: HMSImageSegmentation;\n        scene: HMSImageSegmentation;\n        exact: boolean;\n    }\n    \n    export const HMSImageClassification = {\n        analyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ImageClassAnalyzerSettingsOnCloud|ImageClassAnalyzerSettingsOnDevice): Promise<object>;,\n    \n        asyncAnalyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ImageClassAnalyzerSettingsOnCloud|ImageClassAnalyzerSettingsOnDevice): Promise<object>;,\n    };\n    \n    interface ImageClassAnalyzerSettingsOnCloud {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n    }\n    \n    interface ImageClassAnalyzerSettingsOnDevice {\n        minAcceptablePossibility: number;\n    }\n    \n    export const HMSImageSuperResolution = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, scale: HMSImageSuperResolution): Promise<object>;,\n    \n        analyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, scale: HMSImageSuperResolution): Promise<object>;,\n    };\n\n    export declare enum HMSImageSuperResolution {\n        ISR_SCALE_1X = 1.0,\n        ISR_SCALE_3X = 3.0\n    }\n    \n    export const HMSProductVisionSearch = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: FrameConfiguration, analyzerSetting: ProductVisionSearchAnalyzerSettings): Promise<object>;,\n    \n        startProductVisionSearchCapturePlugin(pluginConfiguration: FrameConfiguration): Promise<object>;,\n    };\n    \n    export declare enum HMSProductVisionSearch {\n        REGION_DR_CHINA = 1002,\n        REGION_DR_SINGAPORE = 1007,\n        REGION_DR_GERMAN = 1006,\n        REGION_DR_RUSSIA = 1005,\n        PRODUCT_ON_RESULT = \"productOnResult\"\n    }\n\n    interface ProductVisionSearchAnalyzerSettings {\n        maxResults: number;\n        productSetId: string;\n        region: HMSProductVisionSearch;\n    }\n    \n    export const HMSLensEngine = {\n        createLensEngine(analyzerTag: number, analyzerConfig: TextAnalyzerConfiguration | FaceAnalyzerConfiguration2D | FaceAnalyzerConfiguration3D | SkeletonAnalyzerConfiguration | ClassificationAnalyzerConfigurationRemote | ClassificationAnalyzerConfigurationLocal | ObjectAnalyzerSettingConfiguration | SceneAnalyzerConfiguration | HandKeyPointAnalyzerConfiguration, lensConfig: LensConfiguration): Promise<object>;,\n    \n        close(): Promise<object>;,\n    \n        doZoom(scale: number): Promise<object>;,\n    \n        getDisplayDimension(): Promise<object>;,\n    \n        getLensType(): Promise<object>;,\n    \n        photograph(): Promise<object>;,\n    \n        release(): Promise<object>;,\n    \n        run(): Promise<object>;,\n    \n        runWithView(): Promise<object>;,\n    };\n\n    export declare enum HMSLensEngine {\n        FLASH_MODE_OFF = \"off\",\n        FLASH_MODE_ON = \"on\",\n        FLASH_MODE_AUTO = \"auto\",\n        FOCUS_MODE_CONTINUOUS_PICTURE = \"continuous-picture\",\n        FOCUS_MODE_CONTINUOUS_VIDEO = \"continuous-video\",\n        BACK_LENS = 0,\n        FRONT_LENS = 1,\n        LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\",\n        LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\",\n        LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\",\n        LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\",\n        LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\",\n        TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\",\n        TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\",\n        FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\",\n        FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\",\n        FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\",\n        FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\",\n        CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\",\n        CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\",\n        OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\",\n        OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\",\n        SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\",\n        SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\",\n        SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\",\n        SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\",\n        HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\",\n        HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\",\n        GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\",\n        GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\",\n        LENS_TEXT_ANALYZER = 0,\n        LENS_FACE_2D_ANALYZER = 1,\n        LENS_FACE_3D_ANALYZER = 2,\n        LENS_SKELETON_ANALYZER = 3,\n        LENS_CLASSIFICATION_ANALYZER = 4,\n        LENS_OBJECT_ANALYZER = 5,\n        LENS_SCENE_ANALYZER = 6,\n        LENS_HAND_ANALYZER = 7,\n        LENS_GESTURE_ANALYZER = 8\n    }\n    \n    interface TextAnalyzerConfiguration {\n        language: string;\n        OCRMode: HMSTextRecognition;\n    }\n    \n    interface FaceAnalyzerConfiguration2D {\n        featureType: HMSFaceRecognition;\n        shapeType: HMSFaceRecognition;\n        keyPointType: HMSFaceRecognition;\n        performanceType: HMSFaceRecognition;\n        tracingMode: HMSFaceRecognition;\n        minFaceProportion: number;\n        isPoseDisabled: boolean;\n        isTracingAllowed: boolean;\n        isMaxSizeFaceOnly: boolean;\n    }\n    \n    interface FaceAnalyzerConfiguration3D {\n        performanceType: HMSFaceRecognition;\n        isTracingAllowed: boolean;\n    }\n    \n    interface SkeletonAnalyzerConfiguration {\n        analyzeType: HMSSkeletonDetection;\n    }\n    \n    interface ClassificationAnalyzerConfigurationRemote {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n    }\n    \n    interface ClassificationAnalyzerConfigurationLocal {\n        minAcceptablePossibility: number;\n    }\n    \n    interface SceneAnalyzerConfiguration {\n        confidence: number;\n    }\n    \n    interface HandKeyPointAnalyzerConfiguration {\n        sceneType: HMSHandKeypointDetection;\n        maxHandResults: HMSHandKeypointDetection;\n    }\n    \n    interface LensConfiguration {\n        width: number;\n        height: number;\n        lensType: number;\n        fps: number;\n        automaticFocus: boolean;\n        flashMode: string;\n        focusMode: string;\n    } \n\n    export const HMSComposite = {\n        createCompositeAnalyzer(configuration: CompositeTextAnalyzerConfiguration | CompositeFaceAnalyzerFaceAnalyzerConfiguration2D | CompositeFaceAnalyzerConfiguration3D | CompositeSkeletonAnalyzerConfiguration | CompositeClassificationAnalyzerConfigurationRemote | CompositeClassificationAnalyzerConfigurationLocal | CompositeObjectAnalyzerSettingConfiguration |  CompositeHandKeyPointAnalyzerConfiguration): Promise<object>;,\n    \n        isAvailable(): Promise<object>;,\n    \n        destroy(): Promise<object>;,\n    \n        analyzeFrame(frameConfiguration: FrameConfiguration): Promise<object>;,\n    };\n\n    export declare enum CompositeFaceAnalyzerConstants {\n        MODE_TRACING_FAST = 1,\n        MODE_TRACING_ROBUST = 2,\n        TYPE_FEATURES = 1,\n        TYPE_FEATURE_AGE = 256,\n        TYPE_FEATURE_BEARD = 32,\n        TYPE_FEATURE_EMOTION = 4,\n        TYPE_FEATURE_EYEGLASS = 8,\n        TYPE_FEATURE_GENDAR = 128,\n        TYPE_FEATURE_HAT = 16,\n        TYPE_FEATURE_OPENCLOSEEYE = 64,\n        TYPE_KEYPOINTS = 1,\n        TYPE_PRECISION = 1,\n        TYPE_SHAPES = 2,\n        TYPE_SPEED = 2,\n        TYPE_UNSUPPORT_FEATURES = 2,\n        TYPE_UNSUPPORT_KEYPOINTS = 0,\n        TYPE_UNSUPPORT_SHAPES = 3,\n        TYPE_BOTTOM_OF_MOUTH = 1,\n        TYPE_LEFT_CHEEK = 2,\n        TYPE_LEFT_EAR = 3,\n        TYPE_LEFT_EYE = 5,\n        TYPE_LEFT_SIDE_OF_MOUTH = 6,\n        TYPE_RIGHT_CHEEK = 8,\n        TYPE_RIGHT_EAR = 9,\n        TYPE_RIGHT_EYE = 11,\n        TYPE_RIGHT_SIDE_OF_MOUTH = 12,\n        TYPE_TIP_OF_LEFT_EAR = 4,\n        TYPE_TIP_OF_NOSE = 7,\n        TYPE_TIP_OF_RIGHT_EAR = 10,\n        TYPE_ALL = 0,\n        TYPE_BOTTOM_OF_LEFT_EYEBROW = 4,\n        TYPE_BOTTOM_OF_LOWER_LIP = 8,\n        TYPE_BOTTOM_OF_NOSE = 12,\n        TYPE_BOTTOM_OF_RIGHT_EYEBROW = 5,\n        TYPE_BOTTOM_OF_UPPER_LIP = 10,\n        TYPE_BRIDGE_OF_NOSE = 13,\n        TYPE_FACE = 1,\n        TYPE_LEFT_EYE = 2,\n        TYPE_RIGHT_EYE = 3,\n        TYPE_TOP_OF_LEFT_EYEBROW = 6,\n        TYPE_TOP_OF_LOWER_LIP = 9,\n        TYPE_TOP_OF_RIGHT_EYEBROW = 7,\n        TYPE_TOP_OF_UPPER_LIP = 11\n      }\n      \n      export declare enum CompositeTextAnalyzeConstants {\n        OCR_DETECT_MODE = 1,\n        OCR_TRACKING_MODE = 2,\n        OCR_LOOSE_SCENE = 1,\n        OCR_COMPACT_SCENE = 2,\n        ARC = \"ARC\",\n        NGON = \"NGON\",\n        LATIN = \"rm\",\n        ENGLISH = \"en\",\n        CHINESE = \"zh\",\n        JAPANESE = \"ja\",\n        KOREAN = \"ko\",\n        RUSSIAN = \"ru\",\n        GERMAN = \"de\",\n        FRENCH = \"fr\",\n        ITALIAN = \"it\",\n        PORTUGUESE = \"pt\",\n        SPANISH = \"es\",\n        POLISH = \"pl\",\n        NORWEGIAN = \"no\",\n        SWEDISH = \"sv\",\n        DANISH = \"da\",\n        TURKISH = \"tr\",\n        FINNISH = \"fi\",\n        THAI = \"th\",\n        ARABIC = \"ar\",\n        HINDI = \"hi\"\n      }\n      \n      export declare enum CompositeSkeletonAnalyzerConstants {\n        TYPE_RIGHT_SHOULDER = 101,\n        TYPE_RIGHT_ELBOW = 102,\n        TYPE_RIGHT_WRIST = 103,\n        TYPE_LEFT_SHOULDER = 104,\n        TYPE_LEFT_ELBOW = 105,\n        TYPE_LEFT_WRIST = 106,\n        TYPE_RIGHT_HIP = 107,\n        TYPE_RIGHT_KNEE = 108,\n        TYPE_RIGHT_ANKLE = 109,\n        TYPE_LEFT_HIP = 110,\n        TYPE_LEFT_KNEE = 111,\n        TYPE_LEFT_ANKLE = 112,\n        TYPE_HEAD_TOP = 113,\n        TYPE_NECK = 114,\n        TYPE_NORMAL = 0,\n        TYPE_YOGA = 1,\n      }\n      \n      export declare enum  CompositeHandKeyPointAnalyzerConstants {\n        TYPE_WRIST = 0,\n        TYPE_THUMB_FIRST = 1,\n        TYPE_THUMB_SECOND = 2,\n        TYPE_THUMB_THIRD = 3,\n        TYPE_THUMB_FOURTH = 4,\n        TYPE_FOREFINGER_FIRST = 5,\n        TYPE_FOREFINGER_SECOND = 6,\n        TYPE_FOREFINGER_THIRD = 7,\n        TYPE_FOREFINGER_FOURTH = 8,\n        TYPE_MIDDLE_FINGER_FIRST = 9,\n        TYPE_MIDDLE_FINGER_SECOND = 10,\n        TYPE_MIDDLE_FINGER_THIRD = 11,\n        TYPE_MIDDLE_FINGER_FOURTH = 12,\n        TYPE_RING_FINGER_FIRST = 13,\n        TYPE_RING_FINGER_SECOND = 14,\n        TYPE_RING_FINGER_THIRD = 15,\n        TYPE_RING_FINGER_FOURTH = 16,\n        TYPE_LITTLE_FINGER_FIRST = 17,\n        TYPE_LITTLE_FINGER_SECOND = 18,\n        TYPE_LITTLE_FINGER_THIRD = 19,\n        TYPE_LITTLE_FINGER_FOURTH = 20,\n        TYPE_ALL = 0,\n        TYPE_KEYPOINT_ONLY = 1,\n        TYPE_RECT_ONLY = 2,\n        MAX_HANDS_NUM = 10\n      }\n      \n      export declare enum CompositeObjectAnalyzerConstants {\n        TYPE_PICTURE = 0,\n        TYPE_VIDEO = 1,\n        TYPE_OTHER = 0,\n        TYPE_GOODS = 1,\n        TYPE_FOOD = 2,\n        TYPE_FURNITURE = 3,\n        TYPE_PLANT = 4,\n        TYPE_PLACE = 5,\n        TYPE_FACE = 6\n      }\n\n    interface CompositeFaceAnalyzerFaceAnalyzerConfiguration2D {\n        featureType: CompositeFaceAnalyzerConstants;\n        shapeType: CompositeFaceAnalyzerConstants;\n        keyPointType: CompositeFaceAnalyzerConstants;\n        performanceType: CompositeFaceAnalyzerConstants;\n        tracingMode: CompositeFaceAnalyzerConstants;\n        minFaceProportion: number;\n        isPoseDisabled: boolean;\n        isTracingAllowed: boolean;\n        isFace2D: true;\n    }\n\n    interface CompositeFaceAnalyzerConfiguration3D {\n        performanceType: CompositeFaceAnalyzerConstants;\n        isTracingAllowed: boolean;\n        isFace2D: false;\n    }\n\n    interface CompositeClassificationAnalyzerConfigurationRemote {\n        maxNumberOfReturns: number;\n        minAcceptablePossibility: number;\n        isRemote: true;\n    }\n\n    interface CompositeClassificationAnalyzerConfigurationLocal {\n        minAcceptablePossibility: number;\n        isRemote: false;\n    }\n\n    interface CompositeTextAnalyzerConfiguration {\n        language: string;\n        OCRMode: CompositeTextAnalyzeConstants;\n    }\n\n    interface CompositeSkeletonAnalyzerConfiguration {\n        analyzeType: CompositeSkeletonAnalyzerConstants;\n    }\n\n    interface CompositeHandKeyPointAnalyzerConfiguration {\n        sceneType: CompositeHandKeyPointAnalyzerConstants;\n        maxHandResults: CompositeHandKeyPointAnalyzerConstants;\n    }\n\n    interface CompositeObjectAnalyzerSettingConfiguration {\n        analyzerType: CompositeObjectAnalyzerConstants;\n        allowMultiResults: boolean;\n        allowClassification: boolean;\n    }\n}"
  },
  {
    "path": "react-native-hms-mlimage/src/index.js",
    "content": "/*\n * Copyright 2023. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from 'react-native';\nimport React, { Component } from 'react';\nimport { requireNativeComponent, View } from 'react-native';\nimport {\n  CompositeFaceAnalyzerConstants,\n  CompositeTextAnalyzeConstants,\n  CompositeSkeletonAnalyzerConstants,\n  CompositeHandKeyPointAnalyzerConstants,\n  CompositeObjectAnalyzerConstants\n} from \"./constants\";\n\n\nconst HMSSurfaceView = requireNativeComponent('HMSSurfaceView');\n\nexport const {\n  HMSFrame,\n  HMSImageClassification,\n  HMSObjectRecognition,\n  HMSLandmarkRecognition,\n  HMSImageSegmentation,\n  HMSImageSuperResolution,\n  HMSProductVisionSearch,\n  HMSDocumentSkewCorrection,\n  HMSTextImageSuperResolution,\n  HMSSceneDetection,\n  HMSApplication,\n  HMSLensEngine,\n  HMSComposite\n} = NativeModules;\n\nexport {\n  CompositeFaceAnalyzerConstants,\n  CompositeTextAnalyzeConstants,\n  CompositeSkeletonAnalyzerConstants,\n  CompositeHandKeyPointAnalyzerConstants,\n  CompositeObjectAnalyzerConstants\n};\n\nexport default class SurfaceView extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return <HMSSurfaceView {...this.props} />;\n  }\n}\n\nSurfaceView.propTypes = {\n  ...View.propTypes\n}"
  },
  {
    "path": "react-native-hms-mllanguage/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mllanguage/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: react-native-document-picker &nbsp;4.1.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2016 Elyx0</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">The MIT License (MIT)</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy<br />\nof this software and associated documentation files (the &quot;Software&quot;), to deal<br />\nin the Software without restriction, including without limitation the rights<br />\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\ncopies of the Software, and to permit persons to whom the Software is<br />\nfurnished to do so, subject to the following conditions:</p>\n\n<p>The above copyright notice and this permission notice shall be included in all<br />\ncopies or substantial portions of the Software.</p>\n\n<p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\nSOFTWARE.</p>\n\n<h1 style=\"text-align:start\">&nbsp;</h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;<strong><span style=\"font-size:16pt\">Written Offer&nbsp;</span></strong><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:</span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"color:blue\"><u><span style=\"font-family:Arial,sans-serif\"><a href=\"mailto:foss@huawei.com\" style=\"color:blue; text-decoration:underline\">foss@huawei.com</a></span></u></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">This offer is valid to anyone in receipt of this information.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-mllanguage/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS ML</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mllanguage\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-mllanguage?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mllanguage\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-mllanguage?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-mllanguage.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThe React Native ML Language Plugin allows your apps to easily leverage Huawei's long-term proven expertise in machine learning to support diverse artificial intelligence (AI) applications throughout a wide range of industries. Thanks to Huawei's technology accumulation, ML Language Plugin provides diversified leading machine learning capabilities that are easy to use, helping you develop various AI apps.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050726178?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-mllanguage\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/overview-0000001051088416-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Supported Location](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/supported-location-0000001075977968-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-mllanguage/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n    mavenCentral()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation \"com.facebook.react:react-native:+\"\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-translate:3.11.0.302'\n    // Import the translation algorithm package.\n    implementation 'com.huawei.hms:ml-computer-translate-model:3.11.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-language-detection:3.11.0.302'\n    // Import the language detection algorithm package.\n    implementation 'com.huawei.hms:ml-computer-language-detection-model:3.11.0.302'\n\n    // Import the ASR plug-in.\n    implementation 'com.huawei.hms:ml-computer-voice-asr-plugin:3.12.0.301'\n    // Import the ASR SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-asr:3.12.0.301'\n\n    // Import the TTS SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-tts:3.12.0.301'\n    // Import an algorithm package\n    implementation 'com.huawei.hms:ml-computer-voice-tts-model-bee:3.6.0.300'\n    // Import the eagle voice package.\n    implementation 'com.huawei.hms:ml-computer-voice-tts-model-eagle:3.6.0.300'\n\n    // Import the audio file transcription SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-aft:3.11.0.301'\n\n    // Import the real-time transcription SDK.\n    implementation 'com.huawei.hms:ml-computer-voice-realtimetranscription:3.12.0.301'\n\n    // Import the sound detection package.\n    implementation 'com.huawei.hms:ml-speech-semantics-sounddect-sdk:3.11.0.303'\n    // Import the sound detection model.\n    implementation 'com.huawei.hms:ml-speech-semantics-sounddect-model:3.11.0.303'\n\n    // Import the custom model\n    implementation 'com.huawei.hms:ml-computer-model-executor:3.11.0.301'\n    implementation 'mindspore:mindspore-lite:5.0.5.300'\n\n}"
  },
  {
    "path": "react-native-hms-mllanguage/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-mllanguage/android/gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\nAPP_HOME=$( cd \"${APP_HOME:-./}\" && pwd -P ) || exit\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=${0##*/}\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n# Collect all arguments for the java command;\n#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of\n#     shell script including quotes and variable substitutions, so put them in\n#     double quotes to make sure that they get re-expanded; and\n#   * put everything else in single quotes, so that it's not re-expanded.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.mllanguage\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n\n</manifest>"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/HMSBase.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    public HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * To obtain context\n     * @return app context\n     */\n    public ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     * @param methodName Name of the method\n     */\n    protected void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        if (e instanceof MLException) {\n            MLException e1 = (MLException) e;\n            promise.resolve(UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()));\n        } else {\n            promise.resolve(UNKNOWN.getStatusAndMessage(null, e.getMessage()));\n        }\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, HMSResults e, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(e.getStatusAndMessage());\n    }\n\n    /**\n     * Handles success\n     *\n     * @param methodName method name\n     * @param writableMap result\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, WritableMap writableMap, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/HMSML.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.mllanguage.commonservices.HMSApplication;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSAft;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSAsr;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSLanguageDetection;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSSoundDetect;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSSpeechRtt;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSTextToSpeech;\nimport com.huawei.hms.rn.mllanguage.languagevoicerelatedservices.HMSTranslate;\nimport com.huawei.hms.rn.mllanguage.modelrelatedservices.HMSModelDownload;\nimport com.huawei.hms.rn.mllanguage.modelrelatedservices.HMSCustomModel;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSML implements ReactPackage {\n\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSApplication(reactContext));\n        modules.add(new HMSTranslate(reactContext));\n        modules.add(new HMSLanguageDetection(reactContext));\n        modules.add(new HMSAsr(reactContext));\n        modules.add(new HMSAft(reactContext));\n        modules.add(new HMSSpeechRtt(reactContext));\n        modules.add(new HMSSoundDetect(reactContext));\n        modules.add(new HMSTextToSpeech(reactContext));\n        modules.add(new HMSModelDownload(reactContext));\n        modules.add(new HMSCustomModel(reactContext));\n\n        return modules;\n    }\n\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/commonservices/HMSApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.commonservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ERROR_CODES;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.UNKNOWN;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.common.MLApplication;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class HMSApplication extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSApplication(ReactApplicationContext reactContext) {\n        super(reactContext, HMSApplication.class.getSimpleName(), ERROR_CODES);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param apiKey api key\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param accessToken access token\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAccessToken(String accessToken, final Promise promise) {\n        startMethodExecTimer(\"setAccessToken\");\n\n        if (TextUtils.isEmpty(accessToken)) {\n            handleResult(\"setAccessToken\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setAccessToken(accessToken);\n        handleResult(\"setAccessToken\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the userRegion dynamically\n     *\n     * @param userRegion\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setUserRegion(int userRegion, final Promise promise) {\n        startMethodExecTimer(\"setUserRegion\");\n\n        if ( userRegion != MLApplication.REGION_DR_CHINA &&\n                userRegion != MLApplication.REGION_DR_GERMAN &&\n                userRegion != MLApplication.REGION_DR_RUSSIA &&\n                userRegion != MLApplication.REGION_DR_SINGAPORE ) {\n            handleResult(\"setUserRegion\", UNKNOWN, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setUserRegion(userRegion);\n        handleResult(\"setUserRegion\", SUCCESS, promise);\n    }\n\n\n    /**\n     * Returns api key that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        handleResult(\"getApiKey\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getApiKey()), promise);\n    }\n\n    /**\n     * Returns Country Code that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getCountryCode(final Promise promise) {\n        startMethodExecTimer(\"getCountryCode\");\n        handleResult(\"getCountryCode\",\n                HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getCountryCode()), promise);\n    }\n\n\n\n    /**\n     * Enables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n        handleResult(\"enableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        handleResult(\"disableLogger\", SUCCESS, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/constants/HMSConstants.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.constants;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport com.huawei.hms.mlsdk.aft.MLAftConstants;\nimport com.huawei.hms.mlsdk.aft.MLAftErrors;\nimport com.huawei.hms.mlsdk.asr.MLAsrConstants;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadStrategy;\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetectConstants;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.tts.MLTtsAudioFragment;\nimport com.huawei.hms.mlsdk.tts.MLTtsConstants;\nimport com.huawei.hms.mlsdk.tts.MLTtsEngine;\nimport com.huawei.hms.mlsdk.tts.MLTtsError;\nimport com.huawei.hms.mlsdk.tts.MLTtsWarn;\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSConstants {\n    // Translate\n    public static final String TRANSLATE_DOWNLOAD_ON_PROCESS = \"translateDownloadProcess\";\n\n    // Tts\n    public static final String TTS_ON_AUDIO_AVAILABLE = \"ttsOnAudioAvailable\";\n\n    public static final String TTS_ON_EVENT = \"ttsOnEvent\";\n\n    public static final String TTS_ON_RANGE_START = \"ttsOnRangeStart\";\n\n    public static final String TTS_ON_WARN = \"ttsOnWarn\";\n\n    public static final String TTS_ON_ERROR = \"ttsOnError\";\n\n    // Aft\n    public static final String AFT_ON_INIT_COMPLETE = \"aftOnInitComplete\";\n\n    public static final String AFT_ON_UPLOAD_PROGRESS = \"aftOnUploadProgress\";\n\n    public static final String AFT_ON_EVENT = \"aftOnEvent\";\n\n    public static final String AFT_ON_RESULT = \"aftOnResult\";\n\n    public static final String AFT_ON_ERROR = \"aftOnError\";\n\n    // Speech rtt\n    public static final String SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnRecognizingResults\";\n\n    public static final String SPEECH_RTT_ON_ERROR = \"speechRttOnError\";\n\n    public static final String SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\";\n\n    public static final String SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\";\n\n    public static final String SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\";\n\n    public static final String SPEECH_RTT_ON_STATE = \"speechRttOnState\";\n\n    // Sound detect\n    public static final String SOUND_DETECT_ON_FAILURE = \"soundDetectOnFailure\";\n\n    public static final String SOUND_DETECT_ON_SUCCESS = \"soundDetectOnSuccess\";\n\n    // Asr\n    public static final String ASR_ON_STATE = \"asrOnState\";\n\n    public static final String ASR_ON_VOICE_DATA_RECEIVED = \"asrOnVoiceDataReceived\";\n\n    public static final String ASR_ON_STARTING_SPEECH = \"asrOnStartingOfSpeech\";\n\n    public static final String ASR_ON_START_LISTENING = \"asrOnStartListening\";\n\n    public static final String ASR_ON_ERROR = \"asrOnError\";\n\n    public static final String ASR_ON_RECOGNIZING_RESULTS = \"asrOnRecognizingResults\";\n\n    public static final String ASR_ON_RESULTS = \"asrOnResults\";\n\n    // Model download\n    public static final String DOWNLOAD_ON_PROCESS = \"modelDownloadOnProcess\";\n\n    public static final int MODEL_TTS_TAG = 1;\n\n    public static final int MODEL_TRANSLATE_TAG = 2;\n\n    public static final int MODEL_CUSTOM_TAG = 3;\n\n    // on-device languages\n    private static final Map<String, Object> BASE_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"LATIN\", \"rm\");\n            put(\"ENGLISH\", \"en\");\n            put(\"CHINESE\", \"zh\");\n            put(\"JAPANESE\", \"ja\");\n            put(\"KOREAN\", \"ko\");\n            put(\"RUSSIAN\", \"ru\");\n            put(\"GERMAN\", \"de\");\n            put(\"FRENCH\", \"fr\");\n            put(\"ITALIAN\", \"it\");\n            put(\"PORTUGUESE\", \"pt\");\n            put(\"SPANISH\", \"es\");\n        }\n    };\n\n    // on-cloud languages\n    private static final Map<String, Object> EXTRA_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"POLISH\", \"pl\");\n            put(\"NORWEGIAN\", \"no\");\n            put(\"SWEDISH\", \"sv\");\n            put(\"DANISH\", \"da\");\n            put(\"TURKISH\", \"tr\");\n            put(\"FINNISH\", \"fi\");\n            put(\"THAI\", \"th\");\n            put(\"ARABIC\", \"ar\");\n            put(\"HINDI\", \"hi\");\n        }\n    };\n\n\n    // error codes exposed by HMSApplication\n    public static final Map<String, Object> ERROR_CODES = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"UNKNOWN\", MLException.UNKNOWN);\n            put(\"SUCCESS\", MLException.SUCCESS);\n            put(\"DISCARDED\", MLException.DISCARDED);\n            put(\"INNER\", MLException.INNER);\n            put(\"INACTIVE\", MLException.INACTIVE);\n            put(\"NOT_SUPPORTED\", MLException.NOT_SUPPORTED);\n            put(\"ILLEGAL_PARAMETER\", MLException.ILLEGAL_PARAMETER);\n            put(\"OVERDUE\", MLException.OVERDUE);\n            put(\"NO_FOUND\", MLException.NO_FOUND);\n            put(\"DUPLICATE_FOUND\", MLException.DUPLICATE_FOUND);\n            put(\"NO_PERMISSION\", MLException.NO_PERMISSION);\n            put(\"INSUFFICIENT_RESOURCE\", MLException.INSUFFICIENT_RESOURCE);\n            put(\"ANALYSIS_FAILURE\", MLException.ANALYSIS_FAILURE);\n            put(\"INTERRUPTED\", MLException.INTERRUPTED);\n            put(\"EXCEED_RANGE\", MLException.EXCEED_RANGE);\n            put(\"DATA_MISSING\", MLException.DATA_MISSING);\n            put(\"AUTHENTICATION_REQUIRED\", MLException.AUTHENTICATION_REQUIRED);\n            put(\"TFLITE_NOT_COMPATIBLE\", MLException.TFLITE_NOT_COMPATIBLE);\n            put(\"INSUFFICIENT_SPACE\", MLException.INSUFFICIENT_SPACE);\n            put(\"HASH_MISS\", MLException.HASH_MISS);\n            put(\"TOKEN_INVALID\", MLException.TOKEN_INVALID);\n            put(\"FRAME_NULL\", FRAME_NULL.getErrCode());\n            put(\"ANALYZER_NOT_AVAILABLE\", ANALYZER_NOT_AVAILABLE.getErrCode());\n            put(\"CURRENT_ACTIVITY_NULL\", CURRENT_ACTIVITY_NULL.getErrCode());\n            put(\"CANCEL\", CANCEL.getErrCode());\n            put(\"FAILURE\", FAILURE.getErrCode());\n            put(\"DENY\", DENY.getErrCode());\n            put(\"STRING_PARAM_NULL\", STRING_PARAM_NULL.getErrCode());\n            put(\"REMOTE_MODEL_NULL\", REMOTE_MODEL_NULL.getErrCode());\n            put(\"ASR_RECOGNIZER_NULL\", ASR_RECOGNIZER_NULL.getErrCode());\n            put(\"TTS_ENGINE_NULL\", TTS_ENGINE_NULL.getErrCode());\n            put(\"SOUND_DECT_NULL\", SOUND_DECT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_SETTING_NULL\", CUSTOM_MODEL_SETTING_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_INPUT_NULL\", CUSTOM_MODEL_INPUT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_EXECUTOR_SETTING_NULL\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL.getErrCode());\n            put(\"DATA_SET_NOT_VALID\", DATA_SET_NOT_VALID.getErrCode());\n        }\n    });\n\n    // translate language constants HMSTranslate\n    public static final Map<String, Object> TRANSLATE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TRANSLATE_DOWNLOAD_ON_PROCESS\", TRANSLATE_DOWNLOAD_ON_PROCESS);\n            putAll(BASE_LANGUAGES);\n            putAll(EXTRA_LANGUAGES);\n            put(\"TAMIL\", \"ta\");\n            put(\"HUNGARIAN\", \"hu\");\n            put(\"DUTCH\", \"nl\");\n            put(\"PERSIAN\", \"fa\");\n            put(\"SLOVAK\", \"sk\");\n            put(\"ESTONIAN\", \"et\");\n            put(\"LATVIAN\", \"lv\");\n            put(\"KHMER\", \"km\");\n            put(\"INDONESIAN\", \"id\");\n            put(\"SERBIAN\", \"sr\");\n            put(\"GUJARATI\", \"gu\");\n            put(\"AFRIKAANS\", \"af\");\n            put(\"MALAY\", \"ms\");\n            put(\"GREEK\", \"el\");\n            put(\"IRISH\", \"is\");\n            put(\"BURMESE\", \"my\");\n            put(\"MARATHI\", \"mr\");\n            put(\"CZECH\", \"cs\");\n            put(\"VIETNAMESE\", \"vi\");\n            put(\"TAGALOG\", \"tl\");\n            put(\"HEBREW\", \"he\");\n            put(\"ROMANIAN\", \"ro\");\n            put(\"BULGARIAN\", \"bg\");\n            put(\"CROATIAN\", \"hr\");\n            put(\"PUNJABI\", \"pa\");\n            put(\"TELUGU\", \"te\");\n            put(\"TRADITIONAL_CHINESE\", \"zh-hk\");\n        }\n    });\n\n\n\n    // language detection constants HMSLanguageDetection\n    public static final Map<String, Object> LANGUAGE_DETECTION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n                put(\"PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n                put(\"UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD\",\n                    MLRemoteLangDetector.UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD);\n            }\n        });\n\n    // asr constants HMSAsr\n    public static final Map<String, Object> ASR_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ERR_NO_NETWORK\", MLAsrConstants.ERR_NO_NETWORK);\n            put(\"ERR_NO_UNDERSTAND\", MLAsrConstants.ERR_NO_UNDERSTAND);\n            put(\"ERR_SERVICE_UNAVAILABLE\", MLAsrConstants.ERR_SERVICE_UNAVAILABLE);\n            put(\"ERR_INVALIDATE_TOKEN\", MLAsrConstants.ERR_INVALIDATE_TOKEN);\n            put(\"FEATURE_ALL_IN_ONE\", MLAsrConstants.FEATURE_ALLINONE);\n            put(\"FEATURE_WORD_FLUX\", MLAsrConstants.FEATURE_WORDFLUX);\n            put(\"LAN_EN_US\", MLAsrConstants.LAN_EN_US);\n            put(\"LAN_FR_FR\", MLAsrConstants.LAN_FR_FR);\n            put(\"LAN_ZH_CN\", MLAsrConstants.LAN_ZH_CN);\n            put(\"LAN_ES_ES\", MLAsrConstants.LAN_ES_ES);\n            put(\"LAN_DE_DE\", MLAsrConstants.LAN_DE_DE);\n            put(\"LAN_IT_IT\", MLAsrConstants.LAN_IT_IT);\n            put(\"LAN_AR\", MLAsrConstants.LAN_AR);\n            put(\"LAN_RU_RU\", MLAsrConstants.LAN_RU_RU);\n            put(\"LAN_TH_TH\", MLAsrConstants.LAN_TH_TH);\n            put(\"LAN_MS_MY\", MLAsrConstants.LAN_MS_MY);\n            put(\"LAN_FIL_PH\", MLAsrConstants.LAN_FIL_PH);\n            put(\"STATE_WAITING\", MLAsrConstants.STATE_WAITING);\n            put(\"STATE_NO_UNDERSTAND\", MLAsrConstants.STATE_NO_UNDERSTAND);\n            put(\"STATE_NO_SOUND_TIMES_EXCEED\", MLAsrConstants.STATE_NO_SOUND_TIMES_EXCEED);\n            put(\"STATE_NO_SOUND\", MLAsrConstants.STATE_NO_SOUND);\n            put(\"STATE_NO_NETWORK\", MLAsrConstants.STATE_NO_NETWORK);\n            put(\"STATE_LISTENING\", MLAsrConstants.STATE_LISTENING);\n            put(\"ASR_ON_ERROR\", ASR_ON_ERROR);\n            put(\"ASR_ON_RECOGNIZING_RESULTS\", ASR_ON_RECOGNIZING_RESULTS);\n            put(\"ASR_ON_RESULTS\", ASR_ON_RESULTS);\n            put(\"ASR_ON_START_LISTENING\", ASR_ON_START_LISTENING);\n            put(\"ASR_ON_STARTING_SPEECH\", ASR_ON_STARTING_SPEECH);\n            put(\"ASR_ON_STATE\", ASR_ON_STATE);\n            put(\"ASR_ON_VOICE_DATA_RECEIVED\", ASR_ON_VOICE_DATA_RECEIVED);\n        }\n    });\n\n    // tts constants HMSTextToSpeech\n    public static final Map<String, Object> TTS_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TTS_OFFLINE_MODE\", MLTtsConstants.TTS_OFFLINE_MODE);\n            put(\"TTS_ONLINE_MODE\", MLTtsConstants.TTS_ONLINE_MODE);\n            put(\"EXTERNAL_PLAYBACK\", MLTtsEngine.EXTERNAL_PLAYBACK);\n            put(\"OPEN_STREAM\", MLTtsEngine.OPEN_STREAM);\n            put(\"QUEUE_APPEND\", MLTtsEngine.QUEUE_APPEND);\n            put(\"QUEUE_FLUSH\", MLTtsEngine.QUEUE_FLUSH);\n            put(\"ERR_AUDIO_PLAYER_FAILED\", MLTtsError.ERR_AUDIO_PLAYER_FAILED);\n            put(\"ERR_AUTHORIZE_FAILED\", MLTtsError.ERR_AUTHORIZE_FAILED);\n            put(\"ERR_ILLEGAL_PARAMETER\", MLTtsError.ERR_ILLEGAL_PARAMETER);\n            put(\"ERR_INSUFFICIENT_BALANCE\", MLTtsError.ERR_INSUFFICIENT_BALANCE);\n            put(\"ERR_INTERNAL\", MLTtsError.ERR_INTERNAL);\n            put(\"ERR_NET_CONNECT_FAILED\", MLTtsError.ERR_NET_CONNECT_FAILED);\n            put(\"ERR_SPEECH_SYNTHESIS_FAILED\", MLTtsError.ERR_SPEECH_SYNTHESIS_FAILED);\n            put(\"ERR_UNKNOWN\", MLTtsError.ERR_UNKNOWN);\n            put(\"WARN_INSUFFICIENT_BANDWIDTH\", MLTtsWarn.WARN_INSUFFICIENT_BANDWIDTH);\n            put(\"EVENT_PLAY_PAUSE\", MLTtsConstants.EVENT_PLAY_PAUSE);\n            put(\"EVENT_PLAY_RESUME\", MLTtsConstants.EVENT_PLAY_RESUME);\n            put(\"EVENT_PLAY_START\", MLTtsConstants.EVENT_PLAY_START);\n            put(\"EVENT_PLAY_STOP\", MLTtsConstants.EVENT_PLAY_STOP);\n            put(\"EVENT_PLAY_STOP_INTERRUPTED\", MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED);\n            put(\"EVENT_SYNTHESIS_START\", MLTtsConstants.EVENT_SYNTHESIS_START);\n            put(\"EVENT_SYNTHESIS_COMPLETE\", MLTtsConstants.EVENT_SYNTHESIS_COMPLETE);\n            put(\"EVENT_SYNTHESIS_END\", MLTtsConstants.EVENT_SYNTHESIS_END);\n            put(\"EVENT_SYNTHESIS_INTERRUPTED\", MLTtsConstants.EVENT_SYNTHESIS_INTERRUPTED);\n            put(\"TTS_EN_US\", MLTtsConstants.TTS_EN_US);\n            put(\"TTS_LAN_DE_DE\", MLTtsConstants.TTS_LAN_DE_DE);\n            put(\"TTS_LAN_ES_ES\", MLTtsConstants.TTS_LAN_ES_ES);\n            put(\"TTS_LAN_FR_FR\", MLTtsConstants.TTS_LAN_FR_FR);\n            put(\"TTS_LAN_IT_IT\", MLTtsConstants.TTS_LAN_IT_IT);\n            put(\"TTS_LAN_TH_TH\", MLTtsConstants.TTS_LAN_TH_TH);\n            put(\"TTS_LAN_MS_MS\", MLTtsConstants.TTS_LAN_MS_MS);\n            put(\"TTS_LAN_RU_RU\", MLTtsConstants.TTS_LAN_RU_RU);\n            put(\"TTS_LAN_PL_PL\", MLTtsConstants.TTS_LAN_PL_PL);\n            put(\"TTS_LAN_AR_AR\", MLTtsConstants.TTS_LAN_AR_AR);\n            put(\"TTS_LAN_TR_TR\", MLTtsConstants.TTS_LAN_TR_TR);\n            put(\"TTS_SPEAKER_FEMALE_EN\", MLTtsConstants.TTS_SPEAKER_FEMALE_EN);\n            put(\"TTS_SPEAKER_FEMALE_ZH\", MLTtsConstants.TTS_SPEAKER_FEMALE_ZH);\n            put(\"TTS_SPEAKER_FEMALE_ZH_2\", MLTtsConstants.TTS_SPEAKER_FEMALE_ZH_2);\n            put(\"TTS_SPEAKER_MALE_EN\", MLTtsConstants.TTS_SPEAKER_MALE_EN);\n            put(\"TTS_SPEAKER_MALE_EN_2\", MLTtsConstants.TTS_SPEAKER_MALE_EN_2);\n            put(\"TTS_SPEAKER_MALE_ZH\", MLTtsConstants.TTS_SPEAKER_MALE_ZH);\n            put(\"TTS_SPEAKER_MALE_ZH_2\", MLTtsConstants.TTS_SPEAKER_MALE_ZH_2);\n            put(\"TTS_ZH_HANS\", MLTtsConstants.TTS_ZH_HANS);\n            put(\"TTS_SPEAKER_FEMALE_DE\", MLTtsConstants.TTS_SPEAKER_FEMALE_DE);\n            put(\"TTS_SPEAKER_FEMALE_ES\", MLTtsConstants.TTS_SPEAKER_FEMALE_ES);\n            put(\"TTS_SPEAKER_FEMALE_FR\", MLTtsConstants.TTS_SPEAKER_FEMALE_FR);\n            put(\"TTS_SPEAKER_FEMALE_IT\", MLTtsConstants.TTS_SPEAKER_FEMALE_IT);\n            put(\"TTS_SPEAKER_FEMALE_TH\", MLTtsConstants.TTS_SPEAKER_FEMALE_TH);\n            put(\"TTS_SPEAKER_FEMALE_MS\", MLTtsConstants.TTS_SPEAKER_FEMALE_MS);\n            put(\"TTS_SPEAKER_FEMALE_RU\", MLTtsConstants.TTS_SPEAKER_FEMALE_RU);\n            put(\"TTS_SPEAKER_FEMALE_PL\", MLTtsConstants.TTS_SPEAKER_FEMALE_PL);\n            put(\"TTS_SPEAKER_FEMALE_AR\", MLTtsConstants.TTS_SPEAKER_FEMALE_AR);\n            put(\"TTS_SPEAKER_FEMALE_TR\", MLTtsConstants.TTS_SPEAKER_FEMALE_TR);\n            put(\"TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE);\n            put(\"TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE);\n            put(\"TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE\", MLTtsConstants.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE);\n            put(\"LANGUAGE_AVAILABLE\", MLTtsConstants.LANGUAGE_AVAILABLE);\n            put(\"LANGUAGE_NOT_SUPPORT\", MLTtsConstants.LANGUAGE_NOT_SUPPORT);\n            put(\"LANGUAGE_UPDATING\", MLTtsConstants.LANGUAGE_UPDATING);\n            put(\"CHANNEL_OUT_MONO\", MLTtsAudioFragment.CHANNEL_OUT_MONO);\n            put(\"FORMAT_PCM_8BIT\", MLTtsAudioFragment.FORMAT_PCM_8BIT);\n            put(\"FORMAT_PCM_16BIT\", MLTtsAudioFragment.FORMAT_PCM_16BIT);\n            put(\"SAMPLE_RATE_16K\", MLTtsAudioFragment.SAMPLE_RATE_16K);\n            put(\"TTS_ON_AUDIO_AVAILABLE\", TTS_ON_AUDIO_AVAILABLE);\n            put(\"TTS_ON_EVENT\", TTS_ON_EVENT);\n            put(\"TTS_ON_RANGE_START\", TTS_ON_RANGE_START);\n            put(\"TTS_ON_WARN\", TTS_ON_WARN);\n            put(\"TTS_ON_ERROR\", TTS_ON_ERROR);\n        }\n    });\n\n    // aft constants HMSAft\n    public static final Map<String, Object> AFT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"LANGUAGE_ZH\", MLAftConstants.LANGUAGE_ZH);\n            put(\"LANGUAGE_EN_US\", MLAftConstants.LANGUAGE_EN_US);\n            put(\"ERR_UNKNOWN\", MLAftErrors.ERR_UNKNOWN);\n            put(\"ERR_TASK_NOT_EXISTED\", MLAftErrors.ERR_TASK_NOT_EXISTED);\n            put(\"ERR_TASK_ALREADY_INPROGRESS\", MLAftErrors.ERR_TASK_ALREADY_INPROGRESS);\n            put(\"ERR_RESULT_WHEN_UPLOADING\", MLAftErrors.ERR_RESULT_WHEN_UPLOADING);\n            put(\"ERR_NO_ENOUGH_STORAGE\", MLAftErrors.ERR_NO_ENOUGH_STORAGE);\n            put(\"ERR_NETCONNECT_FAILED\", MLAftErrors.ERR_NETCONNECT_FAILED);\n            put(\"ERR_LANGUAGE_CODE_NOTSUPPORTED\", MLAftErrors.ERR_LANGUAGE_CODE_NOTSUPPORTED);\n            put(\"ERR_INTERNAL\", MLAftErrors.ERR_INTERNAL);\n            put(\"ERR_ILLEGAL_PARAMETER\", MLAftErrors.ERR_ILLEGAL_PARAMETER);\n            put(\"ERR_FILE_NOT_FOUND\", MLAftErrors.ERR_FILE_NOT_FOUND);\n            put(\"ERR_ENGINE_BUSY\", MLAftErrors.ERR_ENGINE_BUSY);\n            put(\"ERR_SERVICE_CREDIT\", MLAftErrors.ERR_SERVICE_CREDIT);\n            put(\"ERR_SERVICE_UNSUBSCRIBED\", MLAftErrors.ERR_SERVICE_UNSUBSCRIBED);\n            put(\"ERR_SERVICE_FREE_USED_UP\", MLAftErrors.ERR_SERVICE_FREE_USED_UP);\n            put(\"ERR_AUTHORIZE_FAILED\", MLAftErrors.ERR_AUTHORIZE_FAILED);\n            put(\"ERR_AUDIO_UPLOAD_FAILED\", MLAftErrors.ERR_AUDIO_UPLOAD_FAILED);\n            put(\"ERR_AUDIO_TRANSCRIPT_FAILED\", MLAftErrors.ERR_AUDIO_TRANSCRIPT_FAILED);\n            put(\"ERR_AUDIO_LENGTH_OVERFLOW\", MLAftErrors.ERR_AUDIO_LENGTH_OVERFLOW);\n            put(\"ERR_AUDIO_FILE_NOTSUPPORTED\", MLAftErrors.ERR_AUDIO_FILE_NOTSUPPORTED);\n            put(\"ERR_AUDIO_FILE_SIZE_OVERFLOW\", MLAftErrors.ERR_AUDIO_FILE_SIZE_OVERFLOW);\n            put(\"ERR_AUDIO_INIT_FAILED\", MLAftErrors.ERR_AUDIO_INIT_FAILED);\n            put(\"AFT_ON_ERROR\", AFT_ON_ERROR);\n            put(\"AFT_ON_EVENT\", AFT_ON_EVENT);\n            put(\"AFT_ON_INIT_COMPLETE\", AFT_ON_INIT_COMPLETE);\n            put(\"AFT_ON_UPLOAD_PROGRESS\", AFT_ON_UPLOAD_PROGRESS);\n            put(\"AFT_ON_RESULT\", AFT_ON_RESULT);\n        }\n    });\n\n    // speech rtt constants HMSSpeechRtt\n    public static final Map<String, Object> SPEECH_RTT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"ERR_INVALID_TOKEN\", MLSpeechRealTimeTranscriptionConstants.ERR_INVALIDE_TOKEN);\n            put(\"ERR_NO_NETWORK\", MLSpeechRealTimeTranscriptionConstants.ERR_NO_NETWORK);\n            put(\"ERR_SERVICE_CREDIT\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_CREDIT);\n            put(\"ERR_SERVICE_UNAVAILABLE\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_UNAVAILABLE);\n            put(\"ERR_SERVICE_UNSUBSCRIBED\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_UNSUBSCRIBED);\n            put(\"ERR_SERVICE_FREE_USED_UP\", MLSpeechRealTimeTranscriptionConstants.ERR_SERVICE_FREE_USED_UP);\n            put(\"LAN_EN_US\", MLSpeechRealTimeTranscriptionConstants.LAN_EN_US);\n            put(\"LAN_FR_FR\", MLSpeechRealTimeTranscriptionConstants.LAN_FR_FR);\n            put(\"LAN_ZH_CN\", MLSpeechRealTimeTranscriptionConstants.LAN_ZH_CN);\n            put(\"LAN_ES_ES\", MLSpeechRealTimeTranscriptionConstants.LAN_ES_ES);\n            put(\"LAN_EN_IN\", MLSpeechRealTimeTranscriptionConstants.LAN_EN_IN);\n            put(\"LAN_DE_DE\", MLSpeechRealTimeTranscriptionConstants.LAN_DE_DE);\n            put(\"STATE_LISTENING\", MLSpeechRealTimeTranscriptionConstants.STATE_LISTENING);\n            put(\"STATE_NO_NETWORK\", MLSpeechRealTimeTranscriptionConstants.STATE_NO_NETWORK);\n            put(\"STATE_NO_UNDERSTAND\", MLSpeechRealTimeTranscriptionConstants.STATE_NO_UNDERSTAND);\n            put(\"STATE_SERVICE_RECONNECTED\", MLSpeechRealTimeTranscriptionConstants.STATE_SERVICE_RECONNECTED);\n            put(\"STATE_SERVICE_RECONNECTING\", MLSpeechRealTimeTranscriptionConstants.STATE_SERVICE_RECONNECTING);\n            put(\"SPEECH_RTT_ON_RECOGNIZING_RESULTS\", SPEECH_RTT_ON_RECOGNIZING_RESULTS);\n            put(\"SPEECH_RTT_ON_ERROR\", SPEECH_RTT_ON_ERROR);\n            put(\"SPEECH_RTT_ON_LISTENING\", SPEECH_RTT_ON_LISTENING);\n            put(\"SPEECH_RTT_ON_STARTING_OF_SPEECH\", SPEECH_RTT_ON_STARTING_OF_SPEECH);\n            put(\"SPEECH_RTT_ON_VOICE_DATA_RECEIVED\", SPEECH_RTT_ON_VOICE_DATA_RECEIVED);\n            put(\"SPEECH_RTT_ON_STATE\", SPEECH_RTT_ON_STATE);\n            put(\"SCENES_SHOPPING\", MLSpeechRealTimeTranscriptionConstants.SCENES_SHOPPING);\n        }\n    });\n\n    // sound detect constants HMSSoundDetect\n    public static final Map<String, Object> SOUND_DETECT_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"SOUND_DETECT_ERROR_AUDIO\", MLSoundDetectConstants.SOUND_DETECT_ERROR_AUDIO);\n            put(\"SOUND_DETECT_ERROR_FATAL_ERROR\", MLSoundDetectConstants.SOUND_DETECT_ERROR_FATAL_ERROR);\n            put(\"SOUND_DETECT_ERROR_NO_MEM\", MLSoundDetectConstants.SOUND_DETECT_ERROR_NO_MEM);\n            put(\"SOUND_DETECT_ERROR_INTERNAL\", MLSoundDetectConstants.SOUND_DETECT_ERROR_INTERNAL);\n            put(\"SOUND_EVENT_TYPE_ALARM\", MLSoundDetectConstants.SOUND_EVENT_TYPE_ALARM);\n            put(\"SOUND_EVENT_TYPE_BABY_CRY\", MLSoundDetectConstants.SOUND_EVENT_TYPE_BABY_CRY);\n            put(\"SOUND_EVENT_TYPE_BARK\", MLSoundDetectConstants.SOUND_EVENT_TYPE_BARK);\n            put(\"SOUND_EVENT_TYPE_CAR_ALARM\", MLSoundDetectConstants.SOUND_EVENT_TYPE_CAR_ALARM);\n            put(\"SOUND_EVENT_TYPE_DOOR_BELL\", MLSoundDetectConstants.SOUND_EVENT_TYPE_DOOR_BELL);\n            put(\"SOUND_EVENT_TYPE_KNOCK\", MLSoundDetectConstants.SOUND_EVENT_TYPE_KNOCK);\n            put(\"SOUND_EVENT_TYPE_LAUGHTER\", MLSoundDetectConstants.SOUND_EVENT_TYPE_LAUGHTER);\n            put(\"SOUND_EVENT_TYPE_MEOW\", MLSoundDetectConstants.SOUND_EVENT_TYPE_MEOW);\n            put(\"SOUND_EVENT_TYPE_SCREAMING\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SCREAMING);\n            put(\"SOUND_EVENT_TYPE_SNEEZE\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SNEEZE);\n            put(\"SOUND_EVENT_TYPE_SNORING\", MLSoundDetectConstants.SOUND_EVENT_TYPE_SNORING);\n            put(\"SOUND_EVENT_TYPE_STEAM_WHISTLE\", MLSoundDetectConstants.SOUND_EVENT_TYPE_STEAM_WHISTLE);\n            put(\"SOUND_EVENT_TYPE_WATER\", MLSoundDetectConstants.SOUND_EVENT_TYPE_WATER);\n            put(\"SOUND_DETECT_ON_FAILURE\", SOUND_DETECT_ON_FAILURE);\n            put(\"SOUND_DETECT_ON_SUCCESS\", SOUND_DETECT_ON_SUCCESS);\n        }\n          \n    });\n\n    // model download constants\n    public static final Map<String, Object> MODEL_DOWNLOAD_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                put(\"REGION_DR_AFILA\", MLModelDownloadStrategy.REGION_DR_AFILA);\n                put(\"REGION_DR_CHINA\", MLModelDownloadStrategy.REGION_DR_CHINA);\n                put(\"REGION_DR_EUROPE\", MLModelDownloadStrategy.REGION_DR_EUROPE);\n                put(\"REGION_DR_RUSSIA\", MLModelDownloadStrategy.REGION_DR_RUSSIA);\n                put(\"DOWNLOAD_ON_PROCESS\", DOWNLOAD_ON_PROCESS);\n                put(\"MODEL_TTS_TAG\", MODEL_TTS_TAG);\n                put(\"MODEL_TRANSLATE_TAG\", MODEL_TRANSLATE_TAG);\n                put(\"MODEL_CUSTOM_TAG\", MODEL_CUSTOM_TAG);\n            }\n        });\n\n}"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/constants/HMSResults.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.constants;\n\nimport com.huawei.hms.mlsdk.common.MLException;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic enum HMSResults {\n    UNKNOWN(MLException.UNKNOWN, \"\"),\n    SUCCESS(MLException.SUCCESS, \"Success\"),\n    FRAME_NULL(20, \"No frame object created with given parameters\"),\n    ANALYZER_NOT_AVAILABLE(21, \"Analyzer is not available\"),\n    CURRENT_ACTIVITY_NULL(22, \"Current activity is null\"),\n    CANCEL(23, \"Recognition cancelled by user\"),\n    FAILURE(24, \"Recognition failed\"),\n    DENY(25, \"Camera does not support BCR\"),\n    STRING_PARAM_NULL(26, \"Given string parameter is null or empty\"),\n    REMOTE_MODEL_NULL(27, \"No remote model object created with given parameters\"),\n    ASR_RECOGNIZER_NULL(28, \"Asr recognizer is null or not created\"),\n    TTS_ENGINE_NULL(30, \"Tts engine is not created\"),\n    SOUND_DECT_NULL(31, \"Sound detector is not initialized\"),\n    CUSTOM_MODEL_SETTING_NULL(32, \"Input output setting is not initialized with given parameters\"),\n    CUSTOM_MODEL_INPUT_NULL(33, \"Model inputs is not initialized with given parameters\"),\n    CUSTOM_MODEL_EXECUTOR_SETTING_NULL(34, \"Model executor setting is not initialized with given parameters\"),\n    DATA_SET_NOT_VALID(35, \"Data set is not valid.\");\n\n    private int errCode;\n\n    private String message;\n\n    HMSResults(int errCode, String message) {\n        this.errCode = errCode;\n        this.message = message;\n    }\n\n    public int getErrCode() {\n        return errCode;\n    }\n\n\n    /**\n     * Combines status and message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.errCode);\n        wm.putString(\"message\", this.message);\n        return wm;\n    }\n\n    /**\n     * Combines status and message with optional parameters\n     *\n     * @param errorCode Error code\n     * @param errorMessage Error message\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer errorCode, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", errorCode == null ? this.errCode : errorCode);\n        wm.putString(\"message\", errorMessage == null ? this.message : errorMessage);\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/creators/HMSObjectCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.creators;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.Log;\n\n\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftSetting;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.custom.MLCustomLocalModel;\nimport com.huawei.hms.mlsdk.custom.MLCustomRemoteModel;\nimport com.huawei.hms.mlsdk.custom.MLModelDataType;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutorSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputOutputSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputs;\nimport com.huawei.hms.mlsdk.langdetect.MLLangDetectorFactory;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetectorSetting;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetectorSetting;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadStrategy;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConfig;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.translate.MLTranslatorFactory;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslateSetting;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslateSetting;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslatorModel;\nimport com.huawei.hms.mlsdk.tts.MLTtsConfig;\nimport com.huawei.hms.mlsdk.tts.MLTtsConstants;\nimport com.huawei.hms.mlsdk.tts.MLTtsLocalModel;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.IOException;\n\npublic final class HMSObjectCreator {\n    private static final String TAG = HMSObjectCreator.class.getSimpleName();\n\n    private static volatile HMSObjectCreator instance;\n\n    public static HMSObjectCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSObjectCreator.class) {\n                if (instance == null) {\n                    instance = new HMSObjectCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Creates MLRemoteAftSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteAftSetting object\n     */\n    public MLRemoteAftSetting createRemoteAftSetting(ReadableMap readableMap) {\n        MLRemoteAftSetting.Factory setting = new MLRemoteAftSetting.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteAftSetting object is created using default options.\");\n            return setting.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageCode\", ReadableType.String)) {\n            setting.setLanguageCode(readableMap.getString(\"languageCode\"));\n            Log.i(TAG, \"MLRemoteAftSetting languageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enablePunctuation\", ReadableType.Boolean)) {\n            setting.enablePunctuation(readableMap.getBoolean(\"enablePunctuation\"));\n            Log.i(TAG, \"MLRemoteAftSetting enablePunctuation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableWordTimeOffset\", ReadableType.Boolean)) {\n            setting.enableWordTimeOffset(readableMap.getBoolean(\"enableWordTimeOffset\"));\n            Log.i(TAG, \"MLRemoteAftSetting enableWordTimeOffset option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableSentenceTimeOffset\", ReadableType.Boolean)) {\n            setting.enableSentenceTimeOffset(readableMap.getBoolean(\"enableSentenceTimeOffset\"));\n            Log.i(TAG, \"MLRemoteAftSetting enableSentenceTimeOffset option set.\");\n        }\n        return setting.create();\n    }\n\n    /**\n     * Creates remote language detector\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetector object\n     */\n    public MLRemoteLangDetector createRemoteLanguageDetector(double trustedThreshold) {\n        return MLLangDetectorFactory.getInstance()\n                .getRemoteLangDetector(createRemoteLanguageDetectorSetting(trustedThreshold));\n    }\n\n    /**\n     * Creates local language detector\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetector object\n     */\n    public MLLocalLangDetector createLocalLanguageDetector(double trustedThreshold) {\n        return MLLangDetectorFactory.getInstance()\n                .getLocalLangDetector(createLocalLanguageDetectorSetting(trustedThreshold));\n    }\n\n    /**\n     * Creates MLRemoteLangDetectorSetting object\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLRemoteLangDetectorSetting object\n     */\n    private MLRemoteLangDetectorSetting createRemoteLanguageDetectorSetting(double trustedThreshold) {\n        return new MLRemoteLangDetectorSetting.Factory().setTrustedThreshold((float) trustedThreshold).create();\n    }\n\n    /**\n     * Creates MLLocalLangDetectorSetting object\n     *\n     * @param trustedThreshold threshold value for detection\n     * @return MLLocalLangDetectorSetting object\n     */\n    private MLLocalLangDetectorSetting createLocalLanguageDetectorSetting(double trustedThreshold) {\n        return new MLLocalLangDetectorSetting.Factory().setTrustedThreshold((float) trustedThreshold).create();\n    }\n\n    /**\n     * Creates MLSpeechRealTimeTranscriptionConfig object\n     *\n     * @param readableMap configuration\n     * @return MLSpeechRealTimeTranscriptionConfig object\n     */\n    public MLSpeechRealTimeTranscriptionConfig createSpeechRealtimeTranscriptionConfig(ReadableMap readableMap) {\n        String language = MLSpeechRealTimeTranscriptionConstants.LAN_EN_US;\n        boolean enablePunctuation = true;\n        boolean enableWordTimeOffset = false;\n        boolean enableSentenceTimeOffset = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig object is created using default options.\");\n            return new MLSpeechRealTimeTranscriptionConfig.Factory().setLanguage(language)\n                    .enableWordTimeOffset(false)\n                    .enableSentenceTimeOffset(false)\n                    .enablePunctuation(true)\n                    .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig language option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enablePunctuation\", ReadableType.Boolean)) {\n            enablePunctuation = readableMap.getBoolean(\"enablePunctuation\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enablePunctuation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableSentenceTimeOffset\", ReadableType.Boolean)) {\n            enableSentenceTimeOffset = readableMap.getBoolean(\"enableSentenceTimeOffset\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enableSentenceTimeOffset option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"enableWordTimeOffset\", ReadableType.Boolean)) {\n            enableWordTimeOffset = readableMap.getBoolean(\"enableWordTimeOffset\");\n            Log.i(TAG, \"MLSpeechRealTimeTranscriptionConfig enableWordTimeOffset option set.\");\n        }\n\n        return new MLSpeechRealTimeTranscriptionConfig.Factory().setLanguage(language)\n                .enableWordTimeOffset(enableWordTimeOffset)\n                .enableSentenceTimeOffset(enableSentenceTimeOffset)\n                .enablePunctuation(enablePunctuation)\n                .create();\n    }\n\n    /**\n     * Creates MLTtsConfig object\n     *\n     * @param readableMap configuration\n     * @return MLTtsConfig object\n     */\n    public MLTtsConfig createTtsConfiguration(ReadableMap readableMap) {\n        double speed = 1.0D;\n        double volume = 1.0D;\n        String language = MLTtsConstants.TTS_EN_US;\n        String person = MLTtsConstants.TTS_SPEAKER_FEMALE_EN;\n        String synthesizeMode = MLTtsConstants.TTS_OFFLINE_MODE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLTtsConfig object is created using default options.\");\n            return new MLTtsConfig().setVolume((float) volume)\n                    .setSpeed((float) speed)\n                    .setLanguage(language)\n                    .setPerson(person);\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"volume\", ReadableType.Number)) {\n            volume = readableMap.getDouble(\"volume\");\n            Log.i(TAG, \"MLTtsConfig volume option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"speed\", ReadableType.Number)) {\n            speed = readableMap.getDouble(\"speed\");\n            Log.i(TAG, \"MLTtsConfig speed option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"MLTtsConfig language option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"person\", ReadableType.String)) {\n            person = readableMap.getString(\"person\");\n            Log.i(TAG, \"MLTtsConfig person option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"synthesizeMode\", ReadableType.String)) {\n            synthesizeMode = readableMap.getString(\"synthesizeMode\");\n            Log.i(TAG, \"MLTtsConfig synthesizeMode option set.\");\n        }\n\n        return new MLTtsConfig().setVolume((float) volume)\n                .setSpeed((float) speed)\n                .setLanguage(language)\n                .setPerson(person)\n                .setSynthesizeMode(synthesizeMode);\n    }\n\n    /**\n     * Creates remote translator\n     *\n     * @param translatorSetting setting\n     * @return MLRemoteTranslator object\n     */\n    public MLRemoteTranslator createRemoteTranslator(ReadableMap translatorSetting) {\n        return MLTranslatorFactory.getInstance().getRemoteTranslator(createRemoteTranslateSetting(translatorSetting));\n    }\n\n    /**\n     * Creates local translator\n     *\n     * @param translatorSetting setting\n     * @return MLRemoteTranslator object\n     */\n    public MLLocalTranslator createLocalTranslator(ReadableMap translatorSetting) {\n        return MLTranslatorFactory.getInstance().getLocalTranslator(createLocalTranslateSetting(translatorSetting));\n    }\n\n    /**\n     * Creates MLModelDownloadStrategy object\n     *\n     * @param readableMap configuration\n     * @return MLModelDownloadStrategy object\n     */\n    public MLModelDownloadStrategy createModelDownloadStrategy(ReadableMap readableMap) {\n        MLModelDownloadStrategy.Factory creator = new MLModelDownloadStrategy.Factory();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelDownloadStrategy object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needWifi\")) {\n            creator.needWifi();\n            Log.i(TAG, \"MLModelDownloadStrategy needWifi option set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needCharging\")) {\n            creator.needCharging();\n            Log.i(TAG, \"MLModelDownloadStrategy needCharging option set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"needDeviceIdle\")) {\n            creator.needDeviceIdle();\n            Log.i(TAG, \"MLModelDownloadStrategy needDeviceIdle option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"region\", ReadableType.Number)) {\n            creator.setRegion(readableMap.getInt(\"region\"));\n            Log.i(TAG, \"MLModelDownloadStrategy region option set\");\n        }\n        return creator.create();\n    }\n\n\n    /**\n     * Creates model input output settings\n     *\n     * @param readableMap model configuration\n     * @return MLModelInputOutputSettings\n     */\n    public MLModelInputOutputSettings createCustomModelInputOutputSetting(ReadableMap readableMap) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelInputOutputSettings object is null.\");\n            return null;\n        }\n\n        int width = 224;\n        int height = 224;\n        int outputSize = 1001;\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"inputFormat\", ReadableType.Map)) {\n            ReadableMap inputFormatMap = readableMap.getMap(\"inputFormat\");\n            if (HMSUtils.getInstance().hasValidKey(inputFormatMap, \"width\", ReadableType.Number)) {\n                width = inputFormatMap.getInt(\"width\");\n                Log.i(TAG, \"MLModelInputOutputSettings inputFormat width option set.\");\n            }\n            if (HMSUtils.getInstance().hasValidKey(inputFormatMap, \"height\", ReadableType.Number)) {\n                height = inputFormatMap.getInt(\"height\");\n                Log.i(TAG, \"MLModelInputOutputSettings inputFormat height option set.\");\n            }\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"outputFormat\", ReadableType.Map)) {\n            ReadableMap outputFormatMap = readableMap.getMap(\"outputFormat\");\n            if (HMSUtils.getInstance().hasValidKey(outputFormatMap, \"outputSize\", ReadableType.Number)) {\n                outputSize = outputFormatMap.getInt(\"outputSize\");\n                Log.i(TAG, \"MLModelInputOutputSettings outputFormat dimensions option set.\");\n            }\n        }\n\n        try {\n            Log.i(TAG, \"MLModelInputOutputSettings object created.\");\n            return new MLModelInputOutputSettings.Factory().setInputFormat(1, MLModelDataType.FLOAT32,\n                            new int[] {1, 3, height, width})\n                    .setOutputFormat(1, MLModelDataType.FLOAT32, new int[] {1, outputSize})\n                    .create();\n        } catch (MLException e) {\n            Log.i(TAG, \"MLModelInputOutputSettings is not created :\" + e.getMessage());\n            return null;\n        }\n    }\n\n    /**\n     * Creates local model\n     *\n     * @param localModelConfiguration model configuration\n     * @return MLCustomLocalModel\n     */\n    private MLCustomLocalModel createCustomLocalModel(ReadableMap localModelConfiguration) {\n        String assetPath = \"\";\n        String localFullPath = \"\";\n        String modelName = \"\";\n\n        if (localModelConfiguration == null) {\n            Log.i(TAG, \"MLCustomLocalModel configuration is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"assetPath\", ReadableType.String)) {\n            assetPath = localModelConfiguration.getString(\"assetPath\");\n            Log.i(TAG, \"MLCustomLocalModel assetPath set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"localFullPath\", ReadableType.String)) {\n            localFullPath = localModelConfiguration.getString(\"localFullPath\");\n            Log.i(TAG, \"MLCustomLocalModel localFullPath set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(localModelConfiguration, \"modelName\", ReadableType.String)) {\n            modelName = localModelConfiguration.getString(\"modelName\");\n            Log.i(TAG, \"MLCustomLocalModel modelName set\");\n        }\n\n        if (TextUtils.isEmpty(modelName)) {\n            Log.i(TAG, \"MLCustomLocalModel modelName null or empty\");\n            return null;\n        }\n\n        if (!TextUtils.isEmpty(assetPath)) {\n            return new MLCustomLocalModel.Factory(modelName).setAssetPathFile(assetPath).create();\n        } else if (!TextUtils.isEmpty(localFullPath)) {\n            return new MLCustomLocalModel.Factory(modelName).setLocalFullPathFile(localFullPath).create();\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Creates remote model\n     *\n     * @param modelName model name\n     * @return MLCustomRemoteModel\n     */\n    private MLCustomRemoteModel createCustomRemoteModel(String modelName) {\n        if (TextUtils.isEmpty(modelName)) {\n            Log.i(TAG, \"MLCustomRemoteModel modelName is null or empty\");\n            return null;\n        }\n        Log.i(TAG, \"MLCustomRemoteModel object is created.\");\n        return new MLCustomRemoteModel.Factory(modelName).create();\n    }\n\n    /**\n     * Creates model executor settings\n     *\n     * @param isRemote Determines whether the process is in the cloud\n     * @param modelSetting Model setting\n     * @return MLModelExecutorSettings\n     */\n    public MLModelExecutorSettings createCustomModelExecutorSettings(boolean isRemote, ReadableMap modelSetting) {\n        if (modelSetting == null) {\n            Log.i(TAG, \"MLModelExecutorSettings object is not created setting null.\");\n            return null;\n        }\n        if (isRemote) {\n            Log.i(TAG, \"MLModelExecutorSettings object is created - remote.\");\n            return new MLModelExecutorSettings.Factory(\n                    createCustomRemoteModel(modelSetting.getString(\"modelName\"))).create();\n        }\n        Log.i(TAG, \"MLModelExecutorSettings object is created - local.\");\n        return new MLModelExecutorSettings.Factory(createCustomLocalModel(modelSetting)).create();\n    }\n\n    /**\n     * Create MLModelInputs object\n     *\n     * @param readableMap model objects container\n     * @param context context object\n     * @return MLModelInputs\n     */\n    public MLModelInputs createCustomModelInputs(ReadableMap readableMap, ReactApplicationContext context) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLModelInputs object array is empty.\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"uri\", ReadableType.String)) {\n            try {\n                int height = 224;\n                int width = 224;\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                        Uri.parse(readableMap.getString(\"uri\")));\n                if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n                    height = readableMap.getInt(\"height\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n                    width = readableMap.getInt(\"width\");\n                }\n                bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);\n                final float[][][][] input = new float[1][height][width][3];\n                for (int i = 0; i < width; i++) {\n                    for (int j = 0; j < height; j++) {\n                        int pixel = bitmap.getPixel(i, j);\n                        input[0][j][i][0] = (Color.red(pixel) - 128.0f) / 128.0f;\n                        input[0][j][i][1] = (Color.green(pixel) - 128.0f) / 128.0f;\n                        input[0][j][i][2] = (Color.blue(pixel) - 128.0f) / 128.0f;\n                    }\n                }\n                return new MLModelInputs.Factory().add(input).create();\n            } catch (IOException | MLException e) {\n                Log.i(TAG, \"MLModelInputs : \" + e.getMessage());\n                return null;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Creates Remote Model from given configuration\n     *\n     * @param modelConfiguration model configuration\n     * @return MLRemoteModel\n     */\n    public MLRemoteModel createRemoteModel(ReadableMap modelConfiguration) {\n        if (modelConfiguration == null) {\n            Log.i(TAG, \"Given model configuration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"translate\", ReadableType.Map)) {\n            ReadableMap translate = modelConfiguration.getMap(\"translate\");\n            if (HMSUtils.getInstance().hasValidKey(translate, \"languageCode\", ReadableType.String)) {\n                Log.i(TAG, \"translate language code is set and object created\");\n                return new MLLocalTranslatorModel.Factory(translate.getString(\"languageCode\")).create();\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"tts\", ReadableType.Map)) {\n            ReadableMap tts = modelConfiguration.getMap(\"tts\");\n            if (HMSUtils.getInstance().hasValidKey(tts, \"speakerName\", ReadableType.String)) {\n                Log.i(TAG, \"tts speaker name is set and object created\");\n                return new MLTtsLocalModel.Factory(tts.getString(\"speakerName\")).create();\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(modelConfiguration, \"customRemoteModel\", ReadableType.Map)) {\n            ReadableMap customRemoteModel = modelConfiguration.getMap(\"customRemoteModel\");\n            if (HMSUtils.getInstance().hasValidKey(customRemoteModel, \"modelName\", ReadableType.String)) {\n                Log.i(TAG, \"customRemoteModel model name is set and object created\");\n                return createCustomRemoteModel(customRemoteModel.getString(\"modelName\"));\n            }\n        }\n        Log.i(TAG, \"No matching option with given configuration\");\n        return null;\n    }\n\n\n    /**\n     * Helper method that sets language\n     *\n     * @param readableMap configuration\n     * @return language\n     */\n    private String setLanguage(ReadableMap readableMap) {\n        String language = \"rm\";\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"Language option set.\");\n        }\n\n        return language;\n    }\n\n\n    /**\n     * Creates MLLocalTranslateSetting object\n     *\n     * @param readableMap configuration\n     * @return MLLocalTranslateSetting object\n     */\n    private MLLocalTranslateSetting createLocalTranslateSetting(ReadableMap readableMap) {\n        String sourceLanguageCode = \"en\";\n        String targetLanguageCode = \"zh\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLLocalTranslateSetting object is created using default options.\");\n            return new MLLocalTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                    .setTargetLangCode(targetLanguageCode)\n                    .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sourceLanguageCode\", ReadableType.String)) {\n            sourceLanguageCode = readableMap.getString(\"sourceLanguageCode\");\n            Log.i(TAG, \"MLLocalTranslateSetting sourceLanguageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"targetLanguageCode\", ReadableType.String)) {\n            targetLanguageCode = readableMap.getString(\"targetLanguageCode\");\n            Log.i(TAG, \"MLLocalTranslateSetting targetLanguageCode option set.\");\n        }\n\n        return new MLLocalTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                .setTargetLangCode(targetLanguageCode)\n                .create();\n    }\n\n    /**\n     * Creates MLRemoteTranslateSetting object\n     *\n     * @param readableMap configuration\n     * @return MLRemoteTranslateSetting object\n     */\n    private MLRemoteTranslateSetting createRemoteTranslateSetting(ReadableMap readableMap) {\n        String sourceLanguageCode = \"en\";\n        String targetLanguageCode = \"zh\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLRemoteTranslateSetting object is created using default options.\");\n            return new MLRemoteTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                    .setTargetLangCode(targetLanguageCode)\n                    .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"sourceLanguageCode\", ReadableType.String)) {\n            sourceLanguageCode = readableMap.getString(\"sourceLanguageCode\");\n            Log.i(TAG, \"MLRemoteTranslateSetting sourceLanguageCode option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"targetLanguageCode\", ReadableType.String)) {\n            targetLanguageCode = readableMap.getString(\"targetLanguageCode\");\n            Log.i(TAG, \"MLRemoteTranslateSetting targetLanguageCode option set.\");\n        }\n\n        return new MLRemoteTranslateSetting.Factory().setSourceLangCode(sourceLanguageCode)\n                .setTargetLangCode(targetLanguageCode)\n                .create();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/creators/HMSResultCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.creators;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftResult;\nimport com.huawei.hms.mlsdk.custom.MLModelOutputs;\nimport com.huawei.hms.mlsdk.langdetect.MLDetectedLang;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionResult;\nimport com.huawei.hms.mlsdk.tts.MLTtsSpeaker;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\n\nimport java.io.File;\nimport java.util.List;\nimport java.util.Set;\n\npublic class HMSResultCreator {\n    private static volatile HMSResultCreator instance;\n\n    public static HMSResultCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSResultCreator.class) {\n                if (instance == null) {\n                    instance = new HMSResultCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts aft results to WritableArray\n     *\n     * @param results aft results\n     * @return WritableArray\n     */\n    public WritableArray getAftResult(List<MLRemoteAftResult.Segment> results) {\n        WritableArray array = Arguments.createArray();\n        for (MLRemoteAftResult.Segment segment : results) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putInt(\"startTime\", segment.getStartTime());\n            writableMap.putInt(\"endTime\", segment.getEndTime());\n            writableMap.putString(\"text\", segment.getText());\n            array.pushMap(writableMap);\n        }\n        return array;\n    }\n\n    /**\n     * Convert detected language list to WritableMap\n     *\n     * @param languageList detected language list\n     * @return WritableMap\n     */\n    public WritableMap getLangDetectionResult(List<MLDetectedLang> languageList) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLDetectedLang lang : languageList) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"languageCode\", lang.getLangCode());\n            writableMap.putDouble(\"probability\", lang.getProbability());\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts speech rtt result to WritableMap\n     *\n     * @param rttResults result list\n     * @return WritableMap\n     */\n    public WritableMap getRttResult(List<MLSpeechRealTimeTranscriptionResult> rttResults) {\n        WritableMap wm = Arguments.createMap();\n        WritableArray array = Arguments.createArray();\n        for (MLSpeechRealTimeTranscriptionResult result : rttResults) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"startTime\", result.startTime);\n            writableMap.putString(\"endTime\", result.endTime);\n            writableMap.putString(\"text\", result.text);\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n    /**\n     * Converts speaker list to WritableMap\n     *\n     * @param speakers speaker list\n     * @return WritableMap\n     */\n    public WritableMap getSpeakers(List<MLTtsSpeaker> speakers) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray array = Arguments.createArray();\n        for (MLTtsSpeaker speaker : speakers) {\n            WritableMap writableMap = Arguments.createMap();\n            writableMap.putString(\"language\", speaker.getLanguage());\n            writableMap.putString(\"name\", speaker.getName());\n            array.pushMap(writableMap);\n        }\n        wm.putArray(\"result\", array);\n        return wm;\n    }\n\n\n    /**\n     * returns CustomModel exec method result\n     *\n     * @param mlModelOutputs method result\n     * @return WritableMap\n     */\n    public WritableMap customModelResult(MLModelOutputs mlModelOutputs) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convert2DFloatArrToWa(mlModelOutputs.getOutput(0)));\n        return wm;\n    }\n\n    /**\n     * Returns getModels method result\n     *\n     * @param models remote models\n     * @return WritableMap\n     */\n    public WritableMap getModels(Set<MLRemoteModel> models) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (MLRemoteModel s : models) {\n            wa.pushString(s.getModelName());\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Recent model file method result\n     *\n     * @param file file object\n     * @return WritableMap\n     */\n    public WritableMap getFilePathResult(File file) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", file.getPath());\n        return wm;\n    }\n\n\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param integer method result\n     * @return WritableMap\n     */\n    public WritableMap integerResult(int integer) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"result\", integer);\n        return wm;\n    }\n\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param set method result\n     * @return WritableMap\n     */\n    public WritableMap stringSetResult(Set<String> set) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        if (set != null) {\n            for (String element : set) {\n                wa.pushString(element);\n            }\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param string result\n     * @return WritableMap\n     */\n    public WritableMap getStringResult(String string) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(string) ? \"\" : string);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param is result\n     * @return WritableMap\n     */\n    public WritableMap getBooleanResult(boolean is) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putBoolean(\"result\", is);\n        return wm;\n    }\n\n\n    /**\n     * Converts string list to result\n     *\n     * @param list data list\n     * @return WritableMap\n     */\n    public WritableMap stringListResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(list));\n        return wm;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/utils/HMSLogger.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"MLLanguage\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.12.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/utils/HMSUtils.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.utils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Iterator;\nimport java.util.List;\n\npublic final class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            synchronized (HMSUtils.class) {\n                if (instance == null) {\n                    instance = new HMSUtils();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts JSONObject to WritableMap\n     *\n     * @param jsonObject JSONObject\n     * @return WritableMap\n     * @throws JSONException jsonObject.get throws it\n     */\n    public WritableMap convertJsonToWritableMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = Arguments.createMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts JSONArray to WritableArray\n     *\n     * @param jsonArray JSONArray\n     * @return WritableArray\n     * @throws JSONException jsonObject.get throws it\n     */\n    private WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n\n        return array;\n    }\n\n\n\n    /**\n     * Converts string list to WritableArray\n     *\n     * @param list list of strings\n     * @return WritableArray\n     */\n    public WritableArray convertStringListIntoWa(List<String> list) {\n        WritableArray writableArray = Arguments.createArray();\n        for (String value : list) {\n            writableArray.pushString(value);\n        }\n        return writableArray;\n    }\n\n    /**\n     * Checks if ReadableMap has valid key\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @param type key's type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Checks boolean key is valid or not and if valid then returns its value\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @return true or false\n     */\n    public boolean boolKeyCheck(ReadableMap readableMap, String key) {\n        if (!hasValidKey(readableMap, key, ReadableType.Boolean)) {\n            return false;\n        }\n        return readableMap.getBoolean(key);\n    }\n\n    /**\n     * Converts byte array to WritableArray\n     *\n     * @param ba byte array\n     * @return WritableArray\n     */\n    public WritableArray convertByteArrToWa(byte[] ba) {\n        WritableArray wa = Arguments.createArray();\n        for (byte b : ba) {\n            wa.pushInt(b);\n        }\n        return wa;\n    }\n\n\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convert2DFloatArrToWa(Float[][] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr[0]) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/helpers/views/HMSBottomSheetGridView.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.helpers.views;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.MotionEvent;\nimport android.widget.AbsListView;\nimport android.widget.GridView;\n\npublic class HMSBottomSheetGridView extends GridView {\n\n    public HMSBottomSheetGridView(Context context) {\n        super(context);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public HMSBottomSheetGridView(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    public boolean onInterceptHoverEvent(MotionEvent event) {\n        return true;\n    }\n\n    @SuppressLint(\"ClickableViewAccessibility\")\n    @Override\n    public boolean onTouchEvent(MotionEvent ev) {\n        if (canScrollVertically(this)) {\n            getParent().requestDisallowInterceptTouchEvent(true);\n        }\n        return super.onTouchEvent(ev);\n    }\n\n    private boolean canScrollVertically(AbsListView view) {\n        boolean canScroll = false;\n        if (view != null && view.getChildCount() > 0) {\n            boolean isOnTop = view.getFirstVisiblePosition() != 0 || view.getChildAt(0).getTop() != 0;\n\n            if (isOnTop) {\n                canScroll = true;\n            }\n        }\n        return canScroll;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSAft.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_ON_ERROR;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_ON_EVENT;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_ON_INIT_COMPLETE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_ON_RESULT;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.AFT_ON_UPLOAD_PROGRESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.net.Uri;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftEngine;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftListener;\nimport com.huawei.hms.mlsdk.aft.cloud.MLRemoteAftResult;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSAft extends HMSBase implements MLRemoteAftListener, MLRemoteAftEngine.LanguageCallback {\n    private Promise languageListPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSAft(ReactApplicationContext reactContext) {\n        super(reactContext, HMSAft.class.getSimpleName(), AFT_CONSTANTS);\n    }\n\n    /**\n     * Initializes the audio transcription engine on the cloud and loads engine resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void init(final Promise promise) {\n        startMethodExecTimer(\"init\");\n        MLRemoteAftEngine.getInstance().init(getContext());\n        handleResult(\"init\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables the audio transcription engine to release engine resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n        MLRemoteAftEngine.getInstance().close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Destroys a long audio transcription task on the cloud.\n     * If the task is destroyed after the audio file is successfully uploaded,\n     * the transcription has started and charging cannot be canceled.\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroyTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"destroyTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"destroyTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().destroyTask(taskId);\n        handleResult(\"destroyTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the long aft languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLongAftLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLongAftLanguages\");\n\n        MLRemoteAftEngine.getInstance().getLongAftLanguages(this);\n        languageListPromise = promise;\n\n    }\n\n    /**\n     * Obtains the short aft languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getShortAftLanguages(final Promise promise) {\n        startMethodExecTimer(\"getShortAftLanguages\");\n\n        MLRemoteAftEngine.getInstance().getShortAftLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Obtains the long audio transcription result from the cloud.\n     * Resolve : Result Object\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLongAftResult(String taskId, final Promise promise) {\n        startMethodExecTimer(\"getLongAftResult\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"getLongAftResult\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().getLongAftResult(taskId);\n        handleResult(\"getLongAftResult\", SUCCESS, promise);\n    }\n\n    /**\n     * Pause the task for given taskId\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void pauseTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"pauseTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"pauseTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().pauseTask(taskId);\n        handleResult(\"pauseTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Resumes long audio transcription task on the cloud.\n     *\n     * @param taskId task id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startTask(String taskId, final Promise promise) {\n        startMethodExecTimer(\"startTask\");\n\n        if (TextUtils.isEmpty(taskId)) {\n            handleResult(\"startTask\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLRemoteAftEngine.getInstance().startTask(taskId);\n        handleResult(\"startTask\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts the task for given taskId\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAftListener(final Promise promise) {\n        startMethodExecTimer(\"setAftListener\");\n        MLRemoteAftEngine.getInstance().setAftListener(this);\n        handleResult(\"setAftListener\", SUCCESS, promise);\n    }\n\n    /**\n     * Converts a short audio file on the cloud.\n     *\n     * @param uri file uri\n     * @param remoteAftSetting aft setting for recognition\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void shortRecognize(String uri, ReadableMap remoteAftSetting, final Promise promise) {\n        startMethodExecTimer(\"shortRecognize\");\n\n        if (TextUtils.isEmpty(uri)) {\n            handleResult(\"shortRecognize\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        String result = MLRemoteAftEngine.getInstance()\n            .shortRecognize(Uri.parse(uri), HMSObjectCreator.getInstance().createRemoteAftSetting(remoteAftSetting));\n\n        handleResult(\"shortRecognize\", HMSResultCreator.getInstance().getStringResult(result), promise);\n    }\n\n    /**\n     * Converts a long audio file on the cloud.\n     *\n     * @param uri file uri\n     * @param remoteAftSetting aft setting for recognition\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void longRecognize(String uri, ReadableMap remoteAftSetting, final Promise promise) {\n        startMethodExecTimer(\"longRecognize\");\n\n        if (TextUtils.isEmpty(uri)) {\n            handleResult(\"longRecognize\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        String result = MLRemoteAftEngine.getInstance()\n            .longRecognize(Uri.parse(uri), HMSObjectCreator.getInstance().createRemoteAftSetting(remoteAftSetting));\n\n        handleResult(\"longRecognize\", HMSResultCreator.getInstance().getStringResult(result), promise);\n    }\n\n    @Override\n    public void onInitComplete(String taskId, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        sendEvent(AFT_ON_INIT_COMPLETE, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onUploadProgress(String taskId, double progress, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putDouble(\"progress\", progress);\n        sendEvent(AFT_ON_UPLOAD_PROGRESS, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onEvent(String taskId, int eventId, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"eventId\", eventId);\n        sendEvent(AFT_ON_EVENT, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onResult(String taskId, MLRemoteAftResult mlRemoteAftResult, Object o) {\n        WritableMap wm = Arguments.createMap();\n        wm.putBoolean(\"isComplete\", mlRemoteAftResult.isComplete());\n        if (mlRemoteAftResult.isComplete()) {\n            wm.putString(\"taskId\", taskId);\n            wm.putString(\"text\", mlRemoteAftResult.getText());\n            wm.putArray(\"words\", mlRemoteAftResult.getWords() == null\n                ? Arguments.createArray()\n                : HMSResultCreator.getInstance().getAftResult(mlRemoteAftResult.getWords()));\n            wm.putArray(\"sentences\", mlRemoteAftResult.getSentences() == null\n                ? Arguments.createArray()\n                : HMSResultCreator.getInstance().getAftResult(mlRemoteAftResult.getSentences()));\n        }\n        sendEvent(AFT_ON_RESULT, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onError(String taskId, int error, String message) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"error\", error);\n        wm.putString(\"message\", message);\n        sendEvent(AFT_ON_ERROR, \"MLRemoteAftListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLAftEngine.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    @Override\n    public void onError(int error, String errorMsg) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", errorMsg);\n        sendEvent(AFT_ON_ERROR, \"MLAftListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSAsr.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_ERROR;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_RECOGNIZING_RESULTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_RESULTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_STARTING_SPEECH;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_START_LISTENING;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_STATE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.ASR_ON_VOICE_DATA_RECEIVED;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlplugin.asr.MLAsrCaptureActivity;\nimport com.huawei.hms.mlplugin.asr.MLAsrCaptureConstants;\nimport com.huawei.hms.mlsdk.asr.MLAsrConstants;\nimport com.huawei.hms.mlsdk.asr.MLAsrListener;\nimport com.huawei.hms.mlsdk.asr.MLAsrRecognizer;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.BaseActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSAsr extends HMSBase implements MLAsrListener, MLAsrRecognizer.LanguageCallback {\n    private Promise asrPluginPromise;\n\n    private MLAsrRecognizer asrRecognizer;\n\n    private Promise languageListPromise;\n\n    private static final int ASR_PLUGIN_REQUEST = 300;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSAsr(ReactApplicationContext reactContext) {\n        super(reactContext, HMSAsr.class.getSimpleName(), ASR_CONSTANTS);\n        getContext().addActivityEventListener(mActivityEventListener);\n    }\n\n    /**\n     * Destroy and release Asr Recognizer\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"destroy\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        asrRecognizer.destroy();\n        asrRecognizer = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains supported languages\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"getLanguages\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        asrRecognizer.getLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Creates Asr Recognizer\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createAsrRecognizer(final Promise promise) {\n        startMethodExecTimer(\"createAsrRecognizer\");\n        asrRecognizer = MLAsrRecognizer.createAsrRecognizer(getContext());\n        asrRecognizer.setAsrListener(this);\n        handleResult(\"createAsrRecognizer\", SUCCESS, promise);\n    }\n\n    /**\n     * Start Recognizer\n     *\n     * @param language language code\n     * @param feature feature type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizing(String language, int feature, final Promise promise) {\n        startMethodExecTimer(\"startRecognizing\");\n\n        if (asrRecognizer == null) {\n            handleResult(\"startRecognizing\", ASR_RECOGNIZER_NULL, promise);\n            return;\n        }\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"startRecognizing\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Intent asrIntent = new Intent(MLAsrConstants.ACTION_HMS_ASR_SPEECH).putExtra(MLAsrConstants.LANGUAGE, language)\n            .putExtra(MLAsrConstants.FEATURE, feature);\n        asrRecognizer.startRecognizing(asrIntent);\n        handleResult(\"startRecognizing\", SUCCESS, promise);\n    }\n\n    /**\n     * Start Asr Recognizer plugin\n     *\n     * @param language language code\n     * @param feature feature type\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizingPlugin(String language, int feature, final Promise promise) {\n        startMethodExecTimer(\"startRecognizingPlugin\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"startRecognizingPlugin\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (currentActivity == null) {\n            handleResult(\"startRecognizingPlugin\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        asrPluginPromise = promise;\n\n        final Intent asrIntent = new Intent(currentActivity, MLAsrCaptureActivity.class).putExtra(\n            MLAsrConstants.LANGUAGE, language).putExtra(MLAsrConstants.FEATURE, feature);\n        currentActivity.startActivityForResult(asrIntent, ASR_PLUGIN_REQUEST);\n    }\n\n    /**\n     * Activity result listener for plugin\n     */\n    private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {\n        @Override\n        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {\n            if (requestCode == ASR_PLUGIN_REQUEST) {\n                if (asrPluginPromise != null) {\n                    Bundle result = intent.getExtras();\n                    switch (resultCode) {\n                        case MLAsrCaptureConstants.ASR_SUCCESS:\n                            WritableMap success = SUCCESS.getStatusAndMessage();\n                            String asrResult = \"\";\n                            if (result != null) {\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_RESULT)) {\n                                    asrResult = result.getString(MLAsrCaptureConstants.ASR_RESULT);\n                                }\n                            }\n                            success.putString(\"result\", asrResult);\n                            asrPluginPromise.resolve(success);\n                            break;\n                        case MLAsrCaptureConstants.ASR_FAILURE:\n                            WritableMap fail = FAILURE.getStatusAndMessage();\n                            if (result != null) {\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_ERROR_CODE)) {\n                                    int errorCode = result.getInt(MLAsrCaptureConstants.ASR_ERROR_CODE);\n                                    fail.putInt(\"errorCode\", errorCode);\n                                }\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_ERROR_MESSAGE)) {\n                                    String errorMsg = result.getString(MLAsrCaptureConstants.ASR_ERROR_MESSAGE);\n                                    fail.putString(\"errorMessage\", errorMsg);\n                                }\n                                if (result.containsKey(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE)) {\n                                    int subErrorCode = result.getInt(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE);\n                                    fail.putInt(\"subErrorCode\", subErrorCode);\n                                }\n                            }\n                            asrPluginPromise.resolve(fail);\n                            break;\n                        default:\n                            asrPluginPromise.resolve(FAILURE.getStatusAndMessage());\n                            break;\n                    }\n                    asrPluginPromise = null;\n                }\n            }\n        }\n    };\n\n    @Override\n    public void onResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"result\", bundle.getString(MLAsrRecognizer.RESULTS_RECOGNIZED));\n        sendEvent(ASR_ON_RESULTS, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onRecognizingResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"result\", bundle.getString(MLAsrRecognizer.RESULTS_RECOGNIZING));\n        sendEvent(ASR_ON_RECOGNIZING_RESULTS, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLAsrRecognizer.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    @Override\n    public void onError(int error, String errorMsg) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", errorMsg);\n        sendEvent(ASR_ON_ERROR, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onStartListening() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Listening started\");\n        sendEvent(ASR_ON_START_LISTENING, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onStartingOfSpeech() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Speech started\");\n        sendEvent(ASR_ON_STARTING_SPEECH, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onVoiceDataReceived(byte[] bytes, float v, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putArray(\"data\", HMSUtils.getInstance().convertByteArrToWa(bytes));\n        wm.putDouble(\"energy\", v);\n        sendEvent(ASR_ON_VOICE_DATA_RECEIVED, \"MLAsrListener\", wm);\n    }\n\n    @Override\n    public void onState(int state, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"state\", state);\n        sendEvent(ASR_ON_STATE, \"MLAsrListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSLanguageDetection.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.LANGUAGE_DETECTION_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\n\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.langdetect.MLDetectedLang;\nimport com.huawei.hms.mlsdk.langdetect.cloud.MLRemoteLangDetector;\nimport com.huawei.hms.mlsdk.langdetect.local.MLLocalLangDetector;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.List;\n\npublic class HMSLanguageDetection extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSLanguageDetection(ReactApplicationContext context) {\n        super(context, HMSLanguageDetection.class.getSimpleName(), LANGUAGE_DETECTION_CONSTANTS);\n    }\n\n    /**\n     * Returns multi-language detection results based on the supplied text\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop calls stop if true\n     * @param trustedThreshold trust threshold\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void probabilityDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"probabilityDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"probabilityDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createRemoteLanguageDetector(trustedThreshold);\n            handleProbabilityTask(isStop, langDetector, langDetector.probabilityDetect(sourceText), promise);\n        } else {\n            MLLocalLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createLocalLanguageDetector(trustedThreshold);\n            handleProbabilityTask(isStop, langDetector, langDetector.probabilityDetect(sourceText), promise);\n        }\n    }\n\n    /**\n     * Returns the language detection result with the highest confidence based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void firstBestDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"firstBestDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"firstBestDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createRemoteLanguageDetector(trustedThreshold);\n            handleFirstBestTask(isStop, langDetector, langDetector.firstBestDetect(sourceText), promise);\n\n        } else {\n            MLLocalLangDetector langDetector = HMSObjectCreator.getInstance()\n                .createLocalLanguageDetector(trustedThreshold);\n            handleFirstBestTask(isStop, langDetector, langDetector.firstBestDetect(sourceText), promise);\n        }\n    }\n\n    /**\n     * Synchronously returns multi-language detection results based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncProbabilityDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"syncProbabilityDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"syncProbabilityDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteLanguageDetector(trustedThreshold)\n            : HMSObjectCreator.getInstance().createLocalLanguageDetector(trustedThreshold);\n        try {\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getLangDetectionResult(\n                    detector instanceof MLRemoteLangDetector ? ((MLRemoteLangDetector) detector).syncProbabilityDetect(\n                        sourceText) : ((MLLocalLangDetector) detector).syncProbabilityDetect(sourceText));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncProbabilityDetect\", wm, promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncProbabilityDetect\", e, promise);\n        }\n\n    }\n\n    /**\n     * Synchronously returns the language detection result with the highest confidence based on the supplied text.\n     *\n     * @param isRemote on-cloud or on-device detection\n     * @param isStop if true releases resources for detector.\n     * @param trustedThreshold trust threshold for detection\n     * @param sourceText text to be detect\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncFirstBestDetect(boolean isRemote, boolean isStop, double trustedThreshold, String sourceText,\n        final Promise promise) {\n        startMethodExecTimer(\"syncFirstBestDetect\");\n\n        if (TextUtils.isEmpty(sourceText)) {\n            handleResult(\"syncFirstBestDetect\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteLanguageDetector(trustedThreshold)\n            : HMSObjectCreator.getInstance().createLocalLanguageDetector(trustedThreshold);\n\n        try {\n            WritableMap wm = HMSResultCreator.getInstance()\n                .getStringResult(\n                    detector instanceof MLRemoteLangDetector ? ((MLRemoteLangDetector) detector).syncFirstBestDetect(\n                        sourceText) : ((MLLocalLangDetector) detector).syncFirstBestDetect(sourceText));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncFirstBestDetect\", wm, promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncFirstBestDetect\", e, promise);\n        }\n    }\n\n    private void handleProbabilityTask(boolean isStop, Object detector, Task<List<MLDetectedLang>> task,\n        Promise promise) {\n        task.addOnSuccessListener(detectedLanguages -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"probabilityDetect\", HMSResultCreator.getInstance().getLangDetectionResult(detectedLanguages),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"probabilityDetect\", e, promise);\n        });\n    }\n\n    private void handleFirstBestTask(boolean isStop, Object detector, Task<String> task, Promise promise) {\n        task.addOnSuccessListener(s -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"firstBestDetect\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"firstBestDetect\", e, promise);\n        });\n    }\n\n    private void handleStop(Object detector) {\n        if (detector instanceof MLRemoteLangDetector) {\n            ((MLRemoteLangDetector) detector).stop();\n            Log.i(getName(), \"MLRemoteLangDetector stop\");\n        } else {\n            ((MLLocalLangDetector) detector).stop();\n            Log.i(getName(), \"MLLocalLangDetector stop\");\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSSoundDetect.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SOUND_DETECT_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SOUND_DETECT_ON_FAILURE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SOUND_DETECT_ON_SUCCESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.os.Bundle;\n\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetectListener;\nimport com.huawei.hms.mlsdk.sounddect.MLSoundDetector;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSSoundDetect extends HMSBase implements MLSoundDetectListener {\n    private MLSoundDetector soundDetector;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSoundDetect(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSoundDetect.class.getSimpleName(), SOUND_DETECT_CONSTANTS);\n        soundDetector = null;\n    }\n\n    /**\n     * Creates sound detector\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createSoundDetector(final Promise promise) {\n        startMethodExecTimer(\"createSoundDetector\");\n        soundDetector = MLSoundDetector.createSoundDetector();\n        handleResult(\"createSoundDetector\", SUCCESS, promise);\n    }\n\n    /**\n     * Destroys sound detector and releases resources\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n\n        if (soundDetector == null) {\n            handleResult(\"destroy\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.destroy();\n        soundDetector = null;\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops sound detector\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void stop(final Promise promise) {\n        startMethodExecTimer(\"stop\");\n\n        if (soundDetector == null) {\n            handleResult(\"stop\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.stop();\n        handleResult(\"stop\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts sound detector and returns if it started\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void start(final Promise promise) {\n        startMethodExecTimer(\"start\");\n\n        if (soundDetector == null) {\n            handleResult(\"start\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        boolean isStarted = soundDetector.start(getContext());\n        handleResult(\"start\", HMSResultCreator.getInstance().getBooleanResult(isStarted), promise);\n    }\n\n    /**\n     * Sets listener to obtain results\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setSoundDetectorListener(final Promise promise) {\n        startMethodExecTimer(\"setSoundDetectorListener\");\n\n        if (soundDetector == null) {\n            handleResult(\"setSoundDetectorListener\", SOUND_DECT_NULL, promise);\n            return;\n        }\n\n        soundDetector.setSoundDetectListener(this);\n        handleResult(\"setSoundDetectorListener\", SUCCESS, promise);\n    }\n\n    /**\n     * onSoundSuccessResult callback\n     * @param result Result that will be resolve\n     */\n    @Override\n    public void onSoundSuccessResult(Bundle result) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"soundType\", result.getInt(MLSoundDetector.RESULTS_RECOGNIZED, -1));\n        sendEvent(SOUND_DETECT_ON_SUCCESS, \"MLSoundDectListener\", wm);\n    }\n\n    /**\n     * onSoundFailResult callback\n     * @param errorCode Error code\n     */\n    @Override\n    public void onSoundFailResult(int errorCode) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"errorCode\", errorCode);\n        sendEvent(SOUND_DETECT_ON_FAILURE, \"MLSoundDectListener\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSSpeechRtt.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_ERROR;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_LISTENING;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_RECOGNIZING_RESULTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_STARTING_OF_SPEECH;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_STATE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.SPEECH_RTT_ON_VOICE_DATA_RECEIVED;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscription;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionConstants;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionListener;\nimport com.huawei.hms.mlsdk.speechrtt.MLSpeechRealTimeTranscriptionResult;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class HMSSpeechRtt extends HMSBase\n    implements MLSpeechRealTimeTranscriptionListener, MLSpeechRealTimeTranscription.LanguageCallback {\n    private Promise languageListPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSSpeechRtt(ReactApplicationContext reactContext) {\n        super(reactContext, HMSSpeechRtt.class.getSimpleName(), SPEECH_RTT_CONSTANTS);\n    }\n\n    /**\n     * Starts recognition.\n     *\n     * @param realTimeTranscriptionConfiguration recognition configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startRecognizing(ReadableMap realTimeTranscriptionConfiguration, final Promise promise) {\n        startMethodExecTimer(\"startRecognizing\");\n        MLSpeechRealTimeTranscription.getInstance()\n            .startRecognizing(HMSObjectCreator.getInstance()\n                .createSpeechRealtimeTranscriptionConfig(realTimeTranscriptionConfiguration));\n        handleResult(\"startRecognizing\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains languages supported for real-time audio transcription\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n        MLSpeechRealTimeTranscription.getInstance().getLanguages(this);\n        languageListPromise = promise;\n    }\n\n    /**\n     * Sets listener to obtain the results\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setRealTimeTranscriptionListener(final Promise promise) {\n        startMethodExecTimer(\"setRealtimeTranscriptionListener\");\n        MLSpeechRealTimeTranscription.getInstance().setRealTimeTranscriptionListener(this);\n        handleResult(\"setRealtimeTranscriptionListener\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops recognition and releases resources.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void destroy(final Promise promise) {\n        startMethodExecTimer(\"destroy\");\n        MLSpeechRealTimeTranscription.getInstance().destroy();\n        handleResult(\"destroy\", SUCCESS, promise);\n    }\n\n    /**\n     * onRecognizingResults callback\n     *\n     * @param bundle Bundle\n     */\n    @Override\n    public void onRecognizingResults(Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        if (bundle != null) {\n            wm.putString(\"text\", bundle.getString(MLSpeechRealTimeTranscriptionConstants.RESULTS_RECOGNIZING, \"\"));\n            ArrayList<MLSpeechRealTimeTranscriptionResult> sentenceOffset = bundle.getParcelableArrayList(\n                MLSpeechRealTimeTranscriptionConstants.RESULTS_SENTENCE_OFFSET);\n            wm.putMap(\"sentenceOffset\", sentenceOffset == null\n                ? Arguments.createMap()\n                : HMSResultCreator.getInstance().getRttResult(sentenceOffset));\n            ArrayList<MLSpeechRealTimeTranscriptionResult> wordOffset = bundle.getParcelableArrayList(\n                MLSpeechRealTimeTranscriptionConstants.RESULTS_WORD_OFFSET);\n            wm.putMap(\"wordOffset\",\n                wordOffset == null ? Arguments.createMap() : HMSResultCreator.getInstance().getRttResult(wordOffset));\n            wm.putBoolean(\"isComplete\",\n                bundle.getBoolean(MLSpeechRealTimeTranscriptionConstants.RESULTS_PARTIALFINAL, false));\n        }\n        sendEvent(SPEECH_RTT_ON_RECOGNIZING_RESULTS, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    @Override\n    public void onResult(List<String> list) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n        for (String language : list) {\n            wa.pushString(language);\n        }\n        wm.putArray(\"result\", wa);\n        handleResult(\"MLSpeechRealTimeTranscription.LanguageCallback\", wm, languageListPromise);\n        languageListPromise = null;\n    }\n\n    /**\n     * onError callback\n     *\n     * @param error Error\n     * @param errorMessage The error message\n     */\n    @Override\n    public void onError(int error, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"error\", error);\n        wm.putString(\"errorMessage\", TextUtils.isEmpty(errorMessage) ? \"\" : errorMessage);\n        sendEvent(SPEECH_RTT_ON_ERROR, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onStartListening callback\n     */\n    @Override\n    public void onStartListening() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Listening start\");\n        sendEvent(SPEECH_RTT_ON_LISTENING, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onStartingOfSpeech callback\n     */\n    @Override\n    public void onStartingOfSpeech() {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"info\", \"Speech start\");\n        sendEvent(SPEECH_RTT_ON_STARTING_OF_SPEECH, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onVoiceDataReceived callback\n     *\n     * @param data Data in bytes.\n     * @param energy Data energy\n     * @param bundle Bundle\n     */\n    @Override\n    public void onVoiceDataReceived(byte[] data, float energy, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putArray(\"data\", HMSUtils.getInstance().convertByteArrToWa(data));\n        wm.putDouble(\"energy\", energy);\n        wm.putString(\"encoding\", bundle.getString(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_ENCODING, \"\"));\n        wm.putInt(\"sampleRate\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_SAMPLE_RATE, 0));\n        wm.putInt(\"channelCount\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_CHANNEL_COUNT, 0));\n        wm.putInt(\"bitWidth\", bundle.getInt(MLSpeechRealTimeTranscriptionConstants.WAVE_PAINE_BIT_WIDTH, 0));\n        sendEvent(SPEECH_RTT_ON_VOICE_DATA_RECEIVED, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n\n    /**\n     * onState callback\n     *\n     * @param state State\n     * @param bundle Bundle\n     */\n    @Override\n    public void onState(int state, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"state\", state);\n        sendEvent(SPEECH_RTT_ON_STATE, \"MLSpeechRealTimeTranscriptionListener\", wm);\n    }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSTextToSpeech.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_ON_AUDIO_AVAILABLE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_ON_ERROR;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_ON_EVENT;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_ON_RANGE_START;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TTS_ON_WARN;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.os.Bundle;\nimport android.text.TextUtils;\nimport android.util.Pair;\n\nimport com.huawei.hms.mlsdk.tts.MLTtsAudioFragment;\nimport com.huawei.hms.mlsdk.tts.MLTtsCallback;\nimport com.huawei.hms.mlsdk.tts.MLTtsConfig;\nimport com.huawei.hms.mlsdk.tts.MLTtsEngine;\nimport com.huawei.hms.mlsdk.tts.MLTtsError;\nimport com.huawei.hms.mlsdk.tts.MLTtsWarn;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSTextToSpeech extends HMSBase implements MLTtsCallback {\n    private MLTtsConfig ttsConfig;\n\n    private MLTtsEngine ttsEngine;\n\n    /**\n     * Initializes module\n     *\n     * @param context app context\n     */\n    public HMSTextToSpeech(ReactApplicationContext context) {\n        super(context, HMSTextToSpeech.class.getSimpleName(), TTS_CONSTANTS);\n    }\n\n    /**\n     * Creates tts engine\n     *\n     * @param ttsConfiguration tts engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createEngine(ReadableMap ttsConfiguration, final Promise promise) {\n        startMethodExecTimer(\"createEngine\");\n        ttsConfig = HMSObjectCreator.getInstance().createTtsConfiguration(ttsConfiguration);\n        ttsEngine = new MLTtsEngine(ttsConfig);\n        ttsEngine.setTtsCallback(this);\n        handleResult(\"createEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Runs engine to speak\n     *\n     * @param text text to be vocalize\n     * @param mode engine mode\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void speak(String text, int mode, final Promise promise) {\n        startMethodExecTimer(\"speak\");\n\n        if (TextUtils.isEmpty(text) || text.length() > 500) {\n            handleResult(\"speak\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"speak\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        String id = ttsEngine.speak(text, mode);\n        handleResult(\"speak\", HMSResultCreator.getInstance().getStringResult(id), promise);\n    }\n\n    /**\n     * Resumes engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void resume(final Promise promise) {\n        startMethodExecTimer(\"resume\");\n\n        if (ttsEngine == null) {\n            handleResult(\"resume\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.resume();\n        handleResult(\"resume\", SUCCESS, promise);\n    }\n\n    /**\n     * Set engine's volume\n     *\n     * @param volume the volume of the built-in player, in dBs. The value is in the range of [0, 100]\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setPlayerVolume(int volume, final Promise promise) {\n        startMethodExecTimer(\"setPlayerVolume\");\n\n        if (ttsEngine == null) {\n            handleResult(\"setPlayerVolume\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.setPlayerVolume(volume);\n        handleResult(\"setPlayerVolume\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void stop(final Promise promise) {\n        startMethodExecTimer(\"stop\");\n\n        if (ttsEngine == null) {\n            handleResult(\"stop\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.stop();\n        handleResult(\"stop\", SUCCESS, promise);\n    }\n\n    /**\n     * Pause engine\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void pause(final Promise promise) {\n        startMethodExecTimer(\"pause\");\n\n        if (ttsEngine == null) {\n            handleResult(\"pause\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.pause();\n        handleResult(\"pause\", SUCCESS, promise);\n    }\n\n    /**\n     * Shutdown engine and release engine and config resources\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void shutdown(final Promise promise) {\n        startMethodExecTimer(\"shutdown\");\n\n        if (ttsEngine == null) {\n            handleResult(\"shutdown\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsEngine.shutdown();\n        ttsEngine = null;\n        ttsConfig = null;\n        handleResult(\"shutdown\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains supported languages.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLanguages(final Promise promise) {\n        startMethodExecTimer(\"getLanguages\");\n\n        if (ttsEngine == null) {\n            handleResult(\"getLanguages\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLanguages\", HMSResultCreator.getInstance().stringListResult(ttsEngine.getLanguages()),\n            promise);\n    }\n\n    /**\n     * Obtain the speaker of a specified language.\n     *\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getSpeaker(String language, final Promise promise) {\n        startMethodExecTimer(\"getSpeaker\");\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"getSpeaker\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"getSpeaker\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getSpeaker\", HMSResultCreator.getInstance().getStringResult(language), promise);\n    }\n\n    /**\n     * Obtain the all speakers\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getSpeakers(final Promise promise) {\n        startMethodExecTimer(\"getSpeakers\");\n\n        if (ttsEngine == null) {\n            handleResult(\"getSpeakers\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getSpeaker\", HMSResultCreator.getInstance().getSpeakers(ttsEngine.getSpeakers()), promise);\n    }\n\n    /**\n     * Obtains if given language available\n     *\n     * @param language Language\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isLanguageAvailable(String language, final Promise promise) {\n        startMethodExecTimer(\"isLanguageAvailable\");\n\n        if (TextUtils.isEmpty(language)) {\n            handleResult(\"isLanguageAvailable\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (ttsEngine == null) {\n            handleResult(\"isLanguageAvailable\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"isLanguageAvailable\",\n            HMSResultCreator.getInstance().integerResult(ttsEngine.isLanguageAvailable(language)), promise);\n    }\n\n    /**\n     * Updates configuration created before. If no configuration created before, creates a new one\n     *\n     * @param ttsConfiguration Configration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void updateConfig(ReadableMap ttsConfiguration, final Promise promise) {\n        startMethodExecTimer(\"updateConfig\");\n\n        if (ttsEngine == null) {\n            handleResult(\"updateConfig\", TTS_ENGINE_NULL, promise);\n            return;\n        }\n\n        ttsConfig = HMSObjectCreator.getInstance().createTtsConfiguration(ttsConfiguration);\n        ttsEngine.updateConfig(ttsConfig);\n        ttsEngine.setTtsCallback(this);\n        handleResult(\"updateConfig\", SUCCESS, promise);\n    }\n\n    /**\n     * onError Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsError Error\n     */\n    @Override\n    public void onError(String taskId, MLTtsError mlTtsError) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putString(\"errorMessage\", mlTtsError.getErrorMsg());\n        wm.putInt(\"errorId\", mlTtsError.getErrorId());\n        sendEvent(TTS_ON_ERROR, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onWarn Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsWarn Warn\n     */\n    @Override\n    public void onWarn(String taskId, MLTtsWarn mlTtsWarn) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putString(\"warningMessage\", mlTtsWarn.getWarnMsg());\n        wm.putInt(\"warningId\", mlTtsWarn.getWarnId());\n        sendEvent(TTS_ON_WARN, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onRangeStart Callback\n     *\n     * @param taskId The id of the task\n     * @param start Start range\n     * @param end End range\n     */\n    @Override\n    public void onRangeStart(String taskId, int start, int end) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"start\", start);\n        wm.putInt(\"end\", end);\n        sendEvent(TTS_ON_RANGE_START, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onAudioAvailable Callback\n     *\n     * @param taskId The id of the task\n     * @param mlTtsAudioFragment Audio fragment\n     * @param offset Offset value\n     * @param range Range\n     * @param bundle Bundle\n     */\n    @Override\n    public void onAudioAvailable(String taskId, MLTtsAudioFragment mlTtsAudioFragment, int offset,\n        Pair<Integer, Integer> range, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putArray(\"audioData\", HMSUtils.getInstance().convertByteArrToWa(mlTtsAudioFragment.getAudioData()));\n        wm.putInt(\"channelInfo\", mlTtsAudioFragment.getChannelInfo());\n        wm.putInt(\"sampleRateInHz\", mlTtsAudioFragment.getSampleRateInHz());\n        wm.putInt(\"audioFormat\", mlTtsAudioFragment.getAudioFormat());\n        wm.putInt(\"offset\", offset);\n        wm.putInt(\"first\", range.first);\n        wm.putInt(\"second\", range.second);\n        sendEvent(TTS_ON_AUDIO_AVAILABLE, \"MLTtsCallback\", wm);\n    }\n\n    /**\n     * onEvent Callback\n     * @param taskId The id of the task\n     * @param eventId The id of the event\n     * @param bundle Bundle\n     */\n    @Override\n    public void onEvent(String taskId, int eventId, Bundle bundle) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"taskId\", taskId);\n        wm.putInt(\"eventId\", eventId);\n        sendEvent(TTS_ON_EVENT, \"MLTtsCallback\", wm);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/languagevoicerelatedservices/HMSTranslate.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.languagevoicerelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TRANSLATE_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.TRANSLATE_DOWNLOAD_ON_PROCESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadListener;\nimport com.huawei.hms.mlsdk.translate.MLTranslateLanguage;\nimport com.huawei.hms.mlsdk.translate.cloud.MLRemoteTranslator;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslator;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\npublic class HMSTranslate extends HMSBase implements MLModelDownloadListener {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTranslate(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTranslate.class.getSimpleName(), TRANSLATE_CONSTANTS);\n    }\n\n    /**\n     * Asynchronously translates text with analyzer created with given configuration\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param isStop stops translator and releases resources\n     * @param text text to be translated\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncTranslate(boolean isRemote, boolean isStop, String text, ReadableMap translatorSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncTranslate\");\n\n        if (TextUtils.isEmpty(text)) {\n            handleResult(\"asyncTranslate\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        if (isRemote) {\n            MLRemoteTranslator remoteTranslator = HMSObjectCreator.getInstance()\n                .createRemoteTranslator(translatorSetting);\n            handleAsyncTranslate(isStop, remoteTranslator, remoteTranslator.asyncTranslate(text), promise);\n        } else {\n            MLLocalTranslator localTranslator = HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n            handleAsyncTranslate(isStop, localTranslator, localTranslator.asyncTranslate(text), promise);\n        }\n    }\n\n    /**\n     * Downloads the model for local translation\n     *\n     * @param strategyConfiguration defines model download strategy\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void preparedModel(ReadableMap strategyConfiguration, ReadableMap translatorSetting, final Promise promise) {\n        startMethodExecTimer(\"preparedModel\");\n\n        MLLocalTranslator localTranslator = HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n\n        localTranslator.preparedModel(HMSObjectCreator.getInstance().createModelDownloadStrategy(strategyConfiguration),\n            this)\n            .addOnSuccessListener(aVoid -> handleResult(\"preparedModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"preparedModel\", e, promise));\n    }\n\n    /**\n     * Synchronously translates text with analyzer created with given configuration\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param isStop stops translator and releases resources\n     * @param text text to be translated\n     * @param translatorSetting configuration for translator\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncTranslate(boolean isRemote, boolean isStop, String text, ReadableMap translatorSetting,\n        final Promise promise) {\n        startMethodExecTimer(\"syncTranslate\");\n\n        if (TextUtils.isEmpty(text)) {\n            handleResult(\"syncTranslate\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        Object detector = isRemote\n            ? HMSObjectCreator.getInstance().createRemoteTranslator(translatorSetting)\n            : HMSObjectCreator.getInstance().createLocalTranslator(translatorSetting);\n\n        try {\n            String s = (detector instanceof MLRemoteTranslator\n                ? ((MLRemoteTranslator) detector).syncTranslate(text)\n                : ((MLLocalTranslator) detector).syncTranslate(text));\n\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncTranslate\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        } catch (MLException e) {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"syncTranslate\", e, promise);\n        }\n    }\n\n    /**\n     * Asynchronously obtains languages\n     *\n     * @param isRemote if true translates on-cloud otherwise on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getAllLanguages(boolean isRemote, final Promise promise) {\n        startMethodExecTimer(\"getAllLanguages\");\n\n        if (isRemote) {\n            MLTranslateLanguage.getCloudAllLanguages()\n                .addOnSuccessListener(\n                    strings -> handleResult(\"getAllLanguages\", HMSResultCreator.getInstance().stringSetResult(strings),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getAllLanguages\", e, promise));\n        } else {\n            MLTranslateLanguage.getLocalAllLanguages()\n                .addOnSuccessListener(\n                    strings -> handleResult(\"getAllLanguages\", HMSResultCreator.getInstance().stringSetResult(strings),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getAllLanguages\", e, promise));\n        }\n    }\n\n    /**\n     * Synchronously obtains languages\n     *\n     * @param isRemote if true returns on-cloud languages otherwise on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void syncGetAllLanguages(boolean isRemote, final Promise promise) {\n        startMethodExecTimer(\"syncGetAllLanguages\");\n\n        if (isRemote) {\n            try {\n                handleResult(\"syncGetAllLanguages\",\n                    HMSResultCreator.getInstance().stringSetResult(MLTranslateLanguage.syncGetCloudAllLanguages()),\n                    promise);\n            } catch (MLException e) {\n                handleResult(\"syncGetAllLanguages\", e, promise);\n            }\n        } else {\n            handleResult(\"syncGetAllLanguages\",\n                HMSResultCreator.getInstance().stringSetResult(MLTranslateLanguage.syncGetLocalAllLanguages()),\n                promise);\n        }\n    }\n\n    /**\n     * onProcess callback for model download\n     * @param alreadyDownLength Already downloaded part\n     * @param totalLength Total length to be downloaded\n     */\n    @Override\n    public void onProcess(long alreadyDownLength, long totalLength) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"alreadyDownloadLength\", Long.toString(alreadyDownLength));\n        wm.putString(\"totalLength\", Long.toString(totalLength));\n        sendEvent(TRANSLATE_DOWNLOAD_ON_PROCESS, \"onProcess\", wm);\n    }\n\n    /**\n     * Releases resources of remote translator\n     *\n     * @param translator translator object\n     */\n    private void handleStop(Object translator) {\n        if (translator instanceof MLRemoteTranslator) {\n            MLRemoteTranslator remoteTranslator = (MLRemoteTranslator) translator;\n            remoteTranslator.stop();\n            Log.i(getName(), \"MLRemoteTranslator stop\");\n        } else {\n            MLLocalTranslator localTranslator = (MLLocalTranslator) translator;\n            localTranslator.stop();\n            Log.i(getName(), \"MLLocalTranslator stop\");\n        }\n    }\n\n    private void handleAsyncTranslate(boolean isStop, Object detector, Task<String> task, Promise promise) {\n        task.addOnSuccessListener(s -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"asyncTranslate\", HMSResultCreator.getInstance().getStringResult(s), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                handleStop(detector);\n            }\n\n            handleResult(\"asyncTranslate\", e, promise);\n        });\n    }\n\n}"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/modelrelatedservices/HMSCustomModel.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.modelrelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutor;\nimport com.huawei.hms.mlsdk.custom.MLModelExecutorSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputOutputSettings;\nimport com.huawei.hms.mlsdk.custom.MLModelInputs;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSCustomModel extends HMSBase {\n\n    /**\n     * Initializes Module\n     *\n     * @param reactContext app context\n     */\n    public HMSCustomModel(ReactApplicationContext reactContext) {\n        super(reactContext, HMSCustomModel.class.getSimpleName(), null);\n    }\n\n    /**\n     * Performs inference using input and output configurations and content\n     *\n     * @param modelInputOutputSettings input output setting\n     * @param modelInputConfiguration Source data to be inferred.\n     * @param isRemote remote or local model\n     * @param modelConfig model information container\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void exec(boolean isRemote, ReadableMap modelInputOutputSettings, ReadableMap modelInputConfiguration,\n        ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"exec\");\n\n        MLModelInputOutputSettings settings = HMSObjectCreator.getInstance()\n            .createCustomModelInputOutputSetting(modelInputOutputSettings);\n        MLModelInputs modelInputs = HMSObjectCreator.getInstance()\n            .createCustomModelInputs(modelInputConfiguration, getContext());\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (settings == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_SETTING_NULL, promise);\n            return;\n        }\n        if (modelInputs == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_INPUT_NULL, promise);\n            return;\n        }\n        if (modelExecutorSetting == null) {\n            handleResult(\"exec\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting)\n                .exec(modelInputs, settings)\n                .addOnSuccessListener(mlModelOutputs -> handleResult(\"exec\",\n                    HMSResultCreator.getInstance().customModelResult(mlModelOutputs), promise))\n                .addOnFailureListener(e -> handleResult(\"exec\", e, promise));\n        } catch (MLException e) {\n            handleResult(\"exec\", e, promise);\n        }\n    }\n\n    /**\n     * Stops an inference task to release resources.\n     *\n     * @param isRemote remote or local model\n     * @param modelConfig model configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(boolean isRemote, ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"close\");\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (modelExecutorSetting == null) {\n            handleResult(\"close\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting).close();\n            handleResult(\"close\", SUCCESS, promise);\n        } catch (MLException | IOException e) {\n            handleResult(\"close\", e, promise);\n        }\n    }\n\n    /**\n     * Obtains the channel index based on the output channel name.\n     *\n     * @param isRemote local or remote model\n     * @param channelName channel name\n     * @param modelConfig model configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getOutputIndex(boolean isRemote, String channelName, ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"getOutputIndex\");\n        MLModelExecutorSettings modelExecutorSetting = HMSObjectCreator.getInstance()\n            .createCustomModelExecutorSettings(isRemote, modelConfig);\n\n        if (modelExecutorSetting == null) {\n            handleResult(\"getOutputIndex\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL, promise);\n            return;\n        }\n\n        try {\n            MLModelExecutor.getInstance(modelExecutorSetting)\n                .getOutputIndex(channelName)\n                .addOnSuccessListener(\n                    integer -> handleResult(\"getOutputIndex\", HMSResultCreator.getInstance().integerResult(integer),\n                        promise))\n                .addOnFailureListener(e -> handleResult(\"getOutputIndex\", e, promise));\n        } catch (MLException e) {\n            handleResult(\"getOutputIndex\", e, promise);\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/java/com/huawei/hms/rn/mllanguage/modelrelatedservices/HMSModelDownload.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.modelrelatedservices;\n\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.DOWNLOAD_ON_PROCESS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.MODEL_CUSTOM_TAG;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.MODEL_DOWNLOAD_CONSTANTS;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.MODEL_TRANSLATE_TAG;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSConstants.MODEL_TTS_TAG;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.mllanguage.helpers.constants.HMSResults.SUCCESS;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlsdk.custom.MLCustomRemoteModel;\nimport com.huawei.hms.mlsdk.model.download.MLLocalModelManager;\nimport com.huawei.hms.mlsdk.model.download.MLModelDownloadListener;\nimport com.huawei.hms.mlsdk.model.download.MLRemoteModel;\nimport com.huawei.hms.mlsdk.translate.local.MLLocalTranslatorModel;\nimport com.huawei.hms.mlsdk.tts.MLTtsLocalModel;\nimport com.huawei.hms.rn.mllanguage.HMSBase;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mllanguage.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport java.util.Set;\n\npublic class HMSModelDownload extends HMSBase implements MLModelDownloadListener {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSModelDownload(ReactApplicationContext reactContext) {\n        super(reactContext, HMSModelDownload.class.getSimpleName(), MODEL_DOWNLOAD_CONSTANTS);\n    }\n\n    /**\n     * Downloads a specified model from the cloud based on a specified download condition.\n     * If the download condition is not met, a failure message will be returned.\n     * If the model does not exist locally or a new version is available on the cloud, the model will be downloaded.\n     * Otherwise, the call of this method will stop immediately and onSuccess will be called.\n     *\n     * @param modelConfig specifies model\n     * @param strategyConfig includes download strategy\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void downloadModel(ReadableMap modelConfig, ReadableMap strategyConfig, final Promise promise) {\n        startMethodExecTimer(\"downloadModel\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"downloadModel\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .downloadModel(remoteModel, HMSObjectCreator.getInstance().createModelDownloadStrategy(strategyConfig),\n                this)\n            .addOnSuccessListener(aVoid -> handleResult(\"downloadModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"downloadModel\", e, promise));\n    }\n\n    /**\n     * Deletes a specified model from the device.\n     * If the model has not been downloaded or is being downloaded, a failure message will be returned.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void deleteModel(ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"deleteModel\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"deleteModel\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .deleteModel(remoteModel)\n            .addOnSuccessListener(aVoid -> handleResult(\"deleteModel\", SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(\"deleteModel\", e, promise));\n    }\n\n    /**\n     * Checks whether a specified model has been downloaded to the device.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void isModelExist(ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"isModelExists\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"isModelExists\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .isModelExist(remoteModel)\n            .addOnSuccessListener(\n                aBoolean -> handleResult(\"isModelExists\", HMSResultCreator.getInstance().getBooleanResult(aBoolean),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"isModelExists\", e, promise));\n    }\n\n    /**\n     * Queries the model set that has been downloaded to a local path.\n     *\n     * @param modelTag Tag of the model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getModels(int modelTag, final Promise promise) {\n        startMethodExecTimer(\"getModels\");\n\n        switch (modelTag) {\n            case MODEL_TTS_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLTtsLocalModel.class), promise);\n                return;\n            case MODEL_TRANSLATE_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLLocalTranslatorModel.class), promise);\n                return;\n            case MODEL_CUSTOM_TAG:\n                handleGetModels(MLLocalModelManager.getInstance().getModels(MLCustomRemoteModel.class), promise);\n                return;\n            default:\n                handleResult(\"getModels\", FAILURE, promise);\n        }\n    }\n\n    /**\n     * Queries the storage path of a specified model on the device.\n     *\n     * @param modelConfig specifies model\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getRecentModelFile(final ReadableMap modelConfig, final Promise promise) {\n        startMethodExecTimer(\"getRecentModelFile\");\n        MLRemoteModel remoteModel = HMSObjectCreator.getInstance().createRemoteModel(modelConfig);\n\n        if (remoteModel == null) {\n            handleResult(\"getRecentModelFile\", REMOTE_MODEL_NULL, promise);\n            return;\n        }\n\n        MLLocalModelManager.getInstance()\n            .getRecentModelFile(remoteModel)\n            .addOnSuccessListener(\n                file -> handleResult(\"getRecentModelFile\", HMSResultCreator.getInstance().getFilePathResult(file),\n                    promise))\n            .addOnFailureListener(e -> handleResult(\"getRecentModelFile\", e, promise));\n    }\n\n    @Override\n    public void onProcess(long alreadyDownLength, long totalLength) {\n        WritableMap wm = Arguments.createMap();\n        wm.putString(\"alreadyDownloadLength\", Long.toString(alreadyDownLength));\n        wm.putString(\"totalLength\", Long.toString(totalLength));\n        sendEvent(DOWNLOAD_ON_PROCESS, \"onProcess\", wm);\n    }\n\n    private <T extends MLRemoteModel> void handleGetModels(Task<Set<T>> task, Promise promise) {\n        task.addOnSuccessListener(\n            models -> handleResult(\"getModels\", HMSResultCreator.getInstance().getModels((Set<MLRemoteModel>) models),\n                promise)).addOnFailureListener(e -> handleResult(\"getModels\", e, promise));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/res/layout/hms_product_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.huawei.hms.rn.mllanguage.helpers.views.HMSBottomSheetGridView\n            android:id=\"@+id/hms_bottom_sheet_grid_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:columnCount=\"2\" />\n\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mllanguage/android/src/main/res/layout/hms_product_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:fresco=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n    <com.facebook.drawee.view.SimpleDraweeView\n            android:id=\"@+id/hms_product_item_image_view\"\n            android:layout_width=\"120dp\"\n            android:layout_height=\"120dp\"\n            android:layout_gravity=\"center\"\n            fresco:failureImage=\"@android:drawable/ic_menu_gallery\"\n            fresco:placeholderImage=\"@android:drawable/ic_menu_gallery\" />\n\n    <TextView\n            android:id=\"@+id/hms_product_item_text_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:gravity=\"center\"\n            android:textColor=\"@android:color/black\"\n            android:textSize=\"16sp\" />\n</LinearLayout>"
  },
  {
    "path": "react-native-hms-mllanguage/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\npackage-lock.json"
  },
  {
    "path": "react-native-hms-mllanguage/example/App.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image } from 'react-native';\nimport { styles } from './src/Styles';\nimport StartPage from './src/StartPage';\nimport Translation from './src/HmsLanguageVoiceRelatedServices/Translation';\nimport LanguageDetection from './src/HmsLanguageVoiceRelatedServices/LanguageDetection';\nimport TextToSpeech from './src/HmsLanguageVoiceRelatedServices/TextToSpeech';\nimport RealTimeTranscription from './src/HmsLanguageVoiceRelatedServices/RealTimeTranscription';\nimport AudioFileTranscription from './src/HmsLanguageVoiceRelatedServices/AudioFileTranscription';\nimport SoundDetection from './src/HmsLanguageVoiceRelatedServices/SoundDetection';\nimport AutomaticSpeechRecognition from './src/HmsLanguageVoiceRelatedServices/AutomaticSpeechRecognition';\nimport ModelDownload from './src/HmsOtherServices/ModelDownload';\nimport CustomModel from './src/HmsOtherServices/CustomModel';\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'Hms React Native ML Language Demo',\n    },\n    path: 'start',\n  },\n  Translation: {\n    screen: Translation,\n    navigationOptions: {\n      headerTitle: 'Translate Service',\n    },\n    path: 'start/translation',\n  },\n  LanguageDetection: {\n    screen: LanguageDetection,\n    navigationOptions: {\n      headerTitle: 'Language Detection',\n    },\n    path: 'start/languagedetection',\n  },\n  TextToSpeech: {\n    screen: TextToSpeech,\n    navigationOptions: {\n      headerTitle: 'Text to Speech',\n    },\n    path: 'start/tts',\n  },\n  AudioFileTranscription: {\n    screen: AudioFileTranscription,\n    navigationOptions: {\n      headerTitle: 'Audio File Transcription',\n    },\n    path: 'start/aft',\n  },\n  RealTimeTranscription: {\n    screen: RealTimeTranscription,\n    navigationOptions: {\n      headerTitle: 'Speech Real Time Transcription',\n    },\n    path: 'start/srtt',\n  },\n  SoundDetection: {\n    screen: SoundDetection,\n    navigationOptions: {\n      headerTitle: 'Sound Detection',\n    },\n    path: 'start/sounddect',\n  },\n  AutomaticSpeechRecognition: {\n    screen: AutomaticSpeechRecognition,\n    navigationOptions: {\n      headerTitle: 'Automatic Speech Recognition',\n    },\n    path: 'start/asr',\n  },\n  CustomModel: {\n    screen: CustomModel,\n    navigationOptions: {\n      headerTitle: 'Custom Model',\n    },\n    path: 'start/custommodel',\n  },\n  ModelDownload: {\n    screen: ModelDownload,\n    navigationOptions: {\n      headerTitle: 'Model Download',\n    },\n    path: 'start/modeldownload',\n  },\n};\n\nexport default class App extends Component {\n  state = {\n    pageItem: {\n      screen: StartPage,\n      navigationOptions: {\n        headerTitle: 'Hms React Native ML Language Demo',\n      },\n      path: 'start',\n    },\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mllanguage/example/README.md",
    "content": "# React-Native HMS ML Language - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native ML Language Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm install\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS MLLanguage - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile: \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"com.huawei.rngeneral\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {           \n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    implementation \"com.facebook.react:react-native:+\"\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n\n    implementation 'com.android.support:multidex:1.0.3'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.mllanguage.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n\n    <application\n            android:name=\"com.huawei.hms.rn.mllanguage.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/logo\"\n            android:label=\"RN MLLanguage Demo\"\n            android:roundIcon=\"@mipmap/logo\"\n            android:theme=\"@style/AppTheme\"\n            android:largeHeap=\"true\"\n            android:requestLegacyExternalStorage=\"true\"\n            android:usesCleartextTraffic=\"true\"\n            >\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.mllanguage.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RN Language Demo\"\n                android:launchMode=\"singleTask\"\n                android.exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\"\n                android:exported=\"True\"\n                >\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/src/main/java/com/huawei/hms/rn/mllanguage/demo/MainActivity.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.mllanguage.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/src/main/java/com/huawei/hms/rn/mllanguage/demo/MainApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mllanguage.demo;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\nimport com.huawei.hms.rn.mllanguage.demo.BuildConfig;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Jul 17 15:10:49 TRT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.6.1-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\nAPP_HOME=$( cd \"${APP_HOME:-./}\" && pwd -P ) || exit\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=${0##*/}\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n# Collect all arguments for the java command;\n#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of\n#     shell script including quotes and variable substitutions, so put them in\n#     double quotes to make sure that they get re-expanded; and\n#   * put everything else in single quotes, so that it's not re-expanded.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/android/settings.gradle",
    "content": "rootProject.name = 'example'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n\n\n\n\n\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.mllanguage.demo\",\n  \"displayName\": \"HMS RN ML LANGUAGE DEMO\"\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/babel.config.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/index.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/metro.config.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mllanguage-demo\",\n  \"description\": \"React Native HMS ML Language Kit Demo\",\n  \"version\": \"3.12.0-300\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"@hmscore/react-native-hms-mllanguage\": \"3.12.0-300\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"react-native-document-picker\": \"^4.3.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/AudioFileTranscription.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { HMSAft, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\nimport { styles } from '../Styles';\nimport DocumentPicker from 'react-native-document-picker';\n\nexport default class AudioFileTranscription extends React.Component {\n\n  componentDidMount() {\n    this.init()\n      .then(() => this.setAftListener());\n\n    this.eventEmitter = new NativeEventEmitter(HMSAft);\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_EVENT, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_RESULT, (event) => {\n      console.log(event);\n      if (event.isComplete == true) {\n        this.setState({ result: event.text });\n      }\n      else {\n        this.setState({ result: \"Transcription not completed\" });\n      }\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_INIT_COMPLETE, (event) => {\n      console.log(event);\n      this.setState({ taskId: event.taskId });\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_UPLOAD_PROGRESS, (event) => {\n      console.log(event);\n      this.setState({ progress: event.progress });\n    });\n\n    this.eventEmitter.addListener(HMSAft.AFT_ON_ERROR, (event) => {\n      console.log(event);\n      this.setState({ result: event.error.toString() + \" \" + event.message });\n    });\n\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_EVENT);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_INIT_COMPLETE);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_UPLOAD_PROGRESS);\n    this.eventEmitter.removeAllListeners(HMSAft.AFT_ON_ERROR);\n    this.close();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      audioUri: '',\n      audioType: '',\n      audioName: '',\n      audioSize: 0,\n      result: '',\n      taskId: '',\n      progress: 0,\n      isLongRecognize: false,\n    };\n  }\n\n  getAftConfig = () => {\n    return {\n      languageCode: HMSAft.LANGUAGE_EN_US,\n      enablePunctuation: true,\n      enableWordTimeOffset: false,\n      enableSentenceTimeOffset: false\n    }\n  }\n\n  async pickAudioFile() {\n    try {\n      const res = await DocumentPicker.pick({\n        type: [DocumentPicker.types.audio],\n      });\n      console.log(res);\n      this.setState({ audioUri: res.uri, audioType: res.type, audioName: res.name, audioSize: res.size, isLongRecognize: res.size > 4000000 ? true : false });\n    } catch (err) {\n      if (DocumentPicker.isCancel(err)) {\n        console.log(err);\n      }\n    }\n  }\n\n  async init() {\n    try {\n      var result = await HMSAft.init();\n      this.methodResult(result, \"Engine Init\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async close() {\n    try {\n      var result = await HMSAft.close();\n      this.methodResult(result, \"Engine Closed\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroyTask() {\n    try {\n      var result = await HMSAft.destroyTask(this.state.taskId);\n      this.methodResult(result, \"Destroy Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLongAftResult() {\n    try {\n      var result = await HMSAft.getLongAftResult(this.state.taskId);\n      this.methodResult(result, \"Get Long Aft Result\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async pauseTask() {\n    try {\n      var result = await HMSAft.pauseTask(this.state.taskId);\n      this.methodResult(result, \"Pause Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startTask() {\n    try {\n      var result = await HMSAft.startTask(this.state.taskId);\n      this.methodResult(result, \"Start Long Recognition Task\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getShortAftLanguages() {\n    try {\n      var result = await HMSAft.getShortAftLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLongAftLanguages() {\n    try {\n      var result = await HMSAft.getLongAftLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setAftListener() {\n    try {\n      var result = await HMSAft.setAftListener();\n      this.methodResult(result, \"Aft listener set\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async shortRecognize() {\n    try {\n      var result = await HMSAft.shortRecognize(this.state.audioUri, this.getAftConfig());\n      this.methodResult(result, \"Short Recognize Started :\" + result.result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async longRecognize() {\n    try {\n      var result = await HMSAft.longRecognize(this.state.audioUri, this.getAftConfig());\n      this.methodResult(result, \"Long Recognize Started :\" + result.result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  methodResult = (result, mes) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(mes, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n    }, () => {\n      this.state.isLongRecognize ? this.longRecognize() : this.shortRecognize();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View>\n          <View style={styles.containerCenter}>\n            <TouchableOpacity onPress={this.pickAudioFile.bind(this)}\n              style={styles.startButton}>\n              <Text style={styles.startButtonLabel}>Select WAV/M4A/AMR/MP3</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <View>\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioName}\n            placeholder=\"Audio Name\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioType}\n            placeholder=\"Audio Type\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n\n          <TextInput\n            style={styles.customInput}\n            value={this.state.audioUri}\n            placeholder=\"Audio Uri\"\n            multiline={true}\n            scrollEnabled={true}\n            editable={false}\n          />\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={\"Upload Progress :\" + this.state.progress.toString()}\n          placeholder=\"Upload Progress\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.audioUri == '' ? true : false}\n          >\n            <Text style={styles.startButtonLabel}> Start AFT </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getShortAftLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Short AFT Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLongAftLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Long AFT Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.isLongRecognize ?\n          <View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.getLongAftResult.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}> Get Long Aft Result </Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.startTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Start Task</Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.pauseTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Pause Task</Text>\n              </TouchableOpacity>\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.destroyTask.bind(this)}\n                disabled={this.state.audioUri == '' ? true : false}\n              >\n                <Text style={styles.startButtonLabel}>Destroy Task</Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View>\n          </View>\n        }\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/AutomaticSpeechRecognition.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  NativeEventEmitter,\n  TextInput,\n  ToastAndroid,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSAsr, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\n\nexport default class AutomaticSpeechRecognition extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      isAsrSet: false,\n      listening: false,\n    };\n  }\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSAsr);\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_RESULTS, (event) => {\n      this.setState({ result: event.result, listening: false });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_RECOGNIZING_RESULTS, (event) => {\n      this.setState({ result: event.result });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_ERROR, (event) => {\n      this.setState({ result: event.errorMessage });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_START_LISTENING, (event) => {\n      this.setState({ result: event.info, listening: true });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_STARTING_SPEECH, (event) => {\n      this.setState({ result: event.info });\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_VOICE_DATA_RECEIVED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSAsr.ASR_ON_STATE, (event) => {\n      console.log(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_STATE);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_VOICE_DATA_RECEIVED);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_STARTING_SPEECH);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_START_LISTENING);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_RECOGNIZING_RESULTS);\n    this.eventEmitter.removeAllListeners(HMSAsr.ASR_ON_RESULTS);\n\n    if (this.state.isAsrSet) {\n      this.destroy();\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSAsr.getLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async createAsrRecognizer() {\n    try {\n      var result = await HMSAsr.createAsrRecognizer();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSAsr.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizing() {\n    try {\n      var result = await HMSAsr.startRecognizing(HMSAsr.LAN_EN_US, HMSAsr.FEATURE_WORD_FLUX);\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizingPlugin() {\n    try {\n      var result = await HMSAsr.startRecognizingPlugin(HMSAsr.LAN_EN_US, HMSAsr.FEATURE_WORD_FLUX);\n      console.log(result);\n      this.setState({ result: result.result })\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAsr = () => {\n    this.setState({\n      isAsrSet: true,\n    }, () => {\n      this.createAsrRecognizer()\n        .then(() => this.startRecognizing());\n    });\n  }\n\n  stopAsr = () => {\n    this.destroy()\n      .then(() => this.setState({ isAsrSet: false, listening: false }));\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Normal and UI Speech Recognition</Text>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAsr.bind(this)}\n            disabled={this.state.listening ? true : false}>\n            <Text style={styles.startButtonLabel}> Start </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.stopAsr.bind(this)}\n            disabled={this.state.listening ? false : true}>\n            <Text style={styles.startButtonLabel}> Stop </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startRecognizingPlugin.bind(this)}\n            disabled={this.state.listening ? true : false}>\n            <Text style={styles.startButtonLabel}> Start Speech Pickup UI </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/LanguageDetection.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport {\n  HMSLanguageDetection,\n  HMSApplication\n} from '@hmscore/react-native-hms-mllanguage';\n\nexport default class LanguageDetection extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      languageCode: [],\n      probability: [],\n      firstBest: '',\n      text: '',\n      isEnabled: false,\n    };\n  }\n\n  async probabilityDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.probabilityDetect(this.state.isEnabled, true, HMSLanguageDetection.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.probabilityDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.probabilityDetectError(e);\n    }\n  }\n\n  async firstBestDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.firstBestDetect(this.state.isEnabled, true, HMSLanguageDetection.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.firstBestDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.firstBestDetectError(e);\n    }\n  }\n\n  async syncFirstBestDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.syncFirstBestDetect(this.state.isEnabled, true, HMSLanguageDetection.FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.firstBestDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.firstBestDetectError(e);\n    }\n  }\n\n  async syncProbabilityDetect(textValue) {\n    try {\n      var result = await HMSLanguageDetection.syncProbabilityDetect(this.state.isEnabled, true, HMSLanguageDetection.PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD, textValue);\n      console.log(result);\n      this.probabilityDetectResult(result);\n    } catch (e) {\n      console.log(e);\n      this.probabilityDetectError(e);\n    }\n  }\n\n  probabilityDetectResult = (result) => {\n    if (result.status == HMSApplication.SUCCESS) {\n      result.result.forEach(element => {\n        this.state.languageCode.push(element['languageCode']);\n        this.state.probability.push(element['probability']);\n      });\n      this.setState({\n        languageCode: this.state.languageCode,\n        probability: this.state.probability,\n      });\n    }\n    else {\n      this.setState({\n        languageCode: [result.message],\n        probability: [result.message],\n      });\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  probabilityDetectError = (e) => {\n    this.setState({\n      languageCode: [],\n      probability: [],\n    });\n    ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n  }\n\n  firstBestDetectResult = (result) => {\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({\n        firstBest: result.result,\n      });\n    }\n    else {\n      this.setState({\n        firstBest: '',\n      });\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  firstBestDetectError = (e) => {\n    this.setState({\n      firstBest: '',\n    });\n    ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n  }\n\n  startProbabilityDetect = (isSync) => {\n    this.setState({\n      languageCode: [],\n      probability: [],\n    });\n    isSync ? this.syncProbabilityDetect(this.state.text) : this.probabilityDetect(this.state.text);\n  }\n\n  startFirstBestDetect = (isSync) => {\n    this.setState({\n      firstBest: ''\n    });\n    isSync ? this.syncFirstBestDetect(this.state.text) : this.firstBestDetect(this.state.text);\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"Detection Method : \" + (this.state.isEnabled ? 'Remote' : 'Local')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n            />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customInput}\n          placeholder=\"Write Something and Detect Language\"\n          onChangeText={text => this.setState({ text: text })}\n          multiline={true}\n        />\n\n        <Text style={styles.h1}>Probability Detect Results</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={`${this.state.languageCode}`}\n          placeholder=\"Language Code\"\n          multiline={true}\n          editable={true}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={`${this.state.probability}`}\n          placeholder=\"Probability\"\n          multiline={true}\n          editable={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startProbabilityDetect(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Probability Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startProbabilityDetect(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Sync Probability Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <Text style={styles.h1}>First Best Detect Result</Text>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.firstBest}\n          placeholder=\"Result\"\n          multiline={true}\n          editable={true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startFirstBestDetect(false)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> First Best Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startFirstBestDetect(true)}\n            underlayColor=\"#fff\">\n            <Text style={styles.startButtonLabel}> Sync First Best Detect </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/RealTimeTranscription.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { HMSSpeechRtt, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\nimport { styles } from '../Styles';\n\nexport default class RealTimeTranscription extends React.Component {\n\n  componentDidMount() {\n    this.setRealTimeTranscriptionListener();\n\n    this.eventEmitter = new NativeEventEmitter(HMSSpeechRtt);\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_RECOGNIZING_RESULTS, (event) => {\n      console.log(event);\n      this.setState({ result: event.text });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_ERROR, (event) => {\n      console.log(event);\n      this.setState({ result: event.error.toString() + \" / \" + event.errorMessage });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_LISTENING, (event) => {\n      console.log(event);\n      this.setState({ result: event.info });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_STARTING_OF_SPEECH, (event) => {\n      console.log(event);\n      this.setState({ result: event.info });\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_VOICE_DATA_RECEIVED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSSpeechRtt.SPEECH_RTT_ON_STATE, (event) => {\n      console.log(event);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_RECOGNIZING_RESULTS);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_LISTENING);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_STARTING_OF_SPEECH);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_VOICE_DATA_RECEIVED);\n    this.eventEmitter.removeAllListeners(HMSSpeechRtt.SPEECH_RTT_ON_STATE);\n\n    if (this.state.recognitionStart) {\n      this.destroy();\n    }\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      recognitionStart: false,\n    };\n  }\n\n  getSpeechRttConfig = () => {\n    return {\n      language: HMSSpeechRtt.LAN_EN_US,\n      enablePunctuation: true,\n      enableSentenceTimeOffset: true,\n      enableWordTimeOffset: true\n    };\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSSpeechRtt.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async startRecognizing() {\n    try {\n      var result = await HMSSpeechRtt.startRecognizing(this.getSpeechRttConfig());\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSSpeechRtt.getLanguages();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: result.result.toString()\n        });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setRealTimeTranscriptionListener() {\n    try {\n      var result = await HMSSpeechRtt.setRealTimeTranscriptionListener();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Real Time Speech Transcription</Text>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startRecognizing().then(() => this.setState({ recognitionStart: true }))}\n          >\n            <Text style={styles.startButtonLabel}> Start Speech Rtt </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.destroy().then(() => this.setState({ recognitionStart: false }))}\n          >\n            <Text style={styles.startButtonLabel}> Stop Speech Rtt </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.getLanguages.bind(this)}>\n            <Text style={styles.startButtonLabel}> Get Languages </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/SoundDetection.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSSoundDetect, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\nimport { styles } from '../Styles';\n\nexport default class SoundDetection extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSSoundDetect);\n\n    this.eventEmitter.addListener(HMSSoundDetect.SOUND_DETECT_ON_SUCCESS, (event) => {\n      console.log(event);\n      switch (event.soundType) {\n        case HMSSoundDetect.SOUND_EVENT_TYPE_ALARM:\n          this.setState({ result: \"Your Sound Type : ALARM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_BABY_CRY:\n          this.setState({ result: \"Your Sound Type : BABY CRY\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_BARK:\n          this.setState({ result: \"Your Sound Type : BARK\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_CAR_ALARM:\n          this.setState({ result: \"Your Sound Type : CAR ALARM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_DOOR_BELL:\n          this.setState({ result: \"Your Sound Type : DOOR BELL\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_KNOCK:\n          this.setState({ result: \"Your Sound Type : KNOCK\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_LAUGHTER:\n          this.setState({ result: \"Your Sound Type : LAUGHTER\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_MEOW:\n          this.setState({ result: \"Your Sound Type : MEOW\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SCREAMING:\n          this.setState({ result: \"Your Sound Type : SCREAM\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SNEEZE:\n          this.setState({ result: \"Your Sound Type : SNEEZE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_SNORING:\n          this.setState({ result: \"Your Sound Type : SNORE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_STEAM_WHISTLE:\n          this.setState({ result: \"Your Sound Type : WHISTLE\" });\n          break;\n        case HMSSoundDetect.SOUND_EVENT_TYPE_WATER:\n          this.setState({ result: \"Your Sound Type : WATER\" });\n          break;\n        default:\n          break;\n      }\n    });\n\n    this.eventEmitter.addListener(HMSSoundDetect.SOUND_DETECT_ON_FAILURE, (event) => {\n      console.log(event);\n      this.setState({ result: \"Error Code : \" + event.errorCode.toString() });\n    });\n\n    this.createSoundDetector()\n      .then(() => this.setSoundDetectorListener());\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSSoundDetect.SOUND_DETECT_ON_SUCCESS);\n    this.eventEmitter.removeAllListeners(HMSSoundDetect.SOUND_DETECT_ON_FAILURE);\n\n    if (this.state.isDetectorSet) {\n      this.destroy();\n    }\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      result: '',\n      isDetectorSet: false,\n      isStarted: false,\n    };\n  }\n\n  async createSoundDetector() {\n    try {\n      var result = await HMSSoundDetect.createSoundDetector();\n      console.log(result);\n      this.setState({ isDetectorSet: true });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async setSoundDetectorListener() {\n    try {\n      var result = await HMSSoundDetect.setSoundDetectorListener();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async destroy() {\n    try {\n      var result = await HMSSoundDetect.destroy();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async stop() {\n    try {\n      var result = await HMSSoundDetect.stop();\n      console.log(result);\n      this.setState({ result: \"Detection Stopped\" });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async start() {\n    try {\n      var result = await HMSSoundDetect.start();\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        if (result.result == false) {\n          this.recreate();\n        }\n        else {\n          this.setState({ result: \"Detection Started\", isStarted: true });\n        }\n      }\n      else {\n        this.recreate();\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  recreate = () => {\n    this.destroy()\n      .then(() => this.createSoundDetector())\n      .then(() => this.setSoundDetectorListener())\n      .then(() => this.setState({ result: \"Press Start Again\", isStarted: false }));\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Start Detection then Try to Generate a Sound Type Given Below</Text>\n\n        <View style={{ alignSelf: 'center', alignContent: 'center' }}>\n          <Text >ALARM</Text>\n          <Text >BABY CRY</Text>\n          <Text >BARK</Text>\n          <Text >CAR ALARM</Text>\n          <Text >DOOR BELL</Text>\n          <Text >KNOCK</Text>\n          <Text >LAUGHTER</Text>\n          <Text >MEOW</Text>\n          <Text >SCREAM</Text>\n          <Text >SNEEZE</Text>\n          <Text >SNORE</Text>\n          <Text >WHISTLE</Text>\n          <Text >WATER</Text>\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Sound Detect Result\"\n          multiline={false}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.start.bind(this)}\n            disabled={this.state.isStarted}>\n            <Text style={styles.startButtonLabel}> Start Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.stop.bind(this)}\n            disabled={this.state.isDetectorSet ? false : true}>\n            <Text style={styles.startButtonLabel}> Stop Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.destroy()\n              .then(() => this.createSoundDetector()\n                .then(() => this.setSoundDetectorListener()\n                  .then(() => this.setState({ isDetectorSet: true, isStarted: false, result: 'Sound Detector Destroyed' }))))}\n            disabled={this.state.isDetectorSet ? false : true}>\n            <Text style={styles.startButtonLabel}> Destroy Sound Detection </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/TextToSpeech.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  NativeEventEmitter,\n  ToastAndroid,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSTextToSpeech, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\n\nexport default class TextToSpeech extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      text: '',\n      value: '',\n      volume: 50,\n    };\n  }\n\n  hungryWolfStory = 'Once, a wolf was very hungry. It looked for food here and there. But it could not get any. At last it found a loaf of bread and piece of meat in the hole of a tree. \\\n  The hungry wolf squeezed into the hole. It ate all the food. It was a woodcutter lunch. He was on his way back to the tree to have lunch. But he saw there was no food in the hole, instead, a wolf.';\n\n  tonqueTwister = 'Peter Piper picked a peck of pickled peppers \\\n  A peck of pickled peppers Peter Piper picked\\\n  If Peter Piper picked a peck of pickled peppers\\\n  Where’s the peck of pickled peppers Peter Piper picked?';\n\n  componentDidMount() {\n\n    this.createEngine();\n\n    this.eventEmitter = new NativeEventEmitter(HMSTextToSpeech);\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_ERROR, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_WARN, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_RANGE_START, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_AUDIO_AVAILABLE, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSTextToSpeech.TTS_ON_EVENT, (event) => {\n      console.log(event);\n    });\n\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_ERROR);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_WARN);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_RANGE_START);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_AUDIO_AVAILABLE);\n    this.eventEmitter.removeAllListeners(HMSTextToSpeech.TTS_ON_EVENT);\n    this.shutdown();\n  }\n\n  async shutdown() {\n    try {\n      var result = await HMSTextToSpeech.shutdown();\n      this.resultMessage(result, \"Engine Resources Clear\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async createEngine() {\n    try {\n      var result = await HMSTextToSpeech.createEngine({\n        \"volume\": 1.0,\n        \"speed\": 1.0,\n        \"language\": HMSTextToSpeech.TTS_EN_US,\n        \"person\": HMSTextToSpeech.TTS_SPEAKER_FEMALE_EN,\n        \"synthesizeMode\": HMSTextToSpeech.TTS_ONLINE_MODE\n      });\n      this.resultMessage(result, \"Create Engine\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async updateConfiguration() {\n    try {\n      var result = await HMSTextToSpeech.updateConfig({\n        \"volume\": 1.0,\n        \"speed\": 1.0,\n        \"language\": HMSTextToSpeech.TTS_EN_US,\n        \"person\": HMSTextToSpeech.TTS_SPEAKER_MALE_EN,\n        \"synthesizeMode\": HMSTextToSpeech.TTS_ONLINE_MODE\n      });\n      this.resultMessage(result, \"Update Config\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async speak(word) {\n    try {\n      var result = await HMSTextToSpeech.speak(word, HMSTextToSpeech.QUEUE_FLUSH);\n      this.resultMessage(result, \"Speak\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async resume() {\n    try {\n      var result = await HMSTextToSpeech.resume();\n      this.resultMessage(result, \"Resume\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async volumeUp() {\n    try {\n      this.setState((prevState) => {\n        return {volume: prevState.volume + 10}\n      }, () => {\n        console.log(this.state.volume);\n        \n      })\n      \n      var result = await HMSTextToSpeech.setPlayerVolume(this.state.volume)\n      this.resultMessage(result, \"volumeUp\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n  \n  async volumeDown() {\n    try {\n      this.setState((prevState) => {\n        return {volume: prevState.volume - 10}\n      }, () => {console.log(this.state.volume)})\n\n      var result = await HMSTextToSpeech.setPlayerVolume(this.state.volume)\n      this.resultMessage(result, \"volumeDown\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async pause() {\n    try {\n      var result = await HMSTextToSpeech.pause();\n      this.resultMessage(result, \"Pause\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getLanguages() {\n    try {\n      var result = await HMSTextToSpeech.getLanguages();\n      this.resultMessage(result, \"Languages\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getSpeaker() {\n    try {\n      var result = await HMSTextToSpeech.getSpeaker(HMSTextToSpeech.TTS_EN_US);\n      this.resultMessage(result, \"Speaker English\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async isLanguageAvailable() {\n    try {\n      var result = await HMSTextToSpeech.isLanguageAvailable(HMSTextToSpeech.TTS_EN_US);\n      this.resultMessage(result, \"English isAvailable ?\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getSpeakers() {\n    try {\n      var result = await HMSTextToSpeech.getSpeakers();\n      this.resultMessage(result, \"Speaker List\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async stop() {\n    try {\n      var result = await HMSTextToSpeech.stop();\n      this.resultMessage(result, \"Stop\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  resultMessage = (result, mes) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(mes, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={{ width: '95%', alignSelf: 'center', alignContent: 'center' }}>\n\n          <Text style={styles.h1}>Click and Listen Text</Text>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Hello World\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Hello World</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"How are you\")}\n              underlayColor=\"#fff\">\n\n              <Text style={styles.buttonText}>How are you ?</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Welcome to Text to Speech Application\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Welcome to Text to Speech Application</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"Tap to me ! Lets talk !\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Tap to me ! Lets talk !</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"How can I get to Taksim ?\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>How can I get to Taksim ?</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(\"I will be there in 2 hours\")}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>I will be there in 2 hours</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(this.hungryWolfStory)}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Listen Hungry Wolf Story </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.speak(this.tonqueTwister)}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Listen Tonque Twister</Text>\n            </TouchableOpacity>\n          </View>\n\n          <Text style={styles.h1}>Speech Commands</Text>\n\n          <View style={{ marginTop: 10 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.pause()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Pause Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.stop()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Stop Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.resume()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Resume Speech </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.volumeUp()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Volume Up </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.volumeDown()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Volume Down </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={{ marginTop: 5 }}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.updateConfiguration()}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}> Switch To Male Sound </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsLanguageVoiceRelatedServices/Translation.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\n\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  ScrollView,\n  Switch,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { styles } from '../Styles';\nimport {\n  HMSTranslate,\n  HMSModelDownload,\n  HMSApplication\n} from '@hmscore/react-native-hms-mllanguage';\n\nexport default class Translate extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      text: '',\n      result: '',\n      isEnabled: false,\n      showPreparedModel: false,\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSTranslate);\n\n    this.eventEmitter.addListener(HMSTranslate.TRANSLATE_DOWNLOAD_ON_PROCESS, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(event.alreadyDownloadLength + \"/\" + event.totalLength + \"is downloaded\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSTranslate.TRANSLATE_DOWNLOAD_ON_PROCESS);\n  }\n\n  getTranslateSetting = () => {\n    return { sourceLanguageCode: HMSTranslate.ENGLISH, targetLanguageCode: HMSTranslate.CHINESE }\n  }\n\n  getStrategyConfiguration = () => {\n    return { needWifi: true, needCharging: false, needDeviceIdle: false, region: HMSModelDownload.AFILA }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  async preparedModel() {\n    try {\n      var result = await HMSTranslate.preparedModel(this.getStrategyConfiguration(), this.getTranslateSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: \"Model download Success. Now you can use local analyze\" });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async asyncTranslate(sentence) {\n    try {\n      if (sentence !== \"\") {\n        var result = await HMSTranslate.asyncTranslate(this.state.isEnabled, true, sentence, this.getTranslateSetting());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          this.setState({ result: result.result });\n        }\n        else {\n          this.setState({ result: result.message });\n          if (result.status == HMSApplication.NO_FOUND) {\n            this.setState({ showPreparedModel: true });\n            ToastAndroid.showWithGravity(\"Download Using Prepared Button Below\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n          }\n        }\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async syncTranslate(sentence) {\n    try {\n      if (sentence !== \"\") {\n        var result = await HMSTranslate.syncTranslate(this.state.isEnabled, true, sentence, this.getTranslateSetting());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          this.setState({ result: result.result });\n        }\n        else {\n          this.setState({ result: result.message });\n        }\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e });\n    }\n  }\n\n  async getAllLanguages() {\n    try {\n      var result = await HMSTranslate.getAllLanguages(this.state.isEnabled);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.result.toString() });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async syncGetAllLanguages() {\n    try {\n      var result = await HMSTranslate.syncGetAllLanguages(this.state.isEnabled);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.result.toString() });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"TRANSLATE METHOD : \" + (this.state.isEnabled ? 'REMOTE' : 'LOCAL')}\n            </Text>\n          </View>\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }} />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customEditBox2}\n          placeholder=\"ENGLISH INPUT\"\n          onChangeText={text => this.setState({ text: text })}\n          multiline={true}\n          editable={true} />\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"CHINESE RESULT\"\n          multiline={true}\n          editable={true} />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.asyncTranslate(this.state.text.trim())}>\n            <Text style={styles.startButtonLabel}> ASYNC Translation </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.syncTranslate(this.state.text.trim())}>\n            <Text style={styles.startButtonLabel}> SYNC Translation </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getAllLanguages()}>\n            <Text style={styles.startButtonLabel}> ASYNC Language List </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.syncGetAllLanguages()}>\n            <Text style={styles.startButtonLabel}> SYNC Language List </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.showPreparedModel ?\n          <View style={styles.basicButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={() => this.preparedModel()}>\n              <Text style={styles.startButtonLabel}> Prepared Model Download </Text>\n            </TouchableOpacity>\n          </View>\n          :\n          <View></View>\n        }\n\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsOtherServices/CustomModel.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\n\nexport default class CustomModel extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Prerequisites</Text>\n        <Text style={styles.h1}>1- Prepare your local or remote(downloaded using HMSModelDownload) model.</Text>\n        <Text style={styles.h1}>2- Configure method settings</Text>\n        <Text style={styles.h1}>3- Call exec method to perform inference using input and output configurations and content</Text>\n        <Text style={styles.h1}>4- Call close method to stop an inference task to release resources</Text>\n        <Text style={styles.h1}>5- Call getOutputIndex to obtain the channel index based on the output channel name</Text>\n        <Text style={styles.h1}>Note That : For details and model preparation please explore Huawei Developer Website </Text>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsOtherServices/Helper.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { HMSApplication } from '@hmscore/react-native-hms-mllanguage';\nimport { ToastAndroid } from 'react-native';\n\nconst options = {\n  title: 'Choose Method',\n  storageOptions: {\n    skipBackup: true,\n    path: 'images',\n  },\n};\n\n\nexport async function setApiKey() {\n  try {\n    var result = await HMSApplication.setApiKey(\"Api_Key\");\n    this.renderResult(result, \"Api key set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setUserRegion(userRegion) {\n  try {\n    var result = await HMSApplication.setUserRegion(userRegion);\n    this.renderResult(result, \"userRegion set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function getCountryCode() {\n  try {\n    var result = await HMSApplication.getCountryCode();\n    this.renderResult(result, \"Get Country Code\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setAccessToken() {\n  try {\n    var result = await HMSApplication.setAccessToken(\"<your_access_token>\");\n    this.renderResult(result, \"Access Token set\");\n  } catch (e) {\n    console.log(e);\n  }\n} \n\nrenderResult = (result, message) => {\n  console.log(result);\n  if (result.status == HMSApplication.SUCCESS) {\n    ToastAndroid.showWithGravity(message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n  else {\n    ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/HmsOtherServices/ModelDownload.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TouchableOpacity,\n  Switch,\n  ToastAndroid,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSModelDownload, HMSTextToSpeech, HMSTranslate, HMSApplication } from '@hmscore/react-native-hms-mllanguage';\nimport { styles } from '../Styles';\n\nexport default class ModelDownload extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSModelDownload);\n\n    this.eventEmitter.addListener(HMSModelDownload.DOWNLOAD_ON_PROCESS, (event) => {\n      console.log(event);\n      this.setState({ downloadStatus: event.alreadyDownloadLength + '/' + event.totalLength });\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSModelDownload.DOWNLOAD_ON_PROCESS);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isEnabled: false,\n      isOperationStart: false,\n      downloadStatus: '',\n      isExistState: false,\n    };\n  }\n\n  getStrategyConfiguration = () => {\n    return { needWifi: true, needCharging: false, needDeviceIdle: false, region: HMSModelDownload.AFILA }\n  }\n\n  async download() {\n    try {\n      if (this.state.isExistState == false) {\n        var result = await HMSModelDownload.downloadModel(this.getModelInformation(), this.getStrategyConfiguration());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          ToastAndroid.showWithGravity(\"Download Completed\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n      } else {\n        ToastAndroid.showWithGravity(\"Model exist in this device\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      this.setState({ isOperationStart: false, isExistState: false });\n    } catch (e) {\n      console.log(e);\n      this.setState({ isOperationStart: false, isExistState: false });\n    }\n  }\n\n  async delete() {\n    try {\n      if (this.state.isExistState == true) {\n        var result = await HMSModelDownload.deleteModel(this.getModelInformation());\n        console.log(result);\n        if (result.status == HMSApplication.SUCCESS) {\n          ToastAndroid.showWithGravity(\"Model deleted\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n      }\n      else {\n        ToastAndroid.showWithGravity(\"Model does not exist in this device\", ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      this.setState({ isOperationStart: false, isExistState: false });\n    } catch (e) {\n      console.log(e);\n      this.setState({ isOperationStart: false, isExistState: false });\n    }\n  }\n\n  async isModelExist() {\n    try {\n      var result = await HMSModelDownload.isModelExist(this.getModelInformation());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ isExistState: result.result });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n        this.setState({ isExistState: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ isExistState: false });\n    }\n  }\n\n  async getRecentModelFile() {\n    try {\n      var result = await HMSModelDownload.getRecentModelFile(this.getModelInformation());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ downloadStatus: result.result });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getModels(tag) {\n    try {\n      var result = await HMSModelDownload.getModels(tag);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ downloadStatus: result.result.toString() });\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  getModelInformation = () => {\n    if (this.state.isEnabled) {\n      return { tts: { speakerName: HMSTextToSpeech.TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE } };\n    } else {\n      return { translate: { languageCode: HMSTranslate.CHINESE } };\n    }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n      isOperationStart: false,\n    })\n  }\n\n  startDownload = () => {\n    this.setState({\n      isOperationStart: true\n    }, () => {\n      this.isModelExist()\n        .then(() => this.download());\n    });\n\n  }\n\n  startDelete = () => {\n    this.setState({\n      isOperationStart: true\n    }, () => {\n      this.isModelExist()\n        .then(() => this.delete());\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Select Your Model and Use Methods Below</Text>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"Model Name : \" + (this.state.isEnabled ? 'Text To Speech' : 'Translate')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isOperationStart}\n            />\n          </View>\n        </View >\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.downloadStatus}\n          placeholder=\"Download Status\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startDownload()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> DOWNLOAD </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startDelete()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> DELETE</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getModels(HMSModelDownload.MODEL_TTS_TAG)}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET TTS MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getModels(HMSModelDownload.MODEL_TRANSLATE_TAG)}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET TRANSLATE MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.getRecentModelFile()}\n            disabled={this.state.isOperationStart}>\n            <Text style={styles.startButtonLabel}> GET RECENT MODELS</Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/StartPage.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from 'react';\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  Image,\n  PermissionsAndroid,\n  BackHandler,\n  Alert\n} from 'react-native';\nimport { styles } from './Styles';\nimport { setApiKey, setAccessToken } from './HmsOtherServices/Helper';\n\n\nexport default class App extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions()\n      .then(() => setApiKey());\n      \n  }\n  \n  \n\n  async requestPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple(\n        [\n          PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n        ]\n      );\n      if (\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] == PermissionsAndroid.RESULTS.DENIED\n      ) {\n        this.alertPermission();\n      }\n    }\n    catch (err) {\n      console.log(err);\n    }\n  }\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\", onPress: () => BackHandler.exitApp()\n        }\n      ],\n      { cancelable: false }\n    );\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Language / Voice Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('Translation')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Translate Service</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('LanguageDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Language Detection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextToSpeech')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text To Speech</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('AutomaticSpeechRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Speech Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('AudioFileTranscription')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Audio File Transcript</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('RealTimeTranscription')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Real Time Transcript</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('SoundDetection')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Sound Detection</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text></Text>\n        <Text style={styles.h1}>Model</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('CustomModel')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Custom Model</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('ModelDownload')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Model Download</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/example/src/Styles.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet, Dimensions } from 'react-native';\n\nconst win = Dimensions.get('window');\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#EEF2F3' },\n\n  imageSelectView: {\n    width: 200,\n    height: 200,\n  },\n\n  superres: {\n    flex: 1,\n    alignSelf: 'stretch',\n    width: win.width,\n    height: win.height,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 15,\n    borderBottomWidth: 1,\n    padding: 20,\n    borderBottomColor: '#D3D3D3',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  boldText: { fontWeight: \"bold\" },\n\n  normalView: {\n    backgroundColor: '#EEF2F3',\n    flex: 1,\n    flexDirection: 'column',\n  },\n\n  baseItemContainer: {\n    marginTop: 10,\n    alignItems: 'center',\n    width: '95%',\n    alignSelf: 'center',\n    height: '33%'\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    alignSelf: 'center',\n    width: '95%',\n    borderBottomColor: '#D3D3D3',\n    borderBottomWidth: 1,\n    marginTop: 10,\n  },\n  itemOfView: {\n    width: '70%',\n    alignSelf: 'center'\n  },\n\n  itemOfView3: {\n    width: '30%',\n    alignSelf: 'flex-end'\n  },\n\n  dividedDropdown: {\n    borderWidth: 2,\n    borderColor: 'gray',\n    height: 40,\n    marginTop: 5\n  },\n\n  longDropdown: {\n    backgroundColor: '#fafafa',\n    width: '95%',\n    alignSelf: 'center',\n    borderWidth: 2,\n    borderColor: 'gray',\n    marginTop: 5\n  },\n\n\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n  },\n\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n\n  containerCenter: {\n    marginTop: 20,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  img: {\n    width: 100,\n    height: 100,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  containerFlexCenter: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: \"center\",\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  button: {\n    width: '32%',\n    height: 80,\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  menuButton: {\n    width: '100%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: '#fff',\n    flexDirection: 'column',\n  },\n  image: {\n    justifyContent: 'flex-start',\n    width: 400,\n    height: 80,\n  },\n  right: {\n    justifyContent: 'flex-end',\n  },\n\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customInput2: {\n    height: 75,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox: {\n    height: 250,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox2: {\n    height: 230,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    marginBottom: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\",\n    borderColor: '#D3D3D3',\n    borderWidth: 1,\n    textAlign: 'center'\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  startButton: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n  startButtonclicked: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: 'green',\n  },\n  startButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n\n  borderedText: {\n    paddingHorizontal: 20,\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'grey',\n    color: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#fee',\n  },\n\n  speakButton: {\n    color: '#000',\n    width: 200,\n    textAlignVertical: \"center\", textAlign: \"center\",\n    paddingLeft: 10,\n    paddingRight: 10,\n    borderColor: 'blue'\n  },\n\n  log: {\n    width: '95%',\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  faceVerificationImage: {\n    width: \"100%\",\n    height: 200\n  },\n\n  enable: {\n    backgroundColor: 'green'\n  },\n\n  cardRecogOptions: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    marginVertical: 10\n  }\n});\n"
  },
  {
    "path": "react-native-hms-mllanguage/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mllanguage\",\n  \"title\": \"React Native HMS ML Language\",\n  \"description\": \"React Native HMS ML Language Kit\",\n  \"version\": \"3.12.0-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-mllanguage\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ml\",\n    \"react-native-mllanguage\",\n    \"hms-ml\",\n    \"huawei-ml\",\n    \"ml-kit\",\n    \"machine-learning\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}\n"
  },
  {
    "path": "react-native-hms-mllanguage/src/index.d.ts",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-mllanguage\" {\n\n    export const HMSApplication = {\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        setApiKey(apiKey: string): Promise<Object>;,\n        getApiKey(): Promise<Object>;,\n        setAccessToken(token: string): Promise<Object>;,\n        getCountryCode(): Promise<Object>;,\n        setUserRegion(userRegion: int): Promise<Object>;\n    }\n\n    export declare enum HMSApplication {\n        UNKNOWN = -1,\n        SUCCESS = 0,\n        DISCARDED = 1,\n        INNER = 2,\n        INACTIVE = 3,\n        NOT_SUPPORTED = 4,\n        ILLEGAL_PARAMETER = 5,\n        OVERDUE = 6,\n        NO_FOUND = 7,\n        DUPLICATE_FOUND = 8,\n        NO_PERMISSION = 9,\n        INSUFFICIENT_RESOURCE = 10,\n        ANALYSIS_FAILURE = 11,\n        INTERRUPTED = 12,\n        EXCEED_RANGE = 13,\n        DATA_MISSING = 14,\n        AUTHENTICATION_REQUIRED = 15,\n        TFLITE_NOT_COMPATIBLE = 16,\n        INSUFFICIENT_SPACE = 17,\n        HASH_MISS = 18,\n        TOKEN_INVALID = 19,\n        FRAME_NULL = 20,\n        ANALYZER_NOT_AVAILABLE = 21,\n        CURRENT_ACTIVITY_NULL = 22,\n        CANCEL = 23,\n        FAILURE = 24,\n        DENY = 25,\n        STRING_PARAM_NULL = 26,\n        REMOTE_MODEL_NULL = 27,\n        ASR_RECOGNIZER_NULL = 28,\n        TTS_ENGINE_NULL = 30,\n        SOUND_DECT_NULL = 31,\n        CUSTOM_MODEL_SETTING_NULL = 32,\n        CUSTOM_MODEL_INPUT_NULL = 33,\n        CUSTOM_MODEL_EXECUTOR_SETTING_NULL = 34,\n        DATA_SET_NOT_VALID = 35,\n    }\n    export declare enum CountryCode {\n        REGION_DR_CHINA = 1002,\n        REGION_DR_RUSSIA = 1005,\n        REGION_DR_GERMAN = 1006,\n        REGION_DR_SINGAPORE = 1007\n    }\n\n    interface UiConfig {\n        orientation: HMSGeneralCardRecognition,\n        tipTextColor: HMSGeneralCardRecognition,\n        scanBoxCornerColor: HMSGeneralCardRecognition,\n        tipText: string\n    }\n\n    export const HMSAft = {\n        init(): Promise<Object>;,\n        close(): Promise<Object>;,\n        destroyTask(taskId: string): Promise<Object>;,\n        getLongAftResult(taskId: string): Promise<Object>;,\n        pauseTask(taskId: string): Promise<Object>;,\n        startTask(taskId: string): Promise<Object>;,\n        setAftListener(): Promise<Object>;,\n        shortRecognize(uri: string, remoteAftSetting: RemoteAftSetting): Promise<Object>;,\n        longRecognize(uri: string, remoteAftSetting: RemoteAftSetting): Promise<Object>;,\n        getLongAftLanguages(): Promise<Object>;,\n        getShortAftLanguages(): Promise<Object>;\n    }\n\n    export declare enum HMSAft {\n        LANGUAGE_ZH = \"zh\",\n        LANGUAGE_EN_US = \"en-US\",\n        ERR_UNKNOWN = 11199,\n        ERR_TASK_NOT_EXISTED = 11110,\n        ERR_TASK_ALREADY_INPROGRESS = 11114,\n        ERR_RESULT_WHEN_UPLOADING = 11109,\n        ERR_NO_ENOUGH_STORAGE = 11115,\n        ERR_NETCONNECT_FAILED = 11108,\n        ERR_LANGUAGE_CODE_NOTSUPPORTED = 11102,\n        ERR_INTERNAL = 11198,\n        ERR_ILLEGAL_PARAMETER = 11106,\n        ERR_FILE_NOT_FOUND = 11105,\n        ERR_ENGINE_BUSY = 11107,\n        ERR_SERVICE_CREDIT = 11122,\n        AFT_ON_EVENTERR_AUTHORIZE_FAILED = 11119,\n        ERR_AUDIO_UPLOAD_FAILED = 11113,\n        ERR_AUDIO_TRANSCRIPT_FAILED = 11111,\n        ERR_AUDIO_LENGTH_OVERFLOW = 11104,\n        ERR_AUDIO_FILE_NOTSUPPORTED = 11101,\n        ERR_AUDIO_FILE_SIZE_OVERFLOW = 11103,\n        ERR_AUDIO_INIT_FAILED = 11112,\n        AFT_ON_ERROR = \"aftOnError\",\n        AFT_ON_EVENT = \"aftOnEvent\",\n        AFT_ON_INIT_COMPLETE = \"aftOnInitComplete\",\n        AFT_ON_UPLOAD_PROGRESS = \"aftOnUploadProgress\",\n        AFT_ON_RESULT =\t\"aftOnResult\"\n    }\n\n    interface RemoteAftSetting {\n        languageCode: string,\n        enablePunctuation: boolean,\n        enableWordTimeOffset: boolean,\n        enableSentenceTimeOffset: boolean\n    }\n\n    export const HMSAsr = {\n        destroy(): Promise<Object>;,\n        createAsrRecognizer(): Promise<Object>;,\n        startRecognizing(language: HMSAsr, feature: HMSAsr): Promise<Object>;,\n        startRecognizingPlugin(language: HMSAsr, feature: HMSAsr): Promise<Object>;,\n        getLanguages(): Promise<Object>;\n    }\n\n    export declare enum HMSAsr {\n        LAN_ZH = \"zh\",\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-R\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        LAN_RU_RU = \"ru-RU\",\n        LAN_IT_IT = \"it-IT\",\n        LAN_AR = \"ar\",\n        LAN_TH_TH = \"th-TH\",\n        LAN_FIL_PH = \"fil-PH\",\n        LAN_MS_MY = \"ms-MY\",\n        STATE_LISTENING = 1,\n        STATE_NO_SOUND = 2,\n        STATE_NO_SOUND_TIMES_EXCEED = 3,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_WAITING = 9,\n        ASR_ON_ERROR = \"asrOnError\",\n        ASR_ON_RECOGNIZING_RESULTS = \"asrOnRecognizingResults\",\n        ASR_ON_RESULTS = \"asrOnResults\",\n        ASR_ON_START_LISTENING = \"asrOnStartListening\",\n        ASR_ON_STARTING_SPEECH = \"asrOnStartingOfSpeech\",\n        ASR_ON_STATE = \"asrOnState\",\n        ASR_ON_VOICE_DATA_RECEIVED = \"asrOnVoiceDataReceived\",\n        ERR_NO_NETWORK = 11202,\n        ERR_SERVICE_UNAVAILABLE = 11203,\n        ERR_NO_UNDERSTAND = 11204,\n        ERR_INVALIDATE_TOKEN = 11219,\n        FEATURE_ALL_IN_ONE = 12,\n        FEATURE_WORD_FLUX = 11\n    }\n\n    export const HMSTranslate = {\n        asyncTranslate(isRemote: boolean, isStop: boolean, text: string, translatorSetting: TranslatorSetting): Promise<Object>;,\n        preparedModel(strategyConfiguration: StrategyConfiguration, translatorSetting: TranslatorSetting): Promise<Object>;,\n        syncTranslate(isRemote: boolean, isStop: boolean, text: string, translatorSetting: TranslatorSetting): Promise<Object>;,\n        syncGetAllLanguages(isRemote: boolean): Promise<Object>;,\n        getAllLanguages(isRemote: boolean): Promise<Object>;\n    }\n\n    export declare enum HMSTranslate {\n        TRANSLATE_DOWNLOAD_ON_PROCESS = \"translateDownloadProcess\",\n        AFRIKAANS = \"af\",\n        ARABIC = \"ar\",\n        BULGARIAN = \"bg\",\n        BURMESE = \"my\",\n        CROATIAN = \"hr\",\n        CZECH = \"cs\",\n        CHINESE = \"zh\",\n        TRADITIONAL_CHINESE = \"zh-hk\",\n        DANISH = \"da\",\n        DUTCH = \"nl\",\n        ESTONIAN = \"et\",\n        ENGLISH = \"en\",\n        FINNISH = \"fi\",\n        FRENCH = \"fr\",\n        GERMAN = \"de\",\n        GUJARATI = \"gu\",\n        GREEK = \"el\",\n        HUNGARIAN = \"hu\",\n        HINDI = \"hi\",\n        HEBREW = \"he\",\n        IRISH = \"is\",\n        ITALIAN = \"it\",\n        INDONESIAN = \"id\",\n        KHMER = \"km\",\n        KOREAN = \"ko\",\n        JAPANESE = \"ja\",\n        LATIN = \"rm\",\n        LATVIAN = \"lv\",\n        MALAY = \"ms\",\n        MARATHI = \"mr\",\n        NORWEGIAN = \"no\",\n        PUNJABI = \"pa\",\n        POLISH = \"pl\",\n        PORTUGUESE = \"pt\",\n        PERSIAN = \"fa\",\n        RUSSIAN = \"ru\",\n        ROMANIAN = \"ro\",\n        SERBIAN = \"sr\",\n        SPANISH = \"es\",\n        SLOVAK = \"sk\",\n        SWEDISH = \"sv\",\n        TAMIL = \"ta\",\n        TURKISH = \"tr\",\n        THAI = \"th\",\n        TAGALOG = \"tl\",\n        TELUGU = \"te\",\n        VIETNAMESE = \"vi\"\n    }\n\n    interface TranslatorSetting {\n        sourceLanguageCode: HMSTranslate,\n        targetLanguageCode: HMSTranslate\n    }\n\n    interface StrategyConfiguration {\n        needWifi: boolean,\n        needCharging: boolean,\n        deviceIdle: boolean,\n        region: HMSModelDownload\n    }\n\n    export const HMSLanguageDetection = {\n        probabilityDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        firstBestDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        syncProbabilityDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;,\n        syncFirstBestDetect(isRemote: boolean, isStop: boolean, trustedThreshold, sourceText: string): Promise<Object>;\n    }\n\n    export declare enum HMSLanguageDetection {\n        FIRST_BEST_DETECTION_LANGUAGE_TRUSTED_THRESHOLD = 0.5,\n        PROBABILITY_DETECTION_LANGUAGE_TRUSTED_THRESHOLD = 0.01,\n        UNDETECTION_LANGUAGE_TRUSTED_THRESHOLD = \"unknown\"\n    }\n\n    export const HMSSpeechRtt = {\n        startRecognizing(rttConfiguration: RttConfiguration): Promise<Object>;,\n        setRealTimeTranscriptionListener(): Promise<Object>;,\n        destroy(): Promise<Object>;\n    }\n\n    export declare enum HMSSpeechRtt {\n        ERR_NO_NETWORK = 13202,\n        ERR_SERVICE_UNAVAILABLE = 13203,\n        ERR_INVALIDE_TOKEN = 13219,\n        ERR_SERVICE_CREDIT = 13222,\n        ERR_SERVICE_UNSUBSCRIBED = 13223,\n        ERR_SERVICE_FREE_USED_UP = 13224,\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-FR\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        STATE_LISTENING = 1,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_SERVICE_RECONNECTING = 42,\n        STATE_SERVICE_RECONNECTED = 43,\n        SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnError\",\n        SPEECH_RTT_ON_ERROR = \"speechRttOnError\",\n        SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\",\n        SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\",\n        SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\",\n        SPEECH_RTT_ON_STATE = \"speechRttOnState\",\n        SCENES_SHOPPING = \"shopping\"\n    }\n\n    interface RttConfiguration {\n        language: HMSSpeechRtt,\n        enablePunctuation: boolean,\n        enableSentenceTimeOffset: boolean,\n        enableWordTimeOffset: boolean,\n    }\n    \n    export const HMSCustomModel = {\n        exec(isRemote: boolean, modelInputOutputSettings: ModelInputOutputSettings, modelInputConfiguration: ModelInputConfiguration, modelConfig: CustomModelConfiguration): Promise<object>;,\n    \n        close(isRemote: boolean, modelConfig: CustomModelConfiguration): Promise<object>;,\n    \n        getOutputIndex(isRemote: boolean, channelName: string, modelConfig: CustomModelConfiguration): Promise<object>;,\n    };\n    \n    interface ModelInputOutputSettings {\n        inputFormat: InputFormat;\n        outputFormat: OutputFormat;\n    }\n    \n    interface InputFormat {\n        width: number;\n        height: number;\n    }\n    \n    interface OutputFormat {\n        outputSize: number;\n    }\n    \n    interface ModelInputConfiguration {\n        uri: string;\n        height: number;\n        width: number;\n    }\n    \n    interface CustomModelConfiguration {\n        modelName: string;\n        assetPath: string;\n        localFullPath: string;\n    }\n    \n    export const HMSModelDownload = {\n        downloadModel(modelConfig: DownloadModelConfiguration, strategyConfig: StrategyConfiguration): Promise<object>;,\n    \n        deleteModel(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    \n        isModelExist(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    \n        getModels(modelTag: number): Promise<object>;,\n    \n        getRecentModelFile(modelConfig: DownloadModelConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSModelDownload {\n        REGION_DR_CHINA = 1002,\n        REGION_DR_RUSSIA = 1005,\n        REGION_DR_GERMAN = 1006,\n        REGION_DR_SINGAPORE = 1007,\n        DOWNLOAD_ON_PROCESS = \"modelDownloadOnProcess\",\n        MODEL_TTS_TAG = 1,\n        MODEL_TRANSLATE_TAG = 2,\n        MODEL_CUSTOM_TAG = 3\n    }\n    \n    interface DownloadModelConfiguration {\n        translate: TranslateModelConfiguration;\n        tts: TtsModelConfiguration;\n        customRemoteModel: string;\n    }\n    \n    interface TranslateModelConfiguration {\n        languageCode: HMSTextToSpeech;\n    }\n    \n    interface TtsModelConfiguration {\n        speakerName: HMSTextToSpeech;\n    }\n    \n    export const HMSTextToSpeech = {\n        createEngine(ttsConfiguration: TtsConfiguration): Promise<object>;,\n    \n        speak(text: string, mode: HMSTextToSpeech): Promise<object>;,\n        \n        resume(): Promise<object>;,\n        \n        setPlayerVolume(volume: number): Promise<object>;,\n    \n        stop(): Promise<object>;,\n    \n        pause(): Promise<object>;,\n    \n        shutdown(): Promise<object>;,\n    \n        getLanguages(): Promise<object>;,\n    \n        getSpeaker(language: HMSTextToSpeech): Promise<object>;,\n    \n        getSpeakers(): Promise<object>;,\n    \n        isLanguageAvailable(language: HMSTextToSpeech): Promise<object>;,\n    \n        updateConfig(ttsConfiguration: TtsConfiguration): Promise<object>;,\n    };\n\n    export declare enum HMSTextToSpeech {\n        TTS_SPEAKER_FEMALE_ZH = \"Female-zh\",\n        TTS_SPEAKER_FEMALE_EN = \"Female-en\",\n        TTS_SPEAKER_MALE_ZH = \"Male-zh\",\n        TTS_SPEAKER_MALE_EN = \"Male-en\",\n        TTS_SPEAKER_FEMALE_ZH_1 = \"zh-Hans-st-1\",\n        TTS_SPEAKER_MALE_ZH_1 = \"zh-Hans-st-2\",\n        TTS_SPEAKER_FEMALE_ZH_2 = \"zh-Hans-st-3\",\n        TTS_SPEAKER_MALE_ZH_2 = \"zh-Hans-st-4\",\n        TTS_SPEAKER_FEMALE_EN_1 = \"en-US-st-1\",\n        TTS_SPEAKER_MALE_EN_1 = \"en-US-st-2\",\n        TTS_SPEAKER_FEMALE_EN_2 = \"en-US-st-3\",\n        TTS_SPEAKER_MALE_EN_2 = \"en-US-st-4\",\n        TTS_SPEAKER_FEMALE_ZH_HQ = \"zh-Hans-hq-1\",\n        TTS_SPEAKER_FEMALE_EN_HQ = \"en-US-hq-1\",\n        TTS_SPEAKER_MALE_ZH_HQ = \"zh-Hans-hq-2\",\n        TTS_SPEAKER_MALE_EN_HQ = \"en-US-hq-2\",\n        TTS_SPEAKER_FEMALE_FR = \"fr-FR-st-1\",\n        TTS_SPEAKER_FEMALE_ES = \"es-ES-st-1\",\n        TTS_SPEAKER_FEMALE_DE = \"de-DE-st-1\",\n        TTS_SPEAKER_FEMALE_IT = \"it-IT-st-1\",\n        TTS_SPEAKER_FEMALE_AR = \"ar-AR-st-1\",\n        TTS_SPEAKER_FEMALE_RU = \"ru-RU-st-1\",\n        TTS_SPEAKER_FEMALE_TH = \"th-TH-st-1\",\n        TTS_SPEAKER_FEMALE_PL = \"pl-PL-st-1\",\n        TTS_SPEAKER_FEMALE_MS = \"ms-MS-st-1\",\n        TTS_SPEAKER_FEMALE_TR = \"tr-TR-st-1\",\n        TTS_ZH_HANS = \"zh-Hans\",\n        TTS_EN_US = \"en-US\",\n        TTS_LAN_FR_FR = \"fr-FR\",\n        TTS_LAN_ES_ES = \"es-ES\",\n        TTS_LAN_DE_DE = \"de-DE\",\n        TTS_LAN_IT_IT = \"it-IT\",\n        TTS_LAN_AR_AR = \"ar-AR\",\n        TTS_LAN_RU_RU = \"ru-RU\",\n        TTS_LAN_TH_TH = \"th-TH\",\n        TTS_LAN_PL_PL = \"pl-PL\",\n        TTS_LAN_MS_MS = \"ms-MS\",\n        TTS_LAN_TR_TR = \"tr-TR\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_BOLT = \"zh-Hans-st-bolt-1\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_BOLT = \"zh-Hans-st-bolt-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BOLT = \"en-US-st-bolt-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_MALE_BOLT = \"en-US-st-bolt-2\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_FEMALE_EAGLE = \"zh-Hans-st-eagle-,\",\n        TTS_SPEAKER_OFFLINE_ZH_HANS_MALE_EAGLE = \"zh-Hans-st-eagle-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_EAGLE = \"en-US-st-eagle-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_MALE_EAGLE = \"en-US-st-eagle-2\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_BEE = \"en-US-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_BEE = \"fr-FR-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_BEE = \"es-ES-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_BEE = \"de-DE-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_BEE = \"it-IT-st-bee-1\",\n        TTS_SPEAKER_OFFLINE_EN_US_FEMALE_FLY = \"en-US-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_FR_FR_FEMALE_FLY = \"fr-FR-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_ES_ES_FEMALE_FLY = \"es-ES-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_DE_DE_FEMALE_FLY = \"de-DE-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_IT_IT_FEMALE_FLY = \"it-IT-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_AR_AR_FEMALE_FLY = \"ar-AR-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_RU_RU_FEMALE_FLY = \"ru-RU-st-fly-1\",\n        TTS_SPEAKER_OFFLINE_TH_TH_FEMALE_FLY = \"th-TH-st-fly-1\",\n        EVENT_PLAY_START = 1,\n        EVENT_PLAY_RESUME = 2,\n        EVENT_PLAY_PAUSE = 3,\n        EVENT_PLAY_STOP = 4,\n        EVENT_SYNTHESIS_START = 5,\n        EVENT_SYNTHESIS_END = 6,\n        EVENT_SYNTHESIS_COMPLETE = 7,\n        EVENT_PLAY_STOP_INTERRUPTED = \"interrupted\",\n        EVENT_SYNTHESIS_INTERRUPTED = \"interrupted\",\n        LANGUAGE_AVAILABLE = 0,\n        LANGUAGE_NOT_SUPPORT = 1,\n        LANGUAGE_UPDATING = 2,\n        TTS_ONLINE_MODE = \"online\",\n        TTS_OFFLINE_MODE = \"offline\",\n        QUEUE_APPEND = 0,\n        QUEUE_FLUSH = 1,\n        EXTERNAL_PLAYBACK = 2,\n        OPEN_STREAM = 4,\n        ERR_ILLEGAL_PARAMETER = 11301,\n        ERR_NET_CONNECT_FAILED = 11302,\n        ERR_INSUFFICIENT_BALANCE = 11303,\n        ERR_SPEECH_SYNTHESIS_FAILED = 11304,\n        ERR_AUDIO_PLAYER_FAILED = 11305,\n        ERR_AUTHORIZE_FAILED = 11306,\n        ERR_AUTHORIZE_TOKEN_INVALIDE = 11307,\n        ERR_INTERNAL = 11398,\n        ERR_UNKNOWN = 11399,\n        WARN_INSUFFICIENT_BANDWIDTH = 113001,\n        FORMAT_PCM_8BIT = 1,\n        FORMAT_PCM_16BIT = 2,\n        SAMPLE_RATE_16K = 16000,\n        CHANNEL_OUT_MONO = 4,\n        TTS_ON_AUDIO_AVAILABLE = \"ttsOnAudioAvailable\",\n        TTS_ON_EVENT = \"ttsOnEvent\",\n        TTS_ON_RANGE_START = \"ttsOnRangeStart\",\n        TTS_ON_WARN = \"ttsOnWarn\",\n        TTS_ON_ERROR = \"ttsOnError\"\n    }\n    \n    interface TtsConfiguration {\n        volume: number;\n        speed: number;\n        language: HMSTextToSpeech;\n        person: HMSTextToSpeech;\n        synthesizeMode: HMSTextToSpeech;\n    }\n    \n    export const HMSSoundDetect = {\n        createSoundDetector(): Promise<object>;,\n    \n        destroy(): Promise<object>;,\n    \n        stop(): Promise<object>;,\n    \n        start(): Promise<object>;,\n    \n        setSoundDetectorListener(): Promise<object>;,\n    };\n\n    export declare enum HMSSoundDetect {\n        SOUND_DETECT_ERROR_NO_MEM = 12201,\n        SOUND_DETECT_ERROR_FATAL_ERROR = 12202,\n        SOUND_DETECT_ERROR_AUDIO = 12203,\n        SOUND_DETECT_ERROR_INTERNAL = 12298,\n        SOUND_EVENT_TYPE_LAUGHTER = 0,\n        SOUND_EVENT_TYPE_BABY_CRY = 1,\n        SOUND_EVENT_TYPE_SNORING = 2,\n        SOUND_EVENT_TYPE_SNEEZE = 3,\n        SOUND_EVENT_TYPE_SCREAMING = 4,\n        SOUND_EVENT_TYPE_MEOW = 5,\n        SOUND_EVENT_TYPE_BARK = 6,\n        SOUND_EVENT_TYPE_WATER = 7,\n        SOUND_EVENT_TYPE_CAR_ALARM = 8,\n        SOUND_EVENT_TYPE_DOOR_BELL = 9,\n        SOUND_EVENT_TYPE_KNOCK = 10,\n        SOUND_EVENT_TYPE_ALARM = 11,\n        SOUND_EVENT_TYPE_STEAM_WHISTLE = 12,\n        SOUND_DETECT_ON_FAILURE = \"soundDetectOnFailure\",\n        SOUND_DETECT_ON_SUCCESS = \"soundDetectOnSuccess\"\n    }\n\n    export declare enum MLSpeechRealTimeTranscriptionConstants {\n        ERR_NO_NETWORK = 13202,\n        ERR_SERVICE_UNAVAILABLE = 13203,\n        ERR_INVALIDE_TOKEN = 13219,\n        ERR_SERVICE_CREDIT = 13222,\n        ERR_SERVICE_UNSUBSCRIBED = 13223,\n        ERR_SERVICE_FREE_USED_UP = 13224,\n        LAN_ZH_CN = \"zh-CN\",\n        LAN_EN_US = \"en-US\",\n        LAN_FR_FR = \"fr-FR\",\n        LAN_ES_ES = \"es-ES\",\n        LAN_EN_IN = \"en-IN\",\n        LAN_DE_DE = \"de-DE\",\n        STATE_LISTENING = 1,\n        STATE_NO_UNDERSTAND = 6,\n        STATE_NO_NETWORK = 7,\n        STATE_SERVICE_RECONNECTING = 42,\n        STATE_SERVICE_RECONNECTED = 43,\n        SPEECH_RTT_ON_RECOGNIZING_RESULTS = \"speechRttOnError\",\n        SPEECH_RTT_ON_ERROR = \"speechRttOnError\",\n        SPEECH_RTT_ON_LISTENING = \"speechRttOnListening\",\n        SPEECH_RTT_ON_STARTING_OF_SPEECH = \"speechRttOnStartingOfSpeech\",\n        SPEECH_RTT_ON_VOICE_DATA_RECEIVED = \"speechRttOnVoiceDataReceived\",\n        SPEECH_RTT_ON_STATE = \"speechRttOnState\",\n        SCENES_SHOPPING = \"shopping\"\n    }\n\n}"
  },
  {
    "path": "react-native-hms-mllanguage/src/index.js",
    "content": "/*\n    Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nimport React, { Component } from 'react';\nimport { requireNativeComponent, View } from 'react-native';\n\nconst HMSSurfaceView = requireNativeComponent('HMSSurfaceView');\n\nexport const {\n  HMSTranslate,\n  HMSLanguageDetection,\n  HMSAsr,\n  HMSAft,\n  HMSSpeechRtt,\n  HMSSoundDetect,\n  HMSModelDownload,\n  HMSTextToSpeech,\n  HMSApplication,\n  HMSCustomModel\n} = NativeModules;\n\nexport default class SurfaceView extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return <HMSSurfaceView {...this.props} />;\n  }\n}\n\nSurfaceView.propTypes = {\n  ...View.propTypes\n}"
  },
  {
    "path": "react-native-hms-mltext/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-mltext/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: react-native-image-picker &nbsp;5.6.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">The MIT License (MIT)</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy<br />\nof this software and associated documentation files (the &quot;Software&quot;), to deal<br />\nin the Software without restriction, including without limitation the rights<br />\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\ncopies of the Software, and to permit persons to whom the Software is<br />\nfurnished to do so, subject to the following conditions:</p>\n\n<p>The above copyright notice and this permission notice shall be included in all<br />\ncopies or substantial portions of the Software.</p>\n\n<p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\nSOFTWARE.</p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: react-native-document-picker &nbsp;4.1.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">The MIT License (MIT)</span></span></span></span></p>\n\n<p>Permission is hereby granted, free of charge, to any person obtaining a copy<br />\nof this software and associated documentation files (the &quot;Software&quot;), to deal<br />\nin the Software without restriction, including without limitation the rights<br />\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\ncopies of the Software, and to permit persons to whom the Software is<br />\nfurnished to do so, subject to the following conditions:</p>\n\n<p>The above copyright notice and this permission notice shall be included in all<br />\ncopies or substantial portions of the Software.</p>\n\n<p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\nSOFTWARE.</p>\n\n<h1 style=\"text-align:start\">&nbsp;</h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;<strong><span style=\"font-size:16pt\">Written Offer&nbsp;</span></strong><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:</span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"color:blue\"><u><span style=\"font-family:Arial,sans-serif\"><a href=\"mailto:foss@huawei.com\" style=\"color:blue; text-decoration:underline\">foss@huawei.com</a></span></u></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:black\">This offer is valid to anyone in receipt of this information.</span></span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>THIS OFFER IS VALID FOR THREE YEARS FROM THE MOMENT WE DISTRIBUTED THE PRODUCT OR FIRMWARE .</strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-mltext/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS ML Text</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mltext\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-mlimage?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-mltext\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-mlimage?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-mlimage.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nThe React Native ML Text Plugin allows your apps to easily leverage Huawei's long-term proven expertise in machine learning to support diverse artificial intelligence (AI) applications throughout a wide range of industries. Thanks to Huawei's technology accumulation, ML Plugin provides diversified leading machine learning capabilities that are easy to use, helping you develop various AI apps.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050726178?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-mltext\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001051006241?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/introduction-0000001665009017-V1)\n\n### Additional Topics\n\n- [Supported Location](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/supported-location-0000001075977968-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## Licence\n\nHuawei React-Native Plugin is licenced under [Apache 2.0 licence](LICENSE)"
  },
  {
    "path": "react-native-hms-mltext/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.9.1.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 31\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 31\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenCentral()\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation \"com.facebook.react:react-native:+\"\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr:3.11.0.301'\n    // Import the Latin-based language model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.11.0.301'\n    // Import the Japanese and Korean model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:3.11.0.301'\n    // Import the Chinese and English model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:3.11.0.301'\n\n    // Import the document model package.\n    implementation 'com.huawei.hms:ml-computer-vision-cloud:3.11.0.301'\n\n    // Import the Vietnam ID Card recognition plugin and recognition capability package.\n    implementation 'com.huawei.hms:ml-computer-card-icr-vn:3.7.0.303'\n    // Import the ID Card recognition plug-in package.\n    implementation 'com.huawei.hms:ml-computer-card-icr-cn:3.7.0.303'\n\n    // Import the combined package of the bank card recognition plugin and recognition capability.\n    implementation 'com.huawei.hms:ml-computer-card-bcr:3.7.0.302'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr:3.11.0.301'\n    // Import the Latin-based language model package.\n    implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.11.0.301'\n    // Import the general card recognition plugin package.\n    implementation 'com.huawei.hms:ml-computer-card-gcr-plugin:3.11.0.301'\n\n    // Import the base SDK.\n    implementation 'com.huawei.hms:ml-computer-vision-formrecognition:3.11.0.301'\n    // Import the form recognition model package.\n    implementation 'com.huawei.hms:ml-computer-vision-formrecognition-model:3.7.0.301'\n\n    // Text Embedding\n    implementation 'com.huawei.hms:ml-nlp-textembedding:3.11.0.302'\n}"
  },
  {
    "path": "react-native-hms-mltext/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mltext/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx2048m"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.mltext\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"\n        android:maxSdkVersion=\"29\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n    <uses-permission android:name=\"android.permission.RECORD_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n<application>\n        <activity android:name=\"com.huawei.hms.rn.mltext.helpers.views.CustomViewActivity\" android:exported=\"false\"/>\n    </application>\n</manifest>"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/HMSBase.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.rn.mltext.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    public HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * To obtain context\n     * @return app context\n     */\n    public ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     * @param methodName Name of the method\n     */\n    protected void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        if (e instanceof MLException) {\n            MLException e1 = (MLException) e;\n            promise.resolve(UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()));\n        } else {\n            promise.resolve(UNKNOWN.getStatusAndMessage(null, e.getMessage()));\n        }\n    }\n\n    /**\n     * Handles exceptions\n     *\n     * @param methodName method name\n     * @param e Exception\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, HMSResults e, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(e.getStatusAndMessage());\n    }\n\n    /**\n     * Handles success\n     *\n     * @param methodName method name\n     * @param writableMap result\n     * @param promise promise\n     */\n    protected void handleResult(String methodName, WritableMap writableMap, Promise promise) {\n        logger.sendSingleEvent(methodName);\n        promise.resolve(writableMap);\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/HMSMLText.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.mltext.commonservices.HMSApplication;\nimport com.huawei.hms.rn.mltext.commonservices.HMSLensEngine;\nimport com.huawei.hms.rn.mltext.textrelatedservices.CustomViewHandler;\nimport com.huawei.hms.rn.mltext.helpers.views.HMSSurfaceView;\nimport com.huawei.hms.rn.mltext.nlprelatedservices.HMSTextEmbedding;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSBankCardRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSDocumentRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSFormRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSGeneralCardRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSIDCardRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSTextRecognition;\nimport com.huawei.hms.rn.mltext.textrelatedservices.HMSVietnamCardRecognition;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSMLText implements ReactPackage {\n\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSApplication(reactContext));\n        modules.add(new HMSTextRecognition(reactContext));\n        modules.add(new HMSDocumentRecognition(reactContext));\n        modules.add(new HMSBankCardRecognition(reactContext));\n        modules.add(new HMSGeneralCardRecognition(reactContext));\n        modules.add(new HMSIDCardRecognition(reactContext));\n        modules.add(new HMSVietnamCardRecognition(reactContext));\n        modules.add(new HMSFormRecognition(reactContext));\n        modules.add(new HMSTextEmbedding(reactContext));\n        modules.add(new HMSLensEngine(reactContext));\n        modules.add(new CustomViewHandler(reactContext));\n\n        return modules;\n    }\n\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.singletonList(new HMSSurfaceView());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/commonservices/HMSApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.commonservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.ERROR_CODES;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.SUCCESS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.UNKNOWN;\n\nimport android.text.TextUtils;\n\nimport com.huawei.hms.mlsdk.common.MLApplication;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class HMSApplication extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSApplication(ReactApplicationContext reactContext) {\n        super(reactContext, HMSApplication.class.getSimpleName(), ERROR_CODES);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param apiKey api key\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Sets the api key dynamically\n     *\n     * @param accessToken access token\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setAccessToken(String accessToken, final Promise promise) {\n        startMethodExecTimer(\"setAccessToken\");\n\n        if (TextUtils.isEmpty(accessToken)) {\n            handleResult(\"setAccessToken\", STRING_PARAM_NULL, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setAccessToken(accessToken);\n        handleResult(\"setAccessToken\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns api key that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        handleResult(\"getApiKey\",\n            HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getApiKey()), promise);\n    }\n\n    /**\n     * Enables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).enableLogger();\n        handleResult(\"enableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Disables logging\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        HMSLogger.getInstance(getContext()).disableLogger();\n        handleResult(\"disableLogger\", SUCCESS, promise);\n    }\n\n    /**\n     * Returns Country Code that set before\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getCountryCode(final Promise promise) {\n        startMethodExecTimer(\"getCountryCode\");\n        handleResult(\"getCountryCode\",\n                HMSResultCreator.getInstance().getStringResult(MLApplication.getInstance().getCountryCode()), promise);\n    }\n\n    /**\n     * Sets the userRegion dynamically\n     *\n     * @param userRegion\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setUserRegion(int userRegion, final Promise promise) {\n        startMethodExecTimer(\"setUserRegion\");\n\n        if ( userRegion != MLApplication.REGION_DR_CHINA &&\n                userRegion != MLApplication.REGION_DR_GERMAN &&\n                userRegion != MLApplication.REGION_DR_RUSSIA &&\n                userRegion != MLApplication.REGION_DR_SINGAPORE ) {\n            handleResult(\"setUserRegion\", UNKNOWN, promise);\n            return;\n        }\n\n        MLApplication.getInstance().setUserRegion(userRegion);\n        handleResult(\"setUserRegion\", SUCCESS, promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/commonservices/HMSLensEngine.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.commonservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_ENGINE_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_ON_CLICK_SHUTTER;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_ON_PHOTO_TAKEN;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\n\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSLensEngine extends HMSBase implements LensEngine.ShutterListener, LensEngine.PhotographListener {\n    private LensEngine lensEngine;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     */\n    public HMSLensEngine(ReactApplicationContext mContext) {\n        super(mContext, HMSLensEngine.class.getSimpleName(), LENS_ENGINE_CONSTANTS);\n    }\n\n    /**\n     * Creates lens engine with an analyzer\n     *\n     * @param analyzerTag analyzer tag\n     * @param analyzerConfig analyzer configuration\n     * @param lensConfig lens engine configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void createLensEngine(int analyzerTag, ReadableMap analyzerConfig, ReadableMap lensConfig,\n        final Promise promise) {\n        startMethodExecTimer(\"createLensEngine\");\n        MLAnalyzer analyzer = HMSObjectCreator.getInstance()\n            .createLensEngineAnalyzer(analyzerTag, analyzerConfig, getContext());\n\n        if (analyzer == null) {\n            handleResult(\"close\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        lensEngine = HMSObjectCreator.getInstance().createLensEngine(getContext(), analyzer, lensConfig);\n        handleResult(\"createLensEngine\", SUCCESS, promise);\n    }\n\n    /**\n     * Closes the camera and stops sending frames to the frame analyzer.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void close(final Promise promise) {\n        startMethodExecTimer(\"close\");\n\n        if (lensEngine == null) {\n            handleResult(\"close\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.close();\n        handleResult(\"close\", SUCCESS, promise);\n    }\n\n    /**\n     * Adjusts the focal length of the camera based on the scaling coefficient (digital zoom).\n     *\n     * @param scale zoom scale\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void doZoom(double scale, final Promise promise) {\n        startMethodExecTimer(\"doZoom\");\n\n        if (lensEngine == null) {\n            handleResult(\"doZoom\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.doZoom((float) scale);\n        handleResult(\"doZoom\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the size of the preview image of a camera.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getDisplayDimension(final Promise promise) {\n        startMethodExecTimer(\"getDisplayDimension\");\n\n        if (lensEngine == null) {\n            handleResult(\"getDisplayDimension\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getDisplayDimension\",\n            HMSResultCreator.getInstance().displayDimensionResult(lensEngine.getDisplayDimension()), promise);\n    }\n\n    /**\n     * Obtains the selected camera type.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLensType(final Promise promise) {\n        startMethodExecTimer(\"getLensType\");\n\n        if (lensEngine == null) {\n            handleResult(\"getLensType\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        handleResult(\"getLensType\", HMSResultCreator.getInstance().integerResult(lensEngine.getLensType()), promise);\n    }\n\n    /**\n     * Monitors photographing.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void photograph(final Promise promise) {\n        startMethodExecTimer(\"photograph\");\n\n        if (lensEngine == null) {\n            handleResult(\"photograph\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.photograph(this, this);\n        handleResult(\"photograph\", SUCCESS, promise);\n    }\n\n    /**\n     * Releases resources occupied by LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void release(final Promise promise) {\n        startMethodExecTimer(\"release\");\n\n        if (lensEngine == null) {\n            handleResult(\"release\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        lensEngine.release();\n        lensEngine = null;\n        handleResult(\"release\", SUCCESS, promise);\n    }\n\n    /**\n     * Starts LensEngine.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void run(final Promise promise) {\n        startMethodExecTimer(\"run\");\n\n        if (lensEngine == null) {\n            handleResult(\"run\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run();\n            handleResult(\"run\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"run\", e, promise);\n        }\n    }\n\n    /**\n     * Starts the LensEngine and uses SurfaceView as the frame preview panel.\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void runWithView(final Promise promise) {\n        startMethodExecTimer(\"runWithView\");\n\n        if (lensEngine == null) {\n            handleResult(\"runWithView\", LENS_ENGINE_NULL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().getSurfaceViewHolder() == null) {\n            handleResult(\"runWithView\", LENS_HOLDER_NULL, promise);\n            return;\n        }\n\n        try {\n            lensEngine.run(HMSUtils.getInstance().getSurfaceViewHolder());\n            handleResult(\"runWithView\", SUCCESS, promise);\n        } catch (IOException e) {\n            handleResult(\"runWithView\", e, promise);\n        }\n    }\n\n    /**\n     * Photograph take event\n     *\n     * @param bytes Picture as bytes\n     */\n    @Override\n    public void takenPhotograph(byte[] bytes) {\n        Bitmap photo = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), photo)\n            .addOnSuccessListener(s -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(e -> sendEvent(LENS_ON_PHOTO_TAKEN, \"takenPhotograph\",\n                FAILURE.getStatusAndMessage(null, e.getMessage())));\n    }\n\n    /**\n     * Shutter click event\n     */\n    @Override\n    public void clickShutter() {\n        sendEvent(LENS_ON_CLICK_SHUTTER, \"clickShutter\", null);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/constants/HMSConstants.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.constants;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.ASR_RECOGNIZER_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CUSTOM_MODEL_EXECUTOR_SETTING_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CUSTOM_MODEL_INPUT_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CUSTOM_MODEL_SETTING_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DATA_SET_NOT_VALID;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FRAME_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.LENS_ENGINE_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.LENS_HOLDER_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.REMOTE_MODEL_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.SOUND_DECT_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.STRING_PARAM_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.TTS_ENGINE_NULL;\n\nimport android.graphics.Color;\nimport android.hardware.Camera;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureConfig;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLException;\nimport com.huawei.hms.mlsdk.document.MLDocument;\nimport com.huawei.hms.mlsdk.text.MLLocalTextSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingException;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingSetting;\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSConstants {\n\n    // Bcr\n    public static final String BCR_IMAGE_SAVE = \"bcrSuccessImage\";\n\n    // Gcr\n    public static final String GCR_IMAGE_SAVE = \"gcrOnResult\";\n\n    // Id card\n    public static final String IDCARD_IMAGE_SAVE = \"idCardOnResult\";\n\n    // VN Id card\n    public static final String ICRVN_IMAGE_SAVE = \"vnCardOnResult\";\n\n    // lens engine\n    public static final String LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\";\n\n    public static final String LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\";\n\n    public static final String LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\";\n\n    public static final String LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\";\n\n    public static final String LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\";\n\n    // text transactor\n    public static final String TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\";\n\n    public static final String TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\";\n\n    // on-device languages\n    private static final Map<String, Object> BASE_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"LATIN\", \"rm\");\n            put(\"ENGLISH\", \"en\");\n            put(\"CHINESE\", \"zh\");\n            put(\"JAPANESE\", \"ja\");\n            put(\"KOREAN\", \"ko\");\n            put(\"RUSSIAN\", \"ru\");\n            put(\"GERMAN\", \"de\");\n            put(\"FRENCH\", \"fr\");\n            put(\"ITALIAN\", \"it\");\n            put(\"PORTUGUESE\", \"pt\");\n            put(\"SPANISH\", \"es\");\n        }\n    };\n\n    // on-cloud languages\n    private static final Map<String, Object> EXTRA_LANGUAGES = new HashMap<String, Object>() {\n        {\n            put(\"POLISH\", \"pl\");\n            put(\"NORWEGIAN\", \"no\");\n            put(\"SWEDISH\", \"sv\");\n            put(\"DANISH\", \"da\");\n            put(\"TURKISH\", \"tr\");\n            put(\"FINNISH\", \"fi\");\n            put(\"THAI\", \"th\");\n            put(\"ARABIC\", \"ar\");\n            put(\"HINDI\", \"hi\");\n        }\n    };\n\n    // border types\n    private static final Map<String, Object> BORDER_TYPE = new HashMap<String, Object>() {\n        {\n            put(\"ARC\", MLRemoteTextSetting.ARC);\n            put(\"NGON\", MLRemoteTextSetting.NGON);\n        }\n    };\n\n    // device orientation constants\n    private static final Map<String, Object> ORIENTATION_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"ORIENTATION_AUTO\", 0);\n            put(\"ORIENTATION_LANDSCAPE\", 1);\n            put(\"ORIENTATION_PORTRAIT\", 2);\n        }\n    };\n\n    // color codes of Android Color class\n    private static final Map<String, Object> COLOR_CONSTANTS = new HashMap<String, Object>() {\n        {\n            put(\"BLACK\", Color.BLACK);\n            put(\"BLUE\", Color.BLUE);\n            put(\"CYAN\", Color.CYAN);\n            put(\"DKGRAY\", Color.DKGRAY);\n            put(\"GRAY\", Color.GRAY);\n            put(\"GREEN\", Color.GREEN);\n            put(\"LTGRAY\", Color.LTGRAY);\n            put(\"MAGENTA\", Color.MAGENTA);\n            put(\"RED\", Color.RED);\n            put(\"TRANSPARENT\", Color.TRANSPARENT);\n            put(\"WHITE\", Color.WHITE);\n            put(\"YELLOW\", Color.YELLOW);\n        }\n    };\n\n    // error codes exposed by HMSApplication\n    public static final Map<String, Object> ERROR_CODES = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"UNKNOWN\", MLException.UNKNOWN);\n            put(\"SUCCESS\", MLException.SUCCESS);\n            put(\"DISCARDED\", MLException.DISCARDED);\n            put(\"INNER\", MLException.INNER);\n            put(\"INACTIVE\", MLException.INACTIVE);\n            put(\"NOT_SUPPORTED\", MLException.NOT_SUPPORTED);\n            put(\"ILLEGAL_PARAMETER\", MLException.ILLEGAL_PARAMETER);\n            put(\"OVERDUE\", MLException.OVERDUE);\n            put(\"NO_FOUND\", MLException.NO_FOUND);\n            put(\"DUPLICATE_FOUND\", MLException.DUPLICATE_FOUND);\n            put(\"NO_PERMISSION\", MLException.NO_PERMISSION);\n            put(\"INSUFFICIENT_RESOURCE\", MLException.INSUFFICIENT_RESOURCE);\n            put(\"ANALYSIS_FAILURE\", MLException.ANALYSIS_FAILURE);\n            put(\"INTERRUPTED\", MLException.INTERRUPTED);\n            put(\"EXCEED_RANGE\", MLException.EXCEED_RANGE);\n            put(\"DATA_MISSING\", MLException.DATA_MISSING);\n            put(\"AUTHENTICATION_REQUIRED\", MLException.AUTHENTICATION_REQUIRED);\n            put(\"TFLITE_NOT_COMPATIBLE\", MLException.TFLITE_NOT_COMPATIBLE);\n            put(\"INSUFFICIENT_SPACE\", MLException.INSUFFICIENT_SPACE);\n            put(\"HASH_MISS\", MLException.HASH_MISS);\n            put(\"TOKEN_INVALID\", MLException.TOKEN_INVALID);\n            put(\"FRAME_NULL\", FRAME_NULL.getErrCode());\n            put(\"ANALYZER_NOT_AVAILABLE\", ANALYZER_NOT_AVAILABLE.getErrCode());\n            put(\"CURRENT_ACTIVITY_NULL\", CURRENT_ACTIVITY_NULL.getErrCode());\n            put(\"CANCEL\", CANCEL.getErrCode());\n            put(\"FAILURE\", FAILURE.getErrCode());\n            put(\"DENY\", DENY.getErrCode());\n            put(\"STRING_PARAM_NULL\", STRING_PARAM_NULL.getErrCode());\n            put(\"REMOTE_MODEL_NULL\", REMOTE_MODEL_NULL.getErrCode());\n            put(\"ASR_RECOGNIZER_NULL\", ASR_RECOGNIZER_NULL.getErrCode());\n            put(\"TTS_ENGINE_NULL\", TTS_ENGINE_NULL.getErrCode());\n            put(\"SOUND_DECT_NULL\", SOUND_DECT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_SETTING_NULL\", CUSTOM_MODEL_SETTING_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_INPUT_NULL\", CUSTOM_MODEL_INPUT_NULL.getErrCode());\n            put(\"CUSTOM_MODEL_EXECUTOR_SETTING_NULL\", CUSTOM_MODEL_EXECUTOR_SETTING_NULL.getErrCode());\n            put(\"DATA_SET_NOT_VALID\", DATA_SET_NOT_VALID.getErrCode());\n            put(\"LENS_ENGINE_NULL\", LENS_ENGINE_NULL.getErrCode());\n            put(\"LENS_HOLDER_NULL\", LENS_HOLDER_NULL.getErrCode());\n        }\n    });\n\n    // text analyzer setting constants HMSTextRecognition\n    public static final Map<String, Object> TEXT_SETTING_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(BASE_LANGUAGES);\n            putAll(EXTRA_LANGUAGES);\n            putAll(BORDER_TYPE);\n            put(\"OCR_DETECT_MODE\", MLLocalTextSetting.OCR_DETECT_MODE);\n            put(\"OCR_TRACKING_MODE\", MLLocalTextSetting.OCR_TRACKING_MODE);\n            put(\"OCR_COMPACT_SCENE\", MLRemoteTextSetting.OCR_COMPACT_SCENE);\n            put(\"OCR_LOOSE_SCENE\", MLRemoteTextSetting.OCR_LOOSE_SCENE);\n        }\n    });\n\n    // document analyzer constants HMSDocumentRecognition\n    public static final Map<String, Object> DOCUMENT_RECOGNITION_CONSTANTS = ImmutableMap.copyOf(\n        new HashMap<String, Object>() {\n            {\n                putAll(BASE_LANGUAGES);\n                putAll(EXTRA_LANGUAGES);\n                putAll(BORDER_TYPE);\n                put(\"OTHER\", MLDocument.Interval.OTHER);\n                put(\"NEW_LINE_CHARACTER\", MLDocument.Interval.NEW_LINE_CHARACTER);\n                put(\"SPACE\", MLDocument.Interval.SPACE);\n            }\n        });\n\n    // bank card recognition constants HMSBankCardRecognition\n    public static final Map<String, Object> BCR_PLUGIN_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(ORIENTATION_CONSTANTS);\n            put(\"ERROR_CODE_INIT_CAMERA_FAILED\", MLBcrCaptureConfig.ERROR_CODE_INIT_CAMERA_FAILED);\n            put(\"RESULT_ALL\", MLBcrCaptureConfig.RESULT_ALL);\n            put(\"RESULT_NUM_ONLY\", MLBcrCaptureConfig.RESULT_NUM_ONLY);\n            put(\"RESULT_SIMPLE\", MLBcrCaptureConfig.RESULT_SIMPLE);\n            put(\"STRICT_MODE\", MLBcrCaptureConfig.STRICT_MODE);\n            put(\"SIMPLE_MODE\", MLBcrCaptureConfig.SIMPLE_MODE);\n            put(\"BCR_IMAGE_SAVE\", BCR_IMAGE_SAVE);\n        }\n    });\n\n    // general card recognition constants HMSGeneralCardRecognition\n    public static final Map<String, Object> GCR_PLUGIN_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            putAll(ORIENTATION_CONSTANTS);\n            putAll(COLOR_CONSTANTS);\n            put(\"GCR_IMAGE_SAVE\", GCR_IMAGE_SAVE);\n        }\n    });\n\n    // vn card recognition constants HMSVietnamCardRecognition\n    public static final Map<String, Object> ICRVN_PLUGIN_CONSTANTS = ImmutableMap.copyOf(\n            new HashMap<String, Object>() {\n                {\n                    put(\"ICRVN_IMAGE_SAVE\", ICRVN_IMAGE_SAVE);\n                }\n            });\n\n    // id card recognition constants HMSIDCardRecognition\n    public static final Map<String, Object> IDCARD_PLUGIN_CONSTANTS = ImmutableMap.copyOf(\n            new HashMap<String, Object>() {\n                {\n                    put(\"IDCARD_IMAGE_SAVE\", IDCARD_IMAGE_SAVE);\n                }\n            });\n\n\n\n    // text embedding constants HMSTextEmbedding\n    public static final Map<String, Object> TEXT_EMBED_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"LANGUAGE_EN\", MLTextEmbeddingSetting.LANGUAGE_EN);\n            put(\"LANGUAGE_ZH\", MLTextEmbeddingSetting.LANGUAGE_ZH);\n            put(\"INNER\", MLTextEmbeddingException.ERR_INNER);\n            put(\"ERR_AUTH_FAILED\", MLTextEmbeddingException.ERR_AUTH_FAILED);\n            put(\"ERR_PARAM_ILLEGAL\", MLTextEmbeddingException.ERR_PARAM_ILLEGAL);\n            put(\"ERR_ANALYZE_FAILED\", MLTextEmbeddingException.ERR_ANALYZE_FAILED);\n            put(\"ERR_AUTH_TOKEN_INVALID\", MLTextEmbeddingException.ERR_AUTH_TOKEN_INVALIDE);\n            put(\"ERR_NET_UNAVAILABLE\", MLTextEmbeddingException.ERR_NET_UNAVAILABLE);\n            put(\"ERR_SERVICE_IS_UNAVAILABLE\", MLTextEmbeddingException.ERR_SERVICE_IS_UNAVAILABLE);\n        }\n    });\n\n    // lens engine constants\n    public static final Map<String, Object> LENS_ENGINE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"FLASH_MODE_OFF\", Camera.Parameters.FLASH_MODE_OFF);\n            put(\"FLASH_MODE_ON\", Camera.Parameters.FLASH_MODE_ON);\n            put(\"FLASH_MODE_AUTO\", Camera.Parameters.FLASH_MODE_AUTO);\n            put(\"FOCUS_MODE_CONTINUOUS_PICTURE\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);\n            put(\"FOCUS_MODE_CONTINUOUS_VIDEO\", Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);\n            put(\"BACK_LENS\", LensEngine.BACK_LENS);\n            put(\"FRONT_LENS\", LensEngine.FRONT_LENS);\n            put(\"LENS_ON_PHOTO_TAKEN\", LENS_ON_PHOTO_TAKEN);\n            put(\"LENS_ON_CLICK_SHUTTER\", LENS_ON_CLICK_SHUTTER);\n            put(\"LENS_SURFACE_ON_CREATED\", LENS_SURFACE_ON_CREATED);\n            put(\"LENS_SURFACE_ON_CHANGED\", LENS_SURFACE_ON_CHANGED);\n            put(\"LENS_SURFACE_ON_DESTROY\", LENS_SURFACE_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_DESTROY\", TEXT_TRANSACTOR_ON_DESTROY);\n            put(\"TEXT_TRANSACTOR_ON_RESULT\", TEXT_TRANSACTOR_ON_RESULT);\n            put(\"LENS_TEXT_ANALYZER\", 0);\n            put(\"LENS_FACE_2D_ANALYZER\", 1);\n            put(\"LENS_FACE_3D_ANALYZER\", 2);\n            put(\"LENS_SKELETON_ANALYZER\", 3);\n            put(\"LENS_CLASSIFICATION_ANALYZER\", 4);\n            put(\"LENS_OBJECT_ANALYZER\", 5);\n            put(\"LENS_SCENE_ANALYZER\", 6);\n            put(\"LENS_HAND_ANALYZER\", 7);\n            put(\"LENS_GESTURE_ANALYZER\", 8);\n        }\n    });\n}"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/constants/HMSResults.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.constants;\n\nimport com.huawei.hms.mlsdk.common.MLException;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\npublic enum HMSResults {\n    UNKNOWN(MLException.UNKNOWN, \"\"),\n    SUCCESS(MLException.SUCCESS, \"Success\"),\n    FRAME_NULL(20, \"No frame object created with given parameters\"),\n    ANALYZER_NOT_AVAILABLE(21, \"Analyzer is not available\"),\n    CURRENT_ACTIVITY_NULL(22, \"Current activity is null\"),\n    CANCEL(23, \"Recognition cancelled by user\"),\n    FAILURE(24, \"Recognition failed\"),\n    DENY(25, \"Camera does not support BCR\"),\n    STRING_PARAM_NULL(26, \"Given string parameter is null or empty\"),\n    REMOTE_MODEL_NULL(27, \"No remote model object created with given parameters\"),\n    ASR_RECOGNIZER_NULL(28, \"Asr recognizer is null or not created\"),\n    TTS_ENGINE_NULL(30, \"Tts engine is not created\"),\n    SOUND_DECT_NULL(31, \"Sound detector is not initialized\"),\n    CUSTOM_MODEL_SETTING_NULL(32, \"Input output setting is not initialized with given parameters\"),\n    CUSTOM_MODEL_INPUT_NULL(33, \"Model inputs is not initialized with given parameters\"),\n    CUSTOM_MODEL_EXECUTOR_SETTING_NULL(34, \"Model executor setting is not initialized with given parameters\"),\n    DATA_SET_NOT_VALID(35, \"Data set is not valid.\"),\n    LENS_ENGINE_NULL(36, \"LensEngine is not created\"),\n    LENS_HOLDER_NULL(37, \"LensEngine holder is null\"),\n    CUSTOM_VIEW_ERROR(100, \"Remote View is not initialized.\");\n    private int errCode;\n\n    private String message;\n\n    HMSResults(int errCode, String message) {\n        this.errCode = errCode;\n        this.message = message;\n    }\n\n    public int getErrCode() {\n        return errCode;\n    }\n\n    public String getStringErrCode() {\n        return Integer.toString(errCode);\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    /**\n     * Combines status and message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.errCode);\n        wm.putString(\"message\", this.message);\n        return wm;\n    }\n\n    /**\n     * Combines status and message with optional parameters\n     *\n     * @param errorCode Error code\n     * @param errorMessage Error message\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer errorCode, String errorMessage) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", errorCode == null ? this.errCode : errorCode);\n        wm.putString(\"message\", errorMessage == null ? this.message : errorMessage);\n        return wm;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/creators/HMSObjectCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.creators;\n\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Color;\nimport android.graphics.Rect;\nimport android.hardware.Camera;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCapture;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCapture;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureUIConfig;\nimport com.huawei.hms.mlsdk.MLAnalyzerFactory;\nimport com.huawei.hms.mlsdk.card.MLCardAnalyzerFactory;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzerSetting;\nimport com.huawei.hms.mlsdk.common.LensEngine;\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.document.MLDocumentAnalyzer;\nimport com.huawei.hms.mlsdk.document.MLDocumentSetting;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzer;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzerFactory;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzerSetting;\nimport com.huawei.hms.mlsdk.text.MLLocalTextSetting;\nimport com.huawei.hms.mlsdk.text.MLRemoteTextSetting;\nimport com.huawei.hms.mlsdk.text.MLTextAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzerFactory;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingSetting;\nimport com.huawei.hms.rn.mltext.helpers.transactors.HMSTextAnalyzerTransactor;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic final class HMSObjectCreator {\n    private static final String TAG = HMSObjectCreator.class.getSimpleName();\n\n    private static volatile HMSObjectCreator instance;\n\n    public static HMSObjectCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSObjectCreator.class) {\n                if (instance == null) {\n                    instance = new HMSObjectCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Creates MLTextEmbeddingSetting object\n     *\n     * @param language language code default \"zh\"\n     * @return MLTextEmbeddingSetting object\n     */\n    private MLTextEmbeddingSetting createTextEmbeddingSetting(String language) {\n        return new MLTextEmbeddingSetting.Factory().setLanguage(language).create();\n    }\n\n    /**\n     * Creates Text Embedding Analyzer\n     *\n     * @param language language code default \"zh\"\n     * @return MLTextEmbeddingAnalyzer\n     */\n    public MLTextEmbeddingAnalyzer createTextEmbeddingAnalyzer(String language) {\n        return MLTextEmbeddingAnalyzerFactory.getInstance()\n            .getMLTextEmbeddingAnalyzer(createTextEmbeddingSetting(language));\n    }\n\n    /**\n     * Creates MLLocalTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLLocalTextSetting object\n     */\n    private MLLocalTextSetting createLocalTextSetting(ReadableMap readableMap) {\n        if (readableMap == null) {\n            Log.i(TAG, \"LocalTextSetting object is created using default options.\");\n            return new MLLocalTextSetting.Factory().create();\n        }\n\n        Log.i(TAG, \"LocalTextSetting object is created.\");\n        return new MLLocalTextSetting.Factory().setLanguage(setLanguage(readableMap))\n            .setOCRMode(setOCRMode(readableMap))\n            .create();\n    }\n\n    /**\n     * Creates MLRemoteTextSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLRemoteTextSetting object\n     */\n    private MLRemoteTextSetting createRemoteTextSetting(ReadableMap readableMap) {\n        int textDensityScene = MLRemoteTextSetting.OCR_LOOSE_SCENE;\n        String borderType = MLRemoteTextSetting.NGON;\n        List<String> languageList = new ArrayList<>();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"RemoteTextSetting object is created using default options.\");\n            return new MLRemoteTextSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"borderType\", ReadableType.String)) {\n            borderType = readableMap.getString(\"borderType\");\n            Log.i(TAG, \"RemoteTextSetting borderType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"textDensityScene\", ReadableType.Number)) {\n            textDensityScene = readableMap.getInt(\"textDensityScene\");\n            Log.i(TAG, \"RemoteTextSetting textDensityScene option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageList\", ReadableType.Array)) {\n            languageList = HMSUtils.getInstance().readableArrayIntoStringList(readableMap.getArray(\"languageList\"));\n            Log.i(TAG, \"RemoteTextSetting languageList option set.\");\n        }\n\n        return new MLRemoteTextSetting.Factory().setTextDensityScene(textDensityScene)\n            .setBorderType(borderType)\n            .setLanguageList(languageList)\n            .create();\n    }\n\n    /**\n     * Creates MLTextAnalyzer using creator\n     *\n     * @param readableMap configuration keys and values\n     * @param context ReactApplicationContext\n     * @return MLTextAnalyzer object\n     */\n    public MLTextAnalyzer createTextAnalyzer(ReadableMap readableMap, ReactApplicationContext context) {\n        if (readableMap == null) {\n            Log.i(TAG, \"MLTextAnalyzer object is created using default options.\");\n            return new MLTextAnalyzer.Factory(context).create();\n        }\n\n        Log.i(TAG, \"MLTextAnalyzer object is created.\");\n        return new MLTextAnalyzer.Factory(context).setLanguage(setLanguage(readableMap))\n            .setLocalOCRMode(setOCRMode(readableMap))\n            .create();\n    }\n    /**\n     * Helper method that sets language\n     *\n     * @param readableMap configuration\n     * @return language\n     */\n    private String setLanguage(ReadableMap readableMap) {\n        String language = \"rm\";\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"language\", ReadableType.String)) {\n            language = readableMap.getString(\"language\");\n            Log.i(TAG, \"Language option set.\");\n        }\n\n        return language;\n    }\n\n    /**\n     * Helper method that sets OCRMode\n     *\n     * @param readableMap configuration\n     * @return OCRMode\n     */\n    private int setOCRMode(ReadableMap readableMap) {\n        int ocrDetectMode = MLLocalTextSetting.OCR_DETECT_MODE;\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"OCRMode\", ReadableType.Number)) {\n            ocrDetectMode = readableMap.getInt(\"OCRMode\");\n            Log.i(TAG, \"OCRMode option set.\");\n        }\n\n        return ocrDetectMode;\n    }\n\n    /**\n     * Creates MLTextAnalyzer using factory\n     *\n     * @param readableMap configuration keys and values\n     * @param isRemote remote or local text analyzer\n     * @return MLTextAnalyzer object\n     */\n    public MLTextAnalyzer createTextAnalyzer(ReadableMap readableMap, boolean isRemote) {\n        if (isRemote) {\n            Log.i(TAG, \"MLRemoteTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(createRemoteTextSetting(readableMap));\n        } else {\n            Log.i(TAG, \"MLLocalTextAnalyzer object is created.\");\n            return MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(createLocalTextSetting(readableMap));\n        }\n    }\n\n    /**\n     * Creates document analyzer\n     *\n     * @param readableMap document analyzer setting\n     * @return MLDocumentAnalyzer\n     */\n    public MLDocumentAnalyzer createDocumentAnalyzer(ReadableMap readableMap) {\n        return MLAnalyzerFactory.getInstance().getRemoteDocumentAnalyzer(createDocumentSetting(readableMap));\n    }\n\n    /**\n     * Creates MLDocumentSetting using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLDocumentSetting object\n     */\n    private MLDocumentSetting createDocumentSetting(ReadableMap readableMap) {\n        String borderType = MLRemoteTextSetting.NGON;\n        List<String> languageList = new ArrayList<>();\n        boolean isFingerPrintEnabled = false;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLDocumentSetting object is created using default options.\");\n            return new MLDocumentSetting.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"borderType\", ReadableType.String)) {\n            borderType = readableMap.getString(\"borderType\");\n            Log.i(TAG, \"MLDocumentSetting borderType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"languageList\", ReadableType.Array)) {\n            languageList = HMSUtils.getInstance().readableArrayIntoStringList(readableMap.getArray(\"languageList\"));\n            Log.i(TAG, \"MLDocumentSetting languageList option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"isFingerPrintEnabled\", ReadableType.Boolean)) {\n            isFingerPrintEnabled = readableMap.getBoolean(\"isFingerPrintEnabled\");\n            Log.i(TAG, \"MLDocumentSetting isFingerPrintEnabled option set.\");\n        }\n\n        if (!isFingerPrintEnabled) {\n            return new MLDocumentSetting.Factory().setBorderType(borderType).setLanguageList(languageList).create();\n        }\n\n        return new MLDocumentSetting.Factory().setBorderType(borderType)\n            .setLanguageList(languageList)\n            .enableFingerprintVerification()\n            .create();\n    }\n\n    /**\n     * Creates MLBcrCapture object\n     *\n     * @param readableMap configuration\n     * @return MLBcrCapture object\n     */\n    public MLBcrCapture createBcrCapture(ReadableMap readableMap) {\n        return MLBcrCaptureFactory.getInstance().getBcrCapture(createBcrCaptureConfig(readableMap));\n    }\n\n    /**\n     * creates MLBcrCaptureConfig object\n     *\n     * @param readableMap configuration\n     * @return MLBcrCaptureConfig object\n     */\n    private MLBcrCaptureConfig createBcrCaptureConfig(ReadableMap readableMap) {\n        int orientation = MLBcrCaptureConfig.ORIENTATION_AUTO;\n        int resultType = MLBcrCaptureConfig.RESULT_SIMPLE;\n        int recMode = MLBcrCaptureConfig.STRICT_MODE;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLBcrCaptureConfig object is created using default options.\");\n            return new MLBcrCaptureConfig.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"orientation\", ReadableType.Number)) {\n            orientation = readableMap.getInt(\"orientation\");\n            Log.i(TAG, \"MLBcrCaptureConfig orientation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"resultType\", ReadableType.Number)) {\n            resultType = readableMap.getInt(\"resultType\");\n            Log.i(TAG, \"MLBcrCaptureConfig resultType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"recMode\", ReadableType.Number)) {\n            recMode = readableMap.getInt(\"recMode\");\n            Log.i(TAG, \"MLBcrCaptureConfig recMode option set.\");\n        }\n\n        return new MLBcrCaptureConfig.Factory().setOrientation(orientation)\n            .setRecMode(recMode)\n            .setResultType(resultType)\n            .create();\n    }\n\n    /**\n     * Creates MLGcrCapture object\n     *\n     * @param language language\n     * @param uiConfiguration ui config\n     * @return MLGcrCapture object\n     */\n    public MLGcrCapture createGcrCapture(String language, ReadableMap uiConfiguration) {\n        return MLGcrCaptureFactory.getInstance()\n            .getGcrCapture(createGcrCaptureConfig(language), createGcrCaptureUiConfig(uiConfiguration));\n    }\n\n    /**\n     * creates MLGcrCaptureConfig object\n     *\n     * @param language language configuration\n     * @return MLGcrCaptureConfig object\n     */\n    private MLGcrCaptureConfig createGcrCaptureConfig(String language) {\n        if (TextUtils.isEmpty(language)) {\n            Log.i(TAG, \"MLGcrCaptureConfig object is created using default options.\");\n            return new MLGcrCaptureConfig.Factory().create();\n        }\n\n        return new MLGcrCaptureConfig.Factory().setLanguage(language).create();\n    }\n\n    /**\n     * creates MLGcrCaptureUIConfig object\n     *\n     * @param readableMap configuration\n     * @return MLGcrCaptureUIConfig object\n     */\n    private MLGcrCaptureUIConfig createGcrCaptureUiConfig(ReadableMap readableMap) {\n        int orientation = MLGcrCaptureUIConfig.ORIENTATION_AUTO;\n        int tipTextColor = Color.GREEN;\n        int scanBoxCornerColor = Color.RED;\n        String tipText = \"Recognizing, align edges\";\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLGcrCaptureUIConfig object is created using default options.\");\n            return new MLGcrCaptureUIConfig.Factory().create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"orientation\", ReadableType.Number)) {\n            orientation = readableMap.getInt(\"orientation\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig orientation option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tipTextColor\", ReadableType.Number)) {\n            tipTextColor = readableMap.getInt(\"tipTextColor\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig tipTextColor option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"scanBoxCornerColor\", ReadableType.Number)) {\n            scanBoxCornerColor = readableMap.getInt(\"scanBoxCornerColor\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig scanBoxCornerColor option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"tipText\", ReadableType.String)) {\n            tipText = readableMap.getString(\"tipText\");\n            Log.i(TAG, \"MLGcrCaptureUIConfig tipText option set.\");\n        }\n\n        return new MLGcrCaptureUIConfig.Factory().setOrientation(orientation)\n            .setScanBoxCornerColor(scanBoxCornerColor)\n            .setTipText(tipText)\n            .setTipTextColor(tipTextColor)\n            .create();\n    }\n\n    /**\n     * creates MLFormRecognitionAnalyzer object\n     *\n     * @return MLFormRecognitionAnalyzer object\n     */\n    public MLFormRecognitionAnalyzer createFormRecognizerAnalyzer() {\n        return MLFormRecognitionAnalyzerFactory.getInstance()\n            .getFormRecognitionAnalyzer(createFormRecognitionAnalyzerSetting());\n    }\n\n    /**\n     * Creates MLFormRecognitionAnalyzerSetting object\n     *\n     * @return MLFormRecognitionAnalyzerSetting object\n     */\n    private MLFormRecognitionAnalyzerSetting createFormRecognitionAnalyzerSetting() {\n        return new MLFormRecognitionAnalyzerSetting.Factory().create();\n    }\n\n    /**\n     * Create MLIcrAnalyzer\n     *\n     * @param countryCode Country code \n     * @param isFront Side of card \n     * @return MLIcrAnalyzer\n     */\n    public MLIcrAnalyzer createICRAnalyzer(String countryCode, boolean isFront) {\n        MLIcrAnalyzerSetting setting = new MLIcrAnalyzerSetting.Factory()\n                .setSideType(isFront ? MLIcrAnalyzerSetting.FRONT : MLIcrAnalyzerSetting.BACK)\n                .setCountryCode(countryCode)\n                .create();\n        return MLCardAnalyzerFactory.getInstance().getIcrAnalyzer(setting);\n    }\n\n    /**\n     * Creates MLFrame object to use analyze\n     *\n     * @param frameConfiguration keys and values to create MLFrame from existing methods\n     * @param context ReactApplicationContext\n     * @return MLFrame object or null\n     */\n    public MLFrame createFrame(ReadableMap frameConfiguration, ReactApplicationContext context) {\n        if (frameConfiguration == null) {\n            Log.i(TAG, \"MLFrame frameConfiguration is null\");\n            return null;\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(frameConfiguration.getString(\"bitmap\"), Base64.DEFAULT);\n            return MLFrame.fromBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"bytes\", ReadableType.Map)) {\n            ReadableMap bytes = frameConfiguration.getMap(\"bytes\");\n            if (HMSUtils.getInstance().hasValidKey(bytes, \"frameProperty\", ReadableType.Map) && HMSUtils.getInstance()\n                .hasValidKey(bytes, \"values\", ReadableType.Array)) {\n                MLFrame.Property property = createFrameProperty(bytes.getMap(\"frameProperty\"));\n                ReadableArray values = bytes.getArray(\"values\");\n                return MLFrame.fromByteArray(HMSUtils.getInstance().convertRaToByteArray(values), property);\n            } else {\n                Log.i(TAG, \"MLFrame bytes object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"byteBuffer\", ReadableType.Map)) {\n            ReadableMap byteBuffer = frameConfiguration.getMap(\"byteBuffer\");\n            if (HMSUtils.getInstance().hasValidKey(byteBuffer, \"buffer\", ReadableType.String) && HMSUtils.getInstance()\n                .hasValidKey(byteBuffer, \"frameProperty\", ReadableType.Map)) {\n                MLFrame.Property frameProperty = createFrameProperty(byteBuffer.getMap(\"frameProperty\"));\n                String buffer = byteBuffer.getString(\"buffer\");\n                return MLFrame.fromByteBuffer(\n                    HMSUtils.getInstance().convertByteArrToByteBuffer(Base64.decode(buffer, Base64.DEFAULT)),\n                    frameProperty);\n            } else {\n                Log.i(TAG, \"MLFrame byteBuffer object does not contain required keys\");\n                return null;\n            }\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"filePath\", ReadableType.String)) {\n            try {\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(),\n                    Uri.parse(frameConfiguration.getString(\"filePath\")));\n                return new MLFrame.Creator().setBitmap(bitmap).create();\n            } catch (Exception e) {\n                Log.i(TAG, \"MLFrame exception happened fromFilePath \" + e.getMessage());\n                return null;\n            }\n\n        } else if (HMSUtils.getInstance().hasValidKey(frameConfiguration, \"creator\", ReadableType.Map)) {\n            ReadableMap creator = frameConfiguration.getMap(\"creator\");\n            return createFrameUsingCreator(creator);\n        } else {\n            Log.i(TAG, \"MLFrame frameConfiguration does not contain keys for creating a frame\");\n            return null;\n        }\n    }\n\n    /**\n     * Creates MLFrame.Property object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property object\n     */\n    private MLFrame.Property createFrameProperty(ReadableMap readableMap) {\n        MLFrame.Property.Creator creator = new MLFrame.Property.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame.Property object is created using default options.\");\n            return creator.create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"width\", ReadableType.Number)) {\n            creator.setWidth(readableMap.getInt(\"width\"));\n            Log.i(TAG, \"MLFrame.Property width option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"height\", ReadableType.Number)) {\n            creator.setHeight(readableMap.getInt(\"height\"));\n            Log.i(TAG, \"MLFrame.Property height option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame.Property quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"formatType\", ReadableType.Number)) {\n            creator.setFormatType(readableMap.getInt(\"formatType\"));\n            Log.i(TAG, \"MLFrame.Property formatType option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame.Property itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.Number)) {\n            creator.setTimestamp(readableMap.getInt(\"timeStamp\"));\n            Log.i(TAG, \"MLFrame.Property timeStamp option set.\");\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates MLFrame.Property.Ext object\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame.Property.Ext object\n     */\n    private MLFrame.Property.Ext createFramePropertyExt(ReadableMap readableMap) {\n        int lensId = 0;\n        int maxZoom = 0;\n        int zoom = 0;\n        int bottom = 0;\n        int left = 0;\n        int right = 0;\n        int top = 0;\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrameProperty.Ext object is created using default options.\");\n            return new MLFrame.Property.Ext.Creator().build();\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"lensId\", ReadableType.Number)) {\n            lensId = readableMap.getInt(\"lensId\");\n            Log.i(TAG, \"MLFrameProperty.Ext lensId option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"maxZoom\", ReadableType.Number)) {\n            maxZoom = readableMap.getInt(\"maxZoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext maxZoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"zoom\", ReadableType.Number)) {\n            zoom = readableMap.getInt(\"zoom\");\n            Log.i(TAG, \"MLFrameProperty.Ext zoom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"bottom\", ReadableType.Number)) {\n            bottom = readableMap.getInt(\"bottom\");\n            Log.i(TAG, \"MLFrameProperty.Ext bottom option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"left\", ReadableType.Number)) {\n            left = readableMap.getInt(\"left\");\n            Log.i(TAG, \"MLFrameProperty.Ext left option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"right\", ReadableType.Number)) {\n            right = readableMap.getInt(\"right\");\n            Log.i(TAG, \"MLFrameProperty.Ext right option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"top\", ReadableType.Number)) {\n            top = readableMap.getInt(\"top\");\n            Log.i(TAG, \"MLFrameProperty.Ext top option set.\");\n        }\n        return new MLFrame.Property.Ext.Creator().setLensId(lensId)\n            .setMaxZoom(maxZoom)\n            .setRect(new Rect(left, top, right, bottom))\n            .setZoom(zoom)\n            .build();\n    }\n\n    /**\n     * Creates MLFrame using creator\n     *\n     * @param readableMap configuration keys and values\n     * @return MLFrame object\n     */\n    private MLFrame createFrameUsingCreator(ReadableMap readableMap) {\n        MLFrame.Creator creator = new MLFrame.Creator();\n\n        if (readableMap == null) {\n            Log.i(TAG, \"MLFrame given ReadableMap object is null\");\n            return null;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"base64Bitmap\", ReadableType.String)) {\n            byte[] refactored = Base64.decode(readableMap.getString(\"base64Bitmap\"), Base64.DEFAULT);\n            creator.setBitmap(BitmapFactory.decodeByteArray(refactored, 0, refactored.length));\n            Log.i(TAG, \"MLFrame base64Bitmap option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"itemIdentity\", ReadableType.Number)) {\n            creator.setItemIdentity(readableMap.getInt(\"itemIdentity\"));\n            Log.i(TAG, \"MLFrame itemIdentity option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"quadrant\", ReadableType.Number)) {\n            creator.setQuadrant(readableMap.getInt(\"quadrant\"));\n            Log.i(TAG, \"MLFrame quadrant option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"timeStamp\", ReadableType.String)) {\n            creator.setTimestamp(Long.parseLong(readableMap.getString(\"timeStamp\")));\n            Log.i(TAG, \"MLFrame timeStamp option set.\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"framePropertyExt\", ReadableType.Map)) {\n            creator.setFramePropertyExt(createFramePropertyExt(readableMap.getMap(\"framePropertyExt\")));\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"writeByteBufferData\", ReadableType.Map)) {\n            ReadableMap writeByteBufferData = readableMap.getMap(\"writeByteBufferData\");\n            if (HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"data\", ReadableType.String)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"height\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"width\", ReadableType.Number)\n                && HMSUtils.getInstance().hasValidKey(writeByteBufferData, \"formatType\", ReadableType.Number)) {\n\n                ByteBuffer bufferData = HMSUtils.getInstance()\n                    .convertByteArrToByteBuffer(Base64.decode(writeByteBufferData.getString(\"data\"), Base64.DEFAULT));\n                int height = writeByteBufferData.getInt(\"height\");\n                int width = writeByteBufferData.getInt(\"width\");\n                int formatType = writeByteBufferData.getInt(\"formatType\");\n                creator.writeByteBufferData(bufferData, width, height, formatType);\n                Log.i(TAG, \"MLFrame writeByteBufferData option set.\");\n            } else {\n                Log.i(TAG, \"MLFrame writeByteBufferData option keys are not valid.\");\n            }\n\n        }\n\n        return creator.create();\n    }\n\n    /**\n     * Creates LensEngine\n     *\n     * @param context context object\n     * @param analyzer analyzer\n     * @param configuration configurations for LensEngine\n     * @return LensEngine object\n     */\n    public LensEngine createLensEngine(ReactApplicationContext context, MLAnalyzer analyzer,\n        ReadableMap configuration) {\n        int width = 1440;\n        int height = 1080;\n        float fps = 30.0f;\n        boolean automaticFocus = false;\n        String flashMode = Camera.Parameters.FLASH_MODE_OFF;\n        String focusMode = Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO;\n        int lensType = LensEngine.BACK_LENS;\n\n        if (configuration == null) {\n            Log.i(TAG, \"LensEngine created with default options\");\n            return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n                .setFocusMode(focusMode)\n                .setFlashMode(flashMode)\n                .enableAutomaticFocus(false)\n                .applyFps(fps)\n                .applyDisplayDimension(width, height)\n                .create();\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"width\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine width set\");\n            width = configuration.getInt(\"width\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"height\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine height set\");\n            height = configuration.getInt(\"height\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"lensType\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine lensType set\");\n            lensType = configuration.getInt(\"lensType\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"fps\", ReadableType.Number)) {\n            Log.i(TAG, \"LensEngine fps set\");\n            fps = (float) configuration.getDouble(\"fps\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"automaticFocus\", ReadableType.Boolean)) {\n            Log.i(TAG, \"LensEngine automaticFocus set\");\n            automaticFocus = configuration.getBoolean(\"automaticFocus\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"flashMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine flashMode set\");\n            flashMode = configuration.getString(\"flashMode\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(configuration, \"focusMode\", ReadableType.String)) {\n            Log.i(TAG, \"LensEngine focusMode set\");\n            focusMode = configuration.getString(\"focusMode\");\n        }\n\n        return new LensEngine.Creator(context, analyzer).setLensType(lensType)\n            .setFocusMode(focusMode)\n            .setFlashMode(flashMode)\n            .enableAutomaticFocus(automaticFocus)\n            .applyFps(fps)\n            .applyDisplayDimension(width, height)\n            .create();\n    }\n\n    /**\n     * Creates analyzer for lens engine\n     *\n     * @param analyzer analyzer tag number\n     * @param analyzerConfig analyzer configuration for related tag\n     * @param context app context\n     * @return MLAnalyzer\n     */\n    public MLAnalyzer createLensEngineAnalyzer(int analyzer, ReadableMap analyzerConfig,\n        ReactApplicationContext context) {\n        switch (analyzer) {\n            case 0:\n                MLTextAnalyzer localTextAnalyzer = createTextAnalyzer(analyzerConfig, context);\n                localTextAnalyzer.setTransactor(new HMSTextAnalyzerTransactor(context));\n                return localTextAnalyzer;\n            default:\n                return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/creators/HMSResultCreator.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.creators;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.SUCCESS;\n\nimport android.graphics.Point;\nimport android.graphics.Rect;\nimport android.text.TextUtils;\nimport android.util.SparseArray;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.huawei.hms.common.size.Size;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureResult;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.document.MLDocument;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.mlsdk.text.TextLanguage;\nimport com.huawei.hms.mlsdk.textembedding.MLVocabularyVersion;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.google.gson.JsonObject;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\n\npublic class HMSResultCreator {\n    private static volatile HMSResultCreator instance;\n\n    private static Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().create();\n\n    public static HMSResultCreator getInstance() {\n        if (instance == null) {\n            synchronized (HMSResultCreator.class) {\n                if (instance == null) {\n                    instance = new HMSResultCreator();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * returns vector methods result\n     *\n     * @param floats method result\n     * @return WritableMap\n     */\n    public WritableMap getTextEmbedVectorResult(Float[] floats) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertFloatArrToWa(floats));\n        return wm;\n    }\n\n    /**\n     * returns analyseSimilarWords method result\n     *\n     * @param strings method result\n     * @return WritableMap\n     */\n    public WritableMap analyseSimilarWordsResult(List<String> strings) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putArray(\"result\", HMSUtils.getInstance().convertStringListIntoWa(strings));\n        return wm;\n    }\n\n    /**\n     * returns vocabularyVersion method result\n     *\n     * @param mlVocabularyVersion method result\n     * @return WritableMap\n     */\n    public WritableMap vocabularyVersionResult(MLVocabularyVersion mlVocabularyVersion) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap temp = Arguments.createMap();\n        temp.putString(\"dictionaryDimension\", mlVocabularyVersion.getDictionaryDimension());\n        temp.putString(\"dictionarySize\", mlVocabularyVersion.getDictionarySize());\n        temp.putString(\"versionNo\", mlVocabularyVersion.getVersionNo());\n        wm.putMap(\"result\", temp);\n        return wm;\n    }\n\n    /**\n     * returns WordVectorBatch method result\n     *\n     * @param batch method result\n     * @return WritableMap\n     */\n    public WritableMap vectorBatchResult(Map<String, Float[]> batch) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap temp = Arguments.createMap();\n        for (Map.Entry<String, Float[]> entry : batch.entrySet()) {\n            temp.putArray(entry.getKey(), HMSUtils.getInstance().convertFloatArrToWa(entry.getValue()));\n        }\n        wm.putMap(\"result\", temp);\n        return wm;\n    }\n\n    /**\n     * Converts sdk text recognition result to WritableMap\n     *\n     * @param textRecognitionResult result to be converted\n     * @return WritableMap\n     */\n    public WritableMap getTextRecognitionResult(MLText textRecognitionResult) {\n        WritableMap result = SUCCESS.getStatusAndMessage();\n        result.putString(\"completeResult\", textRecognitionResult.getStringValue());\n        result.putArray(\"blocks\", getTextBlocks(textRecognitionResult.getBlocks()));\n        return result;\n    }\n\n    /**\n     * Converts sdk text recognition result to WritableMap\n     *\n     * @param blocks result to be converted\n     * @return WritableMap\n     */\n    public WritableMap getTextRecognitionResult(SparseArray<MLText.Block> blocks) {\n        WritableMap result = SUCCESS.getStatusAndMessage();\n        result.putArray(\"blocks\", getTextBlocks(blocks));\n        return result;\n    }\n\n    /**\n     * Converts block array to WritableArray\n     *\n     * @param blocks blocks to be converted\n     * @return WritableArray\n     */\n    private WritableArray getTextBlocks(SparseArray<MLText.Block> blocks) {\n        return getTextBlocks(HMSUtils.getInstance().convertSparseArrayToList(blocks));\n    }\n\n    /**\n     * Converts text block list to WritableArray\n     *\n     * @param mlTextBlockList block list\n     * @return WritableArray\n     */\n    private WritableArray getTextBlocks(List<MLText.Block> mlTextBlockList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.Block block : mlTextBlockList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", block.getStringValue());\n            wm.putDouble(\"possibility\", block.getPossibility() == null ? 0.0 : block.getPossibility());\n            wm.putMap(\"border\", getBorders(block.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(block.getVertexes())));\n            wm.putArray(\"lines\", getLines(block.getContents()));\n            wm.putArray(\"languageList\", getLanguageList(block.getLanguageList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts text line list into WritableArray\n     *\n     * @param mlTextTextLineList textlines\n     * @return WritableArray\n     */\n    private WritableArray getLines(List<MLText.TextLine> mlTextTextLineList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.TextLine line : mlTextTextLineList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", line.getStringValue());\n            wm.putMap(\"border\", getBorders(line.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(line.getVertexes())));\n            wm.putArray(\"words\", getWords(line.getContents()));\n            wm.putDouble(\"rotatingDegree\", line.getRotatingDegree());\n            wm.putBoolean(\"isVertical\", line.isVertical());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts word list into WritableArray\n     *\n     * @param mlWordList word list\n     * @return WritableArray\n     */\n    private WritableArray getWords(List<MLText.Word> mlWordList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLText.Word word : mlWordList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", word.getStringValue());\n            wm.putMap(\"border\", getBorders(word.getBorder()));\n            wm.putArray(\"vertexes\", getPoints(Arrays.asList(word.getVertexes())));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document result to WritableMap\n     *\n     * @param mlDocument document result\n     * @return WritableMap\n     */\n    public WritableMap getDocumentRecognitionResult(MLDocument mlDocument) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"completeResult\", mlDocument.getStringValue());\n        wm.putArray(\"blocks\", getDocumentBlocks(mlDocument.getBlocks()));\n        return wm;\n    }\n\n    /**\n     * Converts document blocks to WritableArray\n     *\n     * @param mlDocumentBlockList block list\n     * @return WritableArray\n     */\n    private WritableArray getDocumentBlocks(List<MLDocument.Block> mlDocumentBlockList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Block block : mlDocumentBlockList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", block.getStringValue());\n            wm.putArray(\"sections\", getSections(block.getSections()));\n            wm.putMap(\"border\", getBorders(block.getBorder()));\n            wm.putMap(\"interval\", getInterval(block.getInterval()));\n            wm.putArray(\"languageList\", getLanguageList(block.getLanguageList()));\n            wm.putDouble(\"possibility\", block.getPossibility() == null ? 0.0 : block.getPossibility());\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document sections to WritableArray\n     *\n     * @param mlDocumentSectionList section list\n     * @return WritableArray\n     */\n    private WritableArray getSections(List<MLDocument.Section> mlDocumentSectionList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Section value : mlDocumentSectionList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", value.getStringValue());\n            wm.putMap(\"border\", getBorders(value.getBorder()));\n            wm.putArray(\"lineList\", getLineList(value.getLineList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document interval to WritableMap\n     *\n     * @param mlDocumentInterval interval result\n     * @return WritableMap\n     */\n    private WritableMap getInterval(MLDocument.Interval mlDocumentInterval) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"intervalType\", mlDocumentInterval.getIntervalType());\n        wm.putBoolean(\"isTextFollowed\", mlDocumentInterval.isTextFollowed());\n        return wm;\n    }\n\n    /**\n     * Converts document line list to WritableArray\n     *\n     * @param list line result list\n     * @return WritableArray\n     */\n    private WritableArray getLineList(List<MLDocument.Line> list) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Line line : list) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", line.getStringValue());\n            wm.putMap(\"border\", getBorders(line.getBorder()));\n            wm.putArray(\"points\", getPoints(line.getPoints()));\n            wm.putArray(\"wordList\", getDocumentWords(line.getWordList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document word list to WritableArray\n     *\n     * @param mlDocumentWordList word result list\n     * @return WritableArray\n     */\n    private WritableArray getDocumentWords(List<MLDocument.Word> mlDocumentWordList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Word word : mlDocumentWordList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", word.getStringValue());\n            wm.putMap(\"border\", getBorders(word.getBorder()));\n            wm.putArray(\"characterList\", getCharacterList(word.getCharacterList()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts document character list to WritableArray\n     *\n     * @param mlDocumentCharList character result list\n     * @return WritableArray\n     */\n    private WritableArray getCharacterList(List<MLDocument.Character> mlDocumentCharList) {\n        WritableArray wa = Arguments.createArray();\n        for (MLDocument.Character character : mlDocumentCharList) {\n            WritableMap wm = Arguments.createMap();\n            wm.putString(\"stringValue\", character.getStringValue());\n            wm.putMap(\"border\", getBorders(character.getBorder()));\n            wa.pushMap(wm);\n        }\n        return wa;\n    }\n\n    /**\n     * Converts point list to WritableArray\n     *\n     * @param pointList list to be converted\n     * @return WritableArray\n     */\n    private WritableArray getPoints(List<Point> pointList) {\n        WritableArray writableArray = Arguments.createArray();\n        for (Point point : pointList) {\n            writableArray.pushMap(getPoint(point));\n        }\n        return writableArray;\n    }\n\n    /**\n     * Converts point to WritableMap\n     *\n     * @param point x and y values container\n     * @return WritableMap\n     */\n    private WritableMap getPoint(Point point) {\n        WritableMap map = Arguments.createMap();\n        map.putInt(\"y\", point.y);\n        map.putInt(\"x\", point.x);\n        return map;\n    }\n\n    /**\n     * Converts Rect to WritableMap\n     *\n     * @param border rect object\n     * @return WritableMap\n     */\n    private WritableMap getBorders(Rect border) {\n        WritableMap writableMap = Arguments.createMap();\n        writableMap.putInt(\"left\", border.left);\n        writableMap.putInt(\"right\", border.right);\n        writableMap.putInt(\"top\", border.top);\n        writableMap.putInt(\"down\", border.bottom);\n        return writableMap;\n    }\n\n    /**\n     * Converts text language list to WritableArray\n     *\n     * @param textLanguageList text language list\n     * @return WritableArray\n     */\n    private WritableArray getLanguageList(List<TextLanguage> textLanguageList) {\n        WritableArray writableArray = Arguments.createArray();\n        for (TextLanguage lang : textLanguageList) {\n            writableArray.pushString(lang.getLanguage());\n        }\n        return writableArray;\n    }\n\n    /**\n     * Converts recognition successs to WritableMap\n     *\n     * @param mlBcrCaptureResult bcr result\n     * @return WritableMap\n     */\n    public WritableMap getBankCardRecognitionSuccessResults(MLBcrCaptureResult mlBcrCaptureResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"errorCode\", mlBcrCaptureResult.getErrorCode());\n        wm.putString(\"expire\", mlBcrCaptureResult.getExpire());\n        wm.putString(\"issuer\", mlBcrCaptureResult.getIssuer());\n        wm.putString(\"number\", mlBcrCaptureResult.getNumber());\n        wm.putString(\"organization\", mlBcrCaptureResult.getOrganization());\n        wm.putString(\"type\", mlBcrCaptureResult.getType());\n        return wm;\n    }\n\n    /**\n     * Converts recognition result to WritableMap\n     *\n     * @param mlGcrCaptureResult recognition result\n     * @return WritableMap\n     */\n    public WritableMap getGeneralCardRecognitionSuccessResult(MLGcrCaptureResult mlGcrCaptureResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"stringValue\", mlGcrCaptureResult.text.getStringValue());\n        wm.putArray(\"textBlocks\", getTextBlocks(mlGcrCaptureResult.text.getBlocks()));\n        return wm;\n    }\n\n    /**\n     * Converts JsonObject to WritableMap\n     *\n     * @param jsonObject json result\n     * @return WritableMap\n     * @throws JSONException inner methods throws\n     */\n    public WritableMap getFormRecognitionResult(JsonObject jsonObject) throws JSONException {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putMap(\"result\", HMSUtils.getInstance().convertJsonToWritableMap(new JSONObject(jsonObject.toString())));\n        return wm;\n    }\n\n    /**\n     * Converts sparse array of JsonObject to WritableMap\n     *\n     * @param sparseArray contains JsonObjects\n     * @return WritableMap\n     * @throws JSONException convert method throws it\n     */\n    public WritableMap getSyncFormRecognitionResult(SparseArray<JsonObject> sparseArray) throws JSONException {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableArray wa = Arguments.createArray();\n\n        for (int i = 0; i < sparseArray.size(); i++) {\n            wa.pushMap(HMSUtils.getInstance().convertJsonToWritableMap(new JSONObject(sparseArray.get(i).toString())));\n        }\n        wm.putArray(\"result\", wa);\n        return wm;\n    }\n\n    /**\n     * Converts vietnam card result to WritableMap\n     *\n     * @param idCardResult vietnam card result\n     * @return WritableMap\n     */\n    public WritableMap getVNFormatIdCardResult(MLVnIcrCaptureResult idCardResult) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n\n        res.putString(\"name\", idCardResult.getName());\n        res.putString(\"sex\", idCardResult.getSex());\n        res.putString(\"birthday\", idCardResult.getBirthday());\n        res.putString(\"idNum\", idCardResult.getIdNum());\n\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    /**\n     * Converts id card result to WritableMap\n     *\n     * @param idCardResult id card result\n     * @param isFront is front side id card\n     * @return WritableMap\n     */\n    public WritableMap getFormatIdCardResult(MLCnIcrCaptureResult idCardResult, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        if (isFront) {\n            res.putString(\"name\", idCardResult.name);\n            res.putString(\"sex\", idCardResult.sex);\n            res.putString(\"idNum\", idCardResult.idNum);\n            res.putString(\"birthday\", idCardResult.birthday);\n            res.putString(\"nation\", idCardResult.nation);\n            res.putString(\"address\", idCardResult.address);\n        } else {\n            res.putString(\"validDate\", idCardResult.validDate);\n            res.putString(\"authority\", idCardResult.authority);\n        }\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    public WritableMap getICRResult(MLIdCard idCardResult, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        if (isFront) {\n            res.putString(\"name\", idCardResult.name);\n            res.putString(\"sex\", idCardResult.sex);\n            res.putString(\"idNum\", idCardResult.idNum);\n            res.putString(\"birthday\", idCardResult.birthday);\n            res.putString(\"nation\", idCardResult.nation);\n            res.putString(\"address\", idCardResult.address);\n        } else {\n            res.putString(\"validDate\", idCardResult.validDate);\n            res.putString(\"authority\", idCardResult.authority);\n        }\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n\n    /**\n     * converts image result to WritableMap\n     *\n     * @param string result\n     * @param isFront is front side id card\n     * @return WritableMap\n     */\n    public WritableMap getIDCardImage(String string, boolean isFront) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        WritableMap res = Arguments.createMap();\n        res.putString(\"image\", TextUtils.isEmpty(string) ? \"\" : string);\n        res.putBoolean(\"isFront\", isFront);\n        wm.putMap(\"result\", res);\n        return wm;\n    }\n    /**\n     * converts integer result to WritableMap\n     *\n     * @param integer method result\n     * @return WritableMap\n     */\n    public WritableMap integerResult(int integer) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"result\", integer);\n        return wm;\n    }\n\n    /**\n     * converts string result to WritableMap\n     *\n     * @param string result\n     * @return WritableMap\n     */\n    public WritableMap getStringResult(String string) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(string) ? \"\" : string);\n        return wm;\n    }\n\n    /**\n     * converts float result to WritableMap\n     *\n     * @param aFloat method result\n     * @return WritableMap\n     */\n    public WritableMap floatResult(Float aFloat) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putDouble(\"result\", aFloat);\n        return wm;\n    }\n\n    /**\n     * Converts display dimension to result\n     *\n     * @param displayDimension preview size\n     * @return WritableMap\n     */\n    public WritableMap displayDimensionResult(Size displayDimension) {\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putInt(\"width\", displayDimension.getWidth());\n        wm.putInt(\"height\", displayDimension.getHeight());\n        return wm;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/transactors/HMSBaseTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.transactors;\n\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSLogger;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\npublic class HMSBaseTransactor {\n    private ReactApplicationContext applicationContext;\n\n    private HMSLogger logger;\n\n    HMSBaseTransactor(ReactApplicationContext context) {\n        applicationContext = context;\n        logger = HMSLogger.getInstance(applicationContext);\n    }\n\n    protected void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/transactors/HMSTextAnalyzerTransactor.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.transactors;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.TEXT_TRANSACTOR_ON_DESTROY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.TEXT_TRANSACTOR_ON_RESULT;\n\nimport com.huawei.hms.mlsdk.common.MLAnalyzer;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class HMSTextAnalyzerTransactor extends HMSBaseTransactor implements MLAnalyzer.MLTransactor<MLText.Block> {\n\n    public HMSTextAnalyzerTransactor(ReactApplicationContext context) {\n        super(context);\n    }\n\n    @Override\n    public void destroy() {\n        sendEvent(TEXT_TRANSACTOR_ON_DESTROY, \"destroy\", null);\n    }\n\n    @Override\n    public void transactResult(MLAnalyzer.Result<MLText.Block> result) {\n        sendEvent(TEXT_TRANSACTOR_ON_RESULT, \"transactResult\",\n            HMSResultCreator.getInstance().getTextRecognitionResult(result.getAnalyseList()));\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/utils/HMSBackgroundTasks.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.utils;\n\nimport android.graphics.Bitmap;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hmf.tasks.Tasks;\n\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic final class HMSBackgroundTasks {\n    private static volatile HMSBackgroundTasks instance;\n\n    public static HMSBackgroundTasks getInstance() {\n        if (instance == null) {\n            synchronized (HMSBackgroundTasks.class) {\n                if (instance == null) {\n                    instance = new HMSBackgroundTasks();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Handles single image saving task\n     *\n     * @param context app context\n     * @param image image to be saved\n     * @return WritableMap\n     */\n    public Task<String> saveImageAndGetUri(ReactApplicationContext context, Bitmap image) {\n        return Tasks.callInBackground(() -> HMSUtils.getInstance().saveImageAndGetUri(context, image));\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/utils/HMSLogger.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"MLText\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"3.12.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/utils/HMSUtils.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.provider.MediaStore;\nimport android.util.SparseArray;\nimport android.view.SurfaceHolder;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.io.ByteArrayOutputStream;\nimport java.nio.ByteBuffer;\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.HashSet;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Set;\n\npublic final class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    private SurfaceHolder surfaceViewHolder;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            synchronized (HMSUtils.class) {\n                if (instance == null) {\n                    instance = new HMSUtils();\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Converts JSONObject to WritableMap\n     *\n     * @param jsonObject JSONObject\n     * @return WritableMap\n     * @throws JSONException jsonObject.get throws it\n     */\n    public WritableMap convertJsonToWritableMap(JSONObject jsonObject) throws JSONException {\n        WritableMap map = Arguments.createMap();\n        Iterator<String> iterator = jsonObject.keys();\n        while (iterator.hasNext()) {\n            String key = iterator.next();\n            Object value = jsonObject.get(key);\n            if (value instanceof JSONObject) {\n                map.putMap(key, convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                map.putString(key, value.toString());\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Converts JSONArray to WritableArray\n     *\n     * @param jsonArray JSONArray\n     * @return WritableArray\n     * @throws JSONException jsonObject.get throws it\n     */\n    private WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n            if (value instanceof JSONObject) {\n                array.pushMap(convertJsonToWritableMap((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(convertJsonToWritableArray((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                array.pushString(value.toString());\n            }\n        }\n\n        return array;\n    }\n\n    /**\n     * Converts ReadableArray to String List\n     *\n     * @param readableArray array\n     * @return List\n     */\n    public List<String> readableArrayIntoStringList(ReadableArray readableArray) {\n        if (readableArray.size() == 0) {\n            return Collections.emptyList();\n        }\n        List<String> arrList = new ArrayList<>();\n        for (int i = 0; i < readableArray.size(); i++) {\n            arrList.add(readableArray.getString(i));\n        }\n        return arrList;\n    }\n\n    /**\n     * Converts string list to WritableArray\n     *\n     * @param list list of strings\n     * @return WritableArray\n     */\n    public WritableArray convertStringListIntoWa(List<String> list) {\n        WritableArray writableArray = Arguments.createArray();\n        for (String value : list) {\n            writableArray.pushString(value);\n        }\n        return writableArray;\n    }\n\n    /**\n     * Checks if ReadableMap has valid key\n     *\n     * @param readableMap ReadableMap\n     * @param key key to be checked\n     * @param type key's type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Converts ReadableArray to byte array\n     *\n     * @param ra ReadableArray\n     * @return byte array\n     */\n    public byte[] convertRaToByteArray(ReadableArray ra) {\n        byte[] bytes = new byte[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            bytes[i] = (byte) ra.getInt(i);\n        }\n        return bytes;\n    }\n\n    /**\n     * Converts byte array to byte buffer\n     *\n     * @param arr byte array\n     * @return byte buffer\n     */\n    public ByteBuffer convertByteArrToByteBuffer(byte[] arr) {\n        return ByteBuffer.wrap(arr);\n    }\n\n    /**\n     * Converts sparse array to list\n     *\n     * @param result sparse array of any type\n     * @param <T> generic parameter\n     * @return List\n     */\n    public <T> List<T> convertSparseArrayToList(SparseArray<T> result) {\n        List<T> converted = new ArrayList<>();\n        for (int i = 0; i < result.size(); i++) {\n            converted.add(result.get(result.keyAt(i)));\n        }\n        return converted;\n    }\n\n    /**\n     * Converts ReadableArray to String Set\n     *\n     * @param ra ReadableArray\n     * @return String Set\n     */\n    public Set<String> convertRaToStringSet(ReadableArray ra) {\n        Set<String> word = new HashSet<>();\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) == ReadableType.String) {\n                word.add(ra.getString(i));\n            }\n        }\n        return word;\n    }\n\n    /**\n     * Converts Float array to WritableArray\n     *\n     * @param arr Float array\n     * @return WritableArray\n     */\n    public WritableArray convertFloatArrToWa(Float[] arr) {\n        WritableArray wa = Arguments.createArray();\n        for (float val : arr) {\n            wa.pushDouble(val);\n        }\n        return wa;\n    }\n\n    /**\n     * Save image to gallery\n     *\n     * @param inContext app context\n     * @param inImage bitmap image\n     * @return image uri\n     */\n    public String saveImageAndGetUri(Context inContext, Bitmap inImage) {\n        ByteArrayOutputStream bytes = new ByteArrayOutputStream();\n        inImage.compress(Bitmap.CompressFormat.JPEG, 90, bytes);\n        return MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, null, null);\n    }\n\n    /**\n     * Sets the holder for lensEngine\n     *\n     * @param surfaceViewHolder holder\n     */\n    public void setSurfaceViewHolder(SurfaceHolder surfaceViewHolder) {\n        this.surfaceViewHolder = surfaceViewHolder;\n    }\n\n    /**\n     * Returns the holder for lensEngine\n     *\n     * @return holder\n     */\n    public SurfaceHolder getSurfaceViewHolder() {\n        return surfaceViewHolder;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/views/CustomViewActivity.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.views;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.Color;\nimport android.graphics.Point;\nimport android.graphics.Rect;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.util.DisplayMetrics;\nimport android.util.Log;\nimport android.view.Display;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.view.Window;\nimport android.view.WindowManager;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.mlplugin.card.bcr.CustomView;\nimport com.huawei.hms.rn.mltext.R;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSLogger;\nimport com.huawei.hms.rn.mltext.textrelatedservices.CustomViewHandler;\n\nimport java.lang.reflect.InvocationTargetException;\n\npublic class CustomViewActivity extends ReactActivity {\n    private static final String TAG = CustomViewActivity.class.getSimpleName();\n    private static final int TOP_OFFSET = 150;\n    private ReactApplicationContext mContext;\n    private CustomView remoteView;\n    private ImageView flashButton;\n    private FrameLayout cameraLayout;\n    private FrameLayout cardLayout;\n    private Rect mScanRect;\n    private TextView title;\n    private ViewfinderView viewfinderView;\n    private CustomView.OnBcrResultCallback callback;\n    private HMSLogger mHMSLogger;\n    private double scanFrameWidthFactor = 0.8;\n    private double scanFrameHeightFactor = 0.63084;\n    private Intent intent;\n    private Bundle bundle;\n\n    private int[] img = {R.drawable.flash_light_on, R.drawable.flash_light_off};\n\n    public enum Event {\n        ON_START(\"onStart\"),\n        ON_RESUME(\"onResume\"),\n        ON_PAUSE(\"onPause\"),\n        ON_DESTROY(\"onDestroy\"),\n        ON_STOP(\"onStop\");\n\n        private String eventName;\n\n        Event(String eventName) {\n            this.eventName = eventName;\n        }\n\n        public String getName() {\n            return eventName;\n        }\n    }\n\n    void sendEvent(Event event, @Nullable WritableMap wm) {\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mContext = (ReactApplicationContext) getReactNativeHost().getReactInstanceManager().getCurrentReactContext();\n        mHMSLogger = HMSLogger.getInstance(mContext);\n\n        intent = getIntent();\n        try {\n            bundle = intent.getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n\n        initView();\n\n        createScanRectFromCamera();\n\n        callback = idCardResult -> {\n            if (idCardResult.getErrorCode() == 0 ){\n                mHMSLogger.sendSingleEvent(\"CustomViewActivity.OnBcrResultCallback\");\n                CustomViewHandler.setCardResult(idCardResult);\n                setResult(Activity.RESULT_OK);\n                finish();\n            } else {\n                mHMSLogger.sendSingleEvent(\"CustomViewActivity.OnBcrResultCallback\");\n                CustomViewHandler.setCardResult(idCardResult);\n                setResult(Activity.RESULT_CANCELED);\n                finish();\n            }\n        };\n\n        remoteView = new CustomView.Builder()\n                .setContext(this)\n                .setBoundingBox(mScanRect)\n                .setResultType(bundle.getInt(\"resultType\"))\n                .setRecMode(bundle.getInt(\"recMode\"))\n                .setOnBcrResultCallback(callback).build();\n\n\n        CustomViewHandler.setViews(remoteView, flashButton);\n\n        mHMSLogger.startMethodExecutionTimer(\"CustomViewActivity.customizedView\");\n\n        remoteView.onCreate(savedInstanceState);\n        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,\n                LinearLayout.LayoutParams.MATCH_PARENT);\n        cameraLayout.addView(remoteView, params);\n\n        addMainView(mScanRect);\n\n    }\n\n    private void initView() {\n\n        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);\n        setContentView(R.layout.activity_custom);\n        cameraLayout = findViewById(R.id.rim);\n        flashButton = findViewById(R.id.imageButton2);\n        cardLayout = findViewById(R.id.card_view);\n        title = findViewById(R.id.title);\n\n        if (bundle.getBoolean(\"isTitleAvailable\")) {\n            title.setVisibility(View.VISIBLE);\n        } else {\n            title.setVisibility(View.GONE);\n        }\n\n        title.setText(bundle.getString(\"title\"));\n\n        if (bundle.getBoolean(\"isFlashAvailable\")) {\n            flashButton.setVisibility(View.VISIBLE);\n            setFlashOperation();\n        } else {\n            flashButton.setVisibility(View.GONE);\n        }\n        setBackOperation();\n        setRectFactors();\n    }\n\n    private void setRectFactors() {\n        if (bundle.containsKey(\"widthFactor\")) {\n            scanFrameWidthFactor = bundle.getDouble(\"widthFactor\");\n        }\n        if (bundle.containsKey(\"heightFactor\")) {\n            scanFrameHeightFactor = bundle.getDouble(\"heightFactor\");\n        }\n    }\n\n    private void setBackOperation() {\n        ImageView backButton = findViewById(R.id.back_img);\n        backButton.setOnClickListener(v -> CustomViewActivity.this.finish());\n    }\n    /**\n     * Get real screen size information\n     *\n     * @return Point\n     */\n    private Point getRealScreenSize() {\n        int heightPixels = 0;\n        int widthPixels = 0;\n        Point point = null;\n        WindowManager manager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);\n\n        if (manager != null) {\n            Display d = manager.getDefaultDisplay();\n            DisplayMetrics metrics = new DisplayMetrics();\n            d.getMetrics(metrics);\n            heightPixels = metrics.heightPixels;\n            widthPixels = metrics.widthPixels;\n            Log.i(TAG, \"heightPixels=\" + heightPixels + \" widthPixels=\" + widthPixels);\n\n            if (Build.VERSION.SDK_INT < 17) {\n                try {\n                    heightPixels = (Integer) Display.class.getMethod(\"getRawHeight\").invoke(d);\n                    widthPixels = (Integer) Display.class.getMethod(\"getRawWidth\").invoke(d);\n                    Log.i(TAG, \"2 heightPixels=\" + heightPixels + \" widthPixels=\" + widthPixels);\n                } catch (IllegalArgumentException | IllegalAccessException |\n                         InvocationTargetException | NoSuchMethodException e) {\n                    Log.w(TAG, \"getRealScreenSize exception\");\n                }\n            } else if (Build.VERSION.SDK_INT >= 17) {\n                Point realSize = new Point();\n                try {\n                    Display.class.getMethod(\"getRealSize\", Point.class).invoke(d, realSize);\n                    heightPixels = realSize.y;\n                    widthPixels = realSize.x;\n                    Log.i(TAG, \"3 heightPixels=\" + heightPixels + \" widthPixels=\" + widthPixels);\n                } catch (IllegalArgumentException | IllegalAccessException |\n                         InvocationTargetException | NoSuchMethodException e) {\n                    Log.w(TAG, \"getRealScreenSize exception\");\n                }\n            }\n        }\n        Log.i(TAG, \"getRealScreenSize widthPixels=\" + widthPixels + \" heightPixels=\" + heightPixels);\n        point = new Point(widthPixels, heightPixels);\n        return point;\n    }\n    private void createScanRectFromCamera() {\n        Point point = getRealScreenSize();\n        int screenWidth = point.x;\n        int screenHeight = point.y;\n        final float heightFactor = (float) scanFrameHeightFactor;\n        final float widthFactor = (float) scanFrameWidthFactor;\n        int width = Math.round(screenWidth * heightFactor);\n        int height = Math.round((float) width * widthFactor);\n        int leftOffset = (screenWidth - width) / 2;\n        int topOffset = TOP_OFFSET;\n        Log.i(TAG, \"screenWidth=\" + screenWidth + \" screenHeight=\" + screenHeight + \"  rect width=\" + width\n                + \" leftOffset \" + leftOffset + \" topOffset \" + topOffset);\n        mScanRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);\n    }\n\n\n    private void setFlashOperation() {\n        flashButton.setOnClickListener(v -> {\n            if (remoteView.getLightStatus()) {\n                remoteView.switchLight();\n                flashButton.setImageResource(img[1]);\n            } else {\n                remoteView.switchLight();\n                flashButton.setImageResource(img[0]);\n            }\n        });\n    }\n\n    /**\n     * Call the lifecycle management method of the remoteView activity.\n     * RN callbacks.\n     */\n    @Override\n    protected void onStart() {\n        super.onStart();\n        Window window = getWindow();\n        View decorView = window.getDecorView();\n        int option = View.SYSTEM_UI_FLAG_LAYOUT_STABLE\n                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN\n                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;\n        decorView.setSystemUiVisibility(option);\n        if (Build.VERSION.SDK_INT >= 21) {\n            window.setStatusBarColor(Color.TRANSPARENT);\n            window.setNavigationBarColor(Color.TRANSPARENT);\n        }\n        remoteView.onStart();\n        sendEvent(Event.ON_START, null);\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        remoteView.onResume();\n        sendEvent(Event.ON_RESUME, null);\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        remoteView.onPause();\n        sendEvent(Event.ON_PAUSE, null);\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        remoteView.onDestroy();\n        sendEvent(Event.ON_DESTROY, null);\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        remoteView.onStop();\n        sendEvent(Event.ON_STOP, null);\n    }\n\n    private void addMainView(Rect frameRect) {\n        this.viewfinderView = new ViewfinderView(this, frameRect);\n        this.viewfinderView.setLayoutParams(\n                new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ));\n        this.cardLayout.addView(this.viewfinderView);\n    }\n}"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/views/HMSCustomSurfaceView.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.views;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_SURFACE_ON_CHANGED;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_SURFACE_ON_CREATED;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.LENS_SURFACE_ON_DESTROY;\n\nimport android.content.Context;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\n\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSCustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback {\n    private ThemedReactContext applicationContext;\n\n    public HMSCustomSurfaceView(Context context) {\n        super(context);\n        applicationContext = (ThemedReactContext) context;\n        HMSUtils.getInstance().setSurfaceViewHolder(getHolder());\n        getHolder().addCallback(this);\n    }\n\n    @Override\n    public void surfaceCreated(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_CREATED, null);\n    }\n\n    @Override\n    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"format\", i);\n        wm.putInt(\"width\", i1);\n        wm.putInt(\"height\", i2);\n        sendEvent(LENS_SURFACE_ON_CHANGED, wm);\n    }\n\n    @Override\n    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {\n        sendEvent(LENS_SURFACE_ON_DESTROY, null);\n    }\n\n    private void sendEvent(String eventName, WritableMap params) {\n        applicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/views/HMSSurfaceView.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.views;\n\nimport com.facebook.react.uimanager.SimpleViewManager;\nimport com.facebook.react.uimanager.ThemedReactContext;\n\npublic class HMSSurfaceView extends SimpleViewManager<HMSCustomSurfaceView> {\n\n    @Override\n    public String getName() {\n        return HMSSurfaceView.class.getSimpleName();\n    }\n\n    @Override\n    protected HMSCustomSurfaceView createViewInstance(ThemedReactContext reactContext) {\n        return new HMSCustomSurfaceView(reactContext);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/helpers/views/ViewfinderView.java",
    "content": "/*\n * Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the \"License\");\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an \"AS IS\" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.helpers.views;\n\nimport android.content.Context;\nimport android.content.res.Configuration;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport android.view.View;\n\nimport com.huawei.hms.mlplugin.card.bcr.R;\n\npublic class ViewfinderView extends View {\n    private static final String TAG = ViewfinderView.class.getSimpleName();\n    private final Paint paint;\n    private Rect frameRect;\n    private Context context;\n    private boolean isLandscape;\n\n    /**\n     * Constructor\n     *\n     * @param context Activity\n     */\n    public ViewfinderView(Context context, Rect frameRect) {\n        super(context);\n        this.context = context;\n        this.frameRect = frameRect;\n        this.isLandscape = isLandscape(context);\n        this.paint = new Paint(Paint.ANTI_ALIAS_FLAG);\n    }\n\n    /**\n     * According to the context to determine whether the current horizontal screen\n     *\n     * @param context context\n     * @return true：Landscape；false：Portrait\n     */\n    public static boolean isLandscape(Context context) {\n        int orientation = context.getResources().getConfiguration().orientation;\n        return orientation == Configuration.ORIENTATION_LANDSCAPE;\n    }\n\n    @Override\n    public void onDraw(Canvas canvas) {\n        Log.i(TAG, \"onDraw frameRect = \" + frameRect);\n        drawBoarderFrame(canvas, frameRect);\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent event) {\n        return false;\n    }\n\n    private void drawBoarderFrame(Canvas canvas, Rect frame) {\n        final int lindDrawWidth = context.getResources().getDimensionPixelSize(R.dimen.mlkit_bcr_line_draw_width);\n        int lineWidth = isLandscape ? lindDrawWidth : lindDrawWidth >> 1;\n        int roundWidth = (frame.right - frame.left) / 12;\n\n        canvas.save();\n        canvas.drawRect((float) frame.left, (float) frame.top, (float) (frame.left + roundWidth + 1),\n                (float) (frame.top + lineWidth + 1), this.paint);\n        canvas.drawRect((float) frame.left, (float) frame.top, (float) (frame.left + lineWidth + 1),\n                (float) (frame.top + roundWidth + 1), this.paint);\n        canvas.drawRect((float) (frame.right - roundWidth), (float) frame.top, (float) (frame.right + 1),\n                (float) (frame.top + lineWidth + 1), this.paint);\n        canvas.drawRect((float) (frame.right - lineWidth), (float) frame.top, (float) (frame.right + 1),\n                (float) (frame.top + roundWidth + 1), this.paint);\n\n        canvas.drawRect((float) frame.left, (float) (frame.bottom - lineWidth), (float) (frame.left + roundWidth + 1),\n                (float) (frame.bottom + 1), this.paint);\n        canvas.drawRect((float) frame.left, (float) (frame.bottom - roundWidth), (float) (frame.left + lineWidth + 1),\n                (float) (frame.bottom + 1), this.paint);\n        canvas.drawRect((float) (frame.right - roundWidth), (float) (frame.bottom - lineWidth),\n                (float) (frame.right + 1), (float) (frame.bottom + 1), this.paint);\n        canvas.drawRect((float) (frame.right - lineWidth), (float) (frame.bottom - roundWidth),\n                (float) (frame.right + 1), (float) (frame.bottom + 1), this.paint);\n        canvas.restore();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/nlprelatedservices/HMSTextEmbedding.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.nlprelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.TEXT_EMBED_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.UNKNOWN;\n\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingAnalyzer;\nimport com.huawei.hms.mlsdk.textembedding.MLTextEmbeddingException;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\npublic class HMSTextEmbedding extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTextEmbedding(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextEmbedding.class.getSimpleName(), TEXT_EMBED_CONSTANTS);\n    }\n\n    /**\n     * Queries the sentence vector asynchronously.\n     *\n     * @param sentence sentence to be embedded\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSentenceVector(String sentence, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeSentenceVector\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSentenceVector(sentence)\n            .addOnSuccessListener(floats -> handleResult(\"analyzeSentenceVector\",\n                HMSResultCreator.getInstance().getTextEmbedVectorResult(floats), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSentenceVector\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries the similarity between two sentences. The similarity range is [–1,1].\n     *\n     * @param sentenceFirst first sentence\n     * @param sentenceSecond second sentence\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSentencesSimilarity(String sentenceFirst, String sentenceSecond, String language,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeSentencesSimilarity\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSentencesSimilarity(sentenceFirst, sentenceSecond)\n            .addOnSuccessListener(\n                aFloat -> handleResult(\"analyzeSentencesSimilarity\", HMSResultCreator.getInstance().floatResult(aFloat),\n                    promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSentencesSimilarity\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries a specified number of similar words.\n     *\n     * @param word a word\n     * @param similarNum Number of similar words. The value range is [1,30].\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeSimilarWords(String word, int similarNum, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeSimilarWords\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseSimilarWords(word, similarNum)\n            .addOnSuccessListener(list -> handleResult(\"analyzeSimilarWords\",\n                HMSResultCreator.getInstance().analyseSimilarWordsResult(list), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeSimilarWords\", e, promise));\n    }\n\n    /**\n     * Queries the word vector asynchronously.\n     *\n     * @param word a word\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordVector(String word, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordVector\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordVector(word)\n            .addOnSuccessListener(floats -> handleResult(\"analyzeWordVector\",\n                HMSResultCreator.getInstance().getTextEmbedVectorResult(floats), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordVector\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries the similarity between two words. The similarity range is [–1,1].\n     *\n     * @param wordFirst first word\n     * @param wordSecond second word\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordsSimilarity(String wordFirst, String wordSecond, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordsSimilarity\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordsSimilarity(wordFirst, wordSecond)\n            .addOnSuccessListener(\n                aFloat -> handleResult(\"analyzeWordsSimilarity\", HMSResultCreator.getInstance().floatResult(aFloat),\n                    promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordsSimilarity\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries dictionary version information.\n     *\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getVocabularyVersion(String language, final Promise promise) {\n        startMethodExecTimer(\"getVocabularyVersion\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.getVocabularyVersion()\n            .addOnSuccessListener(mlVocabularyVersion -> handleResult(\"getVocabularyVersion\",\n                HMSResultCreator.getInstance().vocabularyVersionResult(mlVocabularyVersion), promise))\n            .addOnFailureListener(e -> handleException(\"getVocabularyVersion\", e, promise));\n    }\n\n    /**\n     * Asynchronously queries word vectors in batches. (The number of words ranges from 1 to 500.)\n     *\n     * @param words list of words\n     * @param language language code\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeWordVectorBatch(ReadableArray words, String language, final Promise promise) {\n        startMethodExecTimer(\"analyzeWordVectorBatch\");\n        MLTextEmbeddingAnalyzer textEmbeddingAnalyzer = HMSObjectCreator.getInstance()\n            .createTextEmbeddingAnalyzer(language);\n        textEmbeddingAnalyzer.analyseWordVectorBatch(HMSUtils.getInstance().convertRaToStringSet(words))\n            .addOnSuccessListener(stringMap -> handleResult(\"analyzeWordVectorBatch\",\n                HMSResultCreator.getInstance().vectorBatchResult(stringMap), promise))\n            .addOnFailureListener(e -> handleException(\"analyzeWordVectorBatch\", e, promise));\n    }\n\n    /**\n     * Handles on failure exception and resolves promise\n     *\n     * @param methodName method name\n     * @param e exception object\n     * @param promise A Promise that resolves a result object\n     */\n    private void handleException(String methodName, Exception e, Promise promise) {\n        if (e instanceof MLTextEmbeddingException) {\n            MLTextEmbeddingException e1 = (MLTextEmbeddingException) e;\n            handleResult(methodName, UNKNOWN.getStatusAndMessage(e1.getErrCode(), e1.getMessage()), promise);\n        } else {\n            handleResult(methodName, e, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/CustomViewHandler.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.BCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.BCR_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.widget.ImageView;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.huawei.hms.mlplugin.card.bcr.CustomView;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureResult;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.R;\nimport com.huawei.hms.rn.mltext.helpers.constants.HMSResults;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSUtils;\nimport com.huawei.hms.rn.mltext.helpers.views.CustomViewActivity;\n\npublic class CustomViewHandler extends HMSBase implements ActivityEventListener {\n    private ReactContext mReactContext;\n    private Promise mPromise;\n    private static MLBcrCaptureResult cardResult;\n    private final int[] img = {R.drawable.flash_light_on, R.drawable.flash_light_off};\n\n    private static final int REQUEST_CODE_SCAN_CUSTOMIZED = 14;\n    @SuppressLint(\"StaticFieldLeak\")\n    private static CustomView remoteView;\n    @SuppressLint(\"StaticFieldLeak\")\n    private static ImageView flashImage;\n\n    public static void setViews(CustomView remoteView, ImageView flashImage) {\n        CustomViewHandler.remoteView = remoteView;\n        CustomViewHandler.flashImage = flashImage;\n    }\n\n    public static void setCardResult(MLBcrCaptureResult result) {\n        cardResult = result;\n    }\n\n    public CustomViewHandler(@NonNull ReactApplicationContext reactContext) {\n        super(reactContext, CustomViewActivity.class.getSimpleName(), BCR_PLUGIN_CONSTANTS);\n        this.mReactContext = reactContext;\n        mReactContext.addActivityEventListener(this);\n    }\n\n    /**\n     * Start the camera with custom UI to capture bank card according to given configurations and sets callback\n     *\n     * @param bcrCustomCaptureConfiguration capture and UI configurations\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void startCustomizedView(final ReadableMap bcrCustomCaptureConfiguration, final Promise promise) {\n        mPromise = promise;\n\n        int resultType = 0;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"resultType\", ReadableType.Number)) {\n            resultType = bcrCustomCaptureConfiguration.getInt(\"resultType\");\n        }\n\n        int recMode = 0;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"recMode\", ReadableType.Number)) {\n            recMode = bcrCustomCaptureConfiguration.getInt(\"recMode\");\n        }\n\n        boolean isFlashAvailable = false;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"isFlashAvailable\", ReadableType.Boolean)) {\n            isFlashAvailable = bcrCustomCaptureConfiguration.getBoolean(\"isFlashAvailable\");\n        }\n\n        boolean isTitleAvailable = true;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"isTitleAvailable\", ReadableType.Boolean)) {\n            isTitleAvailable = bcrCustomCaptureConfiguration.getBoolean(\"isTitleAvailable\");\n        }\n\n        String title = \"Place the card within the frame\";\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"title\", ReadableType.String)) {\n            title = bcrCustomCaptureConfiguration.getString(\"title\");\n        }\n        double heightFactor = 0.63084F;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"heightFactor\", ReadableType.Number)) {\n            heightFactor = bcrCustomCaptureConfiguration.getDouble(\"heightFactor\");\n        }\n\n        double widthFactor = 0.8F;\n        if (HMSUtils.getInstance().hasValidKey(bcrCustomCaptureConfiguration, \"widthFactor\", ReadableType.Number)) {\n            widthFactor = bcrCustomCaptureConfiguration.getDouble(\"widthFactor\");\n        }\n\n        Intent intent = new Intent(mReactContext, CustomViewActivity.class);\n\n        intent.putExtra(\"widthFactor\", widthFactor);\n        intent.putExtra(\"heightFactor\", heightFactor);\n        intent.putExtra(\"resultType\", resultType);\n        intent.putExtra(\"recMode\", recMode);\n        intent.putExtra(\"isFlashAvailable\", isFlashAvailable);\n        intent.putExtra(\"isTitleAvailable\", isTitleAvailable);\n        intent.putExtra(\"title\", title);\n\n        mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_SCAN_CUSTOMIZED);\n    }\n\n    /**\n     * Turn the flash light on or off\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void switchLight(final Promise promise) {\n        if (remoteView != null) {\n            remoteView.switchLight();\n            if (remoteView.getLightStatus()) {\n                flashImage.setImageResource(img[1]);\n            } else {\n                flashImage.setImageResource(img[0]);\n            }\n        } else {\n            promise.reject(HMSResults.CUSTOM_VIEW_ERROR.getStringErrCode(), HMSResults.CUSTOM_VIEW_ERROR.getMessage());\n        }\n    }\n\n    /**\n     * Return the status of the the flash light\n     *\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getLightStatus(final Promise promise) {\n        if (remoteView != null) {\n            promise.resolve(remoteView.getLightStatus());\n        } else {\n            promise.reject(HMSResults.CUSTOM_VIEW_ERROR.getStringErrCode(), HMSResults.CUSTOM_VIEW_ERROR.getMessage());\n        }\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n\n        if (requestCode == REQUEST_CODE_SCAN_CUSTOMIZED) {\n            if (resultCode == Activity.RESULT_OK && cardResult != null) {\n                HMSBackgroundTasks.getInstance()\n                        .saveImageAndGetUri(getReactApplicationContext(), cardResult.getNumberBitmap())\n                        .addOnSuccessListener(\n                                s -> sendEvent(BCR_IMAGE_SAVE, \"onSuccess\", HMSResultCreator.getInstance().getStringResult(s)))\n                        .addOnFailureListener(\n                                e -> sendEvent(BCR_IMAGE_SAVE, \"onFailure\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n\n                handleResult(\"MLBcrCapture.Callback\",\n                        HMSResultCreator.getInstance().getBankCardRecognitionSuccessResults(cardResult),\n                        mPromise);\n                mPromise = null;\n            } else if (resultCode == Activity.RESULT_CANCELED && cardResult != null) {\n                handleResult(\"MLBcrCapture.Callback\", FAILURE.getStatusAndMessage(cardResult.getErrorCode(), null), mPromise);\n                mPromise = null;\n            }\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"CustomViewHandler\";\n    }\n}"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSBankCardRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.BCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.BCR_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\n\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCapture;\nimport com.huawei.hms.mlplugin.card.bcr.MLBcrCaptureResult;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class HMSBankCardRecognition extends HMSBase implements MLBcrCapture.Callback {\n    private Promise captureResultPromise;\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSBankCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSBankCardRecognition.class.getSimpleName(), BCR_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Start an activity to capture bank card according to given configurations and sets callback\n     *\n     * @param bcrCaptureConfiguration capture configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureFrame(ReadableMap bcrCaptureConfiguration, final Promise promise) {\n        startMethodExecTimer(\"captureFrame\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"captureFrame\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLBcrCapture bcrCapture = HMSObjectCreator.getInstance().createBcrCapture(bcrCaptureConfiguration);\n        captureResultPromise = promise;\n        bcrCapture.captureFrame(currentActivity, this);\n    }\n\n    @Override\n    public void onSuccess(MLBcrCaptureResult mlBcrCaptureResult) {\n        HMSBackgroundTasks.getInstance()\n            .saveImageAndGetUri(getContext(), mlBcrCaptureResult.getNumberBitmap())\n            .addOnSuccessListener(\n                s -> sendEvent(BCR_IMAGE_SAVE, \"onSuccess\", HMSResultCreator.getInstance().getStringResult(s)))\n            .addOnFailureListener(\n                e -> sendEvent(BCR_IMAGE_SAVE, \"onFailure\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n\n        handleResult(\"MLBcrCapture.Callback\",\n            HMSResultCreator.getInstance().getBankCardRecognitionSuccessResults(mlBcrCaptureResult),\n            captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onCanceled() {\n        handleResult(\"MLBcrCapture.Callback\", CANCEL, captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onFailure(int i, Bitmap bitmap) {\n        handleResult(\"MLBcrCapture.Callback\", FAILURE.getStatusAndMessage(i, null), captureResultPromise);\n        captureResultPromise = null;\n    }\n\n    @Override\n    public void onDenied() {\n        handleResult(\"MLBcrCapture.Callback\", DENY, captureResultPromise);\n        captureResultPromise = null;\n    }\n\n}"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSDocumentRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.DOCUMENT_RECOGNITION_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.document.MLDocumentAnalyzer;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSDocumentRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSDocumentRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSDocumentRecognition.class.getSimpleName(), DOCUMENT_RECOGNITION_CONSTANTS);\n    }\n\n    /**\n     * Detects document information in an input image.\n     *\n     * @param isStop if true releases resources for analyzer. Recommended to use this in latest frame for better performance.\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param documentConfiguration Analyzer configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap documentConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            promise.resolve(FRAME_NULL.getStatusAndMessage());\n            return;\n        }\n\n        MLDocumentAnalyzer documentAnalyzer = HMSObjectCreator.getInstance()\n            .createDocumentAnalyzer(documentConfiguration);\n        documentAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlDocument -> {\n            if (isStop) {\n                stopSilent(documentAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getDocumentRecognitionResult(mlDocument),\n                promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(documentAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param documentAnalyzer analyzer\n     */\n    private void stopSilent(MLDocumentAnalyzer documentAnalyzer) {\n        try {\n            documentAnalyzer.stop();\n            Log.i(getName(), \"MLDocumentAnalyzer stopped\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLDocumentAnalyzer not stopped because :\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSFormRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionAnalyzer;\nimport com.huawei.hms.mlsdk.fr.MLFormRecognitionConstant;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.google.gson.JsonObject;\n\nimport org.json.JSONException;\n\nimport java.io.IOException;\n\npublic class HMSFormRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSFormRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSFormRecognition.class.getSimpleName(), null);\n    }\n\n    /**\n     * Asynchronous calling entry of form recognition.\n     *\n     * @param isStop if true stops analyzer and releases resources silently. Using in the last frame recognition recommended\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLFormRecognitionAnalyzer formRecognitionAnalyzer = HMSObjectCreator.getInstance()\n            .createFormRecognizerAnalyzer();\n        formRecognitionAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(jsonObject -> {\n            if (isStop) {\n                stopAnalyzer(formRecognitionAnalyzer);\n            }\n\n            try {\n                handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getFormRecognitionResult(jsonObject),\n                    promise);\n            } catch (JSONException e) {\n                handleResult(\"asyncAnalyzeFrame\", e, promise);\n            }\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopAnalyzer(formRecognitionAnalyzer);\n            }\n\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Synchronous calling entry of form recognition.\n     *\n     * @param isStop if true stops analyzer and releases resources silently. Using in the last frame recognition recommended\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLFormRecognitionAnalyzer formRecognitionAnalyzer = HMSObjectCreator.getInstance()\n            .createFormRecognizerAnalyzer();\n        SparseArray<JsonObject> recognizeResult = formRecognitionAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopAnalyzer(formRecognitionAnalyzer);\n        }\n\n        if (recognizeResult != null\n            && recognizeResult.get(0).get(\"retCode\").getAsInt() == MLFormRecognitionConstant.SUCCESS) {\n            try {\n                handleResult(\"analyzeFrame\",\n                    HMSResultCreator.getInstance().getSyncFormRecognitionResult(recognizeResult), promise);\n            } catch (JSONException e) {\n                handleResult(\"analyzeFrame\", e, promise);\n            }\n        } else {\n            handleResult(\"analyzeFrame\", FAILURE, promise);\n        }\n    }\n\n    private void stopAnalyzer(MLFormRecognitionAnalyzer formRecognitionAnalyzer) {\n        try {\n            formRecognitionAnalyzer.stop();\n            Log.i(getName(), \"MLFormRecognitionAnalyzer stop\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLFormRecognitionAnalyzer stop :\" + e.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSGeneralCardRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.GCR_IMAGE_SAVE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.GCR_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CURRENT_ACTIVITY_NULL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\n\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCapture;\nimport com.huawei.hms.mlplugin.card.gcr.MLGcrCaptureResult;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\npublic class HMSGeneralCardRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSGeneralCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSGeneralCardRecognition.class.getSimpleName(), GCR_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Enables the plug-in for recognizing general cards in camera streams.\n     *\n     * @param language language code\n     * @param uiConfiguration ui configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void capturePreview(String language, ReadableMap uiConfiguration, final Promise promise) {\n        startMethodExecTimer(\"capturePreview\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"capturePreview\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, uiConfiguration);\n        gcrManager.capturePreview(currentActivity, null, callbackResult(promise));\n    }\n\n    /**\n     * Enables the plug-in for taking a photo of a general card and recognizing the general card on the photo.\n     *\n     * @param language language code\n     * @param uiConfiguration ui configuration\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void capturePhoto(String language, ReadableMap uiConfiguration, final Promise promise) {\n        startMethodExecTimer(\"capturePhoto\");\n        Activity currentActivity = getCurrentActivity();\n\n        if (currentActivity == null) {\n            handleResult(\"capturePhoto\", CURRENT_ACTIVITY_NULL, promise);\n            return;\n        }\n\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, uiConfiguration);\n        gcrManager.capturePhoto(currentActivity, null, callbackResult(promise));\n    }\n\n    /**\n     * Enables the plug-in for recognizing static images of general cards.\n     *\n     * @param language language code\n     * @param imageUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureImage(String language, String imageUri, final Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        MLGcrCapture gcrManager = HMSObjectCreator.getInstance().createGcrCapture(language, null);\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            gcrManager.captureImage(bitmap, null, callbackResult(promise));\n        } catch (IOException e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @return MLGcrCapture.Callback\n     */\n    private MLGcrCapture.Callback callbackResult(Promise promise) {\n        return new MLGcrCapture.Callback() {\n            @Override\n            public int onResult(MLGcrCaptureResult mlGcrCaptureResult, Object o) {\n                if (mlGcrCaptureResult == null) {\n                    return MLGcrCaptureResult.CAPTURE_CONTINUE;\n                }\n\n                HMSBackgroundTasks.getInstance()\n                    .saveImageAndGetUri(getContext(), mlGcrCaptureResult.cardBitmap)\n                    .addOnSuccessListener(\n                        s -> sendEvent(GCR_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getStringResult(s)))\n                    .addOnFailureListener(\n                        e -> sendEvent(GCR_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n\n                handleResult(\"MLGcrCapture.Callback\",\n                    HMSResultCreator.getInstance().getGeneralCardRecognitionSuccessResult(mlGcrCaptureResult), promise);\n                return MLGcrCaptureResult.CAPTURE_STOP;\n            }\n\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLGcrCapture.Callback\", CANCEL, promise);\n            }\n\n            @Override\n            public void onFailure(int i, Bitmap bitmap) {\n                handleResult(\"MLGcrCapture.Callback\", FAILURE.getStatusAndMessage(i, null), promise);\n            }\n\n            @Override\n            public void onDenied() {\n                handleResult(\"MLGcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSIDCardRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.IDCARD_IMAGE_SAVE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.IDCARD_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCapture;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.icr.cn.MLCnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\n\nimport java.io.IOException;\n\npublic class HMSIDCardRecognition extends HMSBase {\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSIDCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSIDCardRecognition.class.getSimpleName(), IDCARD_PLUGIN_CONSTANTS);\n    }\n\n    @ReactMethod\n    public void captureCamera(boolean save, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"captureCamera\");\n        try {\n            Activity currentActivity = getCurrentActivity();\n\n            MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()\n                    .setFront(isFront)\n                    .create();\n            MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.capture(callbackResult(save, isFront, promise), currentActivity);\n        } catch (Exception e) {\n            handleResult(\"captureCamera\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void captureImage(String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n\n            MLCnIcrCaptureConfig config = new MLCnIcrCaptureConfig.Factory()\n                    .setFront(isFront)\n                    .create();\n            MLCnIcrCapture icrCapture = MLCnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.captureImage(bitmap, callbackResult(false, isFront, promise));\n        } catch (Exception e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void asyncAnalyzerImageOnDevice(boolean isStop, String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"CN\", isFront);\n            Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);\n\n            task.addOnSuccessListener(mlIdCard -> {\n                // Recognition success.\n                WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException e) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", wm, promise);\n            }).addOnFailureListener(e -> {\n                // Recognition failure.\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n            });\n        } catch (Exception e) {\n            handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void analyzerImageOnDevice(boolean isStop, String imageUri, boolean isFront, Promise promise) {\n        startMethodExecTimer(\"analyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"CN\", isFront);\n            SparseArray<MLIdCard> array = analyzer.analyseFrame(frame);\n            int key = array.keyAt(0);\n            MLIdCard mlIdCard = array.get(key);\n            WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n            if (isStop) {\n                try {\n                    analyzer.stop();\n                } catch (IOException ex) {\n                    handleResult(\"analyzerImageOnDevice\", ex, promise);\n                }\n            }\n            handleResult(\"analyzerImageOnDevice\", wm, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @param isFront Is front side id card\n     * @param save save to device\n     * @return MLCnIcrCapture.Callback\n     */\n    private MLCnIcrCapture.CallBack callbackResult(boolean save, boolean isFront, Promise promise) {\n        return new MLCnIcrCapture.CallBack() {\n            // Identify successful processing.\n            @Override\n            public void onSuccess(MLCnIcrCaptureResult idCardResult) {\n                Log.i(\"SUCCESS\", \"IdCallBack onRecSuccess\");\n                if (idCardResult == null) {\n                    Log.i(\"ERR\", \"IdCallBack onRecSuccess idCardResult is null\");\n                    return;\n                }\n\n                if (save) {\n                    HMSBackgroundTasks.getInstance()\n                            .saveImageAndGetUri(getContext(), idCardResult.cardBitmap)\n                            .addOnSuccessListener(\n                                    s -> sendEvent(IDCARD_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getIDCardImage(s, isFront)))\n                            .addOnFailureListener(\n                                    e -> sendEvent(IDCARD_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n                }\n\n                WritableMap cardResultFront = HMSResultCreator.getInstance().getFormatIdCardResult(idCardResult, isFront);\n                handleResult(\"MLCnIcrCapture.Callback\", cardResultFront, promise);\n            }\n\n            // User cancellation processing.\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLCnIcrCapture.Callback\", CANCEL, promise);\n            }\n\n            // Identify failure processing.\n            @Override\n            public void onFailure(int retCode, Bitmap bitmap) {\n                handleResult(\"MLCnIcrCapture.Callback\", FAILURE.getStatusAndMessage(retCode, null), promise);\n            }\n\n            // Camera unavailable processing, the reason that the camera is unavailable is generally that the user has not been granted camera permissions.\n            @Override\n            public void onDenied() {\n                handleResult(\"MLCnIcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSTextRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.TEXT_SETTING_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.ANALYZER_NOT_AVAILABLE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FRAME_NULL;\n\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.mlsdk.text.MLText;\nimport com.huawei.hms.mlsdk.text.MLTextAnalyzer;\nimport com.huawei.hms.rn.mltext.HMSBase;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.io.IOException;\n\nimport javax.annotation.Nonnull;\n\npublic class HMSTextRecognition extends HMSBase {\n\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSTextRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSTextRecognition.class.getSimpleName(), TEXT_SETTING_CONSTANTS);\n    }\n\n    /**\n     * Runs analyze operation asynchronously\n     *\n     * @param isRemote for analyzer setting on-cloud or on-device\n     * @param isStop resources for analyzer. Recommended to use this in latest frame\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param analyzerConfiguration Analyzer configuration for on-cloud or on-device\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void asyncAnalyzeFrame(boolean isRemote, boolean isStop, ReadableMap frameConfiguration,\n        ReadableMap analyzerConfiguration, final Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"asyncAnalyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextAnalyzer textAnalyzer = HMSObjectCreator.getInstance()\n            .createTextAnalyzer(analyzerConfiguration, isRemote);\n        textAnalyzer.asyncAnalyseFrame(frame).addOnSuccessListener(mlText -> {\n            if (isStop) {\n                stopSilent(textAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", HMSResultCreator.getInstance().getTextRecognitionResult(mlText), promise);\n        }).addOnFailureListener(e -> {\n            if (isStop) {\n                stopSilent(textAnalyzer);\n            }\n            handleResult(\"asyncAnalyzeFrame\", e, promise);\n        });\n    }\n\n    /**\n     * Runs analyze operation synchronously\n     *\n     * @param isStop if true releases resources for analyzer. Recommended to use this in latest frame for better performance\n     * @param frameConfiguration MLFrame configuration parameters\n     * @param analyzerConfiguration Analyzer configuration to create on-device analyzer\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void analyzeFrame(boolean isStop, ReadableMap frameConfiguration, ReadableMap analyzerConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"analyzeFrame\");\n        MLFrame frame = HMSObjectCreator.getInstance().createFrame(frameConfiguration, getContext());\n\n        if (frame == null) {\n            handleResult(\"analyzeFrame\", FRAME_NULL, promise);\n            return;\n        }\n\n        MLTextAnalyzer textAnalyzer = HMSObjectCreator.getInstance()\n            .createTextAnalyzer(analyzerConfiguration, getContext());\n\n        if (!textAnalyzer.isAvailable()) {\n            handleResult(\"analyzeFrame\", ANALYZER_NOT_AVAILABLE, promise);\n            return;\n        }\n\n        SparseArray<MLText.Block> result = textAnalyzer.analyseFrame(frame);\n\n        if (isStop) {\n            stopSilent(textAnalyzer);\n        }\n\n        handleResult(\"analyzeFrame\", HMSResultCreator.getInstance().getTextRecognitionResult(result), promise);\n    }\n\n    /**\n     * Releases resources of analyzer\n     *\n     * @param textAnalyzer analyzer\n     */\n    private void stopSilent(@Nonnull MLTextAnalyzer textAnalyzer) {\n        try {\n            textAnalyzer.stop();\n            Log.i(getName(), \"MLTextAnalyzer stop : OK\");\n        } catch (IOException e) {\n            Log.i(getName(), \"MLTextAnalyzer stop : \" + e.getMessage());\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/java/com/huawei/hms/rn/mltext/textrelatedservices/HMSVietnamCardRecognition.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.textrelatedservices;\n\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.ICRVN_IMAGE_SAVE;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSConstants.ICRVN_PLUGIN_CONSTANTS;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.CANCEL;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.DENY;\nimport static com.huawei.hms.rn.mltext.helpers.constants.HMSResults.FAILURE;\n\nimport android.app.Activity;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCapture;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureConfig;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureFactory;\nimport com.huawei.hms.mlplugin.card.icr.vn.MLVnIcrCaptureResult;\nimport com.huawei.hms.mlsdk.card.icr.MLIcrAnalyzer;\nimport com.huawei.hms.mlsdk.card.icr.MLIdCard;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.mltext.HMSBase;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSObjectCreator;\nimport com.huawei.hms.rn.mltext.helpers.creators.HMSResultCreator;\nimport com.huawei.hms.rn.mltext.helpers.utils.HMSBackgroundTasks;\n\nimport java.io.IOException;\n\npublic class HMSVietnamCardRecognition extends HMSBase {\n    /**\n     * Initializes module\n     *\n     * @param reactContext app context\n     */\n    public HMSVietnamCardRecognition(ReactApplicationContext reactContext) {\n        super(reactContext, HMSVietnamCardRecognition.class.getSimpleName(), ICRVN_PLUGIN_CONSTANTS);\n    }\n\n    /**\n     * Enables the plug-in for recognizing static images of vietnam id card.\n     *\n     * @param imageUri image uri\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureImage(String imageUri, Promise promise) {\n        startMethodExecTimer(\"captureImage\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n\n            MLVnIcrCaptureConfig config = new MLVnIcrCaptureConfig.Factory().create();\n            MLVnIcrCapture icrCapture = MLVnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.captureImage(bitmap, callbackResult(false, promise));\n        } catch (Exception e) {\n            handleResult(\"captureImage\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void asyncAnalyzerImageOnDevice(boolean isStop, String imageUri, Promise promise) {\n        startMethodExecTimer(\"asyncAnalyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"VN\", true);\n            Task<MLIdCard> task = analyzer.asyncAnalyseFrame(frame);\n            task.addOnSuccessListener(mlIdCard -> {\n                // Recognition success.\n                WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", wm, promise);\n            }).addOnFailureListener(e -> {\n                // Recognition failure.\n                if (isStop) {\n                    try {\n                        analyzer.stop();\n                    } catch (IOException ex) {\n                        handleResult(\"asyncAnalyzerImageOnDevice\", ex, promise);\n                    }\n                }\n                handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n            });\n        } catch (Exception e) {\n            handleResult(\"asyncAnalyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    @ReactMethod\n    public void analyzerImageOnDevice(boolean isStop, String imageUri, Promise promise) {\n        startMethodExecTimer(\"analyzerImageOnDevice\");\n        try {\n            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), Uri.parse(imageUri));\n            MLFrame frame = MLFrame.fromBitmap(bitmap);\n\n            MLIcrAnalyzer analyzer = HMSObjectCreator.getInstance().createICRAnalyzer(\"VN\", true);\n\n            SparseArray<MLIdCard> array = analyzer.analyseFrame(frame);\n            int key = array.keyAt(0);\n            MLIdCard mlIdCard = array.get(key);\n            WritableMap wm = HMSResultCreator.getInstance().getICRResult(mlIdCard, true);\n            handleResult(\"analyzerImageOnDevice\", wm, promise);\n        } catch (Exception e) {\n            handleResult(\"analyzerImageOnDevice\", e, promise);\n        }\n    }\n\n    /**\n     * Enables the plugin to recognize the Vietnamese ID card with the camera.\n     *\n     * @param save Save capture\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void captureCamera(boolean save, Promise promise) {\n        startMethodExecTimer(\"captureCamera\");\n        Activity currentActivity = getCurrentActivity();\n\n        try {\n            MLVnIcrCaptureConfig config = new MLVnIcrCaptureConfig.Factory().create();\n            MLVnIcrCapture icrCapture = MLVnIcrCaptureFactory.getInstance().getIcrCapture(config);\n            icrCapture.capture(callbackResult(save, promise), currentActivity);\n        } catch (Exception e) {\n            handleResult(\"captureCamera\", e, promise);\n        }\n    }\n\n    /**\n     * Result Callback\n     *\n     * @param promise A Promise that resolves a result object\n     * @param save Save capture\n     * @return MLVnIcrCapture.CallBack\n     */\n    private MLVnIcrCapture.CallBack callbackResult(boolean save, Promise promise) {\n        return new MLVnIcrCapture.CallBack() {\n            // Identify successful processing.\n            @Override\n            public void onSuccess(MLVnIcrCaptureResult idCardResult) {\n                Log.i(\"SUCCESS\", \"IdCallBack onRecSuccess\");\n                if (idCardResult == null) {\n                    Log.i(\"ERR\", \"IdCallBack onRecSuccess idCardResult is null\");\n                    return;\n                }\n\n                if (save) {\n                    HMSBackgroundTasks.getInstance()\n                            .saveImageAndGetUri(getContext(), idCardResult.getCardBitmap())\n                            .addOnSuccessListener(\n                                    s -> sendEvent(ICRVN_IMAGE_SAVE, \"onResult\", HMSResultCreator.getInstance().getStringResult(s)))\n                            .addOnFailureListener(\n                                    e -> sendEvent(ICRVN_IMAGE_SAVE, \"onResult\", FAILURE.getStatusAndMessage(null, e.getMessage())));\n                }\n\n                WritableMap cardResultFront = HMSResultCreator.getInstance().getVNFormatIdCardResult(idCardResult);\n                handleResult(\"MLVnIcrCapture.Callback\", cardResultFront, promise);\n            }\n\n            // User cancellation processing.\n            @Override\n            public void onCanceled() {\n                handleResult(\"MLVnIcrCapture.Callback\", CANCEL, promise);\n            }\n\n            // Identify failure processing.\n            @Override\n            public void onFailure(int retCode, Bitmap bitmap) {\n                handleResult(\"MLVnIcrCapture.Callback\", FAILURE.getStatusAndMessage(retCode, null), promise);\n            }\n\n            // Camera unavailable processing, the reason that the camera is unavailable is generally that the user has not been granted camera permissions.\n            @Override\n            public void onDenied() {\n                handleResult(\"MLVnIcrCapture.Callback\", DENY, promise);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/res/layout/activity_custom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <FrameLayout\n        android:id=\"@+id/rim\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:background=\"@color/viewfinder_color\"></FrameLayout>\n\n    <RelativeLayout\n        android:id=\"@+id/title_layout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_centerInParent=\"true\"\n        android:layout_marginTop=\"100dp\">\n\n        <TextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"20dp\"\n            android:layout_alignParentTop=\"true\"\n            android:layout_centerHorizontal=\"true\"\n            android:layout_marginTop=\"20dp\"\n            android:layout_marginBottom=\"20dp\"\n            android:maxLength=\"70\"\n            android:text=\"Place the card within the frame\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"#FFFFFF\"\n            android:textSize=\"15sp\"\n            android:textStyle=\"bold\" />\n\n        <FrameLayout\n            android:id=\"@+id/card_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"></FrameLayout>\n\n        <ImageView\n            android:id=\"@+id/imageButton2\"\n            android:layout_width=\"29dp\"\n            android:layout_height=\"29dp\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"@drawable/flash_light_off\"\n            android:scaleType=\"fitXY\" />\n    </RelativeLayout>\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"56dp\"\n        android:gravity=\"center_vertical\"\n        android:layout_marginTop=\"20dp\">\n\n        <ImageView\n            android:id=\"@+id/back_img\"\n            android:layout_width=\"48dp\"\n            android:layout_height=\"48dp\"\n            android:padding=\"12dp\"\n            android:layout_alignParentStart=\"true\"\n            android:layout_marginStart=\"12dp\"\n            android:layout_marginTop=\"4dp\"\n            android:gravity=\"center\"\n            android:src=\"@drawable/back\" />\n    </RelativeLayout>\n\n</RelativeLayout>"
  },
  {
    "path": "react-native-hms-mltext/android/src/main/res/values/color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"white\">#000000</color>\n    <color name=\"viewfinder_color\">#C0C0C0</color>\n</resources>"
  },
  {
    "path": "react-native-hms-mltext/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\ngradle-wrapper.jar\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\npackage-lock.json"
  },
  {
    "path": "react-native-hms-mltext/example/App.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image,LogBox } from 'react-native';\nimport { styles } from './src/Styles';\nimport StartPage from './src/StartPage';\nimport TextEmbedding from './src/HmsNaturalLanguageProcessingServices/TextEmbedding';\nimport TextRecognition from './src/HmsTextRelatedServices/TextRecognition';\nimport DocumentRecognition from './src/HmsTextRelatedServices/DocumentRecognition';\nimport BankCardRecognition from './src/HmsTextRelatedServices/BankCardRecognition';\nimport GeneralCardRecognition from './src/HmsTextRelatedServices/GeneralCardRecognition';\nimport IDCardRecognition from './src/HmsTextRelatedServices/IDCardRecognition';\nimport VietnamIDCardRecognition from './src/HmsTextRelatedServices/VietnamIDCardRecognition';\nimport FormRecognition from './src/HmsTextRelatedServices/FormRecognition';\nimport TextRecognitionLive from './src/HmsTextRelatedServices/TextRecognitionLive';\n\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'Hms React Native ML Text Kit Demo',\n    },\n    path: 'start',\n  },\n  TextEmbedding: {\n    screen: TextEmbedding,\n    navigationOptions: {\n      headerTitle: 'Text Embedding',\n    },\n    path: 'start/textembedding',\n  },\n  TextRecognition: {\n    screen: TextRecognition,\n    navigationOptions: {\n      headerTitle: 'Text Recognition',\n    },\n    path: 'start/textrecognition',\n  },\n  DocumentRecognition: {\n    screen: DocumentRecognition,\n    navigationOptions: {\n      headerTitle: 'Document Recognition',\n    },\n    path: 'start/documentrecognition',\n  },\n  BankCardRecognition: {\n    screen: BankCardRecognition,\n    navigationOptions: {\n      headerTitle: 'Bank Card Recognition',\n    },\n    path: 'start/bankcardrecognition',\n  },\n  GeneralCardRecognition: {\n    screen: GeneralCardRecognition,\n    navigationOptions: {\n      headerTitle: 'General Card Recognition',\n    },\n    path: 'start/generalcardrecognition',\n  },\n  IDCardRecognition: {\n    screen: IDCardRecognition,\n    navigationOptions: {\n      headerTitle: 'ID Card Recognition',\n    },\n    path: 'start/idcardrecognition',\n  },\n  VietnamIDCardRecognition: {\n    screen: VietnamIDCardRecognition,\n    navigationOptions: {\n      headerTitle: 'Vietnam ID Card Recognition',\n    },\n    path: 'start/vietnamidcardrecognition',\n  },\n  FormRecognition: {\n    screen: FormRecognition,\n    navigationOptions: {\n      headerTitle: 'Form Recognition',\n    },\n    path: 'start/formrecognition',\n  },\n  TextRecognitionLive: {\n    screen: TextRecognitionLive,\n    navigationOptions: {\n      headerTitle: 'Text Recognition Live',\n    },\n    path: 'start/textrecognitionlive',\n  },\n};\n\nLogBox.ignoreLogs([\"EventEmitter\"]);\n\nexport default class App extends Component {\n  state = {\n    pageItem: {\n      screen: StartPage,\n      navigationOptions: {\n        headerTitle: 'Hms React Native ML Text Kit Demo',\n      },\n      path: 'start',\n    },\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/README.md",
    "content": "# React-Native HMS ML Text - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native ML Text Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID.\n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm install\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS ML Text - Demo is licensed under [Apache 2.0 license](../LICENSE)\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile: \"index.js\",\n        enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n        multiDexEnabled true\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true;\n            v2SigningEnabled true;\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n\n    implementation \"com.facebook.react:react-native:+\"\n\timplementation project(\":react-native-hms-mltext\")\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.300'\n\n    implementation 'com.android.support:multidex:1.0.3'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.mltext.demo\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_AUDIO\" />\n    <uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />\n\n\n    <application\n            android:name=\"com.huawei.hms.rn.mltext.demo.MainApplication\"\n            android:allowBackup=\"false\"\n            android:icon=\"@mipmap/logo\"\n            android:label=\"RN ML Demo\"\n            android:roundIcon=\"@mipmap/logo\"\n            android:theme=\"@style/AppTheme\"\n            android:largeHeap=\"true\"\n            android:requestLegacyExternalStorage=\"true\">\n\n\n        <activity\n                android:name=\"com.huawei.hms.rn.mltext.demo.MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"RN ML Text Demo\"\n                android:launchMode=\"singleTask\"\n                android:exported=\"true\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/src/main/java/com/huawei/hms/rn/mltext/demo/MainActivity.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.mltext.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/src/main/java/com/huawei/hms/rn/mltext/demo/MainApplication.java",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.huawei.hms.rn.mltext.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.300'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        google()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Aug 02 14:07:06 TRT 2023\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx4096m\n"
  },
  {
    "path": "react-native-hms-mltext/example/android/settings.gradle",
    "content": "rootProject.name = 'com.huawei.hms.rn.mltext.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-mltext/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.mltext.demo\",\n  \"displayName\": \"HMS RN ML TEXT DEMO\"\n}"
  },
  {
    "path": "react-native-hms-mltext/example/babel.config.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-mltext/example/index.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-mltext/example/metro.config.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-mltext/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mltext-demo\",\n  \"description\": \"React Native HMS ML Text Kit Demo\",\n  \"version\": \"3.12.0-301\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"@hmscore/react-native-hms-mltext\": \"3.12.0-301\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"react-native-document-picker\": \"4.1.0\",\n    \"react-native-image-picker\": \"5.6.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsNaturalLanguageProcessingServices/TextEmbedding.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  ScrollView\n} from 'react-native';\nimport { styles } from '../Styles';\nimport { HMSApplication, HMSTextEmbedding } from '@hmscore/react-native-hms-mltext';\n\nconst initialState = {\n  isSentencevector: false,\n  isSentenceSimilarity: false,\n  isAnalyzeSimilarWords: false,\n  isAnalyzeWordVector: false,\n  isAnalyzeWordSimilarity: false,\n  isAnalyzeWordVectorBatch: false,\n  isGetVocabularyVersion: false,\n  sentence: '',\n  sentenceSecond: '',\n  word: '',\n  wordSecond: '',\n  result: '',\n};\n\nexport default class TextEmbedding extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = initialState;\n  }\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  reset = () => {\n    this.setState(initialState);\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({\n        result: result.result.toString()\n      });\n    }\n    else {\n      this.setState({ result: result.message });\n    }\n  }\n\n  async analyzeSentenceVector() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSentenceVector(this.state.sentence, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeSentencesSimilarity() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSentencesSimilarity(this.state.sentence, this.state.sentenceSecond, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeSimilarWords() {\n    try {\n      var result = await HMSTextEmbedding.analyzeSimilarWords(this.state.word, 10, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordVector() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordVector(this.state.word, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordsSimilarity() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordsSimilarity(this.state.word, this.state.wordSecond, HMSTextEmbedding.LANGUAGE_EN);\n      this.parseResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeWordVectorBatch() {\n    try {\n      var result = await HMSTextEmbedding.analyzeWordVectorBatch(['hello', 'huawei', 'phone'], HMSTextEmbedding.LANGUAGE_EN);\n      console.log(result);\n      this.setState({\n        result: \"See Console log for result\"\n      });\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getVocabularyVersion() {\n    try {\n      var result = await HMSTextEmbedding.getVocabularyVersion(HMSTextEmbedding.LANGUAGE_EN);\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({\n          result: \"Dimension :\" + result.result.dictionaryDimension + \"\\n\" +\n            \"Size :\" + result.result.dictionarySize + \" \\n\" +\n            \"Version No :\" + result.result.versionNo\n        });\n      }\n      else {\n        this.setState({ result: result.message });\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Choose Method</Text>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isSentencevector: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Sentence Vector </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isSentenceSimilarity: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Sentences Similarity </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeSimilarWords: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Similar Words </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordVector: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Word Vector </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordSimilarity: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Words Similarity </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isAnalyzeWordVectorBatch: true }) }}>\n            <Text style={styles.startButtonLabel}> Analyze Word Vector Batch </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => { this.reset(); this.setState({ isGetVocabularyVersion: true }) }}>\n            <Text style={styles.startButtonLabel}> Get Vocabulary Version </Text>\n          </TouchableOpacity>\n        </View>\n\n        {this.state.isSentencevector ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentence: text })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSentenceVector()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isSentenceSimilarity ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentence: text.trim() })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ sentenceSecond: text.trim() })}\n              placeholder=\"Second Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSentencesSimilarity()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeSimilarWords ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Your Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeSimilarWords()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordVector ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Sentence\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordVector()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordSimilarity ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ word: text.trim() })}\n              placeholder=\"Your Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customInput}\n              onChangeText={text => this.setState({ wordSecond: text.trim() })}\n              placeholder=\"Your Second Word\"\n              multiline={false}\n              editable={true}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordsSimilarity()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isAnalyzeWordVectorBatch ?\n          <View>\n            <TextInput\n              style={styles.customInput}\n              placeholder=\"['hello','huawei','phone']\"\n              multiline={false}\n              editable={false}\n            />\n\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.analyzeWordVectorBatch()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n\n        {this.state.isGetVocabularyVersion ?\n          <View>\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Result\"\n              multiline={true}\n              editable={false}\n            />\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={() => this.getVocabularyVersion()}\n              >\n                <Text style={styles.startButtonLabel}> START </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View></View>\n        }\n      </ScrollView >\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsOtherServices/Helper.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HMSLensEngine, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { ToastAndroid } from 'react-native';\nimport * as ImagePicker from \"react-native-image-picker\"\n\nconst options = {\n  title: 'Choose Method',\n  storageOptions: {\n    skipBackup: true,\n    path: 'images',\n  },\n};\n\nexport async function createLensEngine(analyzer, analyzerConfig) {\n  try {\n    var result = await HMSLensEngine.createLensEngine(\n      analyzer,\n      analyzerConfig,\n      {\n        width: 480,\n        height: 540,\n        lensType: HMSLensEngine.BACK_LENS,\n        automaticFocus: true,\n        fps: 20.0,\n        flashMode: HMSLensEngine.FLASH_MODE_OFF,\n        focusMode: HMSLensEngine.FOCUS_MODE_CONTINUOUS_VIDEO\n      }\n    )\n    this.renderResult(result, \"Lens engine creation successfull\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function runWithView() {\n  try {\n    var result = await HMSLensEngine.runWithView();\n    this.renderResult(result, \"Lens engine running\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function close() {\n  try {\n    var result = await HMSLensEngine.close();\n    this.renderResult(result, \"Lens engine closed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function doZoom(scale) {\n  try {\n    var result = await HMSLensEngine.doZoom(scale);\n    this.renderResult(result, \"Lens engine zoomed\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function photograph() {\n  try {\n    var result = await HMSLensEngine.photograph();\n    this.renderResult(result, \"Lens engine photo\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function release() {\n  try {\n    var result = await HMSLensEngine.release();\n    this.renderResult(result, \"Lens engine released\");\n  } catch (error) {\n    console.log(error);\n  }\n}\n\nexport async function setApiKey() {\n  try {\n    var result = await HMSApplication.setApiKey(\"<your_API_key>\");\n    this.renderResult(result, \"Api key set\");\n  } catch (e) {\n    console.log(e);\n  }\n}\n\nexport async function setAccessToken() {\n  try {\n    var result = await HMSApplication.setAccessToken(\"<your_access_token>\");\n    this.renderResult(result, \"Access Token set\");\n  } catch (e) {\n    console.log(e);\n  }\n} \n\nexport function showImagePicker() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.launchImageLibrary(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve(response.assets[0].uri);\n        }\n      });\n    }\n  );\n  return result;\n}\n\nexport function showImagePickerCustom() {\n  var result = new Promise(\n    function (resolve, reject) {\n      ImagePicker.launchImageLibrary(options, (response) => {\n        if (response.didCancel) {\n          resolve('');\n        } else if (response.error) {\n          resolve('');\n        } else {\n          resolve({uri: response.assets[0].uri, width: response.width, height: response.height});\n        }\n      });\n    }\n  );\n  return result;\n}\n\nrenderResult = (result, message) => {\n  console.log(result);\n  if (result.status == HMSApplication.SUCCESS) {\n    ToastAndroid.showWithGravity(message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n  else {\n    ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.BOTTOM);\n  }\n}\n\n"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/BankCardRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSBankCardRecognitionCustomView, HMSBankCardRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\n\nexport default class BankCardRecognition extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSBankCardRecognition);\n\n    this.eventEmitter.addListener(HMSBankCardRecognition.BCR_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ numberBitmap: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSBankCardRecognition.BCR_IMAGE_SAVE);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      numberBitmap: '',\n      expire: '',\n      issuer: '',\n      number: '',\n      organization: '',\n      type: ''\n    };\n  }\n\n  getBcrSetting = () => {\n    return {\n      orientation: HMSBankCardRecognition.ORIENTATION_PORTRAIT,\n      resultType: HMSBankCardRecognition.RESULT_ALL,\n      recMode: HMSBankCardRecognition.SIMPLE_MODE\n    };\n  }\n\n  getBcrSettingCustom = () => {\n    return {\n      isTitleAvailable:true,\n      title: \"Place the card within the frame\",\n      heightFactor:0.8,\n      widthFactor:0.6,\n      isFlashAvailable: true,\n      resultType: HMSBankCardRecognition.RESULT_ALL,\n      recMode: HMSBankCardRecognition.SIMPLE_MODE\n    };\n  }\n\n  async captureFrame() {\n    try {\n      var result = await HMSBankCardRecognition.captureFrame(this.getBcrSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        if (result.errorCode == HMSBankCardRecognition.ERROR_CODE_INIT_CAMERA_FAILED) {\n          ToastAndroid.showWithGravity('Error Code : ' + result.errorCode.toString() + '\\n Error Message : Camera failed', ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          this.setState({\n            expire: result.expire,\n            issuer: result.issuer,\n            number: result.number,\n            organization: result.organization,\n            type: result.type\n          });\n        }\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async captureFrameCustomView() {\n    try {\n      var result = await HMSBankCardRecognitionCustomView.startCustomizedView(this.getBcrSettingCustom());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        if (result.errorCode == HMSBankCardRecognition.ERROR_CODE_INIT_CAMERA_FAILED) {\n          ToastAndroid.showWithGravity('Error Code : ' + result.errorCode.toString() + '\\n Error Message : Camera failed', ToastAndroid.SHORT, ToastAndroid.CENTER);\n        }\n        else {\n          this.setState({\n            expire: result.expire,\n            issuer: result.issuer,\n            number: result.number,\n            organization: result.organization,\n            type: result.type\n          });\n        }\n      }\n      else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startBankCardRecognition = () => {\n    this.setState({\n      expire: 'Recognizing ... ',\n      issuer: 'Recognizing ... ',\n      number: 'Recognizing ... ',\n      organization: 'Recognizing ... ',\n      type: 'Recognizing ... '\n    }, () => {\n      this.captureFrame();\n    });\n  }\n\n  startBankCardRecognitionCustom = () => {\n    this.setState({\n      expire: 'Recognizing ... ',\n      issuer: 'Recognizing ... ',\n      number: 'Recognizing ... ',\n      organization: 'Recognizing ... ',\n      type: 'Recognizing ... '\n    }, () => {\n      this.captureFrameCustomView();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Recognition Results</Text>\n        <View style={styles.containerCenter}>\n          {this.state.numberBitmap !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={this.state.numberBitmap}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.expire}\n          placeholder=\"Expire\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.issuer}\n          placeholder=\"Issuer\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.number}\n          placeholder=\"Number\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.organization}\n          placeholder=\"Organization\"\n          multiline={true}\n          editable={false}\n        />\n\n        <TextInput\n          style={styles.customInput}\n          value={this.state.type}\n          placeholder=\"Type\"\n          multiline={true}\n          editable={false}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startBankCardRecognition.bind(this)}>\n            <Text style={styles.startButtonLabel}> Start BCR </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startBankCardRecognitionCustom.bind(this)}>\n            <Text style={styles.startButtonLabel}> Start BCR Custom View </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/DocumentRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { Text, View, ScrollView, TextInput, TouchableOpacity, Image } from 'react-native';\nimport { HMSDocumentRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class DocumentRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getDocumentConfiguration = () => {\n    return {\n      borderType: HMSDocumentRecognition.NGON,\n      isFingerPrintEnabled: false,\n      languageList: [HMSDocumentRecognition.ENGLISH, HMSDocumentRecognition.CHINESE]\n    }\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      isAnalyzeEnabled: true,\n    }, () => {\n      this.asyncAnalyzeFrame();\n    });\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSDocumentRecognition.asyncAnalyzeFrame(\n        true,\n        this.getFrameConfiguration(),\n        this.getDocumentConfiguration()\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  async createDocumentAnalyzer() {\n    try {\n      var result = await HMSDocumentRecognition.createDocumentAnalyzer(\n        true,\n        this.getFrameConfiguration(),\n        this.getDocumentConfiguration()\n      );\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={this.startAnalyze.bind(this)}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> Start Recognition </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/FormRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image\n} from 'react-native';\nimport { HMSFormRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class FormRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      result: '',\n      isAnalyzeEnabled: false\n    };\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSFormRecognition.asyncAnalyzeFrame(true, this.getFrameConfiguration());\n      this.handleResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async analyzeFrame() {\n    try {\n      var result = await HMSFormRecognition.analyzeFrame(true, this.getFrameConfiguration());\n      this.handleResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  startAnalyze = (isAsync) => {\n    this.setState({\n      result: 'Recognizing ... ',\n      isAnalyzeEnabled: true,\n    }, () => {\n      isAsync ? this.asyncAnalyzeFrame() : this.analyzeFrame();\n    });\n  }\n\n  handleResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      this.setState({ result: \"Success. Please See Debug Log for detailed table content result.\" });\n    }\n    else {\n      this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message });\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={this.state.result == '' ? false : true} />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(true)}\n            disabled={this.state.imageUri == '' || this.state.isAnalyzeEnabled ? true : false}>\n            <Text style={styles.startButtonLabel}> ASYNC Recognition</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze(false)}\n            disabled={this.state.imageUri == '' || this.state.isAnalyzeEnabled ? true : false}>\n            <Text style={styles.startButtonLabel}> SYNC Recognition </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/GeneralCardRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  Image,\n  ToastAndroid,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSGeneralCardRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class GeneralCardRecognition extends React.Component {\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSGeneralCardRecognition);\n\n    this.eventEmitter.addListener(HMSGeneralCardRecognition.GCR_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ resultImage: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSGeneralCardRecognition.GCR_IMAGE_SAVE);\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      resultImage: '',\n      result: '',\n      isImage: false\n    };\n  }\n\n  parseGcrResult = (result) => {\n    console.log(result);\n    switch (result.status) {\n      case HMSApplication.SUCCESS:\n        this.setState({ result: result.stringValue });\n        break;\n      default:\n        this.setState({ result: result.message, imageUri: '' });\n        break;\n    }\n  }\n\n  getGcrCaptureUiConfig = () => {\n    return {\n      tipTextColor: HMSGeneralCardRecognition.GREEN,\n      scanBoxCornerColor: HMSGeneralCardRecognition.CYAN,\n      tipText: 'Align Edges...',\n      orientation: HMSGeneralCardRecognition.LANDSCAPE\n    }\n  }\n\n  async capturePreview() {\n    try {\n      var result = await HMSGeneralCardRecognition.capturePreview(\"en\", this.getGcrCaptureUiConfig());\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async capturePhoto() {\n    try {\n      var result = await HMSGeneralCardRecognition.capturePhoto(\"en\", this.getGcrCaptureUiConfig());\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async captureImage() {\n    try {\n      var result = await HMSGeneralCardRecognition.captureImage(\"en\", this.state.imageUri);\n      this.parseGcrResult(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  showImageRecognition = () => {\n    this.setState({ isImage: !this.state.isImage, result: '', imageUri: '', resultImage: '' });\n  }\n\n  startPreviewAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      imageUri: '',\n      resultImage: ''\n    }, () => {\n      this.capturePreview();\n    });\n  }\n\n  startPhotoAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      imageUri: '',\n      resultImage: ''\n    }, () => {\n      this.capturePhoto();\n    });\n  }\n\n  startImageAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ... ',\n      resultImage: ''\n    }, () => {\n      this.captureImage();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Choose Your Recognition Method</Text>\n\n        <View style={{ borderBottomWidth: 1, borderBottomColor: '#D3D3D3', alignSelf: 'center', width: '95%' }}>\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={this.state.isImage ? styles.startButtonclicked : styles.startButton}\n              onPress={() => { this.setState({ isImage: !this.state.isImage }) }}>\n              <Text style={styles.startButtonLabel}> Image </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={this.startPhotoAnalyze.bind(this)}\n              disabled={this.state.isImage ? true : false}>\n              <Text style={styles.startButtonLabel}> Capture Photo </Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.menuButton}>\n            <TouchableOpacity\n              style={styles.startButton}\n              onPress={this.startPreviewAnalyze.bind(this)}\n              disabled={this.state.isImage ? true : false}>\n              <Text style={styles.startButtonLabel}>Capture Preview </Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        {this.state.isImage ?\n          <View>\n            <View style={styles.containerCenter}>\n              <TouchableOpacity onPress={() => showImagePicker().then((uri) => this.setState({ imageUri: uri }))}\n                style={styles.startButton}>\n                <Text style={styles.startButtonLabel}>Select Image</Text>\n              </TouchableOpacity>\n              {this.state.imageUri !== '' &&\n                <Image\n                  style={styles.imageSelectView}\n                  source={{ uri: this.state.imageUri }}\n                />\n              }\n            </View>\n\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.startButton}\n                onPress={this.startImageAnalyze.bind(this)}\n                disabled={this.state.imageUri == '' ? true : false}>\n                <Text style={styles.startButtonLabel}> Start Analyze From Image </Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n          :\n          <View>\n          </View>\n        }\n\n        {this.state.result != '' ?\n          <View>\n            <View>\n              <Text style={styles.h1}>Live Recognition Results</Text>\n              <View style={styles.containerCenter}>\n                {this.state.resultImage !== '' &&\n                  <Image\n                    style={styles.imageSelectView}\n                    source={this.state.resultImage}\n                  />\n                }\n              </View>\n            </View>\n            <TextInput\n              style={styles.customEditBox2}\n              value={this.state.result}\n              placeholder=\"Recognition Result\"\n              multiline={true}\n              scrollEnabled={true}\n              editable={this.state.result == '' ? false : true} />\n          </View>\n          :\n          <View>\n          </View>}\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/IDCardRecognition.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSIDCardRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class IDCardRecognition extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      data: {\n        IDNum: \"\",\n        Name: \"\",\n        Sex: \"\",\n        ValidDate: \"\",\n        Address: \"\",\n        Nation: \"\",\n        Birthday: \"\",\n        Authority: \"\"\n      },\n      imageUriFront: \"\",\n      imageUriBack: \"\",\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSIDCardRecognition);\n\n    this.eventEmitter.addListener(HMSIDCardRecognition.IDCARD_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result.image }\n        if (event.result.isFront) {\n          this.setState({ imageUriFront: image });\n        } else {\n          this.setState({ imageUriBack: image });\n        }\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSIDCardRecognition.IDCARD_IMAGE_SAVE);\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  save = (obj) => {\n    this.state.data.IDNum = obj?.idNum || this.state.data.IDNum;\n    this.state.data.Name = obj?.name || this.state.data.Name;\n    this.state.data.Sex = obj?.sex || this.state.data.Sex;\n    this.state.data.ValidDate = obj?.validDate || this.state.data.ValidDate;\n    this.state.data.Address = obj?.address || this.state.data.Address;\n    this.state.data.Nation = obj?.nation || this.state.data.Nation;\n    if (obj?.birthday?.length == 8) {\n      obj.birthday = obj.birthday.substr(0, 4) + \"/\" + obj.birthday.substr(4, 2) + \"/\" + obj.birthday.substr(6, 2);\n    }\n    this.state.data.Birthday = obj?.birthday || this.state.data.birthday;\n    this.state.data.Authority = obj?.authority || this.state.data.Authority; \n\n    this.setState({});\n  }\n\n  startImageAnalyzer = async (isFront, onDevice, async) => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        let imgUpdate = {};\n        if (isFront) {\n          imgUpdate = { imageUriFront: { uri: result.uri }};\n        } else {\n          imgUpdate = { imageUriBack: { uri: result.uri }};\n        }\n        this.setState(imgUpdate, async () => { \n          let res = null;\n          if (!onDevice) {\n            res = await HMSIDCardRecognition.captureImage(result.uri, isFront)\n              .catch(e => e);\n          } else {\n            if (async) {\n              res = await HMSIDCardRecognition.asyncAnalyzerImageOnDevice(true, result.uri, isFront)\n                .catch(e => e);\n            } else {\n              res = await HMSIDCardRecognition.analyzerImageOnDevice(true, result.uri, isFront)\n                .catch(e => e);\n            }\n          }\n\n          console.log(res);\n          res = this.parseResult(res);\n          if (res)\n            this.save(res)\n        })\n      })\n  }\n\n  startCameraAnalyzer = async (isFront) => {\n    let res = await HMSIDCardRecognition.captureCamera(true, isFront)\n      .catch(e => e);\n    console.log(res);\n    res = this.parseResult(res);\n    if (res)\n      this.save(res)\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(true, true, false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          <Text style={{ fontWeight: 'bold' }}>Front Side</Text>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer(true)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n        {this.state.imageUriFront != \"\" &&\n          <Image\n            style={{ height: 200 }}\n            source={this.state.imageUriFront}\n            resizeMode=\"contain\"\n          />\n        }\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          <Text style={{ fontWeight: 'bold' }}>Back Side</Text>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer(false)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n        {this.state.imageUriBack != \"\" &&\n          <Image\n            style={{ height: 200, width: '100%' }}\n            source={this.state.imageUriBack}\n            resizeMode=\"contain\"\n          />\n        }\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.setState({data: {}, imageUriFront: \"\", imageUriBack: \"\"})}\n          >\n            <Text style={styles.startButtonLabel}> CLEAR </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.log}>\n          {this.getText(\"IDNum\")}\n          {this.getText(\"Name\")}\n          {this.getText(\"Sex\")}\n          {this.getText(\"Address\")}\n          {this.getText(\"Nation\")}\n          {this.getText(\"Birthday\")}\n          {this.getText(\"Authority\")}\n          {this.getText(\"ValidDate\")}\n        </View>\n      </ScrollView>\n    );\n  }\n\n  getText = (field) => {\n    if (!this.state.data[field]) return null;\n    return (\n      <View style={{ flexDirection: 'row' }}>\n        <Text>{field} : </Text>\n        <Text>{this.state.data[field]}</Text>\n      </View>\n    )\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/TextRecognition.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { Text, View, ScrollView, TextInput, TouchableOpacity, Switch, Image } from 'react-native';\nimport { HMSTextRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\nimport { showImagePicker } from '../HmsOtherServices/Helper';\n\nexport default class TextRecognition extends React.Component {\n\n  componentDidMount() { }\n\n  componentWillUnmount() { }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      isEnabled: false,\n      result: '',\n      resultSync: [],\n      isAnalyzeEnabled: false,\n    };\n  }\n\n  async asyncAnalyzeFrame() {\n    try {\n      var result = await HMSTextRecognition.asyncAnalyzeFrame(this.state.isEnabled, true, this.getFrameConfiguration(), this.getTextSetting());\n      console.log(result);\n      if (result.status == HMSApplication.SUCCESS) {\n        this.setState({ result: result.completeResult, isAnalyzeEnabled: false });\n      }\n      else {\n        this.setState({ result: 'Error Code : ' + result.status.toString() + '\\n Error Message :' + result.message, isAnalyzeEnabled: false });\n      }\n    } catch (e) {\n      console.log(e);\n      this.setState({ result: \"This is an \" + e, isAnalyzeEnabled: false });\n    }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    })\n  }\n\n  getTextSetting = () => {\n    var textRecognitionSetting;\n    if (this.state.isEnabled) {\n      textRecognitionSetting = {\n        textDensityScene: HMSTextRecognition.OCR_LOOSE_SCENE,\n        borderType: HMSTextRecognition.NGON,\n        languageList: [\"en\"]\n      }\n    }\n    else {\n      textRecognitionSetting = {\n        language: \"en\",\n        OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n      }\n    }\n    return textRecognitionSetting;\n  }\n\n  getFrameConfiguration = () => {\n    return { filePath: this.state.imageUri };\n  }\n\n  getAnalyzerConfiguration = () => {\n    return {\n      language: \"en\",\n      OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n    };\n  }\n\n  startAnalyze = () => {\n    this.setState({\n      result: 'Recognizing ...',\n      resultSync: [],\n      isAnalyzeEnabled: true,\n    }, () => {\n      this.asyncAnalyzeFrame();\n    });\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <View style={styles.viewdividedtwo}>\n          <View style={styles.itemOfView}>\n            <Text style={{ fontWeight: 'bold', fontSize: 15, alignSelf: \"center\" }}>\n              {\"RECOGNITION ASYNC: \" + (this.state.isEnabled ? 'ON-CLOUD' : 'ON-DEVICE')}\n            </Text>\n          </View>\n\n          <View style={styles.itemOfView3}>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.isEnabled ? \"#fffff\" : \"#ffff\"}\n              onValueChange={this.toggleSwitch.bind(this)}\n              value={this.state.isEnabled}\n              style={{ alignSelf: 'center' }}\n              disabled={this.state.isAnalyzeEnabled}\n            />\n          </View>\n        </View >\n\n        <View style={styles.containerCenter}>\n          <TouchableOpacity\n            onPress={() => { showImagePicker().then((result) => this.setState({ imageUri: result })) }}\n            disabled={this.state.isAnalyzeEnabled}\n            style={styles.startButton}>\n            <Text style={styles.startButtonLabel}>Select Image</Text>\n          </TouchableOpacity>\n          {this.state.imageUri !== '' &&\n            <Image\n              style={styles.imageSelectView}\n              source={{ uri: this.state.imageUri }}\n            />\n          }\n        </View>\n\n        <TextInput\n          style={styles.customEditBox2}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={true}\n          editable={(this.state.result == 'Recognizing ...' || this.state.result == '') ? false : true}\n        />\n\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.startAnalyze()}\n            disabled={this.state.imageUri == '' ? !this.state.isAnalyzeEnabled : this.state.isAnalyzeEnabled}>\n            <Text style={styles.startButtonLabel}> START ASYNC </Text>\n          </TouchableOpacity>\n        </View>\n\n      </ScrollView >\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/TextRecognitionLive.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  ScrollView,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  Dimensions,\n} from 'react-native';\nimport { createLensEngine, runWithView, close, release, doZoom, setApiKey } from '../HmsOtherServices/Helper';\nimport SurfaceView, { HMSTextRecognition, HMSLensEngine } from '@hmscore/react-native-hms-mltext';\nimport { styles } from '../Styles';\n\n\nexport default class TextRecognitionLive extends React.Component {\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSLensEngine);\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CREATED, (event) => {\n      createLensEngine(0, {\n        language: \"en\",\n        OCRMode: HMSTextRecognition.OCR_DETECT_MODE\n      });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.LENS_SURFACE_ON_DESTROY, (event) => {\n      console.log(event);\n      close();\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.TEXT_TRANSACTOR_ON_RESULT, (event) => {\n      console.log(event);\n      this.setState({ result: event.blocks.length + \" text blocks detected see console log\" });\n    });\n\n    this.eventEmitter.addListener(HMSLensEngine.TEXT_TRANSACTOR_ON_DESTROY, (event) => {\n      console.log(event);\n      console.log(\"HERE\");\n    });\n\n    this.dimensionsSubscription = Dimensions.addEventListener('change',  () => {\n      this.state.isLensRun ? close().then(() => runWithView()) : null;\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CREATED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.LENS_SURFACE_ON_DESTROY);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.TEXT_TRANSACTOR_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSLensEngine.TEXT_TRANSACTOR_ON_DESTROY);\n    this.dimensionsSubscription?.remove();\n    release();\n    setApiKey();\n  }\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      isZoomed: false,\n      isLensRun: false,\n    };\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <ScrollView style={{ width: '95%', height: 300, alignSelf: 'center' }}>\n          <SurfaceView style={{ width: '95%', height: 300, alignSelf: 'center' }} />\n        </ScrollView>\n        <TextInput\n          style={styles.customInput}\n          value={this.state.result}\n          placeholder=\"Recognition Result\"\n          multiline={true}\n          scrollEnabled={false}\n        />\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => runWithView().then(() => this.setState({ isLensRun: true }))}>\n            <Text style={styles.startButtonLabel}> RUN LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => close().then(() => this.setState({ isLensRun: false, isZoomed: false }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> CLOSE LENS </Text>\n          </TouchableOpacity>\n        </View>\n        <View style={styles.basicButton}>\n          <TouchableOpacity\n            style={styles.startButton}\n            onPress={() => this.state.isZoomed ? doZoom(0.0).then(() => this.setState({ isZoomed: false })) : doZoom(3.0).then(() => this.setState({ isZoomed: true }))}\n            disabled={!this.state.isLensRun}>\n            <Text style={styles.startButtonLabel}> {this.state.isZoomed ? 'ZOOM 0X' : 'ZOOM 3X'}  </Text>\n          </TouchableOpacity>\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/HmsTextRelatedServices/VietnamIDCardRecognition.js",
    "content": "import React from 'react';\nimport {\n  Text,\n  View,\n  TouchableOpacity,\n  ToastAndroid,\n  Image,\n  ScrollView,\n  TextInput,\n  NativeEventEmitter\n} from 'react-native';\nimport { HMSVietnamCardRecognition, HMSApplication } from '@hmscore/react-native-hms-mltext';\nimport { showImagePickerCustom } from '../HmsOtherServices/Helper';\nimport { styles } from '../Styles';\n\nexport default class VietnamIDCardRecognition extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      imageUri: '',\n      log: [],\n    };\n  }\n\n  componentDidMount() {\n    this.eventEmitter = new NativeEventEmitter(HMSVietnamCardRecognition);\n\n    this.eventEmitter.addListener(HMSVietnamCardRecognition.ICRVN_IMAGE_SAVE, (event) => {\n      console.log(event);\n      if (event.status == HMSApplication.SUCCESS) {\n        const image = { uri: event.result }\n        this.setState({ imageUri: image });\n        ToastAndroid.showWithGravity('Images are saved to gallery', ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n      else {\n        ToastAndroid.showWithGravity('Image Save Error :' + event.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSVietnamCardRecognition.ICRVN_IMAGE_SAVE);\n  }\n\n  startImageAnalyzer = (onDevice, async) => {\n    showImagePickerCustom()\n      .then(async (result) => {\n        if (!result) return;\n        this.setState({ imageUri: { uri: result.uri }}, async () => { \n          let res = null;\n          if (!onDevice) {\n            res = await HMSVietnamCardRecognition.captureImage(result.uri)\n              .catch(e => e);\n          } else {\n            if (async) {\n              res = await HMSVietnamCardRecognition.asyncAnalyzerImageOnDevice(true, result.uri)\n                .catch(e => e);\n            } else {\n              res = await HMSVietnamCardRecognition.analyzerImageOnDevice(true, result.uri)\n                .catch(e => e);\n            }\n          }\n          console.log(res);\n          res = this.parseResult(res);\n          if (res)\n            this.pushLog(res)\n        })\n      })\n  }\n\n  parseResult = (result) => {\n    console.log(result);\n    if (result.status == HMSApplication.SUCCESS) {\n      return result.result;\n    }\n    else {\n      ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    this.setState({ isAnalyzeEnabled: false });\n  }\n\n  pushLog = (str) => {\n    if (typeof (str) == 'object')\n      str = JSON.stringify(str)\n    this.state.log = [`${new Date().toISOString()} ->\\n ${str}`].concat(this.state.log)\n    this.setState({})\n  }\n\n  startCameraAnalyzer = async () => {\n    this.setState({ imageUri: \"\" })\n    let res = await HMSVietnamCardRecognition.captureCamera(true)\n      .catch(e => e);\n    console.log(res);\n    res = this.parseResult(res);\n    if (res)\n      this.pushLog(res)\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <View style={styles.cardRecogOptions}>\n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startImageAnalyzer(false, true)}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE IMG.</Text>\n          </TouchableOpacity>\n          \n          <TouchableOpacity\n            style={[styles.startButton, styles.enable]}\n            underlayColor=\"#fff\"\n            onPress={() => this.startCameraAnalyzer()}\n          >\n            <Text style={styles.startButtonLabel}> CAPTURE CAM.</Text>\n          </TouchableOpacity>\n        </View>\n          {this.state.imageUri !== '' &&\n            <TouchableOpacity style={styles.faceVerificationImage} onPress={this.selectImage}>\n              <Image\n                style={styles.faceVerificationImage}\n                resizeMode='contain'\n                source={this.state.imageUri}\n              />\n            </TouchableOpacity>\n          }\n\n        <View style={styles.log}>\n          {this.state.log.map((item, index) => (\n            <Text key={index}>{item}</Text>\n          ))}\n        </View>\n      </ScrollView>\n    );\n  }\n}"
  },
  {
    "path": "react-native-hms-mltext/example/src/StartPage.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { Component } from 'react';\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  PermissionsAndroid,\n  BackHandler,\n  Alert\n} from 'react-native';\nimport { styles } from './Styles';\nimport { setApiKey } from './HmsOtherServices/Helper';\n\nexport default class App extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions()\n      .then(() => setApiKey());\n      \n  }\n\n  async requestPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple(\n        [\n          PermissionsAndroid.PERMISSIONS.CAMERA,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO,\n          PermissionsAndroid.PERMISSIONS.READ_MEDIA_AUDIO,\n          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,\n        ]\n      );\n      if (\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.RECORD_AUDIO\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] == PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN \n      ) {\n        this.alertPermission();\n      }\n    }\n    catch (err) {\n      console.log(err);\n    }\n  }\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\", onPress: () => BackHandler.exitApp()\n        }\n      ],\n      { cancelable: false }\n    );\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n\n        <Text style={styles.h1}>Text Related Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextRecognitionLive')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Live Text Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('DocumentRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Document Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('GeneralCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Gen. Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('BankCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Bank Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('FormRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Form Recognition</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('VietnamIDCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Vietnam ID Card</Text>\n            </TouchableOpacity>\n          </View>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('IDCardRecognition')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>ID Card Recognition</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n\n        <Text style={styles.h1}>Natural Language Processing Services</Text>\n\n        <View style={styles.containerFlex}>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate('TextEmbedding')}\n              underlayColor=\"#fff\">\n              <Text style={styles.buttonText}>Text Embedding</Text>\n            </TouchableOpacity>\n          </View>\n\n        </View>\n        \n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-mltext/example/src/Styles.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { StyleSheet, Dimensions } from 'react-native';\n\nconst win = Dimensions.get('window');\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#EEF2F3' },\n\n  imageSelectView: {\n    width: 200,\n    height: 200,\n  },\n\n  superres: {\n    flex: 1,\n    alignSelf: 'stretch',\n    width: win.width,\n    height: win.height,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 15,\n    borderBottomWidth: 1,\n    padding: 20,\n    borderBottomColor: '#D3D3D3',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  boldText: { fontWeight: \"bold\" },\n\n  normalView: {\n    backgroundColor: '#EEF2F3',\n    flex: 1,\n    flexDirection: 'column',\n  },\n\n  baseItemContainer: {\n    marginTop: 10,\n    alignItems: 'center',\n    width: '95%',\n    alignSelf: 'center',\n    height: '33%'\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    alignSelf: 'center',\n    width: '95%',\n    borderBottomColor: '#D3D3D3',\n    borderBottomWidth: 1,\n    marginTop: 10,\n  },\n  itemOfView: {\n    width: '70%',\n    alignSelf: 'center'\n  },\n\n  itemOfView3: {\n    width: '30%',\n    alignSelf: 'flex-end'\n  },\n\n  dividedDropdown: {\n    borderWidth: 2,\n    borderColor: 'gray',\n    height: 40,\n    marginTop: 5\n  },\n\n  longDropdown: {\n    backgroundColor: '#fafafa',\n    width: '95%',\n    alignSelf: 'center',\n    borderWidth: 2,\n    borderColor: 'gray',\n    marginTop: 5\n  },\n\n\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    justifyContent: 'flex-end',\n    alignItems: 'center',\n  },\n\n  spaceBetweenRow: { flexDirection: \"row\", justifyContent: \"space-between\" },\n\n  containerCenter: {\n    marginTop: 20,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  img: {\n    width: 100,\n    height: 100,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  containerFlexCenter: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'center',\n    alignItems: \"center\",\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 30,\n    marginVertical: 15,\n  },\n\n  button: {\n    width: '32%',\n    height: 80,\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  menuButton: {\n    width: '100%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: '#fff',\n    flexDirection: 'column',\n  },\n  image: {\n    justifyContent: 'flex-start',\n    width: 400,\n    height: 80,\n  },\n  right: {\n    justifyContent: 'flex-end',\n  },\n\n\n  title: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    padding: 15,\n  },\n\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customInput2: {\n    height: 75,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox: {\n    height: 250,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  customEditBox2: {\n    height: 230,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 10,\n    marginBottom: 10,\n    backgroundColor: \"#fff\",\n    color: \"#000\",\n    borderColor: '#D3D3D3',\n    borderWidth: 1,\n    textAlign: 'center'\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n  },\n\n  startButton: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n  startButtonclicked: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: 'green',\n  },\n  startButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n\n  borderedText: {\n    paddingHorizontal: 20,\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'grey',\n    color: 'white',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#fee',\n  },\n\n  speakButton: {\n    color: '#000',\n    width: 200,\n    textAlignVertical: \"center\", textAlign: \"center\",\n    paddingLeft: 10,\n    paddingRight: 10,\n    borderColor: 'blue'\n  },\n\n  log: {\n    width: '95%',\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  faceVerificationImage: {\n    width: \"100%\",\n    height: 200\n  },\n\n  enable: {\n    backgroundColor: 'green'\n  },\n\n  cardRecogOptions: {\n    flexDirection: 'row',\n    justifyContent: 'space-around',\n    alignItems: 'center',\n    marginVertical: 10\n  }\n});\n"
  },
  {
    "path": "react-native-hms-mltext/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-mltext\",\n  \"title\": \"React Native HMS ML Text\",\n  \"description\": \"React Native HMS ML Text Kit\",\n  \"version\": \"3.12.0-301\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-mltext\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-ml\",\n    \"react-native-mltext\",\n    \"hms-ml\",\n    \"huawei-ml\",\n    \"ml-kit\",\n    \"machine-learning\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-mltext/src/BankCardRecognitionCustomizedView.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NativeModules, NativeEventEmitter} from \"react-native\";\nimport {addListenerToModule} from \"./utils\";\n\nconst {CustomViewHandler} = NativeModules;\n\nconst events = [\n    \"onStart\",\n    \"onResume\",\n    \"onPause\",\n    \"onDestroy\",\n    \"onStop\",\n  ];\n\nconst eventEmitter = new NativeEventEmitter(CustomViewHandler);\n\naddListenerToModule(CustomViewHandler, eventEmitter, events);\n\nexport default CustomViewHandler;\n"
  },
  {
    "path": "react-native-hms-mltext/src/index.d.ts",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-mltext\" {\n\n    export const HMSApplication = {\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        setApiKey(apiKey: string): Promise<Object>;,\n        getApiKey(): Promise<Object>;,\n        setAccessToken(token: string): Promise<Object>;,\n        getCountryCode(): Promise<Object>;,\n        setUserRegion(userRegion: int): Promise<Object>;\n    }\n\n    export declare enum HMSApplication {\n        UNKNOWN = -1,\n        SUCCESS = 0,\n        DISCARDED = 1,\n        INNER = 2,\n        INACTIVE = 3,\n        NOT_SUPPORTED = 4,\n        ILLEGAL_PARAMETER = 5,\n        OVERDUE = 6,\n        NO_FOUND = 7,\n        DUPLICATE_FOUND = 8,\n        NO_PERMISSION = 9,\n        INSUFFICIENT_RESOURCE = 10,\n        ANALYSIS_FAILURE = 11,\n        INTERRUPTED = 12,\n        EXCEED_RANGE = 13,\n        DATA_MISSING = 14,\n        AUTHENTICATION_REQUIRED = 15,\n        TFLITE_NOT_COMPATIBLE = 16,\n        INSUFFICIENT_SPACE = 17,\n        HASH_MISS = 18,\n        TOKEN_INVALID = 19,\n        FRAME_NULL = 20,\n        ANALYZER_NOT_AVAILABLE = 21,\n        CURRENT_ACTIVITY_NULL = 22,\n        CANCEL = 23,\n        FAILURE = 24,\n        DENY = 25,\n        STRING_PARAM_NULL = 26,\n        REMOTE_MODEL_NULL = 27,\n        ASR_RECOGNIZER_NULL = 28,\n        TTS_ENGINE_NULL = 30,\n        SOUND_DECT_NULL = 31,\n        CUSTOM_MODEL_SETTING_NULL = 32,\n        CUSTOM_MODEL_INPUT_NULL = 33,\n        CUSTOM_MODEL_EXECUTOR_SETTING_NULL = 34,\n        DATA_SET_NOT_VALID = 35,\n        LENS_ENGINE_NULL = 36,\n        LENS_HOLDER_NULL = 37\n    }\n\n    interface Frame {\n        bitmap: string,\n        bytes: Bytes,\n        byteBuffer: ByteBuffer,\n        filePath: string,\n        creator: Creator\n    }\n\n    interface Bytes {\n        frameProperty: FrameProperty,\n        values: number[],\n    }\n\n    interface ByteBuffer {\n        frameProperty: FrameProperty,\n        buffer: string,\n    }\n\n    interface Creator {\n        base64Bitmap: string,\n        itemIdentity: number,\n        quadrant: HMSFrame,\n        timeStamp: number,\n        framePropertyExt: FramePropertyExt,\n        writeByteBufferData: ByteBufferData\n    }\n\n    interface FrameProperty {\n        width: number,\n        height: number,\n        quadrant: HMSFrame,\n        formatType: HMSFrame,\n        itemIdentity: number,\n        timeStamp: number,\n    }\n\n    interface FramePropertyExt {\n        lensId: number,\n        maxZoom: number,\n        zoom: number,\n        bottom: number,\n        left: number,\n        right: number,\n        top: number,\n    }\n\n    interface ByteBufferData {\n        width: number,\n        height: number,\n        data: string,\n        formatType: HMSFrame,\n    }\n\n    export const HMSTextRecognition = {\n        asyncAnalyzeFrame(isRemote: boolean, isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: OnCloudAnalyzerConfiguration | OnDeviceAnalyzerConfiguration): Promise<Object>;,\n        analyzeFrame(isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: OnDeviceAnalyzerConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSTextRecognition {\n        OCR_DETECT_MODE = 1,\n        OCR_TRACKING_MODE = 2,\n        OCR_LOOSE_SCENE = 1,\n        OCR_COMPACT_SCENE = 2,\n        ARC = \"ARC\",\n        NGON = \"NGON\",\n        LATIN = \"rm\",\n        ENGLISH = \"en\",\n        CHINESE = \"zh\",\n        JAPANESE = \"ja\",\n        KOREAN = \"ko\",\n        RUSSIAN = \"ru\",\n        GERMAN = \"de\",\n        FRENCH = \"fr\",\n        ITALIAN = \"it\",\n        PORTUGUESE = \"pt\",\n        SPANISH = \"es\",\n        POLISH = \"pl\",\n        NORWEGIAN = \"no\",\n        SWEDISH = \"sv\",\n        DANISH = \"da\",\n        TURKISH = \"tr\",\n        FINNISH = \"fi\",\n        THAI = \"th\",\n        ARABIC = \"ar\",\n        HINDI = \"hi\"\n    }\n\n    interface OnCloudAnalyzerConfiguration {\n        borderType: HMSTextRecognition,\n        textDentisyScene: HMSTextRecognition,\n        languageList: HMSTextRecognition[]\n    }\n\n    interface OnDeviceAnalyzerConfiguration {\n        language: HMSTextRecognition,\n        OCRMode: HMSTextRecognition\n    }\n\n    export const HMSDocumentRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: Frame, analyzerConfiguration: DocumentConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSDocumentRecognition {\n        OCR_DETECT_MODE = 1,\n        OCR_TRACKING_MODE = 2,\n        OCR_LOOSE_SCENE = 1,\n        OCR_COMPACT_SCENE = 2,\n        ARC = \"ARC\",\n        NGON = \"NGON\",\n        LATIN = \"rm\",\n        ENGLISH = \"en\",\n        CHINESE = \"zh\",\n        JAPANESE = \"ja\",\n        KOREAN = \"ko\",\n        RUSSIAN = \"ru\",\n        GERMAN = \"de\",\n        FRENCH = \"fr\",\n        ITALIAN = \"it\",\n        PORTUGUESE = \"pt\",\n        SPANISH = \"es\",\n        POLISH = \"pl\",\n        NORWEGIAN = \"no\",\n        SWEDISH = \"sv\",\n        DANISH = \"da\",\n        TURKISH = \"tr\",\n        FINNISH = \"fi\",\n        THAI = \"th\",\n        ARABIC = \"ar\",\n        HINDI = \"hi\",\n        OTHER = 5,\n        NEW_LINE_CHARACTER = 8,\n        SPACE = 6\n    }\n\n    interface DocumentConfiguration {\n        isFingerPrintEnabled: boolean,\n        borderType: HMSDocumentRecognition,\n        languageList: HMSDocumentRecognition[]\n    }\n\n    export const HMSBankCardRecognition = {\n        captureFrame(bcrCaptureConfiguration: BcrCaptureConfiguration): Promise<Object>;\n    }\n\n    export declare enum HMSBankCardRecognition {\n        ORIENTATION_AUTO = 0,\n        ORIENTATION_LANDSCAPE = 1,\n        ORIENTATION_PORTRAIT = 2,\n        ERROR_CODE_INIT_CAMERA_FAILED = 10101,\n        RESULT_ALL = 2,\n        RESULT_NUM_ONLY = 0,\n        RESULT_SIMPLE = 1,\n        STRICT_MODE = 1,\n        SIMPLE_MODE = 0,\n        BCR_IMAGE_SAVE = \"bcrSuccessImage\"\n    }\n\n    interface BcrCaptureConfiguration {\n        orientation: HMSBankCardRecognition,\n        resultType: HMSBankCardRecognition,\n        recMode: HMSBankCardRecognition\n    }\n\n    export const HMSBankCardRecognitionCustomView = {\n        startCustomizedView(bcrCustomCaptureConfiguration: BcrCustomCaptureConfiguration): Promise<Object>;,\n        switchLight(): Promise<>;,\n        getLightStatus(): Promise<boolean>;\n    }\n\n    interface BcrCustomCaptureConfiguration {\n        \n        isFlashAvailable?: boolean;\n\n        isTitleAvailable?: boolean;\n\n        title?: String;\n\n        widthFactor?: number;\n\n        heightFactor?: number;\n\n        resultType: HMSBankCardRecognition,\n\n        recMode: HMSBankCardRecognition\n    }\n\n    export const HMSGeneralCardRecognition = {\n        capturePreview(language: string, uiConfig: UiConfig): Promise<Object>;,\n        capturePhoto(language: string, uiConfig: UiConfig): Promise<Object>;,\n        captureImage(language: string, imageUri: string): Promise<Object>;\n    }\n\n    export declare enum HMSGeneralCardRecognition {\n        ORIENTATION_AUTO = 0,\n        ORIENTATION_LANDSCAPE = 1,\n        ORIENTATION_PORTRAIT = 2,\n        BLACK = -16777216,\n        BLUE = -16776961,\n        CYAN = -16711681,\n        DKGRAY = -12303292,\n        GRAY = -7829368,\n        GREEN = -16711936,\n        LTGRAY = -3355444,\n        MAGENTA = -65281,\n        RED = -65536,\n        TRANSPARENT = 0,\n        WHITE = -1,\n        YELLOW = -256,\n        GCR_IMAGE_SAVE = \"gcrOnResult\"\n    }\n\n    interface UiConfig {\n        orientation: HMSGeneralCardRecognition,\n        tipTextColor: HMSGeneralCardRecognition,\n        scanBoxCornerColor: HMSGeneralCardRecognition,\n        tipText: string\n    }\n\n    export const HMSFormRecognition = {\n        asyncAnalyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;,\n        analyzeFrame(isStop: boolean, frameConfiguration: Frame): Promise<Object>;\n    }\n    \n    export const HMSIDCardRecognition = {\n        captureImage(imageUri: string, isFront: boolean): Promise<object>;,\n    \n        captureCamera(save: boolean, isFront: boolean): Promise<object>;,\n\n        analyzerImageOnDevice(isStop: boolean, imageUri: string, isFront: boolean): Promise<object>;,\n\n        asyncAnalyzerImageOnDevice(isStop: boolean, imageUri: string, isFront: boolean): Promise<object>;,\n    };\n\n    export declare enum HMSIDCardRecognition {\n        IDCARD_IMAGE_SAVE = \"idCardOnResult\",\n    }\n\n    export const HMSVietnamCardRecognition = {\n        captureImage(imageUri: string): Promise<object>;,\n    \n        captureCamera(save: boolean): Promise<object>;,\n\n        analyzerImageOnDevice(isStop: boolean, imageUri: string): Promise<object>;,\n\n        asyncAnalyzerImageOnDevice(isStop: boolean, imageUri: string): Promise<object>;,\n    };\n\n    export declare enum HMSVietnamCardRecognition {\n        ICRVN_IMAGE_SAVE = \"vnCardOnResult\",\n    }\n\n    export const HMSLensEngine = {\n        createLensEngine(analyzerTag: number, analyzerConfig: TextAnalyzerConfiguration, lensConfig: LensConfiguration): Promise<object>;,\n    \n        close(): Promise<object>;,\n    \n        doZoom(scale: number): Promise<object>;,\n    \n        getDisplayDimension(): Promise<object>;,\n    \n        getLensType(): Promise<object>;,\n    \n        photograph(): Promise<object>;,\n    \n        release(): Promise<object>;,\n    \n        run(): Promise<object>;,\n    \n        runWithView(): Promise<object>;,\n    };\n\n    export declare enum HMSLensEngine {\n        FLASH_MODE_OFF = \"off\",\n        FLASH_MODE_ON = \"on\",\n        FLASH_MODE_AUTO = \"auto\",\n        FOCUS_MODE_CONTINUOUS_PICTURE = \"continuous-picture\",\n        FOCUS_MODE_CONTINUOUS_VIDEO = \"continuous-video\",\n        BACK_LENS = 0,\n        FRONT_LENS = 1,\n        LENS_ON_PHOTO_TAKEN = \"lensOnPhotoTaken\",\n        LENS_ON_CLICK_SHUTTER = \"lensOnClickShutter\",\n        LENS_SURFACE_ON_CREATED = \"lensSurfaceOnCreated\",\n        LENS_SURFACE_ON_CHANGED = \"lensSurfaceOnChanged\",\n        LENS_SURFACE_ON_DESTROY = \"lensSurfaceOnDestroyed\",\n        TEXT_TRANSACTOR_ON_DESTROY = \"textTransactorOnDestroy\",\n        TEXT_TRANSACTOR_ON_RESULT = \"textTransactorOnResult\",\n        FACE_2D_TRANSACTOR_ON_DESTROY = \"face2dTransactorOnDestroy\",\n        FACE_2D_TRANSACTOR_ON_RESULT = \"face2dTransactorOnResult\",\n        FACE_3D_TRANSACTOR_ON_DESTROY = \"face3dTransactorOnDestroy\",\n        FACE_3D_TRANSACTOR_ON_RESULT = \"face3dTransactorOnResult\",\n        CLASSIFICATION_TRANSACTOR_ON_DESTROY = \"classificationTransactorOnDestroy\",\n        CLASSIFICATION_TRANSACTOR_ON_RESULT = \"classificationTransactorOnResult\",\n        OBJECT_TRANSACTOR_ON_DESTROY = \"objectTransactorOnDestroy\",\n        OBJECT_TRANSACTOR_ON_RESULT = \"objectTransactorOnResult\",\n        SCENE_TRANSACTOR_ON_DESTROY = \"sceneTransactorOnDestroy\",\n        SCENE_TRANSACTOR_ON_RESULT = \"sceneTransactorOnResult\",\n        SKELETON_TRANSACTOR_ON_DESTROY = \"skeletonTransactorOnDestroy\",\n        SKELETON_TRANSACTOR_ON_RESULT = \"skeletonTransactorOnResult\",\n        HAND_TRANSACTOR_ON_DESTROY = \"handTransactorOnDestroy\",\n        HAND_TRANSACTOR_ON_RESULT = \"handTransactorOnResult\",\n        GESTURE_TRANSACTOR_ON_DESTROY = \"gestureTransactorOnDestroy\",\n        GESTURE_TRANSACTOR_ON_RESULT = \"gestureTransactorOnResult\",\n        LENS_TEXT_ANALYZER = 0,\n        LENS_FACE_2D_ANALYZER = 1,\n        LENS_FACE_3D_ANALYZER = 2,\n        LENS_SKELETON_ANALYZER = 3,\n        LENS_CLASSIFICATION_ANALYZER = 4,\n        LENS_OBJECT_ANALYZER = 5,\n        LENS_SCENE_ANALYZER = 6,\n        LENS_HAND_ANALYZER = 7,\n        LENS_GESTURE_ANALYZER = 8\n    }\n    \n    interface TextAnalyzerConfiguration {\n        language: string;\n        OCRMode: HMSTextRecognition;\n    }\n    \n    interface LensConfiguration {\n        width: number;\n        height: number;\n        lensType: number;\n        fps: number;\n        automaticFocus: boolean;\n        flashMode: string;\n        focusMode: string;\n    } \n    \n    export const HMSTextEmbedding = {\n        asyncAnalyzeFrame(sentence: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeSentencesSimilarity(sentenceFirst: string, sentenceSecond: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeSimilarWords(word: string, similarNum: number, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordVector(word: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordsSimilarity(wordFirst: string, wordSecond: string, language: HMSTextEmbedding): Promise<object>;,\n    \n        getVocabularyVersion(language: HMSTextEmbedding): Promise<object>;,\n    \n        analyzeWordVectorBatch(words: String[], language: HMSTextEmbedding): Promise<object>;,\n    };\n\n    export declare enum HMSTextEmbedding {\n        LANGUAGE_ZH = \"zh\",\n        LANGUAGE_EN = \"en\",\n        ERR_SERVICE_IS_UNAVAILABLE = 12199,\n        ERR_NET_UNAVAILABLE = 12198,\n        ERR_INNER = 12101,\n        ERR_AUTH_FAILED = 12102,\n        ERR_PARAM_ILLEGAL = 12103,\n        ERR_ANALYZE_FAILED = 12104,\n        ERR_AUTH_TOKEN_INVALIDE = 12105\n    }\n}"
  },
  {
    "path": "react-native-hms-mltext/src/index.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NativeModules } from 'react-native';\nimport React, { Component } from 'react';\nimport { requireNativeComponent, View } from 'react-native';\nimport HMSBankCardRecognitionCustomView from \"./BankCardRecognitionCustomizedView\";\n\nconst HMSSurfaceView = requireNativeComponent('HMSSurfaceView');\n\nexport const {\n  HMSTextRecognition,\n  HMSDocumentRecognition,\n  HMSBankCardRecognition,\n  HMSGeneralCardRecognition,\n  HMSIDCardRecognition,\n  HMSVietnamCardRecognition,\n  HMSFormRecognition,\n  HMSApplication,\n  HMSTextEmbedding,\n  HMSLensEngine\n} = NativeModules;\n\nexport{ HMSBankCardRecognitionCustomView}\n\nexport default class SurfaceView extends Component {\n\n  constructor(props) {\n    super(props);\n  }\n\n  render() {\n    return <HMSSurfaceView {...this.props} />;\n  }\n}\n\nSurfaceView.propTypes = {\n  ...View.propTypes\n}"
  },
  {
    "path": "react-native-hms-mltext/src/utils.js",
    "content": "/*\n * Copyright 2023-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const addListenerToModule = function (module, emitter, events) {\n  const subscriptions = new Map();\n\n  events.map((event) => {\n    module[event + \"ListenerAdd\"] = (handler) =>\n      subscriptions.set(event, emitter.addListener(event, handler));\n    module[event + \"ListenerRemove\"] = () => subscriptions.get(event).remove();\n  });\n\n  module.allListenersRemove = () => subscriptions.forEach((a) => a.remove());\n};\n"
  },
  {
    "path": "react-native-hms-nearby/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-nearby/OpenSourceSoftwareNotice.html",
    "content": "<p>Please note we provide an open source software notice for the third party open source software <br>\n    along with this software and/or this software component contributed by Huawei (in the following <br>\n    just &ldquo;this SOFTWARE&rdquo;). The open source software licenses are granted by the respective right <br>\n    holders.</p>\n    \n    <p>Warranty Disclaimer<br>\n    THE OPEN SOURCE SOFTWARE IN THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT <br>\n    IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED <br>\n    WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE <br>\n    APPLICABLE LICENSES FOR MORE DETAILS.</p>\n    \n    <p>Copyright Notice and License Texts</p>\n    \n    <p>\n    Software: react-native-image-picker 7.0.3<br>\n    ----------------------------------------------------------------------</p>\n    \n    <p>Copyright notice:</p>\n    \n    <p>Copyright (c) 2015-present, Facebook, Inc.</p>\n    \n    <p>License: MIT License</p>\n    \n    <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this<br>\n    software and associated documentation files (the &quot;Software&quot;), to deal in the Software<br>\n    without restriction, including without limitation the rights to use, copy, modify,<br>\n    merge, publish, distribute, sublicense, and/or sell copies of the Software,<br>\n    and to permit persons to whom the Software is furnished to do so, subject to the<br>\n    following conditions:</p>\n    \n    <p>The above copyright notice and this permission notice shall be included in all copies<br>\n    or substantial portions of the Software.</p>\n    \n    <p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,<br>\n    INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR<br>\n    PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE<br>\n    FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR<br>\n    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER <br>\n    DEALINGS IN THE SOFTWARE.</p>"
  },
  {
    "path": "react-native-hms-nearby/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Nearby</h1>\n</p>\n\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-nearby\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-nearby?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-nearby\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-nearby?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-nearby.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n----\n\nReact Native Nearby Service Plugin enables communication between the HMS Core Nearby Service SDK and React Native platform. This plugin exposes functionalities provided by the HMS Core Nearby Service SDK. React Native Nearby Service Plugin allows apps to easily discover nearby devices and set up communication with them using technologies such as Bluetooth and Wi-Fi.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/about-the-service-0000001053940431?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-nearby\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/development-process-0000001074129078?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/hms-application-0000001073654825-V1?ha_source=hms1)\n\n## Additional Topics\n\n- [App-based Message Publishing and Subscription](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/app-based-message-publishing-0000001073652573?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-nearby/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 21\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\" }\n    maven { url 'https://developer.huawei.com/repo/' }\n    google()\n    jcenter()\n    mavenCentral()\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n    implementation 'com.huawei.hms:nearby:6.12.1.310'\n}\n  "
  },
  {
    "path": "react-native-hms-nearby/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-nearby/android/gradle.properties",
    "content": "android.enableJetifier=true\nandroid.useAndroidX=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-nearby/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-nearby/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\"\n        package=\"com.huawei.hms.rn.nearby\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <!-- Required for Nearby -->\n    <uses-permission android:name=\"android.permission.BLUETOOTH\" />\n    <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <!-- Required for FILE payloads -->\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <!--Background service for beacons-->\n    <application>\n        <service\n                android:name=\".modules.HMSMessage$BackgroundMessageService\"\n                android:exported=\"false\" />\n        <receiver\n                android:name=\".modules.HMSBeacon$BeaconBroadcastReceiver\"\n                android:enabled=\"true\"\n                android:exported=\"true\"\n                tools:ignore=\"Instantiatable\">\n            <intent-filter>\n                <action android:name=\"com.huawei.hms.nearby.action.ONFOUND_BEACON\" />\n            </intent-filter>\n        </receiver>\n    </application>\n</manifest>\n  "
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/HMSNearby.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport com.huawei.hms.rn.nearby.modules.HMSNearbyApplication;\nimport com.huawei.hms.rn.nearby.modules.HMSDiscovery;\nimport com.huawei.hms.rn.nearby.modules.HMSMessage;\nimport com.huawei.hms.rn.nearby.modules.HMSTransfer;\nimport com.huawei.hms.rn.nearby.modules.HMSBeacon;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSNearby implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSNearbyApplication(reactContext));\n        modules.add(new HMSTransfer(reactContext));\n        modules.add(new HMSDiscovery(reactContext));\n        modules.add(new HMSMessage(reactContext));\n        modules.add(new HMSBeacon(reactContext));\n\n        return modules;\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/constants/HMSConstants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.constants;\n\nimport com.facebook.common.internal.ImmutableMap;\n\nimport com.huawei.hms.nearby.discovery.BleSignal;\nimport com.huawei.hms.nearby.discovery.Distance;\nimport com.huawei.hms.nearby.message.Message;\nimport com.huawei.hms.nearby.message.Policy;\nimport com.huawei.hms.nearby.transfer.Data;\nimport com.huawei.hms.nearby.transfer.TransferEngine;\nimport com.huawei.hms.nearby.transfer.TransferStateUpdate;\nimport com.huawei.hms.rn.nearby.modules.HMSNearbyApplication;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.BYTES_DATA_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.ENDPOINT_ID_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.FAILURE;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.POLICY_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.STRING_PARAM_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.SUCCESS;\n\npublic final class HMSConstants {\n    /**\n     * Policy Constants for general use\n     */\n    public static final int POLICY_MESH = 1;\n\n    public static final int POLICY_P2P = 2;\n\n    public static final int POLICY_STAR = 3;\n\n    public static final int POLICY_SHARE = 1;\n\n    public static final int POLICY_SET = 2;\n\n    public static final int CHANNEL_AUTO = 1;\n\n    public static final int CHANNEL_HIGH_THROUGHPUT = 2;\n\n    public static final int CHANNEL_INSTANCE = 3;\n\n    /**\n     * Discovery events\n     * {@link com.huawei.hms.rn.nearby.modules.HMSDiscovery}\n     */\n    public static final String CONNECT_CALLBACK = \"ConnectCallback\";\n\n    public static final String CONNECT_ON_ESTABLISH = \"connectOnEstablish\";\n\n    public static final String CONNECT_ON_RESULT = \"connectOnResult\";\n\n    public static final String CONNECT_ON_DISCONNECTED = \"connectOnDisconnected\";\n\n    public static final String SCAN_CALLBACK = \"ScanEndpointCallback\";\n\n    public static final String SCAN_ON_FOUND = \"scanOnFound\";\n\n    public static final String SCAN_ON_LOST = \"scanOnLost\";\n\n    public static final String DATA_CALLBACK = \"DataCallback\";\n\n    public static final String DATA_ON_RECEIVED = \"dataOnReceived\";\n\n    public static final String DATA_ON_TRANSFER_UPDATE = \"dataOnTransferUpdate\";\n\n    /**\n     * Message Events\n     * {@link com.huawei.hms.rn.nearby.modules.HMSMessage}\n     */\n    public static final String PUT_ON_TIMEOUT = \"putOnTimeOut\";\n\n    public static final String GET_ON_TIMEOUT = \"getOnTimeOut\";\n\n    public static final String PUT_CALLBACK = \"PutCallback\";\n\n    public static final String GET_CALLBACK = \"GetCallback\";\n\n    public static final String STATUS_CALLBACK = \"StatusCallback\";\n\n    public static final String STATUS_ON_CHANGED = \"statusOnChanged\";\n\n    public static final String MESSAGE_HANDLER = \"MessageHandler\";\n\n    public static final String BLE_ON_SIGNAL_CHANGED = \"onBleSignalChanged\";\n\n    public static final String DISTANCE_ON_CHANGED = \"onDistanceChanged\";\n\n    public static final String MESSAGE_ON_FOUND = \"messageOnFound\";\n\n    public static final String MESSAGE_ON_LOST = \"messageOnLost\";\n\n    /**\n     * Beacon Events\n     * {@link com.huawei.hms.rn.nearby.modules.HMSBeacon}\n     */\n    public static final String TAG = \"BeaconBroadcastReceiver\";\n    public static final String ACTION_SCAN_ONFOUND_RESULT = \"com.huawei.hms.nearby.action.ONFOUND_BEACON\";\n    public static final String KEY_SCAN_ONFOUND_FLAG = \"SCAN_ONFOUND_FLAG\";\n    public static final String KEY_SCAN_BEACON_DATA = \"SCAN_BEACON\";\n    public static final String START_REGISTER_RECEIVER = \"startRegisterReceiver\";\n\n    /**\n     * {@link com.huawei.hms.rn.nearby.modules.HMSDiscovery} module constant values exposed to RN side.\n     */\n    public static final Map<String, Object> DISCOVERY_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"MESH\", POLICY_MESH);\n            put(\"P2P\", POLICY_P2P);\n            put(\"STAR\", POLICY_STAR);\n            put(\"CONNECT_ON_DISCONNECTED\", CONNECT_ON_DISCONNECTED);\n            put(\"CONNECT_ON_ESTABLISH\", CONNECT_ON_ESTABLISH);\n            put(\"CONNECT_ON_RESULT\", CONNECT_ON_RESULT);\n            put(\"SCAN_ON_FOUND\", SCAN_ON_FOUND);\n            put(\"SCAN_ON_LOST\", SCAN_ON_LOST);\n            put(\"DATA_ON_RECEIVED\", DATA_ON_RECEIVED);\n            put(\"DATA_ON_TRANSFER_UPDATE\", DATA_ON_TRANSFER_UPDATE);\n            put(\"CHANNEL_AUTO\", CHANNEL_AUTO);\n            put(\"CHANNEL_HIGH_THROUGHPUT\", CHANNEL_HIGH_THROUGHPUT);\n            put(\"CHANNEL_INSTANCE\", CHANNEL_INSTANCE);\n        }\n    });\n\n    /**\n     * {@link com.huawei.hms.rn.nearby.modules.HMSTransfer} module constant values exposed to RN side.\n     */\n    public static final Map<String, Object> TRANSFER_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"FILE\", Data.Type.FILE);\n            put(\"BYTES\", Data.Type.BYTES);\n            put(\"STREAM\", Data.Type.STREAM);\n            put(\"MAX_SIZE_DATA\", TransferEngine.MAX_SIZE_DATA);\n            put(\"TRANSFER_STATE_SUCCESS\", TransferStateUpdate.Status.TRANSFER_STATE_SUCCESS);\n            put(\"TRANSFER_STATE_FAILURE\", TransferStateUpdate.Status.TRANSFER_STATE_FAILURE);\n            put(\"TRANSFER_STATE_IN_PROGRESS\", TransferStateUpdate.Status.TRANSFER_STATE_IN_PROGRESS);\n            put(\"TRANSFER_STATE_CANCELED\", TransferStateUpdate.Status.TRANSFER_STATE_CANCELED);\n        }\n    });\n\n    /**\n     * {@link com.huawei.hms.rn.nearby.modules.HMSMessage} module constant values exposed to RN side.\n     */\n    public static final Map<String, Object> MESSAGE_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"MAX_CONTENT_SIZE\", Message.MAX_CONTENT_SIZE);\n            put(\"MAX_TYPE_LENGTH\", Message.MAX_TYPE_LENGTH);\n            put(\"MESSAGE_NAMESPACE_RESERVED\", Message.MESSAGE_NAMESPACE_RESERVED);\n            put(\"MESSAGE_TYPE_EDDYSTONE_UID\", Message.MESSAGE_TYPE_EDDYSTONE_UID);\n            put(\"MESSAGE_TYPE_IBEACON_ID\", Message.MESSAGE_TYPE_IBEACON_ID);\n            put(\"POLICY_FINDING_MODE_DEFAULT\", Policy.POLICY_FINDING_MODE_DEFAULT);\n            put(\"POLICY_FINDING_MODE_BROADCAST\", Policy.POLICY_FINDING_MODE_BROADCAST);\n            put(\"POLICY_FINDING_MODE_SCAN\", Policy.POLICY_FINDING_MODE_SCAN);\n            put(\"POLICY_DISTANCE_TYPE_DEFAULT\", Policy.POLICY_DISTANCE_TYPE_DEFAULT);\n            put(\"POLICY_DISTANCE_TYPE_EARSHOT\", Policy.POLICY_DISTANCE_TYPE_EARSHOT);\n            put(\"POLICY_TTL_SECONDS_DEFAULT\", Policy.POLICY_TTL_SECONDS_DEFAULT);\n            put(\"POLICY_TTL_SECONDS_INFINITE\", Policy.POLICY_TTL_SECONDS_INFINITE);\n            put(\"POLICY_TTL_SECONDS_MAX\", Policy.POLICY_TTL_SECONDS_MAX);\n            put(\"BLE_UNKNOWN_TX_POWER\", BleSignal.BLE_UNKNOWN_TX_POWER);\n            put(\"PRECISION_LOW\", Distance.Precision.PRECISION_LOW);\n            put(\"GET_ON_TIMEOUT\", GET_ON_TIMEOUT);\n            put(\"PUT_ON_TIMEOUT\", PUT_ON_TIMEOUT);\n            put(\"STATUS_ON_CHANGED\", STATUS_ON_CHANGED);\n            put(\"BLE_ON_SIGNAL_CHANGED\", BLE_ON_SIGNAL_CHANGED);\n            put(\"DISTANCE_ON_CHANGED\", DISTANCE_ON_CHANGED);\n            put(\"MESSAGE_ON_FOUND\", MESSAGE_ON_FOUND);\n            put(\"MESSAGE_ON_LOST\", MESSAGE_ON_LOST);\n        }\n    });\n\n\n    /**\n     * {@link HMSNearbyApplication} module constant values exposed to RN side.\n     */\n    public static final Map<String, Object> APPLICATION_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"SUCCESS\", SUCCESS.getStatusCode());\n            put(\"FAILURE\", FAILURE.getStatusCode());\n            put(\"POLICY_FAIL\", POLICY_FAIL.getStatusCode());\n            put(\"STRING_PARAM_FAIL\", STRING_PARAM_FAIL.getStatusCode());\n            put(\"ENDPOINT_ID_FAIL\", ENDPOINT_ID_FAIL.getStatusCode());\n            put(\"BYTES_DATA_FAIL\", BYTES_DATA_FAIL.getStatusCode());\n        }\n    });\n\n    public static final Map<String,Object> BEACON_CONSTANTS = ImmutableMap.copyOf(new HashMap<String, Object>() {\n        {\n            put(\"TAG\", TAG);\n            put(\"ACTION_SCAN_ONFOUND_RESULT\", ACTION_SCAN_ONFOUND_RESULT);\n            put(\"KEY_SCAN_ONFOUND_FLAG\", KEY_SCAN_ONFOUND_FLAG);\n            put(\"KEY_SCAN_BEACON_DATA\", KEY_SCAN_BEACON_DATA);\n            put(\"START_REGISTER_RECEIVER\", START_REGISTER_RECEIVER);\n        }\n    });\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSBase.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.rn.nearby.utils.HMSLogger;\nimport com.huawei.hms.rn.nearby.utils.HMSResult;\n\nimport java.util.Map;\n\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.FAILURE;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.SUCCESS;\n\npublic class HMSBase extends ReactContextBaseJavaModule {\n    private ReactApplicationContext mContext;\n\n    private String moduleName;\n\n    private Map<String, Object> constant;\n\n    private HMSLogger logger;\n\n    /**\n     * Initializes base fields for each module\n     *\n     * @param mContext context\n     * @param moduleName module name\n     * @param constant module constant\n     */\n    HMSBase(ReactApplicationContext mContext, String moduleName, Map<String, Object> constant) {\n        super(mContext);\n        this.mContext = mContext;\n        this.moduleName = moduleName;\n        this.constant = constant;\n        this.logger = HMSLogger.getInstance(mContext);\n    }\n\n    /**\n     * Module name used by RN side\n     *\n     * @return name of the child module\n     */\n    @Override\n    public String getName() {\n        return this.moduleName;\n    }\n\n    /**\n     * Exposes constants to RN side\n     *\n     * @return Constant of related child module\n     */\n    @Override\n    public Map<String, Object> getConstants() {\n        return this.constant;\n    }\n\n    /**\n     * Context\n     * \n     * @return App context\n     */\n    ReactApplicationContext getContext() {\n        return mContext;\n    }\n\n    /**\n     * Start method execution timer in logger\n     * \n     * @param methodName Name of method\n     */\n    void startMethodExecTimer(String methodName) {\n        logger.startMethodExecutionTimer(methodName);\n    }\n\n    /**\n     * Gives logger instance\n     * \n     * @return Logger instance for enable disable methods\n     */\n    HMSLogger getLogger() {\n        return logger;\n    }\n\n    /**\n     * Handles HMSResult based results\n     *\n     * @param methodName method name\n     * @param result result type\n     * @param promise promise\n     */\n    void handleResult(String methodName, HMSResult result, Promise promise) {\n        logger.sendSingleEvent(methodName, result.equals(SUCCESS) ? \"0\" : result.getResultMessage());\n        promise.resolve(result.getStatusAndMessage());\n    }\n\n    /**\n     * Handles HMSResult based results\n     *\n     * @param methodName method name\n     * @param voidTask task\n     * @param promise promise\n     */\n    void handleResult(String methodName, Task<Void> voidTask, Promise promise) {\n        voidTask.addOnSuccessListener(aVoid -> handleResult(methodName, SUCCESS, promise))\n            .addOnFailureListener(e -> handleResult(methodName, e, promise));\n    }\n\n    /**\n     * Handles failure results\n     *\n     * @param methodName method name\n     * @param e exception\n     * @param promise promise\n     */\n    void handleResult(String methodName, Exception e, Promise promise) {\n        logger.sendSingleEvent(methodName, e.getMessage());\n        promise.resolve(FAILURE.getStatusAndMessage(null, e.getMessage()));\n    }\n\n    /**\n     * Helper method that sends an event to RN side.\n     *\n     * @param eventName event name\n     * @param methodName method name which calls this method\n     * @param params WritableMap object that contains related keys and values\n     */\n    void sendEvent(String eventName, String methodName, WritableMap params) {\n        logger.sendSingleEvent(methodName);\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSBeacon.java",
    "content": "/*\n *  Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *\n *  Licensed under the Apache License, Version 2.0 (the \"License\")\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport android.annotation.SuppressLint;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.nearby.Nearby;\nimport com.huawei.hms.nearby.beacon.BeaconMsgCondition;\nimport com.huawei.hms.nearby.beacon.BeaconPicker;\nimport com.huawei.hms.nearby.beacon.GetBeaconOption;\nimport com.huawei.hms.nearby.beacon.RawBeaconCondition;\nimport com.huawei.hms.nearby.beacon.TriggerOption;\nimport com.huawei.hms.nearby.message.BeaconInfo;\nimport com.huawei.hms.rn.nearby.utils.HMSLogger;\nimport com.huawei.hms.rn.nearby.utils.HMSUtils;\n\nimport static android.content.Context.RECEIVER_EXPORTED;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.ACTION_SCAN_ONFOUND_RESULT;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.BEACON_CONSTANTS;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.KEY_SCAN_BEACON_DATA;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.KEY_SCAN_ONFOUND_FLAG;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.START_REGISTER_RECEIVER;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.TAG;\n\nimport java.util.List;\nimport java.util.Objects;\n\npublic class HMSBeacon extends HMSBase {\n\n    private BeaconBroadcastReceiver beaconReceiver;\n\n    /**\n     * Constructor that initializes beacon module\n     *\n     * @param context app context\n     */\n    public HMSBeacon(ReactApplicationContext context) {\n        super(context, HMSBeacon.class.getSimpleName(), BEACON_CONSTANTS);\n    }\n\n    private BeaconPicker beaconPicker;\n\n    @ReactMethod\n    public void registerScan(ReadableMap readableMap, final Promise promise) {\n        startMethodExecTimer(\"registerScan\");\n\n        String beaconId = null;\n        int beaconType = 1;\n        String namespace = null;\n        String type = null;\n\n        if(readableMap != null) {\n            if(HMSUtils.getInstance().hasValidKey(readableMap,\"beaconId\", ReadableType.String)){\n                beaconId = readableMap.getString(\"beaconId\");\n            }\n            if(HMSUtils.getInstance().hasValidKey(readableMap,\"beaconType\", ReadableType.Number)){\n                beaconType = readableMap.getInt(\"beaconType\");\n            }\n            if(HMSUtils.getInstance().hasValidKey(readableMap,\"namespace\", ReadableType.String)){\n                namespace = readableMap.getString(\"namespace\");\n            }\n            if(HMSUtils.getInstance().hasValidKey(readableMap,\"type\", ReadableType.String)){\n                type = readableMap.getString(\"type\");\n            }\n        }\n\n        TriggerOption triggerOption = new TriggerOption.Builder().setTriggerMode(2).setTriggerClassName(BeaconBroadcastReceiver.class.getName()).build();\n        Intent intent = new Intent();\n        intent.putExtra(GetBeaconOption.KEY_TRIGGER_OPTION,triggerOption);\n\n\n        if(beaconId != null && namespace == null && type == null){\n            beaconPicker = new BeaconPicker.Builder().includeBeaconId(beaconId,beaconType).build();\n\n        } else if (beaconId == null && namespace != null && type != null) {\n            beaconPicker = new BeaconPicker.Builder().includeNamespaceType(namespace,type).build();\n\n        } else if (beaconId != null && namespace != null && type != null) {\n            beaconPicker = new BeaconPicker.Builder().includeNamespaceType(namespace,type,beaconId,beaconType).build();\n\n        } else {\n            promise.reject(\"Error\",\"Invalid Values\");\n        }\n\n        GetBeaconOption getOption = new GetBeaconOption.Builder().picker(beaconPicker).build();\n\n        Task<Void> register = Nearby.getBeaconEngine(getContext()).registerScanTask(intent,getOption);\n        startRegisterReceiver(register, \"registerScan\", promise);\n    }\n\n    @ReactMethod\n    public void unRegisterScan(final Promise promise) {\n        startMethodExecTimer(\"unRegisterScan\");\n\n        TriggerOption triggerOption = new TriggerOption.Builder().setTriggerMode(2).setTriggerClassName(BeaconBroadcastReceiver.class.getName()).build();\n        Intent intent = new Intent();\n        intent.putExtra(GetBeaconOption.KEY_TRIGGER_OPTION,triggerOption);\n\n        beaconPicker = null;\n        handleResult(\"unRegisterScan\", Nearby.getBeaconEngine(getContext()).unRegisterScanTask(intent),promise);\n    }\n\n    @ReactMethod\n    public void getBeaconMsgConditions(final Promise promise) {\n        startMethodExecTimer(\"getBeaconIdBeaconMsg\");\n        List<BeaconMsgCondition> beaconMsgConditionList;\n        WritableMap wm = Arguments.createMap();\n\n        if(beaconPicker == null){\n            getLogger().sendSingleEvent(\"getBeaconMsgConditions\", \"Register ERROR\");\n            promise.reject(\"BeaconMsgError\",\"Register ERROR\");\n        } else {\n                beaconMsgConditionList = beaconPicker.getBeaconMsgConditions();\n                for(int i=0; i < beaconMsgConditionList.size(); i++){\n                    WritableMap map = Arguments.createMap();\n                    map.putString(\"beaconId\", beaconMsgConditionList.get(i).getBeaconId());\n                    map.putInt(\"beaconType\", beaconMsgConditionList.get(i).getBeaconType());\n                    map.putString(\"namespace\", beaconMsgConditionList.get(i).getNamespace());\n                    map.putString(\"type\", beaconMsgConditionList.get(i).getType());\n                    wm.merge(map);\n\n                }\n                getLogger().sendSingleEvent(\"getBeaconMsgConditions\");\n                promise.resolve(wm);\n        }\n    }\n\n    @ReactMethod\n    public void getRawBeaconConditions(final Promise promise){\n        startMethodExecTimer(\"getBeaconIdRawBeacon\");\n        List<RawBeaconCondition> rawBeaconConditionList;\n        WritableMap wm = Arguments.createMap();\n\n        if(beaconPicker == null) {\n            getLogger().sendSingleEvent(\"getRawBeaconConditions\", \"Register ERROR\");\n            promise.reject(\"RawBeaconError\",\"Register ERROR\");\n        } else {\n                rawBeaconConditionList = beaconPicker.getRawBeaconConditions();\n                for(int i=0; i < rawBeaconConditionList.size(); i++){\n                    WritableMap map = Arguments.createMap();\n                    map.putString(\"beaconId\", rawBeaconConditionList.get(i).getBeaconId());\n                    map.putInt(\"beaconType\", rawBeaconConditionList.get(i).getBeaconType());\n                    wm.merge(map);\n                }\n                getLogger().sendSingleEvent(\"getRawBeaconConditions\");\n                promise.resolve(wm);\n        }\n\n    }\n\n    @ReactMethod\n    public void getRawBeaconConditionsWithBeaconType(int beaconType, final Promise promise){\n        startMethodExecTimer(\"getBeaconIdRawBeaconWithBeaconType\");\n        List<RawBeaconCondition> rawBeaconConditionList;\n        WritableMap wm = Arguments.createMap();\n\n        if(beaconPicker == null){\n            getLogger().sendSingleEvent(\"getRawBeaconConditionsWithBeaconType\", \"Register ERROR\");\n            promise.reject(\"RawBeaconError\",\"Register ERROR\");\n        }else {\n            rawBeaconConditionList = beaconPicker.getRawBeaconConditions(beaconType);\n            for(int i=0; i < rawBeaconConditionList.size(); i++){\n                WritableMap map = Arguments.createMap();\n                map.putString(\"beaconId\", rawBeaconConditionList.get(i).getBeaconId());\n                map.putInt(\"beaconType\", rawBeaconConditionList.get(i).getBeaconType());\n                wm.merge(map);\n            }\n            getLogger().sendSingleEvent(\"getRawBeaconConditionsWithBeaconType\");\n            promise.resolve(wm);\n        }\n    }\n\n    @SuppressLint(\"UnspecifiedRegisterReceiverFlag\")\n    private void startRegisterReceiver(Task<Void> taskRegister, String methodName, final Promise promise){\n        taskRegister.addOnCompleteListener(task -> {\n            if(task.isSuccessful()) {\n                if(beaconReceiver != null) {\n                    Objects.requireNonNull(getCurrentActivity()).unregisterReceiver(beaconReceiver);\n                }\n                beaconReceiver = new BeaconBroadcastReceiver(promise, methodName, getContext());\n                IntentFilter intentBeaconFilter = new IntentFilter(START_REGISTER_RECEIVER);\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){\n                    Objects.requireNonNull(getCurrentActivity()).registerReceiver(beaconReceiver, intentBeaconFilter, RECEIVER_EXPORTED);\n                } else {\n                    Objects.requireNonNull(getCurrentActivity()).registerReceiver(beaconReceiver, intentBeaconFilter);\n                }\n\n            }\n        }).addOnFailureListener(e -> Log.e(methodName,\"Error RegisterReceiver: \" + e.getMessage()));\n    }\n\n\n    public static class BeaconBroadcastReceiver extends BroadcastReceiver {\n\n\n        private final Promise promise;\n        private final String methodName;\n        private final ReactContext reactContext;\n\n        public BeaconBroadcastReceiver(Promise promise, String methodName, ReactContext context) {\n            this.promise = promise;\n            this.methodName = methodName;\n            reactContext = context;\n        }\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            try {\n                if(intent == null){\n                    Log.e(TAG,\"intent is null\");\n                    return;\n                }\n\n                Log.i(TAG,\"onReceive:\" + intent);\n                String action = intent.getAction();\n\n                if(ACTION_SCAN_ONFOUND_RESULT.equals(action)){\n                    int onFound = intent.getIntExtra(KEY_SCAN_ONFOUND_FLAG, -1);\n                    Log.i(TAG, \"onReceive onFound, isFound:\" + onFound);\n                    List<BeaconInfo> beaconIds = intent.getParcelableArrayListExtra(KEY_SCAN_BEACON_DATA);\n                    if(beaconIds == null) {\n                        Log.w(TAG,\"beacon Ids is null\");\n                        return;\n                    }\n                    for(BeaconInfo beacon : beaconIds) {\n                        HMSLogger.getInstance(context).sendPeriodicEvent(methodName);\n                        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(\"beaconReceiver\", beacon.getBeaconId());\n                    }\n                }\n            } catch (IllegalArgumentException e) {\n                promise.reject(\"Error BeaconReceive\", e);\n            }\n\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSDiscovery.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport android.text.TextUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\n\nimport com.huawei.hms.nearby.Nearby;\nimport com.huawei.hms.nearby.discovery.BroadcastOption;\nimport com.huawei.hms.nearby.discovery.ConnectCallback;\nimport com.huawei.hms.nearby.discovery.ConnectInfo;\nimport com.huawei.hms.nearby.discovery.ConnectOption;\nimport com.huawei.hms.nearby.discovery.ConnectResult;\nimport com.huawei.hms.nearby.discovery.Policy;\nimport com.huawei.hms.nearby.discovery.ScanEndpointCallback;\nimport com.huawei.hms.nearby.discovery.ScanEndpointInfo;\nimport com.huawei.hms.nearby.discovery.ScanOption;\nimport com.huawei.hms.nearby.transfer.Data;\nimport com.huawei.hms.nearby.transfer.DataCallback;\nimport com.huawei.hms.nearby.transfer.TransferStateUpdate;\nimport com.huawei.hms.rn.nearby.utils.HMSUtils;\n\nimport java.io.IOException;\n\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CONNECT_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CONNECT_ON_DISCONNECTED;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CONNECT_ON_ESTABLISH;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CONNECT_ON_RESULT;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.DATA_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.DATA_ON_RECEIVED;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.DATA_ON_TRANSFER_UPDATE;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.DISCOVERY_CONSTANTS;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.SCAN_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.SCAN_ON_FOUND;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.SCAN_ON_LOST;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.POLICY_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.STRING_PARAM_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.SUCCESS;\n\npublic class HMSDiscovery extends HMSBase {\n\n    /**\n     * Constructor that initializes discovery module\n     *\n     * @param context app context\n     */\n    public HMSDiscovery(ReactApplicationContext context) {\n        super(context, HMSDiscovery.class.getSimpleName(), DISCOVERY_CONSTANTS);\n    }\n\n    /**\n     * Accepts a connection. This API must be called before data transmission.\n     * If the connection request is not accepted within 8 seconds, the connection fails and needs to be re-initiated.\n     * Sets {@link #getDataCallback()} : A callback class called after data is received.\n     *\n     * @param endpointId ID of the remote endpoint.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void acceptConnect(String endpointId, final Promise promise) {\n        startMethodExecTimer(\"acceptConnect\");\n\n        if (TextUtils.isEmpty(endpointId)) {\n            handleResult(\"acceptConnect\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"acceptConnect\",\n            Nearby.getDiscoveryEngine(getContext()).acceptConnect(endpointId, getDataCallback()), promise);\n    }\n\n    /**\n     * Disconnects from a remote endpoint. Then communication with the remote endpoint is no longer available.\n     *\n     * @param endpointId ID of the remote endpoint.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void disconnect(String endpointId, final Promise promise) {\n        startMethodExecTimer(\"disconnect\");\n\n        if (TextUtils.isEmpty(endpointId)) {\n            handleResult(\"disconnect\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        Nearby.getDiscoveryEngine(getContext()).disconnect(endpointId);\n        handleResult(\"disconnect\", SUCCESS, promise);\n    }\n\n    /**\n     * Rejects a connection request from a remote endpoint.\n     *\n     * @param endpointId ID of the remote endpoint.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void rejectConnect(String endpointId, final Promise promise) {\n        startMethodExecTimer(\"rejectConnect\");\n\n        if (TextUtils.isEmpty(endpointId)) {\n            handleResult(\"rejectConnect\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"rejectConnect\", Nearby.getDiscoveryEngine(getContext()).rejectConnect(endpointId), promise);\n    }\n\n    /**\n     * Sends a request to connect to a remote endpoint.\n     * Sets {@link #getConnectCallback()} : A callback listener class called during connection.\n     *\n     * @param name Local endpoint name.\n     * @param endpointId ID of the remote endpoint.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void requestConnect(String name, String endpointId, final Promise promise) {\n        startMethodExecTimer(\"requestConnect\");\n\n        if (TextUtils.isEmpty(name) || TextUtils.isEmpty(endpointId)) {\n            handleResult(\"requestConnect\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"requestConnect\",\n            Nearby.getDiscoveryEngine(getContext()).requestConnect(name, endpointId, getConnectCallback()), promise);\n    }\n\n    /**\n     * Sends a connection request carrying specific connection options to the remote endpoint.\n     * This is an extended method for requestConnect(String, String, ConnectCallback).\n     * Sets {@link #getConnectCallback()} : A callback listener class called during connection.\n     *\n     * @param name Local endpoint name.\n     * @param endpointId ID of the remote endpoint.\n     * @param connectOptionMap Options Map.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void requestConnectEx(String name, String endpointId, ReadableMap connectOptionMap, final Promise promise) {\n        startMethodExecTimer(\"requestConnectEx\");\n\n        if (TextUtils.isEmpty(name) || TextUtils.isEmpty(endpointId)) {\n            handleResult(\"requestConnectEx\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        ConnectOption connectOption = HMSUtils.getInstance().getConnectOptionFromReadableMap(connectOptionMap);\n\n        handleResult(\"requestConnectEx\", Nearby.getDiscoveryEngine(getContext())\n            .requestConnectEx(name, endpointId, getConnectCallback(), connectOption), promise);\n    }\n\n    /**\n     * Starts broadcasting.\n     * Sets {@link #getConnectCallback()} : A callback listener class called when detecting a connection request sent by a remote endpoint.\n     *\n     * @param name Local endpoint name.\n     * @param serviceId Service ID. The app package name is recommended.\n     * @param policy Specifies the policy type that creates BroadcastOption: MESH, P2P, STAR.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void startBroadcasting(String name, String serviceId, int policy, final Promise promise) {\n        startMethodExecTimer(\"startBroadCasting\");\n        Policy broadcastPolicy = HMSUtils.getInstance().getPolicyByNumber(policy);\n\n        if (broadcastPolicy == null) {\n            handleResult(\"startBroadCasting\", POLICY_FAIL, promise);\n            return;\n        }\n\n        if (TextUtils.isEmpty(name) || TextUtils.isEmpty(serviceId)) {\n            handleResult(\"startBroadCasting\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"startBroadCasting\", Nearby.getDiscoveryEngine(getContext())\n            .startBroadcasting(name, serviceId, getConnectCallback(),\n                new BroadcastOption.Builder().setPolicy(broadcastPolicy).build()), promise);\n    }\n\n    /**\n     * Starts to scan for remote endpoints with the specified service ID.\n     * Sets {@link #getScanEndpointCallback()} : A callback listener class called when discovering a remote\n     * endpoint with the specified service ID.\n     *\n     * @param serviceId Service ID. The app package name is recommended.\n     * @param policy Specifies the policy type that creates ScanOption: MESH, P2P, STAR.\n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void startScan(String serviceId, int policy, final Promise promise) {\n        startMethodExecTimer(\"startScan\");\n        Policy scanPolicy = HMSUtils.getInstance().getPolicyByNumber(policy);\n\n        if (scanPolicy == null) {\n            handleResult(\"startScan\", POLICY_FAIL, promise);\n            return;\n        }\n\n        if (TextUtils.isEmpty(serviceId)) {\n            handleResult(\"startScan\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"startScan\", Nearby.getDiscoveryEngine(getContext())\n                .startScan(serviceId, getScanEndpointCallback(), new ScanOption.Builder().setPolicy(scanPolicy).build()),\n            promise);\n    }\n\n    /**\n     * Stops broadcasting.\n     * \n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void stopBroadCasting(final Promise promise) {\n        startMethodExecTimer(\"stopBroadCasting\");\n        Nearby.getDiscoveryEngine(getContext()).stopBroadcasting();\n        handleResult(\"stopBroadCasting\", SUCCESS, promise);\n    }\n\n    /**\n     * Disconnects all connections.\n     * \n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void disconnectAll(final Promise promise) {\n        startMethodExecTimer(\"disconnectAll\");\n        Nearby.getDiscoveryEngine(getContext()).disconnectAll();\n        handleResult(\"disconnectAll\", SUCCESS, promise);\n    }\n\n    /**\n     * Stops discovering devices.\n     * \n     * @param promise A Promise that resolves a result object.\n     */\n    @ReactMethod\n    public void stopScan(final Promise promise) {\n        startMethodExecTimer(\"stopScan\");\n        Nearby.getDiscoveryEngine(getContext()).stopScan();\n        handleResult(\"stopScan\", SUCCESS, promise);\n    }\n\n    /**\n     * creator method for listener that obtains the data sending/receiving status\n     *\n     * @return DataCallback\n     */\n    private DataCallback getDataCallback() {\n        return new DataCallback() {\n            @Override\n            public void onReceived(String endpointId, Data data) {\n                WritableMap wm = Arguments.createMap();\n                wm.putString(\"endpointId\", endpointId);\n                wm.putInt(\"type\", data.getType());\n                wm.putString(\"id\", Long.toString(data.getId()));\n\n                if (data.getType() == Data.Type.FILE) {\n                    wm.putString(\"size\", Long.toString(data.asFile().getSize()));\n                    String fileUri = HMSUtils.getInstance().getFileUri(data.asFile());\n                    if (fileUri != null) {\n                        wm.putString(\"fileUri\", fileUri);\n                    }\n                } else if (data.getType() == Data.Type.BYTES) {\n                    wm.putArray(\"data\", HMSUtils.getInstance().convertByteArrayToWritableArray(data.asBytes()));\n                } else if (data.getType() == Data.Type.STREAM) {\n                    try {\n                        wm.putArray(\"data\",\n                            HMSUtils.getInstance().convertInputStreamToWritableArray(data.asStream().asInputStream()));\n                    } catch (IOException e) {\n                        wm.putString(\"message\", e.getMessage());\n                        wm.putArray(\"data\", Arguments.createArray());\n                    }\n                }\n                sendEvent(DATA_ON_RECEIVED, DATA_CALLBACK, wm);\n            }\n\n            @Override\n            public void onTransferUpdate(String endpointId, TransferStateUpdate transferStateUpdate) {\n                WritableMap onTransferUpdate = Arguments.createMap();\n                onTransferUpdate.putString(\"endpointId\", endpointId);\n                onTransferUpdate.putString(\"transferredBytes\",\n                    Long.toString(transferStateUpdate.getBytesTransferred()));\n                onTransferUpdate.putString(\"dataId\", Long.toString(transferStateUpdate.getDataId()));\n                onTransferUpdate.putInt(\"hashCode\", transferStateUpdate.hashCode());\n                onTransferUpdate.putInt(\"status\", transferStateUpdate.getStatus());\n                onTransferUpdate.putString(\"totalBytes\", Long.toString(transferStateUpdate.getTotalBytes()));\n                sendEvent(DATA_ON_TRANSFER_UPDATE, DATA_CALLBACK, onTransferUpdate);\n            }\n        };\n    }\n\n    /**\n     * creator method for listener object called during connection.\n     *\n     * @return ConnectCallback\n     */\n    private ConnectCallback getConnectCallback() {\n        return new ConnectCallback() {\n            @Override\n            public void onEstablish(String endpointId, ConnectInfo connectInfo) {\n                WritableMap onEstablish = Arguments.createMap();\n                onEstablish.putString(\"endpointId\", endpointId);\n                onEstablish.putString(\"authCode\", connectInfo.getAuthCode());\n                onEstablish.putString(\"endpointName\", connectInfo.getEndpointName());\n                onEstablish.putBoolean(\"isRemoteConnect\", connectInfo.isRemoteConnect());\n                sendEvent(CONNECT_ON_ESTABLISH, CONNECT_CALLBACK, onEstablish);\n            }\n\n            @Override\n            public void onResult(String endpointId, ConnectResult connectResult) {\n                WritableMap onResult = Arguments.createMap();\n                onResult.putString(\"endpointId\", endpointId);\n                onResult.putInt(\"statusCode\", connectResult.getStatus().getStatusCode());\n                onResult.putString(\"statusMessage\", connectResult.getStatus().getStatusMessage());\n                onResult.putString(\"channelPolicy\", connectResult.getChannelPolicy().toString());\n                sendEvent(CONNECT_ON_RESULT, CONNECT_CALLBACK, onResult);\n            }\n\n            @Override\n            public void onDisconnected(String endpointId) {\n                WritableMap onDisconnected = Arguments.createMap();\n                onDisconnected.putString(\"endpointId\", endpointId);\n                sendEvent(CONNECT_ON_DISCONNECTED, CONNECT_CALLBACK, onDisconnected);\n            }\n        };\n    }\n\n    /**\n     * creator method for listener object for the device scanning result.\n     *\n     * @return ScanEndpointCallback\n     */\n    private ScanEndpointCallback getScanEndpointCallback() {\n        return new ScanEndpointCallback() {\n            @Override\n            public void onFound(String endpointId, ScanEndpointInfo scanEndpointInfo) {\n                WritableMap onFound = Arguments.createMap();\n                onFound.putString(\"endpointId\", endpointId);\n                onFound.putString(\"name\", scanEndpointInfo.getName());\n                onFound.putString(\"serviceId\", scanEndpointInfo.getServiceId());\n                sendEvent(SCAN_ON_FOUND, SCAN_CALLBACK, onFound);\n            }\n\n            @Override\n            public void onLost(String endpointId) {\n                WritableMap onLost = Arguments.createMap();\n                onLost.putString(\"endpointId\", endpointId);\n                sendEvent(SCAN_ON_LOST, SCAN_CALLBACK, onLost);\n            }\n        };\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSMessage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport android.app.IntentService;\nimport android.app.PendingIntent;\nimport android.content.Intent;\nimport android.os.Build;\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\n\nimport com.huawei.hms.nearby.Nearby;\nimport com.huawei.hms.nearby.discovery.BleSignal;\nimport com.huawei.hms.nearby.discovery.Distance;\nimport com.huawei.hms.nearby.message.GetCallback;\nimport com.huawei.hms.nearby.message.GetOption;\nimport com.huawei.hms.nearby.message.Message;\nimport com.huawei.hms.nearby.message.MessageHandler;\nimport com.huawei.hms.nearby.message.MessagePicker;\nimport com.huawei.hms.nearby.message.Policy;\nimport com.huawei.hms.nearby.message.PutCallback;\nimport com.huawei.hms.nearby.message.PutOption;\nimport com.huawei.hms.nearby.message.StatusCallback;\nimport com.huawei.hms.rn.nearby.utils.HMSUtils;\n\nimport java.util.UUID;\n\nimport static com.huawei.hms.nearby.discovery.Distance.DISTANCE_UNKNOWN;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.BLE_ON_SIGNAL_CHANGED;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.DISTANCE_ON_CHANGED;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.GET_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.GET_ON_TIMEOUT;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.MESSAGE_CONSTANTS;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.MESSAGE_HANDLER;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.MESSAGE_ON_FOUND;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.MESSAGE_ON_LOST;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.PUT_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.PUT_ON_TIMEOUT;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.STATUS_CALLBACK;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.STATUS_ON_CHANGED;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.BYTES_DATA_FAIL;\n\npublic class HMSMessage extends HMSBase {\n\n    /**\n     * Constructor that initializes message module\n     *\n     * @param context app context\n     */\n    public HMSMessage(ReactApplicationContext context) {\n        super(context, HMSMessage.class.getSimpleName(), MESSAGE_CONSTANTS);\n    }\n\n    /**\n     * Publishes a message and broadcasts a token for nearby devices to scan.\n     *\n     * @param messageConfig message configuration\n     * @param bytes message content.  Value range is [-128, 127]\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void put(ReadableMap messageConfig, ReadableArray bytes, final Promise promise) {\n        startMethodExecTimer(\"put\");\n\n        if (bytes.size() == 0 || bytes.size() >= Message.MAX_CONTENT_SIZE) {\n            handleResult(\"put\", BYTES_DATA_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"put\", Nearby.getMessageEngine(getCurrentActivity()).put(buildMessage(messageConfig, bytes)), promise);\n    }\n\n    /**\n     * Publishes a message and broadcasts a token for nearby devices to scan.\n     * Message is published only to apps that use the same project ID and\n     * have registered the message type with the cloud for subscription.\n     * Builds putOption using {@link #buildPutOption}\n     *\n     * @param messageConfig message configuration\n     * @param bytes message content. Value range is [-128, 127]\n     * @param putOptionConfiguration put option\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void putWithOption(ReadableMap messageConfig, ReadableArray bytes, ReadableMap putOptionConfiguration,\n        final Promise promise) {\n        startMethodExecTimer(\"putWithOption\");\n\n        if (bytes.size() == 0 || bytes.size() >= Message.MAX_CONTENT_SIZE) {\n            handleResult(\"putWithOption\", BYTES_DATA_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"putWithOption\", Nearby.getMessageEngine(getCurrentActivity())\n            .put(buildMessage(messageConfig, bytes), buildPutOption(putOptionConfiguration)), promise);\n    }\n\n    /**\n     * Registers a status callback function {@link #getStatusCallback()}, which will notify your app of key events.\n     * When your app calls one of the APIs for the first time, the function will return the status.\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void registerStatusCallback(final Promise promise) {\n        startMethodExecTimer(\"registerStatusCallback\");\n        handleResult(\"registerStatusCallback\",\n            Nearby.getMessageEngine(getCurrentActivity()).registerStatusCallback(getStatusCallback()), promise);\n    }\n\n    /**\n     * Cancels the status callback registered before {@link #getStatusCallback()}.\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void unRegisterStatusCallback(final Promise promise) {\n        startMethodExecTimer(\"unRegisterStatusCallback\");\n        handleResult(\"unRegisterStatusCallback\",\n            Nearby.getMessageEngine(getCurrentActivity()).unregisterStatusCallback(getStatusCallback()), promise);\n    }\n\n    /**\n     * Obtains messages from the cloud using the default option\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getMessage(final Promise promise) {\n        startMethodExecTimer(\"getMessage\");\n        handleResult(\"getMessage\", Nearby.getMessageEngine(getCurrentActivity()).get(getMessageHandler()), promise);\n    }\n\n    /**\n     * Registers the messages to be obtained with the cloud.\n     * Only messages with the same project ID can be obtained.\n     * Builds getOption using {@link #buildGetOption}\n     *\n     * @param getOptionConfiguration configuration for messages obtaining\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getMessageWithOption(ReadableMap getOptionConfiguration, final Promise promise) {\n        startMethodExecTimer(\"getMessageWithOption\");\n        handleResult(\"getMessageWithOption\",\n            Nearby.getMessageEngine(getCurrentActivity()).get(getMessageHandler(), buildGetOption(getOptionConfiguration)),\n            promise);\n    }\n\n    /**\n     * Identifies only BLE beacon messages.\n     * It subscribes to messages published by nearby devices in a persistent and low-power manner and uses the default configuration.\n     * Scanning is going on no matter whether your app runs in the background or foreground.\n     * The scanning stops when the app process is killed.\n     * Uses {@link BackgroundMessageService}\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getMessagePending(final Promise promise) {\n        startMethodExecTimer(\"getMessagePending\");\n        BackgroundMessageService.initHandler(getMessageHandler());\n\n        final PendingIntent pendingIntent;\n        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);\n        } else{\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT);\n        }\n\n        handleResult(\"getMessagePending\", Nearby.getMessageEngine(getCurrentActivity()).get(pendingIntent), promise);\n    }\n\n    /**\n     * Identifies only BLE beacon messages.\n     * Scanning is going on no matter whether your app runs in the background or foreground.\n     * The scanning stops when the app process is killed.\n     * Uses {@link BackgroundMessageService}\n     *\n     * @param getOptionConfiguration configuration parameter for background message obtaining\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getMessagePendingWithOption(ReadableMap getOptionConfiguration, final Promise promise) {\n        startMethodExecTimer(\"getMessagePendingWithOption\");\n        BackgroundMessageService.initHandler(getMessageHandler());\n\n        final PendingIntent pendingIntent;\n        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);\n        } else{\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT);\n        }\n\n        handleResult(\"getMessagePendingWithOption\",\n            Nearby.getMessageEngine(getCurrentActivity()).get(pendingIntent, buildGetOption(getOptionConfiguration)), promise);\n    }\n\n    /**\n     * Cancels message publishing.\n     *\n     * @param messageConfig message configuration\n     * @param bytes Published message content\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void unput(ReadableMap messageConfig, ReadableArray bytes, final Promise promise) {\n        startMethodExecTimer(\"unput\");\n\n        if (bytes.size() == 0 || bytes.size() >= Message.MAX_CONTENT_SIZE) {\n            handleResult(\"unput\", BYTES_DATA_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"unput\", Nearby.getMessageEngine(getCurrentActivity()).unput(buildMessage(messageConfig, bytes)), promise);\n    }\n\n    /**\n     * Cancels a message subscription.\n     * Uses current message handler {@link #getMessageHandler()} that is registered\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void unget(final Promise promise) {\n        startMethodExecTimer(\"unget\");\n        handleResult(\"unget\", Nearby.getMessageEngine(getCurrentActivity()).unget(getMessageHandler()), promise);\n    }\n\n    /**\n     * Cancels the background message subscription.\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void ungetPending(final Promise promise) {\n        startMethodExecTimer(\"ungetPending\");\n        BackgroundMessageService.initHandler(getMessageHandler());\n\n        final PendingIntent pendingIntent;\n        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);\n        } else{\n            pendingIntent = PendingIntent.getService(getContext(), 0,\n                new Intent(getContext(), BackgroundMessageService.class), PendingIntent.FLAG_UPDATE_CURRENT);\n        }\n\n        handleResult(\"ungetPending\", Nearby.getMessageEngine(getCurrentActivity()).unget(pendingIntent), promise);\n    }\n\n    /**\n     * Builds a new Policy object\n     *\n     * @param readableMap policy configuration\n     * @return Policy\n     */\n    private Policy buildPolicy(ReadableMap readableMap) {\n        int findingMode = Policy.POLICY_FINDING_MODE_DEFAULT;\n        int distanceType = Policy.POLICY_DISTANCE_TYPE_DEFAULT;\n        int ttlSeconds = Policy.POLICY_TTL_SECONDS_DEFAULT;\n\n        if (readableMap == null) {\n            Log.i(getName(), \"Policy is created with default options\");\n            return Policy.DEFAULT;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"findingMode\", ReadableType.Number)) {\n            findingMode = readableMap.getInt(\"findingMode\");\n            Log.i(getName(), \"Policy findingMode option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"distanceType\", ReadableType.Number)) {\n            distanceType = readableMap.getInt(\"distanceType\");\n            Log.i(getName(), \"Policy distanceType option set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"ttlSeconds\", ReadableType.Number)) {\n            ttlSeconds = readableMap.getInt(\"ttlSeconds\");\n            Log.i(getName(), \"Policy ttlSeconds option set\");\n        }\n\n        return new Policy.Builder().setDistanceType(distanceType)\n            .setFindingMode(findingMode)\n            .setTtlSeconds(ttlSeconds)\n            .build();\n    }\n\n    /**\n     * Builds a new PutOption object\n     *\n     * @param readableMap put option configuration\n     * @return PutOption\n     */\n    private PutOption buildPutOption(ReadableMap readableMap) {\n        PutOption.Builder builder = new PutOption.Builder();\n\n        if (readableMap == null) {\n            Log.i(getName(), \"PutOption is created with default options\");\n            return PutOption.DEFAULT;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"policy\", ReadableType.Map)) {\n            builder.setPolicy(buildPolicy(readableMap.getMap(\"policy\")));\n            Log.i(getName(), \"PutOption Policy option set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"setCallback\")) {\n            builder.setCallback(getPutCallback());\n            Log.i(getName(), \"PutOption PutCallback option set\");\n        }\n\n        Log.i(getName(), \"PutOption build\");\n        return builder.build();\n    }\n\n    /**\n     * Builds a new GetOption object\n     *\n     * @param readableMap get option configuration\n     * @return GetOption\n     */\n    private GetOption buildGetOption(ReadableMap readableMap) {\n        GetOption.Builder builder = new GetOption.Builder();\n\n        if (readableMap == null) {\n            Log.i(getName(), \"GetOption is created with default options\");\n            return GetOption.DEFAULT;\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"policy\", ReadableType.Map)) {\n            builder.setPolicy(buildPolicy(readableMap.getMap(\"policy\")));\n            Log.i(getName(), \"GetOption Policy is set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"picker\", ReadableType.Map)) {\n            builder.setPicker(buildMessagePicker(readableMap.getMap(\"picker\")));\n            Log.i(getName(), \"GetOption MessagePicker is set\");\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"setCallback\")) {\n            builder.setCallback(getGetCallback());\n            Log.i(getName(), \"GetOption GetCallback is set\");\n        }\n\n        Log.i(getName(), \"GetOption build\");\n        return builder.build();\n    }\n\n    /**\n     * Builds a new MessagePicker object\n     *\n     * @param readableMap message picker configuration\n     * @return MessagePicker\n     */\n    private MessagePicker buildMessagePicker(ReadableMap readableMap) {\n        MessagePicker.Builder builder = new MessagePicker.Builder();\n\n        if (readableMap == null) {\n            Log.i(getName(), \"MessagePicker readableMap is null. Created with includeAllTypes\");\n            return MessagePicker.INCLUDE_ALL_TYPES;\n        }\n        if (HMSUtils.getInstance().boolKeyCheck(readableMap, \"includeAllTypes\")) {\n            builder.includeAllTypes();\n            Log.i(getName(), \"MessagePicker includeAllTypes set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"includeEddyStoneUids\", ReadableType.Array)) {\n            ReadableArray includeEddyStoneUids = readableMap.getArray(\"includeEddyStoneUids\");\n            for (int i = 0; i < includeEddyStoneUids.size(); i++) {\n                String hexNamespace = null;\n                String hexInstance = null;\n                ReadableMap tempMap = includeEddyStoneUids.getMap(i);\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"hexNamespace\", ReadableType.String)) {\n                    hexNamespace = tempMap.getString(\"hexNamespace\");\n                    Log.i(getName(), \"MessagePicker hexNamespace set\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"hexInstance\", ReadableType.String)) {\n                    hexInstance = tempMap.getString(\"hexInstance\");\n                    Log.i(getName(), \"MessagePicker hexInstance set\");\n                }\n                if (!TextUtils.isEmpty(hexNamespace) && !TextUtils.isEmpty(hexInstance) && !hexNamespace.contains(\"*\")\n                    && !hexInstance.contains(\"*\")) {\n                    builder.includeEddystoneUids(hexNamespace, hexInstance);\n                    Log.i(getName(), \"MessagePicker includeEddyStoneUids set\");\n                } else {\n                    Log.i(getName(), \"MessagePicker includeEddyStoneUids setting rule not match\");\n                }\n            }\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"picker\", ReadableType.Map)) {\n            builder.includePicker(buildMessagePicker(readableMap.getMap(\"picker\")));\n            Log.i(getName(), \"MessagePicker picker set\");\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"includeIBeaconIds\", ReadableType.Array)) {\n            ReadableArray includeIBeaconIds = readableMap.getArray(\"includeIBeaconIds\");\n            for (int i = 0; i < includeIBeaconIds.size(); i++) {\n                ReadableMap tempMap = includeIBeaconIds.getMap(i);\n                String iBeaconUuid = null;\n                String major = null;\n                String minor = null;\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"iBeaconUuid\", ReadableType.String)) {\n                    iBeaconUuid = tempMap.getString(\"iBeaconUuid\");\n                    Log.i(getName(), \"MessagePicker iBeaconUuid set\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"major\", ReadableType.String)) {\n                    major = tempMap.getString(\"major\");\n                    Log.i(getName(), \"MessagePicker major set\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"minor\", ReadableType.String)) {\n                    minor = tempMap.getString(\"minor\");\n                    Log.i(getName(), \"MessagePicker minor set\");\n                }\n\n                if (!TextUtils.isEmpty(iBeaconUuid) && !TextUtils.isEmpty(major) && !TextUtils.isEmpty(minor)) {\n                    try {\n                        builder.includeIBeaconIds(UUID.fromString(iBeaconUuid), Short.parseShort(major),\n                            Short.parseShort(minor));\n                        Log.i(getName(), \"MessagePicker includeIBeaconIds set\");\n                    } catch (Exception e) {\n                        Log.i(getName(),\n                            \"MessagePicker Exception happened when setting includeIBeaconIds\" + e.getMessage());\n                    }\n                } else {\n                    Log.i(getName(), \"MessagePicker includeIBeaconIds is not set required params are not given\");\n                }\n            }\n        }\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"includeNamespaceType\", ReadableType.Array)) {\n            ReadableArray includeNamespaceType = readableMap.getArray(\"includeNamespaceType\");\n            for (int i = 0; i < includeNamespaceType.size(); i++) {\n                ReadableMap tempMap = includeNamespaceType.getMap(i);\n                String namespace = null;\n                String type = null;\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"namespace\", ReadableType.String)) {\n                    namespace = tempMap.getString(\"namespace\");\n                    Log.i(getName(), \"MessagePicker namespace set\");\n                }\n                if (HMSUtils.getInstance().hasValidKey(tempMap, \"type\", ReadableType.String)) {\n                    type = tempMap.getString(\"type\");\n                    Log.i(getName(), \"MessagePicker type set\");\n                }\n                if (!TextUtils.isEmpty(namespace) && !TextUtils.isEmpty(type) && !namespace.contains(\"*\")\n                    && !type.contains(\"*\")) {\n                    builder.includeNamespaceType(namespace, type);\n                    Log.i(getName(), \"MessagePicker includeNamespaceType set\");\n                } else {\n                    Log.i(getName(),\n                        \"MessagePicker includeNamespaceType namespace or type is empty or null or contains *\");\n                }\n            }\n        }\n\n        return builder.build();\n    }\n\n    /**\n     * Builds a new Message object\n     *\n     * @param readableMap message configuration\n     * @param readableArray message content\n     * @return Message\n     */\n    private Message buildMessage(ReadableMap readableMap, ReadableArray readableArray) {\n        String type = Message.MESSAGE_TYPE_EDDYSTONE_UID;\n        String nameSpace = Message.MESSAGE_NAMESPACE_RESERVED;\n\n        if (readableMap == null) {\n            Log.i(getName(), \"Message readableMap is null.\");\n            return new Message(HMSUtils.getInstance().convertReadableArrayToByteArray(readableArray));\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"type\", ReadableType.String)) {\n            type = readableMap.getString(\"type\");\n            Log.i(getName(), \"Message type set.\");\n        }\n\n        if (HMSUtils.getInstance().hasValidKey(readableMap, \"namespace\", ReadableType.String)) {\n            nameSpace = readableMap.getString(\"namespace\");\n            Log.i(getName(), \"Message nameSpace set.\");\n        }\n\n        return new Message(HMSUtils.getInstance().convertReadableArrayToByteArray(readableArray), type, nameSpace);\n    }\n\n    /**\n     * Creates or returns callback listener object for events related to message subscription.\n     *\n     * @return GetCallback\n     */\n    private GetCallback getGetCallback() {\n        return new GetCallback() {\n            @Override\n            public void onTimeout() {\n                WritableMap onTimeout = Arguments.createMap();\n                onTimeout.putString(\"onTimeout\", \"Message subscription expired\");\n                sendEvent(GET_ON_TIMEOUT, GET_CALLBACK, onTimeout);\n            }\n        };\n    }\n\n    /**\n     * Creates or returns callback listener object for events related to message publishing.\n     *\n     * @return PutCallback\n     */\n    private PutCallback getPutCallback() {\n        return new PutCallback() {\n            @Override\n            public void onTimeout() {\n                WritableMap onTimeout = Arguments.createMap();\n                onTimeout.putString(\"onTimeout\", \"Message publishing expired\");\n                sendEvent(PUT_ON_TIMEOUT, PUT_CALLBACK, onTimeout);\n            }\n        };\n    }\n\n    /**\n     * Creates or returns callback listener object for events related to MessageEngine status changes.\n     *\n     * @return StatusCallback\n     */\n    private StatusCallback getStatusCallback() {\n        return new StatusCallback() {\n            @Override\n            public void onPermissionChanged(boolean grantPermission) {\n                WritableMap onTimeout = Arguments.createMap();\n                onTimeout.putBoolean(\"onPermissionChanged\", grantPermission);\n                sendEvent(STATUS_ON_CHANGED, STATUS_CALLBACK, onTimeout);\n            }\n        };\n    }\n\n    /**\n     * Creates or returns callback listener object for events such as signal change, distance change,\n     * message reception,and failure to receive a message.\n     *\n     * @return MessageHandler\n     */\n    private MessageHandler getMessageHandler() {\n        return new MessageHandler() {\n            @Override\n            public void onBleSignalChanged(Message message, BleSignal bleSignal) {\n                WritableMap onBleSignalChanged = Arguments.createMap();\n                onBleSignalChanged.putString(\"namespace\", message.getNamespace());\n                onBleSignalChanged.putString(\"type\", message.getType());\n                onBleSignalChanged.putArray(\"content\",\n                    HMSUtils.getInstance().convertByteArrayToWritableArray(message.getContent()));\n                onBleSignalChanged.putInt(\"rSSI\", bleSignal.getRssi());\n                onBleSignalChanged.putInt(\"txPower\", bleSignal.getTxPower());\n                sendEvent(BLE_ON_SIGNAL_CHANGED, MESSAGE_HANDLER, onBleSignalChanged);\n            }\n\n            @Override\n            public void onDistanceChanged(Message message, Distance distance) {\n                WritableMap onDistanceChanged = Arguments.createMap();\n                onDistanceChanged.putString(\"namespace\", message.getNamespace());\n                onDistanceChanged.putString(\"type\", message.getType());\n                onDistanceChanged.putInt(\"isUnknown\", DISTANCE_UNKNOWN.compareTo(distance));\n                onDistanceChanged.putArray(\"content\",\n                    HMSUtils.getInstance().convertByteArrayToWritableArray(message.getContent()));\n                onDistanceChanged.putDouble(\"meters\",\n                    Double.isNaN(distance.getMeters()) ? DISTANCE_UNKNOWN.getMeters() : distance.getMeters());\n                onDistanceChanged.putInt(\"precision\", distance.getPrecision());\n                sendEvent(DISTANCE_ON_CHANGED, MESSAGE_HANDLER, onDistanceChanged);\n            }\n\n            @Override\n            public void onFound(Message message) {\n                WritableMap onFound = Arguments.createMap();\n                onFound.putString(\"namespace\", message.getNamespace());\n                onFound.putString(\"type\", message.getType());\n                onFound.putArray(\"content\",\n                    HMSUtils.getInstance().convertByteArrayToWritableArray(message.getContent()));\n                sendEvent(MESSAGE_ON_FOUND, MESSAGE_HANDLER, onFound);\n            }\n\n            @Override\n            public void onLost(Message message) {\n                WritableMap onLost = Arguments.createMap();\n                onLost.putString(\"namespace\", message.getNamespace());\n                onLost.putString(\"type\", message.getType());\n                onLost.putArray(\"content\",\n                    HMSUtils.getInstance().convertByteArrayToWritableArray(message.getContent()));\n                sendEvent(MESSAGE_ON_LOST, MESSAGE_HANDLER, onLost);\n            }\n        };\n    }\n\n    /**\n     * This class provides identification of BLE beacon messages on background.\n     * Scanning is going on no matter whether your app runs in the background or foreground.\n     * The scanning stops when the app process is killed.\n     */\n    public static class BackgroundMessageService extends IntentService {\n        private static final String SERVICE_NAME = BackgroundMessageService.class.getName();\n\n        private static MessageHandler messageHandler;\n\n        public BackgroundMessageService() {\n            super(SERVICE_NAME);\n        }\n\n        public static void initHandler(MessageHandler handler) {\n            messageHandler = handler;\n        }\n\n        @Override\n        public void onCreate() {\n            super.onCreate();\n            Log.i(SERVICE_NAME, \"onCreate\");\n        }\n\n        @Override\n        public void onDestroy() {\n            super.onDestroy();\n            Log.i(SERVICE_NAME, \"onDestroy\");\n        }\n\n        @Override\n        protected void onHandleIntent(@Nullable Intent intent) {\n            Log.i(SERVICE_NAME, \"onHandleIntent\");\n            Nearby.getMessageEngine(getApplicationContext()).handleIntent(intent, messageHandler);\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSNearbyApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport android.text.TextUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.WritableMap;\n\nimport com.huawei.hms.nearby.Nearby;\nimport com.huawei.hms.nearby.NearbyApiContext;\nimport com.huawei.hms.nearby.common.RegionCode;\n\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.APPLICATION_CONSTANTS;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.STRING_PARAM_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.SUCCESS;\n\npublic class HMSNearbyApplication extends HMSBase {\n\n    /**\n     * Constructor that initializes application module\n     *\n     * @param mContext app context\n     */\n    public HMSNearbyApplication(ReactApplicationContext mContext) {\n        super(mContext, HMSNearbyApplication.class.getSimpleName(), APPLICATION_CONSTANTS);\n    }\n\n    /**\n     * Enables logging feature for method calls\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n        getLogger().enableLogger();\n        promise.resolve(SUCCESS.getStatusAndMessage());\n    }\n\n    /**\n     * Disables logging feature for method calls\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n        getLogger().disableLogger();\n        promise.resolve(SUCCESS.getStatusAndMessage());\n    }\n\n    /**\n     * Sets the API credential for your app.\n     *\n     * @param apiKey api key string\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void setApiKey(String apiKey, final Promise promise) {\n        startMethodExecTimer(\"setApiKey\");\n\n        if (TextUtils.isEmpty(apiKey)) {\n            handleResult(\"setApiKey\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        NearbyApiContext.getInstance().setApiKey(apiKey);\n        handleResult(\"setApiKey\", SUCCESS, promise);\n    }\n\n    /**\n     * Obtains the current API credential.\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getApiKey(final Promise promise) {\n        startMethodExecTimer(\"getApiKey\");\n        String apiKey = NearbyApiContext.getInstance().getApiKey();\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", TextUtils.isEmpty(apiKey) ? \"\" : apiKey);\n        getLogger().sendSingleEvent(\"getApiKey\");\n        promise.resolve(wm);\n    }\n\n    /**\n     * Obtains the Nearby Service SDK version number.\n     * \n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void getVersion(final Promise promise) {\n        startMethodExecTimer(\"getVersion\");\n        WritableMap wm = SUCCESS.getStatusAndMessage();\n        wm.putString(\"result\", Nearby.getVersion());\n        getLogger().sendSingleEvent(\"getVersion\");\n        promise.resolve(wm);\n    }\n\n    @ReactMethod\n    public void setAgcRegion(String code, final Promise promise){\n        startMethodExecTimer(\"setAgcRegion\");\n        try {\n            RegionCode regionCode = RegionCode.valueOf(code);\n            int statusCode = Nearby.setAgcRegion(getCurrentActivity().getApplicationContext(),regionCode);\n            WritableMap wm = SUCCESS.getStatusAndMessage();\n            wm.putInt(\"result\", statusCode);\n            getLogger().sendSingleEvent(\"setAgcRegion\");\n            promise.resolve(wm);\n        } catch(Exception e) {\n            getLogger().sendSingleEvent(\"setAgcRegion\", e.getMessage());\n            promise.reject(\"Error\",e.getMessage());\n        }\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/modules/HMSTransfer.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.modules;\n\nimport android.net.Uri;\nimport android.os.ParcelFileDescriptor;\nimport android.text.TextUtils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\n\nimport com.huawei.hms.nearby.Nearby;\nimport com.huawei.hms.nearby.transfer.Data;\nimport com.huawei.hms.nearby.transfer.TransferEngine;\nimport com.huawei.hms.rn.nearby.utils.HMSUtils;\n\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.net.URL;\n\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.TRANSFER_CONSTANTS;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.BYTES_DATA_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.ENDPOINT_ID_FAIL;\nimport static com.huawei.hms.rn.nearby.utils.HMSResult.STRING_PARAM_FAIL;\n\npublic class HMSTransfer extends HMSBase {\n\n    /**\n     * Constructor that initializes transfer module\n     *\n     * @param context app context\n     */\n    public HMSTransfer(ReactApplicationContext context) {\n        super(context, HMSTransfer.class.getSimpleName(), TRANSFER_CONSTANTS);\n    }\n\n    /**\n     * Sends byte array to multiple endpoints specified in a list.\n     * The method can be called only when a connection has been successfully established.\n     *\n     * @param bytes Integer array that contains data. Value range is [-127, 127]\n     * @param endpointIds String array that contains endpoint ids to transfer data\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void transferBytes(ReadableArray bytes, ReadableArray endpointIds, final Promise promise) {\n        startMethodExecTimer(\"transferBytes\");\n\n        if (bytes.size() == 0 || bytes.size() >= TransferEngine.MAX_SIZE_DATA) {\n            handleResult(\"transferBytes\", BYTES_DATA_FAIL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().checkEndpointIds(endpointIds)) {\n            handleResult(\"transferBytes\", ENDPOINT_ID_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"transferBytes\", Nearby.getTransferEngine(getContext())\n            .sendData(HMSUtils.getInstance().convertToArrayList(endpointIds),\n                Data.fromBytes(HMSUtils.getInstance().convertReadableArrayToByteArray(bytes))), promise);\n    }\n\n    /**\n     * Sends file data to multiple endpoints specified in a list.\n     * The method can be called only when a connection has been successfully established.\n     *\n     * @param uri File uri.\n     * @param endpointIds String array that contains endpoint ids to transfer data\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void transferFile(String uri, ReadableArray endpointIds, final Promise promise) {\n        startMethodExecTimer(\"transferFile\");\n\n        if (TextUtils.isEmpty(uri)) {\n            handleResult(\"transferFile\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().checkEndpointIds(endpointIds)) {\n            handleResult(\"transferFile\", ENDPOINT_ID_FAIL, promise);\n            return;\n        }\n\n        try {\n            ParcelFileDescriptor pfd = getContext().getContentResolver().openFileDescriptor(Uri.parse(uri), \"r\");\n            handleResult(\"transferFile\", Nearby.getTransferEngine(getContext())\n                .sendData(HMSUtils.getInstance().convertToArrayList(endpointIds), Data.fromFile(pfd)), promise);\n        } catch (FileNotFoundException e) {\n            handleResult(\"transferFile\", e, promise);\n        }\n    }\n\n    /**\n     * Sends stream data to multiple endpoints specified in a list.\n     * The method can be called only when a connection has been successfully established.\n     *\n     * @param endpoint Url endpoint\n     * @param endpointIds String array that contains endpoint ids to transfer data\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void transferStream(String endpoint, ReadableArray endpointIds, final Promise promise) {\n        startMethodExecTimer(\"transferStream\");\n\n        if (TextUtils.isEmpty(endpoint)) {\n            handleResult(\"transferStream\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        if (HMSUtils.getInstance().checkEndpointIds(endpointIds)) {\n            handleResult(\"transferStream\", ENDPOINT_ID_FAIL, promise);\n            return;\n        }\n\n        try {\n            URL url = new URL(endpoint);\n            handleResult(\"transferStream\", Nearby.getTransferEngine(getContext())\n                    .sendData(HMSUtils.getInstance().convertToArrayList(endpointIds), Data.fromStream(url.openStream())),\n                promise);\n        } catch (IOException e) {\n            handleResult(\"transferStream\", e, promise);\n        }\n    }\n\n    /**\n     * Cancel data transfer for given data id.\n     * The method can be called only when a connection has been successfully established.\n     *\n     * @param id Data id\n     * @param promise A Promise that resolves a result object\n     */\n    @ReactMethod\n    public void cancelDataTransfer(String id, final Promise promise) {\n        startMethodExecTimer(\"cancelDataTransfer\");\n\n        if (TextUtils.isEmpty(id)) {\n            handleResult(\"cancelDataTransfer\", STRING_PARAM_FAIL, promise);\n            return;\n        }\n\n        handleResult(\"transferStream\", Nearby.getTransferEngine(getContext()).cancelDataTransfer(Long.parseLong(id)),\n            promise);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/utils/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.utils;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"NearbyService\"; \n\n    private static final String PLATFORM = \"ReactNative\"; \n\n    private static final String VERSION = \"6.12.1.310\"; \n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/utils/HMSResult.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.utils;\n\nimport android.text.TextUtils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableMap;\n\nimport com.huawei.hms.nearby.StatusCode;\n\npublic enum HMSResult {\n    SUCCESS(StatusCode.STATUS_SUCCESS, \"Success\"),\n    FAILURE(StatusCode.STATUS_FAILURE, \"Failure\"),\n    POLICY_FAIL(8200, \"Policy is not valid\"),\n    STRING_PARAM_FAIL(8201, \"String parameter is null or empty\"),\n    ENDPOINT_ID_FAIL(8202, \"Endpoint ids are not valid\"),\n    BYTES_DATA_FAIL(8203, \"Bytes data is empty or exceeds max size\");\n\n    private int statusCode;\n\n    private String resultMessage;\n\n    HMSResult(int statusCode, String resultMessage) {\n        this.statusCode = statusCode;\n        this.resultMessage = resultMessage;\n    }\n\n    /**\n     * Getter method for status code\n     *\n     * @return int\n     */\n    public int getStatusCode() {\n        return statusCode;\n    }\n\n    /**\n     * Getter method for status message\n     *\n     * @return String\n     */\n    public String getResultMessage() {\n        return resultMessage;\n    }\n\n    /**\n     * Creates a result WritableMap\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage() {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", this.statusCode);\n        wm.putString(\"message\", this.resultMessage);\n        return wm;\n    }\n\n    /**\n     * Creates a result WritableMap\n     * \n     * @param code Code of result\n     * @param message Result message\n     *\n     * @return WritableMap\n     */\n    public WritableMap getStatusAndMessage(Integer code, String message) {\n        WritableMap wm = Arguments.createMap();\n        wm.putInt(\"status\", code == null ? this.statusCode : code);\n        wm.putString(\"message\", TextUtils.isEmpty(message) ? this.resultMessage : message);\n        return wm;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/android/src/main/java/com/huawei/hms/rn/nearby/utils/HMSUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.utils;\n\nimport android.net.Uri;\nimport android.util.Log;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\n\nimport com.huawei.hms.nearby.discovery.ChannelPolicy;\nimport com.huawei.hms.nearby.discovery.ConnectOption;\nimport com.huawei.hms.nearby.discovery.Policy;\nimport com.huawei.hms.nearby.transfer.Data;\nimport com.huawei.hms.utils.IOUtils;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.ArrayList;\n\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CHANNEL_AUTO;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CHANNEL_HIGH_THROUGHPUT;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.CHANNEL_INSTANCE;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.POLICY_MESH;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.POLICY_P2P;\nimport static com.huawei.hms.rn.nearby.constants.HMSConstants.POLICY_STAR;\n\npublic class HMSUtils {\n    private static volatile HMSUtils instance;\n\n    public static HMSUtils getInstance() {\n        if (instance == null) {\n            instance = new HMSUtils();\n        }\n        return instance;\n    }\n\n\n    /**\n     * Helper method for finding Channel Policy type\n     *\n     * @param policy number that defines policy type\n     * @return WifiSharePolicy object or null\n     */\n    @Nullable\n    public ChannelPolicy getChannelPolicyFromNumber(int policy) {\n        switch (policy) {\n            case CHANNEL_AUTO:\n                return ChannelPolicy.CHANNEL_AUTO;\n            case CHANNEL_HIGH_THROUGHPUT:\n                return ChannelPolicy.CHANNEL_HIGH_THROUGHPUT;\n            case CHANNEL_INSTANCE:\n                return ChannelPolicy.CHANNEL_INSTANCE;\n        }\n\n        return null;\n    }\n\n    /**\n     * Helper method for finding Policy type for Connection\n     *\n     * @param policy number that defines policy type\n     * @return Policy object or null\n     */\n    @Nullable\n    public Policy getPolicyByNumber(int policy) {\n        if (policy == POLICY_MESH) {\n            return Policy.POLICY_MESH;\n        } else if (policy == POLICY_P2P) {\n            return Policy.POLICY_P2P;\n        } else if (policy == POLICY_STAR) {\n            return Policy.POLICY_STAR;\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Helper method that checks if given key valid or not\n     *\n     * @param readableMap ReadableMap object\n     * @param key key in ReadableMap\n     * @param type key type\n     * @return true or false\n     */\n    public boolean hasValidKey(ReadableMap readableMap, String key, ReadableType type) {\n        return readableMap.hasKey(key) && readableMap.getType(key) == type;\n    }\n\n    /**\n     * Helper method that returns given keys boolean value if given key is valid\n     *\n     * @param readableMap ReadableMap object\n     * @param key key in ReadableMap\n     * @return true or false\n     */\n    public boolean boolKeyCheck(ReadableMap readableMap, String key) {\n        if (!hasValidKey(readableMap, key, ReadableType.Boolean)) {\n            return false;\n        }\n        return readableMap.getBoolean(key);\n    }\n\n    /**\n     * Helper method to get file URI\n     *\n     * @param file File object\n     * @return Uri string\n     */\n    public String getFileUri(Data.File file) {\n        String fileUriStr = null;\n        try {\n            Uri uri = file.asUri();\n            if (uri != null) {\n                fileUriStr = uri.toString();\n            } else {\n                fileUriStr = file.asJavaFile().toURI().toString();\n            }\n        } catch (RuntimeException e) {\n            Log.d(HMSUtils.class.getSimpleName(), \"Obtain file uri error!\");\n        }\n        return fileUriStr;\n    }\n\n    /**\n     * Helper method that converts ReadableArray to byte[]\n     *\n     * @param ra ReadableArray\n     * @return byte[]\n     */\n    public byte[] convertReadableArrayToByteArray(ReadableArray ra) {\n        byte[] bytes = new byte[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            bytes[i] = (byte) ra.getInt(i);\n        }\n        return bytes;\n    }\n\n    /**\n     * Helper method that converts byte[] to WritableArray\n     *\n     * @param ba ReadableArray\n     * @return WritableArray\n     */\n    public WritableArray convertByteArrayToWritableArray(byte[] ba) {\n        WritableArray wa = Arguments.createArray();\n        for (byte b : ba) {\n            wa.pushInt(b);\n        }\n        return wa;\n    }\n\n    /**\n     * Helper method that converts InputStream to WritableArray\n     *\n     * @param is InputStream\n     * @return WritableArray\n     * @throws IOException Input Output Exception\n     */\n    public WritableArray convertInputStreamToWritableArray(InputStream is) throws IOException {\n        byte[] bytes = IOUtils.toByteArray(is);\n        return convertByteArrayToWritableArray(bytes);\n    }\n\n    /**\n     * Helper method that checks endpoint ids in ReadableArray are valid\n     *\n     * @param ra ReadableArray\n     * @return true or false\n     */\n    public boolean checkEndpointIds(ReadableArray ra) {\n        if (ra.size() == 0) {\n            return true;\n        }\n        for (int i = 0; i < ra.size(); i++) {\n            if (ra.getType(i) != ReadableType.String || ra.getString(i).isEmpty()) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Helper method that converts ReadableArray of endpoint ids to ArrayList\n     *\n     * @param ra ReadableArray\n     * @return ArrayList\n     */\n    public ArrayList<String> convertToArrayList(ReadableArray ra) {\n        ArrayList<String> endpointIds = new ArrayList<>();\n        for (int i = 0; i < ra.size(); i++) {\n            endpointIds.add(ra.getString(i));\n        }\n        return endpointIds;\n    }\n\n    /**\n     * Helper method that converts ReadableMap of connect options to ConnectOption object.\n     *\n     * @param map ReadableMap\n     * @return ConnectOption object\n     */\n    public ConnectOption getConnectOptionFromReadableMap(ReadableMap map) {\n        ConnectOption.Builder builder = new ConnectOption.Builder();\n        if (map != null && hasValidKey(map, \"policy\", ReadableType.Number)) {\n            builder.setPolicy(getChannelPolicyFromNumber(map.getInt(\"policy\")));\n        }\n\n        return builder.build();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\ngradle-wrapper.jar\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\npackage-lock.json\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\n\n*.jks\nagconnect-services.json\n*.tmp\n"
  },
  {
    "path": "react-native-hms-nearby/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from 'react';\nimport { View, Text, TouchableOpacity, Image } from 'react-native';\nimport { styles } from \"./src/Styles\"; \nimport StartPage from './src/StartPage';\nimport Connection from './src/Connection';\nimport Message from './src/Message';\nimport { LogBox } from 'react-native';\nimport Beacon from './src/Beacon';\n\nLogBox.ignoreLogs([\"EventEmitter\"]);\n\nconst pages = {\n  StartPage: {\n    screen: StartPage,\n    navigationOptions: {\n      headerTitle: 'HMS RN Nearby Kit Demo',\n    },\n    path: 'start',\n  },\n  Connection: {\n    screen: Connection,\n    navigationOptions: {\n      headerTitle: 'Nearby Connection',\n    },\n    path: 'start/nearbyconnection',\n  },\n  Message: {\n    screen: Message,\n    navigationOptions: {\n      headerTitle: 'Nearby Message',\n    },\n    path: 'start/nearbymessage',\n  },\n  Beacon: {\n    screen: Beacon,\n    navigationOptions: {\n      headerTitle: 'Nearby Beacon'\n    },\n    path: 'start/nearbybeacon'\n  }\n};\n\nexport default class App extends Component {\n  state = {\n    pageItem: pages.StartPage,\n  }\n\n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n\n  goBack = () => {\n    this.changePage(\"StartPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"start\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <StartPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/README.md",
    "content": "# React-Native HMS Nearby - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Nearby Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Nearby - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: 'com.facebook.react'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    entryFile   : \"index.js\",\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    \n    implementation \"com.facebook.react:react-native:+\"\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301'\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group: 'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n-ignorewarnings \n-keepattributes *Annotation*\n-keepattributes Exceptions \n-keepattributes InnerClasses\n-keepattributes Signature \n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n            android:usesCleartextTraffic=\"true\"\n            tools:targetApi=\"28\"\n            tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        package=\"com.huawei.hms.rn.nearby.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n\n    <application\n            android:name=\".MainApplication\"\n            android:allowBackup=\"false\"\n            android:label=\"HMS RN Nearby Demo\"\n            android:theme=\"@style/AppTheme\"\n            android:requestLegacyExternalStorage=\"true\">\n        <activity\n                android:name=\".MainActivity\"\n                android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n                android:label=\"HMS RN Nearby Demo\"\n                android:exported=\"true\"\n                android:launchMode=\"singleTask\"\n                android:windowSoftInputMode=\"adjustResize\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/src/main/java/com/huawei/hms/rn/nearby/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"com.huawei.hms.rn.nearby.demo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/src/main/java/com/huawei/hms/rn/nearby/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.nearby.demo;\n\nimport android.app.Application;\nimport android.content.Context;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.lang.reflect.InvocationTargetException;\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {\n        @Override\n        public boolean getUseDeveloperSupport() {\n            return BuildConfig.DEBUG;\n        }\n\n        @Override\n        protected List<ReactPackage> getPackages() {\n            List<ReactPackage> packages = new PackageList(this).getPackages();\n            return packages;\n        }\n\n        @Override\n        protected String getJSMainModuleName() {\n            return \"index\";\n        }\n    };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-nearby/example/android/settings.gradle",
    "content": "rootProject.name = 'com.huawei.hms.rn.nearby.demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); \napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-nearby/example/app.json",
    "content": "{\n  \"name\": \"com.huawei.hms.rn.nearby.demo\",\n  \"displayName\": \"HMS RN Nearby Demo\"\n}"
  },
  {
    "path": "react-native-hms-nearby/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-nearby/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-nearby/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-nearby/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-nearby-demo\",\n  \"description\": \"React Native HMS Nearby Kit Demo\",\n  \"version\": \"6.12.1-310\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"react-native-image-picker\": \"7.0.3\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/src/Beacon.js",
    "content": "import React from \"react\";\nimport {\n    NativeEventEmitter, \n    Text, \n    TouchableOpacity, \n    View,\n    Alert \n} from \"react-native\";\nimport { HMSBeacon } from \"@hmscore/react-native-hms-nearby\";\nimport { styles } from \"./Styles\";\n\nexport class Beacon extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            register: false,\n        }\n    }\n    getBeaconOption = () => {\n        return {\n            beaconId: '6bff00f723fdf7471402',\n            beaconType: HMSBeacon.BEACON_TYPE_IBEACON,\n            type: \"type\",\n            namespace: \"namespace\"\n        }\n    }\n\n    componentDidMount() {\n        this.eventEmitter = new NativeEventEmitter(HMSBeacon);\n\n        this.eventEmitter.addListener(HMSBeacon.BEACON_RECEIVER, (event) => console.log(event));\n    }\n\n    async registerScan() {\n        try{\n            this.setState({register: true});\n            let result = await HMSBeacon.registerScan(this.getBeaconOption());\n            console.log('RegisterScan: ',result);\n        } catch(e) {\n            console.log(e);\n        }\n    }\n\n    async unRegisterScan() {\n        try{\n            this.setState({register: false});\n            let result = await HMSBeacon.unRegisterScan();\n            this.eventEmitter.removeAllListeners(\"beaconReceiver\");\n            console.log('unRegisterScan:', result);\n            Alert.alert('Success',JSON.stringify(result))\n        } catch(e) {\n            console.log(e);\n            Alert.alert('Error',JSON.stringify(e.message))\n        }\n    }\n\n    async getBeaconMsgConditions() {\n        try{\n            let result = await HMSBeacon.getBeaconMsgConditions();\n            console.log('getBeaconMsgConditions: ', result);\n            Alert.alert('Success',JSON.stringify(result))\n        } catch(e) {\n            console.log(e);\n            Alert.alert('Error',JSON.stringify(e.message))\n        }\n    }\n\n    async getRawBeaconConditions() {\n        try {\n            let result = await HMSBeacon.getRawBeaconConditions();\n            console.log('getRawBeaconConditions: ', result)\n            Alert.alert('Success',JSON.stringify(result))\n        } catch (e) {\n            console.log(e);\n            Alert.alert('Error',JSON.stringify(e.message))\n        }\n    }\n\n    async getRawBeaconConditionsWithBeaconType() {\n        try {\n            let result = await HMSBeacon.getRawBeaconConditionsWithBeaconType(1);\n            console.log('getRawBeaconConditionsWithBeaconType: ', result)\n            Alert.alert('Success',JSON.stringify(result))\n        } catch (e) {\n            console.log(e);\n            Alert.alert('Error',JSON.stringify(e.message))\n        }\n    }\n\n  render() {\n    return (\n      <View>\n        <View>\n            <Text style={styles.beaconHeader}>REGISTER</Text>\n            <TouchableOpacity style={styles.beaconButton} onPress={() => this.registerScan()}>\n                <Text style={styles.beaconText}>Register Scan : {this.state.register ? \"ON\" : \"OFF\"}</Text>\n            </TouchableOpacity>\n            <TouchableOpacity style={styles.beaconButton} onPress={() => this.unRegisterScan()}>\n                <Text style={styles.beaconText}>unRegister Scan</Text>\n            </TouchableOpacity>\n            <Text style={styles.beaconHeader}>CONDITIONS</Text>\n            <TouchableOpacity style={styles.beaconButton} onPress={() => this.getBeaconMsgConditions()}>\n                <Text style={styles.beaconText}>getBeaconMsgConditions</Text>\n            </TouchableOpacity>\n            <TouchableOpacity style={styles.beaconButton} onPress={() => this.getRawBeaconConditions()}>\n                <Text style={styles.beaconText}>getRawBeaconConditions</Text>\n            </TouchableOpacity>\n            <TouchableOpacity style={styles.beaconButton} onPress={() => this.getRawBeaconConditionsWithBeaconType()}>\n                <Text style={styles.beaconText}>getRawBeaconConditionsWithBeaconType</Text>\n            </TouchableOpacity>\n        </View>\n      </View>\n    );\n  }\n}\n\nexport default Beacon;\n"
  },
  {
    "path": "react-native-hms-nearby/example/src/Connection.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from \"react\";\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  NativeEventEmitter,\n  FlatList,\n  ActivityIndicator,\n  ToastAndroid,\n  Switch,\n  Alert,\n} from \"react-native\";\nimport {\n  HMSDiscovery,\n  HMSTransfer,\n  HMSNearbyApplication,\n} from \"@hmscore/react-native-hms-nearby\";\nimport { styles } from \"./Styles\";\nimport * as ImagePicker from \"react-native-image-picker\"\nimport { stringToByteArray, byteArrayToString } from \"./Converter.js\";\n\nconst options = {\n  mediaType: \"photo\",\n};\n\nexport default class Connection extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      endpointId: \"\",\n      messageData: [],\n      serviceId: \"com.huawei.hms.rn.nearby.demo\",\n      localEndpointName: \"huawei.hms.core.rn\",\n      showLoading: false,\n      currentMessage: \"\",\n      isEnabled: false,\n      startChatEnabled: true,\n      connectionEstablish: false,\n      imageUri: \"\",\n      isFile: \"\",\n      dataReceived: false,\n    };\n  }\n\n  componentDidMount() {\n    this.timer = null;\n\n    this.eventEmitter = new NativeEventEmitter(HMSDiscovery);\n\n    this.eventEmitter.addListener(\n      HMSDiscovery.CONNECT_ON_ESTABLISH,\n      (event) => {\n        console.log(event);\n        this.setState({ endpointId: event.endpointId }, () =>\n          this.acceptConnect()\n        );\n      }\n    );\n\n    this.eventEmitter.addListener(HMSDiscovery.CONNECT_ON_RESULT, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(\n        \"Connection Successfull. Lets Chat...\",\n        ToastAndroid.SHORT,\n        ToastAndroid.CENTER\n      );\n      this.setState({ showLoading: false, connectionEstablish: true }, () => {\n        if (!this.state.isEnabled) {\n          this.stopBroadCasting();\n          clearTimeout(this.timer);\n        }\n      });\n    });\n\n    this.eventEmitter.addListener(\n      HMSDiscovery.CONNECT_ON_DISCONNECTED,\n      (event) => {\n        console.log(event);\n        ToastAndroid.showWithGravity(\n          \"Your Friend is Disconnected\",\n          ToastAndroid.SHORT,\n          ToastAndroid.CENTER\n        );\n      }\n    );\n\n    this.eventEmitter.addListener(HMSDiscovery.SCAN_ON_FOUND, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(\n        \"Scanning : Friend Found\",\n        ToastAndroid.SHORT,\n        ToastAndroid.CENTER\n      );\n      this.setState({ endpointId: event.endpointId }, () =>\n        this.requestConnect().then(() => this.stopScan())\n      );\n    });\n\n    this.eventEmitter.addListener(HMSDiscovery.SCAN_ON_LOST, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(\n        \"Scanning : Friend Lost\",\n        ToastAndroid.SHORT,\n        ToastAndroid.CENTER\n      );\n    });\n\n    this.eventEmitter.addListener(HMSDiscovery.DATA_ON_RECEIVED, (event) => {\n      console.log(event);\n      if (event.type == HMSTransfer.FILE) {\n        var message = { sender: true, content: event.fileUri };\n        this.state.messageData.push(message);\n      } else if (event.type == HMSTransfer.BYTES) {\n        var message = { sender: true, content: byteArrayToString(event.data) };\n        this.state.messageData.push(message);\n      } else if (event.type == HMSTransfer.STREAM) {\n      }\n      this.setState({ dataReceived: !this.state.dataReceived });\n    });\n\n    this.eventEmitter.addListener(\n      HMSDiscovery.DATA_ON_TRANSFER_UPDATE,\n      (event) => {\n        console.log(event);\n        if (this.state.isFile) {\n          if (event.status == HMSTransfer.TRANSFER_STATE_SUCCESS) {\n            var message = { sender: false, content: this.state.imageUri };\n            this.state.messageData.push(message);\n            this.setState({ imageUri: \"\", showLoading: false, isFile: false });\n          } else if (event.status == HMSTransfer.TRANSFER_STATE_IN_PROGRESS) {\n            ToastAndroid.showWithGravity(\n              \"Progress : \" + event.transferredBytes + \"/\" + event.totalBytes,\n              ToastAndroid.SHORT,\n              ToastAndroid.CENTER\n            );\n          } else if (event.status == HMSTransfer.TRANSFER_STATE_FAILURE) {\n            this.setState({ imageUri: \"\", showLoading: false, isFile: false });\n            ToastAndroid.showWithGravity(\n              \"Tranfer Failed\",\n              ToastAndroid.SHORT,\n              ToastAndroid.CENTER\n            );\n          } else if (event.status == HMSTransfer.TRANSFER_STATE_CANCEL) {\n            this.setState({ imageUri: \"\", showLoading: false, isFile: false });\n            ToastAndroid.showWithGravity(\n              \"Tranfer Cancelled\",\n              ToastAndroid.SHORT,\n              ToastAndroid.CENTER\n            );\n          }\n        }\n      }\n    );\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSDiscovery.CONNECT_ON_ESTABLISH);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.CONNECT_ON_RESULT);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.CONNECT_ON_DISCONNECTED);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.SCAN_ON_FOUND);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.SCAN_ON_LOST);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.DATA_ON_RECEIVED);\n    this.eventEmitter.removeAllListeners(HMSDiscovery.DATA_ON_TRANSFER_UPDATE);\n\n    this.manageStopAndDisconnect(false);\n\n    clearTimeout(this.timer);\n  }\n\n  manageStopAndDisconnect = (isTryAgain) => {\n    if (this.state.isEnabled) {\n      if (isTryAgain) {\n        this.setState({ connectionEstablish: false, showLoading: true }, () => {\n          this.stopScan()\n            .then(() => this.disconnectAll())\n            .then(() => this.scanOrBroadCast(true));\n        });\n      } else {\n        this.stopScan().then(() => this.disconnectAll());\n      }\n    } else {\n      if (isTryAgain) {\n        this.setState({ connectionEstablish: false, showLoading: true }, () => {\n          this.stopBroadCasting()\n            .then(() => this.disconnectAll())\n            .then(() => this.scanOrBroadCast(true));\n        });\n      } else {\n        this.stopBroadCasting().then(() => this.disconnectAll());\n      }\n    }\n  };\n\n  tryAgainAlert = (errorMessage) => {\n    Alert.alert(\n      \"Try Again\",\n      errorMessage + \", would you like to try again?\",\n      [\n        {\n          text: \"NO\",\n          onPress: () => this.props.navigation.navigate(\"StartPage\"),\n          style: \"cancel\",\n        },\n        {\n          text: \"YES\",\n          onPress: () => this.manageStopAndDisconnect(this.state.isEnabled),\n        },\n      ],\n      { cancelable: false }\n    );\n  };\n\nasync  showImagePicker() {\n   await ImagePicker.launchImageLibrary(options, (response) => {\n      if (response.didCancel) {\n        console.log(\"User cancelled image picker\");\n      } else if (response.errorMessage) {\n        console.log(\"ImagePicker Error: \", response.errorMessage);\n      } else {\n        this.setState(\n          {\n            imageUri: response.assets[0].uri,\n          },\n          () => this.transferFile()\n        );\n      }\n    });\n  }\n\n  scanOrBroadCast = (isEnabled) => {\n    this.timer = setTimeout(() => {\n      if (!this.state.connectionEstablish) {\n        this.tryAgainAlert(\"Connection did not establish\");\n      }\n    }, 20000);\n\n    if (isEnabled) {\n      this.startScan().then(() =>\n        this.setState({ startChatEnabled: false, showLoading: true })\n      );\n    } else {\n      this.startBroadcasting().then(() =>\n        this.setState({ startChatEnabled: false, showLoading: true })\n      );\n    }\n  };\n\n  renderMessage = ({ item, index }) => {\n    if (!item.sender) {\n      return (\n        <View style={styles.sendedMessageView}>\n          <Text style={styles.sendedMessageContent}>{item.content}</Text>\n        </View>\n      );\n    } else {\n      return (\n        <View style={styles.receivedMessageView}>\n          <Text style={styles.receivedMessageContent}>{item.content}</Text>\n        </View>\n      );\n    }\n  };\n\n  toggleSwitch = () => {\n    this.setState({\n      isEnabled: !this.state.isEnabled,\n    });\n  };\n\n  async startBroadcasting() {\n    try {\n      var result = await HMSDiscovery.startBroadcasting(\n        this.state.localEndpointName,\n        this.state.serviceId,\n        HMSDiscovery.STAR\n      );\n      console.log(result);\n      this.handleResult(result, \"Broadcasting For Friend ...\");\n    } catch (e) {\n      this.logError(e);\n    }\n  }\n\n  async startScan() {\n    try {\n      var result = await HMSDiscovery.startScan(\n        this.state.serviceId,\n        HMSDiscovery.STAR\n      );\n      console.log(result);\n      this.handleResult(result, \"Scanning for Friend ...\");\n    } catch (e) {\n      this.logError(e);\n    }\n  }\n\n  async acceptConnect() {\n    try {\n      var result = await HMSDiscovery.acceptConnect(this.state.endpointId);\n      console.log(result);\n      this.handleResult(result, \"Accepted Connection...\");\n    } catch (e) {\n      this.logError(e);\n    }\n  }\n\n  async disconnect() {\n    try {\n      var result = await HMSDiscovery.disconnect(this.state.endpointId);\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async rejectConnect() {\n    try {\n      var result = await HMSDiscovery.rejectConnect(this.state.endpointId);\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async requestConnect() {\n    try {\n      var result = await HMSDiscovery.requestConnectEx(\n        this.state.localEndpointName,\n        this.state.endpointId,\n        { policy: HMSDiscovery.CHANNEL_AUTO }\n      );\n      console.log(result);\n      this.handleResult(result, \"Requested For Connection...\");\n    } catch (e) {\n      this.logError(e);\n    }\n  }\n\n  async stopBroadCasting() {\n    try {\n      var result = await HMSDiscovery.stopBroadCasting();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async disconnectAll() {\n    try {\n      var result = await HMSDiscovery.disconnectAll();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async stopScan() {\n    try {\n      var result = await HMSDiscovery.stopScan();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async transferBytes() {\n    try {\n      this.setState({ showLoading: true });\n      var result = await HMSTransfer.transferBytes(\n        stringToByteArray(this.state.currentMessage),\n        [this.state.endpointId]\n      );\n      console.log(result);\n      if (result.status == HMSNearbyApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\n          \"Message Sent\",\n          ToastAndroid.SHORT,\n          ToastAndroid.CENTER\n        );\n        var message = { sender: false, content: this.state.currentMessage };\n        this.state.messageData.push(message);\n        this.setState({ showLoading: false, currentMessage: \"\" });\n      } else {\n        this.tryAgainAlert(result.message);\n      }\n    } catch (e) {\n      console.log(e);\n      ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n  }\n\n  async transferFile() {\n    try {\n      this.setState({ showLoading: true, isFile: true });\n      var result = await HMSTransfer.transferFile(this.state.imageUri, [\n        this.state.endpointId,\n      ]);\n      console.log(result);\n      if (result.status == HMSNearbyApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(\n          \"Image Transfer Start\",\n          ToastAndroid.SHORT,\n          ToastAndroid.CENTER\n        );\n      } else {\n        this.setState({ isFile: false, showLoading: false });\n        this.tryAgainAlert(result.message);\n      }\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async transferStream() {\n    try {\n      var result = await HMSTransfer.transferStream(\n        this.endpointId,\n        this.getEndpointIds()\n      );\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  handleResult(result, message) {\n    if (result.status == HMSNearbyApplication.SUCCESS) {\n      ToastAndroid.showWithGravity(\n        message,\n        ToastAndroid.SHORT,\n        ToastAndroid.CENTER\n      );\n    } else {\n      this.tryAgainAlert(result.message);\n    }\n  }\n\n  logError(e) {\n    console.log(e);\n    ToastAndroid.showWithGravity(e, ToastAndroid.SHORT, ToastAndroid.CENTER);\n  }\n\n  render() {\n    return (\n      <View style={styles.baseView}>\n        <View style={styles.toolbar}>\n          {this.state.startChatEnabled ? (\n            <View style={styles.viewdividedtwo}>\n              <View style={styles.halfItem4}>\n                <Text style={styles.titleToolbar}>\n                  {this.state.isEnabled ? \"Discover\" : \"Broadcast\"}\n                </Text>\n              </View>\n              <View style={styles.halfItem4}>\n                <Switch\n                  style={{ alignSelf: \"center\" }}\n                  trackColor={{ false: \"#ffffff\", true: \"#50AF52\" }}\n                  thumbColor={this.state.isEnabled ? \"#ffffff\" : \"#ffffff\"}\n                  onValueChange={this.toggleSwitch.bind(this)}\n                  value={this.state.isEnabled}\n                />\n              </View>\n              <View style={styles.halfItem4}>\n                <TouchableOpacity\n                  style={styles.basicButtonOpacity}\n                  onPress={() => {\n                    this.scanOrBroadCast(this.state.isEnabled);\n                  }}\n                  underlayColor=\"#fff\"\n                >\n                  <Text style={styles.basicButtonLabel}> CHAT </Text>\n                </TouchableOpacity>\n              </View>\n            </View>\n          ) : (\n            <View>\n              {this.state.showLoading ? (\n                <ActivityIndicator size=\"large\" />\n              ) : (\n                <Text style={styles.titleToolbar}>Welcome To Chat</Text>\n              )}\n            </View>\n          )}\n        </View>\n\n        <View style={styles.baseView}>\n          <FlatList\n            inverted={false}\n            style={styles.baseView}\n            data={this.state.messageData}\n            renderItem={this.renderMessage}\n            keyExtractor={(item, index) => index.toString()}\n            extraData={this.state.dataReceived}\n            contentContainerStyle={{ paddingTop: 10, paddingBottom: 10 }}\n          />\n\n          <View style={styles.connectionInput}>\n            <TextInput\n              style={styles.baseView}\n              placeholder=\"Type your message ...\"\n              onChangeText={(value) => {\n                this.setState({ currentMessage: value });\n              }}\n              value={this.state.currentMessage}\n              editable={\n                !(this.state.showLoading || this.state.startChatEnabled)\n              }\n            />\n\n            <TouchableOpacity\n              onPress={this.showImagePicker.bind(this)}\n              disabled={this.state.showLoading || this.state.startChatEnabled}\n            >\n              <View\n                style={{\n                  backgroundColor: \"purple\",\n                  padding: 8,\n                  margin: 4,\n                  borderRadius: 5,\n                }}\n              >\n                <Text style={{ color: \"white\" }}>Pick File</Text>\n              </View>\n            </TouchableOpacity>\n\n            <TouchableOpacity\n              onPress={() => {\n                this.state.currentMessage != \"\" ? this.transferBytes() : null;\n              }}\n              disabled={this.state.showLoading || this.state.startChatEnabled}\n            >\n              <View style={{ padding: 8, margin: 4, borderRadius: 5 }}>\n                <Text style={{ color: \"purple\" }}>Send</Text>\n              </View>\n            </TouchableOpacity>\n          </View>\n        </View>\n      </View>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/src/Converter.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { ToastAndroid } from 'react-native';\nimport { HMSNearbyApplication } from '@hmscore/react-native-hms-nearby';\n\nexport function stringToByteArray(str) {\n    var result = [];\n    for (var i = 0; i < str.length; i++) {\n        result.push(str.charCodeAt(i));\n    }\n    return result;\n}\n\nexport function byteArrayToString(array) {\n    return String.fromCharCode.apply(String, array);\n}\n\nexport function messageResult(result, mes) {\n    console.log(result);\n    if (result.status == HMSNearbyApplication.SUCCESS) {\n        ToastAndroid.showWithGravity(mes, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n    else {\n        ToastAndroid.showWithGravity(result.message, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    }\n}"
  },
  {
    "path": "react-native-hms-nearby/example/src/Message.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react';\nimport {\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n  Switch,\n  NativeEventEmitter,\n  ToastAndroid\n} from 'react-native';\nimport { HMSMessage } from '@hmscore/react-native-hms-nearby';\nimport { styles } from './Styles';\nimport { stringToByteArray, byteArrayToString, messageResult } from './Converter.js';\n\nexport default class Message extends React.Component {\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      messageType: false,\n      isClicked: false,\n      subscribedMessage: '',\n      publishedMessage: '',\n    };\n  }\n\n  componentDidMount() {\n\n    this.eventEmitter = new NativeEventEmitter(HMSMessage);\n\n    this.eventEmitter.addListener(HMSMessage.GET_ON_TIMEOUT, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(event.onTimeout, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    });\n\n    this.eventEmitter.addListener(HMSMessage.PUT_ON_TIMEOUT, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(event.onTimeout, ToastAndroid.SHORT, ToastAndroid.CENTER);\n    });\n\n    this.eventEmitter.addListener(HMSMessage.STATUS_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSMessage.BLE_ON_SIGNAL_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSMessage.DISTANCE_ON_CHANGED, (event) => {\n      console.log(event);\n    });\n\n    this.eventEmitter.addListener(HMSMessage.MESSAGE_ON_FOUND, (event) => {\n      console.log(event);\n      ToastAndroid.showWithGravity(byteArrayToString(event.content) + \" \" + event.type, ToastAndroid.SHORT, ToastAndroid.CENTER);\n      this.setState({ subscribedMessage: byteArrayToString(event.content) });\n    });\n\n    this.eventEmitter.addListener(HMSMessage.MESSAGE_ON_LOST, (event) => {\n      console.log(event);\n    });\n\n    this.registerStatusCallback();\n  }\n\n  componentWillUnmount() {\n    this.eventEmitter.removeAllListeners(HMSMessage.GET_ON_TIMEOUT);\n    this.eventEmitter.removeAllListeners(HMSMessage.PUT_ON_TIMEOUT);\n    this.eventEmitter.removeAllListeners(HMSMessage.STATUS_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSMessage.BLE_ON_SIGNAL_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSMessage.DISTANCE_ON_CHANGED);\n    this.eventEmitter.removeAllListeners(HMSMessage.MESSAGE_ON_FOUND);\n    this.eventEmitter.removeAllListeners(HMSMessage.MESSAGE_ON_LOST);\n    this.unregisterStatusCallback();\n  }\n\n  async putMessage() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.put(this.getMessageConfig(), stringToByteArray(this.state.publishedMessage));\n      messageResult(result, \"Message Published\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async putMessageWithOption() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.putWithOption(this.getMessageConfig(), stringToByteArray(this.state.publishedMessage), this.getPutOption());\n      messageResult(result, \"Message Put With Option\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async registerStatusCallback() {\n    try {\n      var result = await HMSMessage.registerStatusCallback();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async unregisterStatusCallback() {\n    try {\n      var result = await HMSMessage.unRegisterStatusCallback();\n      console.log(result);\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getMessage() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.getMessage();\n      messageResult(result, \"Message Get\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getMessageWithOption() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.getMessageWithOption(this.getGetOption());\n      messageResult(result, \"Message Get With Option\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getMessagePending() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.getMessagePending();\n      messageResult(result, \"Message Get Pending\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async getMessagePendingWithOption() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.getMessagePendingWithOption(this.getGetOption());\n      messageResult(result, \"Message Get Pending With Option\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async ungetMessage() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.unget();\n      messageResult(result, \"Message Unget\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async ungetMessagePending() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.ungetPending();\n      messageResult(result, \"Message Unget Pending\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  async unputMessage() {\n    try {\n      this.setState({ isClicked: true });\n      var result = await HMSMessage.unput(this.getMessageConfig(), stringToByteArray(this.state.publishedMessage));\n      messageResult(result, \"Messagae Unput\");\n    } catch (e) {\n      console.log(e);\n    }\n  }\n\n  toggleSwitch = () => {\n    this.setState({\n      messageType: !this.state.messageType,\n      subscribedMessage: '',\n      publishedMessage: ''\n    })\n  }\n\n  getGetOption = () => {\n    return {\n      policy: this.getPolicyConfig(),\n      picker: {\n        includeAllTypes: true,\n        includeIBeaconIds: [{\n          iBeaconUuid: \"<your-beacon-uuid>\",\n          major: \"0\",\n          minor: \"0\"\n        }],\n        includeNamespaceType: [{\n          namespace: \"<your-namespace>\",\n          type: \"<your-type>\"\n        }]\n      },\n      setCallback: true\n    }\n  }\n\n  getPutOption = () => {\n    return {\n      policy: this.getPolicyConfig(),\n      setCallback: true\n    }\n  }\n\n  getMessageConfig = () => {\n    return {\n      type: HMSMessage.MESSAGE_TYPE_EDDYSTONE_UID,\n      namespace: HMSMessage.MESSAGE_NAMESPACE_RESERVED\n    }\n  }\n\n  getPolicyConfig = () => {\n    return {\n      findingMode: HMSMessage.POLICY_FINDING_MODE_DEFAULT,\n      distanceType: HMSMessage.POLICY_DISTANCE_TYPE_DEFAULT,\n      ttlSeconds: HMSMessage.POLICY_TTL_SECONDS_DEFAULT\n    }\n  }\n\n  render() {\n    return (\n      <View style={styles.baseView} >\n\n        <View style={styles.toolbar}>\n\n          <View style={styles.viewdividedtwo}>\n            <View style={styles.halfItem1}>\n              <Text style={styles.titleToolbar}>{this.state.messageType ? 'Beacon Based' : 'App Based'} Message Operations</Text>\n            </View>\n            <View style={styles.halfItem2}>\n              <Switch\n                style={{ alignSelf: \"center\" }}\n                trackColor={{ false: \"#e5e5e5\", true: \"#50AF52\" }}\n                thumbColor={this.state.messageType ? \"#ffffff\" : \"#ffffff\"}\n                onValueChange={this.toggleSwitch.bind(this)}\n                value={this.state.messageType}\n              />\n            </View>\n          </View >\n\n        </View>\n\n        {this.state.messageType ?\n          <View>\n\n            <TextInput\n              style={styles.customInput}\n              placeholder=\"Beacon Message\"\n              value={this.state.subscribedMessage}\n              multiline={true}\n              editable={false}\n            />\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.basicButtonOpacity}\n                onPress={() => this.getMessagePending().then(() => this.setState({ isClicked: false }))}\n                underlayColor=\"#fff\"\n                disabled={this.state.isClicked}>\n                <Text style={styles.basicButtonLabel}> GET PENDING </Text>\n              </TouchableOpacity>\n            </View>\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.basicButtonOpacity}\n                onPress={() => this.getMessagePendingWithOption().then(() => this.setState({ isClicked: false }))}\n                underlayColor=\"#fff\"\n                disabled={this.state.isClicked}>\n                <Text style={styles.basicButtonLabel}> GET PENDING WITH OPTIONS</Text>\n              </TouchableOpacity>\n            </View>\n            <View style={styles.basicButton}>\n              <TouchableOpacity\n                style={styles.basicButtonOpacity}\n                onPress={() => this.ungetMessagePending().then(() => this.setState({ isClicked: false }))}\n                underlayColor=\"#fff\"\n                disabled={this.state.isClicked}>\n                <Text style={styles.basicButtonLabel}> UNGET PENDING </Text>\n              </TouchableOpacity>\n            </View>\n\n          </View>\n          :\n          <View style={{ marginTop: 5 }}>\n            <TextInput\n              style={styles.customInput}\n              placeholder=\"Type your message to publish...\"\n              onChangeText={text => this.setState({ publishedMessage: text })}\n              multiline={false}\n              editable={!this.state.isClicked}\n            />\n\n            <TextInput\n              style={styles.customInput}\n              placeholder=\"Subscribed Message\"\n              value={this.state.subscribedMessage}\n              multiline={true}\n              editable={false}\n            />\n            <View style={styles.viewdividedtwo}>\n              <View style={styles.halfItem3}>\n                <View style={styles.basicButton}>\n                  <TouchableOpacity\n                    style={styles.basicButtonOpacity}\n                    onPress={() => this.putMessage().then(() => this.setState({ isClicked: false }))}\n                    underlayColor=\"#fff\"\n                    disabled={this.state.isClicked}>\n                    <Text style={styles.basicButtonLabel}> PUT </Text>\n                  </TouchableOpacity>\n                </View>\n              </View>\n              <View style={styles.halfItem3}>\n                <View style={styles.basicButton}>\n                  <TouchableOpacity\n                    style={styles.basicButtonOpacity}\n                    onPress={() => this.unputMessage(this.state.publishedMessage).then(() => this.setState({ isClicked: false }))}\n                    underlayColor=\"#fff\"\n                    disabled={this.state.isClicked}>\n                    <Text style={styles.basicButtonLabel}> UNPUT</Text>\n                  </TouchableOpacity>\n                </View>\n              </View>\n            </View>\n            <View style={{ marginTop: 40 }}>\n              <View style={styles.viewdividedtwo}>\n                <View style={styles.halfItem3}>\n                  <View style={styles.basicButton}>\n                    <TouchableOpacity\n                      style={styles.basicButtonOpacity}\n                      onPress={() => this.getMessage().then(() => this.setState({ isClicked: false }))}\n                      underlayColor=\"#fff\"\n                      disabled={this.state.isClicked}>\n                      <Text style={styles.basicButtonLabel}> GET </Text>\n                    </TouchableOpacity>\n                  </View>\n                </View>\n                <View style={styles.halfItem3}>\n                  <View style={styles.basicButton}>\n                    <TouchableOpacity\n                      style={styles.basicButtonOpacity}\n                      onPress={() => this.ungetMessage().then(() => this.setState({ isClicked: false }))}\n                      underlayColor=\"#fff\"\n                      disabled={this.state.isClicked}>\n                      <Text style={styles.basicButtonLabel}> UNGET </Text>\n                    </TouchableOpacity>\n                  </View>\n                </View>\n              </View>\n            </View>\n            <View style={{ marginTop: 40 }}>\n              <View style={styles.viewdividedtwo}>\n                <View style={styles.halfItem3}>\n                  <View style={styles.basicButton}>\n                    <TouchableOpacity\n                      style={styles.basicButtonOpacity}\n                      onPress={() => this.putMessageWithOption().then(() => this.setState({ isClicked: false }))}\n                      underlayColor=\"#fff\"\n                      disabled={this.state.isClicked}>\n                      <Text style={styles.basicButtonLabel}> PUT OPTION </Text>\n                    </TouchableOpacity>\n                  </View>\n                </View>\n                <View style={styles.halfItem3}>\n                  <View style={styles.basicButton}>\n                    <TouchableOpacity\n                      style={styles.basicButtonOpacity}\n                      onPress={() => this.getMessageWithOption().then(() => this.setState({ isClicked: false }))}\n                      underlayColor=\"#fff\"\n                      disabled={this.state.isClicked}>\n                      <Text style={styles.basicButtonLabel}> GET OPTION </Text>\n                    </TouchableOpacity>\n                  </View>\n                </View>\n              </View>\n            </View>\n          </View>\n        }\n\n      </View>\n\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/src/StartPage.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  PermissionsAndroid,\n  BackHandler,\n  Alert,\n} from \"react-native\";\nimport { styles } from \"./Styles\";\nimport { HMSNearbyApplication } from \"@hmscore/react-native-hms-nearby\";\n\nexport default class App extends Component {\n  constructor(props) {\n    super(props);\n  }\n\n  componentDidMount() {\n    this.requestPermissions().then(this.setApiKey());\n  }\n\n  alertPermission = () =>\n    Alert.alert(\n      \"Permission !\",\n      \"Please allow permissions to use this app\",\n      [\n        {\n          text: \"OK\",\n          onPress: () => BackHandler.exitApp(),\n        },\n      ],\n      { cancelable: false }\n    );\n\n  alertApiKey = () =>\n    Alert.alert(\n      \"Api Key !\",\n      \"Please set your API key in StartPage.js to use this app\",\n      [\n        {\n          text: \"OK\",\n          onPress: () => BackHandler.exitApp(),\n        },\n      ],\n      { cancelable: false }\n    );\n\n  async requestPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple([\n        PermissionsAndroid.PERMISSIONS.CAMERA,\n        PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,\n        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,\n        PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,\n        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,\n      ]);\n      if (\n        userResponse[\"android.permission.ACCESS_COARSE_LOCATION\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.ACCESS_COARSE_LOCATION\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.CAMERA\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.ACCESS_FINE_LOCATION\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.ACCESS_FINE_LOCATION\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.DENIED\n      ) {\n        this.alertPermission();\n      }\n    } catch (err) {\n      console.log(err);\n    }\n  }\n\n  async setApiKey() {\n    try {\n      var result = await HMSNearbyApplication.setApiKey(\"<api_key>\");\n      console.log(result);\n      if (result.status != HMSNearbyApplication.SUCCESS) {\n        this.alertApiKey();\n      }\n    } catch (error) {\n      console.log(error);\n    }\n  }\n\n  async setAgcRegion() {\n    try{\n      let result = await HMSNearbyApplication.setAgcRegion(\"CN\")\n      console.log(result);\n      if (result.status === HMSNearbyApplication.SUCCESS){\n        Alert.alert('Success',JSON.stringify(result))\n      } \n    } catch(error) {\n      console.log(error)\n      Alert.alert('Error', JSON.stringify(error.message))\n    }\n  }\n\n  render() {\n    return (\n      <ScrollView style={styles.bg}>\n        <Text style={styles.h1}>Nearby Example Applications</Text>\n\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate(\"Connection\")}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.buttonText}>Nearby{\"\\n\"}Connection</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate(\"Message\")}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.buttonText}>Nearby{\"\\n\"}Message</Text>\n            </TouchableOpacity>\n          </View>\n\n          <View style={styles.button}>\n            <TouchableOpacity\n              style={styles.buttonRadius}\n              onPress={() => this.props.navigation.navigate(\"Beacon\")}\n              underlayColor=\"#fff\"\n            >\n              <Text style={styles.buttonText}>Nearby{\"\\n\"}Beacon</Text>\n            </TouchableOpacity>\n          </View>\n        </View>\n        <View style={styles.containerFlex}>\n          <View style={styles.button}>\n            <TouchableOpacity \n            style={styles.buttonRadius}\n            onPress={() => this.setAgcRegion()}\n            >\n              <Text style={styles.buttonText}>set{\"\\n\"}AgcRegion</Text>\n            </TouchableOpacity>\n          </View>\n        </View> \n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-nearby/example/src/Styles.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n\n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n\n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n\n  bg: { backgroundColor: '#E5E5E5' },\n\n  containerCenter: {\n    justifyContent: 'center',\n    alignItems: 'center',\n    width: '100%',\n  },\n\n  img: {\n    width: '100%',\n    height: 200,\n  },\n\n  h1: {\n    textAlign: 'center',\n    fontWeight: 'bold',\n    fontSize: 17,\n    borderBottomWidth: 2,\n    padding: 20,\n    borderBottomColor: '#AAAAAA',\n    width: '95%',\n    alignSelf: 'center'\n  },\n\n  containerFlex: {\n    flex: 1,\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    marginHorizontal: 20,\n    marginVertical: 20,\n  },\n\n  button: {\n    width: '32%',\n    height: 95,\n  },\n\n  buttonRadius: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    backgroundColor: 'white',\n    borderRadius: 10,\n    borderWidth: 1.5,\n    borderColor: '#AAAAAA',\n  },\n\n  imgButton: {\n    width: 57,\n    height: 48,\n  },\n\n  buttonText: {\n    color: '#000',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  centerImg: {\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n\n  baseView: {\n    flex: 1,\n    backgroundColor: '#E5E5E5'\n  },\n\n  connectionInput: {\n    flexDirection: 'row',\n    width: '100%',\n    height: 60,\n    backgroundColor: '#E5E5E5',\n    alignItems: 'center',\n    paddingLeft: 20,\n    paddingRight: 10,\n    borderWidth: 2,\n    borderColor: '#AAAAAA'\n  },\n  sendButton: {\n    width: 35,\n    height: 35,\n    marginLeft: 12\n  },\n  toolbar: {\n    width: '100%',\n    height: 55,\n    justifyContent: 'center',\n    backgroundColor: '#AAAAAA',\n    elevation: 5,\n  },\n  titleToolbar: {\n    color: 'black',\n    fontWeight: 'bold',\n    fontSize: 17,\n    alignSelf: 'center',\n  },\n  sendedMessageView: {\n    alignSelf: 'flex-end',\n    marginRight: 10,\n    marginBottom: 6,\n    marginTop: 6\n  },\n  sendedMessageContent: {\n    borderRadius: 10,\n    width: 170,\n    backgroundColor: '#000749',\n    color: 'white',\n    paddingTop: 7,\n    paddingBottom: 7,\n    paddingLeft: 9,\n    paddingRight: 9,\n    overflow: 'hidden'\n  },\n  receivedMessageView: {\n    marginLeft: 10,\n    marginBottom: 6,\n    marginTop: 6,\n  },\n  receivedMessageContent: {\n    borderRadius: 10,\n    width: 170,\n    backgroundColor: '#420002',\n    color: 'white',\n    paddingTop: 7,\n    paddingBottom: 7,\n    paddingLeft: 9,\n    paddingRight: 9,\n    overflow: 'hidden'\n  },\n\n  basicButton: {\n    width: '95%',\n    height: 50,\n    alignSelf: \"center\",\n    marginTop: 5,\n  },\n\n  viewdividedtwo: {\n    flex: 1,\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    justifyContent: 'space-evenly',\n    alignSelf: 'center',\n    width: '95%',\n    marginTop: 10\n  },\n  halfItem1: {\n    width: '80%',\n    alignSelf: 'center'\n  },\n  halfItem4: {\n    width: '30%',\n    alignSelf: 'center'\n  },\n  halfItem2: {\n    width: '20%',\n    alignSelf: 'center'\n  },\n  halfItem3: {\n    width: '50%',\n    alignSelf: 'center'\n  },\n  customInput: {\n    height: 50,\n    borderColor: 'gray',\n    borderWidth: 2,\n    width: \"95%\",\n    alignSelf: \"center\",\n    marginTop: 5,\n    backgroundColor: \"#fff\",\n    color: \"#000\"\n  },\n\n  basicButtonOpacity: {\n    paddingTop: 10,\n    paddingBottom: 10,\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#888',\n    backgroundColor: '#7a7878',\n  },\n\n  basicButtonLabel: {\n    fontWeight: 'bold',\n    color: '#fff',\n    textAlign: 'center',\n    paddingLeft: 10,\n    paddingRight: 10,\n  },\n\n  beaconButton: {\n    backgroundColor: '#7a7878',\n    padding: 20,\n    margin: 7,\n    borderRadius: 20,\n  },\n\n  beaconText: {\n    textAlign: \"center\",\n    color: '#fff',\n    fontWeight: \"bold\"\n  },\n\n  beaconHeader: {\n    textAlign: \"center\",\n    margin: 7,\n    fontWeight: \"bold\",\n    fontSize: 16\n  }\n\n\n});\n"
  },
  {
    "path": "react-native-hms-nearby/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-nearby\",\n  \"title\": \"React Native Hms Nearby\",\n  \"description\": \"React Native HMS Nearby Kit\",\n  \"version\": \"6.12.1-310\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-nearby\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"nearby\",\n    \"hms\",\n    \"wifi\",\n    \"beacon\",\n    \"connection\",\n    \"message\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-nearby/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport declare enum HMSNearbyApplication {\n    SUCCESS = 0,\n    FAILURE = -1,\n    POLICY_FAIL = 8200,\n    STRING_PARAM_FAIL = 8201,\n    ENDPOINT_ID_FAIL = 8202,\n    BYTES_DATA_FAIL = 8203,\n    ANDROID_HMS_RESTRICTED = 8070\n}\n\nexport declare enum HMSDiscovery {\n    MESH = 1,\n    P2P = 2,\n    STAR = 3,\n    POLICY = Policy,\n    CONNECT_ON_DISCONNECTED = \"connectOnDisconnected\",\n    CONNECT_ON_ESTABLISH = \"connectOnEstablish\",\n    CONNECT_ON_RESULT = \"connectOnResult\",\n    SCAN_ON_FOUND = \"scanOnFound\",\n    SCAN_ON_LOST = \"scanOnLost\",\n    DATA_ON_RECEIVED = \"dataOnReceived\",\n    DATA_ON_TRANSFER_UPDATE = \"dataOnTransferUpdate\",\n    CHANNEL_AUTO = 1,\n    CHANNEL_HIGH_THROUGHPUT = 2,\n    CHANNEL_INSTANCE = 3\n}\n\nexport declare enum HMSTransfer {\n    FILE = 1,\n    BYTES = 2,\n    STREAM = 3,\n    MAX_SIZE_DATA = 32768,\n    TRANSFER_STATE_SUCCESS = 1,\n    TRANSFER_STATE_FAILURE = 2,\n    TRANSFER_STATE_IN_PROGRESS = 3,\n    TRANSFER_STATE_CANCELED = 4\n}\n\nexport declare enum HMSMessage {\n    MAX_CONTENT_SIZE = 65536,\n    MAX_TYPE_LENGTH = 16,\n    MESSAGE_NAMESPACE_RESERVED = \"_reserved_namespace\",\n    MESSAGE_TYPE_EDDYSTONE_UID = \"_eddystone_uid\",\n    MESSAGE_TYPE_IBEACON_ID = \"_ibeacon_id\",\n    POLICY_FINDING_MODE_DEFAULT = 0,\n    POLICY_FINDING_MODE_BROADCAST = 1,\n    POLICY_FINDING_MODE_SCAN = 2,\n    POLICY_DISTANCE_TYPE_DEFAULT = 0,\n    POLICY_DISTANCE_TYPE_EARSHOT = 1,\n    POLICY_TTL_SECONDS_DEFAULT = 240,\n    POLICY_TTL_SECONDS_INFINITE = 2147483647,\n    POLICY_TTL_SECONDS_MAX = 86400,\n    BLE_UNKNOWN_TX_POWER = -2147483648,\n    PRECISION_LOW = 1,\n    GET_ON_TIMEOUT = \"getOnTimeOut\",\n    PUT_ON_TIMEOUT = \"putOnTimeOut\",\n    STATUS_ON_CHANGED = \"statusOnChanged\",\n    BLE_ON_SIGNAL_CHANGED = \"onBleSignalChanged\",\n    DISTANCE_ON_CHANGED = \"onDistanceChanged\",\n    MESSAGE_ON_FOUND = \"messageOnFound\",\n    MESSAGE_ON_LOST = \"messageOnLost\" \n}\n\nexport declare enum HMSBeacon {  \n    BEACON_TYPE_IBEACON = 1,\n    BEACON_TYPE_EDDYSTONE_UID = 2,\n    BEACON_RECEIVER = \"beaconReceiver\",\n    CHINA = \"CN\",\n    GERMANY = \"DE\",\n    RUSSIA = \"RU\",\n    SINGAPORE = \"SG\",\n}\n\n\ninterface ConnectOption {\n    policy: HMSDiscovery\n}\n\ninterface MessageConfiguration {\n    type: HMSMessage,\n    namespace: HMSMessage\n}\n\ninterface PutOptionConfiguration {\n    policy: PolicyConfiguration,\n    setCallback: boolean\n}\n\ninterface GetOptionConfiguration {\n    policy: PolicyConfiguration,\n    picker: PickerConfiguration,\n    setCallback: boolean\n}\n\ninterface PolicyConfiguration {\n    findingMode: number,\n    distanceType: number,\n    ttlSeconds: number\n}\n\ninterface PickerConfiguration {\n    includeAllTypes: boolean,\n    includeEddyStoneUids: IncludeEddyStoneUidConfiguration,\n    includeIBeaconIds: IncludeIBeaconIdsConfiguration,\n    picker: PickerConfiguration,\n    includeNamespaceType: NamespaceTypeConfiguration\n}\n\ninterface IncludeEddyStoneUidConfiguration {\n    hexNamespace: string,\n    hexInstance: string\n}\n\ninterface IncludeIBeaconIdsConfiguration {\n    iBeaconUuid: string,\n    major: string,\n    minor: string\n}\n\ninterface NamespaceTypeConfiguration {\n    namespace: string,\n    type: string\n}\n\ninterface BeaconOption {\n    beaconId?: string,\n    beaconType?: number,\n    namespace?: string,\n    type?: string;\n}\n\nexport const HMSNearbyApplication = {\n    enableLogger(): Promise<Object>;,\n    disableLogger(): Promise<Object>;,\n    setApiKey(apiKey: string): Promise<Object>;,\n    getApiKey(): Promise<Object>;,\n    getVersion(): Promise<Object>;,\n    setAgcRegion(code: string): Promise<Object> \n}\n\nexport const HMSDiscovery = {\n    acceptConnect(endpointId: string): Promise<Object>;,\n    disconnect(endpointId: string): Promise<Object>;,\n    rejectConnect(endpointId: string): Promise<Object>;,\n    requestConnect(name: string, endpointId: string): Promise<Object>;,\n    requestConnectEx(name: string, endpointId: string, connectOption: ConnectOption): Promise<Object>;,\n    startBroadcasting(name: string, serviceId: string, policy: HMSDiscovery): Promise<Object>;,\n    startScan(serviceId: string, policy: HMSDiscovery): Promise<Object>;,\n    stopBroadCasting(): Promise<Object>;,\n    disconnectAll(): Promise<Object>;,\n    stopScan(): Promise<Object>\n}\n\nexport const HMSTransfer = {\n    transferBytes(bytes: number[], endpointIds: string[]): Promise<Object>;,\n    transferFile(uri: string, endpointIds: string[]): Promise<Object>;,\n    transferStream(endpoint: string, endpointIds: string[]): Promise<Object>;,\n    cancelDataTransfer(id: string): Promise<Object>\n}\n\nexport const HMSMessage = {\n    put(messageConfig: MessageConfiguration, bytes: number[]): Promise<Object>;,\n    putWithOption(messageConfig: MessageConfiguration, bytes: number[], putOptionConfiguration: PutOptionConfiguration): Promise<Object>;,\n    registerStatusCallback(): Promise<Object>;,\n    unRegisterStatusCallback(): Promise<Object>;,\n    getMessage(): Promise<Object>;,\n    getMessageWithOption(getOptionConfiguration: GetOptionConfiguration): Promise<Object>;,\n    getMessagePending(): Promise<Object>;,\n    getMessagePendingWithOption(getOptionConfiguration: GetOptionConfiguration): Promise<Object>;,\n    unput(messageConfig: MessageConfiguration, bytes: number[]): Promise<Object>;,\n    unget(): Promise<Object>;,\n    ungetPending(): Promise<Object>\n}\n\nexport const HMSBeacon = {\n    registerScan(beaconOption: BeaconOption): Promise<Object>;,\n    unRegisterScan(): Promise<Object>;,\n    getBeaconMsgConditions(): Promise<Object>;,\n    getRawBeaconConditions(): Promise<Object>;,\n    getRawBeaconConditionsWithBeaconType(beaconType: number): Promise<Object>;,\n}\n\n"
  },
  {
    "path": "react-native-hms-nearby/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\n\nexport const {\n  HMSDiscovery,\n  HMSMessage,\n  HMSTransfer,\n  HMSNearbyApplication,\n  HMSBeacon,\n} = NativeModules;\n\nexport default {\n  HMSDiscovery,\n  HMSMessage,\n  HMSTransfer,\n  HMSNearbyApplication,\n  HMSBeacon,\n} "
  },
  {
    "path": "react-native-hms-push/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-push/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Push</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-push\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-push?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-push\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-push?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-push.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nReact Native Push Plugin enables communication between the HMS Core Push SDK and React Native platform. This plugin exposes all functionality provided by the HMS Core Push SDK.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050157787?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-push\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050155838?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/instanceid-0000001050157805-V1?ha_source=hms1)\n\n### Additional Topics\n\n- [Enabling HUAWEI Push Service](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/config-agc-0000001053537946-V1?ha_source=hms1#EN-US_TOPIC_0000001053537946__section98311135193912)\n- [Applying for a Token](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/apptoken-0000001050157797-V1?ha_source=hms1)\n- [Receiving Data Messages In App Killed State](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides-V1/receivedatamsgkilled-0000001058551962-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-push/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\n\nbuildscript {\n    repositories {\n        jcenter()\n        mavenCentral()\n        google()\n        maven { url 'https://developer.huawei.com/repo/' }\n\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.9.1.301\")\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    jcenter()\n    mavenCentral()\n    google()\n\n    maven { url 'https://developer.huawei.com/repo/' }\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n        // for import com.facebook.react.ReactApplication;\n    }\n\n}\n\ndef safeExtGet(prop, fallback) {\n    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n    implementation 'com.huawei.hms:push:6.12.0.300'\n\n    def supportLibVersion = safeExtGet('supportLibVersion', '27.1.1')\n    def supportLibMajorVersion = supportLibVersion.split('\\\\.')[0] as int\n    def appCompatLibName = (supportLibMajorVersion < 20) ? \"androidx.appcompat:appcompat\" : \"com.android.support:appcompat-v7\"\n\n    implementation \"$appCompatLibName:$supportLibVersion\"\n}\n\n"
  },
  {
    "path": "react-native-hms-push/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-push/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-push/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-push/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.push\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <application>\n        <service android:name=\"com.huawei.hms.rn.push.services.MessagingHeadlessService\" />\n        <service\n            android:name=\"com.huawei.hms.rn.push.remote.HmsPushMessageService\"\n            android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"com.huawei.push.action.MESSAGING_EVENT\" />\n            </intent-filter>\n        </service>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/HmsPushPackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\nimport com.huawei.hms.rn.push.opendevice.HmsPushOpenDevice;\nimport com.huawei.hms.rn.push.local.HmsLocalNotification;\nimport com.huawei.hms.rn.push.remote.HmsMessagePublisher;\nimport com.huawei.hms.rn.push.remote.HmsPushInstanceId;\nimport com.huawei.hms.rn.push.remote.HmsPushMessaging;\nimport com.huawei.hms.rn.push.remote.HmsPushProfile;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HmsPushPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HmsPushInstanceId(reactContext));\n        modules.add(new HmsPushMessaging(reactContext));\n        modules.add(new HmsMessagePublisher(reactContext));\n        modules.add(new HmsLocalNotification(reactContext));\n        modules.add(new HmsPushOpenDevice(reactContext));\n        modules.add(new HmsPushProfile(reactContext));\n\n        return modules;\n    }\n\n    // Deprecated from RN 0.47\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n\n        return Collections.emptyList();\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/config/NotificationAttributes.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.config;\n\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.NotificationConstants;\nimport com.huawei.hms.rn.push.constants.ResultCode;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\npublic class NotificationAttributes {\n    private final String id;\n    private final String message;\n    private final double fireDate;\n    private final String title;\n    private final String ticker;\n    private final boolean showWhen;\n    private final boolean autoCancel;\n    private final String largeIcon;\n    private final String largeIconUrl;\n    private final String smallIcon;\n    private final String bigText;\n    private final String subText;\n    private final String bigPictureUrl;\n    private final String shortcutId;\n    private final String number;\n    private final String channelId;\n    private final String channelName;\n    private final String channelDescription;\n    private final String sound;\n    private final String color;\n    private final String group;\n    private final boolean groupSummary;\n    private final boolean playSound;\n    private final boolean vibrate;\n    private final double vibrateDuration;\n    private final String actions;\n    private final boolean invokeApp;\n    private final String tag;\n    private final String repeatType;\n    private final double repeatTime;\n    private final boolean ongoing;\n    private final boolean allowWhileIdle;\n    private final boolean dontNotifyInForeground;\n    private final String data;\n\n    public NotificationAttributes(Bundle bundle) {\n\n        id = BundleUtils.get(bundle, NotificationConstants.ID);\n        message = BundleUtils.get(bundle, NotificationConstants.MESSAGE);\n        fireDate = BundleUtils.getD(bundle, NotificationConstants.FIRE_DATE);\n        title = BundleUtils.get(bundle, NotificationConstants.TITLE);\n        ticker = BundleUtils.get(bundle, NotificationConstants.TICKER);\n        showWhen = BundleUtils.getB(bundle, NotificationConstants.SHOW_WHEN);\n        autoCancel = BundleUtils.getB(bundle, NotificationConstants.AUTO_CANCEL);\n        largeIcon = BundleUtils.get(bundle, NotificationConstants.LARGE_ICON);\n        largeIconUrl = BundleUtils.get(bundle, NotificationConstants.LARGE_ICON_URL);\n        smallIcon = BundleUtils.get(bundle, NotificationConstants.SMALL_ICON);\n        bigText = BundleUtils.get(bundle, NotificationConstants.BIG_TEXT);\n        subText = BundleUtils.get(bundle, NotificationConstants.SUB_TEXT);\n        bigPictureUrl = BundleUtils.get(bundle, NotificationConstants.BIG_PICTURE_URL);\n        shortcutId = BundleUtils.get(bundle, NotificationConstants.SHORTCUT_ID);\n        number = BundleUtils.get(bundle, NotificationConstants.NUMBER);\n        channelId = BundleUtils.get(bundle, NotificationConstants.CHANNEL_ID);\n        channelName = BundleUtils.get(bundle, NotificationConstants.CHANNEL_NAME);\n        channelDescription = BundleUtils.get(bundle, NotificationConstants.CHANNEL_DESCRIPTION);\n        sound = BundleUtils.get(bundle, NotificationConstants.SOUND);\n        color = BundleUtils.get(bundle, NotificationConstants.COLOR);\n        group = BundleUtils.get(bundle, NotificationConstants.GROUP);\n        groupSummary = BundleUtils.getB(bundle, NotificationConstants.GROUP_SUMMARY);\n        playSound = BundleUtils.getB(bundle, NotificationConstants.PLAY_SOUND);\n        vibrate = BundleUtils.getB(bundle, NotificationConstants.VIBRATE);\n        vibrateDuration = BundleUtils.getD(bundle, NotificationConstants.VIBRATE_DURATION);\n        actions = BundleUtils.get(bundle, NotificationConstants.ACTIONS);\n        invokeApp = BundleUtils.getB(bundle, NotificationConstants.INVOKE_APP);\n        tag = BundleUtils.get(bundle, NotificationConstants.TAG);\n        repeatType = BundleUtils.get(bundle, NotificationConstants.REPEAT_TYPE);\n        repeatTime = BundleUtils.getD(bundle, NotificationConstants.REPEAT_TIME);\n        ongoing = BundleUtils.getB(bundle, NotificationConstants.ONGOING);\n        allowWhileIdle = BundleUtils.getB(bundle, NotificationConstants.ALLOW_WHILE_IDLE);\n        data = BundleUtils.convertJSON(bundle.getBundle(NotificationConstants.DATA));\n        dontNotifyInForeground = BundleUtils.getB(bundle, NotificationConstants.DONT_NOTIFY_IN_FOREGROUND);\n    }\n\n    private NotificationAttributes(JSONObject json) {\n\n        try {\n            id = json.has(NotificationConstants.ID) ? json.getString(NotificationConstants.ID) : null;\n            message = json.has(NotificationConstants.MESSAGE) ? json.getString(NotificationConstants.MESSAGE) : Core.DEFAULT_MESSAGE;\n            fireDate = json.has(NotificationConstants.FIRE_DATE) ? json.getDouble(NotificationConstants.FIRE_DATE) : 0.0;\n            title = json.has(NotificationConstants.TITLE) ? json.getString(NotificationConstants.TITLE) : null;\n            ticker = json.has(NotificationConstants.TICKER) ? json.getString(NotificationConstants.TICKER) : null;\n            showWhen = !json.has(NotificationConstants.SHOW_WHEN) || json.getBoolean(NotificationConstants.SHOW_WHEN);\n            autoCancel = !json.has(NotificationConstants.AUTO_CANCEL) || json.getBoolean(NotificationConstants.AUTO_CANCEL);\n            largeIcon = json.has(NotificationConstants.LARGE_ICON) ? json.getString(NotificationConstants.LARGE_ICON) : null;\n            largeIconUrl = json.has(NotificationConstants.LARGE_ICON_URL) ? json.getString(NotificationConstants.LARGE_ICON_URL) : null;\n            smallIcon = json.has(NotificationConstants.SMALL_ICON) ? json.getString(NotificationConstants.SMALL_ICON) : null;\n            bigText = json.has(NotificationConstants.BIG_TEXT) ? json.getString(NotificationConstants.BIG_TEXT) : null;\n            subText = json.has(NotificationConstants.SUB_TEXT) ? json.getString(NotificationConstants.SUB_TEXT) : null;\n            bigPictureUrl = json.has(NotificationConstants.BIG_PICTURE_URL) ? json.getString(NotificationConstants.BIG_PICTURE_URL) : null;\n            shortcutId = json.has(NotificationConstants.SHORTCUT_ID) ? json.getString(NotificationConstants.SHORTCUT_ID) : null;\n            number = json.has(NotificationConstants.NUMBER) ? json.getString(NotificationConstants.NUMBER) : null;\n            channelId = json.has(NotificationConstants.CHANNEL_ID) ? json.getString(NotificationConstants.CHANNEL_ID) : null;\n            channelName = json.has(NotificationConstants.CHANNEL_NAME) ? json.getString(NotificationConstants.CHANNEL_NAME) : null;\n            channelDescription = json.has(NotificationConstants.CHANNEL_DESCRIPTION) ? json.getString(NotificationConstants.CHANNEL_DESCRIPTION) : null;\n            sound = json.has(NotificationConstants.SOUND) ? json.getString(NotificationConstants.SOUND) : null;\n            color = json.has(NotificationConstants.COLOR) ? json.getString(NotificationConstants.COLOR) : null;\n            group = json.has(NotificationConstants.GROUP) ? json.getString(NotificationConstants.GROUP) : null;\n            groupSummary = json.has(NotificationConstants.GROUP_SUMMARY) && json.getBoolean(NotificationConstants.GROUP_SUMMARY);\n            playSound = !json.has(NotificationConstants.PLAY_SOUND) || json.getBoolean(NotificationConstants.PLAY_SOUND);\n            vibrate = !json.has(NotificationConstants.VIBRATE) || json.getBoolean(NotificationConstants.VIBRATE);\n            vibrateDuration = json.has(NotificationConstants.VIBRATE_DURATION) ? json.getDouble(NotificationConstants.VIBRATE_DURATION) : 1000;\n            actions = json.has(NotificationConstants.ACTIONS) ? json.getString(NotificationConstants.ACTIONS) : null;\n            invokeApp = !json.has(NotificationConstants.INVOKE_APP) || json.getBoolean(NotificationConstants.INVOKE_APP);\n            tag = json.has(NotificationConstants.TAG) ? json.getString(NotificationConstants.TAG) : null;\n            repeatType = json.has(NotificationConstants.REPEAT_TYPE) ? json.getString(NotificationConstants.REPEAT_TYPE) : null;\n            repeatTime = json.has(NotificationConstants.REPEAT_TIME) ? json.getDouble(NotificationConstants.REPEAT_TIME) : 0.0;\n            ongoing = json.has(NotificationConstants.ONGOING) && json.getBoolean(NotificationConstants.ONGOING);\n            allowWhileIdle = json.has(NotificationConstants.ALLOW_WHILE_IDLE) && json.getBoolean(NotificationConstants.ALLOW_WHILE_IDLE);\n            dontNotifyInForeground = json.has(NotificationConstants.DONT_NOTIFY_IN_FOREGROUND) && json.getBoolean(NotificationConstants.DONT_NOTIFY_IN_FOREGROUND);\n            data = json.has(NotificationConstants.DATA) ? json.getString(NotificationConstants.DATA) : null;\n        } catch (IllegalStateException | JSONException | NumberFormatException | NullPointerException e) {\n            throw new IllegalStateException(ResultCode.ERROR, e);\n        }\n    }\n\n    @NonNull\n    public static NotificationAttributes fromJson(String json) throws JSONException {\n\n        JSONObject jsonObject = new JSONObject(json);\n        return new NotificationAttributes(jsonObject);\n    }\n\n    public Bundle toBundle() {\n\n        Bundle bundle = new Bundle();\n        BundleUtils.set(bundle, NotificationConstants.ID, id);\n        BundleUtils.set(bundle, NotificationConstants.MESSAGE, message);\n        BundleUtils.setD(bundle, NotificationConstants.FIRE_DATE, fireDate);\n        BundleUtils.set(bundle, NotificationConstants.TITLE, title);\n        BundleUtils.set(bundle, NotificationConstants.TICKER, ticker);\n        BundleUtils.setB(bundle, NotificationConstants.SHOW_WHEN, showWhen);\n        BundleUtils.setB(bundle, NotificationConstants.AUTO_CANCEL, autoCancel);\n        BundleUtils.set(bundle, NotificationConstants.LARGE_ICON, largeIcon);\n        BundleUtils.set(bundle, NotificationConstants.LARGE_ICON_URL, largeIconUrl);\n        BundleUtils.set(bundle, NotificationConstants.SMALL_ICON, smallIcon);\n        BundleUtils.set(bundle, NotificationConstants.BIG_TEXT, bigText);\n        BundleUtils.set(bundle, NotificationConstants.SUB_TEXT, subText);\n        BundleUtils.set(bundle, NotificationConstants.BIG_PICTURE_URL, bigPictureUrl);\n        BundleUtils.set(bundle, NotificationConstants.SHORTCUT_ID, shortcutId);\n        BundleUtils.set(bundle, NotificationConstants.NUMBER, number);\n        BundleUtils.set(bundle, NotificationConstants.CHANNEL_ID, channelId);\n        BundleUtils.set(bundle, NotificationConstants.CHANNEL_NAME, channelName);\n        BundleUtils.set(bundle, NotificationConstants.CHANNEL_DESCRIPTION, channelDescription);\n        BundleUtils.set(bundle, NotificationConstants.SOUND, sound);\n        BundleUtils.set(bundle, NotificationConstants.COLOR, color);\n        BundleUtils.set(bundle, NotificationConstants.GROUP, group);\n        BundleUtils.setB(bundle, NotificationConstants.GROUP_SUMMARY, groupSummary);\n        BundleUtils.setB(bundle, NotificationConstants.PLAY_SOUND, playSound);\n        BundleUtils.setB(bundle, NotificationConstants.VIBRATE, vibrate);\n        BundleUtils.setD(bundle, NotificationConstants.VIBRATE_DURATION, vibrateDuration);\n        BundleUtils.set(bundle, NotificationConstants.ACTIONS, actions);\n        BundleUtils.setB(bundle, NotificationConstants.INVOKE_APP, invokeApp);\n        BundleUtils.set(bundle, NotificationConstants.TAG, tag);\n        BundleUtils.set(bundle, NotificationConstants.REPEAT_TYPE, repeatType);\n        BundleUtils.setD(bundle, NotificationConstants.REPEAT_TIME, repeatTime);\n        BundleUtils.setB(bundle, NotificationConstants.ONGOING, ongoing);\n        BundleUtils.setB(bundle, NotificationConstants.ALLOW_WHILE_IDLE, allowWhileIdle);\n        BundleUtils.setB(bundle, NotificationConstants.DONT_NOTIFY_IN_FOREGROUND, dontNotifyInForeground);\n        BundleUtils.set(bundle, NotificationConstants.DATA, data);\n        return bundle;\n    }\n\n    public JSONObject toJson() {\n\n        JSONObject json = new JSONObject();\n        try {\n            json.put(NotificationConstants.ID, id);\n            json.put(NotificationConstants.MESSAGE, message);\n            json.put(NotificationConstants.FIRE_DATE, fireDate);\n            json.put(NotificationConstants.TITLE, title);\n            json.put(NotificationConstants.TICKER, ticker);\n            json.put(NotificationConstants.SHOW_WHEN, showWhen);\n            json.put(NotificationConstants.AUTO_CANCEL, autoCancel);\n            json.put(NotificationConstants.LARGE_ICON, largeIcon);\n            json.put(NotificationConstants.LARGE_ICON_URL, largeIconUrl);\n            json.put(NotificationConstants.SMALL_ICON, smallIcon);\n            json.put(NotificationConstants.BIG_TEXT, bigText);\n            json.put(NotificationConstants.BIG_PICTURE_URL, bigPictureUrl);\n            json.put(NotificationConstants.SUB_TEXT, subText);\n            json.put(NotificationConstants.SHORTCUT_ID, shortcutId);\n            json.put(NotificationConstants.NUMBER, number);\n            json.put(NotificationConstants.CHANNEL_ID, channelId);\n            json.put(NotificationConstants.CHANNEL_NAME, channelName);\n            json.put(NotificationConstants.CHANNEL_DESCRIPTION, channelDescription);\n            json.put(NotificationConstants.SOUND, sound);\n            json.put(NotificationConstants.COLOR, color);\n            json.put(NotificationConstants.GROUP, group);\n            json.put(NotificationConstants.GROUP_SUMMARY, groupSummary);\n            json.put(NotificationConstants.PLAY_SOUND, playSound);\n            json.put(NotificationConstants.VIBRATE, vibrate);\n            json.put(NotificationConstants.VIBRATE_DURATION, vibrateDuration);\n            json.put(NotificationConstants.ACTIONS, actions);\n            json.put(NotificationConstants.INVOKE_APP, invokeApp);\n            json.put(NotificationConstants.TAG, tag);\n            json.put(NotificationConstants.REPEAT_TYPE, repeatType);\n            json.put(NotificationConstants.REPEAT_TIME, repeatTime);\n            json.put(NotificationConstants.ONGOING, ongoing);\n            json.put(NotificationConstants.ALLOW_WHILE_IDLE, allowWhileIdle);\n            json.put(NotificationConstants.DONT_NOTIFY_IN_FOREGROUND, dontNotifyInForeground);\n            json.put(NotificationConstants.DATA, data);\n        } catch (JSONException e) {\n            Log.e(\"NotificationAttributes\", ResultCode.ERROR, e);\n            return new JSONObject();\n        }\n        return json;\n    }\n\n    public String getId() {\n\n        return id;\n    }\n\n    public String getSound() {\n\n        return sound;\n    }\n\n    public String getMessage() {\n\n        return message;\n    }\n\n    public String getTitle() {\n\n        return title;\n    }\n\n    public String getData() {\n        return data;\n    }\n\n    public String getNumber() {\n\n        return number;\n    }\n\n    public String getRepeatType() {\n\n        return repeatType;\n    }\n\n    public double getFireDate() {\n\n        return fireDate;\n    }\n\n    public String getTicker() {\n\n        return ticker;\n    }\n\n    public boolean isShowWhen() {\n\n        return showWhen;\n    }\n\n    public boolean isAutoCancel() {\n\n        return autoCancel;\n    }\n\n    public String getLargeIcon() {\n\n        return largeIcon;\n    }\n\n    public String getLargeIconUrl() {\n\n        return largeIconUrl;\n    }\n\n    public String getSmallIcon() {\n\n        return smallIcon;\n    }\n\n    public String getBigText() {\n\n        return bigText;\n    }\n\n    public String getSubText() {\n\n        return subText;\n    }\n\n    public String getBigPictureUrl() {\n\n        return bigPictureUrl;\n    }\n\n    public String getShortcutId() {\n\n        return shortcutId;\n    }\n\n    public String getChannelId() {\n\n        return channelId;\n    }\n\n    public String getChannelName() {\n\n        return channelName;\n    }\n\n    public String getChannelDescription() {\n\n        return channelDescription;\n    }\n\n    public String getColor() {\n\n        return color;\n    }\n\n    public String getGroup() {\n\n        return group;\n    }\n\n    public boolean isGroupSummary() {\n\n        return groupSummary;\n    }\n\n    public boolean isPlaySound() {\n\n        return playSound;\n    }\n\n    public boolean isVibrate() {\n\n        return vibrate;\n    }\n\n    public double getVibrateDuration() {\n\n        return vibrateDuration;\n    }\n\n    public String getActions() {\n\n        return actions;\n    }\n\n    public boolean isInvokeApp() {\n\n        return invokeApp;\n    }\n\n    public String getTag() {\n\n        return tag;\n    }\n\n    public double getRepeatTime() {\n\n        return repeatTime;\n    }\n\n    public boolean isOngoing() {\n\n        return ongoing;\n    }\n\n    public boolean isAllowWhileIdle() {\n\n        return allowWhileIdle;\n    }\n\n    public boolean isDontNotifyInForeground() {\n\n        return dontNotifyInForeground;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/constants/Core.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.constants;\n\npublic interface Core {\n    String CLIENT_APP_ID = \"client/app_id\";\n    String DEFAULT_TOKEN_SCOPE = \"HCM\";\n    String RAW = \"raw\";\n\n    String REMOTE_MESSAGE_UPLINK_TO = \"push.hcm.upstream\";\n\n    String PREFERENCE_NAME = \"huawei_hms_rn_push\";\n\n    String DEFAULT_MESSAGE = \"HMS Push\";\n    long DEFAULT_VIBRATE_DURATION = 250L;\n    String NOTIFICATION_CHANNEL_ID = \"huawei-hms-rn-push-channel-id\";\n    String NOTIFICATION_CHANNEL_NAME = \"huawei-hms-rn-push-channel\";\n    String NOTIFICATION_CHANNEL_DESC = \"Huawei HMS Push\";\n\n    interface Event {\n        String REMOTE_NOTIFICATION_RECEIVED = \"REMOTE_NOTIFICATION_RECEIVED\"; // SDK Don`t support yet.\n        String REMOTE_DATA_MESSAGE_RECEIVED = \"REMOTE_DATA_MESSAGE_RECEIVED\";\n        String LOCAL_NOTIFICATION_ACTION_EVENT = \"LOCAL_NOTIFICATION_ACTION_EVENT\";\n        String ON_TOKEN_RECEIVED_EVENT = \"ON_TOKEN_RECEIVED_EVENT\";\n        String ON_PUSH_MESSAGE_SENT = \"ON_PUSH_MESSAGE_SENT\";\n        String ON_PUSH_MESSAGE_SENT_ERROR = \"ON_PUSH_MESSAGE_SENT_ERROR\";\n        String ON_PUSH_MESSAGE_SENT_DELIVERED = \"ON_PUSH_MESSAGE_SENT_DELIVERED\";\n        String NOTIFICATION_OPENED_EVENT = \"NOTIFICATION_OPENED_EVENT\";\n        String ON_TOKEN_ERROR_EVENT = \"ON_TOKEN_ERROR_EVENT\";\n        String PUSH_ON_START_COMMAND_EVENT = \"PUSH_ON_START_COMMAND_EVENT\";\n        String ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT = \"ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT\";\n        String ON_MULTI_SENDER_TOKEN_ERROR_EVENT = \"ON_MULTI_SENDER_TOKEN_ERROR_EVENT\";\n\n\n        interface Result {\n            String DATA_JSON = \"dataJSON\";\n            String RESULT = \"result\";\n            String RESULT_CODE = \"resultCode\";\n            String MSG_ID = \"msgId\";\n            String RESULT_INFO = \"resultInfo\";\n            String TOKEN = \"token\";\n            String MSG = \"msg\";\n            String EXCEPTION = \"exception\";\n            String ON_START_COMMAND = \"COMMAND_START\";\n\n        }\n    }\n\n    interface Resource {\n        String MIPMAP = \"mipmap\";\n        String NOTIFICATION = \"ic_notification\";\n        String LAUNCHER = \"ic_launcher\";\n        String DEFAULT = \"default\";\n    }\n\n    interface NotificationType {\n        String NOW = \"NOW\";\n        String SCHEDULED = \"SCHEDULED\";\n        String REMOTE = \"REMOTE\";\n        String DATA = \"DATA\";\n    }\n\n    interface ScheduledPublisher {\n        String NOTIFICATION_ID = \"notificationId\";\n        String BOOT_EVENT = \"android.intent.action.BOOT_COMPLETED\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/constants/LocalNotification.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.constants;\n\npublic interface LocalNotification {\n\n    interface Priority {\n        String MAX = \"max\";\n        String HIGH = \"high\";\n        String DEFAULT = \"default\";\n        String LOW = \"low\";\n        String MIN = \"min\";\n    }\n\n    interface Repeat {\n\n        interface Type {\n            String HOUR = \"hour\";\n            String MINUTE = \"minute\";\n            String DAY = \"day\";\n            String WEEK = \"week\";\n            String CUSTOM_TIME = \"custom_time\";\n        }\n\n        interface Time {\n            int ONE_MINUTE = 60000;\n            int ONE_HOUR = 3600000;\n            int ONE_DAY = 86400000;\n            int ONE_WEEK = 604800000;\n        }\n    }\n\n    interface Visibility {\n        String PUBLIC = \"public\";\n        String SECRET = \"secret\";\n        String PRIVATE = \"private\";\n    }\n\n    interface Importance {\n        String MAX = \"max\";\n        String HIGH = \"high\";\n        String DEFAULT = \"default\";\n        String LOW = \"low\";\n        String MIN = \"min\";\n        String NONE = \"none\";\n        String UNSPECIFIED = \"unspecified\";\n    }\n\n    enum Bitmap {\n        BIG_PICTURE,\n        LARGE_ICON\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/constants/NotificationConstants.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.constants;\n\npublic interface NotificationConstants {\n    String NOTIFICATION = \"notification\";\n    String IDENTIFIER = \"statusBarNotificationId\";\n    String ID = \"id\";\n    String MESSAGE = \"message\";\n    String FIRE_DATE = \"fireDate\";\n    String DATE = \"date\";\n    String TITLE = \"title\";\n    String TICKER = \"ticker\";\n    String SHOW_WHEN = \"showWhen\";\n    String AUTO_CANCEL = \"autoCancel\";\n    String LARGE_ICON = \"largeIcon\";\n    String LARGE_ICON_URL = \"largeIconUrl\";\n    String SMALL_ICON = \"smallIcon\";\n    String BIG_TEXT = \"bigText\";\n    String SUB_TEXT = \"subText\";\n    String BIG_PICTURE_URL = \"bigPictureUrl\";\n    String SHORTCUT_ID = \"shortcutId\";\n    String CHANNEL_ID = \"channelId\";\n    String CHANNEL_NAME = \"channelName\";\n    String CHANNEL_DESCRIPTION = \"channelDescription\";\n    String NUMBER = \"number\";\n    String SOUND = \"sound\";\n    String COLOR = \"color\";\n    String GROUP = \"group\";\n    String GROUP_SUMMARY = \"groupSummary\";\n    String PLAY_SOUND = \"playSound\";\n    String SOUND_NAME = \"soundName\";\n    String VIBRATE = \"vibrate\";\n    String VIBRATE_DURATION = \"vibrateDuration\";\n    String ACTIONS = \"actions\";\n    String ACTION = \"action\";\n    String INVOKE_APP = \"invokeApp\";\n    String TAG = \"tag\";\n    String REPEAT_TYPE = \"repeatType\";\n    String REPEAT_TIME = \"repeatTime\";\n    String ONGOING = \"ongoing\";\n    String PRIORITY = \"priority\";\n    String IMPORTANCE = \"importance\";\n    String VISIBILITY = \"visibility\";\n    String ALLOW_WHILE_IDLE = \"allowWhileIdle\";\n    String DONT_NOTIFY_IN_FOREGROUND = \"dontNotifyInForeground\";\n    String ONLY_ALERT_ONCE = \"onlyAlertOnce\";\n    String BODY = \"body\";\n    String REPEAT_INTERVAL = \"repeatInterval\";\n    String DATA = \"data\";\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/constants/RemoteMessageAttributes.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.constants;\n\npublic interface RemoteMessageAttributes {\n    String COLLAPSE_KEY = \"collapseKey\";\n    String DATA = \"data\";\n    String DATA_OF_MAP = \"dataOfMap\";\n    String MESSAGE_ID = \"messageId\";\n    String MESSAGE_TYPE = \"messageType\";\n    String ORIGINAL_URGENCY = \"originalUrgency\";\n    String URGENCY = \"urgency\";\n    String TTL = \"ttl\";\n    String SENT_TIME = \"sentTime\";\n    String TO = \"to\";\n    String FROM = \"from\";\n    String TOKEN = \"token\";\n    String RECEIPT_MODE = \"receiptMode\";\n    String SEND_MODE = \"sendMode\";\n    String CONTENTS = \"contents\";\n    String ANALYTIC_INFO = \"analyticInfo\";\n    String ANALYTIC_INFO_MAP = \"analyticInfoMap\";\n    String TITLE = \"title\";\n    String TITLE_LOCALIZATION_KEY = \"titleLocalizationKey\";\n    String TITLE_LOCALIZATION_ARGS = \"titleLocalizationArgs\";\n    String BODY_LOCALIZATION_KEY = \"bodyLocalizationKey\";\n    String BODY_LOCALIZATION_ARGS = \"bodyLocalizationArgs\";\n    String BODY = \"body\";\n    String ICON = \"icon\";\n    String SOUND = \"Sound\";\n    String TAG = \"Tag\";\n    String COLOR = \"Color\";\n    String CLICK_ACTION = \"ClickAction\";\n    String CHANNEL_ID = \"ChannelId\";\n    String IMAGE_URL = \"ImageUrl\";\n    String LINK = \"Link\";\n    String NOTIFY_ID = \"NotifyId\";\n    String WHEN = \"When\";\n    String LIGHT_SETTINGS = \"LightSettings\";\n    String BADGE_NUMBER = \"BadgeNumber\";\n    String IMPORTANCE = \"Importance\";\n    String TICKER = \"Ticker\";\n    String VIBRATE_CONFIG = \"vibrateConfig\";\n    String VISIBILITY = \"visibility\";\n    String INTENT_URI = \"intentUri\";\n    String IS_AUTO_CANCEL = \"isAutoCancel\";\n    String IS_LOCAL_ONLY = \"isLocalOnly\";\n    String IS_DEFAULT_LIGHT = \"isDefaultLight\";\n    String IS_DEFAULT_SOUND = \"isDefaultSound\";\n    String IS_DEFAULT_VIBRATE = \"isDefaultVibrate\";\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/constants/ResultCode.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.constants;\n\npublic interface ResultCode {\n    // Success\n    String SUCCESS = \"0\";\n\n    // Error\n    String ERROR = \"-1\";\n\n    // Bundle is null, exception\n    String NULL_BUNDLE = \"333\";\n\n    // Unknown error. Contact Huawei technical support.\n    String RESULT_FAILURE = \"907122045\";\n\n    // The message contains invalid parameters.\n    String PARAMETER_IS_EMPTY = \"907122042\";\n\n    // You do not have a token. Apply for a token.\n    String ERROR_NO_TOKEN = \"907122030\";\n\n    // The current network is unavailable. Check the network connection.\n    String ERROR_NO_NETWORK = \"907122031\";\n\n    // The token has expired. Delete the token and apply for a new one.\n    String ERROR_TOKEN_INVALID = \"907122032\";\n\n    // If the Push service is unavailable; contact Huawei technical support.\n    String ERROR_SERVICE_NOT_AVAILABLE = \"907122046\";\n\n    // If the Push server returns an error; contact Huawei technical support.\n    String ERROR_PUSH_SERVER = \"907122047\";\n\n    // The number of subscribed topics exceeds 2000.\n    String ERROR_TOPIC_EXCEED = \"907122034\";\n\n    // Failed to send the subscription topic. Contact Huawei technical support.\n    String ERROR_TOPIC_SEND = \"907122035\";\n\n    // Push rights are not enabled. Enable the service and set push service parameters at AppGallery Connect.\n    String ERROR_NO_RIGHT = \"907122036\";\n\n    // Failed to apply for the token. Contact Huawei technical support.\n    String ERROR_GET_TOKEN_ERR = \"907122037\";\n\n    // No storage location is selected for the application or the storage location is invalid.\n    String ERROR_STORAGE_LOCATION_EMPTY = \"907122038\";\n\n    // Failed to apply for a token. Cross-region token application is not allowed.\n    String ERROR_NOT_ALLOW_CROSS_APPLY = \"907122053\";\n\n    // The message body size exceeds the maximum.\n    String ERROR_SIZE = \"907122041\";\n\n    // The number of sent messages reaches the upper limit. The messages will be discarded.\n    String ERROR_TOO_MANY_MESSAGES = \"907122043\";\n\n    // The message lifetime expires before the message is successfully sent to the APP server.\n    String ERROR_TTL_EXCEEDED = \"907122044\";\n\n    //  Huawei Mobile Services (APK) can't connect  Huawei Push  Kit.\n    String ERROR_HMS_CLIENT_API = \"907122048\";\n\n    // The current EMUI version is too early to use the capability.\n    String ERROR_OPERATION_NOT_SUPPORTED = \"907122049\";\n\n    // The operation cannot be performed in the main thread.\n    String ERROR_MAIN_THREAD = \"907122050\";\n\n    // The device certificate authentication fails.\n    String ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING = \"907122051\";\n\n    // Failed to bind the service.\n    String ERROR_BIND_SERVICE_SELF_MAPPING = \"907122052\";\n\n    // The SDK is being automatically initialized. Try again later.\n    String ERROR_AUTO_INITIALIZING = \"907122054\";\n\n    /*The input parameter is incorrect. Check whether the related configuration information is correct.\n     * Example= app_id in the agconnect - services.json file;\n     * Check whether the build.gradle file is configured with the certificate signature.\n     */\n    String ERROR_ARGUMENTS_INVALID = \"907135000\";\n\n    // Internal Push error. Contact Huawei technical support engineers.\n    String ERROR_INTERNAL_ERROR = \"907135001\";\n\n    // The service does not exist. The invoked interface does not exist.\n    String ERROR_NAMING_INVALID = \"907135002\";\n\n    // The ApiClient object is invalid.\n    String ERROR_CLIENT_API_INVALID = \"907135003\";\n\n    // Invoking AIDL times out. Contact Huawei technical support.\n    String ERROR_EXECUTE_TIMEOUT = \"907135004\";\n\n    // The current area does not support this service.\n    String ERROR_NOT_IN_SERVICE = \"907135005\";\n\n    // If the AIDL connection session is invalid; contact Huawei technical support.\n    String ERROR_SESSION_INVALID = \"907135006\";\n\n    // An error occurred when invoking an unspecified API.\n    String ERROR_API_NOT_SPECIFIED = \"1002\";\n\n    /* Failed to invoke the gateway to query the application scope.\n     * Check whether the current app has been created and enabled in AppGallery Connect.\n     * If yes; contact Huawei technical support.\n     */\n    String ERROR_GET_SCOPE_ERROR = \"907135700\";\n    /* Scope is not configured on the AppGallery Connect.\n     * Check whether the current app has been created and enabled in AppGallery Connect.\n     * If yes; contact Huawei technical support.\n     */\n    String ERROR_SCOPE_LIST_EMPTY = \"907135701\";\n\n    /* The certificate fingerprint is not configured on the AppGallery Connect.\n     * 1. Check whether your phone can access the Internet.\n     * 2. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details; see AppGallery Connect configuration in Development Preparations.\n     * 3. If the check result is correct; contact Huawei technical support.\n     */\n    String ERROR_CERT_FINGERPRINT_EMPTY = \"907135702\";\n\n    //Permission is not configured on the AppGallery Connect.\n    String ERROR_PERMISSION_LIST_EMPTY = \"907135703\";\n\n    // The authentication information of the application does not exist.\n    String ERROR_AUTH_INFO_NOT_EXIST = \"6002\";\n\n    // An error occurred during certificate fingerprint verification. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details; see AppGallery Connect configuration in Development Preparations.\n    String ERROR_CERT_FINGERPRINT_ERROR = \"6003\";\n\n    // Interface authentication= The permission does not exist and is not applied for in AppGallery Connect.\n    String ERROR_PERMISSION_NOT_EXIST = \"6004\";\n\n    // Interface authentication= unauthorized.\n    String ERROR_PERMISSION_NOT_AUTHORIZED = \"6005\";\n\n    // Interface authentication= The authorization expires.\n    String ERROR_PERMISSION_EXPIRED = \"6006\";\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/local/BitmapDataSubscriber.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.local;\n\nimport android.graphics.Bitmap;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.datasource.DataSource;\nimport com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;\nimport com.huawei.hms.rn.push.constants.LocalNotification;\n\npublic class BitmapDataSubscriber extends BaseBitmapDataSubscriber {\n    HmsLocalNotificationPicturesLoader hmsLocalNotificationPicturesLoader;\n    LocalNotification.Bitmap bitmapType;\n\n    public BitmapDataSubscriber(HmsLocalNotificationPicturesLoader loader, LocalNotification.Bitmap bitmapType) {\n        this.hmsLocalNotificationPicturesLoader = loader;\n        this.bitmapType = bitmapType;\n    }\n\n    @Override\n    public void onNewResultImpl(@Nullable Bitmap bitmap) {\n        if (bitmapType.equals(LocalNotification.Bitmap.LARGE_ICON)) {\n            hmsLocalNotificationPicturesLoader.setLargeIcon(bitmap);\n        } else {\n            hmsLocalNotificationPicturesLoader.setBigPicture(bitmap);\n        }\n    }\n\n    @Override\n    public void onFailureImpl(DataSource dataSource) {\n        if (bitmapType.equals(LocalNotification.Bitmap.LARGE_ICON)) {\n            hmsLocalNotificationPicturesLoader.setLargeIcon(null);\n        } else {\n            hmsLocalNotificationPicturesLoader.setBigPicture(null);\n        }\n    }\n}"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/local/HmsLocalNotification.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.local;\n\nimport android.app.Application;\nimport android.os.Build;\nimport android.os.Bundle;\n\nimport androidx.annotation.RequiresApi;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.huawei.hms.rn.push.constants.ResultCode;\nimport com.huawei.hms.rn.push.utils.NotificationConfigUtils;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n\npublic class HmsLocalNotification extends ReactContextBaseJavaModule {\n\n    private final String TAG = HmsLocalNotification.class.getSimpleName();\n\n\n    private HmsLocalNotificationController hmsLocalNotificationController;\n\n    public HmsLocalNotification(ReactApplicationContext reactContext) {\n\n        super(reactContext);\n        Application applicationContext = (Application) reactContext.getApplicationContext();\n        hmsLocalNotificationController = new HmsLocalNotificationController(applicationContext);\n\n        hmsLocalNotificationController.createDefaultChannel();\n    }\n\n    @Override\n    public String getName() {\n\n        return TAG;\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n\n        return new HashMap<>();\n    }\n\n    @ReactMethod\n    public void localNotification(ReadableMap details, final Promise promise) {\n\n        Bundle bundle = Arguments.toBundle(details);\n        if (bundle == null) {\n            ResultUtils.handleResult(false, false, promise, ResultCode.NULL_BUNDLE);\n            return;\n        }\n        NotificationConfigUtils.configId(bundle);\n\n        hmsLocalNotificationController.localNotificationNow(bundle, promise);\n\n    }\n\n    @ReactMethod\n    public void localNotificationSchedule(ReadableMap details, final Promise promise) {\n\n        Bundle bundle = Arguments.toBundle(details);\n        if (bundle == null) {\n            ResultUtils.handleResult(false, false, promise, ResultCode.NULL_BUNDLE);\n            return;\n        }\n        NotificationConfigUtils.configId(bundle);\n\n        hmsLocalNotificationController.localNotificationSchedule(bundle, promise);\n\n    }\n\n    @ReactMethod\n    public void cancelAllNotifications(final Promise promise) {\n\n        hmsLocalNotificationController.cancelScheduledNotifications();\n        hmsLocalNotificationController.cancelNotifications();\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    @ReactMethod\n    public void cancelNotifications(final Promise promise) {\n\n        hmsLocalNotificationController.cancelNotifications();\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    @ReactMethod\n    public void cancelScheduledNotifications(final Promise promise) {\n\n        hmsLocalNotificationController.cancelScheduledNotifications();\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    @ReactMethod\n    public void cancelNotificationsWithId(ReadableArray idArr, final Promise promise) {\n\n        hmsLocalNotificationController.cancelNotificationsWithId(idArr);\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    @ReactMethod\n    public void cancelNotificationsWithIdTag(ReadableArray idTagArr, final Promise promise) {\n\n        hmsLocalNotificationController.cancelNotificationsWithIdTag(idTagArr);\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.M)\n    @ReactMethod\n    public void cancelNotificationsWithTag(String tag, final Promise promise) {\n\n        hmsLocalNotificationController.cancelNotificationsWithTag(tag);\n\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n\n    @RequiresApi(api = Build.VERSION_CODES.M)\n    @ReactMethod\n    public void getNotifications(final Promise promise) {\n\n        WritableArray result = hmsLocalNotificationController.getNotifications();\n\n        if (promise != null)\n            ResultUtils.handleResult(true, result, promise);\n\n    }\n\n    @ReactMethod\n    public void getScheduledNotifications(final Promise promise) {\n\n        WritableArray result = hmsLocalNotificationController.getScheduledNotifications();\n\n        if (promise != null)\n            ResultUtils.handleResult(true, result, promise);\n\n    }\n\n\n    @ReactMethod\n    public void getChannels(final Promise promise) {\n\n        WritableArray result = Arguments.fromList(hmsLocalNotificationController.listChannels());\n\n        if (promise != null)\n            ResultUtils.handleResult(true, result, promise);\n\n    }\n\n    @ReactMethod\n    public void channelExists(String channelId, final Promise promise) {\n\n        hmsLocalNotificationController.channelExists(channelId, promise);\n\n\n    }\n\n    @ReactMethod\n    public void channelBlocked(String channelId, final Promise promise) {\n\n        hmsLocalNotificationController.isChannelBlocked(channelId, promise);\n\n    }\n\n    @ReactMethod\n    public void deleteChannel(String channelId, final Promise promise) {\n\n        hmsLocalNotificationController.deleteChannel(channelId, promise);\n\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/local/HmsLocalNotificationActionPublisher.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.local;\n\nimport android.os.Bundle;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\n\npublic class HmsLocalNotificationActionPublisher {\n    private ReactContext context;\n\n    public HmsLocalNotificationActionPublisher(ReactContext reactContext) {\n\n        context = reactContext;\n    }\n\n    public void notifyNotificationAction(Bundle bundle) {\n\n        String bundleString = BundleUtils.convertJSON(bundle);\n\n        WritableMap params = Arguments.createMap();\n        params.putString(Core.Event.Result.DATA_JSON, bundleString);\n\n        sendEvent(params);\n    }\n\n    void sendEvent(Object params) {\n\n        if (context.hasActiveCatalystInstance()) {\n            context\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.LOCAL_NOTIFICATION_ACTION_EVENT, params);\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/local/HmsLocalNotificationController.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.local;\n\nimport android.app.AlarmManager;\nimport android.app.Application;\nimport android.app.Notification;\nimport android.app.NotificationChannel;\nimport android.app.NotificationManager;\nimport android.app.PendingIntent;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.media.AudioAttributes;\nimport android.media.RingtoneManager;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.service.notification.StatusBarNotification;\nimport android.util.Log;\n\nimport androidx.annotation.RequiresApi;\nimport androidx.core.app.NotificationCompat;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.ResultCode;\nimport com.huawei.hms.rn.push.config.NotificationAttributes;\nimport com.huawei.hms.rn.push.constants.NotificationConstants;\nimport com.huawei.hms.rn.push.receiver.HmsLocalNotificationActionsReceiver;\nimport com.huawei.hms.rn.push.receiver.HmsLocalNotificationScheduledPublisher;\nimport com.huawei.hms.rn.push.utils.ApplicationUtils;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\nimport com.huawei.hms.rn.push.utils.NotificationConfigUtils;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.huawei.hms.rn.push.config.NotificationAttributes.fromJson;\n\npublic class HmsLocalNotificationController {\n\n    private final String TAG = HmsLocalNotificationController.class.getSimpleName();\n\n    private Context context;\n    private final SharedPreferences sharedPreferences;\n\n    public HmsLocalNotificationController(Application context) {\n\n        this.context = context;\n        this.sharedPreferences = context.getSharedPreferences(Core.PREFERENCE_NAME, Context.MODE_PRIVATE);\n    }\n\n    private AlarmManager getAlarmManager() {\n\n        return (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);\n    }\n\n    private NotificationManager notificationManager() {\n\n        return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);\n    }\n\n    public Class getMainActivityClass() {\n\n        String packageName = context.getPackageName();\n        Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);\n        String className = launchIntent.getComponent().getClassName();\n        try {\n            return Class.forName(className);\n        } catch (ClassNotFoundException e) {\n            Log.e(TAG, \"Class not found\", e);\n            return null;\n        }\n    }\n\n    public void createDefaultChannel() {\n\n        NotificationManager notificationManager = notificationManager();\n\n        int importance = 4; // HIGH\n        Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);\n\n        String channelId = Core.NOTIFICATION_CHANNEL_ID + \"-\" + importance;\n        createChannel(notificationManager, channelId, Core.NOTIFICATION_CHANNEL_NAME, Core.NOTIFICATION_CHANNEL_DESC, soundUri, importance, new long[]{0, Core.DEFAULT_VIBRATE_DURATION});\n    }\n\n    private void createChannel(NotificationManager notificationManager, String channelId, String channelName, String channelDescription, Uri soundUri, int importance, long[] vibratePattern) {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)\n            return;\n        if (notificationManager == null)\n            return;\n\n        NotificationChannel notificationChannel = notificationManager.getNotificationChannel(channelId);\n\n        if (notificationChannel != null) return;\n\n        if (channelName == null)\n            channelName = Core.NOTIFICATION_CHANNEL_NAME;\n\n\n        if (channelDescription == null)\n            channelDescription = Core.NOTIFICATION_CHANNEL_DESC;\n\n\n        notificationChannel = new NotificationChannel(channelId, channelName, importance);\n\n        notificationChannel.setDescription(channelDescription);\n        notificationChannel.enableLights(true);\n        notificationChannel.enableVibration(true);\n        notificationChannel.setVibrationPattern(vibratePattern);\n\n        if (soundUri != null) {\n            AudioAttributes audioAttributes = new AudioAttributes.Builder()\n                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)\n                .setUsage(AudioAttributes.USAGE_NOTIFICATION)\n                .build();\n\n            notificationChannel.setSound(soundUri, audioAttributes);\n        } else {\n            notificationChannel.setSound(null, null);\n        }\n\n        notificationManager.createNotificationChannel(notificationChannel);\n\n    }\n\n    public void localNotificationNow(final Bundle bundle, final Promise promise) {\n\n        HmsLocalNotificationPicturesLoader notificationPicturesLoader = new HmsLocalNotificationPicturesLoader(\n            (largeIconImage, bigPictureImage, reactPromise) -> localNotificationNowPicture(bundle, largeIconImage, bigPictureImage, reactPromise));\n\n        notificationPicturesLoader.setReactPromise(promise);\n        notificationPicturesLoader.setLargeIconUrl(context, BundleUtils.get(bundle, NotificationConstants.LARGE_ICON_URL));\n        notificationPicturesLoader.setBigPictureUrl(context, BundleUtils.get(bundle, NotificationConstants.BIG_PICTURE_URL));\n\n    }\n\n    public void invokeApp(Bundle bundle) {\n\n        String packageName = context.getPackageName();\n        Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);\n        if (launchIntent == null) return;\n\n        try {\n            String className = launchIntent.getComponent().getClassName();\n\n            Class<?> activityClass = Class.forName(className);\n            Intent activityIntent = new Intent(context, activityClass);\n\n            if (bundle != null) {\n                activityIntent.putExtra(NotificationConstants.NOTIFICATION, bundle);\n            }\n\n            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n\n            context.startActivity(activityIntent);\n        } catch (Exception e) {\n            Log.e(TAG, \"Class not found\", e);\n        }\n    }\n\n\n    public void checkRequiredParams(Bundle bundle, final Promise promise, String type) {\n\n        if (getMainActivityClass() == null) {\n            if (promise != null)\n                ResultUtils.handleResult(false, \"No activity class\", promise, ResultCode.ERROR);\n            return;\n        }\n        if (BundleUtils.get(bundle, NotificationConstants.MESSAGE) == null) {\n            if (promise != null)\n                ResultUtils.handleResult(false, \"Notification Message is required\", promise, ResultCode.ERROR);\n            return;\n        }\n        if (BundleUtils.get(bundle, NotificationConstants.ID) == null) {\n            if (promise != null)\n                ResultUtils.handleResult(false, \"Notification ID is null\", promise, ResultCode.ERROR);\n            return;\n        }\n        if (type.equals(Core.NotificationType.SCHEDULED)) {\n            if (BundleUtils.getD(bundle, NotificationConstants.FIRE_DATE) == 0) {\n                if (promise != null)\n                    ResultUtils.handleResult(false, \"FireDate is null\", promise, ResultCode.ERROR);\n                return;\n            }\n        }\n    }\n\n    public void localNotificationNowPicture(Bundle bundle, Bitmap largeIconBitmap, Bitmap bigPictureBitmap, final Promise promise) {\n\n        checkRequiredParams(bundle, promise, Core.NotificationType.NOW);\n        try {\n\n            String title = NotificationConfigUtils.configTitle(bundle, context);\n            int priority = NotificationConfigUtils.configPriority(bundle);\n            int importance = NotificationConfigUtils.configImportance(bundle);\n            int visibility = NotificationConfigUtils.configVisibility(bundle);\n\n            String channelId = Core.NOTIFICATION_CHANNEL_ID + \"-\" + importance;\n\n            NotificationCompat.Builder notification = new NotificationCompat.Builder(context, \"\")\n                .setChannelId(channelId)\n                .setContentTitle(title)\n                .setTicker(BundleUtils.get(bundle, NotificationConstants.TICKER))\n                .setVisibility(visibility)\n                .setPriority(priority)\n                .setAutoCancel(BundleUtils.getB(bundle, NotificationConstants.AUTO_CANCEL, true))\n                .setOnlyAlertOnce(BundleUtils.getB(bundle, NotificationConstants.ONLY_ALERT_ONCE, false));\n\n            // Restore showing timestamp on Android 7+\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {\n                boolean showWhen = BundleUtils.getB(bundle, NotificationConstants.SHOW_WHEN, true);\n                notification.setShowWhen(showWhen);\n            }\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                notification.setDefaults(Notification.DEFAULT_LIGHTS);\n            }\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {\n                String group = BundleUtils.get(bundle, NotificationConstants.GROUP);\n\n                if (group != null) {\n                    notification.setGroup(group);\n                }\n\n                if (BundleUtils.contains(bundle, NotificationConstants.GROUP_SUMMARY) || BundleUtils.getB(bundle, NotificationConstants.GROUP_SUMMARY)) {\n                    notification.setGroupSummary(BundleUtils.getB(bundle, NotificationConstants.GROUP_SUMMARY));\n                }\n            }\n\n            String message = NotificationConfigUtils.configMessage(bundle, context);\n            notification.setContentText(message);\n\n            String subText = BundleUtils.get(bundle, NotificationConstants.SUB_TEXT);\n\n            if (subText != null)\n                notification.setSubText(subText);\n\n            String bigText = BundleUtils.get(bundle, NotificationConstants.BIG_TEXT);\n            bigText = bigText == null ? message : bigText;\n\n\n            String notificationNumber = BundleUtils.get(bundle, NotificationConstants.NUMBER);\n\n            if (notificationNumber != null) {\n                notification.setNumber(Integer.parseInt(notificationNumber));\n            }\n\n            notification.setSmallIcon(NotificationConfigUtils.configSmallIcon(bundle, context));\n\n            largeIconBitmap = NotificationConfigUtils.configLargeIcon(bundle, context, largeIconBitmap);\n            if (largeIconBitmap != null) {\n                notification.setLargeIcon(largeIconBitmap);\n            }\n\n            NotificationCompat.Style style;\n\n            if (bigPictureBitmap != null) {\n                style = new NotificationCompat.BigPictureStyle()\n                    .bigPicture(bigPictureBitmap)\n                    .setBigContentTitle(title)\n                    .setSummaryText(message);\n            } else {\n                style = new NotificationCompat.BigTextStyle().bigText(bigText);\n            }\n\n            notification.setStyle(style);\n\n            Class intentClass = getMainActivityClass();\n\n            Intent intent = new Intent(context, intentClass);\n            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);\n            intent.putExtra(NotificationConstants.NOTIFICATION, bundle);\n\n            Uri soundUri = null;\n\n            if (!BundleUtils.contains(bundle, NotificationConstants.PLAY_SOUND) || BundleUtils.getB(bundle, NotificationConstants.PLAY_SOUND)) {\n                soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);\n\n                String soundName = BundleUtils.get(bundle, NotificationConstants.SOUND_NAME);\n\n                if (soundName != null) {\n                    if (!Core.Resource.DEFAULT.equalsIgnoreCase(soundName)) {\n\n                        int resId;\n                        if (context.getResources().getIdentifier(soundName, Core.RAW, context.getPackageName()) == 0) {\n                            soundName = soundName.substring(0, soundName.lastIndexOf('.'));\n                        }\n                        resId = context.getResources().getIdentifier(soundName, Core.RAW, context.getPackageName());\n\n                        soundUri = Uri.parse(\"android.resource://\" + context.getPackageName() + \"/\" + resId);\n                    }\n                } else {\n                    soundName = Core.Resource.DEFAULT;\n                }\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                    channelId = channelId + \"-\" + soundName;\n                }\n\n                notification.setSound(soundUri);\n            }\n\n            if (soundUri == null || Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                notification.setSound(null);\n            }\n\n            if (BundleUtils.contains(bundle, NotificationConstants.ONGOING) || BundleUtils.getB(bundle, NotificationConstants.ONGOING)) {\n                notification.setOngoing(BundleUtils.getB(bundle, NotificationConstants.ONGOING));\n            }\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                notification.setCategory(NotificationCompat.CATEGORY_CALL);\n\n                String color = BundleUtils.get(bundle, NotificationConstants.COLOR);\n                if (color != null) {\n                    notification.setColor(Color.parseColor(color));\n                }\n            }\n\n            int notificationID = Integer.parseInt(BundleUtils.get(bundle, NotificationConstants.ID));\n\n\n            int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT;\n            if (android.os.Build.VERSION.SDK_INT >= 23) {\n                pendingIntentFlags |= PendingIntent.FLAG_IMMUTABLE;\n            }\n            PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationID, intent,\n                pendingIntentFlags);\n\n            NotificationManager notificationManager = notificationManager();\n\n            long[] vibratePattern = new long[]{0};\n\n            if (!BundleUtils.contains(bundle, NotificationConstants.VIBRATE) || BundleUtils.getB(bundle, NotificationConstants.VIBRATE)) {\n                long vibrateDuration = BundleUtils.contains(bundle, NotificationConstants.VIBRATE_DURATION) ? BundleUtils.getL(bundle, NotificationConstants.VIBRATE_DURATION) : Core.DEFAULT_VIBRATE_DURATION;\n                if (vibrateDuration == 0)\n                    vibrateDuration = Core.DEFAULT_VIBRATE_DURATION;\n\n                channelId = channelId + \"-\" + vibrateDuration;\n\n                vibratePattern = new long[]{0, vibrateDuration};\n\n                notification.setVibrate(vibratePattern);\n            }\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                String shortcutId = BundleUtils.get(bundle, NotificationConstants.SHORTCUT_ID);\n\n                if (shortcutId != null) {\n                    notification.setShortcutId(shortcutId);\n                }\n            }\n\n            String customChannelId = BundleUtils.get(bundle, NotificationConstants.CHANNEL_ID);\n            if (customChannelId != null) {\n                channelId = customChannelId;\n            }\n\n            String channelName = BundleUtils.get(bundle, NotificationConstants.CHANNEL_NAME);\n            String channelDescription = BundleUtils.get(bundle, NotificationConstants.CHANNEL_DESCRIPTION);\n\n            createChannel(notificationManager, channelId, channelName, channelDescription, soundUri, importance, vibratePattern);\n\n            notification.setChannelId(channelId);\n            notification.setContentIntent(pendingIntent);\n\n            JSONArray actionArr = null;\n            try {\n                actionArr = BundleUtils.get(bundle, NotificationConstants.ACTIONS) != null ? new JSONArray(BundleUtils.get(bundle, NotificationConstants.ACTIONS)) : null;\n            } catch (Exception e) {\n                if (promise != null)\n                    ResultUtils.handleResult(false, e.getLocalizedMessage(), promise, ResultCode.ERROR);\n                return;\n            }\n\n            if (actionArr != null) {\n                int icon = 0;\n\n                for (int i = 0; i < actionArr.length(); i++) {\n                    String action;\n                    try {\n                        action = actionArr.getString(i);\n                    } catch (Exception e) {\n                        continue;\n                    }\n\n                    Intent actionIntent = new Intent(context, HmsLocalNotificationActionsReceiver.class);\n                    actionIntent.setAction(context.getPackageName() + \".ACTION_\" + i);\n\n                    actionIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);\n\n                    bundle.putString(NotificationConstants.ACTION, action);\n                    actionIntent.putExtra(NotificationConstants.NOTIFICATION, bundle);\n                    actionIntent.setPackage(context.getPackageName());\n\n                    PendingIntent pendingActionIntent = PendingIntent.getBroadcast(context, notificationID, actionIntent,\n                        pendingIntentFlags);\n\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n                        notification.addAction(new NotificationCompat.Action.Builder(icon, action, pendingActionIntent).build());\n                    } else {\n                        notification.addAction(icon, action, pendingActionIntent);\n                    }\n                }\n            }\n\n            //Override notification\n            if (sharedPreferences.getString(BundleUtils.get(bundle, NotificationConstants.ID), null) != null) {\n                SharedPreferences.Editor editor = sharedPreferences.edit();\n                editor.remove(BundleUtils.get(bundle, NotificationConstants.ID));\n                editor.apply();\n            }\n\n            if (!(ApplicationUtils.isApplicationInForeground(context) && BundleUtils.getB(bundle, NotificationConstants.DONT_NOTIFY_IN_FOREGROUND))) {\n                Notification builtNotification = notification.build();\n                builtNotification.defaults |= Notification.DEFAULT_LIGHTS;\n\n                if (BundleUtils.contains(bundle, NotificationConstants.TAG)) {\n                    String tag = BundleUtils.get(bundle, NotificationConstants.TAG);\n                    notificationManager.notify(tag, notificationID, builtNotification);\n                } else {\n                    notificationManager.notify(notificationID, builtNotification);\n                }\n                if (promise != null)\n                    ResultUtils.handleResult(true, Arguments.fromBundle(bundle), promise);\n                // Do not return !\n            }\n\n            this.localNotificationRepeat(bundle);\n        } catch (NullPointerException | IllegalArgumentException | IllegalStateException e) {\n            if (promise != null)\n                ResultUtils.handleResult(false, e.getLocalizedMessage(), promise, ResultCode.ERROR);\n        }\n    }\n\n\n    private void localNotificationRepeat(Bundle bundle) {\n\n        long newFireDate = NotificationConfigUtils.configNextFireDate(bundle);\n\n        if (newFireDate == 0) return;\n\n        bundle.putDouble(NotificationConstants.FIRE_DATE, newFireDate);\n        this.localNotificationSchedule(bundle, null);\n\n    }\n\n    public void localNotificationSchedule(Bundle bundle, final Promise promise) {\n\n        checkRequiredParams(bundle, promise, Core.NotificationType.SCHEDULED);\n\n        NotificationAttributes notificationAttributes = new NotificationAttributes(bundle);\n        String id = notificationAttributes.getId();\n\n        SharedPreferences.Editor editor = sharedPreferences.edit();\n        editor.putString(id, notificationAttributes.toJson().toString());\n        editor.apply();\n\n        localNotificationScheduleSetAlarm(bundle);\n\n        if (promise != null)\n            ResultUtils.handleResult(true, Arguments.fromBundle(bundle), promise);\n\n    }\n\n    public void localNotificationScheduleSetAlarm(Bundle bundle) {\n\n        long fireDate = BundleUtils.getL(bundle, NotificationConstants.FIRE_DATE);\n        boolean allowWhileIdle = BundleUtils.getB(bundle, NotificationConstants.ALLOW_WHILE_IDLE);\n        long curr = new Date().getTime();\n        if (curr > fireDate) {\n            Log.e(TAG, \"Scheduled time is earlier than now, fire immediately\");\n        }\n\n        PendingIntent pendingIntent = buildScheduleNotificationIntent(bundle);\n\n        if (pendingIntent == null) return;\n\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {\n            getAlarmManager().set(AlarmManager.RTC_WAKEUP, fireDate, pendingIntent);\n        } else {\n            if (allowWhileIdle && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n                getAlarmManager().setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, fireDate, pendingIntent); // Doze Mode\n\n            } else {\n                getAlarmManager().setExact(AlarmManager.RTC_WAKEUP, fireDate, pendingIntent);\n\n            }\n        }\n\n    }\n\n\n    private PendingIntent buildScheduleNotificationIntent(Bundle bundle) {\n\n        try {\n            int id = Integer.parseInt(BundleUtils.get(bundle, NotificationConstants.ID));\n\n            Intent intent = new Intent(context, HmsLocalNotificationScheduledPublisher.class);\n            intent.putExtra(Core.ScheduledPublisher.NOTIFICATION_ID, id);\n            intent.putExtras(bundle);\n\n            int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT;\n            if (android.os.Build.VERSION.SDK_INT >= 23) {\n                pendingIntentFlags |= PendingIntent.FLAG_IMMUTABLE;\n            }\n\n            return PendingIntent.getBroadcast(context, id, intent, pendingIntentFlags);\n        } catch (Exception e) {\n            Log.e(TAG, ResultCode.ERROR, e);\n        }\n\n        return null;\n    }\n\n\n    public void isChannelBlocked(String channelId, final Promise promise) {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n            ResultUtils.handleResult(false, \"requires API level 24\", promise, ResultCode.ERROR);\n            return;\n        }\n\n        if (channelId == null) {\n            ResultUtils.handleResult(false, \"invalid channelId\", promise, ResultCode.ERROR);\n            return;\n        }\n\n        NotificationChannel channel = notificationManager().getNotificationChannel(channelId);\n\n        if (channel == null) {\n            ResultUtils.handleResult(false, \"Channel not found\", promise, ResultCode.ERROR);\n            return;\n        }\n\n        ResultUtils.handleResult(true, NotificationManager.IMPORTANCE_NONE == channel.getImportance(), promise);\n\n\n    }\n\n    public void channelExists(String channelId, final Promise promise) {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n            ResultUtils.handleResult(false, \"requires API level 26\", promise, ResultCode.ERROR);\n            return;\n        }\n\n        NotificationChannel channel = notificationManager().getNotificationChannel(channelId);\n        if (channel == null) {\n            ResultUtils.handleResult(false, \"Channel not found\", promise, ResultCode.ERROR);\n            return;\n        }\n\n        ResultUtils.handleResult(true, channel != null, promise);\n\n    }\n\n    public void deleteChannel(String channelId, final Promise promise) {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n            if (promise != null) {\n                ResultUtils.handleResult(false, \"requires API level 26\", promise, ResultCode.ERROR);\n            }\n            return;\n        }\n\n        notificationManager().deleteNotificationChannel(channelId);\n        if (promise != null)\n            ResultUtils.handleResult(true, true, promise);\n\n    }\n\n    public List<String> listChannels() {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)\n            return new ArrayList<>();\n\n        List<String> channels = new ArrayList<>();\n\n        List<NotificationChannel> notificationChannels = notificationManager().getNotificationChannels();\n        for (NotificationChannel channel : notificationChannels) {\n            channels.add(channel.getId());\n        }\n        return channels;\n\n    }\n\n\n    @RequiresApi(api = Build.VERSION_CODES.M)\n    public WritableArray getNotifications() {\n\n        StatusBarNotification[] activeNotifications = notificationManager().getActiveNotifications();\n        WritableArray result = Arguments.createArray();\n\n        for (StatusBarNotification statusBarNotification : activeNotifications) {\n            Notification notification = statusBarNotification.getNotification();\n            Bundle extras = notification.extras;\n\n            WritableMap notificationPrep = Arguments.createMap();\n            notificationPrep.putString(NotificationConstants.IDENTIFIER, \"\" + statusBarNotification.getId());\n            notificationPrep.putString(NotificationConstants.TITLE, extras.getString(Notification.EXTRA_TITLE));\n            notificationPrep.putString(NotificationConstants.BODY, extras.getString(Notification.EXTRA_TEXT));\n            notificationPrep.putString(NotificationConstants.TAG, statusBarNotification.getTag());\n            notificationPrep.putString(NotificationConstants.GROUP, notification.getGroup());\n            result.pushMap(notificationPrep);\n        }\n        return result;\n\n    }\n\n    public WritableArray getScheduledNotifications() {\n\n        WritableArray result = Arguments.createArray();\n\n        Map<String, ?> scheduledNotifications = sharedPreferences.getAll();\n\n        for (Map.Entry<String, ?> entry : scheduledNotifications.entrySet()) {\n            try {\n                NotificationAttributes notification = fromJson(entry.getValue().toString());\n                WritableMap notificationMap = Arguments.createMap();\n\n                notificationMap.putString(NotificationConstants.ID, notification.getId());\n                notificationMap.putString(NotificationConstants.TITLE, notification.getTitle());\n                notificationMap.putString(NotificationConstants.MESSAGE, notification.getMessage());\n                notificationMap.putString(NotificationConstants.TICKER, notification.getTicker());\n                notificationMap.putString(NotificationConstants.NUMBER, notification.getNumber());\n                notificationMap.putDouble(NotificationConstants.DATE, notification.getFireDate());\n                notificationMap.putString(NotificationConstants.CHANNEL_ID, notification.getChannelId());\n                notificationMap.putString(NotificationConstants.CHANNEL_NAME, notification.getChannelName());\n                notificationMap.putString(NotificationConstants.TAG, notification.getTag());\n                notificationMap.putString(NotificationConstants.REPEAT_INTERVAL, notification.getRepeatType());\n                notificationMap.putString(NotificationConstants.SOUND_NAME, notification.getSound());\n\n                result.pushMap(notificationMap);\n            } catch (JSONException e) {\n                Log.e(TAG, e.getLocalizedMessage());\n            }\n        }\n\n        return result;\n    }\n\n    public void cancelNotifications() {\n\n        notificationManager().cancelAll();\n    }\n\n    public void cancelNotification(int id) {\n\n        notificationManager().cancel(id);\n    }\n\n    public void cancelNotification(String tag, int id) {\n\n        notificationManager().cancel(tag, id);\n    }\n\n    public void cancelNotificationsWithId(ReadableArray ids) {\n\n        for (int idx = 0; idx < ids.size(); idx++) {\n            String id = ids.getString(idx);\n            if (id != null) cancelNotification(Integer.parseInt(id));\n        }\n    }\n\n    public void cancelNotificationsWithIdTag(ReadableArray idTags) {\n\n        for (int idx = 0; idx < idTags.size(); idx++) {\n            ReadableMap notification = idTags.getMap(idx);\n            String id = notification.getString(NotificationConstants.ID);\n            String tag = notification.getString(NotificationConstants.TAG);\n            if (id != null) cancelNotification(tag, Integer.parseInt(id));\n        }\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.M)\n    public void cancelNotificationsWithTag(String tag) {\n\n        StatusBarNotification[] activeNotifications = notificationManager().getActiveNotifications();\n\n        for (StatusBarNotification statusBarNotification : activeNotifications) {\n            if (tag.equals(statusBarNotification.getTag())) {\n                cancelNotification(tag, statusBarNotification.getId());\n            }\n        }\n    }\n\n    public void cancelScheduledNotifications() {\n\n        for (String id : sharedPreferences.getAll().keySet()) {\n            cancelScheduledNotification(id);\n        }\n    }\n\n\n    private void cancelScheduledNotification(String id) {\n\n        if (sharedPreferences.contains(id)) {\n            SharedPreferences.Editor editor = sharedPreferences.edit();\n            editor.remove(id);\n            editor.apply();\n        }\n\n        NotificationManager notificationManager = notificationManager();\n\n        Bundle bundle = new Bundle();\n        bundle.putString(NotificationConstants.ID, id);\n        PendingIntent pendingIntent = buildScheduleNotificationIntent(bundle);\n\n        if (pendingIntent != null) {\n            getAlarmManager().cancel(pendingIntent);\n        }\n\n        try {\n            notificationManager.cancel(Integer.parseInt(id));\n        } catch (Exception e) {\n            Log.e(TAG, e.getLocalizedMessage());\n        }\n    }\n\n}"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/local/HmsLocalNotificationPicturesLoader.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.local;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\n\nimport com.facebook.common.executors.CallerThreadExecutor;\nimport com.facebook.common.references.CloseableReference;\nimport com.facebook.datasource.DataSource;\nimport com.facebook.drawee.backends.pipeline.Fresco;\nimport com.facebook.imagepipeline.common.Priority;\nimport com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;\nimport com.facebook.imagepipeline.image.CloseableImage;\nimport com.facebook.imagepipeline.request.ImageRequest;\nimport com.facebook.imagepipeline.request.ImageRequestBuilder;\nimport com.facebook.react.bridge.Promise;\nimport com.huawei.hms.rn.push.constants.LocalNotification;\n\nimport java.util.concurrent.atomic.AtomicInteger;\n\npublic class HmsLocalNotificationPicturesLoader {\n\n    public interface Callback {\n        /**\n         * call Method\n         *\n         * @param largeIconImage  : Bitmap\n         * @param bigPictureImage : Bitmap\n         * @param promise         : Promise\n         */\n        void call(Bitmap largeIconImage, Bitmap bigPictureImage, Promise promise);\n    }\n\n    private volatile AtomicInteger count = new AtomicInteger(0);\n\n    private Bitmap largeIconImage;\n    private Bitmap bigPictureImage;\n\n    private Callback callback;\n    private Promise reactPromise;\n\n    public HmsLocalNotificationPicturesLoader(Callback callback) {\n\n        this.callback = callback;\n    }\n\n    public void setReactPromise(final Promise promise) {\n\n        this.reactPromise = promise;\n        this.checkAllFinished();\n    }\n\n    public void setBigPicture(Bitmap bitmap) {\n        this.bigPictureImage = bitmap;\n        this.checkAllFinished();\n    }\n\n    public void setBigPictureUrl(Context context, String url) {\n        if (null == url) {\n            this.setBigPicture(null);\n            return;\n        }\n\n        final HmsLocalNotificationPicturesLoader hmsLocalNotificationPicturesLoader = this;\n\n        try {\n            Uri uri = Uri.parse(url);\n            this.download(context, uri, new BitmapDataSubscriber(hmsLocalNotificationPicturesLoader, LocalNotification.Bitmap.BIG_PICTURE));\n\n        } catch (Exception e) {\n            this.setBigPicture(null);\n        }\n    }\n\n    public void setLargeIcon(Bitmap bitmap) {\n        this.largeIconImage = bitmap;\n        this.checkAllFinished();\n    }\n\n    public void setLargeIconUrl(Context context, String url) {\n        if (null == url) {\n            this.setLargeIcon(null);\n            return;\n        }\n\n        final HmsLocalNotificationPicturesLoader hmsLocalNotificationPicturesLoader = this;\n\n        try {\n            Uri uri = Uri.parse(url);\n            this.download(context, uri, new BitmapDataSubscriber(hmsLocalNotificationPicturesLoader, LocalNotification.Bitmap.LARGE_ICON));\n\n        } catch (Exception e) {\n            this.setLargeIcon(null);\n        }\n    }\n\n    private void download(Context context, Uri uri, BaseBitmapDataSubscriber subscriber) {\n        ImageRequest imageRequest = ImageRequestBuilder\n            .newBuilderWithSource(uri)\n            .setRequestPriority(Priority.HIGH)\n            .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.FULL_FETCH)\n            .build();\n\n        if (!Fresco.hasBeenInitialized()) {\n            Fresco.initialize(context);\n        }\n\n        DataSource<CloseableReference<CloseableImage>> dataSource = Fresco.getImagePipeline().fetchDecodedImage(imageRequest, context);\n\n        dataSource.subscribe(subscriber, CallerThreadExecutor.getInstance());\n    }\n\n    private void checkAllFinished() {\n\n        if (this.count.incrementAndGet() >= 3 && this.callback != null)\n            this.callback.call(this.largeIconImage, this.bigPictureImage, this.reactPromise);\n\n    }\n}"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Push\"; \n    private static final String PLATFORM = \"ReactNative\"; \n    private static final String VERSION = \"6.12.0.302\"; \n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/opendevice/HmsPushOpenDevice.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.opendevice;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.opendevice.OpenDevice;\n\nimport com.huawei.hms.rn.push.logger.HMSLogger;\nimport com.huawei.hms.rn.push.utils.ActivityUtils;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\nimport com.huawei.hms.support.api.opendevice.OdidResult;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HmsPushOpenDevice extends ReactContextBaseJavaModule {\n    private final String TAG = HmsPushOpenDevice.class.getSimpleName();\n\n    private static volatile ReactApplicationContext context;\n\n    public HmsPushOpenDevice(ReactApplicationContext reactContext) {\n\n        super(reactContext);\n        setContext(reactContext);\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n\n        return new HashMap<>();\n    }\n\n    @Override\n    public void initialize() {\n\n        super.initialize();\n    }\n\n    @Override\n    public String getName() {\n\n        return TAG;\n    }\n\n    public static void setContext(ReactApplicationContext context) {\n        HmsPushOpenDevice.context = context;\n    }\n\n    public static ReactApplicationContext getContext() {\n        return HmsPushOpenDevice.context;\n    }\n\n    @ReactMethod\n    public void getOdid(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getOdid\");\n        Task<OdidResult> idResult = OpenDevice.getOpenDeviceClient(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).getOdid();\n        idResult\n            .addOnSuccessListener(result -> {\n                HMSLogger.getInstance(getContext()).sendSingleEvent(\"getOdid\");\n                ResultUtils.handleResult(true, result.getId(), promise);\n            })\n            .addOnFailureListener(e -> {\n                HMSLogger.getInstance(getContext()).sendSingleEvent(\"getOdid\");\n                ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n            });\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/receiver/HmsLocalNotificationActionsReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.receiver;\n\nimport android.app.Application;\nimport android.app.NotificationManager;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.util.Log;\n\nimport com.huawei.hms.rn.push.constants.NotificationConstants;\nimport com.huawei.hms.rn.push.local.HmsLocalNotificationController;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\n\npublic class HmsLocalNotificationActionsReceiver extends BroadcastReceiver {\n\n    private final String TAG = HmsLocalNotificationActionsReceiver.class.getSimpleName();\n\n    @Override\n    public void onReceive(final Context context, Intent intent) {\n\n        String intentActionPrefix = context.getPackageName() + \".ACTION_\";\n\n        if (intent.getAction() == null || !intent.getAction().startsWith(intentActionPrefix))\n            return;\n\n\n        Bundle bundle = null;\n        try {\n            bundle = intent.getBundleExtra(NotificationConstants.NOTIFICATION);\n        } catch (Exception e) {\n            Log.e(TAG, \"Intent exception\", e);\n        }\n        if (bundle == null) return;\n\n        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);\n        if (notificationManager == null) return;\n\n        int id = Integer.parseInt(BundleUtils.get(bundle, NotificationConstants.ID));\n\n\n        if (BundleUtils.getB(bundle, NotificationConstants.AUTO_CANCEL, true)) {\n            if (BundleUtils.contains(bundle, NotificationConstants.TAG)) {\n                String tag = BundleUtils.get(bundle, NotificationConstants.TAG);\n                notificationManager.cancel(tag, id);\n            } else {\n                notificationManager.cancel(id);\n            }\n        }\n\n        if (BundleUtils.getB(bundle, NotificationConstants.INVOKE_APP, true)) {\n            HmsLocalNotificationController hmsLocalNotificationController = new HmsLocalNotificationController((Application) context.getApplicationContext());\n\n            hmsLocalNotificationController.invokeApp(bundle);\n        } else {\n\n            Handler handler = new Handler(Looper.getMainLooper());\n            handler.post(new NotificationActionHandler(context, bundle));\n        }\n    }\n\n}"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/receiver/HmsLocalNotificationBootEventReceiver.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.receiver;\n\nimport android.app.Application;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.SharedPreferences;\nimport android.util.Log;\n\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.ResultCode;\nimport com.huawei.hms.rn.push.local.HmsLocalNotificationController;\nimport com.huawei.hms.rn.push.config.NotificationAttributes;\n\nimport java.util.Set;\n\npublic class HmsLocalNotificationBootEventReceiver extends BroadcastReceiver {\n    private final String TAG = HmsLocalNotificationBootEventReceiver.class.getSimpleName();\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n\n        if (intent.getAction() == null) return;\n        if (!intent.getAction().equals(Core.ScheduledPublisher.BOOT_EVENT))\n            return;\n\n        SharedPreferences sharedPreferences = context.getSharedPreferences(Core.PREFERENCE_NAME, Context.MODE_PRIVATE);\n        Set<String> ids = sharedPreferences.getAll().keySet();\n\n        Application applicationContext = (Application) context.getApplicationContext();\n        HmsLocalNotificationController hmsLocalNotificationController = new HmsLocalNotificationController(applicationContext);\n\n        for (String id : ids) {\n            try {\n                String notificationAttributesJson = sharedPreferences.getString(id, null);\n                if (notificationAttributesJson != null) {\n                    NotificationAttributes notificationAttributes = NotificationAttributes.fromJson(notificationAttributesJson);\n\n                    if (notificationAttributes.getFireDate() < System.currentTimeMillis()) {\n                        hmsLocalNotificationController.localNotificationNow(notificationAttributes.toBundle(), null);\n                    } else {\n                        hmsLocalNotificationController.localNotificationScheduleSetAlarm(notificationAttributes.toBundle());\n                    }\n                }\n            } catch (Exception e) {\n                Log.e(TAG, ResultCode.ERROR, e);\n            }\n\n        }\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/receiver/HmsLocalNotificationScheduledPublisher.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.receiver;\n\nimport android.app.Application;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\n\nimport com.huawei.hms.rn.push.local.HmsLocalNotificationController;\nimport com.huawei.hms.rn.push.utils.NotificationConfigUtils;\n\npublic class HmsLocalNotificationScheduledPublisher extends BroadcastReceiver {\n\n    @Override\n    public void onReceive(final Context context, Intent intent) {\n\n        final Bundle bundle = intent.getExtras();\n        handleLocalNotification(context, bundle);\n\n    }\n\n    private void handleLocalNotification(Context context, Bundle bundle) {\n\n        NotificationConfigUtils.configId(bundle);\n\n        Application applicationContext = (Application) context.getApplicationContext();\n        HmsLocalNotificationController hmsLocalNotificationController = new HmsLocalNotificationController(applicationContext);\n\n        hmsLocalNotificationController.localNotificationNow(bundle, null);\n    }\n}"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/receiver/NotificationActionHandler.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.receiver;\n\nimport android.content.Context;\nimport android.os.Bundle;\n\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.bridge.ReactContext;\nimport com.huawei.hms.rn.push.local.HmsLocalNotificationActionPublisher;\n\npublic class NotificationActionHandler implements Runnable {\n    Context context;\n    Bundle bundle;\n\n    public NotificationActionHandler(Context context, Bundle bundle) {\n        this.context = context;\n        this.bundle = bundle;\n    }\n\n    @Override\n    public void run() {\n        final ReactInstanceManager reactInstanceManager = ((ReactApplication) context.getApplicationContext()).getReactNativeHost().getReactInstanceManager();\n        ReactContext reactContext = reactInstanceManager.getCurrentReactContext();\n\n        if (reactContext != null) {\n            HmsLocalNotificationActionPublisher hmsLocalNotificationActionPublisher = new HmsLocalNotificationActionPublisher(reactContext);\n\n            hmsLocalNotificationActionPublisher.notifyNotificationAction(bundle);\n        } else {\n            reactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {\n                public void onReactContextInitialized(ReactContext context) {\n\n                    HmsLocalNotificationActionPublisher hmsLocalNotificationActionPublisher = new HmsLocalNotificationActionPublisher(context);\n\n                    hmsLocalNotificationActionPublisher.notifyNotificationAction(bundle);\n\n                    reactInstanceManager.removeReactInstanceEventListener(this);\n                }\n            });\n\n            if (!reactInstanceManager.hasStartedCreatingInitialContext()) {\n\n                reactInstanceManager.createReactContextInBackground();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/remote/HmsMessagePublisher.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.remote;\n\nimport android.os.Bundle;\nimport android.util.Log;\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.push.RemoteMessage;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\nimport com.huawei.hms.rn.push.utils.RemoteMessageUtils;\n\n\npublic class HmsMessagePublisher extends ReactContextBaseJavaModule {\n    private static String TAG = HmsMessagePublisher.class.getSimpleName();\n    private static volatile ReactApplicationContext context;\n\n    private static String token;\n    private static String multiSenderToken;\n    private static String bundleString;\n\n    public HmsMessagePublisher(ReactApplicationContext reactContext) {\n        super(reactContext);\n        setContext(reactContext);\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    @Override\n    public void initialize() {\n        super.initialize();\n\n        try {\n            if (getToken() != null) {\n                WritableMap params = Arguments.createMap();\n                params.putString(Core.Event.Result.TOKEN, getToken());\n                getContext()\n                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(Core.Event.ON_TOKEN_RECEIVED_EVENT, params);\n            }\n\n            if (getBundleString() != null && getMultiSenderToken() != null) {\n                WritableMap multiSenderParams = Arguments.createMap();\n                multiSenderParams.putString(Core.Event.Result.TOKEN, getMultiSenderToken());\n                multiSenderParams.putString(Core.Event.Result.DATA_JSON, getBundleString());\n                getContext()\n                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(Core.Event.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT, multiSenderParams);\n            }\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static ReactApplicationContext getContext() {\n        return context;\n    }\n\n    public static void setContext(ReactApplicationContext context) {\n        HmsMessagePublisher.context = context;\n    }\n\n    public static void sendOnNewTokenEvent(String token) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.TOKEN, token);\n\n            if (getContext() == null) {\n                setToken(token);\n                return;\n            }\n\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_TOKEN_RECEIVED_EVENT, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static void sendOnNewMultiSenderTokenEvent(String token, Bundle bundle) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.TOKEN, token);\n            params.putString(Core.Event.Result.DATA_JSON, BundleUtils.convertJSON(bundle));\n\n            if (getContext() == null) {\n                setBundleString(BundleUtils.convertJSON(bundle));\n                setMultiSenderToken(token);\n                return;\n            }\n\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static void sendMessageReceivedEvent(RemoteMessage remoteMessage) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putMap(Core.Event.Result.MSG, RemoteMessageUtils.toWritableMap(remoteMessage));\n\n            ReactApplicationContext reactApplicationContext = getContext();\n            if (reactApplicationContext != null) {\n                reactApplicationContext\n                    .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                    .emit(Core.Event.REMOTE_DATA_MESSAGE_RECEIVED, params);\n            }\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n\n        }\n    }\n\n    public static void sendTokenErrorEvent(Exception e) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.EXCEPTION, e.getMessage());\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_TOKEN_ERROR_EVENT, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n\n        }\n    }\n\n    public static void sendMultiSenderTokenErrorEvent(Exception e, Bundle bundle) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.EXCEPTION, e.getLocalizedMessage());\n            params.putString(Core.Event.Result.DATA_JSON, BundleUtils.convertJSON(bundle));\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_MULTI_SENDER_TOKEN_ERROR_EVENT, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static void sendOnMessageSentEvent(String msgId) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.MSG_ID, msgId);\n\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_PUSH_MESSAGE_SENT, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static void sendOnMessageSentErrorEvent(String msgId, int errorCode, String errorInfo) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.RESULT, errorCode + \"\");\n            params.putString(Core.Event.Result.MSG_ID, msgId);\n            params.putString(Core.Event.Result.RESULT_INFO, errorInfo);\n\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_PUSH_MESSAGE_SENT_ERROR, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static void sendOnMessageDeliveredEvent(String msgId, int errorCode, String errorInfo) {\n        try {\n            WritableMap params = Arguments.createMap();\n            params.putString(Core.Event.Result.RESULT, errorCode + \"\");\n            params.putString(Core.Event.Result.MSG_ID, msgId);\n            params.putString(Core.Event.Result.RESULT_INFO, errorInfo);\n\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.ON_PUSH_MESSAGE_SENT_DELIVERED, params);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    public static String getToken() {\n        return token;\n    }\n\n    public static void setToken(String token) {\n        HmsMessagePublisher.token = token;\n    }\n\n    public static String getMultiSenderToken() {\n        return multiSenderToken;\n    }\n\n    public static void setMultiSenderToken(String multiSenderToken) {\n        HmsMessagePublisher.multiSenderToken = multiSenderToken;\n    }\n\n    public static String getBundleString() {\n        return bundleString;\n    }\n\n    public static void setBundleString(String bundleString) {\n        HmsMessagePublisher.bundleString = bundleString;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/remote/HmsPushInstanceId.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.remote;\n\nimport android.app.PendingIntent;\nimport android.content.Intent;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\n\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.aaid.HmsInstanceId;\nimport com.huawei.hms.aaid.entity.AAIDResult;\nimport com.huawei.hms.common.ApiException;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.common.ResolvableApiException;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.utils.ActivityUtils;\nimport com.huawei.hms.rn.push.logger.HMSLogger;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\n\npublic class HmsPushInstanceId extends ReactContextBaseJavaModule {\n    private final String TAG = HmsPushInstanceId.class.getSimpleName();\n\n    private static volatile ReactApplicationContext context;\n\n    public HmsPushInstanceId(ReactApplicationContext reactContext) {\n        super(reactContext);\n        setContext(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return new HashMap<>();\n    }\n\n    @Override\n    public void initialize() {\n        super.initialize();\n    }\n\n    public static ReactApplicationContext getContext() {\n        return context;\n    }\n\n    public static void setContext(ReactApplicationContext context) {\n        HmsPushInstanceId.context = context;\n    }\n\n    @ReactMethod\n    public void getToken(String scope, final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getToken\");\n        try {\n            String appId = AGConnectServicesConfig.fromContext(getContext()).getString(Core.CLIENT_APP_ID);\n            scope = scope == null ? Core.DEFAULT_TOKEN_SCOPE : scope;\n            if (scope.trim().isEmpty()) {\n                scope = Core.DEFAULT_TOKEN_SCOPE;\n            }\n            String token = HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).getToken(appId, scope);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getToken\");\n            Log.d(TAG, \"Token Received\");\n            ResultUtils.handleResult(true, token, promise);\n        } catch (ApiException e) {\n            if (e instanceof ResolvableApiException) {\n                PendingIntent resolution = ((ResolvableApiException) e).getResolution();\n                if (resolution != null) {\n                    try {\n                        resolution.send();\n                    } catch (PendingIntent.CanceledException ex) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"getToken,\" + e.getMessage());\n                    }\n                } else {\n                    Intent resolutionIntent = ((ResolvableApiException) e).getResolutionIntent();\n                    if (resolutionIntent != null) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"has resolution by intent\");\n                        resolutionIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n                        getContext().startActivity(resolutionIntent);\n                    }\n                }\n            }\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getToken\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void getTokenWithSubjectId(String subjectId, final Promise promise) {\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getTokenWithSubjectId\");\n        try {\n            String token = HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext()))\n                .getToken(subjectId);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getTokenWithSubjectId\");\n            Log.d(TAG, \"Token Received\");\n            ResultUtils.handleResult(true, token, promise);\n        } catch (ApiException e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getTokenWithSubjectId\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n\n    }\n\n    @ReactMethod\n    public void getId(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getId\");\n        try {\n            String instanceId = HmsInstanceId.getInstance(\n                ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).getId();\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getId\");\n            ResultUtils.handleResult(true, instanceId, promise);\n        } catch (Exception e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getId\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void getAAID(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getAAID\");\n        Task<AAIDResult> idResult = HmsInstanceId.getInstance(\n            ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).getAAID();\n        idResult.addOnSuccessListener(aaidResult -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getAAID\");\n            ResultUtils.handleResult(true, aaidResult.getId(), promise);\n        }).addOnFailureListener(e -> {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getAAID\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        });\n\n    }\n\n    @ReactMethod\n    public void getCreationTime(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"getCreationTime\");\n        try {\n            String createTime =\n                HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext()))\n                    .getCreationTime() + \"\";\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getCreationTime\");\n            ResultUtils.handleResult(true, createTime, promise);\n        } catch (Exception e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"getCreationTime\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void deleteAAID(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"deleteAAID\");\n        try {\n            HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).deleteAAID();\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteAAID\");\n            ResultUtils.handleResult(true, true, promise);\n        } catch (ApiException e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteAAID\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void deleteToken(String scope, final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"deleteToken\");\n        try {\n            String appId = AGConnectServicesConfig.fromContext(getContext()).getString(Core.CLIENT_APP_ID);\n            scope = scope == null ? Core.DEFAULT_TOKEN_SCOPE : scope;\n            if (scope.trim().isEmpty()) {\n                scope = Core.DEFAULT_TOKEN_SCOPE;\n            }\n            HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext()))\n                .deleteToken(appId, scope);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteToken\");\n            ResultUtils.handleResult(true, true, promise);\n        } catch (ApiException e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteToken\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void deleteTokenWithSubjectId(String subjectId, final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"deleteTokenWithSubjectId\");\n        try {\n            HmsInstanceId.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext()))\n                .deleteToken(subjectId);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteTokenWithSubjectId\");\n            ResultUtils.handleResult(true, true, promise);\n        } catch (ApiException e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"deleteTokenWithSubjectId\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/remote/HmsPushMessageService.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.remote;\n\nimport android.app.PendingIntent;\nimport android.content.ComponentName;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.facebook.react.HeadlessJsTaskService;\n\nimport com.huawei.hms.common.ResolvableApiException;\nimport com.huawei.hms.push.HmsMessageService;\nimport com.huawei.hms.push.RemoteMessage;\nimport com.huawei.hms.push.SendException;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.logger.HMSLogger;\nimport com.huawei.hms.rn.push.services.MessagingHeadlessService;\nimport com.huawei.hms.rn.push.utils.ApplicationUtils;\n\npublic class HmsPushMessageService extends HmsMessageService {\n    private final String TAG = HmsPushMessageService.class.getSimpleName();\n\n    @Override\n    public void onMessageReceived(RemoteMessage remoteMessage) {\n        Log.w(TAG, \"** onMessageReceived **\");\n        Context context = getApplicationContext();\n        boolean isApplicationInForeground = ApplicationUtils.isApplicationInForeground(context);\n        if (isApplicationInForeground) {\n            HMSLogger.getInstance(context).sendPeriodicEvent(\"onMessageReceived\");\n            HmsMessagePublisher.sendMessageReceivedEvent(remoteMessage);\n        } else {\n            try {\n                HMSLogger.getInstance(context).sendPeriodicEvent(\"onMessageReceived\");\n                Intent backgroundIntent = new Intent(context, MessagingHeadlessService.class);\n                backgroundIntent.putExtra(Core.Event.Result.MSG, remoteMessage);\n                ComponentName name = context.startService(backgroundIntent);\n                if (name != null) {\n                    HeadlessJsTaskService.acquireWakeLockNow(context);\n                }\n            } catch (IllegalStateException e) {\n                Log.e(TAG, \"Change Priority to 'high'\", e);\n            }\n        }\n    }\n\n    @Override\n    public void onDeletedMessages() {\n        try {\n            Log.w(TAG, \"** onDeletedMessages **\");\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onDeletedMessages\");\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onMessageSent(String msgId) {\n        try {\n            Log.w(TAG, \"** onMessageSent **\");\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onMessageSent\");\n            HmsMessagePublisher.sendOnMessageSentEvent(msgId);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onSendError(String msgId, Exception exception) {\n        try {\n            Log.w(TAG, \"** onSendError **\");\n\n            int errorCode = ((SendException) exception).getErrorCode();\n            String errorInfo = exception.getMessage();\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onSendError\");\n            HmsMessagePublisher.sendOnMessageSentErrorEvent(msgId, errorCode, errorInfo);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onMessageDelivered(String msgId, Exception e) {\n        try {\n            Log.w(TAG, \"** onMessageDelivered **\");\n            if (e == null) {\n                HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onMessageDelivered\");\n                HmsMessagePublisher.sendOnMessageDeliveredEvent(msgId, 0, \"\");\n            } else {\n                int errorCode = ((SendException) e).getErrorCode();\n                String errorInfo = e.getMessage();\n                HmsMessagePublisher.sendOnMessageDeliveredEvent(msgId, errorCode, errorInfo);\n            }\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onTokenError(Exception e) {\n        try {\n            Log.w(TAG, \"** onTokenError **\");\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onTokenError\");\n            HmsMessagePublisher.sendTokenErrorEvent(e);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onNewToken(String token) {\n\n        try {\n            super.onNewToken(token);\n            Log.w(TAG, \"** onNewToken **\");\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onNewToken\");\n            HmsMessagePublisher.sendOnNewTokenEvent(token);\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n\n    @Override\n    public void onNewToken(String token, Bundle bundle) {\n        try {\n            super.onNewToken(token, bundle);\n            Log.w(TAG, \"** onNewToken **\");\n            HmsMessagePublisher.sendOnNewMultiSenderTokenEvent(token, bundle);\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onNewToken\");\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n\n    }\n\n    @Override\n    public void onTokenError(Exception e, Bundle bundle) {\n        try {\n            Log.w(TAG, \"** onTokenError **\");\n            if (e instanceof ResolvableApiException) {\n                PendingIntent resolution = ((ResolvableApiException) e).getResolution();\n                if (resolution != null) {\n                    try {\n                        resolution.send();\n                    } catch (PendingIntent.CanceledException ex) {\n                        HMSLogger.getInstance(getApplicationContext()).sendSingleEvent(\"onTokenError,\" + e.getMessage());\n                    }\n                } else {\n                    Intent resolutionIntent = ((ResolvableApiException) e).getResolutionIntent();\n                    if (resolutionIntent != null) {\n                        HMSLogger.getInstance(getApplicationContext()).sendSingleEvent(\"onTokenError,\" + \"has resolution by intent\");\n                        resolutionIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n                        getApplicationContext().startActivity(resolutionIntent);\n                    }\n                }\n            }\n            HmsMessagePublisher.sendMultiSenderTokenErrorEvent(e, bundle);\n            HMSLogger.getInstance(getApplicationContext()).sendPeriodicEvent(\"onTokenError\");\n        } catch (Exception ex) {\n            Log.e(TAG, ex.getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/remote/HmsPushMessaging.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.remote;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.LifecycleEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.huawei.hms.push.HmsMessaging;\nimport com.huawei.hms.push.RemoteMessage;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.NotificationConstants;\nimport com.huawei.hms.rn.push.constants.ResultCode;\nimport com.huawei.hms.rn.push.utils.ActivityUtils;\nimport com.huawei.hms.rn.push.utils.BundleUtils;\nimport com.huawei.hms.rn.push.utils.MapUtils;\nimport com.huawei.hms.rn.push.utils.RemoteMessageUtils;\nimport com.huawei.hms.rn.push.logger.HMSLogger;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\n\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class HmsPushMessaging extends ReactContextBaseJavaModule implements ActivityEventListener, LifecycleEventListener {\n    private final String TAG = HmsPushMessaging.class.getSimpleName();\n\n\n    private static volatile ReactApplicationContext context;\n    private static Map<String, Object> initialNotification = new HashMap<>();\n\n    public HmsPushMessaging(ReactApplicationContext reactContext) {\n\n        super(reactContext);\n        setContext(reactContext);\n\n        reactContext.addActivityEventListener(this);\n        reactContext.addLifecycleEventListener(this);\n    }\n\n    @Override\n    public void initialize() {\n\n        super.initialize();\n    }\n\n    @Override\n    public String getName() {\n\n        return TAG;\n    }\n\n    public static ReactApplicationContext getContext() {\n        return context;\n    }\n\n    public static void setContext(ReactApplicationContext context) {\n\n        HmsPushMessaging.context = context;\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n\n        return new HashMap<>();\n    }\n\n    public static void setInitialNotification(Map<String, Object> initialNotification) {\n        HmsPushMessaging.initialNotification = initialNotification;\n    }\n\n    public static Map<String, Object> getInitialNotification() {\n        return HmsPushMessaging.initialNotification;\n    }\n\n    @ReactMethod\n    public void isAutoInitEnabled(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"isAutoInitEnabled\");\n        try {\n            boolean autoInit = HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).isAutoInitEnabled();\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isAutoInitEnabled\");\n            ResultUtils.handleResult(true, autoInit, promise);\n        } catch (Exception ex) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isAutoInitEnabled\", ex.getMessage());\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void setAutoInitEnabled(boolean enabled, final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"setAutoInitEnabled\");\n        try {\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).setAutoInitEnabled(enabled);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"setAutoInitEnabled\");\n            ResultUtils.handleResult(true, enabled, promise);\n        } catch (Exception ex) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"setAutoInitEnabled\", ex.getMessage());\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void turnOnPush(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"turnOnPush\");\n        try {\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).turnOnPush()\n                .addOnCompleteListener(task -> {\n                    if (task.isSuccessful()) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"turnOnPush\");\n                        ResultUtils.handleResult(true, true, promise);\n\n                    } else {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"turnOnPush\", task.getException().getMessage());\n                        ResultUtils.handleResult(false, task.getException().getLocalizedMessage(), promise);\n                    }\n                });\n        } catch (Exception ex) {\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n\n        }\n    }\n\n    @ReactMethod\n    public void turnOffPush(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"turnOffPush\");\n        try {\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).turnOffPush()\n                .addOnCompleteListener(task -> {\n                    if (task.isSuccessful()) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"turnOffPush\");\n                        ResultUtils.handleResult(true, true, promise);\n\n                    } else {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"turnOffPush\", task.getException().getMessage());\n                        ResultUtils.handleResult(false, task.getException().getLocalizedMessage(), promise);\n                    }\n                });\n        } catch (Exception ex) {\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void subscribe(String topic, final Promise promise) {\n\n        if (topic == null || topic.equals(\"\")) {\n            ResultUtils.handleResult(false, \"topic is empty!\", promise, ResultCode.PARAMETER_IS_EMPTY);\n            return;\n        }\n\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"subscribe\");\n        try {\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).subscribe(topic)\n                .addOnCompleteListener(task -> {\n                    if (task.isSuccessful()) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"subscribe\");\n                        ResultUtils.handleResult(true, true, promise);\n\n                    } else {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"subscribe\", task.getException().getMessage());\n                        ResultUtils.handleResult(false, task.getException().getLocalizedMessage(), promise);\n                    }\n                });\n        } catch (Exception ex) {\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void unsubscribe(String topic, final Promise promise) {\n\n        if (topic == null || topic.equals(\"\")) {\n            ResultUtils.handleResult(false, \"topic is empty!\", promise, ResultCode.PARAMETER_IS_EMPTY);\n            return;\n        }\n        HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"unsubscribe\");\n        try {\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext())).unsubscribe(topic)\n                .addOnCompleteListener(task -> {\n                    if (task.isSuccessful()) {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"unsubscribe\");\n                        ResultUtils.handleResult(true, true, promise);\n\n                    } else {\n                        HMSLogger.getInstance(getContext()).sendSingleEvent(\"unsubscribe\", task.getException().getMessage());\n                        ResultUtils.handleResult(false, task.getException().getLocalizedMessage(), promise);\n                    }\n                });\n        } catch (Exception ex) {\n            ResultUtils.handleResult(false, ex.getLocalizedMessage(), promise);\n        }\n    }\n\n    @ReactMethod\n    public void sendRemoteMessage(ReadableMap arguments, final Promise promise) {\n\n        try {\n            RemoteMessage remoteMessage = RemoteMessageUtils.toRemoteMessage(arguments);\n            HMSLogger.getInstance(getContext()).startMethodExecutionTimer(\"sendRemoteMessage\");\n            HmsMessaging.getInstance(ActivityUtils.getRealActivity(getCurrentActivity(), getContext()))\n                .send(remoteMessage);\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"sendRemoteMessage\");\n\n            ResultUtils.handleResult(true, true, promise);\n        } catch (IllegalArgumentException e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"sendRemoteMessage\");\n            ResultUtils.handleResult(false, false, promise);\n        }\n\n    }\n\n    @ReactMethod\n    public void enableLogger(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).enableLogger();\n        ResultUtils.handleResult(true, true, promise);\n    }\n\n    @ReactMethod\n    public void disableLogger(final Promise promise) {\n\n        HMSLogger.getInstance(getContext()).disableLogger();\n        ResultUtils.handleResult(true, true, promise);\n    }\n\n    @ReactMethod\n    public void getInitialNotification(final Promise promise) {\n\n        ResultUtils.handleResult(true, MapUtils.copyToWritableMap(getInitialNotification()), promise);\n\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n        Activity currentActivity = context.getCurrentActivity();\n\n        if (currentActivity != null) {\n            currentActivity.setIntent(intent);\n        }\n    }\n\n    public boolean checkFlag(Intent intent) {\n        int flagNumber = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_RECEIVER_REPLACE_PENDING | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;\n        int flagNumberAndBroughtToFront = flagNumber | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;\n        return intent.getFlags() == flagNumber || intent.getFlags() == flagNumberAndBroughtToFront || intent.getBundleExtra(NotificationConstants.NOTIFICATION) != null;\n    }\n\n    public void sendOpenedNotificationData(Intent intent) {\n        try {\n            Map<String, Object> map = new HashMap<>();\n            Bundle extras = intent.getExtras();\n            if (extras != null) {\n                RemoteMessage remoteMessage = new RemoteMessage(extras);\n                map.put(\"remoteMessage\", RemoteMessageUtils.toMap(remoteMessage));\n                JSONObject extrasData = BundleUtils.convertJSONObject(extras);\n                map.put(\"extras\", extrasData);\n            }\n            if (intent.getDataString() != null)\n                map.put(\"uriPage\", intent.getDataString());\n            HmsPushMessaging.setInitialNotification(map);\n            getContext()\n                .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                .emit(Core.Event.NOTIFICATION_OPENED_EVENT, MapUtils.copyToWritableMap(map));\n\n            intent.setFlags(0);\n            intent.replaceExtras(new Bundle());\n            intent.setData(null);\n        } catch (Exception e) {\n            Log.w(TAG, \"sendOpenedNotificationData: \" + e.getLocalizedMessage());\n        }\n    }\n\n    @Override\n    public void onHostResume() {\n        Activity activity = getContext().getCurrentActivity();\n\n        if (activity == null) return;\n        Intent intent = activity.getIntent();\n\n        if (checkFlag(intent))\n            sendOpenedNotificationData(intent);\n    }\n\n    @Override\n    public void onHostPause() {\n\n    }\n\n    @Override\n    public void onHostDestroy() {\n\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/remote/HmsPushProfile.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.remote;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.huawei.hms.push.HmsProfile;\nimport com.huawei.hms.rn.push.logger.HMSLogger;\nimport com.huawei.hms.rn.push.utils.ResultUtils;\n\n\npublic class HmsPushProfile extends ReactContextBaseJavaModule {\n    private final String TAG = HmsPushProfile.class.getSimpleName();\n\n    private final HmsProfile hmsProfile;\n    private final HMSLogger hmsLogger;\n\n    private static volatile ReactApplicationContext context;\n\n    public HmsPushProfile(ReactApplicationContext reactContext) {\n        super(reactContext);\n        setContext(reactContext);\n        hmsProfile = HmsProfile.getInstance(reactContext);\n        hmsLogger = HMSLogger.getInstance(getContext());\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return TAG;\n    }\n\n    public static ReactApplicationContext getContext() {\n        return context;\n    }\n\n    public static void setContext(ReactApplicationContext reactContext) {\n        HmsPushProfile.context = reactContext;\n    }\n\n    @ReactMethod\n    public void isSupportProfile(final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"isSupportProfile\");\n        try {\n            boolean result = hmsProfile.isSupportProfile();\n            hmsLogger.sendSingleEvent(\"isSupportProfile\");\n            ResultUtils.handleResult(true, result, promise);\n        } catch (Exception e) {\n            HMSLogger.getInstance(getContext()).sendSingleEvent(\"isSupportProfile\", e.getMessage());\n            ResultUtils.handleResult(false, e.getLocalizedMessage(), promise);\n        }\n    }\n\n    @NonNull\n    @ReactMethod\n    public void addProfile(int type, String profileId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"addProfile\");\n        hmsProfile.addProfile(type, profileId)\n            .addOnSuccessListener(aVoid -> {\n                ResultUtils.handleResult(true, true, promise);\n                hmsLogger.sendSingleEvent(\"addProfile\");\n            })\n            .addOnFailureListener(error -> {\n                ResultUtils.handleResult(false, error.getLocalizedMessage(), promise);\n                hmsLogger.sendSingleEvent(\"addProfile\", error.getMessage());\n            });\n    }\n\n    @ReactMethod\n    public void addProfileWithSubjectId(String subjectId, int type, String profileId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"addProfileWithSubjectId\");\n        hmsProfile.addProfile(subjectId, type, profileId)\n            .addOnSuccessListener(aVoid -> {\n                ResultUtils.handleResult(true, true, promise);\n                hmsLogger.sendSingleEvent(\"addProfileWithSubjectId\");\n            })\n            .addOnFailureListener(error -> {\n                ResultUtils.handleResult(false, error.getLocalizedMessage(), promise);\n                hmsLogger.sendSingleEvent(\"addProfileWithSubjectId\", error.getMessage());\n            });\n    }\n\n    @ReactMethod\n    public void deleteProfile(String profileId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"deleteProfile\");\n        hmsProfile.deleteProfile(profileId)\n            .addOnSuccessListener(aVoid -> {\n                ResultUtils.handleResult(true, true, promise);\n                hmsLogger.sendSingleEvent(\"deleteProfile\");\n            })\n            .addOnFailureListener(error -> {\n                ResultUtils.handleResult(false, error.getLocalizedMessage(), promise);\n                hmsLogger.sendSingleEvent(\"deleteProfile\", error.getMessage());\n            });\n    }\n\n    @ReactMethod\n    public void deleteProfileWithSubjectId(String subjectId, String profileId, final Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"deleteProfileWithSubjectId\");\n        hmsProfile.deleteProfile(subjectId, profileId)\n            .addOnSuccessListener(aVoid -> {\n                ResultUtils.handleResult(true, true, promise);\n                hmsLogger.sendSingleEvent(\"deleteProfileWithSubjectId\");\n            })\n            .addOnFailureListener(error -> {\n                ResultUtils.handleResult(false, error.getLocalizedMessage(), promise);\n                hmsLogger.sendSingleEvent(\"deleteProfileWithSubjectId\", error.getMessage());\n            });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/services/MessagingHeadlessService.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.services;\n\nimport android.content.Intent;\nimport android.os.Bundle;\n\nimport com.facebook.react.HeadlessJsTaskService;\nimport com.facebook.react.jstasks.HeadlessJsTaskConfig;\nimport com.huawei.hms.push.RemoteMessage;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.utils.RemoteMessageUtils;\n\nimport javax.annotation.Nullable;\n\npublic class MessagingHeadlessService extends HeadlessJsTaskService {\n\n    private static final String TASK = \"HMSPushHeadlessTask\";\n\n    @Override\n    protected @Nullable\n    HeadlessJsTaskConfig getTaskConfig(Intent intent) {\n\n        Bundle extras = intent.getExtras();\n        if (extras == null) return null;\n        RemoteMessage remoteMessage = intent.getParcelableExtra(Core.Event.Result.MSG);\n        if (remoteMessage == null) return null;\n\n        return new HeadlessJsTaskConfig(\n            TASK,\n            RemoteMessageUtils.toWritableMap(remoteMessage),\n            60000,\n            true\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/ActivityUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport android.app.Activity;\nimport android.content.Context;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\n\npublic class ActivityUtils {\n\n    private ActivityUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static Context getRealActivity(Activity currentActivity, ReactApplicationContext context) {\n\n        if (currentActivity != null)\n            return currentActivity;\n\n        return context;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/ApplicationUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport android.app.ActivityManager;\nimport android.content.Context;\n\nimport java.util.List;\n\npublic class ApplicationUtils {\n\n    private ApplicationUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static boolean isApplicationInForeground(Context context) {\n\n        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);\n        List<ActivityManager.RunningAppProcessInfo> processInfos = activityManager.getRunningAppProcesses();\n\n        if (processInfos == null) return false;\n\n        for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {\n            if (processInfo.pkgList.length < 1) return false;\n            if (processInfo.processName.equals(context.getPackageName())\n                && processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/ArrayUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Map;\n\npublic class ArrayUtils {\n\n    private ArrayUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static JSONArray toJSONArray(ReadableArray readableArray) throws JSONException {\n        JSONArray jsonArray = new JSONArray();\n\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Boolean:\n                    jsonArray.put(i, readableArray.getBoolean(i));\n                    break;\n                case Number:\n                    jsonArray.put(i, readableArray.getDouble(i));\n                    break;\n                case String:\n                    jsonArray.put(i, readableArray.getString(i));\n                    break;\n                case Map:\n                    jsonArray.put(i, MapUtils.toJSONObject(readableArray.getMap(i)));\n                    break;\n                case Array:\n                    jsonArray.put(i, ArrayUtils.toJSONArray(readableArray.getArray(i)));\n                    break;\n                case Null:\n                default:\n                    jsonArray.put(i, null);\n                    break;\n            }\n        }\n\n        return jsonArray;\n    }\n\n    public static Object[] toArray(JSONArray jsonArray) throws JSONException {\n        Object[] array = new Object[jsonArray.length()];\n\n        for (int i = 0; i < jsonArray.length(); i++) {\n            Object value = jsonArray.get(i);\n\n            if (value instanceof JSONObject) {\n                value = MapUtils.toMap((JSONObject) value);\n            }\n            if (value instanceof JSONArray) {\n                value = ArrayUtils.toArray((JSONArray) value);\n            }\n\n            array[i] = value;\n        }\n\n        return array;\n    }\n\n    public static Object[] toArray(ReadableArray readableArray) {\n        Object[] array = new Object[readableArray.size()];\n\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Boolean:\n                    array[i] = readableArray.getBoolean(i);\n                    break;\n                case Number:\n                    array[i] = readableArray.getDouble(i);\n                    break;\n                case String:\n                    array[i] = readableArray.getString(i);\n                    break;\n                case Map:\n                    array[i] = MapUtils.toMap(readableArray.getMap(i));\n                    break;\n                case Array:\n                    array[i] = ArrayUtils.toArray(readableArray.getArray(i));\n                    break;\n                case Null:\n                default:\n                    array[i] = null;\n                    break;\n            }\n        }\n\n        return array;\n    }\n\n    public static WritableArray toWritableArray(Object[] array) {\n        WritableArray writableArray = Arguments.createArray();\n\n        for (Object value : array) {\n            if (value == null) {\n                writableArray.pushNull();\n            }\n            if (value instanceof Boolean) {\n                writableArray.pushBoolean((Boolean) value);\n            }\n            if (value instanceof Double) {\n                writableArray.pushDouble((Double) value);\n            }\n            if (value instanceof Integer) {\n                writableArray.pushInt((Integer) value);\n            }\n            if (value instanceof String) {\n                writableArray.pushString((String) value);\n            }\n            if (value instanceof Map) {\n                try {\n                    writableArray.pushMap(MapUtils.toWritableMap((Map<String, Object>) value));\n                } catch (NullPointerException | IllegalStateException e) {\n                    continue;\n                }\n            }\n            try {\n                if (value.getClass().isArray()) {\n                    writableArray.pushArray(ArrayUtils.toWritableArray((Object[]) value));\n                }\n            } catch (NullPointerException | IllegalStateException e) {\n                continue;\n            }\n\n        }\n\n        return writableArray;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/BundleUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport android.os.Build;\nimport android.os.Bundle;\n\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.Set;\n\npublic class BundleUtils {\n\n    private BundleUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static String get(Bundle bundle, String key) {\n\n        return bundle != null ? bundle.getString(key) : null;\n    }\n\n    public static void set(Bundle bundle, String key, String value) {\n\n        if (bundle != null)\n            bundle.putString(key, value);\n    }\n\n    public static String get(Bundle bundle, String key, String defaultValue) {\n\n        return bundle != null ? bundle.getString(key, defaultValue) : defaultValue;\n    }\n\n    public static boolean getB(Bundle bundle, String key) {\n\n        return bundle != null && bundle.getBoolean(key);\n    }\n\n    public static boolean getB(Bundle bundle, String key, boolean defaultValue) {\n\n        return bundle != null ? bundle.getBoolean(key, defaultValue) : defaultValue;\n    }\n\n    public static void setB(Bundle bundle, String key, boolean value) {\n\n        if (bundle != null)\n            bundle.putBoolean(key, value);\n    }\n\n    public static double getD(Bundle bundle, String key) {\n\n        return bundle != null ? bundle.getDouble(key) : 0.0;\n    }\n\n    public static double getD(Bundle bundle, String key, double defaultValue) {\n\n        return bundle != null ? bundle.getDouble(key, defaultValue) : defaultValue;\n    }\n\n    public static void setD(Bundle bundle, String key, double value) {\n\n        if (bundle != null)\n            bundle.putDouble(key, value);\n    }\n\n    public static long getL(Bundle bundle, String key) {\n\n        return (long) getD(bundle, key);\n    }\n\n    public static long getL(Bundle bundle, String key, double defaultValue) {\n\n        return (long) getD(bundle, key, defaultValue);\n    }\n\n    public static boolean contains(Bundle bundle, String key) {\n\n        return bundle != null && bundle.containsKey(key);\n    }\n\n    public static String convertJSON(Bundle bundle) {\n\n        JSONObject json = convertJSONObject(bundle);\n        return json.toString();\n\n    }\n\n    static public JSONObject convertJSONObject(Bundle bundle) {\n        try {\n            JSONObject json = new JSONObject();\n            if (bundle != null) {\n                Set<String> keys = bundle.keySet();\n                for (String key : keys) {\n                    Object value = bundle.get(key);\n                    if (value instanceof Bundle) {\n                        json.put(key, convertJSONObject((Bundle) value));\n                    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n                        json.put(key, JSONObject.wrap(value));\n                    } else {\n                        json.put(key, value);\n                    }\n                }\n            }\n            return json;\n        } catch (JSONException e) {\n            return null;\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/MapUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.Map;\n\npublic class MapUtils {\n\n    private MapUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static JSONObject toJSONObject(ReadableMap readableMap) throws JSONException {\n\n        JSONObject jsonObject = new JSONObject();\n\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n\n            switch (type) {\n                case Boolean:\n                    jsonObject.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    jsonObject.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    jsonObject.put(key, readableMap.getString(key));\n                    break;\n                case Map:\n                    jsonObject.put(key, MapUtils.toJSONObject(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    jsonObject.put(key, ArrayUtils.toJSONArray(readableMap.getArray(key)));\n                    break;\n                case Null:\n                default:\n                    jsonObject.put(key, null);\n                    break;\n            }\n        }\n\n        return jsonObject;\n    }\n\n    public static Map<String, Object> toMap(JSONObject jsonObject) {\n\n        Map<String, Object> map = new HashMap<>();\n        Iterator<String> iterator = jsonObject.keys();\n        try {\n            while (iterator.hasNext()) {\n                String key = iterator.next();\n                Object value = jsonObject.get(key);\n\n                if (value instanceof JSONObject) {\n                    value = MapUtils.toMap((JSONObject) value);\n                }\n                if (value instanceof JSONArray) {\n                    value = ArrayUtils.toArray((JSONArray) value);\n                }\n\n                map.put(key, value);\n            }\n\n            return map;\n        } catch (JSONException e) {\n            return map;\n        }\n\n    }\n\n    public static Map<String, Object> toMap(ReadableMap readableMap) {\n\n        Map<String, Object> map = new HashMap<>();\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n\n            switch (type) {\n                case Boolean:\n                    map.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    map.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    map.put(key, readableMap.getString(key));\n                    break;\n                case Map:\n                    map.put(key, MapUtils.toMap(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    map.put(key, ArrayUtils.toArray(readableMap.getArray(key)));\n                    break;\n                case Null:\n                default:\n                    map.put(key, null);\n                    break;\n            }\n        }\n\n        return map;\n    }\n\n    public static Map<String, String> toStringMap(ReadableMap readableMap) {\n\n        Map<String, Object> objectMap = toMap(readableMap);\n        Map<String, String> map = new HashMap<>();\n\n        for (Map.Entry<String, Object> entry : objectMap.entrySet())\n            map.put(entry.getKey(), String.valueOf(entry.getValue()));\n\n        return map;\n    }\n\n    public static WritableMap toWritableMap(Map<String, Object> map) {\n\n        WritableMap writableMap = Arguments.createMap();\n        Iterator iterator = map.entrySet().iterator();\n\n        while (iterator.hasNext()) {\n            Map.Entry pair = (Map.Entry) iterator.next();\n            Object value = pair.getValue();\n\n            if (value == null) {\n                writableMap.putNull((String) pair.getKey());\n            } else if (value instanceof Boolean) {\n                writableMap.putBoolean((String) pair.getKey(), (Boolean) value);\n            } else if (value instanceof Double) {\n                writableMap.putDouble((String) pair.getKey(), (Double) value);\n            } else if (value instanceof Integer) {\n                writableMap.putInt((String) pair.getKey(), (Integer) value);\n            } else if (value instanceof String) {\n                writableMap.putString((String) pair.getKey(), (String) value);\n            } else if (value instanceof Map) {\n                writableMap.putMap((String) pair.getKey(), MapUtils.toWritableMap((Map<String, Object>) value));\n            } else if (value instanceof JSONObject) {\n                writableMap.putMap((String) pair.getKey(), MapUtils.toWritableMap(toMap((JSONObject) value)));\n            } else {\n                value.getClass();\n                if (value.getClass().isArray()) {\n                    writableMap.putArray((String) pair.getKey(), ArrayUtils.toWritableArray((Object[]) value));\n                }\n            }\n\n            iterator.remove();\n        }\n\n        return writableMap;\n    }\n\n    public static WritableMap copyToWritableMap(Map<String, Object> map) {\n\n        WritableMap writableMap = Arguments.createMap();\n\n        for (Map.Entry<String, Object> stringObjectEntry : map.entrySet()) {\n            Map.Entry pair = (Map.Entry) stringObjectEntry;\n            Object value = pair.getValue();\n\n            if (value == null) {\n                writableMap.putNull((String) pair.getKey());\n            } else if (value instanceof Double) {\n                writableMap.putDouble((String) pair.getKey(), (Double) value);\n            } else if (value instanceof Boolean) {\n                writableMap.putBoolean((String) pair.getKey(), (Boolean) value);\n            } else if (value instanceof Integer) {\n                writableMap.putInt((String) pair.getKey(), (Integer) value);\n            } else if (value instanceof Map) {\n                writableMap.putMap((String) pair.getKey(), MapUtils.copyToWritableMap((Map<String, Object>) value));\n            } else if (value instanceof JSONObject) {\n                writableMap.putMap((String) pair.getKey(), MapUtils.toWritableMap(toMap((JSONObject) value)));\n            } else if (value instanceof String) {\n                writableMap.putString((String) pair.getKey(), (String) value);\n            } else {\n                value.getClass();\n                if (value.getClass().isArray()) {\n                    writableMap.putArray((String) pair.getKey(), ArrayUtils.toWritableArray((Object[]) value));\n                }\n            }\n        }\n        return writableMap;\n    }\n\n    public static WritableMap put(WritableMap writableMap, String key, Object value) {\n\n        if (value == null) {\n            writableMap.putNull(key);\n        } else if (value instanceof Boolean) {\n            writableMap.putBoolean(key, (Boolean) value);\n        } else if (value instanceof Double) {\n            writableMap.putDouble(key, (Double) value);\n        } else if (value instanceof Integer) {\n            writableMap.putInt(key, (Integer) value);\n        } else if (value instanceof String) {\n            writableMap.putString(key, (String) value);\n        } else if (value instanceof Map) {\n            writableMap.putMap(key, MapUtils.toWritableMap((Map<String, Object>) value));\n        } else if (value instanceof WritableMap) {\n            writableMap.putMap(key, (WritableMap) value);\n        } else if (value instanceof WritableArray) {\n            writableMap.putArray(key, (WritableArray) value);\n        } else {\n            value.getClass();\n            if (value.getClass().isArray()) {\n                writableMap.putArray(key, ArrayUtils.toWritableArray((Object[]) value));\n            }\n        }\n\n        return writableMap;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/NotificationConfigUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport android.app.NotificationManager;\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.os.Build;\nimport android.os.Bundle;\n\nimport androidx.core.app.NotificationCompat;\n\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.LocalNotification;\nimport com.huawei.hms.rn.push.constants.NotificationConstants;\n\nimport java.util.Date;\nimport java.util.Locale;\nimport java.security.SecureRandom;\n\nimport static com.huawei.hms.rn.push.constants.NotificationConstants.MESSAGE;\n\npublic class NotificationConfigUtils {\n\n    private NotificationConfigUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    private static final SecureRandom RANDOM = new SecureRandom();\n\n    public static String configTitle(Bundle bundle, Context context) {\n\n        String title = BundleUtils.get(bundle, NotificationConstants.TITLE);\n        if (title != null)\n            return title;\n\n        ApplicationInfo applicationInfo = context.getApplicationInfo();\n        return context.getPackageManager().getApplicationLabel(applicationInfo).toString();\n\n    }\n\n    public static String configMessage(Bundle bundle, Context context) {\n\n        String message = BundleUtils.get(bundle, NotificationConstants.MESSAGE);\n        if (message != null)\n            return message;\n\n        ApplicationInfo applicationInfo = context.getApplicationInfo();\n        message = context.getPackageManager().getApplicationLabel(applicationInfo).toString();\n        bundle.putString(MESSAGE, message);\n        return message;\n\n    }\n\n    public static int configSmallIcon(Bundle bundle, Context context) {\n\n        Resources res = context.getResources();\n        String packageName = context.getPackageName();\n\n        int resourceId;\n        String value = BundleUtils.get(bundle, NotificationConstants.SMALL_ICON);\n\n        resourceId = value != null ? res.getIdentifier(value, Core.Resource.MIPMAP, packageName)\n            : res.getIdentifier(Core.Resource.NOTIFICATION, Core.Resource.MIPMAP, packageName);\n\n        if (resourceId == 0) {\n            resourceId = res.getIdentifier(Core.Resource.LAUNCHER, Core.Resource.MIPMAP, packageName);\n\n            if (resourceId == 0) {\n                resourceId = android.R.drawable.ic_dialog_info;\n            }\n        }\n        return resourceId;\n    }\n\n    public static Bitmap configLargeIcon(Bundle bundle, Context context, Bitmap bitmap) {\n\n        Resources res = context.getResources();\n        String packageName = context.getPackageName();\n\n        if (bitmap == null) {\n\n            int resourceId = 0;\n\n            String value = BundleUtils.get(bundle, NotificationConstants.LARGE_ICON);\n\n            if (value != null) {\n                resourceId = res.getIdentifier(value, Core.Resource.MIPMAP, packageName);\n            }\n\n            if (resourceId != 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                bitmap = BitmapFactory.decodeResource(res, resourceId);\n            }\n        }\n        return bitmap;\n\n    }\n\n    public static long configNextFireDate(Bundle bundle) {\n\n        String repeatType = BundleUtils.get(bundle, NotificationConstants.REPEAT_TYPE);\n        long repeatTime = BundleUtils.getL(bundle, NotificationConstants.REPEAT_TIME);\n\n        if (repeatType == null)\n            return 0;\n\n        long fireDate = BundleUtils.getL(bundle, NotificationConstants.FIRE_DATE);\n        if (fireDate == 0) {\n            fireDate = new Date().getTime();\n        }\n\n        switch (repeatType.toLowerCase(Locale.ENGLISH)) {\n            case LocalNotification.Repeat.Type.HOUR:\n                return fireDate + LocalNotification.Repeat.Time.ONE_HOUR;\n            case LocalNotification.Repeat.Type.MINUTE:\n                return fireDate + LocalNotification.Repeat.Time.ONE_MINUTE;\n            case LocalNotification.Repeat.Type.DAY:\n                return fireDate + LocalNotification.Repeat.Time.ONE_DAY;\n            case LocalNotification.Repeat.Type.WEEK:\n                return fireDate + LocalNotification.Repeat.Time.ONE_WEEK;\n            case LocalNotification.Repeat.Type.CUSTOM_TIME:\n                if (repeatTime <= 0) {\n                    return 0;\n                }\n                return fireDate + repeatTime;\n            default:\n                return 0;\n        }\n\n    }\n\n    public static int configPriority(Bundle bundle) {\n\n        final String value = BundleUtils.get(bundle, NotificationConstants.PRIORITY);\n\n        if (value == null) return NotificationCompat.PRIORITY_HIGH;\n\n        switch (value.toLowerCase(Locale.ENGLISH)) {\n            case LocalNotification.Priority.MAX:\n                return NotificationCompat.PRIORITY_MAX;\n            case LocalNotification.Priority.LOW:\n                return NotificationCompat.PRIORITY_LOW;\n            case LocalNotification.Priority.MIN:\n                return NotificationCompat.PRIORITY_MIN;\n            case LocalNotification.Priority.DEFAULT:\n                return NotificationCompat.PRIORITY_DEFAULT;\n            case LocalNotification.Priority.HIGH:\n            default:\n                return NotificationCompat.PRIORITY_HIGH;\n        }\n    }\n\n    public static int configImportance(Bundle bundle) {\n\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)\n            return 4;\n\n        final String value = BundleUtils.get(bundle, NotificationConstants.IMPORTANCE);\n\n        if (value == null) return 4;\n\n        try {\n            switch (value.toLowerCase(Locale.ENGLISH)) {\n                case LocalNotification.Importance.MAX:\n                    return NotificationManager.IMPORTANCE_MAX;\n                case LocalNotification.Importance.LOW:\n                    return NotificationManager.IMPORTANCE_LOW;\n                case LocalNotification.Importance.MIN:\n                    return NotificationManager.IMPORTANCE_MIN;\n                case LocalNotification.Importance.NONE:\n                    return NotificationManager.IMPORTANCE_NONE;\n                case LocalNotification.Importance.UNSPECIFIED:\n                    return NotificationManager.IMPORTANCE_UNSPECIFIED;\n                case LocalNotification.Importance.DEFAULT:\n                    return NotificationManager.IMPORTANCE_DEFAULT;\n                case LocalNotification.Importance.HIGH:\n                default:\n                    return NotificationManager.IMPORTANCE_HIGH;\n            }\n        } catch (RuntimeException e) {\n            return 4;\n        }\n\n    }\n\n    public static int configVisibility(Bundle bundle) {\n\n        final String value = BundleUtils.get(bundle, NotificationConstants.VISIBILITY);\n        if (value == null) return NotificationCompat.VISIBILITY_PUBLIC;\n\n        switch (value.toLowerCase(Locale.ENGLISH)) {\n            case LocalNotification.Visibility.PUBLIC:\n                return NotificationCompat.VISIBILITY_PUBLIC;\n            case LocalNotification.Visibility.SECRET:\n                return NotificationCompat.VISIBILITY_SECRET;\n            case LocalNotification.Visibility.PRIVATE:\n            default:\n                return NotificationCompat.VISIBILITY_PRIVATE;\n\n        }\n    }\n\n    public static void configId(Bundle bundle) {\n\n        if (BundleUtils.get(bundle, NotificationConstants.ID) == null) {\n            bundle.putString(NotificationConstants.ID, generateNotificationId());\n        }\n    }\n\n    public static String generateNotificationId() {\n        return String.valueOf(RANDOM.nextInt());\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/RemoteMessageUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.push.RemoteMessage;\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.RemoteMessageAttributes;\n\nimport java.util.Arrays;\nimport java.util.HashMap;\n\npublic class RemoteMessageUtils {\n\n    private RemoteMessageUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static HashMap<String, Object> toMap(RemoteMessage message) {\n\n        HashMap<String, Object> map = new HashMap<>();\n\n        map.put(RemoteMessageAttributes.COLLAPSE_KEY, message.getCollapseKey());\n        map.put(RemoteMessageAttributes.DATA, message.getData());\n        map.put(RemoteMessageAttributes.DATA_OF_MAP, message.getDataOfMap() + \"\");\n        map.put(RemoteMessageAttributes.MESSAGE_ID, message.getMessageId());\n        map.put(RemoteMessageAttributes.MESSAGE_TYPE, message.getMessageType());\n        map.put(RemoteMessageAttributes.ORIGINAL_URGENCY, message.getOriginalUrgency() + \"\");\n        map.put(RemoteMessageAttributes.URGENCY, message.getUrgency() + \"\");\n        map.put(RemoteMessageAttributes.TTL, message.getTtl() + \"\");\n        map.put(RemoteMessageAttributes.SENT_TIME, message.getSentTime() + \"\");\n        map.put(RemoteMessageAttributes.TO, message.getTo());\n        map.put(RemoteMessageAttributes.FROM, message.getFrom());\n        map.put(RemoteMessageAttributes.TOKEN, message.getToken());\n        map.put(RemoteMessageAttributes.RECEIPT_MODE, message.getReceiptMode() + \"\");\n        map.put(RemoteMessageAttributes.SEND_MODE, message.getSendMode() + \"\");\n        map.put(RemoteMessageAttributes.CONTENTS, message.describeContents() + \"\");\n        map.put(RemoteMessageAttributes.ANALYTIC_INFO, message.getAnalyticInfo());\n        map.put(RemoteMessageAttributes.ANALYTIC_INFO_MAP, message.getAnalyticInfoMap() + \"\");\n\n\n        if (message.getNotification() != null) {\n            RemoteMessage.Notification notification = message.getNotification();\n            map.put(RemoteMessageAttributes.TITLE, notification.getTitle());\n            map.put(RemoteMessageAttributes.TITLE_LOCALIZATION_KEY, notification.getTitleLocalizationKey());\n            map.put(RemoteMessageAttributes.TITLE_LOCALIZATION_ARGS, Arrays.toString(notification.getTitleLocalizationArgs()));\n            map.put(RemoteMessageAttributes.BODY_LOCALIZATION_KEY, notification.getBodyLocalizationKey());\n            map.put(RemoteMessageAttributes.BODY_LOCALIZATION_ARGS, Arrays.toString(notification.getBodyLocalizationArgs()));\n            map.put(RemoteMessageAttributes.BODY, notification.getBody());\n            map.put(RemoteMessageAttributes.ICON, notification.getIcon());\n            map.put(RemoteMessageAttributes.SOUND, notification.getSound());\n            map.put(RemoteMessageAttributes.TAG, notification.getTag());\n            map.put(RemoteMessageAttributes.COLOR, notification.getColor());\n            map.put(RemoteMessageAttributes.CLICK_ACTION, notification.getClickAction());\n            map.put(RemoteMessageAttributes.CHANNEL_ID, notification.getChannelId());\n            map.put(RemoteMessageAttributes.IMAGE_URL, notification.getImageUrl() + \"\");\n            map.put(RemoteMessageAttributes.LINK, notification.getLink() + \"\");\n            map.put(RemoteMessageAttributes.NOTIFY_ID, notification.getNotifyId() + \"\");\n            map.put(RemoteMessageAttributes.WHEN, notification.getWhen() + \"\");\n            map.put(RemoteMessageAttributes.LIGHT_SETTINGS, Arrays.toString(notification.getLightSettings()));\n            map.put(RemoteMessageAttributes.BADGE_NUMBER, notification.getBadgeNumber() + \"\");\n            map.put(RemoteMessageAttributes.IMPORTANCE, notification.getImportance() + \"\");\n            map.put(RemoteMessageAttributes.TICKER, notification.getTicker());\n            map.put(RemoteMessageAttributes.VIBRATE_CONFIG, Arrays.toString(notification.getVibrateConfig()));\n            map.put(RemoteMessageAttributes.VISIBILITY, notification.getVisibility() + \"\");\n            map.put(RemoteMessageAttributes.INTENT_URI, notification.getIntentUri());\n            map.put(RemoteMessageAttributes.IS_AUTO_CANCEL, notification.isAutoCancel() + \"\");\n            map.put(RemoteMessageAttributes.IS_LOCAL_ONLY, notification.isLocalOnly() + \"\");\n            map.put(RemoteMessageAttributes.IS_DEFAULT_LIGHT, notification.isDefaultLight() + \"\");\n            map.put(RemoteMessageAttributes.IS_DEFAULT_SOUND, notification.isDefaultSound() + \"\");\n            map.put(RemoteMessageAttributes.IS_DEFAULT_VIBRATE, notification.isDefaultVibrate() + \"\");\n        }\n\n        return map;\n    }\n\n    public static WritableMap toWritableMap(RemoteMessage message) {\n\n        WritableMap params = Arguments.createMap();\n\n        params.putString(RemoteMessageAttributes.COLLAPSE_KEY, message.getCollapseKey());\n        params.putString(RemoteMessageAttributes.DATA, message.getData());\n        params.putString(RemoteMessageAttributes.DATA_OF_MAP, message.getDataOfMap() + \"\");\n        params.putString(RemoteMessageAttributes.MESSAGE_ID, message.getMessageId());\n        params.putString(RemoteMessageAttributes.MESSAGE_TYPE, message.getMessageType());\n        params.putString(RemoteMessageAttributes.ORIGINAL_URGENCY, message.getOriginalUrgency() + \"\");\n        params.putString(RemoteMessageAttributes.URGENCY, message.getUrgency() + \"\");\n        params.putString(RemoteMessageAttributes.TTL, message.getTtl() + \"\");\n        params.putString(RemoteMessageAttributes.SENT_TIME, message.getSentTime() + \"\");\n        params.putString(RemoteMessageAttributes.TO, message.getTo());\n        params.putString(RemoteMessageAttributes.FROM, message.getFrom());\n        params.putString(RemoteMessageAttributes.TOKEN, message.getToken());\n        params.putString(RemoteMessageAttributes.RECEIPT_MODE, message.getReceiptMode() + \"\");\n        params.putString(RemoteMessageAttributes.SEND_MODE, message.getSendMode() + \"\");\n        params.putString(RemoteMessageAttributes.CONTENTS, message.describeContents() + \"\");\n        params.putString(RemoteMessageAttributes.ANALYTIC_INFO, message.getAnalyticInfo());\n        params.putString(RemoteMessageAttributes.ANALYTIC_INFO_MAP, message.getAnalyticInfoMap() + \"\");\n\n        if (message.getNotification() != null) {\n            RemoteMessage.Notification notification = message.getNotification();\n            params.putString(RemoteMessageAttributes.TITLE, notification.getTitle());\n            params.putString(RemoteMessageAttributes.TITLE_LOCALIZATION_KEY, notification.getTitleLocalizationKey());\n            params.putString(RemoteMessageAttributes.TITLE_LOCALIZATION_ARGS, Arrays.toString(notification.getTitleLocalizationArgs()));\n            params.putString(RemoteMessageAttributes.BODY_LOCALIZATION_KEY, notification.getBodyLocalizationKey());\n            params.putString(RemoteMessageAttributes.BODY_LOCALIZATION_ARGS, Arrays.toString(notification.getBodyLocalizationArgs()));\n            params.putString(RemoteMessageAttributes.BODY, notification.getBody());\n            params.putString(RemoteMessageAttributes.ICON, notification.getIcon());\n            params.putString(RemoteMessageAttributes.SOUND, notification.getSound());\n            params.putString(RemoteMessageAttributes.TAG, notification.getTag());\n            params.putString(RemoteMessageAttributes.COLOR, notification.getColor());\n            params.putString(RemoteMessageAttributes.CLICK_ACTION, notification.getClickAction());\n            params.putString(RemoteMessageAttributes.CHANNEL_ID, notification.getChannelId());\n            params.putString(RemoteMessageAttributes.IMAGE_URL, notification.getImageUrl() + \"\");\n            params.putString(RemoteMessageAttributes.LINK, notification.getLink() + \"\");\n            params.putString(RemoteMessageAttributes.NOTIFY_ID, notification.getNotifyId() + \"\");\n            params.putString(RemoteMessageAttributes.WHEN, notification.getWhen() + \"\");\n            params.putString(RemoteMessageAttributes.LIGHT_SETTINGS, Arrays.toString(notification.getLightSettings()));\n            params.putString(RemoteMessageAttributes.BADGE_NUMBER, notification.getBadgeNumber() + \"\");\n            params.putString(RemoteMessageAttributes.IMPORTANCE, notification.getImportance() + \"\");\n            params.putString(RemoteMessageAttributes.TICKER, notification.getTicker());\n            params.putString(RemoteMessageAttributes.VIBRATE_CONFIG, Arrays.toString(notification.getVibrateConfig()));\n            params.putString(RemoteMessageAttributes.VISIBILITY, notification.getVisibility() + \"\");\n            params.putString(RemoteMessageAttributes.INTENT_URI, notification.getIntentUri());\n            params.putString(RemoteMessageAttributes.IS_AUTO_CANCEL, notification.isAutoCancel() + \"\");\n            params.putString(RemoteMessageAttributes.IS_LOCAL_ONLY, notification.isLocalOnly() + \"\");\n            params.putString(RemoteMessageAttributes.IS_DEFAULT_LIGHT, notification.isDefaultLight() + \"\");\n            params.putString(RemoteMessageAttributes.IS_DEFAULT_SOUND, notification.isDefaultSound() + \"\");\n            params.putString(RemoteMessageAttributes.IS_DEFAULT_VIBRATE, notification.isDefaultVibrate() + \"\");\n        }\n\n        return params;\n    }\n\n    public static RemoteMessage toRemoteMessage(ReadableMap params) {\n\n        String to = params.getString(RemoteMessageAttributes.TO);\n        if (to == null || to.equals(\"\")) to = Core.REMOTE_MESSAGE_UPLINK_TO;\n\n        RemoteMessage.Builder builder = new RemoteMessage.Builder(to);\n\n        String messageId = params.hasKey(RemoteMessageAttributes.MESSAGE_ID) ? params.getString(RemoteMessageAttributes.MESSAGE_ID) : NotificationConfigUtils.generateNotificationId();\n        String messageType = params.hasKey(RemoteMessageAttributes.MESSAGE_TYPE) ? params.getString(RemoteMessageAttributes.MESSAGE_TYPE) : \"hms\";\n        int ttl = params.hasKey(RemoteMessageAttributes.TTL) ? params.getInt(RemoteMessageAttributes.TTL) : 120;\n        String collapseKey = params.hasKey(RemoteMessageAttributes.COLLAPSE_KEY) ? params.getString(RemoteMessageAttributes.COLLAPSE_KEY) : \"-1\";\n        int receiptMode = params.hasKey(RemoteMessageAttributes.RECEIPT_MODE) ? params.getInt(RemoteMessageAttributes.RECEIPT_MODE) : 1;\n        int sendMode = params.hasKey(RemoteMessageAttributes.SEND_MODE) ? params.getInt(RemoteMessageAttributes.SEND_MODE) : 1;\n\n        ReadableMap map = params.hasKey(RemoteMessageAttributes.DATA) ? params.getMap(RemoteMessageAttributes.DATA) : null;\n        if (map != null)\n            builder.setData(MapUtils.toStringMap(map));\n\n        builder.setCollapseKey(collapseKey);\n        builder.setMessageId(messageId);\n        builder.setReceiptMode(receiptMode);\n        builder.setSendMode(sendMode);\n        builder.setMessageType(messageType);\n        builder.setTtl(ttl);\n\n        return builder.build();\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/android/src/main/java/com/huawei/hms/rn/push/utils/ResultUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.utils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeMap;\n\nimport com.huawei.hms.rn.push.constants.Core;\nimport com.huawei.hms.rn.push.constants.ResultCode;\n\npublic class ResultUtils {\n\n    private ResultUtils() {\n        throw new IllegalStateException(\"Utility class\");\n    }\n\n    public static void handleResult(boolean isSuccess, Object result, Promise promise) {\n        handleResult(isSuccess, result, promise, ResultCode.SUCCESS);\n    }\n\n    public static void handleResult(boolean isSuccess, Object result, Promise promise, String resultCode) {\n\n        WritableMap wm = new WritableNativeMap();\n        MapUtils.put(wm, Core.Event.Result.RESULT_CODE, resultCode);\n        MapUtils.put(wm, Core.Event.Result.RESULT, result);\n\n        if (isSuccess) {\n            promise.resolve(wm);\n        } else {\n            promise.reject(ResultCode.RESULT_FAILURE, (String) result);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\ngradle-wrapper.jar\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\npackage-lock.json\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\nandroid/app/.classpath\n\nagconnect-services.json\n*.jks\n*.tmp"
  },
  {
    "path": "react-native-hms-push/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\n\nimport React from \"react\";\n\nimport MainPage from \"./src/MainPage\";\nimport LocalNotification from \"./src/LocalNotification\";\n\nimport { View, Text, TouchableOpacity, Image } from 'react-native';\nimport { styles } from \"./src/styles\"; \n\nconst pages = {\n    MainPage: {\n      screen: MainPage,\n      navigationOptions: {\n        headerTitle: \"🔔 ReactNative HMS Push Kit Demo\",\n      },\n      path: \"app1\",\n    },\n    LocalNotification: {\n      screen: LocalNotification,\n      navigationOptions: {\n        headerTitle: \"Push Kit Demo - LocalNotification\",\n      },\n      path: \"notif\",\n    },\n  };\n\n\n\nexport default class App extends React.Component {\n  state = {\n    pageItem: pages.MainPage,\n  }\n \n  changePage = (screenName) => {\n    if (pages[screenName]) {\n      this.setState({ pageItem: pages[screenName] })\n    }\n  }\n \n  goBack = () => {\n    this.changePage(\"MainPage\");\n  }\n\n  render() {\n    let { pageItem } = this.state;\n    if (pageItem?.screen) {\n      let Page = pageItem.screen;\n      return (\n        <>\n          <View style={styles.header}>\n            {pageItem.path != \"app1\" && (\n              <TouchableOpacity onPress={this.goBack} style={{ marginRight: 20 }}>\n                <Image \n                  source={require(\"./src/Img/back.png\")}\n                  style={styles.headerImage}\n                  resizeMode= \"contain\"\n                />\n              </TouchableOpacity>\n            )}\n            <Text style={styles.headerTitle}>{pageItem.navigationOptions.headerTitle}</Text>\n          </View>\n          <Page navigation={{ navigate: this.changePage }} />\n        </>\n      );\n    }\n    return <MainPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-push/example/README.md",
    "content": "# React-Native HMS Push - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Push Kit** Plugin.\n\n<img src=\"https://github.com/HMS-Core/hms-react-native-plugin/raw/master/react-native-hms-push/example/.docs/mainPage.jpg\" width = 40% height = 40% style=\"margin:1.5em\"><img src=\"https://github.com/HMS-Core/hms-react-native-plugin/raw/master/react-native-hms-push/example/.docs/localNotification.jpg\" width = 40% height = 40% style=\"margin:1.5em\">\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). You may need to change the package name on AndroidManifest.xml and MainActivity.java respectively.\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\" // For ex: \"com.example.mypushproject\"\n      <!-- Other configurations ... -->\n  }\n  ```\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html#2?ha_source=hms1) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n        }\n    }\n```\n\n### Enabling the Huawei Push Kit Service \n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Growing > Push Kit** and click **Enable Now** to enable the Huawei Push Kit Service. You can also check **Manage APIs** tab on the **Project Settings** page for the enabled HMS services on your app.\n\n**Step 2:** Go to **Project Setting > General information** page, under the **App information** field, click **agconnect-services.json** to download the configuration file.\n\n**Step 3:** Copy the **agconnect-services.json** file to the **example/android/app/** directory of the project. \n\n### Build & Run the project\n\n**Step 1:** Run the following command to install and update package info.\n```\n[project_path]> npm install @hmscore/react-native-hms-push\n``` \n**Step 2:** Run the following command to start the demo app.\n```\n[project_path]> npm run android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Push - Demo is licensed under [Apache 2.0 license](LICENSE)\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\"\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");\napplyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses\n\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:targetApi=\"28\"\n        tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.push.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.VIBRATE\" />\n    <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:name=\".MainApplication\"\n        android:label=\"RN-HMS Push Demo\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:roundIcon=\"@mipmap/ic_launcher\"\n        android:allowBackup=\"false\"\n        android:theme=\"@style/AppTheme\"\n        android:usesCleartextTraffic=\"true\">\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"RN-HMS Push Demo\"\n            android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:launchMode=\"singleTask\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"app\" />\n            </intent-filter>\n\n        </activity>\n\n        <receiver android:name=\"com.huawei.hms.rn.push.receiver.HmsLocalNotificationActionsReceiver\" />\n        <receiver android:name=\"com.huawei.hms.rn.push.receiver.HmsLocalNotificationBootEventReceiver\" android:exported=\"false\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.BOOT_COMPLETED\" />\n            </intent-filter>\n        </receiver>\n        <receiver\n            android:name=\"com.huawei.hms.rn.push.receiver.HmsLocalNotificationScheduledPublisher\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <meta-data\n            android:name=\"push_kit_auto_init_enabled\"\n            android:value=\"true\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/src/main/java/com/huawei/hms/rn/push/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.demo;\n\nimport com.facebook.react.ReactActivity;\n\nimport android.os.Bundle;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsPush Demo\";\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/src/main/java/com/huawei/hms/rn/push/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                // Packages that cannot be autolinked yet can be added manually here, for example:\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push/example/android/app/src/main/res/values/styles.xml",
    "content": "<!--\n    Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n-->\n\n<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-push/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n\n        classpath 'com.huawei.agconnect:agcp:1.9.1.301'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-push/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\nandroid.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-push/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-push/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-push/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsPush Demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\");\napplyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-push/example/app.json",
    "content": "{\n  \"name\": \"RNHmsPush Demo\",\n  \"displayName\": \"RNHmsPush Demo\"\n}"
  },
  {
    "path": "react-native-hms-push/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-push/example/exampleCustomIntentLinks.html",
    "content": "<!--\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n-->\n<a href=\"app://app1\">CLICK HERE 1</a>\n<br />\n<a href=\"app://app2\">CLICK HERE 2</a>\n\n<p>\n    adb shell am start -W -a android.intent.action.VIEW -d \"app://app1\"\n</p>\n<p>\n    adb shell am start -W -a android.intent.action.VIEW -d \"app://app2\"\n</p>"
  },
  {
    "path": "react-native-hms-push/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry, ToastAndroid } from \"react-native\";\nimport {\n  HmsPushMessaging,\n  RNRemoteMessage,\n  HmsLocalNotification,\n  HmsPushEvent,\n} from \"@hmscore/react-native-hms-push\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n\nHmsPushEvent.onNotificationOpenedApp((result) => {\n  console.log(\"onNotificationOpenedApp\", result);\n  ToastAndroid.show(JSON.stringify(result, \"\\n\", 4), ToastAndroid.SHORT);\n});\n\nHmsPushMessaging.setBackgroundMessageHandler((dataMessage) => {\n  HmsLocalNotification.localNotification({\n    [HmsLocalNotification.Attr.title]: \"[Headless] DataMessage Received\",\n    [HmsLocalNotification.Attr.message]: new RNRemoteMessage(\n      dataMessage\n    ).getDataOfMap(),\n  })\n    .then((result) => {\n      console.log(\"[Headless] DataMessage Received\", result);\n    })\n    .catch((err) => {\n      console.log(\n        \"[LocalNotification Default] Error/Exception: \" + JSON.stringify(err)\n      );\n    });\n\n  return Promise.resolve();\n});\n"
  },
  {
    "path": "react-native-hms-push/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-push/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-push-demo\",\n  \"version\": \"6.12.0-302\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.7\",\n    \"@hmscore/react-native-hms-push\": \"6.12.0-302\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.21.8\",\n    \"@babel/runtime\": \"^7.23.1\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.66.2\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-push/example/src/LocalNotification.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n    View,\n    TouchableOpacity,\n    Text,\n    ScrollView,\n    TextInput,\n    ToastAndroid,\n} from \"react-native\";\n\nimport { HmsLocalNotification } from \"@hmscore/react-native-hms-push\";\n\nimport { styles } from \"./styles\";\n\nconst defaultNotification = {\n    [HmsLocalNotification.Attr.title]: \"Notification Title\",\n    [HmsLocalNotification.Attr.message]: \"Notification Message\", // (required)\n    [HmsLocalNotification.Attr.ticker]: \"Optional Ticker\",\n    [HmsLocalNotification.Attr.showWhen]: true,\n    // [HmsLocalNotification.Attr.largeIconUrl]: 'https://developer.huawei.com/Enexport/sites/default/images/en/Develop/hms/push/push2-tuidedao.png', //\n    [HmsLocalNotification.Attr.largeIcon]: \"ic_launcher\",\n    [HmsLocalNotification.Attr.smallIcon]: \"ic_notification\",\n    [HmsLocalNotification.Attr.bigText]: \"This is a bigText\",\n    [HmsLocalNotification.Attr.subText]: \"This is a subText\",\n    [HmsLocalNotification.Attr.color]: \"white\",\n    [HmsLocalNotification.Attr.vibrate]: false,\n    [HmsLocalNotification.Attr.vibrateDuration]: 1000,\n    [HmsLocalNotification.Attr.tag]: \"hms_tag\",\n    [HmsLocalNotification.Attr.groupSummary]: false,\n    [HmsLocalNotification.Attr.ongoing]: false,\n    [HmsLocalNotification.Attr.importance]: HmsLocalNotification.Importance.max,\n    [HmsLocalNotification.Attr.dontNotifyInForeground]: false,\n    [HmsLocalNotification.Attr.autoCancel]: false, // for Custom Actions, it should be false\n    [HmsLocalNotification.Attr.actions]: '[\"Yes\", \"No\"]',\n    [HmsLocalNotification.Attr.invokeApp]: false,\n    // [HmsLocalNotification.Attr.channelId]: 'huawei-hms-rn-push-channel-id', // Please read the documentation before using this param\n    [HmsLocalNotification.Attr.data]: { data: \"data\" },\n};\n\nconst CustomTextInput = ({ type, children }) => {\n    return (\n        <View style={styles.container}>\n            <Text\n                style={[\n                    styles.buttonText,\n                    styles.width30,\n                    styles.paddingTop20,\n                ]}\n            >\n                {type} :\n            </Text>\n            {children}\n        </View>\n    );\n};\n\nexport default class App extends Component {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            log: \"\",\n            title: \"HMS Push\",\n            message: \"This is Local Notification\",\n            bigText: \"This is a bigText\",\n            subText: \"This is a subText\",\n            tag: null,\n        };\n    }\n\n    toast = (msg) => {\n        ToastAndroid.show(msg, ToastAndroid.SHORT);\n    };\n\n    log(tag, msg) {\n        this.setState(\n            {\n                log: `[${tag}]: ${JSON.stringify(msg, \"\\n\", 4)} \\n ${this.state.log}`,\n            },\n            this.toast(JSON.stringify(msg, \"\\n\", 4))\n        );\n    }\n\n    changeNotificationValue(key, data) {\n        this.setState({\n            [key]: data,\n        });\n    }\n\n    localNotificationScheduled() {\n        HmsLocalNotification.localNotificationSchedule({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.fireDate]: new Date(\n                Date.now() + 60 * 1000\n            ).getTime(), // in 1 min\n            [HmsLocalNotification.Attr.allowWhileIdle]: true,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Scheduled\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Scheduled] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n\n    localNotification() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Default\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Default] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n\n    localNotificationVibrate() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.vibrate]: true,\n            [HmsLocalNotification.Attr.vibrateDuration]: 5000,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Vibrate\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Vibrate] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n\n    localNotificationRepeat() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.repeatType]:\n                HmsLocalNotification.RepeatType.minute,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Repeat\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Repeat] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n    localNotificationSound() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.playSound]: true,\n            [HmsLocalNotification.Attr.soundName]: \"huawei_bounce.mp3\",\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Sound\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Sound] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n    localNotificationPriority() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.priority]:\n                HmsLocalNotification.Priority.max,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Priority\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Priority] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n\n    localNotificationOngoing() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.ongoing]: true,\n        })\n            .then((result) => {\n                this.log(\"LocalNotification Ongoing\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification Ongoing] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n    localNotificationBigImage() {\n        HmsLocalNotification.localNotification({\n            ...defaultNotification,\n            [HmsLocalNotification.Attr.title]: this.state.title,\n            [HmsLocalNotification.Attr.message]: this.state.message,\n            [HmsLocalNotification.Attr.bigText]: this.state.bigText,\n            [HmsLocalNotification.Attr.subText]: this.state.subText,\n            [HmsLocalNotification.Attr.tag]: this.state.tag,\n            [HmsLocalNotification.Attr.bigPictureUrl]:\n                \"https://www-file.huawei.com/-/media/corp/home/image/logo_400x200.png\",\n        })\n            .then((result) => {\n                this.log(\"LocalNotification BigImage\", result);\n            })\n            .catch((err) => {\n                alert(\n                    \"[LocalNotification BigImage] Error/Exception: \" +\n                    JSON.stringify(err)\n                );\n            });\n    }\n\n    render() {\n        return (\n            <ScrollView>\n                <View style={styles.container}>\n                    <Text\n                        style={[\n                            styles.buttonText,\n                            styles.width30,\n                            styles.paddingTop20,\n                        ]}\n                    >\n                        Title :\n                    </Text>\n                    <TextInput\n                        value={this.state.title}\n                        style={[styles.inputTopic, styles.width35]}\n                        placeholder=\"title\"\n                        onChangeText={(e) =>\n                            this.changeNotificationValue(\"title\", e)\n                        }\n                    />\n                    <TextInput\n                        value={this.state.tag}\n                        style={[styles.inputTopic, styles.width35]}\n                        placeholder=\"tag\"\n                        onChangeText={(e) =>\n                            this.changeNotificationValue(\"tag\", e)\n                        }\n                    />\n                </View>\n\n                <CustomTextInput type={\"Message\"}>\n                    <TextInput\n                        value={this.state.message}\n                        style={[styles.inputTopic, styles.width70]}\n                        placeholder=\"message\"\n                        onChangeText={(e) =>\n                            this.changeNotificationValue(\"message\", e)\n                        }\n                    />\n                </CustomTextInput>\n\n                <CustomTextInput type={\"BigText\"}>\n                    <TextInput\n                        value={this.state.bigText}\n                        style={[\n                            styles.inputTopic,\n                            styles.width70,\n                            styles.fontSizeSmall,\n                        ]}\n                        placeholder=\"bigText\"\n                        onChangeText={(e) =>\n                            this.changeNotificationValue(\"bigText\", e)\n                        }\n                    />\n                </CustomTextInput>\n\n                <CustomTextInput type={\"SubText\"}>\n                    <TextInput\n                        value={this.state.subText}\n                        style={[\n                            styles.inputTopic,\n                            styles.width70,\n                            styles.fontSizeSmall,\n                        ]}\n                        placeholder=\"subText\"\n                        onChangeText={(e) =>\n                            this.changeNotificationValue(\"subText\", e)\n                        }\n                    />\n                </CustomTextInput>\n\n                <View style={[styles.container, styles.containerSlim]}>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotification()}\n                    >\n                        <Text style={styles.buttonText}>\n                            Local Notification (Default)\n                        </Text>\n                    </TouchableOpacity>\n                </View>\n\n                <View style={[styles.container, styles.containerSlim]}>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationOngoing()}\n                    >\n                        <Text style={styles.buttonText}>+ Ongoing</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationSound()}\n                    >\n                        <Text style={styles.buttonText}>+ Sound</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationVibrate()}\n                    >\n                        <Text style={styles.buttonText}>+ Vibrate</Text>\n                    </TouchableOpacity>\n                </View>\n\n                <View style={[styles.container, styles.containerSlim]}>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationBigImage()}\n                    >\n                        <Text style={styles.buttonText}>+ BigImage</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationRepeat()}\n                    >\n                        <Text style={styles.buttonText}>+ Repeat</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[\n                            styles.buttonContainer,\n                            styles.secondaryButton,\n                            styles.buttonContainerSlim,\n                        ]}\n                        onPress={() => this.localNotificationScheduled()}\n                    >\n                        <Text style={styles.buttonText}>+ Scheduled</Text>\n                    </TouchableOpacity>\n                </View>\n\n                <View style={styles.container}>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.cancelAllNotifications()\n                                .then((result) => {\n                                    this.log(\"cancelAllNotifications\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[cancelAllNotifications] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>\n                            cancelAllNotifications\n                        </Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.getNotifications()\n                                .then((result) => {\n                                    this.log(\"getNotifications\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[getNotifications] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>getNotifications</Text>\n                    </TouchableOpacity>\n                </View>\n                <View style={styles.container}>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.cancelScheduledNotifications()\n                                .then((result) => {\n                                    this.log(\n                                        \"cancelScheduledNotifications\",\n                                        result\n                                    );\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[cancelScheduledNotifications] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text\n                            style={[styles.buttonText, styles.buttonTextSmall]}\n                        >\n                            cancelScheduledNotifications\n                        </Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.getScheduledNotifications()\n                                .then((result) => {\n                                    this.log(\n                                        \"getScheduledNotifications\",\n                                        result\n                                    );\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[getScheduledNotifications] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={[styles.buttonText, styles.buttonTextSmallest]} > getScheduledLocalNotifications </Text>\n                    </TouchableOpacity>\n                </View>\n                <View style={styles.container}>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.cancelNotificationsWithTag(\n                                \"tag\"\n                            )\n                                .then((result) => {\n                                    this.log(\n                                        \"cancelNotificationsWithTag\",\n                                        result\n                                    );\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[cancelNotificationsWithTag] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={[styles.buttonText, styles.buttonTextSmallest]} > cancelNotificationsWithTag(tag)  </Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.getChannels()\n                                .then((result) => {\n                                    this.log(\"getChannels\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[getChannels] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>getChannels</Text>\n                    </TouchableOpacity>\n                </View>\n                <View style={styles.container}>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.cancelNotifications()\n                                .then((result) => {\n                                    this.log(\"cancelNotifications\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[cancelNotifications] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>\n                            cancelNotifications\n                        </Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.deleteChannel(\n                                \"hms-channel-custom\"\n                            )\n                                .then((result) => {\n                                    this.log(\"deleteChannel\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[deleteChannel] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>deleteChannel</Text>\n                    </TouchableOpacity>\n                </View>\n                <View style={styles.container}>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.channelBlocked(\n                                \"huawei-hms-rn-push-channel-id\"\n                            )\n                                .then((result) => {\n                                    this.log(\"channelBlocked\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[channelBlocked] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>channelBlocked</Text>\n                    </TouchableOpacity>\n                    <TouchableOpacity\n                        style={[styles.buttonContainer, styles.primaryButton]}\n                        onPress={() => {\n                            HmsLocalNotification.channelExists(\n                                \"huawei-hms-rn-push-channel-id\"\n                            )\n                                .then((result) => {\n                                    this.log(\"channelExists\", result);\n                                })\n                                .catch((err) => {\n                                    alert(\n                                        \"[channelExists] Error/Exception: \" +\n                                        JSON.stringify(err)\n                                    );\n                                });\n                        }}\n                    >\n                        <Text style={styles.buttonText}>channelExists</Text>\n                    </TouchableOpacity>\n                </View>\n\n                <ScrollView style={styles.containerShowResultMsg}>\n                    <Text>{this.state.log}</Text>\n                </ScrollView>\n            </ScrollView>\n        );\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/src/MainPage.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  TextInput,\n  ToastAndroid,\n} from \"react-native\";\n\nimport {\n  HmsPushEvent,\n  RNRemoteMessage,\n  HmsPushMessaging,\n  HmsPushInstanceId,\n  HmsLocalNotification,\n  HmsPushOpenDevice,\n  RemoteMessageBuilder,\n  HmsPushProfile,\n} from \"@hmscore/react-native-hms-push\";\n\nimport { styles } from \"./styles\";\n\nexport default class App extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      log: \"\",\n      topic: \"\",\n      subjectId: \"<project_id>\",\n    };\n\n    this.componentDidMount = this.componentDidMount.bind(this);\n  }\n\n  componentDidMount() {\n    if(this.state.subjectId === \"<project_id>\") {\n      alert(\"You have not added your subjectId to the demo. This will cause some functions not to work.\");\n    }\n\n    this.onRemoteMessageReceivedListener = HmsPushEvent.onRemoteMessageReceived(\n      (result) => {\n        const RNRemoteMessageObj = new RNRemoteMessage(result.msg);\n        HmsLocalNotification.localNotification({\n          [HmsLocalNotification.Attr.title]: \"DataMessage Received\",\n          [HmsLocalNotification.Attr\n            .message]: RNRemoteMessageObj.getDataOfMap(),\n        });\n        this.log(\"onRemoteMessageReceived\", result);\n      }\n    );\n\n    this.onTokenReceivedListener = HmsPushEvent.onTokenReceived((result) => {\n      this.log(\"onTokenReceived\", result);\n    });\n\n    this.onTokenErrorListener = HmsPushEvent.onTokenError((result) => {\n      this.log(\"onTokenError\", result);\n    });\n\n    this.onMultiSenderTokenReceivedListener = HmsPushEvent.onMultiSenderTokenReceived(\n      (result) => {\n        this.log(\"onMultiSenderTokenReceived\", result);\n      }\n    );\n\n    this.onMultiSenderTokenErrorListener = HmsPushEvent.onMultiSenderTokenError(\n      (result) => {\n        this.log(\"onMultiSenderTokenError\", result);\n      }\n    );\n\n    this.onPushMessageSentListener = HmsPushEvent.onPushMessageSent(\n      (result) => {\n        this.log(\"onPushMessageSent\", result);\n      }\n    );\n\n    this.onMessageSentErrorListener = HmsPushEvent.onPushMessageSentError(\n      (result) => {\n        this.log(\"onMessageSentError\", result);\n      }\n    );\n\n    this.onMessageSentDeliveredListener = HmsPushEvent.onPushMessageSentDelivered(\n      (result) => {\n        this.log(\"onMessageSentDelivered\", result);\n      }\n    );\n\n    this.onLocalNotificationActionListener = HmsPushEvent.onLocalNotificationAction(\n      (result) => {\n        this.log(\"onLocalNotificationAction\", result);\n\n        var notification = JSON.parse(result.dataJSON);\n        if (notification.action === \"Yes\") {\n          HmsLocalNotification.cancelNotificationsWithId([notification.id]);\n        }\n        this.log(\"onLocalNotificationAction-Clicked\", notification.action);\n      }\n    );\n\n    this.onNotificationOpenedAppListener = HmsPushEvent.onNotificationOpenedApp(\n      (result) => {\n        this.log(\"onNotificationOpenedApp\", result);\n      }\n    );\n  }\n\n  componentWillUnmount() {\n    this.onRemoteMessageReceivedListener.remove();\n    this.onTokenReceivedListener.remove();\n    this.onTokenErrorListener.remove();\n    this.onMultiSenderTokenReceivedListener.remove();\n    this.onMultiSenderTokenErrorListener.remove();\n    this.onPushMessageSentListener.remove();\n    this.onMessageSentErrorListener.remove();\n    this.onMessageSentDeliveredListener.remove();\n    this.onLocalNotificationActionListener.remove();\n    this.onNotificationOpenedAppListener.remove();\n  }\n\n  log(tag, msg) {\n    this.setState(\n      {\n        log: `[${tag}]: ${JSON.stringify(msg, \"\\n\", 4)} \\n ${this.state.log}`,\n      },\n      this.toast(JSON.stringify(msg, \"\\n\", 4))\n    );\n  }\n\n  toast = (msg) => {\n    ToastAndroid.show(msg, ToastAndroid.SHORT);\n  };\n\n  clearLog() {\n    this.setState({\n      log: \"\",\n    });\n  }\n\n  onChangeTopic(inputData) {\n    this.setState({\n      topic: inputData,\n    });\n  }\n\n  turnOnPush() {\n    HmsPushMessaging.turnOnPush()\n      .then((result) => {\n        this.log(\"turnOnPush\", result);\n      })\n      .catch((err) => {\n        alert(\"[turnOnPush] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  turnOffPush() {\n    HmsPushMessaging.turnOffPush()\n      .then((result) => {\n        this.log(\"turnOffPush\", result);\n      })\n      .catch((err) => {\n        alert(\"[turnOffPush] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getID() {\n    HmsPushInstanceId.getId()\n      .then((result) => {\n        this.log(\"getId\", result);\n      })\n      .catch((err) => {\n        alert(\"[getID] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getAAID() {\n    HmsPushInstanceId.getAAID()\n      .then((result) => {\n        this.log(\"getAAID\", result);\n      })\n      .catch((err) => {\n        alert(\"[getAAID] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n  getOdid() {\n    HmsPushOpenDevice.getOdid()\n      .then((result) => {\n        this.log(\"getOdid\", result);\n      })\n      .catch((err) => {\n        alert(\"[getOdid] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getToken() {\n    HmsPushInstanceId.getToken(\"\")\n      .then((result) => {\n        this.log(\"getToken\", result);\n      })\n      .catch((err) => {\n        alert(\"[getToken] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getTokenWithSubjectId() {\n    HmsPushInstanceId.getTokenWithSubjectId(this.state.subjectId)\n      .then((result) => {\n        this.log(\"getTokenWithSubjectId\", result);\n      })\n      .catch((err) => {\n        alert(\n          \"[getTokenWithSubjectId] Error/Exception: \" + JSON.stringify(err)\n        );\n      });\n  }\n\n  getCreationTime() {\n    HmsPushInstanceId.getCreationTime()\n      .then((result) => {\n        this.log(\"getCreationTime\", result);\n      })\n      .catch((err) => {\n        alert(\"[getCreationTime] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  deleteAAID() {\n    HmsPushInstanceId.deleteAAID()\n      .then((result) => {\n        this.log(\"deleteAAID\", result);\n      })\n      .catch((err) => {\n        alert(\"[deleteAAID] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  deleteToken() {\n    HmsPushInstanceId.deleteToken(\"\")\n      .then((result) => {\n        this.log(\"deleteToken\", result);\n      })\n      .catch((err) => {\n        alert(\"[deleteToken] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  deleteTokenWithSubjectId() {\n    HmsPushInstanceId.deleteTokenWithSubjectId(this.state.subjectId)\n      .then((result) => {\n        this.log(\"deleteTokenWithSubjectId\", result);\n      })\n      .catch((err) => {\n        alert(\n          \"[deleteTokenWithSubjectId] Error/Exception: \" + JSON.stringify(err)\n        );\n      });\n  }\n\n  subscribe() {\n    HmsPushMessaging.subscribe(this.state.topic)\n      .then((result) => {\n        this.log(\"subscribe\", result);\n      })\n      .catch((err) => {\n        alert(\"[subscribe] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  unsubscribe() {\n    HmsPushMessaging.unsubscribe(this.state.topic)\n      .then((result) => {\n        this.log(\"unsubscribe\", result);\n      })\n      .catch((err) => {\n        alert(\"[unsubscribe] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  sendRemoteMessage() {\n    HmsPushMessaging.sendRemoteMessage({\n      [RemoteMessageBuilder.TO]: \"\",\n      //[RemoteMessageBuilder.MESSAGE_ID]: '', // Auto generated\n      [RemoteMessageBuilder.MESSAGE_TYPE]: \"hms\",\n      [RemoteMessageBuilder.COLLAPSE_KEY]: \"-1\",\n      [RemoteMessageBuilder.TTL]: 120,\n      [RemoteMessageBuilder.RECEIPT_MODE]: 1,\n      [RemoteMessageBuilder.SEND_MODE]: 1,\n      [RemoteMessageBuilder.DATA]: { key1: \"test\", message: \"huawei-test\" },\n    })\n      .then((result) => {\n        this.log(\"sendRemoteMessage\", result);\n      })\n      .catch((err) => {\n        alert(\"[sendRemoteMessage] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  isAutoInitEnabled() {\n    HmsPushMessaging.isAutoInitEnabled()\n      .then((result) => {\n        this.log(\"isAutoInitEnabled\", result);\n      })\n      .catch((err) => {\n        alert(\"[isAutoInitEnabled] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n  setAutoInitEnabled(value) {\n    HmsPushMessaging.setAutoInitEnabled(value)\n      .then((result) => {\n        this.log(\"setAutoInitEnabled\", result);\n      })\n      .catch((err) => {\n        alert(\"[setAutoInitEnabled] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getInitialNotification() {\n    HmsPushMessaging.getInitialNotification()\n      .then((result) => {\n        this.log(\"getInitialNotification\", result);\n      })\n      .catch((err) => {\n        alert(\n          \"[getInitialNotification] Error/Exception: \" + JSON.stringify(err)\n        );\n      });\n  }\n\n  isSupportProfile() {\n    HmsPushProfile.isSupportProfile()\n      .then((result) => {\n        this.log(\"isSupportProfile\", result);\n      })\n      .catch((err) => {\n        alert(\"[isSupportProfile] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  addProfile() {\n    HmsPushProfile.addProfile(HmsPushProfile.Type.HUAWEI_PROFILE, \"profileId\")\n      .then((result) => {\n        this.log(\"addProfile\", result);\n      })\n      .catch((err) => {\n        alert(\"[addProfile] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  addProfileWithSubjectId() {\n    HmsPushProfile.addProfileWithSubjectId(\n      \"<subject_Id>\",\n      HmsPushProfile.Type.HUAWEI_PROFILE,\n      \"<profileId>\"\n    )\n      .then((result) => {\n        this.log(\"addProfileWithSubjectId\", result);\n      })\n      .catch((err) => {\n        alert(\n          \"[addProfileWithSubjectId] Error/Exception: \" + JSON.stringify(err)\n        );\n      });\n  }\n\n  deleteProfile() {\n    HmsPushProfile.deleteProfile(\"<profile_Id>\")\n      .then((result) => {\n        this.log(\"deleteProfile\", result);\n      })\n      .catch((err) => {\n        alert(\"[deleteProfile] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  deleteProfileWithSubjectId() {\n    HmsPushProfile.deleteProfileWithSubjectId(\"<subject_Id>\", \"<profile_Id>\")\n      .then((result) => {\n        this.log(\"deleteProfileWithSubjectId\", result);\n      })\n      .catch((err) => {\n        alert(\n          \"[deleteProfileWithSubjectId] Error/Exception: \" + JSON.stringify(err)\n        );\n      });\n  }\n\n  render() {\n    return (\n      <ScrollView>\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.secondaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.props.navigation.navigate(\"LocalNotification\")}\n          >\n            <Text style={styles.buttonText}>Local Notification</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.turnOffPush();\n            }}\n          >\n            <Text style={styles.buttonText}>TurnOffPush</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.turnOnPush();\n            }}\n          >\n            <Text style={styles.buttonText}>TurnOnPush</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getID();\n            }}\n          >\n            <Text style={styles.buttonText}>Get ID</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getAAID();\n            }}\n          >\n            <Text style={styles.buttonText}>Get AAID</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getOdid();\n            }}\n          >\n            <Text style={styles.buttonText}>Get Odid</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getToken();\n            }}\n          >\n            <Text style={styles.buttonText}>Get Token</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getCreationTime();\n            }}\n          >\n            <Text style={styles.buttonText}>Get CreationTime</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.deleteAAID();\n            }}\n          >\n            <Text style={styles.buttonText}>Delete AAID</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.deleteToken();\n            }}\n          >\n            <Text style={styles.buttonText}>Delete Token</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.getTokenWithSubjectId()}\n          >\n            <Text style={styles.buttonText}>Get Token With Subject ID</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.deleteTokenWithSubjectId()}\n          >\n            <Text style={styles.buttonText}>Delete Token With Subject ID</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TextInput\n            value={this.state.topic}\n            style={styles.inputTopic}\n            placeholder=\"topic\"\n            onChangeText={(e) => this.onChangeTopic(e)}\n          />\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.subscribe();\n            }}\n          >\n            <Text style={styles.buttonText}>Subscribe</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.unsubscribe();\n            }}\n          >\n            <Text style={styles.buttonText}>UnSubscribe</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.setAutoInitEnabled(false);\n            }}\n          >\n            <Text style={styles.buttonText}>Disable AutoInit</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.setAutoInitEnabled(true);\n            }}\n          >\n            <Text style={styles.buttonText}>Enable AutoInit</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.isAutoInitEnabled();\n            }}\n          >\n            <Text style={styles.buttonText}>Is AutoInit Enabled</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getInitialNotification();\n            }}\n          >\n            <Text style={[styles.buttonText, styles.buttonTextSmall]}>\n              getInitialNotification\n            </Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.sendRemoteMessage();\n            }}\n          >\n            <Text style={styles.buttonText}>sendRemoteMessage</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.isSupportProfile()}\n          >\n            <Text style={styles.buttonText}>isSupportProfile</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.addProfile()}\n          >\n            <Text style={styles.buttonText}>addProfile</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.addProfileWithSubjectId()}\n          >\n            <Text style={styles.buttonText}>addProfileWithSubjectId</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.deleteProfile()}\n          >\n            <Text style={styles.buttonText}>deleteProfile</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.primaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.deleteProfileWithSubjectId()}\n          >\n            <Text style={styles.buttonText}>deleteProfileWithSubjectId</Text>\n          </TouchableOpacity>\n        </View>\n\n        <ScrollView style={styles.containerShowResultMsg}>\n          <Text>{this.state.log}</Text>\n        </ScrollView>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-push/example/src/styles.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n  containerShowResultMsg: {\n    flexDirection: \"row\",\n    margin: 15,\n    borderTopWidth: 1,\n    paddingTop: 10,\n    borderColor: \"#aaa\",\n  },\n\n  inputTopic: {\n    textAlign: \"center\",\n    padding: 10,\n    width: \"100%\",\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n    borderWidth: 1,\n    borderRadius: 5,\n    borderColor: \"#aaa\",\n  },\n  width70: {\n    width: \"70%\",\n  },\n  width35: {\n    width: \"35%\",\n  },\n  width30: {\n    width: \"30%\",\n  },\n  paddingTop20: {\n    paddingTop: 12,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: \"#fff\",\n    flexDirection: \"column\",\n  },\n  image: {\n    justifyContent: \"flex-start\",\n    width: 400,\n    height: 80,\n  },\n\n  paddingX: {\n    paddingTop: 75,\n  },\n\n  container: {\n    margin: 5,\n    flex: 1,\n    flexDirection: \"row\",\n  },\n\n  containerSlim: {\n    marginBottom: 0,\n    marginTop: 2,\n  },\n\n  buttonContainer: {\n    flex: 1,\n    margin: 5,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    height: 35,\n    borderRadius: 5,\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: 3,\n    },\n    shadowOpacity: 0.27,\n    shadowRadius: 4.65,\n    elevation: 6,\n  },\n\n  buttonContainerSlim: {\n    marginBottom: 2,\n    marginTop: 2,\n  },\n\n  primaryButton: {\n    backgroundColor: \"#c9c9c9\",\n  },\n\n  secondaryButton: {\n    backgroundColor: \"#5ea6ff\",\n  },\n\n  tertiaryButton: {\n    backgroundColor: \"#ff825c\",\n  },\n\n  buttonText: {\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n  },\n\n  buttonTextSmall: {\n    fontSize: 16,\n  },\n\n  buttonTextSmallest: {\n    fontSize: 14,\n  },\n\n  fontSizeSmall: {\n    fontSize: 16,\n  },\n  \n  header: {\n    height: 55,\n    backgroundColor: 'white',\n    elevation: 5,\n    alignItems: 'center', \n    paddingLeft: 15, \n    flexDirection: 'row'\n  },\n \n  headerImage: { \n    width: 30, \n    height: 30 \n  },\n \n  headerTitle: { \n    fontWeight: '600', \n    fontSize: 20 \n  },\n});\n"
  },
  {
    "path": "react-native-hms-push/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-push\",\n  \"title\": \"React Native HMS Push Kit\",\n  \"description\": \"React Native HMS Push Kit\",\n  \"version\": \"6.12.0-302\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-push\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-push\",\n    \"react-native-notification\",\n    \"hms-push\",\n    \"hms-notification\",\n    \"huawei-push\",\n    \"push-kit\",\n    \"push-notification\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-push/src/HmsPushEvent.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const HmsPushEvent = {\n  REMOTE_DATA_MESSAGE_RECEIVED: \"REMOTE_DATA_MESSAGE_RECEIVED\",\n  ON_TOKEN_RECEIVED_EVENT: \"ON_TOKEN_RECEIVED_EVENT\",\n  ON_TOKEN_ERROR_EVENT: \"ON_TOKEN_ERROR_EVENT\",\n  NOTIFICATION_OPENED_EVENT: \"NOTIFICATION_OPENED_EVENT\",\n  LOCAL_NOTIFICATION_ACTION_EVENT: \"LOCAL_NOTIFICATION_ACTION_EVENT\",\n  ON_PUSH_MESSAGE_SENT: \"ON_PUSH_MESSAGE_SENT\",\n  ON_PUSH_MESSAGE_SENT_ERROR: \"ON_PUSH_MESSAGE_SENT_ERROR\",\n  ON_PUSH_MESSAGE_SENT_DELIVERED: \"ON_PUSH_MESSAGE_SENT_DELIVERED\",\n  ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT: \"ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT\",\n  ON_MULTI_SENDER_TOKEN_ERROR_EVENT: \"ON_MULTI_SENDER_TOKEN_ERROR_EVENT\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/HmsPushProfileTypes.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst ProfileType = {\n  HUAWEI_PROFILE: 1,\n  CUSTOM_PROFILE: 2,\n  UNDEFINED_PROFILE: -1,\n};\n\nexport default Object.freeze(ProfileType);\n"
  },
  {
    "path": "react-native-hms-push/src/HmsPushResultCode.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const HmsPushResultCode = {\n  // Success\n  SUCCESS: \"0\",\n\n  // Error\n  ERROR: \"-1\",\n\n  // Bundle is null, exception\n  NULL_BUNDLE: \"333\",\n\n  // You do not have a token. Apply for a token.\n  ERROR_NO_TOKEN: \"907122030\",\n\n  // The current network is unavailable. Check the network connection.\n  ERROR_NO_NETWORK: \"907122031\",\n\n  // The token has expired. Delete the token and apply for a new one.\n  ERROR_TOKEN_INVALID: \"907122032\",\n\n  // If the Push service is unavailable, contact Huawei technical support.\n  ERROR_SERVICE_NOT_AVAILABLE: \"907122046\",\n\n  // If the Push server returns an error, contact Huawei technical support.\n  ERROR_PUSH_SERVER: \"907122047\",\n\n  // Unknown error. Contact Huawei technical support.\n  ERROR_UNKNOWN: \"907122045\",\n\n  // The number of subscribed topics exceeds 2000.\n  ERROR_TOPIC_EXCEED: \"907122034\",\n\n  // Failed to send the subscription topic. Contact Huawei technical support.\n  ERROR_TOPIC_SEND: \"907122035\",\n\n  // Push rights are not enabled. Enable the service and set push service parameters at AppGallery Connect.\n  ERROR_NO_RIGHT: \"907122036\",\n\n  // Failed to apply for the token. Contact Huawei technical support.\n  ERROR_GET_TOKEN_ERR: \"907122037\",\n\n  // No storage location is selected for the application or the storage location is invalid.\n  ERROR_STORAGE_LOCATION_EMPTY: \"907122038\",\n\n  // Failed to apply for a token. Cross-region token application is not allowed.\n  ERROR_NOT_ALLOW_CROSS_APPLY: \"907122053\",\n\n  // The message body size exceeds the maximum.\n  ERROR_SIZE: \"907122041\",\n\n  // The message contains invalid parameters.\n  ERROR_INVALID_PARAMETERS: \"907122042\",\n\n  // The number of sent messages reaches the upper limit. The messages will be discarded.\n  ERROR_TOO_MANY_MESSAGES: \"907122043\",\n\n  // The message lifetime expires before the message is successfully sent to the APP server.\n  ERROR_TTL_EXCEEDED: \"907122044\",\n\n  //  Huawei Mobile Services (APK) can't connect  Huawei Push  Kit.\n  ERROR_HMS_CLIENT_API: \"907122048\",\n\n  // The current EMUI version is too early to use the capability.\n  ERROR_OPERATION_NOT_SUPPORTED: \"907122049\",\n\n  // The operation cannot be performed in the main thread.\n  ERROR_MAIN_THREAD: \"907122050\",\n\n  // The device certificate authentication fails.\n  ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING: \"907122051\",\n\n  // Failed to bind the service.\n  ERROR_BIND_SERVICE_SELF_MAPPING: \"907122052\",\n\n  // The SDK is being automatically initialized. Try again later.\n  ERROR_AUTO_INITIALIZING: \"907122054\",\n\n  /*The input parameter is incorrect. Check whether the related configuration information is correct.\n   * Example: app_id in the agconnect - services.json file;\n   * Check whether the build.gradle file is configured with the certificate signature.\n   */\n  ERROR_ARGUMENTS_INVALID: \"907135000\",\n\n  // Internal Push error. Contact Huawei technical support engineers.\n  ERROR_INTERNAL_ERROR: \"907135001\",\n\n  // The service does not exist. The invoked interface does not exist.\n  ERROR_NAMING_INVALID: \"907135002\",\n\n  // The ApiClient object is invalid.\n  ERROR_CLIENT_API_INVALID: \"907135003\",\n\n  // Invoking AIDL times out. Contact Huawei technical support.\n  ERROR_EXECUTE_TIMEOUT: \"907135004\",\n\n  // The current area does not support this service.\n  ERROR_NOT_IN_SERVICE: \"907135005\",\n\n  // If the AIDL connection session is invalid, contact Huawei technical support.\n  ERROR_SESSION_INVALID: \"907135006\",\n\n  // An error occurred when invoking an unspecified API.\n  ERROR_API_NOT_SPECIFIED: \"1002\",\n\n  /* Failed to invoke the gateway to query the application scope.\n   * Check whether the current app has been created and enabled in AppGallery Connect.\n   * If yes, contact Huawei technical support.\n   */\n  ERROR_GET_SCOPE_ERROR: \"907135700\",\n  /* Scope is not configured on the AppGallery Connect.\n   * Check whether the current app has been created and enabled in AppGallery Connect.\n   * If yes, contact Huawei technical support.\n   */\n  ERROR_SCOPE_LIST_EMPTY: \"907135701\",\n\n  /* The certificate fingerprint is not configured on the AppGallery Connect.\n   * 1. Check whether your phone can access the Internet.\n   * 2. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details, see AppGallery Connect configuration in Development Preparations.\n   * 3. If the check result is correct, contact Huawei technical support.\n   */\n  ERROR_CERT_FINGERPRINT_EMPTY: \"907135702\",\n\n  //Permission is not configured on the AppGallery Connect.\n  ERROR_PERMISSION_LIST_EMPTY: \"907135703\",\n\n  // The authentication information of the application does not exist.\n  ERROR_AUTH_INFO_NOT_EXIST: \"6002\",\n\n  // An error occurred during certificate fingerprint verification. Check whether the correct certificate fingerprint is configured in AppGallery Connect. For details, see AppGallery Connect configuration in Development Preparations.\n  ERROR_CERT_FINGERPRINT_ERROR: \"6003\",\n\n  // Interface authentication: The permission does not exist and is not applied for in AppGallery Connect.\n  ERROR_PERMISSION_NOT_EXIST: \"6004\",\n\n  // Interface authentication: unauthorized.\n  ERROR_PERMISSION_NOT_AUTHORIZED: \"6005\",\n\n  // Interface authentication: The authorization expires.\n  ERROR_PERMISSION_EXPIRED: \"6006\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/LocalNotification/Importance.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const Importance = {\n  max: \"max\",\n  high: \"high\",\n  default: \"default\",\n  low: \"low\",\n  min: \"min\",\n  none: \"none\",\n  unspecified: \"unspecified\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/LocalNotification/Priority.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const Priority = {\n  max: \"max\",\n  high: \"high\",\n  default: \"default\",\n  low: \"low\",\n  min: \"min\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/LocalNotification/RepeatType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const RepeatType = {\n  hour: \"hour\",\n  minute: \"minute\",\n  day: \"day\",\n  week: \"week\",\n  customTime: \"custom_time\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/LocalNotification/Visibility.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const Visibility = {\n  public: \"public\",\n  secret: \"secret\",\n  private: \"private\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/LocalNotification/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { Importance } from \"./Importance\";\nimport { Priority } from \"./Priority\";\nimport { RepeatType } from \"./RepeatType\";\nimport { Visibility } from \"./Visibility\";\n\nexport { Importance, Priority, RepeatType, Visibility };\n"
  },
  {
    "path": "react-native-hms-push/src/RNRemoteMessage.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport class RNRemoteMessage {\n  static INSTANCE_ID_SCOPE = \"HCM\";\n\n  static PRIORITY_UNKNOWN = 0;\n  static PRIORITY_HIGH = 1;\n  static PRIORITY_NORMAL = 2;\n\n  static COLLAPSEKEY = \"collapseKey\";\n  static DATA = \"data\";\n  static DATAOFMAP = \"dataOfMap\";\n  static MESSAGEID = \"messageId\";\n  static MESSAGETYPE = \"messageType\";\n  static ORIGINALURGENCY = \"originalUrgency\";\n  static URGENCY = \"urgency\";\n  static TTL = \"ttl\";\n  static SENTTIME = \"sentTime\";\n  static TO = \"to\";\n  static FROM = \"from\";\n  static TOKEN = \"token\";\n  static ANALYTIC_INFO = \"analyticInfo\";\n  static ANALYTIC_INFO_MAP = \"analyticInfoMap\";\n\n  static NOTIFICATION = {\n    TITLE: \"title\",\n    TITLELOCALIZATIONKEY: \"titleLocalizationKey\",\n    TITLELOCALIZATIONARGS: \"titleLocalizationArgs\",\n    BODYLOCALIZATIONKEY: \"bodyLocalizationKey\",\n    BODYLOCALIZATIONARGS: \"bodyLocalizationArgs\",\n    BODY: \"body\",\n    ICON: \"icon\",\n    SOUND: \"Sound\",\n    TAG: \"Tag\",\n    COLOR: \"Color\",\n    CLICKACTION: \"ClickAction\",\n    CHANNELID: \"ChannelId\",\n    IMAGEURL: \"ImageUrl\",\n    LINK: \"Link\",\n    NOTIFYID: \"NotifyId\",\n    WHEN: \"When\",\n    LIGHTSETTINGS: \"LightSettings\",\n    BADGENUMBER: \"BadgeNumber\",\n    IMPORTANCE: \"Importance\",\n    TICKER: \"Ticker\",\n    VIBRATECONFIG: \"vibrateConfig\",\n    VISIBILITY: \"visibility\",\n    INTENTURI: \"intentUri\",\n    ISAUTOCANCEL: \"isAutoCancel\",\n    ISLOCALONLY: \"isLocalOnly\",\n    ISDEFAULTLIGHT: \"isDefaultLight\",\n    ISDEFAULTSOUND: \"isDefaultSound\",\n    ISDEFAULTVIBRATE: \"isDefaultVibrate\",\n  };\n\n  constructor(options = {}) {\n    this.remoteMsg = options;\n  }\n\n  /*\n   * parse all element,unordered\n   */\n  parseMsgAllAttribute() {\n    let pushResult = \"\";\n    for (const key in this.remoteMsg) {\n      pushResult = pushResult + key + \" : \" + this.remoteMsg[key] + \"\\n\";\n    }\n    return pushResult;\n  }\n\n  /*\n   * getCollapseKey() Obtains the classification identifier (collapse key) of a message.\n   */\n  getCollapseKey() {\n    return this.remoteMsg[RNRemoteMessage.COLLAPSEKEY];\n  }\n\n  /*\n   * getData() Obtains valid content data of a message.\n   */\n  getData() {\n    return this.remoteMsg[RNRemoteMessage.DATA];\n  }\n\n  /*\n   * getDataOfMap() a message map.\n   */\n  getDataOfMap() {\n    return this.remoteMsg[RNRemoteMessage.DATAOFMAP];\n  }\n\n  /*\n   * getMessageId() Obtains the ID of a message.\n   */\n  getMessageId() {\n    return this.remoteMsg[RNRemoteMessage.MESSAGEID];\n  }\n\n  /*\n   * getMessageType() Obtains the type of a message.\n   */\n  getMessageType() {\n    return this.remoteMsg[RNRemoteMessage.MESSAGETYPE];\n  }\n\n  /*\n   * getOriginalUrgency() Obtains the original priority of a message.\n   */\n  getOriginalUrgency() {\n    return this.remoteMsg[RNRemoteMessage.ORIGINALURGENCY];\n  }\n\n  /*\n   * getUrgency() Obtains priority of a message.\n   */\n  getUrgency() {\n    return this.remoteMsg[RNRemoteMessage.URGENCY];\n  }\n\n  /*\n   * getTtl() Obtains valid getTtl of a message.\n   */\n  getTtl() {\n    return this.remoteMsg[RNRemoteMessage.TTL];\n  }\n\n  /*\n   * getSentTime() Obtains the time when a message is sent from the server.\n   */\n  getSentTime() {\n    return this.remoteMsg[RNRemoteMessage.SENTTIME];\n  }\n\n  /*\n   * getTo() Obtains the recipient of a message.\n   */\n  getTo() {\n    return this.remoteMsg[RNRemoteMessage.TO];\n  }\n\n  /*\n   * getFrom() Obtains the sender of a message.\n   */\n  getFrom() {\n    return this.remoteMsg[RNRemoteMessage.FROM];\n  }\n\n  /*\n   * getToken() Obtains valid token\n   */\n  getToken() {\n    return this.remoteMsg[RNRemoteMessage.TOKEN];\n  }\n\n  /*\n   * getAnalyticInfo() Obtains the tag of a message\n   */\n  getAnalyticInfo() {\n    return this.remoteMsg[RNRemoteMessage.ANALYTIC_INFO];\n  }\n\n  /*\n   * getAnalyticInfoMap() Obtains the analysis data of the Map\n   */\n  getAnalyticInfoMap() {\n    return this.remoteMsg[RNRemoteMessage.ANALYTIC_INFO_MAP];\n  }\n\n  /*\n   * Notification:getTitle() Obtains the title of a message\n   */\n  getNotificationTitle() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.TITLE];\n  }\n\n  /*\n   * Notification:getTitleLocalizationKey() Obtains the key of the displayed title of a notification message\n   */\n  getTitleLocalizationKey() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.TITLELOCALIZATIONKEY];\n  }\n\n  /*\n   * Notification:getTitleLocalizationArgs() Obtains variable parameters of the displayed title of a message\n   */\n  getTitleLocalizationArgs() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.TITLELOCALIZATIONARGS];\n  }\n\n  /*\n   * Notification:getBodyLocalizationKey() Obtains the key of the displayed content of a message\n   */\n  getBodyLocalizationKey() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.BODYLOCALIZATIONKEY];\n  }\n\n  /*\n   * Notification:getBodyLocalizationArgs() Obtains variable parameters of the displayed content of a message\n   */\n  getBodyLocalizationArgs() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.BODYLOCALIZATIONARGS];\n  }\n\n  /*\n   * Notification:getBody() Obtains the body of a message\n   */\n  getBody() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.BODY];\n  }\n\n  /*\n   * Notification:getIcon() Obtains the icon of a message\n   */\n  getIcon() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ICON];\n  }\n\n  /*\n   * Notification:getSound() Obtains the sound from a message\n   */\n  getSound() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.SOUND];\n  }\n\n  /*\n   * Notification:getTag() Obtains the tag from a message for message overwriting\n   */\n  getTag() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.TAG];\n  }\n\n  /*\n   * Notification:getColor() Obtains the colors of icons in a message\n   */\n  getColor() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.COLOR];\n  }\n\n  /*\n   * Notification:getClickAction() Obtains actions triggered by message tapping\n   */\n  getClickAction() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.CLICKACTION];\n  }\n\n  /*\n   * Notification:getChannelId() Obtains IDs of channels that support the display of messages\n   */\n  getChannelId() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.CHANNELID];\n  }\n\n  /*\n   * Notification:getImageUrl() Obtains the image URL from a message\n   */\n  getImageUrl() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.IMAGEURL];\n  }\n\n  /*\n   * Notification:getLink() Obtains the URL to be accessed from a message\n   */\n  getLink() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.LINK];\n  }\n\n  /*\n   * Notification:getNotifyId() Obtains the unique ID of a message\n   */\n  getNotifyId() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.NOTIFYID];\n  }\n\n  /*\n   * Notification:getWhen()\n   */\n  getWhen() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.WHEN];\n  }\n\n  /*\n   * Notification:getLightSettings()\n   */\n  getLightSettings() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.LIGHTSETTINGS];\n  }\n\n  /*\n   * Notification:getBadgeNumber()\n   */\n  getBadgeNumber() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.BADGENUMBER];\n  }\n\n  /*\n   * Notification:getImportance()\n   */\n  getImportance() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.IMPORTANCE];\n  }\n\n  /*\n   * Notification:getTicker()\n   */\n  getTicker() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.TICKER];\n  }\n\n  /*\n   * Notification:getVibrateConfig()\n   */\n  getVibrateConfig() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.VIBRATECONFIG];\n  }\n\n  /*\n   * Notification:getVisibility()\n   */\n  getVisibility() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.VISIBILITY];\n  }\n\n  /*\n   * Notification:getIntentUri()\n   */\n  getIntentUri() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.INTENTURI];\n  }\n\n  /*\n   * Notification:isAutoCancel()\n   */\n  isAutoCancel() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ISAUTOCANCEL];\n  }\n\n  /*\n   * Notification:getIntentUri()\n   */\n  isLocalOnly() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ISLOCALONLY];\n  }\n\n  /*\n   * Notification:isDefaultLight()\n   */\n  isDefaultLight() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ISDEFAULTLIGHT];\n  }\n\n  /*\n   * Notification:isDefaultSound()\n   */\n  isDefaultSound() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ISDEFAULTSOUND];\n  }\n\n  /*\n   * Notification:isDefaultVibrate()\n   */\n  isDefaultVibrate() {\n    return this.remoteMsg[RNRemoteMessage.NOTIFICATION.ISDEFAULTVIBRATE];\n  }\n}\n"
  },
  {
    "path": "react-native-hms-push/src/RemoteMessageBuilder.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const RemoteMessageBuilder = {\n  TO: \"to\",\n  MESSAGE_ID: \"messageId\",\n  MESSAGE_TYPE: \"messageType\",\n  TTL: \"ttl\",\n  COLLAPSE_KEY: \"collapseKey\",\n  RECEIPT_MODE: \"receiptMode\",\n  SEND_MODE: \"sendMode\",\n  DATA: \"data\",\n};\n"
  },
  {
    "path": "react-native-hms-push/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-push\" {\n\n    export const HmsPushInstanceId = {\n        getId(): Promise<Object>;,\n        getAAID(): Promise<Object>;,\n        getCreationTime(): Promise<Object>;,\n        deleteAAID(): Promise<Object>;,\n        getToken(scope: string): Promise<Object>;,\n        deleteToken(scope: string): Promise<Object>;,\n        getTokenWithSubjectId(subjectId: string): Promise<string>;,\n        getTokenWithSubjectId(subjectId: string): Promise<boolean>;\n    }\n\n    export const HmsPushOpenDevice = {\n        getOdid(): Promise<Object>;\n    }\n\n    export const HmsPushMessaging = {\n        isAutoInitEnabled(): Promise<Object>;,\n        setAutoInitEnabled(isEnabled: boolean): Promise<Object>;,\n        subscribe(topic: string): Promise<Object>;,\n        unsubscribe(topic: string): Promise<Object>;,\n        turnOnPush(): Promise<Object>;,\n        turnOffPush(): Promise<Object>;,\n        getInitialNotification(): Promise<Object>;,\n        enableLogger(): Promise<Object>;,\n        disableLogger(): Promise<Object>;,\n        sendRemoteMessage(uplinkMessage: RemoteMessageBuilder): Promise<Object>;,\n        setBackgroundMessageHandler(callback: Function): Promise<Object>;,\n    }\n\n    export declare enum RemoteMessageBuilder {\n        TO = \"to\",\n        MESSAGE_ID = \"messageId\",\n        MESSAGE_TYPE = \"messageType\",\n        TTL = \"ttl\",\n        COLLAPSE_KEY = \"collapseKey\",\n        RECEIPT_MODE = \"receiptMode\",\n        SEND_MODE = \"sendMode\",\n        DATA = \"data\",\n    }\n\n    export const HmsPushProfile = {\n        isSupportProfile(): Promise<boolean>;,\n        addProfile(type: Type, profileId: string): Promise<boolean>;,\n        addProfileWithSubjectId(subjectId: string , type: Type , profileId: string): Promise<boolean>;,\n        deleteProfile(profileId: string): Promise<boolean>;,\n        deleteProfileWithSubjectId(subjectId: string, profileId: string): Promise<boolean>;,\n        Type\n    }\n\n    export declare enum Type {\n        HUAWEI_PROFILE = 1,\n        CUSTOM_PROFILE = 2,\n        UNDEFINED_PROFILE = -1\n    }\n\n    export const HmsPushEvent = {\n        onRemoteMessageReceived(callback: Function): void;,\n        onTokenReceived(callback: Function): void;,\n        onTokenError(callback: Function): void;,\n        onNotificationOpenedApp(callback: Function): void;,\n        onLocalNotificationAction(callback: Function): void;,\n        onPushMessageSent(callback: Function): void;,\n        onPushMessageSentError(callback: Function): void;,\n        onPushMessageSentDelivered(callback: Function): void;,\n        onMultiSenderTokenReceived(callback: Function): void;,\n        onMultiSenderTokenError(callback: Function): void;\n    }\n\n    export const HmsLocalNotification = {\n        localNotification(notification: Object): Promise<Object>;,\n        localNotificationSchedule(notification: Object): Promise<Object>;,\n        cancelAllNotifications(): Promise<Object>;,\n        cancelNotifications(): Promise<Object>;,\n        cancelScheduledNotifications(): Promise<Object>;,\n        cancelNotificationsWithId(ids: string[]): Promise<Object>;,\n        cancelNotificationsWithIdTag(idsAndTags: Object[]): Promise<Object>;,\n        cancelNotificationsWithTag(tag: string): Promise<Object>;,\n        getNotifications(): Promise<Object>;,\n        getScheduledNotifications(): Promise<Object>;,\n        getChannels(): Promise<Object>;,\n        channelExists(channeld: string): Promise<Object>;,\n        channelBlocked(channeld: string): Promise<Object>;,\n        deleteChannel(channeld: string): Promise<Object>;,\n        Attr,\n        Priority,\n        Visibility,\n        Importance,\n        RepeatType\n    }\n\n    export declare enum Attr {\n        id = \"id\",\n        message =  \"message\",\n        fireDate =  \"fireDate\",\n        title =  \"title\",\n        ticker =  \"ticker\",\n        showWhen =  \"showWhen\",\n        autoCancel =  \"autoCancel\",\n        largeIcon =  \"largeIcon\",\n        largeIconUrl =  \"largeIconUrl\",\n        smallIcon =  \"smallIcon\",\n        bigText =  \"bigText\",\n        subText =  \"subText\",\n        bigPictureUrl =  \"bigPictureUrl\",\n        shortcutId =  \"shortcutId\",\n        number =  \"number\",\n        channelId =  \"channelId\",\n        channelName =  \"channelName\",\n        channelDescription =  \"channelDescription\",\n        color =  \"color\",\n        group =  \"group\",\n        groupSummary =  \"groupSummary\",\n        playSound =  \"playSound\",\n        soundName =  \"soundName\",\n        vibrate =  \"vibrate\",\n        vibrateDuration =  \"vibrateDuration\",\n        actions =  \"actions\",\n        invokeApp =  \"invokeApp\",\n        tag =  \"tag\",\n        repeatType =  \"repeatType\",\n        repeatTime =  \"repeatTime\",\n        ongoing =  \"ongoing\",\n        allowWhileIdle = \"allowWhileIdle\",\n        dontNotifyInForeground =  \"dontNotifyInForeground\",\n        priority =  \"priority\",\n        importance =  \"importance\",\n        visibility =  \"visibility\",\n        data =  \"data\",\n    }\n\n    export declare enum Priority {\n        max = \"max\",\n        high = \"high\",\n        default = \"default\",\n        low = \"low\",\n        min = \"min\",\n    }\n\n    export declare enum Importance {\n        max = \"max\",\n        high = \"high\",\n        default = \"default\",\n        low = \"low\",\n        min = \"min\",\n        none = \"none\",\n        unspecified = \"unspecified\",\n    }\n\n    export declare enum RepeatType {\n        hour = \"hour\",\n        minute = \"minute\",\n        day = \"day\",\n        week = \"week\",\n        customTime = \"custom_time\",\n    }\n\n    export declare enum HmsPushResultCode {\n        SUCCESS = \"0\",\n        ERROR = \"-1\",\n        NULL_BUNDLE = \"333\",\n        RESULT_FAILURE = \"907122045\",\n        PARAMETER_IS_EMPTY = \"907122042\",\n        ERROR_NO_TOKEN = \"907122030\",\n        ERROR_NO_NETWORK = \"907122031\",\n        ERROR_TOKEN_INVALID = \"907122032\",\n        ERROR_SERVICE_NOT_AVAILABLE = \"907122046\",\n        ERROR_PUSH_SERVER = \"907122047\",\n        ERROR_TOPIC_EXCEED = \"907122034\",\n        ERROR_TOPIC_SEND = \"907122035\",\n        ERROR_NO_RIGHT = \"907122036\",\n        ERROR_GET_TOKEN_ERR = \"907122037\",\n        ERROR_STORAGE_LOCATION_EMPTY = \"907122038\",\n        ERROR_NOT_ALLOW_CROSS_APPLY = \"907122053\",\n        ERROR_SIZE = \"907122041\",\n        ERROR_TOO_MANY_MESSAGES = \"907122043\",\n        ERROR_TTL_EXCEEDED = \"907122044\",\n        ERROR_HMS_CLIENT_API = \"907122048\",\n        ERROR_OPERATION_NOT_SUPPORTED = \"907122049\",\n        ERROR_MAIN_THREAD = \"907122050\",\n        ERROR_HMS_DEVICE_AUTH_FAILED_SELF_MAPPING = \"907122051\",\n        ERROR_BIND_SERVICE_SELF_MAPPING = \"907122052\",\n        ERROR_AUTO_INITIALIZING = \"907122054\",\n        ERROR_ARGUMENTS_INVALID = \"907135000\",\n        ERROR_INTERNAL_ERROR = \"907135001\",\n        ERROR_NAMING_INVALID = \"907135002\",\n        ERROR_CLIENT_API_INVALID = \"907135003\",\n        ERROR_EXECUTE_TIMEOUT = \"907135004\",\n        ERROR_NOT_IN_SERVICE = \"907135005\",\n        ERROR_SESSION_INVALID = \"907135006\",\n        ERROR_API_NOT_SPECIFIED = \"1002\",\n        ERROR_GET_SCOPE_ERROR = \"907135700\",\n        ERROR_SCOPE_LIST_EMPTY = \"907135701\",\n        ERROR_CERT_FINGERPRINT_EMPTY = \"907135702\",\n        ERROR_PERMISSION_LIST_EMPTY = \"907135703\",\n        ERROR_AUTH_INFO_NOT_EXIST = \"6002\",\n        ERROR_CERT_FINGERPRINT_ERROR = \"6003\",\n        ERROR_PERMISSION_NOT_EXIST = \"6004\",\n        ERROR_PERMISSION_NOT_AUTHORIZED = \"6005\",\n        ERROR_PERMISSION_EXPIRED = \"6006\",\n    }\n\n    export class RNRemoteMessage  {\n        getCollapseKey(): string;\n        getData(): string;\n        getDataOfMap(): string;\n        getMessageId(): string;\n        getMessageType(): string;\n        getOriginalUrgency(): number;\n        getUrgency(): number;\n        getTtl(): number;\n        getSentTime(): number;\n        getTo(): string;\n        getFrom(): string;\n        getToken(): string;\n        getAnalyticInfo(): string;\n        getAnalyticInfoMap(): Object;\n        getNotificationTitle(): string;\n        getTitleLocalizationKey(): string;\n        getTitleLocalizationArgs(): Object;\n        getBodyLocalizationKey(): string;\n        getBodyLocalizationArgs(): Object;\n        getBody(): string;\n        getIcon(): string;\n        getSound(): string;\n        getTag(): string;\n        getColor(): string;\n        getClickAction(): string;\n        getChannelId(): string;\n        getImageUrl(): Object;\n        getLink(): Object;\n        getNotifyId(): number;\n        isDefaultLight(): boolean;\n        isDefaultSound(): boolean;\n        isDefaultVibrate(): boolean;\n        getWhen(): number;\n        getLightSettings(): number[];\n        getBadgeNumber(): number;\n        isAutoCancel(): boolean;\n        getImportance(): number;\n        getTicker(): string;\n        getVibrateConfig(): number[];\n        getVisibility(): number;\n        getIntentUri(): string;\n        parseMsgAllAttribute(): string;\n    }\n\n    export declare enum RNRemoteMessage {\n        PRIORITY_UNKNOWN = 0,\n        PRIORITY_HIGH = 1,\n        PRIORITY_NORMAL = 2,\n        COLLAPSEKEY = \"collapseKey\",\n        DATA = \"data\",\n        DATAOFMAP = \"dataOfMap\",\n        MESSAGEID = \"messageId\",\n        MESSAGETYPE = \"messageType\",\n        ORIGINALURGENCY = \"originalUrgency\",\n        URGENCY = \"urgency\",\n        TTL = \"ttl\",\n        SENTTIME = \"sentTime\",\n        TO = \"to\",\n        FROM = \"from\",\n        TOKEN = \"token\",\n        ANALYTIC_INFO = \"analyticInfo\",\n        ANALYTIC_INFO_MAP = \"analyticInfoMap\",\n    }\n\n\n}"
  },
  {
    "path": "react-native-hms-push/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {\n    NativeModules,\n    NativeEventEmitter,\n    AppRegistry,\n    Platform,\n} from \"react-native\";\n\nconst {\n    HmsPushInstanceId,\n    HmsLocalNotification,\n    HmsPushMessaging,\n    HmsPushOpenDevice,\n    HmsPushProfile,\n} = NativeModules;\n\nimport ProfileType from \"./HmsPushProfileTypes\";\n\nif (Platform.OS === \"android\") {\n    HmsPushProfile.Type = ProfileType;\n}\n\nimport {\n    Importance,\n    Priority,\n    RepeatType,\n    Visibility,\n} from \"./LocalNotification\";\n\nPlatform.OS === \"android\" &&\n    Object.assign(HmsLocalNotification, {\n        Importance: { ...Importance },\n        Priority: { ...Priority },\n        RepeatType: { ...RepeatType },\n        Visibility: { ...Visibility },\n        Attr: {\n            id: \"id\",\n            message: \"message\",\n            fireDate: \"fireDate\",\n            title: \"title\",\n            ticker: \"ticker\",\n            showWhen: \"showWhen\",\n            autoCancel: \"autoCancel\",\n            largeIcon: \"largeIcon\",\n            largeIconUrl: \"largeIconUrl\",\n            smallIcon: \"smallIcon\",\n            bigText: \"bigText\",\n            subText: \"subText\",\n            bigPictureUrl: \"bigPictureUrl\",\n            shortcutId: \"shortcutId\",\n            number: \"number\",\n            channelId: \"channelId\",\n            channelName: \"channelName\",\n            channelDescription: \"channelDescription\",\n            color: \"color\",\n            group: \"group\",\n            groupSummary: \"groupSummary\",\n            playSound: \"playSound\",\n            soundName: \"soundName\",\n            vibrate: \"vibrate\",\n            vibrateDuration: \"vibrateDuration\",\n            actions: \"actions\",\n            invokeApp: \"invokeApp\",\n            tag: \"tag\",\n            repeatType: \"repeatType\",\n            repeatTime: \"repeatTime\",\n            ongoing: \"ongoing\",\n            allowWhileIdle: \"allowWhileIdle\",\n            dontNotifyInForeground: \"dontNotifyInForeground\",\n            priority: \"priority\",\n            importance: \"importance\",\n            visibility: \"visibility\",\n            data: \"data\",\n        },\n    });\n\nimport { HmsPushEvent } from \"./HmsPushEvent\";\n\nHmsPushEvent.onRemoteMessageReceived = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.REMOTE_DATA_MESSAGE_RECEIVED,\n        result\n    );\n\nHmsPushEvent.onTokenReceived = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_TOKEN_RECEIVED_EVENT,\n        result\n    );\n\nHmsPushEvent.onMultiSenderTokenReceived = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_MULTI_SENDER_TOKEN_RECEIVED_EVENT,\n        result\n    );\n\nHmsPushEvent.onTokenError = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_TOKEN_ERROR_EVENT,\n        result\n    );\n\nHmsPushEvent.onMultiSenderTokenError = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_MULTI_SENDER_TOKEN_ERROR_EVENT,\n        result\n    );\n\nHmsPushEvent.onPushMessageSent = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_PUSH_MESSAGE_SENT,\n        result\n    );\n\nHmsPushEvent.onPushMessageSentError = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_PUSH_MESSAGE_SENT_ERROR,\n        result\n    );\n\nHmsPushEvent.onPushMessageSentDelivered = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.ON_PUSH_MESSAGE_SENT_DELIVERED,\n        result\n    );\n\nHmsPushEvent.onLocalNotificationAction = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.LOCAL_NOTIFICATION_ACTION_EVENT,\n        result\n    );\n\nHmsPushEvent.onNotificationOpenedApp = (result) =>\n    new NativeEventEmitter().addListener(\n        HmsPushEvent.NOTIFICATION_OPENED_EVENT,\n        result\n    );\n\nlet backgroundMessageHandler;\nAppRegistry.registerHeadlessTask(\"HMSPushHeadlessTask\", () => {\n    if (!backgroundMessageHandler) {\n        console.warn(\n            \"There is not any handler method. Use 'setBackgroundMessageHandler' method.\"\n        );\n        return () => Promise.resolve();\n    }\n    return (remoteMessage) => backgroundMessageHandler(remoteMessage);\n});\n\nif (Platform.OS === \"android\") {\n    HmsPushMessaging.setBackgroundMessageHandler = (handler) => {\n        if (handler && typeof handler !== \"function\") {\n            console.error(\"backgroundMessageHandler must be a function.\");\n        }\n        backgroundMessageHandler = handler;\n        console.log(\"backgroundMessageHandler registered ✔\");\n    };\n}\n\nexport { RNRemoteMessage } from \"./RNRemoteMessage\";\nexport { HmsPushResultCode } from \"./HmsPushResultCode\";\nexport { RemoteMessageBuilder } from \"./RemoteMessageBuilder\";\n\nexport {\n    HmsPushInstanceId,\n    HmsPushOpenDevice,\n    HmsLocalNotification,\n    HmsPushMessaging,\n    HmsPushEvent,\n    HmsPushProfile,\n};\n\nexport default HmsPushInstanceId;\n"
  },
  {
    "path": "react-native-hms-push-fcm/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-push-fcm/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Push FCM</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-push-fcm\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-push-fcm?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-push-fcm\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-push-fcm?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-push-fcm.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nReact Native Push FCM Plugin enables communication between the HMS Core Push SDK and React Native platform. This plugin exposes all functionality provided by the HMS Core Push FCM SDK.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/aggr-third-parties-0000001238262405?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-push-fcm\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparedevenv-0000001050155838?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References-V1/push-fcm-overview-0000001238655297-V1?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENCE) \n"
  },
  {
    "path": "react-native-hms-push-fcm/android/.gradle/6.3/gc.properties",
    "content": ""
  },
  {
    "path": "react-native-hms-push-fcm/android/.gradle/buildOutputCleanup/cache.properties",
    "content": "#Tue Dec 21 19:01:08 TRT 2021\ngradle.version=6.3\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/.gradle/vcs-1/gc.properties",
    "content": ""
  },
  {
    "path": "react-native-hms-push-fcm/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        jcenter()\n        google()\n\n        maven { url 'https://developer.huawei.com/repo/' }\n\n    }\n\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath(\"com.huawei.agconnect:agcp:1.4.2.301\")\n    }\n}\n\nandroid {\n    compileSdkVersion 30\n    buildToolsVersion \"30.0.3\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 30\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    jcenter()\n    google()\n\n    maven { url 'https://developer.huawei.com/repo/' }\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n        // for import com.facebook.react.ReactApplication;\n    }\n\n}\n\ndependencies {\n    implementation fileTree(include: ['*.jar'], dir: 'libs')\n    implementation 'com.facebook.react:react-native:+'\n    implementation 'com.huawei.hms:push-fcm:6.3.0.304'\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-push-fcm/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/local.properties",
    "content": "## This file must *NOT* be checked into Version Control Systems,\n# as it contains information specific to your local configuration.\n#\n# Location of the SDK. This is only used by Gradle.\n# For customization when using a Version Control System, please read the\n# header note.\n#Tue Dec 14 09:48:18 TRT 2021\nsdk.dir=C\\:\\\\Users\\\\o00628171\\\\AppData\\\\Local\\\\Android\\\\Sdk\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"com.huawei.hms.rn.push.fcm\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/src/main/java/com/huawei/hms/rn/push/fcm/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.fcm;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Push-FCM\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"6.3.0.304\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode, final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/src/main/java/com/huawei/hms/rn/push/fcm/HMSPushFCM.java",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.fcm;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.huawei.hms.push.plugin.base.proxy.ProxySettings;\nimport com.huawei.hms.push.plugin.fcm.FcmPushProxy;\n\npublic class HMSPushFCM extends ReactContextBaseJavaModule {\n\n    private final ReactApplicationContext reactContext;\n    private HMSLogger hmsLogger;\n\n    public HMSPushFCM(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSPushFCM\";\n    }\n\n    @ReactMethod\n    public void init(final Promise promise) {\n        boolean result = FcmPushProxy.init(reactContext);\n        promise.resolve(result);\n    }\n\n    @ReactMethod\n    public void setCountryCode(String countryCode, Promise promise){\n        ProxySettings.setCountryCode(reactContext,countryCode);\n        promise.resolve(\"success\");\n    }\n\n    @ReactMethod\n    public void isProxyInitEnabled(final Promise promise) {\n        boolean isProxyInitEnabled = FcmPushProxy.isProxyInitEnabled(reactContext);\n        promise.resolve(isProxyInitEnabled);\n    }\n\n    @ReactMethod\n    public void enableLogger(final Promise promise){\n        hmsLogger.enableLogger();\n        promise.resolve(true);\n    }\n\n    @ReactMethod\n    public void disableLogger(final Promise promise){\n        hmsLogger.disableLogger();\n        promise.resolve(true);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/android/src/main/java/com/huawei/hms/rn/push/fcm/HmsPushFCMPackage.java",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.fcm;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.JavaScriptModule;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HmsPushFCMPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n\n        List<NativeModule> modules = new ArrayList<>();\n\n        modules.add(new HMSPushFCM(reactContext));\n\n        return modules;\n    }\n\n    // Deprecated from RN 0.47\n    public List<Class<? extends JavaScriptModule>> createJSModules() {\n        return Collections.emptyList();\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n!debug.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n\n\n.history\n.vscode\n.favorites.json\nandroid/.settings\nandroid/app/.settings\nandroid/.project\nandroid/app/.project\nandroid/app/app.iml\nandroid/local.properties\n.buckconfig\nandroid/app/.classpath\n\nagconnect-services.json\n*.jks\n*.tmp"
  },
  {
    "path": "react-native-hms-push-fcm/example/App.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\n\nimport React from \"react\";\n\nimport MainPage from \"./src/MainPage\";\nexport default class App extends React.Component {\n  render() {\n    return <MainPage />;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-push-fcm/example/README.md",
    "content": "# React-Native HMS Push FCM- Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Push FCM Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). You may need to change the package name on AndroidManifest.xml and MainActivity.java respectively.\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\" // For ex: \"com.example.mypushproject\"\n      <!-- Other configurations ... -->\n  }\n  ```\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1)  and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html#2?ha_source=hms1) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n        }\n    }\n```\n\n### Enabling the Huawei Push FCM Kit Service \n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Growing > Push FCM Kit** and click **Enable Now** to enable the Huawei Push FCM Kit Service. You can also check **Manage APIs** tab on the **Project Settings** page for the enabled HMS services on your app.\n\n**Step 2:** Go to **Project Setting > General information** page, under the **App information** field, click **agconnect-services.json** to download the configuration file.\n\n**Step 3:** Copy the **agconnect-services.json** file to the **example/android/app/** directory of the project. \n\n### Build & Run the project\n\n**Step 1:** Run the following command to install and update package info.\n```\n[project_path]> npm install @hmscore/react-native-hms-push-fcm\n``` \n**Step 2:** Run the following command to start the demo app.\n```\n[project_path]> npm run android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Push FCM - Demo is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: \"com.huawei.agconnect\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n        entryFile   : \"index.js\",\n    enableHermes: false,  // clean and rebuild if changing\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n         applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n           storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n\n    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.301'\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses\n\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:usesCleartextTraffic=\"true\"\n        tools:targetApi=\"28\"\n        tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.push.fcm.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.VIBRATE\" />\n    <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application\n        android:name=\".MainApplication\"\n        android:label=\"RN-HMS Push FCM Demo\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:roundIcon=\"@mipmap/ic_launcher\"\n        android:allowBackup=\"false\"\n        android:theme=\"@style/AppTheme\"\n        android:usesCleartextTraffic=\"true\">\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"RN-HMS Push FCM Demo\"\n            android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:launchMode=\"singleTask\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\" />\n\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"app\" />\n            </intent-filter>\n\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n\n        <meta-data\n            android:name=\"push_kit_proxy_init_enabled\"\n            android:value=\"true\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/src/main/java/com/huawei/hms/rn/push/fcm/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.fcm.demo;\n\nimport android.os.Bundle;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsPushFCM Demo\";\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/src/main/java/com/huawei/hms/rn/push/fcm/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.push.fcm.demo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                // Packages that cannot be autolinked yet can be added manually here, for example:\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, /* native exopackage */ false);\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/app/src/main/res/values/styles.xml",
    "content": "<!--\n    Copyright 2020. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n-->\n\n<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"28.0.3\"\n        minSdkVersion = 19\n        compileSdkVersion = 28\n        targetSdkVersion = 28\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n\n        classpath 'com.huawei.agconnect:agcp:1.4.2.301'\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsPushFCM Demo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/app.json",
    "content": "{\n  \"name\": \"RNHmsPushFCM Demo\",\n  \"displayName\": \"RNHmsPushFCM Demo\"\n}"
  },
  {
    "path": "react-native-hms-push-fcm/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/index.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry } from \"react-native\";\nimport App from \"./App\";\nimport { name as appName } from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n\n\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-push-fcm-demo\",\n  \"version\": \"6.3.0-304\",\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\",\n    \"@hmscore/react-native-hms-push-fcm\": \"6.3.0-304\",\n    \"@hmscore/react-native-hms-push\": \"6.5.0-300\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/runtime\": \"^7.6.2\",\n    \"@react-native-community/eslint-config\": \"^0.0.5\",\n    \"babel-jest\": \"^24.9.0\",\n    \"eslint\": \"^6.5.1\",\n    \"jest\": \"^24.9.0\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\",\n    \"ncp\": \"^2.0.0\",\n    \"react-test-renderer\": \"16.9.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-push-fcm/example/src/MainPage.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n  View,\n  Text,\n  ScrollView,\n  TouchableOpacity,\n  ToastAndroid,\n} from \"react-native\";\n\nimport HMSPushFCM from \"@hmscore/react-native-hms-push-fcm\";\n\nimport {\n  HmsPushEvent,\n  HmsPushInstanceId,\n} from \"@hmscore/react-native-hms-push\";\n\nimport { styles } from \"./styles\";\n\nexport default class App extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      log: \"\",\n      topic: \"\"\n    };\n\n    this.componentDidMount = this.componentDidMount.bind(this);\n  }\n\n  componentDidMount() {\n    this.onTokenReceivedListener = HmsPushEvent.onTokenReceived((result) => {\n      this.log(\"onTokenReceived\", result);\n    });\n\n    this.onTokenErrorListener = HmsPushEvent.onTokenError((result) => {\n      this.log(\"onTokenError\", result);\n    });\n\n    this.onMultiSenderTokenReceivedListener = HmsPushEvent.onMultiSenderTokenReceived(\n      (result) => {\n        this.log(\"onMultiSenderTokenReceived\", result);\n      }\n    );\n\n    this.onMultiSenderTokenErrorListener = HmsPushEvent.onMultiSenderTokenError(\n      (result) => {\n        this.log(\"onMultiSenderTokenError\", result);\n      }\n    );\n  }\n\n  componentWillUnmount() {\n    this.onTokenReceivedListener.remove();\n    this.onTokenErrorListener.remove();\n    this.onMultiSenderTokenReceivedListener.remove();\n    this.onMultiSenderTokenErrorListener.remove();\n  }\n\n  log(tag, msg) {\n    this.setState(\n      {\n        log: `[${tag}]: ${JSON.stringify(msg, \"\\n\", 4)} \\n ${this.state.log}`,\n      },\n      this.toast(JSON.stringify(msg, \"\\n\", 4))\n    );\n\n    console.log(tag, msg);\n  }\n\n  toast = (msg) => {\n    ToastAndroid.show(msg, ToastAndroid.SHORT);\n  };\n\n  clearLog() {\n    this.setState({\n      log: \"\",\n    });\n  }\n\n  initFCM() {\n    HMSPushFCM.init()\n      .then((result) => {\n        this.log(\"init\", result);\n      })\n      .catch((err) => {\n        alert(\"[init] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  setCountryCode(countryCode) {\n    HMSPushFCM.setCountryCode(countryCode)\n      .then((result) => {\n        this.log(\"setCountryCode\", result);\n      })\n      .catch((err) => {\n        alert(\"[setCountryCode] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  isProxyInitEnabled() {\n    HMSPushFCM.isProxyInitEnabled()\n      .then((result) => {\n        this.log(\"isProxyInitEnabled\", result);\n      })\n      .catch((err) => {\n        alert(\"[isProxyInitEnabled] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getAAID() {\n    HmsPushInstanceId.getAAID()\n      .then((result) => {\n        this.log(\"getAAID\", result);\n      })\n      .catch((err) => {\n        alert(\"[getAAID] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  getToken() {\n    HmsPushInstanceId.getToken(\"\")\n      .then((result) => {\n        this.log(\"getToken\", result);\n      })\n      .catch((err) => {\n        alert(\"[getToken] Error/Exception: \" + JSON.stringify(err));\n      });\n  }\n\n  render() {\n    return (\n      <ScrollView>\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.tertiaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.initFCM()}\n          >\n            <Text style={styles.buttonText}>Init FCM</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.secondaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.isProxyInitEnabled()}\n          >\n            <Text style={styles.buttonText}>Is Proxy Enabled</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={[styles.container, styles.containerSlim]}>\n          <TouchableOpacity\n            style={[\n              styles.buttonContainer,\n              styles.tertiaryButton,\n              styles.buttonContainerSlim,\n            ]}\n            onPress={() => this.setCountryCode(\"CH\")}\n          >\n            <Text style={styles.buttonText}>Set Country Code</Text>\n          </TouchableOpacity>\n        </View>\n\n        <View style={styles.container}>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getToken();\n            }}\n          >\n            <Text style={styles.buttonText}>Get Token</Text>\n          </TouchableOpacity>\n          <TouchableOpacity\n            style={[styles.buttonContainer, styles.primaryButton]}\n            onPress={() => {\n              this.getAAID();\n            }}\n          >\n            <Text style={styles.buttonText}>Get AAID</Text>\n          </TouchableOpacity>\n        </View>\n\n        <ScrollView style={styles.containerShowResultMsg}>\n          <Text>{this.state.log}</Text>\n        </ScrollView>\n      </ScrollView>\n    );\n  }\n}\n"
  },
  {
    "path": "react-native-hms-push-fcm/example/src/styles.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n  containerShowResultMsg: {\n    flexDirection: \"row\",\n    margin: 15,\n    borderTopWidth: 1,\n    paddingTop: 10,\n    borderColor: \"#aaa\",\n  },\n\n  inputTopic: {\n    textAlign: \"center\",\n    padding: 10,\n    width: \"100%\",\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n    borderWidth: 1,\n    borderRadius: 5,\n    borderColor: \"#aaa\",\n  },\n  width70: {\n    width: \"70%\",\n  },\n  width35: {\n    width: \"35%\",\n  },\n  width30: {\n    width: \"30%\",\n  },\n  paddingTop20: {\n    paddingTop: 12,\n  },\n\n  imageView: {\n    flex: 1,\n    backgroundColor: \"#fff\",\n    flexDirection: \"column\",\n  },\n  image: {\n    justifyContent: \"flex-start\",\n    width: 400,\n    height: 80,\n  },\n\n  paddingX: {\n    paddingTop: 75,\n  },\n\n  container: {\n    margin: 5,\n    flex: 1,\n    flexDirection: \"row\",\n  },\n\n  containerSlim: {\n    marginBottom: 0,\n    marginTop: 2,\n  },\n\n  buttonContainer: {\n    flex: 1,\n    margin: 5,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    height: 35,\n    borderRadius: 5,\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: 3,\n    },\n    shadowOpacity: 0.27,\n    shadowRadius: 4.65,\n    elevation: 6,\n  },\n\n  buttonContainerSlim: {\n    marginBottom: 2,\n    marginTop: 2,\n  },\n\n  primaryButton: {\n    backgroundColor: \"#c9c9c9\",\n  },\n\n  secondaryButton: {\n    backgroundColor: \"#5ea6ff\",\n  },\n\n  tertiaryButton: {\n    backgroundColor: \"#ff825c\",\n  },\n\n  buttonText: {\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n  },\n\n  buttonTextSmall: {\n    fontSize: 16,\n  },\n\n  buttonTextSmallest: {\n    fontSize: 14,\n  },\n\n  fontSizeSmall: {\n    fontSize: 16,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-push-fcm/index.js",
    "content": "/*\n    Copyright 2020-2021. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\n\nconst { HMSPushFCM } = NativeModules;\n\nexport default HMSPushFCM;\n"
  },
  {
    "path": "react-native-hms-push-fcm/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-push-fcm\",\n  \"title\": \"React Native HMS Push FCM Kit\",\n  \"description\": \"React Native HMS Push FCM Kit\",\n  \"version\": \"6.3.0-304\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-push-fcm\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-push\",\n    \"react-native-notification\",\n    \"hms-push-fcm\",\n    \"hms-notification\",\n    \"huawei-push-fcm\",\n    \"push-fcm-kit\",\n    \"fcm\",\n    \"push-notification\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"index.js\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENCE\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"16.6.0\",\n    \"react-native\": \"0.60.0\"\n  }\n}"
  },
  {
    "path": "react-native-hms-safetydetect/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-safetydetect/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Safety Detect</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-safetydetect\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-safetydetect?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-safetydetect\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-safetydetect?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-safetydetect.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n----\n\nHUAWEI Safety Detect Kit enables communication between Huawei Safety Detect SDK and React Native platform. \n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001053475348?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-safetydetect\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-dev-env-0000001052646231?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001052765437?ha_source=hms1)\n\n### Additional Topics\n\n- [Configuring App Information in AppGallery Connect](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/config-agc-0000001053006204?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'com.huawei.agconnect'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        jcenter()\n        google()\n\n        maven { url 'https://developer.huawei.com/repo/' }\n\n    }\n\n    dependencies {\n        classpath (\"com.android.tools.build:gradle:3.6.0\")\n        classpath (\"com.huawei.agconnect:agcp:1.6.0.300\")\n    }\n}\n\nandroid {\n    compileSdkVersion 31\n    buildToolsVersion = \"30.0.3\"\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 31\n        versionCode 1\n        versionName \"1.0\"\n    }\n    lintOptions {\n        abortOnError false\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven { url \"$rootDir/../node_modules/react-native/android\" }\n    maven { url \"$rootDir/../node_modules/jsc-android/dist\"}\n    maven { url 'https://developer.huawei.com/repo/' }\n    jcenter()\n    google()\n\n}\n\ndependencies {\n    implementation \"com.facebook.react:react-native:+\"\n    implementation 'com.huawei.hms:safetydetect:6.7.0.300'\n}"
  },
  {
    "path": "react-native-hms-safetydetect/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true"
  },
  {
    "path": "react-native-hms-safetydetect/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.safetydetect\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/HMSSafetyDetectPackage.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\nimport com.huawei.hms.rn.safetydetect.appcheck.AppCheckModule;\nimport com.huawei.hms.rn.safetydetect.huaweiapi.HuaweiApiModule;\nimport com.huawei.hms.rn.safetydetect.sysintegrity.SysIntegrityModule;\nimport com.huawei.hms.rn.safetydetect.urlcheck.UrlCheckModule;\nimport com.huawei.hms.rn.safetydetect.userdetect.UserDetectModule;\nimport com.huawei.hms.rn.safetydetect.wifidetect.WifiDetectModule;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class HMSSafetyDetectPackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        return Arrays.<NativeModule>asList(\n                new HuaweiApiModule(reactContext),\n                new SysIntegrityModule(reactContext),\n                new UserDetectModule(reactContext),\n                new WifiDetectModule(reactContext),\n                new UrlCheckModule(reactContext),\n                new AppCheckModule(reactContext)\n        );\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/appcheck/AppCheckModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.appcheck;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\n\nimport java.util.Map;\n\npublic class AppCheckModule extends ReactContextBaseJavaModule {\n    private final AppCheckService appCheckService;\n\n    public AppCheckModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.appCheckService = new AppCheckService(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSAppsCheck\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return appCheckService.getConstants();\n    }\n\n    @ReactMethod\n    public void getMaliciousAppsList(Promise promise) {\n        appCheckService.invokeGetMaliciousApps(promise);\n    }\n\n    @ReactMethod\n    public void enableAppsCheck(Promise promise) {\n        appCheckService.enableAppsCheck(promise);\n    }\n\n    @ReactMethod\n    public void isVerifyAppsCheck(Promise promise) {\n        appCheckService.isVerifyAppsCheck(promise);\n    }\n}"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/appcheck/AppCheckService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.appcheck;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\nimport com.huawei.hms.support.api.entity.core.CommonCode;\nimport com.huawei.hms.support.api.entity.safetydetect.MaliciousAppsData;\nimport com.huawei.hms.support.api.entity.safetydetect.MaliciousAppsListResp;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetect;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectClient;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectStatusCodes;\n\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class AppCheckService {\n    private final String TAG = AppCheckService.class.getSimpleName();\n    private SafetyDetectClient client;\n    private final HMSLogger hmsLogger;\n\n    public AppCheckService(ReactApplicationContext reactApplicationContext) {\n        this.client = SafetyDetect.getClient(reactApplicationContext);\n        hmsLogger = HMSLogger.getInstance(reactApplicationContext);\n    }\n\n    public void invokeGetMaliciousApps(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getMaliciousAppsList\");\n        Task task = client.getMaliciousAppsList();\n        task.addOnSuccessListener(new OnSuccessListener<MaliciousAppsListResp>() {\n            @Override\n            public void onSuccess(MaliciousAppsListResp maliciousAppsListResp) {\n                List<MaliciousAppsData> appsDataList = maliciousAppsListResp.getMaliciousAppsList();\n                if (maliciousAppsListResp.getRtnCode() == CommonCode.OK) {\n                    ReadableArray arrayAppDataList = AppCheckUtils.convertToWritableMap(appsDataList);\n                    hmsLogger.sendSingleEvent(\"getMaliciousAppsList\");\n                    promise.resolve(arrayAppDataList);\n                }else {\n                    hmsLogger.sendSingleEvent(\"getMaliciousAppsList\", maliciousAppsListResp.getErrorReason());\n                    Log.e(TAG, \"getMaliciousAppsList failed: \" + maliciousAppsListResp.getErrorReason());\n                    promise.reject(\"getMaliciousAppsList failed: \" + maliciousAppsListResp.getErrorReason());\n                }\n            }\n        }).addOnFailureListener(new OnFailureListener() {\n            @Override\n            public void onFailure(Exception e) {\n                if (e instanceof ApiException) {\n                    ApiException apiException = (ApiException) e;\n                    String errorMessage = \"Error: \" + \n                        SafetyDetectStatusCodes.getStatusCodeString(apiException.getStatusCode()) + \n                        \": \" + \n                        apiException.getStatusMessage();\n                    hmsLogger.sendSingleEvent(\"getMaliciousAppsList\", errorMessage);\n                    Log.e(TAG, errorMessage );\n                    promise.reject(errorMessage);\n                } else {\n                    hmsLogger.sendSingleEvent(\"getMaliciousAppsList\", e.getMessage());\n                    Log.e(TAG, \"ERROR: \" + e.getMessage());\n                    promise.reject(\"ERROR: \" + e.getMessage());\n                }\n            }\n        });\n    }\n\n    public void enableAppsCheck(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"enableAppsCheck\");\n        client.enableAppsCheck().addOnSuccessListener(enableAppsCheckResp -> {\n            hmsLogger.sendSingleEvent(\"enableAppsCheck\");\n            promise.resolve(enableAppsCheckResp.getResult());\n        }).addOnFailureListener(e -> {\n            hmsLogger.sendSingleEvent(\"enableAppsCheck\", e.getMessage());\n            promise.reject(e.getMessage());\n        });\n    }\n\n    public void isVerifyAppsCheck(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"isVerifyAppsCheck\");\n        client.isVerifyAppsCheck().addOnSuccessListener(verifyAppsCheckEnabledResp -> {\n            hmsLogger.sendSingleEvent(\"isVerifyAppsCheck\");\n            promise.resolve(verifyAppsCheckEnabledResp.getResult());\n        }).addOnFailureListener(error -> {\n            hmsLogger.sendSingleEvent(\"isVerifyAppsCheck\", error.getMessage());\n            promise.reject(error.getMessage());\n        });\n    }\n\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new HashMap<>();\n        constants.put(\"RISK_APP\", 1);\n        constants.put(\"VIRUS_APP\", 2);\n        return constants;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/appcheck/AppCheckUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.appcheck;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.huawei.hms.support.api.entity.safetydetect.MaliciousAppsData;\n\nimport java.util.List;\n\npublic class AppCheckUtils {\n    public static WritableArray convertToWritableMap(List<MaliciousAppsData> appsDataList) {\n        WritableArray array = Arguments.createArray();\n        for (MaliciousAppsData maliciousApp : appsDataList) {\n            WritableMap map = Arguments.createMap();\n            map.putString(\"apkPackageName\", maliciousApp.getApkPackageName());\n            map.putString(\"apkSha256\", maliciousApp.getApkSha256());\n            map.putInt(\"apkCategory\", maliciousApp.getApkCategory());\n            array.pushMap(map);\n        }\n        return array;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/huaweiapi/HuaweiApiModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.huaweiapi;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\n\npublic class HuaweiApiModule extends ReactContextBaseJavaModule {\n    private final HuaweiApiService huaweiApiService = new HuaweiApiService();\n    private final HMSLogger hmsLogger;\n\n    public HuaweiApiModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        hmsLogger = HMSLogger.getInstance(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSHuaweiApi\";\n    }\n\n    @ReactMethod\n    public void isHuaweiMobileServicesAvailable(Promise promise) {\n        hmsLogger.sendSingleEvent(\"isHuaweiMobileServicesAvailable\");\n        huaweiApiService.isHuaweiMobileServicesAvailable(getCurrentActivity(), promise);\n    }\n\n    @ReactMethod\n    public void disableLogger() {\n        hmsLogger.disableLogger();\n    }\n\n    @ReactMethod\n    public void enableLogger() {\n        hmsLogger.enableLogger();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/huaweiapi/HuaweiApiService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.huaweiapi;\n\nimport android.app.Activity;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.huawei.hms.api.ConnectionResult;\nimport com.huawei.hms.api.HuaweiApiAvailability;\n\npublic class HuaweiApiService {\n    private final String TAG = HuaweiApiService.class.getSimpleName();\n\n    public void isHuaweiMobileServicesAvailable(Activity activity, Promise promise) {\n        if (HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(activity) == ConnectionResult.SUCCESS) {\n            Log.i(TAG, \"HMS is Available\");\n            promise.resolve(true);\n        } else {\n            Log.e(TAG, \"ERROR: Unavailable. Please update your HMS\");\n            promise.resolve(false);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.logger;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport static android.os.Build.DEVICE;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"SafetyDetect\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"6.7.0.300\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n                ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n                                                    final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/sysintegrity/SysIntegrityModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.sysintegrity;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport org.json.JSONException;\n\npublic class SysIntegrityModule extends ReactContextBaseJavaModule {\n    private final SysIntegrityService sysIntegrityService;\n\n    public SysIntegrityModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.sysIntegrityService = new SysIntegrityService(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSSysIntegrity\";\n    }\n\n    @ReactMethod\n    public void sysIntegrity(String nonce, String appId, Promise promise) {\n        sysIntegrityService.invokeSysIntegrity(nonce, appId, promise);\n    }\n\n    @ReactMethod\n    public void sysIntegrityWithRequest(ReadableMap args, Promise promise) throws JSONException {\n        sysIntegrityService.invokeSysIntegretiyWithRequest(args,promise);\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/sysintegrity/SysIntegrityService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.sysintegrity;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\nimport com.huawei.hms.support.api.entity.safetydetect.SysIntegrityRequest;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetect;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectClient;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectStatusCodes;\n\nimport java.nio.charset.Charset;\n\npublic class SysIntegrityService {\n    private String TAG = SysIntegrityService.class.getSimpleName();\n    private SafetyDetectClient client;\n    private final HMSLogger hmsLogger;\n    private ReactApplicationContext context;\n\n    public SysIntegrityService(ReactApplicationContext reactApplicationContext) {\n        context = reactApplicationContext;\n        this.client = SafetyDetect.getClient(reactApplicationContext);\n        hmsLogger = HMSLogger.getInstance(reactApplicationContext);\n    }\n\n    public void invokeSysIntegrity(String nonce, String appId, Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"sysIntegrity\");\n        byte[] byteNonce = nonce.getBytes(Charset.defaultCharset());\n        client.sysIntegrity(byteNonce, appId).addOnSuccessListener(sysIntegrityResp -> {\n            String jwsStr = sysIntegrityResp.getResult();\n            hmsLogger.sendSingleEvent(\"sysIntegrity\");\n            promise.resolve(jwsStr);\n        }).addOnFailureListener(e -> {\n            if (e instanceof ApiException) {\n                ApiException apiException = (ApiException) e;\n                String errorMessage = \"Error: \" +\n                    SafetyDetectStatusCodes.getStatusCodeString(apiException.getStatusCode()) +\n                    \": \" +\n                    apiException.getMessage();\n                hmsLogger.sendSingleEvent(\"sysIntegrity\", errorMessage);\n                Log.e(TAG, errorMessage);\n                promise.reject(\"\",errorMessage);\n            } else {\n                hmsLogger.sendSingleEvent(\"sysIntegrity\", e.getMessage());\n                Log.e(TAG, \"ERROR:\" + e.getMessage());\n                promise.reject(\"ERROR: \", e.getMessage());\n            }\n        });\n    }\n\n    public void invokeSysIntegretiyWithRequest(ReadableMap args, Promise promise){\n        hmsLogger.startMethodExecutionTimer(\"sysIntegrityWithRequest\");\n        SysIntegrityRequest sysIntegrityRequest = new SysIntegrityRequest();\n        sysIntegrityRequest.setAlg(args.getString(\"alg\"));\n        sysIntegrityRequest.setAppId(args.getString(\"appId\"));\n        sysIntegrityRequest.setNonce(args.getString(\"nonce\").getBytes(Charset.defaultCharset()));\n\n        SafetyDetect.getClient(context).sysIntegrity(sysIntegrityRequest).addOnFailureListener(e -> {\n            hmsLogger.sendSingleEvent(\"sysIntegrityWithRequest\",e.getMessage());\n            Log.e(TAG, e.getMessage());\n            promise.reject(\"\",e.getMessage());\n        }).addOnSuccessListener(sysIntegrityResp -> {\n            hmsLogger.sendSingleEvent(\"sysIntegrityWithRequest\");\n            promise.resolve(sysIntegrityResp.getResult());\n        });\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/urlcheck/UrlCheckModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.urlcheck;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\nimport java.util.Map;\n\npublic class UrlCheckModule extends ReactContextBaseJavaModule {\n    private final UrlCheckService urlCheckService;\n\n    public UrlCheckModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.urlCheckService = new UrlCheckService(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSUrlCheck\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return urlCheckService.getConstants();\n    }\n\n    @ReactMethod\n    public void initUrlCheck(Promise promise) {\n        urlCheckService.initUrlCheck(promise);\n    }\n\n    @ReactMethod\n    public void urlCheck(ReadableMap params, Promise promise) {\n        urlCheckService.urlCheck(params, promise);\n    }\n\n    @ReactMethod\n    public void shutdownUrlCheck(Promise promise) {\n        urlCheckService.shutdownUrlCheck(promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/urlcheck/UrlCheckService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.urlcheck;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.common.api.CommonStatusCodes;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\nimport com.huawei.hms.rn.safetydetect.utils.HMSSafetyDetectUtils;\nimport com.huawei.hms.support.api.entity.safetydetect.UrlCheckThreat;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetect;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectClient;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class UrlCheckService {\n    private String TAG = UrlCheckService.class.getSimpleName();\n    private SafetyDetectClient client;\n    private final HMSLogger hmsLogger;\n\n    public UrlCheckService(ReactApplicationContext reactApplicationContext) {\n        this.client = SafetyDetect.getClient(reactApplicationContext);\n        this.hmsLogger = HMSLogger.getInstance(reactApplicationContext);\n    }\n\n    public void initUrlCheck(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"initUrlCheck\");\n        Task task = client.initUrlCheck();\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"initUrlCheck\");\n    }\n\n    public void urlCheck(ReadableMap params, Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"urlCheck\");\n        if (params == null) {\n            String errorMessage = \"Illegal argument. Params must not be null.\";\n            hmsLogger.sendSingleEvent(\"urlCheck\", errorMessage);\n            Log.e(TAG, errorMessage);\n            promise.reject(errorMessage);\n            return;\n        }\n\n        if (!params.hasKey(\"url\") || params.isNull(\"url\")) {\n            String errorMessage = \"Illegal argument. url field is mandatory and it must not be null..\";\n            hmsLogger.sendSingleEvent(\"urlCheck\", errorMessage);\n            Log.e(TAG, errorMessage);\n            promise.reject(errorMessage);\n            return;\n        }\n\n        if (!params.hasKey(\"appId\") || params.isNull(\"appId\")) {\n            String errorMessage = \"Illegal argument. appId field is mandatory and it must not be null.\";\n            hmsLogger.sendSingleEvent(\"urlCheck\", errorMessage);\n            Log.e(TAG, errorMessage);\n            promise.reject(errorMessage);\n            return;\n        }\n\n        invokeUrlCheck(params, promise);\n    }\n\n    private void invokeUrlCheck(ReadableMap params, Promise promise) {\n        ArrayList urlCheckThreats = params.getArray(\"UrlCheckThreat\").toArrayList();\n        client.urlCheck(\n            params.getString(\"url\"),\n            params.getString(\"appId\"),\n            UrlCheckUtils.convertIntegerArray(urlCheckThreats)\n        ).addOnSuccessListener(urlResponse -> {\n            List<UrlCheckThreat> urlCheckResponses = urlResponse.getUrlCheckResponse();\n            ReadableArray threatsArray = UrlCheckUtils.convertListToArray(urlCheckResponses);\n            hmsLogger.sendSingleEvent(\"urlCheck\");\n            promise.resolve(threatsArray);\n        }).addOnFailureListener(e -> {\n            if (e instanceof ApiException) {\n                ApiException apiException = (ApiException) e;\n                String errorMessage = \"Error: \" +\n                    CommonStatusCodes.getStatusCodeString(apiException.getStatusCode());\n                hmsLogger.sendSingleEvent(\"urlCheck\", errorMessage);\n                Log.e(TAG, errorMessage);\n                promise.reject(errorMessage);\n            } else {\n                hmsLogger.sendSingleEvent(\"urlCheck\", e.getMessage());\n                Log.e(TAG, \"Error: \" + e.getMessage());\n                promise.reject(\"Error: \" + e.getMessage());\n            }\n        });\n    }\n\n    public void shutdownUrlCheck(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"shutdownUrlCheck\");\n        Task task = client.shutdownUrlCheck();\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"shutdownUrlCheck\");\n    }\n\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new HashMap<>();\n        constants.put(\"MALWARE\", UrlCheckThreat.MALWARE);\n        constants.put(\"PHISHING\", UrlCheckThreat.PHISHING);\n        return constants;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/urlcheck/UrlCheckUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.urlcheck;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.WritableArray;\nimport com.huawei.hms.support.api.entity.safetydetect.UrlCheckThreat;\n\nimport java.util.List;\n\npublic class UrlCheckUtils {\n    public static int[] convertIntegerArray(List<Double> integers) {\n        int[] ret = new int[integers.size()];\n        for (int i = 0; i < ret.length; i++) {\n            ret[i] = integers.get(i).intValue();\n        }\n        return ret;\n    }\n\n    public static WritableArray convertListToArray(List<UrlCheckThreat> urlCheckThreats) {\n        WritableArray array = Arguments.createArray();\n        for (UrlCheckThreat threat : urlCheckThreats) {\n            array.pushInt(threat.getUrlCheckResult());\n        }\n        return  array;\n    }\n}"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/userdetect/UserDetectModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.userdetect;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\n\npublic class UserDetectModule extends ReactContextBaseJavaModule {\n    private final UserDetectService userDetectService;\n\n    public UserDetectModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.userDetectService = new UserDetectService(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSUserDetect\";\n    }\n\n    @ReactMethod\n    public void initUserDetect(Promise promise) {\n        userDetectService.initUserDetect(promise);\n    }\n\n    @ReactMethod\n    public void userDetection(String appId, Promise promise) {\n        userDetectService.userDetection(appId, promise);\n    }\n\n    @ReactMethod\n    public void shutdownUserDetect(Promise promise) {\n        userDetectService.shutdownUserDetect(promise);\n    }\n\n    @ReactMethod\n    public void initAntiFraud(String appId, Promise promise) {\n        userDetectService.initAntiFraud(appId, promise);\n    }\n\n    @ReactMethod\n    public void getRiskToken(Promise promise) {\n        userDetectService.getRiskToken(promise);\n    }\n\n    @ReactMethod\n    public void releaseAntiFraud(Promise promise) {\n        userDetectService.releaseAntiFraud(promise);\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/userdetect/UserDetectService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.userdetect;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\nimport com.huawei.hms.rn.safetydetect.utils.HMSSafetyDetectUtils;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetect;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectClient;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectStatusCodes;\n\npublic class UserDetectService {\n    private String TAG = UserDetectService.class.getSimpleName();\n    private SafetyDetectClient client;\n    private final HMSLogger hmsLogger;\n\n    public UserDetectService(ReactApplicationContext reactApplicationContext) {\n        this.client = SafetyDetect.getClient(reactApplicationContext);\n        this.hmsLogger = HMSLogger.getInstance(reactApplicationContext);\n    }\n\n    public void initUserDetect(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"initUserDetect\");\n        Task task = client.initUserDetect();\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"initUserDetect\");\n    }\n\n    public void userDetection(String appId, Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"userDetection\");\n        client.userDetection(appId).addOnSuccessListener(userDetectResponse -> {\n            String responseToken = userDetectResponse.getResponseToken();\n            if (!responseToken.isEmpty()) {\n                hmsLogger.sendSingleEvent(\"userDetection\");\n                promise.resolve(responseToken);\n            }\n        }).addOnFailureListener(e -> {\n            String errorMsg;\n            if (e instanceof ApiException) {\n                ApiException apiException = (ApiException) e;\n                errorMsg = SafetyDetectStatusCodes.getStatusCodeString(apiException.getStatusCode()) +\n                    \": \" +\n                    apiException.getMessage();\n                hmsLogger.sendSingleEvent(\"userDetection\", errorMsg);\n                Log.e(TAG, \"onFailure: \" + errorMsg);\n                promise.reject(errorMsg);\n            } else {\n                errorMsg = e.getMessage();\n                hmsLogger.sendSingleEvent(\"userDetection\", errorMsg);\n                Log.e(TAG, \"onFailure: \" + errorMsg);\n                promise.reject(errorMsg);\n            }\n        });\n    }\n\n    public void shutdownUserDetect(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"shutdownUserDetect\");\n        Task task = client.shutdownUserDetect();\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"shutdownUserDetect\");\n    }\n\n    public void initAntiFraud(String appId, Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"initAntiFraud\");\n        Task task = client.initAntiFraud(appId);\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"initAntiFraud\");\n    }\n\n    public void getRiskToken(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getRiskToken\");\n        client.getRiskToken().addOnSuccessListener(riskTokenResponse -> {\n            String riskToken = riskTokenResponse.getRiskToken();\n            hmsLogger.sendSingleEvent(\"getRiskToken\");\n            promise.resolve(riskToken);\n        }).addOnFailureListener(e -> {\n            hmsLogger.sendSingleEvent(\"getRiskToken\", e.getMessage());\n            Log.e(TAG, \"onFailure: \" + e.getMessage());\n            promise.reject(\"ERROR: \" + e.getMessage());\n        });\n    }\n\n    public void releaseAntiFraud(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"releaseAntiFraud\");\n        Task task = client.releaseAntiFraud();\n        HMSSafetyDetectUtils.taskHandler(task, promise, hmsLogger, \"releaseAntiFraud\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/utils/HMSSafetyDetectUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.utils;\n\nimport com.facebook.react.bridge.Promise;\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hmf.tasks.Task;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\n\npublic class HMSSafetyDetectUtils {\n    public static void taskHandler (Task task, Promise promise, HMSLogger hmsLogger, String methodName) {\n        task.addOnSuccessListener((OnSuccessListener<Void>) aVoid -> {\n            hmsLogger.sendSingleEvent(methodName);\n            promise.resolve(true);\n        }).addOnFailureListener(new OnFailureListener() {\n            @Override\n            public void onFailure(Exception e) {\n                hmsLogger.sendSingleEvent(methodName, e.getMessage());\n                promise.reject(\"ERROR: \" + e.getMessage());\n            }\n        });\n    }\n}"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/wifidetect/WifiDetectModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.wifidetect;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\n\nimport java.util.Map;\n\npublic class WifiDetectModule extends ReactContextBaseJavaModule {\n    private final WifiDetectService wifiDetectService;\n\n    public WifiDetectModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        wifiDetectService = new WifiDetectService(reactContext);\n    }\n\n    @Override\n    public String getName() {\n        return \"HMSWifiDetect\";\n    }\n\n    @Override\n    public Map<String, Object> getConstants() {\n        return wifiDetectService.getConstants();\n    }\n\n    @ReactMethod\n    public void getWifiDetectStatus(Promise promise) {\n        wifiDetectService.invokeGetWifiDetectStatus(promise);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/android/src/main/java/com/huawei/hms/rn/safetydetect/wifidetect/WifiDetectService.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.wifidetect;\n\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.huawei.hms.common.ApiException;\nimport com.huawei.hms.rn.safetydetect.logger.HMSLogger;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetect;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectClient;\nimport com.huawei.hms.support.api.safetydetect.SafetyDetectStatusCodes;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class WifiDetectService {\n    private String TAG = WifiDetectService.class.getSimpleName();\n    private SafetyDetectClient client;\n    private final HMSLogger hmsLogger;\n\n    public WifiDetectService(ReactApplicationContext reactApplicationContext) {\n        client = SafetyDetect.getClient(reactApplicationContext);\n        hmsLogger = HMSLogger.getInstance(reactApplicationContext);\n    }\n\n    public void invokeGetWifiDetectStatus(Promise promise) {\n        hmsLogger.startMethodExecutionTimer(\"getWifiDetectStatus\");\n        client.getWifiDetectStatus().addOnSuccessListener(wifiDetectResponse -> {\n            int wifiDetectStatus = wifiDetectResponse.getWifiDetectStatus();\n            hmsLogger.sendSingleEvent(\"getWifiDetectStatus\");\n            promise.resolve(wifiDetectStatus);\n        }).addOnFailureListener(e -> {\n            if (e instanceof ApiException) {\n                ApiException apiException = (ApiException) e;\n                String errMsg = \"Error: \" + apiException.getStatusCode() + \":\"\n                    + SafetyDetectStatusCodes.getStatusCodeString(apiException.getStatusCode()) + \": \"\n                    + apiException.getStatusMessage();\n                hmsLogger.sendSingleEvent(\"getWifiDetectStatus\", errMsg);\n                Log.e(TAG, errMsg);\n                promise.reject(errMsg);\n            } else {\n                hmsLogger.sendSingleEvent(\"getWifiDetectStatus\", e.getMessage());\n                Log.e(TAG, \"ERROR! \" + e.getMessage());\n                promise.reject(\"ERROR! \" + e.getMessage());\n            }\n        });\n    }\n\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new HashMap<>();\n        constants.put(\"NO_WiFi\", 0);\n        constants.put(\"WiFi_SECURE\", 1);\n        constants.put(\"WiFi_INSECURE\", 2);\n        return constants;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/.gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/\n\n*/fastlane/report.xml\n*/fastlane/Preview.html\n*/fastlane/screenshots\n\n# Bundle artifact\n*.jsbundle\n\n# CocoaPods\n/ios/Pods/\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/App.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React from 'react'\nimport { View, Text, Image, StyleSheet, ScrollView, TouchableOpacity, Alert } from 'react-native'\nimport { HMSHuaweiApi, HMSSysIntegrity, HMSUserDetect, HMSWifiDetect, HMSUrlCheck, HMSAppsCheck } from '@hmscore/react-native-hms-safetydetect';\n\nconst App = () => {\n  const checkHMSStatus = () => {\n    HMSHuaweiApi.isHuaweiMobileServicesAvailable().then(response => {\n      console.log(response)\n      Alert.alert(\"Is Huawei Mobile Services Available\", response.toString())\n    }).catch(error => {\n      console.log(error)\n      Alert.alert(\"Error\", error.toString())\n    });\n  }\n\n  const checkSysIntegrity = () => {\n    const appId = \"<Your_App_Id>\";\n    const nonce = \"Sample\" + Date.now();\n    HMSSysIntegrity.sysIntegrity(nonce, appId).then(response => {\n      console.log(\"sysIntegrity: \" + response);\n      Alert.alert(\"sysIntegrity\", response)\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const checkSysIntegrityRequest = () => {\n    const args = {\n      appId: \"<Your_App_Id>\",\n      nonce: \"Sample\" + Date.now(),\n      alg: \"RS256\",\n    };\n    HMSSysIntegrity.sysIntegrityWithRequest(args).then(response => {\n      console.log(\"sysIntegrityWithRequest: \" + response);\n      Alert.alert(\"sysIntegrityWithRequest\", response)\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const initCheckUser = () => {\n    HMSUserDetect.initUserDetect().then(response => {\n      console.log(\"initUserDetect: \" + response);\n      Alert.alert(\"initUserDetect\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const userDetection = () => {\n    const appId = \"<Your_App_Id>\";\n    HMSUserDetect.userDetection(appId).then(response => {\n      console.log(\"userDetection: \" + response);\n      Alert.alert(\"userDetection\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const shutdownCheckUser = () => {\n    HMSUserDetect.shutdownUserDetect().then(response => {\n      console.log(\"shutdownUserDetect: \" + response);\n      Alert.alert(\"shutdownUserDetect\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const checkWifi = () => {\n    HMSWifiDetect.getWifiDetectStatus().then(response => {\n      console.log(response);\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    });\n  }\n\n  const initUrlCheck = () => {\n    HMSUrlCheck.initUrlCheck().then(response => {\n      console.log(\"initUrlCheck: \" + response);\n      Alert.alert(\"initUrlCheck\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const checkUrl = () => {\n    const params = {\n      \"appId\": \"<Your_App_Id>\",\n      \"url\": \" http://example.com/hms/safetydetect/malware\",\n      \"UrlCheckThreat\": [HMSUrlCheck.MALWARE, HMSUrlCheck.PHISHING]\n    }\n    HMSUrlCheck.urlCheck(params).then(response => {\n      console.log(\"urlCheck: \" + response);\n      Alert.alert(\"urlCheck\", JSON.stringify(response))\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const shutdownUrlCheck = () => {\n    HMSUrlCheck.shutdownUrlCheck().then(response => {\n      console.log(\"shutdownUrlCheck: \" + response);\n      Alert.alert(\"shutdownUrlCheck\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const enableAppsCheck = () => {\n    HMSAppsCheck.enableAppsCheck().then(response => {\n      console.log(\"enableAppsCheck: \" + response);\n      Alert.alert(\"enableAppsCheck\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const isVerifyAppsCheck = () => {\n    HMSAppsCheck.isVerifyAppsCheck().then(response => {\n      console.log(\"isVerifyAppsCheck: \" + response);\n      Alert.alert(\"isVerifyAppsCheck\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const checkApps = () => {\n    HMSAppsCheck.getMaliciousAppsList().then(response => {\n      console.log(response);\n      Alert.alert(\"getMaliciousAppsList\", JSON.stringify(response))\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    });\n  }\n\n  const initAntiFraud = () => {\n    const appId = \"<Your_App_Id>\";\n    HMSUserDetect.initAntiFraud(appId).then(response => {\n      console.log(\"initAntiFraud: \" + response);\n      Alert.alert(\"initAntiFraud\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const getRiskToken = () => {\n    HMSUserDetect.getRiskToken().then(response => {\n      console.log(\"getRiskToken: \" + response);\n      Alert.alert(\"getRiskToken\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const releaseAntiFraud = () => {\n    HMSUserDetect.releaseAntiFraud().then(response => {\n      console.log(\"releaseAntiFraud: \" + response);\n      Alert.alert(\"releaseAntiFraud\", response.toString())\n    }).catch(error => {\n      console.log(error);\n      Alert.alert(\"Error\", error.toString())\n    })\n  }\n\n  const data = [\n    {\n      id: 0,\n      title: \"HMS Status\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Check HMS Status\",\n          buttonClick: () => checkHMSStatus()\n        }\n      ]\n    },\n    {\n      id: 1,\n      title: \"System Integrity\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Check System Integrity\",\n          buttonClick: () => checkSysIntegrity()\n        }\n      ]\n    },\n    {\n      id: 7,\n      title: \"System Integrity With Request\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Check System Integrity With Request\",\n          buttonClick: () => checkSysIntegrityRequest()\n        }\n      ]\n    },\n    {\n      id: 2,\n      title: \"Check Malicious Apps\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Enable\",\n          buttonClick: () => enableAppsCheck()\n        },\n        {\n          id: 1,\n          buttonText: \"Check Apps\",\n          buttonClick: () => checkApps()\n        },\n        {\n          id: 2,\n          buttonText: \"Verify App Check\",\n          buttonClick: () => isVerifyAppsCheck()\n        },\n      ]\n    },\n    {\n      id: 3,\n      title: \"Check Malicious Url\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Initialize\",\n          buttonClick: () => initUrlCheck()\n        },\n        {\n          id: 1,\n          buttonText: \"Check Url\",\n          buttonClick: () => checkUrl()\n        },\n        {\n          id: 2,\n          buttonText: \"Shutdown\",\n          buttonClick: () => shutdownUrlCheck()\n        },\n      ]\n    },\n    {\n      id: 4,\n      title: \"Fake User Identification\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Initialize\",\n          buttonClick: () => initCheckUser()\n        },\n        {\n          id: 1,\n          buttonText: \"User Detection\",\n          buttonClick: () => userDetection()\n        },\n        {\n          id: 2,\n          buttonText: \"Shutdown\",\n          buttonClick: () => shutdownCheckUser()\n        },\n      ]\n    },\n    {\n      id: 5,\n      title: \"Imperceptible Fake User Identification\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Initialize\",\n          buttonClick: () => initAntiFraud()\n        },\n        {\n          id: 1,\n          buttonText: \"Get Risk Token\",\n          buttonClick: () => getRiskToken()\n        },\n        {\n          id: 2,\n          buttonText: \"Shutdown\",\n          buttonClick: () => releaseAntiFraud()\n        },\n      ]\n    },\n    {\n      id: 6,\n      title: \"Check WiFi\",\n      methods: [\n        {\n          id: 0,\n          buttonText: \"Check WiFi\",\n          buttonClick: () => checkWifi()\n        },\n      ]\n    }\n  ]\n\n  return (\n    <View style={styles.container}>\n      <View style={styles.header}>\n        <View style={{ flex: 1, justifyContent: \"center\", alignItems: \"center\", }}>\n          <Text style={styles.headerTitle}>HMS React Native Safety Detect Plugin</Text>\n        </View>\n        <Image\n          style={styles.headerImage}\n          source={require('./src/assets/hms-rn-logo.png')} />\n      </View>\n      <ScrollView>\n        <View style={styles.buttonsContainer}>\n          {data.map((section) => (\n            <View\n              key={section.id}\n              style={styles.section}\n            >\n              <Text style={styles.sectionTitle} >{section.title}</Text>\n              {section.methods.map((method) => (\n                <TouchableOpacity\n                  key={method.id}\n                  onPress={method.buttonClick}\n                  style={styles.button}\n                >\n                  <Text style={styles.buttonText} >{method.buttonText}</Text>\n                </TouchableOpacity>\n              ))}\n            </View>\n          ))}\n        </View>\n      </ScrollView>\n    </View >\n  )\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    backgroundColor: \"#1c1c1c\",\n  },\n  header: {\n    height: 60,\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n    flexDirection: \"row\",\n    marginVertical: 40,\n    marginHorizontal: 20,\n  },\n  headerTitle: {\n    fontWeight: \"bold\",\n    color: \"#909090\",\n    fontSize: 20,\n  },\n  headerImage: {\n    resizeMode: \"center\",\n    width: 100,\n    height: 100,\n  },\n  buttonsContainer: {\n    flex: 1\n  },\n  section: {\n    flex: 1,\n    padding: 10,\n  },\n  sectionTitle: {\n    fontSize: 14,\n    fontWeight: \"bold\",\n    color: \"#909090\",\n  },\n  button: {\n    height: 50,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    backgroundColor: \"#2e2e2e\",\n    marginVertical: 8,\n    elevation: 5,\n    borderRadius: 5,\n  },\n  buttonText: {\n    fontSize: 18,\n    fontWeight: \"bold\",\n    color: \"#909090\",\n  },\n});\n\n\n\nexport default App\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-safetydetect/example/README.md",
    "content": "# React-Native HMS Safety Detect - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Safety Detect Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\n\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n\n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Safety Detect - Demo is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\napply from: \"../../node_modules/react-native/react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        release {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n    buildTypes {\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android.\n            signingConfig signingConfigs.release\n            minifyEnabled true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        debug {\n            signingConfig signingConfigs.release\n            debuggable true\n        }\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.compile\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings \n\n-keepattributes *Annotation* \n-keepattributes Exceptions \n-keepattributes InnerClasses \n-keepattributes Signature \n\n-keep class com.hianalytics.android.**{*;} \n-keep class com.huawei.updatesdk.**{*;} \n-keep class com.huawei.hms.**{*;}\n\n-repackageclasses"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.safetydetect.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\"com.huawei.hms.rn.safetydetect.demo.MainApplication\"\n      android:label=\"SafetyDetectDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\"com.huawei.hms.rn.safetydetect.demo.MainActivity\"\n        android:label=\"SafetyDetectDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/src/main/java/com/huawei/hms/rn/safetydetect/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"SafetyDetectDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/src/main/java/com/huawei/hms/rn/safetydetect/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.safetydetect.demo;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                // Packages that cannot be autolinked yet can be added manually here, for example:\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"29.0.3\"\n        minSdkVersion = 21\n        compileSdkVersion = 31\n        targetSdkVersion = 31\n    }\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n        classpath (\"com.huawei.agconnect:agcp:1.4.2.301\")\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url(\"$rootDir/../node_modules/react-native/android\")\n        }\n        maven {\n            // Android JSC is installed from npm\n            url(\"$rootDir/../node_modules/jsc-android/dist\")\n        }\n\n        google()\n        jcenter()\n        maven { url 'https://www.jitpack.io' }\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n}\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/android/settings.gradle",
    "content": "rootProject.name = 'SafetyDetectDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/app.json",
    "content": "{\n  \"name\": \"SafetyDetectDemo\",\n  \"displayName\": \"SafetyDetectDemo\"\n}"
  },
  {
    "path": "react-native-hms-safetydetect/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { AppRegistry } from 'react-native';\nimport App from './App';\nimport { name as appName } from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-safetydetect/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-safetydetect-demo\",\n  \"version\": \"6.7.0-300\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"@hmscore/react-native-hms-safetydetect\": \"6.7.0-300\",\n    \"react\": \"17.0.1\",\n    \"react-native\": \"0.64.4\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.9\",\n    \"@babel/runtime\": \"^7.12.5\",\n    \"metro-react-native-babel-preset\": \"^0.64.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  },\n  \"files\": [\n    \"android\",\n    \"src\",\n    \"app.json\",\n    \"App.js\",\n    \"babel.config.js\",\n    \"index.js\",\n    \"LICENSE\",\n    \"metro.config.js\",\n    \"package.json\",\n    \"README.md\"\n  ]\n}"
  },
  {
    "path": "react-native-hms-safetydetect/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-safetydetect\",\n  \"title\": \"React Native Hms Safety Detect\",\n  \"description\": \"React Native Hms Safety Detect Kit\",\n  \"version\": \"6.7.0-300\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-safetydetect\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-safetydetect\",\n    \"huawei-safetydetect\",\n    \"hms-safetydetect\",\n    \"safetydetect\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"^17.0.1\",\n    \"react-native\": \"^0.64.4\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}"
  },
  {
    "path": "react-native-hms-safetydetect/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-safetydetect\" {\n    export const HMSHuaweiApi = {\n        isHuaweiMobileServicesAvailable(): Promise<boolean>;,\n        enableLogger(): void;,\n        disableLogger(): void;\n    }\n\n    export const HMSSysIntegrity = {\n        sysIntegrity(nonce: string, appId: string): Promise<string>;,\n        sysIntegrityWithRequest(args: integrityArgs): Promise<string>;\n    }\n\n    export interface integrityArgs {\n        nonce: string,\n        appId: string,\n        alg: string\n    }\n\n    export const HMSAppsCheck = {\n        enableAppsCheck(): Promise<boolean>;,\n        isVerifyAppsCheck(): Promise<boolean>;,\n        getMaliciousAppsList(): Promise<MaliciousApp[]>;,\n        RISK_APP = 0,\n        VIRUS_APP = 2\n    }\n\n    export interface MaliciousApp {\n        appPackageName: string,\n        apkSha256: string,\n        apkCategory: HMSAppsCheck\n    }\n\n    export const HMSUrlCheck = {\n        initUrlCheck(): Promise<boolean>;,\n        shutdownUrlCheck(): Promise<boolean>;,\n        urlCheck(params: UrlCheckParam): Promise<HMSURLCheck[]>;,\n        MALWARE = 1,\n        PHISHING = 3\n    }\n\n    export interface UrlCheckParam {\n        appId: string,\n        url: string,\n        UrlCheckThreat: HMSAppsCheck\n    }\n\n    export const HMSUserDetect = {\n        initUserDetect(): Promise<boolean>;,\n        userDetection(appId: string): Promise<string>;,\n        shutdownUserDetect(): Promise<boolean>;,\n        initAntiFraud(appId: string): Promise<boolean>;,\n        getRiskToken(): Promise<string>;,\n        releaseAntiFraud(): Promise<boolean>;\n    }\n\n    export const HMSWifiDetect = {\n        getWifiDetectStatus(): Promise<HMSWifiDetect>;,\n        NO_WiFi = 0,\n        WiFi_SECURE = 1,\n        WiFi_INSECURE = 2\n    }\n}"
  },
  {
    "path": "react-native-hms-safetydetect/src/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\n\nexport const {\n    HMSHuaweiApi,\n    HMSSysIntegrity,\n    HMSAppsCheck,\n    HMSUrlCheck,\n    HMSUserDetect,\n    HMSWifiDetect\n} = NativeModules;"
  },
  {
    "path": "react-native-hms-scan/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-scan/OpenSourceSoftwareNotice.html",
    "content": "<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">OPEN SOURCE SOFTWARE NOTICE</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:center\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong>&nbsp;</strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><span style=\"font-family:Arial,sans-serif\">Please note we provide an open source software notice along with this product and/or this product firmware (in the following just &ldquo;this product&rdquo;). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.</span></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Warranty Disclaimer&nbsp;&nbsp;</span></span></strong><strong>&nbsp;</strong><strong><em>&nbsp;</em></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:9pt\"><span style=\"font-family:Arial,sans-serif\">THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.</span></span></strong></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><em>&nbsp;</em></span></span></span></p>\n\n<p style=\"text-align:justify\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-size:16pt\"><span style=\"font-family:Arial,sans-serif\">Copyright Notice and License Texts</span></span></strong></span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: &nbsp;com.google.code.gson:gson 2.9.1</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright 2008 Google Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;<span style=\"font-size:10.5pt\">Apache License&nbsp;</span></span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<br />\nyou may not use this file except in compliance with the License.<br />\nYou may obtain a copy of the License at</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; http://www.apache.org/licenses/LICENSE-2.0</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Unless required by applicable law or agreed to in writing, software<br />\ndistributed under the License is distributed on an &quot;AS IS&quot; BASIS,<br />\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />\nSee the License for the specific language governing permissions and<br />\nlimitations under the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Apache License<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Version 2.0, January 2004<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; http://www.apache.org/licenses/</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;1. Definitions.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;License&quot; shall mean the terms and conditions for use, reproduction,<br />\n&nbsp; &nbsp; &nbsp; and distribution as defined by Sections 1 through 9 of this document.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Licensor&quot; shall mean the copyright owner or entity authorized by<br />\n&nbsp; &nbsp; &nbsp; the copyright owner that is granting the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Legal Entity&quot; shall mean the union of the acting entity and all<br />\n&nbsp; &nbsp; &nbsp; other entities that control, are controlled by, or are under common<br />\n&nbsp; &nbsp; &nbsp; control with that entity. For the purposes of this definition,<br />\n&nbsp; &nbsp; &nbsp; &quot;control&quot; means (i) the power, direct or indirect, to cause the<br />\n&nbsp; &nbsp; &nbsp; direction or management of such entity, whether by contract or<br />\n&nbsp; &nbsp; &nbsp; otherwise, or (ii) ownership of fifty percent (50%) or more of the<br />\n&nbsp; &nbsp; &nbsp; outstanding shares, or (iii) beneficial ownership of such entity.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity<br />\n&nbsp; &nbsp; &nbsp; exercising permissions granted by this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Source&quot; form shall mean the preferred form for making modifications,<br />\n&nbsp; &nbsp; &nbsp; including but not limited to software source code, documentation<br />\n&nbsp; &nbsp; &nbsp; source, and configuration files.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Object&quot; form shall mean any form resulting from mechanical<br />\n&nbsp; &nbsp; &nbsp; transformation or translation of a Source form, including but<br />\n&nbsp; &nbsp; &nbsp; not limited to compiled object code, generated documentation,<br />\n&nbsp; &nbsp; &nbsp; and conversions to other media types.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Work&quot; shall mean the work of authorship, whether in Source or<br />\n&nbsp; &nbsp; &nbsp; Object form, made available under the License, as indicated by a<br />\n&nbsp; &nbsp; &nbsp; copyright notice that is included in or attached to the work<br />\n&nbsp; &nbsp; &nbsp; (an example is provided in the Appendix below).</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Derivative Works&quot; shall mean any work, whether in Source or Object<br />\n&nbsp; &nbsp; &nbsp; form, that is based on (or derived from) the Work and for which the<br />\n&nbsp; &nbsp; &nbsp; editorial revisions, annotations, elaborations, or other modifications<br />\n&nbsp; &nbsp; &nbsp; represent, as a whole, an original work of authorship. For the purposes<br />\n&nbsp; &nbsp; &nbsp; of this License, Derivative Works shall not include works that remain<br />\n&nbsp; &nbsp; &nbsp; separable from, or merely link (or bind by name) to the interfaces of,<br />\n&nbsp; &nbsp; &nbsp; the Work and Derivative Works thereof.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Contribution&quot; shall mean any work of authorship, including<br />\n&nbsp; &nbsp; &nbsp; the original version of the Work and any modifications or additions<br />\n&nbsp; &nbsp; &nbsp; to that Work or Derivative Works thereof, that is intentionally<br />\n&nbsp; &nbsp; &nbsp; submitted to Licensor for inclusion in the Work by the copyright owner<br />\n&nbsp; &nbsp; &nbsp; or by an individual or Legal Entity authorized to submit on behalf of<br />\n&nbsp; &nbsp; &nbsp; the copyright owner. For the purposes of this definition, &quot;submitted&quot;<br />\n&nbsp; &nbsp; &nbsp; means any form of electronic, verbal, or written communication sent<br />\n&nbsp; &nbsp; &nbsp; to the Licensor or its representatives, including but not limited to<br />\n&nbsp; &nbsp; &nbsp; communication on electronic mailing lists, source code control systems,<br />\n&nbsp; &nbsp; &nbsp; and issue tracking systems that are managed by, or on behalf of, the<br />\n&nbsp; &nbsp; &nbsp; Licensor for the purpose of discussing and improving the Work, but<br />\n&nbsp; &nbsp; &nbsp; excluding communication that is conspicuously marked or otherwise<br />\n&nbsp; &nbsp; &nbsp; designated in writing by the copyright owner as &quot;Not a Contribution.&quot;</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity<br />\n&nbsp; &nbsp; &nbsp; on behalf of whom a Contribution has been received by Licensor and<br />\n&nbsp; &nbsp; &nbsp; subsequently incorporated within the Work.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;2. Grant of Copyright License. Subject to the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, each Contributor hereby grants to You a perpetual,<br />\n&nbsp; &nbsp; &nbsp; worldwide, non-exclusive, no-charge, royalty-free, irrevocable<br />\n&nbsp; &nbsp; &nbsp; copyright license to reproduce, prepare Derivative Works of,<br />\n&nbsp; &nbsp; &nbsp; publicly display, publicly perform, sublicense, and distribute the<br />\n&nbsp; &nbsp; &nbsp; Work and such Derivative Works in Source or Object form.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;3. Grant of Patent License. Subject to the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, each Contributor hereby grants to You a perpetual,<br />\n&nbsp; &nbsp; &nbsp; worldwide, non-exclusive, no-charge, royalty-free, irrevocable<br />\n&nbsp; &nbsp; &nbsp; (except as stated in this section) patent license to make, have made,<br />\n&nbsp; &nbsp; &nbsp; use, offer to sell, sell, import, and otherwise transfer the Work,<br />\n&nbsp; &nbsp; &nbsp; where such license applies only to those patent claims licensable<br />\n&nbsp; &nbsp; &nbsp; by such Contributor that are necessarily infringed by their<br />\n&nbsp; &nbsp; &nbsp; Contribution(s) alone or by combination of their Contribution(s)<br />\n&nbsp; &nbsp; &nbsp; with the Work to which such Contribution(s) was submitted. If You<br />\n&nbsp; &nbsp; &nbsp; institute patent litigation against any entity (including a<br />\n&nbsp; &nbsp; &nbsp; cross-claim or counterclaim in a lawsuit) alleging that the Work<br />\n&nbsp; &nbsp; &nbsp; or a Contribution incorporated within the Work constitutes direct<br />\n&nbsp; &nbsp; &nbsp; or contributory patent infringement, then any patent licenses<br />\n&nbsp; &nbsp; &nbsp; granted to You under this License for that Work shall terminate<br />\n&nbsp; &nbsp; &nbsp; as of the date such litigation is filed.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;4. Redistribution. You may reproduce and distribute copies of the<br />\n&nbsp; &nbsp; &nbsp; Work or Derivative Works thereof in any medium, with or without<br />\n&nbsp; &nbsp; &nbsp; modifications, and in Source or Object form, provided that You<br />\n&nbsp; &nbsp; &nbsp; meet the following conditions:</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (a) You must give any other recipients of the Work or<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Derivative Works a copy of this License; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (b) You must cause any modified files to carry prominent notices<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stating that You changed the files; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (c) You must retain, in the Source form of any Derivative Works<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; that You distribute, all copyright, patent, trademark, and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attribution notices from the Source form of the Work,<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; excluding those notices that do not pertain to any part of<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the Derivative Works; and</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; (d) If the Work includes a &quot;NOTICE&quot; text file as part of its<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; distribution, then any Derivative Works that You distribute must<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include a readable copy of the attribution notices contained<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; within such NOTICE file, excluding those notices that do not<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pertain to any part of the Derivative Works, in at least one<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the following places: within a NOTICE text file distributed<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as part of the Derivative Works; within the Source form or<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; documentation, if provided along with the Derivative Works; or,<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; within a display generated by the Derivative Works, if and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wherever such third-party notices normally appear. The contents<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the NOTICE file are for informational purposes only and<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do not modify the License. You may add Your own attribution<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; notices within Derivative Works that You distribute, alongside<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; or as an addendum to the NOTICE text from the Work, provided<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; that such additional attribution notices cannot be construed<br />\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as modifying the License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; You may add Your own copyright statement to Your modifications and<br />\n&nbsp; &nbsp; &nbsp; may provide additional or different license terms and conditions<br />\n&nbsp; &nbsp; &nbsp; for use, reproduction, or distribution of Your modifications, or<br />\n&nbsp; &nbsp; &nbsp; for any such Derivative Works as a whole, provided Your use,<br />\n&nbsp; &nbsp; &nbsp; reproduction, and distribution of the Work otherwise complies with<br />\n&nbsp; &nbsp; &nbsp; the conditions stated in this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;5. Submission of Contributions. Unless You explicitly state otherwise,<br />\n&nbsp; &nbsp; &nbsp; any Contribution intentionally submitted for inclusion in the Work<br />\n&nbsp; &nbsp; &nbsp; by You to the Licensor shall be under the terms and conditions of<br />\n&nbsp; &nbsp; &nbsp; this License, without any additional terms or conditions.<br />\n&nbsp; &nbsp; &nbsp; Notwithstanding the above, nothing herein shall supersede or modify<br />\n&nbsp; &nbsp; &nbsp; the terms of any separate license agreement you may have executed<br />\n&nbsp; &nbsp; &nbsp; with Licensor regarding such Contributions.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;6. Trademarks. This License does not grant permission to use the trade<br />\n&nbsp; &nbsp; &nbsp; names, trademarks, service marks, or product names of the Licensor,<br />\n&nbsp; &nbsp; &nbsp; except as required for reasonable and customary use in describing the<br />\n&nbsp; &nbsp; &nbsp; origin of the Work and reproducing the content of the NOTICE file.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;7. Disclaimer of Warranty. Unless required by applicable law or<br />\n&nbsp; &nbsp; &nbsp; agreed to in writing, Licensor provides the Work (and each<br />\n&nbsp; &nbsp; &nbsp; Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,<br />\n&nbsp; &nbsp; &nbsp; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or<br />\n&nbsp; &nbsp; &nbsp; implied, including, without limitation, any warranties or conditions<br />\n&nbsp; &nbsp; &nbsp; of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A<br />\n&nbsp; &nbsp; &nbsp; PARTICULAR PURPOSE. You are solely responsible for determining the<br />\n&nbsp; &nbsp; &nbsp; appropriateness of using or redistributing the Work and assume any<br />\n&nbsp; &nbsp; &nbsp; risks associated with Your exercise of permissions under this License.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;8. Limitation of Liability. In no event and under no legal theory,<br />\n&nbsp; &nbsp; &nbsp; whether in tort (including negligence), contract, or otherwise,<br />\n&nbsp; &nbsp; &nbsp; unless required by applicable law (such as deliberate and grossly<br />\n&nbsp; &nbsp; &nbsp; negligent acts) or agreed to in writing, shall any Contributor be<br />\n&nbsp; &nbsp; &nbsp; liable to You for damages, including any direct, indirect, special,<br />\n&nbsp; &nbsp; &nbsp; incidental, or consequential damages of any character arising as a<br />\n&nbsp; &nbsp; &nbsp; result of this License or out of the use or inability to use the<br />\n&nbsp; &nbsp; &nbsp; Work (including but not limited to damages for loss of goodwill,<br />\n&nbsp; &nbsp; &nbsp; work stoppage, computer failure or malfunction, or any and all<br />\n&nbsp; &nbsp; &nbsp; other commercial damages or losses), even if such Contributor<br />\n&nbsp; &nbsp; &nbsp; has been advised of the possibility of such damages.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;9. Accepting Warranty or Additional Liability. While redistributing<br />\n&nbsp; &nbsp; &nbsp; the Work or Derivative Works thereof, You may choose to offer,<br />\n&nbsp; &nbsp; &nbsp; and charge a fee for, acceptance of support, warranty, indemnity,<br />\n&nbsp; &nbsp; &nbsp; or other liability obligations and/or rights consistent with this<br />\n&nbsp; &nbsp; &nbsp; License. However, in accepting such obligations, You may act only<br />\n&nbsp; &nbsp; &nbsp; on Your own behalf and on Your sole responsibility, not on behalf<br />\n&nbsp; &nbsp; &nbsp; of any other Contributor, and only if You agree to indemnify,<br />\n&nbsp; &nbsp; &nbsp; defend, and hold each Contributor harmless for any liability<br />\n&nbsp; &nbsp; &nbsp; incurred by, or claims asserted against, such Contributor by reason<br />\n&nbsp; &nbsp; &nbsp; of your accepting any such warranty or additional liability.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;END OF TERMS AND CONDITIONS</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;APPENDIX: How to apply the Apache License to your work.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; To apply the Apache License to your work, attach the following<br />\n&nbsp; &nbsp; &nbsp; boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;<br />\n&nbsp; &nbsp; &nbsp; replaced with your own identifying information. (Don&#39;t include<br />\n&nbsp; &nbsp; &nbsp; the brackets!) &nbsp;The text should be enclosed in the appropriate<br />\n&nbsp; &nbsp; &nbsp; comment syntax for the file format. We also recommend that a<br />\n&nbsp; &nbsp; &nbsp; file or class name and description of purpose be included on the<br />\n&nbsp; &nbsp; &nbsp; same &quot;printed page&quot; as the copyright notice for easier<br />\n&nbsp; &nbsp; &nbsp; identification within third-party archives.</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Copyright [yyyy] [name of copyright owner]</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<br />\n&nbsp; &nbsp;you may not use this file except in compliance with the License.<br />\n&nbsp; &nbsp;You may obtain a copy of the License at</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp; &nbsp; &nbsp;http://www.apache.org/licenses/LICENSE-2.0</span></span></span></p>\n\n<p><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp; &nbsp;Unless required by applicable law or agreed to in writing, software<br />\n&nbsp; &nbsp;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,<br />\n&nbsp; &nbsp;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />\n&nbsp; &nbsp;See the License for the specific language governing permissions and<br />\n&nbsp; &nbsp;limitations under the License.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">&nbsp;</span></span></span></p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: &nbsp;react-native-document-picker &nbsp;4.3.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2016 Elyx0</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;MIT<span style=\"font-size:10.5pt\">&nbsp;License</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp; &nbsp; Permission is hereby granted, free of charge, to any person obtaining a copy<br />\n&nbsp; &nbsp;of this software and associated documentation files (the &quot;Software&quot;), to deal<br />\n&nbsp; &nbsp;in the Software without restriction, including without limitation the rights<br />\n&nbsp; &nbsp;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\n&nbsp; &nbsp;copies of the Software, and to permit persons to whom the Software is<br />\n&nbsp; &nbsp;furnished to do so, subject to the following conditions:</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp;The above copyright notice and this permission notice shall be included in all<br />\n&nbsp; &nbsp;copies or substantial portions of the Software.</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\n&nbsp; &nbsp;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\n&nbsp; &nbsp;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\n&nbsp; &nbsp;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\n&nbsp; &nbsp;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\n&nbsp; &nbsp;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\n&nbsp; &nbsp;SOFTWARE.</span></span></span></span></p>\n\n<p>&nbsp;</p>\n\n<h1 style=\"text-align:start\"><span style=\"font-size:22pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><strong><span style=\"color:#000000\"><span style=\"font-size:10.5pt\"><span style=\"font-family:Arial,sans-serif\">Software: &nbsp;react-native-picker/picker &nbsp;2.5.0</span></span></span></strong></span></span></h1>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\"><strong><span style=\"font-family:Arial,sans-serif\">Copyright notice:</span></strong></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:10.5pt\"><span style=\"font-family:&quot;Times New Roman&quot;,serif\"><span style=\"color:#000000\">Copyright (c) 2015-present, Facebook, Inc.</span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><strong>License:</strong>&nbsp;MIT<span style=\"font-size:10.5pt\">&nbsp;License</span></span></span></span></p>\n\n<p style=\"text-align:start\"><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp;</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp; &nbsp; Permission is hereby granted, free of charge, to any person obtaining a copy<br />\n&nbsp; &nbsp;of this software and associated documentation files (the &quot;Software&quot;), to deal<br />\n&nbsp; &nbsp;in the Software without restriction, including without limitation the rights<br />\n&nbsp; &nbsp;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />\n&nbsp; &nbsp;copies of the Software, and to permit persons to whom the Software is<br />\n&nbsp; &nbsp;furnished to do so, subject to the following conditions:</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp;The above copyright notice and this permission notice shall be included in all<br />\n&nbsp; &nbsp;copies or substantial portions of the Software.</span></span></span></span></p>\n\n<p><span style=\"font-size:medium\"><span style=\"font-family:Arial,sans-serif\"><span style=\"color:#000000\"><span style=\"font-size:10.5pt\">&nbsp; &nbsp;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />\n&nbsp; &nbsp;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />\n&nbsp; &nbsp;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />\n&nbsp; &nbsp;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />\n&nbsp; &nbsp;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />\n&nbsp; &nbsp;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />\n&nbsp; &nbsp;SOFTWARE</span></span></span></span></p>\n"
  },
  {
    "path": "react-native-hms-scan/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Scan</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-scan\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-scan?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-scan\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-scan?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENSE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-scan.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n----\n\nHUAWEI Scan Kit enables communication between Huawei Scan SDK and React Native platform. \n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001057136450?ha_source=hms1)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-scan\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/prepare-dev-env-0000001056166177?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/rn-overview-0000001057541182?ha_source=hms1)\n\n### Additional Topics\n\n- [Configuring App Information in AppGallery Connect](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/config-agc-0000001056446155?ha_source=hms1) \n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with \n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENSE)\n\n"
  },
  {
    "path": "react-native-hms-scan/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    mavenCentral()\n    jcenter()\n}\n\ndependencies {\n    implementation 'com.facebook.react:react-native:+' // From node_modules\n    implementation 'com.huawei.hms:scan:2.12.0.301' // Hms Scan\n    implementation 'com.huawei.hms:hianalytics:6.12.0.300' // Hms Analytics\n    implementation \"com.google.code.gson:gson:2.9.1\" // Gson\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-scan/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-scan/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-scan/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.huawei.hms.rn.scan\">\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>\n    <!--camera permission-->\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <!--read permission for Bitmap Mode-->\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <!--write permission for save QRCODE Bitmap,not for scankit itself-->\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-feature android:name=\"android.hardware.camera\" />\n    <uses-feature android:name=\"android.hardware.camera.autofocus\" />\n    <uses-permission android:name=\"android.permission.VIBRATE\" />\n    <application>\n        <activity android:name=\"com.huawei.hms.rn.scan.customized.CustomizedViewActivity\" android:exported=\"false\"/>\n        <activity android:name=\"com.huawei.hms.rn.scan.multi.CommonActivity\" android:screenOrientation=\"portrait\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/RNHMSScanPackage.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan;\n\nimport androidx.annotation.NonNull;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\nimport com.huawei.hms.rn.scan.customized.RNHMSScanCustomizedViewModule;\nimport com.huawei.hms.rn.scan.multi.RNHMSScanMultiProcessorModule;\nimport com.huawei.hms.rn.scan.scanutils.RNHMSScanUtilsModule;\n\npublic class RNHMSScanPackage implements ReactPackage {\n    @NonNull\n    @Override\n    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList(\n                new RNHMSScanUtilsModule(reactContext),\n                new RNHMSScanMultiProcessorModule(reactContext),\n                new RNHMSScanCustomizedViewModule(reactContext));\n    }\n\n    @NonNull\n    @Override\n    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {\n        return Arrays.asList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/customized/CustomizedViewActivity.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.customized;\n\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.Rect;\nimport android.os.Bundle;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.Base64;\nimport android.util.DisplayMetrics;\nimport android.util.Log;\nimport android.view.View;\nimport android.view.Window;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\nimport android.widget.LinearLayout;\n\nimport androidx.annotation.Nullable;\n\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport com.huawei.hms.hmsscankit.RemoteView;\nimport com.huawei.hms.hmsscankit.ScanUtil;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzerOptions;\nimport com.huawei.hms.rn.scan.R;\nimport com.huawei.hms.rn.scan.logger.HMSLogger;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.Objects;\n\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWM;\n\npublic class CustomizedViewActivity extends ReactActivity {\n    private ReactApplicationContext mContext;\n\n    private RemoteView remoteView;\n\n    private ImageView flashButton;\n\n    private Gson mGson = new GsonBuilder().setPrettyPrinting().create();\n\n    private HMSLogger mHMSLogger;\n\n    int mScreenWidth;\n\n    int mScreenHeight;\n\n    int SCAN_FRAME_SIZE_WIDTH;\n\n    int SCAN_FRAME_SIZE_HEIGHT;\n\n    boolean continuouslyScan;\n\n    boolean enableReturnOriginalScan;\n\n    Intent intent;\n\n    Bundle bundle;\n\n    private int[] img = {R.drawable.flashlight_on, R.drawable.flashlight_off};\n\n    public static final int REQUEST_CODE_PHOTO = 0X1113;\n\n    public enum Event {\n        ON_RESPONSE(\"onResponse\"),\n        ON_START(\"onStart\"),\n        ON_RESUME(\"onResume\"),\n        ON_PAUSE(\"onPause\"),\n        ON_DESTROY(\"onDestroy\"),\n        ON_STOP(\"onStop\"),\n        ON_ORIGINAL_SCAN_LOAD(\"onOriginalScanLoad\");\n\n        private String eventName;\n\n        Event(String eventName) {\n            this.eventName = eventName;\n        }\n\n        public String getName() {\n            return eventName;\n        }\n    }\n\n    void sendEvent(Event event, @Nullable WritableMap wm) {\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), wm);\n    }\n\n    void sendEvent(Event event, @Nullable Object obj) {\n        mContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(event.getName(), obj);\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mContext = (ReactApplicationContext) getReactNativeHost().getReactInstanceManager().getCurrentReactContext();\n        mHMSLogger = HMSLogger.getInstance(mContext);\n        intent = getIntent();\n\n        try {\n            bundle = intent.getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\n        setContentView(R.layout.activity_defined);\n        FrameLayout frameLayout = findViewById(R.id.rim);\n        ImageView galleryButton = findViewById(R.id.img_btn);\n        ImageView scanFrame = findViewById(R.id.scan_area);\n        flashButton = findViewById(R.id.flush_btn);\n\n        DisplayMetrics dm = getResources().getDisplayMetrics();\n        float density = dm.density;\n        mScreenWidth = getResources().getDisplayMetrics().widthPixels;\n        mScreenHeight = getResources().getDisplayMetrics().heightPixels;\n\n        SCAN_FRAME_SIZE_HEIGHT = Objects.requireNonNull(bundle).getInt(\"rectHeight\");\n        SCAN_FRAME_SIZE_WIDTH = bundle.getInt(\"rectWidth\");\n\n        int scanFrameSizeHeight = (int) (SCAN_FRAME_SIZE_HEIGHT * density);\n        int scanFrameSizeWidth = (int) (SCAN_FRAME_SIZE_WIDTH * density);\n\n        Rect rect = new Rect();\n        rect.left = mScreenWidth / 2 - scanFrameSizeWidth / 2;\n        rect.right = mScreenWidth / 2 + scanFrameSizeWidth / 2;\n        rect.top = mScreenHeight / 2 - scanFrameSizeHeight / 2;\n        rect.bottom = mScreenHeight / 2 + scanFrameSizeHeight / 2;\n\n        scanFrame.getLayoutParams().height = rect.height();\n        scanFrame.getLayoutParams().width = rect.width();\n\n        continuouslyScan = bundle.getBoolean(\"continuouslyScan\");\n\n        enableReturnOriginalScan = bundle.getBoolean(\"enableReturnOriginalScan\");\n\n        RemoteView.Builder builder = new RemoteView.Builder().setContext(this)\n            .setBoundingBox(rect)\n            .setFormat(bundle.getInt(\"scanType\"), bundle.getIntArray(\"additionalScanTypes\"))\n            .setContinuouslyScan(continuouslyScan);\n\n        if (enableReturnOriginalScan) {\n            builder.enableReturnBitmap();\n        }\n\n        remoteView = builder.build();\n\n        RNHMSScanCustomizedViewModule.setViews(remoteView, flashButton);\n\n        mHMSLogger.startMethodExecutionTimer(\"CustomizedViewActivity.customizedView\");\n        remoteView.setOnResultCallback(result -> {\n            if (enableReturnOriginalScan) {\n                sendOriginalScan(result[0]);\n            }\n            if (result != null && result.length > 0 && result[0] != null && !TextUtils.isEmpty(\n                result[0].getOriginalValue())) {\n                if (!continuouslyScan) {\n                    mHMSLogger.sendSingleEvent(\"CustomizedViewActivity.customizedView\");\n                    Intent resultIntent = new Intent();\n                    resultIntent.putExtra(ScanUtil.RESULT, result[0]);\n                    setResult(RESULT_OK, resultIntent);\n                    CustomizedViewActivity.this.finish();\n\n                } else {\n                    sendEvent(Event.ON_RESPONSE, toWM(mGson.toJson(result[0])));\n                    mHMSLogger.sendPeriodicEvent(\"CustomizedViewActivity.customizedView\");\n                }\n            }\n        });\n\n        remoteView.onCreate(savedInstanceState);\n        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,\n            LinearLayout.LayoutParams.MATCH_PARENT);\n        frameLayout.addView(remoteView, params);\n\n        setBackOperation();\n\n        flashButton.setVisibility(View.INVISIBLE);\n\n        if (bundle.getBoolean(\"flashOnLightChange\")) {\n            setFlashOperation();\n            remoteView.setOnLightVisibleCallback(visible -> {\n                if (visible) {\n                    flashButton.setVisibility(View.VISIBLE);\n                } else {\n                    flashButton.setVisibility(View.INVISIBLE);\n                }\n            });\n        }\n\n        if (bundle.getBoolean(\"isFlashAvailable\")) {\n            flashButton.setVisibility(View.VISIBLE);\n            setFlashOperation();\n        }\n\n        if (bundle.getBoolean(\"isGalleryAvailable\")) {\n            galleryButton.setVisibility(View.VISIBLE);\n            setPictureScanOperation();\n        }\n    }\n\n    private void sendOriginalScan(HmsScan scan) {\n        Bitmap bitmap = scan.getOriginalBitmap();\n        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();\n        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);\n        String byteArray = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);\n        sendEvent(Event.ON_ORIGINAL_SCAN_LOAD, byteArray);\n    }\n\n    private void setPictureScanOperation() {\n        ImageView galleryButton = findViewById(R.id.img_btn);\n        galleryButton.setOnClickListener(v -> {\n            Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);\n            pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, \"image/*\");\n            CustomizedViewActivity.this.startActivityForResult(pickIntent, REQUEST_CODE_PHOTO);\n        });\n    }\n\n    private void setFlashOperation() {\n        flashButton.setOnClickListener(v -> {\n            if (remoteView.getLightStatus()) {\n                remoteView.switchLight();\n                flashButton.setImageResource(img[1]);\n            } else {\n                remoteView.switchLight();\n                flashButton.setImageResource(img[0]);\n            }\n        });\n    }\n\n    private void setBackOperation() {\n        ImageView backButton = findViewById(R.id.back_img);\n        backButton.setOnClickListener(v -> CustomizedViewActivity.this.finish());\n    }\n\n    /**\n     * Call the lifecycle management method of the remoteView activity.\n     * RN callbacks.\n     */\n    @Override\n    protected void onStart() {\n        super.onStart();\n        remoteView.onStart();\n        sendEvent(Event.ON_START, null);\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        remoteView.onResume();\n        sendEvent(Event.ON_RESUME, null);\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        remoteView.onPause();\n        sendEvent(Event.ON_PAUSE, null);\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        remoteView.onDestroy();\n        sendEvent(Event.ON_DESTROY, null);\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        remoteView.onStop();\n        sendEvent(Event.ON_STOP, null);\n    }\n\n    /**\n     * Handle the return results from the gallery.\n     */\n    @Override\n    public void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_PHOTO) {\n            intent = getIntent();\n            try {\n                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());\n                mHMSLogger.startMethodExecutionTimer(\"CustomizedViewActivity.decodeWithBitmap\");\n                HmsScan[] hmsScans = ScanUtil.decodeWithBitmap(CustomizedViewActivity.this, bitmap,\n                    new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(\n                        Objects.requireNonNull(intent.getExtras()).getInt(\"scanType\"),\n                        intent.getExtras().getIntArray(\"additionalScanTypes\")).setPhotoMode(true).create());\n                mHMSLogger.sendSingleEvent(\"CustomizedViewActivity.decodeWithBitmap\");\n                if (hmsScans != null && hmsScans.length > 0 && hmsScans[0] != null && !TextUtils.isEmpty(\n                    hmsScans[0].getOriginalValue())) {\n                    Intent resultIntent = new Intent();\n                    resultIntent.putExtra(ScanUtil.RESULT, hmsScans[0]);\n                    setResult(RESULT_OK, resultIntent);\n                    finish();\n                }\n            } catch (IOException e) {\n                Log.i(\"Customized-IOException\", e.getMessage());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/customized/RNHMSScanCustomizedViewModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.customized;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.text.TextUtils;\nimport android.widget.ImageView;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport com.huawei.hms.hmsscankit.RemoteView;\nimport com.huawei.hms.hmsscankit.ScanUtil;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.rn.scan.R;\nimport com.huawei.hms.rn.scan.utils.Errors;\n\nimport static android.app.Activity.RESULT_OK;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.getIntegerArrayFromReadableArray;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.hasValidKey;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWM;\n\npublic class RNHMSScanCustomizedViewModule extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private ReactContext mReactContext;\n    private Promise mPromise;\n    private final Gson gson;\n    private final int[] img = {R.drawable.flashlight_on, R.drawable.flashlight_off};\n\n    private static final int REQUEST_CODE_SCAN_CUSTOMIZED = 14;\n    @SuppressLint(\"StaticFieldLeak\")\n    private static RemoteView remoteView;\n    @SuppressLint(\"StaticFieldLeak\")\n    private static ImageView flashButton;\n\n    public static void setViews(RemoteView remoteView, ImageView flashButton) {\n        RNHMSScanCustomizedViewModule.remoteView = remoteView;\n        RNHMSScanCustomizedViewModule.flashButton = flashButton;\n    }\n\n    public RNHMSScanCustomizedViewModule(@NonNull ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mReactContext.addActivityEventListener(this);\n        gson = new GsonBuilder().setPrettyPrinting().create();\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"RNHMSScanCustomizedViewModule\";\n    }\n\n    @ReactMethod\n    public void startCustomizedView(final ReadableMap buildBitmapRequest, final Promise promise) {\n        mPromise = promise;\n        int scanType = 0;\n        if (hasValidKey(buildBitmapRequest, \"scanType\", ReadableType.Number)) {\n            scanType = buildBitmapRequest.getInt(\"scanType\");\n        }\n\n        int[] additionalScanTypes = null;\n        if (hasValidKey(buildBitmapRequest, \"additionalScanTypes\", ReadableType.Array)) {\n            additionalScanTypes = getIntegerArrayFromReadableArray(buildBitmapRequest.getArray(\"additionalScanTypes\"));\n        }\n\n        int rectWidth = 0;\n        if (hasValidKey(buildBitmapRequest, \"rectWidth\", ReadableType.Number)) {\n            rectWidth = buildBitmapRequest.getInt(\"rectWidth\");\n        }\n\n        int rectHeight = 0;\n        if (hasValidKey(buildBitmapRequest, \"rectHeight\", ReadableType.Number)) {\n            rectHeight = buildBitmapRequest.getInt(\"rectHeight\");\n        }\n\n        boolean isGalleryAvailable = false;\n        if (hasValidKey(buildBitmapRequest, \"isGalleryAvailable\", ReadableType.Boolean)) {\n            isGalleryAvailable = buildBitmapRequest.getBoolean(\"isGalleryAvailable\");\n        }\n        boolean flashOnLightChange = false;\n        if (hasValidKey(buildBitmapRequest, \"flashOnLightChange\", ReadableType.Boolean)) {\n            flashOnLightChange = buildBitmapRequest.getBoolean(\"flashOnLightChange\");\n        }\n        boolean isFlashAvailable = false;\n        if (hasValidKey(buildBitmapRequest, \"isFlashAvailable\", ReadableType.Boolean)) {\n            isFlashAvailable = buildBitmapRequest.getBoolean(\"isFlashAvailable\");\n        }\n        boolean continuouslyScan = false;\n        if (hasValidKey(buildBitmapRequest, \"continuouslyScan\", ReadableType.Boolean)) {\n            continuouslyScan = buildBitmapRequest.getBoolean(\"continuouslyScan\");\n        }\n        boolean enableReturnOriginalScan = false;\n        if (hasValidKey(buildBitmapRequest, \"enableReturnOriginalScan\", ReadableType.Boolean)) {\n            enableReturnOriginalScan = buildBitmapRequest.getBoolean(\"enableReturnOriginalScan\");\n        }\n\n        Intent intent = new Intent(mReactContext, CustomizedViewActivity.class);\n\n        intent.putExtra(\"scanType\", scanType);\n        if (additionalScanTypes != null) {\n            intent.putExtra(\"additionalScanTypes\", additionalScanTypes);\n        }\n        intent.putExtra(\"rectWidth\", rectWidth);\n        intent.putExtra(\"rectHeight\", rectHeight);\n\n        intent.putExtra(\"flashOnLightChange\", flashOnLightChange);\n        intent.putExtra(\"isFlashAvailable\", isFlashAvailable);\n        intent.putExtra(\"isGalleryAvailable\", isGalleryAvailable);\n        intent.putExtra(\"continuouslyScan\", continuouslyScan);\n        intent.putExtra(\"enableReturnOriginalScan\", enableReturnOriginalScan);\n\n\n        mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_SCAN_CUSTOMIZED);\n    }\n\n    @ReactMethod\n    public void pauseContinuouslyScan(final Promise promise) {\n        if (remoteView != null) {\n            remoteView.pauseContinuouslyScan();\n            promise.resolve(true);\n        } else {\n            promise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n        }\n    }\n\n    @ReactMethod\n    public void resumeContinuouslyScan(final Promise promise) {\n        if (remoteView != null) {\n            remoteView.resumeContinuouslyScan();\n            promise.resolve(true);\n        } else {\n            promise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n        }\n    }\n\n    @ReactMethod\n    public void switchLight(final Promise promise) {\n        if (remoteView != null) {\n            remoteView.switchLight();\n            if (remoteView.getLightStatus()) {\n                flashButton.setImageResource(img[1]);\n            } else {\n                flashButton.setImageResource(img[0]);\n            }\n        } else {\n            promise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n        }\n    }\n\n    @ReactMethod\n    public void getLightStatus(final Promise promise) {\n        if (remoteView != null) {\n            promise.resolve(remoteView.getLightStatus());\n        } else {\n            promise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n        }\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        if (resultCode != RESULT_OK || data == null) {\n            return;\n        }\n        if (requestCode == REQUEST_CODE_SCAN_CUSTOMIZED) {\n            HmsScan hmsScan = data.getParcelableExtra(ScanUtil.RESULT);\n            if (hmsScan != null && !TextUtils.isEmpty(hmsScan.getOriginalValue()) && mPromise != null) {\n                mPromise.resolve(toWM(gson.toJson(hmsScan)));\n                mPromise = null;\n            }\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/logger/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.logger;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Scan\";\n\n    private static final String PLATFORM = \"ReactNative\";\n\n    private static final String VERSION = \"2.12.0.301\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n\n    private static final String UNKNOWN = \"UNKNOWN\";\n\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n\n    private final Map<String, Long> allCountMap = new HashMap<>();\n\n    private final Map<String, Long> failCountMap = new HashMap<>();\n\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for\n     * error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for\n     * error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for\n     * error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode,\n        final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for\n     * error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map\n     * then the default value is returned.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map The Map\n     * @param key Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K> Generic type of the key\n     * @param <V> Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz Class that object will be casted to its type\n     * @param <S> Source object's type\n     * @param <D> Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/CommonActivity.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.Point;\nimport android.os.Bundle;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.Log;\nimport android.util.SparseArray;\nimport android.view.Display;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\nimport android.view.View;\nimport android.view.Window;\nimport android.view.WindowManager;\nimport android.widget.FrameLayout;\nimport android.widget.ImageView;\n\nimport com.facebook.react.ReactActivity;\nimport com.facebook.react.bridge.ReactApplicationContext;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hms.hmsscankit.ScanUtil;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.scan.R;\nimport com.huawei.hms.rn.scan.logger.HMSLogger;\nimport com.huawei.hms.rn.scan.utils.Errors;\n\nimport java.io.IOException;\nimport java.util.List;\nimport java.util.Objects;\n\nimport static com.huawei.hms.rn.scan.scanutils.RNHMSScanUtilsModule.SCANMODEDECODE;\nimport static com.huawei.hms.rn.scan.scanutils.RNHMSScanUtilsModule.SCANMODEDECODEWITHBITMAP;\nimport static com.huawei.hms.rn.scan.multi.RNHMSScanMultiProcessorModule.MULTIPROCESSOR_ASYNC_CODE;\nimport static com.huawei.hms.rn.scan.multi.RNHMSScanMultiProcessorModule.MULTIPROCESSOR_SYNC_CODE;\n\npublic class CommonActivity extends ReactActivity {\n    private ReactApplicationContext mContext;\n\n    public static final int REQUEST_CODE_PHOTO = 0X1113;\n\n    private static final String TAG = \"MultiProcessorActivity\";\n\n    private SurfaceHolder surfaceHolder;\n\n    private CommonCamera mCommonCamera;\n\n    private SurfaceCallBack surfaceCallBack;\n\n    private CommonHandler handler;\n\n    private boolean isShow;\n\n    private int mode;\n\n    private ImageView galleryButton;\n\n    private HMSLogger mHMSLogger;\n\n    private HmsScanAnalyzer mAnalyzer;\n\n    public ScanResultView scanResultView;\n\n    Bundle bundle;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mContext = (ReactApplicationContext) getReactNativeHost().getReactInstanceManager().getCurrentReactContext();\n        Window window = getWindow();\n\n        mHMSLogger = HMSLogger.getInstance(mContext);\n\n        try {\n            bundle = getIntent().getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n\n        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\n        setContentView(R.layout.activity_multiprocessor);\n\n        mode = Objects.requireNonNull(bundle).getInt(\"scanMode\");\n\n        mCommonCamera = new CommonCamera();\n        surfaceCallBack = new SurfaceCallBack();\n        SurfaceView cameraPreview = findViewById(R.id.surfaceView);\n        adjustSurface(cameraPreview);\n        surfaceHolder = cameraPreview.getHolder();\n        isShow = false;\n        setBackOperation();\n\n        Intent intent = getIntent();\n        try {\n            bundle = intent.getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n        galleryButton = findViewById(R.id.img_btn);\n        galleryButton.setVisibility(View.INVISIBLE);\n\n        if (bundle.getBoolean(\"isGalleryAvailable\") && mode == MULTIPROCESSOR_ASYNC_CODE\n            || mode == MULTIPROCESSOR_SYNC_CODE) {\n            galleryButton.setVisibility(View.VISIBLE);\n            setPictureScanOperation();\n        }\n\n        scanResultView = findViewById(R.id.scan_result_view);\n\n        Intent getIntent = getIntent();\n        try {\n            bundle = getIntent.getExtras();\n        } catch (Exception e) {\n            Log.i(\"Customized-Exception\", e.getMessage());\n        }\n        mAnalyzer = new HmsScanAnalyzer.Creator(this).setHmsScanTypes(Objects.requireNonNull(bundle).getInt(\"scanType\"),\n            bundle.getIntArray(\"additionalScanTypes\")).create();\n\n    }\n\n    private void adjustSurface(SurfaceView cameraPreview) {\n        FrameLayout.LayoutParams paramSurface = (FrameLayout.LayoutParams) cameraPreview.getLayoutParams();\n        if (getSystemService(Context.WINDOW_SERVICE) != null) {\n            WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);\n            Display defaultDisplay = Objects.requireNonNull(windowManager).getDefaultDisplay();\n            Point outPoint = new Point();\n            defaultDisplay.getRealSize(outPoint);\n            float screenWidth = outPoint.x;\n            float screenHeight = outPoint.y;\n            float rate;\n            if (screenWidth / (float) 1080 > screenHeight / (float) 1920) {\n                rate = screenWidth / (float) 1080;\n                int targetHeight = (int) (1920 * rate);\n                paramSurface.width = FrameLayout.LayoutParams.MATCH_PARENT;\n                paramSurface.height = targetHeight;\n                int topMargin = (int) (-(targetHeight - screenHeight) / 2);\n                if (topMargin < 0) {\n                    paramSurface.topMargin = topMargin;\n                }\n            } else {\n                rate = screenHeight / (float) 1920;\n                int targetWidth = (int) (1080 * rate);\n                paramSurface.width = targetWidth;\n                paramSurface.height = FrameLayout.LayoutParams.MATCH_PARENT;\n                int leftMargin = (int) (-(targetWidth - screenWidth) / 2);\n                if (leftMargin < 0) {\n                    paramSurface.leftMargin = leftMargin;\n                }\n            }\n        }\n    }\n\n    private void setBackOperation() {\n        ImageView backButton = findViewById(R.id.back_img);\n        backButton.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                onBackPressed();\n            }\n        });\n    }\n\n    @Override\n    public void onBackPressed() {\n        if (mode == MULTIPROCESSOR_ASYNC_CODE || mode == MULTIPROCESSOR_SYNC_CODE || mode == SCANMODEDECODE\n            || mode == SCANMODEDECODEWITHBITMAP) {\n            setResult(RESULT_CANCELED);\n        }\n        CommonActivity.this.finish();\n    }\n\n    private void setPictureScanOperation() {\n        galleryButton.setOnClickListener(new View.OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);\n                pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, \"image/*\");\n                CommonActivity.this.startActivityForResult(pickIntent, REQUEST_CODE_PHOTO);\n            }\n        });\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (isShow) {\n            initCamera();\n        } else {\n            surfaceHolder.addCallback(surfaceCallBack);\n        }\n    }\n\n    @Override\n    protected void onPause() {\n        if (handler != null) {\n            handler.quit();\n            handler = null;\n        }\n        mCommonCamera.close();\n        if (!isShow) {\n            surfaceHolder.removeCallback(surfaceCallBack);\n        }\n        super.onPause();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n    }\n\n    private void initCamera() {\n        try {\n            mCommonCamera.open(surfaceHolder);\n            if (handler == null) {\n                Intent intent = getIntent();\n\n                long[] colorList = Objects.requireNonNull(intent.getExtras()).getLongArray(\"colorList\");\n\n                int textColor = intent.getExtras().getInt(\"textColor\");\n                float textSize = intent.getExtras().getFloat(\"textSize\");\n                float strokeWidth = intent.getExtras().getFloat(\"strokeWidth\");\n\n                int textBackgroundColor = intent.getExtras().getInt(\"textBackgroundColor\");\n                boolean showText = intent.getExtras().getBoolean(\"showText\");\n                boolean showTextOutBounds = intent.getExtras().getBoolean(\"showTextOutBounds\");\n                boolean autoSizeText = intent.getExtras().getBoolean(\"autoSizeText\");\n                int minTextSize = intent.getExtras().getInt(\"minTextSize\");\n                int granularity = intent.getExtras().getInt(\"granularity\");\n\n                boolean multiMode = intent.getExtras().getBoolean(\"multiMode\");\n                int scanType = intent.getExtras().getInt(\"scanType\");\n                int[] additionalScanTypes = intent.getExtras().getIntArray(\"additionalScanTypes\");\n                boolean parseResult = intent.getExtras().getBoolean(\"parseResult\");\n\n                if (mAnalyzer != null) {\n                    handler = new CommonHandler(CommonActivity.this, mContext, mCommonCamera, mode, colorList,\n                        textColor, textSize, strokeWidth, textBackgroundColor, showText, showTextOutBounds,\n                        autoSizeText, minTextSize, granularity, mAnalyzer, multiMode, scanType, additionalScanTypes,\n                        parseResult);\n                }\n            }\n        } catch (IOException e) {\n            Log.e(TAG, e.toString(), e);\n        }\n    }\n\n    @Override\n    public void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        if (resultCode != RESULT_OK || data == null || requestCode != REQUEST_CODE_PHOTO) {\n            return;\n        }\n        try {\n            if (mode == MULTIPROCESSOR_SYNC_CODE && mAnalyzer != null) {\n                decodeMultiSync(MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()));\n            } else if (mode == MULTIPROCESSOR_ASYNC_CODE && mAnalyzer != null) {\n                decodeMultiAsync(MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()));\n            }\n        } catch (IOException e) {\n            Log.e(TAG, \"Gallery Exception\");\n        }\n    }\n\n    private void decodeMultiAsync(Bitmap bitmap) {\n\n        MLFrame image = MLFrame.fromBitmap(bitmap);\n\n        if (mAnalyzer.isAvailable()) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorActivity.decodeMultiAsync\");\n            mAnalyzer.analyzInAsyn(image).addOnSuccessListener(new OnSuccessListener<List<HmsScan>>() {\n                @Override\n                public void onSuccess(List<HmsScan> hmsScans) {\n                    if (hmsScans != null && hmsScans.size() > 0 && hmsScans.get(0) != null && !TextUtils.isEmpty(\n                        hmsScans.get(0).getOriginalValue())) {\n                        mHMSLogger.sendSingleEvent(\"MultiProcessorActivity.decodeMultiAsync\");\n                        HmsScan[] infos = new HmsScan[hmsScans.size()];\n                        Intent intent = new Intent();\n                        intent.putExtra(ScanUtil.RESULT, hmsScans.toArray(infos));\n                        setResult(RESULT_OK, intent);\n                        CommonActivity.this.finish();\n                    }\n                }\n            }).addOnFailureListener(new OnFailureListener() {\n                @Override\n                public void onFailure(Exception e) {\n                    Log.w(TAG, e);\n                    mHMSLogger.sendSingleEvent(\"MultiProcessorActivity.decodeMultiAsync\",\n                        Errors.DECODE_MULTI_ASYNC_ON_FAILURE.getErrorCode());\n                }\n            });\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n        }\n    }\n\n    private void decodeMultiSync(Bitmap bitmap) {\n        MLFrame image = MLFrame.fromBitmap(bitmap);\n        if (mAnalyzer.isAvailable()) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorActivity.decodeMultiSync\");\n            SparseArray<HmsScan> result = mAnalyzer.analyseFrame(image);\n            mHMSLogger.sendSingleEvent(\"MultiProcessorActivity.decodeMultiSync\");\n            if (result != null && result.size() > 0 && result.valueAt(0) != null && !TextUtils.isEmpty(\n                result.valueAt(0).getOriginalValue())) {\n                HmsScan[] info = new HmsScan[result.size()];\n                for (int index = 0; index < result.size(); index++) {\n                    info[index] = result.valueAt(index);\n                }\n                Intent intent = new Intent();\n                intent.putExtra(ScanUtil.RESULT, info);\n                setResult(RESULT_OK, intent);\n                CommonActivity.this.finish();\n            } else {\n                Log.i(\"Error code: \" + Errors.DECODE_MULTI_SYNC_COULD_NOT_FIND.getErrorCode(),\n                    Errors.DECODE_MULTI_SYNC_COULD_NOT_FIND.getErrorMessage());\n            }\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n        }\n    }\n\n    class SurfaceCallBack implements SurfaceHolder.Callback {\n\n        @Override\n        public void surfaceCreated(SurfaceHolder holder) {\n            if (!isShow) {\n                isShow = true;\n                initCamera();\n            }\n        }\n\n        @Override\n        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {\n\n        }\n\n        @Override\n        public void surfaceDestroyed(SurfaceHolder holder) {\n            isShow = false;\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/CommonCamera.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nimport android.graphics.ImageFormat;\nimport android.hardware.Camera;\n\nimport android.os.Handler;\nimport android.os.Message;\n\nimport android.view.SurfaceHolder;\n\nimport java.io.IOException;\nimport java.util.List;\n\nclass CommonCamera {\n    private Camera camera = null;\n\n    private Camera.Parameters parameters = null;\n\n    private boolean isPreview = false;\n\n    private FrameCallback frameCallback = new FrameCallback();\n\n    /**\n     * Open up the camera.\n     */\n    synchronized void open(SurfaceHolder holder) throws IOException {\n        camera = Camera.open();\n        parameters = camera.getParameters();\n        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);\n        parameters.setPictureFormat(ImageFormat.NV21);\n        camera.setPreviewDisplay(holder);\n        camera.setDisplayOrientation(90);\n        camera.setParameters(parameters);\n    }\n\n    synchronized void close() {\n        if (camera != null) {\n            camera.release();\n            camera = null;\n        }\n    }\n\n    synchronized void startPreview() {\n        if (camera != null && !isPreview) {\n            camera.startPreview();\n            isPreview = true;\n        }\n    }\n\n    synchronized void stopPreview() {\n        if (camera != null && isPreview) {\n            camera.stopPreview();\n            frameCallback.setProperties(null);\n            isPreview = false;\n        }\n    }\n\n    synchronized void callbackFrame(Handler handler, double zoomValue) {\n        if (camera != null && isPreview) {\n            frameCallback.setProperties(handler);\n            double defaultZoom = 1.0d;\n            if (camera.getParameters().isZoomSupported() && Double.compare(zoomValue, defaultZoom) != 0) {\n                parameters.setZoom(convertZoomInt(zoomValue));\n                camera.setParameters(parameters);\n            }\n            camera.setOneShotPreviewCallback(frameCallback);\n        }\n    }\n\n    private int convertZoomInt(double zoomValue) {\n        List<Integer> allZoomRatios = parameters.getZoomRatios();\n        int maxZoom = allZoomRatios.get(allZoomRatios.size() - 1) / 100;\n        if (zoomValue >= maxZoom) {\n            return allZoomRatios.size() - 1;\n        }\n        for (int i = 1; i < allZoomRatios.size(); i++) {\n            if (allZoomRatios.get(i) >= (zoomValue * 100) && allZoomRatios.get(i - 1) <= (zoomValue * 100)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    static class FrameCallback implements Camera.PreviewCallback {\n\n        private Handler handler;\n\n        void setProperties(Handler handler) {\n            this.handler = handler;\n        }\n\n        @Override\n        public void onPreviewFrame(byte[] data, Camera camera) {\n            if (handler != null) {\n                Message message = handler.obtainMessage(0, camera.getParameters().getPreviewSize().width,\n                    camera.getParameters().getPreviewSize().height, data);\n                message.sendToTarget();\n                handler = null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/CommonHandler.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.ImageFormat;\nimport android.graphics.Rect;\nimport android.graphics.YuvImage;\nimport android.os.Handler;\nimport android.os.HandlerThread;\nimport android.os.Message;\nimport android.text.TextUtils;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\n\nimport com.huawei.hms.hmsscankit.ScanUtil;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzer;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzerOptions;\nimport com.huawei.hms.ml.scan.HmsScanFrame;\nimport com.huawei.hms.ml.scan.HmsScanFrameOptions;\nimport com.huawei.hms.mlsdk.common.MLFrame;\n\nimport java.io.ByteArrayOutputStream;\nimport java.util.List;\n\nimport static android.app.Activity.RESULT_OK;\nimport static com.huawei.hms.rn.scan.scanutils.RNHMSScanUtilsModule.SCANMODEDECODE;\nimport static com.huawei.hms.rn.scan.scanutils.RNHMSScanUtilsModule.SCANMODEDECODEWITHBITMAP;\nimport static com.huawei.hms.rn.scan.multi.RNHMSScanMultiProcessorModule.MULTIPROCESSOR_ASYNC_CODE;\nimport static com.huawei.hms.rn.scan.multi.RNHMSScanMultiProcessorModule.MULTIPROCESSOR_SYNC_CODE;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWM;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport com.huawei.hms.rn.scan.logger.HMSLogger;\nimport com.huawei.hms.rn.scan.utils.Errors;\n\npublic final class CommonHandler extends Handler {\n\n    private static final double DEFAULT_ZOOM = 1.0d;\n\n    private final CommonCamera mCommonCamera;\n\n    private final HandlerThread decodeThread;\n\n    private final Handler decodeHandle;\n\n    private Activity activity;\n\n    private ReactApplicationContext reactContext;\n\n    private final long[] mColorList;\n\n    private final int mTextColor;\n\n    private final float mTextSize;\n\n    private final float mStrokeWidth;\n\n    private final int mTextBackgroundColor;\n\n    private final boolean mShowText;\n\n    private final boolean mShowTextOutBounds;\n\n    private final boolean mAutoSizeText;\n\n    private final int mMinTextSize;\n\n    private final int mGranularity;\n\n    private final int mode;\n\n    private final boolean multiMode;\n\n    private final int scanType;\n\n    private final int[] additionalScanTypes;\n\n    private final boolean parseResult;\n\n    private final Gson mGson = new GsonBuilder().setPrettyPrinting().create();\n\n    private HMSLogger mHMSLogger;\n\n    private final HmsScanAnalyzer analyzer;\n\n    CommonHandler(final Activity activity, ReactApplicationContext reactContext, CommonCamera commonCamera,\n        final int mode, final long[] colorList, final int textColor, final float textSize, final float strokeWidth,\n        final int textBackgroundColor, final boolean showText, final boolean showTextOutBounds,\n        final boolean autoSizeText, final int minTextSize, final int granularity, final HmsScanAnalyzer mAnalyzer,\n        final boolean multiMode, final int scanType, final int[] additionalScanTypes, final boolean parseResult) {\n\n        this.mCommonCamera = commonCamera;\n        this.activity = activity;\n        this.reactContext = reactContext;\n        this.mode = mode;\n\n        this.multiMode = multiMode;\n        this.scanType = scanType;\n        this.additionalScanTypes = additionalScanTypes;\n        this.parseResult = parseResult;\n\n        this.mColorList = colorList;\n\n        this.mTextColor = textColor;\n        this.mTextSize = textSize;\n        this.mStrokeWidth = strokeWidth;\n\n        this.mTextBackgroundColor = textBackgroundColor;\n        this.mShowText = showText;\n        this.mShowTextOutBounds = showTextOutBounds;\n        this.mAutoSizeText = autoSizeText;\n\n        this.mMinTextSize = minTextSize;\n        this.mGranularity = granularity;\n\n        this.analyzer = mAnalyzer;\n\n        mHMSLogger = HMSLogger.getInstance(activity.getApplicationContext());\n\n        decodeThread = new HandlerThread(\"DecodeThread\");\n        decodeThread.start();\n        decodeHandle = new Handler(decodeThread.getLooper()) {\n            @Override\n            public void handleMessage(Message msg) {\n                if (msg == null) {\n                    return;\n                }\n                if (mode == MULTIPROCESSOR_SYNC_CODE || mode == SCANMODEDECODEWITHBITMAP || mode == SCANMODEDECODE) {\n                    HmsScan[] result = decodeSync(msg.arg1, msg.arg2, (byte[]) msg.obj);\n                    if (result == null || result.length == 0) {\n                        restart(DEFAULT_ZOOM);\n                    } else if (TextUtils.isEmpty(result[0].getOriginalValue()) && result[0].getZoomValue() != 1.0) {\n                        restart(result[0].getZoomValue());\n                    } else if (!TextUtils.isEmpty(result[0].getOriginalValue())) {\n                        Message message = new Message();\n                        message.what = msg.what;\n                        message.obj = result;\n                        CommonHandler.this.sendMessage(message);\n                        restart(DEFAULT_ZOOM);\n                    } else {\n                        restart(DEFAULT_ZOOM);\n                    }\n                }\n                if (mode == MULTIPROCESSOR_ASYNC_CODE) {\n                    decodeAsync(msg.arg1, msg.arg2, (byte[]) msg.obj);\n                }\n            }\n        };\n        commonCamera.startPreview();\n        restart(DEFAULT_ZOOM);\n    }\n\n    /**\n     * Call the MultiProcessor API in synchronous mode.\n     */\n    private HmsScan[] decodeSync(int width, int height, byte[] data) {\n        HmsScan[] info = new HmsScan[0];\n        Bitmap bitmap = convertToBitmap(width, height, data);\n        YuvImage yuv = new YuvImage(data, ImageFormat.NV21, width, height, null);\n\n        if (mode == SCANMODEDECODE) {\n            HmsScanFrameOptions options = new HmsScanFrameOptions.Creator().setHmsScanTypes(scanType,\n                additionalScanTypes).setPhotoMode(false).setMultiMode(multiMode).setParseResult(parseResult).create();\n            HmsScanFrame frame = new HmsScanFrame(yuv);\n            return ScanUtil.decode(activity, frame, options).getHmsScans();\n        } else if (mode == SCANMODEDECODEWITHBITMAP) {\n            HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(scanType,\n                additionalScanTypes).setPhotoMode(false).create();\n            return ScanUtil.decodeWithBitmap(activity, bitmap, options);\n        } else if (analyzer.isAvailable() && mode == MULTIPROCESSOR_SYNC_CODE) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorHandler.decodeMultiSync\");\n            MLFrame image = MLFrame.fromBitmap(bitmap);\n            SparseArray<HmsScan> result = analyzer.analyseFrame(image);\n            mHMSLogger.sendSingleEvent(\"MultiProcessorHandler.decodeMultiSync\");\n            if (result != null && result.size() > 0 && result.valueAt(0) != null && !TextUtils.isEmpty(\n                result.valueAt(0).getOriginalValue())) {\n                info = new HmsScan[result.size()];\n                for (int index = 0; index < result.size(); index++) {\n                    info[index] = result.valueAt(index);\n                }\n                return info;\n            }\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n        }\n        return info;\n    }\n\n    /**\n     * Call the MultiProcessor API in asynchronous mode.\n     */\n    private void decodeAsync(int width, int height, byte[] data) {\n\n        final Bitmap bitmap = convertToBitmap(width, height, data);\n        MLFrame image = MLFrame.fromBitmap(bitmap);\n\n        if (analyzer.isAvailable()) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorHandler.decodeMultiAsync\");\n            analyzer.analyzInAsyn(image).addOnSuccessListener(new OnSuccessListener<List<HmsScan>>() {\n                @Override\n                public void onSuccess(List<HmsScan> hmsScans) {\n                    if (hmsScans != null && hmsScans.size() > 0 && hmsScans.get(0) != null && !TextUtils.isEmpty(\n                        hmsScans.get(0).getOriginalValue())) {\n                        mHMSLogger.sendSingleEvent(\"MultiProcessorHandler.decodeMultiAsync\");\n                        HmsScan[] infos = new HmsScan[hmsScans.size()];\n                        Message message = new Message();\n                        message.obj = hmsScans.toArray(infos);\n                        CommonHandler.this.sendMessage(message);\n                    }\n                    restart(DEFAULT_ZOOM);\n                    bitmap.recycle();\n                }\n            }).addOnFailureListener(new OnFailureListener() {\n                @Override\n                public void onFailure(Exception e) {\n                    restart(DEFAULT_ZOOM);\n                    bitmap.recycle();\n                }\n            });\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n        }\n    }\n\n    /**\n     * Convert camera data into bitmap data.\n     */\n    private Bitmap convertToBitmap(int width, int height, byte[] data) {\n        YuvImage yuv = new YuvImage(data, ImageFormat.NV21, width, height, null);\n        ByteArrayOutputStream stream = new ByteArrayOutputStream();\n        yuv.compressToJpeg(new Rect(0, 0, width, height), 100, stream);\n        return BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.toByteArray().length);\n    }\n\n    @Override\n    public void handleMessage(Message message) {\n        removeMessages(1);\n        if (message.what == 0) {\n            CommonActivity commonActivity1 = (CommonActivity) activity;\n            commonActivity1.scanResultView.clear();\n            Intent intent = new Intent();\n            intent.putExtra(ScanUtil.RESULT, (HmsScan[]) message.obj);\n            activity.setResult(RESULT_OK, intent);\n            if (mode == MULTIPROCESSOR_ASYNC_CODE || mode == MULTIPROCESSOR_SYNC_CODE) {\n                CommonActivity commonActivity = (CommonActivity) activity;\n\n                HmsScan[] arr = (HmsScan[]) message.obj;\n                for (int i = 0; i < arr.length; i++) {\n                    reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)\n                        .emit(\"onMultiProcessorResponse\", toWM(mGson.toJson(arr[i])));\n                    commonActivity.scanResultView.add(\n                        new ScanResultView.HmsScanGraphic(commonActivity.scanResultView, arr[i],\n                            (int) mColorList[i % mColorList.length], mTextColor, mTextSize, mStrokeWidth,\n                            mTextBackgroundColor, mShowText, mShowTextOutBounds, mAutoSizeText, mMinTextSize,\n                            mGranularity));\n                }\n                commonActivity.scanResultView.setCameraInfo(1080, 1920);\n                commonActivity.scanResultView.invalidate();\n                sendEmptyMessageDelayed(1, 1000);\n            } else {\n                activity.finish();\n            }\n        } else if (message.what == 1) {\n            CommonActivity commonActivity1 = (CommonActivity) activity;\n            commonActivity1.scanResultView.clear();\n        }\n    }\n\n    void quit() {\n        try {\n            mCommonCamera.stopPreview();\n            decodeHandle.getLooper().quit();\n            decodeThread.join(500);\n        } catch (InterruptedException e) {\n            Log.w(\"Quit Camera Exception\", e);\n        }\n    }\n\n    private void restart(double zoomValue) {\n        mCommonCamera.callbackFrame(decodeHandle, zoomValue);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/RNHMSScanMultiProcessorModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.os.Parcelable;\nimport android.text.TextUtils;\nimport android.util.ArrayMap;\nimport android.util.Base64;\nimport android.util.Log;\nimport android.util.SparseArray;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport com.huawei.hmf.tasks.OnFailureListener;\nimport com.huawei.hmf.tasks.OnSuccessListener;\nimport com.huawei.hms.hmsscankit.ScanUtil;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzer;\nimport com.huawei.hms.mlsdk.common.MLFrame;\nimport com.huawei.hms.rn.scan.logger.HMSLogger;\nimport com.huawei.hms.rn.scan.utils.Errors;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\nimport static android.app.Activity.RESULT_OK;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.getIntegerArrayFromReadableArray;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.getLongArrayFromReadableArray;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.hasValidKey;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWA;\n\npublic class RNHMSScanMultiProcessorModule extends ReactContextBaseJavaModule implements ActivityEventListener {\n    private ReactContext mReactContext;\n\n    private Promise mPromise;\n\n    private final HMSLogger mHMSLogger;\n\n    private final Gson gson;\n\n    private static final int REQUEST_CODE_SCAN_MULTI = 15;\n\n    static final int MULTIPROCESSOR_SYNC_CODE = 444;\n\n    static final int MULTIPROCESSOR_ASYNC_CODE = 555;\n\n    public RNHMSScanMultiProcessorModule(@NonNull ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mReactContext.addActivityEventListener(this);\n        gson = new GsonBuilder().setPrettyPrinting().create();\n        mHMSLogger = HMSLogger.getInstance(mReactContext);\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> scanModes = new ArrayMap<>();\n        scanModes.put(\"Sync\", MULTIPROCESSOR_SYNC_CODE);\n        scanModes.put(\"Async\", MULTIPROCESSOR_ASYNC_CODE);\n        Map<String, Object> constants = new ArrayMap<>();\n        constants.put(\"SCAN_MODES\", scanModes);\n        return constants;\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"RNHMSScanMultiProcessorModule\";\n    }\n\n    @ReactMethod\n    public void startMultiProcessorCamera(final ReadableMap rm, final Promise promise) {\n        mPromise = promise;\n        int scanMode = 0;\n        if (hasValidKey(rm, \"scanMode\", ReadableType.Number)) {\n            scanMode = rm.getInt(\"scanMode\");\n        }\n\n        int scanType = 0;\n        if (hasValidKey(rm, \"scanType\", ReadableType.Number)) {\n            scanType = rm.getInt(\"scanType\");\n        }\n\n        int[] additionalScanTypes = null;\n        if (hasValidKey(rm, \"additionalScanTypes\", ReadableType.Array)) {\n            additionalScanTypes = getIntegerArrayFromReadableArray(rm.getArray(\"additionalScanTypes\"));\n        }\n\n        long[] colorList = new long[] {};\n        if (hasValidKey(rm, \"colorList\", ReadableType.Array)) {\n            colorList = getLongArrayFromReadableArray(rm.getArray(\"colorList\"));\n        }\n\n        float strokeWidth = 0f;\n        if (hasValidKey(rm, \"strokeWidth\", ReadableType.Number)) {\n            strokeWidth = (float) rm.getDouble(\"strokeWidth\");\n        }\n        ScanTextOptions scanTextOptions;\n        if (hasValidKey(rm, \"scanTextOptions\", ReadableType.Map)) {\n            scanTextOptions = gson.fromJson(rm.getMap(\"scanTextOptions\").toHashMap().toString(), ScanTextOptions.class);\n        } else {\n            scanTextOptions = new ScanTextOptions();\n        }\n\n        boolean isGalleryAvailable = false;\n        if (hasValidKey(rm, \"isGalleryAvailable\", ReadableType.Boolean)) {\n            isGalleryAvailable = rm.getBoolean(\"isGalleryAvailable\");\n        }\n\n        Intent intent = new Intent(mReactContext.getCurrentActivity(), CommonActivity.class);\n\n        intent.putExtra(\"scanType\", scanType);\n        if (additionalScanTypes != null) {\n            intent.putExtra(\"additionalScanTypes\", additionalScanTypes);\n        }\n        intent.putExtra(\"colorList\", colorList);\n\n        intent.putExtra(\"isGalleryAvailable\", isGalleryAvailable);\n        intent.putExtra(\"strokeWidth\", strokeWidth);\n\n        intent.putExtra(\"textColor\", scanTextOptions.getTextColor());\n        intent.putExtra(\"textSize\", scanTextOptions.getTextSize());\n        intent.putExtra(\"showText\", scanTextOptions.getShowText());\n        intent.putExtra(\"textBackgroundColor\", scanTextOptions.getTextBackgroundColor());\n        intent.putExtra(\"showTextOutBounds\", scanTextOptions.getShowTextOutBounds());\n        intent.putExtra(\"autoSizeText\", scanTextOptions.getAutoSizeText());\n        intent.putExtra(\"minTextSize\", scanTextOptions.getMinTextSize());\n        intent.putExtra(\"granularity\", scanTextOptions.getGranularity());\n\n        intent.putExtra(\"scanMode\", scanMode);\n\n        if (scanMode == MULTIPROCESSOR_ASYNC_CODE || scanMode == MULTIPROCESSOR_SYNC_CODE) {\n            mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);\n        } else {\n            mPromise.reject(Errors.MP_CAMERA_SCAN_MODE_ERROR.getErrorCode(),\n                Errors.MP_CAMERA_SCAN_MODE_ERROR.getErrorMessage());\n        }\n    }\n\n    @ReactMethod\n    public void decodeMultiSync(final ReadableMap rm, final Promise promise) {\n        mPromise = promise;\n        int scanType = 0;\n        if (hasValidKey(rm, \"scanType\", ReadableType.Number)) {\n            scanType = rm.getInt(\"scanType\");\n        }\n        int[] additionalScanTypes = null;\n        if (hasValidKey(rm, \"additionalScanTypes\", ReadableType.Array)) {\n            additionalScanTypes = getIntegerArrayFromReadableArray(rm.getArray(\"additionalScanTypes\"));\n        }\n        String data = \"\";\n        if (hasValidKey(rm, \"data\", ReadableType.String)) {\n            data = rm.getString(\"data\");\n        }\n\n        byte[] parsed = Base64.decode(data, Base64.DEFAULT);\n        Bitmap bitmap = BitmapFactory.decodeByteArray(parsed, 0, parsed.length);\n\n        MLFrame image = MLFrame.fromBitmap(bitmap);\n\n        HmsScanAnalyzer analyzer = new HmsScanAnalyzer.Creator(getCurrentActivity()).setHmsScanTypes(scanType,\n            additionalScanTypes).create();\n\n        if (analyzer.isAvailable()) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorMethodCallHandler.decodeMultiSync\");\n            SparseArray<HmsScan> scanResult = analyzer.analyseFrame(image);\n            mHMSLogger.sendSingleEvent(\"MultiProcessorMethodCallHandler.decodeMultiSync\");\n\n            if (scanResult != null && scanResult.size() > 0 && scanResult.valueAt(0) != null && !TextUtils.isEmpty(\n                scanResult.valueAt(0).getOriginalValue())) {\n                HmsScan[] info = new HmsScan[scanResult.size()];\n                for (int index = 0; index < scanResult.size(); index++) {\n                    info[index] = scanResult.valueAt(index);\n                }\n                mPromise.resolve(toWA(gson.toJson(info)));\n            } else {\n                mPromise.reject(Errors.DECODE_MULTI_SYNC_COULD_NOT_FIND.getErrorCode(),\n                    Errors.DECODE_MULTI_SYNC_COULD_NOT_FIND.getErrorMessage());\n            }\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n            mPromise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n        }\n        analyzer.destroy();\n    }\n\n    @ReactMethod\n    public void decodeMultiAsync(final ReadableMap rm, final Promise promise) {\n        mPromise = promise;\n        String data = \"\";\n        if (hasValidKey(rm, \"data\", ReadableType.String)) {\n            data = rm.getString(\"data\");\n        }\n        int scanType = 0;\n        if (hasValidKey(rm, \"scanType\", ReadableType.Number)) {\n            scanType = rm.getInt(\"scanType\");\n        }\n\n        int[] additionalScanTypes = null;\n        if (hasValidKey(rm, \"additionalScanTypes\", ReadableType.Array)) {\n            additionalScanTypes = getIntegerArrayFromReadableArray(rm.getArray(\"additionalScanTypes\"));\n        }\n\n        byte[] parsed = Base64.decode(data, Base64.DEFAULT);\n        Bitmap bitmap = BitmapFactory.decodeByteArray(parsed, 0, parsed.length);\n\n        MLFrame image = MLFrame.fromBitmap(bitmap);\n\n        HmsScanAnalyzer analyzer = new HmsScanAnalyzer.Creator(getCurrentActivity()).setHmsScanTypes(scanType,\n            additionalScanTypes).create();\n\n        if (analyzer.isAvailable()) {\n            mHMSLogger.startMethodExecutionTimer(\"MultiProcessorMethodCallHandler.decodeMultiAsync\");\n            analyzer.analyzInAsyn(image).addOnSuccessListener(new OnSuccessListener<List<HmsScan>>() {\n                @Override\n                public void onSuccess(List<HmsScan> hmsScans) {\n                    if (hmsScans != null && hmsScans.size() > 0 && hmsScans.get(0) != null && !TextUtils.isEmpty(\n                        hmsScans.get(0).getOriginalValue())) {\n                        HmsScan[] infos = new HmsScan[hmsScans.size()];\n                        for (int index = 0; index < hmsScans.size(); index++) {\n                            infos[index] = hmsScans.get(index);\n                        }\n                        promise.resolve(toWA(gson.toJson(infos)));\n                        mHMSLogger.sendSingleEvent(\"MultiProcessorMethodCallHandler.decodeMultiAsync\");\n                    } else {\n                        promise.reject(Errors.DECODE_MULTI_ASYNC_COULD_NOT_FIND.getErrorCode(),\n                            Errors.DECODE_MULTI_ASYNC_COULD_NOT_FIND.getErrorMessage());\n                    }\n                    analyzer.destroy();\n                }\n            }).addOnFailureListener(new OnFailureListener() {\n                @Override\n                public void onFailure(Exception e) {\n                    promise.reject(Errors.DECODE_MULTI_ASYNC_ON_FAILURE.getErrorCode(),\n                        Errors.DECODE_MULTI_ASYNC_ON_FAILURE.getErrorMessage());\n                    mHMSLogger.sendSingleEvent(\"MultiProcessorMethodCallHandler.decodeMultiAsync\",\n                        Errors.DECODE_MULTI_ASYNC_ON_FAILURE.getErrorCode());\n                    analyzer.destroy();\n                }\n            });\n        } else {\n            Log.e(Errors.HMS_SCAN_ANALYZER_ERROR.getErrorCode(), Errors.HMS_SCAN_ANALYZER_ERROR.getErrorMessage(),\n                null);\n            promise.reject(Errors.REMOTE_VIEW_ERROR.getErrorCode(), Errors.REMOTE_VIEW_ERROR.getErrorMessage());\n            analyzer.destroy();\n        }\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        if (resultCode != RESULT_OK || data == null) {\n            return;\n        }\n        if (requestCode == REQUEST_CODE_SCAN_MULTI) {\n            Parcelable[] obj = data.getParcelableArrayExtra(ScanUtil.RESULT);\n            if (obj != null && obj.length > 0 && mPromise != null) {\n                mPromise.resolve(toWA(gson.toJson(obj)));\n                mPromise = null;\n            }\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/ScanResultView.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.text.Layout;\nimport android.text.StaticLayout;\nimport android.text.TextPaint;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport androidx.annotation.Nullable;\n\nimport com.huawei.hms.ml.scan.HmsScan;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ScanResultView extends View {\n\n    private final Object lock = new Object();\n    protected float widthScaleFactor = 1.0f;\n    protected float heightScaleFactor = 1.0f;\n    protected float previewWidth;\n    protected float previewHeight;\n\n    private final List<HmsScanGraphic> hmsScanGraphics = new ArrayList<>();\n\n    public ScanResultView(Context context) {\n        super(context);\n    }\n\n    public ScanResultView(Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public void clear() {\n        synchronized (lock) {\n            hmsScanGraphics.clear();\n        }\n        postInvalidate();\n    }\n\n    public void add(HmsScanGraphic graphic) {\n        synchronized (lock) {\n            hmsScanGraphics.add(graphic);\n        }\n    }\n\n    public void setCameraInfo(int previewWidth, int previewHeight) {\n        synchronized (lock) {\n            this.previewWidth = previewWidth;\n            this.previewHeight = previewHeight;\n        }\n        postInvalidate();\n    }\n\n    /**\n     * Draw MultiCodes on screen.\n     */\n    @Override\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n        synchronized (lock) {\n            if ((previewWidth != 0) && (previewHeight != 0)) {\n                widthScaleFactor = (float) getWidth() / previewWidth;\n                heightScaleFactor = (float) getHeight() / previewHeight;\n            }\n            for (HmsScanGraphic graphic : hmsScanGraphics) {\n                graphic.drawGraphic(canvas);\n                if (graphic.showText) {\n                    graphic.drawText(canvas);\n                }\n            }\n        }\n    }\n\n    static class HmsScanGraphic {\n\n        private final Paint rectPaint;\n        private final HmsScan hmsScan;\n        private final ScanResultView scanResultView;\n\n        private final int TEXT_COLOR;\n        private final float TEXT_SIZE;\n        private final int textBackgroundColor;\n        private final boolean showText;\n        private final boolean showTextOutBounds;\n        private final boolean autoSizeText;\n        private final int minTextSize;\n        private final int granularity;\n\n        HmsScanGraphic(ScanResultView scanResultView, HmsScan hmsScan, int color, int textColor, float textSize,\n            float strokeWidth, int textBackgroundColor, boolean showText, boolean showTextOutBounds,\n            boolean autoSizeText, int minTextSize, int granularity) {\n            this.scanResultView = scanResultView;\n            this.hmsScan = hmsScan;\n            this.TEXT_COLOR = textColor;\n            this.TEXT_SIZE = textSize;\n            this.textBackgroundColor = textBackgroundColor;\n            this.showText = showText;\n            this.showTextOutBounds = showTextOutBounds;\n            this.autoSizeText = autoSizeText;\n            this.minTextSize = minTextSize;\n            this.granularity = granularity;\n\n            rectPaint = new Paint();\n            rectPaint.setColor(color);\n            rectPaint.setStyle(Paint.Style.STROKE);\n            rectPaint.setStrokeWidth(strokeWidth);\n\n            Paint hmsScanResult = new Paint();\n            hmsScanResult.setColor(TEXT_COLOR);\n            hmsScanResult.setTextSize(TEXT_SIZE);\n        }\n\n        void drawGraphic(Canvas canvas) {\n            if (hmsScan == null) {\n                return;\n            }\n\n            RectF rect = new RectF(hmsScan.getBorderRect());\n            RectF other = new RectF();\n            other.left = canvas.getWidth() - scaleX(rect.top);\n            other.top = scaleY(rect.left);\n            other.right = canvas.getWidth() - scaleX(rect.bottom);\n            other.bottom = scaleY(rect.right);\n            canvas.drawRect(other, rectPaint);\n        }\n\n        /**\n         * @return text height\n         */\n        private float getTextHeight(String text, Paint paint) {\n            Rect rect = new Rect();\n            paint.getTextBounds(text, 0, text.length(), rect);\n            return rect.height();\n        }\n\n        /**\n         * @return text height in static layout a.k.a rectangle\n         * it is used to get height of the text in borders.\n         */\n        private int getTextHeightInRect(String text, int width, float fontSize) {\n            TextPaint tp = new TextPaint();\n            tp.setTextSize(fontSize);\n            int textHeight = (int) getTextHeight(text, tp);\n            StaticLayout innerStaticLayout = new StaticLayout(text, tp, width, Layout.Alignment.ALIGN_CENTER, 1, 0,\n                    false);\n            int numberOfTextLines = innerStaticLayout.getLineCount();\n            return (textHeight * (numberOfTextLines + 2));\n        }\n\n        /**\n         * @return optimal text size a.k.a Auto Size Text\n         */\n        private int getOptimalTextSize(String text, int width, int height) {\n            int targetTextSize = (int) TEXT_SIZE;\n            while (getTextHeightInRect(text, width, targetTextSize) >= height && targetTextSize > minTextSize) {\n                targetTextSize = Math.max(targetTextSize - granularity, minTextSize);\n            }\n            return targetTextSize;\n        }\n\n        void drawText(Canvas canvas) {\n            RectF rect = new RectF(hmsScan.getBorderRect());\n            RectF other = new RectF();\n            other.left = canvas.getWidth() - scaleX(rect.top);\n            other.top = scaleY(rect.left);\n            other.right = canvas.getWidth() - scaleX(rect.bottom);\n            other.bottom = scaleY(rect.right);\n\n            int width = (int) other.width() * -1;\n            int height = (int) other.height();\n\n            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);\n            Canvas canvas2 = new Canvas(bitmap);\n            Paint p2 = new Paint();\n            p2.setStyle(Paint.Style.FILL);\n            p2.setColor(textBackgroundColor);\n            canvas2.drawRect(0, 0, width, height, p2);\n\n            canvas.drawBitmap(bitmap, other.right, other.top, null);\n\n            String text = hmsScan.getOriginalValue();\n\n            TextPaint tp = new TextPaint();\n            tp.setColor(TEXT_COLOR);\n            tp.setTextSize(autoSizeText && !showTextOutBounds ? getOptimalTextSize(text, width, height) : TEXT_SIZE);\n            tp.setAntiAlias(true);\n\n            float textHeight = getTextHeight(text, tp);\n\n            StaticLayout staticLayout = new StaticLayout(text, tp, width, Layout.Alignment.ALIGN_CENTER, 1, 0, false);\n            canvas2.save();\n            canvas.save();\n\n            int numberOfTextLines = staticLayout.getLineCount();\n\n            float textYCoordinate = (showTextOutBounds ? other.centerY() : (bitmap.getHeight() / 2.0f))\n                    - (numberOfTextLines * textHeight) / 2;\n\n            float textXCoordinate = other.right;\n\n            canvas.translate(textXCoordinate, textYCoordinate);\n            canvas2.translate(0, (numberOfTextLines * textHeight) >= bitmap.getHeight() ? 0 : textYCoordinate);\n\n            staticLayout.draw(showTextOutBounds ? canvas : canvas2);\n            canvas.restore();\n            canvas2.restore();\n        }\n\n        float scaleX(float horizontal) {\n            return horizontal * scanResultView.widthScaleFactor;\n        }\n\n        float scaleY(float vertical) {\n            return vertical * scanResultView.heightScaleFactor;\n        }\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/multi/ScanTextOptions.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.multi;\n\nclass ScanTextOptions {\n    private long textColor;\n    private float textSize;\n    private boolean showText;\n    private boolean showTextOutBounds;\n    private long textBackgroundColor;\n    private boolean autoSizeText;\n    private int minTextSize;\n    private int granularity;\n\n    ScanTextOptions() {\n        textColor = 4278190080L;\n        textSize = 35.0F;\n        showText = true;\n        showTextOutBounds = false;\n        textBackgroundColor = 0;\n        autoSizeText = false;\n        minTextSize = 24;\n        granularity = 2;\n    }\n\n    float getTextSize() {\n        return textSize;\n    }\n\n    int getMinTextSize() {\n        return minTextSize;\n    }\n\n    int getGranularity() {\n        return granularity;\n    }\n\n    int getTextBackgroundColor() {\n        return (int) textBackgroundColor;\n    }\n\n    int getTextColor() {\n        return (int) textColor;\n    }\n\n    boolean getShowText() {\n        return showText;\n    }\n\n    boolean getShowTextOutBounds() {\n        return showTextOutBounds;\n    }\n\n    boolean getAutoSizeText() {\n        return autoSizeText;\n    }\n\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/scanutils/RNHMSScanUtilsModule.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.scanutils;\n\nimport static android.app.Activity.RESULT_OK;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.getIntegerArrayFromReadableArray;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.hasValidKey;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWA;\nimport static com.huawei.hms.rn.scan.utils.ReactUtils.toWM;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.net.Uri;\nimport android.os.Parcelable;\nimport android.provider.MediaStore;\nimport android.text.TextUtils;\nimport android.util.ArrayMap;\nimport android.util.Base64;\nimport android.util.Log;\n\nimport androidx.annotation.NonNull;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.modules.core.DeviceEventManagerModule;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport com.huawei.hms.hmsscankit.ScanUtil;\nimport com.huawei.hms.hmsscankit.WriterException;\nimport com.huawei.hms.ml.scan.HmsBuildBitmapOption;\nimport com.huawei.hms.ml.scan.HmsScan;\nimport com.huawei.hms.ml.scan.HmsScanAnalyzerOptions;\nimport com.huawei.hms.ml.scan.HmsScanResult;\nimport com.huawei.hms.rn.scan.logger.HMSLogger;\nimport com.huawei.hms.rn.scan.multi.CommonActivity;\nimport com.huawei.hms.rn.scan.utils.Errors;\nimport com.huawei.hms.ml.scan.HmsScanFrameOptions;\nimport com.huawei.hms.ml.scan.HmsScanFrame;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.Map;\n\nimport javax.annotation.Nullable;\n\npublic class RNHMSScanUtilsModule extends ReactContextBaseJavaModule implements ActivityEventListener {\n\n    private final ReactContext mReactContext;\n\n    private Promise mPromise;\n\n    private final HMSLogger mHMSLogger;\n\n    private final Gson gson;\n\n    private static final int REQUEST_CODE_SCAN_ONE = 0X01;\n\n    private static final int REQUEST_CODE_SCAN_BITMAP = 0X02;\n\n    private static final int REQUEST_CODE_SCAN_DECODE = 0X03;\n\n    public static final int SCANMODEDECODE = 222;\n\n    public static final int SCANMODEDECODEWITHBITMAP = 333;\n\n    public RNHMSScanUtilsModule(@NonNull ReactApplicationContext reactContext) {\n        super(reactContext);\n        mReactContext = reactContext;\n        mReactContext.addActivityEventListener(this);\n        gson = new GsonBuilder().setPrettyPrinting().create();\n        mHMSLogger = HMSLogger.getInstance(mReactContext);\n    }\n\n    public Map<String, Object> getScanTypes() {\n        Map<String, Object> scanTypes = new ArrayMap<>();\n        scanTypes.put(\"Other\", HmsScan.OTHER_FORM);\n        scanTypes.put(\"All\", HmsScan.ALL_SCAN_TYPE);\n        scanTypes.put(\"Code128\", HmsScan.CODE128_SCAN_TYPE);\n        scanTypes.put(\"Code39\", HmsScan.CODE39_SCAN_TYPE);\n        scanTypes.put(\"Code93\", HmsScan.CODE93_SCAN_TYPE);\n        scanTypes.put(\"Codabar\", HmsScan.CODABAR_SCAN_TYPE);\n        scanTypes.put(\"DataMatrix\", HmsScan.DATAMATRIX_SCAN_TYPE);\n        scanTypes.put(\"EAN13\", HmsScan.EAN13_SCAN_TYPE);\n        scanTypes.put(\"EAN8\", HmsScan.EAN8_SCAN_TYPE);\n        scanTypes.put(\"ITF14\", HmsScan.ITF14_SCAN_TYPE);\n        scanTypes.put(\"QRCode\", HmsScan.QRCODE_SCAN_TYPE);\n        scanTypes.put(\"UPCCodeA\", HmsScan.UPCCODE_A_SCAN_TYPE);\n        scanTypes.put(\"UPCCodeE\", HmsScan.UPCCODE_E_SCAN_TYPE);\n        scanTypes.put(\"Pdf417\", HmsScan.PDF417_SCAN_TYPE);\n        scanTypes.put(\"Aztec\", HmsScan.AZTEC_SCAN_TYPE);\n        scanTypes.put(\"MultiFunctional\", HmsScan.MULTI_FUNCTIONAL_SCAN_TYPE);\n        return scanTypes;\n    }\n\n    public Map<String, Object> getScanForms() {\n        Map<String, Object> scanForms = new ArrayMap<>();\n        scanForms.put(\"Other\", HmsScan.OTHER_FORM);\n        scanForms.put(\"ContactDetail\", HmsScan.CONTACT_DETAIL_FORM);\n        scanForms.put(\"EmailContent\", HmsScan.EMAIL_CONTENT_FORM);\n        scanForms.put(\"ISBNNumber\", HmsScan.ISBN_NUMBER_FORM);\n        scanForms.put(\"TelPhoneNumber\", HmsScan.TEL_PHONE_NUMBER_FORM);\n        scanForms.put(\"ArticleNumber\", HmsScan.ARTICLE_NUMBER_FORM);\n        scanForms.put(\"SMS\", HmsScan.SMS_FORM);\n        scanForms.put(\"PureText\", HmsScan.PURE_TEXT_FORM);\n        scanForms.put(\"Url\", HmsScan.URL_FORM);\n        scanForms.put(\"WIFIConnectInfo\", HmsScan.WIFI_CONNECT_INFO_FORM);\n        scanForms.put(\"LocationCoordinate\", HmsScan.LOCATION_COORDINATE_FORM);\n        scanForms.put(\"EventInfo\", HmsScan.EVENT_INFO_FORM);\n        scanForms.put(\"DriverInfo\", HmsScan.DRIVER_INFO_FORM);\n        return scanForms;\n    }\n\n    public Map<String, Object> getAddressTypes() {\n        Map<String, Object> addressTypes = new ArrayMap<>();\n        addressTypes.put(\"Residential\", HmsScan.AddressInfo.RESIDENTIAL_USE_TYPE);\n        addressTypes.put(\"Other\", HmsScan.AddressInfo.OTHER_USE_TYPE);\n        addressTypes.put(\"Office\", HmsScan.AddressInfo.OFFICE_TYPE);\n        return addressTypes;\n    }\n\n    public Map<String, Object> getTelPhoneNumberUseTypes() {\n        Map<String, Object> telPhoneNumberUseTypes = new ArrayMap<>();\n        telPhoneNumberUseTypes.put(\"Fax\", HmsScan.TelPhoneNumber.FAX_USE_TYPE);\n        telPhoneNumberUseTypes.put(\"Residential\", HmsScan.TelPhoneNumber.RESIDENTIAL_USE_TYPE);\n        telPhoneNumberUseTypes.put(\"Cellphone\", HmsScan.TelPhoneNumber.CELLPHONE_NUMBER_USE_TYPE);\n        telPhoneNumberUseTypes.put(\"Other\", HmsScan.TelPhoneNumber.OTHER_USE_TYPE);\n        telPhoneNumberUseTypes.put(\"Office\", HmsScan.TelPhoneNumber.OFFICE_USE_TYPE);\n        return telPhoneNumberUseTypes;\n    }\n\n    public Map<String, Object> getEmailAddressTypes() {\n        Map<String, Object> emailAddressTypes = new ArrayMap<>();\n        emailAddressTypes.put(\"Office\", HmsScan.EmailContent.OFFICE_USE_TYPE);\n        emailAddressTypes.put(\"Residential\", HmsScan.EmailContent.RESIDENTIAL_USE_TYPE);\n        emailAddressTypes.put(\"Other\", HmsScan.EmailContent.OTHER_USE_TYPE);\n        return emailAddressTypes;\n    }\n\n    public Map<String, Object> getWIFIModeTypes() {\n        Map<String, Object> wifiModeTypes = new ArrayMap<>();\n        wifiModeTypes.put(\"NoPass\", HmsScan.WiFiConnectionInfo.NO_PASSWORD_MODE_TYPE);\n        wifiModeTypes.put(\"WEP\", HmsScan.WiFiConnectionInfo.WEP_MODE_TYPE);\n        wifiModeTypes.put(\"WPA\", HmsScan.WiFiConnectionInfo.WPA_MODE_TYPE);\n        return wifiModeTypes;\n    }\n\n    @Nullable\n    @Override\n    public Map<String, Object> getConstants() {\n        Map<String, Object> constants = new ArrayMap<>();\n        constants.put(\"SCAN_TYPES\", getScanTypes());\n        constants.put(\"SCAN_FORMS\", getScanForms());\n        constants.put(\"ADDRESS_TYPES\", getAddressTypes());\n        constants.put(\"TEL_PHONE_NUMBER_USE_TYPES\", getTelPhoneNumberUseTypes());\n        constants.put(\"EMAIL_ADDRESS_TYPES\", getEmailAddressTypes());\n        constants.put(\"WIFI_MODE_TYPES\", getWIFIModeTypes());\n        return constants;\n    }\n\n    @NonNull\n    @Override\n    public String getName() {\n        return \"RNHMSScanUtilsModule\";\n    }\n\n    @ReactMethod\n    public void disableLogger() {\n        mHMSLogger.disableLogger();\n    }\n\n    @ReactMethod\n    public void enableLogger() {\n        mHMSLogger.enableLogger();\n    }\n\n    @ReactMethod\n    public void startDefaultView(final ReadableMap defaultViewRequest, final Promise promise) {\n        mPromise = promise;\n        HmsScanAnalyzerOptions.Creator creator = new HmsScanAnalyzerOptions.Creator();\n        if (defaultViewRequest != null) {\n            if (hasValidKey(defaultViewRequest, \"scanType\", ReadableType.Number)) {\n                int scanType = defaultViewRequest.getInt(\"scanType\");\n                int[] additionalScanTypes = new int[] {};\n                if (hasValidKey(defaultViewRequest, \"additionalScanTypes\", ReadableType.Array)) {\n                    additionalScanTypes = getIntegerArrayFromReadableArray(\n                        defaultViewRequest.getArray(\"additionalScanTypes\"));\n                }\n                creator.setHmsScanTypes(scanType, additionalScanTypes);\n            }\n\n            if (hasValidKey(defaultViewRequest, \"viewType\", ReadableType.Number)) {\n                int viewType = defaultViewRequest.getInt(\"viewType\");\n                creator.setViewType(viewType);\n            }\n            if (hasValidKey(defaultViewRequest, \"errorCheck\", ReadableType.Boolean)) {\n                boolean errorCheck = defaultViewRequest.getBoolean(\"errorCheck\");\n                creator.setErrorCheck(errorCheck);\n            }\n        }\n        HmsScanAnalyzerOptions options = creator.create();\n\n        mHMSLogger.startMethodExecutionTimer(\"RNHMSScanUtilsModule.defaultView\");\n\n        if (ScanUtil.startScan(getCurrentActivity(), REQUEST_CODE_SCAN_ONE, options) == ScanUtil.SUCCESS) {\n            Log.i(\"DefaultView\", \"Camera started.\");\n        } else {\n            Log.i(\"DefaultView\", Errors.SCAN_UTIL_NO_CAMERA_PERMISSION.getErrorMessage());\n            promise.reject(Errors.SCAN_UTIL_NO_CAMERA_PERMISSION.getErrorCode(),\n                Errors.SCAN_UTIL_NO_CAMERA_PERMISSION.getErrorMessage());\n            mHMSLogger.sendSingleEvent(\"RNHMSScanUtilsModule.defaultView\",\n                Errors.SCAN_UTIL_NO_CAMERA_PERMISSION.getErrorCode());\n        }\n    }\n\n    @ReactMethod\n    public void buildBitmap(final ReadableMap buildBitmapRequest, final Promise promise) {\n        mPromise = promise;\n        String content = \"\";\n        int type = 0;\n        int width = 200;\n        int height = 200;\n\n        try {\n            HmsBuildBitmapOption.Creator creator = new HmsBuildBitmapOption.Creator();\n            if (buildBitmapRequest != null) {\n                if (hasValidKey(buildBitmapRequest, \"content\", ReadableType.String)) {\n                    content = buildBitmapRequest.getString(\"content\");\n                }\n                if (hasValidKey(buildBitmapRequest, \"type\", ReadableType.Number)) {\n                    type = buildBitmapRequest.getInt(\"type\");\n                }\n                if (hasValidKey(buildBitmapRequest, \"width\", ReadableType.Number)) {\n                    width = buildBitmapRequest.getInt(\"width\");\n                }\n                if (hasValidKey(buildBitmapRequest, \"height\", ReadableType.Number)) {\n                    height = buildBitmapRequest.getInt(\"height\");\n                }\n                if (hasValidKey(buildBitmapRequest, \"backgroundColor\", ReadableType.Number)) {\n                    creator.setBitmapBackgroundColor(buildBitmapRequest.getInt(\"backgroundColor\"));\n                }\n                if (hasValidKey(buildBitmapRequest, \"color\", ReadableType.Number)) {\n                    creator.setBitmapColor(buildBitmapRequest.getInt(\"color\"));\n                }\n                if (hasValidKey(buildBitmapRequest, \"margin\", ReadableType.Number)) {\n                    creator.setBitmapMargin(buildBitmapRequest.getInt(\"margin\"));\n                }\n                if (hasValidKey(buildBitmapRequest, \"qrErrorCorrectionLevel\", ReadableType.String)) {\n                    creator.setQRErrorCorrection(\n                        HmsBuildBitmapOption.ErrorCorrectionLevel.valueOf(\"qrErrorCorrectionLevel\"));\n                }\n                if (hasValidKey(buildBitmapRequest, \"qrLogoBitmap\", ReadableType.String)) {\n                    final String qrLogoBitmap = buildBitmapRequest.getString(\"qrLogoBitmap\");\n                    final Uri imageUri = Uri.parse(qrLogoBitmap);\n                    Bitmap logoBitmap = null;\n\n                    try {\n                        logoBitmap = MediaStore.Images.Media.getBitmap(\n                            getReactApplicationContext().getContentResolver(), imageUri);\n                    } catch (IOException e) {\n                        Log.i(\"qrLogoBitmap\", \"buildBitmap: imageUri is null\");\n                    }\n                    creator.setQRLogoBitmap(logoBitmap).create();\n                }\n            }\n            HmsBuildBitmapOption options = creator.create();\n\n            mHMSLogger.startMethodExecutionTimer(\"ScanUtilsMethodCallHandler.buildBitmap\");\n            final Bitmap qrBmp = ScanUtil.buildBitmap(content, type, width, height, options);\n\n            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();\n            qrBmp.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);\n            final byte[] byteArray = byteArrayOutputStream.toByteArray();\n\n            mHMSLogger.sendSingleEvent(\"RNHMSScanUtilsModule.buildBitmap\");\n            promise.resolve(Base64.encodeToString(byteArray, Base64.DEFAULT));\n        } catch (WriterException e) {\n            mHMSLogger.sendSingleEvent(\"RNHMSScanUtilsModule.buildBitmap\", e.getLocalizedMessage());\n            promise.reject(Errors.BUILD_BITMAP.getErrorCode(), Errors.BUILD_BITMAP.getErrorMessage());\n        }\n    }\n\n    @ReactMethod\n    public void decodeWithBitmap(final ReadableMap decodeBitmapRequest, final Promise promise) {\n        mPromise = promise;\n        String data = \"\";\n        int scanType = 0;\n        boolean photoMode = false;\n        int[] additionalScanTypes = new int[] {};\n        if (decodeBitmapRequest != null) {\n            if (hasValidKey(decodeBitmapRequest, \"data\", ReadableType.String)) {\n                data = decodeBitmapRequest.getString(\"data\");\n            }\n            if (hasValidKey(decodeBitmapRequest, \"scanType\", ReadableType.Number)) {\n                scanType = decodeBitmapRequest.getInt(\"scanType\");\n            }\n            if (hasValidKey(decodeBitmapRequest, \"photoMode\", ReadableType.Boolean)) {\n                photoMode = decodeBitmapRequest.getBoolean(\"photoMode\");\n            }\n            if (hasValidKey(decodeBitmapRequest, \"additionalScanTypes\", ReadableType.Array)) {\n                additionalScanTypes = getIntegerArrayFromReadableArray(\n                    decodeBitmapRequest.getArray(\"additionalScanTypes\"));\n            }\n        }\n\n        if (!photoMode) {\n            Intent intent = new Intent(mReactContext.getCurrentActivity(), CommonActivity.class);\n\n            intent.putExtra(\"scanType\", scanType);\n            if (additionalScanTypes != null) {\n                intent.putExtra(\"additionalScanTypes\", additionalScanTypes);\n            }\n\n            intent.putExtra(\"scanMode\", SCANMODEDECODEWITHBITMAP);\n            mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_SCAN_BITMAP);\n\n        } else {\n            if (data.isEmpty()) {\n                promise.reject(Errors.IMAGE_DATA_EMPTY.getErrorCode(), Errors.IMAGE_DATA_EMPTY.getErrorMessage());\n            }\n            // add control for scanTypes value after readıng ıt from user 'f the value 's not val'd set ıt to 0\n            byte[] parsed = Base64.decode(data, Base64.DEFAULT);\n            Bitmap bitmap = BitmapFactory.decodeByteArray(parsed, 0, parsed.length);\n\n            HmsScanAnalyzerOptions.Creator creator = new HmsScanAnalyzerOptions.Creator();\n            creator.setHmsScanTypes(scanType, additionalScanTypes);\n            creator.setPhotoMode(true);\n            HmsScanAnalyzerOptions options = creator.create();\n\n            mHMSLogger.startMethodExecutionTimer(\"RNHMSScanUtilsModule.decodeWithBitmap\");\n            HmsScan[] hmsScans = ScanUtil.decodeWithBitmap(mReactContext.getCurrentActivity(), bitmap, options);\n            mHMSLogger.sendSingleEvent(\"RNHMSScanUtilsModule.decodeWithBitmap\");\n\n            if (hmsScans != null && hmsScans.length > 0 && hmsScans[0] != null && !TextUtils.isEmpty(\n                hmsScans[0].getOriginalValue())) {\n                promise.resolve(toWM(gson.toJson(hmsScans[0])));\n            } else {\n                promise.reject(Errors.DECODE_WITH_BITMAP_ERROR.getErrorCode(),\n                    Errors.DECODE_WITH_BITMAP_ERROR.getErrorMessage());\n            }\n        }\n\n    }\n\n    @ReactMethod\n    public void decode(ReadableMap decodeRequest, final Promise promise) {\n        mPromise = promise;\n\n        String data = \"\";\n        int scanType = 0;\n        int[] additionalScanTypes = new int[] {};\n        boolean multiMode = false;\n        boolean photoMode = false;\n        boolean parseResult = true;\n\n        if (decodeRequest != null) {\n            if (hasValidKey(decodeRequest, \"data\", ReadableType.String)) {\n                data = decodeRequest.getString(\"data\");\n            }\n            if (hasValidKey(decodeRequest, \"scanType\", ReadableType.Number)) {\n                scanType = decodeRequest.getInt(\"scanType\");\n            }\n            if (hasValidKey(decodeRequest, \"additionalScanTypes\", ReadableType.Array)) {\n                additionalScanTypes = getIntegerArrayFromReadableArray(decodeRequest.getArray(\"additionalScanTypes\"));\n            }\n            if (hasValidKey(decodeRequest, \"multiMode\", ReadableType.Boolean)) {\n                multiMode = decodeRequest.getBoolean(\"multiMode\");\n            }\n            if (hasValidKey(decodeRequest, \"photoMode\", ReadableType.Boolean)) {\n                photoMode = decodeRequest.getBoolean(\"photoMode\");\n            }\n            if (hasValidKey(decodeRequest, \"parseResult\", ReadableType.Boolean)) {\n                parseResult = decodeRequest.getBoolean(\"parseResult\");\n            }\n        }\n\n        if (!photoMode) {\n            Intent intent = new Intent(mReactContext.getCurrentActivity(), CommonActivity.class);\n\n            intent.putExtra(\"scanType\", scanType);\n            intent.putExtra(\"multiMode\", multiMode);\n            intent.putExtra(\"parseResult\", parseResult);\n            if (additionalScanTypes != null) {\n                intent.putExtra(\"additionalScanTypes\", additionalScanTypes);\n            }\n\n            intent.putExtra(\"scanMode\", SCANMODEDECODE);\n            mReactContext.getCurrentActivity().startActivityForResult(intent, REQUEST_CODE_SCAN_DECODE);\n        } else {\n            if (data.isEmpty()) {\n                promise.reject(Errors.IMAGE_DATA_EMPTY.getErrorCode(), Errors.IMAGE_DATA_EMPTY.getErrorMessage());\n            }\n\n            byte[] parsed = Base64.decode(data, Base64.DEFAULT);\n            Bitmap bitmap = BitmapFactory.decodeByteArray(parsed, 0, parsed.length);\n            HmsScanFrame frame;\n            frame = new HmsScanFrame(bitmap);\n\n            HmsScanFrameOptions.Creator creator = new HmsScanFrameOptions.Creator();\n            creator.setHmsScanTypes(scanType, additionalScanTypes);\n            creator.setPhotoMode(true);\n            creator.setMultiMode(multiMode);\n            creator.setParseResult(parseResult);\n            HmsScanFrameOptions options = creator.create();\n\n            mHMSLogger.startMethodExecutionTimer(\"RNHMSScanUtilsModule.decode\");\n            HmsScanResult result = ScanUtil.decode(mReactContext.getCurrentActivity(), frame, options);\n            HmsScan[] hmsScans = result.getHmsScans();\n            mHMSLogger.sendSingleEvent(\"RNHMSScanUtilsModule.decode\");\n\n            if (hmsScans != null && hmsScans.length > 0 && hmsScans[0] != null && !TextUtils.isEmpty(\n                hmsScans[0].getOriginalValue())) {\n                promise.resolve(toWA(gson.toJson(hmsScans)));\n            } else {\n                promise.reject(Errors.DECODE_WITH_BITMAP_ERROR.getErrorCode(),\n                    Errors.DECODE_WITH_BITMAP_ERROR.getErrorMessage());\n            }\n        }\n\n    }\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        if (requestCode == REQUEST_CODE_SCAN_ONE && mPromise != null) {\n            if (resultCode == RESULT_OK) {\n                if (data != null) {\n                    int errorCode = data.getIntExtra(ScanUtil.RESULT_CODE, ScanUtil.SUCCESS);\n                    if (errorCode == ScanUtil.SUCCESS) {\n                        HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);\n                        if (obj != null) {\n                            HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule.defaultView\");\n                            mPromise.resolve(toWM(gson.toJson(obj)));\n                        }\n                    } else if (errorCode == ScanUtil.SCAN_NO_DETECTED) {\n                        HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule\", \"null data\");\n                        mPromise.reject(Errors.SCAN_NO_DETECTED.getErrorCode(), \"No barcode is detected\");\n                    }\n                } else {\n                    HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule\", \"null data\");\n                    mPromise.reject(\"NULL\", \"Data is null\");\n                }\n            } else {\n                WritableMap params = Arguments.createMap();\n                params.putString(\"NOT_OK\", \"Result is not ok\");\n                sendEvent(mReactContext, \"returnButtonClicked\", params);\n            }\n            mPromise = null;\n        } else if (requestCode == REQUEST_CODE_SCAN_DECODE\n            || requestCode == REQUEST_CODE_SCAN_BITMAP && mPromise != null) {\n            if (resultCode == RESULT_OK) {\n                if (data != null) {\n                    int errorCode = data.getIntExtra(ScanUtil.RESULT_CODE, ScanUtil.SUCCESS);\n                    if (errorCode == ScanUtil.SUCCESS) {\n                        Parcelable[] obj = data.getParcelableArrayExtra(ScanUtil.RESULT);\n                        if (obj != null) {\n                            HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule.defaultView\");\n                            mPromise.resolve(toWA(gson.toJson(obj)));\n                        }\n                    } else if (errorCode == ScanUtil.SCAN_NO_DETECTED) {\n                        HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule\", \"null data\");\n                        mPromise.reject(Errors.SCAN_NO_DETECTED.getErrorCode(), \"No barcode is detected\");\n                    }\n                } else {\n                    HMSLogger.getInstance(mReactContext).sendSingleEvent(\"RNHMSScanUtilsModule\", \"null data\");\n                    mPromise.reject(\"NULL\", \"Data is null\");\n                }\n            } else {\n                WritableMap params = Arguments.createMap();\n                params.putString(\"NOT_OK\", \"Result is not ok\");\n                sendEvent(mReactContext, \"returnButtonClicked\", params);\n            }\n            mPromise = null;\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n    }\n\n    private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) {\n        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/utils/Errors.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.utils;\n\nimport com.huawei.hms.hmsscankit.ScanUtil;\n\npublic enum Errors {\n    SCAN_UTIL_NO_CAMERA_PERMISSION(String.valueOf(ScanUtil.ERROR_NO_CAMERA_PERMISSION), \"NO CAMERA PERMISSION\"),\n    SCAN_UTIL_NO_READ_PERMISSION(String.valueOf(ScanUtil.ERROR_NO_READ_PERMISSION), \"NO READ PERMISSION\"),\n    SCAN_NO_DETECTED(String.valueOf(ScanUtil.SCAN_NO_DETECTED), \"SCAN NO DETECTED\"),\n    DECODE_MULTI_ASYNC_COULD_NOT_FIND(\"13\", \"Multi Async - Couldn't find anything.\"),\n    DECODE_MULTI_ASYNC_ON_FAILURE(\"14\", \"Multi Async - On Failure\"),\n    DECODE_MULTI_SYNC_COULD_NOT_FIND(\"15\", \"Multi Sync - Couldn't find anything.\"),\n\n    MP_CAMERA_SCAN_MODE_ERROR(\"16\", \"Please check your scan mode.\"),\n\n    DECODE_WITH_BITMAP_ERROR(\"17\", \"Please check your barcode and scan type.\"),\n\n    BUILD_BITMAP(\"18\", \"Barcode generation failed.\"),\n\n    HMS_SCAN_ANALYZER_ERROR(\"19\", \"Analyzer is not available.\"),\n\n    REMOTE_VIEW_ERROR(\"20\", \"Remote View is not initialized.\"),\n\n    IMAGE_DATA_EMPTY(\"21\", \"Image data cannot be empty\");\n\n    private final String errorCode;\n\n    private final String errorMessage;\n\n    Errors(String errorCode, String errorMessage) {\n        this.errorCode = errorCode;\n        this.errorMessage = errorMessage;\n    }\n\n    public String getErrorCode() {\n        return errorCode;\n    }\n\n    public String getErrorMessage() {\n        return errorMessage;\n    }\n}\n\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/java/com/huawei/hms/rn/scan/utils/ReactUtils.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.scan.utils;\n\nimport android.graphics.Point;\nimport android.util.ArrayMap;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.ReadableArray;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableMapKeySetIterator;\nimport com.facebook.react.bridge.ReadableType;\nimport com.facebook.react.bridge.WritableArray;\nimport com.facebook.react.bridge.WritableMap;\nimport com.facebook.react.bridge.WritableNativeArray;\nimport com.facebook.react.bridge.WritableNativeMap;\nimport com.facebook.react.common.MapBuilder;\n\nimport org.json.JSONArray;\nimport org.json.JSONException;\nimport org.json.JSONObject;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\n\npublic class ReactUtils {\n    private static final String TAG = ReactUtils.class.getSimpleName();\n\n    public interface NamedEvent {\n        /**\n         * Gets name of the event\n         *\n         * @return String of name of the event\n         */\n        String getName();\n    }\n\n    public interface NamedCommand {\n        /**\n         * Gets name of the command\n         *\n         * @return String of name of the command\n         */\n        String getName();\n    }\n\n    public interface Mapper<T, R> {\n        /**\n         * Used to map classes\n         *\n         * @param in mapped from\n         * @return mapped to\n         */\n        R map(T in);\n    }\n\n    public static <R> List<R> mapReadableArray(ReadableArray array, Mapper<ReadableMap, R> mapper) {\n        List<R> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(mapper.map(array.getMap(i)));\n            }\n        }\n        return list;\n    }\n\n    public static <R> List<R> mapDoubleReadableArray(ReadableArray array, Mapper<ReadableArray, R> mapper) {\n        List<R> list = new ArrayList<>();\n        if (array != null) {\n            for (int i = 0; i < array.size(); i++) {\n                list.add(mapper.map(array.getArray(i)));\n            }\n        }\n        return list;\n    }\n\n    public static <T> WritableArray mapList(List<T> list, Mapper<T, WritableMap> mapper) {\n        WritableArray array = new WritableNativeArray();\n        if (list != null) {\n            for (T item : list) {\n                array.pushMap(mapper.map(item));\n            }\n        }\n        return array;\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static boolean hasValidElement(ReadableArray ra, int index, ReadableType type) {\n        return !ra.isNull(index) && ra.getType(index) == type;\n    }\n\n    public static WritableMap getWritableMapFromPoint(Point obj) {\n        WritableMap wm = new WritableNativeMap();\n        if (obj == null) {\n            return wm;\n        }\n        wm.putInt(\"x\", obj.x);\n        wm.putInt(\"y\", obj.y);\n        return wm;\n    }\n\n    public static Point getPointFromReadableMap(ReadableMap rm) {\n        if (rm != null && hasValidKey(rm, \"x\", ReadableType.Number) && hasValidKey(rm, \"y\", ReadableType.Number)) {\n            return new Point(rm.getInt(\"x\"), rm.getInt(\"y\"));\n        }\n        return null;\n    }\n\n    public static int[] getIntegerArrayFromReadableArray(ReadableArray ra) {\n        if (ra == null) {\n            return new int[] {};\n        }\n        int[] intArray = new int[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            if (hasValidElement(ra, i, ReadableType.Number)) {\n                intArray[i] = ra.getInt(i);\n            }\n        }\n        return intArray;\n    }\n\n    public static long[] getLongArrayFromReadableArray(ReadableArray ra) {\n        if (ra == null) {\n            return new long[] {};\n        }\n        long[] longArray = new long[ra.size()];\n        for (int i = 0; i < ra.size(); i++) {\n            if (hasValidElement(ra, i, ReadableType.Number)) {\n                longArray[i] = (long) ra.getDouble(i);\n            }\n        }\n        return longArray;\n    }\n\n    /**\n     * toArray converts a ReadableArray into a Object[].\n     *\n     * @param readableArray The ReadableArray to be converted.\n     * @return Object[]\n     */\n    private static Object[] toArray(final ReadableArray readableArray) {\n        if (readableArray == null || readableArray.size() == 0) {\n            return new Object[0];\n        }\n\n        Object[] array = new Object[readableArray.size()];\n        for (int i = 0; i < readableArray.size(); i++) {\n            ReadableType type = readableArray.getType(i);\n\n            switch (type) {\n                case Null:\n                    array[i] = null;\n                    break;\n                case Boolean:\n                    array[i] = readableArray.getBoolean(i);\n                    break;\n                case Number:\n                    array[i] = readableArray.getDouble(i);\n                    break;\n                case String:\n                    array[i] = readableArray.getString(i);\n                    break;\n                case Map:\n                    array[i] = toMap(readableArray.getMap(i));\n                    break;\n                case Array:\n                    array[i] = toArray(readableArray.getArray(i));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return array;\n    }\n\n    /**\n     * Converts a ReadableMap into a HashMap.\n     *\n     * @param readableMap The ReadableMap to be converted.\n     * @return A HashMap containing the data that was in the ReadableMap.\n     */\n    private static Map<String, Object> toMap(final ReadableMap readableMap) {\n        Map<String, Object> map = new HashMap<>();\n        if (readableMap == null) {\n            return map;\n        }\n        ReadableMapKeySetIterator iterator = readableMap.keySetIterator();\n\n        while (iterator.hasNextKey()) {\n            String key = iterator.nextKey();\n            ReadableType type = readableMap.getType(key);\n\n            switch (type) {\n                case Null:\n                    map.put(key, null);\n                    break;\n                case Boolean:\n                    map.put(key, readableMap.getBoolean(key));\n                    break;\n                case Number:\n                    map.put(key, readableMap.getDouble(key));\n                    break;\n                case String:\n                    String valueStr = readableMap.getString(key);\n                    if (valueStr != null) {\n                        map.put(key, valueStr);\n                        break;\n                    }\n                    break;\n                case Map:\n                    map.put(key, toMap(readableMap.getMap(key)));\n                    break;\n                case Array:\n                    map.put(key, toArray(readableMap.getArray(key)));\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        return map;\n    }\n\n    /**\n     * toArrayList converts a ReadableArray into a ArrayList<Object>.\n     *\n     * @param array The ReadableArray to be converted.\n     * @return ArrayList<Object>\n     */\n    public static ArrayList<Object> toArrayList(ReadableArray array) {\n        if (array == null || array.size() == 0) {\n            return new ArrayList<>();\n        }\n        ArrayList<Object> arrayList = new ArrayList<>(array.size());\n        for (int i = 0, size = array.size(); i < size; i++) {\n            switch (array.getType(i)) {\n                case Null:\n                    arrayList.add(null);\n                    break;\n                case Boolean:\n                    arrayList.add(array.getBoolean(i));\n                    break;\n                case Number:\n                    arrayList.add(array.getDouble(i));\n                    break;\n                case String:\n                    arrayList.add(array.getString(i));\n                    break;\n                case Map:\n                    arrayList.add(toMap(array.getMap(i)));\n                    break;\n                case Array:\n                    arrayList.add(toArrayList(array.getArray(i)));\n                    break;\n                default:\n                    throw new IllegalArgumentException(\"Could not convert object at index \" + i + \".\");\n            }\n        }\n        return arrayList;\n    }\n\n    /**\n     * toWM converts a String into a WritableMap.\n     *\n     * @param s The String to be converted.\n     * @return WritableMap\n     */\n    public static WritableMap toWM(String s) {\n        WritableMap response = null;\n        try {\n            response = toWM(new JSONObject(s));\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONException\" + e.getMessage());\n        }\n        return response;\n    }\n\n    /**\n     * toWA converts a String into a WritableArray.\n     *\n     * @param s The String to be converted.\n     * @return WritableArray\n     */\n    public static WritableArray toWA(String s) {\n        WritableArray response = null;\n        try {\n            response = toWA(new JSONArray(s));\n        } catch (JSONException e) {\n            Log.e(TAG, \"JSONException\" + e.getMessage());\n        }\n        return response;\n    }\n\n    public static WritableMap toWM(JSONObject json) {\n        WritableMap map = Arguments.createMap();\n\n        Iterator<String> iterator = json.keys();\n        while (iterator.hasNext()) {\n            Object value = null;\n            String key = iterator.next();\n\n            try {\n                value = json.get(key);\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException\" + e.getMessage());\n            }\n\n            if (value instanceof JSONObject) {\n                map.putMap(key, toWM((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                map.putArray(key, toWA((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                map.putBoolean(key, (Boolean) value);\n            } else if (value instanceof Integer) {\n                map.putInt(key, (Integer) value);\n            } else if (value instanceof Double) {\n                map.putDouble(key, (Double) value);\n            } else if (value instanceof String) {\n                map.putString(key, (String) value);\n            } else {\n                if (value != null) {\n                    map.putString(key, value.toString());\n                }\n            }\n        }\n        return map;\n    }\n\n    private static WritableArray toWA(JSONArray json) {\n        WritableArray array = Arguments.createArray();\n\n        for (int i = 0; i < json.length(); i++) {\n            Object value = null;\n            try {\n                value = json.get(i);\n            } catch (JSONException e) {\n                Log.e(TAG, \"JSONException\" + e.getMessage());\n            }\n\n            if (value instanceof JSONObject) {\n                array.pushMap(toWM((JSONObject) value));\n            } else if (value instanceof JSONArray) {\n                array.pushArray(toWA((JSONArray) value));\n            } else if (value instanceof Boolean) {\n                array.pushBoolean((Boolean) value);\n            } else if (value instanceof Integer) {\n                array.pushInt((Integer) value);\n            } else if (value instanceof Double) {\n                array.pushDouble((Double) value);\n            } else if (value instanceof String) {\n                array.pushString((String) value);\n            } else {\n                if (value != null) {\n                    array.pushString(value.toString());\n                }\n            }\n        }\n        return array;\n    }\n\n    public static Map<String, Object> getExportedCustomDirectEventTypeConstantsFromEvents(NamedEvent[] eventList) {\n        Map<String, Object> obj = new ArrayMap<>();\n        for (NamedEvent event : eventList) {\n            obj.put(event.getName(), MapBuilder.of(\"registrationName\", event.getName()));\n        }\n        return obj;\n    }\n\n    public static Map<String, Integer> getCommandsMap(NamedCommand[] commandList) {\n        Map<String, Integer> obj = new ArrayMap<>();\n        for (int i = 0; i < commandList.length; i++) {\n            obj.put(commandList[i].getName(), i);\n        }\n        return obj;\n    }\n\n    public static NamedCommand getCommand(String commandId, NamedCommand[] commands) {\n        for (NamedCommand command : commands) {\n            if (command.getName().equals(commandId)) {\n                return command;\n            }\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/android/src/main/res/drawable/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <stroke android:width=\"3dp\" android:color=\"#e1ffff\"/>\n    <solid android:color=\"#1f00BCD4\"/>\n    <corners android:radius=\"5dip\"/>\n    <padding\n        android:left=\"2dp\"\n        android:top=\"2dp\"\n        android:right=\"2dp\"\n        android:bottom=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-scan/android/src/main/res/drawable/scanningframe.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:shape=\"rectangle\">\n\n    <stroke android:width=\"3dp\" android:color=\"#e1ffff\"/>\n\n    <solid android:color=\"#1f00BCD4\"/>\n\n    <corners android:radius=\"5dip\"/>\n\n    <padding\n            android:left=\"2dp\"\n            android:top=\"2dp\"\n            android:right=\"2dp\"\n            android:bottom=\"2dp\" />\n</shape>"
  },
  {
    "path": "react-native-hms-scan/android/src/main/res/layout/activity_defined.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:my_view=\"http://schemas.android.com/apk/res-auto\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n    <FrameLayout\n            android:id=\"@+id/rim\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n    </FrameLayout>\n\n    <RelativeLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"200dp\"\n            android:gravity=\"center_vertical\">\n\n        <ImageView\n                android:id=\"@+id/flush_btn\"\n                android:layout_width=\"48dp\"\n                android:layout_height=\"48dp\"\n                android:layout_alignParentBottom=\"true\"\n                android:layout_centerHorizontal=\"true\"\n                android:visibility=\"gone\"\n                android:gravity=\"center\"\n                android:src=\"@drawable/flashlight_off\" />\n    </RelativeLayout>\n\n    <RelativeLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\">\n\n        <ImageView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:layout_centerInParent=\"true\"\n                android:layout_centerHorizontal=\"true\"\n                android:background=\"#FF000000\"\n                android:alpha=\"0.1\" />\n\n        <TextView\n                android:layout_above=\"@id/scan_area\"\n                android:layout_marginBottom=\"10dp\"\n                android:layout_centerHorizontal=\"true\"\n                android:text=\"Place the code within the frame\"\n                android:textAllCaps=\"false\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"15sp\"\n                android:textStyle=\"bold\"\n                android:layout_height=\"20dp\"\n                android:layout_width=\"220dp\" />\n\n        <ImageView\n                android:id=\"@+id/scan_area\"\n                android:layout_width=\"240dp\"\n                android:layout_height=\"240dp\"\n                android:layout_centerInParent=\"true\"\n                android:layout_centerHorizontal=\"true\"\n                android:background=\"@drawable/colors\" />\n    </RelativeLayout>\n\n    <RelativeLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"56dp\"\n            android:gravity=\"center_vertical\">\n\n        <TextView\n                android:layout_marginStart=\"10sp\"\n                android:layout_toEndOf=\"@+id/back_img\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:gravity=\"center_vertical\"\n                android:text=\"Scan\"\n                android:textAllCaps=\"false\"\n                android:textColor=\"#FFFFFF\"\n                android:textSize=\"20sp\"\n                android:textStyle=\"bold\" />\n\n        <ImageView\n                android:id=\"@+id/back_img\"\n                android:layout_width=\"48dp\"\n                android:layout_height=\"48dp\"\n                android:padding=\"12dp\"\n                android:layout_alignParentStart=\"true\"\n                android:layout_marginStart=\"12dp\"\n                android:layout_marginTop=\"4dp\"\n                android:gravity=\"center\"\n                android:src=\"@drawable/back\" />\n\n        <ImageView\n                android:id=\"@+id/img_btn\"\n                android:layout_width=\"48dp\"\n                android:layout_height=\"48dp\"\n                android:layout_alignParentEnd=\"true\"\n                android:layout_marginTop=\"4dp\"\n                android:layout_marginEnd=\"12dp\"\n                android:gravity=\"center\"\n                android:padding=\"12dp\"\n                android:src=\"@drawable/photo\"\n                android:visibility=\"invisible\" />\n    </RelativeLayout>\n\n</FrameLayout>"
  },
  {
    "path": "react-native-hms-scan/android/src/main/res/layout/activity_multiprocessor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:my_view=\"http://schemas.android.com/apk/res-auto\"\n        xmlns:tools=\"http://schemas.android.com/tools\"\n        android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n    <FrameLayout\n        android:id=\"@+id/rim\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:background=\"#C0C0C0\">\n\n        <SurfaceView\n            android:id=\"@+id/surfaceView\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" />\n\n        <com.huawei.hms.rn.scan.multi.ScanResultView\n                android:id=\"@+id/scan_result_view\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\" />\n    </FrameLayout>\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"56dp\"\n        android:gravity=\"center_vertical\">\n\n        <TextView\n            android:layout_marginStart=\"10sp\"\n            android:layout_toEndOf=\"@+id/back_img\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:gravity=\"center_vertical\"\n            android:text=\"Scan\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"#FFFFFF\"\n            android:textSize=\"20sp\"\n            android:textStyle=\"bold\" />\n\n        <ImageView\n            android:id=\"@+id/back_img\"\n            android:layout_width=\"48dp\"\n            android:layout_height=\"48dp\"\n            android:padding=\"12dp\"\n            android:layout_alignParentStart=\"true\"\n            android:layout_marginStart=\"12dp\"\n            android:layout_marginTop=\"4dp\"\n            android:gravity=\"center\"\n            android:src=\"@drawable/back\" />\n\n        <ImageView\n            android:id=\"@+id/img_btn\"\n            android:layout_width=\"48dp\"\n            android:layout_height=\"48dp\"\n            android:padding=\"12dp\"\n            android:layout_alignParentEnd=\"true\"\n            android:layout_marginEnd=\"12dp\"\n            android:layout_marginTop=\"4dp\"\n            android:gravity=\"center\"\n            android:src=\"@drawable/photo\" />\n    </RelativeLayout>\n\n</FrameLayout>"
  },
  {
    "path": "react-native-hms-scan/example/App.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { useState, useEffect } from \"react\";\nimport {\n  SafeAreaView,\n  StyleSheet,\n  Switch,\n  View,\n  Text,\n  Image,\n  TextInput,\n  TouchableHighlight,\n  Button,\n  ScrollView,\n  NativeEventEmitter,\n  PermissionsAndroid,\n  ToastAndroid,\n  LogBox\n} from \"react-native\";\nimport {Picker} from \"@react-native-picker/picker\";\n//import Picker from '@react-native-community/picker'\nimport ScanPlugin from \"@hmscore/react-native-hms-scan\";\nimport barcode_images from \"./images/images.json\";\nimport DocumentPicker from 'react-native-document-picker';\n\nLogBox.ignoreLogs(['EventEmitter']); \n\nvar imageResult = \"\";\n\n\nconst colors = {\n  BLACK: -16777216,\n  BLUE: -16776961,\n  CYAN: -16711681,\n  DKGRAY: -12303292,\n  GRAY: -7829368,\n  GREEN: -16711936,\n  LTGRAY: -3355444,\n  MAGENTA: -65281,\n  RED: -65536,\n  TRANSPARENT: 0,\n  WHITE: -1,\n  YELLOW: -256,\n};\nconst base64ImagePng = \"data:image/png;base64,\";\n\nconst errorCorrectionLevel = {\n  L: 7,\n  M: 15,\n  Q: 25,\n  H: 30\n}\n\n\nconst filteredDecodes = (decodes) => {\n  let filteredDecodes = [];\n  let originalValues = [];\n  decodes.forEach((de) => {\n    if (!originalValues.includes(de.originalValue)) {\n      originalValues.push(de.originalValue);\n      filteredDecodes.push(de);\n    }\n  });\n  return filteredDecodes;\n};\n\nconst showDecodes = (decodes) => {\n  return (\n    <ScrollView>\n      {decodes.map((de, i) => (\n        <View key={i} style={{ backgroundColor: \"lightgrey\", margin: 2 }}>\n          <Text>\n            Result Type: {de.scanTypeForm}\n            {\"\\n\"}\n            Code Format: {de.scanType}\n            {\"\\n\"}\n            Original Value: {de.originalValue}\n          </Text>\n        </View>\n      ))}\n    </ScrollView>\n  );\n};\nclass DecodeBitmap extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesBitmap: [],\n    };\n  }\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Image\n          style={styles.mapView}\n          source={{\n            uri: base64ImagePng + barcode_images.aztecBarcode,\n          }}\n        />\n        <Button\n          title=\"decodeWithBitmapPhoto\"\n          color=\"blue\"\n          onPress={() => {\n            ScanPlugin.Utils.decodeWithBitmap({\n              data: barcode_images.aztecBarcode,\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n              photoMode: true,\n            })\n              .then((res) =>{\n                this.setState({\n                  decodesBitmap: [...this.state.decodesBitmap, res],\n                })            \n              })\n              .catch((e) => {\n                ToastAndroid.show(e.message,ToastAndroid.SHORT);\n                console.log(e);\n              });\n          }}\n        />\n\n        <Button\n          title=\"Unique decodes for Decode Bitmap\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesBitmap: filteredDecodes(this.state.decodesBitmap),\n            });\n          }}\n        />\n\n        <Button\n          title=\"decodeWithBitmapCamera\"\n          color=\"red\"\n          onPress={() => {\n            ScanPlugin.Utils.decodeWithBitmap({\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n              photoMode:false,\n            })\n            .then((res) =>{\n              this.setState({\n                decodesBitmap: [...this.state.decodesBitmap, ...res],\n              })            \n            })\n            .catch((e) => console.log(e));\n        }}\n        />\n        {showDecodes(this.state.decodesBitmap)}\n      </View>\n    );\n  }\n}\n\nclass Decode extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesMap: [],\n    };\n  }\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Image\n          style={styles.mapView}\n          source={{\n            uri: base64ImagePng + barcode_images.multipleBarcode,\n          }}\n        />\n        <Button\n          title=\"decodeMap\"\n          color=\"blue\"\n          onPress={() => {\n            ScanPlugin.Utils.decode({\n              data: barcode_images.multipleBarcode,\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n              multiMode: true,\n              photoMode: true,\n              parseResult: false,\n            })\n              .then((res) => {\n                this.setState({\n                  decodesMap: [...this.state.decodesMap, ...res],\n                }) },\n              )\n              .catch((e) => console.log(e));\n          }}\n        />\n\n        <Button\n          title=\"Unique decodes for Decode Bitmap\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesMap: filteredDecodes(this.state.decodesMap),\n            });\n          }}\n        />\n\n        <Button\n          title=\"decodeCamera\"\n          color=\"red\"\n          onPress={() => {\n            ScanPlugin.Utils.decode({\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [ScanPlugin.ScanType.MultiFunctional],\n              multiMode: false,\n              photoMode:false,\n              parseResult: false,\n            })\n            .then((res) =>{\n              this.setState({\n                decodesMap: [...this.state.decodesMap, ...res],\n              })            \n            })\n            .catch((e) => console.log(e));\n        }}\n        />\n\n        {showDecodes(this.state.decodesMap)}\n      </View>\n    );\n  }\n}\n\nclass DecodeBitmapMultiSync extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesMultiSync: [],\n    };\n  }\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Image\n          style={styles.mapView}\n          source={{\n            uri: base64ImagePng + barcode_images.multipleBarcode,\n          }}\n        />\n        <Button\n          title=\"decodeMultiSync\"\n          onPress={() => {\n            ScanPlugin.MultiProcessor.decodeMultiSync({\n              data: barcode_images.multipleBarcode,\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n            })\n              .then((res) =>\n                this.setState({\n                  decodesMultiSync: [...this.state.decodesMultiSync, ...res],\n                }),\n              )\n              .catch((e) => console.log(e));\n          }}\n        />\n        <Button\n          title=\"Unique decodes for Decode MultiSync\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesMultiSync: filteredDecodes(this.state.decodesMultiSync),\n            });\n          }}\n        />\n        {showDecodes(this.state.decodesMultiSync)}\n      </View>\n    );\n  }\n}\n\nclass DecodeBitmapMultiAsync extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesMultiAsync: [],\n    };\n  }\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Image\n          style={styles.mapView}\n          source={{\n            uri: base64ImagePng + barcode_images.multipleBarcode,\n          }}\n        />\n        <Button\n          title=\"decodeMultiAsync\"\n          color=\"purple\"\n          onPress={() => {\n            ScanPlugin.MultiProcessor.decodeMultiAsync({\n              data: barcode_images.multipleBarcode,\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n            })\n              .then((res) =>\n                this.setState({\n                  decodesMultiAsync: [...this.state.decodesMultiAsync, ...res],\n                }),\n              )\n              .catch((e) => console.log(e));\n          }}\n        />\n        <Button\n          title=\"Unique decodes for Decode MultiAsync\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesMultiAsync: filteredDecodes(this.state.decodesMultiAsync),\n            });\n          }}\n        />\n        {showDecodes(this.state.decodesMultiAsync)}\n      </View>\n    );\n  }\n}\n\nclass BuildBitmap extends React.Component {\n\n\nasync documentPicker(callback) {\n  try {\n    const response = await DocumentPicker.pick();\n    console.log(response);\n    callback(response);\n  } catch (error) {\n    if (DocumentPicker.isCancel(error)){\n      console.log(error)\n    } else console.log(error);\n  }\n  \n}\n\nconstructor(props) {\n  super(props);\n  this.state = {\n    content: \"Hello\",\n    type: ScanPlugin.ScanType.All,\n    width: 200,\n    height: 200,\n    margin: 1,\n    color: colors.BLACK,\n    backgroundColor: colors.WHITE,\n    showImage: false,\n    qrLogoBitmap: imageResult\n  };\n}\n\nbuildBitmap(){\n  this.documentPicker((response) => {\n    const args = {\n      content: this.state.content,\n      type: ScanPlugin.ScanType.All,\n      width: this.state.width,\n      height: this.state.height,\n      margin: this.state.margin,\n      color: this.state.color,\n      backgroundColor: this.state.backgroundColor,\n      showImage: false,\n      qrErrorCorrectionLevel: errorCorrectionLevel.M,\n      qrLogoBitmap: response.uri\n  };\n    ScanPlugin.Utils.buildBitmap(args)\n    .then((res) => {\n      this.setState({ showImage: true });\n      this.setState({ base64ImageData: res });\n    })\n    .catch((e) => console.log(e))\n});\n}\n\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Barcode Content : </Text>\n          <TextInput\n            style={{ flex: 3 }}\n            onChangeText={(text) => this.setState({ content: text })}\n            value={this.state.content}\n          />\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Barcode Width : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={4}\n            onChangeText={(text) =>\n              this.setState({ width: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.width}\n          />\n          <Text style={{ flex: 1 }}>Barcode Height : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={4}\n            onChangeText={(text) =>\n              this.setState({ height: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.height}\n          />\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Scan Type : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Select Scan Type\"\n            selectedValue={this.state.type}\n            onValueChange={(val) => {\n              this.setState({ type: val });\n            }}>\n            {Object.keys(ScanPlugin.ScanType).map((s_type) => (\n              <Picker.Item\n                label={s_type}\n                value={ScanPlugin.ScanType[s_type]}\n                key={s_type}\n              />\n            ))}\n          </Picker>\n          <Text style={{ flex: 1 }}>Barcode Margin : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={2}\n            onChangeText={(text) =>\n              this.setState({ margin: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.margin}\n          />\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Bitmap Color : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Color\"\n            selectedValue={this.state.color}\n            onValueChange={(itemValue) => {\n              this.setState({ color: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n          <Text style={{ flex: 1 }}>Backgroundcolor : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Backgroundcolor\"\n            selectedValue={this.state.backgroundColor}\n            onValueChange={(itemValue) => {\n              this.setState({ backgroundColor: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n        </View>\n        <Button\n          title=\"Generate Barcode\"\n          color=\"green\"\n          onPress={() => this.buildBitmap()}\n        />\n        {this.state.showImage && (\n          <TouchableHighlight onPress={() => this.setState({ showImage: false })}>\n            <Image\n              style={{ height: 300 }}\n              source={{\n                uri: base64ImagePng + this.state.base64ImageData,\n              }}\n            />\n          </TouchableHighlight>\n        )}\n      </View>\n    );\n  }\n}\n\nclass DefaultView extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesDefault: [],\n    };\n  }\n\n  componentDidMount() {\n    const eventEmitter = new NativeEventEmitter(ScanPlugin);\n    this.eventListener = eventEmitter.addListener(\"returnButtonClicked\", (event) => {\n      console.log(event.NOT_OK);\n      alert(event.NOT_OK);\n    });\n\n  }\n\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Button\n          title=\"defaultView\"\n          onPress={() =>\n            ScanPlugin.Utils.startDefaultView({\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n              viewType: 1,\n              errorCheck: false\n            }).then((res) =>\n              this.setState({\n                decodesDefault: [...this.state.decodesDefault, res],\n              }),\n            )\n          }\n        />\n        <Button\n          title=\"Unique decodes for DefaultView\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesDefault: filteredDecodes(this.state.decodesDefault),\n            });\n          }}\n        />\n        {showDecodes(this.state.decodesDefault)}\n      </View>\n    );\n  }\n}\n\nclass CustomizedView extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      decodesCustom: [],\n      imageList: []\n    };\n  }\n\n\n  componentDidMount() {\n    ScanPlugin.CustomizedView.onResponseListenerAdd((res) => {\n      console.log(\"onResponse event triggered\");\n      this.setState({\n        decodesCustom: [...this.state.decodesCustom, res],\n      });\n    });\n    ScanPlugin.CustomizedView.onStartListenerAdd(() =>\n      console.log(\"onStart event triggered\"),\n    );\n    ScanPlugin.CustomizedView.onResumeListenerAdd(() =>\n      console.log(\"onResume event triggered\"),\n    );\n    ScanPlugin.CustomizedView.onPauseListenerAdd(() =>\n      console.log(\"onPause event triggered\"),\n    );\n    ScanPlugin.CustomizedView.onDestroyListenerAdd(() =>\n      console.log(\"onDestroy event triggered\"),\n    );\n    ScanPlugin.CustomizedView.onStopListenerAdd(() =>\n      console.log(\"onStop event triggered\"),\n    );\n    ScanPlugin.CustomizedView.onOriginalScanLoadListenerAdd((res) =>\n      this.createImageList(res)\n    );\n  }\n\n  createImageList(image) {\n    var list=this.state.imageList\n    var image = (\n          <Image \n            style={{ width:250 ,height: 150, backgroundColor: \"black\", alignItems: \"center\" }}\n            source={{\n              uri: base64ImagePng + image,\n            }}\n          />\n        )\n      list.push(image)\n      this.setState({imageList:list})\n  }\n\n  componentWillUnmount() {\n    ScanPlugin.CustomizedView.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <Button\n          title=\"CustomizedView\"\n          onPress={() => {\n            ScanPlugin.CustomizedView.startCustomizedView({\n              scanType: ScanPlugin.ScanType.All,\n              additionalScanTypes: [],\n              rectHeight: 200,\n              rectWidth: 200,\n              continuouslyScan: true,\n              isFlashAvailable: false,\n              flashOnLightChange: false,\n              isGalleryAvailable: false,\n              enableReturnOriginalScan: true\n            })\n              .then((res) =>\n                this.setState({\n                  decodesCustom: [...this.state.decodesCustom, res],\n                }),\n              )\n              .catch((e) => console.log(e));\n\n            setTimeout(function () {\n              console.log(\"pauseContinuouslyScan func called\");\n              ScanPlugin.CustomizedView.pauseContinuouslyScan()\n                .then((res) => console.log(\"pauseContinuouslyScan\", res))\n                .catch((e) => console.log(e));\n            }, 5000);\n\n            setTimeout(function () {\n              console.log(\"switchLight func called\");\n              ScanPlugin.CustomizedView.switchLight()\n                .then((res) => console.log(\"switchLight:\", res))\n                .catch((e) => console.log(e));\n            }, 3000);\n\n            setTimeout(function () {\n              console.log(\"resumeContinuouslyScan func called\");\n              ScanPlugin.CustomizedView.resumeContinuouslyScan()\n                .then((res) => console.log(\"resumeContinuouslyScan again\", res))\n                .catch((e) => console.log(e));\n            }, 10000);\n\n            setTimeout(function () {\n              console.log(\"getLightStatus func called\");\n              ScanPlugin.CustomizedView.getLightStatus()\n                .then((res) => console.log(\"getLightStatus:\", res))\n                .catch((e) => console.log(e));\n            }, 6000);\n          }}\n        />\n        <Button\n          title=\"Unique decodes for Customized View\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesCustom: filteredDecodes(this.state.decodesCustom),\n            });\n          }}\n        />\n        <ScrollView contentContainerStyle={{flexGrow:1, height: 200}}>\n            {showDecodes(this.state.decodesCustom)}\n        </ScrollView>\n\n       <ScrollView contentContainerStyle={{flexGrow:1, height: 150}}>\n            {this.state.imageList}\n        </ScrollView>\n  \n       </View>\n    );\n  }\n}\n\nclass MultiProcessorCamera extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      type: ScanPlugin.ScanType.All,\n      color1: colors.YELLOW,\n      color2: colors.BLUE,\n      color3: colors.RED,\n      color4: colors.GREEN,\n      textColor: colors.WHITE,\n      textBackgroundColor: colors.BLACK,\n      isSync: true,\n      isGallery: true,\n      showText: true,\n      showTextOutBounds: false,\n      autoSizeText: true,\n      strokeWidth: 4,\n      textSize: 35,\n      minTextSize: 24,\n      granularity: 2,\n      margin: 1,\n      decodesMulti: [],\n    };\n  }\n\n  componentDidMount() {\n    ScanPlugin.MultiProcessor.onMultiProcessorResponseListenerAdd((res) => {\n      console.log(\"onMultiProcessorResponse event triggered\");\n      this.setState({\n        decodesMulti: [...this.state.decodesMulti, res],\n      });\n    });\n  }\n\n  componentWillUnmount() {\n    ScanPlugin.MultiProcessor.allListenersRemove();\n  }\n\n  render() {\n    return (\n      <View style={styles.sectionContainer}>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Scan Type : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Select Scan Type\"\n            selectedValue={this.state.type}\n            onValueChange={(itemValue) => {\n              this.setState({ type: itemValue });\n            }}>\n            {Object.keys(ScanPlugin.ScanType).map((s_type) => (\n              <Picker.Item\n                label={s_type}\n                value={ScanPlugin.ScanType[s_type]}\n                key={s_type}\n              />\n            ))}\n          </Picker>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Barcode Margin</Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={2}\n            onChangeText={(text) =>\n              this.setState({ margin: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.margin}\n          />\n          <Switch\n            style={{ flex: 1 }}\n            onValueChange={() => this.setState({ isSync: !this.state.isSync })}\n            value={this.state.isSync}\n          />\n          <Text style={{ flex: 1 }}>Scan Mode</Text>\n          <Switch\n            style={{ flex: 1 }}\n            onValueChange={() =>\n              this.setState({ isGallery: !this.state.isGallery })\n            }\n            value={this.state.isGallery}\n          />\n          <Text style={{ flex: 1 }}>Gallery</Text>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Switch\n            style={{ flex: 1 }}\n            onValueChange={() =>\n              this.setState({ showText: !this.state.showText })\n            }\n            value={this.state.showText}\n          />\n          <Text style={{ flex: 1 }}>Show Text</Text>\n          <Switch\n            style={{ flex: 1 }}\n            onValueChange={() =>\n              this.setState({\n                showTextOutBounds: !this.state.showTextOutBounds,\n              })\n            }\n            value={this.state.showTextOutBounds}\n          />\n          <Text style={{ flex: 1 }}>Show Text Out Bounds </Text>\n          <Switch\n            style={{ flex: 1 }}\n            onValueChange={() =>\n              this.setState({ autoSizeText: !this.state.autoSizeText })\n            }\n            value={this.state.autoSizeText}\n          />\n          <Text style={{ flex: 1 }}>Auto Size Text </Text>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Color1 :</Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Color1\"\n            selectedValue={this.state.color1}\n            onValueChange={(itemValue) => {\n              this.setState({ color1: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n\n          <Text style={{ flex: 1 }}>Color2 : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Color2\"\n            selectedValue={this.state.color2}\n            onValueChange={(itemValue) => {\n              this.setState({ color2: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Color3 : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Color3\"\n            selectedValue={this.state.color3}\n            onValueChange={(itemValue) => {\n              this.setState({ color3: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n          <Text style={{ flex: 1 }}>Color4 : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"Color4\"\n            selectedValue={this.state.color4}\n            onValueChange={(itemValue) => {\n              this.setState({ color4: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Text Color : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"TextColor\"\n            selectedValue={this.state.textColor}\n            onValueChange={(itemValue) => {\n              this.setState({ textColor: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n          <Text style={{ flex: 1 }}>Text Background Color : </Text>\n          <Picker\n            style={{ flex: 2 }}\n            prompt=\"TextBackgroundcolor\"\n            selectedValue={this.state.textBackgroundColor}\n            onValueChange={(itemValue) => {\n              this.setState({ textBackgroundColor: itemValue });\n            }}>\n            {Object.keys(colors).map((c) => (\n              <Picker.Item label={c} value={colors[c]} key={c} />\n            ))}\n          </Picker>\n        </View>\n        <View style={{ flexDirection: \"row\" }}>\n          <Text style={{ flex: 1 }}>Text Size : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={3}\n            onChangeText={(text) =>\n              this.setState({ textSize: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.textSize}\n          />\n          <Text style={{ flex: 1 }}>Min Text Size : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={3}\n            onChangeText={(text) =>\n              this.setState({ minTextSize: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.minTextSize}\n          />\n          <Text style={{ flex: 1 }}>Granularity : </Text>\n          <TextInput\n            style={{ flex: 1 }}\n            keyboardType=\"numeric\"\n            maxLength={3}\n            onChangeText={(text) =>\n              this.setState({ granularity: parseInt(text | \"0\") })\n            }\n            value={\"\" + this.state.granularity}\n          />\n        </View>\n\n        <Button\n          title=\"Multi Processor Camera\"\n          onPress={() =>\n            ScanPlugin.MultiProcessor.startMultiProcessorCamera({\n              scanMode: this.state.isSync\n                ? ScanPlugin.ScanMode.Sync\n                : ScanPlugin.ScanMode.Async,\n              scanType: this.state.type,\n              additionalScanTypes: [],\n              colorList: [\n                this.state.color1,\n                this.state.color2,\n                this.state.color3,\n                this.state.color4,\n              ],\n              strokeWidth: this.state.strokeWidth,\n              scanTextOptions: {\n                textColor: this.state.textColor,\n                textSize: this.state.textSize,\n                showText: this.state.showText,\n                showTextOutBounds: this.state.showTextOutBounds,\n                textBackgroundColor: this.state.textBackgroundColor,\n                autoSizeText: this.state.autoSizeText,\n                minTextSize: this.state.minTextSize,\n                granularity: this.state.granularity,\n              },\n              isGalleryAvailable: this.state.isGallery,\n            })\n              .then((res) =>\n                this.setState({\n                  decodesMulti: [...this.state.decodesMulti, ...res],\n                }),\n              )\n              .catch((e) => console.log(e))\n          }\n        />\n        <Button\n          title=\"Unique decodes for MultiProcessor Camera\"\n          color=\"purple\"\n          onPress={() => {\n            this.setState({\n              decodesMulti: filteredDecodes(this.state.decodesMulti),\n            });\n          }}\n        />\n        {showDecodes(this.state.decodesMulti)}\n      </View>\n    );\n  }\n}\n\nconst pages = [\n  {\n    name: \"Build Bitmap\",\n    id: \"BuildBitmap\",\n    component: <BuildBitmap key=\"BuildBitmap\" />,\n  },\n  {\n    name: \"Decode Bitmap\",\n    id: \"DecodeBitmap\",\n    component: <DecodeBitmap key=\"DecodeBitmap\" />,\n  },\n  {\n    name: \"Decode\",\n    id: \"Decode\",\n    component: <Decode key=\"Decode\" />,\n  },\n  {\n    name: \"Decode Bitmap Multi Sync\",\n    id: \"DecodeBitmapMultiSync\",\n    component: <DecodeBitmapMultiSync key=\"DecodeBitmapMultiSync\" />,\n  },\n  {\n    name: \"Decode Bitmap MultiAsync\",\n    id: \"DecodeBitmapMultiAsync\",\n    component: <DecodeBitmapMultiAsync key=\"DecodeBitmapMultiAsync\" />,\n  },\n  {\n    name: \"Default View\",\n    id: \"DefaultView\",\n    component: <DefaultView key=\"DefaultView\" />,\n  },\n  {\n    name: \"Customized View\",\n    id: \"CustomizedView\",\n    component: <CustomizedView key=\"CustomizedView\" />,\n  },\n  {\n    name: \"MultiProcessor Camera\",\n    id: \"MultiProcessorCamera\",\n    component: <MultiProcessorCamera key=\"MultiProcessorCamera\" />,\n  },\n];\n\n\n\nclass App extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      permissionGranted: false,\n      pageId: \"BuildBitmap\",\n      showImage: false,\n      base64ImageData: \"\",\n      imageList: null\n    };\n  }\n\n  async requestForPermissions() {\n    try {\n      const userResponse = await PermissionsAndroid.requestMultiple([\n        PermissionsAndroid.PERMISSIONS.CAMERA,\n        PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,\n        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE\n      ]);\n\n      if (\n        userResponse[\"android.permission.CAMERA\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.CAMERA\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.READ_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.DENIED ||\n        userResponse[\"android.permission.WRITE_EXTERNAL_STORAGE\"] ==\n          PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN\n      ){\n        alert(\n          \"Please allow permissions to use this app\"\n        );\n        this.setState({ permissionGranted: false });\n      } else {\n        this.setState({ permissionGranted: true });\n      }\n\n    } catch(err) {\n      alert(\"There is problem with permissions!\")\n    }\n  }\n\n\n  async componentDidMount() {\n    if (!this.state.permissionGranted) {\n      await this.requestForPermissions();\n    }\n  }\n\n  render() {\n    return (\n      <SafeAreaView>\n        <View\n          contentInsetAdjustmentBehavior=\"automatic\"\n          style={{ backgroundColor: \"lightgrey\", flex: 1 }}></View>\n          <View>\n            <View style={styles.sectionContainer}>\n              <Text style={styles.sectionHeader} title=\"Functions\">\n                Functions:\n              </Text>\n\n              <Picker\n                prompt=\"Select Function\"\n                selectedValue={this.state.pageId}\n                onValueChange={(itemValue) =>\n                  this.setState({ pageId: itemValue })\n                }>\n                {pages.map((page) => (\n                  <Picker.Item\n                    label={page.name}\n                    value={page.id}\n                    key={page.id}\n                  />\n                ))}\n              </Picker>\n              {pages\n                .filter((page) => page.id === this.state.pageId)\n                .map((page) => page.component)}\n            </View>\n          </View>\n        \n      </SafeAreaView>\n    );\n  }\n}\n\nconst styles = StyleSheet.create({\n  flexRow: { flexDirection: \"row\" },\n  flexCol: { flexDirection: \"column\" },\n  flex1: { flex: 1 },\n  flex2: { flex: 2 },\n  width30: { width: 30 },\n  width40: { width: 40 },\n  width100: { width: 100 },\n  mapView: {\n    height: 200,\n    backgroundColor: \"red\",\n  },\n  snapView: {\n    height: 100,\n    backgroundColor: \"yellow\",\n  },\n  infoWindow: {\n    backgroundColor: \"white\",\n    alignSelf: \"baseline\",\n  },\n  container: {\n    flexDirection: \"column\",\n    alignSelf: \"flex-start\",\n  },\n  sectionContainer: {\n    margin: 12,\n    paddingHorizontal: 8,\n  },\n  sectionHeader: {\n    fontSize: 20,\n    fontWeight: \"600\",\n    paddingVertical: 12,\n    paddingHorizontal: 0,\n  },\n});\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-scan/example/LICENSE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-scan/example/README.md",
    "content": "# React-Native HMS Scan - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Scan Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\n\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n\n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n\n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nNo.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Scan - Demo is licensed under [Apache 2.0 license](LICENSE)"
  },
  {
    "path": "react-native-hms-scan/example/android/app/BUCK",
    "content": "# To learn about Buck see [Docs](https://buckbuild.com/).\n# To run your application with Buck:\n# - install Buck\n# - `npm start` - to start the packager\n# - `cd android`\n# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname \"CN=Android Debug,O=Android,C=US\"`\n# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck\n# - `buck install -r android/app` - compile, install and run application\n#\n\nload(\":build_defs.bzl\", \"create_aar_targets\", \"create_jar_targets\")\n\nlib_deps = []\n\ncreate_aar_targets(glob([\"libs/*.aar\"]))\n\ncreate_jar_targets(glob([\"libs/*.jar\"]))\n\nandroid_library(\n    name = \"all-libs\",\n    exported_deps = lib_deps,\n)\n\nandroid_library(\n    name = \"app-code\",\n    srcs = glob([\n        \"src/main/java/**/*.java\",\n    ]),\n    deps = [\n        \":all-libs\",\n        \":build_config\",\n        \":res\",\n    ],\n)\n\nandroid_build_config(\n    name = \"build_config\",\n    package = \"com.huawei.rnhmsscandemo\",\n)\n\nandroid_resource(\n    name = \"res\",\n    package = \"com.huawei.rnhmsscandemo\",\n    res = \"src/main/res\",\n)\n\nandroid_binary(\n    name = \"app\",\n    keystore = \"//android/keystores:debug\",\n    manifest = \"src/main/AndroidManifest.xml\",\n    package_type = \"debug\",\n    deps = [\n        \":app-code\",\n    ],\n)\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: 'com.facebook.react'\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://reactnative.dev/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            storePassword '<keystore_password>'\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://reactnative.dev/docs/signed-apk-android. \n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n\n   \n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses"
  },
  {
    "path": "react-native-hms-scan/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\">\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" /> \n    </application>\n</manifest>\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.rnhmsscandemo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHmsScanDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:usesCleartextTraffic=\"true\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHmsScanDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:exported=\"true\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/src/main/java/com/huawei/rnhmsscandemo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.rnhmsscandemo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsScanDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/src/main/java/com/huawei/rnhmsscandemo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.rnhmsscandemo;\n\nimport android.app.Application;\n\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\n\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n    private final ReactNativeHost mReactNativeHost =\n            new ReactNativeHost(this) {\n                @Override\n                public boolean getUseDeveloperSupport() {\n                    return BuildConfig.DEBUG;\n                }\n\n                @Override\n                protected List<ReactPackage> getPackages() {\n                    List<ReactPackage> packages = new PackageList(this).getPackages();\n                    // Packages that cannot be autolinked yet can be added manually here, for example:\n                    return packages;\n                }\n\n                @Override\n                protected String getJSMainModuleName() {\n                    return \"index\";\n                }\n            };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-scan/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath('com.android.tools.build:gradle:3.6.0')\n        classpath 'com.huawei.agconnect:agcp:1.9.1.300'\n        classpath('com.facebook.react:react-native-gradle-plugin')\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n\n        google()\n        mavenCentral()\n        maven { url 'https://www.jitpack.io' }\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-scan/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-scan/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m"
  },
  {
    "path": "react-native-hms-scan/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-scan/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-scan/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsScanDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')"
  },
  {
    "path": "react-native-hms-scan/example/app.json",
    "content": "{\n  \"name\": \"RNHmsScanDemo\",\n  \"displayName\": \"RNHmsScanDemo\"\n}"
  },
  {
    "path": "react-native-hms-scan/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: [\"module:metro-react-native-babel-preset\"],\n};\n"
  },
  {
    "path": "react-native-hms-scan/example/images/images.json",
    "content": "{\n  \"aztecBarcode\": \"iVBORw0KGgoAAAANSUhEUgAAALIAAACjCAYAAAAuAERWAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANcSURBVHhe7d3BahsxFEDRpP//z22hWQR18RAaO57rczYt2GNpxhfxCKH9/P3XB9zcr68/4daETIKQSRAyCUImQcgkCJkEIZMgZBKETIKQSRAyCUImQcgkCJkEIZMgZBKETIKQSRAyCUImQcgkCJkEIZMgZBKETIKQSRAyCbf6Rww/Pz+//vbPtPX1/ZPdz1vff/X+Tr+a3f3cmROZBCGTIGQSUjPy6Ux4OuOerrc6vb/p/bvrvzInMglCJkHIJNx6Rp5cfWu7M+fu+rsz6+5+Vlc/n5/kRCZByCQImYS3npF3P2/X7vrr+0/v14wMNyNkEoRMQuo/VZ9mzsnuzDq9frXpfh59/6/MiUyCkEkQMgm3npFPZ9rJ7vW7+1k9en9lTmQShEyCkElI/Rx5tTuTTu9fTY/u0TPxZHd/d07BiUyCkEkQMgm3/n3k3RmwZr3/05n3zjOzE5kEIZMgZBLMyBue/ahO97/7fG6Uwn+cyCQImQQhk2BG/mb9vGm90xl2tbv+atrP7vXT+1+JE5kEIZMgZBLSM/Jkd8Zd1zvdz3T97uuTaX+n9/OTnMgkCJkEIZOQmpGnmXH3VnfXe/Trq6vv586cyCQImQQhk3CrGXkyzZSr05n0dOacrr96P6evvzInMglCJkHIJKRm5NU0Y+6aZspTz55Z7zwTr5zIJAiZBCGTcOsZuT5DTjP4up/SzLvLiUyCkEkQMglvNSOfzpyvZverK8/QTmQShEyCkEkwI39z9aN49nqr0xn/Tmk4kUkQMglCJiE9I5/OqLsz5u76k9P7uXr9V+ZEJkHIJAiZhLeekSe7j+Z0vV2n93vjr/4/TmQShEyCkEm49Yw8mWbGacacHs3u56+ePVOvSl+9E5kEIZMgZBLMyN/szqzT9buvP9pPr/9ITmQShEyCkElIz8ir3Zl5dXr9ZPr8Xet+Hr3/n+REJkHIJAiZhLf6feSrZ8ZnXz/dz+T0+lfmRCZByCQImYS3+jkyXU5kEoRMgpBJEDIJQiZByCQImQQhkyBkEoRMgpBJEDIJQiZByCQImQQhkyBkEoRMgpBJEDIJQiZByCQImQQhkyBkEoRMgpBJEDIJQiZByCQImQQhkyBkEoRMgpBJEDIJQiZByCQImQQhkyBkAj4+/gCO197ZKL532gAAAABJRU5ErkJggg==\",\n  \"multipleBarcode\": \"iVBORw0KGgoAAAANSUhEUgAAArwAAAEsBAMAAADTGn2uAAAAMFBMVEX///8AAAAiIiIRERFERETu7u5mZmbd3d2IiIh3d3e7u7tVVVWZmZkzMzPMzMyqqqrZQmNqAAALHklEQVR42uydDW7jIBBGkxuQ+192UwP+5gfLbbNpjP2eIq+NB5p9kUZADLkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8lPtj5Xn1dby316PcHqXFtMhSA2LkF8U3Begdgd6ZuD90IoFNUZcm2/28VayFLVJNoRe9I9A7F4tVZdSKsm67bEfdUmSPUVPoRe8W6J0J50SJtMpbu2RroZWpsNsNvej9BqfV+9igpJDdCgci595ys7qUhDsqX45z6r2najmklS0ttpBcDb3oPbNeeY7qKt2hfNYw++nYptCLXvS+WW+41KH5LIpTSK62SU6qr746v9RbxoW6lwsj6EUvel/Vmwk9MTdAc7m3xPisFL3ofR4q3p3MVtRzCNXQexC9aV7X3JLhWl4DdNmpkUsAeo+q1/Rfd/TmCui9mt6eV/W1rzdmx2jVs6/VSsKYbl69saugA3rRezG9T+RwPG+Tc3KIbOX6Omni3Ite9M6qVy2pWfUmfpV79bZNsDpjOukx8m+tqqmJcy960Yteg54s9Q+UmsbVpMpd38w/lfpAL3qzbWtWIdIQqqH3IHqbW132+V4dY7JVNq6XzvAb9OoeetGL3j/QW51Ii9GYBmj1qMJWUetcJGoGvUI+9w8e9KL3xHqFG3nlB8nkTQF2BGfXtkyRey+p17Pb/XWg9yh6Mxr7qomXV2tULXnk5WdyVLiWqFfWwux7QS960Tu/3j7+ctIWdBKnfZSN3WL5ojD0olfDXkcuKxIdbkylNyOvw38yx9NbXYVelgRqXVt8JDUtj5Vh9KIXvdPrbZnTXqrQNmFmfhQsq5UWMIneJwrfHBnXkK3pX/Si97R6zfyMG7tJmgQqCStM1deEPNMufOj1oHcavcmYHFfGesuPvsocLIrvyHPVG4dprZYLK/PswodeD3rR69Dme8q9eRe+/OC6Pa90+Qfb6gq9wxnF3m6m3RuG/LSj7RyL7D1S0HsAvbnTJedhQBfncPLWfOtngV70ovcMesN6drXgum25xOZkL/n4ek3NtMXL6EYYI6MXvfv/9S3LJX0Q5tM5ll7lVWMvWO3+W0xDhS4evehF79v1ytMtStVZp4yq7ZNHXjqKu/srWfVyohj0ohe9J9ArmW7haiPvwldf4dIG/I4ktKjwmw/0ofdQejNe/vZ6Qh3Q+0m9rdLWQ2V62YC887+NQS960XsGvdVY2ti/UeJQLm3bK3rALLlX2vT3Ny/VXwjVZtEbO7zbs5Shp6sK6L2aXo3axj85qmS7EF2UYQvoRS9636o3T/D6spKCx1907rNqlBytXAt5OGj3j572GPSi91J6f/wbV776QfWqr6WTtOw9b/uvsJCol3L0XlxvtDO+ERob9SvQ+1G9inNiK3EeOP4+iE3Itjp60Yvec+i1c7lhtVoIS/tjKEVb5/+ZbDl1f3W1g2LF1krAzY6EztCL3tPqvVk/bie9fh734JLDpTCnaPSiF72v6X19C7Px7wh55XvcJUe6ir3rCm2MqRh/fQy9R9O7sxtJQHqT+oLeK+ntSVWXEmXzcOyPeZOtHL3oHTx4UwlmN9+d6qL3o3p7sDy7TpfKW6TEbm2UgV70XlDvP/buaKeBEAyi8Pu/tWuIjqdTujGu6bJ7JiZWQlvzXRBa4KdhyDttZM7EC2HsA6klYzzA1hEefV2Bd+JA/CSU7CevvBfm5W5SGnLLGXer1lc92Kwur7zy/uvMgelzFHXAorvsvz1A4sMJW11Zjj1pGJMPv8R8Zydfd5FXXnkP4A3pIAppRld4PlsL7gsK5b09L/4EG1BhvAVt8r6dt/r0N8AsppEOqNWZWZy8K/JyzJxKynsbXn4PU9VyeMUYZ24jrPG7FC9qunRp6bzNtICnvPJemHcLbaPKDlv4ZS+mcBy35ZVX3odG6IAXz/sLbygJPTly+CtbvuzDYNvryFwhCr688sp7Dd6R/JOcevWtxFVnA+bjR155wcs/2cbXZpu87+FluuxewnXkrv+P9zz8jvgCffILkVdeeY/k7SJ7A4on1zBKZ6zmMZZleF9fjNdzCEKPyCvvZXkzkGA45e4R3FKaRj74aSvvCXmReW2SPXp5z8CL7Gk3efq9SMRQuxtTrMjnM1qBZOyVV155r8Jbi8XYfVrrwjzplmeNjEZ57817WFbhvWaolDq9XAb6buxtZn1TobzyTiPvQiHv88PvW4LMYZaf+Bx45X0ZeZfKJ0secNV4UkEr87c0cp1IYXlnkXedZPyEM0ps8fA7E8mvzk7M5J1FXmOMMcYYY4wxH+yYS2gTQRyHv2i2m64xZrdr0jRRG3z2IDRWq+KDxOLrtlURRERLNQo+SKl6lFTFiwpbVPSYoFehsYgerRcvCo2oiIhE9ODRnLyayUI2xaqHDKKyH5uBzQa++f+YzGM9PDw8PDw8PDw8PDw8PDw8PDw8PP535iyE+QtpoCxjFl5YzM6hJ3+t7bcul93MjvKeFmlfAiNpGqjGTMF4WrQbuJd6BwdMHLSBRQW4FCawTqItNNlhN9kudtxqsimTmyxhk1mZMhy3gGBU0/UIumjqjOh62le7PXLJojW0OIzlcTlHM59SaaC9VzVO6oVQnwmOf0WpizkdYdgo0RbouR5xbf74ZbPJtnfj0DQb5Vbmj4xPA3OPBOPZU2SzpzupU9yRzbdls+X8XJsW6YNMjp9xfjBd91OgOKEeM1G3Q8DWROfbPodhWKJNQelzbbVohr65tqFCIMGw3MqqdiABVCvtYQT+de152JebyiEYsNp6aZFSQTXZn3qH71T//tQHDALJfovIpQ0IfGmg+BXwdYOJstqimgcM8IehWpBpo8+1lS1GHrq2pahxYZNZWSmnmsAw87pBmPOBJSgvrXEEWicLumiRqh3sVJZeK1d8ybelEzsxyOwqLaejp/ykEe9YDmceM2HP9gWdgGo68Y7kZdr2d7q2pMjYtRlgCJvMypKwBnjF/FXPADIWY1/3LWfyWgXwL0TtpEUGu/3R9sXsTfsSLAKMYIzapVcGpxvxjiOar2CKBXgqX184nHh9tkRbVZ92baWvFLtdW6YSMoRNZmUGJIFNzNV1G7QYBBLbLMp6BCjaEKNF/NHB9PzNz5/2+nrJnAHDHwUDgznhRrxDgGYC4jMaQ7jTOPEekWj7cnOR1bCNRq7qaddW7Bk2hU2SqzneCHA/UR+uMLQeCGVsyFgQoUWCieoTsQkJ+7o5qG/HEPLkj/GOLseJtygadY3ljl55NqaONGyhgbVjtmvTym9jwiazsqWwBugXikXwsSYn0wUw2EsogoTRq8RL1txpnKXrfGTW0TuWQ+3LOfFqmz5NwOh63LlXnk187drI5JpszFssbFJc7tIWB5YBGNRua5KtkxUQP5kXRcLcy8Ba2rpwOoGJEYhRu2bEWyxwdyVOvKMTWgxtTc6JVzySaKM40WQ7G2u2IcZyQWZlYmO2BJgEgjFCcWC8MG+904+PE6B10SpjCdTU46uFWidWXE446+vrmfEO2lpqR/YYmChrxVbprpnNWvV4b0i0BXuu9FUatuBRPd9kCzyICJvMysSxIg1MVa7fKS0X/w7ExmzgcM+Vjhylijjh0CojC+F8am2tE8qkkcfgQLLHmhlvW2+brutRcI4VQXuodpurx9svzyYOxY9c25wtt5ttvk0F6JdbmVLqt4C99r1U7cHHNLQ/gX0XBjqOEzKdE84fQE3wE4JR+Ldt8IsXJ1M5/gQ/fbWxNw//uA14w+woG/Dw+N4eHJAAAAAACPr/uh2BCgAAAAAAAAAAAMBFbFAgoq0NaDgAAAAASUVORK5CYII=\",\n  \"multiple2Barcode\": \"iVBORw0KGgoAAAANSUhEUgAAAn4AAAE7CAIAAADMzxt1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC2USURBVHhe7d15kBTl4cbxH7DIjXgbiVc84h2NUBiJ4BmiQQQv4kESETViWSlL8QCNxJRilESrBA/UiIUhioIa0YSjOBQvDs9SIUoiREVUCKAuy7q7/h7mfXcyO/12z8zOzNs9u9/PHzDv293v2/cz09M92+bbb7/9PwAA4Etb+z8AAPCC6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8avPtt9/alwAq3KpVq+rr620ByMMee+xRVVVlC/CF6AVajrfeeuubb76xBSAPhx566DbbbGML8IXojce//vWv//73v7YARGrfvv1hhx1mC5GIXhSK6I0F3/UCAOAV0QsAgFdEL4Ck+/bbb9u0aWMLeWjbduuZraBv06K7CA4yjRc0V7EzqwVJwJYAWrJCQytG0bNaUI42NDQoZgpd8IgugoPUuCojJkkgrRb7CnHjNqt4cJsV8lfMbVZKiDVr1tx7773JP9IVlprJ448/vl+/fraqkZbi7bffnjFjRv6PTlVVVZ111lkHHHCALeei3pcsWfLcc8/V1dXZqlS/osT63e9+Z6saqV7/PvDAA6tXrzY1Saal01L89re/bdeuna1qxG1WsSB640H0In9FRu/y5cvPO+88W068yy677IILLrCFDHPmzLnhhhsyczGCllrRe+utt/bv399W5eHJJ58cP378li1bbLmRWlMq20JTI0aMeOONN2wh8V599VWiNyG44AwAgFdELwAAXhG9AAB4RfQCiIG5TSlPGjnsrpSC2gESgugFWiMllmHLfhXatXI3+EyqacSwVQlg5qddu3ZxzVWMXSN/3OEcDw93OKe3rPM4jB6aD02oRqTI49w0ohfBc2ua6csWAjS0oaGhyNmIYOYwevb0b8Qc5sP0ovNmsJ1y3OFs5nmHHXaI5S8dqffq6uqamhpbzhB2h/Pzzz8/bty44B3OamrDhg1ZT6yqMsY7nDV+p06dOnbsGNyUHtTW1mrdOrvmDufkIHrj4SF6dUqdOXOm8+yWNmjQIJ0jbKFwOt/NmjVr06ZNtuwyYMCAHj162ILLnDlz1q9fr6bCsu3EE09UQuh05txXVf/KK698+OGHtlwe3bt314JEpK/mbfr06UXG2GmnndahQwctkS03Knn0prtYunSp/zOAele83Xzzzc8++6ytyuCMXu0ezjclqlFrvXv3zhqkyriiVzuJZuass866+uqrbZVHmtWHHnrovvvuc/4VDaI3OYjeePiJXp3KP/30U1sO0FH61FNP9ezZ05ab5eyzz9ay2ILL1KlT999/f1tw+cUvfvHee+9F7IeTJ08+5JBDNLdh44wZM2b27Nnl25PV9Z577vnYY48FT1uZ+vbtGzxrF2TevHnKeFvIUKbnehUSSpRYzgBaUbfcckv+0RutV69e9lUjLXW8z/UOHTp01KhRtuCXonfSpElEb8KFvotHC1AR76vymUmd++wrl+ihJVERaxJApSB6AQDwiugFAMArohfA/5hbhUtyDf/bFFsojtoJm6W2KbbQlHOSEs5VoUrVr1murJu6UVmIXgD/o9O61NfXF58TJiFKwjSVNUsqKn70b1Z9hNTCtVFUmwY9M13bQnG0yNtss02pWoN/3OEcDz93OA8aNGjt2rW2HKATQRLucB42bNjy5csj9sPJkycfeuihehE2zvXXXz9r1qzy7claUXvssce0adNayR3OdXV1c+fOfe2112y5uUy8jR49OthFM+5wfu+9955++mnnR73gXwZUj+r9448//vLLL21Vipmlo48+2nnnc7nvcFY7ixcvnj9/fp5/fymM2tECapc49dRTg+uWO5wrAtEbD6I3jehNS0j0ainuvPPOxx9/3JaLoN6dodWM6A37o4FhXWjMa665ZuHChbacQe2rF1vI4OHhIh0OEydOLHI/MQYOHDh27FhbyED0VgSuV1QqnQ70b9gVJw01p1QzmpOmjRiqQQpv5wFcWunZ0L9BGipaFs2MGT+LGafZuWsmT3UVSqPphBWdu/mwzYVILWjzFwRABeFTbzyK/9SryfW5pLa2NuxuC21ZvYv/6quvbLkpnev175AhQ7p27WpqsmhyjXP++edvv/32tsql+E+9zz333Pr16/XCuSsqjTZu3KhPMJqZsH31hRde+PDDD5u9J6uLvffeW58hbLmpranYpk23bt0GDRpkq0Lk/NQ7cuRIfX61hQD1cs4555juxNam8KlX+NSbhU+9FY3ojUeR0atzwapVq4YPH65YKmYLqp2IyTX0iSee2HPPPW3ZpfjozUknyrffftsWykCLeeyxx+qcW+SxkDN6n3/++c6dO9uCS9jmIHqF6M1C9FY0LjhXJHO6DDtT56/IyVuG5KwENkdi6Vizr4BSIHoBtEAKS32st4VG7du3D3vDGvZdvsY3bBkoBaIXQAukfA1GrLlpIBjJopHD8lWDwu7yA5qH6AXQAlVVVY0fP35pwOLFizt37twr4Mgjj3z33XfnzZtnx2u0JIVPvSgtohcAAK+IXgAAvCJ6K1Xweyw0D9cSAXhG9FYqBYbJDPMiSIPalv9n4k1fEex4xVE7ZlnCRPzUlB0jnBkn+q1MxD04oqHRkwNApmIfDEXzFP+TGjU1NW+88Yb+tVUB2rLjxo1bt26dLRdOvUT/pEZDQ8OyZcuqq6tt2eXII48M+8GsfGgp1MXmzZv1Oux3ux555JG33nor7B5UZfZJJ510wgknhMWzRthhhx0OPvjgiGNh7dq1t99+e9gI5o7ZhQsXhs2hkfMnNcLwkxri/EkN835Ie0j0mk/TaNoNHn744bvuuitrwdXUkCFDrrrqqoJ+X4Kf1EDz8Km3Iums0aFDhz59+vQPd8wxx1RVVdkJykPn7t69e9v+QhSTu6ITYq9evbQsYlsM2GWXXSLOvBrUs2fP448/3o4doJYPOuigiNwVnStfeOEFhavT/JQ8z/4oLe2E0dsuTybFS9IUkBPRC6CC6R3P7Nmz9Zk4H/PmzZs1a1Ztbe1JTf3kJz858cQT9Q4s4psLoISIXgCVSh9S5bq8XXvttaNHjzaXu8dlUFEGDx5c7gtFgEH0AgDgFdELAIBXRC8AAF4RvQCaMF+g2kJxzG3DALIQvYlW5JmrlZz4lBPRS+phNbakVd02pfiVpkbMC1NTpJK0o0YMW/bOrJMi2WVIsVWoNPykRjzy+UkNHaXFPCpaV1c3ZMiQNWvW2HKBzFE9Y8aM3Xff3dQk1vXXXz9nzpywn9TQglxwwQWXXnpps89TmnDVqlVnnXVWxK926N+cG6siflJDS6Gaxx57bMGCBbaqCOri3nvvtYUMhf6khmbptddee+CBB4r/431aIaeccsppp51my8Up6Cc1tBRaq9OnT6+trbVVzaWl6Nu37y9/+cvgCZyf1KgIRG88ckavzvWKk2IOUW3ZadOmff3117ZcIBNUZ555Zrdu3UxNYinSVq5cqRfOnVkL8oMf/KB3797NPmurhQ0bNuhdSNjBohHkoosuin4qdNiwYQpRWyiE51+zUs3mzZsjfiitINtvv719laEZv2alY0E7c9gmKEinFFsoTqG/ZqW1qnVbkqXo0KFDly5dbCED0VsRiN545IzeRYsWjR49ulRHKTx48cUXdTa0hZLyHL0eNCN6k6nQ6PWA6K0IfNcLAIBXRC8AAF4RvQAAeEX0Aq1R6s6weB5NMf0W1Pu3qefHwr6WNneYZzJ3mwe7MC2o3jkoWClmkmAXYcyYmspMCDgRvUArFVc8KBed4RctYlaDg9L5Z4qZTL/OQYWO76QxUwu3la3yK/93CYgRdzjHgzucW57KusPZZEOPHj3872DqV52GPb/kvMNZcTJ//vw//OEPmUunSjWlIJ89e7ataqRBGvOmm2566aWXbFVKVVWVxh86dOjw4cNtVSNNMnPmzIkTJ2Y+0af2Ve/swgi7w7ljx46dO3eOZd1u2bKlurra2TV3OCcH74+A1kinZiXK+vXr9RbQM9NpQc8Na1aViFlzu27dui+++EIv7EgZNL4W8KuvvjJjpn3++eeaSqlvx8ugSRRaGzZssKOmqMewLqJp6eJat6V6+hllRfQCAOAV0QsAgFd81xsPD9/1tmvX7plnntl5551tOUAtDxky5KOPPrLlgDZt2jzxxBN77rmnLbdcCxYsuOqqq2whQOthjz32mDZtWvTvRObUr1+/6upqW3CZN29e9+7dbSFDmX7NKpnCfs1qzpw5N9xwQ11dnS030gIuWbLEFjJozGuuuWbhwoW2nEHtqxdbyPDkk0+OHz9+y5YtttworAsJ+643mfiuNzn41Au0cHqPpfCwhQTTTBq2nEGVzvegZuS2gXt6nY1EC+vCCA6KHj+BKm6GWzaiF2jJdLbVh+ZgOCVQRF5qKfRxLWsEFXNOYgt50PhaS84upCHwZ6k0vpnElpNNi6B/g9cMEBfeB8WDC86J0oIvOGsrf/LJJ7///e+L/3N7HmhVDx48+JRTTrHlDEuXLn3wwQczw0Mji16MHDkyGI0a8/7773/ttddsOYPzgrNWlA66Rx99NPjnwpSvd999d3Drq9M//elPK1assOUEMytqwoQJwWvLXHCOBdEbD6I3UVpw9FYQ7ZAmIYLCBqlSg3r16mXLTZmhtpAhLHqdXUTXi7OLCkL0xoILzgASwZlwRtig6NgrKBTDuoiur/TcRVyI3tYr4kwHACgfohcAAK+I3taLa2UAEAtus4pHztusli1bdtttt23ZsqXZG6hdu3aTJk3acccdbTlALRd5m5VGWLt2bfLv6+nevXu3bt1swSXnbVY9e/a86667wp4k0QgNDQ0aJ/oa/s9//nPnrwcbmvaRRx7p0qVLsJEib7PSbGtbN3tHykkzbNqPXvw0M6aZylalqMbcqKwXpibNOYl5raXr3bt38A5n0SBnfdhPajil+83sWlSpf7Mqo2lkM1WRzPxo0bbOWdMGw7pQpcbX0OA+zG1Wscje++FHzuiV+vr6qqqqZm8gc7A5j0NDLRcZvUr3M888c+XKlbacSFqKi1IiVkXO6DXTOs/jYrJt0aJFxfzlInVhnv8JnhyLjF7NmwSbLa2wnAvSzGjPCY6sNaBKszJtVQYz1GwII7VYW5vq1atXcBKzvM5ZKjR61biZMVuVYraX/hVblYf811IE9WgWXE0FFzysXl1L8NFeojcWRG88ckavtouOEx1jzT5Q1UL0SUEjFBm9amHo0KFaFltOJC3FhRde6Hz0My1n9JoXYQeLRtCg4v9ooGnHFjIUGb2rV6++6aab0ktRDgcddNAVV1xhC3nQTE6ZMuXll1+25Qynn376ySefbAuNNPOLFy9+4IEHsjaiVpcGKUez1psqNeY999zz+uuv26oMBUWvMWLECOcKvPrqq/fbbz9byMPcuXNnzJhRkgtFRx99tBbEFjL8/e9/f/rpp52PcU+aNCm4FERvLIjeeOTzqbfctOmLf6737LPPTnj0yvDhwxW9tuASHb15qqy/11tC6qJPnz4TJkyw5Txs2bLllltuefbZZ205g0LRmSgefsM5QvDRYZNh999//+GHH25q8jF16tSJEycGfya6GQYOHDh27FhbyPDQQw8pYp3pzm84J0d5r0EBAIAsRC8AAF4RvQAAeEX0tl7myyq0WtoBwvaBZuwb+U9ixnSOr8qwevuqKVMfNklB9dHa5n1/uLnzy7BVjYI1aRoU/BYWLRjRC7RGqWjYypYzqNLcXW/LeSh0ZHN3Z3Aq1QQrxeSZLTTlnCSsfTHjiy1HUjsNqceK8o9ew9l+WKep2dm6zm0ZrQAbu/Uypye0WtoBgvuAiQflTaG7R/7ja8yqqirzwtQYyh71K7bcVNisqj5skmB9ugvn3JoGM6lGH0br6+uDTRnBSdKP1Qa7UE1w/LTgzdtowXi4KB5+Hi56/fXXwx5jMKeAsWPHfv7556YmSOMU/3DRYYcd1rlzZ72IOOkU6f3331+3bl3Enlzkw0Wa844dO0Y8Q2IWbejQoUVeM+zTp4/Jhqx1VaaHi9TXkiVLgutN+8ydd975+OOP23KpaZY6dOhw3XXX/exnP7NVyfDkk0+OHz8+eMhohp3PLzlpZK3SadOm3XbbbbaqkQade+652hWzHkIzk4T96cMwPFxU0YjeeHiIXr1VHzx48KeffurcxDrazQEfsQNohOKjd+rUqfvvv79eqDVTU1qa/zFjxsydO9f5GwJGkdGriMr593q1dEcffXRNTY0tF04tzJ8/v2vXrlqirHVF9PpB9MIbLji3WDqYwy6sierDBpWWTiuGLZeaaTwid4sXdv0wzQyKGCEfmtycLsu3rgAkBNHbYuU8g28Nk/Knr+mlrNRLWeMq3bjtL0CDwr4LLEiR16sBVAqiFwAAr4heoIXTp/asqwLpGvORPShrfDGThH0ub5tiCxmc9aYpW8iPGT9sboNSFyPcI+ffiGG6di6dk+la4+e/jBpfI+f/hatpXFM5r7XkP6uIERsJaMl0jpYOHTp0zGCK+nfLli01TW3evPmbb74JPuiiE73+raqqMi1kccaG+tW/nTp1siNlUKUatF3mp6BnbxQ/iiUtSNYCqqhKsePlRwsSXFFhTBe1tbV24gxqR4PseE1pqvbt29u1k4vZfFrG4Fxp82nBzZpHknGHczz83OE8aNCgtWvX2nLhdACX8A7n8rn++utnzZoVsScX/3BRzjucpW/fvjoV2kKzzJs3r3v37raQocg/Grhhwwa1bAsZtFzvvvtu1mnafJZ6++23szarGW3AgAE//OEPTU2aBv373//WhrblRmaS6667zhQzqZc1a9Zs2rTJlnNRUwceeKD25/w/0mkpZsyY8c9//tOWG6mpo4466rjjjrPlDGF3OMsZZ5xR0Kly5cqVb775pi00Utf77LPPwQcfnLUjqV6NH3DAAbacH629Tz75xBYyrFix4r333nN+IOYO5+QgeuNB9JYQ0ZvmjN4wWmO9e/e2hTxoPVx99dVnnXWWLWfQOd35Z/g0ifOxHK2osD8a6KR2TjrppJtuusn8Fkc+mvFHAyOit9zCVpSTRta2mzlzpvPhoghEb3JwwRnIi8539lVAxCAACCJ6E+rLL798991333zzTX2OaR5Nu99++/0gUseOHW1/8Xn//fc1qxFLunnz5tivzdTW1tq5cTEzf8ghh9jVGoL7XwAYXHCOR84LzkuXLr3tttt0xm/2L7tWVVWNGzduu+22C/tMpk1/8cUXO78uMjShhwvOV1xxxcqVKxVLziVV/R133KH3EJrbsH213BecNQ/bbLON1mRYF2YN33333dEX7s4880y9jbAFFy44h1E7XHBO08jadlxwrmi8DU8oHf9r1679+OOPPy3CDjvssOuuu+4SQoPyP5GVz7p169asWfPRRx/ZmW5K7wzMTZsRyVpu6rqmpkYzaecpQIO0sXbeeWe7ZkPojGlbbDU8LLKzi7j6bR41pX0s2GAzuoiYxPRiC4gb0ZtQOkiKPE5yTq4RnLdBepbPYuqsEXFOKbd85jAJazJpzCYLbjitq/r6+kIvv4ftAM6toy7UfvRtccVTF4UuRRgtXXBBVNOM3V5LHZxKNc1oCuXD+6B45LzgvGjRotGjRxfzNaeOwGeeeUYfxWw5QC0PGTJEHzdtOUDHqocLzsOGDVu+fHnEYk6ePPnQQw/Vi7Bxyn3BOU8vvvhi1s/iZ+nXr191dbUtuLTIC86/+c1vbCGDutaqiL78nqZGlHD77LPPT3/606yoU8RqP58yZYotNzI7w7PPPvvBBx+YmkyluuCsGdMs7bDDDrbcXGahnN8NqWbQoEHdunWz5RRVagGdF5w1SAeLOJtybguNzAVn/4jeeBC9aURvWsuLXie1oxVVwr9cVOjf/ClJ9Jpsu//++yP+mmSe1JS2RXApTBfTp0/fY489TI1hxg+LXi3dRRddpH3GVuVC9MaCC84AAHhF9AIA4BXRi4oXcakZABKI6EXMzBda0aLDNZ8WilHu9tO8dVRaFTrbyRG2e/OesgUjehOqberRiCKPvUo5dHXujnhIQ0MbYn2uV6LTRUPNCOZFGDNyGDNCxHooOa3SsO6Cc5tagtBF0CBnU8561UhEa0FmZOckYUsR1rXqNYnYqkbBGtHIph39a6uKoC7CZjWi/eAk5kk2nR+CgyLa0aAkPMcPgzuc45HzDufa2toNGzboGIs4lnLacccddXzaQoA2fRLucF6/fn3ETbmaSbMUEevBw59P6Nmz5z333OM8b4q61jiXXnqp80/FpU2cODHilzvVwk477eRczPLd4XzUUUfV19fbciOzmOb8nknzNmrUKG1xW86wZMmSyy67LGsSsyxqLasL1Xfq1Onaa6895ZRTbFUumiRi+/bp0yfYheiFcyl+9atfFXSHsxZBUwW70L8F3eFs9hNbaEr1vXv3Dq5Aefzxx4PHoOqfe+65G2+8MWsSzeoFF1wwYsQI5x3OOo6Cm5s7nGNB9MYjZ/T6MXjw4Nijt3iV8peLnn/++c6dO9tCIUoevVoi/auzts7UWetNg2pqau644w5teluVB00VbEfUxbJly7IGqagVdeutt86cOdNW5WHAgAG/+93vMj+3pbvQv1ldaLnq6ur0RsH5Q5LB8UWT6HC48sorM58Q02iiQcrFrEnUiP4tKHrVziOPPKJ3YM79ZPHixRrBFlJMUQsSrDczZssZVDl58uRJkyZl7gZbV1NqRb3yyivBD75Ebyzc7+LRGjgPXbQGqfP21k9gwX3A1GiQKebJ2Y4zFGVrDrjqIzjHN12YF6YmTfVmkJOza2el+jWx5xxaqIhZSneUySyFsz5sftSOfZVBI2sSvXAORSyIXgAAvCJ6AQDwiugFAMArohfA/5hvVcO+SiyImnJ+ueiszKmgqZrXRbmFzZXqnYPCtoIZ2Tk0rCmJGAT/iF5UvJLkBAyzMtu3b1/8aTrsXK8uJPp28SyFzkxYF21TjwmFPatmhtpCGZh7ncLU1dXZVxk0q8GlEC2dtlH+d2CZ5cr/wTOUW2H3GaJU8nm4yBwtzd5AZsKIU4lGSMJzvUXSTI4ZMybeh4s0gk55xxxzTE1Nja1ySc7DRdFqa2sXLly4dOlSWy6C1sw111yjf225kbqYM2eO5taW89C9e/ddd93VFnJRj0qyp59+esWKFbYqxczJgQceeNBBB2XtMBp0xBFHnHDCCc7fnQj7s0KFPte7ZMkSrdtgyqq1UaNGBXcw1c+ePXvTpk22nKJKNbX33nsfeeSRwd3+pZdeWrRoUfD5XU115ZVXBp/35eGiWBC98cgZvdouOg51tAQPofyZjatGTDGLhraA6BVFr05PEXtyuaNXHz4UvT/+8Y+jn+vVObciojeZFNU33HCD86Nh/rQptZ+E/dHACCWJ3uY544wzVq1aZQsZBg4cGPyjgc1A9MaC6I1Hzug1f69Xn6KavYH05l3v+sN+IEn8RG9Y76ViTqbmddi68vCpt6zHEdErJYleg+jNRPTGgu96E00n9GbL+RB9xKASsnNTNubLLcN26V2MXQOoRERv60VgAEAsiN7Wy8+nXgBAFqK39eJTb2tgtnLwKZQEMl+ZF7RbahItWth38LFIL4XYqjxo5OANlaYF57ZTpfDuuXIRvUBLZs7Oxdwn742SRnMbFidhgzSVua0hFsFZMkthotFWZXBWiiYJPvajSrUmttzI1GupY1xwFKm8d2YiTJ53OG/evLnZG0gfBZ555pmdd97ZlgPUsoc7nJPAzx8NLJ9i7nDWzL///vuXXHKJLSfehRdeeO6559pCBi1XdXW1LTR1wgkn2Ff5KckdzkbXrl2de8XgwYMvv/xyW8gwffr0Bx98MPgQmjbT3LlzbaGpL7/80hmx2iua96xaFu5wjgWfeoEWTh95N1aOsGejlTTbhrBjxOGrr76y891U2I+raOnsGAF2jIBu3brZ5WyqJLmLuBC9Sae3w0HmcpZ5bceLgz43m3lIODu7Zaa1UTxvcwsgRkRvQqWT1Z6SXTSOHTs+dlYSTDPpIc/UkdlezaZGzAY18wygBeO73njk/K5X5+KGhoa6urrgzRfG6tWrhw8fvnHjxrAtWO7vejW0vr4+CfEfTatRs7rNNttE/MxTkd/1ak2ql379+kX/kGROCxcu7Natm9aqerRVKUV+17t8+fLzzjvPlhPvsssuu+CCC2whP2FfxIYp4Xe9YYYOHTpq1ChbyDB16tSJEyc6v+tdsmSJLfjFd72x4FNvQulsrqMxLHcNjRDjOyd1nfzcFXP9oKw/r6j2S3IHlkLXvFGw5TJTR976Cip3787209cVynrgmK7FljM4Kw3nn20Io/nXruJcirBFU31F3OjeShC9QGtkskFs2SPbcZm7VsqaoM2kGtNvob0Hm4qQWjh3+85BzsoIGjm9IEHO6E31UNgio6y44ByPnBecc1q9evWFF14Y0UjOC84yePDgIh8uahlK8nBR3759i7zgPG/evO7du9tChnJccN56Jm7TZtddd/V/BlC/6nTTpk1ff/21rcpQqgvO6mW77bbr0KGDLaekFrrNgAEDtOfbqvwMGjTIvspFoajPowMHDrzkkkuC6/bpp5+eMmVKbW2tLadmybz429/+lue2UPv6iKxF0wLaqkZqQWv1yy+/DDalmt122y3dXRoXnGNB9MYjCdGrTV/8c70tQyuMXlFILFmyJJYzgFbULbfc8uyzz9pyhpJEr5Za4XTrrbf279/fVqWoXss7efLkCRMm2KqKFfaXix566KFJkyY5v2F59dVXg/sw0RsLLjgDAOAV0QsAgFdELwAAXhG9cGuTuh3D/NuymYc0opdUQyNG0KCC7oAF0MpxvoCbSaOqqiq9aNm0sArO6FuoUsm79Q4dJ02eec8qDK0Zs9JsOdk0q4W+f3JOsnVHST3nrX9tVS4aU+1EP8SfSSOnOnG3X+hSIBbc4RyPirjDWfr379+yf6XdnMLWrFnz2muv2aoAjaCV0K9fP1sOMXv27CJ/siAJdzhrfLVQXV29adMmW9VcakqNf/e737XlDAm8w1mDtPK7detmy7lo7ampzz//POsvJagd6dKly7aF/F0HHa2ffPKJ87bkILWvrk866aTLL7+8IfBHjZ566qm//OUv3OGccERvPColeuFTQh4u0if4Rx99NOxv2BVEvT/88MO2kCGZ0Xvssceef/75eX76NE3dfPPNK1assFUpqte/J5544rBhw0xNPjRV/uObrnv06LHbbrvZqgxffPGF3hAEN6sQvclB9MaD6EVQQqJXuXjnnXc+/vjjtlwE9e78aeJkRq8OhyuvvDLrVziijRgx4o033rCFDGG/4exk5sr5wyClRfQmB98KAADgFdELAIBXRG/r1SbvOzABACVE9LZefM2PChLxTjH4OI3Zt52ThLWjScIGqT54I3FYF6oxlc5B5T7ogp0aW+fJtRSIC9ELIOmUWGGhpUQJRq8q7aumgjcZpTknMZXqOjhUlc4kS8+nc4bDZqyEtDYilgUJwR3O8eAOZwRxh7M473A2s/rwww9npZ3a1/y/+uqrWUuhnV81++677/bbb2+rMhxyyCGHH364LaSoHU2ikffaa6/MIFcjokGaK1vVyHQ9YMCAnXbayValqF60zhcvXmyrMhx//PGnnnpq1vNLpqmS3OGspjRLJ598cvBNhgb16dPHFjJwh3MsiN54EL0IInol7OGiOXPm3HDDDXV1dbZcBLUfjNJozueX9O/9998fTHGt0mnTpt122222qpEGnXvuuSNHjgz+FeESRq+W7qKLLsrz6WQhemNB9MYjZ/T+5z//WbBgQcSJRhuupqYmYvPpxDps2LCuXbvasssjjzyyceNGW2jKnA5mzJgRNkKp6EPAjjvuaAsuM2fO/Pzzz22hPPbcc88TTjih3MeC1rbzN4bSiF4heouhpojeikD0xiNn9C5atGj06NGbN28O20BKiwcffLBHjx62XGrmdHDGGWesWrXKVpXHlClTDjzwQFtw0ank7bfftoXyOO6448aPH1/uY6Ffv37V1dW24EL0CtFbDDVF9FYEbrMCAMAroreCmffdAPIXdtTEeDTpI69wOLcqRG8F0+FqXwGtkuJKgnfzhjF3L5upTE2mGPNPM+ZcCme9mX/VO+dWkzjrkShEbwXjAEMrZ8KyS5cunfPTqVMnjaxJvv766+qmVFNbWxvj29muXbvauWwqeJibmWzfvn1wwVVTVVVlRkOSEb0VjE+9aM2USdLQ0DB//vzn87Zw4UIFcD+XP/7xj1u2bLGte6Sl0LE8d+5cO4uNXnjhBc1tz5497XiNzGf3E088ccGCBXbURhp/xIgRpG/yEb0VTEesfQW0PoorMbllq/IQNnKMR1PYLG1dPNcgvduImMS+QrIRvRWMwwwAKhHRi5jxBgJAa1PYtRqUSov5SY3LLrss6zdsC9W3b99tt93WfH0VpNnQqli/fn3E9cDp06dH/+ZG//79jzvuOFtoSsuoljdu3PjBBx+U+1j4xz/+Ef2LEPykhhT6kxphXThpZC3v5MmTJ0yYYKsaadCQIUOuvPLKrN+7MMr6kxrRwo7BgQMHjh071haKwE9qxILojUcLiN527do1NDQ89thj3/ve92xVs9TX16spxYDz78BoNjRIcaJxwlbFmDFjZs+eHbEnjxgx4te//rUtNKWp5IUXXhg1apRzBnxKQvRqfO11it4nnnjCVjWXmpKwdC9J9IZ1oUr9G+xX9ap0Rq+cfvrpwejV+Nr3evfurR3VVqWYLnQMZm0a1WtH0huX22+/PThX55xzjhYwGL0aU5xvQM8888wPP/zQFlJM16eeeuqNN96Y1YUpmhEymblydkH0xoILzmgmHcnBI7wZdC7QGSHrvJamQTrbmnFslUvEnGiQpg2bXEN1YtWL6PZbFa2Kqqqqkmxcs/JtoTzUhfM9U9geFUbtaDfLWuqt+01KoW/LzE4VFFHvzL+wfjWfWsDgUNU7t50WIawLxIJPvfFoMRecp02bVuSn3uJdf/31s2bNitiThw8fPnLkSFtwWbBgwVVXXWUL8UnIBWe911E777//fpEnBxMAQ4cONcVMpb3gfPbZZ2eFjSmedtpp++67r6kxVK+FCrvgvM8++xxxxBHOdNx9992Da0OTfPbZZ87nkT744INly5ZlTaLxv//97+tTprOLq6++2hm0zz333KZNm2yhkZrSGaBPnz56YasaLV68+MUXX3S+83Du5HzqjQXRGw+it4SI3rSSRK8HJYxeJy21Pvzdeuut/fv3t1UpZq8Ou+AcRlNpRdlCUyNGjHjjjTdsoQgRXRTqoYcemjRpUtZuYLz66qvB1Cd6Y8EF5wqmw9W+AgBUDqK3gsXyeQUAUCSit4LxqRcAKhHRW8H41IsK1WLeNYYtSDMWsNBJwg7/iHZazGpvAYjeClbWA8kc2NGHcVlnAGXVNuQ3TLyp9J1HB0jYIaB1K8FBqnGu9lQz7j99qF7MkZhJjZh6sVWNVKOmbCGDKjWVswvEgjuc41GSO5z//Oc/b7vttrZcavX19VVVVStWrKipqbFVTekwbmhomDJlyrp162yVy9ixY3fffXdbKI/Vq1dv2rQp4snLXXbZZbfddot40LMV3uFsTtCluqu2INqla2trx40bN3PmTFuVoYLucFb9iBEjXn/9dVtOMStW/zofutW/wSPa1C9evNi8SNOYqpGsSVQ06WvLTWnp7rvvvuBuoH9ffvllrRZTk8YdzrEgeuOR/IeLRIerTh/O9+liZmzo0KErV640NU5Tp07df//9baE8zLnJnFyczNCIXb11PlyUTJX1cFGQ6YIfkkQ0Ljgjik4W9pVLRJj5pPcH5nxnywHRQwHAM6IXoUxc6V8nDUpIpKVnIzVfbmZMAEgCohcAAK+IXgAAvCJ6gRauTYotJJhmsq3rmRxpxvw7v2Uw3z4U1JoZOexmwyDTbzNm2EntBJsylWHrChWB6K1gHHjIqYJ2EpOLthCQf/jJ1mhyLbgqTTvOoWEKCrmtHaduPghOYuptIQ+mkeDDuKaRrd1UzsZFFu78jEdFPFyUj7PPPlvLYgsuHh4uKl4LfrhI1q5dO3nyZFtIvH79+v3oRz+yhUY6CpYvXz5z5syIp7czmVgaPHjwfvvtZ6tS1I5y9OWXX164cKGtys+1116b56nSdLFs2bI5c+bYqkaapSOPPLJ///7Bh2vDaJJJkyatX7/ellNUqV4OPfTQU045xVYVgYeLYkH0xiPP6K2urrblgL322uuBBx7Ybrvt4tqC6lenAKK3VLQyFb1du3bVC1vVqMjoBSIQvbEgeuORM3pXrFgxbdq0urq6sLf5O+6448UXX6wzdcSPNJVbu3bt7rzzzs8++8yWXUaOHPmd73zHFhJJUffOO+/89a9/teX4jBkzpkuXLsENSvSifIjeWBC98cgZvcoD0WnUeW0qvdU0Toxb0PzWlebBll2Sv4Ol59B8Cxgjs8WD3+0RvSgfojcW3GaVUMoDBZvOwnoRpBG2JnOsuauuNQPmRQQzcpIpcc0bCDvHMdGcmLcyZq4AtGAc55Uqfb6OSyr6W8INlrGvScPMQ8tYpQCiEb0AAHhF9AIA4BXRCwCAV0QvAABeEb0AAHhF9AIA4BU/qQG0HO+88w4/qYGCHHTQQfykhn9ELwAAXnHBGQAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwCuiFwAAr4heAAC8InoBAPCK6AUAwKP/+7//BzcYMJF2cBkIAAAAAElFTkSuQmCC\"\n}"
  },
  {
    "path": "react-native-hms-scan/example/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from \"react-native\";\nimport App from \"./App\";\nimport {name as appName} from \"./app.json\";\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-scan/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: true,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-scan/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-scan-demo\",\n  \"version\": \"2.12.0-301\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"start\": \"react-native start\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"dependencies\": {\n    \"@react-native-picker/picker\": \"2.5.0\",\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"react-native-document-picker\": \"4.3.0\",\n    \"@hmscore/react-native-hms-scan\": \"2.12.0-301\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.9\",\n    \"@babel/runtime\": \"^7.12.5\",\n    \"@babel/traverse\": \"7.22.8\",\n    \"metro-react-native-babel-preset\": \"^0.64.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  },\n  \"files\": [\n    \"./android\",\n    \"./app.json\",\n    \"./App.js\",\n    \"./index.js\",\n    \"./LICENSE\",\n    \"./metro.config.js\",\n    \"./package.json\",\n    \"./README.md\"\n  ]\n}\n"
  },
  {
    "path": "react-native-hms-scan/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-scan\",\n  \"title\": \"React Native HMS Scan Kit\",\n  \"description\": \"React Native HMS Scan Kit\",\n  \"version\": \"2.12.0-301\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-scan\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENSE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-scan\",\n    \"huawei-scan\",\n    \"hms-scan\",\n    \"scan\"\n  ],\n  \"files\": [\n    \"android\",\n    \"example\",\n    \"src\",\n    \"LICENSE\",\n    \"package.json\",\n    \"README.md\",\n    \"OpenSourceSoftwareNotice.html\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\",\n    \"eslint\": \"^7.2.0\",\n    \"@react-native-community/eslint-config\": \"^2.0.0\",\n    \"typescript\": \"^3.9.5\"\n  },\n  \"types\": \"src/index.d.ts\"\n}\n"
  },
  {
    "path": "react-native-hms-scan/src/ScanCustomizedView.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {NativeModules, NativeEventEmitter} from \"react-native\";\nimport {addListenerToModule} from \"./utils\";\n\nconst {RNHMSScanCustomizedViewModule} = NativeModules;\n\nconst events = [\n    \"onResponse\",\n    \"onStart\",\n    \"onResume\",\n    \"onPause\",\n    \"onDestroy\",\n    \"onStop\",\n    \"onOriginalScanLoad\"\n  ];\n\nconst eventEmitter = new NativeEventEmitter(RNHMSScanCustomizedViewModule);\n\naddListenerToModule(RNHMSScanCustomizedViewModule, eventEmitter, events);\n\nexport default RNHMSScanCustomizedViewModule;\n"
  },
  {
    "path": "react-native-hms-scan/src/ScanMultiProcessor.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {NativeModules, NativeEventEmitter} from \"react-native\";\nimport {addListenerToModule} from \"./utils\";\n\nconst {RNHMSScanMultiProcessorModule} = NativeModules;\n\nconst events = [\n    \"onMultiProcessorResponse\",\n  ];\n\nconst eventEmitter = new NativeEventEmitter(RNHMSScanMultiProcessorModule);\n\naddListenerToModule(RNHMSScanMultiProcessorModule, eventEmitter, events);\n\nexport default RNHMSScanMultiProcessorModule;\n"
  },
  {
    "path": "react-native-hms-scan/src/ScanUtils.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {NativeModules} from \"react-native\";\n\nconst {RNHMSScanUtilsModule} = NativeModules;\n\nexport default RNHMSScanUtilsModule;\n"
  },
  {
    "path": "react-native-hms-scan/src/index.d.ts",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\ndeclare module \"@hmscore/react-native-hms-scan\" {\n  /**\n   *  Address Style\n   *  Residential: 0\n   *  Other: -1\n   *  Office: 1\n   */\n  export enum AddressType {\n    /**\n     *  Family address.\n     */\n    Residential = 0,\n\n    /**\n     *  Unknown type.\n     */\n    Other = -1,\n\n    /**\n     *  Work address.\n     */\n    Office = 1,\n  }\n  \n  export type AddressTypeType = 0 | -1 | 1;\n\n  /**\n   *  Object that contains address details..\n   */\n  export interface AddressInfo {\n    /**\n     *  Address information array.\n     */\n    addressDetails?: String[];\n\n    /**\n     *  Address type.\n     */\n    addressType?: AddressTypeType;\n  }\n\n  /**\n   *  Object that contains corner point coordinates.\n   */\n  export interface CornerPoint {\n    /**\n     *  X coordinate.\n     */\n    x?: number;\n\n    /**\n     *  Y coordinate.\n     */\n    y?: number;\n  }\n\n  /**\n   *  Object that contains driver details.\n   */\n  export interface DriverInfo {\n    /**\n     *  Street.\n     */\n    avenue?: String;\n\n    /**\n     *  Driver license number.\n     */\n    certificateNumber?: String;\n\n    /**\n     *  Driver license type.\n     */\n    certificateType?: String;\n\n    /**\n     *  City.\n     */\n    city?: String;\n\n    /**\n     *  Country where the driver license is issued.\n     */\n    countryOfIssue?: String;\n\n    /**\n     *  Birth date.\n     */\n    dateOfBirth?: String;\n\n    /**\n     *  Expiration date of the driver license.\n     */\n    dateOfExpire?: String;\n\n    /**\n     *  Issue date of the driver license.\n     */\n    dateOfIssue?: String;\n\n    /**\n     *  Last name.\n     */\n    familyName?: String;\n\n    /**\n     *  First name.\n     */\n    givenName?: String;\n\n    /**\n     *  Middle name.\n     */\n    middleName?: String;\n\n    /**\n     *  Province or state in the address.\n     */\n    province?: String;\n\n    /**\n     *  Gender.\n     */\n    sex?: String;\n\n    /**\n     *  ZIP code.\n     */\n    zipCode?: String;\n  }\n\n  /**\n   *  Email Address Types\n   */\n  export enum EmailAddressType {\n    /**\n     *  Work email address.\n     */\n    Office = 1,\n\n    /**\n     *  Family email address.\n     */\n    Residential = 0,\n\n    /**\n     *  Unknown email address.\n     */\n    Other = -1,\n  }\n  \n  /**\n   *  Email Address Types\n   *  Residential: 0\n   *  Other: -1\n   *  Office: 1\n   */\n  export type EmailAddressTypeType = 0 | -1 | 1;\n\n  /**\n   *  Object that contains email details.\n   */\n  export interface EmailContent {\n    /**\n     *  Email address.\n     */\n    addressInfo?: String;\n\n    /**\n     *  Email address type.\n     */\n    addressType?: EmailAddressTypeType;\n\n    /**\n     *  Email content.\n     */\n    bodyInfo?: String;\n\n    /**\n     *  Subject of an email.\n     */\n    subjectInfo?: String;\n  }\n\n  /**\n   *  Object that contains event time details.\n   */\n  export interface EventTime {\n    /**\n     *  Day.\n     */\n    day?: number;\n\n    /**\n     *  Hours.\n     */\n    hours?: number;\n\n    /**\n     *  Determines whether the time is in UTC format.\n     */\n    isUTCTime?: boolean;\n\n    /**\n     *  Minutes.\n     */\n    minutes?: number;\n\n    /**\n     *  Month.\n     */\n    month?: number;\n\n    /**\n     *  Barcode value.\n     */\n    originalValue?: String;\n\n    /**\n     *  Seconds.\n     */\n    seconds?: number;\n\n    /**\n     *  Year.\n     */\n    year?: number;\n  }\n\n  /**\n   *  Object that contains url details.\n   */\n  export interface LinkUrl {\n    /**\n     *  URL.\n     */\n    linkvalue?: String;\n\n    /**\n     *  Title.\n     */\n    theme?: String;\n  }\n\n  /**\n   *  Object that contains location coordinates.\n   */\n  export interface LocationCoordinate {\n    /**\n     *  Latitude.\n     */\n    latitude?: number;\n\n    /**\n     *  Longitude.\n     */\n    longitude?: number;\n  }\n\n  /**\n   *  Object that contains person details.\n   */\n  export interface PeopleName {\n    /**\n     *  Last name.\n     */\n    familyName?: String;\n\n    /**\n     *  Full name of a contact.\n     */\n    fullName?: String;\n\n    /**\n     *  First name.\n     */\n    givenName?: String;\n\n    /**\n     *  Middle name.\n     */\n    middleName?: String;\n\n    /**\n     *  Prefix of a contact name.\n     */\n    namePrefix?: String;\n\n    /**\n     *  Suffix of a contact name.\n     */\n    nameSuffix?: String;\n\n    /**\n     *  Contact name spelling.\n     */\n    spelling?: String;\n  }\n\n  /**\n   *  Object that contains sms details.\n   */\n  export interface SmsContent {\n    /**\n     *  SMS information.\n     */\n    msgContent?: String;\n\n    /**\n     *  Phone number.\n     */\n    destPhoneNumber?: String;\n  }\n\n  /**\n   *  Phone number types\n   */\n  export enum PhoneNumberType {\n    /**\n     *  Fax number.\n     */\n    Fax = 0,\n\n    /**\n     *  Home phone number.\n     */\n    Residential = 1,\n\n    /**\n     *  Mobile number.\n     */\n    Cellphone = 2,\n\n    /**\n     *  Unknown phone number.\n     */\n    Other = -1,\n\n    /**\n     *  Work phone number.\n     */\n    Office = 3,\n  }\n\n\n  /**\n   *  Phone Number Types\n   *  Fax: 0\n   *  Residential: 1\n   *  Cellphone: 2\n   *  Other: -1\n   *  Office: 3\n   */\n  export type PhoneNumberTypeType = 0 | -1 | 1 | 2 | 3;\n\n  /**\n   *  Object that contains phone number details.\n   */\n  export interface TelPhoneNumber {\n    /**\n     *  Phone number.\n     */\n    telPhoneNumber?: String;\n\n    /**\n     *  Phone number type.\n     */\n    useType?: PhoneNumberTypeType;\n  }\n\n  /**\n   *  Wifi Modes\n   */\n  export enum WifiModeType {\n    /**\n     *  Open Wi-Fi.\n     */\n    NoPass = 0,\n\n    /**\n     *  Wi-Fi in WEP mode.\n     */\n    WEP = 1,\n\n    /**\n     *  Wi-Fi in WPA mode.\n     */\n    WPA = 2,\n  }\n\n  /**\n   *  Wifi Modes\n   *  NoPass: 0\n   *  WEP: 1\n   *  WPA: 2\n   */\n  export type WifiModeTypeType = 0 |  1 | 2 ;\n\n  /**\n   *  Object that contains wifi connection details.\n   */\n  export interface WiFiConnectionInfo {\n    /**\n     *  Wi-Fi password.\n     */\n    password?: String;\n\n    /**\n     *  SSID.\n     */\n    ssidNumber?: String;\n\n    /**\n     *  Wi-Fi encryption mode.\n     */\n    cipherMode?: WifiModeTypeType;\n  }\n\n  /**\n   *  Object that contains contact details.\n   */\n  export interface ContactDetail {\n    /**\n     *  Address information.\n     */\n    addressesInfos?: AddressInfo[];\n\n    /**\n     *  Company information.\n     */\n    company?: String;\n\n    /**\n     *  URL information.\n     */\n    contactLinks?: String[];\n\n    /**\n     *  Email content.\n     */\n    eMailContents?: EmailContent[];\n\n    /**\n     *  Note.\n     */\n    note?: String;\n\n    /**\n     *  Contact information.\n     */\n    peopleName?: PeopleName;\n\n    /**\n     *  Phone number list.\n     */\n    telPhoneNumbers?: TelPhoneNumber[];\n\n    /**\n     *  Title.\n     */\n    title?: string;\n  }\n\n  /**\n   *  Object that contains event details.\n   */\n  export interface EventInfo {\n    /**\n     *  Calendar event description.\n     */\n    abstractInfo?: String;\n\n    /**\n     *  Start date of a calendar event.\n     */\n    beginTime?: EventTime;\n\n    /**\n     *  End date of a calendar event.\n     */\n    closeTime?: EventTime;\n\n    /**\n     *  Calendar event status information.\n     */\n    condition?: String;\n\n    /**\n     *  Calendar event location information.\n     */\n    placeInfo?: String;\n\n    /**\n     *  Calendar event organizer information.\n     */\n    sponsor?: String;\n\n    /**\n     *  Calendar event summary.\n     */\n    theme?: String;\n  }\n\n  /**\n   *  Object that contains barcode rectangle details.\n   */\n  export interface BorderRect {\n    /**\n     *  Left x coordinate.\n     */\n    left?: number;\n\n    /**\n     *  Top y coordinate.\n     */\n    top?: number;\n\n    /**\n     *  Right x coordinate.\n     */\n    right?: number;\n\n    /**\n     *  Bottom y coordinate.\n     */\n    bottom?: number;\n\n    /**\n     *  Exact value of x coordinate center.\n     */\n    exactCenterX?: number;\n\n    /**\n     *  Exact value of y coordinate center.\n     */\n    exactCenterY?: number;\n\n    /**\n     *  Rounded value of x coordinate center.\n     */\n    centerX?: number;\n\n    /**\n     *  Rounded value of y coordinate center.\n     */\n    centerY?: number;\n\n    /**\n     *  List of corner points.\n     */\n    cornerPoints?: CornerPoint[];\n  }\n\n  /**\n   *  Text options for MultiCameraRequest object.\n   */\n  export interface ScanTextOptions {\n    /**\n     *  Text color. Default value: -16777216(black)\n     */\n    textColor?: number;\n\n    /**\n     *  Text size. Default value: 35\n     */\n    textSize?: number;\n\n    /**\n     *  Indicates whether the text is visible. Default value:  true\n     */\n    showText?: boolean;\n\n    /**\n     *  Indicates whether to limit the text in rectangle bounds.\n     *  Default value:  false\n     */\n    showTextOutBounds?: boolean;\n\n    /**\n     *  Text background color. Default value:  0(transparent)\n     */\n    textBackgroundColor?: number;\n\n    /**\n     *  Indicates whether the text auto size itself. Default value:  false\n     */\n    autoSizeText?: boolean;\n\n    /**\n     *  Minimum text size. Default value:  24\n     */\n    minTextSize?: number;\n\n    /**\n     *  Granularity. Default value:  2\n     */\n    granularity?: number;\n  }\n\n  /**\n   *  Scan Types\n   */\n  export enum ScanType {\n    /**\n     *  Unknown barcode format.\n     */\n    Other = -1,\n\n    /**\n     *  All supported barcode formats.\n     */\n    All = 0,\n\n    /**\n     *  Code 128.\n     */\n    Code128 = 64,\n\n    /**\n     *  Code 39.\n     */\n    Code39 = 16,\n\n    /**\n     *  Code 93.\n     */\n    Code93 = 32,\n\n    /**\n     *  Codabar.\n     */\n    Codabar = 4096,\n\n    /**\n     *  Data Matrix.\n     */\n    DataMatrix = 4,\n\n    /**\n     *  EAN-13.\n     */\n    EAN13 = 128,\n\n    /**\n     *  EAN-8.\n     */\n    EAN8 = 256,\n\n    /**\n     *  ITF-14.\n     */\n    ITF14 = 512,\n\n    /**\n     *  QR code.\n     */\n    QRCode = 1,\n\n    /**\n     *  UPC-A.\n     */\n    UPCCodeA = 1024,\n\n    /**\n     *  UPC-E.\n     */\n    UPCCodeE = 2048,\n\n    /**\n     *  PDF-417.\n     */\n    Pdf417 = 8,\n\n    /**\n     *  Aztec.\n     */\n    Aztec = 2,\n\n     /**\n     *  Multi Functional.\n     */\n     MultiFunctional = 8192,\n  }\n\n  /**\n   *  Options for scan types\n   *  Other: -1\n   *  All: 0\n   *  Code128: 64\n   *  Code39: 16\n   *  Code93: 32\n   *  Codabar: 4096\n   *  DataMatrix: 4\n   *  EAN13: 128\n   *  EAN8: 256\n   *  ITF14: 512\n   *  QRCode: 1\n   *  UPCCodeA: 1024\n   *  UPCCodeE: 2048\n   *  Pdf417: 8\n   *  Aztec: 2\n   *  MultiFunctional: 8192\n   */\n  export type ScanTypeType =\n    | -1\n    | 0\n    | 64\n    | 16\n    | 32\n    | 4096\n    | 4\n    | 128\n    | 256\n    | 512\n    | 1\n    | 1024\n    | 2048\n    | 8\n    | 2\n    | 8192;\n\n  /**\n   *  Scan Modes\n   */\n  export enum ScanMode {\n    /**\n     *  Multi processor Sync Mode..\n     */\n    Sync = 444,\n\n    /**\n     *  Multi processor Async Mode..\n     */\n    Async = 555,\n  }\n\n  /**\n   *  Scan Modes\n   *  Sync: 444\n   *  Async: 555\n   */\n  export type ScanModeType = 444 | 555;\n\n  /**\n   *  Scan Forms\n   */\n  export enum ScanForm {\n    /**\n     *  Unknown barcode content.\n     */\n    Other = -1,\n\n    /**\n     *  Contact information.\n     */\n    ContactDetail = 1009,\n\n    /**\n     *  Email information.\n     */\n    EmailContent = 1002,\n\n    /**\n     *  ISBN.\n     */\n    ISBNNumber = 1012,\n\n    /**\n     *  Phone number.\n     */\n    TelPhoneNumber = 1003,\n\n    /**\n     *  Product information.\n     */\n    ArticleNumber = 1001,\n\n    /**\n     *  SMS content.\n     */\n    SMS = 1005,\n\n    /**\n     *  Text.\n     */\n    PureText = 1004,\n\n    /**\n     *  URL.\n     */\n    Url = 1006,\n\n    /**\n     *  Wi-Fi.\n     */\n    WIFIConnectInfo = 1007,\n\n    /**\n     *  Location.\n     */\n    LocationCoordinate = 1011,\n\n    /**\n     *  Calendar event.\n     */\n    EventInfo = 1008,\n\n    /**\n     *  Driver license information.\n     */\n    DriverInfo = 1010,\n  }\n\n  \n  /**\n   *  Scan Forms\n   *  Other: -1\n   *  ContactDetail: 1009\n   *  EmailContent: 1002\n   *  ISBNNumber: 1012\n   *  TelPhoneNumber: 1003\n   *  ArticleNumber: 1001\n   *  SMS: 1005\n   *  PureText: 1004\n   *  Url: 1006\n   *  WIFIConnectInfo: 1007\n   *  LocationCoordinate: 1011\n   *  EventInfo: 1008\n   *  DriverInfo: 1010\n   */\n  export type ScanFormType =\n    | -1\n    | 1009\n    | 1002\n    | 1012\n    | 1003\n    | 1001\n    | 1005\n    | 1004\n    | 1006\n    | 1007\n    | 1011\n    | 1008\n    | 1010;\n\n  /**\n   *  Information returned when the startDefaultView, startCustomizedView,\n   *  decodeWithBitmap, decodeMultiSync, decodeMultiAsync and\n   *  startMultiProcessorCamera APIs are succesfully called.\n   */\n  export interface ScanResponse {\n    /**\n     *  HMS Scan Version.\n     */\n    hmsScanVersion?: number;\n\n    /**\n     *  Barcode corner point information.\n     */\n    cornerPoints?: CornerPoint[];\n\n    /**\n     *  Byte array.\n     */\n    originValueByte?: number[];\n\n    /**\n     *  Barcode information.\n     */\n    originalValue?: String;\n\n    /**\n     *  Barcode format.\n     */\n    scanType?: ScanTypeType;\n\n    /**\n     *  Barcode content type.\n     */\n    scanTypeForm?: ScanFormType;\n\n    /**\n     *  Barcode value.\n     */\n    showResult?: String;\n\n    /**\n     *  Barcode zoom ratio.\n     */\n    zoomValue?: number;\n\n    /**\n     *  SMS information.\n     */\n    smsContent?: SmsContent;\n\n    /**\n     *  Email content.\n     */\n    emailContent?: EmailContent;\n\n    /**\n     *  Phone number.\n     */\n    telPhoneNumber?: TelPhoneNumber;\n\n    /**\n     *  URL bookmark.\n     */\n    linkUrl?: LinkUrl;\n\n    /**\n     *  Wi-Fi connection info.\n     */\n    wifiConnectionInfo?: WiFiConnectionInfo;\n\n    /**\n     *  Location information.\n     */\n    locationCoordinate?: LocationCoordinate;\n\n    /**\n     *  Driver license information.\n     */\n    driverInfo?: DriverInfo;\n\n    /**\n     *  Contact information.\n     */\n    contactDetail?: ContactDetail;\n\n    /**\n     *  Calendar event.\n     */\n    eventInfo?: EventInfo;\n\n    /**\n     *  Barcode rectangle information\n     */\n    borderRect?: BorderRect;\n  }\n\n  /**\n   *  Request information of the startCustomizedView API.\n   */\n  export interface CustomizedViewRequest {\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n\n    /**\n     *  Height of scan area. Default value: 240\n     */\n    rectHeight?: number;\n\n    /**\n     *  Width of scan area. Default value: 240\n     */\n    rectWidth?: number;\n\n    /**\n     *  Availability of the flash button under dim light.\n     */\n    flashOnLightChange?: boolean;\n\n    /**\n     *  Availability of the flash button. Default value: true\n     */\n    isFlashAvailable?: boolean;\n\n    /**\n     *  Availability of gallery button. Default value: true\n     */\n    isGalleryAvailable?: boolean;\n\n    /**\n     *  Start customized view in continuous scan mode. Default value: true\n     */\n    continuouslyScan?: boolean;\n\n    /**\n     * \n     */\n    enableReturnOriginalScan?: boolean;\n  }\n\n  /**\n   *  Request information of the buildBitmap API.\n   */\n  export interface BuildBitmapRequest {\n    /**\n     *  Barcode content.\n     */\n    content: String;\n\n    /**\n     *  Barcode type. Default value: ScanType.QrCode\n     */\n    type?: ScanTypeType;\n\n    /**\n     *  Barcode width. Default value: 700\n     */\n    width?: number;\n\n    /**\n     *  Barcode height. Default value: 700\n     */\n    height?: number;\n\n    /**\n     *  Barcode color. Default value: -16777216(black)\n     */\n    bitmapColor?: number;\n\n    /**\n     *  Barcode margin. Default value: 1\n     */\n    margin?: number;\n\n    /**\n     *  Barcode background color. Default value: -1(white)\n     */\n    backgroundColor?: number;\n\n     /**\n     *  QR Code Error Correction Level.\n     */\n    qrErrorCorrectionLevel?: number;\n\n    /**\n     *  Barcode QR Logo Bitmap.\n     */\n    qrLogoBitmap?: String;\n\n  }\n\n  /**\n   *  Request information of the decodeMultiSync\n   *  and decodeMultiAsync APIs.\n   */\n  export interface DecodeRequest {\n    /**\n     *  The base64 string of the image.\n     */\n    data: String;\n\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n  }\n\n  /**\n   * Request information of the decodeWithBitmap \n   */\n  export interface DecodeWithBitmapRequest {\n    /**\n     *  The base64 string of the image.\n     */\n    data: String;\n\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n\n     /**\n     *  Photo or Camera mode. Default value : false (camera mode)\n     */\n     photoMode: Boolean;\n  }\n\n  export interface ScanFrameRequest {\n    /**\n     *  The base64 string of the image.\n     */\n    data: String;\n\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n\n    /**\n     *  Photo or Camera mode. Default value : false (camera mode)\n     */\n    photoMode: Boolean;\n\n    /**\n     *  Multiple barcode scan.\n     */\n    multiMode?: Boolean;\n\n    /**\n     *  Sets whether to enable barcode parsing.\n     */\n    parseResult?: Boolean;\n  }\n\n  /**\n   *  Request information of the startDefaultView API.\n   */\n  export interface DefaultViewRequest {\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n\n    /**\n     *  Sets the scanning UI title.\n     *  0 (default): Scan QR code/barcode\n     *  1: Scan QR code\n     */\n    viewType: 0 | 1;\n\n    /**\n     *  Sets the error listener.\n     *  false (default): Disable the error listener.\n     *  true: Enable the error listener in the Default View mode. When an error is detected, exit the scanning UI.\n     */\n    errorCheck: true | false;\n  }\n\n  /**\n   *  Request information of the startMultiProcessorCamera API.\n   */\n  export interface MultiCameraRequest {\n    /**\n     *  Scan mode.\n     */\n    scanMode: ScanModeType;\n\n    /**\n     *  Barcode type.\n     */\n    scanType: ScanTypeType;\n\n    /**\n     *  List of additional barcode types.\n     */\n    additionalScanTypes?: ScanTypeType[];\n\n    /**\n     *  Color list. Default value: [-256](yellow)\n     */\n    colorList?: number[];\n\n    /**\n     *  Stroke width of rectangles. Default value: 4.0\n     */\n    strokeWidth?: number;\n\n    /**\n     *  Availability of gallery button. Default value: true\n     */\n    isGalleryAvailable?: boolean;\n\n    /**\n     *  Text options for Multi Processor Camera.\n     */\n    scanTextOptions?: ScanTextOptions;\n  }\n\n  /**\n   *  Provides basic capabilities of HUAWEI Scan Kit.\n   */\n  export class Utils {\n    /**\n     *  Disables HMSLogger capability which is used for sending usage\n     *  analytics of Scan SDK's methods to improve the service quality.\n     */\n    static disableLogger(): void;\n\n    /**\n     *  Enables HMSLogger capability which is used for sending usage\n     *  analytics of Scan SDK's methods to improve the service quality.\n     */\n    static enableLogger(): void;\n\n    /**\n     *  Bitmap decoding API.\n     */\n    static decodeWithBitmap(request: DecodeWithBitmapRequest): Promise<ScanResponse>;\n\n    /**\n     *  Generates 1D or 2D barcodes.\n     */\n    static buildBitmap(request: BuildBitmapRequest): Promise<String>;\n\n    /**\n     *  Starts the barcode scanning UI of Huawei.\n     */\n    static startDefaultView(request: DefaultViewRequest): Promise<ScanResponse>;\n\n    /**\n     *  Decode API.\n     */\n    static decode(request: ScanFrameRequest): Promise<ScanResponse>;\n  }\n\n  /**\n   *  Contains the methods for starting a camera or decoding an image\n   *  in Multi Processor modes.\n   */\n  export class MultiProcessor {\n    /**\n     *  Scans barcodes synchronously in MultiProcessor mode.\n     */\n    static decodeMultiSync(request: DecodeRequest): Promise<ScanResponse[]>;\n\n    /**\n     *  Scans barcodes asynchronously in MultiProcessor mode.\n     */\n    static decodeMultiAsync(request: DecodeRequest): Promise<ScanResponse[]>;\n\n    /**\n     *  Starts multi processor barcode scanning UI of Huawei React Native Scan Plugin.\n     */\n    static startMultiProcessorCamera(request: MultiCameraRequest): Promise<ScanResponse[]>;\n\n    /**\n     *  Adds listener for `onMultiProcessorResponse` event which is triggered\n     *  when camera detect a barcode.\n     */\n    static onMultiProcessorResponseListenerAdd(\n      listenerFn: (response: ScanResponse) => void,\n    ): void;\n\n    /**\n     *  Removes the listener for `onMultiProcessorResponse` event.\n     */\n    static onMultiProcessorResponseListenerRemove(): void;\n\n    /**\n     *  Removes all event listeners.\n     */\n    static allListenersRemove(): void;\n  }\n\n  /**\n   *  Contains the methods for Customized View operations, including\n   *  starting a camera in Customized View mode.\n   */\n  export class CustomizedView {\n    /**\n     *  Controls views of camera preview and barcode scanning in\n     *  Customized View mode.\n     */\n    static startCustomizedView(request: CustomizedViewRequest): Promise<ScanResponse>;\n\n    /**\n     *  Pauses barcode scanning.\n     */\n    static pauseContinuouslyScan(): Promise<boolean>;\n\n    /**\n     *  Resumes barcode scanning.\n     */\n    static resumeContinuouslyScan(): Promise<boolean>;\n\n    /**\n     *  switchLight.\n     */\n    static switchLight(): Promise<boolean>;\n\n    /**\n     *  getLightStatus.\n     */\n    static getLightStatus(): Promise<boolean>;\n\n    /**\n     *  Adds listener for `onResponse` event which is triggered when\n     *  continuous scanning option enabled and the camera detects a barcodee.\n     */\n    static onResponseListenerAdd(listenerFn: (response: ScanResponse) => void): void;\n\n    /**\n     *  Removes the listener for `onResponse` event.\n     */\n    static onResponseListenerRemove(): void;\n\n    /**\n     *  Adds listener for `onStart` event.\n     */\n    static onStartListenerAdd(listenerFn: () => void): void;\n\n    /**\n     *  Removes the listener for `onStart` event.\n     */\n    static onStartListenerRemove(): void;\n\n    /**\n     *  Adds listener for `onResume` event.\n     */\n    static onResumeListenerAdd(listenerFn: () => void): void;\n\n    /**\n     *  Removes the listener for `onResume` event.\n     */\n    static onResumeListenerRemove(): void;\n\n    /**\n     *  Adds listener for `onPause` event.\n     */\n    static onPauseListenerAdd(listenerFn: () => void): void;\n\n    /**\n     *  Removes the listener for `onPause` event.\n     */\n    static onPauseListenerRemove(): void;\n\n    /**\n     *  Adds listener for `onDestroy` event.\n     */\n    static onDestroyListenerAdd(listenerFn: () => void): void;\n\n    /**\n     *  Removes the listener for `onDestroy` event.\n     */\n    static onDestroyListenerRemove(): void;\n\n    /**\n     *  Adds listener for `onStop` event.\n     */\n    static onStopListenerAdd(listenerFn: () => void): void;\n\n    /**\n     *  Removes the listener for `onStop` event.\n     */\n    static onStopListenerRemove(): void;\n\n    /**\n     *  Removes all event listeners.\n     */\n    static allListenersRemove(): void;\n\n    /**\n     * \n     */\n    static onOriginalScanLoadListenerAdd(listenerFn: () => void): void;\n  }\n}\n"
  },
  {
    "path": "react-native-hms-scan/src/index.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport Utils from \"./ScanUtils\";\nimport CustomizedView from \"./ScanCustomizedView\";\nimport MultiProcessor from \"./ScanMultiProcessor\";\n\nexport default {\n  Utils,\n  CustomizedView,\n  MultiProcessor,\n  ScanMode: MultiProcessor.SCAN_MODES,\n  ScanType: Utils.SCAN_TYPES,\n  ScanForm: Utils.SCAN_FORMS,\n  AddressType: Utils.ADDRESS_TYPES,\n  PhoneNumberType: Utils.TEL_PHONE_NUMBER_USE_TYPES,\n  EmailAddressType: Utils.EMAIL_ADDRESS_TYPES,\n  WifiModeType: Utils.WIFI_MODE_TYPES,\n};\n"
  },
  {
    "path": "react-native-hms-scan/src/utils.js",
    "content": "/*\n    Copyright 2020-2023. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nexport const addListenerToModule = function (module, emitter, events) {\n  const subscriptions = new Map();\n\n  events.map((event) => {\n    module[event + \"ListenerAdd\"] = (handler) =>\n      subscriptions.set(event, emitter.addListener(event, handler));\n    module[event + \"ListenerRemove\"] = () => subscriptions.get(event).remove();\n  });\n\n  module.allListenersRemove = () => subscriptions.forEach((a) => a.remove());\n};\n"
  },
  {
    "path": "react-native-hms-site/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-site/README.md",
    "content": "<p align=\"center\">\n  <h1 align=\"center\">React-Native HMS Site</h1>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-site\"><img src=\"https://img.shields.io/npm/dm/@hmscore/react-native-hms-site?color=%23007EC6&style=for-the-badge\" alt=\"downloads\"></a>\n  <a href=\"https://www.npmjs.com/package/@hmscore/react-native-hms-site\"><img src=\"https://img.shields.io/npm/v/@hmscore/react-native-hms-site?color=%23ed2a1c&style=for-the-badge\" alt=\"NPM version\"></a>\n  <a href=\"./LICENCE\"><img src=\"https://img.shields.io/npm/l/@hmscore/react-native-hms-site.svg?color=%3bcc62&style=for-the-badge\" alt=\"License\"></a>\n</p>\n\n---\n\nReact Native Site Plugin provides adaptation code for HUAWEI Site Kit to use the React Native platform. With HUAWEI Site Kit, your app can provide users with convenient and secure access to diverse, place-related services.\n\n[> Learn More](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/introduction-0000001050176404)\n\n## Installation\n\n```bash\n$ npm i @hmscore/react-native-hms-site\n```\n\n## Documentation\n\n- [Quick Start](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/preparing-dev-environment-0000001050267820?ha_source=hms1)\n- [Reference](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-References/overview-0000001051070802?ha_source=hms1)\n\n### Additional Topics\n\n- [Place Search](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/placesearch-0000001050178701?ha_source=hms1)\n- [Nearby Place Search](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/nearbyplacesearch-0000001050176632?ha_source=hms1)\n- [Place Details](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/placedetails-0000001050418613?ha_source=hms1)\n- [Place Search Suggestion](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/placesearchsuggestion-0000001050267566?ha_source=hms1)\n- [Search Widget](https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/searchwidget-0000001054950448?ha_source=hms1)\n\n## Questions or Issues\n\nIf you have questions about how to use HMS samples, try the following options:\n\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/huawei-mobile-services) is the best place for any programming questions. Be sure to tag your question with\n  **huawei-mobile-services**.\n- [Github](https://github.com/HMS-Core/hms-react-native-plugin) is the official repository for these plugins, You can open an issue or submit your ideas.\n- [Huawei Developer Forum](https://forums.developer.huawei.com/forumPortal/en/home?fid=0101187876626530001&ha_source=hms1) HMS Core Module is great for general questions, or seeking recommendations and opinions.\n- [Huawei Developer Docs](https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin?ha_source=hms1) is place to official documentation for all HMS Core Kits, you can find detailed documentations in there.\n\nIf you run into a bug in our samples, please submit an issue to the [GitHub repository](https://github.com/HMS-Core/hms-react-native-plugin).\n\n## License\n\nHuawei React-Native Plugin is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-site/android/build.gradle",
    "content": "apply plugin: 'com.android.library'\napply plugin: 'maven-publish'\n\nbuildscript {\n    repositories {\n        google()\n        jcenter()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.6.0'\n    }\n}\n\n\nandroid {\n    compileSdkVersion 33\n    buildToolsVersion \"31.0.0\"\n\n    defaultConfig {\n        minSdkVersion 19\n        targetSdkVersion 33\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\nrepositories {\n    mavenLocal()\n    maven {\n        url \"$rootDir/../node_modules/react-native/android\"\n    }\n    maven {\n        url \"$rootDir/../node_modules/jsc-android/dist\"\n    }\n    maven {url 'https://developer.huawei.com/repo/'}\n    google()\n    jcenter()\n}\n\ndependencies {\n    implementation 'com.facebook.react:react-native:+'  // From node_modules\n    implementation 'com.huawei.hms:site:6.5.1.302'\n    implementation \"androidx.recyclerview:recyclerview:1.1.0\"\n}\n\n\n\n"
  },
  {
    "path": "react-native-hms-site/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.8.3-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-site/android/gradle.properties",
    "content": "android.useAndroidX=true\nandroid.enableJetifier=true\norg.gradle.jvmargs=-Xmx4096m"
  },
  {
    "path": "react-native-hms-site/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-site/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.huawei.hms.rn.site\">\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/HMSLogger.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport static android.os.Build.DEVICE;\n\nimport android.content.Context;\nimport android.content.pm.PackageManager;\nimport android.net.ConnectivityManager;\nimport android.net.NetworkInfo;\nimport android.util.Log;\n\nimport com.huawei.agconnect.config.AGConnectServicesConfig;\nimport com.huawei.hms.support.hianalytics.HiAnalyticsUtils;\nimport com.huawei.hms.utils.HMSBIInitializer;\n\nimport java.lang.ref.WeakReference;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic final class HMSLogger {\n    private static final String TAG = \"HMSLogger\";\n\n    private static final String KIT = \"Site\";\n    private static final String PLATFORM = \"ReactNative\";\n    private static final String VERSION = \"6.5.1.302\";\n\n    private static final String SERVICE = \"Cross-Platform\";\n\n    private static final String SUCCESS = \"0\";\n    private static final String UNKNOWN = \"UNKNOWN\";\n    private static final String NOT_AVAILABLE = \"NOT_AVAILABLE\";\n\n    private static final String SINGLE_EVENT_ID = \"60000\";\n    private static final String PERIODIC_EVENT_ID = \"60001\";\n\n    private static final String NETWORK_TYPE_WIFI = \"WIFI\";\n\n    private static volatile HMSLogger instance;\n\n    private final WeakReference<Context> weakContext;\n    private final HiAnalyticsUtils hiAnalyticsUtils;\n    private final ConnectivityManager connectivityManager;\n\n    private final Map<String, Object> singleEventMap = new HashMap<>();\n    private final Map<String, Object> periodicEventMap = new HashMap<>();\n    private final Map<String, Long> allCountMap = new HashMap<>();\n    private final Map<String, Long> failCountMap = new HashMap<>();\n    private final Map<String, Long> startTimeMap = new HashMap<>();\n    private final Map<String, Long> firstReceiveTimeMap = new HashMap<>();\n    private final Map<String, Long> lastReceiveTimeMap = new HashMap<>();\n    private final Map<String, Map<String, Long>> resultCodeCountMap = new HashMap<>();\n    private final Map<Integer, String> networkTypeMap = createNetworkTypeMap();\n\n    private boolean isEnabled = false;\n\n    /**\n     * Private constructor of this class.\n     *\n     * @param context Application's context\n     */\n    private HMSLogger(final Context context) {\n        weakContext = new WeakReference<>(context);\n        hiAnalyticsUtils = HiAnalyticsUtils.getInstance();\n        connectivityManager = objectCast(context.getSystemService(Context.CONNECTIVITY_SERVICE),\n            ConnectivityManager.class);\n\n        hiAnalyticsUtils.enableLog();\n        HMSBIInitializer.getInstance(context).initBI();\n        setupEventMap(singleEventMap);\n        setupEventMap(periodicEventMap);\n        enableLogger();\n    }\n\n    /**\n     * Returns the instance of this class.\n     *\n     * @param context Context object\n     * @return HMSLogger instance\n     */\n    public static synchronized HMSLogger getInstance(final Context context) {\n        if (instance == null) {\n            synchronized (HMSLogger.class) {\n                if (instance == null) {\n                    instance = new HMSLogger(context.getApplicationContext());\n                }\n            }\n        }\n        return instance;\n    }\n\n    /**\n     * Returns actual context reference.\n     *\n     * @return Actual context reference\n     */\n    private synchronized Context getContext() {\n        return weakContext.get();\n    }\n\n    /**\n     * Enables HMSLogger.\n     */\n    public synchronized void enableLogger() {\n        isEnabled = true;\n        Log.d(TAG, \"HMS Plugin Dotting is Enabled!\");\n    }\n\n    /**\n     * Disables HMSLogger.\n     */\n    public synchronized void disableLogger() {\n        isEnabled = false;\n        Log.d(TAG, \"HMS Plugin Dotting is Disabled!\");\n    }\n\n    /**\n     * Sets method start time for given method name.\n     *\n     * @param methodName Name of the method that will be logged\n     */\n    public synchronized void startMethodExecutionTimer(final String methodName) {\n        startTimeMap.put(methodName, System.currentTimeMillis());\n    }\n\n    /**\n     * Sends successful single event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendSingleEvent(final String methodName) {\n        sendEvent(SINGLE_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful single event\n     *\n     * @param methodName The name of the method called.\n     * @param errorCode  API error code\n     */\n    public synchronized void sendSingleEvent(final String methodName, final String errorCode) {\n        sendEvent(SINGLE_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends successful periodic event.\n     *\n     * @param methodName The name of the method called\n     */\n    public synchronized void sendPeriodicEvent(final String methodName) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, SUCCESS);\n    }\n\n    /**\n     * Sends unsuccessful periodic event.\n     *\n     * @param methodName The name of the method called\n     * @param errorCode  API error code\n     */\n    public synchronized void sendPeriodicEvent(final String methodName, final String errorCode) {\n        sendEvent(PERIODIC_EVENT_ID, methodName, errorCode);\n    }\n\n    /**\n     * Sends the event based on eventId, methodName, and resultCode.\n     *\n     * @param eventId    Constant id of the event\n     * @param methodName The name of the method called\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void sendEvent(final String eventId, final String methodName, final String resultCode) {\n        if (isEnabled) {\n            final long currentTime = System.currentTimeMillis();\n\n            if (eventId.equals(SINGLE_EVENT_ID)) {\n                putToSingleEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), SINGLE_EVENT_ID, singleEventMap);\n\n                Log.d(TAG, \"singleEventMap -> \" + singleEventMap);\n            } else {\n                putToPeriodicEventMap(methodName, resultCode, currentTime);\n                hiAnalyticsUtils.onNewEvent(getContext(), PERIODIC_EVENT_ID, periodicEventMap);\n\n                Log.d(TAG, \"periodicEventMap -> \" + periodicEventMap);\n            }\n        }\n    }\n\n    /**\n     * Gets \"client/app_id\" value from agconnect-services.json file.\n     *\n     * @return app_id value or NOT_AVAILABLE if not found\n     */\n    private synchronized String getAppId() {\n        try {\n            return AGConnectServicesConfig.fromContext(getContext()).getString(\"client/app_id\");\n        } catch (final NullPointerException e) {\n            Log.d(TAG, \"AgConnect is not found. Setting appId value to \" + NOT_AVAILABLE);\n        }\n        return NOT_AVAILABLE;\n    }\n\n    /**\n     * Gets app version name.\n     *\n     * @param packageName Package name of the app\n     * @return App version name in String type\n     */\n    private synchronized String getAppVersionName(final String packageName) {\n        try {\n            return getContext().getPackageManager().getPackageInfo(packageName, 0).versionName;\n        } catch (final PackageManager.NameNotFoundException e) {\n            Log.e(TAG, \"getAppVersionName ->  Could not get appVersionName!\");\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Detects current network type.\n     *\n     * @return Human readable network type; such as WIFI, 4G\n     */\n    private synchronized String getNetworkType() {\n        if (connectivityManager != null) {\n            final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\n            if (networkInfo != null && networkInfo.isConnected()) {\n                final int networkType = networkInfo.getType();\n                if (ConnectivityManager.TYPE_WIFI == networkType) {\n                    return NETWORK_TYPE_WIFI;\n                } else if (ConnectivityManager.TYPE_MOBILE == networkType) {\n                    final int networkSubType = networkInfo.getSubtype();\n                    return getOrDefault(networkTypeMap, networkSubType, UNKNOWN);\n                } else {\n                    return UNKNOWN;\n                }\n            } else {\n                return NOT_AVAILABLE;\n            }\n        } else {\n            return NOT_AVAILABLE;\n        }\n    }\n\n    /**\n     * Sets default values to given map.\n     *\n     * @param map HashMap to put default values\n     */\n    private synchronized void setupEventMap(final Map<String, Object> map) {\n        map.put(\"kit\", KIT);\n        map.put(\"platform\", PLATFORM);\n        map.put(\"version\", VERSION);\n        map.put(\"service\", SERVICE);\n        map.put(\"appid\", getAppId());\n        map.put(\"package\", getContext().getPackageName());\n        map.put(\"cpAppVersion\", getAppVersionName(getContext().getPackageName()));\n        map.put(\"model\", DEVICE);\n    }\n\n    /**\n     * Prepares sing-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToSingleEventMap(final String methodName, final String resultCode, final long currentTime) {\n        final long startTime = getOrDefault(startTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - startTime);\n        singleEventMap.put(\"apiName\", methodName);\n        singleEventMap.put(\"result\", resultCode);\n        singleEventMap.put(\"callTime\", currentTime);\n        singleEventMap.put(\"costTime\", costTime);\n        singleEventMap.put(\"networkType\", getNetworkType());\n    }\n\n    /**\n     * Prepares periodic-event map according to input parameters.\n     *\n     * @param methodName  The name of the method called\n     * @param resultCode  Code of the method's result. \"0\" for success, others for error\n     * @param currentTime Current timestamp in millisecond\n     */\n    private synchronized void putToPeriodicEventMap(final String methodName, final String resultCode, final long currentTime) {\n        increaseResultCodeCount(methodName, resultCode);\n        increaseMapValue(methodName, allCountMap);\n\n        if (!resultCode.equals(SUCCESS)) {\n            increaseMapValue(methodName, failCountMap);\n        }\n\n        final long firstReceiveTime = getOrDefault(firstReceiveTimeMap, methodName, currentTime);\n        periodicEventMap.put(\"callTime\", firstReceiveTime);\n\n        final long lastReceiveTime = getOrDefault(lastReceiveTimeMap, methodName, currentTime);\n        final int costTime = (int) (currentTime - lastReceiveTime);\n        periodicEventMap.put(\"costTime\", costTime);\n\n        periodicEventMap.put(\"apiName\", methodName);\n        periodicEventMap.put(\"result\", resultCodeCountMap.get(methodName));\n\n        final long allCount = getOrDefault(allCountMap, methodName, 0L);\n        periodicEventMap.put(\"allCnt\", allCount);\n\n        final long failCount = getOrDefault(failCountMap, methodName, 0L);\n        periodicEventMap.put(\"failCnt\", failCount);\n\n        periodicEventMap.put(\"lastCallTime\", currentTime);\n        periodicEventMap.put(\"networkType\", getNetworkType());\n\n        putIfAbsent(firstReceiveTimeMap, methodName, currentTime);\n        lastReceiveTimeMap.put(methodName, currentTime);\n    }\n\n    /**\n     * Prepares HashMap of network type id and its human-readable string pairs.\n     *\n     * @return HashMap of human readable network type names\n     */\n    private synchronized Map<Integer, String> createNetworkTypeMap() {\n        final Map<Integer, String> map = new HashMap<>();\n        map.put(0, UNKNOWN);\n        map.put(1, \"2G\");\n        map.put(2, \"2G\");\n        map.put(3, \"3G\");\n        map.put(4, \"3G\");\n        map.put(5, \"3G\");\n        map.put(6, \"3G\");\n        map.put(7, \"2G\");\n        map.put(8, \"3G\");\n        map.put(9, \"3G\");\n        map.put(10, \"3G\");\n        map.put(11, \"2G\");\n        map.put(12, \"3G\");\n        map.put(13, \"4G\");\n        map.put(14, \"3G\");\n        map.put(15, \"3G\");\n        map.put(16, \"2G\");\n        map.put(17, \"3G\");\n        map.put(18, \"4G\");\n        map.put(19, \"4G\");\n        map.put(20, \"5G\");\n\n        return Collections.unmodifiableMap(map);\n    }\n\n    /**\n     * Increases count of the given result code.\n     *\n     * @param methodName Name of the calling method\n     * @param resultCode Code of the method's result. \"0\" for success, others for error\n     */\n    private synchronized void increaseResultCodeCount(final String methodName, final String resultCode) {\n        final Map<String, Long> map = getOrDefault(resultCodeCountMap, methodName, new HashMap<>());\n\n        increaseMapValue(resultCode, map);\n        resultCodeCountMap.put(methodName, map);\n    }\n\n    /**\n     * Increases the value of the corresponding key which in the map.\n     *\n     * @param key Key for map lookup\n     * @param map The Map that contains the key and its corresponding value\n     */\n    private synchronized void increaseMapValue(final String key, final Map<String, Long> map) {\n        map.put(key, getOrDefault(map, key, 0L) + 1);\n    }\n\n    /**\n     * Get the corresponding value of the key. If the key does not exist in the map then the default value is returned.\n     *\n     * @param map          The Map\n     * @param key          Lookup key\n     * @param defaultValue The default value will be returned if the key is absent\n     * @param <K>          Generic type of the key\n     * @param <V>          Generic type of the value\n     * @return Corresponding value or default value\n     */\n    private synchronized <K, V> V getOrDefault(final Map<K, V> map, final K key, final V defaultValue) {\n        return map.containsKey(key) ? map.get(key) : defaultValue;\n    }\n\n    /**\n     * Put key-value pair to map if the key is absent.\n     *\n     * @param map   The Map\n     * @param key   Lookup key\n     * @param value The value will be put to the map if the key is absent\n     * @param <K>   Generic type of the key\n     * @param <V>   Generic type of the value\n     */\n    private synchronized <K, V> void putIfAbsent(final Map<K, V> map, final K key, final V value) {\n        if (!map.containsKey(key)) {\n            map.put(key, value);\n        }\n    }\n\n    /**\n     * Utility method that castes given object to given class type.\n     *\n     * @param source Source object to be casted\n     * @param clazz  Class that object will be casted to its type\n     * @param <S>    Source object's type\n     * @param <D>    Destination type\n     * @return Object that casted to D type\n     */\n    private synchronized <S, D> D objectCast(final S source, final Class<D> clazz) {\n        return clazz.cast(source);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/RNHMSSiteModule.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.bridge.ReactContextBaseJavaModule;\nimport com.facebook.react.bridge.ReactMethod;\nimport com.facebook.react.bridge.ReadableMap;\n\npublic class RNHMSSiteModule extends ReactContextBaseJavaModule {\n\n    private RNHMSSiteWrapper siteWrapper;\n    private RNHMSWidgetWrapper widgetWrapper;\n    private final ReactApplicationContext reactContext;\n\n    public RNHMSSiteModule(ReactApplicationContext reactContext) {\n        super(reactContext);\n        this.reactContext = reactContext;\n    }\n\n    @Override\n    public void initialize() {\n        super.initialize();\n    }\n\n    @Override\n    public String getName() {\n        return \"HmsSite\";\n    }\n\n    @ReactMethod\n    public void initializeService(ReadableMap params, Promise promise) {\n        siteWrapper = new RNHMSSiteWrapper(getCurrentActivity());\n        widgetWrapper = new RNHMSWidgetWrapper(getCurrentActivity());\n        reactContext.addActivityEventListener(widgetWrapper);\n\n        siteWrapper.initializeService(params, reactContext.getCurrentActivity(), promise);\n    }\n\n    @ReactMethod\n    public void textSearch(ReadableMap params, Promise promise) {\n        siteWrapper.textSearch(params, promise);\n    }\n\n    @ReactMethod\n    public void detailSearch(ReadableMap params, Promise promise) {\n        siteWrapper.detailSearch(params, promise);\n    }\n\n    @ReactMethod\n    public void querySuggestion(ReadableMap params, Promise promise) {\n        siteWrapper.querySuggestion(params, promise);\n    }\n\n    @ReactMethod\n    public void nearbySearch(ReadableMap params, Promise promise) {\n        siteWrapper.nearbySearch(params, promise);\n    }\n\n    @ReactMethod\n    public void queryAutocomplete(ReadableMap params, Promise promise) {\n        siteWrapper.queryAutocomplete(params, promise);\n    }\n\n    @ReactMethod\n    public void createWidget(ReadableMap params, Promise promise) {\n        if (widgetWrapper != null) {\n            widgetWrapper.createSearchWidget(params, promise);\n        } else {\n            promise.reject(\"WIDGET_NOT_INITIALIZED\", \"The widget is not initialized.\");\n        }\n    }\n\n    @ReactMethod\n    public void enableLogger(Promise promise) {\n        if (getCurrentActivity() == null) {\n            promise.reject(\"NULL_ACTIVITY_ERROR\", \"The activity is not initialized.\");\n            return;\n        }\n        HMSLogger.getInstance(getCurrentActivity()).enableLogger();\n        promise.resolve(\"The logger is enabled.\");\n    }\n\n    @ReactMethod\n    public void disableLogger(Promise promise) {\n        if (getCurrentActivity() == null) {\n            promise.reject(\"NULL_ACTIVITY_ERROR\", \"The activity is not initialized.\");\n            return;\n        }\n        HMSLogger.getInstance(getCurrentActivity()).disableLogger();\n        promise.resolve(\"The logger is disabled.\");\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/RNHMSSitePackage.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport com.facebook.react.ReactPackage;\nimport com.facebook.react.bridge.NativeModule;\nimport com.facebook.react.bridge.ReactApplicationContext;\nimport com.facebook.react.uimanager.ViewManager;\n\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.List;\n\npublic class RNHMSSitePackage implements ReactPackage {\n    @Override\n    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {\n        return Arrays.<NativeModule>asList(new RNHMSSiteModule(reactContext));\n    }\n\n    @Override\n    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {\n        return Collections.emptyList();\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/RNHMSSiteUtils.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport com.huawei.hms.site.api.model.Coordinate;\nimport com.huawei.hms.site.api.model.CoordinateBounds;\nimport com.huawei.hms.site.api.model.DetailSearchRequest;\nimport com.huawei.hms.site.api.model.HwLocationType;\nimport com.huawei.hms.site.api.model.LocationType;\nimport com.huawei.hms.site.api.model.NearbySearchRequest;\nimport com.huawei.hms.site.api.model.QueryAutocompleteRequest;\nimport com.huawei.hms.site.api.model.QuerySuggestionRequest;\nimport com.huawei.hms.site.api.model.TextSearchRequest;\n\nimport com.facebook.react.bridge.Arguments;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class RNHMSSiteUtils {\n\n    private static Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().create();\n\n    private RNHMSSiteUtils() {\n    }\n\n    public static <T> Map<String, Object> toMap(T obj) {\n        return gson.fromJson(gson.toJson(obj), Map.class);\n    }\n\n    public static List<String> toCountyList(ReadableMap params) {\n        List<String> countryList = new ArrayList<>();\n\n        if (params == null) {\n            return countryList;\n        }\n\n        ArrayList<Object> countries = params.getArray(\"countries\").toArrayList();\n\n\n        for (Object country : countries) {\n            countryList.add((String) country);\n        }\n\n        return countryList;\n    }\n\n    public static <T> T toObject(ReadableMap params, Class<T> clazz) {\n\n        if (params == null || clazz == null) {\n            return null;\n        }\n\n        HashMap<String, Object> paramMap = params.toHashMap();\n\n        return gson.fromJson(gson.toJson(paramMap), clazz);\n    }\n\n    public static void handleResult(Object response, boolean isSuccess, Promise promise) {\n        if (response != null) {\n            Map<String, Object> result = RNHMSSiteUtils.toMap(response);\n            if (isSuccess) {\n                promise.resolve(Arguments.makeNativeMap(result));\n            } else {\n                promise.reject(\"SEARCH_ERROR\", Arguments.makeNativeMap(result));\n            }\n        } else {\n            promise.reject(\"-1\", \"UNKNOWN_ERROR\");\n        }\n    }\n\n    public static boolean hasValidKey(ReadableMap rm, String key, ReadableType type) {\n        return rm.hasKey(key) && rm.getType(key) == type;\n    }\n\n    public static QuerySuggestionRequest getQuerySuggestionRequestFromReadableMap(ReadableMap rm, Promise promise) {\n        QuerySuggestionRequest querySuggestionRequest = new QuerySuggestionRequest();\n\n        if (hasValidKey(rm, \"query\", ReadableType.String)) {\n            querySuggestionRequest.setQuery(rm.getString(\"query\"));\n        }\n        if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n            Coordinate location = RNHMSSiteUtils.toObject(rm.getMap(\"location\"), Coordinate.class);\n            querySuggestionRequest.setLocation(location);\n        }\n        if (hasValidKey(rm, \"bounds\", ReadableType.Map)) {\n            CoordinateBounds bounds = RNHMSSiteUtils.toObject(rm.getMap(\"bounds\"), CoordinateBounds.class);\n            querySuggestionRequest.setBounds(bounds);\n        }\n        if (hasValidKey(rm, \"radius\", ReadableType.Number)) {\n            querySuggestionRequest.setRadius(rm.getInt(\"radius\"));\n        }\n        if (hasValidKey(rm, \"poiTypes\", ReadableType.Array)) {\n            ArrayList<Object> poiTypes = rm.getArray(\"poiTypes\").toArrayList();\n            List<LocationType> poiTypeList = new ArrayList<>();\n\n            for (Object poiType : poiTypes) {\n                try {\n                    LocationType locationType = LocationType.valueOf((String) poiType);\n                    poiTypeList.add(locationType);\n                } catch (IllegalArgumentException e){\n                    promise.reject(\n                            \"INVALID_POI_TYPE\",\n                            poiType + \" is not available Poi Type. ( \" + e.getMessage() + \" )\"\n                    );\n                }\n            }\n\n            querySuggestionRequest.setPoiTypes(poiTypeList);\n        }\n        if (hasValidKey(rm, \"countryCode\", ReadableType.String)) {\n            querySuggestionRequest.setCountryCode(rm.getString(\"countryCode\"));\n        }\n        if (hasValidKey(rm, \"language\", ReadableType.String)) {\n            querySuggestionRequest.setLanguage(rm.getString(\"language\"));\n        }\n        if (hasValidKey(rm, \"politicalView\", ReadableType.String)) {\n            querySuggestionRequest.setPoliticalView(rm.getString(\"politicalView\"));\n        }\n        if (hasValidKey(rm, \"children\", ReadableType.Boolean)) {\n            querySuggestionRequest.setChildren(rm.getBoolean(\"children\"));\n        }\n        if (hasValidKey(rm, \"strictBounds\", ReadableType.Boolean)) {\n            querySuggestionRequest.setStrictBounds(rm.getBoolean(\"strictBounds\"));\n        }\n        if (hasValidKey(rm, \"countries\", ReadableType.Array)) {\n            querySuggestionRequest.setCountries(toCountyList(rm));\n        }\n        return querySuggestionRequest;\n    }\n\n    public static DetailSearchRequest getDetailSearchRequestFromReadableMap(ReadableMap rm, Promise promise) {\n        DetailSearchRequest detailSearchRequest = new DetailSearchRequest();\n\n        if (hasValidKey(rm, \"siteId\", ReadableType.String)) {\n            detailSearchRequest.setSiteId(rm.getString(\"siteId\"));\n        }\n        if (hasValidKey(rm, \"language\", ReadableType.String)) {\n            detailSearchRequest.setLanguage(rm.getString(\"language\"));\n        }\n        if (hasValidKey(rm, \"politicalView\", ReadableType.String)) {\n            detailSearchRequest.setPoliticalView(rm.getString(\"politicalView\"));\n        }\n        if (hasValidKey(rm, \"children\", ReadableType.Boolean)) {\n            detailSearchRequest.setChildren(rm.getBoolean(\"children\"));\n        }\n        return detailSearchRequest;\n    }\n\n    public static TextSearchRequest getTextSearchRequestFromReadableMap(ReadableMap rm, Promise promise) {\n        TextSearchRequest textSearchRequest = new TextSearchRequest();\n\n        if (hasValidKey(rm, \"query\", ReadableType.String)) {\n            textSearchRequest.setQuery(rm.getString(\"query\"));\n        }\n        if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n            Coordinate location = RNHMSSiteUtils.toObject(rm.getMap(\"location\"), Coordinate.class);\n            textSearchRequest.setLocation(location);\n        }\n        if (hasValidKey(rm, \"radius\", ReadableType.Number)) {\n            textSearchRequest.setRadius(rm.getInt(\"radius\"));\n        }\n        if (hasValidKey(rm, \"poiType\", ReadableType.String)) {\n            textSearchRequest.setPoiType(LocationType.valueOf(rm.getString(\"poiType\")));\n        }\n        if (hasValidKey(rm, \"hwPoiType\", ReadableType.String)) {\n            textSearchRequest.setHwPoiType(HwLocationType.valueOf(rm.getString(\"hwPoiType\")));\n        }\n        if (hasValidKey(rm, \"countryCode\", ReadableType.String)) {\n            textSearchRequest.setCountryCode(rm.getString(\"countryCode\"));\n        }\n        if (hasValidKey(rm, \"language\", ReadableType.String)) {\n            textSearchRequest.setLanguage(rm.getString(\"language\"));\n        }\n        if (hasValidKey(rm, \"pageSize\", ReadableType.Number)) {\n            textSearchRequest.setPageSize(rm.getInt(\"pageSize\"));\n        }\n        if (hasValidKey(rm, \"pageIndex\", ReadableType.Number)) {\n            textSearchRequest.setPageIndex(rm.getInt(\"pageIndex\"));\n        }\n        if (hasValidKey(rm, \"politicalView\", ReadableType.String)) {\n            textSearchRequest.setPoliticalView(rm.getString(\"politicalView\"));\n        }\n        if (hasValidKey(rm, \"children\", ReadableType.Boolean)) {\n            textSearchRequest.setChildren(rm.getBoolean(\"children\"));\n        }\n        if (hasValidKey(rm, \"countries\", ReadableType.Array)) {\n            textSearchRequest.setCountries(toCountyList(rm));\n        }\n        return textSearchRequest;\n    }\n\n    public static NearbySearchRequest getNearbySearchRequestFromReadableMap(ReadableMap rm, Promise promise) {\n        NearbySearchRequest nearbySearchRequest = new NearbySearchRequest();\n\n        if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n            Coordinate location = RNHMSSiteUtils.toObject(rm.getMap(\"location\"), Coordinate.class);\n            nearbySearchRequest.setLocation(location);\n        }\n        if (hasValidKey(rm, \"radius\", ReadableType.Number)) {\n            nearbySearchRequest.setRadius(rm.getInt(\"radius\"));\n        }\n        if (hasValidKey(rm, \"query\", ReadableType.String)) {\n            nearbySearchRequest.setQuery(rm.getString(\"query\"));\n        }\n        if (hasValidKey(rm, \"poiType\", ReadableType.String)) {\n            nearbySearchRequest.setPoiType(LocationType.valueOf(rm.getString(\"poiType\")));\n        }\n        if (hasValidKey(rm, \"hwPoiType\", ReadableType.String)) {\n            nearbySearchRequest.setHwPoiType(HwLocationType.valueOf(rm.getString(\"hwPoiType\")));\n        }\n        if (hasValidKey(rm, \"language\", ReadableType.String)) {\n            nearbySearchRequest.setLanguage(rm.getString(\"language\"));\n        }\n        if (hasValidKey(rm, \"pageSize\", ReadableType.Number)) {\n            nearbySearchRequest.setPageSize(rm.getInt(\"pageSize\"));\n        }\n        if (hasValidKey(rm, \"pageIndex\", ReadableType.Number)) {\n            nearbySearchRequest.setPageIndex(rm.getInt(\"pageIndex\"));\n        }\n        if (hasValidKey(rm, \"politicalView\", ReadableType.String)) {\n            nearbySearchRequest.setPoliticalView(rm.getString(\"politicalView\"));\n        }\n        if (hasValidKey(rm, \"strictBounds\", ReadableType.Boolean)) {\n            nearbySearchRequest.setStrictBounds(rm.getBoolean(\"strictBounds\"));\n        }\n        return nearbySearchRequest;\n    }\n\n    public static QueryAutocompleteRequest getQueryAutocompleteRequestFromReadableMap(ReadableMap rm, Promise promise) {\n        QueryAutocompleteRequest queryAutocompleteRequest = new QueryAutocompleteRequest();\n\n        if (hasValidKey(rm, \"query\", ReadableType.String)) {\n            queryAutocompleteRequest.setQuery(rm.getString(\"query\"));\n        }\n        if (hasValidKey(rm, \"location\", ReadableType.Map)) {\n            Coordinate location = RNHMSSiteUtils.toObject(rm.getMap(\"location\"), Coordinate.class);\n            queryAutocompleteRequest.setLocation(location);\n        }\n        if (hasValidKey(rm, \"radius\", ReadableType.Number)) {\n            queryAutocompleteRequest.setRadius(rm.getInt(\"radius\"));\n        }\n        if (hasValidKey(rm, \"language\", ReadableType.String)) {\n            queryAutocompleteRequest.setLanguage(rm.getString(\"language\"));\n        }\n        if (hasValidKey(rm, \"politicalView\", ReadableType.String)) {\n            queryAutocompleteRequest.setPoliticalView(rm.getString(\"politicalView\"));\n        }\n        if (hasValidKey(rm, \"children\", ReadableType.Boolean)) {\n            queryAutocompleteRequest.setChildren(rm.getBoolean(\"children\"));\n        }\n        return queryAutocompleteRequest;\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/RNHMSSiteWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport static com.huawei.hms.rn.site.RNHMSSiteUtils.getQuerySuggestionRequestFromReadableMap;\nimport static com.huawei.hms.rn.site.RNHMSSiteUtils.hasValidKey;\n\nimport android.app.Activity;\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.huawei.hms.site.api.SearchResultListener;\nimport com.huawei.hms.site.api.SearchService;\nimport com.huawei.hms.site.api.SearchServiceFactory;\nimport com.huawei.hms.site.api.model.DetailSearchRequest;\nimport com.huawei.hms.site.api.model.DetailSearchResponse;\nimport com.huawei.hms.site.api.model.NearbySearchRequest;\nimport com.huawei.hms.site.api.model.NearbySearchResponse;\nimport com.huawei.hms.site.api.model.QueryAutocompleteRequest;\nimport com.huawei.hms.site.api.model.QueryAutocompleteResponse;\nimport com.huawei.hms.site.api.model.QuerySuggestionRequest;\nimport com.huawei.hms.site.api.model.QuerySuggestionResponse;\nimport com.huawei.hms.site.api.model.SearchStatus;\nimport com.huawei.hms.site.api.model.TextSearchRequest;\nimport com.huawei.hms.site.api.model.TextSearchResponse;\n\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.URLEncoder;\n\npublic class RNHMSSiteWrapper {\n    private static final String METHOD_NAME_INITIALIZE_SERVICE = \"initializeService\";\n\n    private static final String METHOD_NAME_TEXT_SEARCH = \"textSearch\";\n\n    private static final String METHOD_NAME_DETAIL_SEARCH = \"detailSearch\";\n\n    private static final String METHOD_NAME_QUERY_SUGGESTION = \"querySuggestion\";\n\n    private static final String METHOD_NAME_NEARBY_SEARCH = \"nearbySearch\";\n\n    private static final String METHOD_NAME_QUERY_AUTOCOMPLETE = \"queryAutocomplete\";\n\n    private static final String TAG = RNHMSSiteWrapper.class.getSimpleName();\n\n    private SearchService searchService;\n\n    private final HMSLogger logger;\n\n    public RNHMSSiteWrapper(Activity currentActivity) {\n        this.logger = HMSLogger.getInstance(currentActivity);\n    }\n\n    public void initializeService(ReadableMap params, Activity activity, Promise promise) {\n        if (params == null) {\n            Log.e(TAG, \"Illegal argument. Config must not be null.\");\n            promise.reject(\"INVALID_CONFIG\", \"Illegal argument. Config must not be null.\");\n            return;\n        }\n\n        if (!params.hasKey(\"apiKey\") || params.isNull(\"apiKey\") || params.getString(\"apiKey\").isEmpty()) {\n            promise.reject(\"INVALID_API_KEY\", \"Invalid API key.\");\n            return;\n        }\n        String encodedKey = null;\n        try {\n            encodedKey = URLEncoder.encode(params.getString(\"apiKey\"), \"UTF-8\");\n        } catch (UnsupportedEncodingException e) {\n            Log.e(TAG, \"API Key encoding error.\");\n            promise.reject(\"INVALID_API_KEY\", \"API Key encoding error.\");\n            return;\n        }\n        String routePolicy = params.hasKey(\"routePolicy\") ? params.getString(\"routePolicy\") : null;\n        searchService = routePolicy != null\n            ? SearchServiceFactory.create(activity, encodedKey, routePolicy)\n            : SearchServiceFactory.create(activity, encodedKey);\n        logger.startMethodExecutionTimer(METHOD_NAME_INITIALIZE_SERVICE);\n        logger.sendSingleEvent(METHOD_NAME_INITIALIZE_SERVICE);\n        promise.resolve(null);\n    }\n\n    public boolean checkParams(ReadableMap params, Promise promise, String requestName) {\n        if (searchService == null) {\n            Log.e(TAG, \"SearchService is not initialized.\");\n            promise.reject(\"NOT_INITIALIZED\", \"SearchService is not initialized.\");\n            return true;\n        }\n\n        if (params == null) {\n            Log.e(TAG, \"Illegal argument. \" + requestName + \" must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. \" + requestName + \" must not be null.\");\n            return true;\n        }\n\n        if (hasValidKey(params, \"radius\", ReadableType.Number)) {\n            int radius = params.getInt(\"radius\");\n\n            if (radius < 1 || radius > 50000) {\n                promise.reject(\"INVALID_REQUEST\", \"Illegal argument. radius field must be between 1 and 50000.\");\n                return true;\n            }\n        }\n        return false;\n    }\n\n    public void textSearch(ReadableMap params, Promise promise) {\n        if (checkParams(params, promise, METHOD_NAME_TEXT_SEARCH)) {\n            return;\n        }\n\n        if (!hasValidKey(params, \"query\", ReadableType.String) || TextUtils.isEmpty(params.getString(\"query\"))) {\n            Log.e(TAG, \"Illegal argument. query field is mandatory and it must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. query field is mandatory and it must not be null.\");\n            return;\n        }\n\n        try {\n            logger.startMethodExecutionTimer(METHOD_NAME_TEXT_SEARCH);\n            TextSearchRequest request = RNHMSSiteUtils.getTextSearchRequestFromReadableMap(params, promise);\n\n            searchService.textSearch(request, new SearchResultListener<TextSearchResponse>() {\n                @Override\n                public void onSearchResult(TextSearchResponse response) {\n                    logger.sendSingleEvent(METHOD_NAME_TEXT_SEARCH);\n                    RNHMSSiteUtils.handleResult(response, true, promise);\n                }\n\n                @Override\n                public void onSearchError(SearchStatus searchStatus) {\n                    logger.sendSingleEvent(METHOD_NAME_TEXT_SEARCH, searchStatus.getErrorCode());\n                    RNHMSSiteUtils.handleResult(searchStatus, false, promise);\n                }\n            });\n        } catch (Exception e) {\n            RNHMSSiteUtils.handleResult(e, false, promise);\n        }\n    }\n\n    public void detailSearch(ReadableMap params, Promise promise) {\n        checkParams(params, promise, METHOD_NAME_DETAIL_SEARCH);\n\n        if (!hasValidKey(params, \"siteId\", ReadableType.String) || TextUtils.isEmpty(params.getString(\"siteId\"))) {\n            Log.e(TAG, \"Illegal argument. siteId field is mandatory and it must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. siteId field is mandatory and it must not be null.\");\n            return;\n        }\n\n        logger.startMethodExecutionTimer(METHOD_NAME_DETAIL_SEARCH);\n\n        try {\n            DetailSearchRequest request = RNHMSSiteUtils.getDetailSearchRequestFromReadableMap(params, promise);\n            searchService.detailSearch(request, new SearchResultListener<DetailSearchResponse>() {\n                @Override\n                public void onSearchResult(DetailSearchResponse response) {\n                    logger.sendSingleEvent(METHOD_NAME_DETAIL_SEARCH);\n                    RNHMSSiteUtils.handleResult(response, true, promise);\n                }\n\n                @Override\n                public void onSearchError(SearchStatus searchStatus) {\n                    logger.sendSingleEvent(METHOD_NAME_DETAIL_SEARCH, searchStatus.getErrorCode());\n                    RNHMSSiteUtils.handleResult(searchStatus, false, promise);\n                }\n            });\n        } catch (Exception e) {\n            RNHMSSiteUtils.handleResult(e, false, promise);\n        }\n    }\n\n    public void querySuggestion(ReadableMap params, Promise promise) {\n        if (checkParams(params, promise, METHOD_NAME_QUERY_SUGGESTION)) {\n            return;\n        }\n\n        if (!hasValidKey(params, \"query\", ReadableType.String) || TextUtils.isEmpty(params.getString(\"query\"))) {\n            Log.e(TAG, \"Illegal argument. query field is mandatory and it must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. query field is mandatory and it must not be null.\");\n            return;\n        }\n\n        try {\n            QuerySuggestionRequest request = getQuerySuggestionRequestFromReadableMap(params, promise);\n\n            logger.startMethodExecutionTimer(METHOD_NAME_QUERY_SUGGESTION);\n            searchService.querySuggestion(request, new SearchResultListener<QuerySuggestionResponse>() {\n                @Override\n                public void onSearchResult(QuerySuggestionResponse response) {\n                    logger.sendSingleEvent(METHOD_NAME_QUERY_SUGGESTION);\n                    RNHMSSiteUtils.handleResult(response, true, promise);\n                }\n\n                @Override\n                public void onSearchError(SearchStatus searchStatus) {\n                    logger.sendSingleEvent(METHOD_NAME_QUERY_SUGGESTION, searchStatus.getErrorCode());\n                    RNHMSSiteUtils.handleResult(searchStatus, false, promise);\n                }\n            });\n        } catch (Exception e) {\n            RNHMSSiteUtils.handleResult(e, false, promise);\n        }\n    }\n\n    public void nearbySearch(ReadableMap params, Promise promise) {\n        checkParams(params, promise, METHOD_NAME_NEARBY_SEARCH);\n\n        if (!hasValidKey(params, \"location\", ReadableType.Map)) {\n            Log.e(TAG, \"Illegal argument. location field is mandatory and it must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. location field is mandatory and it must not be null.\");\n            return;\n        }\n\n        logger.startMethodExecutionTimer(METHOD_NAME_NEARBY_SEARCH);\n\n        try {\n            NearbySearchRequest request = RNHMSSiteUtils.getNearbySearchRequestFromReadableMap(params, promise);\n\n            searchService.nearbySearch(request, new SearchResultListener<NearbySearchResponse>() {\n                @Override\n                public void onSearchResult(NearbySearchResponse response) {\n                    logger.sendSingleEvent(METHOD_NAME_NEARBY_SEARCH);\n                    RNHMSSiteUtils.handleResult(response, true, promise);\n                }\n\n                @Override\n                public void onSearchError(SearchStatus searchStatus) {\n                    logger.sendSingleEvent(METHOD_NAME_NEARBY_SEARCH, searchStatus.getErrorCode());\n                    RNHMSSiteUtils.handleResult(searchStatus, false, promise);\n                }\n            });\n        } catch (Exception e) {\n            RNHMSSiteUtils.handleResult(e, false, promise);\n        }\n    }\n\n    public void queryAutocomplete(ReadableMap params, Promise promise) {\n        checkParams(params, promise, METHOD_NAME_QUERY_AUTOCOMPLETE);\n\n        if (!hasValidKey(params, \"query\", ReadableType.String) || TextUtils.isEmpty(params.getString(\"query\"))) {\n            Log.e(TAG, \"Illegal argument. query field is mandatory and it must not be null.\");\n            promise.reject(\"INVALID_REQUEST\", \"Illegal argument. query field is mandatory and it must not be null.\");\n            return;\n        }\n\n        logger.startMethodExecutionTimer(METHOD_NAME_QUERY_AUTOCOMPLETE);\n\n        try {\n            QueryAutocompleteRequest request = RNHMSSiteUtils.getQueryAutocompleteRequestFromReadableMap(params,\n                promise);\n\n            searchService.queryAutocomplete(request, new SearchResultListener<QueryAutocompleteResponse>() {\n                @Override\n                public void onSearchResult(QueryAutocompleteResponse response) {\n                    logger.sendSingleEvent(METHOD_NAME_QUERY_AUTOCOMPLETE);\n                    RNHMSSiteUtils.handleResult(response, true, promise);\n                }\n\n                @Override\n                public void onSearchError(SearchStatus searchStatus) {\n                    logger.sendSingleEvent(METHOD_NAME_QUERY_AUTOCOMPLETE, searchStatus.getErrorCode());\n                    RNHMSSiteUtils.handleResult(searchStatus, false, promise);\n                }\n            });\n        } catch (Exception e) {\n            RNHMSSiteUtils.handleResult(e, false, promise);\n        }\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/android/src/main/java/com/huawei/hms/rn/site/RNHMSWidgetWrapper.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site;\n\nimport android.app.Activity;\nimport android.content.Intent;\nimport android.text.TextUtils;\nimport android.util.Log;\n\nimport com.facebook.react.bridge.ActivityEventListener;\nimport com.facebook.react.bridge.Promise;\nimport com.facebook.react.bridge.ReadableMap;\nimport com.facebook.react.bridge.ReadableType;\nimport com.huawei.hms.site.api.model.Coordinate;\nimport com.huawei.hms.site.api.model.CoordinateBounds;\nimport com.huawei.hms.site.api.model.LocationType;\nimport com.huawei.hms.site.api.model.SearchStatus;\nimport com.huawei.hms.site.api.model.Site;\nimport com.huawei.hms.site.widget.SearchFilter;\nimport com.huawei.hms.site.widget.SearchIntent;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.URLEncoder;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static com.huawei.hms.rn.site.RNHMSSiteUtils.hasValidKey;\n\npublic class RNHMSWidgetWrapper implements ActivityEventListener {\n\n    private String TAG = RNHMSWidgetWrapper.class.getSimpleName();\n\n    private Activity activity;\n\n    private SearchIntent searchIntent;\n\n    private Promise searchPromise;\n\n    public RNHMSWidgetWrapper(Activity activity) {\n        this.activity = activity;\n    }\n\n\n    public void createSearchWidget(ReadableMap params, Promise promise) {\n        if (params == null) {\n            Log.e(TAG, \"Illegal argument.\");\n            promise.reject(\"ILLEGAL_ARGUMENT\", \"Illegal argument.\");\n            return;\n        }\n\n        if (!hasValidKey(params, \"searchIntent\", ReadableType.Map)) {\n            promise.reject(\"NULL_SEARCH_INTENT\", \"The searchIntent field may not be null.\");\n            return;\n        }\n\n        ReadableMap searchIntentMap = params.getMap(\"searchIntent\");\n\n        if (!hasValidKey(searchIntentMap, \"apiKey\", ReadableType.String) || TextUtils.isEmpty(\"apiKey\")) {\n            promise.reject(\"INVALID_API_KEY_ERROR\", \"Invalid API key.\");\n            return;\n        }\n\n        String encodedKey = null;\n        try {\n            encodedKey = URLEncoder.encode(searchIntentMap.getString(\"apiKey\"), \"UTF-8\");\n        } catch (UnsupportedEncodingException e) {\n            Log.e(TAG, \"API Key encoding error.\");\n            promise.reject(\"API_KEY_ENCODING_ERROR\", \"API Key encoding error.\");\n            return;\n        }\n\n        this.searchPromise = promise;\n\n        searchIntent = new SearchIntent();\n        searchIntent.setApiKey(encodedKey);\n\n        if (params.hasKey(\"hint\") && !params.isNull(\"hint\")) {\n            searchIntent.setHint(params.getString(\"hint\"));\n        }\n\n        if (hasValidKey(params, \"searchFilter\", ReadableType.Map)) {\n\n            ReadableMap searchFilterMap = params.getMap(\"searchFilter\");\n\n            if (hasValidKey(searchFilterMap, \"radius\", ReadableType.Number)) {\n                int radius = searchFilterMap.getInt(\"radius\");\n\n                if (radius < 1 || radius > 50000) {\n                    promise.reject(\"ILLEGAL_ARGUMENT\", \"Illegal argument. radius field must be between 1 and 50000.\");\n                    return;\n                }\n            }\n\n            SearchFilter searchFilter = createSearchFilter(searchFilterMap, promise);\n            searchIntent.setSearchFilter(searchFilter);\n        }\n\n        HMSLogger.getInstance(activity).startMethodExecutionTimer(\"createSearchWidget\");\n        Intent intent = searchIntent.getIntent(activity);\n        activity.startActivityForResult(intent, SearchIntent.SEARCH_REQUEST_CODE);\n    }\n\n    private SearchFilter createSearchFilter(ReadableMap searchFilterMap, Promise promise) {\n        SearchFilter searchFilter = new SearchFilter();\n\n        if (hasValidKey(searchFilterMap, \"query\", ReadableType.String)) {\n            searchFilter.setQuery(searchFilterMap.getString(\"query\"));\n        }\n        if (hasValidKey(searchFilterMap, \"location\", ReadableType.Map)) {\n            Coordinate location =\n                RNHMSSiteUtils.toObject(searchFilterMap.getMap(\"location\"), Coordinate.class);\n            searchFilter.setLocation(location);\n        }\n        if (hasValidKey(searchFilterMap, \"radius\", ReadableType.Number)) {\n            searchFilter.setRadius(searchFilterMap.getInt(\"radius\"));\n        }\n        if (hasValidKey(searchFilterMap, \"bounds\", ReadableType.Map)) {\n            CoordinateBounds bounds =\n                RNHMSSiteUtils.toObject(searchFilterMap.getMap(\"bounds\"), CoordinateBounds.class);\n            searchFilter.setBounds(bounds);\n        }\n        if (hasValidKey(searchFilterMap, \"countryCode\", ReadableType.String)) {\n            searchFilter.setCountryCode(searchFilterMap.getString(\"countryCode\"));\n        }\n        if (hasValidKey(searchFilterMap, \"language\", ReadableType.String)) {\n            searchFilter.setLanguage(searchFilterMap.getString(\"language\"));\n        }\n        if (hasValidKey(searchFilterMap, \"poiTypes\", ReadableType.Array)) {\n            ArrayList<Object> poiTypes = searchFilterMap.getArray(\"poiTypes\").toArrayList();\n            List<LocationType> poiTypeList = new ArrayList<>();\n\n            for (Object poiType : poiTypes) {\n                LocationType locationType = LocationType.valueOf((String) poiType);\n                poiTypeList.add(locationType);\n            }\n\n            searchFilter.setPoiType(poiTypeList);\n        }\n        if (hasValidKey(searchFilterMap, \"politicalView\", ReadableType.String)) {\n            searchFilter.setPoliticalView(searchFilterMap.getString(\"politicalView\"));\n        }\n        if (hasValidKey(searchFilterMap, \"children\", ReadableType.Boolean)) {\n            searchFilter.setChildren(searchFilterMap.getBoolean(\"children\"));\n        }\n        if (hasValidKey(searchFilterMap, \"strictBounds\", ReadableType.Boolean)) {\n            searchFilter.setStrictBounds(searchFilterMap.getBoolean(\"strictBounds\"));\n        }\n        return searchFilter;\n    }\n\n\n    @Override\n    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {\n        if (SearchIntent.SEARCH_REQUEST_CODE == requestCode) {\n            HMSLogger logger = HMSLogger.getInstance(activity);\n            if (SearchIntent.isSuccess(resultCode) && searchIntent != null) {\n                Site site = searchIntent.getSiteFromIntent(data);\n                logger.sendSingleEvent(\"createSearchWidget\");\n                RNHMSSiteUtils.handleResult(site, true, searchPromise);\n            } else if(searchIntent != null) {\n                SearchStatus searchStatus = searchIntent.getStatusFromIntent(data);\n                logger.sendSingleEvent(\"createSearchWidget\", searchStatus.getErrorCode());\n                RNHMSSiteUtils.handleResult(searchStatus, false, searchPromise);\n            } else {\n                logger.sendSingleEvent(\"createSearchWidget\", \"-1\");\n                RNHMSSiteUtils.handleResult(null, false, searchPromise);\n            }\n        }\n    }\n\n    @Override\n    public void onNewIntent(Intent intent) {\n\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/example/App.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport React, { Component } from \"react\";\nimport {\n  View,\n  Button,\n  Switch,\n  ScrollView,\n  Text,\n  TextInput,\n} from \"react-native\";\nimport RNHMSSite from \"@hmscore/react-native-hms-site\";\n\nimport { styles } from \"./src/styles\";\n\nconst defaultLocation = {\n  location: {\n    lat: 48.8815,\n    lng: 2.4444,\n  },\n  bounds: {\n    northeast: {\n      lat: 49,\n      lng: 2.47,\n    },\n    southwest: {\n      lat: 47.8815,\n      lng: 2.0,\n    },\n  },\n};\n\nclass App extends Component {\n  constructor() {\n    super();\n\n    this.state = {\n      strictBounds: false,\n      query: \"France\",\n      radius: 1000,\n    };\n  }\n\n  componentDidMount() {\n    const config = {\n      apiKey: \"<api_key>\",\n    };\n\n    RNHMSSite.initializeService(config)\n      .then(() => {\n        console.log(\"Service is initialized successfully\");\n      })\n      .catch((err) => {\n        console.log(\"Error : \" + err);\n      });\n  }\n\n  render() {\n    return (\n      <ScrollView>\n        <View style={[styles.container]}>\n          <TextInput\n            value={this.state.query}\n            style={[styles.input, styles.width35]}\n            placeholder=\"query\"\n            onChangeText={(e) => this.changeInputValue(\"query\", e)}\n          />\n          <TextInput\n            value={this.state.radius ? this.state.radius.toString() : null}\n            keyboardType=\"number-pad\"\n            maxLength={5}\n            style={[styles.input, styles.width35]}\n            placeholder=\"radius\"\n            onChangeText={(e) => this.changeRadiusValue(e)}\n          />\n          <View style={[styles.switchContainer]}>\n            <Text>Strict Bounds</Text>\n            <Switch\n              trackColor={{ false: \"#767577\", true: \"#81b0ff\" }}\n              thumbColor={this.state.strictBounds ? \"#f5dd4b\" : \"#f4f3f4\"}\n              onValueChange={this.toggleSwitch}\n              value={this.state.strictBounds}\n            />\n          </View>\n        </View>\n        <View>\n          <Button title=\"Text Search\" onPress={this.onTextSearch} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Detail Search\" onPress={this.onDetailSearch} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Query Suggestion\" onPress={this.onQuerySuggestion} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button\n            title=\"Query AutoComplete\"\n            onPress={this.onQueryAutocomplete}\n          />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Nearby Search\" onPress={this.onNearbySearch} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Create Widget\" onPress={this.createWidget} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Enable the logger\" onPress={this.enableLogger} />\n        </View>\n\n        <View style={styles.btnContainer}>\n          <Button title=\"Disable the logger\" onPress={this.disableLogger} />\n        </View>\n      </ScrollView>\n    );\n  }\n\n  changeInputValue(key, data) {\n    data.length < 1 ? (data = \"\") : data;\n    this.setState({\n      [key]: data,\n    });\n  }\n\n  changeRadiusValue(data) {\n    data = data.replace(/[^0-9]/g, \"\");\n    data == \"\" ? data : (data = Number(data));\n\n    this.setState({\n      radius: data,\n    });\n  }\n\n  toggleSwitch = () => {\n    this.setState({ strictBounds: !this.state.strictBounds });\n    alert(\"StrictBounds: \" + !this.state.strictBounds);\n  };\n\n  onTextSearch = () => {\n    let textSearchReq = {\n      query: this.state.query,\n      location: {\n        lat: 48.8815,\n        lng: 2.4444,\n      },\n      radius: this.state.radius,\n      countryCode: \"FR\",\n      language: \"fr\",\n      pageIndex: 1,\n      pageSize: 5,\n      hwPoiType: RNHMSSite.HwLocationType.RESTAURANT,\n      poiType: RNHMSSite.LocationType.GYM,\n      children: true,\n      countries: [\"en\", \"fr\", \"cn\", \"de\", \"ko\"],\n    };\n    RNHMSSite.textSearch(textSearchReq)\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  onDetailSearch = () => {\n    let detailSearchReq = {\n      siteId: \"2116626084C8358C26700F373E49B9EF\",\n      language: \"\",\n      children: false,\n    };\n    RNHMSSite.detailSearch(detailSearchReq)\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  onQuerySuggestion = () => {\n    let querySuggestionReq = {\n      ...defaultLocation,\n      query: this.state.query,\n      radius: this.state.radius,\n      countryCode: \"FR\",\n      language: \"fr\",\n      poiTypes: [\n        RNHMSSite.LocationType.GEOCODE,\n        RNHMSSite.LocationType.ADDRESS,\n        RNHMSSite.LocationType.ESTABLISHMENT,\n        RNHMSSite.LocationType.REGIONS,\n        RNHMSSite.LocationType.CITIES,\n      ],\n      strictBounds: this.state.strictBounds,\n      children: false,\n      countries: [\"fr\"]\n    };\n    RNHMSSite.querySuggestion(querySuggestionReq)\n      .then((res) => {\n        alert(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  onQueryAutocomplete = () => {\n    let queryAutocompleteReq = {\n      query: this.state.query,\n      location: {\n        lat: 48.8815,\n        lng: 2.4444,\n      },\n      radius: this.state.radius,\n      language: \"fr\",\n      children: false,\n    };\n    RNHMSSite.queryAutocomplete(queryAutocompleteReq)\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  onNearbySearch = () => {\n    let nearbySearchReq = {\n      query: this.state.query,\n      location: {\n        lat: 48.8815,\n        lng: 2.4444,\n      },\n      radius: this.state.radius,\n      hwPoiType: RNHMSSite.HwLocationType.RESTAURANT,\n      poiType: RNHMSSite.LocationType.GYM,\n      language: \"fr\",\n      pageIndex: 1,\n      pageSize: 5,\n      strictBounds: this.state.strictBounds,\n    };\n    RNHMSSite.nearbySearch(nearbySearchReq)\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  createWidget = () => {\n    let params = {\n      searchIntent: {\n        apiKey: \"<api_key>\",\n        hint: \"myhint\",\n      },\n\n      searchFilter: {\n        ...defaultLocation,\n        query: this.state.query,\n        radius: this.state.radius,\n        language: \"fr\",\n        countryCode: \"FR\",\n        poiTypes: [\n          RNHMSSite.LocationType.GEOCODE,\n          RNHMSSite.LocationType.ADDRESS,\n          RNHMSSite.LocationType.ESTABLISHMENT,\n          RNHMSSite.LocationType.REGIONS,\n          RNHMSSite.LocationType.CITIES,\n        ],\n        strictBounds: this.state.strictBounds,\n        children: false,\n      },\n    };\n\n    RNHMSSite.createWidget(params)\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(JSON.stringify(res));\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  enableLogger = () => {\n    RNHMSSite.enableLogger()\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(res);\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n\n  disableLogger = () => {\n    RNHMSSite.disableLogger()\n      .then((res) => {\n        alert(JSON.stringify(res));\n        console.log(res);\n      })\n      .catch((err) => {\n        alert(JSON.stringify(err));\n        console.log(JSON.stringify(err));\n      });\n  };\n}\n\nexport default App;\n"
  },
  {
    "path": "react-native-hms-site/example/LICENCE",
    "content": "Apache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"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.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"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.\n\n\"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).\n\n\"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.\n\n\"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.\"\n\n\"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.\n\n2. 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.\n\n3. 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.\n\n4. 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:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\nYou 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\nIf 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. \n\nYou 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.\n5. 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.\n\n6. 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.\n\n7. 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.\n\n8. 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.\n\n9. 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.\n\nEND OF TERMS AND CONDITIONS"
  },
  {
    "path": "react-native-hms-site/example/README.md",
    "content": "# React-Native HMS Account - Demo\n\n---\n\n## Contents\n\n- [Introduction](#1-introduction)\n- [Installation](#2-installation)\n- [Configuration](#3-configuration)\n- [Licensing and Terms](#4-licensing-and-terms)\n\n---\n\n## 1. Introduction\n\nThis demo project is an example to demonstrate the features of the **Huawei React-Native Site Kit** Plugin.\n\n---\n\n## 2. Installation\n\nBefore you get started, you must register as a HUAWEI developer and complete identity verification on the [HUAWEI Developer](https://developer.huawei.com/consumer/en/?ha_source=hms1) website. For details, please refer to [Register a HUAWEI ID](https://developer.huawei.com/consumer/en/doc/10104?ha_source=hms1).\n\n### Creating a Project in AppGallery Connect\nCreating an app in AppGallery Connect is required in order to communicate with the Huawei services. To create an app, perform the following steps:\n\n**Step 1.** Set an unique **Application ID** on the app level build gradle file located on **example/android/app/build.gradle**. You should also change the **package names** for the manifest files in the **/example/android/app/src/** directory to match with the Application ID. \n  ```gradle\n  <!-- Other configurations ... -->\n    defaultConfig {\n      // The Application ID here should match with the Package Name on the AppGalleryConnect\n      applicationId \"<Enter_Your_Package_Here>\"\n      <!-- Other configurations ... -->\n  }\n  ```\n  \n**Step 2.** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select **My projects**.\n\n**Step 3.** Select your project from the project list or create a new one by clicking the **Add Project** button.\n\n**Step 4.** Go to **Project Setting** > **General information**, and click **Add app**.\nIf an app exists in the project and you need to add a new one, expand the app selection area on the top of the page and click **Add app**.\n\n**Step 5.** On the **Add app** page, enter the **Application ID** you've defined before as the **Package Name** here, then fill the necessary fields and click **OK**.\n\n**Step 6:** Copy the **agconnect-service.json** file to the **android/app** directory of your React Native project.\n\n### Configuring the Signing Certificate Fingerprint\n\nA signing certificate fingerprint is used to verify the authenticity of an app when it attempts to access an HMS Core (APK) through the HMS SDK. Before using the HMS Core (APK), you must locally generate a signing certificate fingerprint and configure it in the **AppGallery Connect**. You can refer to 3rd and 4th steps of [Generating a Signing Certificate](https://developer.huawei.com/consumer/en/codelab/HMSPreparation/index.html?ha_source=hms1#2) codelab tutorial for the certificate generation. Perform the following steps after you have generated the certificate.\n\n**Step 1:** Sign in to [AppGallery Connect](https://developer.huawei.com/consumer/en/service/josp/agc/index.html?ha_source=hms1) and select your project from **My Projects**. Then go to **Project Setting** > **General information**. In the **App information** field, click the  icon next to SHA-256 certificate fingerprint, and enter the obtained **SHA-256 certificate fingerprint**.\n\n**Step 2:**  After completing the configuration, click **OK** to save the changes. (Check mark icon)\n\n**Step 3:** Enter the properties of the key you generated to the **build.gradle** file located on **example/android/app/build.gradle**.\n```\n signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n```\n**Step 4:** Check whether the **agconnect-services.json** file and signature file are placed in **android/app** directory of the React Native project.\n\n\n### Build & Run the project\n\n-  In *example* folder, run command as follows.\n\n```\nnpm run i\n```\n\n- Run the app by executing following command.\n\n```bash\nreact-native run-android\n```\n\n---\n\n## 3. Configuration\n\nUpdate *<api_key>* in App.js config attribute.\n\n---\n\n## 4. Licensing and Terms\n\nHuawei React-Native HMS Site - Demo is licensed under [Apache 2.0 license](LICENCE)\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\napply plugin: 'com.huawei.agconnect'\napply plugin: \"com.facebook.react\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"../../node_modules/react-native/react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation. If none specified and\n *   // \"index.android.js\" exists, it will be used. Otherwise \"index.js\" is\n *   // default. Can be overridden with ENTRY_FILE environment variable.\n *   entryFile: \"index.android.js\",\n *\n *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format\n *   bundleCommand: \"ram-bundle\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // whether to disable dev mode in custom build variants (by default only disabled in release)\n *   // for example: to disable dev mode in the staging build type (if configured)\n *   devDisabledInStaging: true,\n *   // The configuration property can be in the following formats\n *   //         'devDisabledIn${productFlavor}${buildType}'\n *   //         'devDisabledIn${buildType}'\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"],\n *\n *   // override which node gets called and with what additional arguments\n *   nodeExecutableAndArgs: [\"node\"],\n *\n *   // supply additional arguments to the packager\n *   extraPackagerArgs: []\n * ]\n */\n\nproject.ext.react = [\n    enableHermes: false,  // clean and rebuild if changing\n]\n\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\n/**\n * The preferred build flavor of JavaScriptCore.\n *\n * For example, to use the international variant, you can use:\n * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`\n *\n * The international variant includes ICU i18n library and necessary data\n * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that\n * give correct results when using with locales other than en-US.  Note that\n * this variant is about 6MiB larger per architecture than default.\n */\ndef jscFlavor = 'org.webkit:android-jsc:+'\n\n/**\n * Whether to enable the Hermes VM.\n *\n * This should be set on project.ext.react and mirrored here.  If it is not set\n * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode\n * and the benefits of using Hermes will therefore be sharply reduced.\n */\ndef enableHermes = project.ext.react.get(\"enableHermes\", false);\n\nandroid {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    defaultConfig {\n        applicationId \"<package_name>\"\n        minSdkVersion rootProject.ext.minSdkVersion\n        targetSdkVersion rootProject.ext.targetSdkVersion\n        versionCode 1\n        versionName \"1.0\"\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"\n        }\n    }\n    signingConfigs {\n        config {\n            storeFile file('<keystore_file>')\n            keyAlias '<key_alias>'\n            keyPassword '<key_password>'\n            storePassword '<keystore_password>'\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            signingConfig signingConfigs.config\n        }\n        release {\n            // Caution! In production, you need to generate your own keystore file.\n            // see https://facebook.github.io/react-native/docs/signed-apk-android.\n            signingConfig signingConfigs.config\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n\n    packagingOptions {\n        pickFirst \"lib/armeabi-v7a/libc++_shared.so\"\n        pickFirst \"lib/arm64-v8a/libc++_shared.so\"\n        pickFirst \"lib/x86/libc++_shared.so\"\n        pickFirst \"lib/x86_64/libc++_shared.so\"\n    }\n\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // https://developer.android.com/studio/build/configure-apk-splits.html\n            def versionCodes = [\"armeabi-v7a\": 1, \"x86\": 2, \"arm64-v8a\": 3, \"x86_64\": 4]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n\n        }\n    }\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    //noinspection GradleDynamicVersion\n    implementation \"com.facebook.react:react-native:+\"  // From node_modules\n    implementation \"androidx.swiperefreshlayout:swiperefreshlayout:1.0.0\"\n    debugImplementation(\"com.facebook.flipper:flipper:${FLIPPER_VERSION}\") {\n      exclude group:'com.facebook.fbjni'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n\n    debugImplementation(\"com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}\") {\n        exclude group:'com.facebook.flipper'\n    }\n\n    if (enableHermes) {\n        def hermesPath = \"../../node_modules/hermes-engine/android/\";\n        debugImplementation files(hermesPath + \"hermes-debug.aar\")\n        releaseImplementation files(hermesPath + \"hermes-release.aar\")\n    } else {\n        implementation jscFlavor\n    }\n}\n\n// Run this once to be able to run the application with BUCK\n// puts all compile dependencies into folder libs for BUCK to use\ntask copyDownloadableDepsToLibs(type: Copy) {\n    from configurations.implementation\n    into 'libs'\n}\n\napply from: file(\"../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesAppBuildGradle(project)\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/proguard-rules.pro",
    "content": "-ignorewarnings\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n-keep class com.hianalytics.android.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n-repackageclasses\n\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/src/debug/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>\n\n    <application android:usesCleartextTraffic=\"true\" tools:targetApi=\"28\" tools:ignore=\"GoogleAppIndexingWarning\" />\n</manifest>\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n  package=\"com.huawei.hms.rn.site.demo\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n      android:name=\".MainApplication\"\n      android:label=\"RNHmsSiteDemo\"\n      android:icon=\"@mipmap/ic_launcher\"\n      android:roundIcon=\"@mipmap/ic_launcher_round\"\n      android:allowBackup=\"false\"\n      android:theme=\"@style/AppTheme\">\n      <activity\n        android:name=\".MainActivity\"\n        android:label=\"RNHmsSiteDemo\"\n        android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize|uiMode\"\n        android:launchMode=\"singleTask\"\n        android:exported=\"true\"\n        android:windowSoftInputMode=\"adjustResize\">\n        <intent-filter>\n            <action android:name=\"android.intent.action.MAIN\" />\n            <category android:name=\"android.intent.category.LAUNCHER\" />\n        </intent-filter>\n      </activity>\n      <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/src/main/java/com/huawei/hms/rn/site/demo/MainActivity.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site.demo;\n\nimport com.facebook.react.ReactActivity;\n\npublic class MainActivity extends ReactActivity {\n\n    @Override\n    protected String getMainComponentName() {\n        return \"RNHmsSiteDemo\";\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/src/main/java/com/huawei/hms/rn/site/demo/MainApplication.java",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\npackage com.huawei.hms.rn.site.demo;\n\nimport android.app.Application;\nimport com.facebook.react.PackageList;\nimport com.facebook.react.ReactApplication;\nimport com.facebook.react.ReactNativeHost;\nimport com.facebook.react.ReactPackage;\nimport com.facebook.soloader.SoLoader;\nimport java.util.List;\n\npublic class MainApplication extends Application implements ReactApplication {\n\n    private final ReactNativeHost mReactNativeHost =\n        new ReactNativeHost(this) {\n            @Override\n            public boolean getUseDeveloperSupport() {\n                return BuildConfig.DEBUG;\n            }\n\n            @Override\n            protected List<ReactPackage> getPackages() {\n                List<ReactPackage> packages = new PackageList(this).getPackages();\n                return packages;\n            }\n\n            @Override\n            protected String getJSMainModuleName() {\n                return \"index\";\n            }\n        };\n\n    @Override\n    public ReactNativeHost getReactNativeHost() {\n        return mReactNativeHost;\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        SoLoader.init(this, false);\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/example/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"android:textColor\">#000000</item>\n    </style>\n\n</resources>\n"
  },
  {
    "path": "react-native-hms-site/example/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    ext {\n        buildToolsVersion = \"31.0.0\"\n        minSdkVersion = 21\n        compileSdkVersion = 33\n        targetSdkVersion = 33\n    }\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url 'https://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        classpath(\"com.android.tools.build:gradle:3.6.0\")\n        classpath 'com.huawei.agconnect:agcp:1.9.1.300'\n        classpath(\"com.facebook.react:react-native-gradle-plugin\")\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven {url 'https://developer.huawei.com/repo/'}\n    }\n}\n"
  },
  {
    "path": "react-native-hms-site/example/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-7.5-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "react-native-hms-site/example/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app's APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Automatically convert third-party libraries to use AndroidX\nandroid.enableJetifier=true\n\n# Version of flipper SDK to use with React Native\nFLIPPER_VERSION=0.99.0\norg.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m\n"
  },
  {
    "path": "react-native-hms-site/example/android/gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "react-native-hms-site/example/android/gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windows variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "react-native-hms-site/example/android/settings.gradle",
    "content": "rootProject.name = 'RNHmsSiteDemo'\napply from: file(\"../node_modules/@react-native-community/cli-platform-android/native_modules.gradle\"); applyNativeModulesSettingsGradle(settings)\ninclude ':app'\nincludeBuild('../node_modules/@react-native/gradle-plugin')\n"
  },
  {
    "path": "react-native-hms-site/example/app.json",
    "content": "{\n  \"name\": \"RNHmsSiteDemo\",\n  \"displayName\": \"RNHmsSiteDemo\"\n}"
  },
  {
    "path": "react-native-hms-site/example/babel.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  presets: ['module:metro-react-native-babel-preset'],\n};\n"
  },
  {
    "path": "react-native-hms-site/example/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport {AppRegistry} from 'react-native';\nimport App from './App';\nimport {name as appName} from './app.json';\n\nAppRegistry.registerComponent(appName, () => App);\n"
  },
  {
    "path": "react-native-hms-site/example/metro.config.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nmodule.exports = {\n  transformer: {\n    getTransformOptions: async () => ({\n      transform: {\n        experimentalImportSupport: false,\n        inlineRequires: false,\n      },\n    }),\n  },\n};\n"
  },
  {
    "path": "react-native-hms-site/example/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-site-demo\",\n  \"version\": \"6.5.1-302\",\n  \"private\": true,\n  \"scripts\": {\n    \"android\": \"react-native run-android\",\n    \"ios\": \"react-native run-ios\",\n    \"start\": \"react-native start\",\n    \"test\": \"jest\",\n    \"lint\": \"eslint .\"\n  },\n  \"dependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.9.0\",\n    \"@babel/runtime\": \"^7.9.2\",\n    \"@babel/traverse\": \"7.19.0\",\n    \"metro-react-native-babel-preset\": \"^0.59.0\"\n  },\n  \"jest\": {\n    \"preset\": \"react-native\"\n  }\n}"
  },
  {
    "path": "react-native-hms-site/example/src/styles.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n  input: {\n    textAlign: \"center\",\n    padding: 10,\n    width: \"100%\",\n    color: \"#000\",\n    fontSize: 20,\n    fontWeight: \"bold\",\n    fontFamily: \"Roboto\",\n    borderWidth: 1,\n    borderRadius: 5,\n    borderColor: \"#aaa\",\n  },\n  width35: {\n    width: \"35%\",\n  },\n\n  container: {\n    margin: 5,\n    flex: 1,\n    flexDirection: \"row\",\n  },\n\n  switchContainer: {\n    flex: 1,\n    margin: 5,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n  },\n\n  btnContainer: {\n    marginTop: 10,\n  },\n});\n"
  },
  {
    "path": "react-native-hms-site/package.json",
    "content": "{\n  \"name\": \"@hmscore/react-native-hms-site\",\n  \"title\": \"React Native HMS Site\",\n  \"description\": \"React Native HMS Site\",\n  \"version\": \"6.5.1-302\",\n  \"main\": \"src/index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/HMS-Core/hms-react-native-plugin.git\",\n    \"directory\": \"react-native-hms-site\"\n  },\n  \"homepage\": \"https://developer.huawei.com/consumer/en/doc/overview/HMS-Core-Plugin\",\n  \"license\": \"Apache-2.0\",\n  \"licenseFilename\": \"LICENCE\",\n  \"readmeFilename\": \"README.md\",\n  \"keywords\": [\n    \"react-native\",\n    \"react-native-site\",\n    \"huawei-site\",\n    \"hms-site\",\n    \"site\"\n  ],\n  \"files\": [\n    \"src\",\n    \"android\",\n    \"example\",\n    \"LICENCE\",\n    \"package.json\",\n    \"README.md\"\n  ],\n  \"peerDependencies\": {\n    \"react\": \">=16.6.0\",\n    \"react-native\": \">=0.60.0 <1.0.x\"\n  },\n  \"devDependencies\": {\n    \"react\": \"18.2.0\",\n    \"react-native\": \"0.72.0\"\n  }\n}"
  },
  {
    "path": "react-native-hms-site/src/constants/HwLocationType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst HwLocationType = {\n    EATING_DRINKING: \"EATING_DRINKING\",\n    RESTAURANT: \"RESTAURANT\",\n    AFRICAN_RESTAURANT: \"AFRICAN_RESTAURANT\",\n    AMERICAN_RESTAURANT: \"AMERICAN_RESTAURANT\",\n    AUSTRIAN_RESTAURANT: \"AUSTRIAN_RESTAURANT\",\n    BARBECUE_RESTAURANT: \"BARBECUE_RESTAURANT\",\n    BELGIAN_RESTAURANT: \"BELGIAN_RESTAURANT\",\n    BISTRO: \"BISTRO\",\n    BRITISH_RESTAURANT: \"BRITISH_RESTAURANT\",\n    CALIFORNIAN_RESTAURANT: \"CALIFORNIAN_RESTAURANT\",\n    CANADIAN_RESTAURANT: \"CANADIAN_RESTAURANT\",\n    CARIBBEAN_RESTAURANT: \"CARIBBEAN_RESTAURANT\",\n    CHINESE_RESTAURANT: \"CHINESE_RESTAURANT\",\n    CREPERIE: \"CREPERIE\",\n    DUTCH_RESTAURANT: \"DUTCH_RESTAURANT\",\n    FAST_FOOD_RESTAURANT: \"FAST_FOOD_RESTAURANT\",\n    FILIPINO_RESTAURANT: \"FILIPINO_RESTAURANT\",\n    FRENCH_RESTAURANT: \"FRENCH_RESTAURANT\",\n    GERMAN_RESTAURANT: \"GERMAN_RESTAURANT\",\n    GREEK_RESTAURANT: \"GREEK_RESTAURANT\",\n    GRILL: \"GRILL\",\n    HUNGARIAN_RESTAURANT: \"HUNGARIAN_RESTAURANT\",\n    INDIAN_RESTAURANT: \"INDIAN_RESTAURANT\",\n    INDONESIAN_RESTAURANT: \"INDONESIAN_RESTAURANT\",\n    ITALIAN_RESTAURANT: \"ITALIAN_RESTAURANT\",\n    JAPANESE_RESTAURANT: \"JAPANESE_RESTAURANT\",\n    JEWISH_RESTAURANT: \"JEWISH_RESTAURANT\",\n    KOREAN_RESTAURANT: \"KOREAN_RESTAURANT\",\n    LATIN_AMERICAN_RESTAURANT: \"LATIN_AMERICAN_RESTAURANT\",\n    LEBANESE_RESTAURANT: \"LEBANESE_RESTAURANT\",\n    MALTESE_RESTAURANT: \"MALTESE_RESTAURANT\",\n    MEDITERRANEAN_RESTAURANT: \"MEDITERRANEAN_RESTAURANT\",\n    MEXICAN_RESTAURANT: \"MEXICAN_RESTAURANT\",\n    MIDDLE_EASTERN_RESTAURANT: \"MIDDLE_EASTERN_RESTAURANT\",\n    ORIENTAL_RESTAURANT: \"ORIENTAL_RESTAURANT\",\n    PIZZA_RESTAURANT: \"PIZZA_RESTAURANT\",\n    POLISH_RESTAURANT: \"POLISH_RESTAURANT\",\n    PORTUGUESE_RESTAURANT: \"PORTUGUESE_RESTAURANT\",\n    PUB_FOOD: \"PUB_FOOD\",\n    RUSSIAN_RESTAURANT: \"RUSSIAN_RESTAURANT\",\n    ROADSIDE: \"ROADSIDE\",\n    SANDWICH_RESTAURANT: \"SANDWICH_RESTAURANT\",\n    SEAFOOD_RESTAURANT: \"SEAFOOD_RESTAURANT\",\n    SPANISH_RESTAURANT: \"SPANISH_RESTAURANT\",\n    STEAK_HOUSE: \"STEAK_HOUSE\",\n    SURINAMESE_RESTAURANT: \"SURINAMESE_RESTAURANT\",\n    SWISS_RESTAURANT: \"SWISS_RESTAURANT\",\n    THAI_RESTAURANT: \"THAI_RESTAURANT\",\n    TURKISH_RESTAURANT: \"TURKISH_RESTAURANT\",\n    VEGETARIAN_RESTAURANT: \"VEGETARIAN_RESTAURANT\",\n    VIETNAMESE_RESTAURANT: \"VIETNAMESE_RESTAURANT\",\n    HUNAN_RESTAURANT: \"HUNAN_RESTAURANT\",\n    SHANDONG_RESTAURANT: \"SHANDONG_RESTAURANT\",\n    GUANGDONG_RESTAURANT: \"GUANGDONG_RESTAURANT\",\n    SHANGHAI_RESTAURANT: \"SHANGHAI_RESTAURANT\",\n    SICHUAN_RESTAURANT: \"SICHUAN_RESTAURANT\",\n    DONGBEI_RESTAURANT: \"DONGBEI_RESTAURANT\",\n    HOT_POT_RESTAURANT: \"HOT_POT_RESTAURANT\",\n    TAIWANESE_RESTAURANT: \"TAIWANESE_RESTAURANT\",\n    WESTERN_RESTAURANT: \"WESTERN_RESTAURANT\",\n    PERUVIAN_RESTAURANT: \"PERUVIAN_RESTAURANT\",\n    ASIAN_RESTAURANT: \"ASIAN_RESTAURANT\",\n    CREOLE_CAJUN_RESTAURANT: \"CREOLE_CAJUN_RESTAURANT\",\n    SOUL_FOOD_RESTAURANT: \"SOUL_FOOD_RESTAURANT\",\n    IRISH_RESTAURANT: \"IRISH_RESTAURANT\",\n    JAMAICAN_RESTAURANT: \"JAMAICAN_RESTAURANT\",\n    KOSHER_RESTAURANT: \"KOSHER_RESTAURANT\",\n    CZECH_RESTAURANT: \"CZECH_RESTAURANT\",\n    HAMBURGER_RESTAURANT: \"HAMBURGER_RESTAURANT\",\n    CHICKEN_RESTAURANT: \"CHICKEN_RESTAURANT\",\n    FUSION_RESTAURANT: \"FUSION_RESTAURANT\",\n    BRAZILIAN_RESTAURANT: \"BRAZILIAN_RESTAURANT\",\n    INTERNATIONAL_RESTAURANT: \"INTERNATIONAL_RESTAURANT\",\n    MOROCCAN_RESTAURANT: \"MOROCCAN_RESTAURANT\",\n    ORGANIC_RESTAURANT: \"ORGANIC_RESTAURANT\",\n    TAPAS_RESTAURANT: \"TAPAS_RESTAURANT\",\n    ICE_CREAM_PARLOR: \"ICE_CREAM_PARLOR\",\n    DOUGHNUT_SHOP: \"DOUGHNUT_SHOP\",\n    SLOVAK_RESTAURANT: \"SLOVAK_RESTAURANT\",\n    AFGHAN_RESTAURANT: \"AFGHAN_RESTAURANT\",\n    ALGERIAN_RESTAURANT: \"ALGERIAN_RESTAURANT\",\n    ARABIAN_RESTAURANT: \"ARABIAN_RESTAURANT\",\n    ARGENTINEAN_RESTAURANT: \"ARGENTINEAN_RESTAURANT\",\n    ARMENIAN_RESTAURANT: \"ARMENIAN_RESTAURANT\",\n    AUSTRALIAN_RESTAURANT: \"AUSTRALIAN_RESTAURANT\",\n    BASQUE_RESTAURANT: \"BASQUE_RESTAURANT\",\n    BOLIVIAN_RESTAURANT: \"BOLIVIAN_RESTAURANT\",\n    BOSNIAN_RESTAURANT: \"BOSNIAN_RESTAURANT\",\n    BULGARIAN_RESTAURANT: \"BULGARIAN_RESTAURANT\",\n    BURMESE_RESTAURANT: \"BURMESE_RESTAURANT\",\n    CAMBODIAN_RESTAURANT: \"CAMBODIAN_RESTAURANT\",\n    CHILEAN_RESTAURANT: \"CHILEAN_RESTAURANT\",\n    COLOMBIAN_RESTAURANT: \"COLOMBIAN_RESTAURANT\",\n    CORSICAN_RESTAURANT: \"CORSICAN_RESTAURANT\",\n    CUBAN_RESTAURANT: \"CUBAN_RESTAURANT\",\n    CYPRIOT_RESTAURANT: \"CYPRIOT_RESTAURANT\",\n    DANISH_RESTAURANT: \"DANISH_RESTAURANT\",\n    DOMINICAN_RESTAURANT: \"DOMINICAN_RESTAURANT\",\n    EGYPTIAN_RESTAURANT: \"EGYPTIAN_RESTAURANT\",\n    ENGLISH_RESTAURANT: \"ENGLISH_RESTAURANT\",\n    ETHIOPIAN_RESTAURANT: \"ETHIOPIAN_RESTAURANT\",\n    FINNISH_RESTAURANT: \"FINNISH_RESTAURANT\",\n    IRANIAN_RESTAURANT: \"IRANIAN_RESTAURANT\",\n    ISRAELI_RESTAURANT: \"ISRAELI_RESTAURANT\",\n    LUXEMBOURGIAN_RESTAURANT: \"LUXEMBOURGIAN_RESTAURANT\",\n    MAGHRIB_RESTAURANT: \"MAGHRIB_RESTAURANT\",\n    MAURITIAN_RESTAURANT: \"MAURITIAN_RESTAURANT\",\n    MONGOLIAN_RESTAURANT: \"MONGOLIAN_RESTAURANT\",\n    NEPALESE_RESTAURANT: \"NEPALESE_RESTAURANT\",\n    NORWEGIAN_RESTAURANT: \"NORWEGIAN_RESTAURANT\",\n    SAVOYAN_RESTAURANT: \"SAVOYAN_RESTAURANT\",\n    SCANDINAVIAN_RESTAURANT: \"SCANDINAVIAN_RESTAURANT\",\n    SCOTTISH_RESTAURANT: \"SCOTTISH_RESTAURANT\",\n    SICILIAN_RESTAURANT: \"SICILIAN_RESTAURANT\",\n    SLAVIC_RESTAURANT: \"SLAVIC_RESTAURANT\",\n    SUDANESE_RESTAURANT: \"SUDANESE_RESTAURANT\",\n    SWEDISH_RESTAURANT: \"SWEDISH_RESTAURANT\",\n    SYRIAN_RESTAURANT: \"SYRIAN_RESTAURANT\",\n    TEPPANYAKKI_RESTAURANT: \"TEPPANYAKKI_RESTAURANT\",\n    TIBETAN_RESTAURANT: \"TIBETAN_RESTAURANT\",\n    TUNISIAN_RESTAURANT: \"TUNISIAN_RESTAURANT\",\n    URUGUAYAN_RESTAURANT: \"URUGUAYAN_RESTAURANT\",\n    VENEZUELAN_RESTAURANT: \"VENEZUELAN_RESTAURANT\",\n    WELSH_RESTAURANT: \"WELSH_RESTAURANT\",\n    PAKISTANI_RESTAURANT: \"PAKISTANI_RESTAURANT\",\n    POLYNESIAN_RESTAURANT: \"POLYNESIAN_RESTAURANT\",\n    PROVENÇAL_RESTAURANT: \"PROVENÇAL_RESTAURANT\",\n    ROMANIAN_RESTAURANT: \"ROMANIAN_RESTAURANT\",\n    EROTIC_RESTAURANT: \"EROTIC_RESTAURANT\",\n    EXOTIC_RESTAURANT: \"EXOTIC_RESTAURANT\",\n    FONDUE_RESTAURANT: \"FONDUE_RESTAURANT\",\n    MACROBIOTIC_RESTAURANT: \"MACROBIOTIC_RESTAURANT\",\n    MUSSEL_RESTAURANT: \"MUSSEL_RESTAURANT\",\n    SNACKS: \"SNACKS\",\n    SOUP_RESTAURANT: \"SOUP_RESTAURANT\",\n    BUFFET: \"BUFFET\",\n    SALAD_BAR: \"SALAD_BAR\",\n    TAKE_AWAY_RESTAURANT: \"TAKE_AWAY_RESTAURANT\",\n    BANQUET_ROOM: \"BANQUET_ROOM\",\n    CAFETERIA: \"CAFETERIA\",\n    SUSHI_RESTAURANT: \"SUSHI_RESTAURANT\",\n    YOGURT_JUICE_BAR: \"YOGURT_JUICE_BAR\",\n    CAFE_PUB: \"CAFE_PUB\",\n    CAFE: \"CAFE\",\n    PUB: \"PUB\",\n    INTERNET_CAFE: \"INTERNET_CAFE\",\n    TEA_HOUSE: \"TEA_HOUSE\",\n    COFFEE_SHOP: \"COFFEE_SHOP\",\n    MICROBREWERY_BEER_GARDEN: \"MICROBREWERY_BEER_GARDEN\",\n    RESTAURANT_AREA: \"RESTAURANT_AREA\",\n    SHOPPING: \"SHOPPING\",\n    DEPARTMENT_STORE: \"DEPARTMENT_STORE\",\n    SHOPPING_CENTER: \"SHOPPING_CENTER\",\n    MARKET: \"MARKET\",\n    INFORMAL_MARKET: \"INFORMAL_MARKET\",\n    PUBLIC_MARKET: \"PUBLIC_MARKET\",\n    FARMER_MARKET: \"FARMER_MARKET\",\n    SUPERMARKET_HYPERMARKET: \"SUPERMARKET_HYPERMARKET\",\n    FOOD_MARKET: \"FOOD_MARKET\",\n    CONVENIENCE_STORE: \"CONVENIENCE_STORE\",\n    GROCERY: \"GROCERY\",\n    GREENGROCERY: \"GREENGROCERY\",\n    SHOP: \"SHOP\",\n    BOOKSTORE: \"BOOKSTORE\",\n    CD_DVD_VIDEO_STORE: \"CD_DVD_VIDEO_STORE\",\n    CD_DVD_VIDEO_STORE_SUB: \"CD_DVD_VIDEO_STORE_SUB\",\n    CD_DVD_VIDEO_RENTAL_STORE: \"CD_DVD_VIDEO_RENTAL_STORE\",\n    CLOTHING_ACCESSORIES_STORE: \"CLOTHING_ACCESSORIES_STORE\",\n    DRY_CLEANERS: \"DRY_CLEANERS\",\n    ELECTRICAL_APPLIANCE_STORE: \"ELECTRICAL_APPLIANCE_STORE\",\n    PHOTOGRAPHIC_EQUIPMENT_STORE: \"PHOTOGRAPHIC_EQUIPMENT_STORE\",\n    CONSUMER_ELECTRONICS_STORE: \"CONSUMER_ELECTRONICS_STORE\",\n    COMPUTER_STORE: \"COMPUTER_STORE\",\n    OFFICE_EQUIPMENT_STORE: \"OFFICE_EQUIPMENT_STORE\",\n    ELECTRICAL_APPLIANCE_STORE_SUB: \"ELECTRICAL_APPLIANCE_STORE_SUB\",\n    MARINE_ELECTRONIC_EQUIPMENT_STORE: \"MARINE_ELECTRONIC_EQUIPMENT_STORE\",\n    MOBILE_PHONE_STORE: \"MOBILE_PHONE_STORE\",\n    REAL_ESTATE_AGENCY_SHOP: \"REAL_ESTATE_AGENCY_SHOP\",\n    OUTLETS: \"OUTLETS\",\n    FACTORY_OUTLETS: \"FACTORY_OUTLETS\",\n    RETAIL_OUTLETS: \"RETAIL_OUTLETS\",\n    FLORISTS: \"FLORISTS\",\n    FOOD_DRINK_SHOP: \"FOOD_DRINK_SHOP\",\n    BAKERY: \"BAKERY\",\n    MEAT_STORE: \"MEAT_STORE\",\n    FISH_STORE: \"FISH_STORE\",\n    WINE_SPIRITS_STORE: \"WINE_SPIRITS_STORE\",\n    DELICATESSEN_STORE: \"DELICATESSEN_STORE\",\n    SPECIALTY_FOOD_STORE: \"SPECIALTY_FOOD_STORE\",\n    GIFT_STORE: \"GIFT_STORE\",\n    HAIR_SALON_BARBERSHOP: \"HAIR_SALON_BARBERSHOP\",\n    HOUSEHOLD_APPLIANCE_STORE: \"HOUSEHOLD_APPLIANCE_STORE\",\n    CARPET_FLOOR_COVERING_STORE: \"CARPET_FLOOR_COVERING_STORE\",\n    CURTAIN_TEXTILE_STORE: \"CURTAIN_TEXTILE_STORE\",\n    DO_IT_YOURSELF_CENTERS: \"DO_IT_YOURSELF_CENTERS\",\n    FURNITURE_ACCESSORIES_STORE: \"FURNITURE_ACCESSORIES_STORE\",\n    GARDENING_CERVICE_CENTER: \"GARDENING_CERVICE_CENTER\",\n    KITCHEN_AND_SANITATION_STORE: \"KITCHEN_AND_SANITATION_STORE\",\n    LIGHTING_STORE: \"LIGHTING_STORE\",\n    PAINTING_DECORATING_STORE: \"PAINTING_DECORATING_STORE\",\n    GLASS_WINDOW_STORE: \"GLASS_WINDOW_STORE\",\n    JEWELRY_CLOCK_AND_WATCH_SHOP: \"JEWELRY_CLOCK_AND_WATCH_SHOP\",\n    NEWSAGENTS_AND_TOBACCONISTS: \"NEWSAGENTS_AND_TOBACCONISTS\",\n    OPTICIANS: \"OPTICIANS\",\n    SPORTS_STORE: \"SPORTS_STORE\",\n    TOYS_AND_GAMES_STORE: \"TOYS_AND_GAMES_STORE\",\n    TRAVEL_AGENCY: \"TRAVEL_AGENCY\",\n    CONSTRUCTION_MATERIAL_EQUIPMENT_SHOP: \"CONSTRUCTION_MATERIAL_EQUIPMENT_SHOP\",\n    MEDICAL_SUPPLIES_EQUIPMENT_STORE: \"MEDICAL_SUPPLIES_EQUIPMENT_STORE\",\n    LAUNDRY: \"LAUNDRY\",\n    PHOTO_SHOP: \"PHOTO_SHOP\",\n    PHOTOCOPY_SHOP: \"PHOTOCOPY_SHOP\",\n    PET_STORE: \"PET_STORE\",\n    ANIMAL_SERVICE_STORE: \"ANIMAL_SERVICE_STORE\",\n    PET_SUPPLY_STORE: \"PET_SUPPLY_STORE\",\n    ANTIQUE_ART_STORE: \"ANTIQUE_ART_STORE\",\n    BEAUTY_SUPPLY_SHOP: \"BEAUTY_SUPPLY_SHOP\",\n    DRUGSTORE: \"DRUGSTORE\",\n    HOBBY_SHOP: \"HOBBY_SHOP\",\n    FURNITURE_STORE: \"FURNITURE_STORE\",\n    GLASSWARE_CERAMIC_SHOP: \"GLASSWARE_CERAMIC_SHOP\",\n    LOCAL_SPECIALTY_STORE: \"LOCAL_SPECIALTY_STORE\",\n    RECYCLING_SHOP: \"RECYCLING_SHOP\",\n    BAGS_LEATHERWEAR_SHOP: \"BAGS_LEATHERWEAR_SHOP\",\n    MUSICAL_INSTRUMENT_STORE: \"MUSICAL_INSTRUMENT_STORE\",\n    SHOPPING_SERVICE_CENTER: \"SHOPPING_SERVICE_CENTER\",\n    WAREHOUSE_SUPERMARKET: \"WAREHOUSE_SUPERMARKET\",\n    BEAUTY_SALON: \"BEAUTY_SALON\",\n    NAIL_SALON: \"NAIL_SALON\",\n    HARDWARE_STORE: \"HARDWARE_STORE\",\n    PAWN_SHOP: \"PAWN_SHOP\",\n    LOTTERY_SHOP: \"LOTTERY_SHOP\",\n    BETTING_STATION: \"BETTING_STATION\",\n    AGRICULTURAL_SUPPLY_STORE: \"AGRICULTURAL_SUPPLY_STORE\",\n    STAMP_SHOP: \"STAMP_SHOP\",\n    DRIVE_THROUGH_BOTTLE_SHOP: \"DRIVE_THROUGH_BOTTLE_SHOP\",\n    TAILOR_SHOP: \"TAILOR_SHOP\",\n    SECURITY_STORE: \"SECURITY_STORE\",\n    VARIETY_STORE: \"VARIETY_STORE\",\n    CHRISTMAS_HOLIDAY_STORE: \"CHRISTMAS_HOLIDAY_STORE\",\n    BOATING_EQUIPMENT_ACCESSORIES_STORE: \"BOATING_EQUIPMENT_ACCESSORIES_STORE\",\n    SPECIALTY_STORE: \"SPECIALTY_STORE\",\n    OFFICE_SUPPLY_SERVICES_STORE: \"OFFICE_SUPPLY_SERVICES_STORE\",\n    LEISURE: \"LEISURE\",\n    ENTERTAINMENT_PLACE: \"ENTERTAINMENT_PLACE\",\n    AMUSEMENT_PARK: \"AMUSEMENT_PARK\",\n    AMUSEMENT_ARCADE: \"AMUSEMENT_ARCADE\",\n    AMUSEMENT_PLACE: \"AMUSEMENT_PLACE\",\n    PARK_AND_RECREATION_AREA: \"PARK_AND_RECREATION_AREA\",\n    PARK: \"PARK\",\n    RECREATION_AREA: \"RECREATION_AREA\",\n    BATTLEFIELD: \"BATTLEFIELD\",\n    CEMETERY: \"CEMETERY\",\n    HISTORIC_SITE: \"HISTORIC_SITE\",\n    HISTORICAL_PARK: \"HISTORICAL_PARK\",\n    LAKESHORE: \"LAKESHORE\",\n    MEMORIAL: \"MEMORIAL\",\n    PARKWAY: \"PARKWAY\",\n    PRESERVED_AREA: \"PRESERVED_AREA\",\n    SEASHORE: \"SEASHORE\",\n    WILDERNESS_AREA: \"WILDERNESS_AREA\",\n    FOREST_AREA: \"FOREST_AREA\",\n    FISHING_HUNTING_AREA: \"FISHING_HUNTING_AREA\",\n    FAIRGROUND: \"FAIRGROUND\",\n    WINTER_SPORT_AREA: \"WINTER_SPORT_AREA\",\n    SKI_RESORT: \"SKI_RESORT\",\n    NATURAL_ATTRACTION: \"NATURAL_ATTRACTION\",\n    BOAT_LAUNCHING_RAMP: \"BOAT_LAUNCHING_RAMP\",\n    PICNIC_AREA: \"PICNIC_AREA\",\n    SCENIC_RIVER_AREA: \"SCENIC_RIVER_AREA\",\n    PROTECTED_AREA: \"PROTECTED_AREA\",\n    ZOO_ARBORETA_BOTANICAL_GARDEN: \"ZOO_ARBORETA_BOTANICAL_GARDEN\",\n    ARBORETA_BOTANICAL_GARDENS: \"ARBORETA_BOTANICAL_GARDENS\",\n    ZOO: \"ZOO\",\n    AQUATIC_ZOO_MARINE_PARK: \"AQUATIC_ZOO_MARINE_PARK\",\n    WILDLIFE_PARK: \"WILDLIFE_PARK\",\n    LEISURE_CENTER: \"LEISURE_CENTER\",\n    SAUNA_SOLARIUM_MASSAGE_CENTER: \"SAUNA_SOLARIUM_MASSAGE_CENTER\",\n    SNOOKER_POOL_BILLIARD_HALL: \"SNOOKER_POOL_BILLIARD_HALL\",\n    SPA: \"SPA\",\n    FLYING_CLUB: \"FLYING_CLUB\",\n    NIGHTLIFE: \"NIGHTLIFE\",\n    NIGHT_CLUB: \"NIGHT_CLUB\",\n    PRIVATE_CLUB: \"PRIVATE_CLUB\",\n    JAZZ_CLUB: \"JAZZ_CLUB\",\n    COMEDY_CLUB: \"COMEDY_CLUB\",\n    KARAOKE_CLUB: \"KARAOKE_CLUB\",\n    BAR: \"BAR\",\n    COCKTAIL_BAR: \"COCKTAIL_BAR\",\n    WINE_BAR: \"WINE_BAR\",\n    ENTERTAINMENT_CABARET_LIVE: \"ENTERTAINMENT_CABARET_LIVE\",\n    DISCOTHEQUE: \"DISCOTHEQUE\",\n    DANCING_CLUB: \"DANCING_CLUB\",\n    BILLIARDS_POOL_HALL: \"BILLIARDS_POOL_HALL\",\n    VIDEO_ARCADE_GAMING_ROOM: \"VIDEO_ARCADE_GAMING_ROOM\",\n    MUSEUM: \"MUSEUM\",\n    SCIENCE_MUSEUM: \"SCIENCE_MUSEUM\",\n    CHILDRENS_MUSEUM: \"CHILDRENS_MUSEUM\",\n    HISTORY_MUSEUM: \"HISTORY_MUSEUM\",\n    ART_MUSEUM: \"ART_MUSEUM\",\n    LIBRARY: \"LIBRARY\",\n    THEATER: \"THEATER\",\n    THEATER_SUB: \"THEATER_SUB\",\n    CONCERT_HALL: \"CONCERT_HALL\",\n    MUSIC_CENTER: \"MUSIC_CENTER\",\n    OPERA: \"OPERA\",\n    CABARET: \"CABARET\",\n    AMPHITHEATER: \"AMPHITHEATER\",\n    DINNER_THEATER: \"DINNER_THEATER\",\n    CINEMA: \"CINEMA\",\n    CINEMA_SUB: \"CINEMA_SUB\",\n    DRIVE_IN_CINEMA: \"DRIVE_IN_CINEMA\",\n    CASINO: \"CASINO\",\n    CLUB_ASSOCIATION: \"CLUB_ASSOCIATION\",\n    BEACH_CLUB: \"BEACH_CLUB\",\n    HOCKEY_CLUB: \"HOCKEY_CLUB\",\n    CAR_CLUB: \"CAR_CLUB\",\n    TRAIL_SYSTEM: \"TRAIL_SYSTEM\",\n    MOUNTAIN_BIKE_TRAIL: \"MOUNTAIN_BIKE_TRAIL\",\n    ADVENTURE_VEHICLE_TRAIL: \"ADVENTURE_VEHICLE_TRAIL\",\n    HIKING_TRAIL: \"HIKING_TRAIL\",\n    HORSE_RIDING_TRAIL: \"HORSE_RIDING_TRAIL\",\n    ROCK_CLIMBING_TRAIL: \"ROCK_CLIMBING_TRAIL\",\n    SKI_LIFT: \"SKI_LIFT\",\n    COMMUNITY_CENTER: \"COMMUNITY_CENTER\",\n    CULTURAL_CENTER: \"CULTURAL_CENTER\",\n    GALLERY: \"GALLERY\",\n    MARINA: \"MARINA\",\n    MARINA_SUB: \"MARINA_SUB\",\n    YACHT_BASIN: \"YACHT_BASIN\",\n    WINERY: \"WINERY\",\n    SPORT: \"SPORT\",\n    SPORTS_CENTER: \"SPORTS_CENTER\",\n    SPORTS_CENTER_SUB: \"SPORTS_CENTER_SUB\",\n    FITNESS_CLUB_CENTER: \"FITNESS_CLUB_CENTER\",\n    HORSE_RIDING_FIELD: \"HORSE_RIDING_FIELD\",\n    THEMED_SPORTS_HALL: \"THEMED_SPORTS_HALL\",\n    SQUASH_COURT: \"SQUASH_COURT\",\n    BOWLING_FIELD: \"BOWLING_FIELD\",\n    SHOOTING_RANGE: \"SHOOTING_RANGE\",\n    STADIUM: \"STADIUM\",\n    ATHLETIC_STADIUM: \"ATHLETIC_STADIUM\",\n    CRICKET_GROUND: \"CRICKET_GROUND\",\n    SOCCER_FIELD: \"SOCCER_FIELD\",\n    HORSE_RACING_TRACK: \"HORSE_RACING_TRACK\",\n    MULTIPURPOSE_STADIUM: \"MULTIPURPOSE_STADIUM\",\n    RUGBY_GROUND: \"RUGBY_GROUND\",\n    ICE_HOCKEY_RINK: \"ICE_HOCKEY_RINK\",\n    BASEBALL_FIELD: \"BASEBALL_FIELD\",\n    FOOTBALL_FIELD: \"FOOTBALL_FIELD\",\n    MOTORSPORT_VENUE: \"MOTORSPORT_VENUE\",\n    BASKETBALL_COURT: \"BASKETBALL_COURT\",\n    RACE_TRACK: \"RACE_TRACK\",\n    NETBALL_COURT: \"NETBALL_COURT\",\n    HOCKEY_FIELD: \"HOCKEY_FIELD\",\n    BADMINTON_COURT: \"BADMINTON_COURT\",\n    TABLE_TENNIS_HALL: \"TABLE_TENNIS_HALL\",\n    GOLF_COURSE: \"GOLF_COURSE\",\n    ICE_SKATING_RINK: \"ICE_SKATING_RINK\",\n    SWIMMING_POOL: \"SWIMMING_POOL\",\n    TENNIS_COURT: \"TENNIS_COURT\",\n    WATER_SPORTS_CENTER: \"WATER_SPORTS_CENTER\",\n    DIVING_CENTER: \"DIVING_CENTER\",\n    TOURISM: \"TOURISM\",\n    TOURIST_INFORMATION_OFFICE: \"TOURIST_INFORMATION_OFFICE\",\n    IMPORTANT_TOURIST_ATTRACTION: \"IMPORTANT_TOURIST_ATTRACTION\",\n    BUILDING: \"BUILDING\",\n    MONUMENT: \"MONUMENT\",\n    NATURAL_ATTRACTION_TOURIST: \"NATURAL_ATTRACTION_TOURIST\",\n    OBSERVATORY: \"OBSERVATORY\",\n    PLANETARIUM: \"PLANETARIUM\",\n    DAM: \"DAM\",\n    TUNNEL: \"TUNNEL\",\n    TOWER: \"TOWER\",\n    BRIDGE: \"BRIDGE\",\n    MAUSOLEUM_GRAVE: \"MAUSOLEUM_GRAVE\",\n    ARCH: \"ARCH\",\n    STATUE: \"STATUE\",\n    WATER_HOLE: \"WATER_HOLE\",\n    WINERY_TOURIST: \"WINERY_TOURIST\",\n    PLACE_OF_WORSHIP: \"PLACE_OF_WORSHIP\",\n    CHURCH: \"CHURCH\",\n    MOSQUE: \"MOSQUE\",\n    SYNAGOGUE: \"SYNAGOGUE\",\n    TEMPLE: \"TEMPLE\",\n    GURUDWARA: \"GURUDWARA\",\n    ASHRAM: \"ASHRAM\",\n    PAGODA: \"PAGODA\",\n    SHINTO_SHRINE: \"SHINTO_SHRINE\",\n    HINDU_TEMPLE: \"HINDU_TEMPLE\",\n    BUDDHIST_TEMPLE: \"BUDDHIST_TEMPLE\",\n    JAIN_TEMPLE: \"JAIN_TEMPLE\",\n    MORMON_CHURCH: \"MORMON_CHURCH\",\n    DHARMA_TEMPLE: \"DHARMA_TEMPLE\",\n    BEACH: \"BEACH\",\n    ADVENTURE_SPORTS_VENUE: \"ADVENTURE_SPORTS_VENUE\",\n    OBSERVATION_DECK: \"OBSERVATION_DECK\",\n    HEALTH_CARE: \"HEALTH_CARE\",\n    HOSPITAL_POLYCLINIC: \"HOSPITAL_POLYCLINIC\",\n    GENERAL_HOSPITAL: \"GENERAL_HOSPITAL\",\n    SPECIALIZED_HOSPITAL: \"SPECIALIZED_HOSPITAL\",\n    CHINESE_MEDICINE_HOSPITAL: \"CHINESE_MEDICINE_HOSPITAL\",\n    HOSPITAL_FOR_WOMEN_AND_CHILDREN: \"HOSPITAL_FOR_WOMEN_AND_CHILDREN\",\n    HEALTHCARE_SERVICE_CENTER: \"HEALTHCARE_SERVICE_CENTER\",\n    PERSONAL_SERVICE_CENTER: \"PERSONAL_SERVICE_CENTER\",\n    PERSONAL_CARE_INSTITUTION: \"PERSONAL_CARE_INSTITUTION\",\n    BLOOD_BANK: \"BLOOD_BANK\",\n    AMBULANCE_UNIT: \"AMBULANCE_UNIT\",\n    NURSING_HOME: \"NURSING_HOME\",\n    PHARMACY: \"PHARMACY\",\n    DENTAL_CLINIC: \"DENTAL_CLINIC\",\n    EMERGENCY_ROOM: \"EMERGENCY_ROOM\",\n    MEDICAL_CLINIC: \"MEDICAL_CLINIC\",\n    PHYSIOTHERAPY_CLINIC: \"PHYSIOTHERAPY_CLINIC\",\n    GENERAL_CLINIC: \"GENERAL_CLINIC\",\n    SPECIALIST_CLINIC: \"SPECIALIST_CLINIC\",\n    VETERINARY_CLINIC: \"VETERINARY_CLINIC\",\n    LODGING_LIVING_ACCOMMODATION: \"LODGING_LIVING_ACCOMMODATION\",\n    RESIDENTIAL_ACCOMMODATION: \"RESIDENTIAL_ACCOMMODATION\",\n    RESIDENTIAL_ESTATE: \"RESIDENTIAL_ESTATE\",\n    FLATS_APARTMENT_COMPLEX: \"FLATS_APARTMENT_COMPLEX\",\n    TOWNHOUSE_COMPLEX: \"TOWNHOUSE_COMPLEX\",\n    RETIREMENT_COMMUNITY: \"RETIREMENT_COMMUNITY\",\n    CONDOMINIUM_COMPLEX: \"CONDOMINIUM_COMPLEX\",\n    HOTEL_MOTEL: \"HOTEL_MOTEL\",\n    BED_BREAKFAST_GUEST_HOUSES: \"BED_BREAKFAST_GUEST_HOUSES\",\n    HOTEL: \"HOTEL\",\n    UNRATED_HOTEL: \"UNRATED_HOTEL\",\n    HOTELS_WITH_LESS_THAN_TWO_STARS: \"HOTELS_WITH_LESS_THAN_TWO_STARS\",\n    THREE_STAR_HOTEL: \"THREE_STAR_HOTEL\",\n    FOUR_STAR_HOTEL: \"FOUR_STAR_HOTEL\",\n    FIVE_STAR_HOTEL: \"FIVE_STAR_HOTEL\",\n    HOSTEL: \"HOSTEL\",\n    RESORT: \"RESORT\",\n    MOTEL: \"MOTEL\",\n    CABINS_LODGES: \"CABINS_LODGES\",\n    REST_CAMPS: \"REST_CAMPS\",\n    HOLIDAY_HOUSE_RENTAL: \"HOLIDAY_HOUSE_RENTAL\",\n    COTTAGE: \"COTTAGE\",\n    VILLA: \"VILLA\",\n    BUNGALOW: \"BUNGALOW\",\n    CHALET: \"CHALET\",\n    APARTMENT: \"APARTMENT\",\n    CAMPING_GROUND: \"CAMPING_GROUND\",\n    RECREATIONAL_SITE: \"RECREATIONAL_SITE\",\n    CARAVAN_SITE: \"CARAVAN_SITE\",\n    TRANSPORT: \"TRANSPORT\",\n    AIRPORT: \"AIRPORT\",\n    PUBLIC_AUTHORITY: \"PUBLIC_AUTHORITY\",\n    PRIVATE_AUTHORITY: \"PRIVATE_AUTHORITY\",\n    MILITARY_AUTHORITY: \"MILITARY_AUTHORITY\",\n    AIRFIELD: \"AIRFIELD\",\n    TERMINAL: \"TERMINAL\",\n    RAILWAY_STATION: \"RAILWAY_STATION\",\n    INTERNATIONAL_RAILWAY_STATION: \"INTERNATIONAL_RAILWAY_STATION\",\n    NATIONAL_RAILWAY_STATION: \"NATIONAL_RAILWAY_STATION\",\n    INTERCITY_RAILWAY_STATION: \"INTERCITY_RAILWAY_STATION\",\n    METRO: \"METRO\",\n    RAILWAY_SIDING: \"RAILWAY_SIDING\",\n    PUBLIC_TRANSPORT_STOP: \"PUBLIC_TRANSPORT_STOP\",\n    BUS_STOP: \"BUS_STOP\",\n    TAXI_STAND: \"TAXI_STAND\",\n    TRAM_STOP: \"TRAM_STOP\",\n    COACH_STATION: \"COACH_STATION\",\n    FERRY_TERMINAL: \"FERRY_TERMINAL\",\n    BOAT_FERRY: \"BOAT_FERRY\",\n    RAIL_FERRY: \"RAIL_FERRY\",\n    DOCK: \"DOCK\",\n    PORT_WAREHOUSE: \"PORT_WAREHOUSE\",\n    HELIPAD_HELICOPTER_LANDING: \"HELIPAD_HELICOPTER_LANDING\",\n    ACCESS_GATEWAY: \"ACCESS_GATEWAY\",\n    AIRLINE_ACCESS: \"AIRLINE_ACCESS\",\n    STATION_ACCESS: \"STATION_ACCESS\",\n    SECURITY_GATE: \"SECURITY_GATE\",\n    HIGHWAY_EXIT: \"HIGHWAY_EXIT\",\n    DELIVERY_ENTRANCE: \"DELIVERY_ENTRANCE\",\n    HIGHWAY__ENTRANCE: \"HIGHWAY__ENTRANCE\",\n    BORDER_POST: \"BORDER_POST\",\n    MOUNTAIN_PASS: \"MOUNTAIN_PASS\",\n    TRANSPORT__CENTER: \"TRANSPORT__CENTER\",\n    CARGO_CENTER: \"CARGO_CENTER\",\n    LOADING_ZONE: \"LOADING_ZONE\",\n    NAMED_INTERSECTION: \"NAMED_INTERSECTION\",\n    TRAFFIC: \"TRAFFIC\",\n    TRAFFIC_SIGNAL: \"TRAFFIC_SIGNAL\",\n    TRAFFIC_LIGHT: \"TRAFFIC_LIGHT\",\n    TRAFFIC_SIGN: \"TRAFFIC_SIGN\",\n    GOVERNMENT_PUBLIC_SERVICE: \"GOVERNMENT_PUBLIC_SERVICE\",\n    CITY_CENTER: \"CITY_CENTER\",\n    GOVERNMENT_OFFICE: \"GOVERNMENT_OFFICE\",\n    ORDER_9_AREA_GOVERNMENT_OFFICE: \"ORDER_9_AREA_GOVERNMENT_OFFICE\",\n    ORDER_8_AREA_GOVERNMENT_OFFICE: \"ORDER_8_AREA_GOVERNMENT_OFFICE\",\n    ORDER_7_AREA_GOVERNMENT_OFFICE: \"ORDER_7_AREA_GOVERNMENT_OFFICE\",\n    ORDER_6_AREA_GOVERNMENT_OFFICE: \"ORDER_6_AREA_GOVERNMENT_OFFICE\",\n    ORDER_5_AREA_GOVERNMENT_OFFICE: \"ORDER_5_AREA_GOVERNMENT_OFFICE\",\n    ORDER_4_AREA_GOVERNMENT_OFFICE: \"ORDER_4_AREA_GOVERNMENT_OFFICE\",\n    ORDER_3_AREA_GOVERNMENT_OFFICE: \"ORDER_3_AREA_GOVERNMENT_OFFICE\",\n    ORDER_2_AREA_GOVERNMENT_OFFICE: \"ORDER_2_AREA_GOVERNMENT_OFFICE\",\n    ORDER_1_AREA_GOVERNMENT_OFFICE: \"ORDER_1_AREA_GOVERNMENT_OFFICE\",\n    NATIONAL_ORGANIZATION: \"NATIONAL_ORGANIZATION\",\n    INTERNATIONAL_ORGANIZATION: \"INTERNATIONAL_ORGANIZATION\",\n    CITY_HALL: \"CITY_HALL\",\n    COUNTY_COUNCIL: \"COUNTY_COUNCIL\",\n    CIVIC_COMMUNITY_CENTER: \"CIVIC_COMMUNITY_CENTER\",\n    TOWN_GOVERNMENT: \"TOWN_GOVERNMENT\",\n    FIRE_STATION_BRIGADE: \"FIRE_STATION_BRIGADE\",\n    POLICE_STATION: \"POLICE_STATION\",\n    ORDER_9_AREA_POLICE_STATION: \"ORDER_9_AREA_POLICE_STATION\",\n    ORDER_8_AREA_POLICE_STATION: \"ORDER_8_AREA_POLICE_STATION\",\n    ORDER_1_AREA_POLICE_STATION: \"ORDER_1_AREA_POLICE_STATION\",\n    POST_OFFICE: \"POST_OFFICE\",\n    GENERAL_POST_OFFICE: \"GENERAL_POST_OFFICE\",\n    LOCAL_POST_OFFICE: \"LOCAL_POST_OFFICE\",\n    COURTHOUSE: \"COURTHOUSE\",\n    EMBASSY: \"EMBASSY\",\n    TRAFFIC_CONTROL_DEPARTMENT: \"TRAFFIC_CONTROL_DEPARTMENT\",\n    TRAFFIC_MANAGEMENT_BUREAU: \"TRAFFIC_MANAGEMENT_BUREAU\",\n    MILITARY_BASE: \"MILITARY_BASE\",\n    EDUCATION_INSTITUTION: \"EDUCATION_INSTITUTION\",\n    COLLEGE_UNIVERSITY: \"COLLEGE_UNIVERSITY\",\n    JUNIOR_COLLEGE_COMMUNITY_COLLEGE: \"JUNIOR_COLLEGE_COMMUNITY_COLLEGE\",\n    CHILD_CARE_FACILITY: \"CHILD_CARE_FACILITY\",\n    PRESCHOOL: \"PRESCHOOL\",\n    PRIMARY_SCHOOL: \"PRIMARY_SCHOOL\",\n    HIGH_SCHOOL: \"HIGH_SCHOOL\",\n    SENIOR_HIGH_SCHOOL: \"SENIOR_HIGH_SCHOOL\",\n    VOCATIONAL_TRAINING_SCHOOL: \"VOCATIONAL_TRAINING_SCHOOL\",\n    TECHNICAL_SCHOOL: \"TECHNICAL_SCHOOL\",\n    LANGUAGE_SCHOOL: \"LANGUAGE_SCHOOL\",\n    SPORTS_SCHOOL: \"SPORTS_SCHOOL\",\n    ART_SCHOOL: \"ART_SCHOOL\",\n    SPECIAL_SCHOOL: \"SPECIAL_SCHOOL\",\n    MIDDLE_SCHOOL: \"MIDDLE_SCHOOL\",\n    CULINARY_SCHOOL: \"CULINARY_SCHOOL\",\n    DRIVING_SCHOOL: \"DRIVING_SCHOOL\",\n    DANCE_STUDIO_SCHOOL: \"DANCE_STUDIO_SCHOOL\",\n    SCHOOL: \"SCHOOL\",\n    PUBLIC_AMENITY: \"PUBLIC_AMENITY\",\n    PASSENGER_TRANSPORT_TICKET_OFFICE: \"PASSENGER_TRANSPORT_TICKET_OFFICE\",\n    PEDESTRIAN_SUBWAY: \"PEDESTRIAN_SUBWAY\",\n    PUBLIC_CALL_BOX: \"PUBLIC_CALL_BOX\",\n    TOILET: \"TOILET\",\n    ROAD_RESCUE_POINT: \"ROAD_RESCUE_POINT\",\n    PUBLIC_RESTROOM: \"PUBLIC_RESTROOM\",\n    ORGANIZATION: \"ORGANIZATION\",\n    WELFARE_ORGANIZATION: \"WELFARE_ORGANIZATION\",\n    NON_GOVERNMENTAL_ORGANIZATION: \"NON_GOVERNMENTAL_ORGANIZATION\",\n    NATIVE_RESERVATION: \"NATIVE_RESERVATION\",\n    PRISON: \"PRISON\",\n    EMERGENCY_ASSEMBLY_POINT: \"EMERGENCY_ASSEMBLY_POINT\",\n    TSUNAMI_ASSEMBLY_POINT: \"TSUNAMI_ASSEMBLY_POINT\",\n    FIRE_ASSEMBLY_POINT: \"FIRE_ASSEMBLY_POINT\",\n    EARTHQUAKE_ASSEMBLY_POINT_: \"EARTHQUAKE_ASSEMBLY_POINT_\",\n    VOLCANIC_ERUPTION_ASSEMBLY_POINT: \"VOLCANIC_ERUPTION_ASSEMBLY_POINT\",\n    FLOOD_ASSEMBLY_POINT: \"FLOOD_ASSEMBLY_POINT\",\n    BUSINESS: \"BUSINESS\",\n    BANK: \"BANK\",\n    AUTOMATIC_TELLER_MACHINE: \"AUTOMATIC_TELLER_MACHINE\",\n    COMMERCIAL_BUILDING: \"COMMERCIAL_BUILDING\",\n    BUSINESS_PARK: \"BUSINESS_PARK\",\n    EXHIBITION_CONVENTION_CENTER: \"EXHIBITION_CONVENTION_CENTER\",\n    INDUSTRIAL_BUILDING: \"INDUSTRIAL_BUILDING\",\n    MANUFACTURING_FACTORY: \"MANUFACTURING_FACTORY\",\n    MEDIA_COMPANY: \"MEDIA_COMPANY\",\n    RESEARCH_INSTITUTE: \"RESEARCH_INSTITUTE\",\n    EXCHANGE: \"EXCHANGE\",\n    STOCK_EXCHANGE: \"STOCK_EXCHANGE\",\n    GOLD_EXCHANGE: \"GOLD_EXCHANGE\",\n    CURRENCY_EXCHANGE: \"CURRENCY_EXCHANGE\",\n    COURIER_DROP_BOX: \"COURIER_DROP_BOX\",\n    AGRICULTURE_BUSINESS: \"AGRICULTURE_BUSINESS\",\n    HORTICULTURE_COMPANY: \"HORTICULTURE_COMPANY\",\n    PRODUCER_COMPANY: \"PRODUCER_COMPANY\",\n    FARM: \"FARM\",\n    EMERGENCY_MEDICAL_SERVICE_CENTER: \"EMERGENCY_MEDICAL_SERVICE_CENTER\",\n    COMPANY: \"COMPANY\",\n    SERVICE_COMPANY: \"SERVICE_COMPANY\",\n    ADVERTISING_AND_MARKETING_COMPANY: \"ADVERTISING_AND_MARKETING_COMPANY\",\n    COMPUTER_AND_DATA_SERVICES_CORPORATION: \"COMPUTER_AND_DATA_SERVICES_CORPORATION\",\n    COMPUTER_SOFTWARE_COMPANY: \"COMPUTER_SOFTWARE_COMPANY\",\n    DIVERSIFIED_FINANCIAL_SERVICE_COMPANY: \"DIVERSIFIED_FINANCIAL_SERVICE_COMPANY\",\n    INSURANCE_COMPANY: \"INSURANCE_COMPANY\",\n    MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY: \"MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY\",\n    REAL_ESTATE_AGENCY_COMPANY: \"REAL_ESTATE_AGENCY_COMPANY\",\n    SAVINGS_INSTITUTION: \"SAVINGS_INSTITUTION\",\n    MANUFACTURING_COMPANY: \"MANUFACTURING_COMPANY\",\n    AGRICULTURAL_TECHNOLOGY_COMPANY: \"AGRICULTURAL_TECHNOLOGY_COMPANY\",\n    AUTOMOBILE_COMPANY: \"AUTOMOBILE_COMPANY\",\n    CHEMICAL_COMPANY: \"CHEMICAL_COMPANY\",\n    ELECTRONICS_COMPANY: \"ELECTRONICS_COMPANY\",\n    MECHANICAL_ENGINEERING_COMPANY: \"MECHANICAL_ENGINEERING_COMPANY\",\n    PUBLIC_HEALTH_TECHNOLOGY_COMPANY: \"PUBLIC_HEALTH_TECHNOLOGY_COMPANY\",\n    PHARMACEUTICAL_COMPANY: \"PHARMACEUTICAL_COMPANY\",\n    PUBLISHING_TECHNOLOGY_COMPANY: \"PUBLISHING_TECHNOLOGY_COMPANY\",\n    TELECOMMUNICATIONS_COMPANY: \"TELECOMMUNICATIONS_COMPANY\",\n    OEM: \"OEM\",\n    TAX_SERVICE_COMPANY: \"TAX_SERVICE_COMPANY\",\n    LEGAL_SERVICE_COMPANY: \"LEGAL_SERVICE_COMPANY\",\n    TRANSPORTATION_COMPANY: \"TRANSPORTATION_COMPANY\",\n    BUS_CHARTER_RENTAL_COMPANY: \"BUS_CHARTER_RENTAL_COMPANY\",\n    TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY: \"TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY\",\n    BUS_COMPANY: \"BUS_COMPANY\",\n    SCHOOL_BUS_SERVICE_COMPANY: \"SCHOOL_BUS_SERVICE_COMPANY\",\n    CLEANING_SERVICE_COMPANY: \"CLEANING_SERVICE_COMPANY\",\n    OIL_NATURAL_GAS_COMPANY: \"OIL_NATURAL_GAS_COMPANY\",\n    MINERAL_COMPANY: \"MINERAL_COMPANY\",\n    CONSTRUCTION_COMPANY: \"CONSTRUCTION_COMPANY\",\n    MOVING_STORAGE_COMPANY: \"MOVING_STORAGE_COMPANY\",\n    AIRLINE: \"AIRLINE\",\n    BRIDGE_TUNNEL_ENGINEERING_COMPANY: \"BRIDGE_TUNNEL_ENGINEERING_COMPANY\",\n    FUNERAL_SERVICE_COMPANY: \"FUNERAL_SERVICE_COMPANY\",\n    INVESTMENT_CONSULTING_FIRM: \"INVESTMENT_CONSULTING_FIRM\",\n    EQUIPMENT_RENTAL_COMPANY: \"EQUIPMENT_RENTAL_COMPANY\",\n    BUSINESS_SERVICES_COMPANY: \"BUSINESS_SERVICES_COMPANY\",\n    CABLE_TELEPHONE_COMPANY: \"CABLE_TELEPHONE_COMPANY\",\n    AUTOMOBILE_MANUFACTURING_COMPANY: \"AUTOMOBILE_MANUFACTURING_COMPANY\",\n    IMPORT_AND_EXPORT_DISTRIBUTION_COMPANY: \"IMPORT_AND_EXPORT_DISTRIBUTION_COMPANY\",\n    CATERING_COMPANY: \"CATERING_COMPANY\",\n    HOME_APPLIANCE_REPAIR_COMPANY: \"HOME_APPLIANCE_REPAIR_COMPANY\",\n    ANIMAL_SHELTER: \"ANIMAL_SHELTER\",\n    WEDDING_SERVICE_COMPANY: \"WEDDING_SERVICE_COMPANY\",\n    AUTOMOTIVE: \"AUTOMOTIVE\",\n    PETROL_STATION: \"PETROL_STATION\",\n    ELECTRIC_VEHICLE_CHARGING_STATION: \"ELECTRIC_VEHICLE_CHARGING_STATION\",\n    TOLL_GATE: \"TOLL_GATE\",\n    WEIGH_STATION: \"WEIGH_STATION\",\n    WEIGH_STATION_SUB: \"WEIGH_STATION_SUB\",\n    WEIGH_SCALES: \"WEIGH_SCALES\",\n    REST_AREA: \"REST_AREA\",\n    PARKING_LOT: \"PARKING_LOT\",\n    PARKING_LOT_SUB: \"PARKING_LOT_SUB\",\n    COACH_PARKING_AREA: \"COACH_PARKING_AREA\",\n    TRUCK_PARKING_AREA: \"TRUCK_PARKING_AREA\",\n    PARKING_GARAGE: \"PARKING_GARAGE\",\n    PARK_RIDE: \"PARK_RIDE\",\n    BICYCLE_SHARING_LOCATION: \"BICYCLE_SHARING_LOCATION\",\n    BICYCLE_PARKING_PLACE: \"BICYCLE_PARKING_PLACE\",\n    TRAILHEAD: \"TRAILHEAD\",\n    CAR_WASH: \"CAR_WASH\",\n    CAR_WASH_SUB: \"CAR_WASH_SUB\",\n    TRUCK_WASH: \"TRUCK_WASH\",\n    CAR_RENTAL_COMPANY: \"CAR_RENTAL_COMPANY\",\n    CAR_RENTAL: \"CAR_RENTAL\",\n    PICK_UP_AND_RETURN_POINT: \"PICK_UP_AND_RETURN_POINT\",\n    AUTOMOTIVE_DEALER: \"AUTOMOTIVE_DEALER\",\n    CAR_DEALER: \"CAR_DEALER\",\n    MOTORCYCLE_DEALER: \"MOTORCYCLE_DEALER\",\n    BOAT_DEALER: \"BOAT_DEALER\",\n    RECREATIONAL_VEHICLE_DEALER: \"RECREATIONAL_VEHICLE_DEALER\",\n    TRUCK_DEALER: \"TRUCK_DEALER\",\n    VAN_DEALER: \"VAN_DEALER\",\n    BUS_DEALER: \"BUS_DEALER\",\n    ATV_SNOWMOBILE_DEALER: \"ATV_SNOWMOBILE_DEALER\",\n    USED_CAR_DEALER: \"USED_CAR_DEALER\",\n    AUTOMOTIVE_REPAIR_SHOP: \"AUTOMOTIVE_REPAIR_SHOP\",\n    BODYSHOPS: \"BODYSHOPS\",\n    AUTOMOTIVE_GLASS_REPLACEMENT_SHOP: \"AUTOMOTIVE_GLASS_REPLACEMENT_SHOP\",\n    GENERAL_AUTO_REPAIR_SERVICE_CENTER: \"GENERAL_AUTO_REPAIR_SERVICE_CENTER\",\n    REPAIR_SHOP: \"REPAIR_SHOP\",\n    AUTOMOBILE_ACCESSORIES_SHOP: \"AUTOMOBILE_ACCESSORIES_SHOP\",\n    TIRE_REPAIR_SHOP: \"TIRE_REPAIR_SHOP\",\n    MOTORCYCLE_REPAIR_SHOP: \"MOTORCYCLE_REPAIR_SHOP\",\n    TRUCK_REPAIR_SHOP: \"TRUCK_REPAIR_SHOP\",\n    TRUCK_STOP: \"TRUCK_STOP\",\n    MOTORING_ORGANIZATION_OFFICE: \"MOTORING_ORGANIZATION_OFFICE\",\n    MISCELLANEOUS: \"MISCELLANEOUS\",\n    GEOGRAPHIC_FEATURE: \"GEOGRAPHIC_FEATURE\",\n    MOUNTAIN_PEAK: \"MOUNTAIN_PEAK\",\n    CAVE: \"CAVE\",\n    RIDGE: \"RIDGE\",\n    DUNE: \"DUNE\",\n    VALLEY: \"VALLEY\",\n    PLAIN_FLAT: \"PLAIN_FLAT\",\n    PLATEAU: \"PLATEAU\",\n    PAN: \"PAN\",\n    WELL: \"WELL\",\n    OASIS: \"OASIS\",\n    ROCKS: \"ROCKS\",\n    RESERVOIR: \"RESERVOIR\",\n    REEF: \"REEF\",\n    RAPIDS: \"RAPIDS\",\n    BAY: \"BAY\",\n    COVE: \"COVE\",\n    HARBOR: \"HARBOR\",\n    LAGOON: \"LAGOON\",\n    CAPE: \"CAPE\",\n    MINERAL_HOT_SPRINGS: \"MINERAL_HOT_SPRINGS\",\n    ISLAND: \"ISLAND\",\n    MARSH_SWAMP_VLEI: \"MARSH_SWAMP_VLEI\",\n    RIVER_CROSSING: \"RIVER_CROSSING\",\n    HILL: \"HILL\",\n    QUARRY: \"QUARRY\",\n    MEMORIAL_PLACE: \"MEMORIAL_PLACE\",\n    ADMIN_FEATURE: \"ADMIN_FEATURE\",\n    CONTINENT: \"CONTINENT\",\n    COUNTRY: \"COUNTRY\",\n    CAPITAL: \"CAPITAL\",\n    CAPITAL_CITY: \"CAPITAL_CITY\",\n    GENERAL_CITY: \"GENERAL_CITY\",\n    COUNTY: \"COUNTY\",\n    TOWN: \"TOWN\",\n    HAMLET: \"HAMLET\",\n    NEIGHBORHOOD: \"NEIGHBORHOOD\",\n    POSTAL_CODE: \"POSTAL_CODE\",\n    ROUTE: \"ROUTE\",\n    STREET_ADDRESS: \"STREET_ADDRESS\",\n    ADMINISTRATIVE_AREA_LEVEL_1: \"ADMINISTRATIVE_AREA_LEVEL_1\",\n    ADMINISTRATIVE_AREA_LEVEL_2: \"ADMINISTRATIVE_AREA_LEVEL_2\",\n    ADMINISTRATIVE_AREA_LEVEL_3: \"ADMINISTRATIVE_AREA_LEVEL_3\",\n    ADMINISTRATIVE_AREA_LEVEL_4: \"ADMINISTRATIVE_AREA_LEVEL_4\",\n    ELECTRONICS_STORE: \"ELECTRONICS_STORE\",\n    HOME_GOODS_STORE: \"HOME_GOODS_STORE\",\n    STORE: \"STORE\",\n    GEOCODE: \"GEOCODE\",\n    ADDRESS: \"ADDRESS\",\n    ESTABLISHMENT: \"ESTABLISHMENT\",\n    REGIONS: \"REGIONS\",\n    CITIES: \"CITIES\"\n};\n\nexport default Object.freeze(HwLocationType);\n"
  },
  {
    "path": "react-native-hms-site/src/constants/LocationType.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nconst LocationType = {\n    ACCOUNTING: \"ACCOUNTING\",\n    ADDRESS: \"ADDRESS\",\n    ADMINISTRATIVE_AREA_LEVEL_1: \"ADMINISTRATIVE_AREA_LEVEL_1\",\n    ADMINISTRATIVE_AREA_LEVEL_2: \"ADMINISTRATIVE_AREA_LEVEL_2\",\n    ADMINISTRATIVE_AREA_LEVEL_3: \"ADMINISTRATIVE_AREA_LEVEL_3\",\n    ADMINISTRATIVE_AREA_LEVEL_4: \"ADMINISTRATIVE_AREA_LEVEL_4\",\n    ADMINISTRATIVE_AREA_LEVEL_5: \"ADMINISTRATIVE_AREA_LEVEL_5\",\n    AIRPORT: \"AIRPORT\",\n    AMUSEMENT_PARK: \"AMUSEMENT_PARK\",\n    AQUARIUM: \"AQUARIUM\",\n    ARCHIPELAGO: \"ARCHIPELAGO\",\n    ART_GALLERY: \"ART_GALLERY\",\n    ATM: \"ATM\",\n    BAKERY: \"BAKERY\",\n    BANK: \"BANK\",\n    BAR: \"BAR\",\n    BEAUTY_SALON: \"BEAUTY_SALON\",\n    BICYCLE_STORE: \"BICYCLE_STORE\",\n    BOOK_STORE: \"BOOK_STORE\",\n    BOWLING_ALLEY: \"BOWLING_ALLEY\",\n    BUS_STATION: \"BUS_STATION\",\n    CAFE: \"CAFE\",\n    CAMPGROUND: \"CAMPGROUND\",\n    CAPITAL: \"CAPITAL\",\n    CAPITAL_CITY: \"CAPITAL_CITY\",\n    CAR_DEALER: \"CAR_DEALER\",\n    CAR_RENTAL: \"CAR_RENTAL\",\n    CAR_REPAIR: \"CAR_REPAIR\",\n    CAR_WASH: \"CAR_WASH\",\n    CASINO: \"CASINO\",\n    CEMETERY: \"CEMETERY\",\n    CHURCH: \"CHURCH\",\n    CITIES: \"CITIES\",\n    CITY_HALL: \"CITY_HALL\",\n    CLOTHING_STORE: \"CLOTHING_STORE\",\n    COLLOQUIAL_AREA: \"COLLOQUIAL_AREA\",\n    CONTINENT: \"CONTINENT\",\n    CONVENIENCE_STORE: \"CONVENIENCE_STORE\",\n    COUNTRY: \"COUNTRY\",\n    COURTHOUSE: \"COURTHOUSE\",\n    DENTIST: \"DENTIST\",\n    DEPARTMENT_STORE: \"DEPARTMENT_STORE\",\n    DOCTOR: \"DOCTOR\",\n    DRUGSTORE: \"DRUGSTORE\",\n    ELECTRICIAN: \"ELECTRICIAN\",\n    ELECTRONICS_STORE: \"ELECTRONICS_STORE\",\n    EMBASSY: \"EMBASSY\",\n    ESTABLISHMENT: \"ESTABLISHMENT\",\n    FINANCE: \"FINANCE\",\n    FIRE_STATION: \"FIRE_STATION\",\n    FLOOR: \"FLOOR\",\n    FLORIST: \"FLORIST\",\n    FOOD: \"FOOD\",\n    FUNERAL_HOME: \"FUNERAL_HOME\",\n    FURNITURE_STORE: \"FURNITURE_STORE\",\n    GAS_STATION: \"GAS_STATION\",\n    GENERAL_CITY: \"GENERAL_CITY\",\n    GENERAL_CONTRACTOR: \"GENERAL_CONTRACTOR\",\n    GEOCODE: \"GEOCODE\",\n    GROCERY_OR_SUPERMARKET: \"GROCERY_OR_SUPERMARKET\",\n    GYM: \"GYM\",\n    HAIR_CARE: \"HAIR_CARE\",\n    HAMLET: \"HAMLET\",\n    HARDWARE_STORE: \"HARDWARE_STORE\",\n    HEALTH: \"HEALTH\",\n    HINDU_TEMPLE: \"HINDU_TEMPLE\",\n    HOME_GOODS_STORE: \"HOME_GOODS_STORE\",\n    HOSPITAL: \"HOSPITAL\",\n    INSURANCE_AGENCY: \"INSURANCE_AGENCY\",\n    INTERSECTION: \"INTERSECTION\",\n    JEWELRY_STORE: \"JEWELRY_STORE\",\n    LAUNDRY: \"LAUNDRY\",\n    LAWYER: \"LAWYER\",\n    LIBRARY: \"LIBRARY\",\n    LIGHT_RAIL_STATION: \"LIGHT_RAIL_STATION\",\n    LIQUOR_STORE: \"LIQUOR_STORE\",\n    LOCALITY: \"LOCALITY\",\n    LOCAL_GOVERNMENT_OFFICE: \"LOCAL_GOVERNMENT_OFFICE\",\n    LOCKSMITH: \"LOCKSMITH\",\n    LODGING: \"LODGING\",\n    MEAL_DELIVERY: \"MEAL_DELIVERY\",\n    MEAL_TAKEAWAY: \"MEAL_TAKEAWAY\",\n    MOSQUE: \"MOSQUE\",\n    MOVIE_RENTAL: \"MOVIE_RENTAL\",\n    MOVIE_THEATER: \"MOVIE_THEATER\",\n    MOVING_COMPANY: \"MOVING_COMPANY\",\n    MUSEUM: \"MUSEUM\",\n    NATURAL_FEATURE: \"NATURAL_FEATURE\",\n    NEIGHBORHOOD: \"NEIGHBORHOOD\",\n    NIGHT_CLUB: \"NIGHT_CLUB\",\n    OTHER: \"OTHER\",\n    PAINTER: \"PAINTER\",\n    PARK: \"PARK\",\n    PARKING: \"PARKING\",\n    PET_STORE: \"PET_STORE\",\n    PHARMACY: \"PHARMACY\",\n    PHYSIOTHERAPIST: \"PHYSIOTHERAPIST\",\n    PLACE_OF_WORSHIP: \"PLACE_OF_WORSHIP\",\n    PLUMBER: \"PLUMBER\",\n    POINT_OF_INTEREST: \"POINT_OF_INTEREST\",\n    POLICE: \"POLICE\",\n    POLITICAL: \"POLITICAL\",\n    POSTAL_CODE: \"POSTAL_CODE\",\n    POSTAL_CODE_PREFIX: \"POSTAL_CODE_PREFIX\",\n    POSTAL_CODE_SUFFIX: \"POSTAL_CODE_SUFFIX\",\n    POSTAL_TOWN: \"POSTAL_TOWN\",\n    POST_BOX: \"POST_BOX\",\n    POST_OFFICE: \"POST_OFFICE\",\n    PREMISE: \"PREMISE\",\n    PRIMARY_SCHOOL: \"PRIMARY_SCHOOL\",\n    REAL_ESTATE_AGENCY: \"REAL_ESTATE_AGENCY\",\n    REGION: \"REGION\",\n    REGIONS: \"REGIONS\",\n    RESTAURANT: \"RESTAURANT\",\n    ROOFING_CONTRACTOR: \"ROOFING_CONTRACTOR\",\n    ROOM: \"ROOM\",\n    ROUTE: \"ROUTE\",\n    RV_PARK: \"RV_PARK\",\n    SCHOOL: \"SCHOOL\",\n    SECONDARY_SCHOOL: \"SECONDARY_SCHOOL\",\n    SHOE_STORE: \"SHOE_STORE\",\n    SHOPPING_MALL: \"SHOPPING_MALL\",\n    SPA: \"SPA\",\n    STADIUM: \"STADIUM\",\n    STORAGE: \"STORAGE\",\n    STORE: \"STORE\",\n    STREET_ADDRESS: \"STREET_ADDRESS\",\n    STREET_NUMBER: \"STREET_NUMBER\",\n    SUBLOCALITY: \"SUBLOCALITY\",\n    SUBLOCALITY_LEVEL_1: \"SUBLOCALITY_LEVEL_1\",\n    SUBLOCALITY_LEVEL_2: \"SUBLOCALITY_LEVEL_2\",\n    SUBLOCALITY_LEVEL_3: \"SUBLOCALITY_LEVEL_3\",\n    SUBLOCALITY_LEVEL_4: \"SUBLOCALITY_LEVEL_4\",\n    SUBLOCALITY_LEVEL_5: \"SUBLOCALITY_LEVEL_5\",\n    SUBPREMISE: \"SUBPREMISE\",\n    SUBWAY_STATION: \"SUBWAY_STATION\",\n    SUPERMARKET: \"SUPERMARKET\",\n    SYNAGOGUE: \"SYNAGOGUE\",\n    TAXI_STAND: \"TAXI_STAND\",\n    TOURIST_ATTRACTION: \"TOURIST_ATTRACTION\",\n    TOWN: \"TOWN\",\n    TOWN_SQUARE: \"TOWN_SQUARE\",\n    TRAIN_STATION: \"TRAIN_STATION\",\n    TRANSIT_STATION: \"TRANSIT_STATION\",\n    TRAVEL_AGENCY: \"TRAVEL_AGENCY\",\n    UNIVERSITY: \"UNIVERSITY\",\n    VETERINARY_CARE: \"VETERINARY_CARE\",\n    ZOO: \"ZOO\"\n}\n\nexport default Object.freeze(LocationType);\n"
  },
  {
    "path": "react-native-hms-site/src/index.d.ts",
    "content": "/*\n *   Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n *   \n *   Licensed under the Apache License, Version 2.0 (the \"License\")\n *   you may not use this file except in compliance with the License.\n *   You may obtain a copy of the License at\n *\n *       https://www.apache.org/licenses/LICENSE-2.0\n *\n *   Unless required by applicable law or agreed to in writing, software\n *   distributed under the License is distributed on an \"AS IS\" BASIS,\n *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *   See the License for the specific language governing permissions and\n *   limitations under the License.\n */\n\ndeclare module \"@hmscore/react-native-hms-site\" {\n\n    export interface AddressDetail {\n        adminArea?: string;\n        country?: string;\n        countryCode?: string;\n        locality?: string;\n        postalCode?: string;\n        streetNumber?: string;\n        subAdminArea?: string;\n        subLocality?: string;\n        tertiaryAdminArea?: string;\n        thoroughfare?: string;\n    }\n    export interface AutocompletePrediction {\n        description?: string;\n        matchedKeywords?: Word[];\n        matchedWords?: Word[];\n    }\n    export interface ChildrenNode {\n        depAndArr?: string;\n        domeAndInt?: string;\n        formatAddress?: string;\n        hwPoiTypes?: string[];\n        location?: Coordinate;\n        name?: string;\n        siteId?: string;\n    }\n    export interface Coordinate {\n        lat: number;\n        lng: number;\n    }\n    export interface CoordinateBounds {\n        northeast: Coordinate;\n        southwest: Coordinate;\n    }\n    export interface DetailSearchRequest {\n        language?: string;\n        politicalView?: string;\n        siteId: string;\n        children?: boolean;\n    }\n    export interface DetailSearchResponse {\n        site: Site;\n    }\n    export interface NearbySearchRequest {\n        hwPoiType?: HwLocationType;\n        language?: string;\n        location: Coordinate;\n        pageIndex?: number;\n        pageSize?: number;\n        poiType?: LocationType;\n        politicalView?: string;\n        query?: string;\n        radius?: number;\n        strictBounds?: boolean;\n    }\n    export interface NearbySearchResponse {\n        sites: Site[];\n        totalCount: number;\n    }\n    export interface OpeningHours {\n        periods?: Period[];\n        texts?: string[];\n    }\n    export interface Period {\n        close?: TimeOfWeek;\n        open?: TimeOfWeek;\n    }\n    export interface Poi {\n        businessStatus?: string;\n        childrenNodes?: ChildrenNode[];\n        internationalPhone?: string;\n        openingHours?: OpeningHours;\n        phone?: string;\n        photoUrls?: string[];\n        poiTypes?: LocationType[];\n        priceLevel: number;\n        hwPoiTypes?: string[];\n        rating?: number;\n        websiteUrl?: string;\n        icon?: string;\n    }\n    export interface QueryAutocompleteRequest {\n        language?: string;\n        location?: Coordinate;\n        politicalView?: string;\n        query: string;\n        radius?: number;\n        children?: boolean;\n    }\n    export interface QueryAutocompleteResponse {\n        sites: Site[];\n        predictions: AutocompletePrediction[];\n    }\n    export interface QuerySuggestionRequest {\n        bounds?: CoordinateBounds;\n        countryCode?: string;\n        language?: string;\n        location?: Coordinate;\n        poiTypes?: LocationType[];\n        politicalView?: string;\n        query: string;\n        radius?: number;\n        children?: boolean;\n        strictBounds?: boolean;\n        countries?: string[];\n    }\n    export interface QuerySuggestionResponse {\n        sites: Site[];\n    }\n    export interface SearchStatus {\n        errorCode: string;\n        errorMessage: string;\n    }\n    export interface Site {\n        address?: AddressDetail;\n        distance?: number;\n        formatAddress?: string;\n        location?: Coordinate;\n        name?: string;\n        poi?: Poi;\n        prediction?: AutocompletePrediction;\n        siteId?: string;\n        utcOffset?: number;\n        viewport?: CoordinateBounds;\n    }\n    export interface TextSearchRequest {\n        countryCode?: string;\n        hwPoiType?: HwLocationType;\n        language?: string;\n        location?: Coordinate;\n        pageIndex?: number;\n        pageSize?: number;\n        poiType?: LocationType;\n        politicalView?: string;\n        query: string;\n        radius?: number;\n        children: boolean;\n        countries?: string[];\n    }\n    export interface TextSearchResponse {\n        sites: Site[];\n        totalCount: number;\n    }\n    export interface TimeOfWeek {\n        day?: number;\n        time?: string;\n    }\n    export interface Word {\n        offset: number;\n        value: string;\n    }\n    export interface SearchFilter {\n        bounds?: CoordinateBounds;\n        countryCode?: string;\n        language?: string;\n        location?: Coordinate;\n        poiType?: LocationType[];\n        politicalView?: string;\n        query?: string;\n        radius?: number;\n        strictBounds?: boolean;\n        children?: boolean;\n    }\n\n    export interface SearchService {\n        detailSearch(detailSearchReq: DetailSearchRequest): Promise<DetailSearchResponse>;\n        nearbySearch(nearbySearchReq: NearbySearchRequest): Promise<NearbySearchResponse>;\n        queryAutocomplete(autocompleteReq: QueryAutocompleteRequest): Promise<QueryAutocompleteResponse>;\n        querySuggestion(querySuggestionReq: QuerySuggestionRequest): Promise<QuerySuggestionResponse>;\n        textSearch(textSearchReq: TextSearchRequest): Promise<TextSearchResponse>;\n    }\n    export declare class SearchServiceFactory {\n        private constructor();\n        static create(apiKey: string, routePolicy?: string): Promise<SearchService>;\n    }\n    export declare function enableLogger(): Promise<void>;\n    export declare function disableLogger(): Promise<void>;\n    export declare function gotoSearchActivity(apiKey: string, searchFilter: SearchFilter, hint?: string): Promise<Site>;\n    \n    export declare enum LocationType {\n        ACCOUNTING = \"ACCOUNTING\",\n        ADDRESS = \"ADDRESS\",\n        ADMINISTRATIVE_AREA_LEVEL_1 = \"ADMINISTRATIVE_AREA_LEVEL_1\",\n        ADMINISTRATIVE_AREA_LEVEL_2 = \"ADMINISTRATIVE_AREA_LEVEL_2\",\n        ADMINISTRATIVE_AREA_LEVEL_3 = \"ADMINISTRATIVE_AREA_LEVEL_3\",\n        ADMINISTRATIVE_AREA_LEVEL_4 = \"ADMINISTRATIVE_AREA_LEVEL_4\",\n        ADMINISTRATIVE_AREA_LEVEL_5 = \"ADMINISTRATIVE_AREA_LEVEL_5\",\n        AIRPORT = \"AIRPORT\",\n        AMUSEMENT_PARK = \"AMUSEMENT_PARK\",\n        AQUARIUM = \"AQUARIUM\",\n        ARCHIPELAGO = \"ARCHIPELAGO\",\n        ART_GALLERY = \"ART_GALLERY\",\n        ATM = \"ATM\",\n        BAKERY = \"BAKERY\",\n        BANK = \"BANK\",\n        BAR = \"BAR\",\n        BEAUTY_SALON = \"BEAUTY_SALON\",\n        BICYCLE_STORE = \"BICYCLE_STORE\",\n        BOOK_STORE = \"BOOK_STORE\",\n        BOWLING_ALLEY = \"BOWLING_ALLEY\",\n        BUS_STATION = \"BUS_STATION\",\n        CAFE = \"CAFE\",\n        CAMPGROUND = \"CAMPGROUND\",\n        CAPITAL = \"CAPITAL\",\n        CAPITAL_CITY = \"CAPITAL_CITY\",\n        CAR_DEALER = \"CAR_DEALER\",\n        CAR_RENTAL = \"CAR_RENTAL\",\n        CAR_REPAIR = \"CAR_REPAIR\",\n        CAR_WASH = \"CAR_WASH\",\n        CASINO = \"CASINO\",\n        CEMETERY = \"CEMETERY\",\n        CHURCH = \"CHURCH\",\n        CITIES = \"CITIES\",\n        CITY_HALL = \"CITY_HALL\",\n        CLOTHING_STORE = \"CLOTHING_STORE\",\n        COLLOQUIAL_AREA = \"COLLOQUIAL_AREA\",\n        CONTINENT = \"CONTINENT\",\n        CONVENIENCE_STORE = \"CONVENIENCE_STORE\",\n        COUNTRY = \"COUNTRY\",\n        COURTHOUSE = \"COURTHOUSE\",\n        DENTIST = \"DENTIST\",\n        DEPARTMENT_STORE = \"DEPARTMENT_STORE\",\n        DOCTOR = \"DOCTOR\",\n        DRUGSTORE = \"DRUGSTORE\",\n        ELECTRICIAN = \"ELECTRICIAN\",\n        ELECTRONICS_STORE = \"ELECTRONICS_STORE\",\n        EMBASSY = \"EMBASSY\",\n        ESTABLISHMENT = \"ESTABLISHMENT\",\n        FINANCE = \"FINANCE\",\n        FIRE_STATION = \"FIRE_STATION\",\n        FLOOR = \"FLOOR\",\n        FLORIST = \"FLORIST\",\n        FOOD = \"FOOD\",\n        FUNERAL_HOME = \"FUNERAL_HOME\",\n        FURNITURE_STORE = \"FURNITURE_STORE\",\n        GAS_STATION = \"GAS_STATION\",\n        GENERAL_CITY = \"GENERAL_CITY\",\n        GENERAL_CONTRACTOR = \"GENERAL_CONTRACTOR\",\n        GEOCODE = \"GEOCODE\",\n        GROCERY_OR_SUPERMARKET = \"GROCERY_OR_SUPERMARKET\",\n        GYM = \"GYM\",\n        HAIR_CARE = \"HAIR_CARE\",\n        HAMLET = \"HAMLET\",\n        HARDWARE_STORE = \"HARDWARE_STORE\",\n        HEALTH = \"HEALTH\",\n        HINDU_TEMPLE = \"HINDU_TEMPLE\",\n        HOME_GOODS_STORE = \"HOME_GOODS_STORE\",\n        HOSPITAL = \"HOSPITAL\",\n        INSURANCE_AGENCY = \"INSURANCE_AGENCY\",\n        INTERSECTION = \"INTERSECTION\",\n        JEWELRY_STORE = \"JEWELRY_STORE\",\n        LAUNDRY = \"LAUNDRY\",\n        LAWYER = \"LAWYER\",\n        LIBRARY = \"LIBRARY\",\n        LIGHT_RAIL_STATION = \"LIGHT_RAIL_STATION\",\n        LIQUOR_STORE = \"LIQUOR_STORE\",\n        LOCALITY = \"LOCALITY\",\n        LOCAL_GOVERNMENT_OFFICE = \"LOCAL_GOVERNMENT_OFFICE\",\n        LOCKSMITH = \"LOCKSMITH\",\n        LODGING = \"LODGING\",\n        MEAL_DELIVERY = \"MEAL_DELIVERY\",\n        MEAL_TAKEAWAY = \"MEAL_TAKEAWAY\",\n        MOSQUE = \"MOSQUE\",\n        MOVIE_RENTAL = \"MOVIE_RENTAL\",\n        MOVIE_THEATER = \"MOVIE_THEATER\",\n        MOVING_COMPANY = \"MOVING_COMPANY\",\n        MUSEUM = \"MUSEUM\",\n        NATURAL_FEATURE = \"NATURAL_FEATURE\",\n        NEIGHBORHOOD = \"NEIGHBORHOOD\",\n        NIGHT_CLUB = \"NIGHT_CLUB\",\n        OTHER = \"OTHER\",\n        PAINTER = \"PAINTER\",\n        PARK = \"PARK\",\n        PARKING = \"PARKING\",\n        PET_STORE = \"PET_STORE\",\n        PHARMACY = \"PHARMACY\",\n        PHYSIOTHERAPIST = \"PHYSIOTHERAPIST\",\n        PLACE_OF_WORSHIP = \"PLACE_OF_WORSHIP\",\n        PLUMBER = \"PLUMBER\",\n        POINT_OF_INTEREST = \"POINT_OF_INTEREST\",\n        POLICE = \"POLICE\",\n        POLITICAL = \"POLITICAL\",\n        POSTAL_CODE = \"POSTAL_CODE\",\n        POSTAL_CODE_PREFIX = \"POSTAL_CODE_PREFIX\",\n        POSTAL_CODE_SUFFIX = \"POSTAL_CODE_SUFFIX\",\n        POSTAL_TOWN = \"POSTAL_TOWN\",\n        POST_BOX = \"POST_BOX\",\n        POST_OFFICE = \"POST_OFFICE\",\n        PREMISE = \"PREMISE\",\n        PRIMARY_SCHOOL = \"PRIMARY_SCHOOL\",\n        REAL_ESTATE_AGENCY = \"REAL_ESTATE_AGENCY\",\n        REGION = \"REGION\",\n        REGIONS = \"REGIONS\",\n        RESTAURANT = \"RESTAURANT\",\n        ROOFING_CONTRACTOR = \"ROOFING_CONTRACTOR\",\n        ROOM = \"ROOM\",\n        ROUTE = \"ROUTE\",\n        RV_PARK = \"RV_PARK\",\n        SCHOOL = \"SCHOOL\",\n        SECONDARY_SCHOOL = \"SECONDARY_SCHOOL\",\n        SHOE_STORE = \"SHOE_STORE\",\n        SHOPPING_MALL = \"SHOPPING_MALL\",\n        SPA = \"SPA\",\n        STADIUM = \"STADIUM\",\n        STORAGE = \"STORAGE\",\n        STORE = \"STORE\",\n        STREET_ADDRESS = \"STREET_ADDRESS\",\n        STREET_NUMBER = \"STREET_NUMBER\",\n        SUBLOCALITY = \"SUBLOCALITY\",\n        SUBLOCALITY_LEVEL_1 = \"SUBLOCALITY_LEVEL_1\",\n        SUBLOCALITY_LEVEL_2 = \"SUBLOCALITY_LEVEL_2\",\n        SUBLOCALITY_LEVEL_3 = \"SUBLOCALITY_LEVEL_3\",\n        SUBLOCALITY_LEVEL_4 = \"SUBLOCALITY_LEVEL_4\",\n        SUBLOCALITY_LEVEL_5 = \"SUBLOCALITY_LEVEL_5\",\n        SUBPREMISE = \"SUBPREMISE\",\n        SUBWAY_STATION = \"SUBWAY_STATION\",\n        SUPERMARKET = \"SUPERMARKET\",\n        SYNAGOGUE = \"SYNAGOGUE\",\n        TAXI_STAND = \"TAXI_STAND\",\n        TOURIST_ATTRACTION = \"TOURIST_ATTRACTION\",\n        TOWN = \"TOWN\",\n        TOWN_SQUARE = \"TOWN_SQUARE\",\n        TRAIN_STATION = \"TRAIN_STATION\",\n        TRANSIT_STATION = \"TRANSIT_STATION\",\n        TRAVEL_AGENCY = \"TRAVEL_AGENCY\",\n        UNIVERSITY = \"UNIVERSITY\",\n        VETERINARY_CARE = \"VETERINARY_CARE\",\n        ZOO = \"ZOO\"\n    }\n    export declare enum HwLocationType {\n        ACCESS_GATEWAY = \"ACCESS_GATEWAY\",\n        ADDRESS = \"ADDRESS\",\n        ADMINISTRATIVE_AREA_LEVEL_1 = \"ADMINISTRATIVE_AREA_LEVEL_1\",\n        ADMINISTRATIVE_AREA_LEVEL_2 = \"ADMINISTRATIVE_AREA_LEVEL_2\",\n        ADMINISTRATIVE_AREA_LEVEL_3 = \"ADMINISTRATIVE_AREA_LEVEL_3\",\n        ADMINISTRATIVE_AREA_LEVEL_4 = \"ADMINISTRATIVE_AREA_LEVEL_4\",\n        ADMIN_FEATURE = \"ADMIN_FEATURE\",\n        ADVENTURE_SPORTS_VENUE = \"ADVENTURE_SPORTS_VENUE\",\n        ADVENTURE_VEHICLE_TRAIL = \"ADVENTURE_VEHICLE_TRAIL\",\n        ADVERTISING_AND_MARKETING_COMPANY = \"ADVERTISING_AND_MARKETING_COMPANY\",\n        AFGHAN_RESTAURANT = \"AFGHAN_RESTAURANT\",\n        AFRICAN_RESTAURANT = \"AFRICAN_RESTAURANT\",\n        AGRICULTURAL_SUPPLY_STORE = \"AGRICULTURAL_SUPPLY_STORE\",\n        AGRICULTURAL_TECHNOLOGY_COMPANY = \"AGRICULTURAL_TECHNOLOGY_COMPANY\",\n        AGRICULTURE_BUSINESS = \"AGRICULTURE_BUSINESS\",\n        AIRFIELD = \"AIRFIELD\",\n        AIRLINE = \"AIRLINE\",\n        AIRLINE_ACCESS = \"AIRLINE_ACCESS\",\n        AIRPORT = \"AIRPORT\",\n        ALGERIAN_RESTAURANT = \"ALGERIAN_RESTAURANT\",\n        AMBULANCE_UNIT = \"AMBULANCE_UNIT\",\n        AMERICAN_RESTAURANT = \"AMERICAN_RESTAURANT\",\n        AMPHITHEATER = \"AMPHITHEATER\",\n        AMUSEMENT_ARCADE = \"AMUSEMENT_ARCADE\",\n        AMUSEMENT_PARK = \"AMUSEMENT_PARK\",\n        AMUSEMENT_PLACE = \"AMUSEMENT_PLACE\",\n        ANIMAL_SERVICE_STORE = \"ANIMAL_SERVICE_STORE\",\n        ANIMAL_SHELTER = \"ANIMAL_SHELTER\",\n        ANTIQUE_ART_STORE = \"ANTIQUE_ART_STORE\",\n        APARTMENT = \"APARTMENT\",\n        AQUATIC_ZOO_MARINE_PARK = \"AQUATIC_ZOO_MARINE_PARK\",\n        ARABIAN_RESTAURANT = \"ARABIAN_RESTAURANT\",\n        ARBORETA_BOTANICAL_GARDENS = \"ARBORETA_BOTANICAL_GARDENS\",\n        ARCH = \"ARCH\",\n        ARGENTINEAN_RESTAURANT = \"ARGENTINEAN_RESTAURANT\",\n        ARMENIAN_RESTAURANT = \"ARMENIAN_RESTAURANT\",\n        ART_MUSEUM = \"ART_MUSEUM\",\n        ART_SCHOOL = \"ART_SCHOOL\",\n        ASHRAM = \"ASHRAM\",\n        ASIAN_RESTAURANT = \"ASIAN_RESTAURANT\",\n        ATHLETIC_STADIUM = \"ATHLETIC_STADIUM\",\n        ATV_SNOWMOBILE_DEALER = \"ATV_SNOWMOBILE_DEALER\",\n        AUSTRALIAN_RESTAURANT = \"AUSTRALIAN_RESTAURANT\",\n        AUSTRIAN_RESTAURANT = \"AUSTRIAN_RESTAURANT\",\n        AUTOMATIC_TELLER_MACHINE = \"AUTOMATIC_TELLER_MACHINE\",\n        AUTOMOBILE_ACCESSORIES_SHOP = \"AUTOMOBILE_ACCESSORIES_SHOP\",\n        AUTOMOBILE_COMPANY = \"AUTOMOBILE_COMPANY\",\n        AUTOMOBILE_MANUFACTURING_COMPANY = \"AUTOMOBILE_MANUFACTURING_COMPANY\",\n        AUTOMOTIVE = \"AUTOMOTIVE\",\n        AUTOMOTIVE_DEALER = \"AUTOMOTIVE_DEALER\",\n        AUTOMOTIVE_GLASS_REPLACEMENT_SHOP = \"AUTOMOTIVE_GLASS_REPLACEMENT_SHOP\",\n        AUTOMOTIVE_REPAIR_SHOP = \"AUTOMOTIVE REPAIR_SHOP\",\n        BADMINTON_COURT = \"BADMINTON_COURT\",\n        BAGS_LEATHERWEAR_SHOP = \"BAGS_LEATHERWEAR_SHOP\",\n        BAKERY = \"BAKERY\",\n        BANK = \"BANK\",\n        BANQUET_ROOM = \"BANQUET_ROOM\",\n        BAR = \"BAR\",\n        BARBECUE_RESTAURANT = \"BARBECUE_RESTAURANT\",\n        BASEBALL_FIELD = \"BASEBALL_FIELD\",\n        BASKETBALL_COURT = \"BASKETBALL_COURT\",\n        BASQUE_RESTAURANT = \"BASQUE_RESTAURANT\",\n        BATTLEFIELD = \"BATTLEFIELD\",\n        BAY = \"BAY\",\n        BEACH = \"BEACH\",\n        BEACH_CLUB = \"BEACH_CLUB\",\n        BEAUTY_SALON = \"BEAUTY_SALON\",\n        BEAUTY_SUPPLY_SHOP = \"BEAUTY_SUPPLY_SHOP\",\n        BED_BREAKFAST_GUEST_HOUSES = \"BED_BREAKFAST_GUEST_HOUSES\",\n        BELGIAN_RESTAURANT = \"BELGIAN_RESTAURANT\",\n        BETTING_STATION = \"BETTING_STATION\",\n        BICYCLE_PARKING_PLACE = \"BICYCLE_PARKING_PLACE\",\n        BICYCLE_SHARING_LOCATION = \"BICYCLE_SHARING_LOCATION\",\n        BILLIARDS_POOL_HALL = \"BILLIARDS_POOL_HALL\",\n        BISTRO = \"BISTRO\",\n        BLOOD_BANK = \"BLOOD_BANK\",\n        BOATING_EQUIPMENT_ACCESSORIES_STORE = \"BOATING_EQUIPMENT_ACCESSORIES_STORE\",\n        BOAT_DEALER = \"BOAT_DEALER\",\n        BOAT_FERRY = \"BOAT_FERRY\",\n        BOAT_LAUNCHING_RAMP = \"BOAT_LAUNCHING_RAMP\",\n        BODYSHOPS = \"BODYSHOPS\",\n        BOLIVIAN_RESTAURANT = \"BOLIVIAN_RESTAURANT\",\n        BOOKSTORE = \"BOOKSTORE\",\n        BORDER_POST = \"BORDER_POST\",\n        BOSNIAN_RESTAURANT = \"BOSNIAN_RESTAURANT\",\n        BOWLING_FIELD = \"BOWLING_FIELD\",\n        BRAZILIAN_RESTAURANT = \"BRAZILIAN_RESTAURANT\",\n        BRIDGE = \"BRIDGE\",\n        BRIDGE_TUNNEL_ENGINEERING_COMPANY = \"BRIDGE_TUNNEL_ENGINEERING_COMPANY\",\n        BRITISH_RESTAURANT = \"BRITISH_RESTAURANT\",\n        BUDDHIST_TEMPLE = \"BUDDHIST_TEMPLE\",\n        BUFFET = \"BUFFET\",\n        BUILDING = \"BUILDING\",\n        BULGARIAN_RESTAURANT = \"BULGARIAN_RESTAURANT\",\n        BUNGALOW = \"BUNGALOW\",\n        BURMESE_RESTAURANT = \"BURMESE_RESTAURANT\",\n        BUSINESS = \"BUSINESS\",\n        BUSINESS_PARK = \"BUSINESS_PARK\",\n        BUSINESS_SERVICES_COMPANY = \"BUSINESS_SERVICES_COMPANY\",\n        BUS_CHARTER_RENTAL_COMPANY = \"BUS_CHARTER_RENTAL_COMPANY\",\n        BUS_COMPANY = \"BUS_COMPANY\",\n        BUS_DEALER = \"BUS_DEALER\",\n        BUS_STOP = \"BUS_STOP\",\n        CABARET = \"CABARET\",\n        CABINS_LODGES = \"CABINS_LODGES\",\n        CABLE_TELEPHONE_COMPANY = \"CABLE_TELEPHONE_COMPANY\",\n        CAFE = \"CAFE\",\n        CAFETERIA = \"CAFETERIA\",\n        CAFE_PUB = \"CAFE_PUB\",\n        CALIFORNIAN_RESTAURANT = \"CALIFORNIAN_RESTAURANT\",\n        CAMBODIAN_RESTAURANT = \"CAMBODIAN_RESTAURANT\",\n        CAMPING_GROUND = \"CAMPING_GROUND\",\n        CANADIAN_RESTAURANT = \"CANADIAN_RESTAURANT\",\n        CAPE = \"CAPE\",\n        CAPITAL = \"CAPITAL\",\n        CAPITAL_CITY = \"CAPITAL_CITY\",\n        CARAVAN_SITE = \"CARAVAN_SITE\",\n        CARGO_CENTER = \"CARGO_CENTER\",\n        CARIBBEAN_RESTAURANT = \"CARIBBEAN_RESTAURANT\",\n        CARPET_FLOOR_COVERING_STORE = \"CARPET_FLOOR_COVERING_STORE\",\n        CAR_CLUB = \"CAR_CLUB\",\n        CAR_DEALER = \"CAR_DEALER\",\n        CAR_RENTAL = \"CAR_RENTAL\",\n        CAR_RENTAL_COMPANY = \"CAR_RENTAL_COMPANY\",\n        CAR_WASH = \"CAR_WASH\",\n        CAR_WASH_SUB = \"CAR_WASH_SUB\",\n        CASINO = \"CASINO\",\n        CATERING_COMPANY = \"CATERING_COMPANY\",\n        CAVE = \"CAVE\",\n        CD_DVD_VIDEO_RENTAL_STORE = \"CD_DVD_VIDEO_RENTAL_STORE\",\n        CD_DVD_VIDEO_STORE = \"CD_DVD_VIDEO_STORE\",\n        CD_DVD_VIDEO_STORE_SUB = \"CD_DVD_VIDEO_STORE_SUB\",\n        CEMETERY = \"CEMETERY\",\n        CHALET = \"CHALET\",\n        CHEMICAL_COMPANY = \"CHEMICAL_COMPANY\",\n        CHICKEN_RESTAURANT = \"CHICKEN_RESTAURANT\",\n        CHILDRENS_MUSEUM = \"CHILDRENS_MUSEUM\",\n        CHILD_CARE_FACILITY = \"CHILD_CARE_FACILITY\",\n        CHILEAN_RESTAURANT = \"CHILEAN_RESTAURANT\",\n        CHINESE_MEDICINE_HOSPITAL = \"CHINESE_MEDICINE_HOSPITAL\",\n        CHINESE_RESTAURANT = \"CHINESE_RESTAURANT\",\n        CHRISTMAS_HOLIDAY_STORE = \"CHRISTMAS_HOLIDAY_STORE\",\n        CHURCH = \"CHURCH\",\n        CINEMA = \"CINEMA\",\n        CINEMA_SUB = \"CINEMA_SUB\",\n        CITIES = \"CITIES\",\n        CITY_CENTER = \"CITY_CENTER\",\n        CITY_HALL = \"CITY_HALL\",\n        CIVIC_COMMUNITY_CENTER = \"CIVIC_COMMUNITY_CENTER\",\n        CLEANING_SERVICE_COMPANY = \"CLEANING_SERVICE_COMPANY\",\n        CLOTHING_ACCESSORIES_STORE = \"CLOTHING_ACCESSORIES_STORE\",\n        CLUB_ASSOCIATION = \"CLUB_ASSOCIATION\",\n        COACH_PARKING_AREA = \"COACH_PARKING_AREA\",\n        COACH_STATION = \"COACH_STATION\",\n        COCKTAIL_BAR = \"COCKTAIL_BAR\",\n        COFFEE_SHOP = \"COFFEE_SHOP\",\n        COLLEGE_UNIVERSITY = \"COLLEGE_UNIVERSITY\",\n        COLOMBIAN_RESTAURANT = \"COLOMBIAN_RESTAURANT\",\n        COMEDY_CLUB = \"COMEDY_CLUB\",\n        COMMERCIAL_BUILDING = \"COMMERCIAL_BUILDING\",\n        COMMUNITY_CENTER = \"COMMUNITY_CENTER\",\n        COMPANY = \"COMPANY\",\n        COMPUTER_AND_DATA_SERVICES_CORPORATION = \"COMPUTER_AND_DATA_SERVICES_CORPORATION\",\n        COMPUTER_SOFTWARE_COMPANY = \"COMPUTER_SOFTWARE_COMPANY\",\n        COMPUTER_STORE = \"COMPUTER_STORE\",\n        CONCERT_HALL = \"CONCERT_HALL\",\n        CONDOMINIUM_COMPLEX = \"CONDOMINIUM_COMPLEX\",\n        CONSTRUCTION_COMPANY = \"CONSTRUCTION_COMPANY\",\n        CONSTRUCTION_MATERIAL_EQUIPMENT_SHOP = \"CONSTRUCTION_MATERIAL_EQUIPMENT_SHOP\",\n        CONSUMER_ELECTRONICS_STORE = \"CONSUMER_ELECTRONICS_STORE\",\n        CONTINENT = \"CONTINENT\",\n        CONVENIENCE_STORE = \"CONVENIENCE_STORE\",\n        CORSICAN_RESTAURANT = \"CORSICAN_RESTAURANT\",\n        COTTAGE = \"COTTAGE\",\n        COUNTRY = \"COUNTRY\",\n        COUNTY = \"COUNTY\",\n        COUNTY_COUNCIL = \"COUNTY_COUNCIL\",\n        COURIER_DROP_BOX = \"COURIER_DROP_BOX\",\n        COURTHOUSE = \"COURTHOUSE\",\n        COVE = \"COVE\",\n        CREOLE_CAJUN_RESTAURANT = \"CREOLE_CAJUN_RESTAURANT\",\n        CREPERIE = \"CREPERIE\",\n        CRICKET_GROUND = \"CRICKET_GROUND\",\n        CUBAN_RESTAURANT = \"CUBAN_RESTAURANT\",\n        CULINARY_SCHOOL = \"CULINARY_SCHOOL\",\n        CULTURAL_CENTER = \"CULTURAL_CENTER\",\n        CURRENCY_EXCHANGE = \"CURRENCY_EXCHANGE\",\n        CURTAIN_TEXTILE_STORE = \"CURTAIN_TEXTILE_STORE\",\n        CYPRIOT_RESTAURANT = \"CYPRIOT_RESTAURANT\",\n        CZECH_RESTAURANT = \"CZECH_RESTAURANT\",\n        DAM = \"DAM\",\n        DANCE_STUDIO_SCHOOL = \"DANCE_STUDIO_SCHOOL\",\n        DANCING_CLUB = \"DANCING_CLUB\",\n        DANISH_RESTAURANT = \"DANISH_RESTAURANT\",\n        DELICATESSEN_STORE = \"DELICATESSEN_STORE\",\n        DELIVERY_ENTRANCE = \"DELIVERY_ENTRANCE\",\n        DENTAL_CLINIC = \"DENTAL_CLINIC\",\n        DEPARTMENT_STORE = \"DEPARTMENT_STORE\",\n        DHARMA_TEMPLE = \"DHARMA_TEMPLE\",\n        DINNER_THEATER = \"DINNER_THEATER\",\n        DISCOTHEQUE = \"DISCOTHEQUE\",\n        DIVERSIFIED_FINANCIAL_SERVICE_COMPANY = \"DIVERSIFIED_FINANCIAL_SERVICE_COMPANY\",\n        DIVING_CENTER = \"DIVING_CENTER\",\n        DOCK = \"DOCK\",\n        DOMINICAN_RESTAURANT = \"DOMINICAN_RESTAURANT\",\n        DONGBEI_RESTAURANT = \"DONGBEI_RESTAURANT\",\n        DOUGHNUT_SHOP = \"DOUGHNUT_SHOP\",\n        DO_IT_YOURSELF_CENTERS = \"DO_IT_YOURSELF_CENTERS\",\n        DRIVE_IN_CINEMA = \"DRIVE_IN_CINEMA\",\n        DRIVE_THROUGH_BOTTLE_SHOP = \"DRIVE_THROUGH_BOTTLE_SHOP\",\n        DRIVING_SCHOOL = \"DRIVING_SCHOOL\",\n        DRUGSTORE = \"DRUGSTORE\",\n        DRY_CLEANERS = \"DRY_CLEANERS\",\n        DUNE = \"DUNE\",\n        DUTCH_RESTAURANT = \"DUTCH_RESTAURANT\",\n        EARTHQUAKE_ASSEMBLY_POINT_ = \"EARTHQUAKE_ASSEMBLY_POINT_\",\n        EATING_DRINKING = \"EATING_DRINKING\",\n        EDUCATION_INSTITUTION = \"EDUCATION_INSTITUTION\",\n        EGYPTIAN_RESTAURANT = \"EGYPTIAN_RESTAURANT\",\n        ELECTRICAL_APPLIANCE_STORE = \"ELECTRICAL_APPLIANCE_STORE\",\n        ELECTRICAL_APPLIANCE_STORE_SUB = \"ELECTRICAL_APPLIANCE_STORE_SUB\",\n        ELECTRIC_VEHICLE_CHARGING_STATION = \"ELECTRIC_VEHICLE_CHARGING_STATION\",\n        ELECTRONICS_COMPANY = \"ELECTRONICS_COMPANY\",\n        ELECTRONICS_STORE = \"ELECTRONICS_STORE\",\n        EMBASSY = \"EMBASSY\",\n        EMERGENCY_ASSEMBLY_POINT = \"EMERGENCY_ASSEMBLY_POINT\",\n        EMERGENCY_MEDICAL_SERVICE_CENTER = \"EMERGENCY_MEDICAL_SERVICE_CENTER\",\n        EMERGENCY_ROOM = \"EMERGENCY_ROOM\",\n        ENGLISH_RESTAURANT = \"ENGLISH_RESTAURANT\",\n        ENTERTAINMENT_CABARET_LIVE = \"ENTERTAINMENT_CABARET_LIVE\",\n        ENTERTAINMENT_PLACE = \"ENTERTAINMENT_PLACE\",\n        EQUIPMENT_RENTAL_COMPANY = \"EQUIPMENT_RENTAL_COMPANY\",\n        EROTIC_RESTAURANT = \"EROTIC_RESTAURANT\",\n        ESTABLISHMENT = \"ESTABLISHMENT\",\n        ETHIOPIAN_RESTAURANT = \"ETHIOPIAN_RESTAURANT\",\n        EXCHANGE = \"EXCHANGE\",\n        EXHIBITION_CONVENTION_CENTER = \"EXHIBITION_CONVENTION_CENTER\",\n        EXOTIC_RESTAURANT = \"EXOTIC_RESTAURANT\",\n        FACTORY_OUTLETS = \"FACTORY_OUTLETS\",\n        FAIRGROUND = \"FAIRGROUND\",\n        FARM = \"FARM\",\n        FARMER_MARKET = \"FARMER_MARKET\",\n        FAST_FOOD_RESTAURANT = \"FAST_FOOD_RESTAURANT\",\n        FERRY_TERMINAL = \"FERRY_TERMINAL\",\n        FILIPINO_RESTAURANT = \"FILIPINO_RESTAURANT\",\n        FINNISH_RESTAURANT = \"FINNISH_RESTAURANT\",\n        FIRE_ASSEMBLY_POINT = \"FIRE_ASSEMBLY_POINT\",\n        FIRE_STATION_BRIGADE = \"FIRE_STATION_BRIGADE\",\n        FISHING_HUNTING_AREA = \"FISHING_HUNTING_AREA\",\n        FISH_STORE = \"FISH_STORE\",\n        FITNESS_CLUB_CENTER = \"FITNESS_CLUB_CENTER\",\n        FIVE_STAR_HOTEL = \"FIVE_STAR_HOTEL\",\n        FLATS_APARTMENT_COMPLEX = \"FLATS_APARTMENT_COMPLEX\",\n        FLOOD_ASSEMBLY_POINT = \"FLOOD_ASSEMBLY_POINT\",\n        FLORISTS = \"FLORISTS\",\n        FLYING_CLUB = \"FLYING_CLUB\",\n        FONDUE_RESTAURANT = \"FONDUE_RESTAURANT\",\n        FOOD_DRINK_SHOP = \"FOOD_DRINK_SHOP\",\n        FOOD_MARKET = \"FOOD_MARKET\",\n        FOOTBALL_FIELD = \"FOOTBALL_FIELD\",\n        FOREST_AREA = \"FOREST_AREA\",\n        FOUR_STAR_HOTEL = \"FOUR_STAR_HOTEL\",\n        FRENCH_RESTAURANT = \"FRENCH_RESTAURANT\",\n        FUNERAL_SERVICE_COMPANY = \"FUNERAL_SERVICE_COMPANY\",\n        FURNITURE_ACCESSORIES_STORE = \"FURNITURE_ACCESSORIES_STORE\",\n        FURNITURE_STORE = \"FURNITURE_STORE\",\n        FUSION_RESTAURANT = \"FUSION_RESTAURANT\",\n        GALLERY = \"GALLERY\",\n        GARDENING_CERVICE_CENTER = \"GARDENING_CERVICE_CENTER\",\n        GENERAL_AUTO_REPAIR_SERVICE_CENTER = \"GENERAL_AUTO_REPAIR_SERVICE_CENTER\",\n        GENERAL_CITY = \"GENERAL_CITY\",\n        GENERAL_CLINIC = \"GENERAL_CLINIC\",\n        GENERAL_HOSPITAL = \"GENERAL_HOSPITAL\",\n        GENERAL_POST_OFFICE = \"GENERAL_POST_OFFICE\",\n        GEOCODE = \"GEOCODE\",\n        GEOGRAPHIC_FEATURE = \"GEOGRAPHIC_FEATURE\",\n        GERMAN_RESTAURANT = \"GERMAN_RESTAURANT\",\n        GIFT_STORE = \"GIFT_STORE\",\n        GLASSWARE_CERAMIC_SHOP = \"GLASSWARE_CERAMIC_SHOP\",\n        GLASS_WINDOW_STORE = \"GLASS_WINDOW_STORE\",\n        GOLD_EXCHANGE = \"GOLD_EXCHANGE\",\n        GOLF_COURSE = \"GOLF_COURSE\",\n        GOVERNMENT_OFFICE = \"GOVERNMENT_OFFICE\",\n        GOVERNMENT_PUBLIC_SERVICE = \"GOVERNMENT_PUBLIC_SERVICE\",\n        GREEK_RESTAURANT = \"GREEK_RESTAURANT\",\n        GREENGROCERY = \"GREENGROCERY\",\n        GRILL = \"GRILL\",\n        GROCERY = \"GROCERY\",\n        GUANGDONG_RESTAURANT = \"GUANGDONG_RESTAURANT\",\n        GURUDWARA = \"GURUDWARA\",\n        HAIR_SALON_BARBERSHOP = \"HAIR_SALON_BARBERSHOP\",\n        HAMBURGER_RESTAURANT = \"HAMBURGER_RESTAURANT\",\n        HAMLET = \"HAMLET\",\n        HARBOR = \"HARBOR\",\n        HARDWARE_STORE = \"HARDWARE_STORE\",\n        HEALTHCARE_SERVICE_CENTER = \"HEALTHCARE_SERVICE_CENTER\",\n        HEALTH_CARE = \"HEALTH_CARE\",\n        HELIPAD_HELICOPTER_LANDING = \"HELIPAD_HELICOPTER_LANDING\",\n        HIGHWAY_EXIT = \"HIGHWAY_EXIT\",\n        HIGHWAY__ENTRANCE = \"HIGHWAY__ENTRANCE\",\n        HIGH_SCHOOL = \"HIGH_SCHOOL\",\n        HIKING_TRAIL = \"HIKING_TRAIL\",\n        HILL = \"HILL\",\n        HINDU_TEMPLE = \"HINDU_TEMPLE\",\n        HISTORICAL_PARK = \"HISTORICAL_PARK\",\n        HISTORIC_SITE = \"HISTORIC_SITE\",\n        HISTORY_MUSEUM = \"HISTORY_MUSEUM\",\n        HOBBY_SHOP = \"HOBBY_SHOP\",\n        HOCKEY_CLUB = \"HOCKEY_CLUB\",\n        HOCKEY_FIELD = \"HOCKEY_FIELD\",\n        HOLIDAY_HOUSE_RENTAL = \"HOLIDAY_HOUSE_RENTAL\",\n        HOME_APPLIANCE_REPAIR_COMPANY = \"HOME_APPLIANCE_REPAIR_COMPANY\",\n        HOME_GOODS_STORE = \"HOME_GOODS_STORE\",\n        HORSE_RACING_TRACK = \"HORSE_RACING_TRACK\",\n        HORSE_RIDING_FIELD = \"HORSE_RIDING_FIELD\",\n        HORSE_RIDING_TRAIL = \"HORSE_RIDING_TRAIL\",\n        HORTICULTURE_COMPANY = \"HORTICULTURE_COMPANY\",\n        HOSPITAL_FOR_WOMEN_AND_CHILDREN = \"HOSPITAL_FOR_WOMEN_AND_CHILDREN\",\n        HOSPITAL_POLYCLINIC = \"HOSPITAL_POLYCLINIC\",\n        HOSTEL = \"HOSTEL\",\n        HOTEL = \"HOTEL\",\n        HOTELS_WITH_LESS_THAN_TWO_STARS = \"HOTELS_WITH_LESS_THAN_TWO_STARS\",\n        HOTEL_MOTEL = \"HOTEL_MOTEL\",\n        HOT_POT_RESTAURANT = \"HOT_POT_RESTAURANT\",\n        HOUSEHOLD_APPLIANCE_STORE = \"HOUSEHOLD_APPLIANCE_STORE\",\n        HUNAN_RESTAURANT = \"HUNAN_RESTAURANT\",\n        HUNGARIAN_RESTAURANT = \"HUNGARIAN_RESTAURANT\",\n        ICE_CREAM_PARLOR = \"ICE_CREAM_PARLOR\",\n        ICE_HOCKEY_RINK = \"ICE_HOCKEY_RINK\",\n        ICE_SKATING_RINK = \"ICE_SKATING_RINK\",\n        IMPORTANT_TOURIST_ATTRACTION = \"IMPORTANT_TOURIST_ATTRACTION\",\n        IMPORT_AND_EXPORT_DISTRIBUTION_COMPANY = \"IMPORT_AND_EXPORT_DISTRIBUTION_COMPANY\",\n        INDIAN_RESTAURANT = \"INDIAN_RESTAURANT\",\n        INDONESIAN_RESTAURANT = \"INDONESIAN_RESTAURANT\",\n        INDUSTRIAL_BUILDING = \"INDUSTRIAL_BUILDING\",\n        INFORMAL_MARKET = \"INFORMAL_MARKET\",\n        INSURANCE_COMPANY = \"INSURANCE_COMPANY\",\n        INTERCITY_RAILWAY_STATION = \"INTERCITY_RAILWAY_STATION\",\n        INTERNATIONAL_ORGANIZATION = \"INTERNATIONAL_ORGANIZATION\",\n        INTERNATIONAL_RAILWAY_STATION = \"INTERNATIONAL_RAILWAY_STATION\",\n        INTERNATIONAL_RESTAURANT = \"INTERNATIONAL_RESTAURANT\",\n        INTERNET_CAFE = \"INTERNET_CAFE\",\n        INVESTMENT_CONSULTING_FIRM = \"INVESTMENT_CONSULTING_FIRM\",\n        IRANIAN_RESTAURANT = \"IRANIAN_RESTAURANT\",\n        IRISH_RESTAURANT = \"IRISH_RESTAURANT\",\n        ISLAND = \"ISLAND\",\n        ISRAELI_RESTAURANT = \"ISRAELI_RESTAURANT\",\n        ITALIAN_RESTAURANT = \"ITALIAN_RESTAURANT\",\n        JAIN_TEMPLE = \"JAIN_TEMPLE\",\n        JAMAICAN_RESTAURANT = \"JAMAICAN_RESTAURANT\",\n        JAPANESE_RESTAURANT = \"JAPANESE_RESTAURANT\",\n        JAZZ_CLUB = \"JAZZ_CLUB\",\n        JEWELRY_CLOCK_AND_WATCH_SHOP = \"JEWELRY_CLOCK_AND_WATCH_SHOP\",\n        JEWISH_RESTAURANT = \"JEWISH_RESTAURANT\",\n        JUNIOR_COLLEGE_COMMUNITY_COLLEGE = \"JUNIOR_COLLEGE_COMMUNITY_COLLEGE\",\n        KARAOKE_CLUB = \"KARAOKE_CLUB\",\n        KITCHEN_AND_SANITATION_STORE = \"KITCHEN_AND_SANITATION_STORE\",\n        KOREAN_RESTAURANT = \"KOREAN_RESTAURANT\",\n        KOSHER_RESTAURANT = \"KOSHER_RESTAURANT\",\n        LAGOON = \"LAGOON\",\n        LAKESHORE = \"LAKESHORE\",\n        LANGUAGE_SCHOOL = \"LANGUAGE_SCHOOL\",\n        LATIN_AMERICAN_RESTAURANT = \"LATIN_AMERICAN_RESTAURANT\",\n        LAUNDRY = \"LAUNDRY\",\n        LEBANESE_RESTAURANT = \"LEBANESE_RESTAURANT\",\n        LEGAL_SERVICE_COMPANY = \"LEGAL_SERVICE_COMPANY\",\n        LEISURE = \"LEISURE\",\n        LEISURE_CENTER = \"LEISURE_CENTER\",\n        LIBRARY = \"LIBRARY\",\n        LIGHTING_STORE = \"LIGHTING_STORE\",\n        LOADING_ZONE = \"LOADING_ZONE\",\n        LOCAL_POST_OFFICE = \"LOCAL_POST_OFFICE\",\n        LOCAL_SPECIALTY_STORE = \"LOCAL_SPECIALTY_STORE\",\n        LODGING_LIVING_ACCOMMODATION = \"LODGING_LIVING_ACCOMMODATION\",\n        LOTTERY_SHOP = \"LOTTERY_SHOP\",\n        LUXEMBOURGIAN_RESTAURANT = \"LUXEMBOURGIAN_RESTAURANT\",\n        MACROBIOTIC_RESTAURANT = \"MACROBIOTIC_RESTAURANT\",\n        MAGHRIB_RESTAURANT = \"MAGHRIB_RESTAURANT\",\n        MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY = \"MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY\",\n        MALTESE_RESTAURANT = \"MALTESE_RESTAURANT\",\n        MANUFACTURING_COMPANY = \"MANUFACTURING_COMPANY\",\n        MANUFACTURING_FACTORY = \"MANUFACTURING_FACTORY\",\n        MARINA = \"MARINA\",\n        MARINA_SUB = \"MARINA_SUB\",\n        MARINE_ELECTRONIC_EQUIPMENT_STORE = \"MARINE_ELECTRONIC_EQUIPMENT_STORE\",\n        MARKET = \"MARKET\",\n        MARSH_SWAMP_VLEI = \"MARSH_SWAMP_VLEI\",\n        MAURITIAN_RESTAURANT = \"MAURITIAN_RESTAURANT\",\n        MAUSOLEUM_GRAVE = \"MAUSOLEUM_GRAVE\",\n        MEAT_STORE = \"MEAT_STORE\",\n        MECHANICAL_ENGINEERING_COMPANY = \"MECHANICAL_ENGINEERING_COMPANY\",\n        MEDIA_COMPANY = \"MEDIA_COMPANY\",\n        MEDICAL_CLINIC = \"MEDICAL_CLINIC\",\n        MEDICAL_SUPPLIES_EQUIPMENT_STORE = \"MEDICAL_SUPPLIES_EQUIPMENT_STORE\",\n        MEDITERRANEAN_RESTAURANT = \"MEDITERRANEAN_RESTAURANT\",\n        MEMORIAL = \"MEMORIAL\",\n        MEMORIAL_PLACE = \"MEMORIAL_PLACE\",\n        METRO = \"METRO\",\n        MEXICAN_RESTAURANT = \"MEXICAN_RESTAURANT\",\n        MICROBREWERY_BEER_GARDEN = \"MICROBREWERY_BEER_GARDEN\",\n        MIDDLE_EASTERN_RESTAURANT = \"MIDDLE_EASTERN_RESTAURANT\",\n        MIDDLE_SCHOOL = \"MIDDLE_SCHOOL\",\n        MILITARY_AUTHORITY = \"MILITARY_AUTHORITY\",\n        MILITARY_BASE = \"MILITARY_BASE\",\n        MINERAL_COMPANY = \"MINERAL_COMPANY\",\n        MINERAL_HOT_SPRINGS = \"MINERAL_HOT_SPRINGS\",\n        MISCELLANEOUS = \"MISCELLANEOUS\",\n        MOBILE_PHONE_STORE = \"MOBILE_PHONE_STORE\",\n        MONGOLIAN_RESTAURANT = \"MONGOLIAN_RESTAURANT\",\n        MONUMENT = \"MONUMENT\",\n        MORMON_CHURCH = \"MORMON_CHURCH\",\n        MOROCCAN_RESTAURANT = \"MOROCCAN_RESTAURANT\",\n        MOSQUE = \"MOSQUE\",\n        MOTEL = \"MOTEL\",\n        MOTORCYCLE_DEALER = \"MOTORCYCLE_DEALER\",\n        MOTORCYCLE_REPAIR_SHOP = \"MOTORCYCLE_REPAIR_SHOP\",\n        MOTORING_ORGANIZATION_OFFICE = \"MOTORING_ORGANIZATION_OFFICE\",\n        MOTORSPORT_VENUE = \"MOTORSPORT_VENUE\",\n        MOUNTAIN_BIKE_TRAIL = \"MOUNTAIN_BIKE_TRAIL\",\n        MOUNTAIN_PASS = \"MOUNTAIN_PASS\",\n        MOUNTAIN_PEAK = \"MOUNTAIN_PEAK\",\n        MOVING_STORAGE_COMPANY = \"MOVING_STORAGE_COMPANY\",\n        MULTIPURPOSE_STADIUM = \"MULTIPURPOSE_STADIUM\",\n        MUSEUM = \"MUSEUM\",\n        MUSICAL_INSTRUMENT_STORE = \"MUSICAL_INSTRUMENT_STORE\",\n        MUSIC_CENTER = \"MUSIC_CENTER\",\n        MUSSEL_RESTAURANT = \"MUSSEL_RESTAURANT\",\n        NAIL_SALON = \"NAIL_SALON\",\n        NAMED_INTERSECTION = \"NAMED_INTERSECTION\",\n        NATIONAL_ORGANIZATION = \"NATIONAL_ORGANIZATION\",\n        NATIONAL_RAILWAY_STATION = \"NATIONAL_RAILWAY_STATION\",\n        NATIVE_RESERVATION = \"NATIVE_RESERVATION\",\n        NATURAL_ATTRACTION = \"NATURAL_ATTRACTION\",\n        NATURAL_ATTRACTION_TOURIST = \"NATURAL_ATTRACTION_TOURIST\",\n        NEIGHBORHOOD = \"NEIGHBORHOOD\",\n        NEPALESE_RESTAURANT = \"NEPALESE_RESTAURANT\",\n        NETBALL_COURT = \"NETBALL_COURT\",\n        NEWSAGENTS_AND_TOBACCONISTS = \"NEWSAGENTS_AND_TOBACCONISTS\",\n        NIGHTLIFE = \"NIGHTLIFE\",\n        NIGHT_CLUB = \"NIGHT_CLUB\",\n        NON_GOVERNMENTAL_ORGANIZATION = \"NON_GOVERNMENTAL_ORGANIZATION\",\n        NORWEGIAN_RESTAURANT = \"NORWEGIAN_RESTAURANT\",\n        NURSING_HOME = \"NURSING_HOME\",\n        OASIS = \"OASIS\",\n        OBSERVATION_DECK = \"OBSERVATION_DECK\",\n        OBSERVATORY = \"OBSERVATORY\",\n        OEM = \"OEM\",\n        OFFICE_EQUIPMENT_STORE = \"OFFICE_EQUIPMENT_STORE\",\n        OFFICE_SUPPLY_SERVICES_STORE = \"OFFICE_SUPPLY_SERVICES_STORE\",\n        OIL_NATURAL_GAS_COMPANY = \"OIL_NATURAL_GAS_COMPANY\",\n        OPERA = \"OPERA\",\n        OPTICIANS = \"OPTICIANS\",\n        ORDER_1_AREA_GOVERNMENT_OFFICE = \"ORDER_1_AREA_GOVERNMENT_OFFICE\",\n        ORDER_1_AREA_POLICE_STATION = \"ORDER_1_AREA_POLICE_STATION\",\n        ORDER_2_AREA_GOVERNMENT_OFFICE = \"ORDER_2_AREA_GOVERNMENT_OFFICE\",\n        ORDER_3_AREA_GOVERNMENT_OFFICE = \"ORDER_3_AREA_GOVERNMENT_OFFICE\",\n        ORDER_4_AREA_GOVERNMENT_OFFICE = \"ORDER_4_AREA_GOVERNMENT_OFFICE\",\n        ORDER_5_AREA_GOVERNMENT_OFFICE = \"ORDER_5_AREA_GOVERNMENT_OFFICE\",\n        ORDER_6_AREA_GOVERNMENT_OFFICE = \"ORDER_6_AREA_GOVERNMENT_OFFICE\",\n        ORDER_7_AREA_GOVERNMENT_OFFICE = \"ORDER_7_AREA_GOVERNMENT_OFFICE\",\n        ORDER_8_AREA_GOVERNMENT_OFFICE = \"ORDER_8_AREA_GOVERNMENT_OFFICE\",\n        ORDER_8_AREA_POLICE_STATION = \"ORDER_8_AREA_POLICE_STATION\",\n        ORDER_9_AREA_GOVERNMENT_OFFICE = \"ORDER_9_AREA_GOVERNMENT_OFFICE\",\n        ORDER_9_AREA_POLICE_STATION = \"ORDER_9_AREA_POLICE_STATION\",\n        ORGANIC_RESTAURANT = \"ORGANIC_RESTAURANT\",\n        ORGANIZATION = \"ORGANIZATION\",\n        ORIENTAL_RESTAURANT = \"ORIENTAL_RESTAURANT\",\n        OUTLETS = \"OUTLETS\",\n        PAGODA = \"PAGODA\",\n        PAINTING_DECORATING_STORE = \"PAINTING_DECORATING_STORE\",\n        PAKISTANI_RESTAURANT = \"PAKISTANI_RESTAURANT\",\n        PAN = \"PAN\",\n        PARK = \"PARK\",\n        PARKING_GARAGE = \"PARKING_GARAGE\",\n        PARKING_LOT = \"PARKING_LOT\",\n        PARKING_LOT_SUB = \"PARKING_LOT_SUB\",\n        PARKWAY = \"PARKWAY\",\n        PARK_AND_RECREATION_AREA = \"PARK_AND_RECREATION_AREA\",\n        PARK_RIDE = \"PARK_RIDE\",\n        PASSENGER_TRANSPORT_TICKET_OFFICE = \"PASSENGER_TRANSPORT_TICKET_OFFICE\",\n        PAWN_SHOP = \"PAWN_SHOP\",\n        PEDESTRIAN_SUBWAY = \"PEDESTRIAN_SUBWAY\",\n        PERSONAL_CARE_INSTITUTION = \"PERSONAL_CARE_INSTITUTION\",\n        PERSONAL_SERVICE_CENTER = \"PERSONAL_SERVICE_CENTER\",\n        PERUVIAN_RESTAURANT = \"PERUVIAN_RESTAURANT\",\n        PETROL_STATION = \"PETROL_STATION\",\n        PET_STORE = \"PET_STORE\",\n        PET_SUPPLY_STORE = \"PET_SUPPLY_STORE\",\n        PHARMACEUTICAL_COMPANY = \"PHARMACEUTICAL_COMPANY\",\n        PHARMACY = \"PHARMACY\",\n        PHOTOCOPY_SHOP = \"PHOTOCOPY_SHOP\",\n        PHOTOGRAPHIC_EQUIPMENT_STORE = \"PHOTOGRAPHIC_EQUIPMENT_STORE\",\n        PHOTO_SHOP = \"PHOTO_SHOP\",\n        PHYSIOTHERAPY_CLINIC = \"PHYSIOTHERAPY_CLINIC\",\n        PICK_UP_AND_RETURN_POINT = \"PICK_UP_AND_RETURN_POINT\",\n        PICNIC_AREA = \"PICNIC_AREA\",\n        PIZZA_RESTAURANT = \"PIZZA_RESTAURANT\",\n        PLACE_OF_WORSHIP = \"PLACE_OF_WORSHIP\",\n        PLAIN_FLAT = \"PLAIN_FLAT\",\n        PLANETARIUM = \"PLANETARIUM\",\n        PLATEAU = \"PLATEAU\",\n        POLICE_STATION = \"POLICE_STATION\",\n        POLISH_RESTAURANT = \"POLISH_RESTAURANT\",\n        POLYNESIAN_RESTAURANT = \"POLYNESIAN_RESTAURANT\",\n        PORTUGUESE_RESTAURANT = \"PORTUGUESE_RESTAURANT\",\n        PORT_WAREHOUSE = \"PORT_WAREHOUSE\",\n        POSTAL_CODE = \"POSTAL_CODE\",\n        POST_OFFICE = \"POST_OFFICE\",\n        PRESCHOOL = \"PRESCHOOL\",\n        PRESERVED_AREA = \"PRESERVED_AREA\",\n        PRIMARY_SCHOOL = \"PRIMARY_SCHOOL\",\n        PRISON = \"PRISON\",\n        PRIVATE_AUTHORITY = \"PRIVATE_AUTHORITY\",\n        PRIVATE_CLUB = \"PRIVATE_CLUB\",\n        PRODUCER_COMPANY = \"PRODUCER_COMPANY\",\n        PROTECTED_AREA = \"PROTECTED_AREA\",\n        PROVENÇAL_RESTAURANT = \"PROVEN\\u00C7AL_RESTAURANT\",\n        PUB = \"PUB\",\n        PUBLIC_AMENITY = \"PUBLIC_AMENITY\",\n        PUBLIC_AUTHORITY = \"PUBLIC_AUTHORITY\",\n        PUBLIC_CALL_BOX = \"PUBLIC_CALL_BOX\",\n        PUBLIC_HEALTH_TECHNOLOGY_COMPANY = \"PUBLIC_HEALTH_TECHNOLOGY_COMPANY\",\n        PUBLIC_MARKET = \"PUBLIC_MARKET\",\n        PUBLIC_RESTROOM = \"PUBLIC_RESTROOM\",\n        PUBLIC_TRANSPORT_STOP = \"PUBLIC_TRANSPORT_STOP\",\n        PUBLISHING_TECHNOLOGY_COMPANY = \"PUBLISHING_TECHNOLOGY_COMPANY\",\n        PUB_FOOD = \"PUB_FOOD\",\n        QUARRY = \"QUARRY\",\n        RACE_TRACK = \"RACE_TRACK\",\n        RAILWAY_SIDING = \"RAILWAY_SIDING\",\n        RAILWAY_STATION = \"RAILWAY_STATION\",\n        RAIL_FERRY = \"RAIL_FERRY\",\n        RAPIDS = \"RAPIDS\",\n        REAL_ESTATE_AGENCY_COMPANY = \"REAL_ESTATE_AGENCY_COMPANY\",\n        REAL_ESTATE_AGENCY_SHOP = \"REAL_ESTATE_AGENCY_SHOP\",\n        RECREATIONAL_SITE = \"RECREATIONAL_SITE\",\n        RECREATIONAL_VEHICLE_DEALER = \"RECREATIONAL_VEHICLE_DEALER\",\n        RECREATION_AREA = \"RECREATION_AREA\",\n        RECYCLING_SHOP = \"RECYCLING_SHOP\",\n        REEF = \"REEF\",\n        REGIONS = \"REGIONS\",\n        REPAIR_SHOP = \"REPAIR_SHOP\",\n        RESEARCH_INSTITUTE = \"RESEARCH_INSTITUTE\",\n        RESERVOIR = \"RESERVOIR\",\n        RESIDENTIAL_ACCOMMODATION = \"RESIDENTIAL_ACCOMMODATION\",\n        RESIDENTIAL_ESTATE = \"RESIDENTIAL_ESTATE\",\n        RESORT = \"RESORT\",\n        RESTAURANT = \"RESTAURANT\",\n        RESTAURANT_AREA = \"RESTAURANT_AREA\",\n        REST_AREA = \"REST_AREA\",\n        REST_CAMPS = \"REST_CAMPS\",\n        RETAIL_OUTLETS = \"RETAIL_OUTLETS\",\n        RETIREMENT_COMMUNITY = \"RETIREMENT_COMMUNITY\",\n        RIDGE = \"RIDGE\",\n        RIVER_CROSSING = \"RIVER_CROSSING\",\n        ROADSIDE = \"ROADSIDE\",\n        ROAD_RESCUE_POINT = \"ROAD_RESCUE_POINT\",\n        ROCKS = \"ROCKS\",\n        ROCK_CLIMBING_TRAIL = \"ROCK_CLIMBING_TRAIL\",\n        ROMANIAN_RESTAURANT = \"ROMANIAN_RESTAURANT\",\n        ROUTE = \"ROUTE\",\n        RUGBY_GROUND = \"RUGBY_GROUND\",\n        RUSSIAN_RESTAURANT = \"RUSSIAN_RESTAURANT\",\n        SALAD_BAR = \"SALAD_BAR\",\n        SANDWICH_RESTAURANT = \"SANDWICH_RESTAURANT\",\n        SAUNA_SOLARIUM_MASSAGE_CENTER = \"SAUNA_SOLARIUM_MASSAGE_CENTER\",\n        SAVINGS_INSTITUTION = \"SAVINGS_INSTITUTION\",\n        SAVOYAN_RESTAURANT = \"SAVOYAN_RESTAURANT\",\n        SCANDINAVIAN_RESTAURANT = \"SCANDINAVIAN_RESTAURANT\",\n        SCENIC_RIVER_AREA = \"SCENIC_RIVER_AREA\",\n        SCHOOL = \"SCHOOL\",\n        SCHOOL_BUS_SERVICE_COMPANY = \"SCHOOL_BUS_SERVICE_COMPANY\",\n        SCIENCE_MUSEUM = \"SCIENCE_MUSEUM\",\n        SCOTTISH_RESTAURANT = \"SCOTTISH_RESTAURANT\",\n        SEAFOOD_RESTAURANT = \"SEAFOOD_RESTAURANT\",\n        SEASHORE = \"SEASHORE\",\n        SECURITY_GATE = \"SECURITY_GATE\",\n        SECURITY_STORE = \"SECURITY_STORE\",\n        SENIOR_HIGH_SCHOOL = \"SENIOR_HIGH_SCHOOL\",\n        SERVICE_COMPANY = \"SERVICE_COMPANY\",\n        SHANDONG_RESTAURANT = \"SHANDONG_RESTAURANT\",\n        SHANGHAI_RESTAURANT = \"SHANGHAI_RESTAURANT\",\n        SHINTO_SHRINE = \"SHINTO_SHRINE\",\n        SHOOTING_RANGE = \"SHOOTING_RANGE\",\n        SHOP = \"SHOP\",\n        SHOPPING = \"SHOPPING\",\n        SHOPPING_CENTER = \"SHOPPING_CENTER\",\n        SHOPPING_SERVICE_CENTER = \"SHOPPING_SERVICE_CENTER\",\n        SICHUAN_RESTAURANT = \"SICHUAN_RESTAURANT\",\n        SICILIAN_RESTAURANT = \"SICILIAN_RESTAURANT\",\n        SKI_LIFT = \"SKI_LIFT\",\n        SKI_RESORT = \"SKI_RESORT\",\n        SLAVIC_RESTAURANT = \"SLAVIC_RESTAURANT\",\n        SLOVAK_RESTAURANT = \"SLOVAK_RESTAURANT\",\n        SNACKS = \"SNACKS\",\n        SNOOKER_POOL_BILLIARD_HALL = \"SNOOKER_POOL_BILLIARD_HALL\",\n        SOCCER_FIELD = \"SOCCER_FIELD\",\n        SOUL_FOOD_RESTAURANT = \"SOUL_FOOD_RESTAURANT\",\n        SOUP_RESTAURANT = \"SOUP_RESTAURANT\",\n        SPA = \"SPA\",\n        SPANISH_RESTAURANT = \"SPANISH_RESTAURANT\",\n        SPECIALIST_CLINIC = \"SPECIALIST_CLINIC\",\n        SPECIALIZED_HOSPITAL = \"SPECIALIZED_HOSPITAL\",\n        SPECIALTY_FOOD_STORE = \"SPECIALTY_FOOD_STORE\",\n        SPECIALTY_STORE = \"SPECIALTY_STORE\",\n        SPECIAL_SCHOOL = \"SPECIAL_SCHOOL\",\n        SPORT = \"SPORT\",\n        SPORTS_CENTER = \"SPORTS_CENTER\",\n        SPORTS_CENTER_SUB = \"SPORTS_CENTER_SUB\",\n        SPORTS_SCHOOL = \"SPORTS_SCHOOL\",\n        SPORTS_STORE = \"SPORTS_STORE\",\n        SQUASH_COURT = \"SQUASH_COURT\",\n        STADIUM = \"STADIUM\",\n        STAMP_SHOP = \"STAMP_SHOP\",\n        STATION_ACCESS = \"STATION_ACCESS\",\n        STATUE = \"STATUE\",\n        STEAK_HOUSE = \"STEAK_HOUSE\",\n        STOCK_EXCHANGE = \"STOCK_EXCHANGE\",\n        STORE = \"STORE\",\n        STREET_ADDRESS = \"STREET_ADDRESS\",\n        SUDANESE_RESTAURANT = \"SUDANESE_RESTAURANT\",\n        SUPERMARKET_HYPERMARKET = \"SUPERMARKET_HYPERMARKET\",\n        SURINAMESE_RESTAURANT = \"SURINAMESE_RESTAURANT\",\n        SUSHI_RESTAURANT = \"SUSHI_RESTAURANT\",\n        SWEDISH_RESTAURANT = \"SWEDISH_RESTAURANT\",\n        SWIMMING_POOL = \"SWIMMING_POOL\",\n        SWISS_RESTAURANT = \"SWISS_RESTAURANT\",\n        SYNAGOGUE = \"SYNAGOGUE\",\n        SYRIAN_RESTAURANT = \"SYRIAN_RESTAURANT\",\n        TABLE_TENNIS_HALL = \"TABLE_TENNIS_HALL\",\n        TAILOR_SHOP = \"TAILOR_SHOP\",\n        TAIWANESE_RESTAURANT = \"TAIWANESE_RESTAURANT\",\n        TAKE_AWAY_RESTAURANT = \"TAKE_AWAY_RESTAURANT\",\n        TAPAS_RESTAURANT = \"TAPAS_RESTAURANT\",\n        TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY = \"TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY\",\n        TAXI_STAND = \"TAXI_STAND\",\n        TAX_SERVICE_COMPANY = \"TAX_SERVICE_COMPANY\",\n        TEA_HOUSE = \"TEA_HOUSE\",\n        TECHNICAL_SCHOOL = \"TECHNICAL_SCHOOL\",\n        TELECOMMUNICATIONS_COMPANY = \"TELECOMMUNICATIONS_COMPANY\",\n        TEMPLE = \"TEMPLE\",\n        TENNIS_COURT = \"TENNIS_COURT\",\n        TEPPANYAKKI_RESTAURANT = \"TEPPANYAKKI_RESTAURANT\",\n        TERMINAL = \"TERMINAL\",\n        THAI_RESTAURANT = \"THAI_RESTAURANT\",\n        THEATER = \"THEATER\",\n        THEATER_SUB = \"THEATER_SUB\",\n        THEMED_SPORTS_HALL = \"THEMED_SPORTS_HALL\",\n        THREE_STAR_HOTEL = \"THREE_STAR_HOTEL\",\n        TIBETAN_RESTAURANT = \"TIBETAN_RESTAURANT\",\n        TIRE_REPAIR_SHOP = \"TIRE_REPAIR_SHOP\",\n        TOILET = \"TOILET\",\n        TOLL_GATE = \"TOLL_GATE\",\n        TOURISM = \"TOURISM\",\n        TOURIST_INFORMATION_OFFICE = \"TOURIST_INFORMATION_OFFICE\",\n        TOWER = \"TOWER\",\n        TOWN = \"TOWN\",\n        TOWNHOUSE_COMPLEX = \"TOWNHOUSE_COMPLEX\",\n        TOWN_GOVERNMENT = \"TOWN_GOVERNMENT\",\n        TOYS_AND_GAMES_STORE = \"TOYS_AND_GAMES_STORE\",\n        TRAFFIC = \"TRAFFIC\",\n        TRAFFIC_CONTROL_DEPARTMENT = \"TRAFFIC_CONTROL_DEPARTMENT\",\n        TRAFFIC_LIGHT = \"TRAFFIC_LIGHT\",\n        TRAFFIC_MANAGEMENT_BUREAU = \"TRAFFIC_MANAGEMENT_BUREAU\",\n        TRAFFIC_SIGN = \"TRAFFIC_SIGN\",\n        TRAFFIC_SIGNAL = \"TRAFFIC_SIGNAL\",\n        TRAILHEAD = \"TRAILHEAD\",\n        TRAIL_SYSTEM = \"TRAIL_SYSTEM\",\n        TRAM_STOP = \"TRAM_STOP\",\n        TRANSPORT = \"TRANSPORT\",\n        TRANSPORTATION_COMPANY = \"TRANSPORTATION_COMPANY\",\n        TRANSPORT__CENTER = \"TRANSPORT__CENTER\",\n        TRAVEL_AGENCY = \"TRAVEL_AGENCY\",\n        TRUCK_DEALER = \"TRUCK_DEALER\",\n        TRUCK_PARKING_AREA = \"TRUCK_PARKING_AREA\",\n        TRUCK_REPAIR_SHOP = \"TRUCK_REPAIR_SHOP\",\n        TRUCK_STOP = \"TRUCK_STOP\",\n        TRUCK_WASH = \"TRUCK_WASH\",\n        TSUNAMI_ASSEMBLY_POINT = \"TSUNAMI_ASSEMBLY_POINT\",\n        TUNISIAN_RESTAURANT = \"TUNISIAN_RESTAURANT\",\n        TUNNEL = \"TUNNEL\",\n        TURKISH_RESTAURANT = \"TURKISH_RESTAURANT\",\n        UNRATED_HOTEL = \"UNRATED_HOTEL\",\n        URUGUAYAN_RESTAURANT = \"URUGUAYAN_RESTAURANT\",\n        USED_CAR_DEALER = \"USED_CAR_DEALER\",\n        VALLEY = \"VALLEY\",\n        VAN_DEALER = \"VAN_DEALER\",\n        VARIETY_STORE = \"VARIETY_STORE\",\n        VEGETARIAN_RESTAURANT = \"VEGETARIAN_RESTAURANT\",\n        VENEZUELAN_RESTAURANT = \"VENEZUELAN_RESTAURANT\",\n        VETERINARY_CLINIC = \"VETERINARY_CLINIC\",\n        VIDEO_ARCADE_GAMING_ROOM = \"VIDEO_ARCADE_GAMING_ROOM\",\n        VIETNAMESE_RESTAURANT = \"VIETNAMESE_RESTAURANT\",\n        VILLA = \"VILLA\",\n        VOCATIONAL_TRAINING_SCHOOL = \"VOCATIONAL_TRAINING_SCHOOL\",\n        VOLCANIC_ERUPTION_ASSEMBLY_POINT = \"VOLCANIC_ERUPTION_ASSEMBLY_POINT\",\n        WAREHOUSE_SUPERMARKET = \"WAREHOUSE_SUPERMARKET\",\n        WATER_HOLE = \"WATER_HOLE\",\n        WATER_SPORTS_CENTER = \"WATER_SPORTS_CENTER\",\n        WEDDING_SERVICE_COMPANY = \"WEDDING_SERVICE_COMPANY\",\n        WEIGH_SCALES = \"WEIGH_SCALES\",\n        WEIGH_STATION = \"WEIGH_STATION\",\n        WEIGH_STATION_SUB = \"WEIGH_STATION_SUB\",\n        WELFARE_ORGANIZATION = \"WELFARE_ORGANIZATION\",\n        WELL = \"WELL\",\n        WELSH_RESTAURANT = \"WELSH_RESTAURANT\",\n        WESTERN_RESTAURANT = \"WESTERN_RESTAURANT\",\n        WILDERNESS_AREA = \"WILDERNESS_AREA\",\n        WILDLIFE_PARK = \"WILDLIFE_PARK\",\n        WINERY = \"WINERY\",\n        WINERY_TOURIST = \"WINERY_TOURIST\",\n        WINE_BAR = \"WINE_BAR\",\n        WINE_SPIRITS_STORE = \"WINE_SPIRITS_STORE\",\n        WINTER_SPORT_AREA = \"WINTER_SPORT_AREA\",\n        YACHT_BASIN = \"YACHT_BASIN\",\n        YOGURT_JUICE_BAR = \"YOGURT_JUICE_BAR\",\n        ZOO = \"ZOO\",\n        ZOO_ARBORETA_BOTANICAL_GARDEN = \"ZOO_ARBORETA_BOTANICAL_GARDEN\"\n    }\n}"
  },
  {
    "path": "react-native-hms-site/src/index.js",
    "content": "/*\n    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\")\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n*/\n\nimport { NativeModules } from 'react-native';\nimport LocationType from './constants/LocationType';\nimport HwLocationType from './constants/HwLocationType';\n\nconst { HmsSite } = NativeModules;\n\nHmsSite.LocationType = LocationType;\nHmsSite.HwLocationType = HwLocationType;\n\nexport default HmsSite;\n\n\n"
  }
]